{"_id":"@xdn/core","_rev":"3290-1f58c45adfbecf3e1365ebfaaebcdb6f","name":"@xdn/core","dist-tags":{"latest":"2.53.6","next":"2.53.6-next-1641895591-f1d5f1649.0","latest-v1":"1.48.2","next-v2":"2.53.5-next-1641201537-c1cdb4568.0"},"versions":{"1.2.0":{"name":"@xdn/core","version":"1.2.0","main":"./index.js","license":"UNLICENSED","bin":{"xdn-serve-assets":"bin/xdn-serve-assets.js"},"scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"npm run build; cd ./dist; npm publish --access public","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.2.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-Q8anlLphXXgDgRFKikHFyok0HWfyRLAQYux2DVz+5isTebBlZ9TQIHZAvajeEk5G07gzUXOm0P7/YRRxxjgpzg==","shasum":"68cf9d562836002562401f1ec3e18e44969363da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.2.0.tgz","fileCount":41,"unpackedSize":202287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeL69CRA9TVsSAnZWagAA/yYP/2eM+I4xlUuaaTTHuZBL\njz8q0szR8T2Huu1OQwK3IZ8s30tV+Rkwr0cRrHgolWkoG/EhSHHg0OkV4+2/\nfFZedSWFm89XqZHhPljLFVqyVtFqyn5p2iDSWINRpmSjSMHSF/xyGSakfW/F\nzDahvzzouH/0op6iklxQI+KpN5QXh7rX2vdWBTjlnEXIfp6OQd4cHvyE+m/b\nZDyX8nACc+FMoi+ut5RfKJ6bxArX7kBSQCJ8ntQkZ1XB2URDOdppCCTKgssY\nwBIkUSzJdzDyD4Jl3wkxuoOmnOTPSHNP0Rt2hmD4A7VHtV1akK3J9YLtHDBP\nyA/YUmTniK7T4+dORLxT2loDgmb+LmsrqPSJV9ohuYt7DP4HAlRqBhItd+rg\n7hjxrljJwyPIwcmZ9Oxr2mJbXMSVeDzQ6xfyD0QzEqlDXWIHgko7aX0ZzNcC\nitdfBHpLautnV4qlwWWUQhfsFN97LEN/Q+dZl64zZWbJloceqTSHBQqNLgIA\n9rXmNPs/bDmn+Z7Btq7xMfJmBdYDpTF6B3eqyk7rZoyw0e3ufVZ4bT8Dhj38\nXlTc4DPmByW7N9/oSFv7DZyAturgNJBpQOcHgvSDK1Tk3R+DveP5qy7tAka3\nFZ+OFknPP1a4yeRqBasxAWZvt66HeUtMH+VM5dyXHdXCjPojJhBIbu5ZsPAW\nvYL/\r\n=iKuE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzRPeWmDUY7qzCa/ETaawNqc5UTZNE507RS/LiGNHdQAiB9H3xtJN6mYuk71kiiIlA7V4TPIkg35bVm3tT5W2dewg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.2.0_1584971453070_0.16326988193179037"},"_hasShrinkwrap":false},"1.2.1":{"name":"@xdn/core","version":"1.2.1","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"npm run build; cd ./dist; npm publish --access public","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.2.1","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-G5cYYQSbpX3kC7ztp047OyeH/t8ztqnpb7U7pQrNknt//2iqtcy/WCAJbftl2+vDIuikATRbBZYJ5UAhB60j8Q==","shasum":"60e35e3d498281d720e485e41bb65bf23b420a74","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.2.1.tgz","fileCount":41,"unpackedSize":202219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeQi/CRA9TVsSAnZWagAAtW4P/RWGBZGUgz0JcufvQwEJ\nF5fIE/DBH0loBuclGkhmLu7eVV/Q22goLa7Wzi6KSCYCsQ/TN6q648pC74UZ\ndHXCbtYOsmEQ34mxqIGIk2gYye0N/Fh2BWbLDopVtSPbDKS1eUAGsZxjR0PQ\nUc6Te6dB+QIBt6j6k76uonTB+PyPXY8XDXldSNlTLegyTSUN1kqQgPxTpIoT\ndNisqIcKwhNAPsA5/INJZg2Pu9A3naqsoi4HqNnQVxx7iwvHr30UhLH6XraD\nhZHphRLRV7Rm2SD3Fz/FDAiBdRFgpOrAfP1pI3dacjl58IXPIUvk06AzlSPK\nHMWHECqAf5+QiF3/8STsEbbMeBIcm0hGnAYmkxLhG5JhGWfjZWLFG2PdOyAq\nHZpKYvhbSosI7ET5RBUatdioPzLhGjeUrDtS75GyimZB1hP3pwRBUDOj2WZ+\nQRV9Mk3+qbYv/PcU32C2q13MRzcfMqCAM86JsHclP2CvNcjR3FwzanJLIVtg\nrdTvads/02h+IxKD00ETaD1R+a3NA8BTDoIod47R3XOjPjnZWLgqOwoB6jv7\nsbdAzmMm1aeHl+uNBCJY2qfiSpEvQA/mRhxtvSV32QX/HRTJO+qaWdjRQhr0\naEwaYvgDlJfr29YOO5dI6xUMDBGnzoxi/i+C3dPhGk1NxlotoI+RBLq2CCCF\nHmwm\r\n=aenG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBkCluRlmWR6h99yaF8Z4Lt/1ZYbpN8EqL3uKTmVikT6AiBKu8YgqrJsFaFce8CLddSP6yXi1IpjUzn8Jj4MlQxE9Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.2.1_1584990398704_0.41655006615460155"},"_hasShrinkwrap":false},"1.2.2":{"name":"@xdn/core","version":"1.2.2","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"npm run build; cd ./dist; npm publish --access public","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.2.2","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-/gx/Ospk8Roa1XsQk4F6jIJXtE9/HEFMDBtKF96FlUyEdIoJqzke83QKIcNutiRFC01vPMHg8OIGaqHr7qy2tw==","shasum":"8e79ee637690a7d56301a3ad5d5bbfc5c8f59d58","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.2.2.tgz","fileCount":41,"unpackedSize":202219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeSVpCRA9TVsSAnZWagAA+/kP/3YMNTFGiFhmHgFtFDMe\nMldmSFy82sBMhG0pteTR6sp0ryK9DGxPolYMiNy33DNJ7eSmXdBLWwfGDmQl\nW6udUsIPQ9xocbj4B217wH7f/hFufLkElEkgoUfXk6s5FYHxaPIY7Kk4pvMQ\nhXGapwvoy0vxSFszhCwyggQxX97a28T/5eiMDoQWaac/jmHGO9MhkV1ogG5N\nr3paTH/ALCmE2IkaN4FHCa9mHvh4Tg85nWRZeZZH0hWmN1uNZVDiuGi1doBO\nnOyOh4aGo7Is0np5ddDODvWfRDYbTeXWV90z1DGcIkItQiyRt0TQ5yKebgwu\nj+ul57N+hHYc40DoGIYGrgSaUH6+Zsn9CwKlU/1CfIcUDw+HjWD3FMGfX6ua\nwS5lC4VD/GXtdSg5WMSFx5QpzPknDouzAo5lRUo+9gVh/5aJhXgOSICOPBtw\ngZRdInmSTMk4LMWC83sIuunpHmQPMXLDbuUzxHZ0vb4tXmweuHj3UuBR5Qbr\n+ssIpfH5hcrbV/L77Mh3KySNtJNfjClAiCtnP4TJJYDPFutVt3Lo6+9Mmrnr\n+R7iAO+oGmY+wAz6ZXgR2AYj0yE1zg6RutCSDr3pv68jroEOrse2IwDtcgoN\n9MO+DqaPFZpII2e9fkWAiIJn1um37hKXeTvJyrLRZNxrfKsr+RtFK/I1jXGl\n1UZ+\r\n=E1kj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAEdZ26UBGCQWAU0Cx3V4VuFJQLqCjh8fhF3GhhGtLXWAiEAzP0xcIKPH8rbWqwTbm5ZvUnGiLrMeagidtHo0fG6IOk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.2.2_1584997737332_0.884709207642369"},"_hasShrinkwrap":false},"1.2.3":{"name":"@xdn/core","version":"1.2.3","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.2.3","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-TmLPw3n/DKh7/YLtdmqHrjIyE9OZhLej0kR7Uo/q23xVE73mC5qAv8RaYjMYxxlJE6akzMcrK7dPaMIK7NcO+w==","shasum":"e5a1dd370ca1512181e13f14338d2a4d32cd1d96","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.2.3.tgz","fileCount":41,"unpackedSize":202204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeSrSCRA9TVsSAnZWagAAjRsP/RWwaF9FxakqvGu8XJTL\nHUehFaNlMDimf3mAQMpPI649NfbZqooVCgnkrzyY13oR/u5+8PcJK/XxfzMZ\nV+UXGiUJUrJeC2I99/N5APhZI9wU2m9TwQc5pQnF//62W4eHC/kVkFNUOr+3\nbjWBSADZtmh4R5OE4BE/MF3hwckKUhjT022n/HaVR1mlBgIwluJLoaKWI0T4\ngloET5tJoHwbvBA+MVXPv54FNUrEIvA0IUaCSdE3Vkd807u9++ptd6Oh3BeU\nsJbwTug91tKDl69VL8Y9EjsbThqHshdTKfVNeruhfXOzfINnVSOSKRUqA7A6\nmojLWbusyiWhJbLzqWgPLaHVCmkBXK53vKmTzhFp4V7madQErUPl/oncBRBk\nQbD3JoGiE/xsNYgkjJSm3zCWihZ5qyhSkw7y7bFpf4Kck07sUQWXmgCAzvAM\n9TVEN3YyRCaddGBmoEkGxatWV1ECoT1AMkdURWugz2Mp5S4ciJYKOzLdXBnc\nY8zxsmhmdz2EryU7wlucEYh6+g60oTYhsUWWxiFm6KZx+OGx4+OrPQitMp03\n4Do2gCBY0QVBkLOqptTvShsGZYDlyZoJwBZmYnDHBA0vaNWLv6FuNRAR7kX0\nRdeDX+VkmenUDrM9roir0k+LM23fvtcLsN2+whCvX93daQsZt0cDfvVBgxRv\nReVq\r\n=pavp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAtRb6RE/NJ5lzuG29MEy4pO2NwYT92966zcccCmTdUaAiEA/VSAwarg+4k6y5HOa1QZI0BJ3ojF371h2ofQxLDdikU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.2.3_1584999121738_0.9058561142936494"},"_hasShrinkwrap":false},"1.2.4":{"name":"@xdn/core","version":"1.2.4","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.2.4","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-geYsb5Fpiftps+oMKkXE0KV6goa4bcVABiwTj1/FjS2O6Oi+2U/SXzwh8y4604RI3hJUM0HhMfGSko7t0ZEJ+g==","shasum":"67cf659caa53aefd492ceacb1d2ad690b7b56a3d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.2.4.tgz","fileCount":41,"unpackedSize":202204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeTV2CRA9TVsSAnZWagAAWfkP/iH5b+H0XAzxqURyp4h1\nNGxTliw1G9uh7ZCE+oh7ViHAqHZUPP6pnGkherGb78rYlE2IBUewKUIIFBXY\nfv3q6ckPQkdCdBBawuYCKq2B+vOVG/FOWaBKYdOADwVdLiSL8ZfpYxA+rXUu\nrwKa2bIaovXd/F3pkvK6gp4pgFjgeDHRcn5kebfeP2dZcXn+/di/5ArFvKgF\nWL0mUHS41U3gQDh0TRrIBe/UqOZ2vRcbRmqyvUH9D6rTbtsueZaDcT3nAlhO\neUQgBVFKunqeGgInAEGHW/9+4Ey+FG+oVQ2Oy2BNTHtFPTj1WTyXbjvPYTju\nGI8tLF3Okr/Q3IflHDNPt/OPYbrh1P71qKVHASzCUFQ/2hveWd31OdX7YITW\nuzDpR3Tv6VFEhdSpj5UtqY+9e7v8St8vJb5zDDrDmFF4imHHzEIgQjQfTWlB\ndpiGh4paDOdKPbttXOQjLWTTVoGs7PCUf+e8Q18yOsDxwHo1npot8igf/Fny\nFJybOD+6CKWIch9alyAE/YJKJXDDS5GCI6XDCUJo338r1OfMnT7/Y+YxLxeb\nY+/XBv7gch1dDlasYhTuQK6GsXy3Xq7NLrV79d/A7192cTSorjFKNka9GG1O\nBsNLP710oIK6bTfpJLdFEkJdkvlff0LGZx4vUx6CFz4bXhMXwaeyTgwXViyd\nEb1+\r\n=bbDl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDiyujF5BXYARRdDmYCoGcpuAums+zKeVIz84kRDH5zJAiBGRB7A3pA2tx+lSTt/0gL9deq/RwBf6DR+BsQHIyI4CA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.2.4_1585001846411_0.7898531592403033"},"_hasShrinkwrap":false},"1.2.6":{"name":"@xdn/core","version":"1.2.6","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.2.6","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-8TzzhngZYh4a5RFzTxvZ1xba1qOS7DauoCPJLA/qXjlT4tUsN6rb9GgznQTHYN4u7EpTnUD7qw8NFSkkU+qt9g==","shasum":"971ced5c8272857fe7c856691f4e2e60dcac31c9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.2.6.tgz","fileCount":41,"unpackedSize":202204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeehiUCRA9TVsSAnZWagAAduUP/R6RSsblrqGncCQ7IGMD\ncpK1cMjMhGhAr6aUrZ4MoBD9X609jgUgxdw399UJzLWI/RNgy7jC70IkbP6L\nB4VI2HTPLoMeFl5o5DBtC4pbyGyQWXNdf8OsNuQa4eqdfs6rWxp20G/gnts8\nLocyZ7mu2R9XBoUqnGc1cLw+6zNl1szRNA0+RQClys7D4lnNHylnNnfHR2jE\nRkb67eAxQFbvIa2xWC88PIJ9g1rdAAMLEExJWT+CbbVEjsk99ntxrUOJPwIT\nqc2jWB/s4owTK3TACM/TmNCfEXswi9YM9ToNyn6LKqz3BUVo1QTVneflTiI+\n3rNn26dAAqFN/FYLQ6JZ9TXVrEyxtgrD+7EPHz0sadBiHFGtyW4Z8vbdRNB5\ndujpSrLnvqBr2R65av8ZzYsUByMwcXMRFHTfCeirQFhDOt62CWpSujdWrbRZ\n/L9e61Z22XGxxGmQnppKsVIce+D37GpBaUddRXpsHHD3U0qQRv+3LZnxuhFn\na3RiE0ycZzHfD4ptJ3Qn7f575IRfb1zdZbvpSh2+O2ixA1nUeEYOq9R5GJCm\nTcILPphtNYH1OluAdnepe/ymPcZSqnqXQmZIgY9T5vKAv78C3Ep/xfb47IkG\nmjgjGi3Bda7IsdnVPZqLXOu5KYy2wUBsvyua4/KpmoiZqZih2+6QvVKdqQ2n\n+s+/\r\n=LgUx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRogmasEVINw7TFQLj20p/toGE8BDHwNmjY41YzgdJdAIhAPoIf8JB2XYZ+DurGdVeoCp4rMB25+vr2lxCnSrfkxEQ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.2.6_1585059987938_0.9044715893849382"},"_hasShrinkwrap":false},"1.3.1-next-fabc22b.0":{"name":"@xdn/core","version":"1.3.1-next-fabc22b.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.3.1-next-fabc22b.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-v53PO1hFfFVXsrERFdXd+i5gbY7Cw4haOLeWwo2TL77j8jp0CsdLKBt6b3sgb6w8BQ/SaVHVkfzIsNJ6iGzbNw==","shasum":"704e514f487ac0cc6f41764c98d759493af4cc3b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.3.1-next-fabc22b.0.tgz","fileCount":41,"unpackedSize":202272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJee3A5CRA9TVsSAnZWagAALVsP/ia9MawiYvxknW4wpb1J\nGTW7AAAGpnQxgU5eq5n4goaT/x3/tvZ4Fr1FLCVkCB5LMYygjLsZ1HeB1pBg\nS+eWSoBrIy1AccLB/7M73FWKRKI3tqE+uoabH2crzi4Mvbs+Q0jev9/QcLz5\nlLBotAiyOD7IiSgfu7B9s5aNxjaamDTXDkXh9UInnYgDfv9Yq8ljEUB1QMLj\nz32EEPayekBuz4jh0yR2IHtJqD8MqUXLNN9GcVDrdMne2TrlJLSvjgd67mFd\nB7tCsllfd+W75z97L80e2siTryY94ivPxZxBwUsbEizkem0XI4AvnY8fkgeT\nwizoAyFdWRhRskiDxu3BajfktZ5qLtO9BBM0XueB/VtLof+zK9SFwO2AWGh/\nNEtcHTPnyt8Ocr4g5+s4tYd3cju1TyQKtLF35BhHj/QClbJea4IOc3twZRWX\n5WEFSZF/nHVR710h+dZaj1V4KfuZUCkerrPwHj+8hVI6K/vHfPseNE5j4wt7\nfBI3nV9zUh29EtZDX23obLcoDfJYMD37babG7+VnVQst7iBfX4soOOEqzbo+\nMOaGuCW5s5RuQ2nuzgp+FJnEAqbncT0y7y9QazmUdEixPhv/QeoIop8K2hZQ\nCNFx80pABb2j10oG1YldKpbRpoXH5aVDfgxfODporUAlM9teK15zXLB1/eG6\nBGF3\r\n=WYjT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHareaKlOjQnqgUQ4dnN02qdxpyQuFhZCRCGujZKcnG4AiAmGhlRqAZGJcN2DMRZCrfXpot12upARvnBufG40gxg9w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.3.1-next-fabc22b.0_1585147961450_0.7317930090390476"},"_hasShrinkwrap":false},"1.3.0":{"name":"@xdn/core","version":"1.3.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.3.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-wVOyIM2AGxIJMActpuzshVnkkDRkq6+6Paf5DYeVpnyeUYbcINfSqhaYhxFnhKIFEiSyM52uKWMRB76KtmcSVA==","shasum":"6b4bcf979a3dc9cc2202c51cbc5ea0e8dcf31022","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.3.0.tgz","fileCount":41,"unpackedSize":202216,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJee3I/CRA9TVsSAnZWagAAF4cP/2lZ7eNElpfXrWtleF2l\nmqPJln4rUJaoHehivIL3JP37iWnBC5Rl8ah1txO4FLgq4ou8XJGqsOANxbEt\n/ATUcbL5I8+hEyUHQwy6rvL8RNzluAmguSXbq5Ls3ctgn0xMlnXiSgCdidA+\nY+r3QVdBWKAAjNPJNQ0URb3KZesX4VOO+g9a7kNQpKAy1vzV5JBo+vt0yOt5\nu/BS2wjmE0e3nvb1VtdMCvLudr49dsMK4CAUH/uYp3toL3RvfiV2MvfY/Ksl\nPGZajjalhHnj6vKoMoeB6HErtA9Kjmrd5c+xH0B1ELKySb1XUVm8K1qrbqPs\nx70snnTBFJa5XtN6xzAatp40ni/HwShBsDwFBW0sq6CHMqcNoLYsJAJqDM6n\n7x4/cNAEWJHjUGMQE97X5W+MjkkrrIvLmD4TmLRSeFAshc2xvs6Dm0y01VlI\nQppFGCNb4U0oLvTNNVgsp7HokXEKRAJiJu+KxLlxE76EVtxs2zm0NHRpTRuN\nEJOJ+ouc3E0mbmUD5VXvSb+CiAwcHhHgoL8RnAkFV62d16tQT+WKJsgfsS7r\nzPvDnEGXXplNOFQkFpfbV/Y5mF3elt6Z5iywAIVkNsOsaduTqWMw2BETFtqg\n4NtmMQDAEFty78XTE6QzFDkk0T0UzrIvNa2N+DJBOqo9TJKnzrvVvfu38xXY\nxpD3\r\n=x8mb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6E30oSPWDAfc8gYSjLIGCaGm5jjo6THNPszNeYoPbJQIhAMzA08ht9wYjOHvAyGQLtVGAMaNb2ugngRab5o3chJBD"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.3.0_1585148479407_0.4929545794121257"},"_hasShrinkwrap":false},"1.4.0":{"name":"@xdn/core","version":"1.4.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.4.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-vVH9+9fAPOJDpcXbzNOo8CPZccocvukmB0f50/EEjMcMh+LmXzdDWXPBMSU4LCg0gxdNTKzEz8diTEEfPLc7/w==","shasum":"61f886b2120c99b6b3e41dbcd7b0c85258b8478e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.4.0.tgz","fileCount":41,"unpackedSize":201732,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJee6d7CRA9TVsSAnZWagAAIa0P/jPb1kYIZmRClI/JkFsY\nxDzkx+qVgHusl3NTZZAxm/OxUFkrKlCMsf5bpW0VTbWhym6Faaq2bAjx9ECx\nMC3PVYeyUMkzuWzUJhq4xX5M/5Akp+PvxY/+vJdcmnhMwaCCS+P5kGP/V1k8\nhGGoq7cGZtdyqcAcBx574/YYu9YWCCSLC2c7xfxdHK2/pu035447qBPpOX57\nrMBHlmKPp5xoUTHR21L3Id9zArrwpT6xao9ONIKJp7QAGkFzZQ+sniwy42bk\n10CzqtL5M0TP7DQjUxWkrwj3pCa5MpP2ttjUb5K6B03MuEp0bmlmZ5eQJvTb\nW+2+2STaRVoeHoq4qPhfiwlOvO11pINDAUOXakMW+Z5lzMbNQYV6ZbfnZwz1\ngKvTjU9GEySF5twi2mz/fBZ0+CC0JgLxNCMYYlxcCNF88wFq2KUUkHNNR+20\ntqwH3KAyNnbGEP8dEwJJx6BJcgUkZV1QpYfGJjnM5fBx9fDGnd3M2RpuHoE+\n5LMueYSCaEBNUvWgXAhngINqyF8xlcxJpWg6HqIRtiDUa7wlGSS0nL0F6QtM\n83++7oNTU2qohw+iefUrETSjtv7ykOeUYw6jx0b0znluHJsIwdcXCymv1tzf\nSZUndMDgmeUxxnmKFgfFqhgSLDiA2tAj1HUBmpPmLyceEK6dFNluh6kVovZz\nVvBP\r\n=SB6y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCb5Jw20M1si7K02hnPDKZ+btxKhriD3DggsK4jpmw/oAIhAJ8kwREpny4nA0ePu+2nioAc1D398KK/QI+6vXMWeoM6"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.4.0_1585162107096_0.993398515189549"},"_hasShrinkwrap":false},"1.4.1":{"name":"@xdn/core","version":"1.4.1","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.4.1","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-GCsPPjnN6tKkaCmMYoFI4QEmyseTFwjxQfsSwbcyc9I/+l+gXBzuC5EfnoZe8TUm/futgnfM8JlLMWWCQZXmyQ==","shasum":"04743d2ff8881775486bbaf45afeedfe136398ba","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.4.1.tgz","fileCount":41,"unpackedSize":201732,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJee718CRA9TVsSAnZWagAAf5kP/2inORGV9Str1qZ5GI8b\nYiPS4A/f4jb65CjfEC6LPWgj7K6+OlgqMvjVie6fO1Kawjvc5crMhAkwtoa2\nXI1QatBomlAQckkCVA1c+olzTX6M3PsQ0lisUKcP+fOMFL/GXzMTK8hVfa8l\nQJNcUtLfeIt/kCv3VDz7JhtfKGAbtFmcROGpY9ahH6Gq/QlYewQvmXovLGhh\nq2CPdD9JPaZJmXzmly6Ujkr/jV77oIlIkdtu2b32rUZc/ekjF8fzOWAv7YBi\nFImIjTxUTuu/6kCyFVIoXxB9kP7wIAc+AySdj6EpIvf61XZYUNFwRKxH+MSh\nrhYHcu4VVhVCOGfo98p41z6dLN25ngXJYRZMhrJxx+ObwdscxI+G4XMVK1Ee\n7SbKQf68WoswG4F3JJUlRkuX/6A3ktLgzvdn4zraABIoZ+q1jozksINVOZbG\ntdl5yAp7m6+cKXNKql1sMzWaNFYNTvRI0kxSchac6jIdMzWkGRrW2YNCGKGh\nj6hMfwgPLxNUt/0DHaxbZ2+RZ2XINsTQ0E0u7s92VjpsL5p/pfEqwQIKO4XY\neE+mnM/PuLPOX/NRROG0wc/io7WMDI3darhYosGwnuatTPozy3okKlYlBKrQ\nePhhmsMp31lD/kHE+rbP90BKzE5CeBUQxfb4Z3nb7dEu0e2TbFNyHZm7ZeuL\nvvVG\r\n=FhWh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfV5DHYVMBRxm0vAJSfPOgQ1QW0BhKjNdY72l0F+mdwgIgVKHDMmdyVPwz+EmGLf55p6lAarHtEMVKNyddpCFrgx0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.4.1_1585167740111_0.4945063476872167"},"_hasShrinkwrap":false},"1.5.0":{"name":"@xdn/core","version":"1.5.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.5.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-DNfHdWuOfNhbwcnkk672+V3hTeLc/1tv1kwnOG+4BbQMCF8jA15Z+qANo1BW9DcoE/xFaU3NiSppzvlNORZIpg==","shasum":"7661a022d3382fa5c237033b344fb09a1b9d3801","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.5.0.tgz","fileCount":41,"unpackedSize":201792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefIFHCRA9TVsSAnZWagAA8JMP/jCe7X9y2rpZRxf1Imfu\n3muz5jQM1QH8VrI2Ev9NJoHa+VBoE87ySImI52kvK2pp+pN7XmksxQzSszMR\n8RuOVPWJqrQQNumdfwH3MTLpf9by53Srx3CAZud0VHo+eYlQq4qouKS6pSi0\nK9vRdGC362c7K1YAVSi5H6KauRSZ/ekGm9GG4o3B2bJgQTEDkf57zD0mPPwm\nrs02GS5IHAcaHgNkPSdo9CjNaueQchJxl/dWQCMnHI52B4C8ed9jZ4Gwmhcs\nd96SyVoZ5Ti8TsR0Wcz8lq0yb2E46t0fFBVXJh1+FQUD/M4MU7KjqbgiNajL\nunMoOi4vHD8NqS5nNjo8Lr0uutFJK42CQV/flVcogMh/9iCnhR36qcjypJ4l\nCeIdlS9Ar299rpabFP52ibPV2T4HA5aZNuGFwgitAzYIlqK3FnADoYNuEIGt\n4Q6BPM72I0/Lb2bsN6r4KQX4+B+G2t7D5DkUvTMdlJ0VtoKaJFOO/gaaHJFD\nEIIFW8Uxdup/B5S/Q0D8UIKC07/Jc5y4o2V3wAtSyaYNq3EgGRnNLFQzgdo9\nfqcbe/WXApJeovaJYQAv+kiyy6eBkNfqShBKFxagjHvPAekRN3cbWHJ4Axps\n067M7ODahgnpROlLRM2GzTnmDW2mUB6HbU01rjAwAouFp33I3C0AYjgifKhc\ngfIM\r\n=2b8a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDXvcxF5oDFT7kEYhyNWNPArD7xP6zpHyXYfnKXc2/31AiAUeVAF3XKgTwCZq5Ryu1lF37yw4zkqxu0/X/yFHmk2BA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.5.0_1585217862862_0.7434308716236571"},"_hasShrinkwrap":false},"1.5.1-next-41e8ed3.0":{"name":"@xdn/core","version":"1.5.1-next-41e8ed3.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.5.1-next-41e8ed3.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-efgeBNz7dbfARt/ehk27v9oZ3yryTF4U4H3j5tc+kwvVtyqV+//Y6Og+rd9UixGquCxVTkzxiVch9kbLxbo5ew==","shasum":"3de26cad38dd0cd9f7865841d433a0c3d7b4467c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.5.1-next-41e8ed3.0.tgz","fileCount":41,"unpackedSize":201860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefJRBCRA9TVsSAnZWagAAiMIP/0f16XthEqM/8EJLPlDV\nUkpl1fvVxFApYzXcg/C5Gg7jfj93JTdilN1a4BKLGGCBFlawNh8FWXAKH3QZ\noP4mexLdL4pJFaIGnlPb5D7Ic7RfL6bEiBnWSx0HT4oWq11Wkt5K/fgx4ukH\nNZZVavD1mgImiseQff53WqPHvpXduC7RTk0IwNt9aQDuk+LNLto2NzIt6HsX\npqr0l5ITN7ZvQsxbr4yrsoXnO79MltQAMpsFKfyBIeHMDmH3ZvvZjjpkXcuW\nSazeKv500IL9MP7cXKwMbVptlWoDtEX10Xovsit9CUWDEdm8jV5a8ytTLBql\nAR8n0MbDFykUpF+m8T8GBuT36rqziR7WeCJyGWPMGEs/aZvfpfzHZ3ozCKmz\nWoaX3fwxNq0xh0gUkDRpnK0t9DNpk21iCZ3uIVGElYiG7uszR2uSGOkVAWie\nQ7Te8i1KAkBW1ZDpqyRRPeOTGFyfdBN+lGewkM2kF1rgi9fMJp5wZjPhyYR9\niFpRKnWIxl0z/+rUHTeEknl/A509CHpdOmJhInIevmZzWVi3uAc2xm5s5dD+\noY3cwixBlxtQI33aqs3uSiALUp7EG0uCPjqbu5EM0T9xVXaGupZ82iFrtuUP\nriX6mwUcCBwC5Ceqvdj7ZvIIn5Wtpib6khbCgyJz0HnM8/vsutQPkY9V7ybv\n2HzZ\r\n=Z8zk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDojg4EEhjI7pybNflBjTF1LW0QDyPBoeOfipmrHrG0twIhAPd/7LM/b8JbEI+ZSa2MQUac4DvuTubH5wbi0iLMGrCF"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.5.1-next-41e8ed3.0_1585222720775_0.37165976664396894"},"_hasShrinkwrap":false},"1.5.2-next-0dce446.0":{"name":"@xdn/core","version":"1.5.2-next-0dce446.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.5.2-next-0dce446.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-Y9ktwnybh8Rcjl8PwAvbp+HMEQliWvNfGp1sUWYXE+FrlhZVGQ7kVGtNCcxcWS5IiCSGoOLd/bcd6MUV8YRc3w==","shasum":"a4e2d92e976e0252f6d368d81071895f6ddb9bdb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.5.2-next-0dce446.0.tgz","fileCount":41,"unpackedSize":201789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefQnUCRA9TVsSAnZWagAAxe0P+QDXwuu/+XKZdiRzB86E\nY4HOrWLsiL3rrILALo9/kFZ2ftW/NQWONyiLhddSNgbUNpLJTCGKb2+/C33M\njGTA78cW1z9kdYU6dJmazHQSjodgQOVrAA4vuDGmTSBMZZLAGpiBq5u3Lb1C\nzuJhA0h/G0/YndUvs94H39L7YvHwThrjyungZdcwleFoVh/laSpsIMoAqme4\ntNG3GYWPlDLd0TJ7op12Q5LMNcDV7VmltgoQS1J61LcM1h+IsefJZlBLvX80\nalWdT2sS2IpD7P8jw6ENYgnsZddqOpKPqLqnoKoOwphUGYvqc11G39lvzDbi\nts+N0YK0QTzRN0gRoID6LSqCEbqabMpwEWredV8yeH2NyBPhiLwAeHcP0ky5\n5nvJKUSdLWzo5RR2i0BnfOrTd+18iB/Es1cVWmko235MU8sfv6/0bEUvdk72\naYKrvaO4gUdjSP/64V8bXagKu1NRZVGoe/0DSMxQzrebweuzYB3ijJ4yrtjP\n+L/8YxTYgaXTOCUQeE+2Duh8S1qfbYG4/wyQyDeM/MmnO/+OHUw+NzAeo+8Y\nuemi8uertP3vhEGthipkeSkkfq2MMjnG7xR1zU1hZ1i9J2qlFePFmg1v6uUK\nn323LJJv7CB9FRjxIsQCIQKsS+5XNjPu0PXOa4nxZ5U2HI5uRThsNmjQd+1/\nMcTC\r\n=TZgk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBN3Wt6Kc9g33ZJ+MmEarJs37W9eonYc3qef0DkuO0LqAiEAzxuz/WImZUcLo42cRZK6XG5bpWFrkPk2yTTzn8psxK4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.5.2-next-0dce446.0_1585252820038_0.8392687850833687"},"_hasShrinkwrap":false},"1.5.2-next-f67a2ca.0":{"name":"@xdn/core","version":"1.5.2-next-f67a2ca.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.5.2-next-f67a2ca.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-OEovSln+jmrgr7hDO4ABKXhbVp/GN1DJCY/5oMp3cWthc+lE6xlWitSg5EQlgTOILtBXZ6uQJm/aGlKxi1XJkg==","shasum":"f260b3798260f5efc0c176b986efe411f2b13912","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.5.2-next-f67a2ca.0.tgz","fileCount":41,"unpackedSize":201789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefdwdCRA9TVsSAnZWagAA3lwP/2Xy2/p20AW6e9GhUj5B\nF0B8O1ELNmrSCf539oSbqMUvjU2aRkIe8J+t/749mEkwR/Yb/fNPwGpAhLf4\nvxEFEYo++NfNwE6ryDRCiinGz8GvO73EXwgssngWcS2LNp6cH2wCHBu7feC1\nmPXoLkLziZ0NYIBVx+9nvP6+7UbglFS2+ASWSm/hYYpCwLEuGXjIBYey4bID\nbwF2e1yjHQDTN4SyvjVQSXMdW63Ypp83CJte0ofM4n/ZZ7Xed/PCxnALnaDW\neozAv3tbcKO9WNRPvymIwo2tsOg0cbwcEB892XzohiWB+QRIC1pwrjZdsstU\nUOfrsi4QW1z02T+naMbtMdP35X0yi9MUYnV9svVoe3sZDLjMvaSh5O0kZIhV\nxWaadmYxqNJc0g/MfbEduAUzFM6dZHNqtj+lWkrhyDNTdzAiJ3LMaxlNzm+4\n7XnFwMW4uLdHxnmgnbyeRYsBv4FEQ9cT44kJyPPMWnWDJRL2LIQiWHGZDWQC\nTUE23r/E/EkxrXMVRmn6irYm0Z5iL5ZCWCOm04d7rBuyV1xHL8iX5BphyBdn\nGam/ZZmkgLIjtph1LjhKxQB6+njigk7dVGJBdEGdkSyORv7Z5L6vRpuX/rgf\nbm1Rws/Ktwfv/tmGQohEsFf6wpdbTawqLa4/LaZKauDFvCNEQ/iBBArGt06B\nrnwS\r\n=QVdO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCl0InfH12mUJWtOSgyhmHwf52ZDpF64x1c89TQ/MYjlwIhANr2CuTCKD6hrPakOkIcbznx5bHGe+o0OSeA0hG+cRIP"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.5.2-next-f67a2ca.0_1585306652795_0.5632305873867989"},"_hasShrinkwrap":false},"1.6.0-alpha.0":{"name":"@xdn/core","version":"1.6.0-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.6.0-alpha.0","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-IETr0pGhG+YhNz55mrzEXa8Fdrn1YXsQ+Zjb+kCUa0h5N+za5839epHWEfT8Lg978BUNLXwLJ7HtoBEmLjr1Cg==","shasum":"b7e4f814bd1f1dd9f044e4b16dffe506d5255ae9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.0-alpha.0.tgz","fileCount":41,"unpackedSize":326206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefdzECRA9TVsSAnZWagAABGoP/1L+bADLVClJwGX3S0Xy\n3CaHlNvojYn+9yrjuCdtmyU0oTXcc2tU+saBnSLvN+2Rr8JUC6s0Fsimd8dv\n+E/31Uj5DzbItGpm2K+qTF5uBPuWmyCuR2KCm71WdyWWZMxYi2V57A/n5KgP\nKE2gnmMn3tcu/qpR2TA0OupCxKN5NmGwt7Yafj+J5IvFjA09K+YVgRNd5L0Z\nf6tlrMf1giHogduujeW3iLJkvYjUERPvuE3N+yMDNpSs5r9+Owt/vclmJOcP\nIsLARPqbiSEUuibb2HdSA2aOGTc3acB5jAbNFMT9qrasAyWG0+v0mZke6YxL\nFOpU4UnAevExANoFQIf4hlXFteaxpM6g///7MADYAKd6Hro1WM6yonX/Fb2V\nByoVGvpVa7rXEXb7oy5D36+77xGW/xy+C6lqd/XYkMv1l5qn/tmO/vAPq/mm\nZL33rtKifff7ZmSfMmmrSGAaJBkPAZj3vksDRy+QDgSkSc/LLxP3ut6Gtak5\nCz93gDRIfcXHJ9XmHErBKU9ncVIxOYxE1rm8MkZpHJeY30liYZkcc5TQtIJn\nfHvnBEbv41BtJtW1iC3kQFJgQlt9eYsoWwyAxCRrhJcz1Y3p/8CCpwHPTie2\nfcUM3wVnLGRI95vRPyKo+OtCOJPjXDQG8+BMPMK+uPWzvjoRidfL2wt/PJvA\n3Mmk\r\n=TCUj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDiZKVvXSJi+NyaMcgU5KkRdK3+LWZ7scDcriW1E/GA5AiEA1eXFg25rVIVRWPH5/ppVO4zMTSDYTdrFdaMwCfuHjV0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.0-alpha.0_1585306819879_0.8877735437990264"},"_hasShrinkwrap":false},"1.6.0-alpha.1":{"name":"@xdn/core","version":"1.6.0-alpha.1","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.6.0-alpha.1","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-K7tBp0b+V5qQngehxkjkODZCPpUNa8LxQhbMn0fhNB1Yo3EEFmbEzprfWNr2iBhDLt6UC5F/nBPaDozOkGwWAA==","shasum":"c7a568e76dce1ba86055ee9d05f16f0afe2fabc1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.0-alpha.1.tgz","fileCount":41,"unpackedSize":326206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefd1HCRA9TVsSAnZWagAAk8gP/385tih/a8hddQ3+yyK9\n7KA+pyFH0ji+SSxN9ctQgOD9PdlsmLdjjdCRPIDEzF2I3a3OS4eMy7JmHc2/\nEHpFPWiRx4fSA1vYknEn/FkICL9CLcAjtHpX126H9M/I53L8WyJU3rpizEJf\n4pUbblYgHVrsbaNK6scfQphIm0NzXg8rkdgx5PNt/7Qa5FQ6aZ4N3KhrxoTH\nFF8XlLKVSMb5PKV1qCxEYl7q0QqprHfyxD79NFtrh57nY+Zso3QKFDpLOKf/\npZu/tlnpJ5QmTcZKT2kbosWIIuH/St6fqLdLocbZUSUurpItKPZjsm70k8CM\nU5c5BFIcFwb6IYNjPqvDiDV+gZAHbx5cwWObsIjzJvAs9Plf2mKpnp0rK3nn\neDkjfLSgD4fk6nh0GnuZDrScGf8bICgYXJeT8LDdVZ36D/kEV1tmkCs6Pk1M\nxhqhmj028YJiI2NAuSoq+1FIJSLOg8dKqQHJI0sK9pbWhTIxRJW5ALyiU3jV\nOoXvgSwtNWzgvYqpZspzR4NImz9R1Rv8MpSEIqooPE80X8wgnLVZ7ioCrBc2\nIR9MzOEa7lJXNucV4WyCKWKBK32XhtrFV29OL7TVZpCXV2Ovbw9EuxzLg0pE\nXkYNdkXkgVRYdHd2dUDzwKYRiXj3J0Lc0JoHdchfIpVeNCR/wJiX3ucDdogL\nQPLA\r\n=N5In\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3qGjMtPlnk/UZvsbX9BuZ2RvFKB57ms829n2PWgg1BAIgOWPXnq1eX1mrdlZKtBrYKvA/AzQipzCMaeKyevck0UI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.0-alpha.1_1585306950732_0.8307506145273149"},"_hasShrinkwrap":false},"1.5.3-next-90f22a7.0":{"name":"@xdn/core","version":"1.5.3-next-90f22a7.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.5.3-next-90f22a7.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-l3fND+g8fqnQv6zT1OJqFYHH8M5M7Q+qOu80wdU3IlTJSpavBbTVspHpln+QCaPbGEWSs0aNSaT3lA1126UEcw==","shasum":"9e0727110cf9cb0f4fc3f2233f064c55ec7cd876","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.5.3-next-90f22a7.0.tgz","fileCount":41,"unpackedSize":201789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefd8fCRA9TVsSAnZWagAAyYkP/RyzbeXTwp5nSp3FJwz8\n1ZauwsW5lndbNyjf131dY3Q/uuJsZoqktJiLbo0JwbL+Bxp+Nng6zNTWwbE0\nToRfdeKDL6l11hy3gDvpKdLI+T362UddqfazWw5yFPr1E3tz43Ww92sVAFmm\n3/09CE/pb4DNjGMeY5BLU0YWKA296X/kSRCikmA4rV8T1xbK0DW4i3ayCXkT\nXj+Sno6tmg6f94ldR0VDUFvgQlntC/lidA1wPKdElrlZqNhEpZScPsLUh+4O\nTSEmhTtmEEIA/64yyGUUEeJR4DcQrF7JxTVxN/hPiCT7Gf7ejXJq6Uwst0i6\n19DRnCaLMFU65QsgPImSidFGjWkGoLYIs8rK8nEIILTLsS5Mch8HYfikNjLF\naxuvQwzp5e9HCS/mAvtJdxwG5n1frw+rQrDfgsTssjgmThLimgridq4DHD/g\ncYIfO4ic2fCuRUl7uwSvQdfZEJZBRoy/2/Mbg96ssQLaEAxmCY2RcjnPRqQW\n6u8EkKOrxEaUSGwc7ALY635HTybd4rwncvGE7lJOhqZwO0JHDwgFv9xH7LHP\nUSkPiTfqiIK2MbmoMY/dUfQ7P69ZH6S5BnfzV763jCOOhpVGc/lhasRfrzlU\nTOq34DUjz3230clIfrEw13StfdcZb6i1cRrBVdCXgStXSgyki23rg7M6APq8\n0gFL\r\n=g5nC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDH+9CHq5jfA1+WSjLfOGVBe40yTFuHEA3bPZackbffMAiB3QlRFQ19bR2F8onOcJQvg3RMxZMoxx68Mpfsartiz5g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.5.3-next-90f22a7.0_1585307422845_0.8504524162634097"},"_hasShrinkwrap":false},"1.6.0-alpha.2":{"name":"@xdn/core","version":"1.6.0-alpha.2","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.6.0-alpha.2","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-/Af/KS1AuSYHnYGrQKmY/Yjt2AOydmW6V/52N9uqoQhtcwNVuFZr6IqLuYUJUq5o3dsSWwH6LazYZN0HJQYdoQ==","shasum":"b21627aba3e2ee2530a6e57d312471204e04d142","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.0-alpha.2.tgz","fileCount":41,"unpackedSize":326206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefd/7CRA9TVsSAnZWagAAOgQP/2ttiaaA9c19A2QBsBEn\noheDIJaHzPOi1lujG6vkEyKqkOGSH970Kzfa8SyKjJMlvuSwsq/jZA8CgsiU\nQFzXNb3C78lbLUIqpzwZptnpO1Ek2rjk1ociu0p/HPGluucLID+8psgzVh5V\nDoFUIXFy7M4WD4bSRvDZEt5H7NiGxdJhkAmGLvsM6dPoFxkLoSv5Sp41489/\ndZ7HvI/S6qray8FQHqayfzHJshVyRsvhX/6v8J0KLJ6oJtpUTlP+TKJ6O2DN\nQPPuHvcIcE2r1lxS1XoZpRqhoNY0Fc0q+OoRSoThDRN1/1U6PZwmvShVhxdT\njSjjFebkOOFvuPUXBK6raK4c68Owjb1k39lK+Bs8a2DQAftxK/C1O5/XSY3l\nNsq74exUts1nh0ycoCNbPOFZtQGm6Q7z3Bo1zV+ILejG+u53nnmO7uE2VorR\ncJXLp5c8nF63W5kTm1n5Oi1Hk4UxMeIimmOMBY6M8vTaBx9hMYhq/KrBeu21\nJ+foHgwU9NPrYURcIl7KHYHESORefeAFMWEAJo0evkkwiui4kP6XQPfQdYPJ\n/dzJAg8+8+3fojhUW1cZXyZTc36P4WGTJENh5fTo4wIvXfY33rs3yI6nzyNi\nI9IxVMEp+15LQ1aADd5GZFBqLGlxejqgIU/ADbuPjpcXIQlPhPuECuhoLk9f\ncQ2e\r\n=ozAB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEIVamIoxxHwvsJOXwLhRzCGIyPBs9Iuhsx3mphmhAEwAiBj8LydYagpAwFEN1O3sLirNUOVouW6V6p1mNqeFirojA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.0-alpha.2_1585307642306_0.9159511353049241"},"_hasShrinkwrap":false},"1.5.2":{"name":"@xdn/core","version":"1.5.2","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.5.2","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-NIBzYwuPFSO+0Gkhz9kDaBN0h4/vY5oluMI+bOGcjaukzGJ5tmhcW3bFPC2oA+3wVT0IpJUOxkjFJ4LmSy8v8Q==","shasum":"1b3bb726c5a5acdb91dc529ee5521331a31cc671","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.5.2.tgz","fileCount":41,"unpackedSize":201774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefeErCRA9TVsSAnZWagAALtwQAJXN5fUeeZgtrHXQFMrx\nocpoomvtLsRVQTn6Ly5lVZitMgSBZ5GJAB13x1GVoHrs3yP8kc01UlEI4ak1\ncdCRNPE6KqLOV3lS5E2L/WX09jDeO3y3OwpNWZhSlhHN2hwgBpNdk4BEAu2h\nDGXc5Yd7yauMHsHsc9UdgbtYBPXVZvrEKla7GsZksh/o028L6orFOSSCiWpj\n6kz3myOxlMJPSVo41csS9sQmIm3tqdkpmXHpLrhQDbokpKz2GLmByDPpC86R\nhaQSy/nXZHmIH30OIk+jY8zV7QAqz4KJJVTOtk9eA2GPDtKwvxJKqCO5QNA7\nmvx/spFGY15gAUjhV6pzoVFRGwJlrAUrBHWW4IyQlJroF9gCcf1Psv5NIUp6\nu5QKN+991/nAxq/MwbalIzPJqNB1mj80PRiXLnZgKvMs1obtZSW1dnN0atUd\nRaBxBNdVblwRD4nzJaQQyoOCE1gamQfhd9dbs6oYO/kLSswDq1XGjfqpJ6ZG\npLe96+4Pv5SW6iV/y6pY+pnyAq2WHL0jylY2WHaYwG6BYJ2E0quvjL6BFC4d\nNZ+MJLwd5H+K1yx2Q7kIqPDTb+F2ysS0nU6eNi8tejwZhFEhWw4cPaQP84Gc\ntuLLBujJMYK29lnS3YwuJxdfP2dgjrnl/IVUIhfS3gEuD3s+/iqdLhZR2HK4\nefH9\r\n=A/Im\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzgd3b9yZy/B26b0MAvEh52Q07jzAKr0QuTSttUFJeAAiEA/yWG6rkm19F1bTU605T7kUnFjwCCOR1QI+MAfdPZyM4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.5.2_1585307946989_0.33388386095867295"},"_hasShrinkwrap":false},"1.6.1-1.6.0-alpha.3.0":{"name":"@xdn/core","version":"1.6.1-1.6.0-alpha.3.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.6.1-1.6.0-alpha.3.0","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-eGXCkO/A0W9ggGs3V0HidJMw7hTfSXJugJTRKaGdoFLKcVeCLzasSjA+kh/E+xoMZtRdXcktaPvXqVreN24o8g==","shasum":"d595fdd5556ec1de6a68b4e099fe051e9af0cb59","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.1-1.6.0-alpha.3.0.tgz","fileCount":41,"unpackedSize":326229,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefeWZCRA9TVsSAnZWagAAkzQQAIiy8Chr5SoIjTfCSzQM\nfb6MiEZeebSKIKwU4igskMAbzcMjF9/Kp6Qte41eJkwjfd/mIqwLVsZNcx9M\n2ziVz490UTYza8jcJnoLi0tgVrWU19WND+1Q+cQoJy9rJUgZo+Qd2TUGSA6u\nPStU38Dk++wcasDrA4A2lESd+rpC0gE5e58vlHNY2YrYrs+3/tYqb3iqUohj\n8hQ5XV0rC+B41hE7fLkW8bsmL1wa1YUEU7haiCl30fBnXupH0h9Xrf7sHDej\nwxV1QPQtThkO8iDRZNCpBhdQw/2aq8aQTAhl50sQyxmg7WT7mGNveeEZiPgF\n/hr/VStaUkcbEUeaT4T1hfahM8N+QBx13qGHE2qTti4xCvJGM1iMbn2X0JSV\n29InsDjqYWBv0LoQPLuDnDBPomilz9TdcXIdS+AUC57Zpe9moh0lXX3ZkkGj\nTHG0kQgy5T8pJj+AszgniKynSpE8147nJUSu2Ng/qHH4E4yyGCNHTaFe4rpQ\nB7dRB3s3xVtydsBcz6LRAozIzIa/1oCDONMG4mB+xkoIxMtIIwbGMpjIVBsu\ngbfY7GhyN02N3hfkAkxcV+FKn2Xgh0A3XCo/mHBdxsvaxx6OgzFjDAV4Apkq\nJPbEqi8e3732o+ysjJAWI36HGwmXSHSt99mU18N8E9VbpVyehHS/ttv32sF5\nwv+V\r\n=ZIQz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH8jg0o9KWyQQ7y4J2sC0bigamnhfcUjtt9Bhm9U6iGqAiEAoHX9OwlkDjvBcfENxaCBGcFkT4j26rXUBN62yWs3GZU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.1-1.6.0-alpha.3.0_1585309081585_0.34869768113406496"},"_hasShrinkwrap":false},"1.6.0-alpha.3":{"name":"@xdn/core","version":"1.6.0-alpha.3","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.6.0-alpha.3","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-cM8zHabhSU9MrUUooZY3PPrePY1InFzq0MjNuxDUUmod9XnM55s9Ug86hRjnpZusRHTgt2moiNtkypHmw4oHPQ==","shasum":"86243643281fb038a2f6d18cc5448225a8db73c4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.0-alpha.3.tgz","fileCount":41,"unpackedSize":326221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefeYJCRA9TVsSAnZWagAAeoYP/01D49t3aOMQls/pe3EE\nsduJJkgb5yHj1Wm7Tyw5oTOCWhGEJxl34FtD/Gp3jbxUFJv+NCkV6FMmokX+\nK6+gZlD5ECrbYkHn4VJX6MSQFGkLBZj4hZkhXt6A8BzNRW4ctgeIVbmrFsF+\nYOQzUa56SEIg90jH47x9xiMZPDu4bmT8hoWNzdL4q1DTQRhOlWuGbe3IXPJF\nk+IzoibjhRJ0HgjijuP1C2DAh7CkgDMms3hUZ0d3mdsaYi3NdcHmUkg47gIU\nxo3abCHuyfjltWhqoj2yRk+1ISI8/PwBj4SFT9ypjgPVetaKgTQTjAm3GAGu\nrj4WfK3Bf75Y20CCuAD9DsdO2yaHybAeGX//6k2BexfqRsePH1NBnb//J/+d\nLTg9nN1FIi3/CLZQQD3/fuSbb/BBUchbVrm5qk0BrotisEhGa+eV3Qjj53Wa\nSpAJcuCKup0EnZR2JCKQLNiJmltlKgnLksWBQlC8+UqEMf1biUvMAAHDumIB\n0UMrv66wRoJ/QL6qFGxxRBAsy0xdzkiDJk/ufVsAWL21WiAwlhErZp30/i1w\nDy+/sU2XIXru/MFmC4YEMrB2DgAlZRWoTNuJYSRYgKe5sR4d+e34apuJJ32u\n5kLVqIusDUogkf9pw0FvNGETLzvTTnJUik9eTP10Vp+JwSt4xEIA1k+WjE7q\nsD8d\r\n=xpi2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDn3ccynqNBKBcJ5RAU3pA2hL3ZqtQoFUpTnZocR7ORoAiBTA+KdnKnPtl6mLi0bAulrFS2rh7z1DzWb0GHnSSGtkw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.0-alpha.3_1585309193340_0.7480692124242747"},"_hasShrinkwrap":false},"1.6.0-alpha.4":{"name":"@xdn/core","version":"1.6.0-alpha.4","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.6.0-alpha.4","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-tJKeuIjgXwPlO36PIxKCypA7N9klJBtaz10KJ9UHBJt8AR32+qjE6cdNtmDyEK9yn5U8OcouKs7R0TF616MeLg==","shasum":"088f81f3b8385b2b9809896d43ce464fb9ce808e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.0-alpha.4.tgz","fileCount":42,"unpackedSize":327638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeffqbCRA9TVsSAnZWagAANjAP/RGZWaCt8MjwpwKHsBaz\nfhZPkkO47NqrJAQL1y1zwqKzRwSGhboUTpZmt73RMP6F+FjmriC6OT7JYH8H\nE3BlBOtCFb3lpU1QH6rA23UuJvoEJd8PSXQaPGIlh9LGQ0evMobhWMseKnMM\nZ/CywSfX0EDLMRUCZQVEf0Vg6GuJmkdIHG3PZByPbqJhA8KKplt9+k5H/TGu\nALmFIoS4RcEmOuWI3lvCy4om71FKdLjlz18QPTR3QRqFw1W80EQHUUSRUIGG\n/bG9yW7ee5z2qLb9d/jb/rQ7tvIWYc9GACilnvbm6OpcjcawkZ4UHsIaHann\noh8mY5eutFkmOHVv6IQxhvDpjiwaJmVb1ldHTp3nkrNJ0TzYK4xJKe2Ueqyn\n2lHkFVUWT196g43e6grypA0AqPfLxn7iBOByXY/lzhvOHWGkwcKH897LMDo3\nVzud8FYXoZnwDYUYAwp3PEd/c9iFLnsV6gKKLnVpbEyn2JXVwXo1UScF3mRA\nHJ9GQLMzF0oZzP1pmGi/7e3hTiUIbMJ1oO8Oaw+nmyEFC2ZZYw/nAipXIjpX\ndtOJIJAku00uf0s2Z1vrJo4VSog6ovZpSj9Nk24q11tfoi9uWRAQSUlMdu/q\noV7H2tWU0iKlC5xAbC0Q/HM+y6XtH61mPdSk+rLFqioLiHMfs2FXsSfDmecA\nJpor\r\n=U7/B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1A5NKcgL6YfWVHeK9KJZQHAMAC7ivK7DCcSlktjIvOwIhAOhmYeMVclgynVTTK8WFLxg4p5uvwRN3UkyJq0KaZPOX"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.0-alpha.4_1585314458675_0.41195495125632386"},"_hasShrinkwrap":false},"1.6.0-alpha.5":{"name":"@xdn/core","version":"1.6.0-alpha.5","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.6.0-alpha.5","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-KPcYYkiWAzA7t+r73SknZwF7MGUOgO2pALet0OF081XMdbtENirY8qPpfed//fcMzHRDh243U/FA6bVRg3bHFw==","shasum":"f62a89d69c2aef990c4eb7e1cf89587711048d4d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.0-alpha.5.tgz","fileCount":42,"unpackedSize":327638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefgihCRA9TVsSAnZWagAAjYwP/RbXFjNehqjCvW1/XZG+\nguo+NTC3R61hOuIv6yvkEAtToWwV0hskL8WD4jvXMQ3mi8nDGqp559oRI/lY\nDlrU5Z21GNkkk5YRTAyoD4RhKiDlzzMP8/WOVUR01KjjNcTupEKkAzif8Jhw\nfvzM4hD+HFP0o4h+3m3l+cW7WLJYRMtvxAwwsSTXQZUioijI687QW5ojY9Fi\nLyX6sVlpeMDfjgP0ztfnbTb5fLapzJPck5+t4pNPNz25nmOZMwlybPzkylsS\nSy5T9+M8M6mwmkgxdgs7PDWvafe5AriZll3viS278bfR9l3X1t5o6DUeBp2r\nvN63EniC9iCH6idT/1NUM1YlufR0lyjH54uD74esk0H9CImhCUcXQ7rU442D\nfJgdVsVn3GqJCbkiK0rjPv5IPu4ROO6pT7VzhZ8HKWbqPEWV3X8w+ZCEGSjN\nYKjEDr8h3Zmvw1DRR08kHHrBAFNwlYRf3R+3NUK4jc0cHQ92RkBF5PZVzEn2\n3TQHVT1OEUZGm8CEfJehNV04qGbTyH7M/7u3RAXTzvD/uUP0JywDvBKBsp3u\nw11J6Dn5jK1hB5RbdXsj3m3EikIvpCoTxQhM6De4M//0LsfYLN4cpURBEXJ2\nLIU2WKCCoc0uAxOmAFXOUhEYgHkoTv13uW1pgfdC8DHrp1bUrn7Em2NJzYzn\nf3SB\r\n=KXF1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFjdfizQZBYmTwmu37gN3WwtyGjZQewgC7LNfAMUItWaAiEAxkyimthrYGg86zzw1JFvfs0A5RxIVBtn2eRoR05IyZw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.0-alpha.5_1585318049232_0.4585704755455593"},"_hasShrinkwrap":false},"1.6.0-alpha.7":{"name":"@xdn/core","version":"1.6.0-alpha.7","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.6.0-alpha.7","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-A+hh0Qu+U0cZ54rxPRIxeEq9qdVX0U1Ig7rsX08d9DWTMxXG2WZbU8oX8gUPIwQvLehmJLERCX/a7D5DhqaonQ==","shasum":"d2d7e64900928e46b7e47d67f039fc44dc6eaccd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.0-alpha.7.tgz","fileCount":42,"unpackedSize":327724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeflOtCRA9TVsSAnZWagAAvRkP/ipAnwPQwbrl/HXNY0Ic\n9QGWPEvpfLy36vIVTGeXDcCUHym4su9kvXacmy2XKuteL1ImJcSRsxHDOC0Z\nYSHjDHwHPnsxnCuoTY2rB9HVbfOT2GLyLTCo3pIVa3bxcTI87fZKrSWWYJBB\ns1Yrl+ZRQ2z67bXTUaDkwt8fOapBPw88aTQTAV90i5Fu9DuYz2NMQDHHaMLx\nDoBBxEwDokkNsthwpUqLX60jxDy8s+7XTh56woz0xFCUu1+KaRf/8aRfz4fa\ncNxbQhGWdUKjbXztx6lCBZ7AGOnnXl6RYakghopsDPoXChle3dhqFmVzVUkb\nkQnX9aivUrm43VHG+Ob/kt8pHWh599Tuhe5LYZ62575xh3I5LAmqvq3COycQ\nQXE5V6GsCVr5vJWm3RwynvO8HoM26ANqbZBKt7kAjQF3acRFeWA/fhRzICWj\nWSppufDCyMWo/qiiXjI8XNFQ0Rivci8r6M85ILbnczdQyW8erK0xCu0nZv91\nIo764qQtEMm3qa6crKKy+m9WsPrmOpFpN+wligF/THDrbUhyWm4e6sDnAWk/\nWzkoB+tzHKd94Useylx9RHe8Hbixq1mhkXLacYSQUFkv1vAn4WPE9jP501D0\n9ziIwFNxFfoskOuCYFHcbe/6SHcVIwJLrFIbybjFisO4orJtTJYBU35J0agT\nZ/8S\r\n=h3p4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEZcLhpCxpLvbztE0tjkLGJqY48M2jr7+IIMv7kCxEVjAiEA/QXkXW0GvYDsK6r3iXqivZnQpzqpJD+yn9Uy6WGd6H4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.0-alpha.7_1585337261109_0.5280279647726986"},"_hasShrinkwrap":false},"1.6.1-next-9e6cbe7.0":{"name":"@xdn/core","version":"1.6.1-next-9e6cbe7.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.6.1-next-9e6cbe7.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-gJeyimnvoQPFutBe1VWcQMfvuYgav5vpqIfUsFOaCjjsaaE8ICZX8Q+p9qKAgCT5VLPhDhDlaO0kf2cRV75hWQ==","shasum":"41e60ece8411e2cd6e31d43770901f26208531b1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.1-next-9e6cbe7.0.tgz","fileCount":42,"unpackedSize":327727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeflvPCRA9TVsSAnZWagAAmfUQAI77mrSeCSEM31oH2Ms4\nzkxxixuBxNMZMLP874qMQMgBrNQnmVdaVev+R/OicXHy6EC0JjkrU8S9k/+u\neUaFox0NibXT0PgDH1YYYibVQ4vBWHTpkNaCZREkC0qMEzTEGyCB+gEQZz98\ngE2WOHfmd6Xgwp/CU2PJeZOSyjqajpMLhpAJCtw82GeMTg+AzUf/LFgHiqh7\nYk3s3Q71Dp7GQuqXUBvLjgGi7Yu6WYxk9nui/lkBFNuNkJutKh8C33omd1sI\n2+vX0UgCYKS5N/GaqVu+lh1BdYwcT7EcRpfyxkNVyQmjpS6Fij5IPi/vt/Hs\nQK3ek3F+OLsXU3kPpRfK7mZg5R+OCLdhZ7+W9uWrH3iem8RiBXJXLbWW9lHf\nbP6rFjD5XRQZpI7lb/KZNeB2UFgZLq4ImXN+8+Le26vhJk1SzedbWhicoiUC\nJyCWQfENc2wKPk2vv0CbtMVwZHeeGu7YE97Zp1rF7NV6SUuSKI0ttnOFTIWP\nVxYhUujECp/jmXeAiX40DCM/53A3YgB71/fD+LGrMQcAgjN7iKIJ574tzhuU\naWhRY2AXCg5oR5WWcd5NAbdlNWIxiA8ycXS6BwtvtdnQEET3AC3sKRYpBgde\npa2lg9f7TzHL0+o5eKsI6RJ95ibtSZ2nwEUIGigjtZs/hjuQukEwz6UIPOaF\n909d\r\n=wtDm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGL/liomwRxSHTygbXoF0KBZKQleCcGI7uiIQe0uizG/AiBZwW9dX6Lgkq60ETiHju9V5O0Vpyb78C6FppKSz0+8Tg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.1-next-9e6cbe7.0_1585339342758_0.9795886724289609"},"_hasShrinkwrap":false},"1.6.0":{"name":"@xdn/core","version":"1.6.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.6.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-ydRdWosykLH5CkA55lTacTFzcHct1yJOM7jsnc2d5JhrR49ndNTAajVHL8OypBmvNa0jc9TBVnSoWnfG8PKQlQ==","shasum":"75dc67d3cd02dbce313579d69c2d2a1daffa6ef9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.0.tgz","fileCount":42,"unpackedSize":327712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeflw4CRA9TVsSAnZWagAAD7AP/25/Y0M2PiPMn85mMLPB\nVUTgtea72BZ5gKnpPmSkfFmwDFSbQWU/8J8IXtpHTZvcVElMjWoJ2chbUALl\ndMkklprPYnkYna8TldOJqrs2LcohC/EQwCD4gmtrELa1uBCVQvy7PWKWthY0\ncLWrjp6WyY/6Ia4jrQDsf8obUCCLxGMze1cV89QZibBFssEfZEFFU4MTuYS6\nrA2piP4K28Gkob7hSdqHZhMmo8Hv6T2Wpn4BeRKg6MoEPh3Ey86u2/UiVCzB\n5XQzGJ4EP7UCHbPz5cIi3opTQhNuNFtFGMNLyHMXFDTCc7F0leECwW8EPpUD\nhwmu+ZfAXh/AvfrybiAHyf/JGRWTFIxU2c+XPkJLlHKGC7N0kRK8Euok0lZ7\nKdEYn7sNT3Y0yyjp8isPyJOJP05pcsoEi9XQ9CJ9oao02dguWg6J02o2qATa\ni7myog/rb7IDLZabMDSIxk59kuB9aPN2ex35WNBKzsulVU8Req/RC7jUkfir\ng5umj/kPjEtfciGpgiaa8LCgEBTnokDAbZ6GeFqAM1lO7/sbprfm8GO1csaY\nzusWiJcWZ2fuceUETpA0Sq4gEuuhRslgoSc0Gv0G8nS4k3WDVYVKFCURQWLG\nVMedqcdnRa7vZef112dObLNjIMTHk+IuEOEOsJVTraszRLIYYP1yV/96jTs+\noA5X\r\n=m4H0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDAYUw4K3tctR7RY+Tbt2cF8JFnrfnC8CjUcrw2B0EgyAiEA94Pg3kItmKrAaqQJrI/uW+gfcU/TI3ZFae+VGFA3ZrE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.0_1585339448358_0.1979068766090888"},"_hasShrinkwrap":false},"1.6.1-next-ead6a14.0":{"name":"@xdn/core","version":"1.6.1-next-ead6a14.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.6.1-next-ead6a14.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-DDC6JGViZwP7D/CJl1YOAKCaRv4OnyG8s5jL78CKY/5dejwV/evisVzu5/Ea776jZhcO8whWbjYZvDifyutaog==","shasum":"8a3a044f86bb1be99264473aabd7af8801b9ae42","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.6.1-next-ead6a14.0.tgz","fileCount":42,"unpackedSize":327722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegdhBCRA9TVsSAnZWagAA2RsQAJauI5vDvaj+k3Dn8hTN\no5gLSVbvMhOEuBSIl2+PfTP+DMAutUz7B3VpZVuVEkuLhnIcYUnQPgYxp9+G\nunfFdMy+0DT6/rSX5MwIx68lH0NsdIfNJjvsKJz9TsjhKxujtTmvjSiHi+D0\nNkvaT5q2RZ8yfDyKE0YnpyEX8takssGSutzfLZ0D+CVvfEAYcf8CUx/NrAGi\n9tN5h9GvO8UAY+7yxRtM46hmJktTgxfJPYsCAKAeWzEChGSZJrb4GIfdyRbN\nsYDuWDoqIlLfAPBU70efdd+Kluq26hMBh+XLusmEPnnfb4ets0+mThDv2dXD\nudqyvPwa7bIUgYDLn0HI1xRsIghbYpjw+XnkUv9kTM1IuQzpR2BGhDfDwMd7\nYvKs36ookGkvY6BiKl7yNISLw2v9rZjiO20/g2JTU9OeSYNwGTqpPJQSJ/Q/\nzTdEckb8nE7pPneI/pJ+jqkSSbUfVivlv9Qq+EXR+n7h+Cq8nDkMJXY5y5rV\nBKnp0q5cQhaFksjM+6IwEMwC8bHJ/hEAR24IiOn3qVa8heEBX926X6bP6NDh\nFIg1YZVC5WVS8j7U/7VV1nGzHuKAqDRGOQfShZ9A6ZEYjAr9kX68pC28j9Gl\nntgThMglcAfGGET6eLAnSCykB/9fWtxF0wx6GYBNiHKfQUNWtYVtl9uTXNo/\n+ak+\r\n=G9vZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFkM4idAhwS7prrwRZZ1aEsQ5lGg3hG960Lw83crmizyAiAwR/xahtDqKJG6nFpEO6VoTyG/wm/hS9bIE/RKksZQSg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.6.1-next-ead6a14.0_1585567809043_0.2928263251779859"},"_hasShrinkwrap":false},"1.7.2-next-8e7c800.0":{"name":"@xdn/core","version":"1.7.2-next-8e7c800.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.7.2-next-8e7c800.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-IPDyHhIlofetZ3fqVSjmpZMntebmNzH3h+tofhjioyDLRsK0jTyr1d4Jb4UjgfElvZlhar/4QuzJrdzOEBQLJg==","shasum":"1821c5cebff32a8b77fa2ba5f0ddeee6b3f41132","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.2-next-8e7c800.0.tgz","fileCount":43,"unpackedSize":328003,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJege6aCRA9TVsSAnZWagAAc+gP/2CkAp2VTmKx8UkxZZRi\nKXUI6KHdxKENlR1SBgVOK6Bs3zLis+NTUtHP080ft86iqyUnkwaVdmj91cMJ\nbLH4h2yz65SwMOW/jcTTZTPRO6qEvPy1m1cIrunqi4CM76CCAdu6VxS0C507\nqymfwFieDsjKrWAKXJ5Z09aFr0FJJ8XVjWg6UL7j6ynDU6zSclEcgG1mmWQ3\nhmw5eHicPYfAdEBdUDqv4kc0bxBatd4mFpjcceeunNTs5luaSOpnSQkEFTyJ\nrF5g73CZTgWo7LDqHtaPBjY1mPdXyWa5kCkKwDkRHQdg5AnFYuao6ltQNdZY\nl6BANFg/C/KTiclRvqBQX8evQjcvfjSWea0e01ym7JA+uc55MTOZgyw17KP4\nA+5RYDN4V0TIZSOGgCrcYDSsr8bHCnl352i6hfSRe1kafgxZL+65wMZSXjz5\nelkVSvfkK9vtCkRUVhSK1uJUeiufDf4QdPnTLKb9ruv0QZB6/3vBplPJ9bdg\nYGveIEU5HhTjYSrFo6Tzf9xf3v6K3dhT5rksLFJRX2/cmJTXkyl52E2RPYH4\niP/UCoh3P2B24+w53Q06eT8LYr+Vdu0kf0nKaNSjqCQXFqpyUAgNpeNxLdrN\nno1+xRB5KK3zLh/5GRnxdIwNINuWNM4gDV3dsNPHaRSwXWMX00Dj8xlNfsM7\n6oR0\r\n=XlMn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB6kR1IRXtU7c+xhdZOscyY1KLvKdEKMWhNuf9ZDBnScAiEArl0/jqkDl2+vq+r1DqgPv0wgJEIp3YfGj+fjolD6IrM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.2-next-8e7c800.0_1585573523255_0.4775363777790347"},"_hasShrinkwrap":false},"1.7.1-next-17e33d8.0":{"name":"@xdn/core","version":"1.7.1-next-17e33d8.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.7.1-next-17e33d8.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-+OBNBOM94yb/p8ETvuvnipXjrxg9jhCZj+CiN5FIvBeBzTyOMO943MdiqgTar3hSL0hTO640YRBQtcSXHN7+xA==","shasum":"bebfffd901ee645f2b6944a09091eddac9844bb7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.1-next-17e33d8.0.tgz","fileCount":43,"unpackedSize":328003,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJege7VCRA9TVsSAnZWagAATKoQAIuxbYfIINCzYR1gdoNX\nQTGTc8+7klkbu/6t/u3OEpB+LXjiukV0SWrOapy1uLWW3n+0Pza1ZTK+z/99\n/JUxwi8z8yMlA/ieD0m8QNiDEDWEDwwz5N+h7IjO5omq3F4jiDSIAV9GMNV1\nUZIvf7vwWHNzx+mrebbNLgJUfh7nPdPNpkTPkJXv0pqRPQrqIoYJEiBc80Kl\nzfQBxImJuCTmof+ARssnN8zubfHg6lB3DNos0O9WkLXstOPADRTldXuxSEaP\nG7WeJ7AVWhLJ+BU66ZqG09tLw3GAO2SIq2ceHfqwGopkkVhC9rwprFe71YsB\ndzpt9sZP6Rh1CkcmimbEBxC8lvPq5s2/3fl85fhZluIiGGvhtUHek+suzRu9\nN+bzDtEycXMjgSvANX3EMROoK1a1MYdXzqZ56EdGVTwcH5mSm2wkGU2tNvBP\n//Z4Arf+RbiENga6Y1D9CiKvqn9Nkz4CEUm6ppccbvl+R6daYjxw8brDr5Iu\nGkz7CviWvopt75Zq0XAK14gSKgAO3woUvheD4s0E0pQ/m894eM41AESRNjx6\nn3BLhiCHp4eCyNWdT1kEJl83J7h3DHKpDGeH/tRNjEWtQM1ngo7F79aZcHtT\npP241XKU3EyKmqThgjy59juhFYwqVmAGNOuIyWfs9wDoWZuxjCAmSwEldYwN\neo1f\r\n=VSOR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEZV4p0Mzw72gkpIFetACFIhO84BREkXLSq9lVe0Y9YjAiANF17bvIvD+INEQ8D5/C8+iZHDlIieiH97t8zosV4brw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.1-next-17e33d8.0_1585573586427_0.7331277027116687"},"_hasShrinkwrap":false},"1.7.0":{"name":"@xdn/core","version":"1.7.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.7.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-dCXqewwunNvqa1a2sQPNNaxbFijyu1wp8VBaAxKkwIAYYnTd0/zbU1DIkU6KVt519MKTXmv7DbYd6kaHAGlphQ==","shasum":"97b29138740535ac0432c91bb0359500d0527d0b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.0.tgz","fileCount":43,"unpackedSize":327988,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegfCeCRA9TVsSAnZWagAAdd8P/iAtELQD7mtc2NrhXZir\nCgqQBm7IF0SbuXQjFoYJd1Fq0rBZkUOYECQgmK6VZpugHlfzNKWzIN09HjSr\nI3Vu6dGt1gRyyZhQ00IFQlfs3IV6UcOgM69/2q0R4nUZKoD6ltw7DS9X0KWS\nk5YJc5o8W0ilrpGSn2YlMj02npZd0SqSx/yRstG8h1p7Z42Av4VBPZ4qvcRv\nivhOM0hiojvEvtFYYRmBd8Ex/ZkAGMDoRE8LGjhCC28OR6ITKTTFZolh8UQE\nMOI+OZzI4ll2toLJv6mKEs3QP+SiqnwhzzAzijG43rDBKGsPWj1AYSVe/leO\nfhWzaSj1bmDHNWpccvdRhQN4d8ICH8NEVIf1W/MgYJZ+MIbb6AVIZBbEaVAA\nzmF/D4WiuICbpUweE3Xwdhs+TdBVfv5iK/y0JLo3isii3YEk1CV9qR/iyUBU\nFva6ui3dcsZ01r1mF2e25foCCf7UODqHkyrvNvqgG1+JXPGsLT6pY+DX3bhR\nXBEkp8/AAxbdeUxq2ibMPk4pnpYgveFy7BlHd3zLgnFfAnshXja/othIQ6Ow\nOHgZditSZjH58ksOsE5ACdpAMK4cGD1LVo7f/3wc6puzB2p/+pIYwg4jGIuH\nT6WeKjcwZaPnZb98Ojrs5jsqj9dEy1d8HJkiUTckxzqSyKe9R5kYg8coQRei\nB5Lj\r\n=ZV9I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAkv4Cy6+Iu0hzfOIjOxsobLKnxmmz1q3KBskBzC8SVxAiAmMcZG71Z6jKJNjUv9Cp9cJsPxQWcYzVlZt/2CJOX/2A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.0_1585574046401_0.2897863307541204"},"_hasShrinkwrap":false},"1.7.1-next-02f9cda.0":{"name":"@xdn/core","version":"1.7.1-next-02f9cda.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.7.1-next-02f9cda.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-t3bZQfHU2akAg8T48NxiE3wo3qKE0t1XZtMkzcVO7/jBPpSi9bN8Fl0w/rDoGm4pRjpNskfg/1H0kUZ5XoHfAQ==","shasum":"709d02c0a7e4317a108efcb6150413a48cba7db2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.1-next-02f9cda.0.tgz","fileCount":44,"unpackedSize":331838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegfGwCRA9TVsSAnZWagAAGrMP/20ZMqvvespBrSzyK4r0\nZ1nHdMgsYVclF+TXUJNwA1J4RmrkIXIWs15+G0wJgNU25bKK3tDkj9e+9fMH\ncRAy3Opfy1rXhdjyfPBM6GqNJuOjmeyKNjyomcRroofNh1MAdFmoHeGIRVVS\nw/XzRpO89UEf3yyMX3V0anh7mfc624jhkLPPbphNpfjFdtzAriYrRRONo/pj\nBuasaMKizUSn0bBL1O54x6wR8W9LesH7zYAhMOhalUpXk5vy9WVbp+yB6C2G\nR7Zx69i8pj4UdYZf1Lsp2enkd6BuQA7e9C37nQh4tw/yFFi7DN+EPeHRp9qi\njvNVQJ+aeIhdAs1d0cXft2IWFjT3a5EjWyjE+EQaAsvM5ogYhziocIoNfOUu\n0NDc6/CB6Hhsifvo0KjloN8qGU9YS8JpQD/BA0oyUdYabihNHfvfQDzEfu3q\nrW+m95hn3bszkUR4/o/dosDpFCaZAc0kWR6/dzyMBltmdmLDhOEtck9KyF48\n6oxmlRgDPqw2CAWA7ohRvinsj/EWyO/+K/xoTxDD2gAooyOPDJZaAFIGQuCb\nBsEVpZiWB93q68VYwOMcRClCaXFCh29dK9vy47/SINwBqfv0FyDkbotDOzvR\nYZscOr6RodLIRT+VwG53o186VwYL1wyngyJ9Q5S/+jmutlcOtytxfvjOqFdP\nNUmq\r\n=sXzq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaP3muKkM+aHTVrkLc9l11NTtgv5xjwcoz+j6urCKLLQIgdH3bmIczmxuRZLLFEgsD5hdvSe8nqsATFVJFbMMc9yY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.1-next-02f9cda.0_1585574320201_0.5180020879747642"},"_hasShrinkwrap":false},"1.7.1-next-bbc6b59.0":{"name":"@xdn/core","version":"1.7.1-next-bbc6b59.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.7.1-next-bbc6b59.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-Of95Jit4ICAET1If19reTGVSODAY2HGkXr6HqwGI++L3vcA4VD6fq0l/BZ9beSQ9z7962dhqyO9p/6jzTLR1SA==","shasum":"eea55fb4c646688a996783c84eab53bd27e62f2a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.1-next-bbc6b59.0.tgz","fileCount":44,"unpackedSize":331838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegfHOCRA9TVsSAnZWagAANiUP/A6Nz6xnRYxcGjd9dBza\n9Qf9Goi/jTXs1CuIHN3ZuGG/DryPYcDeMu6D53hIF0VYrmkpKGLP1EgVW8vY\nKQoJv4/sXIgvTXN2NSrxm0XyDcEVkS1UV9lVhUYeK5WH1jnVpz1y52UcCjj1\noBdL7MpIfwfcs8z193+OZA+Jtb6qEfrG5apQd/wmma1EJzjKXb54WYk8lEWs\nRkrNamxEI3z0g0qkl1Rv9LhzAALFP51Nb/lPqJX1A038uT7oJyqCzn/TcH60\nTqGykhKdVfLPyjm6F4Izv6X4NrJV1rnyf28WsuUhaK5D+oV+N96S73SbO5Fx\n+GVu3o2jxhiqHEfHRKqvVp+qxaxHoJ/GTD2E1wu4bgTpaQrQbZFinYwQEPZf\nCj3YFLeEf7RKoUjyyrzBnPNFb+1dLOHlzdNPAg99QafwWR4Ueg8y4ow3Xg/1\nsJEeVdBDPlse8Ru7dRHlV/GcXnEGZBf/a9EIV47sgfqTdOcBmtkbwahQAVfa\n7nnZl/QyT/5i3876PwzDFyGLrlQFTLlYEb+14eTlxBy5WhPE1Si5gWv2J/ED\nIgQxZ+VUN6nusL4NMB67z+xtAxG3gySQsp1jmU2BxenldURSD/VxwGjwf/o8\ncyuH7N1ifU2iGx8BzbxdDc2wOwxwdLDQ6qOsOYQz8f44WOLJsK2ihMXGhI1g\n4YKU\r\n=pRNa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBsPWzM/siOOo2mO6oW9B56Ft/WlZpSVhV1tFn51ebzAiEAl+D7SrYYAY5d9i2ur7/jBzZCu2PjSr0xRXPgg3CVc+s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.1-next-bbc6b59.0_1585574350345_0.002233853058557056"},"_hasShrinkwrap":false},"1.7.1-next-f8ce77f.0":{"name":"@xdn/core","version":"1.7.1-next-f8ce77f.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.7.1-next-f8ce77f.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-tYcjcUKmJzr2D9R3aO2kCck5i1BFPniPdNP9JuKwv9eBiWt/XvBGSePyCTryBbfeTY9CbvLO20fxYDX8POlcBw==","shasum":"c2b53877fba94924ab4bb102a25d2f9dde56f196","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.1-next-f8ce77f.0.tgz","fileCount":44,"unpackedSize":331838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegfsmCRA9TVsSAnZWagAAJy8P/2k9VK49TJ41uexNyJaK\nXN8Dv6zIYXGrDtCEtZonPp3B4o4Pk3KjpstZVMgTM7oMShwD+LMXmjKd135f\n5bc/0h5+Be2vo6DcGVaC8YNyWHGKcM8ZIbiHxuPmCbjEkeCqnxLlQJ2VeIW7\nmJ51Wj27ZqAhdivjTncRyiZ5eecwVql57nrjCoQVee8AJzoXeLPopL4JfagL\nKzzuCkCE8BNLrtn8Y1jiv88biT+6e/XVXn9ZBwE3kEAVDMRBP6fbgkfgxYRi\npOQBC9o2dOaJ6GVYupllLLZgPLDZ7nqwqNsjXKkc053oZgy0RpvBuQC48b8l\nhaSgKCk0UVCierP1Vs8g7j65F8/jzAbs3dLZt8sN/+x9uaEEKtSbmi4qOqKZ\nvLo6CMRwx0IQuXTUupFurz3ApafzPIFxCm2BAmj01d7DVnMiXNcWGYmn0Lb/\nWGpGXtWHHuan6NhDwtuiKIXteod4JByuezXYG944ZbCgkWbFHaN5TFZheglD\nl4myLhKXon36eZWqYTwVLJYQKlngaeTppWmltiAURgP2EsOV4oJdq2CsBnyE\na1FNft1pHtrukkp6CYPnztCZkjesUXdMlDzrPHgvheItwqPLQzR8AkeoIpi1\nEWjUQa9jbLjLOSz2GRDCmkRObxqps+BfIu/uvy1nXpi/damKYvObw3ky8yoH\ndxci\r\n=IDk4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+VwC/iKEtLHrhpP+UadptW/FtLy1MMUJPDnTK9PXPjAIgP16GndAqJawYfg0RX6WAv5Ol/zw4PTOIoi96iGXzu9I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.1-next-f8ce77f.0_1585576741837_0.6097632398975994"},"_hasShrinkwrap":false},"1.7.1-next-6d0ef0f.0":{"name":"@xdn/core","version":"1.7.1-next-6d0ef0f.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.7.1-next-6d0ef0f.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-+w5NkcqvP67YqN7jkPfQfR/MV2w9pHit1KRN8+dOtSR+xvvByaw29EAkE4jYZfzahmmBqw8fOzRTw3+Yei6GMQ==","shasum":"cde4acfa86baffd6004980d195dc4c0034090f20","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.1-next-6d0ef0f.0.tgz","fileCount":44,"unpackedSize":331838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegggNCRA9TVsSAnZWagAASV0P/A73x5K6rJzpVnfu2PmN\npoypt4LoGPRZ0MJtivLYYKz9BJ6THyJyAyEQyZntLQGSXbUBeqVqMufgccNJ\nsKikNC86RGuybK7oUKXlt97ThZVhMRxL18FkpxNOx+3PF4IW8BldnvJGgi1m\nmkkYPfdeTGNwgFXmxgoFocoQL7lhhqlkuBjbrDNDOV0acm4efmUK8EYg+s33\nGQovHBLpbk9FuPqVsXT1M81IWNgTVRxdeb4D6F8BWus2kA99V904Kjd8q45Q\n5kn4SDXRxcmeE6vnTnHHNr6bTJZURO/MCpGIxLn5ToI2kl/3w940Qaco+eSo\niH1AfgXe5KcKB8ITDDSzqhK3af1FEAPp6lvFwwyo4mPN+x80d0uhAYXZJxuq\n2QsDei87Y0ghqa8f1sjGr8e8JcEs52H7aYp+IwdauAhvHtM/19+95eiRBsNP\nxuhA7y0zM8pgwM74c3cb+lkQbAl/saKgyNgGbL9zAo+bVZI0Xtl/pcHrKqNH\nPZpgVwxuAH0zKrUI31K9TmmhSv2auTJmQjwXsIE90445QYYufrCjKeRTiV+Q\nAoM2VnyMUXE++pF4lXNITSbLDhZYe/ntEzLFNkcop/h4S+2d4pHdp62o8jPf\nsSoCkVkMLN1ByJroe98AfqrHEsh0KYXwyv7XtcH5ri9mP2StIQFUs2SrXOwL\nJHtI\r\n=7dFC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICKe4kkUb/web/GoJvANwyYXPYiUMvgm/qphXIUWsLF5AiA/4boBqU//aXOnJaYQZHvuVz2jzE2rP0ASwDsz/L9JRA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.1-next-6d0ef0f.0_1585580045055_0.26007878387586914"},"_hasShrinkwrap":false},"1.7.1-next-014f396.0":{"name":"@xdn/core","version":"1.7.1-next-014f396.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.7.1-next-014f396.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-vFRl2lTuO/8QvvUoUBAYUK+JihLvp1eGP39YckR3MzR8uZRMAwbIrQ/ForkvDsdWiYXEj9hmzP4/W8z/M3OMGQ==","shasum":"a10950108eee64643b1d6dd9bcd5131c092aac1b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.1-next-014f396.0.tgz","fileCount":44,"unpackedSize":332463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegjSjCRA9TVsSAnZWagAABHgP/A1VCT76mE2jBAp9VwkJ\nQCQdXgZtOzWlQwDGXfFetG6EVIGc9g6yL3HgTnM8wlZE56DGTUiK8oJnElJZ\nq7OffhtUaYLdUZpuMNcJQJdEbnq7Z4SfooRiStUUrdkHUt9TijYnDiY4buta\n5bFHwYkCFfGmLc0BY0bPUucDQfM/lyWSJCAtZnI9IbsfKgO/Rf9d7CZS+Li7\nUa/zVtgP4uZiaExqCtM9hqXg3adtj1rbUE/9tHlrWEQXDihQ/Q6/wVSehcuA\nAhAydgeRHEd7JZA2/8wd4JNX9BznogdKMUGbKIbrEB2eOo66oJ0i53YxBSoY\nv/lcd7Pntjz+D5mZ5bWtd+7wRLpBwT7RfnPR3DDfk9Oeak/157z4qoV8+Z4H\ne2lNN6O8+2QWbNjNfcnPJK8YrchrxqxM/DrX1DZ6/q+VnyP33rg7pDbjyGO3\naUKvDGEzNhsR/vdQGvSrgwOtmjBnpuCCFflldPMZVYhLgqL7+5pSxEC7Hndh\nosxs1kailFKyt60v9jp0IXo7Ux5ZpsShJA04euqG3rogvQbyuTRtKrhpr/3l\n3SKTC6+sNSgrLQnK0ATcL9CAnt7o5zO3jk9EH7g1h0Shj59jy9wz8/rI89FT\nhYYhxjmkJIjVS+smcnCkHfLD2ZH0DLFCTElrtcksdf7245eHLvURNgDc+zzm\nQnAC\r\n=6NNE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHNxw2Ou+QHtsSMdWpWBGa+OOOminW/3vk/iSDkTxwh6AiEAki8hUX9OmV6uANWhCcJPHOtSqrsInAQ11MFiHI2oRDw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.1-next-014f396.0_1585591458590_0.7328897565546868"},"_hasShrinkwrap":false},"1.7.1-next-1585660016-2b55908.0":{"name":"@xdn/core","version":"1.7.1-next-1585660016-2b55908.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.7.1-next-1585660016-2b55908.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-R58kBIB0KWkqAHi0+jYX7fxTynp91MEarFtUzq0fbXfRcrdSxmwsWqw8h2DwzgwxJNbsvOcPxI4iiR0PTu1lyA==","shasum":"3d3edb0e46887b8c13927197c387bb2bec55feea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.1-next-1585660016-2b55908.0.tgz","fileCount":44,"unpackedSize":332474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeg0DhCRA9TVsSAnZWagAAPXYP/10jO1UKBrrqspMMxBlI\nUtkNsmiZzakSTWdIxzo7vQuLg4N0yML37NY/b4WiENFhJrLUmJGw/IONf6+U\nNWZJgB8JPrG+r63QIhRbAlQr0D673x1nz0ghXErnMW+SU3YkhvF+sxJ52E5l\ni+6Mvwj9UwZSmvUu7bbzXrOMgRhBi9o7bo+XWaAV63gaMTNkrvu2VlBGUaVq\nQr7vKcTxeUnTBLQrU93INT2/UepWi5Vm9EEnaOQpcNlX6ZjDN2oH9afKFThX\nZdYGWBYLq00Mg8PaklsxaBYArDzAiAIfwg+aWIWERo86I7FCMXe5nzCj+3f7\nyPWu2fM47GL8OTVxkRd+rLisY/l/ROmm9gB4UvPuaQeLOidrJ0+S4mFtW2L9\nWGJ0ct3eJ+I9H/Z3IOb5JIILy2K8lplWkxhYef8eBH4y5rXdAlEKW/1pqijV\nbAZ6EVStcSeX/Dc1iCsqsoaAvRBP6xS8vwF6uGxieP8fASSjL/tu3QddeF7O\nLofxmRdpoTmG1Bd7SufYlBhnngB+fpk/Oc8l7JINZFw/LynJVheMNmNEctfX\nj6SeuN5xR00W+9uJvH7+UMT+U2bPH/mzzC3tSwjEv4mF8RWj79lVdS2djSEm\n6CCyqVupZUDgdlyRtZc4cHHlp2QyVmGULIAwYZ3mHMPdVoJAS0FYXC6jbF75\nh55b\r\n=whDs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIESQvOAIVmKFnbojIrn2jACvGpvlGB6+doyc/Kcln3VwAiBxWoZ10K4VwQR/5GQJcsTiUyU5FdCJtLjA7JrijheUrg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.1-next-1585660016-2b55908.0_1585660128942_0.8364129117436685"},"_hasShrinkwrap":false},"1.7.1-next-1585667303-462f746.0":{"name":"@xdn/core","version":"1.7.1-next-1585667303-462f746.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.7.1-next-1585667303-462f746.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-LO1BxLM9KEYbxYEr+byN5kfsZwmDxwri1mlI5yxIWeolgdaLTbOHCuHhSvWMlmLDAdT6nhuSyhW+TerWT4l+Lg==","shasum":"f89500fe31fc9228ed1885cb1f78c2375f1429f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.1-next-1585667303-462f746.0.tgz","fileCount":44,"unpackedSize":332474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeg11SCRA9TVsSAnZWagAALY0P/3lOpJxXdJ6PKAMQ22mE\n+QjjkHMC6LGWx65fh7BEqniX191opwoJD1HH3xyWd1dDfn/OSBRlB+AqSJ9J\n5Q3qcRt9UEbQHYb3xTw2IyQE/DRxSZYbNGiQEvI2VS8MY+y7vK3tVizpzRrf\nd3XDQ5gNPlEe+AwR0KDvIcnigXlXdLVpuwyf1g3dMScXDvSMKYTlaRU7VR3g\nxgNkG/MjWWiBi6W8Pkjvqn0AQHG5Rg+iyofda6u8CxdEoLQvwBpkaCbLGuiu\nQdT2z2mXL88ST7k8CM5c8IEI5CwppQswGAAiFWU/UCBUOAn6MWAFT5KLV4Uc\nrd517rB7TXIwowcQSH/YEJUE71pCdNAdrqK8HaaFvKD5faUS+2BhQhTiiGsw\nckFpuQ9duAYiG6fF6ghAtplVw61WFjWFDfw8g/jdTvuGqX4BxVMtkKmfHkVq\npQksRiCYFhKJ1CviWi68IXlrsp2FIi0vX2C3b2C80g+XUiHyOV+mOA3+bunZ\ntwoS1R2W6PiXu8Bt0afWJPpicVXxHYkF+hkZLJS/WfKUWZoqU+o8LHnw4WCC\nkRIHOReoHgA/MqfVhdgM4Uoo4wITTsOUB8wSQVSslePsFjoQjMMXxBYZaiIG\ng1pZwuhcYtQVqkp4uOiqSqbIrBzaioVv5wicyyTiRfOAs055D0GM00f+4Zwf\n2O6J\r\n=ZXN2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA17GQM8KOJz7TZr690XXdUaQyvAUtUryJ4iAKDNiNSqAiAK+bxlS6OIR2wQ4f8bHKB7RTy12un6smUg82ppcsbj0Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.1-next-1585667303-462f746.0_1585667409884_0.14469785053927398"},"_hasShrinkwrap":false},"1.7.1-next-1585667433-2740601.0":{"name":"@xdn/core","version":"1.7.1-next-1585667433-2740601.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"delay":1000,"patterns":["src","bin","serverless.yml","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.7.1-next-1585667433-2740601.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-oo8jW8EZYiiq72xCzLxFGxZrTMkM1JwwTv7gRSN+AgFzMW9Z+oEmvL1divLQAuAHlAuIRZoo0PX2X7DpjviCLg==","shasum":"9a8723183d53b3e2f84cfe70596008bbe597f144","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.7.1-next-1585667433-2740601.0.tgz","fileCount":44,"unpackedSize":332474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeg13QCRA9TVsSAnZWagAAKpUP/1JSeBN/Fdl0uSYh6PSR\nMZ1tD6JvivcWjw9NMNOJSGOf5bavPIjHVoasY9sY/3lQx8ELsOWui9Gp4NKu\nBrpPe9eZJG42/blgz+LvtYI2+2tyuITdIwK13Z3WU+X8Coi9xeF2vCPopryG\nQF63KjSQJPZQ/qLbHJr8sm3/fe5ReZetGs3WmKu47KWPRSv8eOpp9DB2Zz+N\nmdwe5yZopmOLxLqssCflzMb6a0wFqk6RjgZVXeA2zuHQ4p1H7N3Qc6LmADKL\ngqk/z+Tphb0SWNNfHWklfMt9tR0scrUXJ/oBbbw3AAPAE7FR1z8IfOKf+G3s\nopzZHknUC5k+sigx8Pi2KDWpr7HGYOY/dNNt0bYbfDJeRtoEyFNkOVAKDL2S\nLvMBGDMLqhvee71CM2YKQNFgQLW8IMy/5NwJx8vMwE/gq/jkZ+FAJ3xX6rlc\nfXb5gfctwveIXukB77Y7VvoZbSfozWpmt4XkDbnyqmFb+td5wy/U6dNYBiXa\nVfmp1xlQTyr12AzZAB7zRL3NwQ30l4pIKAqXzquPcVIVB16IDAlLrDGU6xkK\nN6pN9hbu0xtxa/UvwiCn0icRNEdXfrgYV3DIm4ifurSfg6Q/peiNnX0TtsC+\nWtYyG0bUFxVFGVMJTBW/okbgvZ0RSRyNfyT0aimRtncDTOx66qhcrRLqRtOb\nW0RZ\r\n=WTCM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHS27vr297jJMjSpzP8A5usq1fOMNlBdjYrkvEl85IDgIgPNlDgrIUPnovYUzaxrQC+oU8HkC/OosavnwoH0TNt4Q="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.7.1-next-1585667433-2740601.0_1585667535747_0.7740715004870269"},"_hasShrinkwrap":false},"1.8.0-next-1585741642-6c6487f.0":{"name":"@xdn/core","version":"1.8.0-next-1585741642-6c6487f.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.0-next-1585741642-6c6487f.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-i6z423rbtSN2x5ivlO3rSkCkTb9d01jcO30Uiy2H14e9nyiGelGhd66R50b0d40avs07K9WoFCIhu+xfsBqy6g==","shasum":"fa438bc779745d372c290d0c39ad5cb198bf1b64","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.0-next-1585741642-6c6487f.0.tgz","fileCount":49,"unpackedSize":335958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehH9xCRA9TVsSAnZWagAAKzoP/1iDfZUr5hT/m7ZectM9\ne0xz0UzJ3rxjw+UVLV4P0eCDqVfoDavIdLVXkitB2+zgzoCnN9MqiVkEbGpN\n1hB7Xx8zGUFHqMH6pRPsv92vqkzMJbPu6Pt6Ax3ZJdkhhenvKP924ViHWRsE\n5B2ibvi4r0dXzlC9EUpjLcKoAQ3Ok9C0mZz0CxyZ5krilmHlDEq/wIkbOwpf\nCLvNOMF2bOVWvJZj/y9sFDCHjyHgU+NZ8jWLWym8vWfwV3ha5bE5/qOHZwds\nrsb8UwoEsXw6kp0sM9z4WBOEc3lahvjhFUvomtbX1KusCVP/fxqEYJKfsotS\noeK1hgujQOPtkPE/I1tQyzLH41oPt/VGNRmER3gx8jcuaJ7CiXn13ypkZC1u\n+xvrbNWcUYWZ7aKcZvDEd0k7BhCMVmENTLF6+AJXwSyXqJ5nIh6cYRRVVgBa\nPOS2yi0zmfedibGXWaLRwB4xyoXLuQRHQ8iOZQnWHE8sp50MfJ2wEfDf8KeM\nV6cz0NumLNO7YzH9A6AuIl5sgqHBG5lqFQzFZPHpEQiyx3VyCWwbRM+cRGG0\ng02JSEXuFXZY09VoiQ7Z6/Hit4+Cq/JHYtyLcGZBGPF94oQu9aXEpzceyMbl\nl/l3Npn5xwyNtzwQX7+6TPkAEtaAgTSZriVJF6y1yMBsfwM4YRO+Q9bjpUBO\nHUl1\r\n=Nvdg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJSAy8Bvwtj48KFmpgxYTwuUo6jt3tsUvECeETNIuP0AIgWCog6OHVN3TnVufKlOHRt6Xb1tgkkYQOg6xwZGJtz9o="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.0-next-1585741642-6c6487f.0_1585741681382_0.7971627681366551"},"_hasShrinkwrap":false},"1.8.1-next-1585741676-8acb976.0":{"name":"@xdn/core","version":"1.8.1-next-1585741676-8acb976.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.1-next-1585741676-8acb976.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-z2odfN1/UT+vafTFWXd+iiI1paoQe+vEKTpwxi8LJaU3uG2Q2xaFL4mhC3Lxg/Tr7udDCDoavZtMdYy5ytdGHg==","shasum":"136f54a342deeb3f3260fcd1f8c7ee8228f5d5e2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.1-next-1585741676-8acb976.0.tgz","fileCount":49,"unpackedSize":335958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehH+PCRA9TVsSAnZWagAA5LMP/2v+VB0YTETgx4cAnGNm\nHgLX4eu/kFl5GTJBpOAxVo/5/MzXu+5QjF9Ol64bIS0ZJneCvnTGjxZ8xKGS\nrlYwxhqY/7PLce94vi4vv2VPq4NVWUaQ2dv9c6s+MIbSMkkgwApHM0AJlLyQ\nquvKGQ0U6Ijq+qggd2FHcLfkwfQ2jpxuO/wbbToEJf47gGH+5/uJNfRKOPz9\n6HrhiuukyNnie3NHfs/SNiu/mDka3S7Ov4ryucNnTX2waB25CX9t2JlwJNGl\nU0HYzVgif5F73XNnm/bVvEXGUWJtTG46Y+OEW2Vd85zPYvNRkXj2Iqz4YZX3\nZBVwzifRsmz/2eZ1UnQpXUUCNLAZ9o0gi0UrEKYDv/PovbziiJjW9V6pjJYk\n+Y6hTo2/yqlkbACbKCgd7Etjc1NFZwWfN4c8NfrGpi3qawwre9A+KjQyfTOp\n8IbExY5MIew7QNZTmjvIoKB2qZoPgGgFDVWkByllvGsL9onx4/KIM2oyiXNz\nFAzgd+OEYXC5B8jwdBg/LaR/CqogpJbAcm58XcNTPWUD3sA5pgN01Q4aYmvj\n9dEvV+TH1gGIKz9U2p6HtdhdegPKNxQhMQ5WizGgEEYm90xsunodJQYyS8VQ\n3EksbdtRRIOndmnTJtFFrkL5c+UFpt7kcGaNO4aTXseVdYGkDiNvmeNFl/FD\nUiLX\r\n=NA3P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAsRMYY5yv0Qv2evteLm+GyIAwToHkdWOUKNJ/FimyggAiBhbG0FF3RhsezhtfGtHhSOFtiIwVUaYHsBpxEccA6ubw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.1-next-1585741676-8acb976.0_1585741711314_0.8276470614981839"},"_hasShrinkwrap":false},"1.8.0":{"name":"@xdn/core","version":"1.8.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.8.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-gWeQCcijkQJTUVXK9d+5dZ6asmsdUXBFHIf23TKWDpxUPqME9z8wkRQgr3hkC1Qydt7rcPFlrwuZwXPP4UM4kQ==","shasum":"fcd96e7c41cabaa9b1e2fc9fef48d58850a559b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.0.tgz","fileCount":49,"unpackedSize":335932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehH/3CRA9TVsSAnZWagAADg8P/2XgqCzrM9dB3HZkFbrP\nUU+6I+Eixs8hFOInIH3d2WAZJH79f+lBNdteg4DNFR1H3z1IOXl0yYhlG7IU\nasYzeC0DwPUu9B9r94fBvBiCXt/D0wKNFbTT0w3HwTsxAwGV2wRX/DSh05yb\n+UKqDQvd63EdDgbSlsYBBOhCWcXl/LpLMaZ+JWHoVmP4dvHbS6MAT237ViQ1\nY8k4qvTOmbMBS5JzVys3NV8bwPXBrPUkT9h4yoPrupjHeUg+2MdE3hizTxs7\nWdewxiarDcDTzgr4DC4arF5bIfI9fcfyexOaUigUaYReGFlNpTwwvXcvJ9aQ\nfngx5TR7TZPrrZhhaImoRq3EZ53BTAjtlXMgPiRPeYWnZlFN6ShPm3DPoM+T\nzxQsNf+38vjNqQ71O1/n7sAJqhMsiww+zj+Qx4SDbOqeFAZitPOuQAULe8a5\nPnnXdYlwfNhi+eGpbDT7/J8IqE1yRyJiQGm2C037mjl/jZGTvCnL3rSfUrB+\nYccscVbGL5vwZFFQeb93iO4cCO9D9b1aTacIoPzFFsbsX+bn15zAZBmGEmvM\nebxErqn2yf2bR6667U+/Ql4up9BLuFvY6ewjmF9Q7ef8b6xtM6e6uTKASrm3\nZUY/Tnj2vL/GNpT0Bq6rHLkB/xw8v6IeLhFJ0rszIkzw2pfJgoiCBWaj9Ogf\nMJN+\r\n=+SBH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEcbfAyv5zZZk31zbC5+Juh5ptpbhYE5bX6hWAvSskPAIhAPiNNWVne/jii+hJm9GRuYIOlLH32a2WNZtKyzX/JpCC"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.0_1585741815288_0.23534863151204188"},"_hasShrinkwrap":false},"1.8.2-next-1585749294-ef04f97.0":{"name":"@xdn/core","version":"1.8.2-next-1585749294-ef04f97.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.2-next-1585749294-ef04f97.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-ZO+bGOvuB6fdZ+y8ib+rUC/1NltEybw8+KNZupr3lW621SvtaxOYRLc+HxkOY0HeAReqzkInxUJbCAY0r2SA5Q==","shasum":"4b2b6f2875c6717ea351ff2298da9b1001f863d6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.2-next-1585749294-ef04f97.0.tgz","fileCount":49,"unpackedSize":335958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehJ1PCRA9TVsSAnZWagAACkgP/2rJUmS3QhNknovnLib2\nRoqN5ZBsjkpNnLRI77xy22mYPtY+dxft2cylYBBSZcRfE0tnTazffTvvr0tO\n/htdNeadBKb6UEsCbkQsNpg5TlN60iolAUWisPDypBFcAfEVvcsjcWpTTb+h\n36PTeah/0cwuAzKJ0EBDsAaFA6ES/PX4oaoUFHDodLhiC7RYbjIKZGsNifXP\nT104DmdYn7W4pcQUNrtYNscFUa++KgavZYmZnM5RWhJrMytDpXBhSwm3+5S7\nBmccUPM3rsvsT6fvO1lEqG0cmQdlYOtqDVJ7fql6Zbf3/gL7KIIgyPz3U7xv\n/NXYG5C20PNqysgfyTp6+YOiVjZ4GFtNWoF0iW/2ZXH0Ui0NZUoxLKqynUHL\nATEyGFFxmbZGVlZuo48Km5WKtGyZObz1T0Z4nYGNcjSdgBuXzjdy/W7JtgZN\ni9sFIwZWAc2Dmn+cW89SLSlT2OSa5Otb6tcrmvHuW4jLOdBu1hEc4/73mkO7\nhj6jG+MYrRRzLeIgw4vyYBpIayhKaWIHDCkx5RIBJ1O8MMqIK6+Ell3FClmj\n3hUV5cZgA7oyOCFWNAnpSG0dtjd9b8YUgI2imbORwFhjkDZLC7CqYj1a41Xx\nmDA4QRT1pa7y0+3XHAMiQsnJCJk8hkSLxusQYLGSjQx/VwN3DW8NCEcZmIQa\nWzY5\r\n=SleQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDh9PMFRPz5aNcZqp5QndXbLkBrCjZ/hJ5ZxT2DdkLnaQIhAIbdX9qE++YtlnvC5CSCEU2QWuF78fV6iCJQG2iuESNS"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.2-next-1585749294-ef04f97.0_1585749327021_0.9354680470214325"},"_hasShrinkwrap":false},"1.8.1":{"name":"@xdn/core","version":"1.8.1","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.8.1","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-IKtb402/c374AqNpjULoEwF75pk90Yk80D9KnUHECXT3AFB0FPTYxpB/kfY/HgRrEuowly2kYguVS1gYb3E1Nw==","shasum":"d4377268ec6ccff5f6093b869b62a20210a2bc4f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.1.tgz","fileCount":49,"unpackedSize":335932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehJ2KCRA9TVsSAnZWagAAo+cP/RWOv+dVHcSDS14ibdtX\n27A6t9iTLxciNByGOG8m3ljqMHm77fZsMu+d/JC80rROJaEFTtD7GzTzkZO2\nt9HbfwBIoUdYJc5RfYRlyETr4jzG52wzV787v7JtXsgihJXItLOjYPun0brq\nUxBfbpJMD1rcdSGEWyrqj30waA1ONdMxg55KXCcOCx2KVd+4rNIwBpakqFRK\ntNoMkorycu68qEcwlRkMpE3rpes4cthiLTYaTjswMzvBOXr4PfE4oyrN4L7Z\nkjXqq5uMm48NC701R1YmIFjYe6b6wqW22tEelUW/LIWpbNQokqFc0mAeZRTG\niuKx/lKNzTlRdmmakwwZz9enOkUikQpe71x2qx7wqbL/lBEprKGDGl1MPJWH\nuVjqnb54z+/BniHfDXsjrW+ySQDmTbP3Wb4wZ7X3K8ir1LUYdaJjFpnGnR6v\nUtfSZaOkMPxauW7Do3fslmF3U0naMmdy4mMXlTFEFK0GP5OuVwydXt4dxWl2\nWlxkQ8QLS2H1DLdQiwrRWi9PojPBZzHsUeFKOv6SP37U/9uLdafqDhGP2Hzo\nlhsL9M5gQu6cFKnktVEFP6zMKRwuasW1G+TAgyOqQdPYJfpS9HtL00f6NJDx\nc0DciEwlFkzmhJq/L0NGLgkU+OCj6Yxm99cT4529ivTETq2/WCrItazTZaDX\nxN7Q\r\n=OgVc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICer0jlx9D196zL8e83pFl/U0i5sZv5TKvkKlRvzm1uXAiAAwN7NlDmUVhq85FolJ9PaiLJ4ESTCPIw2nkySERsPrA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.1_1585749386014_0.702927838324948"},"_hasShrinkwrap":false},"1.8.2-next-1585763272-c00b57a.0":{"name":"@xdn/core","version":"1.8.2-next-1585763272-c00b57a.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.2-next-1585763272-c00b57a.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-kS7aG89I+Ww2HOORkv3q+ETeir6gJu0y8UH8JpA2WyyVhJQ8b+KQ+E6dzWnHoXQmFKK1BMhY4L1AaeuAKNur4g==","shasum":"c65e83d672cdd8593b0ee047c2ea07487b382aac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.2-next-1585763272-c00b57a.0.tgz","fileCount":49,"unpackedSize":335958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehNPsCRA9TVsSAnZWagAA1twP/jKZAncCHFf79rtpmVP6\nvTjeb7tIMZ5OrIGivtC6OAPThM2FCDQiC3JXapqXipkTBM6DBQQof3ID9a5a\nYBJK+h+U6QJe1fbj/VlbJhYxs7vBrtM+Hn8fc8T7JIjp0F2FNL+5TC8Yd9EE\nngXA4VOV9zuAqb/eg4U2VpwX1i2uv3191ieMRiY9zWhi+tDKmnFXd6x6lkk6\nSwgm/C/QUn9+JxOx0FPscDh9MP5CQiVSxaW5xji5k3t6ofEP/qxxvjkYBFg0\n37w8snhYkFYmmfdJyHm7DtEcyXe0sF1UyKOUUddMPdjONA1JhqKzPqIT2OIq\nRHU/g11DS5Gg/9Scd/xKAgOZ2mw5EAuljfQDX/fztCeY3GW+PK4qqU0/Tn/W\n8x/esruCXw1vkiJ2Vwsa37uAImvHX1mAYVz88JFVETo+r5bGMHjnXKXr68G0\nNbWDCI3oPM2NYgIIRmlX4KHMYA1kNK6j3Joc6NCDA7Bt3Q4LxPI/8cxtxFn+\n2VUHGLmbR1mKNaOBNN0B5O2fmhfcRCrlVLbt9SdJuB0xq7mmQZk/R1zkH+ls\nFIxdNiQRz7Atn/auYNe1rjrglyHR2k2lJdNNu5CmPBaeDnHI6LLGAJBZIy5L\niceeLsLVCvjoinCfyFhsKOzCpZ6r+b3r/9fo02caq54jJQ4BOtazBY3Q5oZQ\nU8dx\r\n=RIcS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5sJyWCwutod1f9NZAOX/+QqvzA2LXZvOQpD+PgqDuZAIgfUzb6V5kO+s1/9fMrFabozUzdNDfwcg4KcSM9QlBfXA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.2-next-1585763272-c00b57a.0_1585763308204_0.751521145080452"},"_hasShrinkwrap":false},"1.8.4-next-1585768256-50d90ed.0":{"name":"@xdn/core","version":"1.8.4-next-1585768256-50d90ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.4-next-1585768256-50d90ed.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-+0gudJ1knFxeHjL6AkIwQ8JtTK1Q3OlpOyg4l0owesHPwqwX++1tpKOuqaXvcg0Pz9UwBXZ+uzRAURsV6W+UFw==","shasum":"65a538c1a54b90d662bb6bb1ce5cd96584f950f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.4-next-1585768256-50d90ed.0.tgz","fileCount":49,"unpackedSize":335958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehOdmCRA9TVsSAnZWagAAigIP/1MpqX9cHIUnBC+3LWqx\nhDMKg8xD3A2LEQn1k2ikGeaNn59iREyfuALM8riCTmZvi1z7QJjqj2TEB2dt\nTV1evu4dUxEofhJoBO+WDuLiStF4XQj9sOVAyH5dpY8UMbVGECIOGmnJqnQG\nTlQQbRz9DVMtXLRo5Py4WsP0VBBU27DPcon6HVjKIO0nx7GQp6rcOuCU+5ji\nEg9wKYsOyOTrAMsQsnAiwob3xfraIT4kRJdpa4dvUP+wyFlkXomU44qu3dXH\nz6pPFtyZWxMxlm2YJZYuRuTDK7KEuTKVhUyvS4w8mkZFq4BdqIszWxsPX/px\n2XHgLDZ6Ah6k6utbVgX9MaAaN/kknZ4zo+1WkES1PFhd5tyYn5qgq6C+3IR+\nozfqGJHkgnYo5TGQb8uP+5i9PwaN7z+tTFfiK1wa4QyTR8aqONJVlLMHwfzU\n0o4rjLnHres8HdZJUKBorOmBdgmXNYZ1xmcGYnkI/G3HcCssg20zb+0ISUXt\n5KYhRq1P9Ou0MViOCF+V25ylVBaJWxToj2siGYqqLvHGRxXolwMf/ySW3Hjs\nUmrKeZdX6uPJyIx4R3jkrumQujnCy3TmAqG3sWWl7Pq3u30Zj3q6fkPpaGCJ\nzxQKsnVTqfgeYgcULmLRYpp3UaHgYBwjJ2h9Y3lBgWrsEKmcdZKpRLg/xjcZ\nMEIO\r\n=9sTy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDepE0Z0K/v/EcMs/DjVRGIwd69Pl9f0vPODCpNN/Qg/wIhAKLf5JQO2yxHPe0HxePqMYu8kpM1Fwubh7rDiz1WPZDE"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.4-next-1585768256-50d90ed.0_1585768293559_0.5055763123620733"},"_hasShrinkwrap":false},"1.8.3":{"name":"@xdn/core","version":"1.8.3","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.8.3","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-/g13CqAxfpDUCoLDp4/XBZ9vPArwAXQn6tsOssIgGkrJyW4/93++JnG7VAk+M011bkWSLjlNM9+ZgEPS8vqs/w==","shasum":"5db039a58db0f9cb009daee88c1ca267e9c5176b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.3.tgz","fileCount":49,"unpackedSize":335932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehOhLCRA9TVsSAnZWagAAJ20QAJLloujoIv5OsHOXafAY\nMAhQ3rhKAvCckoklUa520NGYRpUkwwV2S9VsbHm2gRtHKT7TW0Y5OLzGSxdT\nKMs9WkiVI1JbYtePmWfg2Lsr3B3Ohz8sNnXOIBC7tq2kZ9rqNdwoWkwNv+mG\n4pEH9xdje36+Ep8r8m+yqUpEQf0P7YPf72Qqj+Um5/0oweB19HZXTa1Xfv4j\nBHtpf+P+cJQqQEaBXWND5LJ8SSWJifryq0knAAqjMv0pISRgLofVrLsltacW\n/MmqGzi8dPL6Jn/hI6J/l0aFU27qk5ICgPDDCA7Im05urdwgkRuV6r9w5kXj\n1q04nEi4K+ofGkISpd3AkCF/j/Cb35F4pDLG2myQpfo2ODM/tRc2KvXCuybj\nGMLCBcLg1lcc4szKivkDai1oWhIQabl5NCwZrGV7ny1a7CwFtXFB7XgtAHut\nR3043gNZvU0kYFeupI8kbMlTxrUiB0TDWtb68d/AY+mZq5nU1wrTUfacVZWz\nkq+Y4nDgMVuChkyMqh6RpwO3xPIiVNlFsiuLXS13AuzLNV6Md++WWXwRh7d0\nX9lxXydIoZKhQuX/FfgtsnsWamIPUw9raIRFOVFCn7w5bj0TYk48LMPO7z9z\nok+jWANfmCNWIGEEluaGClGoEGPl9j2lXBAuW2Kitj6IrJfv5Pm7fwxK33ye\nkEZ1\r\n=gwrF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCU6GvbL45NA1oHOI/6OHNXc5LU6PhlLmfC7IhkOV/slAIgJ7hmanERr1Jgm8lXch/LyIuAz34whoHirWN9RvzkcUA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.3_1585768523473_0.6824572710685803"},"_hasShrinkwrap":false},"1.8.4-next-1585771949-77925fa.0":{"name":"@xdn/core","version":"1.8.4-next-1585771949-77925fa.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.4-next-1585771949-77925fa.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-29B9lr1p/N0p8dS/2OR7Ez+5gqwV/9fj3tDiIcsE5J8D/m4d7l1HHfVe8RResvNfEChN+4HNf99yfdsAKyH7Fg==","shasum":"f850b1eb59812b76b4e626cbacbfe907acfcc4b9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.4-next-1585771949-77925fa.0.tgz","fileCount":49,"unpackedSize":335958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehPXRCRA9TVsSAnZWagAAx9MQAJq/cH1wWoccAWwW3mL0\n4jk0Ic5iStw0QtGPcARYCpdFFO9SivyrC2EPpwTlnxIcwC4EhUnJ6t1O8jvX\n9gTMxL2Vpdui7Sx8riqQjS+QTXB3lzPeDfy9aLqHzM0sS7hEdPVAVujvuPaj\natJq6yLcdgMV0MZlMmB4kDUngBdg0UFIEqwKorNH1f+/m/5WwUsqadfmyfnd\nBm0yz684tigAOfSJVAGUeNdhbLTzZvPKs3SKCOWSGjwcYtqpIF524wLS1Nw+\nISBt+uC4ixDv25V7JcKcY65y0t+sqvl5lbEb4Wnsg1Za7oiD8a5CLjZSOiOG\ncpB1/AEr1AboohN+WI3qgg5+kYDfpDSUyrRVoXSBDsUJfDzC2rQsGWjbrZqO\ntOJrJ13Kwyevm3Ea8+iteXAzRv1d9IePpDHqJIFl5du2vdYHYmmDUVwWmmMu\nzkfqkboclhIMVxi6Ze3r6XYCwU/8lN8KDJ8KiDUUvI5abi6dMXgg7RyOwqO6\nLS/Dz8tIUf/nPBmfpkyYFjno7ypG+edFzzUXZBqaeLYN8qLzeoAw1jbreepv\nHkHqFf7BdFFOEHPHwGrF5w3dZWov0kNW/A3HoG8NXSdgAuXqD7kp8+vHgP6z\ncn9eCTBqCCWtKIldDLWRGDIKGGW3/heDE3wse4fyMOdEOK34pDiLd7YTurMs\nlsz9\r\n=hTHq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE5xSj6LGTuIija8t2xZ4sr4fVxbnozlaMDpctk7rTjWAiEA8/joS2Q2sLVKznsHb/Nh/WU7/8F8KZZIljz3fRC4HD4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.4-next-1585771949-77925fa.0_1585771985116_0.9379416636467766"},"_hasShrinkwrap":false},"1.8.5-next-1585772359-caa6c77.0":{"name":"@xdn/core","version":"1.8.5-next-1585772359-caa6c77.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.5-next-1585772359-caa6c77.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-CWr40R7fn0QRwwz/PyTYgc0jC7Wb6w5qIcZuy0Gy36GNExH5EqUQP468kHvmyo99VaMC/TwuIR8BRy4IlyaVvw==","shasum":"8555d21ab32951f9caa00cae76f8a7d5d24327cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.5-next-1585772359-caa6c77.0.tgz","fileCount":49,"unpackedSize":335958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehPdtCRA9TVsSAnZWagAATfYP/jLODtx/U8uthlTY8LEs\nAx9YU3dcnWC6NJdp7spR+XQVt6MnZoJ3vWaPZ/BEvSM6g3rPv2YYMmA9lbJZ\nBlXDPOdFvCBtRRaw60ULNDqPnOy80xxfT6ZRJlZq0BnMh9hcSaID7kcJi8By\n9sDJ46rWMUueJsGDyMok4nJ6X+rbl/o1SN8vsuQFgYQqgOO2ajLdsLkhl3mB\n4siVU+P7+G3zRSrHNBtEWtab2IDWXqIGChRXC8hu+XPJJyKCBBEd2z0JvRdS\n325gcpl36RMb9phVECLR8h8MY1lrx2sJCuwAuzZ5ir67v+5Uu+LHJbVBi1Ea\nm21DDJ96t3pkHhcJEKWGq7NAhjSBolXACJDJjuqkNzoDnFyjZTh6AD5qtuxc\nzMiENkXNMwq/TRTtDbeNeeqsof9RsDAK7EZQxn7it/hcEErjZ1nM/Z6Z8TqY\nGXDmC9ckAu3tLW3GbGwUtFXzdCkfkqvrILXyBamHPKRahcDfaXWbvIKBM3sH\nM9NUSpXs6bhPXxIxWIgyk9/9QkEfHAn1qPzkRVcF/tULIhK4Mr2JsXL5sERO\ni3ksMUBIHV141B4NFW9C2dNes5u2A32ASsjVtJgT8g2NkH8RpXthgZgRnC2F\nel+rY6nlJVX480MGtCN8L15prcVVcRaM2i0q6ooUXBTatbgLnXbP/Z4a2qr2\n8ceS\r\n=oRhQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcANIPMV1yxN+5vh76po5JViGCsBL1hQsZyW3rG3DpeQIhAMmokQjOlMg8he3HHAvSdHMgeb2yp7eF9VPCKKAM0ImG"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.5-next-1585772359-caa6c77.0_1585772396654_0.8273835126143432"},"_hasShrinkwrap":false},"1.8.4":{"name":"@xdn/core","version":"1.8.4","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.8.4","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-db7ZntDr3+8SS0Tmsr5HqovWif7PNGudgtrpUQT8hqsfo0CnxQYoeDE1y1+SDTyG3/qhDJ9f7QLp7A26tMYRFA==","shasum":"8409cb4020b3c5a713eaaa354c7b11fe175ff2e5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.4.tgz","fileCount":49,"unpackedSize":335932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehPfECRA9TVsSAnZWagAARDgP/3+qiQWhRKDoJXSjf3Ri\nw8J9fdfUaSWvCj9ufZURx3aYBq/ZfQXmMm+YTSM12diWwOQIaDyWaLCF04C3\nqBq8pzCDCXF0WDCA+aFLReLvO/hGMujhcg6gUVYCKnwXEC2N5uwAxy9AHTUN\nvQlT72MbhYQRKWA1jIBmG7shvpOjn97Okr9ueB12/uzWp1KFqMiWVCkG/Jj8\nNLk9X5f+cz4LAyXLcQSc8GGHu6bWHkuaSO67AkPUuNe0Dp/gGvgOySdFFr6c\nJAIV5h+RSH5WMt5QopZN/+GlmeIQxHfIiLGMKvnyj+nKFZG5gqy2tJGm3tFS\nWnvXyp/bkikYquMaAc8R/H3YMze/gO0etYTSHep70bSPWzZYUxyrWUgOr2az\nL33EYZNm7+4P57kj+9+iwl25D6tfLpLwyk7Mzd5DCYao+yyPFagy8CuNI8Gj\neyriUETVoM7HfJopY3hWrkqrU7yFtarPv8jNtUbpmTUrEiuPaaXHADKJ3PNf\nkBQlVo3LWTTNqkICS+d/eRL/iLr20bk1tVY7TnTMSAZsYOJ/EcIAkB3jYPOH\nWp8xRcnJwL5iw1gEoQkCbgCVBTITAzZaMgkiN+t1u+0q5Nt79Dcw0enbdv9a\nXfiu1zSQatsCbb9IweoZ1P3KwYsFS30jaKufV/FqOiS27fDXEZJrnz4EYhTW\nC5ab\r\n=LpbX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyZm1JIART+vHS7vD7tfGwSUp4UkkqCBivHISa6kIOIQIhAL6FaxAj9pWFIZSpPMH+sf/7MMu1v8WSQWTbdIY7vxEs"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.4_1585772484168_0.8832770846308506"},"_hasShrinkwrap":false},"1.8.5-next-1585829512-642ef817.0":{"name":"@xdn/core","version":"1.8.5-next-1585829512-642ef817.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.5-next-1585829512-642ef817.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-9A6gmKoUd/iD2db73d6+ey1+Lk6wPJL0+efBHWONgtVlogGhK2y5mvYjl3qjq698ixP8GdzT37hN7gktaSDEog==","shasum":"490cbf14d699fc96393a8bd51bc9224c44a811ff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.5-next-1585829512-642ef817.0.tgz","fileCount":49,"unpackedSize":335959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehdapCRA9TVsSAnZWagAAxaUP/RepTPktlNS9z9Iq9G2b\ndjlhGhSCJ7I2cCZaxVZi2ByRHQx8pJKdjOeLVijQ4ozMn/NizKGp1bSLhJZg\nhTPKCZgCvEzTWe7P+h+pv/S8vuuFBd/ZpMSCLw3pk6Hi/TG3GVrbali1eJFp\n26qyZtXCW96uMukRWOu1Z+8Gl8AMFtOckALf8b4sbrDpoW1GN1qOEVNHGqNC\nQuflfYPDWlEtq/NsQEnfD1SoxU17g5X47JKdlMEwqgGCxLiGUxC9N6kDzkfM\nXmCtHMRPYKp4eZLesKLXFrzbGiZn37Tlqy6CyHZdcOYqQuNNajQvzw/qRgk4\nxy09z4UeHdROZi5fEE/Af2Q8WdG3fX9rY0J0V1i90D1u0EnjRySo9QSk2ecg\nxHoT71wLDkrroqgWpCKI1LORJUkhcLbFsvSsrB4oaT9Ki+otD7I4bzzhSMeT\nhortzirvMEn3n05GeaxO2yGEAy/VGLCpSQm3TLowEEAc37u/6io3LjANCxgN\nnLgoXgY6082Vy9AM8ZOcJ3tCoYKHlijyOAmVpjldIbO995HMWzxqtqlNDN5x\nb4Pn7bzPi4ghJm7zZJXCqs87dRc/ojNI+WR2vWLJz+piG8xMqOHGP5+DA0IF\nC4D4goWOu/GU7TF8SjjG7BRQPqPIXjBJ6pwEbcyR1rTSm2YZktBq4AS9ulml\n+zkQ\r\n=r4IO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG0Aj8bbnSdKdrrBPhhiFXatoYH2SmEdb2rFswSq61P/AiAqFOjaJMx6Fld2kARJ7G0byFp3Tpkp5bmGMB5/RqzBLA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.5-next-1585829512-642ef817.0_1585829545230_0.6607314606644292"},"_hasShrinkwrap":false},"1.8.5-next-1585831192-599e680.0":{"name":"@xdn/core","version":"1.8.5-next-1585831192-599e680.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.5-next-1585831192-599e680.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-f25uOE0c+ntUhoDBWZJOAsAJOBlI9/dljWwXgw+cpRUi5YsknB7FP7sVTWcDgv680xzvMqKqKAfqLYVlqiaoIA==","shasum":"db4104728303eb218df9dc4d3a0b19d02c49ad7d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.5-next-1585831192-599e680.0.tgz","fileCount":49,"unpackedSize":340161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehd0+CRA9TVsSAnZWagAAyxQP/ju/0ppzdg4xbgtrRyVM\nIIUgjF2FIYae02dBOWmuVPm3Zgd8kznD/DW9Mgl1lS6Lrbmg7tePIqSXShiY\nIilVFqJD1HHMn8gR646LtF5bWT02wwjsLg0AGZTx4/anRaDJI2+hP7po51Gj\n/Pru9Oj2oCIr1hYRKza1VAVHTzTPtb8wF5csJSKbgflo/Kfbv6oisy5WU2Cr\npsk34YgxhfwKf89/TvLukHyD1gwJSqtoZ2NUxFqUhft16gkLh0ZMlePabauz\nMMHJG73Ue8MVNREOXAsLLuH4MP4J74P0b+NrBE9+ztwXNCFBqRJCXVqJ4SG8\n10yfoN37N4DYwdYvFwlgds1mPcMpZgVXHza80i0tT5aCJsbEiXtGLVMXtSW5\nM4cEftQlqOBuFZOCE/mliTEagSbc876Y+KuZaqxRHvSBdCDzQBJLy4Kgb3c3\n2bTPUS8Bl79piztAtUpE+MbkU9DXs27oS2zSGdSFovt+uWdxIEKkOkufCA9n\nCIW1PZqE6zxdCao+gApImFyzBww0ZNzWG3VLuXVvUfNi2ptcpsViZW5WkYTO\nR+7hXNwYdQpGOYoYmOi+fh9iHCZAkFP5c13hOuol+77rlDMlu+3uII6VI0/1\nZOkfNPnm8KDLVF5wro0CnKjCtRhkTKFxFj/Jx2Jdh+VE38UWsBRB9zAzLGvy\nTZY+\r\n=jGU+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOhLlF3J+ykTn3QSPH/SX2nXyvpRvwiVL31Xs/9rmCfwIhAOz9vOplYdhkN8ROZz7W7/+YRlXpeWtb0ob+x1imzC/n"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.5-next-1585831192-599e680.0_1585831230240_0.8943834924625544"},"_hasShrinkwrap":false},"1.8.6-next-1585833488-76c87cd.0":{"name":"@xdn/core","version":"1.8.6-next-1585833488-76c87cd.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.6-next-1585833488-76c87cd.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-4TekY7sRSrb6lcf0kC2ew+v5qJxhJ0mZMiD3P418gFGSAf40afxVSb48IFwjqvjRe0XRP9rgGI9ssUr77AbqzQ==","shasum":"d2602da55444bc1d531f8124a7dd6fde189ba05e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.6-next-1585833488-76c87cd.0.tgz","fileCount":49,"unpackedSize":340161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeheY9CRA9TVsSAnZWagAAuL0P/3av3uWVtODqAnXwK4u2\nTB0/3F56ndTQHGlhDXPgGI3Q+Nyawi75vHeoO1blo7V5YjIN70awx1zCWsVq\nxCTZgF2Csd3ejtED9d4yzaa5YEqqalDTrMmfm/Q+wI/DdOIrU9gwK4S4KgnO\nWsdVvnxq7hK36bF4QRIY9GImEmk9hYjej6DQKbHAvcwegM424jfk+GKZusEh\nFC9qhwDPoYEL4G4WywATb/2SITiDvhmlNIUJ8/BRz1F6ma9jqWAvDlW7oyhb\nA0YR6z7AmUYb+aIeNFYRMgTnh3OKoPs6HyrsqnOcAk2d6G12hwu0SvyO6+L8\nVk4K0z/jTjeNQ1Un/LqDufX4zEy9uS5MZduOXRFkyM5V8J6iZzJ98zTHZNIh\nKaf9wkzLCPg5nVwPqPWH0xyHV5djb2ovnbcoMXItDOWB/cxOikb8fvm82c8J\nKKZ4HVfNnFbwBFsT3gfCPod2rJ4YoL2d1csXtykgJNMloFbqhGT5IqwIfMYn\nKCnc33/ewZhQAc3c9cvfrI1dpK+ooZ46CF0GBf1SIGofz/UswzcA0TifA/0R\nOM3cuSD/G0/DAdPqBpge9bavhNT0Zxt0YMlAVs25fJ9zo65tUgP+4CaATljy\npqOqCjafUSYjUQSKsCPejptm/Nr9qwRnkKj4hcdm+nJ+uIaaH6BkgUT1bDb6\nL3ih\r\n=ZLgo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHLknFFXanoiDYte4YqPqTd6rWHOJTr+BGXjUIzhaMblAiEAkIjElUYIsN4UFbCU+oetHOhOOysJU8RuPt4N8mds3aY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.6-next-1585833488-76c87cd.0_1585833532892_0.8692594320192946"},"_hasShrinkwrap":false},"1.8.6-next-1585839036-fc89acd.0":{"name":"@xdn/core","version":"1.8.6-next-1585839036-fc89acd.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.6-next-1585839036-fc89acd.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-dFJA4xa7Vm1Sg1EvBt8a4vBQcO8JwTlOUa8RT1btqlVUqxl96y6T3P/PrMNchVYntYpfM09yi48qjnmgCddMAA==","shasum":"da46de87acce1d4c0d143568efacbaa15b929b36","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.6-next-1585839036-fc89acd.0.tgz","fileCount":49,"unpackedSize":340161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehfvfCRA9TVsSAnZWagAAhhsQAI0j/WUf/dBnHt1O6RwF\nK1+kAFLMG6vnDwdfy645fEbjN1fhuN+T1eoy59UpOvy6g5G8ZgmbXS1C14hc\nno/E8FTHbAtAn5Nn7eIp24XvjfIIN87vIiKH5Trmmc0g0a8DXBSAd/p1elLo\ntS+6iyyGjfAtPf/KtNwJXKNTxluCsXvIQ2/BXAXVwpmz+wQQFChfQWxO20+J\n0SBU56wZWItK7BScDyVHIPXwPBDVRkI6gNrw6lpzvQA33DzOAbGX89tYag9S\nguCYDR+3cLKCYkEfYqDPsqx+qrqhUsOKutgsuHSxyo5fM2LAAHHLPlqtEWvq\n4XRq+jQnNJoXgteAYVpLoDczarpFgNMAhNgSGrOHvikt5en38tvE4Rnwaf7A\nCN54DU6UWFoV+noqiJ3foDiyx6NDB/7UdpvAPj2nFrLfvBB/DuwlHyuU9A9Q\nu5oKxjhRoCTzPIxt1jFeuM7w2ynRrTzF+SXRwZC3M88B7XzDM8clVfkqprOQ\nN2EeiA2YfFLwVa7OTESC47nXbpJLj0EeMEnHQiMDjd6vvgmbR1xeJblY/7qm\nvp7MMG8+9kqWHAGDHcpK3c+lM7BNuOdfCf1DAz7wJtchUZdgvh+SSDMUxb5S\nRAGjYFHwZ78429jA3tzpXzY8Z/HrbMj5Al9M3BJSlmmAaqIoeg9JQvOJ9CEM\nrr9+\r\n=Kisy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDghSX6pgZllLStKr98wUxJQ0ynxbjOun5WIaB8Nk7HUAiAP1A84vri75AIIzoZOY8TEPVqDkKZAmXRSDuY+nXC5vQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.6-next-1585839036-fc89acd.0_1585839071344_0.9994483885114236"},"_hasShrinkwrap":false},"1.8.7-next-1585839496-a2d16e43.0":{"name":"@xdn/core","version":"1.8.7-next-1585839496-a2d16e43.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.7-next-1585839496-a2d16e43.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-tCGZH5iHwk+NDKAOdQ+rCDN4NlXpYQLAhLI8CwYuC3uK76oNhfp20JVg7Yd1QKUxh1yIGhiL2UpXnG5luidVUA==","shasum":"f325f80e7a69a9e2e453bc415e36da4b39df11c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.7-next-1585839496-a2d16e43.0.tgz","fileCount":49,"unpackedSize":340162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehf2uCRA9TVsSAnZWagAAtjoQAJc7zjSq+wKEFCHjWjHm\nP+8o5afNaXjcZvWkTpsuWb/xpZ2bbIY1o69abVnJGo4WAtcQwrbUjDgZlmLd\n4ng1ywgVmGV4JQM5xB8hX2b5KifXRcysYdKb5v6aX3pRLA+RJaxOmzEr8eTt\ngx6YO/AzIaB3mT7H6GTFGUzJguhYBgDd1CFwat1SymkwaY6hVd5GSAvPXY/q\nbzdohbJsombWeIaJ2pQY4KtIfY3WpP0vjmy0c6IQJemJ8hhPn5+Xgi2eze6V\nk9LlOdlC/Aj6ww2CM379Kg9ev/cvIy81aW1t7gyJK+HkLUM45Qpnobfdag0r\nP+LrbhnDeyyBgsUsBv22Q0G1aI96MyvSnJXtFPbwgj0/qNGkviFJ4hG/ACKX\n4zo2cqBzsMIjpDRy18vfUvlavHKHrZ62w695j9BiKPAj1xJHcMDwjDWcEfrc\nc7DB9QhVsNC3G5T8IFY9/35CY7Sqqht/e1dsMjhAY09lI4R6Ntx60lK0ubCi\n16NyqudH+oAQL0OGhTYTJEgnq8GryFjXDhtUvgG0oYiPytT9qQ5XMZxL94VT\nAC9a5kIQOOO3oCfU0JmUQ6BJjliHG+wdCmVjbB10J3LJHmgXVKkYB3Eky7bI\nTuiy6wZ5TSjYB2uDdI4+Z9ZCkrA8VRsbp+4pT7ag094Am4Bvi0qtbhJhdOm8\nsaxK\r\n=tjVN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuGTTJ/HfMPsxMJ8xgnrpbyofll0LHc7RmyfO72+HxFAIhAM4GfePpHliEoiQfKXTI/Tol6sZ0vxYgQhwsh4a9Ol1K"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.7-next-1585839496-a2d16e43.0_1585839534159_0.013903934490427039"},"_hasShrinkwrap":false},"1.8.6":{"name":"@xdn/core","version":"1.8.6","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.8.6","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-VKCdM92oeQaHu+h8pWBFAb60+uuk4tQe0GmDzbLhBte7yxnUEJ6HxoJbd3QJ8yEW2hchV5tchYIPwj+5cMJLww==","shasum":"dc7715efa048698d8b0b461e2db005417306509a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.6.tgz","fileCount":49,"unpackedSize":340135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehf6KCRA9TVsSAnZWagAA0bcP/0LMOQXdiRQIGs8L/kyb\nH+CJBl0wstN9Pnw1P8DNXJfIQEVxtcK7RYFYSnixOmEJ526bgXqlxHixEGtS\nNez7IV5CbzDvbWZjZ/K66t1X9BP4CRAq/xq+i+0NXLWBbqheo+Uq/IOyaCAN\nW4uxLUpKsWXe36rTGzjBaPI21le5h2xwaC9cjw3og3NodPoMKMrwK1OWCqOb\nTofDaMYX1e3NDJ+z2/9fgrukJxBHtc17fSQBKv4X49iDG5AIfNlJeqs67sqO\npN3M4i6eLkinsfmCgbN1gClCpzA9tc/fHBME9rJXL3merID5rLU8XkA6Owsm\nnouc151NcU6lKgSWHgApEBw0tRy9JGsFlXXdUraTttDQbPFULxFhyl9h5ReN\nujHT+SdECaySZ5flJmHiebbWGJ+ofLSglPaTT6tK6ylniQ/KI9Pot3+XcTF1\nHEoaOg0niEvlHbL8xm7q2BI3kGM/Jr8FIMnww7cqPg6JpJk/UPyPSJ8wTTZ7\n9ouq6j2z7pzYg4qEKMQA8Qn3HGmpoEcLwGTbLYa9ieHh86xZUuPANm9Uo64e\noaPVLDXlLJLq9dtilAa/BBZrxzU/mC683WE/IaoSgXlGX9jmVGxMIZn8FAIn\nGNeyb4Jo81bmVm5vwQNeLMyGf7z0X0srbsCZk+oUuWqBufeFcVr80O0gtft8\nH0Bv\r\n=EHyk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD97FxXtvwZt8h50u08P1GUsHjOY2ZNy+ATRE0W/HwbgQIhAKQGwhkmgPrihTJtsiP608PfcD5f15tFQ58Nk3TAO6fN"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.6_1585839753683_0.21281159231572078"},"_hasShrinkwrap":false},"1.8.7-next-1585845055-ebee48b.0":{"name":"@xdn/core","version":"1.8.7-next-1585845055-ebee48b.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.8.7-next-1585845055-ebee48b.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-cVL64f3cjCWZvNm2heH2Yw7cgd0Jv9wKGBsbThCLTIBJOX6xmg1TysYsWjjIia7jq8xS4fsrk0PZyw2zNRx5WQ==","shasum":"66290ea2d1c1369144f28a928572f67383ee6530","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.8.7-next-1585845055-ebee48b.0.tgz","fileCount":49,"unpackedSize":340161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehhNlCRA9TVsSAnZWagAAX0MP/i8B47N/rjVHO6JXJowM\nAdV4DwpC4kV0GEBBW/xS5yJ8/rycbKpPRWGRBC8SealTlpAttX47gS7CI3PP\n/1/RnkBPXKSX5NB+9MMDI/PPFIuY9VP3SL+F2bSeaYNvr3BgTLGihrhBH7IY\nYbvgmbhxPB7gLi04LAlqz9XuNhW+TfY3FVbAfewKuMGY8vLbKurj+TKv8PeV\nKIWGavBFFUpb1YuxGwfBKokIudCiEwIpN8zlzGuGFqIuO/4ObY6gD+xNhTIi\nf+q1cmNYn/F5dlgR4MrzIy4d6++IJ/oH2Kkiofo07rUg9/T69EQ9I3HtZIeN\nCjypLX5yqZimvAduGyIMOGhaLQxUUZGz5jnG0xPvqtU9DlyzB/NTu1hljZFH\n7fubzu+eF98BBPCZwfKVSbemZu4X0e12Ef2tXcw35PTlk79u21ClDKOECOgE\nKBfX9dR1ztc/AdCBRK5SR/0nO9x0Wpmqi4PaTamp6wvCOsPOMRCVyIWCh7JF\n7QunnM6gHhcYcOrEbOCVHk9Gb1HRCA0HBrUlw4ddtCJaWv7ZojuK7B3AUDUR\nb8emtNDBG+M1EYCGub+a5lKgwC9eRYEz2/7zLKMMz29vHxxkKEpqiD4pFX8U\nZVkq4QnuFwff04HSiIrUhO3ks8KYT6/CBGdVKhr8sGB7ymcML/rcnlm+JXAJ\nJGM0\r\n=F9vv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGvoqgu8jmK/TeHNtGKcgtcm2krpMc7FLS2K5e4V5ueZAiEA6a3rnl2kHLMtevX+FgJ93QTc3fQRp0PDNx04PIy7h5A="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.8.7-next-1585845055-ebee48b.0_1585845093386_0.9780100967739571"},"_hasShrinkwrap":false},"1.9.1-next-1585847329-ad6f8a2e.0":{"name":"@xdn/core","version":"1.9.1-next-1585847329-ad6f8a2e.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.9.1-next-1585847329-ad6f8a2e.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-aWjvhZQPPodFTYd2BS3weujjxYA9vg3h5yFvOeHS4I90NGKBfS276V5uIMZ9CmGea3EgaAGuM4gcJmlhfEtuQg==","shasum":"28d21c7dd6973fb5c0c6d45c4230d868b7ea728e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.9.1-next-1585847329-ad6f8a2e.0.tgz","fileCount":49,"unpackedSize":340162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehhxLCRA9TVsSAnZWagAAOL8QAJ0Bf22ffyPiuKUyKTme\nUhbaJ8IjHZunwR7pGMK1b34M+rYL0GbCasciyTVvUWI9UOd75/qFYeigyrvZ\nlFkL9267H0lGYl/BI+PX0pnTqqZf7kEc7olJonh/F+VhAAd+fIDrA+fkUo5W\nkzsdO8eYxIM9KFiNAZ30K+IDk3C7I22OSuzXSyhJXbf4hrKWTM399dnA6lQN\nIjlsVz1pW9GsqoToSo12rD7gUxIXmpZn3Jg9fUtkHsfOWnBOL5gwq/F7P0X6\nvu1fk+iPhN6GGeKI9Bz3IkRgZ8ckoiluDKUP/2YMUttd5HNS6K4MZ7Vk/KvP\nxkqPfsVrCVQccNyvOedYdwpGsoM9CKFBMnDwjF4PdCCdWkPFgGsmhfuQfDxR\nDGSRNoPcJccJbCAgAjz3V3YVx64svSPYoqc1J4+kOG3qGRJAjq+tBhEyW0ua\nuaUaq+MF6lSoOj2nAPMowwPv+ePQR0kmNIvbqmQzvSuvNAWUN0e3jkXMM0Cd\nRjnDDjT7Xe4ycotWTdsu4vo8LmSIo/4vmBQ99tEO1Hms9t3G7Uy9BIpsUJSz\nTuotGhd9cOHSsp9YWdX6hi3RjaDsWtV6WjsXScIID5SfneHyDR2Ae0MDB3UO\ne5QD+T3aSQulIgEhe/CsdpdDXCeoo+5fp2Gm+As3p94fl2MCIFIsyaY/G5Ov\nMeUZ\r\n=7ODV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC94JZmZiARV7FIoirndQF4RRgHFgTNfjRW8Y+bMJRtSAiEA6D0pkP8VgzkwsZvLIJmbpqnSdjOYC/S4tfoH4utoBGw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.9.1-next-1585847329-ad6f8a2e.0_1585847370861_0.06706940867649736"},"_hasShrinkwrap":false},"1.9.0":{"name":"@xdn/core","version":"1.9.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.9.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-+LR3at87BfNGUXjTY8mRMHiggbMaFwgk+gBWRszD2+Dr45lYx+bxeDhT8iQ6n/haHo8QeWJLbFXoYnBDIFf6GQ==","shasum":"c37098a5a28b45798cb56683d82a9124c4731514","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.9.0.tgz","fileCount":49,"unpackedSize":340135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehh2HCRA9TVsSAnZWagAAE+QP/iuXIN+cuJUeej8sgh5a\n/VLVmkwY9pchJGY1e9CpXT0gAYwnxR8TB2cw09Hy0z473YeaDKO6yuQsVrnI\nGyYjxFIq//qZmvU/jnRsr3b8Rua/8XwuOiSbGDNrzu9uM6c9J1AbFxbeHKem\nP6R0jTReQVkgMB+PhE/1LE+obZJRlxVZoiHKI4iZ/EiE0rZZiHhiAHBmzVvz\n1nQkuIDi2FLUGLWI6ApuJqBNRFkBWSjkXef3i3UkfmQU4q1ms5bq1gI9KWEh\nS2RWtTNGOnVLn/wzVqucy8/4nTC0M154IlhDJyCkC501WGnnc46+/qKXKioQ\nhZM/7hc0LzdEvqOgg+qTYS5Tkjjl2gJxRfcO6sMGmnyfaoSEfyG6qjwhKb0W\nNZOKlBA94O/WalzSn0vsPNBmuj62Xl+PCmQagMuYHRn8QDegajMLpMUNTwx2\n6eyc/JrbKwG/C0sW6xUzYYmo7dvymeKqAXevNRjIlUwDwh4aNM1w2O3iIXQp\nRK59BIbyas0Q/6arcCYV5JR5o/LkzJom72rTx+j8efcwUCYEWpztepAPAe/D\nOqtgxFlX17+2J5Zah/+ubVqj7UEa4dZJ9jbE9g/b26StITox621ciVK+Fjg2\n5mOAAHZC6iJf65LijoE7uC/pke1PGZosBW4ApExn4r8nVQYNBaGObtBVvUiY\nkfiD\r\n=rV9Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCy83LcBEM6XBGsljxBSe4o1eYEKVMfFGuzwwzBaC2N9AIgZmOs/EvoNOpUgnNijCix6EB9nVJdzAOVJ7GyPHbt270="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.9.0_1585847687108_0.6636592975070994"},"_hasShrinkwrap":false},"1.10.0-alpha.0":{"name":"@xdn/core","version":"1.10.0-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"## Overview","_id":"@xdn/core@1.10.0-alpha.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-SnMvJPJliYWQVw3e5nE+NqMoNMJuhH/q95+MmeAkr/KNVxt4aNC2+raqMz3GLRm98zAA/uuTn7MXKP1vZMTMYA==","shasum":"bb7b7deca0c400429fba08a492dc97943b1ef334","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.10.0-alpha.0.tgz","fileCount":109,"unpackedSize":418377,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehi4qCRA9TVsSAnZWagAATIsQAKJtgRCsP3eGz/B5Zg36\n7PYhhWIxdf5/e5Tz0+TRk2seoI7guBbB9pMTYvw8QfTVfmHWE8C2D6sc4932\n52bElVFPjozppmCXnYkkV9kGRRb2ywyQtO2NgA0M26Vgzl9fFeHjSCLXlrUK\nmdGZ5v+Nq7FIp+Xeg2EpFSmMqtpkQaV4d6cW4njb7FJFtFC57C/0p/C+C/x4\nuwFgKe0Ru0mwVWTP3tEsoxFOG86bjuqjw2hms+GhjQOzdVUF5m7QLixnN9Gv\n4Ulbj5DkovJXzH8QiBop/hn7aYMCyMKsXlhII3aYr5jjgiMxwVbVaRg+8/Vq\nCUVruRnVIs0jyoKsE7t33y7q/Qg3qGSllztg6ppZPkA5e3NrZnOHStLCDDh8\nRDiX1sL9PlplWvXM2x16oo7gnD0hGMf/0bfuGCB0cgjZ7Q0jOuY/HNQg3o63\nxOFBhx3TpfZ/RiguZxeBltKa9iXyOEEn3/bZE2rs0NjVO5d1PIsMys2LJQax\nRaYFX9Khmk6XlqRHxCdxHa/ly7owtXtjCPcOIJRqbTeummh5Hz2NPWkV7uQI\nYEYJVPtSWinN33x6wEJRreLkwzOELpPbgk4ptAF8Cw1BT9xrIBMNsE9MaSNM\nn2wSEebgALuj/F9T1txrCkTDNgJHemb/GJG4+QC0FK1hFyBOKKlZB0WrQGfH\nkeDR\r\n=LUKv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE1UlBlfU8gYmhWOq6FIbCW+msIAy2LpCoyDp6SBDsp2AiEAwwnYGPnq7v/zkWjYVDByi8UvT8vz0pXkkCSuHJbsjxc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.10.0-alpha.0_1585851946480_0.5535685574211962"},"_hasShrinkwrap":false},"1.10.0-alpha.1":{"name":"@xdn/core","version":"1.10.0-alpha.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"## Overview","_id":"@xdn/core@1.10.0-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-YPHYp6ninyAJgy02qaMgLhCRyNnjTZW9QXM1pnfvtAoXpVTFUBSZBZ80amDQ2o2UCtIQ1FNW6cXxQg3PMxHgZw==","shasum":"2631129375b73732d01a809fee0bdb1abfc12c7b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.10.0-alpha.1.tgz","fileCount":109,"unpackedSize":418377,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehjaHCRA9TVsSAnZWagAAU70QAJtSXgK9vbdGYlf3kTbu\nViyWUtp9NNMIcMjRoMSseMF81aTmp4235kg0wn70KhNj9BTG2BxktJwHXlQl\noIGzVUyVg+ilAp5rPi1/NOhdw2swvGhriVNgJsoRUoqeNXF5yhMynPXyITAn\n9SRiNl1gozgSqxHcQeX+ndTin3IadDclUqC36bUpKTChg6IbAckiPF6+4eGi\nxh/NSG6zrryfqhZx8fkgCOHyCLewrGInj+jnThSmAe+z1Z2CBXNVD54ctuxp\nLWuujmKJHICmF0R6ZknhxK82dwRKkBBVCSUZbo/+SfInrwbaFNTNwWsMtSuT\nmSO7NCYuyrNWH6gWlI4/jHlaVetgK5+7i3DTL2sakixbzUmizgzWl0P9Wh9l\nhtMgY7LFzkyQNT4e6m1tjsV3o+ndxkuVEHEHpIRkJmD8ROXgftP2dlY7E28B\nF6JtPvT4f4Cudk3cZjAksZEfRsHDstqmfF6szGXP07FGJQZVr78LrEJXhxWP\ne0/CRUfcvB9qVa2iyeGfrg2/uOzCvWJzM2ceD0g0o4irsIn2MPF4av2azsF/\nXufXAzbHAGQxlTuwtfEB2wCgu53pbDdwQgp4S1uUiAmCcAtFE+HLqvV/d4jx\n0o3Vjftxv/HfeaUgiUDQZgkslailfId1rCjfemxNY06gqbDUyB/aSKGthwUt\nlmob\r\n=Kl7D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgyA/Ds4Tdg1e4yGD/HGfd6pxY8rET4F1N0Q6sv/gn/QIgfAzkSvnsO4lxstlYhDjCbxctGnxGeEN+L8pvxRUxqLA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.10.0-alpha.1_1585854087414_0.5634697754538298"},"_hasShrinkwrap":false},"1.10.0-alpha.2":{"name":"@xdn/core","version":"1.10.0-alpha.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"## Overview","_id":"@xdn/core@1.10.0-alpha.2","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-58eGfQ445dmnD+QIqolKVm4JUmrst2nCZJMnidmf7SNRO3pWLCm7U54BImceLrDWhBXkiQFf5JQlyR69XpCGzA==","shasum":"9158cb88b9c406964709870ac826fb753dc4437d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.10.0-alpha.2.tgz","fileCount":109,"unpackedSize":418377,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehjpUCRA9TVsSAnZWagAAetsP/3miMB9RNdwbEVjhkEI6\nBSc+GuMnpVgmpK4KWjFWJlTKR2ZEwVIgaw/4houTeUs9vUyhNs4BhK0hrT+O\n7SlGuZi8JlJZ2AsFrhsXyVxDBztQVNih7jDjHn+jhGMb2QHI2qyqrsQJsiDl\nTaZDCTZdEoSWPP4wQVRMgMzllObuyDqNo9ULXirPluEauA8aN1SHAw9JJrB+\nCOyv8KbxH1NsGuq4Ngm+t/YZjQRf2GOCbQ0jTvSqFBxsCJFIRNYiWJFWYx//\n7ZfHWQ8jhiDe7WxNVHhzxoha+wznZWNd3nF+psmtZbbVDrjIFjmfg6swc4r9\nIySTxhbsbKm0w75FvNlzd7wT+YKFvU3RrTrOonltrmPKrO+SoDcksyDU2JC2\nCcyaGI5tkB5xMLn2VQF7kIXGsFP49sFx3SaOwRL9pMg/PdSQ9LEZuOQvpntL\nTCYMrEMiS4p40N+vW0cULwDJtB8ofEEdZ+45MQXrHmKs4xi2pAs4yCD+CA6o\n99+Pt4LXmBmiKw5/xShOqV4It+rGlws0ASwTotD6WqXlGGxJ9FkzUxSB76oI\ngR73KFqLJbRzNTbZEIE5IvgTmRMtOhCuPWHFCYVp7TaEaR90Yqu5NHqE6puw\nr/oXDh+AMEsTjjskIYQ8UfvdHleMkq2JarwDLX/Tw/VhCiNMZfElQJ084V00\n0i1o\r\n=nQdI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2wvf54kQEHnG+vmuKJiDbaFpil7Gr5eGoSfWXuOWgGwIgZv2CyWOpbO37TGNtkciACXC8VghUYFTCAglouOT5hPU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.10.0-alpha.2_1585855059631_0.21221717554025266"},"_hasShrinkwrap":false},"1.9.1-alpha.0":{"name":"@xdn/core","version":"1.9.1-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.9.1-alpha.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-Wo83KbwpDKzi/0wwKPIyXNwWhCZD9lBvov5BzcEkHntWlE3FD4SP7KnM3htEf7NQuQb2IA30BpLMwtCC1LutUA==","shasum":"d1531688acd0fbaff4e1374cc423d9831383256c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.9.1-alpha.0.tgz","fileCount":49,"unpackedSize":340143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehxJwCRA9TVsSAnZWagAARysP/1uuu98ImVXAhOtGgBaJ\nbSPqlq1TUj+eGhbE28RRuvzs2xezklVhfaSBGai9AG0Ie1gm7m7KMXhGw0aU\nCERFlGPLWZnTWH/ag5UAVjqbN0AUvkGaVPLBL3nUdxJ4QQGo48BDc0SQBjl0\n1QmI6n2lcKvrXK3Vq1Q5lJnZnpRfL0Y/2nZJxjL8ghSzqeIF6dXNmBH3KMoE\nPnl7x3ig5ph+7hxQ2TFc/gl0TDfIqHEajVVpZdiKsQmQQJBFVCFYgnvKYJ9h\nrLhTa5EN2nNhAwR+pWcEaFnU48hOPADYHCFfSFaNgzpik2yGJsqqAzwDPuy6\nST5h8IY0yl65CLsskbnWFMRwT0WaZ/IBYL/6fz8PvAnz6RqUPBYO/f9gxE+m\ngGnRFVKx+25Fz8E3nYv/zYqkDLeWm6cmlonm1Dj2tkY4rmy2wuywGhu+84G8\nqB+zDrFxb6Hc16QG6qb1MNO6uB2tggRiXnw8k7K1VfxtDZ+V/FYoJ/Pd8eOA\nMG16LVy+zuDBdz3iEOB7PUyWh5MsYhWxIRtxqeiy7Jaciul0X+0VEnmBHUZk\n1kfURiBItMbUfP4ZAJWhYv7IwZ8V6UcXTOURzk6GI7nNrd1R6afFYUnusyNt\nqC/a70LfvUpgkFzX3vHaGVKD48k64d1fCbfY55E5qXt7idr16Ty9LnqTax74\nXnmN\r\n=gtcB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBEfYvi5SZdeTHF/Aa2NESFLwrhamb21zaJw7XFj8C1bAiBtXqcplcZrZVtYLageiyjnw9z/D6j3k9rSJ2XZGF6Wrw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.9.1-alpha.0_1585910383716_0.2322254498035996"},"_hasShrinkwrap":false},"1.9.1-alpha.1":{"name":"@xdn/core","version":"1.9.1-alpha.1","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.9.1-alpha.1","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-KfX8QvusE5FI8ukH7cXSt3XwweDj6z7CRTKy8z++0gzOVk1dIW2Q3rTF3a+sIye0raSA9PGI3y8RJ3dI3FvrzA==","shasum":"7e2878f81499b44b1c2b9f82eb113342d1ce3313","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.9.1-alpha.1.tgz","fileCount":49,"unpackedSize":340143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehzLECRA9TVsSAnZWagAAu1MP/R7cSL+OR3xSeLxb7R7i\nTvRINTflUcqBUfVdiR91038dABjOywW9AiM6OTNBGm0X+/MhvuqKut48a7dR\n0yshlQK19oQtmtJu2Rp8SAhlZPApMpHpoKL/CuZaJwO4eolhjtPCxBmXe3mZ\nZnPT3b9z+stMOpFdmg0CITNojF7k6UCm7PzgwoqPJvz+URhyfTjbnBtL8sW1\nWXTZJ+8R6Qe1xtz2WMjlAcQNEBoAA405ccEbBg3HrZu2jXcTai/ju/EGiFlq\nXMztt6i+QnDlFHjIs7pz5TWZc73uk0TZGB9co4Vx6KQWaq72ufP+aJewHubU\neY+YrWWp1rO6wusTRuCEZwhKMpNG+6/M5dfV4n2df+DootN5c04TnAX++jIa\n6YTK0GoUxJkyJpzttPfc+z4ZGCrMqaCmmjLNUMbDsCrTVN805EUo1Ln3eWaA\ngx5qdzo407+B90QqbeB9pt+IuMn8QUICKbOaLvYIYRdWZ2pHbt65KGBemKMG\nHt6oy8pxf45Oczk/OP1hlBSe26toc8bZyQJHPxHtbGM3ynDMg47SXk/zl3EV\nNXZ3NPtnlNWyxv38ARaanXcBzC6izS42BrakbxfJah/gAz8ahe2vhVZpHSza\ncthW7LhuKVdYXHIKj/3IWuyBwQF6+qODqWf+jhfMEAF+/rYdDp7bFk6o4jgz\nv5/L\r\n=0s7i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwILmov1PnKBxCFkmquIxLrf1v4XbkgcstlAJiPXEZjQIhAP8BPwfDrBV1CYJ1T6GgsFF0duxAv/Ogekhacfg2s46g"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.9.1-alpha.1_1585918659664_0.37174844992223033"},"_hasShrinkwrap":false},"1.9.1-alpha.3":{"name":"@xdn/core","version":"1.9.1-alpha.3","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.9.1-alpha.3","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-mxcXuD/UVpgPFXp6tbeMtciNV6SySACFCetGvNXzzXE+GjW8rhiRnDXI0L5kgNchmzMXSO02GlayhHxW7InbnA==","shasum":"d7f31acc68c96f5f6d7843094e8e75669dd0e31f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.9.1-alpha.3.tgz","fileCount":49,"unpackedSize":340143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeh2CmCRA9TVsSAnZWagAAHf4QAJ3s7LqIMGPKzBfssKKQ\nO96N00RAMROqrY0zH+6RTBsJiR1i30PvTseKEsUO4xPKLTwi75sl13OfsM1g\nTHlnA3as/Xv7Q425irkaN2uVa5XyLRQWwg6frLbLs7bdQNJ+1w9aYoGMQoeb\nl8K1kO4XPG9o2DTN/XX8c0yQAugJSM07/oKqtD8sl8BGwCWq0di9ob171Z0g\n7XYmdhqIJjJZ6U//UqzR/u77JqaVQ5Lg5Nj2XjFfdwtVIUUj+ONOQCVCWYRE\nLz3SBaJVZaWOjHjlCaayVgJ99yWyuIX/0qaa2wfnmg0iSqXd2fuqatRkmW+T\nmimO/pDUjMSRBZdDPIJCr70+hjjrrBZK/UfAkB2A/Jy9/hHzUoYj+OJOU4me\naMWKk3mmwljt4v14bWmATLeau6tG+VY7xaHrcpQU4ZSNdSYuOJT6BMkrQA8Q\n11GNCp0BJAVqLI11ub1TDm1z2FZxxR+TldmvpZmoj5xP/eWE32FAehhrJv4o\n7fybUierb0Gnw5XmcmeYDEOmC/LeSf2RhaSbwa8HAvo47V81n2zIqHMgBoY4\n2TDpobAd2UZNX21Y7R8EyTIjjShceBDJenK/2GwXS9TU3WI+L266dVWSzKQI\ndqXuuQHVX88mUTE8Q4jJeE6sKD/OAcJbuoh4UNpp+qt8V1VQQpviCG6Jwr7d\n+pKT\r\n=Tyg0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGvoZ/vCc9wqnZ/E4lIJXHWVIY6snN4SWBYx2sePKgU3AiEA5uP9hVWFkpZolqcp1q2rcGchTzMsao8BG+CSrtCPfYE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.9.1-alpha.3_1585930405815_0.08151931990824557"},"_hasShrinkwrap":false},"1.9.2-next-1585937531-bd04be9a.0":{"name":"@xdn/core","version":"1.9.2-next-1585937531-bd04be9a.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.9.2-next-1585937531-bd04be9a.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-782pcs/jPzZ2fmkKMIP583PXm9Z7UV5N/IBmh/KrJBbyl340EEmy3+n5SlEvccW84ikRWQiDHPrqKgeUxUXqsg==","shasum":"c70bbdedf107f1b3c2d5a83438325dee20e8fd0b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.9.2-next-1585937531-bd04be9a.0.tgz","fileCount":49,"unpackedSize":340162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeh3ygCRA9TVsSAnZWagAAH9EP/i/XHeyKXKFhu+nTLeXy\nG9piaEoiQZ5IeKxK/Np+g5v0/+SJ4J3DaDw6ck0EmkR7IiL5+KEBsnn3Io3G\nU2Kg3ujsAkU7T75SFNfdyZmDErW5wNPikJleEjWLrtxs0CXfQD9TcOXeV2Sm\n3mvnM8ULtUA++tQTB5tALmJy/wmFlVn2LUJY9TkKQF6OsG8A+yglz+vFf7Vy\nUbtfX4xSEGNVuxmdvrnFj+8FDG5NnjfmVExeyz4+YKqcY/6GQfS+BmnniNbi\nuaQs2zrW/Gd3U/43it5tEzOfIE2KJu6TixZjpAqc59Fv96wMnH56A0so7QX4\nyEd5kNzGAOPAb626pYP4QJpvBtPy+zhiRgw6ov9Exzw+9JjaHllkNbu+l/hr\nJDhPJUoKiY5yAhl1KxKxeZZS+DrxDxKYsdHGsaBKQADwVKPMutD3uSHeJHcm\ncEScDqxdP28+9u041A7593JXIcuBI2TusAWqEEqSIB/y2DI1gjvULXCQ8oBl\nLpkUsFoxEFglYTCuqy5lV79ke1G/ks9d+vb54yTjBfybLhh48uRJyO1IdnbG\nGvmeYYajM03gMUrjYKEuuibBCrfHqn+HX3rV3J0IEqHtZFfJBhAeQ7y49cTp\nDbjkUdbRdExgXTcbeQewnV/v146RXtOLd/uvkNXKgCLjZTi+6hAK++FUHNOY\nFssa\r\n=2L8E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDtN+74qyVMWgvJ4Ug/xK2PfAqMq/DZygAx7CiBi8w5tAiBwfYj94MkbWbhbq1IiyT+kee5KdrpbWn0PRLVHu839ww=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.9.2-next-1585937531-bd04be9a.0_1585937567679_0.07958935547504153"},"_hasShrinkwrap":false},"1.9.1":{"name":"@xdn/core","version":"1.9.1","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.9.1","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-b5ZJSs4N81Yy5AZlC58wM8GhmqqRvQjc2PJ42yqaxCfDaghO5jJhbcvDsetXv7lkOAAM/kzEvY1RYToidHEGTw==","shasum":"799f694f7d81f965318de1d2246a882eb25326a1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.9.1.tgz","fileCount":49,"unpackedSize":340135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeh32yCRA9TVsSAnZWagAAGFkP+gNH4IyOLxMYt6OKR2ir\n9pSFEjqY92pcxPnb+Qe+QwaXT6Pu8zjrqqowhc1lza4vZIxLoT0I/z8xT/O0\nvF4NRgo5VBEF3mqHS9VpncO3UmOCLTgnAZ1BPXrkWak8emJNtAvvxAFFlXRU\n+QvGKbfP8YKYPw3wtJibkSjL+PwUHvnGlnqKmnpo7G9A3mC/30gTdMbAMhny\nnD9z/wa1X9u/PBHtBPO4Yk52Vub9Op7x7SJXPA1n56YnurtwXlLuDTX87ySi\nViLpaudlcRPbp8JR/sUwN83KrHv6D7gsN102Eh84DZMmwT8e/ry2mhtEQxmy\neLWxnwFG/D93XOMlmNnd+wODwVEgZQpvjl4+ZVrm9muGdfPlVItXW5NURKG1\nVPom5BGHvh7In+O3C+6xLIHvmI+2Q9S3bYUE/qy4kiL3s91FI/Z6K1/49Kvy\nagcR8RJPvr5QiY1Nf3sIf5yfY1VeQfTyIdTVSpTv5yn8hCCBG6NGhPHw9Avu\nn8MQPqgWWI5JtsQtecZ21gpBOcJ1O/X2aP9pHbHAvbM2prHMIGYQ8YOmhkxK\nMrCwu8Q7qyNM3BcZsIWNiTcW1P6gq4DM0FudmwvOe9jyp7J4eZsSEHEDBBpM\nPfkGq47+7RXjuXAT2VHR7UDGcUJpPBdifQ0mvb7QnXjEdXCId0T4RJoL9Dqy\nWlI9\r\n=F6XY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChuz7QISpep57mOoF+dMK2jdDwzBDjqaPXKmocf812OgIgOwVi/Z404Gby0YeholWaL0ua1iDwaJbMxHbkaODTbow="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.9.1_1585937842308_0.5873479827086492"},"_hasShrinkwrap":false},"1.9.2-next-1586174629-c1dce01f.0":{"name":"@xdn/core","version":"1.9.2-next-1586174629-c1dce01f.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.9.2-next-1586174629-c1dce01f.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-ZS9B02pGO7pEg4J9ITfz+zUJ4DwBUIisereAsESfwcNy+lGAcR4FpC3RcuP+Z6MuOYWEBQntxlTeVQCNyC+Q4A==","shasum":"c7b2d7f6e88ca0296ed84d47036b3a78fa78936f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.9.2-next-1586174629-c1dce01f.0.tgz","fileCount":49,"unpackedSize":340162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeixrNCRA9TVsSAnZWagAA6b4P/Rc0PGrPaJ26G4Z3UOfh\n9Vql8kv6YM6TkYsgSkTGFxej/qsICrVDM7+73s1oq/XEhPEn6sb+nVZB7kN5\nDbLNPTXWv/qGZ+HJJl1IauYUm6tLz//DaD66HYc2Fxvco1mem/muxOXFvVe7\nT3qDg9BvtDRMmFlFtcRF0niuqk36ipQqdVKxlnRpNNzi4K06JNjgXJbIM1Ik\npZm1OHJFQdhduJLIHTLfgd1ioMQwjcWhXMvuJvzErGJBXWzRDBqWtBL7ql7x\nmYFKl7ch0gvrSd5tsP0qEzHa9eDfTuF4/xXVoAtKXltYhA4rYleeQWDir8qk\n6NaNfR6/re8+u3G9XXIFre3+NUNjlLMZo2QvUq+Y9C8GCbOHy+ki+ASH90WD\nOTF9VCAUpf5e3cp86BEiFzJ8GEdS5u0Pv5fBGrjrEbEItZH7aOLUayGB5dsH\nH5iQyoM4Rh/JEYNH9WWFMjJEhEic5bQX+DegN6i5+CMyE/VCpyuxeoXVxO+Y\nraq1aE833hK6HtQ4kuwL6P4J2gbq9iBrc7wwla9fTPYL0wMnYgWUzgzgdKFb\nPgJlQ7uxCs0v+8yxLQWVYkwpCYev1ENbyNDHxMWtV+DzGjPuEZDLATu6jojU\nHnOWF1lAYu1yNbnX4uHKWUg/FZVCqN2kHon/NUiDDua0Ybn1pvxiKSaa16HI\nCa/W\r\n=axm2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDe6RN2udI1dOg4paOoU4x6XVyND8+yqWTlEvgpx2tfagIgc7AH9FmvWeB7W0DuG5+K0XmTzdh9W+DYsDqZku1KNDg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.9.2-next-1586174629-c1dce01f.0_1586174668679_0.8088406891747679"},"_hasShrinkwrap":false},"1.10.0":{"name":"@xdn/core","version":"1.10.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"description":"## Overview","_id":"@xdn/core@1.10.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-EcUvmlqA6Wpkib2wkCsb3j1TzNlvOcqieY8FMgn2toP+4178gVQxkzGTSUqYGnN5C4qyZWZmBeOY4MpTUFHCGA==","shasum":"13872a8d0a036d955b449acba7fa588ebed734d2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.10.0.tgz","fileCount":49,"unpackedSize":340136,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeiyh4CRA9TVsSAnZWagAA61IP/AjC1wVC3NB/XURTIfLP\nnRLSdPJ09a54mJU25Qd4QZu2S+TwBtJuvIKOg3DM5ZrpS4b6WJ/2/5DzuM86\ncCTFFYhcWWkh3bmIGEdcwj8cug28LR+EmWhpQEEa2QVCMS/wYXy2Vbm+5aZG\nwYEdzpq+H2HRJQ2xSChJCnmSUIHlLuZ62X6gOq4gaRK1fnAlWbmxudW7ic+U\n1iSKltINOnpsLDUpAPUWz5ymUXYiiMadAqnf1vGupmuasldHbPrzaTlSKyfm\n5fekdYOrV6T6BVd4Gwo/mPkciIhaLqP2CV9t02nTpNZvsScFa/zEUtbbHMWt\nsUFyOt39Nud978qLEwfjUwR9LJxZPm/6uJyFMd/UDvIkqSuhYrLjlV0u5sSx\nOFO3Csj8Wpcs4THiKsAbZqet+B+bbsTeh4x+0gP2XLZoQrjHgbl5nzkxhGyJ\nc4o/7rM4L8f6bKBijjKQDaBKeNU2eCWeTk1MEVWwW/vULxfCw4xaf9MkzpEt\nVX0h8DwrX17FySDagV0se3Yq27jN8UE3xpi2xjH+LoFAEB3oLcCvpIDDgaoz\nK3ivA5tMxpDUUsK9B5N3UCDm67FQm5Fv8yhalTZeNTXjJYoJAcqzG+47/nZt\n8+s1TK6H8UDJzRJXM7OmGp4esCaSOsBcTZYl0nGC+ncpOqhdMqkR84nYA9Tl\nhyod\r\n=zQYa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAbNsQs5CAoEg1ffXe4iLrm7o6VvO8Qnvw2RepNIPM8ZAiAhoAFR0iqrbRGI366LSrs6PQmjf7ecKd33AI8vkcofVg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.10.0_1586178168430_0.2551819180554451"},"_hasShrinkwrap":false},"1.10.1-next-1586178441-fa817200.0":{"name":"@xdn/core","version":"1.10.1-next-1586178441-fa817200.0","main":"./index.js","license":"UNLICENSED","scripts":{"build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; babel src -d dist; webpack","watch":"npm-watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":"js","quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest"},"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{js,jsx}","!**/mocks/**","!**/index.js","!**/plugins/PluginBase.js","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"nock":"^11.8.2"},"readme":"# @xdn/core\n\n## Overview\n\nThis package provides a router that allows the developer to declare routes their either run at the edge (for example, proxy and redirect), or defer to next.js's router. You can also create clean routes for next.js.\n\n## Configuring Routes\n\n```js\nimport { Router } from 'xdn'\n\nnew Router()\n  // redirect at edge\n  .match('/some/path/:withVar', ({ redirect }) => {\n    redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the origin site\n  .match('/some/path/:withVar', ({ proxy }) => {\n    proxy('desktop', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the origin site\n  .match({ headers: { 'xdn-device-type': 'desktop' } }, ({ proxy }) => {\n    proxy('desktop')\n  })\n\n  // vanity URL for next.js\n  .match('/holiday-sale', ({ render }) => {\n    render((req, res) => nextRenderFunction(req, res, { productId: 2 }, '/p/[productId]'))\n  })\n\n  // OR\n\n  .match('/holiday-sale/:productId', ({ render, params }) => {\n    render((req, res) => nextRenderFunction(req, res, params, '/p/[productId]'))\n  })\n\n  // Synthetic html response\n  .match('/static-html', ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // fall back to next's router\n  .fallback(({ render }) => render(nextRenderFunction))\n```\n\n## Creating an Outer Edge Manager config\n\nAt build time, an outer edge manager config can be derived from the router by calling `router.createEdgeConfig()`.\n\n## Example\n\nTo run routes example file use any node process manager and run the file as:\n\n- `$ node ./routes.example.js`\n\nThis example outputs `oem.example.json` with outer edge configuration and will run on http://127.0.0.1:3001\n","readmeFilename":"README.md","description":"## Overview","_id":"@xdn/core@1.10.1-next-1586178441-fa817200.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-lWsvr5951txEAbnz65eyPh9msvw3YZ9UyXzthijr4Ib3BNuLtNgzjLX+3V15dbdq5fykqz2lGubB2JnzcOHjUw==","shasum":"66becf886afa6824ca91bbb40eb7445400488cd9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.10.1-next-1586178441-fa817200.0.tgz","fileCount":49,"unpackedSize":340163,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeiymxCRA9TVsSAnZWagAAjmMP/0dLbD6DUulromzKN2A1\nYTlXqH3afa16G5fxAfyxaeKj04QR41bw3JY+bJc2fYh+jp7h/UOkaLCmUZqg\nBgmA7n0jXVK4OOLSKVZ86LFaoE3P4t1WrkCBwGSem/0JYTmP9udjnhfy5Glx\nCwSlwDLkbPnzCrXfGHJb0NjprOWo+BibiSIVppwUvh9fkBb8LMxmLaH/V4n7\nIaLolH8p6S1N3hJN27b+7TrNcFXDqCVrQtWPSkTn/zQET8U9vRPUAzHlpkYA\nDHfZenrSCgjFUq9VLlgfzR/chR4AnUpv+94jDgFmL+dA6SrEEDG28FVsvmPu\nphvZz4nfJnD9iDB3woHm3b46Q5M2xSeAvN7XErjQS2nHB9SRrFv9wEcTITdp\nWuA/BXOF0WAmP+f8Hn9ELfS2tVLefzsTzc0EfNxXy+hz0/kXSujiP3J52gNR\n6LFJHc4FqFxyc1IrtTYI10jHLCf+ZMnJ9zOtTBaGnI0WzdMLrAEENoZNBVDg\nTkOZrjgZZYAo9DUikzMLkGbnC7cKVAaSS49iSdO5rujLALsQ5u2mZPiMjzT/\nQpelSy5Qgd/61dJz+FNHdVhN9jdoWAyFT2X1Oxi789Ot4xlWKtD3biqOi9jF\n5LZzOaCJt6UwXIvkKkCS3J0bkFmg0PnGIufq69AyzQhTQ9QvRzLtcLBWTOE9\nzfYA\r\n=879O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTZ4jbsLDCuAsBBtyO86Hslx8aRKOMI4KsTGBAAz+z4AIgdlu26joVmSd0Cz1NZi9ZOPknIPcakag/YMujK3A4m6U="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.10.1-next-1586178441-fa817200.0_1586178480847_0.14243526954476926"},"_hasShrinkwrap":false},"1.10.1-next-1586203084-642a5b56.0":{"name":"@xdn/core","version":"1.10.1-next-1586203084-642a5b56.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.10.1-next-1586203084-642a5b56.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-TbbrnFlTnPhUvVnVrwelQVJ0ejtr4oy0TIJAiOO0Rro38t4X5zZadlHjoZ6cPQ74O1LtSbukwOSGESU2NmpUKw==","shasum":"2ffd868c2c14cddff82190627ad76e9e3da8de48","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.10.1-next-1586203084-642a5b56.0.tgz","fileCount":109,"unpackedSize":419157,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJei4n7CRA9TVsSAnZWagAA3msP/0TtEfdWLbJQ1DeSJ4QM\n/b+fGe+IW5OZ6Fw5uKgdAazEud9pqTWocOZd+zq1BcscY9blb435R+kbQCNK\noDrByQGx44CfDRKP4n1CXwRrmNenz+HP6XFyY2Y5rLeo0qktSNT1YbHLU4Vc\njNb8pUtUtWNo2tBmHGcIT5rdYwrUnSb6IYXp3IQdcyFg24YpHRQZLW3LdE3A\nZmJK2AcNPHkpkLQu8b/ZQuiQ2fwq/puBBRDN5CVaC0Ojk6N7FtUm4SveEKYZ\nhjP1imh9yB7pZoUYWrim0wvS6UcU2HdBz+wPEBnaYNRI1RkGiyA/O3fTNiOs\n08T1DsYlvkTqyVRmQystHtvMxCpxWMu39I5mv5TxVVEPne4Yne7Y1ZT7fk2A\ncYCiSe62WiMV27DEqP9M/bE0H0UL6narBcVOQ/4bMFKsR2UXqW9Vqdmal88q\nLpkoQx7ZVqSnlRZMCatKxy1NUc2vNszVdQ6Zf1IN1DQvOUdr15CZQpZ3f0b6\ntx5abIpqHOv4U2UKGGYgIFTfmJ8/mM8V3gAB2aNV9G0ThPBvJS3ZISP8JHOK\nfbTxNk1rjXgP+oY38hi7cK2b4VrG6pa2puC/vVMLoGDRAkqJ2O14c0SPHzEL\nlEXCS5TmqOOwd+jDQd65/i8tG7VaOwKw6+WWweGXYNmvh2CzPrbYTcXnih/0\nW/Vo\r\n=0hNf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIECGbhEvpJF8S29jGwHKLKZeQSPY0kftKoLupPrm/TTRAiBIM+HBclyhKGWapbJQc7v2UbOwdT09iW2C+5XJKh9R5g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.10.1-next-1586203084-642a5b56.0_1586203131408_0.6648571827753367"},"_hasShrinkwrap":false},"1.11.1-next-1586204052-98732ee1.0":{"name":"@xdn/core","version":"1.11.1-next-1586204052-98732ee1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.1-next-1586204052-98732ee1.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-5s0D5QgrR1w5KdTb9Jk9Yt1S9MLMcGcaVlBC4Lg92x55BTdlX3J0YQv1hyeOt6m8wZ4ZkhGuMT6VQIG+XDWr3Q==","shasum":"b6e1e724301ce56ee60bc69a97a81dc7ab78dbaa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.1-next-1586204052-98732ee1.0.tgz","fileCount":109,"unpackedSize":419157,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJei43FCRA9TVsSAnZWagAAK7gP/jAClVKDaq0EmppYEsxH\nQcFKdelVqZOpu0Ih4XWzmrY9A/m4xXAlOlegOaBRN6dPGppHFUzTLV8H2wwW\nyQyQEsnfVVBLXbQMZfY+/XO4ZoQMRJxWFJv9FeCxCZjyFUfyw39meGKZDpUa\no2GcgjPrAYxRDLRFHAfiMhTVoFM/Jm9aPoUD+NSp6sEvnMgxZMS6b1ucjb5E\n6SgMWdGcnI/yjCcWPFKogHu5vteTVpYw03vkBTqLPUHYptGVBBuLI4umxExQ\nlP1sTHFRjS4zs7Oq7sTQVhejsDqS88tOS+Sh2OuiiAF6/sf+AKHdP37hIwP6\nnVKo9RaIJOe2Mj0t2GAIza4WT9tvLySpXLGOCxt6ANS0+6GJlH1ztFOFHSlN\nW8txt3nxRoNhotynkMhr6U10NgSv3oU0fCnFa/JaeI7yuBhegJ2lb010yj0w\njhb0trFBmTdxAwck47PLaw/PFUcD3lnqYked+bxcvbqAD1BGTQAj4kZ1UwOx\ngkUxZRr2ShUH5vdjsj/XVgWGW3XOYiKVT9Mhmp6PVaz1Mr7YtmAobLjLcXi+\npie2z+aOJlpCtGIrKN72vNUUsKa9gsQPQeypwlKaiQeZ5/hfr8sDEU0peCKk\ncXgluPQPtqG0tVMgYqcxJgXuQzNdIyHPO/0mdwdxOxKxM5o6rHGP8xSKDtE5\nUAni\r\n=a7TA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICdCochgh7THNwIaz3z1CwGj31cQfcav6BIYHLDKHT9FAiA2I3a1Nsa652hcZRK3GVqP4S64E2cfZCYvBLaljpHgSw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.1-next-1586204052-98732ee1.0_1586204101130_0.6218443416636705"},"_hasShrinkwrap":false},"1.11.0":{"name":"@xdn/core","version":"1.11.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-pnLCL1yd942NhSscrAnbe2NM5Ko9UVGv6CqoVusWigorSWDVU642OE1ZYKgPxz60NfPE/3zeYZ6UqJcoJ4B9Dg==","shasum":"999a5390777c7b016aafcfe3a1b68a87dbf2b994","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.0.tgz","fileCount":109,"unpackedSize":419130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJei46kCRA9TVsSAnZWagAAS/UQAJxF1uHf08GEwyyTsyob\njhMlsPsmVqR8a3yVFIAox7KIBcDIMK+8z0IUSIrFCVoorj32ALFWpBJSzKdu\nRwI+fuuOHvG9peHTslxOgnQkyHxH3RIstV0rXvnF56F4PnBDlBMXICOR202N\n0w0AQv5thf0ZPhM8yRLkTmLle64XPb1nYt37oXw98qWHomD4228PW0nEUwf5\nrsNba31bEXk6Ybl7zvN+rpkLZ/3HdQGPCMXBX2sR3qJsGH1bINwjZD3xaXN5\nqlg2TgnGGy8UwZMFNGFw/qdX7VNTwkZJenUblISpxSL2tCw3Q2MkB/XQan5m\nMZeTcX6toRCrJAIwoY1lYtY5JhKCO0hud5CfAU88X4o4dGYUOpKdz16tSYZz\nFGA1wK14PajjSTq9WuxdtUsxIoyWX+l3vBtkmTwwhI1mvMe1YD7JCoJzB5zn\nh68Se+4JVMC0vZt9dtra6L1QriHcGxFjP3LYywQ+hmh6gLVBYZH/s9Z62LIQ\neFldPa8Oc3tuNOSBFVH9mKn6wFaV29K1zAXHcWIrnOH4jsKlsENZycANJDRR\nHCRi7I8ODd/9GRxE7xF4uahm42Nx9Eb7p/ARR9IiJbdlzH0d/NV/TQvSSoAY\ncCmJd9kYkR7YvTq/zHYaX9TIH+eX1hboVRrN/xwNK21qpmiIo3dkSbsF02EM\nOvz1\r\n=JpQp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEGozcfqGgbuwNrnezbMv83YRKW53qNhlsKivV/98ChOAiA90nIY73DA0DmkqzBhNdhBIOg88PdkPyc5K/zA7Mq9gA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.0_1586204324195_0.4668285149491571"},"_hasShrinkwrap":false},"1.11.3-next-1586262970-50d2d7de.0":{"name":"@xdn/core","version":"1.11.3-next-1586262970-50d2d7de.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.3-next-1586262970-50d2d7de.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-yWK6ENmWh6Ddpfu0yNx6E4nHh8NfVV8/iNxyize6fzFPCOsnqPDVV1qCQQONTbFxepby/35+USgsz2E5niouhw==","shasum":"0b0e42905155f25785c396d83a4b22d907366b0d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.3-next-1586262970-50d2d7de.0.tgz","fileCount":109,"unpackedSize":419199,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejHPqCRA9TVsSAnZWagAAizEP/RunQxG0j7ghOGjxEJUk\nHWgDM7DuHpxTjz7DB7QeyYQL+aFmSMU8UhaMXzlk4EqQj/5TyKvVGbCBotoC\na+JBbENuaGEuXzPTGPuxdh9QsVpGXlHsro7xZCLrYAVuq2HxXpLFx2kVnuPI\nAG9a7wxVzty2SFrqiEn7tNPS2ghigFSbThOD0q+Gc8MZ5jFvwprKNv3cMuiv\nxPQSqsocwANQ2kQ9Nk8iEBWIq0ZAwdel/drflE7wktqGPWFW8+ZWU8LFnWa/\ns9JpCU9/+Kg0U9R9RG3QMkWxOTLzZdM7m8UXBsbDCCei7ZfF0z9c1ar+3T7v\nPu8m0GWqz2TU8StO1EUo8mVdy6CjNsDcRSPpAjW43hHuExtcAJoPbIDMppf4\nE1e2Vl0AznEPRbXreGgE0cc264vhbBqiPWq6eQm8Pv305vLHJTTwlscC7TpN\n9i1E+IwzGhDUKLT3izsuvyKuaxi0SX4fhVsafFZaQ6nQgiL6qs9kvJGY6NKy\nyL3YIFsbhkA51hXAkzImns2m65R2DLE9wzDhqTKYcMR3tvFqMdrxmZqQN0xZ\nc9EkbDpomuSmxYHwie2HS59p3ry1nRyaunkDoBgxpSzvj+hrEDeuB1CfEiQd\nClVs4Y5MjQb9Nbieq/LezIsq3V17fsCqVWCdLy3bcqJwisocgi2pvDUrLUHA\nWRRd\r\n=uX8M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8sNSLIlKTDrpqp0mGM9IoiKcgS5AFGIMkESAtltFPbwIhAJoTKDcIU7gyaaAmxEnwkYE93IOWZZI5MBGskgRUOhI9"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.3-next-1586262970-50d2d7de.0_1586263018259_0.35576410899656596"},"_hasShrinkwrap":false},"1.11.2":{"name":"@xdn/core","version":"1.11.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.2","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-J7Z8uVdv3oMtIj7PPGNrVJop3558UohY9Ly8/58GRhcOgkQabRjdlzmfn2MB6O6pspVuAE+sIkTwQLhWRADW4g==","shasum":"805f4148c58e75d955edd93a3becad6b6a223613","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.2.tgz","fileCount":109,"unpackedSize":419172,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejHQYCRA9TVsSAnZWagAAxsgP/jMQp7n+814rsWzw+Ugj\nVToNoKb4k6ulnD4Jc0zC9pRzoEt3Ecz3QGNtIkIGD9HV0+HczH+dEcASohyo\n/zP6xvdUU6fyna60p1+E/BEqMPBm7eWmGb2FOo5MILKNCfRhti7xTjFUiV9e\n8ESVv4RUMmaH3Fx13HPWOgo6fotIJw6SQqQLexM5a6mlLodAisjRrVoeScdd\nIGNSTxur54uYTtaSD+XVUnwajuCdSO7peeK/V7D0/mOZNRxO7l5ykWzj+f6u\nLTmFjWkN/YJ2k8ebXa1wiWFU5kqrFpqiXLrALaJbWkjrDk3R5zlXeaFpeRTM\nZGTggnPsXYUNJP1ekVbAZjthoBwYBsP8eQXEzYfGvbo2vDDbOZhfJ2SbLjAE\n/ZFgnwk4L3BxA10jPwXnC8tqUnD5/tALNVU2D0HTY7mha27q06VzsqxJzvly\nv0xpmdMMoemFWr5tQcPsKPipthGkfmhuW+hoMPWriMsRPwGA1GIdY29eNdXk\ndPV/YXS8Y8a3ovhionYpJLtZH1NECKnQAy4rCCXi3xFNaC8fu7WeFRPJKDix\n03OidW6R0IydOsguKzbQTuv/dTn6d0N4JZm1TLpt5FLDJshU2xaydOiRhkhZ\nTJW58Ajj1ISoP07XmDu6Cghf5OIx21Pwf9pbXNZEGuEXlvJbg1yTMOZlm2wC\n/4oJ\r\n=x4O9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFqd9Gh6JmInYPlUENL0cretKfepJCaib/9IypIdjuwhAiA+aIhoeev9/758vEDlhTruSVEi9t6+TxiHGZP24cdkzw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.2_1586263063436_0.6966247743158871"},"_hasShrinkwrap":false},"1.11.3-next-1586267897-85448496.0":{"name":"@xdn/core","version":"1.11.3-next-1586267897-85448496.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.3-next-1586267897-85448496.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-UCPn8cwmEmHylSn/Ly25rOZOr4yEatElUG+g59Fg6uKY9qVwvFEes50ZCnaM6HZW6yzvjrDRhND4Z+D1ag2rwA==","shasum":"7496e6429701ba44c782f447531313a83228d167","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.3-next-1586267897-85448496.0.tgz","fileCount":109,"unpackedSize":419199,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejIcnCRA9TVsSAnZWagAAcVcP/2C+4ZZasL+o8bQx/cex\n3WfgRXm0tQqdXUD93DAT84dvQIOOiUr3eHO3jsEWBAzDA/hV4JAQUOVEYNyi\nLrzbVX/miTeeGIdFBFiyQON3t0NEx8ZskLNsdTNpjF5tSX2txm3YW8Aqsq9Y\nS1eyVMRkMFRMG4NMUqIbZus6fiWN2aXAdrck+lVoLdfueb+y4Bav9JytUy6r\nR49uqdeE8KRIzvsCiYU2Sxi5D4TSrjbGHCtjrIFnXM5uPEAQtNPlo59z3SMo\nvM0FGDTi4giVj+SsvqXf1xI5+gLHU2cpBe1677kMkoUyGkYqTkRAdqIYrjpo\nifHORuAGR0kB58nS7ch1sqFdnVztGqbSnzV6RxV28XYCbU5gVpf0SmyMrXlb\n8fiSn6G0ZoJ/nl4f2I4by1ZB9mk2Ggru7sZHQOaNcRGOSk7XxIg3+7/DPltA\nlZufE+4mpyaKQuzTvaC1lPmSqZgrIWZ5bKL11YvVJyaIIhl8x1ITivkb1ctn\ndBmTuvH3X6eiIZ0BY4t3mUuP+fE53uS3Xg8zXYFMLEnJvXqMErwHo0E0PyI3\nEt0xY8zYQkXuhENWZrwGJMuBaGEv0QEah/3+IgwkeMqhc8g9xCI2BXimxaDx\n6bYdtGCcxYijiSbLj4XPdYAQQvSRUOXwhoMQvMum33ow7H1nS6gv4e6XDL9e\nZr3z\r\n=AaSF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWUfmCbf8B+plJq5LN3Su/oO64PQ2gCQLnXR5OPSswbwIgXS8MO3wyyn3SoaPfjn1S47XhHFy5Zn3IuMJ1vWTyryo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.3-next-1586267897-85448496.0_1586267943118_0.43255428420332254"},"_hasShrinkwrap":false},"1.11.3-next-1586271605-6050270f.0":{"name":"@xdn/core","version":"1.11.3-next-1586271605-6050270f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.3-next-1586271605-6050270f.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-XxvBHbieLbyXZg8B4kpE7WFcuj47Y2Rsv24T5vhIConw40cJm2HjZVPkmDRB15W/6mWhcKXiGHo+JC2VXnWlHA==","shasum":"246a2e987b831ce784c2455b79eaaac780337da9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.3-next-1586271605-6050270f.0.tgz","fileCount":109,"unpackedSize":419199,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejJWpCRA9TVsSAnZWagAA4wsP/iWg9eWg+QqY23woCqrE\nAlLwRhO2xmbY/ImlUZDS5HS2H4fnRIvd8yDxKMZMAruub+rzZfboAvE4EvqK\nJ5RjgiU+DUyIitsGiszh0X+qytBdbhXhUEOCOVp+d37ymx2ZjUUc6Zn5TZue\nkTKL3BlYlWiQ+gT09fw3FQNJVHCNl+ZQRUjMpraxTdz7j1b6rmVHni1r65GX\n4Exgu0R1I+MRGZoZuiIwfzJASEpinFXciQQFoh1Xfqr0urQqPGDATXYcEZ43\nPHZrM0OE8zoAUzBf5AHqy9dMmsl2Zk5EFCGjettV+84WU2gWZ4pPGQAiomn8\noNSeTQvbo5DPwOd32otFlMMXnC0nDAsMDyXY0ud0UGGXjQ7WqjBV1RcrIG/j\nEIdBq2ATAWOWvPIsnUlWolTKhOpM+rUzToq4KDYn4WoJnsXh6Cr07/U8oZis\nhzU0sOQ+VLb15VKgEiYtWhWHFGS5DrijqXcZwMvRWM7oEX0CzLwz+AVa/VOF\nEF4urvpQyn96d2wqSzjdwPrb7WhjrQd3RCC7h0bt/copF8BcBlhtfB7ZaoGi\n5kwH68YB49e4KV8ZkIqyhgBNxy3y1BG4Xca1pnJbtDcbYbnWW8YIp+4l0Lb3\nMKQwFUTSfXg1fDriUwRhHhfMVcI2FYViTzFrPbBrI7F3GC7GUP1X60dqCPiI\nvMuu\r\n=qmEE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBk2Wl6b3Jj6gK2oyAbB55AsQNdCO/fcIRTfSUIpKJXAAiEA5/hc2hj0n88qZnk4abv5PCPiNxTj+ccVDxeTgsT58ao="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.3-next-1586271605-6050270f.0_1586271657474_0.11406314986830957"},"_hasShrinkwrap":false},"1.11.3-next-1586281026-b56ac39b.0":{"name":"@xdn/core","version":"1.11.3-next-1586281026-b56ac39b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.3-next-1586281026-b56ac39b.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-lTAxu44jKCRWOBzZ1khS9GByglUtms3KyBLVAISoaHtQD972rAaPMlCQNd9i0emTq2KPGqNyOZvvSk7/gg9+7Q==","shasum":"0ca9f777416ebd69e51f1712bcff0866f292fad9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.3-next-1586281026-b56ac39b.0.tgz","fileCount":109,"unpackedSize":419135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejLptCRA9TVsSAnZWagAAjyYQAIJ8fQt4fVUqMZRd40uz\nnKq44KHlClbVAqn6Qprvteh2gc/w66T7FTO91zw3DKm3QBaII+34ZRZ2uzCy\nhl9+9AdrcRnFR2aPN/qfiq9vhs8n4ibiNXIQm9iOJ5sw9j+rRBpCUtZlZDnO\nT9lXG4jiq9xXOc3JMn5aOvMLi81MlVR+STkfLTUfvgCFVNfT2TxRNG/JiAAR\nA4AartHKGQPtP1MWiSANOslRnE7HXlStoRmGEidSZrP8S8N5AmlEE0arCTCR\nFs+X2jxJB9SBeN07lVUBuRUNOeqssMrbwQnZEabbUckxZ8Yuyfvq+5MZ8LXY\nfLfdnYwXG8atm955ZQ0ZwnlWSCnz4LXmLWDDGD7oZk2QZ2Y/2oVZpc/or7eu\nUEKKMfOCiLwVosmw6F7HBjuiZBvxyVf86rP4KH4rccW+375tipe1san8eXhZ\nh+1WKXYJB6Z3EdNd5G5tJqgX9AZWiS4dOHD3oiiRm3bgpl392JVX0AJIQ+pt\nIkl+Qia52UCrVvNQaH77bWm0ciC8/S9bYR7ThCRZtmSihN5CJzsKSK5uF7oS\n5aSztrd/t1hxqhOXUCr9N/2mwOba86iK8F4SH7ftL1gu1WdoR6cTfv3vueTS\nyTqxkAHFyKZuCfg9lwfJjInQAmAxIzFCMZLlnhKAD4vLkoimkPr0V9jNQlkh\nIKgc\r\n=W3qT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIRXyThaJ1AID7ldiyQ8O8bwNsxd7NgqCZHI3Fozq4TgIgK+e7Yr/inzotXnLPud6TSeMpvni6a6FjbnESgipU0Ec="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.3-next-1586281026-b56ac39b.0_1586281069433_0.809021202778275"},"_hasShrinkwrap":false},"1.11.3-next-1586281041-eafec37c.0":{"name":"@xdn/core","version":"1.11.3-next-1586281041-eafec37c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.3-next-1586281041-eafec37c.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-MNyGK+PuofuP9FAYvG9ZZhxFh3ntpVN1NsSyz9yBaEfafekgW096Zz/2pWozQjqsFpWnTCfvXtOntwSBzkYowA==","shasum":"bd79d7e83754ed3ad4c4ca0da9722cbf75d45ff2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.3-next-1586281041-eafec37c.0.tgz","fileCount":109,"unpackedSize":418732,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejLqICRA9TVsSAnZWagAA5bAP/1PV7/5rlz7VAnLwgAlA\nEJIv7uIgD4zxxNvPFValohwZIr1uw5ppAvPJEA1bKaYF3u9DysvMdUH0xu58\n9V+k64XM29ZVJ/24us/91uIMwxzc4PTCyxlMlQ+RaY+6N61hvne+sN4eni0a\naLqCPUaaZddmbEIvYckZJ2uefpnqd83kyONlYhTMnxUQ02riteT0tCdiI8K0\nWovaaoFqD1TVTlK14T8IIuK9e7+U12C/jk720tTSNm3+nzX/BTmTiSWe1YVZ\n8JdYxe/T4QDafffwKC5/9QpTk0g9fqZJ6mEPdqm/UB2lPxB3u6y9B0/FjHJ3\nRjCRULJeUGydM/MFNbTXoSQ7M+M9J+gJb6EqjqA2/ViIZchq6DKzRGW2YdVd\nNNOJ1bCeEhtHuUtOp+qDR78JCiszXrB1Yr9QcqTwx5WZo0BcICYCdZlTKyK1\nGbh+nxKorHb+99FuzhFprCShKCfoF9PUwZvB/mJWoGkLZeGeib5SG9xuWY0q\nJyymgE45hX5fz4OOTlzAjfxqk9PFWpM6RquvlPeRbKV3J8uEzaciKDYRPqXe\npB3yPSvGHwxVSXDkOTY0tRgQJSDOAy3tah2nHzEzLi9FXdgKSp9ltWqfzqmi\n2hu7F0d9yhcZrO84AHxUMCa7eQlAE7XdJsQ4CKXy2UfX2WEKQU39Yt5cooOi\nTI5w\r\n=b5YJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRftIm3lMFteOuHT8OoTylRDQ/aVnijnM9eZOAYaUSngIgSsakB9J+XX+WtfxX4E3xFDmMqVEy0QY5owHYrP9FCkM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.3-next-1586281041-eafec37c.0_1586281095863_0.18224609446872253"},"_hasShrinkwrap":false},"1.11.4-next-1586281065-00976acf.0":{"name":"@xdn/core","version":"1.11.4-next-1586281065-00976acf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.4-next-1586281065-00976acf.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-2gXDW/r3FV2hRDxTSdyJ4P13PNCn5qsMrGyY2r74S5rlyXHPivEwwqG8HP8bBAyWRkksz09HG2wEtr7ncEag9w==","shasum":"4e15fb2c8b6a201c1a64f5b2e307812617efc063","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.4-next-1586281065-00976acf.0.tgz","fileCount":109,"unpackedSize":419112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejLqXCRA9TVsSAnZWagAAsagP/i+KqDm6/jzPGUWAtOzQ\nLwesn7jHAp7R+EgWop/muxWKAbmLZu6AljYO5lKmK8S+0AH4GesP9zI3l30x\n2mDsV3pdZ4vU4ofzqVE3Aw2w796reAxJlWv7v0MMGpG2PY3UTpJwTl4SQ4zG\nErOWyyrcV68XBtvO0SyzakNFj70TuzhCXOkUpZsIiosrKn3joHWTDAnw5K7g\ny96eocaont4UFykmS1wJI2s+MdRzsYR7QTztn5LRn6y1mTSjxF1PIFh1Fg88\nKbaQYQoEgXoCOK9ve2eQX+mXL4fm07cuObDHesdVcX7MMXle5s8L53GtpwDP\nClk0mqz6zNjZNGIbTRFBsfbk8MmPocmZVSN4uXLI1cdWDQCtkRzN5Nibx6lP\nb1Teg/x/Fk5As9D4OFOoSMDD70PhNV6VWG0zPHF4LMYeC/jG021e+UM0eXA3\nSj1jjuwC9ZIrIP7XFYIQpqOah12rlBr3P1Id64uz0b1e0BiYtaVwMKh4F7Yt\nVDlo5axXRxgJLb/fFzbq9HTY8NXBJE3ZH62WphOU8is06oszCW48XOoIcail\nqknV7yFyGLVRYL+nGfgcqv9l1XT16RBDHO9ChnUguTYIa3zcvUpp7qxeOx0F\nQ8oXBe3mjM6fY+POpKoMQ3X8ge5ngz4l+1ltJONsADTcpqW0iahH7dclQ39j\nSKrH\r\n=7KhM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDux1GPaAoM5Ut4YP4ftw+XKugopQxl977OY6xylTe97AiB6ATM2I8srKLqWdBf5jhE44BHT+fh9NTQ6MyY1hC/j5g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.4-next-1586281065-00976acf.0_1586281111086_0.8669689485137462"},"_hasShrinkwrap":false},"1.11.3":{"name":"@xdn/core","version":"1.11.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.3","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-6Ae98fwhO4X+A2Ew/t6WpENCmw/uI67F15YoleRSdh/EptIrS54GcjGsDo4cZJ/5n1eTQ+umH0R3n8Ctj8+Q4g==","shasum":"47fa4173456ad208c930214af60d69e7d767ae7e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.3.tgz","fileCount":109,"unpackedSize":419085,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejLrQCRA9TVsSAnZWagAAz+sQAJGOGtnXftbCmZD0G4Nh\nFjiFBAN+ndekCYyy3Tu9RW5pMIEFK+yGmICx8ZpagvTfeMaOCTew4C78tyrx\nnqgGLhhwn8if3FIHLr48ncfC78Dxggnqqg7FBNsyU9VjFWxm13VXc5elJ7FD\nwU9nRZAr0ufenp+EgWTXQE4cTBiuxOcmz9uzCzjl+SWouWOx/0a4jPAbeCrV\neDKg+mJZ3FZnxQmOMSu7UIb4DDbBLvnVBRNtcwN+3iL06wW1+pf38fw7wUwq\nIPyrqCiL+egUNXJm3ipYb+gRQKv4EXw/494/DxEq5k5peQa7SOSze10NqPSi\nBjDQlC4cFdvsqsbGHWirzUgeX8e8DxIknmGzZIFRbb7AoA+PAcPoD4o4mhr/\nnPMelv1adQxqmNb8AArA5flxjHteMYNoVF83HO985LnrI62aw0+MEX/vCg/4\nqHBbQrbFek3MRh4cSY60v2WWHZGMDaLWpekLE4nOg9RCOFYHZD3tPB9jXuKS\nyXfdXXmFzs8877NO8oGPvwTpq2O+2eZsrWDsVDBbuhVITT2MSD0U12i6nWgF\nNtG2xk8DKEiTo8b9eqbwMSuQnYFml8WX/4SPtSDMvNweJ2idGyAA6dF/wkpi\na8TrmYUZRlj1G6GKJyka6jrYUNxRc9OsGbWJ/XUoEuc/skrjjS5DusojC4EU\nk5vi\r\n=WCdD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEYWhFgd9pbZUOFI2n6CGYHO3QfluB3SAjnIyGVIubSwIgMDELyasAqYGKlL4+8JwYYJkTPgrKgIk/XjdB26W+emM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.3_1586281166460_0.5779402969889891"},"_hasShrinkwrap":false},"1.11.4-next-1586342208-3fdeefdc.0":{"name":"@xdn/core","version":"1.11.4-next-1586342208-3fdeefdc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.11.4-next-1586342208-3fdeefdc.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-uBjOO39u9sWZZYQAaNjSJuNHhVooMxZJXuvg1xWLD/vvHrSvRQNQPiCJBS8xe/6ykvEd+yRhJXqdaVwUUxfxmw==","shasum":"780f8c981f1ea07ab286fca16ddd9c2f02214e73","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.11.4-next-1586342208-3fdeefdc.0.tgz","fileCount":111,"unpackedSize":438136,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejalwCRA9TVsSAnZWagAAbuIP/iHU43rEzVZkq7xe2Gpl\n9GH+oNZG4d/+bZrw65N7MD31IaDyLvGnlMZCNEcCLT8I+DDwvH3wQM4FBMGW\nz/PcliXSVe1Snh4FTipIoRph6dy2/AOk3iMKAt6tvLoZ4TnuXvfO4Bw+yR2w\naj5gY0zj1mLMB+ol3HxKqN52RxAAuTOJrffD9StajyjRnQ6MQ1lG1uwyBSc6\nqFaKAjm4OrjqS2yjb3rHeqgJOk1SSd1c2gPcVpBXcD4/Z3Wqk39TsmLpfVqL\n2PS+AOJRGmWr68NVLkPHg92RpeRE84spbyWTQSQ8K1u33nAPygB4IfX1vM/M\ntfqzeslFz6jfcRSeKfAKla4tB2NMZw5doxsy8T6d0MWNm2RYD++rvD5ZVR9G\nAhWTohy/hxZpcGNtVz9xPRdlLjy8fkqmpcfPTigkr8tQCnAJBsSu8Yxs2Tl+\nSWv6mWS30HMKJoN3iGgsWOu6oEkfpJzYQq8r9kaUmPB9t08/FDKA5sPkISCk\nZBspLHhGo765mcL7CwPATwVXC6shyqEN6RUAUcaHHajmBmse47voSF66/6sG\nNjIZtfT5HkTqxzmeSHx8VIqbld0bz/gttjf5uOF2A2VGRVd2ggYv7K3Uos9f\n6Q7T8YFOBbcOby7HcKGClLw2cnoDdLUHwY9GgtkBus9Kp6tPkk7VLJSLatG1\nfnry\r\n=2RG+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChKKC+29V4lwnQssRQJtodAsV+K35okluozkucGh61gAIgDWAY36o+vTNPqBNBnIHxcepxD82Ox7pZtvl+mXRpoy4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.11.4-next-1586342208-3fdeefdc.0_1586342255782_0.6721177127564788"},"_hasShrinkwrap":false},"1.12.1-next-1586342429-42224fec.0":{"name":"@xdn/core","version":"1.12.1-next-1586342429-42224fec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.12.1-next-1586342429-42224fec.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-j4/4H3s8NKGgJLJQCYiUtWUpZs9FUPnQzKFvJhGKQ2iWpTBJ9KiSPholTKrMNFX5+t0n0uRu2OTYPqrCO6CF7Q==","shasum":"29fcbc942bc942789f6b524be6bc1e4cecf67293","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.12.1-next-1586342429-42224fec.0.tgz","fileCount":111,"unpackedSize":438136,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejapMCRA9TVsSAnZWagAAPxgP/2/hMfBdUOjdSed4f+fl\ncUNSJoD+DYV5EGD6f7iSkqWwy7trkqwBdhshEG0rKql755T21/cgqZcESdtS\nMbKuEc9dTCrVINJ3SDXnR2Gb7XaSk3QCEkbi+1Ua5KCnz1aGid+dUzjjQ0I7\niqRJbMggUUAZAucLnc3vwxFTZA8nBzOA2WSAJNBj5l/k2j8HaUBMV1Mh2jqE\n/MR6mkJ5CCyVK6KbyKB5O+YiQOA98i/NBTeiXjWsdzPMmqRZUjqGvDaWsbx0\ne9YUuldV7Za23k16RxAfmzWDaLF0Yj9xQiK/jH4dT0RsLGkrxZfNvWYuluIv\n9DyHj6KoOyIQDSJ3uvNhOHle37oV8AmavgjFN1JJErsp0XGh161b+cHGWrin\nwK4jNZgDlnuJprDu5NNh9WHdHRjYRuTqYFw4urbnp4OUWKTr2n9u3OnaSwkh\neJaS22FhnOVZWR753hioVgsabzzlu96R02mYYQJ1/hpXlNgkwvwC6Bg4x9ED\nxsatN6k/JmYZY/SQIdtBfFF1JcWLU6P+Wtok5DkBT+1A52g7VZT+Sl23tGzO\nsWtqRA68awMrEf+LhQFBXZT1CK+pUyKZQUJ+/7nyorWLIANPgHCPPUt7QNPV\nppzoHYk5aUrrNTRloOfqsNEadaCW1vo56Ihs9rjxW4zHNe7uOqjflhL0hCYI\noT6K\r\n=4iT/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtCBJiVpdHDiGGnjEfNy/4PFTx/w9eAcXMyS/wAxzTDwIgVSAFqoXDkEFKxBIa25jR+hPJxTsU5Or6VYdTtpfmCWg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.12.1-next-1586342429-42224fec.0_1586342476485_0.7169138204409542"},"_hasShrinkwrap":false},"1.12.0":{"name":"@xdn/core","version":"1.12.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.12.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-6D0NNCTqSH+yuoyieh9jzmmkgTAF+wX2giI/FAzijiRtc8DxqXZT7HBdN0DpPsZrBMvEaDoa1of58t3kF3S1/Q==","shasum":"e56124426365ab11282fa95bbb54daf08cb06f0e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.12.0.tgz","fileCount":111,"unpackedSize":438109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejapdCRA9TVsSAnZWagAAG44P/1BoviXUP5A+mtp9KNaL\naoRNlj/sQEvQG5UMNKgAznkqyPn7yiThBUk/GDAw7FgPf5aXNm1AHDvY2acM\ntaUx9WEvjS0FbaCPNCdQge6BCtZ5fDF7qt2EjyMxPAlZ4yNGy7D0kKIigWZs\nXp5kP3VYBu4s4EKdQfzxPQFIvA2e7xF4rbCa6rvInVLrkJRLiBkY+0LEAuLP\nrhb8ogxtXac7XzRPrnSHMM/mQ1nb1SFvrAB53xxXZNtKejlOaxmHJgY44hhh\nOxbd3o8huZ7VtYlOuSacPfz+d6UPUwyNFeRbFmozb5qImyDK/r5LX3u6U9Yg\n+eAKDcgn8SKgi6zORLhfamZfZaFPnVnG2QsK5+74gNUIoLlRACIE0ZHiw+/X\n0cgw1MsLwtb7WZd1m4nFpESYXlx4CpZzoNEtu0MwBct2IKvKXtY+b8sTGWCQ\nfJVuUug30JWFPkCUfT0XSoai9BDTeLND7yDaKYmRaFekRaBDk/xw8xYJ5mKY\nKmO2a7lFxialUpgGx0OtCFKoHPBLUJ8v21ifKTNJY4ux33gE3HWrO23RSEkh\nCku0+ecmm5l64LRd9pMY56TavqHKiBYw8xfTI/dGVwu2C8/zN0Cw0hboeszY\n2g6iUdAoV7kaotqQRR/v5ociaVp26yeAjfEkrOKU1QO0iffSznRItqDKnIyR\nKlx9\r\n=lGeU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkJH29Joia0Q1yI8m5gG1f4+5JiIFs1fa3qS1drCDfGwIhALeBrVrCrSeF+UMFU7BaAJwY+Uya4yqfN0O3RgCVr/2t"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.12.0_1586342493291_0.29234590316738185"},"_hasShrinkwrap":false},"1.12.1-next-1586377843-3fea91fd.0":{"name":"@xdn/core","version":"1.12.1-next-1586377843-3fea91fd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.12.1-next-1586377843-3fea91fd.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-zNzNCay9t2QBywZ4LeITONPhBc8QO8nRty2z6ROqCa44s8I/vBt7xXF91jI+Bdqw8bkcGOg68FSBEO1Vzm3Thg==","shasum":"41fc75016e5675550da4fe3cecac95549c44f827","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.12.1-next-1586377843-3fea91fd.0.tgz","fileCount":113,"unpackedSize":439367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejjSiCRA9TVsSAnZWagAAmdUP/35LxGUrkJOnG8Ebh8ue\n/KM+MO/ykG9ZHK/vzdk7wr3Mp7u8tVfhBXS6RkO9Q0MkMg7CJRDE+c9bfbOy\niI+iTXsVu2neH15LoXqAFLs488eTedn15XDq5IWekwyYbnmqvQX3IkkSQzoc\nSx3koVzRBvt9ZTP2hFyODBlmfgtG/M1AMceQtyDteDEGO2vqG7/jRWX5wSS2\nQSXNaZ1Bwj5Jk9Vt84oefo5aAX3iXvBgpsEynAodsSN+4kqvCq3q9y/9UkkH\nxqqfmvG85mQFs9EDFO3QA8KfAWcFbpUXLDdY/A3UvnLXUJY+W/DDP31Z1Tg8\nA4yKjk+oGEqAFzu929sKFeFApAqQ6JT1bunvtjSETCb3d/oWa247vnNiBlbi\numWmz2SRMegbhQOIm9mA6tT8pzjc3jF4eDtpOi764RGtJvcTRqxEw0u/gbsM\nETa501Gz7TGf8tfIoTKJs/L1IRODAlYA5I+HNRctna/ndZYOyWLjjohJkza0\nfb88fP2jainWl+5HHEp0EzgBCHlKTgDSqliW+6Tm1X6HC875AO5e99hTVR45\n6rCQQ3wBH7ryWyaDkuajiVZRibEqLM+CQfb0IyCusUn/2bJnYZmj3yJPTXxr\nrVqDjIkt2vlx7AF+pibVy9yOsbtIF8pqCTZkBA2Jpt+udWsrr7Kc0Ai0Tolf\nwzmZ\r\n=zCj5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbkjHLJgoTGCJ89HEHxHg8THu/4TNzBoXhtn97HuxHFAiEA/oPN3GK7eUjHPs+mM8GgpNa8dlx7umRA0LdCYQ+8OaU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.12.1-next-1586377843-3fea91fd.0_1586377889767_0.8245932314505295"},"_hasShrinkwrap":false},"1.12.2-next-1586377961-1274c2bc.0":{"name":"@xdn/core","version":"1.12.2-next-1586377961-1274c2bc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.12.2-next-1586377961-1274c2bc.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Wu2Av0ZzOukG4TeR0uVqTJDG/PyLPpvmCwkVsznApbx+Xhfqask7QrJO8Jfwl7UZUZUZ3/1CxWaIChbfRqbJzg==","shasum":"5be416133c02f8b5c66ee863717d98dd86e65486","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.12.2-next-1586377961-1274c2bc.0.tgz","fileCount":113,"unpackedSize":439367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejjUcCRA9TVsSAnZWagAAgvcP/iRGIuRGIcRf2YoKGH7a\nh2AAbNe+HUU8ScnTZhhpFjEhzUL5AFWSKDh8Rjn8qQt952oHNCFuHaXO7SuX\ntZZq5CG08Jw3ybhLDt13tSS0BcbxH8BgniZZNSVA6eYacja/PTH8mTAcWLDE\nbwWg9UeF5Qc/rnKWf72+6E8t2GibzBOcnd3iuwAHMH10etroEeyOiAZjv3Su\n9deP8q/oX0hW5VXuyhRou2mIDFQm2+fU8hYzEGLWNwYfTQyI1rUokG6JJE69\nmaw2C2uedoaTaDZ8qaV/QOGnk6MUq06huC+QQ1D1Ik/Hg3taWDVHa8R8MsDQ\nquuBZz+m0v+7BZBcRgpWDxDRUKSDAt3lmNzT05UsFtPAP4T3VDuFQB8uYX8h\neg7szA0Fkp/f/CLuxAcoIDUIKaH9djbOCO2/xI1Iz4qJjIj0vv/HctSUP411\nhs9BKXSuB1oPPZEvBGin8WcMwwqzHxkcYUpq6gbumbehDro3KsT6PerZt+aM\nU7vSqiF1N2AXCvIF4hqjYhSx3izqfT2JaF3iEBw/7Kt8Lh/awf0jec+3IHGP\nRjh+Yg0v9EzQQzhH6pqObnAKhKB/P6xcq+VYPrdBDCUCM6qbQbx9m0llSvjB\n64s06S9/nhcINQqWIlvcCagC0j3K3i3/ReDUqbqKj7wUt4NukIwu/suV6Jbk\nrKFQ\r\n=8D6e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGXMNqNuIACVJZMIvlwWnKSvUuxg64RgAuKnZT/ON/PqAiAtg6AtkOtV/GHqtCFu4ZsI5o0uDbIboVFGInJ7OCRgfQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.12.2-next-1586377961-1274c2bc.0_1586378012367_0.22615775655425563"},"_hasShrinkwrap":false},"1.12.1":{"name":"@xdn/core","version":"1.12.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.12.1","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-HBDjCG7GFgyUi1dQEtjiTI3FlgexF5HjMTmtHPjzOCbd9JY1NMGWsNRl/OpViuwsVfMRhm/sqpfWBVWB5iJq/w==","shasum":"4107dcb3989bb5e5d98f3f2103cb5809464f6032","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.12.1.tgz","fileCount":113,"unpackedSize":439340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejkA1CRA9TVsSAnZWagAAtTQQAJLZHG1lCbMVULCkvBjR\nwmdzEiWbv+528fkB3UlyC4YVV27mD/D9EVz5Ducu8iOEdesH2BXvUu8jygda\nwz6uRkWTmxv2MMDRC5ujezIXlPZrz2Dp8t+jh/iKSpbzf51z+I8macw+kdfo\nvQJiHD0tEwE0wYOQVhBjHC0RGbxOZUx5P9cDGr0WcMvJtgzomV7CWkjjxCO/\n6aPTV3okly8z+qQHizI7CazZjYd7wB+O8kgXSInrxCOMIfRppwq3shMPnZmk\nagvcPQ+FaJU11OwEtEEHqFRzYujLrBwJKf7sx+ul1kyPxypr5B0DyYs2sv2B\nWlviGNW7uC4Nqe12JMQCjBHJ1t8HUNsdkqO1P2mnuwHO8ax1aRgwE7tgZC0H\nblApX5TgGT8OGhWiGyKuyNzU4RRZztCbcBXhQOnhICx22Y+EItPqLJ7xDr5x\nOKhsFYiEJQEC/E1gs76cutRZNacTCBZYso3ipG1DBq331VmWFJJYBJRgaTQ3\nnPUAT0YgjEpcIQExr57Dh/RQbv3BGqCC0ZIY7aJl10anV+xI6CdZLZXb/wlg\n7uOldqGVQT8WDz+dk3zvJkAIVAMTbbRZCdTptGg/2ZEofqx92XQ0X0Ud0m1V\nW3UD653G8yDSujbog1loApgmBwKqjtZJ8Pv2p7Y+6h9jcqT9WePVtq53u2TP\nYqD1\r\n=bNMA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDj2TZFU5A7aIcUR96qlCjmHnBiArh9pzATgE/tf8rbGAIhAJVPaCgiOASgG+YzyjuZIJ9whdecHUIbPjKHGHrrTnjD"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.12.1_1586380853127_0.35582851492234124"},"_hasShrinkwrap":false},"1.14.0-alpha.0":{"name":"@xdn/core","version":"1.14.0-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.0-alpha.0","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-FLkNHH89ud8Fpm/hWNhlLG7FJxiXvq+/txudmdKdk1Og5J+it/5jquUKaKa4ZFjJUNT1zi9Ou1FWlx+caARe7Q==","shasum":"e15a8766ca082c52d0066a8bb5b516d1c282483e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.0-alpha.0.tgz","fileCount":113,"unpackedSize":442049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJej4EECRA9TVsSAnZWagAAiAMP/Axwkko2z8kZlGW3bpil\ncN/kWzaxDIO9at/hxEziGE/lFyVYTlTya7UXNHRuyMhcTjX/+oso5YpYH7DO\n0vvsiyaIXDVcLWS+vqp1sL1GhAom8XB5n0dwiueJy1Untifu8gjfeKomGmED\nIS+X1+mb6x0cvXW1F4yMAD0pZKgu+/SzpvOfz2JYDBIgbhlV5YoDv5JsuDOA\n/wtQBpvMFag7adEoTOq7elTit60yyp2eD2GHoyu/NpfLJZKFF7NRMcr3YObQ\nKCisP58qDA6c3Lu68THQ3bRbBDSijCRqyrkT2kyyPxcOOAt/AJyEZlXA3zLz\nLe/nKy4T0Rp8GrFY9PgzdCjNma4px1D1b9eNGRJVMaSam3Qd6oj29k94MB+L\nefRaRZp0AOspeAR7oOAIZ6MvO+OPkGrFmlQGguu6Mr+/xMSSkD8HTY1b9OMy\nKHhdEI5br8H3oYP2T9E/OTGtUfZcsnkdPc4jDVNbaAmdRMcIdtPjvxxKqESb\niCcdEOasi1FjFRpYNqAjAKAx5KMdcL5sFCm/qUhMYPi6qfAAzizftwb+Hgr8\n2WDL5b9G4gIt7gdx6nMJqsWR0BYn8EitKWuxIxBNEf9tgn9zRjhzR3Bdp+fp\n0QQv6mBCVl7NXdKThahvsae4AOb1zmJbKfJwd+mMxRaiBGdM6B9WOHlokWO0\nkBmx\r\n=aqLG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkqmAAxY9tKnmzUOfwbgr14aOkNPLa28BKPAc1AuRZtwIhAIXN93LoX0Hi3du+EEqekHe6QmEjmgVhl1Ti0LoXgedU"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.0-alpha.0_1586462979763_0.7362755468409294"},"_hasShrinkwrap":false},"1.14.0-alpha.1":{"name":"@xdn/core","version":"1.14.0-alpha.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.0-alpha.1","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-Rsxe7cetI+ojPgd6LxrzIHRIO9ah/MF2ClAtGcUsO0NJYwfncxufxVJdKScQWNgwmYlwqCiX5foAPQePpL0jfQ==","shasum":"da1ff0fd3e043850897a82e71426d9c6e9710e09","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.0-alpha.1.tgz","fileCount":113,"unpackedSize":442049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJej4GiCRA9TVsSAnZWagAAMe8QAJe1QAYy14I44yDY+AQp\nIR0DPnK3mNtxqzSl/cTDxrwrISs9GAE0fq2BdeinkCAQgGH/cg22u/UxLU5m\nmr0+pL5Lj4hgUshqsba5XoCIoUPqgSnyYiMkdKk0LYmK05FfFOwQ2eST6dqn\nXQz0ZMSgmr4mlMMV96eR53SApgF9RRRagivT7bT76Vt98Q54H8hB4yK+TA/5\nYpCswdYl+lwoc7zajiFXE15i7mfEDA7/Gwa7Uisj2RUQ5/Fc52BUuy//QN/6\nIdsJXMrXvHlssajUC6/GKCqB4eCflhcL1hw3jF6wGOiTEiuV3fWwNc1B0LyJ\nmOryUIm/3qUIaK0+dWgk9VvpJKYYXf09hDBKA6ZxYLUBmub8cgkQBp5sBGM+\n2q7o155n7GiBwmZTIDMqleM8diAfe4E0G9vuy+4Wv3ESYyz/DwTnuskE1B1L\noBUv7C2KwY/4b3coVle3k6wADAlrAsaIj96A4JpYGDy91qoPszBINQlus84p\noxZpfk+9CiVlXv2EbUZdLfw5m3AHe95ONTXlzIJNRueElXA/eqcOx/xNaKxx\n4IL3DyBlWu9WlVm9iltjpkqsMWAM1kr9mxbQC27d5y/z1vWmoWFeeJ42t7Go\na0nGxJT1RY6PY59GxupZ2RAbszmsCFkwQ01irFD9mcrlbyvIR4abG5RI0slQ\n4cg+\r\n=byhl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9IddkW4Qc+fbo+ogB1IxJBHKyWGuw7OcEcJfUx2y6rgIgQmbbmqmu0ZzrOhemqMvGIM1V/Uzoef3O54bSHX8QBJI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.0-alpha.1_1586463137556_0.873092141263593"},"_hasShrinkwrap":false},"1.13.1-next-1586789762-81cde375.0":{"name":"@xdn/core","version":"1.13.1-next-1586789762-81cde375.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.13.1-next-1586789762-81cde375.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Qhtq9sV1gxMTg8cLii8FWMDxIAsKXFsNeQUTpPipCB4EUd359OkgbkThLOD2E4RqBsAiPJ8daFsUxE81XsrxJQ==","shasum":"38ecf2038627d2376325d44b61206b5ca84f9ee9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.13.1-next-1586789762-81cde375.0.tgz","fileCount":113,"unpackedSize":441597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelH2vCRA9TVsSAnZWagAA4O8P/1OpJiCsnocJn3WT/Ccm\nGB0cdoOTzB1mZvEhwB+LKiDyIbG7o094VVbZ+XBddmIg20hHkMOg9uSFOvp2\nlN/0y24oTWhN9exOSI7wIYfXsVafiEnU+qMjd1zC7mCYCDui+NWaBb9HjuDU\nJ4F57GgVpMZVrauxVFNhprKjciKi+5uKOiJPOHFH2NbzKnw7tjyEA2qi+Vsh\n30QH73KfJJ0MsbxlTutX1EtfEBgZbBailUBfIgE2NqlASr3j0/Nw2ORWHVsn\nOVncrTk5lkniMK8NkUoDsRFINDzjXXCr+yE9+wEf4JOotb0b3+4O/iy82vnk\npCE/E9WzQdfR86cX6SFNh1PeLRqv2vx1Y195Dk3lULD/oU1GtYU9PyIkHk8m\n9wd0zkCZJTPZdgCtY16AKVBk2dwCfnNhfWEZIpOj4iblPC15bx4a8NYtVPpm\nyiz2RZWLXB49zwf4ZQbjZ6W/GO7xa1gCLlZVKO38jBuN9EsMC/KVxVM/zjv9\n2TUWt+8V/QDj41f8vvHua7tqKVbxBMSbpvR0Ao77gT1xUBBljFwOdrgJXhUW\n3sT1gSkD1jZBRWdbKoo1m8fJMjSFoWkRL2hKzvrK270wqJL2rG/tNTWzbODn\n70TUga5Bp6v1NAlzHVB3hyhxn56jNfhPXMElfFP/Ni8azyryiGZItnBRQFun\nPiss\r\n=kX2D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbevz5noGnhUoW6Y5etDhdNYQYw75RWGT6DwYaX+4WXAIgYj9OqgpPdLwtunYijkeCJpKdQAALlVUVXoJCpUf+Ubc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.13.1-next-1586789762-81cde375.0_1586789806606_0.22086828213769905"},"_hasShrinkwrap":false},"1.13.0":{"name":"@xdn/core","version":"1.13.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.13.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-cYvoYKh0yo4cT3MsMc8d8vyt5rHVKQ6KSdy+fvSb+okpO1qf5dj0VxVE+GmVcye1UJfwDYwjhYY8O/+QmFFWAA==","shasum":"2b85b33b8e61821ba34ba86c18adf3d03034340c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.13.0.tgz","fileCount":113,"unpackedSize":441570,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelH4GCRA9TVsSAnZWagAA7E8P/0haJ8hzF+QZO8J+hGRD\nPjjjKFq0H7AjUrNj9qngHI9x+IosHptjVnHvzjMYMejKuYATUo65YYXmINJK\nz3k/R+8SCn1DcHo7QwpYgrFaVK0R4QfwTnAQUnDWXywFN99sHFQPgGTuWdUB\nwaBpKOLo+BD1q2HcnvkLDNL4ra3CsT5coT8SQfkpz+AWcJmuIuDT1lvAjoyP\nioZUn0XoLR8Rx2BnN2ifzH98NuR3xZ9jxmkBywmajU3o5mor8E7WiUv7Lyfq\nf0srpCHWhfJDhRi4uM/LWc/OGGXfjOidgseOfZpPb6lIicR0Q76pUFnJ/o1y\nIJcKYLGronkwFmBgY6UwGFpXpQJFCKKBA2kbAbTJRwjbQffC6LXRnq5gjCIh\nfnq2XowsLD252mPZNq3Bplic2MKhibgiXmzSQsrhiVedqn2sAm0Z949WFcFA\n7kZlfFhRKKUcaiExcx1QDeR0tB3L0RxeNxUh+oS1fQvarU6duvyXgHXUItst\nceUX3GZTvb7hND9fO9wD1dWycOGCMFlfcm4e8yPk4tEmg+wZceOBdalJCljA\n2eMdnzLzvh+FygHe4wBPbAJ8ZQII4zyZ8Korg2VXpEhRc70V0itVatvibi82\nLUwJ5XaResvLUSqE4hQSnfvEUn1D3u1zN6xVBjH2/NXDazsNc4obkFDZFmYA\nHmp2\r\n=vCsD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoERtvNg1uyy1cpXCE+cL83rE9m1ZbmiR51qKs62H5BgIhANZajmyoG8WoH5PY2dogWfnNOtir3VRcS4o8gv29QT9t"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.13.0_1586789894294_0.3472705514134182"},"_hasShrinkwrap":false},"1.14.0-alpha.2":{"name":"@xdn/core","version":"1.14.0-alpha.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.0-alpha.2","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-hY4rjRarKnhNxRnOI1l5tPNvfOwVtRGmLGyGmXUcrXjhXsH1KC5FKez1+LpvPgVVwXQ4Ljlkdgzfo1fIvgZgpg==","shasum":"a86405b2cedbfa46f46f67cc548f6b1c8af79576","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.0-alpha.2.tgz","fileCount":115,"unpackedSize":445915,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelQu3CRA9TVsSAnZWagAAnK0QAKPfiVoy4wT7t/IDR79a\nlbL2OU+HN8p9/Wb6M/F2OEbOUEWCh5bDPbmg38T7VublbHMWQpkd1oQb8p49\nYcQeiYiYSki0mnMhZHJLVJ5nFSuvb4jm50bLnYZ/Rx5gBrLYE8gQG0RRyAbK\nDT20qpMjr/jARsCqXBqYunXm6WjDo0BM7WamtPhfeiTyByNIUIapnNNZRqNZ\ngayf1w5SaZwCQIy8zMM02lhf9LSCk6JLt9//zKYvu7WclgvxWr/cKLvA55Y+\nU00BY3NijhDG/+jq4CLyPOO6v1xIe50YuwxFzLLrc3YMkTInBDgVi+hFEQBo\n/Rigct/Se0OkHxUE2acUn8hhSWxCmDgb11IYN1O//tBU6QDnpOVrF5V8P/1f\niEn2Gmln5awrSIioU6edstVomK31gHF4wvDRjVXjsGjPobbc0e6w+HHzyxML\n2ihGe7EpIRcZVvwI+VaA8hhochUforx4B5POxFvYlyM7rcmazJoMM6Pe0+oS\nnZAU3j90b99a5gfjgEMnnwBRFG1lpWaX9lbLekaxLTkdOOSu9mTzZfZ0oeWT\nOtPMfkdkua3ljIVhK2/NP4RBrZFpDvTjYCIz8Bg/OtcdvSoqtV9jLDp20HiX\nQb5JJQVu0vXpw4mK5b3GRcWa6z3ktnHINBCOIPHABJXwmEfjBcRWmkpo4Ix/\nRekJ\r\n=g11m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2hTX9hxdfvb4PI9g1Vo3yyon0MnvOwfrrFBSJ//CzqAIhAKE7qgZJ9G8aPvRd0uRg7e1cuIORDv7bPpJvcQ8BLRhb"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.0-alpha.2_1586826167239_0.8659406922683004"},"_hasShrinkwrap":false},"1.14.0-alpha.4":{"name":"@xdn/core","version":"1.14.0-alpha.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.0-alpha.4","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-E8OiJC4xPZ/Cfs9lCLWsexjr1dA4Pa6P2STGjcPSKERrhxH8pEFyYCrJlAEleCFt1jksBCWmXodFhc7V99OORA==","shasum":"5f624d9cf73c5dd4ec36690cb4c08bff20e8bab4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.0-alpha.4.tgz","fileCount":115,"unpackedSize":444528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelRvCCRA9TVsSAnZWagAAWKkP/2C8rcEAmU4t34MNxV1/\nGF6dq1IxNZEj8OtjxCcwt/Gk5dY15zTgEImnYe8xRLW/LSiSjdZfOoBN2Lps\nOK95gJL+HAGjlIPmcaQ2psXiOgSzDH657ei29EFz0rc9qIewplwYqAkCcfA5\nhmiz3/l6iGn20/4ieCwE4YN/X4YFr5yxDojOma+sjuK4dhi7LM6hDDQLQxdZ\nMGLWkB26bsyGqZpBCNqVW/Xt5dqa90Ue8l8MhC2YUtE5aG1KLwNqFv81KAXA\npytrUSdFP9NhNbd5IMqGIworIjkLk979K1GFEfdkSkTPGX8tkDlky8iYzHpz\nLuLvAXWvPUSHXTDkhBAJrUt4c6mX86JQA4uBV/gGvWsTT3Fe9tuucCJMQhRJ\nlZchMY8yk2Z8QyZVa8ek+SqDgf0SY4QvYFQG6iTWxcrxIX+7YlS17ftfZoc4\n2Gi3J2p1b3TpCkJpoIjSrDlJd4flxTDi3eHUEmW1mKO75Fotgsi22NSMC1oA\nC5BNRQHN/23ziZqBpsoEfXO0xs/f83ZoWt+POaorqlOOJlPA2aTBWYWl9Cl8\nUyXykZC7PV3MrM/OK657+DAqrd649Njk8DgjT2fu/0NUPcujGQTAoBDHFhEi\nnidNrGFDyoEZeQwLxfZ0znQ7+BW3YTZy+Yaos7CPa45hXYlRd+EunV/fgEma\nz/ZB\r\n=LG1G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICcZ0Ln+SwW5sCPE1JBv8DxdnJZUziVKtby/TFKntCeJAiEApkA7Y7pUy8aG1isERtQNTllP5toxucegWl+z+tV3aQU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.0-alpha.4_1586830274518_0.24487244098820105"},"_hasShrinkwrap":false},"1.14.0-alpha.6":{"name":"@xdn/core","version":"1.14.0-alpha.6","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.0-alpha.6","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-9cAU+SuhQdPZ6orkizmHr5tyXHUXGvG9cDwqVGSq/9oeDJqcQfgaLlUz+TYOc+tOsefaQ5QsdCAG6bk3MQjTbA==","shasum":"18fd55c9170f62377bf3e476e7cc48d3e86cfb80","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.0-alpha.6.tgz","fileCount":115,"unpackedSize":444644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelSQDCRA9TVsSAnZWagAAmlsP+wUaUDD0Pt+fL9od0mCd\n2GGn3QWBU3KFaUhI/pEpElmm/Fd6c0DQlnSlfC6fBQkcvp+nk/aaR+1tzJnv\nBjMivRXsnv4lA9zEH3T78L4iBX4Tjsn+CsH6j+d2/bkQ7c5S6OnOJynMzj30\nXwBMtO95aJQA/FqtOqSatsBpzj5wZDxl7oDsuhSPKyThkgt5OFVoByUZMOmi\nfgAHeCe2+IklpkwW4gsWN9N9ckEjaNyi10Rpq+j2Efy41kTM9uLE3Ej6N1jo\nBcv3yRp16Roe8PGQLT7bA6CLqhlnGXIrB9b/2SSvUbG7c7TFPsOJfXa+gChA\nx2dRzmuHhN8u4N/HqUySsUIMTW17tELp5h84dq3PgvsNYATIOW91Niyzor+D\nRkICxC7ub78wp1l7s/v7IH1hGQBswsAcQSeBLUkvwYuX24qz9/5yD190SsIM\nL37aTjByfLYowJtaQAROnBLoKvvikqZoU6oPD6v7OlB8VdNFRsJ0qwwmL9oy\nEHKe2NIyx9KpLOv1KshebpDpJLKDTHwODXapsHZSHCSVElUpwVjhc/AB1pxb\n+e7BuNzPzLnztMIaaHgbfwCFvfopkD/v9khctoflp4tgRDnMSMW8Ra1x00vQ\nTzi2Hfgk0Q8HdpL/ZNzil8fZtC99GIhkNozilVI0+2wPe9Ji6DS0THLD738H\n1jiV\r\n=DNTQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGC5AdmPtPoSprijN22UkSVGVDx1XMKnq4e9I8CtE6K0AiEA+6/RbkMD1MQeA1Xj42I6AiLqj91Wlo4WXS8FxGCR95k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.0-alpha.6_1586832386792_0.6736517841571856"},"_hasShrinkwrap":false},"1.14.0-alpha.8":{"name":"@xdn/core","version":"1.14.0-alpha.8","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.0-alpha.8","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-7TI6iDKzTgi2rNqMnca0v0rNt3BjDnZ0BT/f4rH+arElR39TFi6Tvlj7TYu9bsLUNmhNmH6sN632FTCw/65pvA==","shasum":"0924a1163a0fc3c41ea12c0918a3a2169b71f745","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.0-alpha.8.tgz","fileCount":115,"unpackedSize":444827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelSu1CRA9TVsSAnZWagAAcnsP/R76wuki+JqOKAyLzacS\nDFLnUeExIrTrT1QsEu9ss74sNTJe2w+2AH6VneaQmg2gP2K89rsnlNkHxI33\nqK4X+O8tX7imDiXUhzRy5DfbldJjR4yTK+TiiFyYQsa9kd4Z2N1LwoTn3wu6\nvlp49PZMatG7wqFBgR23ioW1ojdUCHHLnrguomehhoArrkIMKr8Hx5C9R1Fi\n0t+QuDu32nBIBoMH1VlG8/cB/czXAFDaTYlpPRUh/Jtd718lRQvUnpnn8Chp\nKAIknU55QoNARXmVUU/hBRAqdVreNUzX+d1fFeVPV0NpC7d54AW5J76iBKNp\nsr7alvTdu1Ci9OMleh6MXUVQuXLw2PEhJD5PBKPw4ZMsHhd1zhic5kPVuPjA\nyMaa58WMXhCnO7YhA399LoRV7oUcPtEeoRlvNfQTfiZtwUFsvmVvLR2EGNs3\nQ0Z1NIDR9VA7nHSK5TzfkpUkN3hEZYz5ys/gztdUVwaaqQ4nLYyu6n/Rv3NV\ndC/A5g+/bJH/y/LqCTzz3U7yvTfxwAMywNiHeF4cTAfkGHLgB2fkcg8hLdLd\nKOwSR0hCiP8+BLX7n4EOQRdoupD6gO/k+I4BOpZX/HFCtuHgRUHHKm8JNXRa\nxQIuFiTftG+r3a+zUMrjgNbpWkcS2qNVMqOA1cxiGnlUyNmvvnoc6vbr0w/q\nMQhF\r\n=Tciy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiRfDDneIRo4fwXBXAlAnl2UGGwMrAdpPP7W8z7E3BGwIhANAErp/kX0M8oKe04SB3/f7Tq425VdLNgUb+zbgWktIr"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.0-alpha.8_1586834356879_0.23128179833549112"},"_hasShrinkwrap":false},"1.14.0-alpha.12":{"name":"@xdn/core","version":"1.14.0-alpha.12","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.0-alpha.12","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-HTgQ0QZy1msiij0ltFpbR/fq1q30eLK8V6h5AcIQjhjnGwwvxxnQzEX5tM6Zm9ZGECkYlhKVPR4GvqyYuSVS2g==","shasum":"9d78cc53a86ca23692ec5b79f2067252ff4dd666","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.0-alpha.12.tgz","fileCount":113,"unpackedSize":445823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelUJQCRA9TVsSAnZWagAAEycP/33Z4bloticc5RyJsepJ\ngBpMsGxcqC4+tAUDgye8Xc/xG+iBloLHreJn3+M3CmECMpncvvkXI8AJOuAY\nYArk4W2mB8yuUqgMgdxCn/YnRdlAmitF6DDvZeNZhcwk9K1snZsrqiE/CQsT\n6f+1HhgDGyJwb1U8BWSYF4scgXAcQFmEQ5Kf+A/VqW6x3rcZir+PybPDTATJ\nSiSmA51K4m4DH9KEe3hUasIhjAktkFPRc7i+rSq77R075My486yp7DqPqZ6r\nRkQNXzACo2HyST9VerfeS6tRn+FBg4w/XpM8cAGEah6bUvPAXEK9CfhPmave\ngG44N270qZsvtbn/Fb5YzZ5mtYfLWxtjvbzI/R3eO23u52KeU13zx1VdFeG/\nNEXwZqKdyLmqknr1tutzyecb6SGHFCpKUUeWnj2mfuGpHkON0vyBELiQJbKR\nd7sjUh5Ftfh6/nErw36vSylxFiXGVqlqV+id2etconiXFPL1RbpvPlEULYz+\nMjVd3GPVdbXqwDXmDe22chk2Y87UwIGDOmAxPjflkI0up0KA6Z9WptFizunH\n9YC+s891TEc6qu3csZCAs8CKBAG0YsjSfiYdcZWwbRXOwATveXN6QeK1fmyx\nM1fbgznCY/Ru54IjNSspb+kw9gKqDXqTj4MgbjEPZptxG83LbYopjHQnLbWU\n5vD7\r\n=G/Gq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDzKRFFjhQJeRzIC/DGbWyMw5N5lWFqPPo9kws/uEFm2AiB0A2o7WD/Bv64xGr1RH0x5SpJgxa2vv6Wwukt6mkSBYg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.0-alpha.12_1586840143966_0.25013922441596326"},"_hasShrinkwrap":false},"1.13.1-next-1586962257-9ad0f4a2.0":{"name":"@xdn/core","version":"1.13.1-next-1586962257-9ad0f4a2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.13.1-next-1586962257-9ad0f4a2.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-GS8lbvnXZ7nuxUHR0R4Z7M3SgmaqHbw+VHbaMxkGEtJhlBIAXE8gPxP/LdoZM6JRQWatcI+eZIfRjTBXZg0shA==","shasum":"ab88a82a42c55a7ac91327eeb676d5992cd315e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.13.1-next-1586962257-9ad0f4a2.0.tgz","fileCount":113,"unpackedSize":441597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelx+BCRA9TVsSAnZWagAA1gkP/RSiyVZ6TeMST+eh65bW\nqHO/ITdtjkU441idJZWUqW9AM82zhGMcSj8re2smO1prPGxIRpZZauNtAkwk\nfq3pmiu/LozafqCfdI0ztLlSViMP7bq7IPXv9oSw6/LJCQgR3qevh2nghKOl\n9g4fFqrjJH63X+LPu4JjYj1BXBajMuDezb+lTC8dax+JfHM+NR//3OavZCB4\nVb+Bi6Wmrvu/0awZOjBkAPgQ4P6ms/WcHq9XaeyANTMuQKPotL7wtfJprCf+\nvDm5s02YzjTQ14ZwuvsfbAzkRWIrepIiKHcvvamhLBhk5bM3PYytqoDQrLp6\nPBYBjD6QLA3411Iug+HSrDhGw6hfiSx+jh4JB2hU/cEaocc2NtWU5fnK0MxS\ni5kO90SKtC64e/lLa2AsM4lUBf0mJT1XEeG8S0VieaQaCwWk3j1cXFMhacr6\nhyg406WmVkRG7PUF1xqOii4vHYH+C2hHOh5+AYO6U0EO94gQs/FdVySZEeGG\nQ7bmYZEGig9/n/QTGYq4+M/RhyuuFVkHmeO7ypjWykmlKbtoI94QOTM39Ai8\nhwdgx2jSrj8QVfG9YuWgU04Fr1GPt/MrAwKDGPrP3oTc6HbOnHXqAd1ritWz\nL9YAlUWIOxqj0f5O/xz3kQDuNlgogtO43YnWdIBPDphzo2cd1BIdMWdPW5Re\ndDKb\r\n=v89I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEbrDo5BtoHK8TGg+o4t+5Fr38PhXYlUj05ZDMsdpn82AiAgz8O1oIiKOWavINtosuAXhQx61XNbpEN4YQ7rzruJww=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.13.1-next-1586962257-9ad0f4a2.0_1586962304650_0.45674046681488667"},"_hasShrinkwrap":false},"1.13.1-next-1586972974-518b9264.0":{"name":"@xdn/core","version":"1.13.1-next-1586972974-518b9264.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.13.1-next-1586972974-518b9264.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-lyjbZ4NZGDVs8vXz0mzoIrBpfirpkKWbY6o5JSV9hUg+kplD2efGTpL8OXS6wwnfLk9mGNiLipZ+MkUuqIVoIA==","shasum":"1e8fe7f60d9ffd3603320dec7618959d903db0a3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.13.1-next-1586972974-518b9264.0.tgz","fileCount":113,"unpackedSize":441597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJel0leCRA9TVsSAnZWagAAopkP/jwYl5pncO0HgNAzAktY\n6HQkY9LyHnVRmtojlVqG5XEe5TWThO77+2NLnbss+ooE1Wr8/v4nld2k3oS6\nbuK4GyCGvvYZGsXgTNfUb2smRcDpPzLR2ta7rgzWKxZ4uCJmnXPsUwjRvsZk\n9Xdc7DIGxUkD8dr7/gq4mqvSYChqsjjDCxKU9Jw5I2vG4Ja967sVphnxcmsu\nt1WjOloaoacoTwbwDjQYK+P2I52dN7VT8AYd03h4Hh+eOEdFu1fcAFja3Zwb\n6dZS8ifyquDtBUVShA/I0/GEIeA4sS2kMswXxkn2RWB7MKjxMryV/LKtJngf\nb91wvyFTqnoAkcWjkjJbk3tnxe1cSsVw3S3UOV2x8fMgvl+TnKX50l8Odg2H\n+YFh9E9GMU9g44lgRpKXid34agcFSTmmny8hRwoh3FWzvVOEWoe9qsGFufxU\nuZEML4feos8eLhcZpmphRNtLkJVYXjG/AmMzrKxxFs7QlTmLDx5VFBYucDhu\nY1R6XEmCikqyKnazVxmK1/OQtFc5HTQEhaTAZfr1Y25xBId/swihnril1rHP\nAGBYxBjdEcql7j8zCzTnAyyvu4V75wCmXMyMMLZug3mcBAIdySsD2zGt0o2h\nsjUi0CE90msXHmaK+svgwmD7Qghq0IemgOBV82udGslV8XaGWvmDc2CleTHx\nHB2Q\r\n=6xjU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF+SU0OpAkihDOno4gYHAVWtf6DZzDzXJ75Z5x21wd3JAiEA+9GxMjApt47stjrqnrpDTd0pnmSBqymXAprQFoZBH5c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.13.1-next-1586972974-518b9264.0_1586973021564_0.23090115426022306"},"_hasShrinkwrap":false},"1.13.1-next-1586977082-ffffece2.0":{"name":"@xdn/core","version":"1.13.1-next-1586977082-ffffece2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.13.1-next-1586977082-ffffece2.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-e5hWMuOrDHfE5m0HmUtvaFPFCz03LUPtpp2xrt/ldg0i0qolr9glYN+KIAId86isM/PpsW5c2kMzh42Sl0+o5w==","shasum":"be720ddb36b1e1bff76fe8eb98ab14927b48c917","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.13.1-next-1586977082-ffffece2.0.tgz","fileCount":113,"unpackedSize":441597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJel1lwCRA9TVsSAnZWagAAbNQQAJcyNndsJlLjIjV+9Wyg\nmFanNYhwZS0qVulVRr+FHrAPe+W5rpEI5f59hLM9N+aJ7ixqiOOX/a3wcFE3\nm8I5kGFxU+2B9V1ZNFeo/79dY3c4W5O5SpSLFoe4ToMsRgri3rshlYhV9Ed9\n25Sfa6P/NccJHuBySWlxFVL9RPPeWhbDFCYWah7KvwCzgy0e/Isw/saHu5LE\n5t2eXlEIKyeBoSmWY27PvFQ9ug/6fzR3vXYPbNqzB2SbTupCPXYUB3lNM6k0\nwlu1E8fuZ0zom5g9viFsfMhqtGxHipJo8l9Fu9Yx8Jm5Lm9kRu7eUcBLEZVG\nVQI/3gXUYCKfKzTlw8je1qSX3hUkN5eUKNhK2ukikuQCbLRu3XorNd0LjvV3\nLrfOMlbbTPuUysYLDjEpzcSwIg2qAlZmhqigcDUoxnsH76pEo2vf6eQZfxjv\nJ00y6ZvJMOn2IHIE7NK0w96CoPbVbOH/cnrbG2876H7Oj4aXY0A/z4GU/2k5\nd2WqFICG5aJxHaqHcpnBjiLQT/QpxFuk+B8EQtkG7joPerUGdhp5lVrO3PQG\nJsXC1ouIADgnvrUMvtCnoS+ZxeE0lAsEDpq8ZWhIxwDC5l6GfoJzVkjxIWW1\n9Y1drZcW2OFIikyGVaI/JKpaWpPatEJtZ2CPGqzzN0Ig1HGofVVFkEnICd8d\n2CBJ\r\n=42hG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDclmvOmIYEUncGqWRXYNbvJ/J+PvLEPh9xeqs2sGxZVQIgDbD7FIvBny2uc7C8pbQGt6V77DKPZv5x7gUuyqhZPD4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.13.1-next-1586977082-ffffece2.0_1586977135548_0.037477134487574615"},"_hasShrinkwrap":false},"1.13.1-next-1587027252-aeb4b1b6.0":{"name":"@xdn/core","version":"1.13.1-next-1587027252-aeb4b1b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.13.1-next-1587027252-aeb4b1b6.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-TBVLYRwO0eE4RiKOPOqioPq+JuLIlvXTe6tvkN2GCOC2BmW7TdxIMVrC4/L+b8oDmbClylGYMxWXW7H5Xy6qNA==","shasum":"e4a9d2efe770eee12de73be2a9c97217daa45a13","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.13.1-next-1587027252-aeb4b1b6.0.tgz","fileCount":113,"unpackedSize":441597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemB1nCRA9TVsSAnZWagAA0IsP/2YsQesbIUr7HXU5Mjre\nS7RMu4ekgUG8pe+QTuRoKOfDiNs35YlqRvWPBXXb5PFBuHrkibjweVQ7kyo7\n5BuLZ40h1asFBc2esgkZYUFxFl+GJaL+HSosJ++Lg3OT/RxxVza1zOgnCkFN\nFzM7KJBSm5E0oo012oMrHf2/Em3nDb30LP4PmIy2DECfoEtEMUuUjUCU0jDu\nMPEzn76QFx4ZASdGKq3GrXklOojfB+BVcl9GyywfODJVJziIUCVMgl5ZI8G5\n+lps6kGxy8AADjd5Yja6tB38+P9hayhljP/yoA5a5LewZiFe/RfOBZo3XxN3\n47wUIiQP4tUXVbyyGAx7wqYvsJyDZEM176/5svNy0afDFs5VsWMzkncvrxk3\nMlfMtX5i9fzBacUVMxajRVSPd4GyEzJ4K+xA25x6RfXOsO8Q5DXBWJFpJ0SW\nR0BhF/r8XKEs1DN2fJ3amgGsYq+Wy1L5cpWqayj/1RZQAVtyLNXrmiW/N0GE\nGU3MMxRvC14OU9dypisXMp/z5hfeB2xVakukVC0Yq6M2RwAiWDu50X3xplwb\nn5GxxwAAzNl4GjsY486m+BVHAE4rxYLZQXDduTvQz6lV5xKcdIWDAcAi5XhT\nGK4wyKFRCMtGAaX6TeKaeoblf7Z9UXFmB4BPVOaxbAGeI//TYD3MDI3eStRz\n48/C\r\n=94DU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBaWosy/XRMF3lQzMxNFWx32HYIh1VaooyZ88m576fj+AiEAo+NQuFPpJj8PXgdhXbJJsW553ELHFQ8982vHEAFpa0A="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.13.1-next-1587027252-aeb4b1b6.0_1587027303280_0.5452994415771844"},"_hasShrinkwrap":false},"1.13.1-next-1587043449-fc7278d9.0":{"name":"@xdn/core","version":"1.13.1-next-1587043449-fc7278d9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.13.1-next-1587043449-fc7278d9.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-cZ+lj2YYfxjWn79PKvRk0fMK6vAZaIkBvrBZurjj2HXNFpQDlopRFAn9LDRTwCeaeXK4SJ7doS4/51tetCnMYg==","shasum":"f1f1b3e33fcc2b0ef0f41f53ae0c58c30db95c86","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.13.1-next-1587043449-fc7278d9.0.tgz","fileCount":113,"unpackedSize":441597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemFyqCRA9TVsSAnZWagAAzEUP/iBS4ffTvMPIbT4QbVds\nmgRgvl1TkJyD7bHUnheU4ju/x2JjnlLB+/uzyqvUkJDR/UIFE8eHZL+SO0Fk\ntBobIUe038Yth2MB/Q7FVNQNllv93kvLw028nYXUsR7qbsYnKD1rWjKPJ7S1\n+sijoVb78+vIBMepH47BS+iiDdGGmGfAbjpVMTZI6PQAFX5UBIi36wNAv3MJ\nzz57rscrIkRm5+G3pz1VCH3Cg9keOiY+sWuQucHhCIooaKsOkkH60hRN8CFz\nYtvSNTFjAlrSCHCWRKQclaS19pBd5A9V+qgol99UaFXW3cxVP9PtX6FcE3Yi\nsLYT56enF6mNUK1MgkIVudboNkFnw9zy3afKSnxS305UcmD8GGkodgr5l9rF\nPrzZxBoqze61bhSzvyMDIT7su3pmnkweR0TjEb0KNntU2a9EEzlr2yHQxMhG\n/ZnPHwrcgXQFbP8efCQyjOU2Af0W2FdPFK/ptcvf6sgtt23NTkW4CS0tCqDl\nxBIub1+HgNZGfvIs/seVreB3mdJXk5oValshDkAAgey4FJe3WxBu8ARrboTU\n1YZITAOW/QNDCn+H0+QJjHJH+3xymViE10gQELIWTC0NtDeU27Uc00HjbbbH\nZUcHH51ChgwNRmMitKgJpuK3+HOV9I2Nlf8viCzT6K/RNzOsUWJpClLVLQCG\nNY7k\r\n=qHUK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDr2hfQ8S6n0F2SJI5OvbbABQ0Jrhi1XUiQuQws+8WIaAIgJng7upmHKYwboFOl2CwoFuLhTVvO/7yxYCWUGApMGVA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.13.1-next-1587043449-fc7278d9.0_1587043497439_0.4447351043477843"},"_hasShrinkwrap":false},"1.14.1-next-1587047001-86c2243e.0":{"name":"@xdn/core","version":"1.14.1-next-1587047001-86c2243e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.1-next-1587047001-86c2243e.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-9Sl/sDpv0gO4X8I+JlHgLQoc1fpCkd6cLZRmsrnA316TdrUjHDNR6Rb06QZyNj6YWqFf1Mr24xvR0KhVWQrgtA==","shasum":"8309b24ed44826d4b261cdd727c8e08dfceccdde","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.1-next-1587047001-86c2243e.0.tgz","fileCount":113,"unpackedSize":445859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemGp/CRA9TVsSAnZWagAAp0YP+wVzXmCmfMyq+SpcnpXu\nVk4IOaQBnaJLk3J0RgKm+QWcyNfvBRh7mD4bVW/eAMDKqQENrdEueGv6XEJx\nXtVAIm43wOhDMIXgD58nPmtZvDXczLj7h+mtsFl3LWS16rU078Nee/x26oj+\nDPRx9tl38A5s8sUxEv8M1Ubh+kyNAnHFSEtKy7S8FB0uNneHIv8zKDJCKhbr\nsxmSsuqzr2D4/PminxoRh6FPF1opD5okYvMpG34HCnPSRseCO8VFYStoIlFs\nFNjeGjPDtnPSWK3SpK6HrFfCZrt2Jeial+lpLnLUjKL5wy0D4zirhhEB9rnC\nY6l3Ril1EEOf1tBn+DQ91F2AAiZIR98wcdjH5JQBcmk+RGDGO/RD9vDh6msD\nk3KceIl/BSuOSk+sKmXMZs30HhvRRW/kvfi0Z+sghM+9ZGEwXNiX7YJljMah\nMOB0XjLotxtGFuTSjyJo8I+nLRDt4242qfkvw2trOcLuTI78RwHf7m5SKxa6\nlM2TzSNr1TcbKhGu7pWlHlzHgfMstWTwVgxbOSE/N90wEupSK6TT2lbZky7L\n9X05zWBK8KCiVa8HC+RpGk4gCFzIwX8NB65AvKSEsZ4E3a7VhcIIko0HsRrF\njkrvBz49S5PwtuznB8o30fcngxj75XD2rHncQ2BXdx2VwO6xMG822+Hq0ijV\nb1Wp\r\n=rkOk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfiNZW6A+x+m1v31c1b0tFe0WBgq7qz7oXjoXF9W2K3gIgQLYCssTM+aQuFf6D2EhTu/gQv4dD4l8FPDPaOiD1ISk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.1-next-1587047001-86c2243e.0_1587047038983_0.4076966464518128"},"_hasShrinkwrap":false},"1.14.0":{"name":"@xdn/core","version":"1.14.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Quqql+uDBZCcg6370AItYsv8G0ye4i06hwJ032umaw4rOXzg/T51dRRDKzRi6cHoPHoQxfD2XjG9l9QOuBVl2w==","shasum":"8cc94a786249ef6846144c6f335d67c5fbb36ab1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.0.tgz","fileCount":113,"unpackedSize":445805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemGrrCRA9TVsSAnZWagAAtrcP/0KjAla5UtKbPW0IVUXG\n8lmE66o18MW0wgy+VQT7FxLxu89pQyav64J3XcRmf7/Fcd7Ct9I9TCV11PwN\ny/1YdO7hlZ9eVmbK4rxrtwCPH8wBZjqfjPFm2/nYAYT5oLfG3JUxZBaupLmM\nxyyB7hXFdR2Rr3FpHA8ArT64X3Q3BOt2NUThUyTFYJG8r8XVXvxqHk2CWgh2\nU7+HK93Gcj4SceGF3zEFqZ8DSbKOuAoNj6jLrlVrWji/ZdjQPODc+lse05mn\nhI5PHEz6f0oLl/v8QpOZMvq0Ghw7VZRXpW5Co/D6rk9K1H8o8bjlqgeNuLzC\njLWqL25sHkeNFTi/G7Lz4mwwVCsbh2F/r3h/zPwtbhrJ76KIxCHFS2LGCMZw\ndKAf/jZQFTaViozmO+hJovRVGIOw7bwXYv6GUFuMaYiJNG6zb9qx+5Jfgcc7\nXg1gOAU5Be1p+AZOdISOcJyb9XTqVEwdxOvYm8hDHGn2xG3QNW5UnTKx1v9Z\n6SSxclco/EmRyOIUt3YlE9ckOJqKLoWpZkVjdqd5r6dUxiFYfspdJPJYYALb\nAIjkeAKxBVusImA2n+DO66TBOYypmrRM3Vq2NaV4RjtB3GovHB8Cz/Z+z7Ji\nt8Z9IHAjwg56Oc652YmHMMjc+khSVXZ4dVV3mvlNqT7/iiCOtGFOkziBJ8S8\nEQOT\r\n=xRym\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEMnWeKhdZMnlH5ZWGXJhUjX9NyfqwGbOD9ZOvdQjTzwIhAOz4nrublFN1fEj0SuQjopTKYL5AnXPmIK2gMVVIUE5g"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.0_1587047146617_0.294943530162211"},"_hasShrinkwrap":false},"1.14.1-next-1587128107-2b2e1fe9.0":{"name":"@xdn/core","version":"1.14.1-next-1587128107-2b2e1fe9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.1-next-1587128107-2b2e1fe9.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-JihPGpqv/llCMqQ78saRWx4A5uOCFCYvqR0isfpULEnTz8zdffQbfaQbj8zOisCThqKqIP+cfmVHIChz8LBApQ==","shasum":"5b1fb454f820a3497553638d1fd3c8c414894293","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.1-next-1587128107-2b2e1fe9.0.tgz","fileCount":113,"unpackedSize":445859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemadfCRA9TVsSAnZWagAACEwP/AvkP6toPabzf8qgjX7o\ny5WvPKRZHXlEbzpGa9TW0TjuJG9SSfD2021rcN8lH+2SsWQ0m50O4rVEY1LY\nKPr48KrojKkec7qmKexFu8lFdT+lvaEnyDqtFknWune3jceUk+aaFJKA24K1\nIJq/nz8rmGZCMI6mWbG03WmvBbBkFoGebxHTNSrPWHHPj0fi3lWgtDz6nVfF\nflcyKLMufZCCa3dZDfjUibvQfRMv0tsDG6h1wA47HUaD+eNwHy+b70TQznJY\nY690pHqJpvHl45rnwizUQexwcG0KJBUL2hO/PhlQeLZVByvjjxHlYctwiBs5\n7fBTUZeb0CmBvpXIGKl4g/G7YaHN8ffjUozCDRr8dwwaw021mRMfViUfLCL4\n+Ax7+CU3o50fufrePR1ttF9+X9MKbn6H9p8QZjk2Wg8WHP6aiODbHSPXLCWs\nZWPutgh8DoHaSKvAaVec6WcGsbnhw9f6TywSSB2GUj5aqTZILZp875cqYV7B\nxbfl4N9xmPB8LzqlXkFLjfvdDxyjUWjSPr4YnDxubTiFTw9W75+sbzbTqTt4\nR5LoxlIHgs8XPWEGf04499FaZu94FLuUxPfb7jBvfKlM5U7btSbpOs5FHf+k\nvPJ3vzqDi+EJsjg+po8AFtW7WhBs7iBjejKYUNrCBbkzKHGRqG44iHCKLmW9\nuL2F\r\n=VzYL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB+bnl4IHwtgwVvPGB5LSsoEHFsHDDvV/DK8OJ9iedTQAiAcfF4w8OcXDnxGAunbJEiiT/tHP84ZyZ7SxII0fzli/w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.1-next-1587128107-2b2e1fe9.0_1587128159446_0.1727841470875786"},"_hasShrinkwrap":false},"1.14.1-next-1587159432-5ece9eac.0":{"name":"@xdn/core","version":"1.14.1-next-1587159432-5ece9eac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.1-next-1587159432-5ece9eac.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-gmB2dTFwrVUGEiQ9T/lCvuf5p9FZBsP3k80M8dYCcu+u2k3RE2xhDOB7l+P/MgqyECKNUzcVBhMNWrq93pNRpQ==","shasum":"9a6eb3c2b9d62d0ab6126a87dc26986db3d18360","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.1-next-1587159432-5ece9eac.0.tgz","fileCount":113,"unpackedSize":447421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemiG6CRA9TVsSAnZWagAAES0P/2UPRHj5wJGNDhYafFP7\ngBfCDcf35rDMbiY7TDMSnTqDb0Lb40w8ohPC0eDdTPlvLZPXxF8UN4lccfhs\nwJlBnFIapm2egOSd1HZ+l87v4O5d7FYodB9l41X/Mqrxj/WciMrcPDv7FdGh\nVmleTmilInirRZ3vD1/Oe9VOewuGA2lT417EWuNAUPiq7wXxqTuZMG8rLj0U\n2ucE0s4Wj2Nyw9wCXn+UmqfdoSqMbTBqIW1F8z+KPKAUBW4M4a1Rat/t0WRK\nlOmhjoSf0u1L1K2F2wLJ5GfbuMVNDCAvSZzzxbqd4fcllrCabVVaS7XIYIEZ\n4AlEkwouMtjHtOvd21qTgrDvGsp212esZbqePGwkPyXsubavzLSEh/fc4R/s\n5tjAyg7LTyMwTKOw2xsyJK+ISZ97Fb0/kaW28AwLZNUtZGLtQgBlLXs13hg6\nFbIcyciH2SVF8XUsoIKd7Y0AmZTKQ4Opypn3eKIfC0NM7pgeSeWino+1lF7/\nDWqGMuVar3Mw1fbCrSLZeUS9W9q3LJKdUD3q1AFW3IGL1Yei3RvdYC3UmVEg\nXvueA1mXSTRziebyeXCJvjlN6FQYfaAGYAlMFe0J9hIplhiBbmXDUr0JOzMf\nmpIUhVZZhUc6zM/7akciG6voZGh9WJgI4s2rCaaGbN8Otd3rgsUTYZDlc+M9\nmcfb\r\n=gO/B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFZUcAQoxJyy0Ib3Vq3W7F7PyhzEbKgVdZJIF14LcB/zAiEA9Fo9b6hMIRU4n7xsjq+HE3Y9oJeD3WAAezb9BqpKT7s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.1-next-1587159432-5ece9eac.0_1587159481763_0.07029892194048903"},"_hasShrinkwrap":false},"1.14.2-next-1587386524-8e0b42e2.0":{"name":"@xdn/core","version":"1.14.2-next-1587386524-8e0b42e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.2-next-1587386524-8e0b42e2.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-37kWh9Ywb8XY7DcBA5UdBwafqhSQ8Bwz9N0RCWIVsZ3JcX5evqvqPNVa/0vjvjx+N3PNMoEHhdySCouCau0LPw==","shasum":"bc04171bee8a360150e24569c8d3f9f5a290dad2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.2-next-1587386524-8e0b42e2.0.tgz","fileCount":113,"unpackedSize":447421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenZjNCRA9TVsSAnZWagAABbsP/07FaTW7xdRywWq9Ctlr\n8/TiXSfHtpgKFj94vmkYifnxzfZZu2kXcYsueKMaovM0JFXWwSA5iB+wwJCy\n47K6YdU7UipOdukK9u5QZvM5shElk2YNvBgKUCtZJ+iqVI41wDFXmYiWf5bQ\nIEDJ3JPqgxmhNDJ6cV24jNyVvKdpJnXSAPKZu0BN61h7xLZgXrSx/Q8GFsvH\n/A04qPVgZGD6LYYp+1DgsSekEew1WPO00pouR1tHFyJqlET5RQTbinclss1O\nmnJ9Nr6jZz/Kd8g3SJlZznoc/NxTGCs7+734wzBA2lJYQun/JQmxPYHeq3t9\n7Rl1+9paGSfAQX+NRfBLuB89azrAGsfFd9Kjz9BQo4lCDBpeLVmkAbSB3vhU\n+0YQNdLlZ/wZupaQ+aHDv47vobezYXiYv0gJNBxNJ3SZQLFEUC2cPXKdpxZr\nb78MhbFeS9aEnrnKPTixtZTYHqf5uMOvvTl9jZ+j7K6KLa1ev0o0ASgisyaa\n7VxVWljS8P1x7yV8uRzzCK/7wsVny8fw9Ncxw2wmG4KNkQbYRP5LNacWJ+8O\nnvAYe1C6grh3JJ9HBUhNXTxdpedhZmPNqX8HyyvY/hv3l6S9cYcxZ+wl6zoD\n79/XkEq5EXpqSOQcaV+GC0w+elU9k2nd3SOitXjQ7zQ282CZrg37gthXd9kK\nbbyh\r\n=p9R7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuRXfxh51a0DE08W4R9zeRRF/WB+AlFenCJo2cAL0QHgIgF0CazxLQWAD/1zCtxdqEUFoQ7SgS9s7zGYgfhBdSYcc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.2-next-1587386524-8e0b42e2.0_1587386572842_0.21252421567074697"},"_hasShrinkwrap":false},"1.14.1":{"name":"@xdn/core","version":"1.14.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.1","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-mq6ehurcad/M+2OG+kxI+/gc5BwZIEBTiXl2DWMWDsGXWCga7sc6A0NMlReMthurk35L1gZDIEYFT6ljnrRTVg==","shasum":"c1bd9ba282d455ad49ad6f16cc612988a1a89d37","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.1.tgz","fileCount":113,"unpackedSize":447367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenZlpCRA9TVsSAnZWagAAOTgP+wU4vbtElcoKcm6DoFSg\nFj/roIXoHbcr/AsFv6zy2xCsGGaBYYrnPR95XQ8G8vIQth4bg37AEEInt+h5\nYuPR9NOUe2H5RrdV8Ee/DllZlIgStf9eXAz0hFIJfIMjlpjXNH4lE7VidEcu\nwx3/d8fWKXYKCs6yr6JHSodZrLHhIdE/HCW5IvrX7+M3ikknOSYw1/RJAxDr\nMajVrZixcXImAqm89iDqBbn1gh9GSJHOaYzwWFbVeTNCef56dtAweI155XaF\n6JMoFaTE0uwP+dTe1Dvo2In36X1kMmL5IpiDxMmiYbEQSCg6gdIfvYj0UWq+\nnWaL+8Tpidl1GohS69LPeXH9whDedybWyKX4ChS6yjgYxjA0CWDXfSyCua2D\nwoulOcgvxgUDQi953Iqkf5JN2sB9HAS4z3NSSuNzCyivzJv4vtC215SKsrPw\niXTYIJX8ep7YOGc06jp1IO0fKiVeMUwmIz+Ns9jj4kC6wV60uD6bAb5MrBk+\nbwc88c4vHuJjxW9pY5LzXx2HCK+SKpGE1XiAjqT+rI+EIfuwRvzTQglMRDWY\n1vqsMsn1i0+OkCPp48RMVua6kEFfiFV+03bjNZCrlIjS82aMgctIheWicxqx\nZltmCVVi6AxhUWzikJlGy4cMniQgPgXxNjq9W6ScyH0si++gj0X9622d6Wur\nBhEi\r\n=FsvB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF/p3izIacP9GjECYTSS6BZHFmJsnp3TFRDDJOsOsVgbAiB2Vc22TIu9q55/q8zmGNY9/cx5ZNbKT4PnhhWyiJrWew=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.1_1587386728735_0.05087313192298759"},"_hasShrinkwrap":false},"1.14.2-next-1587387416-f0ee87bc.0":{"name":"@xdn/core","version":"1.14.2-next-1587387416-f0ee87bc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.2-next-1587387416-f0ee87bc.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-k5ggAg2/61PzfWKqwctkOkXGxbkxJ0SIpB822SD7L3wjowMbgg9odtVByp2r/lpIJtexr8P4vsWeLZ4gYnxyUQ==","shasum":"de2ae937666731035afe261bb74a2beaa93996a1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.2-next-1587387416-f0ee87bc.0.tgz","fileCount":113,"unpackedSize":447421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenZxJCRA9TVsSAnZWagAA6oIQAKEtKT+G0FaEUHRXS3rB\noHF1/OOso7Hy6YmkughajNBd5A/qe3546OcMxs5Jxgs8Wn3LOnWClf2LQMii\nI0/UiGLj6PxmT4UqAHxShJ92zUuxxtziw72ncMUhfELCeWNrVrKafGxb38dv\nNICp4AgDsSDzWHlcEoeym4rMzgTo34gqXWGPJxS7a6mE1/Qq9s1rMR3pHjrl\nvzFYkDRrUOZVkujQueBwBu6UUCNaWDR9Qr7YJLkk6sd/FBVqW1i8Myc9N0tD\nGElcoQmv7CuMkZjWYEuiNpMygJAHqs1W6gO+YF5Hx+1cIO40FK24bYG0YPGm\nkbYNySBITwi4uDjzd/aflDNC/x8gC6J73dOHLOoM1W62G9sv25OqfByp/6a3\n/ZlSA3HvEcYYvOpbtP/OK7xUkJKAbYj16v2ORgsUruBggBu+iEXAz5v7Dere\n5luNrOX/XQ8bFpCWFQPufKIjuBIP7Q9e6qCaspdfVcj5z/ymh4PR96daYeIj\nMvnncDIE2to+oTn3g+BJuvkd/OMCA5cmFPDTBEkDdlNFN7CMdpYUnxw+4iXM\nqffcLGK+hAIqSr5cybqfcTrZbXMG2qacJUfadi18yJhZGvKu793tBWwARug5\nlzQuCvC3u9zqQEzX+UJthabRyAOcEto2Oa487VRxvcIFX3vUpO1ckOh6UPEy\noP6F\r\n=56/R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH7ZJ/mU84erKz6Kog3UFfROlJPUIKrYhlF4XPC4DfuzAiEA/ryXIP/8lL/YsQSfHf6MOZ71tq+sjKbLsoQUx1LW8iA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.2-next-1587387416-f0ee87bc.0_1587387465290_0.8725073505087235"},"_hasShrinkwrap":false},"1.14.3-next-1587388020-73b45791.0":{"name":"@xdn/core","version":"1.14.3-next-1587388020-73b45791.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.3-next-1587388020-73b45791.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-g4SYhJwKQYaPI/gI0RKOUa5dGZQr0RibTKXfHDGLpykMXFPcvShrbk537nNSgjOc1xJSUmfOi4F59Ov/hIoXow==","shasum":"ec763d9f498b902116fef06bff96892062d25549","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.3-next-1587388020-73b45791.0.tgz","fileCount":113,"unpackedSize":447421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenZ6kCRA9TVsSAnZWagAAsGcQAICoErwQsXB01qo6yZzT\nr6LJ1cNJcU7cM8BbpFmYtOJDhrF/sYtHfpaFLjNv0pxi8OOvjN+AKp7dlZ66\nY7TAnn8Unp0iSd/5GdtE+bRn0p4mPjSlfjRzbYi+H/kUiQCPl1g8FD9hFbB0\nVgDZqvDPme4GPieIpRzmJFBggs+54HfZDVPMHkQR0YNGFueT2HUk/a9d9Qh1\nwrC7rzHLtJwno8YOjHE1TQfkfV5ak+fRDuI1YteILVnYIKP7dpgVK2S7AyM1\nbuljo+RqbTwjTiUvlcYVqUhsZtD/WRBtrfO/WuG+BCaidcTX8cQjk6i/7Wfx\n4O6JCyDpK9pbr9ohqGwUd7mLAto7DRWXJPVEVZGnzmjXjeNF45B6LTpHb3W3\nV8DZgJLtvJ/pEzeI6NaBMTuI6K/5qhjU2FmFejJ6R24o3+uHfvY5GdSkuIzd\nXwwo2hFPIqrc390uYSN/0Bd/F1nlkhUkFUehnhRUV+qLodF4gOaUEXx6XT9Z\nSdFzaLkTdrSVx2mCWzwp5/XzHiF455v8iumt45x2uvEqSW9acI77WwUOLBPq\n/73oPnnmdK9gbcvuIqK686IhtaGrI/eB712G3mCwXbvwc6M4z0Z2ZKi87HXq\nAOynxwsajGmuDvRw/P/ObSWvUiIP/xhGz7BK3Nc0qAiLbNhfGirrZQ8NxEtX\nfXIE\r\n=xTon\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJTduoZ3LsIyFCJs/4/B+0EnvuPshIhftQjJ5RuqMcFQIgIqZ9sftPxvoWEU+6HGPhQLUAC8vjLDYAKD/15m6XPGQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.3-next-1587388020-73b45791.0_1587388067655_0.020718480679756457"},"_hasShrinkwrap":false},"1.14.2":{"name":"@xdn/core","version":"1.14.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.2","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tOQALZ6iwlq/yNcl/79CdbWW1qoBhERVwPaUmodenTHejrdcFwT3RdUJbZxVjYYmXtCPFeLFdfildr1hnoUZLw==","shasum":"6b1065dcd0bd083340a00a8dce7c08ea9befc512","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.2.tgz","fileCount":113,"unpackedSize":447367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenZ7RCRA9TVsSAnZWagAA4FoP/25iWERl04x/D/pVrEsC\nDuertX04w9+MCc+6AtY3bYxbaNSwx7aGrGUAKvoyh7Vqxkqjg06z3hXD7Oct\nB8xixkh5okj1ebNPPYIYpINd12Zda+7g4Ly0+fs6zpmSZrtxTPpoIwM/tY5F\nD6vBh6rQ3NPKmYEqn7oyd07+z6NpWPMjxFDuB5UPoYvkTb+ppUfFJPNJqWLn\nBiBaCbH1pCCDdChPUpKxEevlOV3K9fYpYlnaz9zhO/aEVFmX3l70TQAsl5+O\nM3xCUuiUDXqcjdkmhzrLMNLslM+jzKZ10tsn5olAVaXnuGfudz7PGmhBZCtm\ncY373BwG4GazMPyDf3YQZPWdAVeuHKSjIDXa/vxu3lR2QbXUlhUnc0UflK3v\nerRptc9SVv/01MzSSSt2fpCoIVYVTU3QWqxCjkAbGLpDdFFq5BIZaIBJPOAY\nt0nb6sCgUwWg8Wzu8b1NWQdGBg05j8ckoz3glVl4dt+j9a/pD2Ajjan35hKl\nrWtrDiPoeVpiAEB0H2Z9NetJQgm4qG2CD5hklO8zM/UnfBW3+sB3R8m+oaTe\nkswifKbaC5drKWHX1AUxqnlXnjHaYNaMrj0I/z18MASvQ8LhluJO3dmjS2zL\n73E6YSd9rdzZsrGjzDQTRA2y13cd517d4/F1ayebTtLCF4TU7zUU7owDLVPZ\nEOgt\r\n=+F6g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMZsRh/NBjeptzr4231qR7pvmJZFhd+iyXNWzeraqn4QIhAMQBGwdWcF+ANioSONmUhC3vpISqAGo+S02fPpASWv/p"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.2_1587388113452_0.9359956886131804"},"_hasShrinkwrap":false},"1.14.4-next-1587548265-e293ebd3.0":{"name":"@xdn/core","version":"1.14.4-next-1587548265-e293ebd3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.4-next-1587548265-e293ebd3.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-OjLeH8/m/V05/8UnaZgfJ0IY6aJHngXOjWSHperv7NoymDZZ8OFMtyH/sefi9MvywGjUQpZNTBQls4Ri+J2k6w==","shasum":"84b85068042492846db5b7faa6c3fd3497a313eb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.4-next-1587548265-e293ebd3.0.tgz","fileCount":113,"unpackedSize":447421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoBCaCRA9TVsSAnZWagAALcsQAJZVgc8GZEMVPC8O+VBp\nzGWh3gZGUM8p+QkU2uq3BAUAptmdkEy8GC0XmfHZryiXkDqoPsPTB6i0Yaho\nnzJzpoke13x576cUJnO4DoMI45uuSRztv8/gXCE9Z4UO576SnklSTm4wmcBg\nlqtkynrycudHrGd2RjuHH85R/TMADghBjdsEi7y84mnpvIDHGmsBdvlwKUqr\ntpGkOsj/QR7GbrV05y7Bevrdu7YRvHraWwfSpwv2AMIkRrfdEI5cOEkm++h6\nDSzve6L4Oxs8NfaBw2p9FnH72nfVHnaFlwdAsrO6AJE0Aa3nKJlkTKmzlTY0\nKwWGjmd775CPDXUMfuvS3qfSF2jwWbPBbIn7+FsoCnfKIJlAG82hvCN777gj\nHwKsD/Y/pXUk4MvUbhVlLzpYPksb1sE9NURGrZcBeLlh+LVCtwy8dQciKzC5\nF3oTfHcDoZAqRrPCQXQvEP2ELFT3eDu4DhIjfL/BFStHStjjBU4KvKoFopNt\nftLbkg3cARzb1OatmKNvb5uRKvD+8KcVPBdP1H0xarKjGn9vkv1I0IcxryWX\nj0AeyyAZQwtgKLawL9T5EzA2raFZM86SPZCEtPZN1Sp8bK2q9syshr9Hyk0I\n9Fa9AMPJqANWPSK8O6JAlejMCI47C03R1DB3ZU1jzjvuCkdSMjvSBt9EIi/V\nycDB\r\n=d1Zp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9xik05ie+azMePgz9E1TYm1du8pC2eXbeHiaZcLQPtwIhAKsZf9Ma7Xd59SZuEYbaUKfhntHQLAeREaWIViruWmXB"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.4-next-1587548265-e293ebd3.0_1587548314443_0.9370441939002467"},"_hasShrinkwrap":false},"1.14.4-next-1587557642-a0df6f8b.0":{"name":"@xdn/core","version":"1.14.4-next-1587557642-a0df6f8b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.4-next-1587557642-a0df6f8b.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-lk1tdbn2Mhv6X/w3eRBUGFvLoA27gwDt7HyLY2KHeWchgk0gvoGlwo3FjWpLaaLMavOnu+we9IuviHyT7o/KlQ==","shasum":"3a111e0435c06cec9493b6e0bd019f5c2b096063","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.4-next-1587557642-a0df6f8b.0.tgz","fileCount":113,"unpackedSize":448262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoDVACRA9TVsSAnZWagAA6NoP/1siNcZnC0URxZOmNCl6\nD6JUAb5ZkFiKw0EcCO/1b2JnA/ZIpYd0W31TNmVd3R4dX9OrxgYfkdF4Z2dH\n+xNpNss9TUF2yR6O80yN3nmULl+63E8PuqMpWTbgQ6VSAZy34tKAzZnIud7i\ns3iLjWtg4IvB+n6oC1515K1JHRrLQOTpodjihOO8t5gc1CDn0iflRR+cYvPz\n9Dl8LfO0z4PK0YSlUv3N1ZNbjF3VuehxmaXZQVHg76QKncmHPprRalM0hRni\ntcCdLmF9D5pFf6xSOxdrr2G/CCk+uqT9xVrTsB8TLhpogarVEo5jlvPAcUnS\np8K1WfGm1dXT55Fv8J0UCKjI/XIqEHjguJweE0BM7h3MVjz4bFUnbOSFGVsw\nogVNHWycxEErPl3Lmyd+/EkuzlqYa9fePq3j6sS2kBmmGqnM/CTBJpjoieT5\nKmkUosdtG4HOWsr5p0r8kmj9TxAPsj7kJT669AjEhG/9L6nNsS91ksCscrkV\ny+IrUmK9C81YoTYMTmDUPHU4SlJieOqfgXK5c9bT99YkGYBkHDpyKcRQYHhR\np9FDlADFdWIEncoTRVf84UULcybLzZPuEVWRSSXEBYtlOiIHUM/j2gRwULYd\ng/7miCMR5DorMLcTPMXL6dL12dxvUhOX2kqFVBGq19WZzqd1FeQIiWo3n62z\nY7j6\r\n=3o+k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOy5GHMmBcSO428FSAUwOUPxMaKzFOiEBWrmSRwJtEGgIgPRdGj5VVrLgberxGu3mSZdjPeBU9nZa7lz5l/a6QhYs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.4-next-1587557642-a0df6f8b.0_1587557696278_0.7947324102898337"},"_hasShrinkwrap":false},"1.14.3":{"name":"@xdn/core","version":"1.14.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.3","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ZdYI3NUj3NMUuT7dAYt34Swo2HdqOmrAKX8kU6tYZ4PWmKZG8wqbabkzzlUBR0mH5U0VZzVP4efvCEGbYJA6dw==","shasum":"ed50043c02b44c137d5afd232cb04e5ac762a712","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.3.tgz","fileCount":113,"unpackedSize":448208,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoDZcCRA9TVsSAnZWagAAUIEP/R+zJAP+stt9lF1mouGm\n1sldsndnxOky6HBm9Tx4tGO9JcIl8xI4TRAOA/NwVt/qHVoHEBrG0s5VAkUm\nJA6y+lutLNMhxRbpC9SJ0EFhCO4aqPU+vDd4s+izNeKauX7MPATde5/CY1yt\nxxCDLYEtCSmIJnYDBYLkez7d7Js2ZZwWuwsx6ovt9C3/0NA8YkSJpj+4HfjC\nIaRxnYZbZBDwutZJS3WN8KIS2gNsShqbkpVGlDfNs/LKZXoMTvoBPMQqXGck\ndic9zqYRmTerb+3wT9zIPL/T4jEzTmYHzMc84GCq41FuZFMByd+y4TLLK10q\nPeS5u5E2OclTKezXp6ze5TlLDrcppclkJ0O+O4cKSY+MG+KQulq/TlxZRdNM\npV4TShqvj6UYli4GzlTEsOOmtAnQrgtShAwhSShhdiPAhZmc1JrV8uU4sUpl\nYNDxc6I+hwOjrXNIirBpFNC36O7I190QeqpwF+D2IhhTRpClcc7vEf4JqI23\naOyUi63pIiP3YiPyTdLyrDyWlWbxtH61TPx+apj7TppvmAshDEK2d5/WPakq\ny85PzJHhaVxUq8CBzk86sbAw9xegqcbqSW0pAb6SOYI02GZoD2D/DeEDJira\nVgqVcSYNhmDimlgTYWpiTHNpIH5BfSLLfcWnMhMJpGi0nUkdcInj+Y76Jp2g\ngBWY\r\n=VkPj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNroe+eQZ+1sO2v7dqUp5hr7aCpkw64M2sCfyF91RDvgIhAMjnhakpg/BZ2wByAsq7CEDW3GMi7Lm/lpytOtIQ+9nP"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.3_1587557980565_0.5862121563631453"},"_hasShrinkwrap":false},"1.15.0-alpha.1":{"name":"@xdn/core","version":"1.15.0-alpha.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.0-alpha.1","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-xcnq03LqsVQyzZpUqyrBISGtJYX+bAiP/xKTAwg6ECh7W/Ns6nwOHExXwcKug80JAmmVP2aGQkFR6343IUXzlw==","shasum":"9878fe4484b23e1574bd0a2a8ed1043c3aad952c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.0-alpha.1.tgz","fileCount":115,"unpackedSize":458065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoDarCRA9TVsSAnZWagAAq5YP/jcSyWUs2ouyHZPnNhJk\ne0iHchVS1nK70QUtyq0/1M98zTIuaaIfhYme54uIS26truZQ7BP4m9BFLv5y\npq/U8tpMj7piAdIY+A23v8nEmBdHxUdIygHgl4bssBcr9lYweEn0Azvs+9Qh\nmq9U/ogOSZ+/Bk82Yi5KGOFzGOa08O3WgAMj0CF3qquVHsnjLHXeUoxB715p\nAnd83VZfUDs/JjAaedekDgtzkeRpOhiB9mzcjrfCNAfB2Ucl7YwD+GXJsSUj\nNcZo8IQJcWR9d5jMLb1N6GPK8Fagcz/wKd7h9quqrDq4yFCu9fAvwsoRIvYh\njlQlxe+ymmzg1w4DNgwMPQryqAEmIoUj86BaVdya6EYc2ZtwfrxZgVhmUeuf\nrV9v/bZiHgTwTVV6TCq0MNEiM70IEb93WIRkNZ6ywU56/ba+zWz0y+qIntZA\nHQIGcXw4WIL3+ToHqHn7WOYZcpsEmX24c/OMgRHMcsPBQHyMIlUDN8FyQhz6\nNyXGMa8gwut5vBTM398OZxeapDarhOBbdr9jSyA4xfI3zA/dk355zOPJW6x1\nM1qZ61XiqD3+3K6yT1AdcZtJgydhUY4ScGd4u2KxjUqq6IXyYWB9CAbUnfMW\nW88m5V7tLydEPDRA9hqywPNEDKG0kWm2gs2nA25kE7/HWaWckgcGh0SXed9u\nNAQe\r\n=MHJS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpTV7r3E43juCmlJDi1HVIQpSXzfdtKPBqrL8sQlxCQQIgGqyNsfBGjWEkTIOwGxgwrv4BxxBLvDl+b+FsiomJ3jg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.0-alpha.1_1587558058658_0.4515210600676094"},"_hasShrinkwrap":false},"1.14.5-next-1587558108-584e9028.0":{"name":"@xdn/core","version":"1.14.5-next-1587558108-584e9028.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.5-next-1587558108-584e9028.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-hblJWZsgOzzqI+efP9UsC/DOc7yqcDCp3ZXPMf/SUZgJsI2sDJX5+SgTs0Bg7BzlL+4NKNE1+QJ3plq8jwh+zA==","shasum":"7ab6f74507391901152d17d57f73bb1b4af89934","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.5-next-1587558108-584e9028.0.tgz","fileCount":113,"unpackedSize":448133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoDcKCRA9TVsSAnZWagAAbewP/REg0k9PEuiIyVDr/t49\nPj9qCWrL5dV0r+afZD5L93WSxr8GFDnRSik2weM1NipCi/d4WdYMdUyu06Xm\nWI0OmQmDyAT8/rimI9GtRZIoq6zE1vEGVWV/zNReyKMg4DqwitpvZkihfu54\nS9n1odHVllvXTR2c3+d56sph50H+8mHCJLYjgSblOhXkYql1SBp/PoMV6jy/\n8wzgcD76UwzLPYwJPQxyabijG1/kj3vecox96Q3+JUv5sRPdygV8cQI/tlzF\nC83CBf/lLdAhVnASxeC13iUAKB3/Zt6KHcDv57qmhOg+2g1Gb7oVL4eZzysN\n7MWPOOEGJmx5LG9TgQyGbLBxwIxfcoORzL7CCLwQPBHMt9KyHLd1ua9vM0kH\np7x9So0G1Jr6AskJKQbeo7SuQ9zBjRNPlOrzon/03GGU3sWONysakvwydFFu\n5v87xr5k228ruKt/nqndOZlqhmQcrR57q38zn0hSVfLw0iGnPygSYEzyeaDm\nGjGLFtF9h/jK/1b/GAmsZ8Z1h1TDs7nDcRQAQ5Y9E1uJpZ7MN38a+IBkSUAU\nFwkLNJ7KBT1QdEWbn88LZp/jrxQuKzB9ehPl08RSHwPytO+BD59F3HuU5e0K\nu91MzqCO2rsmJ13IbvfvOXuGC72TQcvohmTnlUgd7o3Ua3Pwv/Du2JTV9VbF\n3RDm\r\n=7Q+1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuOIqks/x2crkdMgpafUuqW1yZ1FrTtGVqnGlVG9oLXgIgcbnE1vTaQyWWa1XVWtV6pBXtorqsvSQfe1gaXGFNDZY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.5-next-1587558108-584e9028.0_1587558154616_0.7823232728765135"},"_hasShrinkwrap":false},"1.14.4":{"name":"@xdn/core","version":"1.14.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","nock":"^11.8.2","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.14.4","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-hG0820SNHQzH5bw6bGsGuux3eqT+nXKoUKZ/Rc5Vz4I3TM8BfFy5hreAeYr5n1vzcodz+2c9OR2PxGjLLnjACw==","shasum":"3c412ceb4103f8477798c4885cfe0b9ebff41682","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.14.4.tgz","fileCount":113,"unpackedSize":448079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoDg4CRA9TVsSAnZWagAAG8wQAKFVE/FrxhDUhgrXTTaE\nQUvF2D53Vf++IDoWymA+I86ZWRHdlyTL74cJ5rUxxmuCauNIs6ScWfloPquK\nILs1K8Ohd3IYzQoqIC658Ltk4hSOIcqJhZeOoYbDJLCX9j8tHivAPa5dagWw\nfKmKAzyU8S1wk8lYNAAKsRGR5imSL5SwilXaFYY+3jXsU5CUmpaloOpj5k+n\nW3ZR7WLNo2BtiFTAN6bK/uRMWRXdPeGRqul9eD79QEyK3EbYKNK9EkFgZVvx\npBdURIa+cFcXBtptrZVpcmO+f0lLWFI6+gDELdb5mk6F9tvFwT+l0myVf917\nuUNsa2mL1yFPPl0t3EJV4f+Ax+Hgdu1znHGl1A8tdy2vSQuh+tfKaPBhSOWR\nvBrT4eQSfYuPwcnck6yJo9sVjmhyjtwnPKb1WVMIdzx3Z6dtxWFe6rZZTY+h\nqrVlyv+0B6OXWBG0l4tzB9fTYurdE9UtmOvGZqim5CXIvh5e2L3p64p+ygHp\nWAyEoGrsVzfp6IgPZWMACVZuDf2bSSVE2lHM5LryZ2VB1EzokJhthARG2K+r\nrhyK3+YUwTx1ItpnIVda+MNRhXfajcv5yiGrpwezcFSREak3SXKx0PXJ+gC/\nihKl+nRJmU+rt5kgQ/+GNfznVZE+DyI3k03OJW8CXVNQVIfc7FdUIvFqTmI+\nfIsV\r\n=tbrh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnrpoif3yIZC9Fs4Dv8KCLgoUyR++gi8TQrMZDV2cCHgIgUBz4YNv/ZyfGuSqMhITVSoi+lIDa5CHKDijboePTqno="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.14.4_1587558455639_0.04543643212296722"},"_hasShrinkwrap":false},"1.15.0-alpha.2":{"name":"@xdn/core","version":"1.15.0-alpha.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.0-alpha.2","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+CjJui0uEu27PzsRxmvDcvCagSyMc3EwM/f+xpHCsv3wyclXN1YbxVz5HaKZJpVTqtF51oJQgwhZDKbU1+UkRg==","shasum":"0dc6a3f2cc4724c619a1bc5fb089e48e76c83ad8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.0-alpha.2.tgz","fileCount":115,"unpackedSize":458359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoED8CRA9TVsSAnZWagAAxSYQAKDMjOKTam7EIVwQFpni\nOZs35Lp/aaC1NiGzqJoMVS11rVwXtFHO3E3nX0GWsF0D1+/7zE4RH3gKrZ8G\nTRQqspoph/AWOChZYw2RmWBj7AV2Pe7j/WDD7v9gqAuQnG8K3lX1eKd7Ugfx\nHjkAGhpAsMteKrClCHNlQYbwHTnWqJsj6F1Jl/WvmOI/RKlQNg1rrtemzbm5\nfFbPxNDaE3QwMocZt53nHWe/s54Lsvc5rVxICqLU3EE1z+cxoRJQoM9XWGoc\nYMWtX3i2KdsRgfTk67awdxwNDzDNmGbI7RyYk/xeyevVYG9iW8HqZ62plu8b\n/7EYYZBWoApSMHTELclBk05H+boI1vPIkPwIWPk5kyDDfZKVMU9gIJfhqs/d\nsLNbSIlBnzk8v8VY/os5v1TzJFK90HYeixnVc1qA150a4D1bVlIENklexv/R\nSVQBeD5UbtUMdx6hMOIAvisd3rSC9QiPoEMfvFfvEF5vs0yroc27xFhLA+Lm\nStUA3w3GEmZnCbJ/6Qdj+dagErlUXtY4IG15xLhvulXvXp3WhqeFPoExVDx9\nxpO7QySa+6fdVtplZhGdNSpfGhEySnnaECnpI17OjrhmLO5mEO7vBJCNvMWk\ncXaYGiYpuKxF/JDeIc1GXLNxDgQvCd/P5cnOcHbLkEC0Yt7npAjyLO6oqAa7\nuyQ4\r\n=cVp4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvhgS6EdmOb6lFoUVe+BSQ/5ueQP3kuwoZoefUh7wDdAiB5j+2TMXjlF6upaQ9jimpAZ/rKzV4Vuj2l5Uma5JX0QQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.0-alpha.2_1587560699879_0.9573538875894299"},"_hasShrinkwrap":false},"1.15.1-alpha.0":{"name":"@xdn/core","version":"1.15.1-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.1-alpha.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-dda7kQkt+5XVGKgTO0kq/r2vhwZs2Xv7m1hvbCM3txfTfOPCTR1aurA+fSV06ojQOhYGy6EFs3SyIJTbVZ6u4Q==","shasum":"98f53fbf626d1c5ffcac0228927032d3aaf714ea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.1-alpha.0.tgz","fileCount":115,"unpackedSize":459071,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoIwRCRA9TVsSAnZWagAAhNUQAKDMjwVdZZP8AO9GcrE4\nGc1KQqffeIh0qHNj7XXhdYx4ezMsbz22sjNdDa7UG/dIR1i1T7stTBPdleYG\nu5oOPf7u645hti5yNm2Z2wIP6wx7Mhawcdfm+JuuPJHf4+mP0giLLoh9zofp\nVlOD9NN6MlmpjS8IWUlLw5WlcYwOG0UOLhGikJUeYWL6bVqXUD5D06roQ1RN\nEhYeA/503Tkrkme/JFNKz+eNr46NTuOkl1MfhAepkkA8MQXNPlUEiM0spZBy\nbTIywTvP9/LV/Gtg6SPk5F85w1S/bfNbR2AKfNbcK16xEWMKQFtricH0A23+\nK7z5PhQI36ywwZsmu3hnqw0CFdVAE3TDqDfBMW8JUy+rkN+5kgEJkkmL7zSU\nwrjk7W3eL5hOKnO9SWrdW24tCd0bEJmpmA7oj2RTBFY7//ky6HOwhnvwPBsx\nzxrYVtfvDNSczt3MgVRyvOLVlLZIxywpzXvl7Qd+Des8jcMGugNFPbo4ORLy\n/Q9WR71ZDe5lEEljvL9p7uXZDbreoLfU/56K9ILWydL2E/TwDAm/J/2BN6LV\n7Jm/nkL8s2/WqBwa8erUMQufG78T51rdwaoivn9XoRzfGdKcKy1u1VDK8ro2\nlYBoAgD01cuw1jgjgED3su2OZEIA9jsLu7VwKlOjldwoVytd5p1ROdCH9era\nN3DJ\r\n=lt8Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDw+eZ9HoNb4E+TgyJ55AI15K6i087nYsXpnt6JzVPK4AIhAN21XZYvG+KNLIyRZAyMIqnNCY1ScvsHMxae90uzLg3i"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.1-alpha.0_1587579920922_0.6257924375123154"},"_hasShrinkwrap":false},"1.15.1-next-1587590168-dac37a32.0":{"name":"@xdn/core","version":"1.15.1-next-1587590168-dac37a32.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.1-next-1587590168-dac37a32.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tXK7Mf4QIN3DaElBua7pMmJVgV+hX0JkVEEdYUNmuZNwH7uOCt19Iia/A4KatDRXqZniqVu3Pv24zxD9d5kuEQ==","shasum":"d0f9ff319c601160b128fec5182604737b5a2f88","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.1-next-1587590168-dac37a32.0.tgz","fileCount":115,"unpackedSize":457856,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoLRNCRA9TVsSAnZWagAAlgEQAIGohv68ANtrAX4FfehQ\nta6MpNICaqnO+Jlf0d+p3mw7wUrlM1dtSgFnirdCoC0cwqhlVoSw2B5em2b2\nX16YR8WlZyeF/nWc+5cXr+S9b6cVnD5qrs2vttGzLTJdP4Gy+KPlGDbG6xFJ\nir9mMD56B19UztgeNbKm0rZ9Din6yEuPAG83vKgRPRa9cN3XS8SbPG2rTUVn\nPCN9snhk1vBb4EYU1zgbxVqEiDBFvpMbEo6wmB/sRqoWIRWbUmbqHVyQGUlS\ntWMjdmfBEnMC/M6PTGqwROEDRCk0rnmqpHvV9Hp9mah4mi8rYlmWpNLucMu/\nqCn2xOqo6cCsPraO36jV6oVXvIYVcnKtfg7F+x/JxolePcC7q03hyFYCyD6F\nf3p4CrRGY/mBhvBuVXXeEzRRFBjQFjCTUtIkdC9uZgYterviaYZvkce5ccIz\nZnkVj30lGCO/CPUgOD2XJINaYTXD3vVHdC1jbgzKaiYqYeWKcK70i5pojP7e\n+PUfqknkBoJFbIHAkDNvsOy/Lo3Ff1XhlAlCIM/DrVXVMqD6fUQUxfot6QlS\nBOFyNr9aTgo2NZJdcU6BW19+eEFZqMIYoTNNXyVu3uoT2WfPHN2NcCOo4X1r\nRo2OIGUI+q4WSsmiCYP4+6kF0QHTo1y+mNaTBZHzshWuxBvcmWcSAVVILrVU\n47t6\r\n=YIni\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBt9dg0W1mLP3AXS9E+wYZL66i44L8S4x5d/VJZ4Qx/xAiA4AVGu7DXcLlhoEnY/gVeYTYANybOs3iwfFGHPqG+8ug=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.1-next-1587590168-dac37a32.0_1587590220439_0.17551735350296793"},"_hasShrinkwrap":false},"1.15.0":{"name":"@xdn/core","version":"1.15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-FXWUWk+5/0Vk56qeDyFLDbKfThqVmokwge6ceaVbtp/Nr+3bCH0zxyFf+nuUv1lNRt9Ds06kfJPA7D/pD3aHRw==","shasum":"d8c1e2e86f5d3add280758c030824c67739065a2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.0.tgz","fileCount":115,"unpackedSize":457802,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoLToCRA9TVsSAnZWagAAiV0QAIRj+LWcPfOMkU+ERlRb\nHK+sO92swdmAqyeQzxYEv6sH6UMjiJCJNzjFd4HQNXqLekcZ51H9ZBjknJgV\nSisPz+rxFe6cW68wqlr2Fzz1+tKmDhppviA0HI5tgIa3aBLr2+bpeREqXQX3\nicnNVbQDV6L6iKsc5jGjraK7AJKRCuKWzdC4sMUshjCsFS48iL2jAg1p8C+b\nyHAM4RBq+Myw6p96F2j/0PIp5Sh4fcHgfT5g0rQjMScI50Sh5BAa0sgRhE3B\nO8UlbdkfWqxDIDEfAAaLXe9IaTtGaMLkh+EmHRjfIxA7krw9OBvixHqNDbQe\nqG0WkOT3Y6B+P9nYUkFtZXfvTUh3ytmmmCKjN7FMusPyl4PQ/5tNEZUVC+IV\nby+oNGphSwaQo66VjjFPaZobes+EGGsFhMv9FQ8WreU98tIjVLp2kQK5QVEs\nT+Q1IMir4my7EmcYTILxHqZipdOlGBNdSI37FB4uU0oXuQ+x5RswlU/TOxkj\nM1IDH0pYWXSxtg5xePFP45zR9SPdht0qq8t4p4ZgO1IEQwMmV1YYDpOqsprt\nOdu62Z10BoQ2eZ/cV07pwRFHyz5+YrQxHZcIqqpYiHCiWXtuAzBxTphZQxB2\ngfHXTWwxu0Fe3zEDNuT0L9MvqTs/SrZ/e8Oungjq/aZ/Mu6j0DON+mGiuJzp\nwJLb\r\n=8dRx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7IiRBTXF3tDMCPDDKgroh1HNdGp86ZYCx0fOpcQyvVAIgDp0xBLTJhfiOXRkkf/QE56u4Ru9hJFinjEW3h0GqurA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.0_1587590375700_0.8693007636898604"},"_hasShrinkwrap":false},"1.15.2-next-1587646706-e2a18f10.0":{"name":"@xdn/core","version":"1.15.2-next-1587646706-e2a18f10.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.2-next-1587646706-e2a18f10.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-QjRpB4EBENg07hvZaVDB69z0y+GAyAAXjvGkNJ9drp4ATXXcCg/ytngv0eO3yisHfUaALVSRnD6/cA5JaGOYDQ==","shasum":"46afcac58688594974ba25f353ab8737c7c16159","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.2-next-1587646706-e2a18f10.0.tgz","fileCount":115,"unpackedSize":457856,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoZEjCRA9TVsSAnZWagAAEz0P/AngU2Izh1YjEmdPXt/N\nWKTADez59Vnd7eSebMTdLjk+xUP1bsT2M7MnkZw/PTDO69cHf+ScXB2C+Dr8\nk0gwGnc+pZE3KuaFqtSp384pNcj+rVh7atbIvaDITIJ0QBauoPfpYzYbquxF\nGTwAmsuSyps2Ex8fVGXMAzSHYxnrxCyzDePS8FVcPS/wDx5nTlqKcPrRGfaJ\ngM/44VX+4atMtk9L1XAK7t8fSoLMWkF+Mf9qR/ZGk2yJE0aVNxfrGaIT650Z\nW2sc35/3l42jU116f2efSffkVTesZZkat9A7ZWXq/z62EOft4o++XVKJh/pb\nJF+C4DKGgT959j1cbkVIJzzJ76MPqRK/4tuIa/rDaRdqSOAZbS/SU78Ka07Q\nQ1ZqV+XtCRO6VV7tMgg8eutvffVKtP2/d2IykhtAsAuZMuVjiIOeFFununnF\nVVWjvfApB/HBpqwrTXDY5MUYRBR/znD0dRFgpCIqtqx3kq5H8o4kNfMEXRCS\nFpLj/cr7kfrVdG54g5Er67Sv0wFA8JMGO4zFmAWsdqjW4M3g7ath5KQ4rgWP\nwtqEy51+wdDlJ1GAT040Ip8sMUDG9XEaoB4Hp+uIOBMJvnmE7AOE0igppxZj\n/7QH3SuHCCjQfyZ0qgE2tmmTGiTKpepzH7Q2vCa5bMxb3lNCwUJX0xKkIhAe\ntV9S\r\n=aQzJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsHd83dtRpvcr5XJipIzx8+I/QVnMIF/q0nr4c0PHx9wIhAOfv8bsdWgewpSK3Kom8gMPmfJKpgzW0IJkQs2HBaUUi"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.2-next-1587646706-e2a18f10.0_1587646755382_0.06436439209885836"},"_hasShrinkwrap":false},"1.15.1":{"name":"@xdn/core","version":"1.15.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.1","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-8DqTMSisE9NWeLaEiQmBiewNSIsr7KYkIPy3XCIFlYkKbvSS9/HAGfNAv4wfzQvC22jLLc9Gd3Pty3LjII7lIg==","shasum":"5b712b0b64ed6228a38126afc5188b5cc484d9b8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.1.tgz","fileCount":115,"unpackedSize":457802,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoZIjCRA9TVsSAnZWagAAjnEP/1P/uOyAGl62eU+XELKG\nRyu6KkK9l7SivhTPYQibzfcpncz9Ik+3Chxd/czslD2Lyaz2B1koh9T8DsYU\nQ8TSOCY6ahydnfPiL3ViQ1Uhzp3/QPBG1xUnMxukufv17OL0t/LKsnEUL5eI\nXNjTT9yY5Rr5QhgUlQU45rQsPX7gUirLAw/E1d/s8VwiuiFRXnI4JPkbwzlO\nlNTqzQ6BDBz95oufz/iChws+Bz03fWLfEli6an3U6nHlGQCASQNSoCZAUIb6\n+w3q3mJ48CIM23ycv2Zq472Cf0wenmtzNytxVnD80liil7ouPHKrgSNwy8vF\nphwDC87NupBazHAISqs6oL4O94rZouUQp4X9EgHlGvYLAzK82QCe/utqXtEm\nLQFIyBko7QsqTMhmNzFkhCWRq8csD7gjsp0+I5DBgpgUqRGLZ487zzcgIS6R\nKjM/p1p2kHH0QXdPbi+bJSOfdiwQ3vsUKU8+gqCACz3pWuQhqD58U8iUAmCN\nkjLHo4DwBrZHxbnee50ZCy4iFlKvEKbZEl3gpSIFzBgUYrYQAlJRqhglsDR+\n9JXjSzwA+QErfnCM4aISpFs7FFtM8zCBKVqiVO/9bYr4GQoDMSZHfTlb6h8G\ndG3IbkYgCSBPhn9s/M38URIDU8pGAyJx7xuA3Nc3pH61MgwFQQmEoakxI7Ic\nup54\r\n=yKmn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDUQnMCTMLPlXSDfXOYicOAw38qUb6Ywoi/Xtn+fTJvqAiEArP5jL3DZtKAfvbxgM9ciQW/AQIZGSlTOjofRKCpRt8c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.1_1587647011224_0.3150569920876687"},"_hasShrinkwrap":false},"1.15.3-next-1587652580-cfb5090e.0":{"name":"@xdn/core","version":"1.15.3-next-1587652580-cfb5090e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.3-next-1587652580-cfb5090e.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-7e9DeyXonVBfCntujXa5yE4mW6lBSR0Lm72a2M5/MkOdI/QjT0iaxbLXLq9oZy2FA1t2vlJhYm648qusfG2Ghg==","shasum":"1d1c35185f84957d6fb800e85df88abe3aa5ae90","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.3-next-1587652580-cfb5090e.0.tgz","fileCount":115,"unpackedSize":457897,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoagYCRA9TVsSAnZWagAA5oIP/3tYVDdy+weGZXkrSCrG\n6NMNoeBJX9WgIB+BmRckQNpFF7caaG+T0v3SfGMiz6Mf+r+wJzRcYdwjQlYV\nUuKYNdJHeV5om/LwSkX7LZHz1hSiVSGbECd9wT2s/ToetaKbEHR3alWKLSQC\njSYvvHimu1+YBrsdycw0yTDFwmt9x4t8yoInfABOapbB6x1ewXsiy/vUlvbW\npj4v1TMi5yvOMo4Clof727N/+nrV34WjCaAHim8iYjHWuBrf5ug83kgIC5d2\npSiehR/hKARrUzVIIPNGvvOWVzJK3xSPUwCvi+r12szEfoI7m9xKaU7Kh01y\nn44m+I4H5C4QfMyHKykf3DLqqi2lI21HMDD+d71CroF7iTFeapY2gCxBTdSi\nE17CDCKMXy73EzfpYCEn9xXIPW7f5ibwn0fLe/rtCv4tjQWYsiue9T3tlMpf\nbW21C0qEMi/LYnoGi28EVMleMcOpbmI34sStAFC2gaQ6hGXdPL9vYwEa2ZSy\nLsNH/iRqh8IUsDs7fWEtJhIHUc3yrE2qDpUmslAXiMBxNQCTBFRAJBiwUXPT\ncrcpj54v+HnHJX/5epAHHkfnVRsQdJR39B7icLTNze7MMP1St2Dpa2G69p1y\nnLJVuuDLmEtYYuMcyonG3Dkf+M5iDeMgRmyeKg5T9SWySBT8bA5OwYEepYQX\ncNWo\r\n=TT6s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICLkOezLfLT3POAPvR0I1uqj268Jf2uMmc19vahy/GvcAiEAoldyzi9xJfg2xbN7ay0X+MhEhDePFc6ee1QaLmJP5BI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.3-next-1587652580-cfb5090e.0_1587652632162_0.41110445818121066"},"_hasShrinkwrap":false},"1.15.2":{"name":"@xdn/core","version":"1.15.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.2","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-3h1f/+KXdY6YzYREFy+IMYlzq8aA0RTNh5W1SFduSlsdR8RHk3r+mf3ExuQB1xOxWIkVclgjfXNP8MmaBqx0fQ==","shasum":"3dc122cf6690bc61d148c5505e6830765b1b0f1b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.2.tgz","fileCount":115,"unpackedSize":457843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeobtlCRA9TVsSAnZWagAAjUYP/0/x11ip5b/BPWFSwIr8\nC//D3QFFDQGdkMDW4ypZ5h1lpuaeTkPjCAFybRKmwS5eV7wHXl3bFGJk6Dd8\nJEN2cJul6LHcGp3+0OBTfI+fYoUfDJ5i3NTWGnJ21OVVsjwZV/S55YImAzv+\nunK5pQVAmEFSun26lfX03Pa7lihjsI3ghlvlV0bBQIcd+2MOuhwvus8YEio2\ncTBbyy69ptLpG2za0WUZwqjU8lAce4AyDc/aKnYgpL2MxEAzxYhGUR5KYAQd\n74MvDCU8PbDET7IRWh8MlcRqBTWzqKHEMf4B17GiOCFhjIeyTeoU68DPiQ/0\n/s31uNpOV8OFnKKR5qlRsm1Ye9rDWbnlJzG17OysQvLn50R1K4LTf9AXeUCe\nphJfn35Xf+vkBJO5D0kHRNWF4XPPuYFSE0ceiEXM5D6BV3yy4i3vZ2CwU8h5\nEpfK7Xm8lbDvn+lAm064AJVvsPojv3lcdSoHXQzO3bZ3pv8Qn9NIevDauvKA\noz6FhGM9WPvqwGbpJ2RlES9DzuByJmDa9fLmECBxJUlbWI5agi9ij3GCc3Td\nECz9QFzS2uQCj6iHU/3k77mEoi/C0/BFXxRZOq93j+N9dQR2TIz/vRY6tEQx\nDoswHPc1DsEMqVzs2S4dhDDSIPHpxS7ziQopMPuVhJygNUU0ziwDNxWDYBCj\ntTfi\r\n=dEYJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5P8qPHszdlUcKYiZJmnS82efqhuuqs0fWCLe44nLxDAIgBAC0gQbkYsiEgRDVpYAty2oCv1B+8MBG4tK/m5GNgck="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.2_1587657572580_0.5856899801525792"},"_hasShrinkwrap":false},"1.15.3-alpha.0":{"name":"@xdn/core","version":"1.15.3-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.3-alpha.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-H0yQyTEkXDdudKDBIVk0QDTuEf82/TWCrLWI0tXCYGc4Uu3VYlukhgY9+O8rg9TWX306sAJOfx8WmV/u7ZSO7A==","shasum":"9971eb0640cb0196f0e09f6bf01444797362fe8d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.3-alpha.0.tgz","fileCount":115,"unpackedSize":457859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeob45CRA9TVsSAnZWagAAykAP/3OYRTO2RjszYmDZJnxJ\nD2/kTMT2aCqmVZMAWtW0bQ2RFENBz7RFsAZ0BjyRMlJQUdHksKGu5gWopFXn\naZyEJQCwAOMoPa/eGZ0324sgqtWOmGja3vnK45HA007/pgQOkYuN3G+efyio\n3ggmXBlA3J6m8GcFHBsCbjdvf+eS+DKG5OlQIr8nen6BEY+SDkKoyCQut5fL\nY4+XPLgGIEQB8rvBkPqi9XYppV7QJ26kiuAX7fjDuGDqMKsOkr+clLe1qdOs\nI1+arEHaiVQosi5XTIM2Sdng9cxvCa9tvAA4bDItjpJDXkhHB/1qxPe0ybiW\nFUx8PsJncT5zPQlYkkWkC5rzpAitG2vzYngW4g8bLoFQp8LKgQf43wCUIY4Q\nuiqOL9XDHzLZwaXHplAJUq6/RZvgOKu3GR7lHQ9qxjdVxQASeJJTd5PLsVyV\n6eZVDnS6BbOfe9hMDDvc3WBmhilOUQ9o+hTgL6/2UOp99NOU7XKlkeDwXM6b\n9K4puZRwSi8oL8m/MLSvq79oQdanmQ0UhXGSRZkMNGwompA2HShuZxTLHRML\njITC4E+yNU0bQRluBgfPSO9S4uzXhMf+tnSJs35EdQ5qnWHw8fHf8MABXHE3\n1jOGtagcNpsQfg4p4m/hMsoUwrekKV+vxVObWuNlOk3Gj9MdKbobVsAthj0i\nDhwX\r\n=9SaX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmyVUZgWv4VxgFjI73GFq0u5EUy+hnr0Q89ZE5Xl51kQIhAMcdrZELYlKfSkk9mLqtW/FxmQSN+cy16j94gNYDDi8p"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.3-alpha.0_1587658297484_0.7171365080316512"},"_hasShrinkwrap":false},"1.15.4-next-1587663083-08c99ea3.0":{"name":"@xdn/core","version":"1.15.4-next-1587663083-08c99ea3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.4-next-1587663083-08c99ea3.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-8ZrwXO7/kbbU978l1aDG2I9wYA5yuBzjO/cTf5HYenAS3vcuWu0s/hLWvGt0asZnnkx13Pvc8LH1s6QMCMP13w==","shasum":"4717cec327e987ebe810cf98e9084741b948739f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.4-next-1587663083-08c99ea3.0.tgz","fileCount":115,"unpackedSize":457897,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeodEcCRA9TVsSAnZWagAAX+4P/AvK9mf8oncYs3dSw6v5\nleXBHLeE4EUWH/xROkft8ZvYjXWfyTGDBE4chaT1UMx9AWaOJlb5jWghOg4f\ng4mb0eFmrnXPz+jDeV00dGL97owSNw3I53InyRZ3eXlF5tT7ub2AWRfYWYs8\nD/WFjn1pSg+giyTiAToJaCkwweDXgw4YPAG1EU9wWJC3f7NKEcWOEkEaUh/x\ne5OtXKOrNiVfy+Kfd61C1SAZEs9DfjKo4nkS7jak0MVZ5UIlDf0vXvoyjzJf\n4gLZDPVpXQKIIXahAsMt9gP1lOUxKnySrU23N4kNTRMhRf7BlWM0ugJ7sn89\nDlyUB599w+7T+u9HtPjEX3rUkSrnIPEBRn1oK/CO1zaLzXq8gIxY3VpVRzqE\neL1md5eeppXafaz9xsaPECCpUhBsFCsq7sF5E2JntrxSpNr6tzqH4NcKis9W\n6P5VYjAyqWeIEHKZPpMvC6h/+sOByxgrZdoQnZUcNuiKQp07/6c+2z0r0arn\ne5wI9NMoou6payW0D9yTccuSDpe0MRnXzsZ6+UMaS7aPLrsLng47iFt5d2Um\n/Eaca0d8GrjkAP5PtM8nIYTZfgqkIkII8IJ4F/Z2qyk7jnmolD+2M+doizSq\nSLMTQVV6Dm31Qi6bLHaz0hF3wx4ky6C+qDp828Gfomys41wimA/lwE07Et+2\nfn8c\r\n=qW1a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIbZXnmDajMsMgxJUZfXQNJkmWjJcGOoK64fFnnd9RHgIhAInJ12vZcMNbPmSdf4gnTp8cataEiL4JZJIYjFRNYE1i"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.4-next-1587663083-08c99ea3.0_1587663132144_0.06172016167214478"},"_hasShrinkwrap":false},"1.15.3-alpha.1":{"name":"@xdn/core","version":"1.15.3-alpha.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.3-alpha.1","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-VXfZMR8dM+5BggKUcH6hcarefmC7zYTenHudmzSxR9Ofc8oEhGIBp2pdcEBCPpzj38LAqSivy08EY6sMXd8QWg==","shasum":"13d259b6accfb622cb3f37911ca75b1f2ad5ad41","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.3-alpha.1.tgz","fileCount":115,"unpackedSize":457859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeofvhCRA9TVsSAnZWagAAqjMP/3FHwhC4pKbTUdv2FlUT\nTvSLjrc8723yAaaJe3vdueBmoCHFOF5FqG/ioLL16m0bwWE5r85r/A0b8Uz5\nUGyDtfyTjYMzZkDNoN0juN1K1bkzmDF8E7EbYDlWEIcluLJplohMyRI42nSS\no6jpBt9dSQ/x1SVTniI+lZHbhprwlU/8zxsOxNOBYOnsLJRKZBeqAXatyS4K\nLA6CS95/Jg1uUvEFFJBWEquH45XclKvLh5gB8TJCNcYa5G2NQAxxI9lO9zIx\nWoiJrxHacDpA2fF98EWFPhvY1knJXp0/7PM7c8Zw6y5UlR1qxKO3HrPpS/3y\nwXNMxC3reZb0C9TXLng2YA6Tl/uAKZZ78UJLPERHfYWlKjkkC/+C1c+kcPU1\nxq7OAQJ+lGJSveXf7l+xZE5wBLLzpwY2g1Qqyg1Dty1Xhx60sePTjyKO4+qB\nox0vLBkSsAevXCyMj/X3pTP2MGAjiMI7016IHmk/liF2pV5/hphENMcXaVk3\nhsXD430dS8UdMgLTbQfhWiJrabQiHVI+JSikWiZQ7BdUJOI6vYl9I8qmCLrt\nC9CTk0SeeWB9dCEJ1iKAJCkCRSBafRncDxN+j6t2N4AxDGoy3WZNwwBRur2i\nRGAah4z0LfP1hLM2sgjg3KvTBGuc1c4z7OKUtV+qRWvd3PQcfmWEP0m4+hxY\n8Cam\r\n=XsvN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICRZIDs77YcOMPNpc62SqRIzfiBReJvzb/mzKUrIpweKAiAGwmUR0aKP8z5XvRtOGjQSgD+E2zxecitZanu1sZ49Rg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.3-alpha.1_1587674080513_0.33525062035677555"},"_hasShrinkwrap":false},"1.15.4-next-1588004033-f4ebeda1.0":{"name":"@xdn/core","version":"1.15.4-next-1588004033-f4ebeda1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.4-next-1588004033-f4ebeda1.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ZMhXf0HTRs+yoCNgG22iGYDyFkpsP7+/L0E5D+NPBimtw1ecw4PdxXU87cO1KM2OOZVzM6/CIWJuFQyZczVrlQ==","shasum":"032a5a3517760bee45da75c5fc66c1354fb53dd6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.4-next-1588004033-f4ebeda1.0.tgz","fileCount":115,"unpackedSize":457897,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJepwT3CRA9TVsSAnZWagAAphEP/3gEg78XU2ONdzS0Ci7P\nyafspuVUM9lGZOT1ejM6pF23qNrAzLvawzx97nVP6yzklY91HHt2bek71oc2\nYhEU+MEHLptsRpczrOqTTpJD8lv0gfBEQIXRYjF1xND31iGUNhL7/FPDatRV\nOJPceP6ru4qbYBgQ9k9Hvi1gWNmto1UsnWOlZdxdK4PAPNethDhalHkMi/Xz\niAysbPNtxLCWC6ogpX81yBweTGUFiYOvM0X0vsYtY2dsdrbA4cIBxEbh0Fd/\nmPPfab8JxTD0jpqKL6OasbPxPMQZS3z/qfPFoCuJdFw91pR/qGxK8xGbbaPR\nuyIh1w4qcNgNPlUkdeDV0qxp3yF6mdRCyswYbkqMPa497yZ7yRXlSg+Jxb4t\nap7W8NNr1RiiRXlrFuX+UPPws79mNIf5ZpU9t/H0fkm6mo1iOBJqrS2MMAM+\n927KOo5keQawTlHPGhovMLQL6X5COVjs+YD+wKKswp4P1OWJChNvvRzPNGJH\nfEIJDoROZp9EXzGpWX7zTPI7sDFZ61HiPCIlpeR0WeZdovDyZW1GrijyaQeJ\ndZRCsptesi89TkgzWOG6vcUG+2K8QVOMxBBqvvDnvWN3CjFHekaGt3CKRoes\nmVLPtJKyZPZzZxH9C+bkxpog4pARHflRfKlPYUO6RYpnNu328lE3VkHJKDrz\n/ace\r\n=0vVz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICQ/pFzuDwzy1RY3R6rgwGoND6x7Weup4YpOQfUYAjnEAiEAr7MDcRnb/V8YtpDgIuyz9VaINCNLgbW6ATIRPnVCOKA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.4-next-1588004033-f4ebeda1.0_1588004086791_0.37969949233695677"},"_hasShrinkwrap":false},"1.16.0-alpha.0":{"name":"@xdn/core","version":"1.16.0-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.0-alpha.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-SNrHmi85i1YmAiEQQ39RHqilXAaeG5bc5WFWsXPYgVaAQQ9P1JLuO7cREgNlVtMkzNF8PUPaH6LjKnbUixoyYA==","shasum":"b702038261e9c2cad04197a473aa4fde40b1ab97","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.0-alpha.0.tgz","fileCount":117,"unpackedSize":468818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJep3w5CRA9TVsSAnZWagAARVQQAKLd2YT1IQtxh3z/pL6m\nFv3E5dnSIVrzL/w9X1tAzhNS5EkqrxwsGXMpJvQ5pztuJnVUfcj1mWMETRp4\nTQ6FEfJpklMtNrjNjgMMRVAvIjUFw/OMFV5kA3tNK+iY3UeVn+gyvar6YLM8\nCpuBxOErIw9peLYtVXoQqG9Fa+ZQIV3P9LPbNS5fH9w7soaZikkS4Y2kypws\nSWCbg+0TWuV1tBf350ANklIDABbt7l/HNYmkssCV2Lt3APxHktb8XgQnIWre\nJR2Btsu4qW4BwsdwhOv2dZhYwSv1J5YUT6Ec6Y57UZRBlVsevhslwFbwoYur\noUEizKiuITkVYMnWwo6qr5GTe2rXGo5vwufCR6wwO+SC24YAg/fEFiMV8BTT\na7ubxKhfquW5GpAtMDDk5zMF1UtRZ1oCnzEKKZJIy/+8DkrlCx3M7kE9Jxge\n/DYxrah7I5F+m7vaqK/dki/FuiFFbGHyh1fOZZx/HjcIqQd4qAJWlT87tXVp\nJM1W/49Ymji1FryysmRofIj8S+PbcHsI7DIzDKRcKy67/FaxA//8tie07ZNi\nvH74r2lHPH/GeZjGqCeBc3GJ/9w/EpqQ4lnzpejRJHLaDmRMy+kztZunyHrm\n33XBCWCLgDRjug2V1mVxJAHlseLDaw4GUSUdMJxZXLNlvt2j+oT7PYLq5ZIc\nDhtH\r\n=BKDc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICAOFbcNBeXsgeyf8x3xcfY//trKfhrR7j2D+5o3bLwWAiEA/ZRjkbYgtbZ/NnjB1wH+inEkDuoZeswNqZsrhIK1sDA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.0-alpha.0_1588034617364_0.353011502265276"},"_hasShrinkwrap":false},"1.15.5-next-1588089497-4078ed54.0":{"name":"@xdn/core","version":"1.15.5-next-1588089497-4078ed54.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.5-next-1588089497-4078ed54.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-a7PGth/RYyOeJFkn/g2elE6Dh4Txr1UVqq3Jqiq+IdT6aH9Qy63a03zXL8yM0x19yI0cguxnjfmyX7L5RWRu7Q==","shasum":"479a957f5246dd79e8e16b7a372a4ecd9ebd6e79","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.5-next-1588089497-4078ed54.0.tgz","fileCount":115,"unpackedSize":458471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqFLQCRA9TVsSAnZWagAAUDsQAJo/PDE5/cquxP3Z/C4C\nJPGUZjt5P/H7B3cBC+YK+S8jJy+ob7Gz2DiboKP18C0Pm2UCcWQyKeibkd2H\nzzFyFBOpNiAxLHrwsqe/Kp7LPaRKAN94uQpMGIsvWJ4r6YWF9f7WNjOezCa2\nL737QCDFk/vlIzbNKehyvmzG9Ppbqo5Kz+1OQopebQdEVIGue4/olqiGqlSs\nii77nunvS6L9MCEqScINWQHmWE0NxAQGgEiqzTLjOGYwgMsgcE0BGYJUbnI2\nklPH1pYwp4wpa4F3RaDUYGdLCySIDsnVSWrb1gSKqeHjuQsoF0XR1+yEe0er\nfx17c3AKj2lR+f3tR2IA6ZMWWxsoZ4h2sdCX4BakFqaXXBI3Oi9+OyvZBY21\ntvhvMHk6qMeQ4AhIGilV/G5nAYl5yAz1cXQzqv5wx8DAI/m5O1aBUF//5LXG\n+3fEvclLTboP4WSdX3D3vP7pTYHLhPqRjQSJ66WkC0Od8C/spnNuaCXneR//\nI5fSHs5djN5bGsuFBsiBdRIxg/lDJD932a7G5l4wHdrBDvoIug7J6e6twAkE\nFb/J2f+u1xnLPiAhcdWwprepAJQJXV/6xtAGFmscKwXWPEaXY88OOpI+2EVC\n+MVNIgZTsWA562NFuT34vZ4YY7w5n4Y5WX7ECaOHXQ2YLuRyrLVebbhjN2D0\nHBv2\r\n=DNhN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAT6VwxQePkDzbDeabefeBJmKKhh/foggxohRIT5/kOnAiBVqNxuOd6LvHHq1Kpovr7HaGcRLEIVmPV/yacfI7fCTA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.5-next-1588089497-4078ed54.0_1588089551908_0.314941524548666"},"_hasShrinkwrap":false},"1.15.4":{"name":"@xdn/core","version":"1.15.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.4","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-u+87q6EYf0dE2MXS+PLtNin3nlzwAS39LsUBnOYxCI/eU+sjUGc1sydw7J2tcNFMZNVFtJY+EcyrKt69qkjN4g==","shasum":"ad5c3a4882fb0517da4a32dd190a1ff3df160667","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.4.tgz","fileCount":115,"unpackedSize":458417,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqFMoCRA9TVsSAnZWagAAryAQAISG7hgQxJ5Dnfi49gO0\nNWiN/ISdyj91XYOA2zNLcwhGlqWQSQzIfIqmUYzhBfyCyEVb2/2LKL1rmdNK\nGFORivlkKY2egTRxQV2ZxJl3lBk7ocpFSdAAog3HEYDLiYckrzxEz4LHMMCS\nO9TiwZyirOJBjYchE1cSdV+WYbnJwSoi4BXgviR11ouxt1sbuFOiSu6hRsW4\n+2z5WiTOR1KVCAElcKNgnw+eXtlh22TAAkzM0meNmnSfoODZQOVbEI30dtQA\nxd+fO1/9+E9CFmRbrTnXqMFPycGgZNozhdiOiqGQM5gPG4O+17cvVj77eog3\n1OHa9QrICkG2OkjrOLCO0nJcHTV8CSmwP+5qffw33bRfqVZ0113htEPQ20fS\niAA6jpAM0mc5MnhnL89g2vke0CShXmQ0ucUB0bPH6IJYcWZ43bgRj7cESZoW\nbPhTkKPwCIPBvaSpYG7GFi5t419MXCIyqKo7sQGQQYMEYC4kNAjauITpG57V\nFtWM2X8YzABNnlYhRpk6IMMddXbVNcnbX/EoT9JVIXPnCn1kOnbxE1QbbTHX\nhPz7mFh7bOdW8+Wi7SFGCuBqpt2+CMOBJj8g+PeK7Sqt7yDf1/vytyYLAc7Q\npvydj4jHT0fNEE9Q1lyYZSlDayRfskSH0FTxmSresYhVeIGs7pLGS/neoXBo\nye9L\r\n=vqrp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIxStFLfOlrjRTSI6PstqzUtnvAg7UAdorJGN9/uql+QIgdXzja2TPIxEobeobJlmnyplszh8efsMGBnkQEnLJCPo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.4_1588089639603_0.2902282817313777"},"_hasShrinkwrap":false},"1.16.0-alpha.1":{"name":"@xdn/core","version":"1.16.0-alpha.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.0-alpha.1","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-zmBCOQKv8fhBwexXQwU2c2ZhLAMTRb5tS/c1J91oRFSLE09j7nY3EaRpRmIzvNFbpO8WzFPzKk5bZN8hbU71qQ==","shasum":"cd6357984d8f95eb3ef41f70491c49e222c08ec0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.0-alpha.1.tgz","fileCount":117,"unpackedSize":470007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqKFkCRA9TVsSAnZWagAAH/UP/2mahY5NlVLpFzz5bvd2\ne7rDLjq2xHHp2kynd4CghE9JAXVVlyPBu9XeAZb2Y2VpZ+zWDG9DvYyOl4fa\nqLL0qvVMBzukSNexv0HA+cfFdh1Lc2Pou1QJBPUHFeUryh4FRVEgbyH0NGYr\njNw44yBWDSIjNWPTXjUG3rbKHrKVjKjPdzJKfGY0R0cPp05/MMw4CiOKivkK\nN6AP4jCWPtNEiNPe/xKhsLe1We6OU2BXNx74jEinUGKSCL06U1F2v/MOyNg1\nCvj5cjK3yfLP412M4bhk7eyrJznvvj6cMBRGvw3+Xt/rJJg4gqDaviChrf3V\nIuOPuZqFmTo+1lnS/omJBLi5kzBHZhwXt+FFT6jZV0EV9HqddtHh6YfR2NEL\n0vPGwBr5HM6WMlNzTXsO2iIXS+v9lQRZMDpgAF4XSherNd2bJDey9G5Zcnie\nrSaCZ00vvA2Y21cR8oFCGaUZZxhcYL1VXsjF/lW/QYzQtuWwcbBLM3Fpmqvg\nDH+q/j0qXGNNGMiay31J7zEAurJ4Uji7Q821tVIBck9gn6LvwYiYMNSbJraK\nUsDcgIhL2q14jc5tmx4QNfwdPbhIbpgyzmKWsykkNuGW68xi49EE9qs4TZ9m\n3qYT3eZPsD4w17uhjgOr4UGgHngW9CNSC3O8wFBG6TT+zpDc3/NSXfoT6A17\nFqGe\r\n=dnZi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsiP/89xqlYrtu/3Bm5MKJjMK9VNrvHQ08r1Jwoc1a0QIgAO8Lf0ffMmHDywL0wa46SJ48Y7KnWguaxd0tfRoI26Q="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.0-alpha.1_1588109667938_0.1605878490073367"},"_hasShrinkwrap":false},"1.16.0-alpha.2":{"name":"@xdn/core","version":"1.16.0-alpha.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.0-alpha.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-v+g8G39FkHiqR8jSJMVUCj6h+t4i5/xBfIFQY55mVtYyI7Vi0lqYsqY4+J6Pz6WPh/vLfdfXAjkNviD+nwsBqg==","shasum":"50fbf2ca69d666a5a696357336b5c4613a28eee2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.0-alpha.2.tgz","fileCount":117,"unpackedSize":470007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqe9fCRA9TVsSAnZWagAARy4P/0UwPzIqXc29F0cYIM5d\nx2xVhFAkwNF7tFPLLL5eTlJrneou33xPyuqT0UM6JIjL2EkpRa59BLCPTrEU\neioASOM+wGG+BU5VS0gF6GphhNkQclKokeqpr6acG2qFKQCHHRzSQ7ZmrF6Z\nf417y5BpedPV7ux6MiusJWpTUw/iofF+93M9HyN4jrigYxz1JJHv/rysGTws\nP4fW31G4dg6hChDgg0vtc82DfTfH+JLBH/wzE91S54CUnzcO3McveefaZEzA\n1MzjxD7oS2WADKyH8KA4rFF9W2+euSs28YTqg6QbEGwbaWeSrhUfz6daE9g3\nW02Www9AjNqlg8rC6GaNI2rb7fx4IlI931xqVLuRvmGG8WQl3NE4rNfaCh0/\nSDMv7QP7S4JamPQZRm5tpvUXYvrEE8Z/8Mp+qBL82pUxKLo+ZLNcd2FgXEU6\nuT+Kwg94a6F3y2za6cnCYhqXi0D3KgnNvJyv4sb/chReGt0fujMwCNPn2sXg\nhc7KzpB7+YZ/+Gnux5iuE71d2leIWjdmdQ+AI5uILsATOVYCDuyg1lHj+Pni\nVa9kiOdF0bo7c2+jHg/17SYlQ2h265ezlFbcjTGQKoBZxqL+LiKM2e+drLip\nab/G208O4T71dGXk5YVsC/66/OBfXSYUQBeVn9aqjQyYrzSA0npyFd/qkwL4\nGL/8\r\n=FsZ+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBgNXelBMt0XjVI2XwINVDLeWC8lUoXMXL1FGVfgoFlGAiA0rKmpyBFVh32o+IKFnP8L2mvNYv40aGjByZWK+18ZRA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.0-alpha.2_1588195167192_0.5049179195634341"},"_hasShrinkwrap":false},"1.16.0-next-1588248560-a5ae7aba.0":{"name":"@xdn/core","version":"1.16.0-next-1588248560-a5ae7aba.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.0-next-1588248560-a5ae7aba.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Som8FKInYakY8VDZ8JC/QdZkhXtTV4IIWtS7dufBX84ta5tTo9J536wxkwxxYNauKjBVwNEdV414Vc1mObWSrA==","shasum":"d4336fc3dd30f8777898511cb92ea48ce5f7b049","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.0-next-1588248560-a5ae7aba.0.tgz","fileCount":117,"unpackedSize":470045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqsAmCRA9TVsSAnZWagAAjfwP/RlkAAUoXZ5pKf+MLnyK\nNP4BJ1AvxPTo/bQdKnPcl35s6CT5bQsTY3paj8+IcCqiAm0o179agspF6g3D\nVUeEWkO94k2dwYoK/oLQkGLeKVzlRHTwMIzwSiMR3LjvZX/YYoxtMKqog76P\nxdfvBBtwZ2BolosLbuEEO7p/CgYwkypsrFJmw4Hyjrxv62joWHl37AompV/9\nHGtucehYY3M1n5I/1DF3+UqLVI0sjXAGZqphJwRneBbAq/SxM59otEoCvQdo\nV4JV7h1FgLalcfWk/qELCya0SZHOFNRTqExzk2iQvgGmZP1tDsqEHhWLsNQZ\nCV22YIoeviSshhu/NEeAjS/S5Tu7+TfVcbHXfQWcAwMYrZ851Qpm8x+FFDdK\nK9Li7IGCFuIbJfsjrBcaSLYAxdK74sPkgY6zXqGbOw7ITWp+E8xaRAcOX+wd\nsvJfBtclm4lNf/hHCVXRCC5Ls0XNwrn0zXfTWGQeFnWFpbKCCeyiiQ+qfYhR\nZl8WEHuU0JZ6hKkbP0l4+JfVvucPgwMcV93oATHg9d7LHf1mHwTIshWlf46x\nC92TDkliBgBeGH27+lGgMc0t1UsL1lEpFGXG7R25QE3zXMlcsDUC1n85ybrY\nYUo0GdFOy4T04TT1LzFM2Aro4cYnMoyXK3wmx/KZw50dAHYYNWXKDErtThAw\nlLEQ\r\n=cEe4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDat0roeXVQ6Y+aYz1mO4HarCLR7a16afOm0xdCFl10AQIgQ2KAeAHwUaMyktmuKFXdCrRak9PDs8/88V7la3iZT8A="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.0-next-1588248560-a5ae7aba.0_1588248614479_0.5795499536819131"},"_hasShrinkwrap":false},"1.15.1-next-1588257704-e505d92b.0":{"name":"@xdn/core","version":"1.15.1-next-1588257704-e505d92b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.1-next-1588257704-e505d92b.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Z5459Vc/0yfd5Ow2Yc47RK550PBJpH5n1qlg8PCRD68SMe4Q9sHQU6cYUo6DTQC1JXXfe8thutbrK+FZsAYqTQ==","shasum":"6cff01958a6e0eb54c51f14e5a6c09915444f8c0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.1-next-1588257704-e505d92b.0.tgz","fileCount":115,"unpackedSize":457856,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJequPhCRA9TVsSAnZWagAA7ugP/1U3sjVAct006wJMFdOh\nycG9zlkriGXoiHxs0whxkRo+h1Y1+rMzzNGXCdwOhb/4yrXdlomMTkArieav\n4gAH+pXBDgDRaastdOOCgl2JUf+yx7HDQdpA20Yg6Mi8Au80xGwatBac1Osc\nNiIFfbIT9zBFbPWdeoZNEa24HDa02zbz7LvH5aTRuHThILja+Tehpc7ES3PP\nhmfSulaVtskEBWYt/WYFN8DJCp2P9FHFlOQO3Wnw3HlaCWoRBJm4WhAZn+n1\nrbKvGneRmlBJc4ZXtG5vOwLRCC9nkXNQNCfOCxLvLzi+QfS66a3ISjeV1bFZ\nCHEz/TA3efUdfi3aUYSulY1nufcjSQEC/c2ElaRjDICE0rP9iThcrgwuN18u\npdOnxJ5XrK8DlJHUvFP/phc/z2oJRcEHiFa+GPL7E/MNNQIizhRp1PG0Onrx\ntERMUST+cqMC9KN1/E6B9NKjlp2czuLHqvS9Ee/j/rp7JvPW1lKBONM4nXbt\nwGt2PP2+YvNKweHFleX0Bako0zB/wtDBUIKVLR8dVztPmwZbBJCNhoY8epaH\nwbV+dUYW9/86UCfGiz09PQHVYQ2g7RqupoJ7q0mZ7FRBwPu/TxmYPcjvSBf0\n8KgUIiKk3iW6QTUZMhTHULunvwyKziddNxM+SNQzgiE4gU5uUyY7k6AAXEYH\nMbr0\r\n=clfy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0ModRn1EqMQ1fVBvGxm+bXbS7aRgxPFJCjm21X+QY3gIhAIoCjSPNzmuN+M7isf68NBeMJYggNPb/PCeISbPEFkx9"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.1-next-1588257704-e505d92b.0_1588257761398_0.4131115630427502"},"_hasShrinkwrap":false},"1.15.1-next-1588260046-fd645561.0":{"name":"@xdn/core","version":"1.15.1-next-1588260046-fd645561.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.1-next-1588260046-fd645561.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-9yg2a1SPW8QdHj0LAaFeicrjUYiMfm8ENCMVuB3gjEWi+2t0VmqddRhXvTpfNwg5V6HEG0xMglWtZlxPRf/zOg==","shasum":"c091a8cca17be8650afbd78ff22c233f8f37341e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.1-next-1588260046-fd645561.0.tgz","fileCount":115,"unpackedSize":457856,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJequ0ACRA9TVsSAnZWagAAd1wP/iOffE+XNoz+bHZOFF1D\neL1Hf6uBA8zF+VwoDysZ0qupYNMDeHwc+kmbqlNM940rV+g0cYFql1k31yZ+\nPyRZtfuWcxN+p0X4Mxw19Xy3cgk2FBxIrHny55c7F1gcLhstoHAs84OTP1kV\nMdxn3tLxLKbQu7vQMBIkv0Ca1cB49tCVkXizB3TmKNmCVvw1qjs+wT+chURr\nzj0YKyPE0xukSL3PAdoxNGojsyoJGLC3reH4HH2pV+1jIRDOc0b44h2x4lR5\nIY+Nq7F2ZI3KHEKaJ+NA2Zor8oi8RRddCCOQq6+05t+F+7nYzX9Fq+M4wZI5\n5L2BZx47r54anGyqaWGZpjWXI3y6SQuCiL6JgWm2egh917pTti1RHzr0crbo\nYtDsACmw425fnj2f7DZKX64Ndnf6N4nRK89Ow2Qu5/DovZb3FKmjp2L7hlXc\n0H7+aNItt7RCsnmWMdPyFCBPYpLZc53gPcCipGVIhcFswHF9TmcFDtRMfjeM\n3rAkWKjcz/bNIYikDyXUIvsEf4zz7lJW9bX8CPwNXTV3xNRI/zq4l+owQ0Wq\nZoQsb4m/0hLgbYM+8ndEqEEsb9wpwL8D4s3gzbqaoHOy++Zl6M3dORegAN8Q\nJJ1vCZW5Ucv3tjPUBHjnFVowcdealb720g+QnWp+GQm82sIbYCo4nESe6P98\nMx3B\r\n=Gek3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICeFD+Eu4bLy5RhAWhE+v/qRIp1j+dKg925WGY3+KJRiAiEAuDV6BDvH2zHhfLBlZA7+aaHhucJQhYbUU2DTda7nnEY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.1-next-1588260046-fd645561.0_1588260095459_0.016300852861460546"},"_hasShrinkwrap":false},"1.16.0-next-1588260694-b903a29c.0":{"name":"@xdn/core","version":"1.16.0-next-1588260694-b903a29c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.0-next-1588260694-b903a29c.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-nbPntQBv96xRVjN0/mBHDEAmCwGQpM/J24DJoCRRAAx6kj1PEikn3ny8RPQ+4nmGKqBg7d0SvWzn8fzN/1JyKQ==","shasum":"8565acb0e488c92e874f9ecc7405dc757528eb8d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.0-next-1588260694-b903a29c.0.tgz","fileCount":117,"unpackedSize":470045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJequ+GCRA9TVsSAnZWagAAWP8P/1yKqzvfZA8FX0LaFWIz\n8Ar+gtjTp3p+7/McwwLh87Ni7v36kR6RjaIdB+brALqkU6Q6uWoc+dp+cKFa\n2Gj/UBKfMNZ9/VvTpbvxko+5bZ4BVRPF5Hnq/moxhXxEuehdMAt7gC05gOI4\nQDfe+5aZwkKaCeaieSJD+ERY8HLXZGsHLLshNK6DK1ie8MulV5csI/1lMc59\no4NqCbRtANyn6SJag+kwhSvVfEp5/Zo0cFMX0ccwl4D6Z7v03ecHYFl3ctOW\nknODUsffHk0RoAtlb9zT3C9e5yrAIPZu/cIiYH0oOo71tliOte0JNrdyOxMq\nSzrhx2YEnUHv/yVFrLL0nwJfTs83Eh+B5ex0jH7IOTqG9+UGiVJKwAMtktvk\nAG0X6Jkft0ICd+bET430Lov8aMdTCHhABnX1ghEEylJDvl8+3qalo7iWwusB\njYcQGCKFCq42McN22YhnbWzQwvuI1CECenuDRAt0mbiGVo9lM9DB+6p8P+RH\n7kVOx5GXMwXZZeSYC7V1F7esunzs2BtL75xnx3EjO7mkxQZrj/BNuDLPtNyW\nFxQoZgCTsH21GYFOcYvYx+rO/WeDruQvcKCqQriQNbe00nlonA/AHrmPX+pM\nXR133IBolUQmhDqzECPMJGd4Cz5L5Zfggif0297LyyyQ9mR9djHfgPNifBf0\n+6l5\r\n=Zo10\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkmyOXedn00uJ6lPRPe0Vaz/ufu2ddyiI9K5nCFritswIhAI/BZWDZYV6ejDUYvuGLyaEuduXBdsPrPMYOPuoVfOy7"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.0-next-1588260694-b903a29c.0_1588260741945_0.9677918689472709"},"_hasShrinkwrap":false},"1.15.5-next-1588272954-641dd84a.0":{"name":"@xdn/core","version":"1.15.5-next-1588272954-641dd84a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.42.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.15.5-next-1588272954-641dd84a.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-322kYamdCBxZWCXkudpBboYJxzmWqnE1x8dbJ0kbMiSeX98W0eqcUDEAaNRPmX5/CZLAmpYll9Li+8JxweJqBw==","shasum":"ae865cf64c7d4a937d1dac47729efe30ba24b6fc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.15.5-next-1588272954-641dd84a.0.tgz","fileCount":115,"unpackedSize":458471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqx9qCRA9TVsSAnZWagAA2ogP/0IFVduWdywU9Xt+ZICv\nSMH9y6m40KpT4xHv+fY5c1MFNUEagbDv1E3ZVaCMBnUnrH4sYB7E4kSspfY5\nib17AAqEGQws/0bcAN225jsSfo+8+tNwFbyoqqT9JhilVJrqpe7nWU1mNP4s\nOtPfvFZhX3ovbupkOTNnuIyadLqxLNoCfZGon25mp8KmbW+CIDqqI1eWycr3\nHmwJxZvoQ/Dh76baDDdTOu4Y8DsRdk48ErNeEsE4h4L4kxM7in9L502Px0GB\nnHfIAOuQTtVGfyHUDzHQNY7ktRxgHv1nx/34hCZRv53enJZZMwlMauDyM9Gs\nQ//GNp3nP/Lcc+KsHlYX+ECU1rbl0GimplHzfesRBtVR7iMojy/vDHepZf7u\nI52PykibaB7nTBjju9fh8lahQk74JlPlq5UHqzLSKyyVOBC1LvPGpznefgfB\namlhgwpu/QvCE/ptiGUAsZIcGlfeQExmI8t76I3Ij04OIGcxni1w++0/O67W\nJUkwKk4VcWqrZhftEO7MIdGauLGHxD6hKFQsH5iDLZCR5kyOmo2fuSoIaYU/\n3XICpPj5oMntHpm9/b7B+TksFUEj8VMGcqQGaVrtk6gTESF8bpr5XYFM/H53\nqlvmqZzxVWih6WS5KYp62vGnVWr0Q0lKJFOCl/ZDdQmkjvBWNBj5blYLPHnZ\ntAwi\r\n=maPO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQNFteAdN3WIaUYELCvbLjZC/cAHPGRenj8TSYEGwhYwIgI3UIBy/mDDgfAmA7jMWFU5IlMoTD3+UhNX7qEtv+bOk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.15.5-next-1588272954-641dd84a.0_1588273002249_0.29248626160922275"},"_hasShrinkwrap":false},"1.16.1-next-1588273241-075e41aa.0":{"name":"@xdn/core","version":"1.16.1-next-1588273241-075e41aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.1-next-1588273241-075e41aa.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-B9QNKex3GUrV1rYzCBi7BCOwc1LJubwSIU5FsgsRwDmAmRX1laModyqHhT1a4IO3pcbz6UgPTu/uXTa24UGpxA==","shasum":"f816a2ad4e2a9596bd07847a0033f3faae8db8f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.1-next-1588273241-075e41aa.0.tgz","fileCount":119,"unpackedSize":459823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqyCOCRA9TVsSAnZWagAA6XUP/0P7Jk4zRzTrjViU7J5A\nBFFRsefYo4ML04c2Jf5jaqBjSvZiTCxagj3yFFnh2OvK2q3mxP8s1cm6UZRi\n/+p0wqhkPmuixtYoSrSnEfrBXhvaPeGQcyrbj8nZuQ19PeU68yxO/qnmeoE2\nTjH95i12cpAqbW3aV/QXmTi2LnEDTSduhYhCxfjZZHlLbLi49rFfIGl835RR\nPUkzuWwKKodM2CTkwunDGQ95EKkOYj6qbVr+9sulTpqL2SbN9MufwJNyPtjg\nkX48VnpgxopLb+rbKsaGEcwIdka+UcpurVAkl1HDOKivSqxDazGQivBZt5fI\n38BCnaDEc1wzvZzd5OVNGgQ/r4ABSerEUORTd1kXv3O3HHcjI9HLqrLLAjdN\n67DGv3QoBrp1SRg1XyWcscBRpHrm3Vh+Za7nOX2bHU1Lr4DNCFy9Njpa4L/y\nZx5d+YrezSGF403+0tHcRWiydidebHPrWy/GZdS8kuqZGOuxV34CUbnSJSWt\nNACi0kvneG+RPdxv8PVDviPg+bVJs/7l0ojK4CkBN9Lg1CLPDAHDhl+S7FkY\nyBI7HP/G6+cGKeaLlnmUXqvLGgPXD1zwEa7zlebZPtjvgnqgdt4MOZ61F1wQ\ndxanHQQ2/v9SqqWK47f5lJvLzBNH0ROXivDS9b4alG0j4KbCsvHYlEhCxUfA\nm9Rv\r\n=GbzI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC2hFuvgPBk4RENCDZq/0gU9/UpfE5DDy2KGZaPSW4BTAiARHaelvix8eiB8hyocpFbnHkHV0Eug6DN0Yp3eLA41yw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.1-next-1588273241-075e41aa.0_1588273293761_0.49235084682298735"},"_hasShrinkwrap":false},"1.16.0":{"name":"@xdn/core","version":"1.16.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-4zy5XxPPBc+C9gFlN+cAGIZCNbFMUz//QdxiLmyzPhz7CixFKkREv53m18R8h02DMO4Rtt/LZdpIC0egdQAgKw==","shasum":"b17b195e853b886ebde3fb97a514e3d093a701d6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.0.tgz","fileCount":119,"unpackedSize":459769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqyG9CRA9TVsSAnZWagAA5awP/R5PvS1q0VqMJ2Wr5S8X\nTNjCJRxAG5/yv7QvOyFH6hJc147kxh8GwXKBcMC1RVgH/cm/ktjs60RTZjkv\ncdEJOgtSSqvyjXNDZzcYrU+49eg94medqEBaW8DRAIoYhLP4ILqX2kPDIa0L\nAXZSgHqjqvoNH41BoscEvun3QPzMSUnvy/KxOih7wZjNmIEMRv7nR8azXoKu\nYiWjCmjwGmf4yezwcOhQjjWBJduezs15l94NuATVPUCPkBRhovaChQGjcNyZ\nTzP3zJaV7AJH/VEb0yEmQCcWBJWS4jbEyH7sHCgEAO3un72IGojCi9IwRWC7\n0ImSy2+DOs9UTP+HbJvdgz9S00e5TxW6W7ZOgga4gGLMp/4MFWT3gSKz4/xr\n0/Hki0GAMXslP2IL8hpzY5VOJXg53T25lnwjYXu0cEKfs5JNLUWNXGkm11X8\nI2keccvvf9eQSRq6yBv1Jj02xo0+K+FvRAi7s2mUv2IQQcslapEMal/PfKjA\nPeT+fdQPvY9FLUzGfK1g59fyYTNMM9To0kNRcki1dZLg5raczTgaiytLC063\nkWwmSp0PSK0oMyRBi+XrNTuFmJ4j6nba1LZwBhRwbjcJmpc6tlnc3kVmWEv2\nXehE59meXQ6wvIWc1XhPgOn163igZH158hlW6eFdiV13n6jSn07ji0aHIp9u\nULV7\r\n=ThIv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAD26d+Q/iNkZaZQO78lBlRxob7jbSvr1NK9ShHWPrHOAiEA88QVycayXIqsn1+XIctK9CtrwUbEq8OYhjH3lvjOeXI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.0_1588273597440_0.9858411433831744"},"_hasShrinkwrap":false},"1.16.2-next-1588354229-ed743abe.0":{"name":"@xdn/core","version":"1.16.2-next-1588354229-ed743abe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.2-next-1588354229-ed743abe.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-FSl3MR5yqnPRPZJIEIhsSbPULvRfs6AM+NnHFK5DtErdOJ3IpgfmyvP0Jk08EBodmpjEXGAOHmovqk6yDNwj9A==","shasum":"c3a750d25ed7db2196fa29a218190cb7e7a9b104","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.2-next-1588354229-ed743abe.0.tgz","fileCount":119,"unpackedSize":459823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerFzwCRA9TVsSAnZWagAAIOQP/1Tq4Eg2rgtrMGXV4KTF\n9IL6uD4OjPc0uHwWcMvVkBoJFzi2ibGomcqqFwlDRgX1L+u6tUet9KEr2Dkm\n3NiwXfHyvpcLRynOAa1lhGeloKClZ01xgTZV0WEj7/7EsghJvP6B60zJ1Jri\n+Ha2paqsTsAO1P2a0XrR4elD+lg4Qh4ZZ4CMDR6Un2+lWrPhPnyqQyCTYaur\nmzXovbC1s3fSn5uEsasN6JA5sgtbtpGfQ+4Lk7wymiFPyxXK3x1qIYPsMLkL\n36RJjqtQPIIYF3HzYOHAW9uKOddOSu5ECVia0YFaT1ZGfpm2alHSQhDtFoJo\noVc1hXIGRYaNgXZKSSLUOdy0vWjhno2NVDgqQhA8FaFHnZeBimT7T4Grh99Q\n3DdHziJBrb6Q3bgQEKyScnqJgvwpn2EqKPw6rYLdLiORV6ntSfApwYJlsRyE\nv1ruZHafVbJXsBv/3Nyof7FnPt24kdGMuIRCWU0j2txPRqtQ+HOnPb1QgDxP\n9Cjq1N3P3XDxIPo2sO8ZoR3s2xCdZv5nRkkSSEi/xPc+bimyljE1PJZhWx0k\n1zi0CKSBoaUtOvdh7EZ43kYeGPd3/YUlAxI13OJL0mH9VX/OWncwp2lHT0eN\n01iW3LXqBjwrg7J+frx+uBal53Mm6k2FRhpj5oG/TOjPJdAXnGLyAv28H3T3\nUsGT\r\n=xvw3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCidVr9trJ3T2SOK/9pjrvd4ONtH/HeNnTQoAiCDREeRgIhAJlBkH3gnnXkd/3DAMxg3DQe4qXqWR4gLPQjRUBPbW7A"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.2-next-1588354229-ed743abe.0_1588354288073_0.659121450994451"},"_hasShrinkwrap":false},"1.16.1":{"name":"@xdn/core","version":"1.16.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.1","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-m49HZW08rD+DUzRudYFxNThq8PMzjMR+cKnzcxDkiFxbqkjfxgt5rfZ5zIYWLBvPME1Y3YvbMGInPMinZsYbcQ==","shasum":"ef1ce4310070642b2e2e830732eaf0821a6bb4b5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.1.tgz","fileCount":119,"unpackedSize":459769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerF01CRA9TVsSAnZWagAAHa4P/iqDnb00vZ2QS9sRJ/Hl\nCDRSySr6pRW5SLfJUZ1TPC7t/aQobRLpMf484C89wHdRTdWdFkU4rGrD9mKi\nE/nwMGK8gFbmIg1lsQ2SrV6vOZyXRj1ZuxyHNxPQKg+0RJHXYTCwM1sCPp3d\nRbsjiDwCjW5tZkWpHtE0U3UUmkk8p3qNPJ884TpJHo1trfMjZ5t8SJF9OoWL\nvRg5vc0NTPScOtSuhFHTSDDxdG1sVDDAjwkxpc6i7rtnGTNi8ULiBvCRi1gm\nZzzUqt/QOC9JexGg6ntm/RZ8NHJuyLlr3RYRKaJ5GA7UvnBIbwNgkvbnW5zb\nmomAC5ZsTQwHkZeiX0GfQaPZfOpCt+dk4va8OV1M6BiUnIGLAH9bEkH3qdJm\nYtHkybPH3ltmk3/YRyx6h3fxr/rxoiwurt74zOPpg2y0Tw6+wczKyctEvRHv\nOHtg9mTyX93kaFEIu/DdG0o9/YAIOX5XphVLosAeeiXr4xGiWuG5tubOVKOi\nlBcrQE5pPaOmaDmTIUvpyubJL39fgXcM++JgV0QlaPPe7SGqBDTfF0UFdYAI\nqFw2Mo7hkpx4vBy88Vorf2I9EY1HBmWGQwklAthiRBACG/TmWVIF5/GhlmC5\nFoDtxCEaPCvbEnwYVGgjA2eyUdphDBUu4Y/zX3VZSK5oVjvQw16rdFokRfcj\nQ3er\r\n=aUW0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCD5yxWpBW3MeeVYxkGKrKUZxDbNub6IxZahiAkt/rRwIhAIHXM5DuqBKI3DY8rgftEf3dZ7PKUeldlH1guwo1MZZe"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.1_1588354357056_0.9353634839446063"},"_hasShrinkwrap":false},"1.16.3-next-1588356827-cf7323c9.0":{"name":"@xdn/core","version":"1.16.3-next-1588356827-cf7323c9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.3-next-1588356827-cf7323c9.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Eni12l3+xON8J8ET0qqMUSWLqUWemFXiGD5U7Atb5LbxgV6d0tWSwv/lM3tCflNqzWWlr1tJ/brsrAPxPMW03w==","shasum":"ba402b3c039a6a3b529d8230f388fd50244b9b9d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.3-next-1588356827-cf7323c9.0.tgz","fileCount":119,"unpackedSize":459823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerGcQCRA9TVsSAnZWagAA8OMP/3EHHPuPANttfGfC2nE8\nsXDN1GnFZdvoPuCQ33G7mNmIY4LerPjzLeOSqGGWjceDSIvhtxQVEdCVHVva\n4VXlOwb95HRPruBuxnhWpu1yi0nZUjIJ46djIB0Tycn+UJEVSEHH/0pnRByV\ng85O0uWTt1zs03diTTVQwEc44w1+22Nq57Mp2KxVLEV7vUjtOKfrZSTOUnXw\njVC/ArSlIYrval6kTSWK0MYCjiAlVpayYfHhCwUclkAJbJbgiY2jAuxBiPXe\nUynM2OVEUPa2yBAVQk87X6QTzRoMjUaCrdMMJcHXlmBzoM2O1HduA4BUn1ZG\nBylNcuZ50A5aM4jGlMMLaDUSVrSolkaTGsNeUcEzWXXt2okCN0cafw3QKEVa\nUuKOLQIhq6vA2Eb/567PYmyWJ0mr++Wb0LugThzDIhLV4xcixONeOWHsxxny\ni+x7R8DmUyReJmJiJQxLNsLugIL/aYU1gKb+Lbbz8KKaT/K7fk6bEqmDwE0r\nE5IE/obdnPz6cjuB3KlsiSUxLKGeTrvm4tJDIjbxvkmDuM8aaHOp7yCE4URw\nQCxn7/lKbVF1gP/EJNG8tZESysQOehsI9H2oErp0xtHpEW2j9ZlFp3l0Z/Nl\nTQbQJPlFQLeL0qTATMgpjl62Lzss6aP3pHU6R8puYXULqBBsqytwhLd1Ybfb\nHeNi\r\n=2qBs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICX2XmZqazVXhrnvxi/Wf7sAciRt7XVInrx1j6Ip2ge5AiEAvgnuLsCXJS8Xry+68xULURbJk5tQdqbb3js1jYfDaBE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.3-next-1588356827-cf7323c9.0_1588356879736_0.9414714472416703"},"_hasShrinkwrap":false},"1.16.2":{"name":"@xdn/core","version":"1.16.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-RMV8EP446ZpXSK9Vwfvpl/EZDIkUKXKW5Yw2yFRPdhh8NjVfN01Lt0OLlsQIi7B2d56097tBIGusfs+hWNpy2g==","shasum":"9bedccdb981624836d44f5bbfa4254320863eb32","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.2.tgz","fileCount":119,"unpackedSize":459769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerGicCRA9TVsSAnZWagAAzLQQAJu4/OeFQ5sfOpTw93AK\nhvaxVz6GY6EIjAqOEPYhs3ohQ44GZGM0NFX7XMpEXrLaUdELscEVo7fGBvi+\n4l394GrcEfRFuQzhdtFTlHvdtNoKYkug942jn0ZBc0Z8VGSlXKr22PBXLoCU\nhzDbbtlvo7aO2iLipRbq0mojW5r0TpARiA93p5rNT6g5IpnILfcWygUIwybg\n63PB5CM/o6ER2xyZJLmQtlVScfRJwV5qitq/ReUKjo1t1oawkPeGxH0Dknar\nlJqJA73CjQDcWq4rO2jNCRmljBkWlAYs7wHn4fx8W8k8dvrjeC1/xhGDFh0U\naMaEOFEvA1gvKdqps5cybPbVSHOjsWlSvHQXEt2y0cZGOKWKPsl0GAuN3qa5\nwOKnPActLpL0/1OGUte7PK7Y2zGP0XXzryolQHmnEqrqr75g70Snz3rOI3kE\nTeTM7j8+R22ppv7wyeyZ9gYbk1BBvwcb1pn/uMxse3ydxdSg6Sugw8/I/01s\nCNt/+thvl422C4xCONszQXlGtKPkqXrLIbdcyqNRj53v1xvhP1qZyb+0WAug\nAmczx3LUiUj0P2jqhP6B29PWm0agDf3g2Tz9+nm2CsCAMGGSTD6ZsM50RJqq\nNY4H7KbxEXUeB+EW/shIbMQrAGIj03eCxvCYBwcpG1o05p1Idx/f1wUsguLQ\nOT44\r\n=2cbv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDb+oHOXMqUjjU6MEkdqxUmP2xIynRv9fkrhYZrmXMVwIgYeRBVWFCUzP3UcbbO9mtt1VNah7mx7k7fuzzUEaSjHU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.2_1588357276128_0.9627114670067891"},"_hasShrinkwrap":false},"1.16.4-next-1588589908-9c567ddf.0":{"name":"@xdn/core","version":"1.16.4-next-1588589908-9c567ddf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.4-next-1588589908-9c567ddf.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-c4g/3eLdE2+/rRGJMwLplLzPRcHJAsFD+/lMdfds63ILJxo0176X2wnflRt6aKmuiyKcN1TuFGAsghi5BtvlhA==","shasum":"1612e029c9b6d5a493f06d345cd0fc1c08cf924b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.4-next-1588589908-9c567ddf.0.tgz","fileCount":119,"unpackedSize":459980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJer/WDCRA9TVsSAnZWagAAibMQAJI0x6FuVgP4mHmr4PH7\ngKPwVpGwPgN6Y66/5K/Br0Xwt5XCegv+IOqOLEFWrhBBT265qKG7pk2DCZtg\nm0P6fYLuRWm7hpj0xSwgFKk+a1j5l082f4ddsFNtbYDkgJY7YqZeDMgGICWd\nPp6azKdE2gUjF6XaF+1k7/RPzCDWIOAAR5+Q0rk36HH7LXxhWQ5sY39g86/V\nRJrHemqPrGcgOponbsXlGnbkF75A2Xvdv2tTR8jU+wjM0fbyfoQz3aCpeUH+\n/lYUlKHoCQtqSqejzflq0gO1ggLiOdJcAHxMD/wS8zKwuwj6TLLu9PGM+eF6\nLzTIUT0ftgT/MsCl9+fcYQd/cmkCZ54nBL66HMAA1WYke93D4Gv6xEBT5BAA\nj5hrK88A1VeByd5WDrZt6CQPNNV9vJpycKKfPvY/mch9yzzFCjOTjAiUeG6M\nPqa3Tz50mOxftJp7oXGwNX45k+tgpfuE2BguRHx7GuXYM64ZA+IjFWxO5BMy\nG7b8skdoUUZ83Xs640vMdyxIiwY3CMusNwslzNqx4xaljrQokaBZFl5+o2hu\nPMRsem908UrjAUNrZbmv5oT5C74ra/03wdHV3kWZuDWez5/S9mpPYRO7eCfS\nfgnt91Wgw82sntWxfJltNQIYszoSwS5trUeuyD+pauUG2HC4Km30mnwbVg3Q\nniIu\r\n=exat\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDggIBkAgfZku1VsITg7RuZogf57um9FUbDashkx0/quAiAcqtlk543bqHXiSC/eNyBUytM2yhh1FPzFi4wgcuAtPA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.4-next-1588589908-9c567ddf.0_1588589955352_0.33759508999578647"},"_hasShrinkwrap":false},"1.16.3":{"name":"@xdn/core","version":"1.16.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.3","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-7GquAu4UGDt5xwJkS5eqQ3UGdpuC4g2Sc9mrBTelKSA0lA4iHqMtkD5gOXLAARBG7NMMbDTEl6II04RdI/34uA==","shasum":"24b694a9a3ea7b6e65203f7b310143f2242ddd44","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.3.tgz","fileCount":119,"unpackedSize":459926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJer/seCRA9TVsSAnZWagAAAs8QAJAylbI6O799KVcVeyv6\n1NtLL/Hb5cLIHxXfkHchXUoBbFWab93rN3ZJDZA+uIrZ6nXkYCklyNTtVdu7\ntewYjiuj6GU6JEWCSKXDecHjUY9YwU0SbW2cwTbN0z40VZ0MIjcy4PQg/bSq\nr7SrCr69YDhA66ZMOGgKwrHbgmsxa6wzfAESoOxLmstpXyA6L+9DBeYiJqcr\ngDUfxp3Fg0dC5Idn4dqD8tRGP78TFEPiYfcl7s8xIATWiIGjipDXCNBqSxfz\nh79V4Z6Lj/4zNP9EecshwiVw7vWL/V2RXfVwvgTx41k5Epq2a8DNfYqPQCD4\njrzzj0BYk5HBHvY5FH+melncqNC3MHdz3ygYN5iKB7BdUn1wTzgXRsXP1cjg\nzR+idNC/AJsVIMIujunKvfItuTN+GH+bdSC5UidQwPlINRqNEG0+b/VoHv/B\nsgdw0fAVXN46JaPDqjq4bz7fYd0pHKaH6noWEcBOny0L/PcEJ35CAVwfGwyh\n5AlZh16YP8qN5sWa4DppY7RZxu1ZvYDDjrQqer5/ZCqzqBwwGk+p2a73wdYL\ndAjTmJdKvX2CIPP8kGLrXBgYfLZTK2YDpJNxSY/b9LUkVbNLW4kd2XrPZHG0\nz+QW5zQoN9YcUz3/XMsm6wwBbbf93YzW+EwPtM6KjhqpaXvSni0VZU4sFfOy\nIx8m\r\n=A1NE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRrCqkFesNxDDF8g35nw+fLd0CfLIfIfo8jRm4R2+yOQIgdbgWv6O4GheY46xDpkDqcbl36Xp097MaO5NoVSVG950="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.3_1588591390321_0.5344998600960049"},"_hasShrinkwrap":false},"1.16.4-next-1588592046-bc6a9bbc.0":{"name":"@xdn/core","version":"1.16.4-next-1588592046-bc6a9bbc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.4-next-1588592046-bc6a9bbc.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-EGHKFsks1rPMcsgD8wASg04lYn+nytG/uMVBxg6+0o9vQOPrO8TTETF9pKutClDXU79k6uJj16fCmsgl621ZWA==","shasum":"87a62666d9d0d85f88d7a6cec8cbe8b615391951","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.4-next-1588592046-bc6a9bbc.0.tgz","fileCount":119,"unpackedSize":459980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJer/3bCRA9TVsSAnZWagAAR6oP/jE7lVHiIuTnbGeYWpB8\nyt6OQQvDZkQmwBVu1lk0fN8WbhQOoHEr51qg65mrQjNNQ7+Xm/sSOOOPezSL\nsC18+4RYkf8xmYv/hqYg/yXYxoxbJ1U9odElOiUolqtp18zvjAdp6lmkjf6f\nKvQQySN5VaVcFtCLLsJ9YS1Skn2/48j5JLVSIxzG4g3OLDgeXiO2kvezx73Y\nawHYa5LQa4IsZgaWkglsv3vJyPOQhBA6j/rtnujMkQWxcbRBe2332CO3q8r0\nBCKj4K5j+yIoiV4AC4+fNacda7QPyA3xPa+GCyyQb2sL0BV+gigh3/A14b0n\ndD1KLpS4STslEkGj+ACKhlSUTZb8I9c678Pe2GW1WHf011pnPdWPSwM1fovO\nczYE30yaFZ9Ru72YxHlU8EOVfAPYtLv0a2RTYDdpRFuILsi0abd4VswAoPfU\nxkQldaThVVlCiPDI5xCNgcVzKnqBPn3kqXIRpzM7Lgq3VpMJP4H5vWyoo1av\n9X2UkRdT/IxVZCDMI9I1V7Xbpvur5DvaGrdhH1R2ds0w2howpoBvA98lx6Jq\n/oC9Z8dSL0QaY2BD7T7CfYHQcd0RSw1jRINaImwv5wmcf8sua+S6E+JqkGh3\nDhbLPyGAFLK5s+KXH9tC3xItWrDgQ+5b/yBOPTGj0EN2F0WZoTLBeAnU6Htm\nkGqc\r\n=rMT9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZvE1CBdIwCYSzAK2p0AoFFbGMcveRd3gJew/rbrbCuwIhAIX4My2G9Z79T6GKV85ro4E0tqfm+XiI1BC+S81Drh0J"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.4-next-1588592046-bc6a9bbc.0_1588592090960_0.6676904934610373"},"_hasShrinkwrap":false},"1.16.4-next-1588593653-106e99c7.0":{"name":"@xdn/core","version":"1.16.4-next-1588593653-106e99c7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.4-next-1588593653-106e99c7.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Ecr7r6J7AB6ucajUo+Q5NJr7m5Xi38EZgL3OEwXgxGEXoQzipGMduYZIrcDL+pw8y4nXVUivYetxSiw1+2VnXA==","shasum":"ab043d7f5a127262992711028489325b696428ff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.4-next-1588593653-106e99c7.0.tgz","fileCount":119,"unpackedSize":459980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesAQjCRA9TVsSAnZWagAARkUP/3hTMBgpSUobMRyPXmLr\nbrhBOdtvW8SbArMsmFDgPDebbiBoykUMTjGoF+Yjw2iVsNwRHwvFjivrCYiX\nelOGmWJa5LcaSHmq9utHht5WL21uPsfU6WZSnXXR6pfgOt7ALbQIwPVH3/OZ\n57Et4TPh28EiIUZ00f1iu0b+Fsb2/cWd7raUgfQkpd41WPSvzJ21h+ut0yGO\nWQsv9XXreh5Q9liPrF8cFi/iNViFZrvngmw706cJ4qRBQCy4phpv5gRw3TOh\n8Lsg/apAJnTkwYClLlUmT29txO2gNwgVRG8nwIISXMKPCfUcH2sikY0Xt6y4\nyQBFO0ZrFoc7gioX7jeytISeJmykXNVcrKRBFaNQfBMWzuVEggXTdO+1C7iD\nDzMhsHKidGEDv4UWElJwcGKpC1ON6o81nDtc401ZZhQqCDdJ0UYitgm6GFoh\nASKDFOH9W8j9dJCkPq3LY4+/bdBYFbKl70PWLjFgBsMkLMzjr8Ji+CBwudEL\nWjewkBq/O1JCy/3LykNYMUoV1MhhrvMCJ19Uv51QEmGy/+sQGr6V+9EIjc1n\n/vUdmz0RfSqAZ6aYNaPBrd2P3FB+X/bEPtDGAJc0atPHUMkVoVvLH6/3rIVA\nGHqJ1y1FhUqzo+CoImqgoJaPVl8pcT/6VnIiTfTDudDi2fQILFIGJtPDGJeO\nIann\r\n=mNE6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBNcDJacl7TcH501Ue9DTW7rE8+LQTWLKUsM67d84N4tAiEA/5RYYuPZpEeyyoo74LiJWsDkPDxBSwlSdJ6RO59svuk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.4-next-1588593653-106e99c7.0_1588593699208_0.08715266451380232"},"_hasShrinkwrap":false},"1.16.4-next-1588593807-3e0cf026.0":{"name":"@xdn/core","version":"1.16.4-next-1588593807-3e0cf026.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.4-next-1588593807-3e0cf026.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-PU/jafrtPs2dVLYo+itCOBRzgkiqJSPApCT/zcTNXrnJuT96wvCbE2qDHYRaDyMgQO45pP5NKG7AohU6KagrEA==","shasum":"ae964527915183686a1fbbb11a52ce34e60f35c6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.4-next-1588593807-3e0cf026.0.tgz","fileCount":119,"unpackedSize":459980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesATCCRA9TVsSAnZWagAAaesP/1YcAejcsDMIVc6Duk/c\nPJV69JLXw3+k9wGfJ4Lu8U/TMVp50FP47EnlbwZmfmcaRgX5Yw9d5aBKm8rN\nqWQ5X9ONPj6S1QasW3sn4oQtlGZkACPB4kYGWsRgf+SiZ6yFNZn5kTNURn8L\n21QABxwVjJfiYxfiS76xDlM0dbvPb1hW0kop/nMbqhrsm6ujqzM/mhCILMK2\nMS+GB9gf6cifzesmiRCX2EVBxJV6fxQ5pH8ti1q5spfbxnPEp3MC1mU4gm3k\nuzZRgKpeVpC1uE2lLax+vPGcuJzyEWWVpntlu3EibGfqkYlWXwjD9b0RmKOc\no8H7MwQsvf2g/gBCGVdexFF4L0YzcVuTDf+qdY70oqlROMTMhzt4FfmsraQY\nZq7vnFPcNPF9ynzerOnH0bF+pVp4lN1TKsQ3n8cm/H22YFO+v35abMrrY6Fj\n/O7cUjapDk3d3MqAAtveRFc3fOWPs5az4vn9RWsIT+KCP0LMjnKCjsm1iR7k\n2UI0rnyfJzhsgOX7Ku3avkmW0t44hupeiu9kP82UHlN7Vunp2Sp9K5bGcIQB\nhCwcwygeuI697F85uqfaHYSxICWlUv4O08Ev3mZ4gkEBIijJ9tGQeV86WO0P\nmGCqDAbbxsaln0es2x8GEZjiX84ARnMgvZiQ6tpnbdZNyvZErZi7icjGFU+M\n4Q9M\r\n=ggAh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICzC6TB4RLROEXQxbLGSSRXFQW0lGtz9XCe0eVUBcdEdAiEAwmFlKmNe7S1mdyJuBv4vXB45/3Hynb8LokEYRd6eD6c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.4-next-1588593807-3e0cf026.0_1588593857743_0.7330259398091277"},"_hasShrinkwrap":false},"1.16.4-next-1588594276-c5d635f2.0":{"name":"@xdn/core","version":"1.16.4-next-1588594276-c5d635f2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.4-next-1588594276-c5d635f2.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-XzDb9OX+N18uKMw6DtIiddTi18RTcqVm4HmA4AlpYQh2zWNQjNYS74fM2u+Q+fHHeD2HFS6sIaGu0eNdADdC8g==","shasum":"9394a811965e5f22de5f2b0c3ee097644ff537fa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.4-next-1588594276-c5d635f2.0.tgz","fileCount":119,"unpackedSize":459980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesAadCRA9TVsSAnZWagAASqIQAIf/qXe5uh4lPErqATwW\n3q/BH00rk/HpXFoZ17IoQt2IsXLYOfFE5XBHlVK1YAArucXK3jODo50PbXJx\nTvsBrYLiUMf7tq+zTzlzpekeDBS+DuVgwByV4sCqXgyfNhmxtRnzIK2nJfPS\nrU35uHa/8NYBju1XOFXvt1y9AzRbkDY4aNZLSaZCd6htBjJsR02icLQS7ISg\nrWjVdSbNgeq6IhzMBz7T+BPakiiAgElJWoVxy65EDCcM2qChR/PWDNdGfcTt\nkA2sj9D+RuWrqMk4FGIAJY5LJnJ+1+jsEvxFzPs+iQMpYTp9sozwUSWGI8zF\n2liuGPJ6k4mnDBXXmKHT0ThTFGcHvuM1im5LDg3D5/LKHf0Ba7c6EesNy+92\n0Bm7gJBkU7ZyvIOLpVYrePMIocnqBg47k3KrIcfRPnMpMmYhPAiFP5M4s7NE\nprUlsYfuLilcTYaN/jFwvbEJfZLY5MRGBT6cgeCKefrfqn7eZO/ew1mq5nDK\nOdsmV4NLjfeHOTFsUfTTYSIwPvAFV4talArwb6TUtMQLZiKudL06tehy0qs/\nYdf04bUWI0Rr7gBUOaTnOxqhoWasm6/Ne0qjr5PAglZ4jclndNGVzQxxSvjF\nVHjm1fTVmy92JKP90HHNCssmjqFdCeTa2x+uRo10/gcmbUCTELKc8oRLvEfA\nNIbg\r\n=foca\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDH3vtu0Q5LGXkUCa0p5DKyr6KLtiiNwR7rI75M9w8ToQIgP5pnVPiq1ZgqqXk5/kZ1Si7sC9ZMBjQ/HtnyiqOBQdo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.4-next-1588594276-c5d635f2.0_1588594332856_0.10831665948629787"},"_hasShrinkwrap":false},"1.16.5-next-1588598770-fdbba1d7.0":{"name":"@xdn/core","version":"1.16.5-next-1588598770-fdbba1d7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.5-next-1588598770-fdbba1d7.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-U/E/HGb5ZYY4+nPXtyUIJvqKfev1lk/aGdFKm9AqIkoXgJWOEaP3b2H99Hw6ipPB/xX0rc5El/zgkbYvE0iYpw==","shasum":"985a22f99394c4bded8a4e8cab5c9460228790ef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.5-next-1588598770-fdbba1d7.0.tgz","fileCount":119,"unpackedSize":459980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesBgjCRA9TVsSAnZWagAAXhQP/3rq9k/f0C6NfJTgHZN0\nejy7bs13ip7tdBfImL46dJxPQT6HmN1vMb8VLyyYEECfPh7R7MwhFbd9GVTp\not79CkL9wx2bONtQqvaKbTqmri7h8sFAmErq/+99w3v77tzjxq1sBJkHDIM6\n/29qlRrWanVU/hlmrqErDoXk5yaknbB8r+AeWsEyD5HCdm00l7DLQHQ7KLVQ\nc42uO7RkkIY6vb94nF5382j+GL3Iq7dPafcOFQE8jC/T6MYEeDPC8NvNyfCi\nIfR0h/lUsIn7f2UFqUj9hEnmpc4CWfWiq7A1mP09PZHxb3MJU8u+KTqaSaHD\niqRcJc02jHQfWh2DAkV/BkYWZWSt7ERjeX3nq20OaVwLNae5HvpLK/Oy/AZN\nzEVpQ9TEOpOx3uG53PjIVHlsIXrZuJgq2euJfqQRxXefp0QXVVuNu+WwgUe8\nHRtTKszxKDJGdBJ9+HDtTx0GxyQoBid1g13j58c9dkqL23Nj8+meWun7OyLY\nPWpBJpWhjqP9tbAMWEgn319gHrTaJsjVxhtPrW+ttCp1scU8ydV9M/WYj1cv\nQgCpc2ogttcLYNuVLR1L8bA4KnFvck+844R5qqXVLSOpuRURvutabarKPuUl\nwjZg4iLLkcYs9K0zplsmwK7NL1B5co3y/0gi4mtzj9gV4a9mOEMD0fste7KR\nm9E7\r\n=qPB2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGF9YeOhD+U1gQFe6baN1j3URqsehvysVzHmwrU8w8R5AiEA1UF/s3sbBctoHUsVrm7c3mKuW1gOE1Ju8wlaFDR7Ees="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.5-next-1588598770-fdbba1d7.0_1588598819542_0.046877188145172166"},"_hasShrinkwrap":false},"1.16.4":{"name":"@xdn/core","version":"1.16.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.16.4","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-SGqTB9/Ug93t07ZhlJHSY+8Bm0e0wZl3d6feh8lcpaA+hZnAfrNd8xRinvFFvnhNzxsz10KOEhJEEXP1pJ0uZQ==","shasum":"c1c06b450502be8e688a24c0754defb3e1157ccd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.16.4.tgz","fileCount":119,"unpackedSize":459926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesCUKCRA9TVsSAnZWagAAFB4P/iMm5Xie0kAXSlswSg+R\nMs0T2ohbPK9/HocIOq0YO6BJyvyTlkzxmXRrXsQ9hwF45k/j73/G2MTXvK1X\naZTXeAVNtLpCqqY1h2o2iF0SfNJLN3xr75Kc9yNzrkki8D8FW5VX/84kVOH1\nw9ygRVGWWQj34NdizKwy/JuYCrEdiWuLfjQCQVcDC/hDRqum4HRu9Kb/Cih5\n/rmYsBf4RISqkH7i3jAgx/J9W5cPm+LaPCIu8HPagu+4nk+zK76jNId4//Sr\nJIeg+agiaZvcpuNAtMQy+gYnXDl87lUtwcp7TfniGByBbu3n0No3zI6UwW1n\ny5FkFcBk7V5ObHCqSOsdr2Y6vbOzBfGurCuoPVI3uhN4HYS9zy/KvUgiFD1U\nWX1+G+NaY6aoukowYmyqnQEiuK5zA539y6i3zUhYVnWUYcjND450Dp7qQkta\nvvtDVdMbbaLekos7lJ6Yf9pCQp4aBnmb6S3ANIEe1zchYLMk5aPt2b1F/Zc+\nXsLUiTkCrSzEpvfv2y279Ggp4vLQtWYuVrcL89N6v0C63mPMreO7zcuBqS1+\n6FGWGm3zUjIkmPs/OATJRqcFTSDqw6AIo1uNbDvIKHa9xaTISm/LFiBvpbLt\nJbnCzYNgRVNbyOvbL7aw3WuT37jKdqWYqdW3oQmHDzRHEzY35PLALnkwqBBq\nD45q\r\n=udO/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByWz3QgQdzwW4MX5msQqW7Q+Em3j9K/lNRsQHWpjuW4AiAY+3aVJjpsPERb0CidlycMtJG2cJbw8+yUArlmVeU/aA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.16.4_1588602121828_0.6563993283213638"},"_hasShrinkwrap":false},"1.17.1-next-1588602342-9eead474.0":{"name":"@xdn/core","version":"1.17.1-next-1588602342-9eead474.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.17.1-next-1588602342-9eead474.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-UICn1OZ48CnsyDmGjKxq8oimEmZcaleDDumhgeq7519pNWAg+B5b/njVwCCM9+3juKSJZ389OzJx1d+kmCy+nw==","shasum":"24615a37eb07be355c31c2bb48576ea2b88431f2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.17.1-next-1588602342-9eead474.0.tgz","fileCount":119,"unpackedSize":459982,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesCYcCRA9TVsSAnZWagAALT0P/jnpgioQ+s1oqV8MVI8v\nuayqLzDsQQIfoIulieyVnAb4KjDeLIngOaoaKXzuT7z+qgmnN7PQJ7unGuTy\n/13vtsJmgaxgFb+coIsOOLhYLjzeP3EBWKPlR58pUUmiE3WHXuSDGGTqxQBJ\nttfYXnDeO5OpW0n8oPFod2F/+68wrMkahFhrsYA+qo6YJDNQKi1cF6CmlYQG\nFAQ/pCd8t5WQdem/X3AHa37hyys3xYT+b5Ma5d3Lbh7UykglMiz3vpTMSLhM\njwOBHoeDli2QNCISyMzJLsuFoQIsoSl8ZisUoTJaxsCKNROjr1uKwYy69EE4\nsdXYTh9LWIZP3hcyZpPDEWDXFMb8Cp4OAYbRKe9eY0jt/6j5PgwqQPlirP6K\nRPzye657fyHyS6IXW+y7s1CGnneL72lDHwBe997L54Ljc8BNNoXk+sayzRqm\nS+v6Ekeok066yZsan0VyeI6fq4fq0loFSlgwZsAmEAu3WFs4sBzKLz1DFvy5\nMQ3l2BI5GmNPoxfnREsXomHoVDipoLV1NT/LN0sd6a83QaNJgDMe/dlHKRy2\nFM9SZBG54L8jzdCpjuu/LyougnFx+zPVIwgogABhNjUt6qahZC4VT28ZTtq3\nj0dN6gewnDZll5RkdVYOG0kbYcfkevl+jxmL/rkcnixAm+4/SGJXTt//fEfs\nkvqn\r\n=NXj2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBj1OCKYcuXC2UuY5tOjJTJRP3G0qPigiNMqA0zS5IbUAiAv8F1awHGaye3WfXr4sCEfUBXdQTcwnQF3bfBV04XD0Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.17.1-next-1588602342-9eead474.0_1588602395663_0.3488090531174539"},"_hasShrinkwrap":false},"1.17.0":{"name":"@xdn/core","version":"1.17.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.17.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-5xjbpagE2hLDqFhxriF1XtR1U6XL9kKisl3+Mmc6NxefetsOmlkzQsaKOYB201BT3VtSoQD+FZfoXyv9P6uimw==","shasum":"7d5ae3f01bbc802749cfbd6d1ab2f2e7275c469e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.17.0.tgz","fileCount":119,"unpackedSize":459928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesCfFCRA9TVsSAnZWagAAVgwP/0UiW5rDKXOQO1nAOlNp\nm3s5xIA1EceeWXCXgm2dn7K8tL2Gf9MOZ1RgQIrDA6NlmImt6SqrRisl1iqJ\nLzGo6R3rJph0V3VraeJPCpn//xqWC3X0iEHb60UpTwwahx4YUXYWg9uIQLeD\nRUQh8bJw82UQ8f6FjvRlkBR7SegKlvp8zsWcV+MuhH0TnqG8HyIbBOdF62p0\nsA/TdhOlBuKkROeyxABpViPttNJMCpapqT3xS+HB1phA8bt3AK8f5cfzw+1X\nFMydyNDHu6jaJfEksV9pf0KhlVXEIN0TXr2yvVRtxUHK+7TwBNbBpwY7XYXp\n0GYeR6NJ0jGvFhZBvZF0FInxV9RQhpvkuFFec8OQ8Vdca6nBH29+euYWzaAX\nb/7Rmwc6fD1pFSYtPOj3EVNK6mKOlxnPi+Ge242W5AUx6SyTxdbSBD0Er24z\nOHDhCCNSlnD6BJIBij0ROSAPfo/to/jD6i5S0PRA4t3J/cQJYgF8RHgXdPNZ\nIdD2EpPdCID493D4aUKS3+Imbn0icWkOzadVB3utIPHdB1OZ9ZvfG94vI2te\n0qq8/ZTD4V4ZiJj6HKFNxw2iDf1x7rKoLCplDkW9R23cZFp+ni2MbImF39SN\nu1V/v52gkL2cMWffWUhymCCa2IQlfsGkVqeiCUpczYw/2D1ZIuwQ8HDpf0fR\nw7BO\r\n=6hcj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbGN/c0fpU79eYZxQE61VCN0Bp/VIYjAmu32UTf14FtAiEAttfhQSNcBjMaefzAhnGX8jWTWUsy/ytrNWLGaYd7XJs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.17.0_1588602820979_0.14601022673201358"},"_hasShrinkwrap":false},"1.17.1-next-1588620657-edccecc6.0":{"name":"@xdn/core","version":"1.17.1-next-1588620657-edccecc6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.17.1-next-1588620657-edccecc6.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-7ef7L9Ue9PbwH3TDLGWDwZTOc/mstgc2+gkS2rpiadP2XhYohkQ1y27+1zn2U31eCvKjr8Io41RK5CyWk0Fivw==","shasum":"9adc21ec5dde96973a9b06143f365a1280cba8c6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.17.1-next-1588620657-edccecc6.0.tgz","fileCount":119,"unpackedSize":459090,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesG2fCRA9TVsSAnZWagAAlQgP+wb1wP9Ma98ZYiZO+qWI\niJC32UxE84x9/3RTte7i19FRyk+oEX0Gs/qkW1ZzMyUctAWORXcEz5swKFeP\nYS4CylsNedJ/J9Xv/l+hpOOMsI8/40WajIZkf+s4AswAwDzKbnexO8CyPGz6\nX+t97KqSYAep3dDMFP1IimCmSgypnO7WxLqgb9J64pVF8PmqVhpdnVY9gtvK\nedQOe19GBVwZd77F6lYVjMyhhS1LzDG+nK/LNPFVxfToh+8sZ+H/rUvFduVM\nnvIWLlFpy5HZFREboxfASUp5KZCGL3SVqDav+wOkIOCcdPSRFdDdhKAVd1YY\nXmOACZArDXox2MYW9dJltZ3tbCtreC9ul2WOn73aAToDQF/Q/sqqQLKI9Esn\nCxv16tWRRpSdBkuRbWzoAarK5TnMfbXeU2PVxQdK0/P3YY/lVo4hzg2s1/ym\nReRwdqdIHF1MDjl1rtaSsVG+zKUCNSrUoQKd331bnDHgNiVo2SiQOn+zznBk\n1W/QcdBa7T1grLjyuWgRtsThwRpZBzGN2+pt4ZywZqTYYy/+gV3bstYxxu6V\n7AoJldioGjCxRfk/r0CLnlQCoEeBhNIP9hYjLrzIIFjGwbrlXYu8eWBJp3hi\nXGZ1GBRK+PNDTvIjRjUFJuKcfzjkLOd6rOHqlCX79MuPhkpkJGxTf4pwoPH/\n5BI0\r\n=3yT1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdKny9TPrG8REwDJbphdN9S4SKynRlb4M0YRCDOafuNAIhAKCnuOuwHwxnSKU5DmI5nk/zk678ggPTtq8S16UgnAHo"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.17.1-next-1588620657-edccecc6.0_1588620703249_0.7564903075017131"},"_hasShrinkwrap":false},"1.17.1-next-1588670928-da808cf3.0":{"name":"@xdn/core","version":"1.17.1-next-1588670928-da808cf3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.17.1-next-1588670928-da808cf3.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qLubsdV9lJZHhLBO5a2v0OYQt8uWvam/ep5LpJBcYs4gltpb33VmNoVl/u2ZT06PVQ3ao3eS+fVsC+lY594AmA==","shasum":"0c943da2999cadaa67202621436b99f380acc6a5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.17.1-next-1588670928-da808cf3.0.tgz","fileCount":119,"unpackedSize":461532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesTIFCRA9TVsSAnZWagAAdr4P/0fyDb0r8W2n88frAEt+\n9ZIZgVXKSWrjvKlflPmqTV+87XEQszHvnkHkvh+BTNTmKpH2ICgvdGgcT8/s\nf3LPl90rjDye/MlbHRFUH/OjQBp74xDYcBNkyWvSBx8ECKchPaQrq771oEXF\nztvY8xq/oGfe7Ue5PPTZkWNFbW3vuiT2YpfwORV2M/J/bUnwpxH44qC5QHIC\nyAJYs+Vrsd8iikzYN3rv4Xtbs1NxKsIZSFbpelhxpOyaCtevETSFRo1ue/N8\nxXUFGF6NgCFXXoWij9DHPveKxDv0qsLqUlbHeXTgpzRON1d5sTPzq2Qtyp03\nApgr5NJlQLchkjexDCEK2uLhW+Uzh4WFkVK7H+OTYjMvMTOL7/YWZZdjbCPj\nVpMwKqxWU0dv90rPEKs3EQngYDMyK/AChmUXw2kuBXPlZ+4modQkgs0xJhfy\nAo2LDMu/yuvtgfo5ENqmOCVY6NN/A4fTgrObRfvvySQ2lIXYQ8RApuyVTrYZ\nMZjWWvmxiLrAFkrgCvHEeXswmJ86qox8DwzRb61etLmexv614/O95AVJW+RL\nWBcDhhLAkyoEMQf547zN8pY4P7CveBjHmF9JDIPY+OwJU999hWUfp+Em+38T\no7XKR5Nt/g3BOHzZt6tprAz0A2rC0TTopITpKuVccYjq7hhy9NHASt+UbkBL\nsaNO\r\n=ALrt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsNMKxMDuSIVeHCAdZrGpbo2omXzyiycN25kqdtLZFaQIgTSUpIU77n4IAbEM8jQL/laPlUxlhu6TvBuLPp/hWcFw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.17.1-next-1588670928-da808cf3.0_1588670981212_0.6296644678859127"},"_hasShrinkwrap":false},"1.17.2-next-1588676577-415ef4c7.0":{"name":"@xdn/core","version":"1.17.2-next-1588676577-415ef4c7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.17.2-next-1588676577-415ef4c7.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-nKDYuf0txFNQ01gVBVVZyB2mCZVA97SbKxZjgZaQeiF9VLblBf30rlcNLxfIt8VqSZRMeICnAISe4CsK5HvlzA==","shasum":"c8a89477523661ff625f66c2d291e4dfc4579046","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.17.2-next-1588676577-415ef4c7.0.tgz","fileCount":119,"unpackedSize":461532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesUgQCRA9TVsSAnZWagAAyScP/15XtOpmxSTSEtOxJafe\ntj+TTTt9wCgceBEDtdRz0ZcFyUjRc9Z++ybQVb+3wRjpM9dDmUAPeNtM/6di\nBAtZY+i3A+Ibck7V4MSMjmpPZolOCyooFd8bnTMw8kswqhEsdQkc4kt1nc9N\nIU5OnfsczUET7unP5mL8vfRWOSPoN4H9DaRNA4dpdrCywzP063giZez/dy0j\nlgkfrnGSX4WnwvtjHgo+2ethsw250XIsFxcqOctshZZxoUIOiULN2Vb7T5qj\nbfchxoFs5H0LYo+OhaiPYI8ndDciXRtjmgPhjiVuCeaPFtSxEMtl6lSGDyov\nhbvEWSB4yhjZHC2epdWNZPHKTGEkDzWCszAI0uUNiTgJnhb2uwVEiu48MX3b\nTyrMsfuZxkCJGwMLuccPopmuc8jzK5dLsW0gR3ohHvcn/t7jb76FpoHNlq43\nPLXCZZBN7cifF5Pen0acChNY7lnoTFIrO/+nBt6LS8TkqpFcfJFcwX15KiiG\nC9NLgMmYkSA0K6CIGgLuvCvX8VpyhyCZo0e8jFsBmuZuP/0fFpRUC0BGgd4o\n0dF7+BQ2JPpGqpSfOOT0hmhorrtpibeZxz6vF0AftK69fhK2CfUCJl67/fw8\nKI/wqpfmx73CVGDr3UdJuVOeOhD0qUIP9QkOpo5zrlCFMN59aCbeSdgYmlTW\nCETJ\r\n=bGOl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnx3xCZ3Zceyno5ilTu4vUVZHypSiE5/wZqA0oudyotQIhAKbUwZPCNZK1CMgu+O72heHHR1O5rkY3+Ud4Y2NvH5no"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.17.2-next-1588676577-415ef4c7.0_1588676624265_0.37002132263458387"},"_hasShrinkwrap":false},"1.18.1-next-1588677172-e7f92424.0":{"name":"@xdn/core","version":"1.18.1-next-1588677172-e7f92424.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.18.1-next-1588677172-e7f92424.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-QU/a4nfTtA7PxXIqcsWQAp3pTWpkInf/o7ctVy5S/Za/ba/qqZVlHvX36Or3c6yDSisPyLpNzcxeWrrqAX/ZFQ==","shasum":"3bfab0d64e94b20fad4c2d0051a7f445c73e7f21","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.18.1-next-1588677172-e7f92424.0.tgz","fileCount":121,"unpackedSize":464794,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesUpuCRA9TVsSAnZWagAAOuMP/0Ywse46M5SkkOaBtu8n\nzOhg++JZqGVo3dK4flkhY9jim9n2d4cJwwHzIMtggQpZep2RFuWLRijbbLCz\nK30uUi1wOCLYKxKqdYLOb6w1uiEGFN03Pp9wXOFETanqijv6siPZ1dyY6hXq\n3k+kxgEWbflGgjlXYcIOjnO978Q6vd6DrlvVzxAoV2A+U9ddQJjvLPr8xsKx\nctS7T1jnhe/9ITyNhjuDCHRuCx+yanSs2G0kNOTrLc2CMvuW3iUuaz5VEMfp\ny3Nu/sryfVTncRoVKWXJIKeKht0WOzDuGN5OOL/2ykbQhtOzi7ZNEz6eah5I\nKGQSKz26T/hrToKS5ArmhdTjZxDg8NyeK4DBaHze5NcxluvldBFygtFaIVd8\n6jL+3gQMyzMrV+eWvPmItnnl++2+fTf0HxtQSvsYdhudbss8F0QvHH9Sv9Ec\naKoIylw6l0jiX9TDffxyIPuiTobod/4kF1V3Tc/zYveaJR+usyffia28mKyt\n1hjHfQqpFQzwA7ufjb5e9BYcWZlCA7j7MlMZU2B7YtAK5EKmn2zZSQ4dvAcH\nFU3SD70CyA/9VZnaW3XV/TKTF/eJo7INPBvy3nO/5zHoUFpdk0ZVVT6rqLEC\nTmqRUiBeefG/R9nlolvo/pBqQ6ukrMC5qxZc1s6eWsrneZG2iNbQ1iSxGmEx\n+VFr\r\n=nmD3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDS2orbMkqaCuyt7W8Z2B5dFel/VJ0yn7J+hWDyldnjKQIhAJlnroETztLVYNgZUDVg7ConOztx2mb7V2syzLydaIpb"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.18.1-next-1588677172-e7f92424.0_1588677229825_0.5113498499879778"},"_hasShrinkwrap":false},"1.18.1-next-1588678598-df36a043.0":{"name":"@xdn/core","version":"1.18.1-next-1588678598-df36a043.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.18.1-next-1588678598-df36a043.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-NpSBdZq38UJ7a+Pi7vR54WfsvLFd4Dmt5VSBvBOXkyURG7bdoJ2x3k4m+STwBM6qeBXYq8SAQfwjGA0cgHsMpQ==","shasum":"0c5a0a1f671785d59edeea2b9786051f75fc9481","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.18.1-next-1588678598-df36a043.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesU/7CRA9TVsSAnZWagAA3wgP/1raMOfoyQ8LADYKNvr2\n+oFq5vACJRzuUGSkDt2opc/l/eb00qD/hq5sQxDcbG5rZea5dh8mL7mbLHKA\nIbLeBcqmJmDmjyUuHPD8bHO5nDbZzlMc42ngz8+RQIH/CfuBGFJJUPzHyqd+\ns9tdtAywSum5h2DBasUM+0hQIvfY1V8KQ98Me+o5EYQPgia2mrdC2tOvv60u\n2+f88wt/zmFg7wDlvBwMKeo9jl4TpLJuz3mVmje8aZxtNhQZiqXDd47Xtpwb\nuG9gnMJ6ZcDzR+Ni91k7u8dG3eBNKCO+Yx+K2rmgCzzBDGxbzA/E56A5+2QF\nhFb+1PWvLYTtFsU8pYVfhPK0vjVzKcoGqjhiN3yxGq4smoRgvEp1Vb24cVIp\nBKjDWbho9sE7MIcOdCNIpf4pcWXmeXQbCp7maqvHhvbsGZWYPjKCdIw/OVuh\nQENLC7CrE6N3r65nz4NslN3t47ZemSnEKgbXvNSx0U+WTf55uQZJzeBbRake\nXFzalRPQYhmAqB0R7XRwacydpjqdo7rTM6YMNOeAZs4kDgyQrMHdl4mfS+jm\n+pkkbkUuhREBV2wWEGUGRrOxysQUHJSynTq316xRkmqL0j8fVJIjVXA4RLFI\nQ4XVJ5ZNBtOiBbJ3FH79UBgm3UjqeJBUL9kEB12PLDNM1rjYRZeDl0ObZ0fn\niTfe\r\n=tYxP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbyQAlPJgf8W7ep02lHhWO4e3Hm6jH5moIgFRERT6PGwIgA8yqL04U/OkS2BoRtYhP3dGCJycLvAyfrc/N2X+vZNg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.18.1-next-1588678598-df36a043.0_1588678650724_0.7503727697976332"},"_hasShrinkwrap":false},"1.18.0":{"name":"@xdn/core","version":"1.18.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.18.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-I5Aw1W5kfkPgPi/sQo1BkqbwNtufKdat0MFy57AQByPUOwbvpD91Qs2ftU4lEChE8/Cr9o1BmHl+sy1ERUDIjQ==","shasum":"aa8fc89870bded46e1539f3050535f176f47e7de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.18.0.tgz","fileCount":121,"unpackedSize":464832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesVD2CRA9TVsSAnZWagAAFpUP/30nWGEX6N8JeJOVGd71\nA2cY1XXk3HkwXNRi/wbXzZKVt2kGoImUjouqXxjd7U0POZSDZo7QNQX15s2b\nHhD0L2ANxC2nmnAeWjB6px+N1hQGcTs0BRqPz12+yK0d7EXMiQQeLdlZbqc8\nfEqSEOZ5WG6BrVjfOkYtEEApiIZcnsu2GtQi0W7YeFC5CI3IVDbx8ZUeIqvx\nA9x51qq1SHW0AmyJy+221we//Ky/cRb2wHTy7HoHuvcHHCBLr1OrUIcFoFzy\ndO5yOaylyAuRQTndPZLfUF9Fuhr3DpxJmSwSeWgrn6IR1nsN9WtkJZTXPgNB\nai52pfxlSnM2f4LI0JAk+UjZijsR+kvRGwv+fvcU4XGHjqFU8j6NhKwdTDku\nu08o/LJfzhkYh7YPPfZX7kCSAHZ/ivifRqNOPlD5n6kw8H5o7cizoPCsM/Rg\n3gZiblsdQSxIL9hxxNLsmJFFcD6zU5juPMbTkCQYBE10S9koO1Bsrl0ZCZEG\npa8oc4a1RuIoely/HlRKoeLtVDsYLQFskLrf6oswaUmnx6N6qjotnpmlnZPP\nQ4xFCFpgC1tKUlnrQo1TtrE8T7TtyPpTSGMGoyg3mEeCTRcKCYrD+9hsmV6u\nFUymv93nc6BQvw/AzcPt844DS3LGLKD7e6CAkY3ofcgisFjEnp3F2TslaDSh\nQvFZ\r\n=ZkyG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyAzZfIcJnE4rrV2m9Om9U8feKoQYWNXVdIXoMlc97nwIgPP4VCAKJ8OUzU3HhEEXDAVhP20XzfI1n8HixODAtM6A="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.18.0_1588678901648_0.01561772594423938"},"_hasShrinkwrap":false},"1.18.1-next-1588689440-43307b75.0":{"name":"@xdn/core","version":"1.18.1-next-1588689440-43307b75.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.18.1-next-1588689440-43307b75.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-O+FGnM7iQUofxe7mbOUY+JwN+JOB2krOm23khV3V9xpZbCjUhU4EhF30rEu0bfX419sFWC45v/37ARdinntAkA==","shasum":"a0e23e4ea7f6a788348c9e6ce9da211fd7f1cda5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.18.1-next-1588689440-43307b75.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesXpUCRA9TVsSAnZWagAAQ9oP/3YpMitWXuV7OJvgRv/L\nnt8D7TzZB8EJvtt6i/XUHGDhdaWQ03k2etGMmB1FRwJibb7eA4g2k8bp3o6Q\n0wOfd+vv5jSJ9edoY190x4r70bwQShsQkq2GI4Q5beTGA6CdjzXlAkFzrkVe\nEXHhw2+xW0fpIy49SKuGuZHFbbjPylfrMGJcDhrc7wjGCkTF/VWrfNdG7g8C\nBU0yd0LmS7MyDHew3nFYvL72EwHiwHA1KpRuSSIqDiXHkXox77xodvZo5xBN\nO0u77XLhXT1Bvle0WO4orj2D2hCfsez2E7bxVklZxEh1js+wZWxv74x786AP\nad7+lJ9An2qfgiZF4chOoRqYsLpvDJo/Zoc0ML4KnJr6iNyaldAyUE+SGELq\nCMC89av/0Uhfu7WrLVcTn4Y1q7njmeBZJti6PHDYh6c0LOcJXuRl/4P6t6aa\n++Sf+mEtLJUjyajSmWeiQ191gZsC0TWRWlU4NDKsPT6e3CTmGjfPTLEFMeqk\nUlDFYlitQ3EIqLJ14ve/FHEpi5scCM9Ks2DMTfSFeT3f0HwLfvKl9IOTItTY\nT7Y08VqobhH/w9MuxmE/1Rul9/UEh9FQ8Us1+YqQDPaZsDdBS43PO06cc2rQ\n5xjH6YNT/9YDeXr2SqRT8rcA2hkAtSauHe/5ReXYeNgoPd7DXQ4ogZ1RQOv0\n6k6v\r\n=M0Be\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhpzdjM0KXya+LSpTovLhAtqtpKtuRgyaLHepI2b++8wIgXCXI2KcVTjj0rulgJ0oIror5tXLWHHbbMyMqx0L4ZEs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.18.1-next-1588689440-43307b75.0_1588689491728_0.6991416459836237"},"_hasShrinkwrap":false},"1.18.1-next-1588762242-59d91334.0":{"name":"@xdn/core","version":"1.18.1-next-1588762242-59d91334.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.18.1-next-1588762242-59d91334.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-NdRRKdRz7Xxw0gM0BC82jrS08vjqA8/fsTS9tiN1qHMT1kE319SXs5RG8Zh1zZqnx279NFKPO8ri4n96YWoDaQ==","shasum":"2331463a32a6b24b5f8941d95a9121d90224505e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.18.1-next-1588762242-59d91334.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJespa0CRA9TVsSAnZWagAAh5sP/ibom2fhLtgW2cts6zRg\nTN2fv6Oo5JRkdY3g2LBIdKzGz+RzjIsOkSILrGTbQX4oVoxwacJVfoxlpOls\nPh4RHrBrtf9XYlHPiLBbphQgKr8agqGkRTbtLIprrf9KXOowoLT7qGSCd7KA\nF+t25ery/8dyhozFW5dvN6edmtufFANI9p53fviRsI878a16WhHjefs+XHa5\nlA2EtKHBKz3H/gBkr6cXradjb8DKcqy6cq874DDSiZzu28O9/7yjUEq4xZjT\nzueYaekGXet7YUAmT/ZH9sef6xzd3tx5WmFFuDatGAdc9s6eukYUVRUO2DF5\nMGwJlQEQoNt9bcUxqyws9Fd5NwskxFpmNTPAzw5IoywGpQsCOyVUG9lr7mR5\ndFPFJzF5ykNsHGfW6rtFFJmiL1PkTGxaE2AzERLwrxc+yYUrIsLdIM1f7eOm\nj9B1MDOpYNBHAY9Cx2b+xOqN319WRtgYV0Azj0m64p44qM04RFYhsCBb6/AO\nlZ4xrRpnJ4cFqNOBzDTGXdBs1yose08mjPMZRoOnYzVkmC4O2BPl3Jl3DOqp\nV/3hL4UswXGgNQi2qVXm54JuqLMP+zlrUxoVARtB2yFx4xTNo6ptvFilOeDE\n1vuC+f7iHELye+BMAWu3EtPMylr2Ezg+9wfy39idbOzDsT3jfb29f47E9OR2\nMEPl\r\n=CZ39\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4M3YlnmB/JeRF9xE+C6SzwQ/of59zuG1cdc/A5/KcYAIgBblzOlrk6Eo/C4OnI5eWiKs3m67aokjFbtIF2cDObAA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.18.1-next-1588762242-59d91334.0_1588762291995_0.07492802903046658"},"_hasShrinkwrap":false},"1.18.1-next-1588765756-2ff6c5a9.0":{"name":"@xdn/core","version":"1.18.1-next-1588765756-2ff6c5a9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.18.1-next-1588765756-2ff6c5a9.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-dFfgGYRVeXKALuNH+KCpzpnS2M+to9/mD3cryX4d2dcqZiXuGVz/011+URIjRq12Ls4l8MPCTl/kcR3cLLYtKQ==","shasum":"d9fc4ba31ec99a66e20ca251fad7991110e25e13","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.18.1-next-1588765756-2ff6c5a9.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesqRuCRA9TVsSAnZWagAAfCMP/jYigEDIK4xvpQGLFFq+\nIfQC7Q1K4/UELEij7eGQ/NuMlngQEIJDWnkA8KH4Anvth2sPjrTcTB0M0MDa\nQNDajoQ9EQDjxA/GClZn3DZ+2fK40Ie7aEUVd4ROhufS+0UqBl8G4UXVXAJ8\nEr51jkZxOXPoOGNwji14irCCROxrdUAZhFJGPMvItePjBFUmIn7f7/iuGfHe\n5R0ex1i4+kVrFMPRhwto0o/wfzBXrRF+pyO+HXn9gsE5pE0McLWJ7CDlIhKe\n0nzjyNRBlawNbmol5kuKd9YF+pIZTL8jJ8linev9+70wL3CpF2Xn1OQ54oMU\nT3sxWVTWLsPKGvamw3u4inhoCDPnwWkTr3X3RuwaB277Xsmafnd6hJnxTAVv\n95RirvBuxeI75GGvkUappEAOX8rd8lnA1PvuAYHSdKlL/pH9f8O/29rHtH/6\nhxpQwZNXylLd98cV9yoxyjN/ncFeJjbhPYG/kpxlVhrP+F9T8udAqg2YXkYc\nl5BgfWDavq5tfGZ0VMETCjQopoIxjeox/dJlohUBw49n9uk8pSh7JWGqdcLa\n38bFlNJcduGFa6DqJvnUEnpmeJTZHhKXHYpCUPYaxi8pDlz/bR0SrAaFRH74\ndeA3KQlEczFKGRnBxi/gtKjsnGKzUSuCU2AFQoCu/f8ptfUWXcYNXYnlx8vs\n81hT\r\n=l6Wc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTYivP0QvRIKagob2sh9EaICZij/QL/xYoy2r1nWsYBAIgfRUz0O7JcQ5KBk7nvJfxukNDUYk6O7OUj5nUSQiKAMo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.18.1-next-1588765756-2ff6c5a9.0_1588765806262_0.7975710434700753"},"_hasShrinkwrap":false},"1.18.1-next-1588772496-66e5946d.0":{"name":"@xdn/core","version":"1.18.1-next-1588772496-66e5946d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.18.1-next-1588772496-66e5946d.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-LfTiLczvO3TkhPRc529jURRvfLp2z2K4SJOD6ea/hAvrvnN3UsoPweNK/d1Grr9IWJH/gY+whv6qR2QG8OEo3A==","shasum":"5cabe54a6c2bcd372db6c3011937b30b513327c5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.18.1-next-1588772496-66e5946d.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesr7FCRA9TVsSAnZWagAAZ1cP+wbver/4olbYvKNWZClX\nbuw59jgQeninK8RsPssx2IAjBJy+qPfhObFpxP3I2lPp51pNR4hrAnEnbzEV\nJL+iPpVUuoOncQ7K4UN4s6gfCBwD63GZa8M0yBlfrar2mwegWv8tomiOGVuO\n7rtipJczJp8MkAneMtrAAaIOGxH7T9YtuIDtlNAMCkgkgyNhk4qvkAONVig0\nY3S5eBZ80CvI/YWXjyFdY63rpyXp2jfpO01ThsQiK30sAf5myAL+QH/83WJg\n/h76kux/kh27DTHzzRl2ibNGskKaHEqhYR89Tebg88ZShiWQGlMkiIQJIwFV\nPsSOsL45XBfkUdNETAcFWkdGvXDKaQEpXSH06u4DKZHTmKQ1J0XQM2dfgyB/\nC+A7l9IoM/DLnZapWBA/5lbSjJb+v1kG+OQskkYmISH6HzJzE/NT8bK7FMOh\n6FLc6Fu+r8VbWij3PgrlmmXGU4EzCMF6OwjSdX6D3n8iPO3UbJLbLZbaL7rV\nZNPkGvIRXBbwnWbXhNEaC1IPNv7nbCoK+njmumSMoEXInUgUdGhNlYKLRGQH\nLYuRNQpnTMxuMzpDWv1jTzVkoVQhyBDVRBo+/8NVZtxGU7PyluBqc8FrShXu\nsdGlJhsjs5goVMCBlDGrSX01cV3089kWYdZbwejU7Z4EDTUtbumx4pxdRWH0\nJ0wE\r\n=wdR7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBWdrwo5Dk6d/tfVv0elgujx21IGQL1VqFmmk49c/A76AiBMCywPYjECE03jnKEw/vV8Icvyc5Xaei+9/sUWHgWtqg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.18.1-next-1588772496-66e5946d.0_1588772549200_0.8582809412498356"},"_hasShrinkwrap":false},"1.19.0":{"name":"@xdn/core","version":"1.19.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.19.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-zmdB+vlnsWUnOmZzqN86uLEzfZmqRAjoKntoz3hmHQ4NRHZIgz7D4ETsMbk2fdO2/0PFLbBSh73FzZ5bUHvIuw==","shasum":"bdf5e5030dc3072bb4ef9fee60c4c09c03454920","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.19.0.tgz","fileCount":121,"unpackedSize":464832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJessKuCRA9TVsSAnZWagAA7nMP/jUkCvP0FnKufDi9XcdB\n0fKlPkE1DU0jgamqO4ttwwIQ5tEa9Q6tXShJKtGU6TijQzkji6tbJHrLf4nI\nc32qen4nYlC9lqVPcdQTYK2YMBX8U4MY5MnIf5rHgCJmvdkUqG7VxY1ynLeG\nq6P+2peZe9jbNqwpm0A3n/8o8tTRifjDCEErpBbVLJ/Qo+5UMMpt4dO5y3cY\nF3K9sri2fNoYX83a9ykgvtKCuCH9jPKyvMdNxVom4ZLutuZbcsPR0vUM3u9t\ncoHqwMVY6WS3hXG58lyb6iKz9T/byg/Z/dTRR1Gax0wI+6rVCjcAI7BV5sYd\ngeXmO9kgaChd8SHtyy+XVcj1xZPjBLyRzkz3Zzfqfv+GlNvQsYqWywvhrliu\n7VBuZq1aeXxCW1FIrSspP3OBn2IGb6E/SENkYAqKHyScnuIXZJf0x1nBPyV9\n1S2zTaRE8gixUB/nCdBJdagmISCZqMlNxJLVZv64WVbzHacb/uOXKpqo1rS8\n3IRTjrDf+GdS1I0opW7s94XcbHTa6ejGbmKKS54+l1velBq7o7ZQ+lSTLATu\nkSMKR+id9HDGZoyvIlfGuUD3z5OC5vPpRbVY2V5pAhJ+itNSRuxcPz48n9CZ\nSKojpinINEERtoY6yw3Ja/p7Kuh7jsvaHS4UhqMy9rY96dtGpv1tGXcI0ypT\nfsu6\r\n=IXjN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdBGVZ67eiJlfWQ0nUdeYwSUx4I+CHXo8ivTo0E3GzBwIgEq8VcIjhlICaP2j73E/iAIhftxFT6F8eOI0NU/6s45g="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.19.0_1588773550344_0.7270261353376264"},"_hasShrinkwrap":false},"1.19.1-next-1588774338-5d34acf2.0":{"name":"@xdn/core","version":"1.19.1-next-1588774338-5d34acf2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.19.1-next-1588774338-5d34acf2.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-0XLX35090y4/xCngLpwJCpwj6uNp4gvBR7vlscwLo5uhRLK+W/Hj0SVaq+FhdtNmUTMbpdojehwgoA2qv32XMg==","shasum":"9e42fd377920e3e8d1aaf482654b46ad1250e191","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.19.1-next-1588774338-5d34acf2.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJessX1CRA9TVsSAnZWagAArqgQAI5WNoIBoSCYyCOlslfS\n6e3hf3Dm9/eMXUuoIA2WF6hPI5fzWwNIUCOzxc1lApawNjbvpm4xkDyYFew+\nLvarGPC2ZGUrrBRYTXBGVBwuCC7essssIFQwwIo2Q4KEDnDJJLqYG1McP4aR\nYFyEKVZuvIC3vxFDxNaRqwt982oemKbJ0Vl5nKBl3Q8xvcUauGcpUd2TwSeT\nF/JoVQXIWPWD3CNqkIZiNoKHRwFjHZDvYEBx3zMhsCh0Y+diRKChlaI8KhQp\nzrYgwrdclMVroXAEg01/zehxJ37sCtRJ9PaGJ41DK4zIsU5wqE6yCDDvVatT\nB5i1j1Z6GEgjkHcv4VeOZNneWVOzLMUieIK9DYAeY5U4N4eYV545K2PeoNCd\ni4rIZJ8oFzqnj1nJjaHyYIm729f0Gno6Wr/jd6PATCVDJue04ls1ir+ZUNVV\noHChsK0T/XC0RSNKAHoU0UMHeyDw7tqcv3Yzy/0A41D1gSxl4egUra7JnvNI\n4D9wsGnAJc0CJqhKRba4t4eoOQKBXkPvdF40O6YtECo7CsWWnJIAzXXB/yIq\nygu6wXHpCOTXR1HKDG6WNjz2uB8lAddKc/gRyJY/jNcN3aAyIjKcZziglq2b\n432p9YlnxLcu1b/U3yoT8zvNc+WD7avAOq4+GEnSAJ2npmRvMpJIPxGmc4At\natfo\r\n=5Ld7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAaadoKaByrMniRZjoM3qhgEj0/MwKk1vnoF9yY0dBifAiEAilpuUquqcwYH1uKU5aCSY4DoZG07GT1//8b77aCsayw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.19.1-next-1588774338-5d34acf2.0_1588774389029_0.2931318923303059"},"_hasShrinkwrap":false},"1.19.1-next-1588945279-52bc97f4.0":{"name":"@xdn/core","version":"1.19.1-next-1588945279-52bc97f4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.19.1-next-1588945279-52bc97f4.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-UESOF7hYKBjWGzSU/4Cbr9FqS47OBPUWbq14uE/m8JPiBHy8LdnXQHYDs2yShhyo9QxSYKM8y/9YXFKThPz6og==","shasum":"61c4f7b70e5ff704ac7b69348162f0fc12728ad4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.19.1-next-1588945279-52bc97f4.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetWG2CRA9TVsSAnZWagAA818P/1/fSOF4ulPgRVYkzsMc\ntXP4EHUTLoEOUm/7c0EgeKJMS5ahu5Q/Ea0U7s7SvyQm14wqlso5a3EpuTKs\nx/B1AYQAgY4txfyrSUwZsr1gk1YStTjIAnNSI6PT9esPwrrL09ilSDp3PT+V\neC1G+a3rBUs7N2XbRvneiikn1fF+7mYNezmNhQYnv/U4BwhqT9O6y3PkD/8i\njJ1ms9dHEc2CxfsszEUGsq+CjxZYxd3cfovAjpDVtvZgYNWsXu98sOV73VU6\nTT00MR9M2726PmNHnptMz+LsHdtwvt45fqI+32edyQJEQabWlTb9DaAhCCJa\nMbCk3kgX1fEPKGMuNAQ8zBNxwpJaF6byXBUGpHiiS5aLN+w+z4peQuA1mzbK\nZc3jOAbnwxDFPzdSeGBUD4lDhDGzGHEDTSmCMAs0UQaA3LNEbc+U/k2gOKov\n+7D8ncb6uwlrmIUwngAWYsAXc5Rpo558zgp7h3Cp5vehoU97EK00xYIxLCY4\nqNiCiz/eHYT8O5mlxoN0sSHqi56tOBoBmcM85+05R2duprHVBFJ1EBDz0k7c\nECJH81oUbzBdUXw43HqWxJlV6HWgtOh1zJ3YTQW5qBi3KmiuOgJcOzUpVYKx\npRGDzliAw8+hEYchtWZNqBkS/qLBhSBrKhr1uLjus46Dkqx5MZP+cv+7oyHu\nQiaG\r\n=Xw/f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFGu/DelejK/KXGuhHUbEDaHO5gYYIXtAILs4PJtFrfCAiEA2tiMHrlI5OQ+LIiLuPU5hSD0/LKa1d+jry94mO5VZ/g="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.19.1-next-1588945279-52bc97f4.0_1588945332545_0.2945737686120722"},"_hasShrinkwrap":false},"1.19.1-next-1588945346-7d3df1de.0":{"name":"@xdn/core","version":"1.19.1-next-1588945346-7d3df1de.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.19.1-next-1588945346-7d3df1de.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-QZLqwppc7Xab+G38qfX6G8VYhUTU11UILlvb4/HMePVg/f6GCsfpVs6QFxDJhm+yZH5mDle1XSAicEoz/5F0WQ==","shasum":"59a49025752a89a7903d5acead94c6271359ba88","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.19.1-next-1588945346-7d3df1de.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetWH4CRA9TVsSAnZWagAAozoQAJTUgXIc+2ZagHb4s/67\njj7KmJAuJk7J8NHYORDlqaMYHa77V8lkyWMYfzAuJ52r3Eftrt6wD9RZOZ+0\nTSuWsV8Wnuu5Q+w5BnZ/JtPPh83ehDW8RyTnOzD3oWZ5HuqJwUkXs07QyC1t\niTtgPkwpc9J4UOMeQvNh5/03Mgv2l8Sqts0vWqpZJ2tylYJAikz71QNFYUV0\nTGJvDiHpEFcMFKAy8+nipE37I5BrBAdmWydBilFXnk/awCOBX7rCclk1Jm/E\nuvT0gQibM6f55U9eQERPtFfZq0C9TGXWnKSwxd2HhFzF55WtzHNejRps314N\nKEsyTGy1oJvnBAoUAJ6Ncl9yIXRym7JqOrvSqmI3MmAs508NRWKVkiXMhi4Z\ndY/O+TSSy0SrAscx2kEhhpaTx24jfQV/VtdIg1YNIssprKeKm9Eh74Jm+NCX\ndCWna//mrbZBLdu/mZGPl2q7/ZYYg3ugg7Th7f+JboTKp/ayeDf6IQUhHOwR\nVtjj9MD93tzwl+9RKlNZNXlBDPtuJHhMoDb3WZ45P49qZEljkKDPcfQD2ZMU\nneHUMAyk2uXiPReB7E/qw1ow616kL6Yztq9ClN8PPHIa2vRpkpU8UhKns6Nr\n2ihvyLlqw97wdxyKFfYOSq14SsVn2oKE1T3HB5/pgTQftcRDu+jsDiwgVCLu\nrI4V\r\n=VTh1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4NtKqnVad2eUhDqDHQ+x7MQ0ZUM5r07D2ytYOYHJSlAIgF6lUMOT9UgNlTpTtmKjFtGkn6Xv4NVkOTDL/Wr/9lfg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.19.1-next-1588945346-7d3df1de.0_1588945399997_0.2712781152264221"},"_hasShrinkwrap":false},"1.19.1-next-1588945363-9ee32214.0":{"name":"@xdn/core","version":"1.19.1-next-1588945363-9ee32214.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.19.1-next-1588945363-9ee32214.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-N2/5XxTEaBzZjbVdVArwo9YwKyrSVAYJ1XzV3rGeXxm994Yf2mRdfCuBLHKVoLHlLNN1q5Bni7CmlKcLUXW29A==","shasum":"1e5e75da01f5bf1a791f7f751f5850923af38cfb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.19.1-next-1588945363-9ee32214.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetWIHCRA9TVsSAnZWagAA+7kP/2LX/VwEmnU7C7wNoXDA\nsx25OWgeKeOYlfeDSOUnHcndCTfBN7+cXXhDrZpPtvAkcvbWkT97hNhthIzf\nFJBDSPbT51fP9FJQgufK7CkDswsP8fNwfy7UrAOK7EIwI1X7geMS6XXb8KZi\nVWj/e+ifBt5DG/AQ2ogzeQhIfMw0oI1qoH2pRYIgtmHCMf3ryo+azlhic3Ve\n4iwmnwKU7/j8X+zj1uQ8Cpiqo3kUvvOrfQzm6COrs6LwagZONcO8kIX691PN\nO09hnQN+Cny4S+XQIO7g/sFy4Bk7k+cwWzpAE5UniJeYjpcHeIuEYJFsZ9N/\nWzzruYSgEduoNZF7+SYeOs4Coul+usUSRjmN72H83D8Y4xL6FO+TpmljsD/z\nnddUgJN1dHyiSwCJTAtMZ0MEKjFEQHjd+wf0RYlTG6yzcT8fVdq/yNXKhd+M\nIhF2s5quYKWnG6XRhaUO3g5tvJhFMPn1qMi8+Zcev/0MKpWHKSYPVdTJ0x9u\n0vd/r+ONky69j4cwTIq9tKWWU8uNftP3BLhX/K9Wm8+uFOC+//pSO0y86Y6A\nJl4XfqD90NyAOWs17NecIgxwGXXdHRI9JlvGseazQJ06qkRkDa2gsz+klsbO\nu746tdPMUPIYMBxa6x0F50g81+mzAvOWS8dhonh0WJ2H5U2QAEkxGTesTjnT\nPSI0\r\n=xdN6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB9/mlszTjQWEmt1VguGDLi3Zwhz43ZI7WGYfR8/d0wOAiEAr5jSAH9ulsXqLma/rahc7wzqEegovA95LrLStODd/2c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.19.1-next-1588945363-9ee32214.0_1588945415447_0.8203949300209057"},"_hasShrinkwrap":false},"1.20.0":{"name":"@xdn/core","version":"1.20.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qTtJnBZCNDfQTxyCbE9iRGYCtJO1R+Sefb4bytzxRjx77E+cw2m33Auz51A3NMYp45UqGwiMDDTk+QcLBGVeaA==","shasum":"5191b0a179c6eb883b048af370313d314215c225","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.0.tgz","fileCount":121,"unpackedSize":464832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetWQWCRA9TVsSAnZWagAA6MUQAIGZ9pZ+ZFIB5cgFwBGI\nbpfFVPInPKMdgaJALxp7mZ/uhkwDc72V37qVzYHnyCYP8hf7iQJNBwxhUIhq\nmmlQ68VJj7Pxz0hxFyG5O69lF7rFn/oBaeftjNqTbo+j9K5hSk/CN2v2EFcP\nzO/i6B7GpveiDjo2rC3hRQ+l9wiDeVBT+q2g1+F+NpGzx4GseXa7C5Y6n9Lu\nVZiYUNkGPrBEFYRATG6UN8vKDauO5zzhPUsWzXr6NyiXh++ZExZljnRXrPWB\nJzF6kbBbZAIfEA0VsyFd+aJpWgMESEMYIHA5l8kWhbMHJ06gFJte4HApgbw7\nI2qdxdCWUcdPlbVyiMb2uvPu7YTkhENwfTebRfex9TT87FLo/3UEY6uqdTYU\nT0IazAGfxxbM08qx5phAIfKhFajNvttAg20UprdpONfxdLfEZN4MemoNkzmv\nVRzGXd5/sSSSuaxNOag4UDDWNo9gXpKBOadZD39D7vapgmH92QdZLrItWfAV\nGPpuIHPgv4kr67oq+G5sqa6yjdumxVk2RtEKPruwFqtM5Xx7DLA3JrQsOa2f\n04x7UqyZGrbQdbwanyGPgQ+AJKOiVUSvOL7fAaWcVK7jRF5rG30IBL6c9QbC\n0pWnUcD62eecoNdSyFlQmvNV/4hbN7h7t0J4ge0rrvHTticUiS98Sm02SwLO\nXltB\r\n=JfKJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHbVVyFz5q2n7O6fzZV0FvnYyOweY/GG/6y50qJhIlW9AiB5LppvvKOYcWq30xL58zg1uZQTFS32ExblQxMRBi+ZXw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.0_1588945942592_0.8982870464318551"},"_hasShrinkwrap":false},"1.20.1-next-1588945919-afaf5e24.0":{"name":"@xdn/core","version":"1.20.1-next-1588945919-afaf5e24.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.1-next-1588945919-afaf5e24.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-l/hoWyYlF+0mVbQ4iM7zQdsQ3K80b6RZ+irRnWXFxeNo5WeAXl4xqdHzoZtx0Y02yUv71H/1O0I0Jb7p1nTNjg==","shasum":"f3018309c98b523265c5007f89185460f4f72a12","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.1-next-1588945919-afaf5e24.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetWQ2CRA9TVsSAnZWagAA3sEP/iSxSbsmveh1KsVhfKgw\n2VxJoc+FEaqf25wDaJ5QxMWu4NVeW2YtkR4canthvLMz19NZhrA330CY5/fs\n/bbzo8vO9n2lUFJoDv+QxkucMtqwAbKjjR+Ca9uA2Z0KhvaCDG6KsS+ulK/4\nOkaer172Jrg7sjbDdxXx1stxYnf86NsI/MZSMzCOY+7eRJweTJOwWSfE/ia7\nUlDz+eesBqIWRfkdk5kw6qrzQRZyaHgoIuDlHdswd5SorRLq4/eA3AAJdDvw\nuTBQPMEVdgRffT8n2lzXUxVvTZeuOxCJ5PNty4YX3nkEv95Bia/miAdZbA/E\nRcf9Fj8RuKno+Jz66dVlcOO5gb6+mrtJN+awFz65SjEFOU+4IWiBEb6QAo3m\nnli9XKPLignhMgM0mSsF96hfnquIl7amby1Vg+TkVWn9SdkQ6t2IfO7DiUve\no0U1FjnApMWxfMREnH7fUFi0iClrFAs8M7wY4F+5imlmJxZezDKEQV2h3ia9\nnbdglJLWSvuxmS0R0rKRwwRBpktJzQQMEYNzWT/IAo6P6rF2W30QsV+PE318\nQNEecmHABl8k97fRpytS5BfLAyBSZ80Ak0h8LYTuZlmb+hpUVTBSUOvrQkm+\nAbAmNLdF5HT7nl4MNz67/CsoFsMtZfg8CPN6oqKU9EMDMmwv6KE14ziu62J0\nQGkM\r\n=9nfm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBOb6V3oZGhO3i+XoRm0WSvm+zRFg38dCzzhVxxfu5gIAiEA6YXcEoGCpG3nrVMxhEvqzU05Erzk6ZJhOMfcAEIV8hQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.1-next-1588945919-afaf5e24.0_1588945974127_0.7771864848621726"},"_hasShrinkwrap":false},"1.20.2-next-1589117911-a22f6e9a.0":{"name":"@xdn/core","version":"1.20.2-next-1589117911-a22f6e9a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.2-next-1589117911-a22f6e9a.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-k0bgPBEJI8gV7TF2pN3K1yv0S3NpGrGmBuNps1Ga/0XvzkMqdSB0vAq1/2DdEfT9eXUKLEnDbdLSNUnlB0lPOQ==","shasum":"b7090fe13e99b2edd1d78abb6e10f3ff5a743404","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.2-next-1589117911-a22f6e9a.0.tgz","fileCount":121,"unpackedSize":464886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuAQQCRA9TVsSAnZWagAAsw8P/iKx5hooNpbzZOEiDVtW\nAEyNkD5mBM+22aDlmnj/t51QuYO1zvHnBOu9kN/O8XowW6yMXPFvfZuAiEUT\nc6qsFAkXHJUJUuQd9WvsN7CYG7r9Ky2FbzYNMFX9Pq+j3twxHYKYwUvpRltV\nxo7DpcuQzcNS/TF9NPkH4K5JrceoZRZZYu4QySfqnIwwYHmbrRgHAzNRnAyT\n1LmUkzK+FfN7xtMzlvECsgsb0HKkYh09/B2kjXFuy4suIMJ0JST3EyhwPw0P\n9CAxjoJOCrpWY5hP5vThXLDObq3Ep3ip9sme7s5kpqM51gWqijzUFOF2t31r\n9R5wmLmNluFKL2MsFO32La+fj3msyk04b4+6Lo+tubgqWEiyMimqx+llrHFe\nbIYmMeTjPONAZSONFHrlp1+Y+Y1SSje04760d5LLXkdnRIPja2jX0WLrLKH2\nnFLN6lIm0SoevKqRXTRLKPxyvIf1QFwj6ZGJS4zzyy1hHx+gPFQRFyzIuSIF\ncqatL9aSrzG/+Oc33uCEltxjU0maLS8FeeRcyLRtwSZSG894DbgqQGIv0yik\nq37hmPhaXQSRHoTDVoGU7sHus3Ehqo4doipG/YJ2oCRAVMSGra28eDdFIJSs\nnohvwiuhikq2pS8KfmFB07p6M6XtVtposWUKCuLwHYnubgj3KCZpUgqmx1eP\nWJvc\r\n=CY+q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFzwMtyXKitCVL98uPVMgsYJpjF4L3N+tdJalWdVrW2sAiEA50MNzEWZgUq4FkMw5rLufqxyLkrcFAJ7TURJn08hKek="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.2-next-1589117911-a22f6e9a.0_1589117967800_0.7318323092406922"},"_hasShrinkwrap":false},"1.20.1":{"name":"@xdn/core","version":"1.20.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.1","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Xn2axw/Ew3rL7cgItZCcg/E19TVjt2rHHxbWcxeGmUaGDY+m4nqhPZGpxS0uh579HD/aZFN633PabYjUrfkj9w==","shasum":"ec78bd0dae3e60fa9a8ab6428d736f4c814ae105","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.1.tgz","fileCount":121,"unpackedSize":464832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuAT2CRA9TVsSAnZWagAAVpAP/2qcJQdDqiIVgdVsiiwh\n6zVlueBYtNovJtSH3aZ+SY8G8ZER5XD+BE+O7sxWfDHsBzC1dGqSsM1iLUD5\ne/KsMLSnu5UjDVqNPgK8UxM1iPgjWiZJN7Aegm6qJxcGYTYyGJFiBvTWPB8W\nq+eqATJeQTaHkSkzrtSNeZb+4qSya8dQ1bUn5uaq9G+PwPUd5VdfJ2hDiKPg\nDqOvlP8fJ95K7mQ6RVpufjuWgSxnGb1H0DPizD05QlL0278VG6sWJqDTdD+X\n5I5lGk798IqZh39KidUPa39IIwpGHCY/PjF3SzMvD4vSp6gMsDgI/OjIURVU\nF6y5vydrlw+5kvEODSd1O08JIlIw3OxR7iyXp+AL1pMWpiFxF+kAC28ccOxC\n0GRrFMYUBtGNMiKs2+/JIv9vyj628iHMxTcpOORNiwCkNoFcTxRAwLkc0+xI\niU1rcTRR7eXMb0RMBArKiTswrjnHK6a67YXP1jHYbkgMmyHnFODInqRm1ZU2\n1sbmJ69L956Kntu9Z52YTZuTL4kvdC5l9BwT/mAoXa9qE6BEjWrEoIKDtf9J\nh8kL53y4ExEeZpjhtzQ1O51wwV4jHScMFtiHIlYpit2ZlJxMYfrhXKFXTrMH\nmc2ePXF0B73/BSUVO37xHyUVOpqNR8h5jxeyl8N9xwPnm36KF7pVC6kSDbQG\ndwnC\r\n=jRA0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmrpQoyAPQpNgFAVjFk1HuwdK1/FfyrIaiuLU2TTRJtQIgQfsU1S28aRFPLSJfKRg3pslNgjtQCyTNOT/aPpWE5A0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.1_1589118197639_0.24575776052685216"},"_hasShrinkwrap":false},"1.21.0-alpha.0":{"name":"@xdn/core","version":"1.21.0-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.21.0-alpha.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-SV8TSm8VJPMi0lg+0BrEHsjBfotoY1G89Ur8TwdFJTtWWqnNDgGZ0r4ioXhO0frByCkq759Daw/tL61+8bAkhg==","shasum":"6d91bebd4720e877ad3e9da70a93da9019e32cfa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.21.0-alpha.0.tgz","fileCount":123,"unpackedSize":476513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuTtuCRA9TVsSAnZWagAAWSEQAJ1I3vY3tlk/xCJJ4j7Y\n4BOtG0nylADEKHDiNqwf28TtprBfgKp+1xDnlMyQDIKiitg8arLdlROMxspd\nHxI0lG3m2VSu3H/B3mTOFjxFqni5C0dPQHtOqueba2RFmgi9qKU8b5n9ZuxT\nzH9Rh4GkHqrgiCspZYdqGTAIvqrSZWMUTy/0SvMktytXlY6i8KP3pAr7+aa9\n1k/+eiCuo1wgGHfgp2FVDYYh0Yu+qhaOjYBfkdQ6ihcsMMWTl8DwgeNkVnTJ\nYKZhbEGVxLj+j5th12bnSsB3zya7FMOGj7WMvghK9AXQUgjnQVnpaVKhcgcP\nZ8fOalbVtPQt4K9Dwhj+7R0OAQ3MMlxFuaTaSKvp2fMd2O+FuUPj6mrfp3+9\nXThUMh+LT9sNpnVs1wpBWLlcK2QV4T2CQX1zEf6EmhYlIu91iSEbdVfTIiHt\nhHy9zAQnFzQ6nxLGlXUDY7+EgZZIAroqyvhCwtMQqcNvCdq+RXAl1SQe9T2H\nlSh5f+ceZ5TzQAYav1vqpam7jf9JT7sETNwN0iHUhAlqcwODWfCMU8+ZtB22\nJOKyPSXfFoc7K7B5wFm65iK5gl18JVWfHYp4I/iBoawK4qvQdvVqEMOEIrID\naIsAEOskp7zSPbzuyjkFHMMBgd8yEd/AysNoIcBKilwRDpWAtFcsrpBfwsB7\n93K5\r\n=9r+8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHOeQ6Bo8IsCydnPRU5yqQtP6jkmAVbLJwcL3u+avK65AiA6EJ2gqWfErD0pmnJmHWvcg8X08/Zyh1MkICPBuBxfhw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.21.0-alpha.0_1589197678189_0.5720135146518712"},"_hasShrinkwrap":false},"1.20.3-next-1589201494-1c832d4a.0":{"name":"@xdn/core","version":"1.20.3-next-1589201494-1c832d4a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.3-next-1589201494-1c832d4a.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-G/Idqo+wagP+9Wmiy9mUy2gkr3au5uIF9725RHC8PBDjdtIZomaKVMKp3orlx5EtYe9BNCmlLqGWkE0WIcBY6g==","shasum":"4b5dc35488c2db77c465b885978ff4485c72555d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.3-next-1589201494-1c832d4a.0.tgz","fileCount":121,"unpackedSize":465335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuUqICRA9TVsSAnZWagAA6xwQAJIpca9iKw1hJgf6budu\n5H/FzZLaks7kts/MlgefMg2Dsg7n8xUQeiN7mKALijnZnwGPsydRmTFfMUKV\n8/Gu0k7u4eAXLGD46fZ1luFIyxPFlS5eQ9lXfO3Bx852zCr1NVtnVZ+X6dek\n05KUYWugSntgs1argDP0oinRmpzftfSCjdfzhbZ8qohHkuEDi17bmD04AT4m\nZDJHMflVAsjK3dhq0NSk8c+E5mFW380Z59l5DY9NA1wp1m/FMfxDjL7YI4mD\n2TggqT4OkLIMDcLBN8uUyRs1C5QLyb4r7rcRSJ27AappWBCS03rNT6qaDyja\nFstk8r2doobEgu9Y5vaw/jC/xXldlW2L8tLzZjNUhzkEmdO1GkuERhlr8tOa\nkdx0PLmYT5mjxPOwlQoFqyHc5FFgJrGeWKHtygnIm2dHuSsDNeH1kWbGANES\nRu7s2A1NeIhj0UQoZFk/RszKZWOhEVONdk4gj2IwN7oVbNrzO6YimX2XVs/y\n21V5T0FNoxOWB0D78RzpsZoyPGKfY5D7xG3EkGpWuzspon43RB7GsQCev7Rd\n7kVqDiQSJxp0iCSZJym4OhLmeYy2EotE6Ub6upm5z5K8tVn/w3MW2yDaKr/g\nwDeuJO4LILyYFc0oZkoC+drwVA00aRPevGmhtG8LJqA+DzNnSKiQ6rsWxvW+\ny7CD\r\n=fXOO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9M4gzQDOydhRUrVu/b12N/e4HuY9odzscePD9G6Ij7AIhAPQNLmL67oYbZNjYv9KEP8z+X809M5kVqTi+nu5YxKHz"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.3-next-1589201494-1c832d4a.0_1589201544031_0.3400354050183281"},"_hasShrinkwrap":false},"1.20.3-next-1589201539-0a882432.0":{"name":"@xdn/core","version":"1.20.3-next-1589201539-0a882432.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.3-next-1589201539-0a882432.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-68bOSqCkstgOv9ROUaf/EKdXen7jGm5DPt80MjCFodAwuOPGmuyXg7d3qysh16yMHsSYDqG4sVCprcUbzcStOQ==","shasum":"f4fd79b770bda43a0f9a3446cd9ee5cbd3b2181a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.3-next-1589201539-0a882432.0.tgz","fileCount":121,"unpackedSize":466992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuUq7CRA9TVsSAnZWagAAvmEP/3eYEVDQutOH2CPnuGU6\nhOJ39mzrxWb1iNz76LeIvPHExClZgocNmXyyW/u2wOxeBXaCvLC6DFDbKKeU\nXhdoJc+ot3cgNxjFajA+qPHi2I4+dX97/RBJrNnVW4Q9LPif9YlwXO5fiNU+\nKhNifEjHNL9L2odbbZwHCpyIU8oYqcSOvkxTxmEHb7ZvCXL5uoHRtsV37Hub\n7BgmA+4T5qh5fk9pSNcIe9xTCAIlene90CMigE3HWgmXM3AnKAFcYRR1vcA8\nybxozbXA21wg8GNiRCMhIj8S7IzVMj9xuqq/TK9psZiDX127xuVBdvrmM+oM\nohNapxNJe9MWCpxEt7WWKzvWFIi8DUcwJM/JbY52EJdmsFS5bUIevNfAzviy\nnA6dDX8wRTBCgU++g10zt9Epq2HZMMAWc8qwmRi+JvTCWW3ji0cAFcDbDmu+\nuLwqD2gb/zx3EqUEJe0+z6/HoqjZ+J9waHfW4KKtGLnMDL5+Ic+8PdCLtC0F\nU7lARUVu/5NBXV7TuwkxoVOkICMIYXoQxKJ1bY5me7mYH7OJKcz+qeGN5+gP\nBsQAA3bChuebh3B0QP7Z2WH83gScs0ZHAmiDlTADFZjLqeLJWg/u8iRcVTCB\n1dzqLmJhYuTcYKggNgxC/xalPiCEC3YGH6RjJJynQhm3zDhyMbOcbQLdE4VS\nJp5k\r\n=YNc3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDF9iJlZU468Yca/8l4JAwtbb82ehnGzGnqG+3mx5hi9gIgS1nQCOp9/5YftqciRHlvFAyIpCo6qUu3NuiKE2IwgPk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.3-next-1589201539-0a882432.0_1589201595329_0.34721251857560476"},"_hasShrinkwrap":false},"1.20.2":{"name":"@xdn/core","version":"1.20.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-WNaGOW2Ion7Mvge7vh4GMqmC7pJBoN1GiLVhxCKuk8TNCg/CkW/ik2IJNR+Jg5Dgjo/4U+mduJMbxyx0Iz8hwA==","shasum":"2ad951dc1b72a149da7764d81355b0a875c09971","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.2.tgz","fileCount":121,"unpackedSize":466938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuUszCRA9TVsSAnZWagAAlYkP/0go1bjwYRgioKLwm0gJ\nenq7CCk452koRe/1An/QzkF5+/sltofz5d6dgsXja71ZrYRcnMhg/OuoaZIS\nmv3+9hNxPUM0DFLUYxz4qD80xb9tCxqk6/HZPljtDkpLXd/zaOv+yGGOrpQE\nu8HdRPEEWVR1VT6CL3ewuDmTqihAQEN5DrYT/FQtkHc9IACeugfM+xEZJIN4\ntAw6O+dYKUp+1Oc8lbJTubavnQEmSwF8copNI2anKWJW4443Wyg3tchHfORp\nJVIwCoUmy5ab7fBDtlL1OS32wR1phsQPpic9rKZS2OlF3+hN2IizGvXFqjeP\nGcDonkbCX5QTjAnl5dqHgPH3VVjHrxM/VtJEa8N3W4gY4neQYqydYcl6q65g\nGhBVbMwvTkuDn3q0JivMRsovPSElezEM0snoJ7Yt5onW/JECiG17SaZevwEi\ntWmRRzvtuQM0h72IyRDiZlEf3/iAQPgqOYKIWcbzL4yQOTUv4eM63UVtvhUy\nDSbVnxJiDxvff+qnLF2SVoEFaiBjKf55yxVVLdyNuyApejih+v/57tGo4TKT\nASEpKljDLziojxrBhyy2sLHNO3gYLp3ZDuwZSMhpfhTe25kExtZXFqhYNd4a\nbZpoFn8ZzNmJXiH2Zs0CfUn3kluFO1MWsxg/4OIsuDVfHtb5WQXJpDEembyy\nwRud\r\n=mQUz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDnj8d89TueomxYRcWAGDnJtAzTiDYzj1kRkvIckq/1sAiBZhfO2SisEYDSgLMQNMCryHIi8HjWBUyX0+s6dENnB3w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.2_1589201715569_0.09785823917207614"},"_hasShrinkwrap":false},"1.20.3-next-1589218968-7f515349.0":{"name":"@xdn/core","version":"1.20.3-next-1589218968-7f515349.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.3-next-1589218968-7f515349.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-N9akBcGSV7z06RDGKYpKbBHnLWDwsAIADxymy77uKGLIqNCH2MDBFUKyuoMnX/leJWFf5myuvkcHUZ6E6TXKsA==","shasum":"8e4922e49704d0f063504c474f7e0edeb02e22a1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.3-next-1589218968-7f515349.0.tgz","fileCount":121,"unpackedSize":466992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuY7JCRA9TVsSAnZWagAAAw8P/1uIoMIFz/DfZeVPEU0U\n9AkQij2Fgxs7zx+WDsLMJoipYC3xr5O+MrAcWVsWKIXK2m0HM0uisyRBnSgY\nO1sTX9Q4gdMgUp5p7Rzcg+DuD3WkMRtCQK27k7J5nFHG7l75nCWLdrt1UQv/\nLhipEyBFkngw8ja/KLR8mEWa/Uk9LR/MGSeCvmYk380ixlQKcjdzfKT0l3Td\nn31AQ415mb7TzkYkolr+FPc5+lprrWC9qBqiu33N9ENj2ZFbyJMRqZddK1cL\nVzGm/WdYm4crNBO41OmwCtNLzPbtbc1G4Qa3/AVAiXQDZaxcFKlIY6pDjjdB\nE/xFYhUDgsc6mq2MjfcoR6Fk25DSPVuaTlkE+VdIxwAWvr8TUrBhF4pFINHy\nFO8ttfg+1gIfPB1r6nM6KJCeru0BaSlJY6TvqwMGFrdHXKa2wHeWAXiQ8ims\nkSoQJYOpNe1Rc5ODERYdU9frUYezIDeApy52Ka3NX+fzTencPTr3K2jaqAPO\nX+Y/c0x9wIt9SaTfctE+oQZ0CgpoTEOZw2A0YJa26/eamdcawvSQIMJclxhN\nfRqlFWE1w1RWNAyzJJvTqcUMwIQTmQGLASZ48ZpG2fH9ibCcTVYFecbXAXWn\nmEGH02jt9O/FnvLWwh+n82GoBmqlCfiTASdfwIeZQ9a9kpkskrECI41cykJk\nEQsW\r\n=vvA1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF35m4UBbTwCCLTBqJijQ0F1ncYNq2SyVznF6RnyGyd8AiB7Kw9DjFPl+3zAIOwkamlHQYjZkP3yWVDCRR5k5jObaw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.3-next-1589218968-7f515349.0_1589219017124_0.36763632510802435"},"_hasShrinkwrap":false},"1.20.3-next-1589291190-b110455e.0":{"name":"@xdn/core","version":"1.20.3-next-1589291190-b110455e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.3-next-1589291190-b110455e.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-XiubpNP/AjjrdFf7qc0Yhsh9XF6Ys2OcxZ4nZ4RZXVd3Y+a1NtpJobbr2kffE36Af4JrL3D2UUSBLnMgNs0+vQ==","shasum":"8cf90b265c2730714afa5bd351bca04509bddc8b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.3-next-1589291190-b110455e.0.tgz","fileCount":121,"unpackedSize":466992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuqj2CRA9TVsSAnZWagAAvZgP/ivb1Df8i5Q15ovlStlx\nor3hW2SM7fZ5PJ8xf5Yk0QrB8WthJRHCev+pUJItESuwL/BojzmfoTHXJIkD\nvkqEBADYGJiJKg/rSYihMuYUws6Ax0QmsWZ6u0NJx4qAXXG9IcXZOwL3k8yT\n0HPw44I7XPIX7lL2jk5P1C5+OsjmFOPL8vRzYVTfDgTllupBCRK1ac15rQVw\nsCLJlBCkzOIIDJ/3tWAJpAtWVEEhzV5mZfbsmm5kWuZW+lHYx0cZn7Buq1wA\niS9TuDebaZmhwpDcIzgRP4lKzZh6zGOTt3vnY6JMmuYKjFtcz4woqA6WwB3g\ncS3wpoFIFynMo/pMcEwoKc5L18Yzvb+OSetn/H7IkYxkG+DIZyGukwIFbXUN\ndBzzlJJFVgB6mMnV5B8h84uGYC6lkXART/fII2i3HBo45DdW9MiHAbPxJ+AX\nTsUzwtzLjjyN6eRbTPHTQ6FYF5xLUT/0QEGJm8JIJpLeoW9Cu2dPQlDVnluz\nLlvfwUi66hrcnFKxwG71rjkWnXCaLc5U8iH3bDHmVdCYOM/qDCUpiMA9IxhC\nFe6TDJdG5Vi6FUTRmeRrCutBfEPdx6nuyOMkPum2KWhATFxib8CAzatDzrQB\nFlMrAXedt6zfhETHDe2Skd8Cgsk1XL6j77pGweOjOLEGYxEWJ3HdASBpsg21\neFQT\r\n=iBwa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6qwo6GF5HFVwr9QcuPDngOftFz7Qp/N4PbpcIesFhRQIgD0JlsoCgs5/Fwnb+Lq3t+8BLLI/WaDkLFDYlnvvp32Y="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.3-next-1589291190-b110455e.0_1589291246464_0.004999672501969643"},"_hasShrinkwrap":false},"1.20.3-next-1589293140-d294d59f.0":{"name":"@xdn/core","version":"1.20.3-next-1589293140-d294d59f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.3-next-1589293140-d294d59f.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-a0tquCmJE5fEKW3xcv4gJwb15rW/yHzP+P8txzqnXaD7v/EDMVFLMGmv/lm2MlgwVAd6GNsv8hvanH2PuXRaQg==","shasum":"65f47b0bb422bd35d78c63238b42d6084a267df3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.3-next-1589293140-d294d59f.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeurCKCRA9TVsSAnZWagAAXoYQAJVR+WJ6V50kCcqFXRgc\n8Kp3cj/dsar800cByL99nyUrLfnYoj6mBxpgB9SzsBJ54dUOpdee4ppYdhca\npGnfJA2RNhe9AO/qRi/4904hBoEThTvVX5AVL/us8lPoDywP9FPdcQLFTlwM\nlGnmH2HZmNn2b78mDusRxP0SeUbcheGPvSmITLoNW2dHdGHcb8ThAcVNtTMc\nZyiTxD7BlnBT4SgFNkqq+md+mWr0g+Pt7mWGXmBv2oaazR/a18ePbEj1gC+x\nCga8CojUmyrhB3GpIYltEJTv5zMxSqhJvTjdqcbzacPyKNjtu9ttKQOmxsQy\nxtPUELunIOezMkFOB7unhyr1PhrgXd1YjmwhFuFDqj7C7WIzhaSqNFixSJOu\nY8bvRj4AZ+6d+QBWNMXA1b9M48YvE9qWoexeNhikgfWNiCJkeNmI7qgSURuc\nEcVtdVHu8e0zcBR9Mn3vyWsw0Nk3wmqzpViW+iMCAqEtTJC9p1sz0IcLUJWP\nHHuknY3bqYt7Co+VHplLTBo7aOHsBPyLNyxILG4aDY2MCHO7mxpqrid83ypY\nUNDENTzktr82WrFEYY1ua43f5X4p26ZIsAx7BB4ocrJC5k5EsYlf4x3RySFC\n1K75V76N7ZwOoAAA/o4BN1GkBeSEu3+MrklTcah/JoezbaGuFBgSWtKXhoso\n1e8f\r\n=1kFE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICHLtIeSHhpp4H3kiuPQ/0vSl+G5UYUVAIyMmSYscHewAiBL3W2Jfp/KmzhW0KxQujjfmgtwuApNFhzjOjmBWM4qIQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.3-next-1589293140-d294d59f.0_1589293194174_0.3891371301495281"},"_hasShrinkwrap":false},"1.20.3-next-1589293209-099c3cf3.0":{"name":"@xdn/core","version":"1.20.3-next-1589293209-099c3cf3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.20.3-next-1589293209-099c3cf3.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-eIGkiWqOUe/EmbIlvQ3B8+DiEoToPlXdA8ILKcihEmDL/k0WWSGp4pOamsKoNKd4ijOGT3AGkrpiblWvSOAofw==","shasum":"64c461fea89d58b3812519cb3f2d1d2532ce80ce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.20.3-next-1589293209-099c3cf3.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeurDNCRA9TVsSAnZWagAActgP/30FN1dTm4tiDnS0KXR3\nf5gE5ylq6DnNcdnYPQAmB2Qbk4OJNY8299HwUweUO3Wo98qHEn1iWkQNwZhJ\np0NY0JudUzirC9J/VL0AsG9CZsmaxv4KNH0N/ood7TrIclnLC5VkCHPvwnlt\nnvxFc0r4rpA7YxqsAMu7OgtKCI16iWrnIhx6X+a9IVeivGb+u6JeS+zmx/9u\nAmi/LZf+WJDMrTjx0gcD2lqFzonYRkNyqQDPDxLuiVaGatIfXWKorUVb2wtB\nM8Ty2DCAc6tpUpF9ItgpaazzTsxjCkCnPu62Onqxfw1On7bUhWgW5KVQis+X\nELozR6joULPc2k3QMH8Jgaeh8hFgFnP4G0pEj4vAtfvrdJEYUDt/dtPuL/PA\n26KtiDUQ6SgsVLcJm/0boA8KJq3MNKpnDV4mPuByzlUvmihFLHikbq/Y8upk\nJZMwevyxFoV5tjivHFIexiMu1SrupjJtmWP4STRqXL5UbQ1gmUt5DIaVVR0W\nrUfmI/W4jFSvSExew2y282/JYIf8ZVawRYTLj+6dtxqo1eMYk7Yy4gZlsB2f\n64yH4Tq3NViTp0lKbuhI+Mzwc79B85/SAV8cVcITVQHaUGn8BV8t5DOIy1qS\nFo2uvKPusX5Iw3DXAqddUfzoHF7cR2dg3JQq5LpzMwWkYt6Thg2CPuaQIb/y\nZtaX\r\n=94cy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBxW/Bjr7+AaK8mUH2kLY67OpLfkgW4Ld9iliC8OJsquAiEA2hG//caDLZDg/3K6NmtqkQULnL0WRFlc0pEmN21hMxQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.20.3-next-1589293209-099c3cf3.0_1589293261290_0.1935917223391348"},"_hasShrinkwrap":false},"1.21.0":{"name":"@xdn/core","version":"1.21.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.21.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-LGR6rmi83K4lczDzulr1fza8+sf24BrkppnyrkQFAdzpTY4mqD9RQ/Yrxxki6N8qaXODv/fdAi7ff3gWPO2Zqw==","shasum":"8a33efc887ec6f7e080a760feb7b6788e1d3643d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.21.0.tgz","fileCount":121,"unpackedSize":467131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeurGpCRA9TVsSAnZWagAAIIcP+QBo1w3AhjjTRO6BU+SO\nyrsI0sstBMSZ8sYfotpwyf+I9rU8JpfSpBiFZQhj2exwW/cvohtYjX1wgL3+\n8IoYT2TVmLfWLQ3zhyWSVoMaVLcrzNXWKmBRmNohDXNdXBy5vwGwdIVnK6Q7\n+i14Nz1N2+bi8G6Xk8E+cRAwSMii5UguSj93lLA1806NTNyg2BIrl4CEsncH\n4zQgQYsPdlaGNEJpDdWGuk9N4uH1Z+G8Yvl6Qvvr2smzFeL4GDX1fNS52zgz\nS2LNEHevJgb9HRXDBD4PNuYAkgW1dVkjWJMBlBCZ8GItd4H9WP45TrQnU28y\nMKQ94TA4nheTJBoTJbdNqQrz9y/cWq0vC/tHH6r6Gp+MjOxJdd6sKOCC1H7a\nLei1n8Tm0tPYsozycDbl15H9OnT91GJx8kEvnukx/p3yA3TcqUWW/S57JqZk\nebCLHDzxC369HmOeXH8eyM+hzFhapv+nA7ohJXyBXZRL+EZOTrEsaWNczXsO\nYL3GHTiGiaZkCoEDIUMla4Jz+FLHSBJlqMGyNXLdTWavfVXJBXheYuNw9BY9\nk65X4Sh4dweGg/IZQsccu+zpAZw5SRa/4zloi8uU/Of4eQYsbWVEahobJ3D/\n0Id/zmZBYzx/CVAVimorbLKCbOMsAxzo1fugrlCeAgnxJg3/bQvz2p+1lEbK\nxNB4\r\n=/bot\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCI3nUgg+1dIsAGnfZgrfCt0QYYMsdU0Tdv0KrZ/b9t8AIgA6+W+I58cZEHLefgN+nNPz1DaUgEtp7QUSCRH1ycYVc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.21.0_1589293481557_0.5034145480779644"},"_hasShrinkwrap":false},"1.21.1-next-1589293456-ade91ab0.0":{"name":"@xdn/core","version":"1.21.1-next-1589293456-ade91ab0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.21.1-next-1589293456-ade91ab0.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-kO47I13K0a+yjlV/vDYWYQIBmLi3JjrDRQg65oTLFAzuhywyJtKzdTgyXlZaCOG4ACY1/QOrAOUFpnzk2TRg9Q==","shasum":"e6951975c2974843de24e6c2d8a2ec9baf091f4b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.21.1-next-1589293456-ade91ab0.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeurHICRA9TVsSAnZWagAAMXwP/1p+0dSHrrTKaSHmUtlm\nGJQDWNBO5Or+WxWWCGAmq1s0k4aKAed9w9yWMQ4qGmNZh8rUXONvepCauztp\ncnTTTsZ/iSfErAsgjfnDsudGY2poQqAL9tV8iN8BUlJ2JHUZU4XMM9OJP/Ye\nCYLjDFhzFk3gHtcjSkT1XuR7c4gUgcVikFgGFpbU+OcBhRo+En6apgUV5FfK\nMdPv0WHpr5CnQTX0KcfMNKywVyVxYWpl/tHryv3RUG6MbkAQF4QT04LjMHTk\nVzb++YNSrlp4FqFZefDtmPm4wEcpahVFZofZpb9MCwIj8m+2Ng3lY6e2IhEV\nwl+aM0NgqZADC2xEzFwctahAir1GbyxBSAHnSGjjUDQLflWyrH4qqlAsECRh\nozLC9YQm+wE+ZozxjAC4Lf2aH1sjegxjVCBWBPM3b+ahspVqLodbjenwx/ir\neLzRszFPERseTGn9zeEV/wvk3SDsWG176LSSXC5ReVug+2r0u+frllzH/Tnd\n9CT7hKpFVK/PMXgBUq67FhalsBXsoQrrFTvarV6SoNfK54yL/P99gehBU7m3\nWJToK0iGCf9OltTH1alrwVHOK4Wjvs+btnmaTZ5lJjA3/5eZzncAiBugfDij\nbBDTtA58jUCiWTh0QV1erXtBnuHu+RCDRH1WTKvlgKDLTVGtS8+ue7W2e3xb\nuDEx\r\n=jYcJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDyB/rIOVo/eQmf2khoeHoMORDzVvJRFUCcFwxn2BamcAiEA4UXt7kmJM7bPTzWiEo8n2J5oo9YP03JptwMyAN3IwrI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.21.1-next-1589293456-ade91ab0.0_1589293512124_0.4931695822545279"},"_hasShrinkwrap":false},"1.22.0-alpha.0":{"name":"@xdn/core","version":"1.22.0-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.0-alpha.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ugNIw/4WNh10252wxlh4brzcv6HeyDNFlJPEi9+G9YdtsTA36Bj4tQTBlu0q4A85TdBlXfVy5/BiQEzqkFWrGQ==","shasum":"da06e85312da00d0aa9716a0ce892a59781bd954","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.0-alpha.0.tgz","fileCount":123,"unpackedSize":485945,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuw0zCRA9TVsSAnZWagAAVm4P/0SLi/G6OsiZJsH4uEp6\njSKJZjhU58n8Op3y8covqNljLfkWwKhZF0+Bk/hQXLltVxo+5QD0KlhTVvez\n4LBxoYcoOOK0hysYmhphKggaKIfMsPfcMRk/KGdY7SJVnafeVpoSIwuz6G4E\n6rozfsOE+WN+vDjE/Fxb0xZzvPV3ka6Kma8Z3NyhQbMQE8hP9AkJS3wv5T/i\ny2aCEevZRlNOfm5P5C80MNEJpv3i2BiV86+7tfzzzJ+YhaQnFKkIUVJQztvo\n8xpb5RTItO+Qs5dLcH8UBwtkZ3zq7v2g2TOVzi04MNXfdUOtA5q3T/Ic32dQ\nUQm0OitJhhynWnUTjYPgEPtE7bgvhsvtdJhnc+McRnVbMewncba8oaGMQBrD\nk96WRetrbLaAxtHSQdIdphxfp9wvtE+e5jm5+2q6/Hxi6xBRYUrR+kAsqGFZ\nZoWD/4UuA6Ugfjty38tK3QvDqcAPJOarV3W287CA3SrrMTsaHu3C+q6mYZUz\nfHKgCuSl4Hrux7hg1sH/f6os5E34L/cYR28S3CA4Emx3XGX/p8RuR/SI42ln\nAAntxeXs3BkKCKREMIrqhstAcACL+K2zZo+kIEYplkC32cTnqoT8ziMaG8iD\nD4L3s11fSlxdgeDp/2crGlwK79mhFqp2UHqT/enmjnaoHNHj0LrZ4vYh7WIN\nsDuY\r\n=qhdZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoybRFh/jJCGZHtHONEt6ZrBCPMFcEzfV7xun0aQ389QIgNQ5Vo/WMZXZJUg2f/kAIpKeE4bLq7Gmf2xKmFgeDIDc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.0-alpha.0_1589316914719_0.3095003690381599"},"_hasShrinkwrap":false},"1.22.0-alpha.1":{"name":"@xdn/core","version":"1.22.0-alpha.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.0-alpha.1","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-uAcsbUVqMImA8HZJ5/2IokJBSGtV3oB5uy84YIx15g8v1RTbK6bPv2t7QciSXi8sG/ky6a1fBcTuwLn3H9t2VA==","shasum":"fcf4a9b66a735e039b883ebeca4b8c3f1026db5f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.0-alpha.1.tgz","fileCount":123,"unpackedSize":486563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuzATCRA9TVsSAnZWagAA7ZsQAJlHcMkpxI/2MK5NLqlm\nmoSn2aQuovx0M0ZINAkPcq6dYvw3Pb9Jral/YiupqS0tCdg2A0LL+bOtalZh\ny4WK4cGYISKuqqnHXsLby+kVT06Jix/mldg5RZNw2zbM4c+8dvE7y2OZ9Pyt\niI2+Bq9n3+H87/E3xWgdYAZ6JW6ihzyBrxLK2jYYefp+TZ6wZ9NicUmIPqPi\na645FlZxVjDs//ht5x75gyqz01iqmpV3fHV9JtzlNDYkoLu6D/OHk29xaQHb\nS35N+1LGn9FO2jr0uSQAnNRKEV1wOzmu0b0fZsvql//Q6jmLmsfB76PL6z83\nl/v8iQlmNL7zwCaRgreBeX7gSeadVXPR7KwGy47FAWWqGvXVjFwkisINK+CS\nwyDqA5g/Yyfm1MJzKZCwAoFXpX67Vm4Vbl7fXKJ6IHVPu3MHjDXtNie35w2I\nxwtdkzTGvsvKi7xxL7SR/JeKZo1ZdSAYdFtN09ktG+G5SYoUDtHHtvmXKpOT\nfoxhlSmuWXcMDoa2Lf0s2wqIt+6CnqTkCwpaTd9xTfgbDktb1s+lsJq4wV7E\nf2+I1Fs20ks9+JWIEPey1BaBQ6hTbsx6RPW5PRffAuyNJ2EgAWT5dBdpg3k1\nVf3hOL+HOrp83O9AU4ydsOqryn1MCoxF+CQnV+5+Ba9O8XFJG+0semoIxfgA\neCin\r\n=Fhrt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICVtFfw4PFjKaB6++Ev9EnFfzzHXeNv6fB42lai2mc77AiBmnPd9fuOMRnCOQyi/ZSEoshJP3ua93nXLlq8M/AnVgA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.0-alpha.1_1589325842842_0.08074708425494648"},"_hasShrinkwrap":false},"1.22.0-alpha.2":{"name":"@xdn/core","version":"1.22.0-alpha.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.0-alpha.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-MD595Sj/HXDKXSDGmTmeGgaZ8phXOZDIaSFP7wbyqMFdnLh9bhOUka+wn0m4Elq7r80YwCov1P6SjdWV2kyivw==","shasum":"efc00da1130beff3ea3847bf13f1833692314858","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.0-alpha.2.tgz","fileCount":123,"unpackedSize":487387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuzlDCRA9TVsSAnZWagAAAroQAI3U63xk0JtxLpOS1vIr\n8K5jEP/L+ULMpClhH1WYWMKnK6Ruc3licEgG9raL0ykKG+yH/MKKYOCgeF1D\nfQ6Y8q98Dn0sdLgkpBpwCjM1m/g/IksmnHFIcYkfB1N6BBxWWhmnrBtBYHXi\nVIAa6JBgrx4e6fLUaeIcpEAZhLs160UsHBOlk7t2BJPGA/YrHeub0fGqmx1j\nvvorqmY9tAZMaM/5SIfK4ONQ/Vjztw72oHCAPVsBuO8KNw187H1KpbSdxCa3\nSTOaVfiUBy0CjhkLW/oqyhgz04bqd6lJkr8hGdpHrHqerSvmoyyM8/mJdznM\nMDcopgn3KoNf+IBPx/bQQXxeoiHHTbpgE2HDco53o6sB+ZSvxU/+ETygmwoB\n9Ydczya3vC+VRc7e3vD6K+IS+1nG731Yq+milisoXZenOjV9jc44BuSGTQny\nbkXVQDYk7rjeUfapRe6UijIoLcQq9fu/UQbcHih4G+WpMIVWMCIxVLDWqclN\nTOkLy7qBGsYbL7HANeeiJDLjFWjuulqPV8HpC6OShV0Uo7d0xIrf/1rTdW5+\nkelfGnD/3F+jWOJO0CiGzbGHS4vg9JxJc4+oeFc61Cfce9oKqGYA6Owr+fQY\nim9bv4xsRi4CLI7+ToZPsChKDow9Iu5fCEwWnWjJQu4jWV+yRWXxZuQeIf5h\n1zZL\r\n=mglU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAC76zpDzI9p1JcMaaX3iMuCACI/r1/mCDtsJ1+pwWhiAiB5FrIIRA8pvnoAxFOXbS8Wd13+FLUmaZe+UHMsPEoIoA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.0-alpha.2_1589328194966_0.20641072965318097"},"_hasShrinkwrap":false},"1.22.1-next-1589385187-faa6c034.0":{"name":"@xdn/core","version":"1.22.1-next-1589385187-faa6c034.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.1-next-1589385187-faa6c034.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-jQRB8gn0nxqKplJkAgdSYrmfOZyr3uqhBv+8HBQEQpObLOkg02O1yl5fMzvez3YOG4zEE5O1oMXAFZ4A2NLaNQ==","shasum":"a55015161c164d255df30908f6d4938c6cc9b5e8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.1-next-1589385187-faa6c034.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevBgXCRA9TVsSAnZWagAAMfsQAInLTUxpNEmr/+T7WnRm\nNZ7pCELCCxEdz8I4GvZtSBkIMSQEe5GA4ADk36oJJDkGf2vXtU3+c1e/Eepz\nYElyfGMwFGL/MXnavIB+5+BP2ZCk1BGPTtR87KDiwjt+BQGfRUg2CymJtJ90\nPrmzi0g+VyHmJioVTYSZx23ZNHzgXXNv4NmO2UzmZgH8xx+gBO+09c0Wbwfw\n5Y4nP6N24l8SZ/aqjU5wsdICaTN6J5pTAdAzDSkDS19lQpopK/V+owhhPDS8\neepukTUKlmWyKTrU2XN+pfwNhShIxDayHHCcKFmqmQjSHOZFZe8a/q0cTAIw\nhnZK4GxL925maO/Z3W5hPCGeQB4Fre2by8R6hlhxyj1/CoceRJV8f0tY6lSE\nLABWN+p6S3s3DxeNzLB6EEmcom3DilahBGyblon/d/6DyFIc857Ui0fJXuqO\nu60NyTxk8t+j+hTVgf4pUXuwu9MfmSMz1Z4bU0VeYcj8FGlMGWvQUjMAHkiA\nuV2SuNwc+rPg+AgwxKh1g0VH9DpQD/OqGorHicpk/LrSaWSWVmiDwszffUAL\nVk+nyDYhLKjOmaJ+y2+mhmGqvJ5txd9dLoCEL3H7/KK1Qsfj1jWk2a81IlY3\nnzhMxrnH1g9LSi8niBGH9XeV8HOyS0Ti3B15zbyP1rvGUImJFtMGocMUyMcY\ntQmG\r\n=AuHW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCH3P+Qt9ohbpidcoKEnqSi2Haxff3JXwVlsFit+RzheICIQDDxvsFuqWx5B/EOwt8qLGjpzkKrlk89w9wdRWHxh3BcQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.1-next-1589385187-faa6c034.0_1589385238943_0.546449032254664"},"_hasShrinkwrap":false},"1.22.1-next-1589389614-bcc4482b.0":{"name":"@xdn/core","version":"1.22.1-next-1589389614-bcc4482b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.1-next-1589389614-bcc4482b.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-4H6BglOpBTV0AGVQpH8KF/+Mrf/xDOXOwKlE7Pi0G6rhiyczLDKWxKXHZQVnjmUv/6/IH1sU/SIRD4ZqWxTNpA==","shasum":"f2d636ca8f9f5b1395fe958d944a9276dc9d77ff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.1-next-1589389614-bcc4482b.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevCllCRA9TVsSAnZWagAAof0P/1i88WQ5N0Yjbt8LhQSh\nV//gaM8RthKvaXfKXaJ63jV9Y2O8yq06bxi/srbGzUqTlIeHuSlgGYGMvKwG\nRagJ1tDtZJMmZYhjldUcf+pC5g/qziZCyqNPpY7DwAY5HFelB0Sx/DEvgRgV\n47Mee2oLJJj/N9aXoFYngU0yTC0XFxov3z9oMoHbbIyHHNl08aVNRKI6Lo5A\nwUoi9Gx2/EcSIOHvgnZ36SwdU5KX/rTeM0KGib+jPzBSAL2VEbu2gZDGhUpa\niRsobsPQdo8wEqnuheiGBErQkRDT4qY+WoktnfSWyf48CuXQBciDLJyjkIqH\ncgbaqtKtuply8ZUDz+ZNpnD2kxk6NQEYZ7Byzna2pU23PlumTpDpCIhh+rmA\nseQhYfXeuD5ItoOU4AtKv7sxkG42iArWjFDT/aMwACfafHsH0SFzHLvHI+ca\ntreBg//wwAvURdoElbbnmjrQf7L7hWYDGQk0aRlRZEftGKw9TCH26zrbTQah\nOXaHdzM2j5xJgQS9+1JRZfKKf8R8ysW4/Zmk2YMgtaTjNaYGILDCQMMwWG53\nZMMJqJyaqby9pVycMVvwhRspLFhZLwJmgNL3zD10BXFVUGz5/AWc0lnF++9J\nxAYtPY5ESSsKt/EctY4Sz1vG+Z9pqvLIlCGD0TvIfde/E3qW2sa+dvqknwIU\nxxJt\r\n=6aoA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHmt+4/WyCkqbBge5dQYEbc7OjrXrhCUligvpqXB1psIAiEA75enmvrbZwp8z5OixPR1ULHZmgdaSP5Jm4h7gPJuHgY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.1-next-1589389614-bcc4482b.0_1589389668815_0.7973866012914903"},"_hasShrinkwrap":false},"1.22.1-next-1589389698-9ba6d576.0":{"name":"@xdn/core","version":"1.22.1-next-1589389698-9ba6d576.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.1-next-1589389698-9ba6d576.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-wUH7jGd+AbSkrLTje6NCoYSV6g4EUvUx0IB1yPhSP1vY0ZXGQrMbcpG3PP+MPpqI+gpGuO6ruaPD4Ap2NKPM3A==","shasum":"6eed1ca631ebe9d981e7e6ceb9735dfe4db65b57","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.1-next-1589389698-9ba6d576.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevCm4CRA9TVsSAnZWagAA14YP/2bsp7yj74cW/8YnLk23\neM4raQJ1m04g41bVgmoVxMv0zuAWP6oeh49Ge4AObuS67EtoePy1wgD9n5Q4\nS227a2a9grS3epiLa3l86ItnqpoXzNt9BIhpAMO7/mv20HH/oZRg5IZaRbUR\nDEFcpHw2vyKU8ArgvKdWxRjqp/fun/fV4PoiqiGWF0qgVZ3mYQtLO3VdTYBR\n2eUAuwBvz/QoHqZUoF5owG6lNZt2mHbLGcXJO7bKl6MPw13YrPJ+b/QeLqM8\nkDIIIrPBEsB2up+55XbME6/emPPl3eVyjkfyciQRxsv6TvLByJ4b66tlSYkG\nq7p9AqcIOCMnr1KN+j37T3Au+8Gc6jOyb9fzFHdFyKwZl70PtsLpveTuYfxc\n2WyZJux0m2kp9VsGSBA2YYxyEY7Q0SDpaK4ahnUQ2IPVn0qy4i4mv6M5+LLm\nOyHiUMEzNfl1O0UAIoOPqaMEYq047/0YXe71Ianl9EVvLH3hXay4HgdhUOdN\nN5tt5f+vceO7IgR33RQcn3GHXE/Uwj0WDD3bwSOHk9Mh7BLWexJuGdZFQ8j8\nfF23cps6NMw43XMkPftuyCHRGvMOi2bvp4Fs1BGkb10px42dlRFo8O5nurzg\nS9uOw8bAhc422BSbCVh7krnk30G64CMSx585byAbu1DUs35sZFl94KPUTSjv\nVKM3\r\n=XTKv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCH8nJ3BvfhQaE0N4fTNNVK142LqUi4+SNuurlJS9e0WwIhAP8TkufFNIt+nhLzoPHfK6g39zfHOiAREGVN+d9BtkyB"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.1-next-1589389698-9ba6d576.0_1589389752259_0.8760645896081631"},"_hasShrinkwrap":false},"1.22.1-next-1589389733-13fc30cf.0":{"name":"@xdn/core","version":"1.22.1-next-1589389733-13fc30cf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.1-next-1589389733-13fc30cf.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-RLStbPDrIzaagdPEpb8cKS931zz8BwdjFX/4Zq9z0oOt6UMQ90DMxrw5A/2hOKpUvJZ2tIjg99cyQi0f2I5wjg==","shasum":"e2f639bb4adfb07027ae5b2f51da52278bb9f09f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.1-next-1589389733-13fc30cf.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevCnXCRA9TVsSAnZWagAAejAP/1LYMFPdVsnJ21FKAe6L\n4O35xqkrJmxi/2C/VYaDO0YxDQd5I/xxrqT9YlbR7Frv/vH8tphI2IjUgh3X\neGo4GcmMkepmrfntwcDvV9tzIqYhzde8aYIJure5i6F+oa9KVVqqFaV3BzC8\nDPfaZ4hC6r/ofFMpgyvsdOCtW2j+DRXtD/J0pGX7Q/e3MgtkV1HJdJr6EjZM\nUi6bVEY1RJV2ZA8ZToGrfyI+T9EJi6rHoOst5SGiKClT0P7LQf3/1bBPQ9SR\nKbUCXFvCieHg4LkRjj5xlgLjE0lDRaXO0YMZuE0vmPkyc3m2avRSBS1vGBaq\n6Buc/rNbikbGWxfMHM/rMvNBI53TSnm22DFklQeFz0SZaUTTRWMdJKXRlj11\nnOnm+O5O6gIeCVRYHd3SLV/Eli3s1zyogO0czEBkxHS+ALoUH7KDPaooS1ej\nwMd5PdHunwPv05gMTfmGSVQYlcFSorPm8mLY8vzK0V7yn/X2r/lX1U01b7ne\nT/JgMgmCjAKNYJ0pWxrkwXK+gI+Y8si15t7iJEq/B6dDjetgo4svlXZQ17wg\nIDzFn8QKDuy15XZtyqR8byLl/sZ2GAOan8jo+5NroQAgRhqiWOHKacXf29+F\nNnAyQpvZDZ//1kAwUuxj/IRbzdsYkPs+rjXtT2ArkdRUgF0obIoKpSUDIa9E\nslvd\r\n=PJ1z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGa4zpi0iVl6yvmDkO2yLr6YFq4zagXLPNqX3DnQMrG1AiEA71UvusjL8o3n99NgWQFDxbq7EVwWTP4O26bEC8BQGvk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.1-next-1589389733-13fc30cf.0_1589389783101_0.8849723001439551"},"_hasShrinkwrap":false},"1.22.1-next-1589389859-c943ebbf.0":{"name":"@xdn/core","version":"1.22.1-next-1589389859-c943ebbf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.1-next-1589389859-c943ebbf.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-evjycyB1Cpc3t+g1BNSeZ8Frl44eGNuYGB66VziwwcC0Ekpzt2Mo7O9GMNb3NYd/uQHX0QDRmYa0QID9R59ZMw==","shasum":"83858f9721d4613840374a2dd19ce1f34c5fa7a2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.1-next-1589389859-c943ebbf.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevCpZCRA9TVsSAnZWagAAJV4P/3g4/pa4kIxTh/4vczdw\ndZE3aktlbXDzioIkxKpo3FoumOlAXSmausG7flwX5CWNrwbRjrHKrK7YOWFI\nZWO0A5wvsnk+TiVAhczd7S2coVODgf8UDhEZr/eDm2OwfRAPW+pQsHL438ct\ncjz8OeyKIinEvAFCGluiRPMLwWVu8G5w/WgdoUhTqFbFwB9B4qDJK4ZlX7k1\n1S1WeGy3zEJGnCkqkXSqZe57hIpKi16J8yqM8JZrcD0EErX0FwylQWWXObm6\nSsAvrd33sOp61cOeq0AG/a7+YLsbULM/WS9W6/1Rm7Kmxdro1tqQEEzD4C6F\nVzWgRina4PTi4AL6WQdISKeE0DlCQC+lkR82simfjbBgmtM4UPGIj7HF6ILS\nmIDjZCjZypjWzyBxoeugD0dmxk4UUzKFoLVdahda7/AmEB7a1vc7vTgolRwM\nlAVflgJQSKNyRjfq4iY0vqOMeU3kXu4F0nX5yoldA8ip1iyphTW5wknN1Cd7\nN9vDLdBkZhcvul2/XG1CmvLIywnSlOF22Etvm+EO5qQCwqEf6kaQV6U0kGc2\nVJVH+lz2XJRsQ05QzJ985BJJgxlOLs7cIxvCUFwFHa9KyRz/0Aor9CfxG6U+\nO01gR3TnvCy8JfqHVOQoHBa6yYhfGz14RhBodgRAmZR0nN2zoWD3sBm2oxET\nJkR8\r\n=VPhQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLU4yoDK5RhfyUfa5MpmKL5z0Q+Ont7v/SiKe1DofALAIgHLfJ1qGcuQoAWs9tibuokAOtUKa0ZNfZ2fIkl+dZlPk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.1-next-1589389859-c943ebbf.0_1589389912588_0.40364380109649867"},"_hasShrinkwrap":false},"1.22.1-next-1589389897-1088a822.0":{"name":"@xdn/core","version":"1.22.1-next-1589389897-1088a822.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.1-next-1589389897-1088a822.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-d7PhWL7XO2LLmJ6En6csuugN6KRTGZCzt0rfbV7kNBfGv7lcmoAXlFEPh7spBVP+KWO/mFgG7vKsKF74gZeZiQ==","shasum":"014fef227cd3730bd3e355990b700160fc71e6f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.1-next-1589389897-1088a822.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevCqGCRA9TVsSAnZWagAALOIP/2yQLdexSVJnkMgfhi13\nKb7GcdzXKUIY5o5bhykFrB6e9PiHzEwf4Yxx7tGo6u8RcOqxfAzrFknjlElZ\nee+b5rw5ZjfPe6hcUDIOiKUJnBRJLG8Z9ARr7uyzQVzD5p7mK5tovuxUxQep\nvr7P+CqCK+HfKlF2cERu461ItQ/zUdGMX2P4ZG9xVwzmlDLlniyPPIdBxgUA\nrbKrQL2Du8Wn4xhveCkG3qmyy3YnAgCfz+3jjiDTSYS3EbI/MOOtLT7bCZ4y\nasEJvhC/tmlRwRIsbf9dJW4/KxWhpAT5xEJG9HSM0tYXanQVg5jKZawDknCZ\nk883L82Cs7SFe3zprg6+crKx3pM2Cdt1KReWh5qRiSUofgesQKGfrBcFdenh\nIwBLlXKc0aVhuce8t0y51QB5WSlaw0dmjqJCpAEiurYCfGVcBUAlnPjS40JZ\nUF8mR+XlsUeqrnOOZ5fT5cPp5dS4uT5czGLtw6v3OhJZ4reXgNZT56havcH3\ngYT7UfKtdNyvh7AdJXAfOzHhOVAaVsiGq0OfT7fXgqeVJ85hG6e5aWbAe61N\nCDfljF30x00oiM3uzLyFCy9WGibqai+zn0cUMxr619FjNuVZm9BFaxV2pwDq\nUIkN38rAGWM4XhKUf4zAFK7vQJaaoe/jSEkUi5pDuna7PtLh31ZRk6IXQkKh\n7ZGR\r\n=A69U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBLI63PnLhGbwg3UVbwjhsR3+nrxl4VdgV0DsBikkR3IAiBAg0uTzn1Cw3nNGs2o3S984GFX0PhymQ4UYEtyiaFAxQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.1-next-1589389897-1088a822.0_1589389958023_0.020200639947514976"},"_hasShrinkwrap":false},"1.22.1-next-1589389946-3e06b0b0.0":{"name":"@xdn/core","version":"1.22.1-next-1589389946-3e06b0b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.1-next-1589389946-3e06b0b0.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-jUHt08mK0SVDtmcNJxCx5OpmVMnTQ3Gn8J5/q6nTHcfZNjqfz61legMhYndAAgxVts5PPljYAOTq1BboZA6y9A==","shasum":"18f75f2e28d7f432e9c57355bab19f411f1af268","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.1-next-1589389946-3e06b0b0.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevCqwCRA9TVsSAnZWagAAyn8P/0Us2TNCpKZ1vYhZ+rJk\nRNvu8ROB70FFH+TTcz+TdASHISgI/JSyrh2Vy43J7IRlEy6saTwrBGOkdQ0k\nmXlAbvjz4BQeEe2JsPldJ0J1dENUeQ97v7jq1qGOuiXwoZo+LS1YouKCSCZy\nCjtJiOfmbiGMzC68ByR4MG36mC5cHGUtLj5DZ2un01KAIPITm5oN3SHFTZOS\nf2XfNjSmceS6fOtDaKaRr1gcXH3Fl9EB1iZhBjRzo6dvt8h4mPQr9rLyFVGf\niTqCP0iy58bmii+GTj5Qn/8lzlYVWqdc8fQA5cMkmG/bq+XBgMoVmoRmDN9Y\nfaRtxX0Jw7KsHBvORn6hLsNMyAHpfPdCvqr11CAc9jEH3D/6/in+epg6YxsE\nsRxO2ff/TxHTh7Uu+ZwBjwvIRP4x2PWM56r6yAowKc/YNSlOj7DK8YEwhc4c\n2cfDOKdrShth5ghqyVsPXnr/Sk6qnaZxAZ8HS5drWxGcvJNRuLQDJXauxNu2\nC+7apQOqfsjK7TnFekmTUpV+CNO5bSDClgXCyvQwNm/242c10DcQVuqIMxB9\ngX8ucjMANaSAeewGrbNuRUPJxze83WUkdnWWXmeaJenN+uLozik9m9rWH6zz\najFM7LtGPBUAdiRqXupblGHxfTMrnxoWRkvXyGGeG3dsYkqooTO+r6F7lCoW\nfyCs\r\n=5Nht\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXNvMTmXtnxUjNb1i7LK71JnJA7G6nFnBfsllU1SxutwIhAP0fso65Uol/sSVVZcHOVVMbiCnyffpzAmPv0RnTY5Jp"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.1-next-1589389946-3e06b0b0.0_1589390000161_0.8613571026277587"},"_hasShrinkwrap":false},"1.22.1-next-1589390100-e1baccad.0":{"name":"@xdn/core","version":"1.22.1-next-1589390100-e1baccad.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.1-next-1589390100-e1baccad.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-B93TbmgxMnVBGUFedaFdYipyXcg56CPOUcx5kNHaMyGqhBoglf5vDdfyFH7B2Wg4EcpBOfn8xIvvJh88D1zF5w==","shasum":"7735ebd28c7ded788e3eb76bfa7041bb5cbd5929","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.1-next-1589390100-e1baccad.0.tgz","fileCount":121,"unpackedSize":467185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevCtQCRA9TVsSAnZWagAA6hcP/2wSfH8mZqxOg4dLn6HA\nK0UGrIxz4zPiG4yjBSufgoDNFdBp1XCwjUHQDXuAhahhNMOUj/zORCibypIL\ntnAdws0/gWaj0gtFmSKp3zzuXl8rVPAuSmiSRqsHI244G4+4rXIDiI3ZJQN+\nDOKqAiiC/N+LsLzVme0KY8Ip2QxHXKZwZTg0T3MseaKHPvvAVpIR3l3OgIaM\nYsXssJWRZZD6/Yp1QbpIs78SZQ2aIjPC6a769gZeQQQJcBTWm/0PntbnC0mR\nVWAzajXZOEp86tpK/g1/hgumTljFg46VIAvoR6+iygz2+yLdG9iWk4BMfgWf\nJxzTLcDOFDljaXfzs6c95+6djYvDo21cMYKNBijy+23c6JTEPi7hziCrO0Vl\nsHaveqt1+b2GIDXjZzpsMRyZTOvEqvcw8nY6d8KGSZOmSEleUJAki+o4GDXE\n4qsK5+0UmSNVFQJgybY4gesQ0jDEhVp4tlt4ntCHekdSu2PALYmTzQiR3V5E\nMzM8TLr47thKwuJfr2rlAHkZ16HnEWM30B//O4njrQQowpbm/u5rbx8Q7dxq\nfLpWeEF6qeUVEH95m18Lxz6SRHLaxlxqhkFeEgcjO23xlafr6wOyuXRp1Cwn\nlO7ZzwNP0Kiek5fZobEqZ0O/0nmxkx+R6ksYAGQbct6QzuX+2bD+IafA8sCm\n1slc\r\n=oPpR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHh/Dd4uqG22Cd9JUQgFAYRAanopuU0PQjRzmewBkZMsAiB1nIdlHKs6/l39PwoHXhE19bQ4uLr8DW6sCiCuDcI6Sg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.1-next-1589390100-e1baccad.0_1589390157009_0.35364214653790715"},"_hasShrinkwrap":false},"1.22.1-next-1589392925-6273f4ea.0":{"name":"@xdn/core","version":"1.22.1-next-1589392925-6273f4ea.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.1-next-1589392925-6273f4ea.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-mpbqg7fGxk0XXeVXDEXbinkW7guumx78UUbeOUMss2ZcFTIm0WnWJC2nnhZP65gMKSL5A7iTRVkk2ibR/8+YxQ==","shasum":"b0375fa1b3920613cbb99e1cffee910944e50bf2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.1-next-1589392925-6273f4ea.0.tgz","fileCount":123,"unpackedSize":487425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevDZXCRA9TVsSAnZWagAA5OIQAJQooUTmlaLKlMTrm6e/\nD5ViRAnbPu6oIVtn5XWGlQoKIC3mk5jky5/b8pJDDMXr4tCrPiDXv8nTKG4l\nmeuB/9XEy8w0nGrUWUjCvuMB0D88+3crEBU1NgTQu/1HYDdEcV1yNmFQg5uS\nP79xxCRicUjuQuoh7Ei0k3HrTyA1Sn3QVlD3swPkZ+S/myCn5HtEyF1r5sfw\nWWxO4FBnr2UH5PfnpFVua0QZw0W27qFwkcwjVJlFHLIKRH8m6rP2g9+UO1L1\nWADHGci6+0xVB4p5Zme2rPKpgXR0/R2jFFg+A1+XVeh2Xfb3m6tQaBS92u1d\nJWI8ghuga5j9H/bXvK+CXwdMvatagDBxd312NhTeeUR55RXWCXmpYDfc1xHF\nQhTRhMoickPdjlwv9FVbgrYamjTNxZuG/JC3Q5U9TV72baF6tvdU7li3QyQw\nrI3q/CCN3S8i3pdLW5p1kUvufVsJVTh0J3g1xDBROnEdAd37v77fQd3PXymp\nhXFOPbgwpDp21gHNCwVLUQftUf8iVBUbZU+JATYZKvXBxrsJaDBB1fzhmLA7\nSrgMvu6hSVtHlKwKchtfyR6MrykMeo6OIm7EzvrdyZVnN+leGTntQRcFax1X\nxxUvbnUKzu8wWk05nmsK2v9ZRb6PXR1A8EMezauH3tS7Kiv5v8v5/mHFw2e7\nlroa\r\n=QBq2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuRg6uRgwIVowYb1YPMmt2u1znhEPauR8AfYXuZIvBiwIgSzJGy5fHvUvMvT7he5vyAhDvatyzBQWR6Pu0+ctH3Co="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.1-next-1589392925-6273f4ea.0_1589392982912_0.1905279582178332"},"_hasShrinkwrap":false},"1.22.0":{"name":"@xdn/core","version":"1.22.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-u9K6Ttc6jgcRNEjD0nRd1UGH2ZUGl+xIyaNLuioAJUGpv4Mxy0pJqlqtQxno5QgKrf19Z//ypPNB0oLtj26bsg==","shasum":"1e1183e50f10f20a6fe5967c518e0c1250dac6c5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.0.tgz","fileCount":123,"unpackedSize":487371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevDhECRA9TVsSAnZWagAA6f0P/Rn849bwTcqSaJwchjwh\nA0X4bk4Ny4lqrq1mpAC+9CM8sizjFrT6dSN0/Qzipl+CXtSQUjOGu9PpgNK9\n69RdDdhlFi29+35ZUajDpaaV8LGdYhMf8wmCbThDbYB3+Z9qFa/4ZhT7U8/6\nRly0IRGZCDfUU0SrLkzvWWaoic1KZM7pFmEhe00FIvGxz0DENmJCgFpTZOpq\nOVGsiQ56xUIHLMDTWZk/I25ZDIufEs0SL1D0ZO8Oy5CCU8XvpB2fmD6+Pgrg\niACRNm95C+T5QA8l0HGedZLeqFZN4ipDvtaneMEk9S5QekZRYevH8uXmOgjt\nM+C4nj5cnR41gSJG+EK3lcq2qldjYEw+xks0M+wP6UBdoBVFoHdP8NTD0wAP\ncZ8M9mdwG3bItnGXiNNbK647Y3tKDyMRPd4m2qkGGsugv4Mb279aZUed2Ib8\nAdkHh5yZLGlcwTOdd/wN5v8FCgl/reUcgeHnElLlMDZdPmjY/6s9gLgI6Hpb\n/eRvAQX8JhTrcFQ8ViXX4M4VC1EefOsfP3BxpML4wMFMqfP7u+33fLgrx0Q3\nEBfwpLdHj3XosNy8ge7UFO6iTRYwGgXYpWChB6tCX8NzVxzvKIImc7CZm0Az\nRry1+moD+pQbNbMdyrwVL6KAmTy9OchzQv58gMbXpD5N2BYp69F0+8F6kiG/\nYHV+\r\n=7WsV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC1L5vMHcfaWVXCy6xzrkmUWJ7lr0rW6zMb38U5Q5fFqAiB1bnFRGONFglU3wZAEw7THRbQy8dQqfngwKY/SJiQw/w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.0_1589393475561_0.7786811788954453"},"_hasShrinkwrap":false},"1.22.1-next-1589462065-a8608e8a.0":{"name":"@xdn/core","version":"1.22.1-next-1589462065-a8608e8a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.22.1-next-1589462065-a8608e8a.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-9BEg+X2hO+ENDgOCspZwkMgXikaU587TVxT2XmBVJ5MW4+d4L1GnuakWj2ARjHGIYc/8TypqOFfwc/b3vrfhpg==","shasum":"e0b3a0d6acc585459248c81dab2734809418b4cc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.22.1-next-1589462065-a8608e8a.0.tgz","fileCount":123,"unpackedSize":487545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevURqCRA9TVsSAnZWagAAzB0QAJUM9eSekDqUFnSAHpUc\ncq3zT20cAt5zssQFdn7O3zV2ErMfsOxwdcxG+E6qtS7kt2qKpfPL6RBZFzws\neQJuiScEzUCoANrekRlVwWHL6YuF2+yYBXRT3ABAGpwQ/UjXlurXtQTO2ybl\niFmvWgCgjWjAU1V496LjMW1xvpXhpphmPctD4SnXRvQ08F9HKwwDsfqzvV94\nS3QMyHQdS9Jg269vnJxdbHsFF9mXOUy8VKmG3c//R+lwgzDkSDAh4kpWt/Ks\n+vyA4SWCemOSEo9qT8xFjIT6fB/1Y4ntSq7BR/1AlI4yDfC2TOU+VImPQcWX\npp6webQwcp92OzAqmbpUoWpyykSL/lBIPmVs68ImhoMhGRvsdTO3RZmaBqZX\nWZYCyPCGKr465gTa74RtgYuGVgYs4pgLpMuN0hcW309HkCxGX2CxBOXn5ntc\nxFlmLu7a056f4u6xcCvLbie9+CqPX6IFfmlgkaLfUN+Msknuh0/wUWLqOh6P\nBzdsv8YS1kGqH2HSXEbyXVW/McDghTMUyoqO4r5jDf1thfdXcTcXYk5vhNRl\nwA3aomT7DAWD9e6A5pzTVaqynfyTWpvr26J+p7Hth2+XJ0K1HK1lm+KNtyIf\nBNmMyImqjU9c9rqcMo1E9ghB5Tfsdi1Mvu6CMpzqf0TBSsWZRUNaMFmHpwwD\nz8jJ\r\n=xHJr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIADLzfJiyTod5ZSfWX6wE4OdYVgj7zcWqHo5BMzrXUXsAiEAlYcFdD7DRgaqk3K6c3A/K027lTT/jSDZCvie8KWNKZs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.22.1-next-1589462065-a8608e8a.0_1589462122302_0.8440732999905389"},"_hasShrinkwrap":false},"1.23.1-next-1589462132-2bb55742.0":{"name":"@xdn/core","version":"1.23.1-next-1589462132-2bb55742.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.1-next-1589462132-2bb55742.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-mU+wKLnrj9ib0oLI2QFqvdPHVjVfoqBH7POoJ6UNdCXPx55OpibSrUmuHP+qMeqq8DFRBZGhZyvgzfH5XiT/Cw==","shasum":"f920e95b56bce415ead7bab34282caa9a2b8e96d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.1-next-1589462132-2bb55742.0.tgz","fileCount":123,"unpackedSize":487545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevUSlCRA9TVsSAnZWagAAMJ8P/2kFP05WJgAe4MbYW4Aw\nw1vZXUZ5WKIFa8u3+aRczIfRY9DE4KaeWj1gnTd8W5nO+ftszkHVdDh+tmsd\nrIP2m+qk409TcNi94mawcWRUBYjvpbNKhiTyrOEG0tjCsJI0x1Q/PlkipbfS\nWGSDyyGQrdKFeRVm7AYGzHesn4X7jYkbXTUlnu4/B0nr8LXgBSf8nS6eaUzW\n/pCy5nrUULURxwmcInO7/Gnq82Wacd4ggbHu70bcaWoPRuDpeR/XO/m9Ozuv\nyB3QT3dhjHGl+Y6g0IOgq2HhjGSVKND52hYENttXJ4+qj0qV8g6wx36o08iL\nTXdA3r3HRBaWCOPEv6wd5VK1NM8nVyiTwj5lzqTq79iHPGITydapLmS7iP4e\nWF5kOOg9VrVkViRgDvjxyKPeXXervtIel7xmUTO85Ymf2sob5xsHzTxYrmhs\n38DPBkNIMWFsq8wratqRe5KUQQEhB9tHcIpBSfpXDmvZgY1cZpD9tHnSs6Ez\nSLFkdfqBuMIaYXRiCt/UHM14/N9P4Htn6qqmydDg6LoEgP65D6Pe57KaRbLP\nnB1qkDPEmSolXIeJ/IUffJ6DGfj6RBFppcddwGWuWsCSlcXZroccdBkpkv+H\nTvAmu7XtsU6sLX9qrB8QY1r9tgStVIJ3OSOaEoTT8A0T4sPwAZ5K7V2RtsuN\n171q\r\n=4lwk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEQSdiKEggieoPBFaJdt+LC8E5f7q0dKuYmoHzBcaaCgIgYHh9J8ZF1kX3ZSpno9NWqyE8aCAhPqFp0rRZ7y1IkdE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.1-next-1589462132-2bb55742.0_1589462181076_0.6321709254567414"},"_hasShrinkwrap":false},"1.23.0":{"name":"@xdn/core","version":"1.23.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-7l2a6KsgtsG/eHXBDULFQmeADr9DFoQiUkNaTRyUY7Rf7Egz5qvN16ANf5IMa+py15UmAQZhvAtbYvEBkSyDQQ==","shasum":"8616361e3e9ba6ca31932f1dd039f12c03f9061d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.0.tgz","fileCount":123,"unpackedSize":487491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevUVUCRA9TVsSAnZWagAAw/YP/jlle2u9gzgQjKAU6efx\nIsfJxRjEdDeh3wJYb8T05+ATXDcSvh3fTU0Utg6cN96EVq1SMwTEvwXVZouH\nx5Z0GQarm7yUyR7EUp0Gitt13gBbcBOEmC+aMC3OkNGsuLVqzHwJMiXamDw/\nhlHwKTSBsYdONO66keEeEhqkjk8YA7m1nOXW8C95t1L/HZ+VX/ArsuzxxcRh\nm8rIixKzOH8/EIYyRuWNu3UFcJYi+K1BFKVIYLVdUs6PF8lU22dDGHA2BByK\n3rLtIOIr1WRg5n/oaHLVuiUsoMdq3CeZeUFrIxd+W8nldC1c3+Ja4qGEa+7Z\nE8u1RB5taoQRQUORwJVOJwDxPbC2gJINXeqnaxhyyoWU2i2Hrf1wxlw2g30z\njhOBAkcnyMf/yP1i5PNSiyFgdkbFiS9268sbwlv/53x/GTjA4DVyV2Iq/OCN\n2D/ZOD68sVueU0y8Lzh9+X7CrocTWnCkhDNCJk9cCTKsiWcEEdUeImVMc2Vu\nEtnk+KxRYtCWZSi+UoDrW/OGp11JUO30N+zMN9XIdkZzhHR44N23IXcFLPaz\nmb0foBoUPzlQaKfdKdPibI303zr+v9OgU1YyVjx2WHFWjjhmisjY1Jk6Tb1c\nreLfuA7PYMgrcgwa7yxwfnS/z7/SCo/LfPLvoOfa1rT5eqrO7UAFDbYM31FZ\nhx14\r\n=qteE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRmeJc3HIQf24RYgvK9z1dsUIB6aWHf7TdftCIuOHzFQIhAPUGwAPUHqI7BXbf0bcxU0JsniJ8hy7d4SvdyQdNDQKz"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.0_1589462356120_0.719300171314591"},"_hasShrinkwrap":false},"1.23.1-next-1589481036-0bc69bbd.0":{"name":"@xdn/core","version":"1.23.1-next-1589481036-0bc69bbd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.1-next-1589481036-0bc69bbd.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-/+zpedwgvhQ9hWhTpv7BZX6WkbZEltmXU3I/x7WPBvf8FVEB7TFS3wCTP2DLHWI74zHAktOm+HPHx6+ERe+ntg==","shasum":"f1d8e4962c814d335ac08979d4a4721d947da0a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.1-next-1589481036-0bc69bbd.0.tgz","fileCount":123,"unpackedSize":487545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevY6ACRA9TVsSAnZWagAAtowP/2e6FsK785Q5bZUgdGzk\nBFeIUp0yRCO4mJCBzkWyM4aJ96LkVk9Mp81WrB9zN0QcErw/pZgvHdQ3wo3c\nsp25ok8d7MXTCyklYOfcr6J13olpV2/YYrE9vvQorfjmCtF2Ga59a581J9rs\noEZewScXyK0wMBmuWsBoPQ1ggGrwjxPoWm+9xYtiWddp5JgK1innCDKv9aFy\nxSolrXQ83KYGIJV0zm6lLUfEUtw83R31ieA9NiYegVTgEAzAY4omv1q0SMQL\n2iqRQYdupNlHO13tFw44faRuN/iyoEHluZua7zuMtOKSfd9ksbFXGeZVWVGl\nyd0PksQXSBWjlwd/j2t0tvJLUoQOP6W7aPH8zwaU+CaK5HPKSRj/f6qZ+26G\nQcG9gVcH8vxR+i5bnDabOY5+bNjN8wCu5s+arj7GBAOk7SCDJ0o0YsagEgTa\nmYdxe4ARE41iMGdXLmIOecWRsSXag4JxJyNLffmfq1/ZIXL84B9Cjfwfz1yL\nG6DDz2NZLmJugtJzU7sfxwnKPLomQJkh4XtijU2Fvz+BvV/2hbWykgD/cWb9\nFtw8IOrz69RvGiQ3CUbNtDUpVteB2qa/v1sOItZrZhLceASx1xoKX5zNdpci\nE9Gl4wczc0Nvq32wmKAKf9kIEj/7h/9l7jEoL5BJPv7f9CrHgz0lWTN365QR\nX4ry\r\n=XbL2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQ0l+1HWlf0MpiIi7G+98Gw3wmPS4giSEcAESRRd7kPwIhAOo95LWNHyyc62TorD1eO/uSZajUrljwb9/bi4e5AnZ7"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.1-next-1589481036-0bc69bbd.0_1589481088135_0.714173202704455"},"_hasShrinkwrap":false},"1.24.0-alpha.0":{"name":"@xdn/core","version":"1.24.0-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.24.0-alpha.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-pVMvz2s4ALPrbI6XXsN3A6rYQWDa9aq0Ou7mTJvbUX/PFhLynpuSzH0OBgbwSWJAAESbR1LSFRlaPgQ/yyJU9w==","shasum":"917707743f9ca0ab72a68ddadf2ce8bfc3323bf1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.24.0-alpha.0.tgz","fileCount":123,"unpackedSize":487507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevZ4OCRA9TVsSAnZWagAA1BQP/1O/qTSDQCmFse+39GXo\nvLLOQIUUv9Q5rne2q9ptLbNXcPwXW6HQY7HeK+TSTEttqqbUqvqQiCw0pw22\neKElOcKjyDQfIzSihQTL18xaeuVLm89pMbCK51PrxiA9KjolvzJ/MkACvRMb\nVrNAPJpVyiMcfLR6sOsUgJ8dRQTPFtzDFeCvk/rb6hhOPn75QC7UV2Jumpyo\nQcNKEOvXgz3EgkELmQIv7Mdi2WbeqOorqgipmizH5j1dwvSjoNtYAlkiQAOl\n/JNH+39rvQixBm0Mhvb5r4bCFSm0iKhbW/Nlj1QqYWYdSERgYVG5BlNl/YBe\nmtvO6zm+wbN4SOD13RdSlTKAXGAsLz8BusEaGscDE2dZc6c5fGmLk2QRE4QV\ncLl5r9NSVCAyheACMUax+PUYOyETiux/z3iusPS7gqqT6r6z73s0TBrEq7F+\nOTEXjdDzPKd9J0hzUIQBbKZQgIHBeQPFIxoUedcfd/ZqSilIXOKvcbBrrHcQ\nMsQGKy8O3GLV9hQ2RR1onbcTh9tNYETLlk4XelAOcLcDZtfLY6DQBCWu4NIz\ndRKVBD2tabXrRAc2O7B1virk2R4mhrD1YF8HpnPDwwf+Ak/HHeez2VEdw9et\nM/P8+1YDoXIQCZ1IZPdW8QANy+L1zeVEfbVni6Zv3+8VHVdWVcExpZg1pmq+\nQpkt\r\n=CUEW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHMKfSV4eWFppMSaTfRDWdP+tcDDx6Ki+Ra+/h9GJT3lAiAyuVxznDf3WvefcweFvKNQvxpG+N2FCv+RxqBD+H2t8A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.24.0-alpha.0_1589485067304_0.01585154028283564"},"_hasShrinkwrap":false},"1.24.0-alpha.2":{"name":"@xdn/core","version":"1.24.0-alpha.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.24.0-alpha.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-5KDR7cjSm//ztdNGWvnpdspXsYQEyhHedHIFUUWpg5n3K7qlkjgsQiVhPLfsoQ5grEIuHA7n1XwUvyxwhrPBeg==","shasum":"37c2c248880af9992f6cb34e12cd53f0cb595c5f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.24.0-alpha.2.tgz","fileCount":123,"unpackedSize":487507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevcnjCRA9TVsSAnZWagAAzXUQAJpuhnL43viqqxoa9I0P\nQJPZ1t/U5diar9Z1YbpmWG1W3L+/wKriejOur6gQ5wf3ZNhI6Hkq+pbzguqg\nPiqsx8VRDvJVPZ7l9e0JkW/EDtgF22MJGiQSPQZL35cD6lqHOQXoLEMFrlab\nJ/m24fdX+wcWV6lanVjnUtR31UWFoSwh0T+gas+tgLZ85Se8u4GYtVwbfXhM\n3/eda1iF4xK+Xpb1KLQiH2A/pxovT7+5bmZyXRc2KClXfY/6NWpizgF4VQ84\noO/1dn6zFwKUJZQsUsg9ef2U6IIoLjulzdwA8l+kXhsrYPlpzD/Se7z/p5e2\n2Yu8EnOBQRincEmMmjTdBbWBGaUnvuSSHRrH030MReJDYl5ZXDLtLgfJFZ/F\n723CMRf35aQgDU87H488D1VjzII3qfc1PT0zGL/A/AKxi33Nd+4Auue/xTrC\nLqt8eEmecaimAsNgHicTp+MBFzVMXLhLRmKliGUfgeMKFWWHeT2wnn7NGhQP\nZ3xHHBnjNXAaO6MiklkQmSnh1YfkyLvGNTD0L4EkGTegZKl2PAFP/qAmvXuD\nSHyAib2OZlsspAqtPfhd5QJZIqKJSUQVZQIASgrGYAJ71qHUOe4ytEhHXomb\nnf7W95izqjWBa8vvYApvjSHX1xFM7l8s+gU4iNYvEZW8GvbQTZ5XYJ2KFfbS\nX+RR\r\n=c8hz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCndBhpO5bimKF4WuhHDIeOL8iXRVKIkQG4Q5AY6FPxLwIgCvWebprTCUepLlPpN0xsJDxrLWz7Nkpm0Y+YDGU/Mc4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.24.0-alpha.2_1589496291173_0.5834010924489428"},"_hasShrinkwrap":false},"1.23.1-next-1589524507-c42b588e.0":{"name":"@xdn/core","version":"1.23.1-next-1589524507-c42b588e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.1-next-1589524507-c42b588e.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-FdWQPD+KLafFb8BIX7sv86PMMt2RTNKs39DRWSe/odNRILGnJMqBAK3T5gwDWfbSsWHGI422NkaU+GdHsCZW1A==","shasum":"b3788ec59343fd3fdf266bec9fa8afc3c527d5f5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.1-next-1589524507-c42b588e.0.tgz","fileCount":123,"unpackedSize":487797,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevjhSCRA9TVsSAnZWagAAFl8P/ivBGXU3WLYVu3NvLIbA\neA8mf35n0IK6WqXsqeekf6g64IC5qW17XjUcd3THmH+y2D/VGlXAGm3aGqwx\ntsHDYJaDWtrw1Uqmrn6RQe88esc4ZLokJOznNiRMO4GakpzEfMeQogPn1S4A\nD1kYA5PLTEBsPle/GvVwrjFOEzJQ+r7Bl1GJ4VuDtgBmq6hoXCFlbgc6S+b6\nYxzeUyA12bTaWXfeBKBW2/qPeBpv3rgezgU6vDybm+st4Is7wmpkRk1olHs6\nPfPFSajFXMdzMA2vVGBKzL128tK9QD3iP8l9hXgO1T/orwQEQg7Qig03hMel\n7I3b5i2cucK2mY/dTtz2+N4rHIzVlj105MbPoDe1fnf9UcutOLVJ5SA6vgOb\nWsDhWe6fFIxgNpSmTN13M6ezjmoX6y1MMEUQAvMATDUL6hs+V4CnXOKiTmjs\nhk/kkV8mNrqzKztMpdYUFZ1dDipv+J3VDVZvUv1Q5KFd478/1ZSsGXkgjDV4\nIRUIjox77wNB7j1VvGCh47v+G2X+agCJTxLqd8zjZZ5yz94+aW+FUbjMcaqj\nmGUSN38qBwmtpmV0TALdsLRwd6kgqbDFnCAqW+VlGZpoNOJSVVJPlExO8x9z\nWBj69xiDSDh1otlES8uwsV14i9a7I3zg4zJZSCdVveh0hQ6FzoIdM5/V6L+K\nl6y+\r\n=wZ/w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD586rBLkDGe6mWsSH6YnOBMObOot/a7txlVGfdwahFMgIgeR+8aFzR3ZHUvD2uQk4h14tdffpHXYbQcKPpKlpQK5w="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.1-next-1589524507-c42b588e.0_1589524561503_0.1197263867858831"},"_hasShrinkwrap":false},"1.23.2-next-1589524553-bb0b9b7f.0":{"name":"@xdn/core","version":"1.23.2-next-1589524553-bb0b9b7f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.2-next-1589524553-bb0b9b7f.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ydbnytEJDCGavEweAFuVhR0OHG2dl8spB9qaOSLRrsVxo78EN9T4YfhyAR1CrBSFbhcKVTNViQtEUgantmv3aA==","shasum":"13b6cd0ac24faf043895ea32bb99d9e61b60ffef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.2-next-1589524553-bb0b9b7f.0.tgz","fileCount":123,"unpackedSize":487797,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevjh8CRA9TVsSAnZWagAAkccP/RfxzYGla8OxDjEz1BsW\nMS9Y5Xu3dTFAZFNRlEOfPQyJgLUM1tGQh76rrswHHmQ/Yog31sLJMsHM4v3y\nafjGUFnEIyEcAbvfqzZpDRsrfTi0yjfttp1YVXD+wCmVu+rHSHs1wb1nQBGw\nX0WwZb58iQaitWVow5iNgJS1sPILIJhU/+NbLAcd2Rh5Bt2wy6Kb6zmR54/i\nvZLeec/BpiUZYZtW04hRVgoIG+fCvVnUNnUYcl/p03wH3DaLuVmo47cjq3m0\nSKuZKreFdUtVRHAeR8TqCDvNGv9cYfTtqkmR/EnSE97gztosiKsI3YvPiREl\nwbfJy4EWCWOzqKIoT2DR/0WpSuS7w/8t08yXmOFPgbScvI1n7rcuVtDKYHLy\nLXLuJl6wW8Re3jnBmcyAh8B+0txFAXMwzX4zMOoeiy1DfkHrWxoj34AMDA+T\nIA2FOeSmzLDoH93eiQJwoY1CUXPtkT6WJUt1lhipG7JzlkaGpTvBFENbPzmb\n2WZ3TO3fBDL0PtIr6buTopqaOCC3tsEuG8P+dPp+s/+HWwxM1wtt/rNp7Exq\nbFKA6Nisg8hk5H1fBgHOQTBUj6Tj1iInRs5oPXOaFdBX2ii5KGl58t92AK4Q\nnykMAoqZmg/S4o7lbeu+PjcykISjOEZyW276VSGXkVkCNsu9MkgCth6z7xhF\nVC6f\r\n=AK/G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC28LfOs4EDgtFe2RSYqirtFm64saPkHFMSyCcVsuhqKAIgDoahDsOHKWjIzhGAOGntrtDH+D12TrCVRA0RsB0LVXM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.2-next-1589524553-bb0b9b7f.0_1589524604023_0.14816102319146296"},"_hasShrinkwrap":false},"1.23.1":{"name":"@xdn/core","version":"1.23.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.1","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-LZ3RRr1Ajnmmscu5X89BENZfHjyUBLOvG0ZTElHjOPeQG6BH0zCBzdKCGtg1QC1bKOW4knejKnaNwc4bucUqiw==","shasum":"f2a2742e0522d7d4b8fd8d0b8128d1268850f230","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.1.tgz","fileCount":123,"unpackedSize":487743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevjjACRA9TVsSAnZWagAA9AkP/0I/xvivnWsYwebmNsbc\nw97cxXHasxknqBRTCTEL0h1g2WcmW/46L8bR+WGPN3C3vP9ZtXJ2sTKUPScz\nBzIk2f7L93ntC0KBbziOj9slws4Mt5MI7F28nXPrLEeP0ffY4nnH+6u48Hco\nfl+RtF6kcbSJQf/g4ucZew4tBvQY7KNOZaDYDGi/RRyX2z/5SgDzy2fAVByA\n/VJnlVbO7a7bfgXSJ/wTwG/xlQW1ZVPzd11Z7c8I5ZcAtki/fwhNsADp6b5b\nW36Z4gUAPSojjwQOWAOq6upuT71DmNtZkFPg3+4Uj1A2dtREBwaM9p3MCkXD\n6KFWBR1SbDaWV8iD3ok9r9VCMiq3sXBWbfLCWaUKq28LICA93TTRNejN5XQH\nXzHDdbL8xoJpR6kAJzwXDGKbobpju/qu12Sp6L5VArK7YqbSJAwjiLmwMyVn\nc+sktjofSdY2kMJqRJ1KbdgQpmTaV/zoKkh/q4gYWGwlkWoZNnuQvKLaJw63\nEXCzZeacE1f9jTBggzDHWvMLfXlA80aprank+1DBQURPRRYLtLmclpX+o2Dl\n/dz5q+vOxq/0QQeuNgEhqH/rd5gjuFXFWp1MG8GavZK6N6gbsfQFQKn1JmD4\ntnqUiuvQBCWeCoGN5VqUXxx5CltObDGKRpeT9pt6yuHkiQSXnOxD40O1ESqU\nUiRc\r\n=CJbh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkBecBdG3aM74lFPGyUCE27rI/R9Fp0b7W1W4C+WajogIgMZEkqJRAy2BZxLjEv7C524JTyeoPJR9FjdTi5HPIk54="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.1_1589524671769_0.11887019735539361"},"_hasShrinkwrap":false},"1.24.0-alpha.3":{"name":"@xdn/core","version":"1.24.0-alpha.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.24.0-alpha.3","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Rf2JRjCUbwBzn3m3BrlfgP1JYie+ytZUSOtOYk8TXsmfWUZPV8dpw1NT/0RKpjc69/JF76nSIxdVmuKAB918/w==","shasum":"705ae21599c29d238257d8c6e81af9e5198a9101","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.24.0-alpha.3.tgz","fileCount":123,"unpackedSize":487507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevs/dCRA9TVsSAnZWagAAQSYP/2nbYa1OqQ2io/Kjhklh\nv5KwcuYwCt7CYf8LSFeoBjA8F0iTK1Wc2hqC0jbJ9eM9SEn2yYnVF9uyAieO\n8Myx682OBJjEqrZq2ytrgoGiVLB5jgBgVvaK4dEyDTlHkEcFw0kXMarHsFHf\nqn/k6Jd+NYeoY5vrK6Ar5OkjimYef4KXn6iQs1nPN+yUGRacUKE0pMMdruey\n3sBMHjgMcrKGzoJhteSzyQ/m6tIsfePSi+1TZYzFxJY1B52jotNhO9BXJgqz\nE22Oayfy8RKCJT4QoYSQqIogndy+N152Q8PyWeM15Fd+TWPZZOB9mKhY6ihd\n7sFoHY2c+xd+mekRu/5TA1oBJiSXNx2uRtUNueeoxlkLEfw9YfBqIbdSuKbB\nmwvAalw+HLQpC+/UasRjyuCqUkwpnjWXVY4BbAm4054LHjfbs0PpDklaBOSw\ne8t2qj3EQvkzj5F0Q6PdunwVKtJAtr9xqoJvjaeTZ0TuGTu+fRFTWbYWGlGn\n/JZlGx1h5EEw2PzTlwpjL/qKL4WUrCj8REChVQXEOhi8vpiP3ET+CS3SOpGi\nZQlzpU62MjkK7gTGiIDhbmGwblkXzJXLIvlcipd+XZAGDoQqdBtMZVuhEIlZ\ne6bWqxA+HhSqcYz4HcjrPpxRFoPpw0s71NvMgcnH5FmUdzDKylViDpRJDVEu\n0EIE\r\n=iBAo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgR7RJViR3e8EQ+DyH9O9WvCwoAi/UM4/m95+jDi+4PAIhAPTB1E1u8J0tjab7kL4MyN/KLHiNvb5DS9LOQpLNpgFT"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.24.0-alpha.3_1589563356680_0.9429076243601622"},"_hasShrinkwrap":false},"1.23.3-next-1589570475-f51dc910.0":{"name":"@xdn/core","version":"1.23.3-next-1589570475-f51dc910.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.3-next-1589570475-f51dc910.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-i1J6ZZZCb0LcmYHzgxUtbR3e2Xf6jKeg8av7McsfGBznX2pKV4et213m7CWEqPdeF5CQfVjUl/5CY7AfAlGbDw==","shasum":"d37f95fb422ba4b54d9147cb3cc381d92abbc06b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.3-next-1589570475-f51dc910.0.tgz","fileCount":123,"unpackedSize":487797,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevuvlCRA9TVsSAnZWagAAYEYP/RGNdCABZnt5sw6ATIY1\nCR6Jof5gaqRzotWuiJb/3FFksCTMn4IdbsTVmNfd4OcayyP//KvlvFZ6dFdv\n/SPlX/jUhpo3A5EKMv1yOsUjbNmRT+y856EoeoXinT5laf1TuOitMYQ/VZil\nKpI13Lr0SmjHj9Ui0SHoTj9ZBayShDvz7irFTcpNL8T/dFpvdr6yPnpEOhgZ\nw8MP1tPKEQPRwBFv8AQGVP1x1ndiKckYy7THamounTjg36hVOKmqv2fjHHQp\neK9uiAKnBhFrSD3TLDBFsu/Inlj+BzvvykEqQyUGjU/YC9PlI0vmQ0aIrRMO\nX3mPniS9+Fbk9YU1OqVzmuR/gIBrYN5rZYPIcdRaTf586824kLguNNqujOGy\nJYuThKaoidxVtUdkVQYTK1NNW6MB9VtZnBX0JuzJMjL5Wki+4+4ljTBf8ZeU\nd4sOS4cqCjUUoHYXhJ5X7Fosw0hxnwgSyZ7Xj+ah7imJw7+RGUH0LJm2DY6Y\nDQr0Ph6X4CQqECDlwpFVivR2Fp7RCCQVdihTlvtmvMUzPEokDOebL7ebgy2k\n45HK84OaJcRBvRx5YQfZO/8yK7T5RsehD97FQ85PqBMNgV2I6kgF2aDN2HSv\nOyWlrGjxtmOmtQU20/xseeNkbPJaDhBN7ye1zD/yTEST4n8QzmisGoYS9bEO\nFDyi\r\n=sZvO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIApUioGjpVwNuQGOFiteC/hovjcK05mqQ9nLUZIBMlggAiAVT71dQqza89JE116jur/UyZnGRE35JgyQ0mKZdAnC8g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.3-next-1589570475-f51dc910.0_1589570533105_0.6574175345257254"},"_hasShrinkwrap":false},"1.23.2":{"name":"@xdn/core","version":"1.23.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-P9XC1U+jChFVSKRTF/y8FKIid00kj0k/q+hjviEeCZCZCUBFyr4zIUVofA+y2VYBAjjGIy2KYs145mYXe6jRZA==","shasum":"c1b6816fff7afc284c9aacf7ece5403f011edc9b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.2.tgz","fileCount":123,"unpackedSize":487743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevvatCRA9TVsSAnZWagAA/z8P/2P4EQ4ZLlOD9EPFxdOX\ntOyXbSTAQNS5YYeQUvXuF5jlP0Phwied/f8DvnfWePjtVr4OQFSfwocTulDJ\nzSl66EcIZSEgG+Y8rcXxZbF06f1SxMynsriCVyyNEP6MPgIQb1yN9S7Zoev9\nz7HdIEPO2qS13tn0Mndmpu/eNvBLhWNGjv4+pbHNYAOWQw7tp01k8/pqb7/8\n1iB/uSO5HNvLG30vWxbRXQl4mYrDhqGWLK96N7sTE4BRxXuzdXvw6P3GTiGw\nqN+DCk9ycSOvT36N85PtEgm2tA+zf2SCaUbaK6yKZK7fh63OmUasg4OpJ3ME\n2iC1u8VG9mXmipVZWZRwoBkVM4zDg5jwdlfJHs/C/yRFe/CgYTDVA9kSLsre\nDMQWommK4vZW3NcHvSmV2qOiIJmqqLXabH7P6A/QNIfpT9bN3Uoyix0U9zI2\nshsGSy6vM5X/Pc+k+idoZWiiI1lQeUIvwokIqLGF3QF1EuD+WEGXl8BdkaEV\nQQuS+OxH2N2y0O3l3TLI8cc1E261QBPVFbxOwArijkRoduIasBUjTgYuJuI/\nz5OwLLvJ6QBP4CCnZf4lUC2vo4uqWc8PQQIBlm7QoS5OXpXJ2BBRLIkoh2du\n8KZlhJdGWOwR8B27Fi+32FFwdCxjoP1ThsThcmMfBHTbR1his+Vt65q7erpk\nfCwu\r\n=QJ7k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpa9Bd1R6iAK/phQ3xuM1J968RGZxT7gZMNPPVr2YSaAIhAL7ANT0uDiWsOX4zpdLliBZEQJsb39FtX1l1grZRLulm"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.2_1589573292776_0.6236951756331524"},"_hasShrinkwrap":false},"1.23.3-next-1589578847-0d14d106.0":{"name":"@xdn/core","version":"1.23.3-next-1589578847-0d14d106.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.3-next-1589578847-0d14d106.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-FuDoLDfGCZJ+UyCAdj+HoF6dQGFbShs9RCyZ5i4dmCTqdsqPu7EBUmSnL53aeoNlMJOIDEpVz55MtzDa3yehXA==","shasum":"1bc570e625fa12eaa8417674c82a72214cb91915","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.3-next-1589578847-0d14d106.0.tgz","fileCount":125,"unpackedSize":492184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevwygCRA9TVsSAnZWagAA15YP/jx7odt6m2Rt1vIov7CB\nDBFLksrLBKIDESr8JuKALv4YIA/OCMRl96Y8uIdajF1O8EurYJY8nDcqpKJa\nKH6mdZmg4+56Q1UR9ufh3B+QpQZEbs4miGofR+7PxnNIqf+LsQxaDQllmLHQ\ntglfayNWNUv3S+0ObfKVO6v/FG5yOIWGJIlGenCmvrr5lSMpI63j1AxmzUu5\nhfhH/gKVGWt+um2Oe1Ho9NGJqK9ngaYZhNxw/KIvWMIIbbtNYC6Mi2mobE6J\nAnmDgj9gH6aW0w7kDj63BOjNwbUlORkipGpe8mPBr7FMpYpoUVz2tL0PKQBe\n1VPnMhm9cd7ql6djwfX8BJIM2VtHQ2O3ulwCxHm20/EcsE3UN1XP7eg2ZOcP\nnIsWVXWObnwNKmEW2EURy/zdR7UnQS4c8P3b0Vi4eOPjd/V4HhfXOIiSfllA\nE3cxqfE4K8vf1xJ4BXIKgO1zgCu2Vyag4a6ZQGdvBQ6tXDpHeMKyOI34PMsh\n0qDWKRniuI2/SON3+I33vI2KGgj0uSQYY5LtvdV9ra6DgCtXIns4f2GqyB5Q\nae5qOw7aIbPydLNTru+jsPBcEatVLkHey/5iXTl7kHabu+SfyWz3/Nhj2IrW\nFNR75O6nTe0VvPMGT1nqOHEg/KbQ8FY80m23PAR8OKzRJZ/fkvl0iam9MksY\nPD1W\r\n=qX3g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNONMMSj6PmXlZd98jD05NmttVQyj9a39IO8jKbbEErwIhAM500ZTvFFg8Wf7D7lKBjDT3bd+72IB8WLv4/+ubrnzQ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.3-next-1589578847-0d14d106.0_1589578906756_0.8204669407420779"},"_hasShrinkwrap":false},"1.23.3-next-1589578947-85d4b5b7.0":{"name":"@xdn/core","version":"1.23.3-next-1589578947-85d4b5b7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.3-next-1589578947-85d4b5b7.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-yM6v2Gdi57+9dVJwEbqoo2eyYuRpKzAiJXfzXGCwemOI7ng0XIcNY96vYxU7KQm7w6xKwCg4CpQXTXUsE3I7ZA==","shasum":"64cbdd6eec2c3696bfae8aeb3f290c068697db93","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.3-next-1589578947-85d4b5b7.0.tgz","fileCount":125,"unpackedSize":492184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevwz1CRA9TVsSAnZWagAABNYQAI79546cg/83pmUpxwWa\nlZpSJo/qoBUOwzL3kKa3qm9+WUY+3c5+j9yLugwDsZIABeYHJmOujPucwx1+\nSu+WLCeRb8+SYbiWzkBOHWRWc4iD5bpY3y3bWTlMVV4CvtW1DYhFzcfo3n80\n2mr+kbtDx37SNlg1Fh4JJsbJ42mEeCJdKQWTc5dz9NC717OjooZU8spoeHYn\nDFC87gbtTr3u/wweKDHjPR6sbXYS2w1+0etvrwj5shjRsfQlpccE3H77g7jS\ngKX2jpkMzdbscX4C2Cw4ZBUrMs1qPXXvgyArpT4nH5UAhUqddjAQWwEcDTHN\nrfYfZ7QTFMx5GPpX2E5wRQbB2oNtdbmIYKcsORz3SiWVsi7Tax7h9cbcywop\nSt7GZKLQG+gfhFlIxUHzSeGkoInEdJWvcxepUbDGK9kx3JMr5wb9rYu+6K75\nFqwueuq6Kz7wP5ovtj3ZXC7WdPS8Kk3mT+XpStO4Sexp2BCY+Np2y+qHZLy4\nbz3r1OULtxwpyV2X0u/6p5LzPektSIb93QfO/PKsVIZVg66Gy2aLiXVX4m2H\nP1mTdgwdVRUsQtYVDhnnJkgabo/m1cGhSYYF7Iq83Wl8dN10Hyr4ltZqKRAl\nezRzDdk+8tu6gaTpeOzyTqVknox5etr3rDSDGx8hZ3rwqVt3WRguUD+j2HVC\nbb1h\r\n=aNlq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEtumzUvyV2rjOqbP3Tm9zU124u3Kn5mg3lLhtotMTjwAiA2uG5AxIbKTn7dg7fSE6LIEAqwzrytAAvMdxcNjse+7g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.3-next-1589578947-85d4b5b7.0_1589578997088_0.9086984737156578"},"_hasShrinkwrap":false},"1.24.1-next-1589579330-558c1799.0":{"name":"@xdn/core","version":"1.24.1-next-1589579330-558c1799.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.24.1-next-1589579330-558c1799.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-N3LgXQL9BSsnylopqbBAkf8+jEKDefvJsA7ThYZc5kYE8rOlsbpiuPmVVQ5QM6Ki6SNZj9x7hpGX4lal6wB9rw==","shasum":"7b5cf51e4d1a6aab6abc92bde257d9a1e4a86948","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.24.1-next-1589579330-558c1799.0.tgz","fileCount":125,"unpackedSize":492184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevw54CRA9TVsSAnZWagAAMDYP/0NOVuB/M9udE9PHSc9k\nyeW+DHxlMgD+eM69U5SlkNaH5KgeLTz+k3z9LAlIpbpw/qdZu+f18lHq3jdI\nhg6JJiZgqzpNFqMZPVWR1Jw1MV+nFh7i4NQsY5Zl1U84/4SSKbjwECnA8UzO\npkfqBXJAyBueBlghNOxhcm3QHQHCG4fjfewQaV9lDE1gjnLqDb3oPunr4vS4\n+VykiA+KU+yYs6IShwuzIbJ9ij8QCt/IfeJsKVdeZDNseiz+NkKckKlr1HXZ\nJJo6PqnPWxAyypScH8MaFb0MMpCtlpkOd4ivKotG7KnrbBvazqpCDKzUUN6t\nWVN+HkaQQ2F6yKQqWUDmnoNQQvXpuPzkIhGw+sXGvDAw6PR0wPey0bgYkCeZ\nOvaAMJ+ZpkgqYY7ADUGeVQv4rr6MTTTmPIjNl95zr0TOf6nTwB57sEOwdbrS\nSzviKRMDzxP4HWPvhX2co52Sgt7dM5KwK5GaTqwkpZLciS2QCsLGPjuaGy5a\nYdtvFb/tBcaP1otyXGTDkydHJnUWCZhGTu1hBY/doA3Qdcta/MXzSbWwnGUD\n27HDL1N9VDVXKXfsiBRTnxkkvjDxfGSK/xQRK01QcDgt2/BFOZpYPCU65F6K\nJ4pORnLS9p6K9MmJR5gCnYqkel6pCeL13RQMwmdcRUZI7sqvw5YLmfTKMS9q\nVtEV\r\n=anvR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICHvJj5L/wdQEvm6IzeQwIPuMZhYCeHRcJOjM463diNlAiEAkDLtasTdDa9UQ8CvVoc56PJECrosY3JXse6BRgzSJBM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.24.1-next-1589579330-558c1799.0_1589579381609_0.5848760645992119"},"_hasShrinkwrap":false},"1.24.0":{"name":"@xdn/core","version":"1.24.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.24.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-bn/wjl4XBEcDKqd1xn0/ZNLkbolnN2d6xFSHh4YJMVRsO+O8HKqyIPCXI5zbqU80BdYCrvHH3rPuIvS/NbXFXw==","shasum":"251e68a917d33f92033a63915de7e77be2563b52","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.24.0.tgz","fileCount":125,"unpackedSize":492130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevw6NCRA9TVsSAnZWagAAOPgP/j7b+CSev4Ncx1J+8qiw\nlNRsqcprlTu8ilibjWv5uk3So4ZfB15YPq5FYEXAiWXgcsqwznxnzhwobpNc\nLIaegZkY/eEo8XaO0hZeDu6vn8FSGptA5HLCuH7+DtDv2ltkWVtfzMDKkJj6\nTiAOHu0zt3rOrqZAOxImIfIgkPPhV3eWkh5cG3FfFMoP7AmHfitnn20Ypbzo\n2MRsGEHNvsK65VNOD9QsOyBwl7RvbeHdDaSEq3MVxuuaagjlhPGvWtj91Zzk\nKy4zPIn0fpGVHlnc1qg5NmNqmB81b39rPkSP2nJG8sCVfx0TWl4qS70GuzGz\nXmHufrtfE1bmwYJY5q8WjsmbiZaVb1gvgaGhjXCN7meUo5/+3S+Wwarzl9ZW\nUiIGZISXaEm7GzTF/PT5nr4aWoPxSyhifcvdOyif5uH6Hn+/UMf8qR8yU/xt\nMC9swISEBxUBj93scnQ17eKby3jdYSj4pQRR6XCr99EAkSzhr193+0CUtDIg\nS/nwezlIcWOVB6tGGpfIMAHNF+VEjVu9IDpRM3YeM7ZZUb7JMh6nwLotMkpq\nGlRpHgnJJ36R9tPY2TuEB9x/5Aqgx5YXLcEbYAuEgLAYzk5oRBVD5n36VIgu\nxvM5L7GgceUzZNowLNQfjMBJ3F+CSdjsaWA9mPzxmRAH1aq/LxIKZKaIlKUq\nupVt\r\n=8y47\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWH1dRx1fvb3fArCa6r04nBRkCucZAIE5ehBRclXMiowIhALf1VIfWN/DTVzvjQSNT6wKu8t//d8IbbHpLy1gCuEp6"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.24.0_1589579404874_0.5331691947193338"},"_hasShrinkwrap":false},"1.25.0-alpha.0":{"name":"@xdn/core","version":"1.25.0-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.25.0-alpha.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-AfLgCzfhGnK1FWQiA0gG50VcHaN4X9sWmjEY2iwhlLFNZF6o462VgN+1P/g/VJ6yA2lKsK4s1L8/XC0l0r2+Xw==","shasum":"5d5c35cbd97025abccc3f3e05fee5497d64a0df1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.25.0-alpha.0.tgz","fileCount":125,"unpackedSize":492146,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevw9BCRA9TVsSAnZWagAAuekP/jvOjwPXUCoHHGUVgERT\nZH9l8sZWW43Wn6OSCf+gjYY6prSHKRmMNmTwDQNimSQY//D/8NTTMjRAS2A3\nHFbNsCbH21y3QdNjOHHN/ydDuh09dUfemKdIeM0/h9j9/WCkXt5/Lteu75p5\ndnUWGsZHPQXWsvxt9z10Q6BsWMzuHe+riK2Z8rNhrT5fMg0fUtLMGflI26Or\nmmcX1A1TgzOjdDSrumtwcqpDziMBc01Cryzzs5SNw1H1Bbd5Lm4KqnY3WEz4\ngT5n41Xz/jrGnh1YdPx8Vl99SfjLN4mZBnTGJmj0KTUJQlUxe10QaWKzxtus\nIrI8/pGFZPMHM5Fpvqu6TyJM7pg9fFtORqs467x+bCtM/LoVHftqbFYNJ/4p\ntTrTc2ypShU7YYYUZJgMlIXKSTi/0q48yvShG+t6L+AXIC4eF+7Mphs/fYTu\nGcyojrTTIBkDgEV7jAWVxmL39bFcLc6VvnTpuvp8mfx4YAFVs2Y2D/l6Q5nL\n8Yr2NvwzkVzYW1onlGFrVgViZJKmE8MpKbSQ4bj9ddv3M40Yy0+JGhOuE+sD\noF1Ry6v5aLmqzWy9km+BkS8CM/Pf7J+cd7LBl2vkUVb/FP0LNUVq2L8Ed47i\na/S1OhEOhx5aczc8LLGCnSfkOw7C3191aSdubqy93wsudLg7yXivLzrga0C7\n7WPd\r\n=sLP1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7LKNYDIQ9FRU7m+TLvQUT1U5083sb3ouIjFqokrz0qAIhAOuU1LkuoUZ+ks0P2cbSPnyJsatVmVZLtdAiLhrFKPCu"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.25.0-alpha.0_1589579585189_0.5167668147972546"},"_hasShrinkwrap":false},"1.23.1-next-1589792715-8029d547.0":{"name":"@xdn/core","version":"1.23.1-next-1589792715-8029d547.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.1-next-1589792715-8029d547.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-zFtQMLEXgBwpm2+W3nyCYTix6qJw9pQzJXAxTRJJYatNtYZNJ0m+N5EB+30RKGIs8THETvDm2xXtfdjrfUtvKw==","shasum":"e2f5745d49ebc60cc0e324a95e5683ecafc1664e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.1-next-1589792715-8029d547.0.tgz","fileCount":123,"unpackedSize":487545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewlAHCRA9TVsSAnZWagAAoVYP/1jOIu5N4yAo/paKXDQO\nG/J6xupUCWJDj5IObaJyEii0gOVlEqlKWyWShHBkcFvhoRwUcqCmonXXqlXf\npPfCx8jzLPLbWraP2M0C2bzdlyPMTnSdOPXL4vWVhyfnxXEn2DWPdhuOq0gp\n0TiOl6soqN4YymprGpp2qbgoo3Sks41nSajquJZLNJkuLG8IP1ue/yo511zd\nm6cRxXAyPx3ehOmKyOdsa4Ot5T06sqnAuqQaZEz9hIdGennqaO9TbILKc0Rf\nxckDVVeNLd/wxYLpK3EexaokTvW71ZTma5YzCIHugYtgoGXFsIppA1BaR/Il\nIOgeGVA9c50lEkZmgIvrUeUBx/OZUtcDb7/CKmBZZM15+D+u01Rv/ywQUxBp\nQ3mcvOrKNQf03JniXUmfGdv6ETTQI2gJXpZJvY4XXeBq97cBzOAxomn510mx\nm0SR5bcpbCssvrfvNCH91BtIbsJWFfUDfeNCiBu7/oTcwwuYqXGvxNpSl+MH\ndwG+7cDfQm389NSsVBbtiyA06jJlOtyqid0wxr2Xp/yWtyyoQ8ITbUCnUXqo\nPDtgSuKVX28bBM/UGmFATBtSSVkKpj+CCIoIF4s/qBIQm9cd1HSVVKO3mDJX\nXWg4Cmnjc7RAz5J/XAzR0nZa7Bzi365+pk5uTyhU7EmFxdqI/MWmRzSerelt\nN+JP\r\n=KBb3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFPZckELpacM2kapKoimOuy6o4AyhuaeYQPxZBNtDPJJAiEAkX4SLQi/8mpRFRX+I2nyMEaYyAZ7HHTiPRs1lxA+8jI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.1-next-1589792715-8029d547.0_1589792774832_0.11540466077958511"},"_hasShrinkwrap":false},"1.23.1-next-1589793637-a10510a7.0":{"name":"@xdn/core","version":"1.23.1-next-1589793637-a10510a7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.1-next-1589793637-a10510a7.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-dLAhUpC+n62wbE1x5WLv7Kkf2e6ud4B80UgBHKfFsYUX6S3AO3bFhkSIdTiTNQFBXeE9odCziKDvFwMo1pXTEA==","shasum":"8bf948be4c9615fc16b28ee726667e62433890b4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.1-next-1589793637-a10510a7.0.tgz","fileCount":123,"unpackedSize":488107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewlOXCRA9TVsSAnZWagAANCgQAIGvU0eiv+/T9S6GRytC\nnYdnNNAEatjkFUSkC/3Rt2vJzt+2cEqC/bLJvHOeFfI2BLVTnwHrPsWBZRUO\nDERixobz3PzKC3L9a82AqBtZOnS1v4Fs4PMyuWN1OwnJKpMvgVgccKXykBNQ\nJTM4dObhCfB1OE5tA4cB9XuZOCnH54fWt+hMQcZuEZvRm61aejWd8b1pylwa\npnmfjUSREBiT2srI/RsP0gX5JxMa04TFUJiIOwDLG7iWNYHH4xtBnA2tQU1P\n9as3h8reC5ielBV0xtdgJ+NnR96uWbF5DIe56ZjEaC/9WKEnL8U0SGBScdsR\nFB/hmwJUNsS6TTK2S9HtMnJWdCegm1PoYEQTrCSzqO8E64WBOJkxwWx3BIJw\nGO0HKvm8OSV+NUu33gu6gEkeYsj9sFgFA+9CUqkekcC05p8qiIbivrT7WK1X\ng7sTIVKoPSKTF/olJtlUJaji9A2XqS+YWeL3GrRuR1xXHg6A3vhldnfCpIw6\nG0q1lj43DKohwbh1jZ70WhyP+WiXIkVPmTWnRO9ToFsA7fW4lvbvZjDUSuFF\nrH46v1HmURSIhc3eqF2HPklhOra3hV5yhecG4e0kRXAvT2BSuzmNGNL05DGB\nXNnOGygv5YjY+j/mrOKLdGvIH7T5giPdzb6jDWp24U+wSmn6zwL0n/0X8mHb\n2ViW\r\n=Lxnh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAgwvJLrUofojshFTmfSIFDctCEdRgmUJXH4agkQHkjFAiBYj5lu4Qdod1WQT9z5z72we1e3RJxfgPNtBGh6tAqi0Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.1-next-1589793637-a10510a7.0_1589793686749_0.6618462030041523"},"_hasShrinkwrap":false},"1.23.1-next-1589798825-92958328.0":{"name":"@xdn/core","version":"1.23.1-next-1589798825-92958328.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.1-next-1589798825-92958328.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-4ZiGIwEfvfwi6pE7Gpiq5/xFPDHjumropwOgewS3PloBOrklhSkZ0ywf4/6XhGJdCKGyzKBzonGW04cSf1Ab/Q==","shasum":"d756fae9b5c5e8fde8d5e7e5e51eae4aa24e3713","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.1-next-1589798825-92958328.0.tgz","fileCount":123,"unpackedSize":488107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewmfbCRA9TVsSAnZWagAAVGcP/R3SKUE8MCV0uH3zpOAz\nwS4C6VhHwSv4oHfYwgFR0HYNNPCq4Je9Pk+B8qGsA5dQWiFnYgdK4uIyOceE\niX3y82y4sh3lUtT1wOFCh8xpljaMK4h2UjI687cP/o+bEkpkJ6W+qTXcpTvX\ntottqtiUTBZ0ZvMcBHBAeJ+45+s0+i0mXHNiv3z40C6KZXTuVKhoCXDQBs0M\ntRi7pMLnoa5cLnTAJkZwAqmh/ZngFp43YYVyj+/yzJKZ0Kt+6AEGW8WUpeTe\nR9EDSgJd/0sPbYO7hrw2pfD4UVuKwNSNLLui9kHfXCYl39/gH2rnOLBbhyNv\nYQxiP4/+ntPdaJO41Kzn8S8VBHLWojLdQ+JwVtPhQPdEWki/ffEKt5QMKm66\nwCWi0lS6tlX+/pgHN6Actbk9qVANamfr3QTAgI7EK9tRCPKgZj9zOdifaE6M\njj/JiltKkr7aFQyu3uTXYELGLn1v7+zNRqxp8miPGUsUOcjHm5J6nnwPZC4m\nKCzRn1TJAkIZWlL8x10qwR3HwoQE2QpKbAEnRhT/HvxQvv6PA7SyG3190+10\npcp4YCG3pT4koNUQfxNazzfdDZ+4u2vnSwNhmApIml/sUmaGwn1sZ5mC/v4i\nobWKvr6IsSgSDBrjo9Q+pPcSdKXDfahw28LL6lTXv1A+QkXh3UxcnO/HPQGM\nxA1V\r\n=yPll\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsRRCsc3R2Gv8hK0dKUe/uu95PETeJNJwk1TdEbYca0AIgBUy50lrOu5ruvE5qu+DnFqx0ANxYPrPGMuCC0aaxm10="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.1-next-1589798825-92958328.0_1589798875098_0.9669629567441858"},"_hasShrinkwrap":false},"1.23.1-next-1589803777-2427c085.0":{"name":"@xdn/core","version":"1.23.1-next-1589803777-2427c085.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.1-next-1589803777-2427c085.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-NJJK6sBkEfHkKv9ACHZqQgp35Y7jVqXLMxvifL/eygs1vTowBL20yQI92/YFlNyUkDdezQwWVanJ8Ry9BjIibg==","shasum":"49eb8d0b4c8e0a66bf5cf2617eaa25c971cac1c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.1-next-1589803777-2427c085.0.tgz","fileCount":123,"unpackedSize":488107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewns2CRA9TVsSAnZWagAAOPMQAKH/I3G2jXiBk3WgcZkF\nvhm1W4hTytcRzVNw9Cni4mWhcNZmkPZJBOi0kgjVTg8IM52Qk4rAP5TlJKnZ\n30usmNmOOl+FlIipkhnpmQDVYHTPzaibnFTVcUsG/7sE1O9FKcK06iL84mnz\n+JBIeK0ZPMrsuedq8wa+8/TS4mML0SexrqQwAWBtcjQQgUOTijto+tYceNVS\n7v83C3nqyTRv7IYXjoP5iLoAGIo7YWTEXswheyCeLk4FXUQaAFfff3znwkgQ\nFTTMEJOLatLM9sPeLCmIBIBpQyvmNMw3GNlP9auGZL6nurzItxc9a1SOF7so\nZyX1ci+w4ihhB/+Gd/MQ4ITQDvwOYB2x9kyRQmr0Yj/EeQZaKcMt2OGU/PrH\nsza4LlicQ9BYQrB3EYMxHAu7hbkQHTB9kHN7GQhs94afqzrz64SFHGWK2PcW\nmQnECcQFcxVYjbvg4wyquAtuT1uh6f5KUeuRr3w+ZJHA0LovC4cA89lTEFFE\nV/diCpzrSByHdlzaai6ZVvEWfCiJ8SI5ImO9X5soklWtsvwvrisPCq8BBCrW\nFt5EV+rhdeTkq2gN7+gNvM746M52PuznDz9PpRe6K2Nk/pwQ2tQOU46wEMhA\nuJql0h+oUalQbqSXoeFAk+sxiSbinxOTDWHtrQuZHUxyhzsjaMpc63mCG4dy\nCSA6\r\n=+CG9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwhwFW4wM7NjbbMGRmgoepYpfl+AyVpnA+eziuesf4/AiEAlD54s/tprBseNWEBMVpHaB3Ve7dT1U3qkSoHiwYxlBo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.1-next-1589803777-2427c085.0_1589803829668_0.12388207681192842"},"_hasShrinkwrap":false},"1.25.0-next-1589811012-89e82182.0":{"name":"@xdn/core","version":"1.25.0-next-1589811012-89e82182.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.25.0-next-1589811012-89e82182.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tb7+OEwVv/CY05uYQ9gm8/wHvBKoY15Odha6+JC1ja1JlsIoP4DMzCtWcwFGLFJIzS/O+9uJdXrMkNOWMxegfg==","shasum":"28ca5641d98e62b81bd22f79c918a44e29d352d8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.25.0-next-1589811012-89e82182.0.tgz","fileCount":125,"unpackedSize":492184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewpd9CRA9TVsSAnZWagAAadwP/iW635+DaRB1uxdb+oNU\njQvfX1wBU8CGoA5Es1uzd0mNDrd47W1rfKYCP34TBYinquOu/SVXI6hzDY6P\nT/T7+qTLpLP5X87oMWjEDSsjrdMfwp+dm1h1VoQ80fF7e+itirJJnDP+6yDb\nqMrVUc1KTEoE7+LGaMxthiHz4ZydXy4XBKPcRXlQeEiC1pOlk6hgc1US7ExB\nNvdailOmh0UBgTXU8yo9fXaIW5uSVTWrBWqisiZd1LYWQAL6eJW9iIf+o3/b\nk3HCVgG2wgY5AongeKSj2PuuPx6faLxzor93jl2cHD/azK0B+9vaoOanCoft\nGq48PV+656YVW6/dOCMbF1kBXO5chxJ9dZGenuzajxB3LB9198jFRzl6+Izv\n7xBnUtdPV6NMekpTAs6Zl+yINvrmvn9v9iJN2iy/mAHCzpDhqpj8mEzHDzaP\n2PuRapJkWxGxJGj7qAJ4dJnmMHLwo98mb2wg1fLFriaZIMT/qHlo/jtPNLOa\nYqRJ7184wSPmwySNGklHCDOOqs3mxlgvLQ5s5FMZRlmNJdyhcUFw2cXb8JwR\n0oqKQh68kkRGVQD6xwSq2wr/Uy7lUUGTW/0Ofy7YQIAyFOeS5LISvx4ZJTEn\n7DywgE0b5ZDWomTxlLzt/5ZfU7Ko/e8vDtbPQpvqtJezngYERbpXObWBq1Ot\nBdbY\r\n=0GCN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmuJCB+vzC/iSOI7fyjMPPyC5aAMe5Qovv9bC0/SBXhQIgdoa979vseYF4wiEMkhBW5mODRJUU999jv9ShvZfH7mM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.25.0-next-1589811012-89e82182.0_1589811069137_0.6166242288618198"},"_hasShrinkwrap":false},"1.25.1-next-1589811313-bbec18d0.0":{"name":"@xdn/core","version":"1.25.1-next-1589811313-bbec18d0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.25.1-next-1589811313-bbec18d0.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tA3SIPtBb0XqwmlK8tzvLPQ0q5RD7ELLbVrvCkczS0+hHgYGh7KYXXQ/pILF/Q5cHwVVboJpPvGjOz+Vb60xFQ==","shasum":"cf9c3fce6a4183d21b45ec4a412b2678c0b4cbb2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.25.1-next-1589811313-bbec18d0.0.tgz","fileCount":125,"unpackedSize":492184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewpimCRA9TVsSAnZWagAAfaUP/RgTHHKNqDH14mBu81pt\nPwYseykJgJtHEj27af2+OW8usQmmco/UXRxA2BkUOEuiljBf+4qnBVtaQaPD\n4/db4BhqBAVvr9KHfJBz84vTfjhbVL+mAKOUev2q19BCF3bctzqQJyuzTtSB\n9PQFx3Vo0iQ0h7T9K53yAEE8PCWKMXGxvEqXl7hIn93MsHiHjx1kfQBRjJof\nOWDAYBp/U96txHUueDCxOgPmYgZ0vw7pCWkgXcdAz4zRzRZU9AMbVmfBk7+x\nMmSTRsjWUGyLmfhDFI4Ai3sCkYRTQjOnNsquWK3QxBXfyb+DkzGbjhAzO9jt\n96DxT3M7TLMRfxvgaLAm6Dfy117D8w17W1lfi+HwYuxAdI1fshmYt0pBmQp/\nTkJiBCK4cEmob542EkD4x9lH1nQKQprCFV1X+q7Tpl+Mqo3bQ/njJTc/DEhJ\nv3uINKueFW3Ua/Iw+Z6vgKbsMWsBfakBtU2TL3eD6oRyI4cS96HeP+zUBidk\nTeaPb6H4MCo47nqRNyKgo9ABW/egOKmw2aazQ3I7lg6andHEbkaFvqNSp0X2\nTapsFTUMVMl2/RFfNQ3O+dCLCW76RYh9WGO1fkpUqDvw/c+Aan0QSMGKFvXs\ngonvVy9+MFsVl88lKgM4mNYvsmj30ZNkU+PetCSOelRLZU1RWjOb9NbeH/CW\nsoAI\r\n=V1VN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpVU0N8i521859ukhoG0YwHLmOsia3TKH/ninQhbdk4AIhANfYvEKyWY23+uf8XPKtgH5sVQtEp61iqJVavCKu3kAq"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.25.1-next-1589811313-bbec18d0.0_1589811366440_0.5356450788386169"},"_hasShrinkwrap":false},"1.25.0":{"name":"@xdn/core","version":"1.25.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.25.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-iZGQs4aMltDMr0j34og2gV0xwQRq+Ss8e6CwxOQg6J2DtK4b/F/IKjSxT/Wa+D9YYgOJUTCHlPDlppQ+Xcsm+A==","shasum":"5fedd67038e4526bbb10c6d58f201732d5ddd225","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.25.0.tgz","fileCount":125,"unpackedSize":492130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewpjxCRA9TVsSAnZWagAAjvsP/1BQd6N/Cp2EwlekPtMN\n3K7P+tDXtSilLY/oKtsNI6Ztql6+mIgz7dW83mBLLs+pWnCxkFT9UraEqrlg\ng09dTlONmSE7QJz/c1ce09DoHeB82B2dQGXBN/Uym+rYa8f38d5asqGXp076\nqRYYsvoSNc+ake24RAACcvj3romMC5HCR/r62GVr9pV294TYEZpE8z7Zhlkp\nL6astPrkoNait/cFkr2QkrbPKxeLNUgY8qxUVYSWIb/OD0MJurOMs3DfooEV\nL8WyQSSG67Ob5/d4fODlHqhFlEUW/cqaRBzn14cKlcqDdNPU8Dtsnfgf9DEz\nPrpJeaq5kJze5ingHwnlqX3ze8zSQzGY74Tdm4L2mADTEmsKKYOrB8BDX62Y\nD74kSigiynlgHZq2kmWQRAt6SY0yOpiQaO83E1iPw6m0wkzxOn04+rYtUg3P\n9M26s45mvWRAgw7VNFaWo1trp7i1pV2rxD3j/8NoQhDsvLy/zSkAbNNQ+Orl\nOO2gNPr+YDcKRpjbrYN57vJ3MJHy7mSCAQ1qksm4YltyuvNgyn4UAtUirlXF\nE0KIlhpVXnfMtdnoDy+G2JaMrEuwzuiaUwAHHxmpeFHC9l3CCeR/QKG3q0hV\nHAahRkCTq8esuZAuoq6StTPCGhrIs7oz8P22EcjcBvCm5vfCsDlc7Ueh0rrv\naa5S\r\n=dyR0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaKIS/HcsB2JSI/4tUurXJFxxEh4jMN243NdJjDYEckwIgBNHTm/bSnUbDa7Rf6BgerMrpGusXaAg7EPOz+x1vn20="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.25.0_1589811440796_0.45722324478557486"},"_hasShrinkwrap":false},"1.23.1-next-1589878001-633ac722.0":{"name":"@xdn/core","version":"1.23.1-next-1589878001-633ac722.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.23.1-next-1589878001-633ac722.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-jVfU4cfDIjvt4eCMFV5ox0QxzYQkjs3wRNQlqhtr50UbrxwZQaQKaH7EWmPnzRy9DcwEoNXdtz01RjqPgMh9qQ==","shasum":"add30e2ab2d3e385981b10536f38e5347fbd8ef6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.23.1-next-1589878001-633ac722.0.tgz","fileCount":123,"unpackedSize":488107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew50yCRA9TVsSAnZWagAA4wUQAJZ4kv5YZjIXHNZBD2BI\nfVpZU0xYU++ApfdQdkhg5eJ3kN/ot4vL4zWDzgYvqNiINoB1TG8KnO7v26es\nc2KiIXY+dVWO3mOKJaMej3li3r5Ba8140chTvMWo9zfgNP9gORuAMmAirFeU\nsf2CKdoHx+yaVh/6emOWnRX7zOsCjG2D9rGcXDPdwjrmqF0EeDJCFARUpkwD\nun285+LvtXB2xSpLYg99hVRBMvXyDkHJs11Byyxiz+yoGab9b2Z3jJZ6MA5R\ni6Rsj9yAuRrW/vovlPv6rAI3Y3J+rZK8juanHr0OGJkxb2nK8aE0TBGhKewQ\nuSbEu2D7B2WvBl+nNGVoPHBhA8SFwKPe999aGS9FJjVx6mUE3yx6dKntKGX7\nTgv4J2WkX89gYHd8Cjz24u+H0M1UiYh9hP8dxGWM+70Y60gFMKEmmVr4upvT\nUo73BCbHavdZSIdytGrq1Ju2PXS0rmvwGJhPJHrIAnidgK7zaZNne1bJSb50\na04iAzL+CBNtVc+51DVLdKsv9qOqU2X78eSJEcecfrQz7tIn+1FzBGZ+qbqQ\nRfgPqX+/zeWPaNMgG57X3+UlUGTofdfNAVvhkdMOZU/IqjTqjmrApLsBu/p7\ng3r7WsDZ6qJKlP2Moo+b34MRV9yTj1QamiNAp7mIsP7yNcS5O/YJJQHq6u2R\ni/aQ\r\n=vKB0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZ8dgqm8i4XEvAZRZoN7j6nGZoBjRG7t0C7E0ZPKiLwQIhANu0PxSYXCJ9TU2IKCMaODLtrSLcdunnwJdlXwnR/p16"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.23.1-next-1589878001-633ac722.0_1589878066070_0.8695003179608629"},"_hasShrinkwrap":false},"1.25.1-next-1589880716-0dbde70a.0":{"name":"@xdn/core","version":"1.25.1-next-1589880716-0dbde70a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.25.1-next-1589880716-0dbde70a.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-r9VmI0+3XNzh1GrfqIoIfG6WGiJePU+LRz7bUcsdk7RqWCx+r0xXNaoHa2ZbRIN07Lvy1PfgeQuIBKMQcJOxZg==","shasum":"69df45a875b7441dc9a7c9d63861b2889f1eb55e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.25.1-next-1589880716-0dbde70a.0.tgz","fileCount":127,"unpackedSize":492992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew6e7CRA9TVsSAnZWagAACroP/jR1WOZu0HIeXNRmvQqq\nin5NYNct/4T467al539U80ZUGZ2OoK0l82bhf93oZu/jK54m1d9Fh2AbmXj1\n0T6lAxekjRNemsiUXhhr6RO8+MYzcJOy6+aetEYakxYre0NxkwRYWtA7fslh\nRT8XAhMJ+X2tBCvqJFcu238A6jumGu5QXtVz187d5o1MclAdLLs+KHeGRkrd\nvTU5n9f07LEzAB0QhXpEsiCYDoWUGs7I5fhfEAmUmkskBSeSSZm+DbcC8vTW\nx9HAAqe3tqPueGcpOsATTppOl03sJ0IhNaKZcZO4O/MqfG73BwGqF9FAL4Y6\n/HutCd7YWKnj0xCEba4b7uwl4GPk6aot5mFBVC7G3NJTJzbXwg2P2AlWQkFL\neqL/O2s5O3wk1PPKIyH8hRHzSYDJ1IU2RyAhoBxhUY0VhH1fM9n7cjzjqkTs\nowOg0Vswt2Z31HVbxTBJgPeeWg6BeCVPP6zsPFlSgTl+vOeKs7CNxtfVshlo\nq9g07m7gICsodJXH6SxjDTbRwp47iNMYqO2wteVzVSkvrneShugWqS3g3mvu\nzBlXzoLfpckKiLK19P3FeoO+NN19ag6uOyNI754VwO6HZoJssLWhAdc4OYFj\niKWCbkEl8ThLOmuZdThak/mnqR9CWqmctBNsy5M/tP9S8qDz4rplI9PGCtAT\n2g44\r\n=ARzG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERPADYdf5EChTsaY/hLswi3u4kkatt9cHOtFe/dMgSjAiBeRcp58/shEbexhnMBefJNHFXrCtBB9amr0dfKyAAs5Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.25.1-next-1589880716-0dbde70a.0_1589880762936_0.6899735253625905"},"_hasShrinkwrap":false},"1.26.1-next-1589880919-c6d2bee4.0":{"name":"@xdn/core","version":"1.26.1-next-1589880919-c6d2bee4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.1-next-1589880919-c6d2bee4.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-1vr1uMbtG2+MOKCYQQo5EyR8pwMDW/Wdk3kyhQZJ78RsfxHzJI+a6dvpBTXf8vQzv6/xFfIUlbhvi4d7EclDXQ==","shasum":"c72ba7e28efb0b9fbf02e16368735596c7298f24","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.1-next-1589880919-c6d2bee4.0.tgz","fileCount":127,"unpackedSize":492992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew6iOCRA9TVsSAnZWagAAnK0P/247zXd1G8tnq6OXYPJV\nz8nzma8JiSd1FqXXmJd8q+hrFh4IMLWj3/ReA9Yu1yKOe+B2nYkbVq1g/6SQ\nG0vqezHkWmm7QLCGTc0QhoGlmzPadT90eu/mqiQ5WcS6Qtqr0+hnE7o7X8qu\ncF1syXsq99IJIXjDN/LPjF8jxqa44ImSyrTbRYaFFaKSG0SXtTBVHUmIzUbk\n8GmMvpNPVA5cKB55tzGHnl4k70t9tlUZdHFZrCxrvw6MniHYdViYGHJZ7iwl\nHc8M6bQWWNUIBPQuj+uxXZXWb8evgkTZzlVUZOTZYoZvURSwtgF/DWiVbUz2\nPzhniQyYVQrqoB4KhNHLFLREd7McZyaVV8fE9xByFG9jtKma3NNBQyJ2EaT4\n4FqDLReRlBsbLdq4qRhkBX8LFSs8aouu5BfsGMlVHuF7pwwIB4H2Hlq7egts\n00UJbNqFkrfiQiLq8hXrE1iaMVjWK5OElNCtbHgVEaUwes1Owp7n0RDNiMay\njobFn0Gj4AXx60pAc09Efl1aAqP9C1m4R9MBp+8bTEQdyXZ4krO3AaQ/esqP\na5NGyILYeZBFFcar1Hxl8lRKUAIbK8SaqnFzmuG9rniv2+NGIRQLt6D8CWhb\nylM17wAl5IEJnWBwiKsIXaaiZj7+h78E3ELQDYU+X+s/Jfm9hQt56l2M71we\nlLmC\r\n=5ZIf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDojRATpDNNTndeAdqTj9E9ycSNmIQp54hFURuK5XyHEAIhAKhQFeh0T1XYmYZqauowZ1drfNXjAAlf7MXLRp35jJQ0"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.1-next-1589880919-c6d2bee4.0_1589880973974_0.2631185788477044"},"_hasShrinkwrap":false},"1.26.0":{"name":"@xdn/core","version":"1.26.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-6Tfw8Q7oRZxnq7kranakyquepMNs8qnLUfQwbHaEWjofhbEjsI+yD+Og1HdIO/VU5SiinyS98iOu4NKxYgqBeA==","shasum":"dc8c4ae3ccab7ff56d9d1d430a09d1b57866a1f7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.0.tgz","fileCount":127,"unpackedSize":492938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew6k3CRA9TVsSAnZWagAApfgP/RiWv+877l1Q+AQYq61l\n5Rhvyl+nVzzwPz4WGEYJySrRnxuGGM+ICKXMdviqFXFtw/AhYSOG1hIYs0sF\noWlqMT+K0n9wvsuxRb9WjpekjVUvr6r1ctht89ZnxbLavkqdEuzeu250ze/O\n/OF7Be8Eawtn8KNlDDXOcqu7Maeql9E8AK2o7ziTfP84BgQmh8bGgZV/4ys+\nJ2zrvM5s2kiaSctPdF9STzAZe9ROtWJACU+e2U+KqQeRfsi1LMR39OarHR9K\ngzShMg7vjs6TTvfrcB9TM9GAtfDYB8mY03szPKlN2gTaJM1smXmRe0UtVJc+\ndnSbdq8O1vJq4Jd2nnlJkPJ88/NCptNhaP/nlfMLOE/WW3kBDvx/ssNZ3ad/\nkIyNZZn5F8iw+E0AxpWv239dAQrhP+iRrw3hCJmGz3oszcOw+GTTCtUxuy7j\n8YKJTlix8sj/+/tgVjJK3ji+h2whCmad7CkgRe0Ghf//I7+h79kz84nl6QtL\nrc2U6HXkKrsdid9t1Boln1kh7+2145TXdm8hf5HTn2ODIrT2eLnMNLIer1Xo\nPj8gJSlY/RhzcJ5dkxUrkjhsaeA7stUJIaofGgr6ja0oZ/xqeEW5M84Yrp7m\n6Z9r76e7y+VZib7DoG6CsHCht1PPR0ho/OmBgEYYet+ozzlm7+2C0CxfTwYE\nhtDq\r\n=m1h4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJGmQ8h0RO2hdzBPS4i4vWBaALWEMnA+C9kfbOIvN9CgIgdN3+nvv9FA6MYVyBHO6ERh1g6RfGxsB4Aa1EH8papkY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.0_1589881142747_0.8067797125438216"},"_hasShrinkwrap":false},"1.26.1-next-1589883839-2e2c9df3.0":{"name":"@xdn/core","version":"1.26.1-next-1589883839-2e2c9df3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.1-next-1589883839-2e2c9df3.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-3i5UtwYWbWZr8l8PObZzF+YVqzMgGrsbZ/M6Q8F8ihRLscc3rmFVXkJw70zOvgV2C7CA6qgmxBRACTt74BN8zw==","shasum":"209f94a9c4daa7ded9e998afbfbca86c210141aa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.1-next-1589883839-2e2c9df3.0.tgz","fileCount":127,"unpackedSize":493554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew7P6CRA9TVsSAnZWagAApLMP/13PQIhuarbO1GA4ECU1\nkq/U6Hhxtblbnl5GUtXpKFkvazzuyDayR56R+6FwkwTMk0ia35PbmlLV6qf6\n+w8XBletcUGnra3aRzCOqgIhVSmkFaeyxfFPwblnrQt3IDTL0r4wN/IMvnBM\nXLgmfX4CNlPygrX+nPIBMeJc2S6aZ6zp1fuRBjGrRy2rjB/GfYtrGG0XO9Qs\nxbNz0Th8LJuXnu1Ct2k7cqSr1UJR9LHqwegnQ3FozkIgQ9Su6beOzahmsH5j\nYA+BznOusjhdRI7lhWqpO9+VMG2Xg7wMolUQElXZ//R9ydST5nHlZVsg1f6+\nhl70F1kwJgnXCiz8QR5WFXrJRmpvxomx7kroPI7Gx3DP9bSHnHlwMnKIjK0m\nJicksRW0qT04nHxXth8wI+d/k47IyjgpGAH2XBtzZ7ziMmr3pHi/NR+QfzUk\nx2I7N0GW0hAV1obOFUzx73OVgrS59ofu21DdCBOFDcT4vrW8TCBrG6aqp1z+\nJC4xqdhRHHzeLQjrYuRYI2qf+Kfo41UrG0p7VvBDsGWwKK8+sNimN0s49l/O\nVrI2evd2GR3dpunOTuRHgvLmptd0MFs+wLmJY7LvAGMWUvp2olWH924wpwt0\n81tJMx9fVnvgHyd2lbC70Pm6UYi8DxQZGfOquDGEEzKA7z4K4825ZGbPM78N\n8UQA\r\n=rFw9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID7T8GrDBUaO7SkdxyRfCyphJyTCB4NpEKx+/4LvWFBYAiEAs17jEpPDTbey6ixni3qLC4AQjXktlCulo4Nj8yklfeo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.1-next-1589883839-2e2c9df3.0_1589883897937_0.6109035901958679"},"_hasShrinkwrap":false},"1.26.1-next-1589886107-b1758c8e.0":{"name":"@xdn/core","version":"1.26.1-next-1589886107-b1758c8e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.1-next-1589886107-b1758c8e.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-oCWLb/kRFgFo4L83vnxHbTSsIx8Xfy0ljWxa1gu0B0imkAgt+GpM7t9bdeHYEQgj9hZJB8ANUgf+ku+Wbv/b5Q==","shasum":"88ef4518bed6830794c81e95c155b6dc0ddfc147","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.1-next-1589886107-b1758c8e.0.tgz","fileCount":127,"unpackedSize":492992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew7zNCRA9TVsSAnZWagAAa/AP/1l3s8xT7GjnAK4s/MCT\nNNT8EfzjjAN8y8a5XzvXKZfgJRhiGHh5DO7npIU5HkipXZRP9AfW6STqOc8e\nhaCW+COWI4M27ZihdhG26nTvt5hYIeiCx8dtzRi9WpRXPN6iyAjbvitmohKy\noA7LhZvka2Z2RNz1QBFTAke8VWSDru97aBgddYtQ3GvBX3QMYVBEsFWUyAoX\nh2SMBxEcDPdYDIbiOiKncBRtRCWBN480sNmqjDthPIB1iweZlU8e4peNpp9q\ntAxVMKzdPL8iGMJ4+vtZVB0qRS0I6jllDtEfZdBBUPm19ONmN0eYDVkFhXDi\n3DOwez4LvbvIkkCzJwNctNcq9AeUpRNMemb2nI5MuVsBIeasrBJt1OJMHvo1\nF4F1KCak+JkEedXSE01TH+cjpE5ILNgVVU7bUjMLyi8oGRSfQHTPLqcQZBeI\nNm7XkDIZMVwex+j4PaUwaQf1zxXmRTI1iOa4wL2ZwnG1ovg1/Y/WlLL9Y0Pm\nBr+UHPNdUlfJ344sj13njD+JXhei0M54TYNIU4fWsz6Ql+tfkNlXOWdq9dzp\nVf5kiE7pHLUsjtEgYo04Dt4Uq3EPMXcVl8why/wAl7zlF05u70jsN4C8PcCK\nyWH82P2J36n+dd8pNHm1a/RPj9lHighjKWxOGxr+D8WvF/MjCXMx5kcEbuV+\nD51p\r\n=n/MJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG9bVh+dGg5sX+GkZPmQtFoklOFfL2pgvWpt21FiObD3AiA40Z5Y1G5EhtWOu08TgmKSvotRI8Q8u4XESnrGlhGJ6Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.1-next-1589886107-b1758c8e.0_1589886157463_0.310546027940132"},"_hasShrinkwrap":false},"1.26.2-next-1589886254-26f56d36.0":{"name":"@xdn/core","version":"1.26.2-next-1589886254-26f56d36.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.2-next-1589886254-26f56d36.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-V0fOj9Ig7b1/h/VedgPL04HLjDhVaqQoicMLVjU/n4uFp175duNtGRyKFY86yQeLhcPPTaqnDD2IFd+BrRLmbQ==","shasum":"c41dcedeaa4776ca2f552d820764e341dfb8bd43","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.2-next-1589886254-26f56d36.0.tgz","fileCount":127,"unpackedSize":492992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew71iCRA9TVsSAnZWagAAfJ0QAIMnmMeCDyxsTyj7y1ZA\nloIv6RY2o610miMHe+NxMNhkDNgC+Po2kJUMYP6dVFAZMLFXF9Y87IfszU+G\nVTbc4eO1nXdn/wTxhVBkv4Kw4koxgbUMj20k0wJCVuDdWucHXXoW5PaNUWLj\niGvpuEE4DMYb7+Gk4d4N4BLxD/MrBkW0fMwaPuCabjSc07T1bJ7w+0zXGM5m\n+wYWp3QCBU2jF9b4vPU2P1yBhrG3GttsAdG5JNtqBU9i7XZQNTe3fbzD88kq\ntyIs20G/hOosVrBGbb779GBadyUbxNR/3J58z5/Lu3gTf3KcKMyJVGp6/s9F\nPIvsLpwALvUgEnW9W3jLFi+vFG7M/yHwUdeJlKPN5Zmymq95CUVUc8vWIaSW\nfUDW1yO901wbr0tIwf2uJzp4dqvPw36bi9lWaJy90QxnR/pg5QLM9t8USdoz\nm65InaP1vQFyjQkC+3cdWx2KnSalBYm5ruZyqIJ6h9Q2p1byWxdqNIyefbut\nXc8sl6Eilzt3G95hJJAGXTE75EORpRBPHAeXbgLX0NAJPxzSjCZqwI3VUjEB\nhdfV38lfDKNdOFI51UfkgWEtCSnC2d/GCM2umBXxd4geCnd8RJHHQXzTtxxr\n3qkXqzlk84Xehs+I9xZQTgQtLseYkIAN2PX3aRh0MkrUiezc3PvKWstwAZXv\n/E5U\r\n=uUkj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDXw8AWlYna4dLwSPnjjJF/wUwpjz7MfS2qSGLfMpby9AiEAhJnmlRtw75Fyx44At32ZKGvRcxn35nuFm6p1GKf2yYc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.2-next-1589886254-26f56d36.0_1589886306332_0.6433735105979508"},"_hasShrinkwrap":false},"1.26.2-next-1589888388-7d1a70f9.0":{"name":"@xdn/core","version":"1.26.2-next-1589888388-7d1a70f9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.2-next-1589888388-7d1a70f9.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-OsQMm1Sk9PzrzRlpNtHkuXTgYsdh1brOkWjHZHn4asTaGDLK4xqgE2b8zTFqgWGPpVeWq1hqt9RR/kYgDuJwEg==","shasum":"139adcc98c9d4d3209fcf3d607f4a8f79def2d03","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.2-next-1589888388-7d1a70f9.0.tgz","fileCount":127,"unpackedSize":492992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew8W7CRA9TVsSAnZWagAALPQP/1/4BgQtialbEqmt0NJ4\nzmhwEJvzocr5v8PVZNMH1zO2UgzGaVur9RJ9wmp1YC6y/pMTYVJ5mtUr5AC+\n6+uFyt8fcdzpJxb0fgSEpTcx2wmkXyts/L98BajzCzYNTX9nU/iN0TryK7Zn\nwFPtZPhWldGiCJaBNDiuhdd1DdAeYLWLe2BssL4fNzwR7bjq+MUTCla26mFG\n2fh0eMWceCP2pI3R5VXnlHerITBuk2AiVTcwy3P1DCOVZCqBXBYPp7M4EZCG\nc8f2i1iOHZv9hwj4fAhmAr0AVILcSDDN5QI9VjNw45u42v8uuQWKxY923LPS\n92i1Ch2umrxwp3Jlvk1ppNr7QdWceMyaQXWF2Yjx8fQibZIPAzTtSvbFjB43\nOZf0b1AtvMU3Yb7e+lVWYGO5cUNYaXetNS1RUCxxKVUVLgKI2RzvU5IOHJ5L\nW/UuMCc2Wr003bvY3TumJSsE+F/QoZvqPr2Ey1/kk/xPNV+/Rq6Nbu/vYnDQ\nI2GTgRSpnC+Kl5G4V/yXJUOAGOdY3cmTqmFJlhzmhOl8b3mmMeQM8rXbkXgz\nAMXa5qEzaL/Y65JPbBGad45yI2ZLgTcV53f9dTvRU3meR5TMpf1otKsbEBM6\nWfrjkDRsVww8hNHABZ3lD3G4U5+td3XIBqvZcPhI4Txfni9l5gbI8GTuUIXX\ncUzV\r\n=Lwi4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGPGQXQePon9FCSW0baZnwucJqqA6MrVCKdnP8Tq2aIxAiB1+FoQtewake2Ce9CgkPTLwACQF59LzZAP+1plNzAqLg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.2-next-1589888388-7d1a70f9.0_1589888443050_0.4741368661862455"},"_hasShrinkwrap":false},"1.26.1":{"name":"@xdn/core","version":"1.26.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.1","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-lZsGWMiJd0RQ0EYrBl7gjxAOZ2y2rEEhkWR+u1GMKrxHxsyPrVMA359XMHU2E7K/Tj6pEKKZ0GRjvrWHFbHcaA==","shasum":"71cfbbc779c866f0b0050bc227edce3afc898ea3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.1.tgz","fileCount":127,"unpackedSize":492938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew8Y3CRA9TVsSAnZWagAAreoQAJ7ZTybK5z8jSQ5eJdhM\nkiK1oGmRDAF4nQ6qyniQLc1mf6i5FgGCVSqXVX89L+S5oDICDL/zdIQs0OXr\nxLPEsOhJRL6kB84WgXdw7WKVCLRTP6UIBS3jq7IhfLYCH3Cf59Wq8D5DXqba\n8LX0JC64ndDST+OFFzMrKMn42XzGm4Ma5WMs6ftVvfvUgqSX1EwZ+0eB6R09\n0S5YZ0zoFVT5uc71taQChDf/6ihBfZ9+EnFF98TrkakNNyBnLQLdvJqvAWgm\nttfyC9S+BHxBkEbRfvxc6LhxlMBceCNFJvRxt07LA+yu30hli1650kS6wcQV\ndUCBG0eLRIWnfAqQa1HUQsM4Fc65R2O1yB2kkpqkHvgp/XRDQa6BSPPia1UB\nExRhxy57O4eOHH0Cxo9TFj/zoluwYFcebU43FDJOaWdLmxvM4FaGqWyo3aEY\nGTcmtg4Nxty7gZUxRZ31/3YECn49Z13ltkOK3pQnhrbq8pAA5yLXPMQgTah0\nGtZC+1KMKjhpkmFyre5ZG9Cm+puwuIrBii0LCiPI6evCbW7sMPSAXBfgOuk7\nTEyFd8LmjzX1NxaLGdIRDJIr+tMFjqs2DKXPQMPGgwhvrbAHyGmegAn9X+jL\n7rUVAPbAAtuf7Z72JQaZWULjeJ9Y9NzOZJ6fFtwHpBnir37Bj/3yrORyIoFm\nar5J\r\n=NC9b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDudtia2YPQ3+IaYhuIl/SvB4CJQAl14iLDLFCV6gHKxAIhALQ27JDANk3bY9Q/FdCm/tD8B2zUN99y6JfdXM+8bmvy"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.1_1589888567227_0.03624404310814611"},"_hasShrinkwrap":false},"1.26.3-next-1589890489-c84cac0a.0":{"name":"@xdn/core","version":"1.26.3-next-1589890489-c84cac0a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.3-next-1589890489-c84cac0a.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-QHvUYYddkJ4kxKXS4mBwQM6KPbmVfIe6VqadV7Hr3H4x1xNJnbOUROiXSfh6rSbK6bY+EuYQkCrN8y6XUj4j9w==","shasum":"7071a9b022cc9f966ecb24d94311d3ca8198706b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.3-next-1589890489-c84cac0a.0.tgz","fileCount":127,"unpackedSize":492992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew83sCRA9TVsSAnZWagAAw8wP/1fKBxjlb3XAnRzW5euD\n2a2foeFC94C5x29nR2WKe/+V/D255/my3PIhzjLquib6hu+qdRg9DfzQOUMa\nQMciUeA7dVsrqvkDHRENaSGSakmlQcZ9vqtED55ly1PPpM2Ifx/EQ6ViP9ae\nrUySDFaKX4SZ6/HEsRsoDZcWjhr88J4MqiLRIPtft9ZxChZxxV0b73ee6l2x\nQuwcIC/6zyByLy1+ESk8tU+l9TnwCbNff3Tu5yhDl3XLy968e9/4angkaber\nl3mOQWGFJGLe5OPq9PODae0dyQo0rNeIyr5q7EL15FH3Z80vw+9dMB4ZusIe\ntuN4OdTpk6dgQJGTm0fV+sk/6n59nTrXhHFJC3tMhcHGiL+qznaRs0V3VvZI\nAmKlViGFeonTqJDNvNo5dae7FvbjZKHKHlQo0D/MSns8Xgnkvcp+H0P26lCA\n3W1cM7T39hdr2OegJfSvVHw9XG22FlI88Hfp6isWbqJnaXe+UimmdqzWVhVw\n/N0CFI37OvkH8yBVRp/zUJ53LtGPZUrJWH5jLMZODaMwkZ98ETwoS0FYOaKi\nxV8afjL7VEjUFtkbIkCkuh6SKyVQ9MgLqizfby9vL1u2EC9QSxybqahVWxoa\n8sQ18r4km/VJEfTgF1qlDhO0tVS62UykUovfX6f53c4B8vfrg9TnLvgpUECe\njtIG\r\n=CCgv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAh1u6c/9GvXFfjPGzpPDHgVfome0Y1Vhy6c83VS8JzgIhAIYFY3KAcSPbt/Bg+mLjIsIY3gwhpmO+CZI7I2tTrikk"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.3-next-1589890489-c84cac0a.0_1589890539939_0.7411690358417833"},"_hasShrinkwrap":false},"1.26.2":{"name":"@xdn/core","version":"1.26.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-XOx0i9OX3u9/EtU/uIW0QpYmoOYkTes/ohUAva13MsQGrgGVvjUOz9dL1QEZZrCq1An+9Sz3OvH6Zq/066M18g==","shasum":"2d0b0a8c996d815a2b90599016805ea20edb5771","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.2.tgz","fileCount":127,"unpackedSize":492938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew85aCRA9TVsSAnZWagAAoVoP/jPatyT3GJSHzhaNoAA2\nbzJ/U4fuUmsshj9Fi0Cg4CysKOEpyYrSuqkChc94V+3r+AARLfYErSzKAVDp\nJF6RbNOQwgS6C4Dzf+ttMnjLNsmtkPE5bBHMnnCQieBCBpigcC67mwymFM5E\nLt+dvdDG6LM+v9Pdp2rRZY/YK5vsy9ECL4y5dhhbbO0w0tZw4YHOYv/IRZ4x\n1aDI+cqmhk+BXcXwDykjZMv5SjgrqnSuf58uEqw8s6R9vLsYIrGISp28fqyQ\ng9FuLSRhUvhSZYmIG8GFXXTxYorq+mcz5WQjlNNepsAR1Xs0BF1+pSZXnBGK\nxSAokHLB2xI8Fv3xLb6neHHMMAViMQfAx09ipMdOYyWaG6qhAQhIweQgEJya\nVtRJbmJK5qJ7FpK2DEUVUxeom51YSoUYW5O0ZvdHVmAISBBE6+nr51mk/Ez2\no/LRFQCrSNAp+zuTdSD1JJRJL1watcLrObuYPsnlDpsAmi3a8XyfI+rrGlQF\nINt7wqQkWkFrVR1C7Qw9Ui4kUwJOuli66gVR5dYiwo4+p3LuPfeZ4mWL8bht\nzPcz7iEB1GshwLmuhySZ4w78RMAnKTxsp6urbehz35xPcJF5l92/LxxlEEAe\nlrcbCAj66Qj6JGgDvQKNAeD6TqVevoxw6W1aZpBE1l+S6k/48PSjpdZjSPlz\nSW5f\r\n=RoJN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG4Q3YXao7YM8QGBItcmehC8L1JsDzNh35YbSgCALEnVAiEA4H+YV5DXJgfmeQwh0tpGMtlPi/3zCtaOvk5/KWZYH80="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.2_1589890650058_0.9900159134090825"},"_hasShrinkwrap":false},"1.26.3-next-1589890819-a83e32fe.0":{"name":"@xdn/core","version":"1.26.3-next-1589890819-a83e32fe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.3-next-1589890819-a83e32fe.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-AOk9Raf/sdAJL9A6anxqYBd+BIY/a5uGlteLEIsxKqgTloRACLJbnJyJ1R5G+EonQhFqQfLo1zH0ev74F7akvA==","shasum":"a54c49d53cbfda9d2907b6d0483f08d371d18f65","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.3-next-1589890819-a83e32fe.0.tgz","fileCount":127,"unpackedSize":493554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew887CRA9TVsSAnZWagAAURsP/R43UoRyB3r1DX/hmQMX\n9W8fURElvAE5/Uq5+HApQLC8jaonjAqneLzZXL05V4eGBmWNpNWVJUiUQ0AX\nwKuw1W7Nix7TiNfxIta/T//tfKkBkYS+yhKNdphltC5MRobCjSFKoU1jFxXr\nDrUOrL/TwcuA+kZIPgA14ZpYF2A37VyRAxtPH6WHOkJzxH9nUGDlZHd7ZzeJ\n9UiiXgviZDo+npvp4HZAf9kot16dwECXIxpw0oRJuTX0Rc+FBPSYdJbaPRT9\nkIhlg0zP84cbb4x2ATaySpfgckR+Pvz0tb3E8gC5uCQPkwy/9AnHjM+GiEZA\n6NCJ8BjzNEIqbhVmM7YAn8jUFp6RC8QsYM61i/+1Gdntvcyimr6REhtNie7F\n6ScG20vNXqQ5GLDc6RJNB2h+5psQNlfzWEykt1DHXKvWK3HI1rfzziEG6wxZ\nmqerVDxZFyGqd1qPHk03YYLu8i4OcgDBwyZNTGx5B36DjTXK0jfSnLj0BF7B\nw05ucfrxwV6s0YS2aF7kOTVYW3lI4zJfP2/DyG2GF0IC11Q06bTz7RIcryVp\nKPOOMKyEK/W6xnUIEgYB55LIWeeTzc13Hc33e7VuILAjxRJ3Jc96uW393LGN\n5Lye0Y8wU0iDYNxBir50uIkch0yAyS6ULtSaEFQ/7yoqO6DaAbqVQnQI0CVn\nRnjD\r\n=+nOE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5er/HMCOyfpQmVDqmxk83qdS+RdtiCW5T8b4ZM/+O7wIhAK2C6Ts2T2BqZtdlmJ4Aup39hfHMtHj+dPH3RaBLEWrY"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.3-next-1589890819-a83e32fe.0_1589890874842_0.5490909806008204"},"_hasShrinkwrap":false},"1.26.3-next-1589891344-da6ef43b.0":{"name":"@xdn/core","version":"1.26.3-next-1589891344-da6ef43b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.3-next-1589891344-da6ef43b.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tdU/hEO3A0vMLvHk5HMhRoUXbTSXck7ADegyCA4uBu7ms5AZdpF3wX38wRVQwKYHnrY/OB6oobb3fuoe/Nv5og==","shasum":"72978f67832c7ba7ef704a520c12281fc9b3494f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.3-next-1589891344-da6ef43b.0.tgz","fileCount":127,"unpackedSize":492992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew9FJCRA9TVsSAnZWagAA7VQP/RkR5kyueDVj+8EIo/3M\nYN6GWLCtowoskNK2wPRyWxYdrkdOTlRwK6DA3MncUbl/ksLtmaFM0ufMoRO0\n9YLC0iNnh3/CPsoeKx4Ds8RiqXImRjj15UZC6O0V3EyEvynQaCnYyh/RPbGA\nQ13yuv3LnBQzECdxp6/MWkWbPM96r5yP1sr8/vsdghykAR7W8LT/PJTRxuM4\nYkb+pULYLEUgG0hEeJHQGdWWtSDy0K6IInWGLZ7D1hDzsgCf1srPrCzquuU5\n8wuELPskR5Xw4Er9utxvOJnkCSje69pS+LkPptNnw2Jj+Ms0xU5GyOEuD7YX\n2Wb1qyMrsmHYDUKSI4rDVCtzHt1TEWxUdd32mv7GmJyGUphviwSEhxPu5l4X\n2Rt1LWmdT8HvORKxYdHQmMmvS+vZvPNzfDSij9GFsxBuKuK+7hfJS0DgGflw\ndvstv58yiPgCQFWRAI2ehvRx9wreLMvu+SwmJXvP1ch7tiBZ2fb05PpzqsUy\nXIhmcSWvA5kOIthy83kmwbDDC5ou39mwnHKoi9zs9bBi+Q3uEfPgpkjqAUCy\ntbHar+0yfUNRQlF9btPM8GJqlIqBteR8s8tu5YDBMaLaTP7XewJ+G6jOzPHm\nNiD07QLacotAdKjL6wo5Fk7QGqd/FKbvScmnJLHx6smlq36IshZ9b7+rDe6e\nPLEr\r\n=DTD8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBGGN32Yfi0NDhsX/eSJqkA++Zrlbn2bNEEZAMkG7sDXAiBzynh4AUMQM6U2MbHeHLqgHFyB6ZBLdmXdVjqx4QeuUg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.3-next-1589891344-da6ef43b.0_1589891401318_0.8303157625231141"},"_hasShrinkwrap":false},"1.26.3-next-1589921783-6c6160f9.0":{"name":"@xdn/core","version":"1.26.3-next-1589921783-6c6160f9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.3-next-1589921783-6c6160f9.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-sHG4KzBCaA2GOp70UNBu93HtrMSL3weRb4dFCM750SS1kWoPjSE2afMy6QiBHRgPzXcJV7WYqeZaaFH3MP2eBA==","shasum":"40df34394e4e7b9c3fe500e930a81ddaee4000c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.3-next-1589921783-6c6160f9.0.tgz","fileCount":127,"unpackedSize":492992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexEgwCRA9TVsSAnZWagAA1EUP/1Tl19QWHkrWiguLgMUZ\nE1/CLk8SmPw2R12ftPDd/4pa9SZvaL/Xs2lWawGD78Z184QN2Bh8Aia/uNCa\nZxuC0nyDKUaHQRfgGLHe+65oyFGAXijAdB3d5gc/msApNhpGdVwWRXJ5CDgk\nFhA8QZxwij9nl05F6538frRiCP4SyuynsbRmVVkPd6yK/KiQwp/EEJBM0nwP\nQi5psScntM0QpSF614tJ442QWOuvkP5mw/ZS4XnGrLLTtS2T4tE8nseMX7n7\nXZLi/0Ie7RrOtYAG8aZiJeMLPcHbN1QzecAlJAOMG/SwpRTka7TndR+iLwlY\nJAPpEQi+Q3lqZS3FlCN1jIXAVn4lQELQce1HWxM7D6pY6HJ79xOIegpk1xhH\nXlWRGHBmM/UNcbNhb6F39oyrQrdKm0PUyrWaIw0otByoBn5jFMu+09YjEFKU\n/o/YR7m97NzVbdwPWVd3eLnpyHhSmlatMWo571UNXLIz8OL9UZbrdGPqxVyG\nSMdJK0eCr8LNKvCTmLj9eXxdQPieiiaLenoJX3YGnqi8E3tBZ36kBSacA7r6\nkOMgf/9aZNYsIZtRL5GKZHYAxm1imQy0W95nzQ+D3Z5dVl3t46VcXeoN4Lhl\nR2qT344y8DhU4h9Nmlg/mGOcC3tXVP2aeFPaTA77SS3wOChkh9PlqXrjY3d6\nNoet\r\n=0+kA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGPuXo0S80bpk67HG6Y4SOW0wNDH8jxb5T05+x4otvcQIgJvaCMo2M6cf843yaMqDv6lQtiwKP03aQZ6i5QXOsntU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.3-next-1589921783-6c6160f9.0_1589921839748_0.6026851536360078"},"_hasShrinkwrap":false},"1.26.3-next-1589966072-5a827f9f.0":{"name":"@xdn/core","version":"1.26.3-next-1589966072-5a827f9f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.3-next-1589966072-5a827f9f.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Ytpylz+WKRSj7hv1DriHVxzoBF+Gpg2Vxj9DPZTaWxng2dBjGjwMBkbvnsP+ycJfYa8DMb11ZRc6Z2cYgT2njA==","shasum":"748c73059986528c83bce2aeaddaed36a5812df9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.3-next-1589966072-5a827f9f.0.tgz","fileCount":127,"unpackedSize":492992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexPUtCRA9TVsSAnZWagAARHcP/3T7SzIPtKZGI+PnFjw7\nPl/cEMkwpZu69GK87VsAot9XkhF/dLAXdV/Tu875W4cCvI4DDII1EkbyOVqO\n/nwRbbkxZWLQjrbVREIDKuoiSSWNa/ROw2Wfo501bpnpbR42sVCFVS+1w8V2\n6gEf5xBUWkocwhYSCqMRck4/3WhgLyalbL/v5l+w/LfOGz9fQI3ISp9qZpGU\n9OzppKUU3NKyBrxi9nmq/eBUfSF1WQ8ei717opYFq6LMJk8gFbfoyNb7fXJ8\n/6RyABEhL1zoPi+S/19v+JaMZcaHgqQtcMjKDjzjGEDvV0rG/yeJZ1UJKp3S\nD0Y2hHLkT/XZ0ZJSFdYxB7+5v9++HzVasGQzLtP3Mw0iTll6MJIuDs/m6UIO\n7dy8/Qh9VTeksl2eOOioQ9o7gY/zs+c90VBsvXraWQe71AGnbyZQpAxyOLK+\nwydQb4sTcxd7Y7zkn+7j2Ha6we9bhpZTVJwL0Q1veRzKlFBv+3lgpxhQM+fw\n7BECM3caWUqnp3zj1WjEec4opTY3Rt4MHuHjcIdG6PzSwgjj1+NvB8pDx40V\ntJ4pXVfSED5YXPLox3lPTpNAlnJ5PvYbQjQYawN+nJnsirrCR3eBCEqeXt1s\nP+ge0aInYUwARVvAV3B6mUZ6sU5dSazfpuYjqP4sHssILAFu3t7/cON6hbiq\ni4QZ\r\n=IcS9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHx5P+5CTddq58bLB5iej2mz6CXUK67tKPywISX7yX34CIQDFVK5vdx/Z6BM1Aqfjx56kV2AEjP3oq2nbtZr9wyDQ5g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.3-next-1589966072-5a827f9f.0_1589966124658_0.18624899516460247"},"_hasShrinkwrap":false},"1.26.4-next-1589966477-7bfd5b31.0":{"name":"@xdn/core","version":"1.26.4-next-1589966477-7bfd5b31.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1589966477-7bfd5b31.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-aU+98z5hjN4hKoiE+JpOKQnVMK2Uia5u5kmTX5HPAwOLoXi8fGFH6T0voUqm6k4bkk1GWIJ5GK7TLuN6Fmb6pQ==","shasum":"38c1a2f8e9f055eef6ff5e15c82b2f9bb7665812","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1589966477-7bfd5b31.0.tgz","fileCount":127,"unpackedSize":492992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexPbACRA9TVsSAnZWagAAMPQP/RZ9w8XLb9X8jrwj7SO+\nSQIIEGDYsXC+2Svxp+HUbnkOqRhTFF/iqQhL2FUIZWHUfg8TqRlkHQkDeVDH\nNo6DgIPmiE9rMZ7LQ17UZgN4VWi4e9EM4t8UiN02XBrv7rIjpNjf1UQcSYwd\nCGPB3Vzea9s8rTBcejmgXBZEfCclAOKb3bb8lG02TSXMdvd2bC8XjF4vLicN\nWrI8On0ptVk6JL0IIovkiRNB8GZvz6SCFf/ezKD7zMssNozvwgdt2JTNwZQ2\nB1Tl+HOeU8O8brSlF643Wz1c4fzSoGEFI2ZsGFc9TIC6PTkabcOJSM5JJGmS\nqN+hPCKHJ/P40qLiC7rLdFCZvKeLtzMOwOzcTzq8QIEQLOUzhRJczP76lpNa\nsYj+ZG8W9SkdwAfzDkAnNtXyqRMPmbr6OwzUb2gvl5S3uGFtl/1LuCjT8Flt\n24Oi7Fbb75fclJG1gy5WHuzjJqyyxJ8f+pNgxMTSN+Sn/Af3HNs0Dwmhng1l\nBBjhSNLJGtCngeiKkN0jZuYb2HKFoTEKkHkFvysBzbw1Pip7FROMDpYawIkR\nrY65twqFEXkEuo4s40fYPgw2SNSXn8GGyxq/gXJL1dzmik3HP0cPaStbqUgi\nHXnf8EbBc8jSGxurV5qNno4+YRlHoRhJIkyi+8kzVyn2AGG7e27o5rbnp44i\nv4Se\r\n=vnAP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFJtqntqMGE5f9o6RIIEZslbf6Tz/oi+EKiZ7K4nbIfQIhAJyNglKN2TdprwjkOTkuHH3XLieZOfp8MeJPsA9dTYLZ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1589966477-7bfd5b31.0_1589966527853_0.8736063119285069"},"_hasShrinkwrap":false},"1.26.3":{"name":"@xdn/core","version":"1.26.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.3","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ZvOX0gzKTThyA0p5t/loI8CU5r27/AvNmeFwx6lFGHJv+dHrFA5e4WHIjYAioDj93I2sOdqsusyhD/4Kypmq+A==","shasum":"02b609aaa231d4299a780dc648a711ca6746bdd9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.3.tgz","fileCount":127,"unpackedSize":492938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexQpXCRA9TVsSAnZWagAAuekP/00rwG3mU5wXxXiHrAzp\n2qrFTd9sDOQSrKUxDAkMcOcD38ZooCDGx2ICY+cvg+w6ROlEv+IGzEIO5372\nqmJr3eb+BtQcuyw1RFHVZ4ZZ2EtU5Qqv6d+4gpuQy8oGqe1H1PdfAEPak3Dh\n3MgW+c4qrhXqjdhT2Kdk+6E0RvIWTn0pugGtIoymxoozb5u2p7/LF1L1aGiU\nMlzQ8SnSf/Y0HLKWcJ1OnGtamYR5dYdH3q/G+BtFFQME9SnpSJgO2y3ZyZNd\nxLthXrVee0RPmCfn2sGaEuF16Ld6mHFJnyRbLLKOSB5V8pjtogP8c5m97W6t\nN7AU1wg/dNeaXEkBAnxhL2pKKANTaDkFNK5FkE3lXyb+uW28tQXk8AGVrVaq\n+Tg7Rt+QVeqhCsRRuoi9nEIty2Q+CSpT8TvSSqUGVpJK0Y6XA7D+CYYUrKhf\nHFtpR2yJ1xqf2H/GgR+uvltKhoth+TMGQlM6NCungoRuPHQjdXOsCcIN4Tdn\nHb9bjUTkpBbNqULxYcnFXjJILBMBHOP6S1UsojOJS03diFItPOsCEKwOu9M5\nCQWc3a+mTWtCZIR2+xP3Kdzv7oF06aR/VIc5OmbW/hVyLhXrf4TU72mRYos0\nyzyG5cBJfsnFh7rrOwMldk+VXDikI/9veyIbrFJylXogEqze9g8fhyypTco+\n3FdF\r\n=gOAU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDY7HSnH+SWSkeTa0GA63bjpL1eL9SCVMvLQjyIlo0+iwIgXpWL9ZWQqYDc3pueuFJsqCczC3yNgjG256hUUTCxDCk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.3_1589971542617_0.5804845581118592"},"_hasShrinkwrap":false},"1.26.4-next-1589978275-ff82b99b.0":{"name":"@xdn/core","version":"1.26.4-next-1589978275-ff82b99b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1589978275-ff82b99b.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-7NqZkORFcxnbbYPL6X7brX3Fd2tuLXL4UR1c7W3qeU6uYgoHjiOGKdVve4xaOgy7vdQsQbT1OVsfPxoPmuqC+A==","shasum":"528d888c99a8e431601bef6b64ad95f6bd5593a8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1589978275-ff82b99b.0.tgz","fileCount":127,"unpackedSize":494319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexSTXCRA9TVsSAnZWagAAhK8P+wWlEg/R0fiZCrRsnLCv\nqC8hh5cwonA60mSOQ5igZp5WLCjP6AxXJ3kOXFHvBWmP1y0AP3yOserVoYSC\nOXn+rvKyI/mcS1wb1cUNdaBi/R570GbyBUWElenpolZtxbys73uFMLdDpJuV\nuuIPAF9N6/UquhsrjTZDluNyix2ruKk8Vf/kS2ftFnzmvSnYq5ixanzebUZG\nJXTIwSEHiYanaXAfmw7mA6klpqOTdf1/Diu7hlYedgkyhTrsGxlqHdk+ZHOj\nh00iSLo401YdpH50qfZHOno1V2g7sN0ZSkJTGf0o/CqiWkCucpy3dg1qEa6K\nXF/RQ6tDy5J6NO2yOcTwdgS6aDeYZ7cjPeocks2FCjPZALEzADOHyv5wbK71\nnI0c8oeRKF3Das01aDQh1yxkszXVL612kv/wDI2hn/1m3BkPZJkz/dhDWdb0\n1Ato7k3KpKhtyBAPPyYI3ouHc9JnsJLaTFyUqIX9uOCo7DPuSNb2zMu8C5GO\nnruhxf6EwK5pkYSg6XGsm/wUVfTMVYgchM3QnIPf+qmY5Co8dDz6bNGIMlSq\nHWqx6tCVsVVhOX3SCnhA1Dw/TJ30cCucxbRyHxiBNt1RGnbAgN6GWsZ/MjcR\nLFoQ4Bt4u53nqE8qdqpFW93sR6ryf8//ntS6PV1Z3NqRRikp9ZycT+hAwwlI\noagr\r\n=n9qa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB4aN8C/GoPrV5HfJAfhMtcDcemtkAVjMdzpvMl8VsbTAiEA8Ik6wTFJem209o/sWRrxgom+zI8CcpNTGdGXrEX7xcc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1589978275-ff82b99b.0_1589978327377_0.7808821963714754"},"_hasShrinkwrap":false},"1.26.4-next-1589979034-aca67ae9.0":{"name":"@xdn/core","version":"1.26.4-next-1589979034-aca67ae9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1589979034-aca67ae9.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-hQs8SeX3PBxCKBfhsrpAk/S7I1XGlLwdhxpxAGUDSv1Yrw/VCnbNeI9z8Iq0zLSZUs5wwe0PKwbVmrQg2IckmQ==","shasum":"47d5c97cc6fe0bd0f1005cc1532288c7ab7a196b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1589979034-aca67ae9.0.tgz","fileCount":127,"unpackedSize":499455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexSfSCRA9TVsSAnZWagAAOWQP/jgT5XKvoXBmwSJpiU7f\nYeG+i5TMdxl9WOoL0FybaH8Zh3xV2LaGFYbDK0zMpFiE+gRpUH2hJydk/eqV\n7I/56BulOZmNZgzIctn3zDLODd/I+aT5AnVS5oK2CYGJG1xXvlBRdyoqQZeT\n+y7efYGiUYMFioPFyCNZZotpYTvCmDr8bVuRJeU9iyq3ahogV4UoalCeICXE\nL+3C91d/irhExHFqXm+gIaFbjqAvF5JMSpumITCdSCBtASfpOEkgzBemKsbf\n18jNeHmeByeLD6/PwnKF7SlayyUlAihUfIyqgawraSslMaPGsSpO2BnGDdvh\n25s3+Rbrb16AVdyfI45XoO9Qg0fSP02DASSTYxIp7dl+/ysxXG4W+ef9HYlb\nsMnT0i96EcghHgqBXFuyJWsa4bbhzV+bPaKUg7V8tBelDEHj2bamlllEu56U\n7w6m+uxejeZst6R8Z7hlqKQJDhZ2iTgWPLiBdO16EoPGV+ykUowb9ZjzKocw\nirLmKABedJSJgbkW7lR7G6JU9Q2IlDYmuagVP5DifUbczYTWi6UW8bYuUPzD\nnPMw327tnODdXHxiIG6KDsinZt5gVq52rrTUSq4XZZrxxKuG+l1f5IDdLPMI\nqr/qyA3923/MJT4A99cLcxIEHU6CRwhVvsJmDoJvPDf6tCb2NHVoCXYrSZcv\nWefU\r\n=BOGg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfNb6FQGfkBxLjkK2dokWE4rwvdgHk11NnPeIzwS46NAiAvgi2bBV4sd3+4fAeZXs/oF1I30wZcirKNBxDFICfDfQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1589979034-aca67ae9.0_1589979089537_0.47094234312892547"},"_hasShrinkwrap":false},"1.26.4-next-1589985804-757ff339.0":{"name":"@xdn/core","version":"1.26.4-next-1589985804-757ff339.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1589985804-757ff339.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Q3AyvY3VDcGp1kVMUapcDiB22O8RHll4ORLp78SVFsSAofbNg154nTJ7U3Pea6TvayfrFFjnkNJUOqhMQ2SRSQ==","shasum":"f1201ec835429f114af9a9dff956d9a0993ee970","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1589985804-757ff339.0.tgz","fileCount":127,"unpackedSize":499447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexUJCCRA9TVsSAnZWagAATHIP/2eQ21/w/A8zxwVe6/np\nyypGMT9yN2vWExEFq9Bv25UCbITxB1zseFVEOswO2QHsuZs1kaib2B22GFYL\nLqu23YoNm7r0D/pjFc4rP0eE0N64SkE6HMalb4QeTGq4oJV0iJ61YXh1Dyp8\nR8jiA/LdgtEApUCC2jPZy7vLGXucbH+RQdfbgzp0OxpSF+PLjbgabtAj1Yg7\niT+vWJBikV67f2421TXVWF8cMFJE39TcP8bR+Evsp7KblqJ1PKyFcnZyTZzm\ngfg7/Nhab4kiJmvluIs8vm7K7PimmJ4cruJjjJyYl2iUwD37Mv4V6dvcTf0v\ndvMmwKdgKv4thHWLrYtHYShIo2wAcLG88E4TjlMiijPG6ruxpc7loY6LXPEg\nY5I7eATZeflwfUF39wmDUO2sQ6h1SoVp43B32TUBAChs1DCaIWapNoh3y/oL\n2Eo7tRp0IGN1et848Z+BAI6I55zFRXIP5dnmcMwsdjtB4UYTtCBcmDW1U3VI\n9qBl0N5EezdpklwIy5t1zUbMDfAXolphZdYimxMy5GDjUhVtf+5AoVWEn69D\nUQKKuN5Z9PEq509hn/gdIPvCnjzQdD4dJSDW6OnsdSeFa/Zk8YnTCxyF1Hea\n6DD+wgBrKm3jWzMPHX8PXS054etXQ39ReimwMG0bAQ03vZJiJN4G/rpcr1g+\nUuHz\r\n=Fj0B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICVm9HWWrSLH1kq2o8DdDkR+nN0fVlrwsCoNvqRAOlLHAiAbwesfGFiTFKKRI2ddUWUlZoi70woCmiQS57DU+J3Mcg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1589985804-757ff339.0_1589985858395_0.03324682501797405"},"_hasShrinkwrap":false},"1.26.4-next-1589988492-4b2f4f3b.0":{"name":"@xdn/core","version":"1.26.4-next-1589988492-4b2f4f3b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1589988492-4b2f4f3b.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Mt6VlNKOdnoGwqjYJ1JOJ+UpNZeRik+HAmz8cu+5zwBMgO4fXiV1rxm3V4mSPsTlykViY4YCGIk672SkraqgAA==","shasum":"34c095a3e0d04100ec9e95d66aeb37f03946ae56","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1589988492-4b2f4f3b.0.tgz","fileCount":127,"unpackedSize":499483,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexUzACRA9TVsSAnZWagAAKK4P/3/JBjxWlK864uS1jBuP\ne+QJ/wfg6FCc5X5C4vkwugDBglh6OeQY+WImCGtBvOLy0vEE7zKdIT2XO/qn\nN2JIAEoRIs4SnyA/eicACzapRfnFcJDZn4uGFCwwfUlvboo1o4YQwwc7kah7\naHI3ysjPK5CFJ7DfxvoAQ6VfFQt6Mo8AV8kScv/BV2qvFbyppSzjGaM3eDmZ\nH6JsgPCD3wsA8qvHg2D1/Zhl3+gPF42qq+76UHWRQuyFSi6vhdWca2ZHNWdf\n+JpFanAi1aZ2oCt/az98zJHg4P4UXC4fYDNPQ1P/YsUWAVHSBOOcS0TxmXy7\n9+cIVlphoC7GptGzZr4QSAiW2WgiMqpsjXuSrZ8+850Di47xCraFglqw7DFI\nGQAnw5V/1cJ6MPJi4butpt3LQhUID1ug67soASdeBSRlbV/f2soSb6MsL+Qs\nu6/qg2Z0vUZzKxc41DbETsNLu/K0SY28ZYP8UNdIDINICw3OnHwaxED5XH+h\n0CV8DQOvuO1LLtV6LMFxj2ZMFcuPyGIdtAdijNpwXIQCTZ9yLeN56Z6aFpgD\nftAFg21Blcm3ZgzdvgE3sWiMnBxjl68OkMUxwPdIBiv0aNz7IxBKhsz8w1B5\nM+ISRs+UzyvJUdlz+kPiankL/pcvNUU21sUY7Z/i9u9CkH/uYh1Q8Q3WCCN6\nVOw/\r\n=7yXz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/udYMpA8sM6xBYnFlnZhpUp/bwQY91iwKAKGWVJruegIhAJs0yIzB2UKGuz1qZgQJCb3iiDMqrYb8D5ZZiljPe2LF"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1589988492-4b2f4f3b.0_1589988543593_0.4258383220039068"},"_hasShrinkwrap":false},"1.26.4-next-1590002479-505efef0.0":{"name":"@xdn/core","version":"1.26.4-next-1590002479-505efef0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1590002479-505efef0.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-hhqIcXywYQsDYN/ih827R3WQD+M2oH0Uav6Y7r1MRCobEbPOpylLS7qRe069HaVKqfpy9ToJs2WRzcer5obotA==","shasum":"4ade2dabe5c80bed323518b8199c01f206ec1718","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1590002479-505efef0.0.tgz","fileCount":127,"unpackedSize":499689,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexYNjCRA9TVsSAnZWagAA2eIP/RWos1HEcPzBPFEh33D6\nyF7sPyRgr1d5UPj+eaaExgOQkBBhxk4b2jNz9/nsFdT9fMM6qw+b87Bx/v8d\nzGip/eAP7r2eI+ZZG8arW2up9OAuUoNM0PO71jaRJYcisXw3iecoFIMArqu9\nNrPsc3ZUesmfHObF86/e6l+sR3p5XqxEjIFDkaCxlow3u+Dmfaq54rz9rVjj\nRWrEZFpdwBQry4jBILkvgKClDww/txUuOnCcZcSk8qk+keGBRpNhorqL2ST1\nex5zU0XHGDE420FlG8g5AOOaNHeOeS2IYLbDCQXhYobccxNR4Eilece81Mzn\nLdSvb9rJHsaYBN42HpgeRGmGygiEbXyKip6SJ2UnCvBAaYYd6amovrtMHxYU\nQJnSxAloF21vJMX9GVSvWFo/xFC5grOwL6dr35CCJ3QCyNPPgBbqzgZSaLsR\nmwMovQxHNeIcqeMIQQC4WHAg2LKQ7hPgjpopg0S8x4RvVOOwrxiOblDufAzR\nrqkvaQd4TlNWbUWT59X28jf75ob2vxP+cNua3asAQxdQVXS9eIflyK40KNVr\naAl0khpqmAANSYTtGZ2WnNVRXZw6zcvD+OcUDH0pQJ3vxmVkL4s0MGlEwnB8\nD2crwpArsNmgNdl7NNz6l9ToGs8vPRxEvEwQJiP8ZG5LrSGOugOYIgRHBtmk\n/6Eu\r\n=5zDG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZwsazFNJz6wlsLNbsRpT31RADtDufaAMzKcOJOy7ZbwIgNLU6veMYRjkE3dt4TkrGHORr4qvjiAKnBfV9iZ+Bjz0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1590002479-505efef0.0_1590002530656_0.5287717024461591"},"_hasShrinkwrap":false},"1.26.4-next-1590005800-9e59a3df.0":{"name":"@xdn/core","version":"1.26.4-next-1590005800-9e59a3df.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1590005800-9e59a3df.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-KPI9reMXP494pS7dugO4QPOgVtLaFIyevKx6bvkiJ23nSr1CzI8cNgswPgz4TAuR+l/Bse/TP6DPlmd207pYhw==","shasum":"4c6011267719ca9d731b8cecd96852dfbd42ad46","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1590005800-9e59a3df.0.tgz","fileCount":127,"unpackedSize":499681,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexZBZCRA9TVsSAnZWagAAY1oP/1BBXNFfWuvdxfdR/5fC\nIYbFT1hB3eOLEVW6GzN44xEJHqw/4SAJjP5JbGP8gzVqqWqmWe6VZ+zWiFb0\na0iaI4ZMuNT/VPohczt03g48iBBEb76ZULXNug9jJOrqkiGccBhmMJNy6oR9\nxA7SIJVdIaxGEldOqcJLV4LgfkzgcLxiUsKhiMwf2dAZajE4+whhrxr/09Ek\nT3a0xfauaEpkejjLnxmKFT0mjpmw+nrDLkH4LT2z0rPwzSp5gfulwR08nTd7\nrmr5bRVYJGRsss4SMpac/9cEsDzFxT9IMxBH7jpOVLTelsMcFSJ5hmy9gvXA\nOkJWYzcAPwsl49JpKIOLcWQUnPs5ednSgKnnmkx9BNHT44wOuBp5z5uXKnzq\nXzB9IDHx5DnqihVcUDEWtJpiohgf6d7ptwt14gkWT5cue80KXLGUb3G/d64i\ni87RBkQVO6wLXNsXaBaq0/a+Q2ORM5uGDTMbvqpdO6tcQakLodSZBhJTNx+r\nmVuGEYZoUCPG8NGQ6cnxvP1JSeRhQyTA0uq6NiiIQiflI3A9YVnKdjGHJCji\nmmwFhZUXEF08TBKxKPz2VtFHgd/zLMAlsrj+vC/+B1DgzRknhNIAKB+V2QIL\nXpHCZ8ih+wb3s1IjvaTZHRXWw+54Un+RN7IXRR/5YdCgyVU14teLL5RBUuie\n49UG\r\n=J4nX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICQJJHj95o6kE3Wn0uB6lLRaLsNYezMjpHqrUoMmvoSYAiEAzWDnPuI1K3sR89L1xom1Uib9U5MGLvQtXi/JyvzvmLE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1590005800-9e59a3df.0_1590005848696_0.3785176247328954"},"_hasShrinkwrap":false},"1.26.4-next-1590018961-f5311033.0":{"name":"@xdn/core","version":"1.26.4-next-1590018961-f5311033.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1590018961-f5311033.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-sre+7c6Hfb3P1HWvxfz3A0k9+F3LvZSCwKIXMLJ+RNLVV9Nds5uOooFpgiwjgC5nVgRad+DrQyW+/JZt6BYnLg==","shasum":"e2e6781b0d13b41c46c55a95645fd241f4afe66d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1590018961-f5311033.0.tgz","fileCount":127,"unpackedSize":499681,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexcPHCRA9TVsSAnZWagAAJOcP/iYGSMGBrpWdLE5hM9kL\nEgkesXlLBaL+1SmywWqa2iMCsHAklrCoOOsdyIvWQVD6u1o9Ju7b7FnGBIvp\nFIAhdZvPCXHsLlv8VA1hXVxmAqAkDqOJI5nZaB8gXKPwtO+nXEyQPvcTRDGB\n5f0juw6ub3K58eUP74UjrIRH4ohY+DTnye6s1Tachi9P5M9KLDSkbiRNvxqK\nY+nI4OztZAT/rPKF0J4uXySExanp58tTwBi6TsFPiK2rURC1Yv7WD69R9+T8\n61Ot4FF75vdkDBWpY7EpV06D5YSjWtE2jCnUmBp/2djHEuoFuY68U493VD2u\nOynzJ9jhNRJtt68qCt4ifU0onoyoHXxnbaEy/f0rAGaR8w6lnBp8m/lt1xQd\nrtHNcYXK1F6Jvis3Uyx1paxlLlK5UqlhvQudmxv3/XTMxvyaEYAxfgkulxei\nrZx3pcUhb5iWCU3FtID9QIu0xt8yWqBJH9ntDkipzw6/EFhAhh9b+Dfq2pVj\nVrico2PRYKOW/ngMZsAOtwTB1KzNKdne3+xIASFJ5aaN4VbnwlNyfjjY19Gm\n5FXBX9qT2dcoVCDdbORsres70Y536RQu5b+8lUtalTdJmkacbk8MmtqbB5hO\nZW0FWHx/9djyimfFZSZgJnCpBn/YHHUMiuGM8TeTYS/d1xnieT4q8SJ/aUjX\nOmsA\r\n=mJ7m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGlYaAxOwtPzgWLN6xWA/2gDTfSg4yHdv4zVhM7MlccQAiBFgxzmMIVJNjeVTXxamaAKj5C0cjT+PYGRcRGDUuK07Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1590018961-f5311033.0_1590019014944_0.2289084306922542"},"_hasShrinkwrap":false},"1.26.4-next-1590045563-e831796e.0":{"name":"@xdn/core","version":"1.26.4-next-1590045563-e831796e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1590045563-e831796e.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-d3jG4VgQsG6chbE5+kzWyC9Am0+m052YVl9lu1jpXgJ6TXNVFgiJytcnRgf+ZufonC9CEjxO+O+GJjEaN7E3nA==","shasum":"8ce6daa98522d66b41178f0e5ef0bfab3bb6f2ee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1590045563-e831796e.0.tgz","fileCount":127,"unpackedSize":499822,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexiuxCRA9TVsSAnZWagAAe+sQAI6yVeR0w2SJGPXtQjWK\n+Y32HDubmC4wBppRWY1IeX64MxD/vXpUg6TLmBpFPXDRq2JiJ8wvY+pnqCL0\nENOcFc4zuDvpwWfV6E7oUx55WwWsEI3IqWeZ/S1VNkTajrjC3QQ5ahfpaMeD\nb8+GFZY88AeWtA8AUCyKtztTRnumLKzSvN//tG3Fg0zFKPL1Z4+rNhJ0FGCo\nHcM5DK/H9h5EiXXdeHg0E7bHE+QJVc0QpJpv2RDQo5SBkZNF4lJSMrupCuaP\ncJemCzLF7HdTOz+k5MjnPBqrApQsQiUBYg8/Eb29HdEcoo6uKATHQSey+gJj\nryUML5nklPhFvHjJ4h01135tDNjasTmZcT+t8AWaLzYXzSaVIL1Z8Ctpc0Oi\nGcfANgC2wc1lBxZlZYc4BWgzeyQba8liZm8Odw4X67nPu/vkKAdTeD5HMPyp\njZd/8yM8dpmZOGHAzDwftCbCHKKwTHuFdC5QUHIqnrKuTQ6iReTc5WG4a7gz\nDFFTMUzi5bKjh340WGxTEh/WSbO5Q6l/Fy3pTAgbuk1c0+FUNXPdu3W07NQx\nKC1QvWVNpURxE8MeNEzHDAgj128kIBjrNjTofWxqv1QjiHREHiRN90h3cJJ1\nyEpuimSX0offe33Gcq9qjorJVqMy5BTtXUNE9RWmPaw8NyGcnkv45augEw15\nUgYe\r\n=K33G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5Ofbm73Y5oPekoD8wleWXbagUwLJ/97p8UJcN7iH2rgIhAMaZPHcdew3d9NcyA/1uJiALKehKkz1r1cX/QM8rIf00"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1590045563-e831796e.0_1590045616679_0.8564101902744998"},"_hasShrinkwrap":false},"1.26.4-next-1590045758-3ddecc8d.0":{"name":"@xdn/core","version":"1.26.4-next-1590045758-3ddecc8d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1590045758-3ddecc8d.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-DmY/2N+hL6YvPvk69o167cLTsYnVPuQRz7JCCxbtB+ibjjk6ff2QwFxOg8x6NPUQxWuQOIhJQ7797lXVETAoYg==","shasum":"fc7d230d259f1c951e2f770e0970b3f914bd1849","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1590045758-3ddecc8d.0.tgz","fileCount":127,"unpackedSize":499822,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexixyCRA9TVsSAnZWagAAKd8P/3a6/uAQ+vbMLdiYKBsq\n52R6ICMnxHkOvMBqeAChWRFQdwgMZsP7kPi0B8uZs0EacN92mauIcKLFW29c\nnFeLGw/TTy5GUqnot1fsjDtKuEVSEfMqHROUa11P4Pl+atM9Q5tjVGuzYUIn\nbn2q8AlXWXXVZPz0jEmJ/J3NxUGfHkiLyc8L9oNKKF1bDRQOvvSlnqwc240v\nYsl3rc0IiXvcoQcPnlP2+aelfABKyWCohVNS8Ts6FU8iSPZatuIk3NjXYbpy\nxiBDf+XOsAJv0FjqcHBUgeYrIs/BpIfcdkKwnP5MBJg1QfXyjpkSTWoyYfhX\nEL+CToCcFUHobP6KnXLV/IladixAoLWueRtR5BCO6WVSRtu++4OijMKwd73K\nRPC+WwYqshINsDg2U56gTW26vF+BcwL+9ySNeElGqsDP/mOBBCZFCloF169P\nFfOTfI33fzFTjQ7GImof8UNaZ2XfEol8mRS9Afar7rkAzUBdO1oFAHN9cvkR\nDvl/OjdbJJPHf0jy5wI42NFv7HC6m/iI4F1KLkd4hA0y5DBYEcIpNvjFZkyl\nx2SLaPJ+738N49UvwfW1swf/KCgKM7hjiqhpyiXYzPgWIa81iF3C9pgX1x3J\n8YHI3jNz9gydM6Tr63pBuJgVyLnbnQGoCFeZ7d0uw/9vtChGXc6GN2mQbDls\n2vsS\r\n=FAFk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnqdW4ev1U9lCtd6qdPTbCcsNQArMU6HS1CXcgdFBk+QIhAO+t+jz5X3ALSIXFRdfYxWy5j5BLdEvr60gromauP2DH"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1590045758-3ddecc8d.0_1590045809554_0.19920171801865116"},"_hasShrinkwrap":false},"1.26.4-next-1590058605-2c1b89cd.0":{"name":"@xdn/core","version":"1.26.4-next-1590058605-2c1b89cd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.26.4-next-1590058605-2c1b89cd.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-B2JwkW9zc6J3qB1gYhhFs7HiQ7EDUdo/1llW6YyhmfGYsRCLB+4jOBfHzea3DYUfj2UWy8hqY87ZAYyGeGBtdA==","shasum":"e805e52fd2005cbaff54b953851e82abb66110b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.26.4-next-1590058605-2c1b89cd.0.tgz","fileCount":127,"unpackedSize":506277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexl6jCRA9TVsSAnZWagAAclUP/2olucnujgV3vPXTVouc\nL3/BCOq2r5i4Cgkbdawov+dMnwVu+RWVJ1W+V3ZqlbgQ0L0Vb5aQ7t7J78bt\nw4j/hJDl5ytjoyeSsV8GoaSVnTCklJss+vIxd6z6L7D5jiazrGR2BeO8Qt4Q\nDCNpbeF/qPUUYeysFeah8eNQVMEEnS+nZg87K1MvIXiJC0o7u3boK80STzXS\nCTrlHhdtwewU0kqz0b2a2DWndW2Gw+/zTDlPMwOzhW3nmOHwug9PMER50oYa\nJuZsR6uMUCbVdOpyyKs3jXl/ex11tmehi/IWHdf6Nn6povVy+8f8FuiSk66O\ndL3oVadSHlTCZwFjya+Et+Ebt9nrnVWBAWs6lBIDDTs7AEuN2PDPshyMnIsF\n4Ql31xCwMagBAoyTW3LSLHauKeErdTGbpadcOeheNSG4Te+c6ERSDZ192TrF\nEQpbrvBjuKoV3/OCieYb97l2EpbL8e5Om63FYwsjxEYKKOwoQi953JPySq0/\ndTEebnHqwGdwRK22IAa/Q14KM711ZXWGVpo81FChnqd7DMNLqWwIW1Cnye38\nhMc7W4LbO0K3oT7dwMBghykW1tQCewlnt3X2PhmFB7InD47tZtgAIp6qZ0UB\nuf5kWiSRKVTo7VgatpYRMY0Tqa16/aC7lKvhJFXkuqGweeKYR+qpzTOWEjYB\n+Zc3\r\n=ZyOZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUFphhQNa+qRPhxAt1TSu/6zlv29wzznnsJ/4aISSFkgIgGQaKklDgz6EDMJOJ8hh4h2nADDR/SXfXL9lK3F+bCbU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.26.4-next-1590058605-2c1b89cd.0_1590058659005_0.15360285226142834"},"_hasShrinkwrap":false},"1.27.1-next-1590059385-7692bf45.0":{"name":"@xdn/core","version":"1.27.1-next-1590059385-7692bf45.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.1-next-1590059385-7692bf45.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-yQ4LQ87IthdU+beeQSt64uSYXuIsFxA87BI+zjBsK0aPRX8OpCjc1gxfUQnJQrYAHwyWa2RSn58CycNwK2tu9Q==","shasum":"931a424f9c54be3ab806fc868fe6e5dc92126d63","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.1-next-1590059385-7692bf45.0.tgz","fileCount":127,"unpackedSize":506277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexmGzCRA9TVsSAnZWagAAS+IP/0ilkqKt4P+ubaMoXeYz\nDkxBz3PLk6dBiZ5qwY6xvKb/cybnjPNV2JrZPV6D8kQ+Z0+dsSghusNSP9zW\nX9FXScz94W1JOCyqh3hpUuOro/ppgqOv0e8Wbeg51+9T0laVzv7N5jeLrbLA\neabH7UWkP9qKYFUZsGX9a6xVcW6IFCTSBabv5bqXvgWNniEoKhHKVcAvn37I\nzWD9Jeg2dK4yDvbDH8CSOpokHQy5zm2H9x2If+SnALftMItnf2hLos63lwtK\neuGFjZBiaO5I9evl0bsiPEPhRfbyWz+vDKKPZvyYRZLbCLGZI6gRj9+S8KVx\nqp2CSXvzTtkURKLzCFj+O/wvWnbjCSgZr7ta+gIeOgH7bqMMjIYf8JR0X7hK\nZwBk3IZEQAlTnrr81yuvP3a7/PqBcWnTxsgPihuWF40YPDT8StTTzIE/z7U7\n4VVPUVcrWlL80me5w+QXwq4hv90qenFF2DkvXu6fR3pv2EIrV709V02Tppev\nw/XNSpI1m2TXXvDzaVRd1vRUOf0ja2wMStPeaUtf+MZpB9h1Wl4CyDwkMwWR\nS43Cgv5iTN58Kg8ZTTKzUzRzPRuzueYmWneklLG7ltoT3MSIVs8FYyvJxINc\nByT/Iw5MMlH4hPF6DuTPMpX/BqyNh6kxGDjMWpVhPtzLNg8Nqf0kgP/kuMHE\naSqF\r\n=fy+J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNQ0uEsQwsDNoE4JJm7vD9HZlPFYia6WihGA0U8PfMyAIhANmy/xFUE96i0r8Kf7DQ8QUkrA1v1mbo4BFXin5C6oUn"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.1-next-1590059385-7692bf45.0_1590059442854_0.5022416311418068"},"_hasShrinkwrap":false},"1.27.1-next-1590064035-da1f640c.0":{"name":"@xdn/core","version":"1.27.1-next-1590064035-da1f640c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.1-next-1590064035-da1f640c.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-LckkdB3O4ECpsz/NT6PspOHCTJaKVBC/ZXMYyp0Vea2lfNG5m2yT7ybDKV/Zq1qEAFX3bdWP4EwGwNRQOoE1fA==","shasum":"41cdecaf1167de5210465012cd687915a8c9ec80","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.1-next-1590064035-da1f640c.0.tgz","fileCount":127,"unpackedSize":510001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexnPQCRA9TVsSAnZWagAAGfYQAJR88Zz9FYhE7IecCfiw\n+PiJniQ72Rbo6ZuX6fY4P3vG2W5kreT5QeoTYqD28e8csVi78Ep73y5lQmtf\nvoH+THrgs5gVwsfnxxhfEF1caE55clJ5zgsa3zRkayyOP2RP8DDw5+sxvywx\nfP4fiHaeXPjJUhbZv4T0WrOT56k5GXwv/jMa1LUk45Mdgpu8Uz3Vifn9VDwT\nBZAM4fImk0TmyrQyhdbsl8/uNZ7xZWrHQaTOO3H9v/SspfdsX1+nZ2SBXLbI\nGP+IFs+cc3EcD8ptEQqVwwawR02XwbNwz37wckSkk4p6kS7ZKY4erT2NUm7+\n+jRgUxjoxoh8jmfeM//vbMcOvT22w2eBKAzxRt2ByiRuaFPsMdT/7NAGAGN7\nTXh4D0A3V7TbPu9NW5QkrCG3r+Naj0KxusgSMpOQvInUNwtUvVuCxVNs7V3t\nLDlALQPZaTM/uQrq68dubhm4W/11ARnwUtvHM9CCBVI9tyQrv7U8mkL6uKb+\n9+c9d4MTqB2+yxPXasCfb69t6zltn0gjZhx1oDv2QNj2ee/LwddUARTj3Jwe\n54rIJctylVULsEhfVbtVqrIwQDEKvXFCJyWFyXGky1uSrwRCHT4F1C+S0MBF\nCMfgWoAUIjIvMoTncVATdj3N/+C5F4+g8zMSjZbEHC9qrPIBv3Vl3S+GKhB8\npa9l\r\n=OSuZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFF0N++4VyXasNUcnNhsgwtW4uQcMdz1M6OBmJ0z69y0AiEAkrWNoOmtF2K+dcOvjv3L7Tf2AjwOIPKgxEgIpv1nTSk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.1-next-1590064035-da1f640c.0_1590064079831_0.27228280058745424"},"_hasShrinkwrap":false},"1.27.0":{"name":"@xdn/core","version":"1.27.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Mdrx2gUHB+0X6UCL47hy+p/ToYEn0p72UIolYFdhxfhMWjWNpRHxCc60ns4wqijYOudmkmGat71LHF2RZx+W3Q==","shasum":"28a752113e7cd3d1fc90b446d65ef95fb2663de5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.0.tgz","fileCount":127,"unpackedSize":509947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexnVQCRA9TVsSAnZWagAAkIgP/03SmECbBABRO2561R18\n515GpBsXOiRLYW9+/uaKfCs8ZO5gzx6opBjRRn6STxbmOWq4qpa3J7rmDNzj\nSg6IOIYryKMUTtYAvpzy7zNYipw4OoMusyrLUBRpJWLHzsdswJhpYNQnpxkD\nbqumiLIe79Lxb5RBOvc1V6cSXHHFSwNO9KIkM5bYTnXGFHkG+qcXsS7B3gLu\nKdu05ocuw/0513tvo2hNnQ/5qGKJ4MNV8DeEHgyShBa25k4z5R8b1FudOVV5\nKCM5ggEjDsURovcTQLJgcb/IJmDvU3fOHx3c6UA2TMr6A74P3YTTgi5+FMPK\nyb/nT3qlp3fqeJVg1pGfT8XoVLqd6gT6ORAHbNoXrBJdgnBd9NDUEgOhUaLk\nYHc9OHNLqv5opck6Rs6Brt4HxtAOC/A2MPLvDYeY+ZXU3iz91UGcuBu9Zj8B\n8pI2bGTR0d/RF8hpz+LTYjkH9LbbB1ittoHladRDfhzZUvPYe4pAb8giMbe3\n9qjC25tK1Ghm4Cb0A8jxU9bUfInp2QQrSADvBnVXSaGDL5u17qWHIZOGRB7B\nQUi9Tza/zeQ6YASRBhaqXBl7z6yh5Qq75fj91NJZVYW9OdowC9XOjec0N8ni\nVPjBMnGYZCQI9FPLAWh9uboZOzAZAUfRPNdtNRb3kv+PfGR6lTBITUuHd0Tz\nntdz\r\n=YufJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3DHudtXpfId7Q1LPQeDeZDaNqjUBLd8EUylGdjBIRTAiBvjeJ0UBF/21nRW2T0pY+Opp9dz4Fto+65pUw5j+jvqg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.0_1590064463807_0.9943494613888642"},"_hasShrinkwrap":false},"1.27.1-next-1590077635-08d067b6.0":{"name":"@xdn/core","version":"1.27.1-next-1590077635-08d067b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.1-next-1590077635-08d067b6.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-62kRBoy0DkdJ4VS9zfTu2t+enB4ReIWavXCR6k9IXqQTmZJ679+odMTUNS9htFe8FwAiiNQ2YnqqHv+chjwUFg==","shasum":"b00441dd45730cc2f837fb24309f88186ed9a4d6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.1-next-1590077635-08d067b6.0.tgz","fileCount":127,"unpackedSize":510222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexqkACRA9TVsSAnZWagAACV0P+wSo2QNZEDgYW8hKzzET\ndrryfRdPuGL42qkPRFn2CP1HoN/1ePiIsPXSNQ75u7E0RSTvGCllCxyC6ugp\nWyEAKJX5jJtqmsEHslRnoNXgeLJzVtIl/LSg/EyIHuOuNSm8kSuwqaAHL/q8\n6hELyKSOTW5kscxTNrdW9dz5R6qG9KWN2bmWfHJVWqmzOml7dfyM9mpMUUK3\nfq62C/7uN5gmipGPD3q12zBJCPbasUF2SFiieyt5OT33T2eklrrpNC5A6A8u\nceYGT4I75Aj1UK/hUjbky0yX4aoaSOjozWwY1PL0bwWfNQgVadaU/U9R25dk\ndfnRXpfk0LDr8KYuHm/n0TTxA76B3Yhj6CkItrplkBKWKTFZ+28oTSgg27A3\nhWc63GAHWGTrmLrOEVuoUsfppRINE/u/fxgFJbfxN2ixoBsH/lZxrQZJZa50\npbuXVhDi/gTrIAiTN4fCveg+5z5qTI8qK4Ojt6E9DaRocUdZWd+91lRBpc45\n+0fOv1yujcqjrpkrQDAeJEOjmfFLFKHYz/ehsLQtU+5MUmu3QMmZRGj1kckF\n2Z1N9OMEM2nupl+fx/gEaIT7y7DSHBKy7iJjqRLy4GSMfjHaby7XK/1zOank\ndDhxv3bx2oLmdTKC124Lw2L/pEHu3dP3U9KJ9989LCMHr0r1wKBoL0yqbXZj\nDuBk\r\n=ejDe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEUKnvC44FRY8iCWl36iKQzDI3D9ijYfQTFuMROBYvdgIhAP9dOopTzck9gqZNx9hk60lqZEHsJ8/14NSqrDMT3Te5"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.1-next-1590077635-08d067b6.0_1590077695289_0.6290793273423296"},"_hasShrinkwrap":false},"1.27.1-next-1590077877-848f8e4e.0":{"name":"@xdn/core","version":"1.27.1-next-1590077877-848f8e4e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.1-next-1590077877-848f8e4e.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-eezrGcaS7cWbD8gu8JTwyNwDepf/PuxBnDkIlU66VJlI+tnIhKSPQw/kWzmQm9ZMo5X3oOoBonFdRWu4/ps7Xg==","shasum":"6a04bac0da3f9b3f542f24d9b3367efe6e9e8eba","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.1-next-1590077877-848f8e4e.0.tgz","fileCount":127,"unpackedSize":510222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexqnqCRA9TVsSAnZWagAAZMsP/jsoM1aRI8YwdFzp+Pbe\n8Zeca9FtLntHumPC3Kxbxx0pPFVJxHqP9M/GOObselmDWN7v0dzjx5APCk6y\nRUct/3zXu0ETqnMln397odgh3CXSa+vCDC4Z+74SbswTXijxk1Pwnxiknhnr\n57bcbdm7hGWqwyS8dUT8R2DNkTPuMObjwIARcJxx2UE69Q6KKMRtEiJnvi8G\nNsK40usPq1ei3090OLa+zwSIh56hJe6mMzJO9PVvWTIG3UceP2mWayd0iiNz\n/SAJLdOI6R6JSnqoYVv8mfh7nOubx8mcNGkt4iAX7fXTBEnpWruEj/4QYs36\nYtykPKU6X9Ij0VLbJnDNbzXygrWk08uVrzlFb9vqjEK1FVR5Njoj/XxpVq/y\nYf0BeZvLF+tcsZh21jb9Bj+lJRzOjh32NmvgCE+t8RJ5qY64GqKpMm5BL50W\nIYFyyoQHS3GA44Dm3ojrzYalS5ALI6MsZRfU+1NWDUP6H9Y/xMIAH+MbuA7U\nmBuW8SwTO/MIO0kSmGDmMRxiRw25ca1UZvqbB9md8lZ2TaOpfZITHdPKuoVd\nMCfKDzOdy1jqd71UgtLjpCsODHkoIvIw3IdGIe0ntfQfRVjNS0oMOqfYyOup\nDf4/7wgGGkh/TLLiBKdp1fdo5O6M3Pa84l8glXfvONSNfQE4oEVQcXAQZQIs\nP5qo\r\n=99iy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGX2lz98yC5sKZHfqhxmiKsKlO8fGZKJvgcr+gSeowU7AiBUQAotXPt0tXOKf/BjLQm41o644XtdLaI6hDikVLRS9g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.1-next-1590077877-848f8e4e.0_1590077930461_0.356548008055771"},"_hasShrinkwrap":false},"1.27.2-next-1590077984-844e6fcc.0":{"name":"@xdn/core","version":"1.27.2-next-1590077984-844e6fcc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.2-next-1590077984-844e6fcc.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-R7gbeHjLTjqbTCv1fLmI1u7el3RVGUG03zYifLdwwCsFIvRRm1RqI7rzIcRJc//wmWP1DylErPG9JQdEG18NhA==","shasum":"f669423ac82a59fa62e04d69e553ab5621e5f89a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.2-next-1590077984-844e6fcc.0.tgz","fileCount":127,"unpackedSize":510222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexqpVCRA9TVsSAnZWagAAjkYP/32C/dkB2mCdanS3kJCt\nEJFggcqKzmd9UkS6YAaXxrlKCYBv9BsEcktGBTNp6cjh0b/cl54gRvjpYpT8\na0RgEBwr21JgRB7bYTJx70wLw1dHLVKcFWNOUgXYsX65nhOP/f8+Ddu1PfeV\nQVNTNbUHrBE70gyBdWd54kcumW+jhPW24nzW5+x53QtIiFZDbpqbBSemd2Dn\nKtXwxooigOsGzkHu3nVRxGN1az9Lli/cio6UBPqk2tHJM4cL06QbRvILpnzS\n59wze+kBOfhotMUqwJ+ea7M3NMvumGqBLrSHxoEADi+/o7WbO0i2mqJrUaKu\nhy2Vfm8rDP76gUlFGoOecFt9gUR55tPzRCMsjcbtOFsvFfxJ/xaZapJR7a4k\nDp2u0FIN4BExVPjt4bd9dTRnATOUZJqv85zR/yHouPR9LGZrEIpC/DkBRlTY\nHLWzJBSkmArBNBscl6Jj+rgmnHSD5B41ZipKqjB6q8IEpmGC9ObzZpms0P36\ncGyJBWZQEKuXFPYtKzzPNGK8EfbwknXLi77EBmSziBQB/41Mz8+YPfc/a/Pb\n2kpOPaOJk9JrP0C6aaVQ8+bkbb5jV5Q1ClrHDWLN6oBhMfzdWbbFWBeb8URS\nH/vxOlFRIcgIakBvin5L7GydcHtZC3IYu7Wvo7cdTfQyfLHTgbtWQF/lHS/g\nGWLY\r\n=lQo0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0/u4MPBvJMxKM7jiXYycXJNCTn9rXxS8wLfcKQe3TkwIgc4vY2h1OkkZxyfadagteAdfPQ9rfgHk/wr+ADNHiuBw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.2-next-1590077984-844e6fcc.0_1590078037112_0.5724066040281897"},"_hasShrinkwrap":false},"1.27.1":{"name":"@xdn/core","version":"1.27.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.1","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-BannZF+qmMaEPg75O9djd/Skt+7u586VYHMbFZWGB5j9nKohY8CpAKfkqINWu5VPZ0awGz8/5GxyPf23dLJ3eg==","shasum":"2e5d7af21dcc3679bf1124f50259af29e15427a7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.1.tgz","fileCount":127,"unpackedSize":510168,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexqrzCRA9TVsSAnZWagAACWIP/jgrFycHj8vcN4vrZJTT\n8TtyPk9xjvsbswQ3MD+NTUD6QmSkZ2On8ybkJs8sEFF1tfp7SOvxDa5A6Fg/\niTwLaDbFntEnSNwb/z8Fdjn5vcTbiyL2PwRpeZOmQs1oWMIeAD+GF+zZ0Aq2\nTUV0c5LQKumb9jm2mmxUPO2vaYbSSwA7wzzAq7SRO5x7OFS94z6qxhbPmnsH\nznjzBEFi3r6GAjgxnDHi7XEr1vvCTWUxflGB6ddEtRdLKHBkqHFlDPvfkCVd\np89+4Ldwo8XyQMu84RxYB0uT5JzkCo5QCN5BGoUsvCmF+IE0LK+VPT+DrukO\newM/HWoF9S3FjC95ELdzBCa8FBu6Zqy4piK8FCE8OKa4cKwsqpqXZmSm9Py6\nsgAdBxE0vt+/o/IxTADppHdbTHOGfKqme9TV9IedRJwds7xAkn19iMr5tCU9\nWWrY4c5g1niTGjDdEv9/JrHK/3yVmIwWSKCNH+QwD/Rg1mjm5VMkD/BZW+t5\n5hNMo+2zAb3p7xLpXp1FD9EZYApFxEEHxQLA9zXbchB69Bt9K5e7raT4ZSUY\n7ZSnN06wXK+F6qql8TaOHk0IJSL5D2qWsC9/GfCZdf4dn0lAeT1kmxOLAtBS\nxaBkfANQ1KKOi78xz+JVScBH59HkGi4NuvnGwwH7iLt9TVQezuTlX8wgXMcS\nA4UY\r\n=MonV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEAJd8QhpXZszFNwPiB3p+XuTn1LUH/f8O6ZdrXhwuwwAiEA3x+42n5quYBPisNqfaAm3+vwNebXmqrE2hZmK/ypJBc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.1_1590078194759_0.4258317854821936"},"_hasShrinkwrap":false},"1.27.2-next-1590081909-aeaed87d.0":{"name":"@xdn/core","version":"1.27.2-next-1590081909-aeaed87d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.2-next-1590081909-aeaed87d.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-DmOU3z75tmHFGJ8e3O2LkuVaNMdkWNirQRZERH2qQ/SVgfn4dqbc+U+zX8NPuohhsqB7qQdxdRsdUmUlUE1pkg==","shasum":"091e33293f817ae19a0ee7227627832016c82374","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.2-next-1590081909-aeaed87d.0.tgz","fileCount":127,"unpackedSize":510575,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexrmtCRA9TVsSAnZWagAA6lQP/2LNTY+t8KyQfFFZy2YL\nshd6WRb4+Zren9+CvGHuOvnBDMX1TaNJExh4vTQLTYq5jRcUC2GUDmZolriP\nskTnwYP77fWRyCsmFkbO6qvw7uPOOeIfmvJudQOZahC/QtmnJFTY91fB2ZuQ\nJO2fFv9lx5nJnnCVNlXyirSNdTqQwegB9JtxEqFOKv/9Mewv0Puo2xlqGIBI\nDqJDdKO2zCXF7P+epPnhzIRSgNXcgon2BH34MkFSH71YYXe/siAVrfvAItwP\n34arQq6Kce3pKqQLM3dkfBZ0VxAM0yjbv2nNyCFdkCPfs1NNZK77Ql3w50JI\nkzELHtTWg9+hBh2mi4fvmCfxpbe4o23b2GAS01a4rAxCMXcwh99n12BvS97r\nZfpbx5Ijy98ZJjmMsUqtcw23KrkITL57X8s2Q5Pu6iA5YMJS/T5BnUwH7Oes\nW3Q75k2Oya7hYgXYLyUuUZtRNXGBfwIf1Fupo9kdafp3DjPSpENYYW6sNcvK\ncpn34zMsXLzUaOlS8KoMHLMlwjFy+7ZcR+PnQNuqBmHwV4JMe6MLLpFqrpv/\nnW+QQpmyTYNx99LmCl30LmDRHtuS4ndsOLLnP9X1AXZd8DtLP6NMYzQUEtYB\nZQjOvP6xzGzn/6IihPq5mxnH/rlhKJk6boFDoWoXpW3HNueBhMejFqaXYmU3\nkGLp\r\n=gZiL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFXOqxbl2Vl40/ibcs10YLEZ1XAoUvQdZ2gdegchV5DaAiEA0oq4gQQFmlHd2zZqx0WXcwcLP3wgsllxObkxQc9dO8Y="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.2-next-1590081909-aeaed87d.0_1590081964966_0.3509558965225896"},"_hasShrinkwrap":false},"1.27.3-next-1590082002-28f676a4.0":{"name":"@xdn/core","version":"1.27.3-next-1590082002-28f676a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.3-next-1590082002-28f676a4.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-QweOkYW5pmowrA7rZAkRbQDXRXg1jqGBDAadzYclaOLiy7O0Ct4LXjhxKTDlVhxGjYklPW+Zic5cnMvzNWC7AA==","shasum":"7e1cf6c5b5695b60274677b74108e41e8436ed4f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.3-next-1590082002-28f676a4.0.tgz","fileCount":127,"unpackedSize":510575,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexroHCRA9TVsSAnZWagAANA8P/3z0GKVHffecFYR6fSjN\nU+Skbp2UAdNIBPHv+rHWmEMcAH0Is5x/eh9wpJdekMKiUzG9yENejJVAuR3E\n0TcM36fASXU+Y5QGmeLYMshb0QD1x+fnVGrPAuQZaTnWZwjfhG8/ZkK7GEmw\nrH3k7PDOO/J/cBdq/vOd/apdSnZ8QoFRd6vaLeBka7/VpqL351e3E9k7Xf9q\nuv3rfMfR6jaKfGXU5jCkgOjWidQHXxFmb6s55tFU8qxYvCVJ5qrxUzlIITDR\n5OXojmgharUSUMgaqphTaGyIItEGJV7ExDvtolUUR9OTJGea26DRVJ4hnABH\nRq64ZbVgXE9Z4W002ix/oEB8Z9v+KWQFt33Hpvf63MSnq54s6DfKxq495KTt\nVJCEHQDjCBulTkHcrj5HDkdtx5++NhAMq++wGjhhj/MhKzsqWF6FSXVZ+ANh\nOGTazxDJD8fQnn+ySexvp8psaMOBp+7H/GlKQHU6BMQaxgQfdKI5bGrYaMvv\nOPWbhDh7VBRCujfhspBFhv4Q3QSyUfoQsegDn/rpEgAvHckMuTkRGlK/V+Pg\nlifuG6n9cG5YIwQZ/X32MfGzMjLj9So7gaQUaYBp6q2HkmiYe7/losS59UWD\nznlL57f5HQryOTbs/9do3c/4VNStHPpto1wLt44dpTCazEc3sxjp00+1bc+K\nKVC2\r\n=/Ycr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjxC1GYfrXYXk/1pDjpfSwhWdo0kA0gRsPWmelH29USQIgeXznIB9BVuPmGORTlK2WeGKJszFldD47mHpqjDO+umg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.3-next-1590082002-28f676a4.0_1590082055571_0.3827597022873839"},"_hasShrinkwrap":false},"1.27.2":{"name":"@xdn/core","version":"1.27.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-RDBqu50nmiomo5wT5LCDNtgxAZdJ8rITfRR+JIb3seBfUr69x/d5bJc5vEYc8B1FzOh7RJnHB+HQb3GJb1lJ2g==","shasum":"2555dc4a6955467e341228eaa87a720ea2cb88e4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.2.tgz","fileCount":127,"unpackedSize":510521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexroTCRA9TVsSAnZWagAA0QsP/jWi1Wg0ip7litGUEGTY\n1rSkSKa//lGSwisEHpPTHoA/lUwsft8CShmgy1mYnGaPlEl5K0KcFY9WsUtH\nvjoIUsgf/nEZ2BA9FYRzX9CTJBK1J9Hvz+yg8LGrgccJ+2TSrYwxFLO2Ficx\nEfhZ/ljXA5DbHk7QYc7FnldDzQ8Jy6VbN8xXmFE+2YtbOhTWU5NZvaB3EJ6n\n64uCFl4XL/R2MDsVIeH2W+q3/h4rZ/zxCeO161CvICAsjyl9tmmNlrgkrGp8\nNPY8GBC0saIpxIbU0mTeqAtdIMYtYdLk7RmGnnWXuYqj7H8UFDKHF+n9EKNB\nKzVICR+KVkDnN7GEbBfEHTIv4hCt3MJ5Mes/qlfho/zJYXzngcknVF6nSau+\nRlJgnN3brdoi7PN0bnPY71/VR+zcH0O8HGjVshn4wz9TUAo+cDbSZLNXz9KZ\nzjk2AfkewKqkUFqkTFMPjiqUowgjExNZ9DWIIG+yuxZGOwIHa6j4BUnGZ7mb\nnuVJrLcJg1dMEqBTEZs/O0eOoRhBajnxb/1Y+FfQhgamoVmEwwkUKaMAMYcp\n9QM2VqWy2/DJPMbxYxBTIo7SC+veW4rtwpBzu5L4S0VuQtuJAa8+zrtK/E1X\nOQSkFnNcn5vaCELvTvtcu49TtdTJ01FxGjTiAiaHb/cRDvWiL8JsewJxAa3K\nDTJv\r\n=orUg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMLrHwyNfZx3VzGVHmn144xjzTlEEImBD3Q+DgzPuxKgIgDvwhQGcEKOicjRwUBk6ByUiR13KtmFM3rV+jQqDU2TI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.2_1590082066816_0.45369730541598674"},"_hasShrinkwrap":false},"1.27.4-next-1590087390-1c468893.0":{"name":"@xdn/core","version":"1.27.4-next-1590087390-1c468893.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.4-next-1590087390-1c468893.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-D2PvncefCZJg0ctjEEPzGqJuQm4tnUZPigEVaKDmGtwwBHyWyTjgKyozj6/wGfbAa+G7qncY5rRPuXyf8RYldw==","shasum":"2c916f07b3854763fe3a52d5dad3b1ea9d173a3a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.4-next-1590087390-1c468893.0.tgz","fileCount":127,"unpackedSize":510761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexs8OCRA9TVsSAnZWagAA3+gP/jSqsro5AaG+MlSkZ/BZ\nUFGg8f+KSMFv6j90tLTi4JV6eH7lXuv/xGVEFkeI0UztXDzFqRObpv6zaBPC\nz4L2jgctwxwqoD5rxwCR9M8DsOnDXXp/LVYMaq39B7hK0FT/o2UKJpTdc++g\nB+rJ4TV2LsP26p4nO8g6Uvty8+mV4Z4XQdHf2AgpxWjuU/4eY46YvGWiEFqs\n4vjOYzIXroIkeaRYz0BJFvPcB7jv6Ac9jWQxYGh3E8g8f5kJHoYJLoNfGFsV\nh3HFdKrjcpBc+uyUXZQk0HZrPQBeasBYXbzxv871TRF4Vwiqo7rcioCAkka9\nswVN7TjN1FZQz+AbtXo35V/uWfttDyQdCtcP/zh17aTrJ4OC020V7ZjS5BeN\nKFi+T9mhbiA5EEgiV6MHhHweS8cD08vYcaYtyEpDAmbwt74/VyUabd5eEG5M\nmilWJMFlC778xL+dcvEPMjndAcJeBadGqMWeWikNoY6LIdzfcuLskAZtOXj2\nl9iBBQJf82+BToqlhQj0Uxh52CxcCT0ERFL8DHbDz/hLV8DoPzC9bGgOTrin\nIcNcHjIlDHKQeNVjgM8tQwHWliYFVp668GnhfIu+MMvOFDxa5KKGZ2gS+tKl\ntqKka7H2NRMpcl2vOL0BZnO/pNf0pHNVznUoOFftS9rNSURKBmFyPT2JaQuD\nuv8H\r\n=yZm1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBqAmAFOEk8xAGdhoubhg3Wq28YivEBh63XAd37KvokIAiEAnTK9DMxBVQ35GzCFwnZrQVwm4enk3G0GO/SXiA1rpZY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.4-next-1590087390-1c468893.0_1590087438419_0.8672327122912495"},"_hasShrinkwrap":false},"1.27.3":{"name":"@xdn/core","version":"1.27.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.3","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-1j9+FXSVD3cN6mmuQC53LSgagfPwnzV/gx4dnyTneY7MgBRSdownHV3bG24pT3HDbzOb5aLPJFAgcsh7ZIiPBQ==","shasum":"1977ca0627b9a055df82d0b1d3c888ec8481d4e1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.3.tgz","fileCount":127,"unpackedSize":510707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexs/rCRA9TVsSAnZWagAAZD8P/RcP2xKYplI9pvwc6QOe\n7h6r0BcR9ktLaxuhgDJaesXEGuCHSYKg58zO9Jd7yVv+/VTLtjlnWUlXuxWK\nmrjlfKJp2sY7Q2wPHNap90x2S7xlp30Y0WJxkos5ahqEhhXc/52A1Pq0U3t9\nVAXKhhmwtwvCGYJq9EPw39O60Q778FD+IsaadmPbJWCnS8dfk+rpIuJQYV3D\nHZWNdHLU7ZDPLYfijyCshnKsBDbsT/8cox1EVdqKCpZwI52+zkZAldSNrtlK\n8RcZ+TKOBPGtQnyzO3yHMgT4oypu6dMTB619XoHZj/0k1y01X9N8qKokwQyt\nDjDkfo2tsHaT8i2XvTasHb9I8n8qP8CU9PMfq10Lh0sddIa0l68Wuozb1UPj\nlXBXNMlL2onRekH/NzEbnLXKdN9ecQZwijMexmjst1ifEhmpqrkS6b4YuCqL\nOCyHgD4k1l3dxi7R32vdfDwCRIwC/lvE9oLAPP3sOKRBffCVDdOxCTR+ljvA\nw3qRFFsNEJIi482MJvpjclkxB4RPvGYLROi9zM9Rj0lGktfad/+YVyC+EI+L\n9djzI9UMOT5wxFzRMcZOFBGjAmIjAvRo9iGpob4ZU6TYtGcAqGNxtHMCFrwB\nRzpvlyt4ikhvYRak44tS+tehOf0FUmIuLVjm5czBEvtVq4qkuP6dvz6h97pO\nrRqu\r\n=+uFH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEBDnCabgM1o1anS9AVPgXoYnvTbphOFBxi7omFGE+9KAiBHGr7gVKmvRuRVi0e/VddzZk4KHzR7QL/CJ2hpQO0z8g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.3_1590087659027_0.016063387871237067"},"_hasShrinkwrap":false},"1.27.4":{"name":"@xdn/core","version":"1.27.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.4","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-eY8oBZtTY9kdUlj5nw7A8X5YUcXEPgcumKU18ucuQeom+5npkxJ62hdyMIbb+OG5fpvwtEhosv27ZRoVsdBNwg==","shasum":"f682cde9f90fd67f9f1d4f18be5f1f1866dfcde3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.4.tgz","fileCount":127,"unpackedSize":511556,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJex8YBCRA9TVsSAnZWagAACUsP/idJ/+kD9iTB9nr+vWI7\nfhHW3nKlthLVRp54+XKjuBCD0VcMjqgyvUr/gPtusEYzzQeuygp0o5Rdce4j\neGHLwirS6Xc3H5nn+q5RlXIGYaNcxheOFmJshg+EsyEHKk+zpdzhoVrhvZnM\n2vmZowRwFBMTl/3V+xbqDutalRXBq30LeGqsjBkTwYpjrgw4X7wOpI3RvkbB\n/C+RebgH8MDEG3b5TmHAjDPAoO8Rqj8DE/xSqmk4kBLuZ1GUzQny4i3Yz7Aj\nsThL3RB7mU4manLNx+F6kJvqlMynjHGYv4vrl7PkH7x7msmDoMVVmnPWMunz\niBmrQGqdvWhnstYfoyRtxwXiuVilR701jQ8dsdNIyz3Xy4bdwuIfP4rE7br7\nHKKKXcLOxoP4S3DeywFmrmKa4ApoQRQ8p6Z8cqUyEcQFmeGMiYzQuI+uDo5p\nybnuDsS0pzfFc7MEoJrrx9atL68lwmmaimES0cBKp7tkswVfjMY9xbsz7TCU\nYa0cPyyvSIXUaGuZ8sYhgb7bUWToqexGzkVcNgCPOrmjCPo/sbug5sjQY9y3\nNrgsmS4ieZznZH7mV31vwihyEnSEGAXsLrFwV4SoTbFmYDebV0ll8jAV+qPY\n1AWVg8e45lB9xCTdk2TDVmBe6YBLHg2UPjNEGayt/ToqTN91/lBtMZWFHAWi\nGwF6\r\n=qS5l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkgiRAB5MH6QR8hRQPffwpezEgsD/EvcSiQ9LZWSN5DAIgdw5kdD2A9Z6/pLIo5cuTMiT+nn1kqI0vtHzFNIW1Yvk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.4_1590150656737_0.6822730389199105"},"_hasShrinkwrap":false},"1.27.5-next-1590157290-6f474bee.0":{"name":"@xdn/core","version":"1.27.5-next-1590157290-6f474bee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.5-next-1590157290-6f474bee.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-unldLg9JkY07/Rd+P9+WuQThdZ7Ppb4piiznvuKePxdGmwnAeiQ5KVosZvHEJAKyIk1+Kh7w3D43U0e3L96OQw==","shasum":"c362332ae1b647407857e3a83409fbbf9b95e223","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.5-next-1590157290-6f474bee.0.tgz","fileCount":127,"unpackedSize":511718,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJex+AaCRA9TVsSAnZWagAAD1EP/2v5ttD066UOCW+DkqGt\nBBzSShOFWswvhFZqhatSPGHXvkvBWkU/sBTN1ZP8mD1Obm2AMnHxSlIIbQi9\nit5YMlJPiW1ts2blgsMDf0TIZDt0uDINFjIoefC0kGxePItsQqVJ/b8cEjy5\n6aS9XYKUutLwSt6DIIz9kW0ldjWN1fJZ2ngSkQ0Rh5gK+pJBS1flEuSTx0XZ\nYAMTFLp2Eg0FxF1VOvePLFDtz/9l2u6fn0T68VmuAOoJ3csda5UmySjDsNkz\n0J6/lht4wCmOmpMClq4+fNEmdJyL+/lojFWmNS+3j1E+hpcehI8UJKeJ7Wv5\nWsllyyC5OWutclWtNotTXHSJmPg7sgaMazQQgGcEel+VJzQho+BEJOORvfmZ\nq1uctPQxRn0lDlZr4cD5sJ6JziGb+ZxICBD5JVGqWqrGqT1GkTwEmVpn9o/P\n9UL9E9CQ941KUfSwSHyY6sYRR3wivk2zgE1078ePblQpMoh7biTlGm3kkmkL\nBhS5cMHpgKn8G48KvZLyOHjJhdUpsAsVo+sJNtob+tGgHyLnoUqKPj32HuNr\nDdvBypPFyGoTaPH3nPoVq9vtr/E3GCBbYEsltrSNhOw3FOp7V5257Y5LGfFB\nzj+DpHXum0eoPssv+XWfYKzdCU5pVjpZzUsOnThUIfdMQP2RtKJ0aszWKfyn\n2eXe\r\n=g6ix\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCePeOY7ZzShVHznpsvMYjoI1KNLI1XpQkj0D4uQ80bmAIhAO3NlmJjhLpozEOcjIdjOy+NZ5gaqsJjUPxFBB8Pm208"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.5-next-1590157290-6f474bee.0_1590157338368_0.5907336086779795"},"_hasShrinkwrap":false},"1.27.5-next-1590160837-01d1da34.0":{"name":"@xdn/core","version":"1.27.5-next-1590160837-01d1da34.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.5-next-1590160837-01d1da34.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+lt9mu3AINbafudEPr3l4YqfUzmQyIsJKbsJWPRwdWg0UaywdEoCtttgjKv81ZTyduH4W+YkseCaPlJ+Q8cyVw==","shasum":"16331684540bfb6fbea9a0ac6a6a7f070eca0ea1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.5-next-1590160837-01d1da34.0.tgz","fileCount":127,"unpackedSize":511718,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJex+38CRA9TVsSAnZWagAAGoIP/Aviv+44ZYt7ynG6LZTg\ndzsD6C/Bd9/M8s0RHya47TpRE81Sv2sEw8Vjp1MIZxqvp0IQsrXWXYZsAaOo\nLSzoNiKDbjdMBevd/J5l3sbv/Egsz+MJcKY+OiUhdxaNUV9vLQqiHFPYKZSy\nhgEmkD2Bp/M+IDvN6MFwiif6BljkZJh0NL9c3fUyDEEUPHp5ihl9KlJ/5kSf\nynKwFUDnt5iU8wVwxmfwnvO5h4KU+tEM+9NuLwjg2v1VaBmzYCwxXJhVymz4\n0l5e3wlFa4jPAEBlLBmHXclbIONPIOIi3xgCAkPJeKyMDX2yAJUjB+/Ln5x/\nLV1WuiPo9bnIo9XZgMmCnuggG2xxjFbWINGfO3QYaC57ykLjZcM/rk9G+kHr\nI8s2fV7E97g9mSbXirbQr7v4jFGJjIReOF9CGw00P7Fn64DEtBs0JdMZoeUX\na/XZj3SXN5VtPOjXjUnCjUOQW1JOKP19F2ntwcA7EA9KqxaazrWfMC6rAXOw\nbq7ZjkidXSmOPSiPp7Wq+LNiA2U4e9Dno1p3PSYX4xDylZkTfS4me46Zo+Gg\neIyqVwRE73/2ES3nzEKoxbh4GmL8mKheVRCVeftz+nZ49tZjgb/iqnlj2ykN\neGqRNbB+eUO/OJsG+lQdA5GAYSWKnb0w6PTxsOXbcxp6Iy++kIJ6h2bYuMvV\nU/FZ\r\n=BJ7M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICtefCCDj79jAN9gRlBZZtY4XgurYMJwMM8909FEoR1QAiAnT5ZuCB0VOobCDajBz+kX6msPkaX8r1+GfDWL4PpH3w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.5-next-1590160837-01d1da34.0_1590160891356_0.7212650640553819"},"_hasShrinkwrap":false},"1.27.6-next-1590161219-ff3615f3.0":{"name":"@xdn/core","version":"1.27.6-next-1590161219-ff3615f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.6-next-1590161219-ff3615f3.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-vqIEHoUWfsPXSOJNVwHkQ11fSzH8gaR6FIPB4SqivGPIX3COyp0cU3flkQh5r3gDRvUSmpTl8hOrsPCWy0mDFw==","shasum":"18c97d2ef53796548271e31cc3036baa28218de0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.6-next-1590161219-ff3615f3.0.tgz","fileCount":127,"unpackedSize":511718,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJex+96CRA9TVsSAnZWagAAmu0P+wZzbE6q+mDHfwqdNbql\npXEY0pW0ibi5EgDVy3CxQKjtoFpgY46IyYfS5dmXyT6ASxFI8eocdh3XKXUh\nBGpUP62BBVjZZP0UyE8m/KKPq0osRjNbY4ZbECtqq4lQsGjyCzx+Np2KgqTe\nZU/rjExtJxPEFjztfHyFi0ZcI/yeAlo6vCsTrYuIwqFJuE18FJxgNSCiVL37\nY+1INjuWqmtM92kjJOybjNJRqJ8SHdDBQgL6t6gKVzsXsygD65QHm+vnGJhT\nqyHkgr2/LsIfq8jrycvSG70JwWMzuyiF4oSCUf41v17a7oCMCj+qQH3d43rI\nkz2e7YaolsOEwJGITRK7BnbloApl8Kw868ny5mg/u5196mSAcJIvaiPIOwtw\nk7Dt0bY3+xsJfpXuyx3BftVoJOOd62eWeHtJeJCzAKrCg5dRkVe8n0fUu0KH\niZ3YYicEkYKHvEDQP2aFsFFWEwgo970h2S/4qCdEpmrDuuEJ3orJpo4pRSBR\nK8oGDZaZGZhON1ZxPXo022jXUjcTL1nDHkTa8jm7TD6UCyFxZUZKwHS7DnKq\nW+jg+5De5NBWq5f2bQ3NJoxzj8qtsayAQgQmjI5IveFSi7pazirAeApQLvgT\nLpAc9dpjKW5sJXerEM+pHjB3WU1GjqZIelLnvFXqs8fMMZ8bcy0QsYLmTzdB\ntmp7\r\n=+ARl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF9y7kFXu9nQfcrp1kUkCBLuy34Ep6h6xxvyxGQrx7NNAiEA8Uzg22bvA72QZiO2iUJBDsskc6YXUsVmjrkMmCGmhLQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.6-next-1590161219-ff3615f3.0_1590161273929_0.6619404571552354"},"_hasShrinkwrap":false},"1.27.5":{"name":"@xdn/core","version":"1.27.5","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.5","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-aHApEvBU+pP08nPnYlSs6/bIvzn96clXT0+hBIpGMICVbaFbc0DB4f038j6Kpruh0jYZaOBVPZ9GGKB1C3msew==","shasum":"42eb7c4e77bbdcb1e0a2d231db2988c607521d70","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.5.tgz","fileCount":127,"unpackedSize":511664,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJex+/CCRA9TVsSAnZWagAAHvwP/3m11Wu1y57xaDmDCajK\n3QCQQ+Q+igqZ0L7ZVtzhgiiFKWj/URC1RJq8TdgEqs85ZGxQFYJWNyV66sQB\n/OYDq8OxAHQFb91aT7nGhYiXCbqiI1xVxXmS/FwwD6C5QACyXlNfw+bEIZVE\nPTUFBzJoDrEn4EtkaWAXSyLyvcF1gbn7AGoFUC7QRj2NoRZb+HIWEjPdtbk8\njpBnUmo+m/KDk2RCL3Rd3dJyhATWlhrYofx+bgRkKMRY71FQizC9CsbXv2QS\no7Au+hNsMuBDaRjfOlPiZyH16I88YBECfx0SZvDVaM/MGX0karPoYQwTBgDz\nynq4SQn7lu9XoLR5VEdHQu1jPaIKeTzOJGvhVDELbB+Yv8PeGZy1waV+L7Vl\n419Pardc1HlFTHLBHf12NRQuIcOcEktJH1gEbwUBkdEGqfBWo9vv9xKYSaWS\nVKCXPfI1P6q2UFeHrBUiEVUvSPDIsN4aXtQMJ7T0kAHsyEbj1cxBYnMmUsvR\nByU1k50LAAYc+ye0vJjZ2kY2kMH3oWDx4FXU8aHkgAB9/j+3TEqBvHtZy47/\nQ+WlOae5czg5+qYjgxKhJTecnJGLpeJ7v6wljaCxqUR7s55JFkA8PWB9O+o0\nRDWJE8PbjOr1cKHtwHbrmI7VLWop/pS4KQXUIRyD7WoDDJ2sNjBTTcje/pum\n668R\r\n=7UKf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA4T/JGrfHdjd9SottXwPItYUd9oIHoFpD0+6XiAk3FVAiAA6BCSTI0Cdkrgkt2GdB6RVQBn2og93aljgp9PxjI2cg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.5_1590161346379_0.26190978200223003"},"_hasShrinkwrap":false},"1.27.6-next-1590415848-8205dcaf.0":{"name":"@xdn/core","version":"1.27.6-next-1590415848-8205dcaf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.6-next-1590415848-8205dcaf.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-jQJauR5EinvtB4x8V2cP4sc1hiDoh0Nbmq6OG3XNWyjuEqZBRNOdshePFM+abjfzQL7xXzFk6hu2k5zUwOkLSQ==","shasum":"546588e6cad0d678e6cee2285d4ee92cb21daa90","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.6-next-1590415848-8205dcaf.0.tgz","fileCount":127,"unpackedSize":512024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJey9IdCRA9TVsSAnZWagAAGYYP/RfgwkFJQsyg9cwYGSw/\ndrUCZ5RLRGKUbYFlzNd4Pz2u3gl+IxLgY5RfW6/pJ3Xjg3ZeHk/FBEwuovVH\n5D5laebx7S65OM6pOeYJhnfm/LKQ/+Rj/uJ+LQ36nmksMJHhpApl73osBFjV\nBRCQ8tcVrsdx10YWvsBU/eJt1MjyrecXYm40H4mJ21NVzQW5//fcUe9oaSIx\neV64ZPEZpZU2F+2lwAWLct09Yn2IatAlRK7P2pXSwnLVQIyvCWO5QMhYZoVA\nkxBF7Cd+nN7o8txYRjT6edtxsjZLog4QBkpZnKp6QsgwbIeGdBnMo09ZJZ4D\nPlmp43/jfcEhd9qTuk3noypNhD2v4t7xPnhS2G1DQLWl8YV6rqKRWIKr8wsF\nPPO3rKof+LEpUzeVBIqICuifUo+iBsnCW6Np0BxHCc4Q0zf9RlycL8kz9kV7\notFgrsBVzPQ0C55ialTiti0PH5wkPDTKoX7/zoquR7W9QkTwfsudgHZpTho3\nHXsnL7RSRDRyZo8eqqNl7E19pSWi12EUcrtha/ZUTdB9i4mHfFkpTisRZ+lz\nMTgZ3f2v6rYVAiNYtoQ2t693AhGGxYD0SlKp7V51bN0Bd7olR56N0kF/cU+K\n2b+H6J+iF2TO8xYDGJfnfcF+jT1X2sbU/ThCcMW8t7sWYEuncWLJvi4S6GNi\n3LaG\r\n=Um/g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAfLIccF8Tckm2Mdvlo69d2d6UuPabwp+ehdqCUHl12wIhAKm5NmX5K/OnnGmUrpd5xYwrvExvcr2WgCbr+XouOP1F"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.6-next-1590415848-8205dcaf.0_1590415901331_0.17080198131724278"},"_hasShrinkwrap":false},"1.27.6-next-1590428158-f3675a8b.0":{"name":"@xdn/core","version":"1.27.6-next-1590428158-f3675a8b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.6-next-1590428158-f3675a8b.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-SgrvGLs+I8iIkCJATfzQAhsaduDhcviQZBZG1Q5jHxevO59ZRlgtX2dNjJVagyzB2qx/PcN/v4iPBErrX5UcaA==","shasum":"a773f35d8064c55bf68beb2ee03747c425193256","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.6-next-1590428158-f3675a8b.0.tgz","fileCount":127,"unpackedSize":511727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezAIxCRA9TVsSAnZWagAA0SgP/1L8Yp2jQ1IXUba6x4Xe\n3oe866l8GS2Lg1MCM9YQSPyfjmBbbc7cHthQyz8ibNnAHhXj6FBuTU0vcyzk\njZDVtMl36XnIOiAYVQoHESHwmMrMmpcDDWPvFpLl2SB6FYQ7tvP6gVvX02rM\nrfDnN2nK2SFb5xFWMNK3iTHTv2qgzWFq2/cfCYh6mE2cA4Tc59byI51uBxfA\nh0sW5uBWHphOnAID0J2zzHIwfu8bqjJiEusa2mpROcR/PX0Y+uJGARBBhrp4\nTXs1hifz44dqCEzEp607ioNsdXBZbaxKNq7ycwbKEv9W0lw8gmbAPUr++v6W\n7XHiPhtyHnRHkL0fesnvEZrFTH1jcObvdvTeOmfqMeKoLifWfP1AH3kZTpgk\nzUxrjDkC8fl5ncztVgFbOaX9cMR9EHtPqNPPPW6hlvlfHRITs1lAI1QwjJwf\nU7bmPaFnrjipEskIXMwKTviey4xkTDg7oDA698CK/OglkCLwycAKDXrx5Pwi\nioBcSXntlsue/1c/Q02Ip5QdbMhPQKLGF34pjucTmLGO9Y5Ggu0FSqRORtg5\nH6y7XzO7xL8VnXRRBZOKxBqF1dqv5b6aAxorW9CrIUaE3GAz70WDLtJojJ5S\nC4JxivuZUO4/Ddcs+vEzWZ2n69Ox3HKeeafYGUCIla2Vt+VwyzCc5pj1BGsE\nTU5w\r\n=m2Wa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHaAfN7QKvbbhZspy/Mwex+QxfJr8+K7Cit2rg6JZkywIhAKDQjnftpPBMU1tr/zLfrY/yX9d8Gv92oHMe8oDu3O/V"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.6-next-1590428158-f3675a8b.0_1590428209334_0.09159809036991029"},"_hasShrinkwrap":false},"1.27.6-next-1590437485-46f258a0.0":{"name":"@xdn/core","version":"1.27.6-next-1590437485-46f258a0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.6-next-1590437485-46f258a0.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-QuTKMnR0eWRDnVZmugfHhRL62EW2OA8Mwprx85rpupHluk26sWnmaqZg1hh14iAIRgrxyx3BVW0MgT0jiUgGgg==","shasum":"36a5a3dcff08985414346eca4d93f8e3f2fafb2b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.6-next-1590437485-46f258a0.0.tgz","fileCount":127,"unpackedSize":511727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezCajCRA9TVsSAnZWagAAFroP/3NW0/zXC0icXwlWWEaT\ndD2lCBQSVXh3if4d0Y1J2Tg13fsaYzycpLBLr3Lyve+sox3qFihUAICIIVbr\n3Ldg6Npoh1iwUFMzrxotMgSdsPGHXvA7f9lLV3QUobsOp09oEwK2iSSDUD0f\niRH+PbNt4BdlStmGlqFqWsn6lAq1h8Z71DVFnVeFQJ80BWyg9hhFsFatmGeD\n4TWQe5wWTtu3HzHchXNekHZpAaSFQ/qht1lvicKyyTFFDX/GFVHCd/wUiMqj\n0wGaThOu6WHerN8Zd65bHJvwHcwoyOg4pHXLQYQMZEttPJL8Xq/3JQGhTq9e\nylRNcLP5V8KVkwB4O5iqp2BEvjFg7RNDKK5qMhzXmUK+4Ib/1zfyJLO8Lbk9\ny9Abk6YM7gnfy2ZTJoo1mV+ehTg71zIj1nZwd1ebS9DC/BxCOy+W+48Cre9Q\nt8jvSvsPt41J6nApkZ0eLs22AHd2lOW6f4KYP55Lxsq8pT5w1vVyIz3WSYLI\n1N7LdwcKntHK8uy7xwOWpsxyWgmgsnFonU9NSwNa3ksgY7v9JMcuKOChQeyu\n4yigxTbLsIGHcdAY4OY8p8DPSYl7DIA2ALu6N/0msZa2jAdMXI8eJsdcP/nZ\n1QE2YPjZCnN2DBdYWBZddBeOuDBIMZd3x7VJnjLzXfetTfURADuM08qkEWKx\nvGFp\r\n=4/Uh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC9ULtv0leAiYmT05JY9dhh0EkOU/IvRKhU88g7+GMtwAiEApYTUzUTiaFyhMbDzFLN1WSxGyrmRyKKlv9CLRrVohkw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.6-next-1590437485-46f258a0.0_1590437539323_0.8172819800409026"},"_hasShrinkwrap":false},"1.27.6-next-1590441025-3e80e0f3.0":{"name":"@xdn/core","version":"1.27.6-next-1590441025-3e80e0f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.6-next-1590441025-3e80e0f3.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-zm6Gpon4NBsaP9ei3RjzJCfv2R4LuKN4djh6DZtFVng3P82UH7w9Q3hbQtivDp927Y/VMcNB9IszmImLiSKgAw==","shasum":"d37c99c1089036b18ea44bac73a3c44b5f679a1e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.6-next-1590441025-3e80e0f3.0.tgz","fileCount":127,"unpackedSize":511727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezDR0CRA9TVsSAnZWagAA1sgP/0wMTZSsqoZxsg938wHd\nkTlUOoyz1NVSO4JLSUarRlI8q/eXkC7DF9IYZQgTRIp4E6fw2zBCAL39/iu/\ntvazXIOCYoP+UHvCPNeyqIqn7xsEi785Q06zYTGfWa9t3vptNLcjwSoKDioj\neCNB0AqO3cJwEyGfhnTt7Jpp//rVsLuZ8qrPwo+X93XJzJHaKuhflvkufZRt\nNNzTjBf0LljGpcfjDdMTDcEFKNNbUAZMsQOTzPRLcdXZr5babuRXgB3JfkXP\nEXT60q34pi5G7CSpJ6i30n4PJrYgAqSbXo0iXmUIsUjORE1Kc8kK3hHzxAyd\n3cHJKLutPzOho6IIXjSpfhXrBXGms/HMEhzHaHUEOt7bRpporEfoHCPKrsO8\nSxQe268Dm0pdunnl47e3N/0qmSGImorvm0Wk78rswstlsRInih61ZazQQCEN\nPPSQt/vq73B318HWBRBtr80+BnkVIqsmY2s+zbUOAazO4eF2P4R91ItYlTcX\n1ahx1ksak6StkT3fbDPL1+U1olOLlxef+navl12VRcDNDSVoZ6ylLB1daFBC\ncjPwVYDolvC+lxmBFeE3hyGmI6xsh/cvI5YEBzt+Ov67HRcp7kGqGpvo/yys\nRAIuYc86+DSSN0kKuwd0NNClSlNcNO49GP22/P7fyKYAM7rPvsjXBaCDgD3b\nr769\r\n=jk9o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICoGzoXeIN4Ik9sWtKQl0CdwwRSIIinhqgUFE3UKkIqUAiBOPkpWkuMToMaszZRC35jbPvictCW3/TKbWL7DDWtUBw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.6-next-1590441025-3e80e0f3.0_1590441076355_0.61389803208258"},"_hasShrinkwrap":false},"1.27.6-next-1590441134-b822c2d3.0":{"name":"@xdn/core","version":"1.27.6-next-1590441134-b822c2d3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.6-next-1590441134-b822c2d3.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-niDqxL9UI4TGB6bmIat8HTRr1gZE0h3tiS/PxDTbNEax0vf491IyXBBgNTYOdzE/9Oc3qb/hiTfwsdPSZZ57ow==","shasum":"9445926bdc8d3b70643147b49796ae38aa8bc166","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.6-next-1590441134-b822c2d3.0.tgz","fileCount":127,"unpackedSize":511727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezDTiCRA9TVsSAnZWagAAQ7kP/j7MhJUTqUbmajpNa+3s\nKn6uLBPK5HgUJ4lMRwYs6c3Zw+jn8jC8WtWZ8WR+/3fJUPg6Uyypzup6nHvv\n+CB2OXQ+MW6GMwmVSA4HU9afDYxrFfaAvVZqFZyVJcn08O0QohkWKZABx7yW\nOkCl8QrXvQqArBpf2OAwIhFVZ3xVLuGlpgfm91ynkS/uqGllGnYiftI9g7xK\nFpiNwU42Lr7PEig+PFo+etZ5hQ/52rshvBxi0/0s4mXiXQa3rTVprDqyJOuX\ndKnPwJWj8J+1ZqVkTQ5vR/rFh0JH1UkEc6bkPmv4tV6/18Dfz6fy1gdUMHe9\nMwPKkTQ+MszC4a/O1poDDnbxDye+wcyCXx6l1WcrtuO86O7//t6iTEROH6UI\notb8mJZz78KMyB3vtjRvA7yzfTpKugof9hZWOnGbz53MJ2PHM+gS/OpmFkCd\npPC2U27PGTtqvjhVdDiWJB+MYwZ14uN2O9GEdACP/Rcj91TYYCR1wgjOkaey\nSMgTagS+V61Be/7q9HgzxpYn9tWvBYd7HTLNcABujkINttnEjZ0WPxSCby4n\np3l5vI4Q+MKmUpHiVwbzM/eCGzlmSrt0rBy5YScTn5w/JUXS8fzr2ZRs4DJ4\nwFAU1jLWd+YWTHmr1XM6cTWvK34uePHbY8bOf66+mbLoCrVvc3dgeDDb4aVI\nnioT\r\n=R3UG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpAwiaLHGBdjdglLQdLM+JeTtB+X17sVeMHz+ndKjFLQIhAP8uUtoS59RV36+SZ8JtcwldP6Xi6IEUqmoVP4QZnbAQ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.6-next-1590441134-b822c2d3.0_1590441185510_0.9769850255926302"},"_hasShrinkwrap":false},"1.28.0-next-1590448226-1ae089b3.0":{"name":"@xdn/core","version":"1.28.0-next-1590448226-1ae089b3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.0-next-1590448226-1ae089b3.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-zxyBa9yqy/zv+jDtd7d5EicVHSBVjgSI9FZIDaL3bYtjz3EF67qi7ut5FwnJ4aCZrHEPZHbXLDwE/MxgV40LKA==","shasum":"03280c6bded0f45115e62927ef44c6b4c4171984","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.0-next-1590448226-1ae089b3.0.tgz","fileCount":127,"unpackedSize":511727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezFCOCRA9TVsSAnZWagAAjasQAJHsH8hK4M/f/Ijvz3n/\nuwJXZ9Y1NC2KebFy+Kzv31e/pgCbezLF4g6e3vbHYnsRdtc8LsZFxrCf4b2q\nZhqjl4SI1IdK2/Meq5QwNEvXYp45/8L96Dq3MAZoBcCnJCs1M4062QTroOgB\ngcKkDyVdJvaboqMqFJ707eOwXOtFRAiOycHKRMZX8oRGo/TxKSeoZLkopA+r\nRoCdWde+CvEPdIcVbmaFbXrIUIaiifjkXAK2eOlZd1xSGOvnN+llhAlcNu8g\nFqRHR+9DS7ZpK0XbLrx6+fHKVuSyOQcxE+mYXIIqI57lqesOaiTBoKOQmmjF\nou2IC96Rv5jjLxH63Bf4QyPg0T/8Fy1gIRddouXdOqkjEmzLTkHyaj4p8gWa\n7XYFyL9gynvrobZx38076vurOzJ54JmPit5BNOrE4onFzOzs+0FaBiXKUwQC\nbY9yCV2JHJGR5eYM4hoVL9HajUEt3KCB6BQ4xPQhaxQnsaql9mzf9DDeBksp\n0l0pmw+kEy0wzBRjgL2DPuCmFL/VE9muNQpZ2RP09ZjNzoOFuYXfpe3sj25u\nO9q+63BZqPGjG6gch2u1o8Iv0qh+6wjhkt9KT5w4UDZN0s7HLGCzxjvD+sRq\nhKsWAdirKPsNaLVN+/TclyUvl15/ySzIFKJWorq8nDk2hS4Trc1Z21+frO1I\nSr0B\r\n=tmH0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXdpFUveQjXJA4YP3B7T4pyJQ/tt2J7VMZZ0YCDz/4gwIhAMIRVXfpIbGqgCGnoPmNaeR6MPHC4Q9F3BvSXlFay6kh"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.0-next-1590448226-1ae089b3.0_1590448269620_0.9060790162998271"},"_hasShrinkwrap":false},"1.28.0-next-1590449006-2b6f9305.0":{"name":"@xdn/core","version":"1.28.0-next-1590449006-2b6f9305.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.0-next-1590449006-2b6f9305.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ggl6dAoI55Gk23ueFFSuOV0YRdAtVic1OKuT2FJChpRY0nOQ5ZGg/WzIy6bqMmYttycFlUp1ou+YzjkkSHAVng==","shasum":"024814c6368cfb9f7bedc77b9090c8bacb65f014","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.0-next-1590449006-2b6f9305.0.tgz","fileCount":127,"unpackedSize":511727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezFOcCRA9TVsSAnZWagAAc6gQAIW2r6v0RQhvp8km0vaX\n/ssmxEPa8LLzoqDVqX6Ec2qVaN6z/qc47qr4U8V41Wm6J+sEC9NqzwNISpp4\nSnECDei9UduVDpQ+lCKYHS2Ca3frbYdRpqke64Tw6siQpZXhAj08GKnNGCn/\n1OopMubKspQcMwtxtLClOnseSuH/G/1VRsWnxt3ZD3c86WY8c0RZOKUanVAl\npYC8KseLMDIL5rlkpMO2olK/jJqBxOhE885yQqVgcz9Y4BCGFVi2kyHw9iB2\nJNHTIilvHl9NjnewCfTHMcsk/3DbnDBDtPgcWBmZfTkLoYwc3jMxuqtt2MGp\nE0N6F8gJXuXJQyxQ103ixbE4RQU67twDXFBVvvIQmDCwqCKjoS0v0U6dFsNX\nErYjQQNqzq/Lj1++as0ch1vwNeH2/B0uIc0NEK7MSNVNddE0H4l3CiRPGltY\noOfECXrINbXkkOOS5WdNzWnXb57sVu0v2pO9knfr4tG2RoUxVo9pydyBQt32\numHK9EWEugjZYFetwRflX35h3YaPg8WHu9cW7kHWEqUwm52/SDiRfImmKB6V\ndqp1pbfHY865e+4GDX600FLF2v6etqUghuAGK24C8H9ByikLG4HK+kdKjCG7\nobDCNJRS5fhop/mJMvVxugwnsSDxXueTT0vTq5gG5RN4Bo45xQI5eR5w8Q+m\nTM6/\r\n=cDdC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDBBpPVobkDZvqbYRIIy7qW4RuX8NAqQh0NhjFO9OHWxAiEAxe6EgUAA+MulICHsQvOFFrfLNJXaT5VAhpma7lf50p0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.0-next-1590449006-2b6f9305.0_1590449052202_0.41726876701184823"},"_hasShrinkwrap":false},"1.28.0-next-1590449071-86e37db1.0":{"name":"@xdn/core","version":"1.28.0-next-1590449071-86e37db1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.0-next-1590449071-86e37db1.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tEPubA/7HErXzqnZPk4/xFI8q5UkpLd0YXCxywpo/mac6q/QMzjTwoAjwMkX3sMjbiSrVhblu/XKVyc+esKvYQ==","shasum":"0436eb16f8aa82d3c9eebf60b64b7eae1fdf283f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.0-next-1590449071-86e37db1.0.tgz","fileCount":127,"unpackedSize":511727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezFPcCRA9TVsSAnZWagAABv8P/2fLk997+yB2HdCwx7iG\noUeAZyMS0ne51/rS0oda6FW40L6tSqo0uzbB2RHW/fyoLWM8ZPmRLNMMRiV/\n7MmD9E9zJaFVe+Ds0FeR5LmCRev5pLyyN+3LSx9CswhlD8k7QqJXQUG+THo5\neYsOyKigomNJCPhtdSL299TTxWeF07NuhqtoXMiSP3w3wD9soWIy+di0UQPR\nCna3gc+O4nNFXWgDIT4gMfLHtTiJpXhbuIBk9xeaYqBTf6OmgeLrvBJoiPxF\n56luOU/hcU1vQb+WYSSv9Rrq1xN/55iyNe1bvS4p2SduM2Di2bC/+tlNORaC\n8aggd+aBuEGpupKVn8IxHyDbb+gKclPkcOW874RmdjKkauIQ8tt9IKvhb79P\nAoIP2Rw9RHOEHb7nWOupx5nVXJOQFNV1M6b0c+fISQD1th2rSNi6XqQ+xHGq\nccmGU17tXurCTmRPdsPhvFB2XpGdnZwcTLtQshYsK0iOxuLGs4vLg4u7T1Re\n0iz44f8PqgkHrlOCN6nmUW2BUYp5/DZ5h25tJuB+a6h6MAuxu3M4ZhiIWEem\naghnfr9ciBQvZ/zISRKExz7qPKxLX5mI7n1li7LmH33NBCsGU/Bw1CXh+VQL\nXOjBQnNa7xtvNTuQN0yTQKOhje8sfYrQhFUlIPbY6chpnHmfprBsTLohDzfP\nSetl\r\n=FO8o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYRgeMb7Ln+GWPaJH7AM/BOmyxTC5Em+1OfWzmRoTZVQIhAPigpbMdLul3rjy1mUxq7X1FEBJuGgVQp7StsXWNyUXF"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.0-next-1590449071-86e37db1.0_1590449116366_0.3566625254424869"},"_hasShrinkwrap":false},"1.28.0-next-1590449481-04cf5664.0":{"name":"@xdn/core","version":"1.28.0-next-1590449481-04cf5664.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.0-next-1590449481-04cf5664.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-K1zhVEk7Uv3XIQGxdKwEIg2oZtm3LtIZkk4wjY44AauRhS00r56A86RXfjdSQHGWA7y6cGJPKNl9DlsAEDDSUg==","shasum":"014111dde78998151590e7f17eaee4557172a9e6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.0-next-1590449481-04cf5664.0.tgz","fileCount":127,"unpackedSize":511727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezFV7CRA9TVsSAnZWagAAcXMP/1ysJAnTQhXfnAPpEpV1\n93wKYBh8ovGL8nwd2/LNT8GOyIO1aolB+N0WSqQQNfhyy+ZfJ/KigMvXMNHE\nbX90O60IyguJah4cgOdrY1/YE2iXEsSZqM1FwVqRm6qDLxcnIdhg7iBD24Q9\nmsT6VtxwFPQaQEKQR2o+ysCOkZSrSX1vgBqJxdpCT3Zlish0l7SsZJmbKcEd\nA8a+JUGBqhf8aAUSReYFZPugFFR3ML4rcKOS6tOzti2FsRvpMlxpjEmNyqDv\nDQLIUs/Exp7iXkJIs8TWYVurICl2JEZzghNTRHheyRMMWOuOzlItg2cpIbhC\n99hkej4ZaT8cNP8e+p7Jea+zlDjTJujdabD2QGnwypiyei6KyQb7lZvqK4Cy\nZdEp5kCq9dUyWPJdbz2slzXszSBz+ZzKxF+dK3zaSGK521M6MOqgoCo0u+FX\njdFZz5Sok7hX5MjUD95ixbNPh6bkMxHj/6R8ukpcoWkPy7yKWAueiotRifu0\n2fF6iOU5ZbwghZ7/pLGzT2toozxj6U03SmvwyOUT4fa012Cdh9n+NCjissFF\nknYpP61oGA9synkZH9VSpHSIRWt0b5E56v7c5/Jpow9Hepz4EQilxFkaAy/3\nhhZdrXLVFUcCQqGvEaXnl+VHe2NiPHVkIxM08jhgw4caOFQYA3wqdD/WPSHi\npXEN\r\n=fvq0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDgLPj+37Mikv/H953OzdVhYLURahelZqz+oh6isuB0QIhAKh8UsmdKrGU3vrs2EW+ZiVa4YsIRhkEKDz6Z75N0CLD"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.0-next-1590449481-04cf5664.0_1590449530951_0.8300992472642033"},"_hasShrinkwrap":false},"1.28.0-next-1590449949-895e7338.0":{"name":"@xdn/core","version":"1.28.0-next-1590449949-895e7338.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.0-next-1590449949-895e7338.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-0RjqMpE2X3fnSYY4GzKm9BZZFhj9fSUxhBPx9nr1Rm2RJjgRZ3A9Exi/kc9uu3lf5sUFmRvMrgKQXdoSxJYBLg==","shasum":"6a3412294a43856511fab55a6fb2b55d821c2d51","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.0-next-1590449949-895e7338.0.tgz","fileCount":127,"unpackedSize":511727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezFdPCRA9TVsSAnZWagAAeM8P/2fC/lvCYMQBoFBT6XQF\ngcLqyQOZAdrQql0qBpwExuzymeL1NZy3+j5C97SpjPKjkPnACNVQSeuVYofl\nH5rifxvCPn16siuNakvM0e2hejEZcaBvxUGClH0C1xVwcd1+4OMdn2bIgW/P\nPYMz66qznkDe9Ou5Ati5GkZKR9yks0LNKl6YAw9ak7vXSmB3hAFz1Z1cVWcS\nrsVIMIU8SOdCkfbsujFvcHK1gSsXFc0Q90I84kbSj8ANQ6f9ZlhBDHkJ5u1N\nIfizaRKGPYgmjZwm/H04VeTPmzHCmq0T7rYX77a3ybgTQN2xISGsTT+TG6p1\nBTQT4wRPKkarL4HcLF8bIASA6G+lyBiWzkr/afzFQjh8gE8LBIjjh/VJayCR\neGcA6lhFiq912ekE9Ztz27GmSJexrOY7k3hs7pW+0HN0wuCxiDM32XJO886G\nrzT3PZIQhs/zbJYS1aA/p29fIHFro+f5M5GEBtYYNrCuk8Ta29N7XZodQZTO\nb6MbHJEcPn30u27A0awT/z0o60mdxOm1HN3u1VQuVdWPVPS+3F7mwdqp2/O7\nuKw0Ph990npi1zHLu+/VG5KYP1UjAtcUgch321fiEC/kJkIT7PFBFEIzUWne\nKfuM4m9Ff1neKrYHVDqyQGgXrwJr6fTitrr0DEqXSRo63SEB0ibxA2AibofV\n+syv\r\n=hAYH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCF9DbTXyLC87C7TNZt5vvoMEfBNQJGH9oCeKs2kyYy9AIgJXgbvQKRiPmnIKX4o4l0NXq4UxEzPG7gI3Siy2q1Ta0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.0-next-1590449949-895e7338.0_1590449998508_0.47084757681465605"},"_hasShrinkwrap":false},"1.28.0-next-1590450972-a672aa2f.0":{"name":"@xdn/core","version":"1.28.0-next-1590450972-a672aa2f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.0-next-1590450972-a672aa2f.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-HCBCqAqFCWofCcUtIkFWKanDamLzrAPa4kiZNvegBCnhK+VvIm4SfgC8hRsTQpzt4RF/uuOU75wwYIljcNkloQ==","shasum":"bc4ff11424edce7b93a9c81e74b552e246064360","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.0-next-1590450972-a672aa2f.0.tgz","fileCount":127,"unpackedSize":511727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezFtLCRA9TVsSAnZWagAAoagP/2PVO0j1jbFHZD6CW0t5\noBkCtyIgn9RVlVscXClh8ETu0xHFMXTe9TByHkzxjpgtD/WXzJicd8K00nmd\nT6ezVDQ4J1bunMaCc68zUo1qOz7ZEVoSUsiy5TSIlksclX7PyVuo/diBGHmY\nL35wIaTWUN71tD2Xix5np0diT29P3/QHHg+g24CJ3uj6IJMzvC2gwOelD0IE\nknHsxKwy7nx+bBqT2ikVvLeD5jxZYt8pE8K+kPFcNQ8Ientl8Y/cwyYQN71R\nl9tZ3mIqGbgXqg4FWTTftXHTSKznkJfjg+bTiwjiJFjl9s2UilTMwEPRk9kj\nFug4jLh348bIxWIsibXm2VypW4pNFN+raNG5zvT9Q8rsnR/7NGcg7YXUfMCQ\nyXnbR379euHeUyLQJe/a1qeO+b3d5joX2GJjq/pc7iIn5K1vjw39U7ZsbLch\neW37s+yuvoC6sVmWW5QDDs4KcmmyEQMVxkM3N+cNwahJMLjG+IN0NpOuI4YA\neC9TJL7nnwmfzWVOWJJbaSSDI1kSfOFFGktPg+/BoH49fn0yL+t4Ry943y+n\nbl5PdGiGvr86htIEGQm8WGiCNmuLtphlFu9MT0txd8ceZ6aE6Bgm1/IwhAL1\n8bil8G7QQ85IhHXutIK8FmmPft5Wu6w+STrbksTChYNjEyPHyUMzbpq9eoGm\nvqd+\r\n=jBej\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAGr2ncoxWAmRxTD2HV8H3T7Gz6VM43WHR02j2O11Y7AIhAJhUBcwd4RU+ZLRKs50WI1gpkufJ8QX44dHFAnEkgljl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.0-next-1590450972-a672aa2f.0_1590451019455_0.9829072755472319"},"_hasShrinkwrap":false},"1.27.6-next-1590492763-7bd63ac9.0":{"name":"@xdn/core","version":"1.27.6-next-1590492763-7bd63ac9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    await proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    await proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.6-next-1590492763-7bd63ac9.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-5z/thaBK4u0zzqCj8zssCwbIVgAFm6hGnpM1t+VjgqOIPCitx8X9YxF/jrRD3PK4+VgQG8LyxB7EYHS0mDUHiA==","shasum":"b540aaa9dfd6b70820fdbaa0ddc2db941e56c01a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.6-next-1590492763-7bd63ac9.0.tgz","fileCount":127,"unpackedSize":512024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezP6UCRA9TVsSAnZWagAAc0sP+QErQc2NqhKzitsMJFbY\n6SDj3sJa9Q3TqO78XTPAdJu4ySzxkmlsh7wAS0Gy4O2uLQgUxgnjC3Oj9xW5\n5iZTV+2lRgPlpT3HPZkyruxU1/tR8dHsF0evlJ6hpPxx9d3skWZw+tOGWxJl\nt2UiIihGdB2O3XJi7wSvHXZJGZy8vMEXyGnrr3pqnlg8IMtgjlszKkLlfZsw\neITxJ0Ljx2EcLbgZYu6LpGETWYeUJ2iE1mb4N4OejPNbBCsLVWl0epCQ9mei\nAHFvianCH0zBFLczJn7V/E3tPCEiowWUsTuBgxQH30Mv/sP3Dn3XNJ1z1gd4\nHpeJNqW8KGM50fyPkD2MuiZc/fXoHg6+SS4ijnkGx4APsChgD6xaGfNmZBHc\nxFfIm9ivJn1yhTsADKK4Q1VSpbCZe5dBruSzStV+kUNzI7Cv7ZFq4g7t/fma\nBZpgJ4LrPHkUsnVLcPTi1CzKnG1iWcWJCTqGg/F9jPkk+6B1NyMHJV//Xe+S\nM56Kai9pcfAUaGFZcJyiI+DN+hdrVe74d2I4r9WGh3N/rQEU8CgsKeXPzW1n\n8dqa04/xtALibmmymYfQcDkpOhZuBmvxjC373ogRTWAhB7ZlhDSDVocxd3Wg\nM0Khq779CBb3h6WRa4qDzdhIWSlDYWc7sHI0XWUSJe5ffVoXm/99MfXgKfYo\noz+r\r\n=7vzT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB5J6wS8GspHwSsNeaW3PYUGFcInyyCzg1i2Y/yJdbImAiEA0qCWLNEIAuEpHqpetCR07fwGIvVSUiXaHnrea6PZ+Dc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.6-next-1590492763-7bd63ac9.0_1590492819658_0.5860451842831798"},"_hasShrinkwrap":false},"1.27.6-next-1590493206-7896d0ae.0":{"name":"@xdn/core","version":"1.27.6-next-1590493206-7896d0ae.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.6-next-1590493206-7896d0ae.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Kx6mTcPdpJsVTSPjKbWc6wjW1dG4GSISnJPgv5jqbbpiO+3U9k+6jfF2edxL82ANlBnQ5FL8jo+Wr7kYGOskGw==","shasum":"7463ff1e6c8cf0c6127c07879c35a0c7b8e60681","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.6-next-1590493206-7896d0ae.0.tgz","fileCount":127,"unpackedSize":511550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezQBKCRA9TVsSAnZWagAA7TMP/RS8OjzjzbVq6GhlDWqA\ncEcvPUDXW6iH++T6mplcvgpfIhjLps4uC5M8Obo5YRcZcmYyJFBF7ZW1s9kc\nM2EDs6S4mAGE+Amao+H2Cd5nyuDhJUGMDmsxRfJ3pZxGaCLOlHE4sf9d05kS\n74YVADhTSLMZXdiG1eIR9aySEKoYJdhjIRRTNK1ekDDBeI2AuhVJ9hxGpy5O\nbWV8ryrhp8/9s8Qw87cjD5oHW7Ws4w3o94yDU49RaatyfPm75jh+lP8CI3oO\neR6zjAxJPEaVG9UKZT1Me4UGEfoR86hv9t+13N0aN+co2SKhZR07mSnVYvOK\n1hOVr5kV0I+IHRvh2EaTpTLN0Q0izfURQJc2Rg64JPoM0gBHWV2yCrSC6VEW\nQUCs+EdGP7RmsX3rRHhaE1ORNAcUG4+M6/Oa6KWVpZixvbyoc++LtZc1MUR4\nl5VnbM0QbTWiNQDhUG+LARuRwqvklTtysvAiKoVOgj6LdA2NvEj8c+4UnpBq\nK7+4A956lCSlcT3H3zpaVc7QhjC9cwjfUw+gK0XZINSfC4C+67Jt6O5RCNCP\nFhf/cGnX+YpfGfyi9L1iqt1GLaYSrGzeurq4Qey5llrYvrlcVBkQZKDdQdBu\nC4MbjaS1OwvTe+m2r5Md4mc8Jd/7IkV+/mPt08l7VKtmsVgExDIfUv5Gs6XV\nBKPU\r\n=ghKy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDoRLuOuJeJG6UDBsUA9Oi/TLj64hVdjWfM7X5AODzRvAiAO3/MD+HgY5/v1HCetMnhH/YspyLvl3Gf89drxO1FqHg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.6-next-1590493206-7896d0ae.0_1590493257884_0.5260723235651881"},"_hasShrinkwrap":false},"1.27.6-next-1590498104-a5483cf0.0":{"name":"@xdn/core","version":"1.27.6-next-1590498104-a5483cf0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.6-next-1590498104-a5483cf0.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-puPxgBv0T0h464geajM+b5WNWzga65xk/xRczB7q2yfMCKSqPUwriq2Wv8J7kYneFK+LwBRpwcyBdgPXYRQzyA==","shasum":"28a2d493b26e6f94b5203bda5eab228b65424e67","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.6-next-1590498104-a5483cf0.0.tgz","fileCount":127,"unpackedSize":514903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezRNvCRA9TVsSAnZWagAAylUP/3PTr/LGrzYCxPWzJvOx\n2QWT7vOp3iIAhJL+xvsEat2NnrPBfBbiGuaDXhqtfth9yG76evhXCyPiJBZ1\ngVaNb9OdzDdxpbJCnJGpnZRjXdznRuh6h5XmlhJRz5lIPFPTq/dgUNOZz0Kb\np/ndtfpejc9fIMka9/SUBCqp0Hzn89on8wd3klB9yaKSahDqt2bCie84FIjO\n16gxB6IctojPa1sbNKps7b9S1Rp9YXYss/CMbvX9hpu45dPuwBvH8sSDZGv7\nKD+zfnatV3+Rrc5qgOvTnpOo7GlcIGpXH+9AC55B5MuTqjUBVfaJ0Oz1ylsr\nr1hRNoCwBZOynH6WYJixyLFeTiZKM9mgSslGK5T5ThDKrkOy8lI0tozVnFzA\n/uMB6IZox1OFiolZQwgjAxbnwUunuplAGZtbQ6kOHkfNzubPn1+tnYkGWdPD\n+pqUTWJvtY8aCutaLgHkLibtV7/CLHSk3uvuqaYY0OIMdP1hYorj7k3xAGS0\nsyQ0NVRaWyXKPkxYzri3Mt5MmT8dpwo4+TFGohdsz8NTZNEk48N0iYOgfiLH\n0gh2ekEQLkYDQacpV6xndD2p5U6wqarYz/UZekGLVY498SA9aacwrjxl+ayM\nBj+v1Go7vS0vGjrFThuKs16VxJ5Q8wO2tpx+jPBLRVEbM/cqHaOpvDPVuEQz\nJ6cr\r\n=AIDt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCinbJmYTCvO49Kbgwfh2QG7jyunkuVTvGjchK88wCNaQIgSF1ly5oY+pDMIrqM1/NnFb9fXRXDooeiKXntwiacy+A="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.6-next-1590498104-a5483cf0.0_1590498159505_0.3615480283259562"},"_hasShrinkwrap":false},"1.27.6-next-1590508839-da525856.0":{"name":"@xdn/core","version":"1.27.6-next-1590508839-da525856.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.6-next-1590508839-da525856.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-hHYixNfL+VYg1kbI2Kv2l7KJwVkDu/Ux298sn/78LKry9oOu36sp8vQxLpd+dCkrskm4AFbx43AG+q3u/gjaiw==","shasum":"3956806335ec5eeac2389995e8899f01ccbf280a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.6-next-1590508839-da525856.0.tgz","fileCount":127,"unpackedSize":514903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezT1ZCRA9TVsSAnZWagAABQEQAIT64344UbtM9PK62Ei1\n1fBwhuzCKKWtezTU7Q+SzdHWCivc0JBpXeOHSZXWYR+hAm2ahAseiB9CZBDH\npgKj9UqAT/f16uEhecFGoydIP5o0ofLLJAWZnrSjsoGKNHHZypod1wU3RWzJ\nCg2CuvjqNlsVjAB862eZvh7m7LnRXIH4tMUIw7zv3+MEyzi2MtjWjlZV0CuT\nc4BMM3Xnjxw6ybWmJz6L5E+14gZKHBXXJuVQJHKytjoyTrWfeFqPbROB/p8d\nv8+/o7v9wrVujOE/hTGZxW/DRz2ZNs8DY0yXrgshGBT2NykuxEonGNTf2C3E\nvmki0G+dGFkaPYgOac838ybGq0LOpBcowULzasa8sU6aQ57LMCaJKW48zaO6\nhbCpdEi8oFr92MOcmAoy6KD5ZyRw0w+UuHjlcEu1fCuk28JUxT486CO6UTe8\nVTyUEgg7LYl9lfrRhizoH8kCMbjpDEAOlfT1+xdMzqgcyXYfioHBOWlZ/usI\nBzVqciuukBnk9I09AoklxUvCe1Jne659hJAbNDQb3oacrbWoFMys9VyY5tPQ\nU5aZ6d9IzDhzHJnj6eISsxOKMcPPjOHGTWIOgefw243Lex5emRHwyV3V97nA\n+Z/YXVT9XoerpKqicOs7IQChz+z9QzUcan5sx/K3zekPIeLMvjxa9WDVpdg3\nRWk+\r\n=yfzM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFEeH8/cf6j+CcwV1z2BiZwTEMCe557fhLbUw9AxBNpHAiEA0BmBTSKp+vIHYamJZFl+ExIrsKVOcpF0SVpDy7W1x9I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.6-next-1590508839-da525856.0_1590508889334_0.8345535170436933"},"_hasShrinkwrap":false},"1.27.7-next-1590508927-36f5b9fb.0":{"name":"@xdn/core","version":"1.27.7-next-1590508927-36f5b9fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.27.7-next-1590508927-36f5b9fb.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-GY1cxxxdY/a6mrsvqvjbKoMZBK7ZAEO013V30yKR9iA2RYjSux0OI1nY6yFAsIZn3lOVAxUYf4sPkBlWzTH/Zg==","shasum":"670d2456db1f50505e5f6df4e4e036110f66816d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.27.7-next-1590508927-36f5b9fb.0.tgz","fileCount":127,"unpackedSize":514903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezT2yCRA9TVsSAnZWagAADTQP/jaGO+sZTzvnYcKvMczO\np1XAYr8QQrpX1tMrX+z11AqTPd/+A9TZb6DUamVXKRRN/D7Yfo5wtd/8UPhK\nqyGeISl7ZdU9fVSiA/YP7WiUg2m6WogmO4L8Oz6PaqILeexsQ+JFJzZGdf4H\nTL52paKroJPR+tELHyLRhqP4y22jqO+5RMfglI4tTF7W9HCXdTNTCGv+Qyfo\nN6IxL8tEivUgPdNGaqAqk/08Wq6ihOnDmydBAiNIYSJDS5ofaHR1vhrvbu3G\nrD2vJOMLbOBEhUXduQj11W4/FDZ0FGCSLUAHiMHgrXGxeAlN3CeUVm07PWIm\nkJHGHUe2Ahe//WxDliAea0PnybgUo9xWyPcv9m3jWb8AqTHkRW+csXruPBn0\nGxxn2o8U8lWB/U0neGDQtuG5KfdMgZ5u8P3Fdt55Yc8WZB2nzJ4nrk4Uye4w\nKfrzlvd/B7eWBmBxWVgaasaLk0GsrDQOUEpLoWmoy2kSzAYvm686SpK52dl9\ncJXaEgA2V3G+UUrgJyXDVSGqkp71ORIVtGL7OJSnYFpPjzD22Ky2V1v2aEGU\nl8vtGFMp/bOPldK6GZaV3a6rFxmWXRcZpNhM+fCQJHU+EOIOn/b4iug7h+OA\nUO1BkVpTym/wecMwV3t3NL7El6O7wnFYA3mYliELlkvSRlDjPDA25IRqDr2/\n3Y9Q\r\n=hboh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQtgTl3wnVPrB4t5c8LHN1xUxeN/JMc6l2aLWDqkh2YgIgXZvV305sYxTHG0/eHQh4kJqQuzKyFgubF7Kt3itndK4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.27.7-next-1590508927-36f5b9fb.0_1590508978184_0.5900027183799739"},"_hasShrinkwrap":false},"1.28.1-next-1590509032-6ba1c4a1.0":{"name":"@xdn/core","version":"1.28.1-next-1590509032-6ba1c4a1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.1-next-1590509032-6ba1c4a1.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-BnbKoNkWHQo18QNuVKmW9Tdy647GFY6jhaFmpRqiw4l3z6on92lbmGh2rxYQ0NQrdJF6sy4ZAFbpt/NRtedW1A==","shasum":"fd0b45ca46d82216efc14371151edc7a662050f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.1-next-1590509032-6ba1c4a1.0.tgz","fileCount":127,"unpackedSize":514903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezT4cCRA9TVsSAnZWagAAucIP/AxeOQAa4Fzuxbz5oGyc\nHYLHiIS9hVqxpQ5YWC1dL+MRHfw52cFGNlthU9yrHXXRyUnC5vAkNSVZjEM1\nm/y8Mjzd7OYN1Mo3XNfUUUSG9yqS/LFmcPE3mGNUUzlo080oQAwBzglJJwXw\nwLBiMiqac+5JIYDyPpGGhgYIDax71yx+1pryvtk6oSwexWJMiCvbx5oMU1KY\nocdKAsAX8PGOpdLwNyFxDBWtZIQYCck2Y1E+Fz3ruPEUiTVUMw8sG4Y4KnVy\nwSODDE26ZC57rSMh73GnhrSot+2fFlt8bEmKmrvczTq785q8YKWwG7BK4YiY\nIUYUCeOyFYHPqElc/amIcRH0HCFQrh6nmZrtzfeii5bY/+iqV96eNQuIzFu5\nT5fPmV9z1L9pbk9o0akmcQUKcejACYB0PCIEM3FHqX/6/4TcEMJ+dcZTac3t\ndIjwT3cidqSZnV+NbyY/fwMh0GFaw3Pl3yuO2ahucgOkWMV2yh6mBZvPqy13\nwGsouFdPSAXY2auvzR/dblxDgUoeJmEVGjTf38KUF5x/NCvRZYrOtHIQKHll\nr2W9C9biuUbTVh4u358bLHY1/h7vyaFRhwvL86pdfsgMoLFY0oA5+NduT6fM\nfmI+ltjLD/GmxwpaXMMczXnwplSpqKWgsN6UiYpdCPVsNOVGlv/WZlRGrpTN\n1IkW\r\n=sCjy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHY6QhbWBlP5nO41JtxK2RoJQvgwYAyPE3Hkh+QYGiRdAiEAudUuXtLzBUB2E26N0qyKtoj5ICL5nVzkdpp2djqf1zA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.1-next-1590509032-6ba1c4a1.0_1590509084219_0.6392514897538701"},"_hasShrinkwrap":false},"1.28.0":{"name":"@xdn/core","version":"1.28.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-7UyEYRNCj3SJOke0k51knKkAs4fV2Voar1fLru1m1UEA3j4W6eQ9Pvoa+9GKcVajN71P2eeKc34XP5kNpbTccg==","shasum":"97f7db3cd9168ff10540838321a7b370be328cea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.0.tgz","fileCount":127,"unpackedSize":514849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezT9pCRA9TVsSAnZWagAABtsP/j/pNhHYolZFu6Vczf/I\nrLkWbgx2WfomJcBoQJv2dWL8OZ5e5lXpezT7Ymr6w7wc5fPx4Y9g0sePboaX\n7nomy0okWYjkZTGP1Vgux4EVUQeZSawwLII+tu+ttj/6pk/GcWHFjWVubPBf\nnOTPkFuAiHPK7ib8oOycNJ5X/gK0m6kdxXaHmsGJQ34Hqo9qJhjdeDb40Olg\nincPGUmodDmEcFxouaa5qbL+K7wcfVfngOHJcozD2fDKhmjj2aMlCckw4phK\nNln7uajI6ZjsYai80knWuiPr6BxrAxxPgrbyFif8HM8J2BsOfwD8vGQ0e13U\n72D9I1cbDrAjTa5UuQozQyOdDixdtbv8jLZDwuVNZugHeF/xo3P4kAUkDEI+\nX5BJRAKR8buqz20bTaD5ad6t7sXBKcuaBceLeFzzSiBKRFUWg5DmaliBdoLD\nnzh6cXf3xzaESBMikSULBHDjnzmgGBlUgM/LgGjlQ0trRScuTwpp++mKjCYq\nJUGvTcJ3Yz+GHs+sgzkHR7MawBSIj4zxTo8garRX1ZM9ow6hmFbsNNZ7hmCE\n27OE+GgqTvlefZPQaLuah40hVrzyqmvVvrGnRHdiGA93mrQks8O+zeie1crM\njmH5r4NrKvZNrAnRj7cQ1iSowefRHUnz8uq1/ofT7f4JpbEZ3uRjcNy+zhlT\niEag\r\n=sOzd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiDFbu0nwQ7NNocyCY6mgkqdSHk3eRD6IIuPMEQOTCEwIgexTwxxX1gurK/vcGaHeChIxG+wneRds4WYCr0BhFuIA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.0_1590509416530_0.5186370823613133"},"_hasShrinkwrap":false},"1.28.1-next-1590511415-ea9f7e13.0":{"name":"@xdn/core","version":"1.28.1-next-1590511415-ea9f7e13.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.1-next-1590511415-ea9f7e13.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-r9r1amn1c1+m1rbyca1gk5j+ZavnXtAG9B+c/j1QRc4UihYg5U1SZqFWmmSb2WS/pM8Sequ4TvL++h8MKvJYJw==","shasum":"758e3ac5311617bd4d2d6c3e7c550479df7d4980","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.1-next-1590511415-ea9f7e13.0.tgz","fileCount":127,"unpackedSize":514903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezUdpCRA9TVsSAnZWagAA6awP/2jT4+iLMcaoeoh7B2Ka\nWux3rw5xiWOpphN13/g9I4yBAvQPfigOtyCUUBAlnSxiD+jkjdiq9W5vH+Uo\n+ts7PpLMXf808ZOD07TsIpae22iKP2k97huVjf3/HRgrgDrKto3RSx7zBkdp\nRP4yjA8AaU38cxqbDn8gG9RQJYyTRkP7NGgBZVX7xpBiavFBEoE9vGL1DWin\nrPojESGF8oRMTeW24QGk4M0kn30YrraUACGbRKrqhOBrEVdSs4wTt69Rileu\nQIT16pkeDpDhlyjFPLbsQ4rnUD0YLcEADnvLilRqYrpy1FlFgHHbvDmplSXy\nSSx1JPN6xF1bWUFDzI6yJsE0kfgYmRdQ2L6SWUXsQWeHhYb87V+Xlzr51eDu\nbOkYXtAD8ziGBocIvawTsk2m1Bmx0Y1QWqRx9gPsaSR2doUzubHW2/dJg5ag\nW3VB3EfF4/1DgR7RouRngQe/o+OaApBcU2hGhxEKsCuvD6Vfk4FuDgkY/BsC\nQXj6Y1OAviXa7CmHR8HORN1LCSfpWfziAUsH2wZqPk/4TshaUX7Mt/AVnt+P\nIgGgcrunhtUiiVAcd7Mst6h9Jc3O07hOBWH2d2zuxNjCFRUh5iZfIQatqXP4\nhiHwmWmcd6MCWcetnl4iEY588bjyxXzJwjullAJI1v73E5fjieZC5snyYvHO\ndVQZ\r\n=tyU1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhkbFXggpc1SlAiikjLj+N8mloxNdTb1HtnxpiECL4RAIhAIBYLgtTUlJTqmzSWzbH1IgLDXT9UOkwDS/EBeCA3yZA"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.1-next-1590511415-ea9f7e13.0_1590511465163_0.8185649370962542"},"_hasShrinkwrap":false},"1.28.1-next-1590514632-ac064b8d.0":{"name":"@xdn/core","version":"1.28.1-next-1590514632-ac064b8d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.1-next-1590514632-ac064b8d.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-slQVkMDXrC+JVGq6C7AHeO8ADIH38919IwWbol3DjvuUaxB5c+I/QugSYYEYDox0bF1qWshoNseJa19xfEevGw==","shasum":"7c8f50c384f87c6278b152e6be3bad90d6d1edc7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.1-next-1590514632-ac064b8d.0.tgz","fileCount":127,"unpackedSize":514903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezVP9CRA9TVsSAnZWagAArk4P/AscuHZATD9pEJBPxrD+\nvMiJCwo/iObk1yUFN82PetjDzA30qJFKSCDks4iaXqznRHxNijBPUnqARQzh\n1sjGPPKXt4EhcnmA+H+hVQkrD+j2soovedioZ+qEgl8mzVPyy9RTWhn5QW3S\naJa3+ILdgBDfZtVOq2jB4wgdAsfJtL1QEW8P1oWbT1JqLiNutpMtJfq9BWVR\n89e6xlWoh1MBH03VzvsfCe0Y4qX5z/PS1qlA2JEs3ZxnL+5IJ9UsPLsTRYDf\nKtzZ4PBP4Cf47khOeJXwal1lJenC/t30hbLnKKhYuFr56O4sxj8HE351ak2b\nJWJsKK8RkKwws3IMlcY1pRwsbatFAcHVDpXsJ2gCwO7ZWh6jqOXxJRGTPdjD\nxwRibCNZtzph2y0WSKhTvvVa65msDV7H6OuI5gem7IHYB3dKfPi5iXrIufdW\ncG1Y0D6yI0FmnNHld0IV6nZ2/kvfpAwAumobfjVSsajBe/6YAEMyGa6nKmab\npt+8zuviE3RPyl14VGY9PeNlWNQcmzGN5ifIDxbnFgCp7pB74PPAsK+ZEIP4\nKqxMZybhlZCsnj17tDAEcPcrt8r87iokqgZE2H+zUczNrUXJi1CcRLlWn/J0\nQSE8/IIuH0iRgb7x3rrO4dvygkMsGZlu+cL83n6haSeJo6v8Yjddx8AJUZiF\nyXwG\r\n=DVn4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICTi5zvUcLw04z3eknSI1WJiru5pjBpBlbM+fUMwjMGRAiARnLyxq9zwyU6vNkBZw1xq1ZwbQgJTkDHnVvDmy/nRNg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.1-next-1590514632-ac064b8d.0_1590514685507_0.3663250114188097"},"_hasShrinkwrap":false},"1.28.1-next-1590517398-ffad5d29.0":{"name":"@xdn/core","version":"1.28.1-next-1590517398-ffad5d29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.1-next-1590517398-ffad5d29.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-pm6N8CREf8LWxHhLjfLsYfX02we50NRgvjaFJk2zBqg0bBlDQJJdG7JKeZbIJXcsFzfdoo1ic5hHh6ds9jXSrQ==","shasum":"80af1d2da64a713ed2a5f8692541c2d67a14f528","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.1-next-1590517398-ffad5d29.0.tgz","fileCount":127,"unpackedSize":514903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezV7MCRA9TVsSAnZWagAA+0MP/3pxOBwZz0R9OVHFCD+i\n7oDj6AlOM/AaDJRU8RUU56ngPs9IfE2Xfp1KL1Kyj/JY3xys3e69EvFBzpa4\n+tUYeWVsFmawXrz1K98xeoh498ZkfLC0q792XwXEmwo5mL6Ce1wWlHvdxgka\nN+ASTrOLkK4Ff6fu0whWmndpFiOSjQAGiW9qiBf6zjH/buaizvhYPDcyglLW\n82sCQ9znqiE01Uo0Bi7+oR36AZwk/YcJv0aqOLJOP2o+rJyDF9N9BmjPe/aQ\nkCrRIp7yGqneA96l5+sOwleOr3RejYn/XaFvEOPsLUpIiEPK77WDBbPRU/P2\nSJ2h7qxR/Yi1q4m/oy1JZG7LvoHPJW+154GlYn12aNUsmg0X5GrSgXUJRjdk\nP5PzPq0fc/JdMx1oWg2eSnTinty1LVclny0TaRVOagCzB8uwMEkpSXTxGDjD\nWXBfBHlf4FiqhnkccqLQiDCzpCq6madBdN/kcXzp/Bkzmvv+KvrnNwuZ0mdG\nxyfBzGdBmlgq8adWUxT2DY7Q8engkG3SyYYmE1WpjZ+gu+3rIZIrkCbq1WVo\nRxdZmqjsNGQBCnGQKkWiHwRsagUrHihU48ZWX6eQR+TIxwlsbJa5QOSREGEd\nev9kuRLVTT0NNH2CAWMPTL/UsVVsPfkRi09ud8qw6i85QkCKew25SHnCxsEG\n8f41\r\n=fdGC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHxUId5zAQoBqOUhhritlPDgcXbHuO/UXdn+g782eIuMAiARcZwL7Qbl2O/ZfXTtf3e2KjiKhkAc8ral6VUYqFFBBg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.1-next-1590517398-ffad5d29.0_1590517451808_0.8657569481126308"},"_hasShrinkwrap":false},"1.28.1-next-1590517451-70eda305.0":{"name":"@xdn/core","version":"1.28.1-next-1590517451-70eda305.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.1-next-1590517451-70eda305.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-RVPX1/A9TvJqJ5OI/nTREvJXZbXnr7/sLQtJxYjpA1eNlbQ2uMk6U2mb7uEndBXhBGcToDifwASOBS+vhXwkFQ==","shasum":"b7534bd3799ffa0431ab1e5bace694918ba39776","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.1-next-1590517451-70eda305.0.tgz","fileCount":127,"unpackedSize":514903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezV7/CRA9TVsSAnZWagAAIGoP/2IyOv5K908EkWfeXzaj\naBgdu0Sns931lKtenXgY2kQO/h3E2fy93Chm8H4OcL32aC0Gxda19/hX+Pdl\njPS30qF+Rgi80uznVr6Bx39aVBiBQat9qWXFB2eDb38SCM6mDrjgn1acRhb/\n5ZkRri3oPkPbyEF6hrxK/CEOV8yFvQRlOUztJVhKM91bL5DtFA1QdM++81UG\nkriNIXP2VW4kYFUsGpAMA2YFebmWUoA11F34u2D3HD/x7FUtgEP4M4Cn30QS\n95Sev7c/po+WQag+vxRJ651MFb6bPvxS9y7dDzW3TRQR4XETJwQVLS7PCY6P\np3vNeOwbVe6AW5v0SXISmpebPmZ9wsY8qAAmsEU0E6Muw0N9yAGOh2rlq1sx\norv9SWPIe5a2DWt25XHTuUjfIGcstEL5zWnyeF4Wq+sNJ7OHzTxHFOFn1XAo\nkzMFsW7Jq7inxbYSvvDVCzxjnVAxQT1BvQyM7mOyXQEicrTusbxrnOTNLFln\nRjgcNf8dzPRhp9Eq1YYRn/nSYH4Rjkr2ziYHTtpdRgIz7nrTa6tBt4zEAJ4G\ncduijuHZ0Ve0RKiK6Y9EP6FFI8EbN5za7RzyTambRCa9Q5Ju0yC68QN/W9y3\nQqYFI5SX+ep9EMiUQF5S1kKaFDj9T860LYEW0Zx95ytgzjuBL0Dpvh2d9wYm\nzN+e\r\n=zAiK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDetmpghn3Vk+UmTwOl800V7b+CBHHl3AdNRa/WyE3SsAiEAo+V+b10Gj4Ix0AqBWx/GnhNS0JBmSzCV4UF2qfTHQDs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.1-next-1590517451-70eda305.0_1590517503133_0.27079616736478695"},"_hasShrinkwrap":false},"1.29.0-next-1590530036-0a284992.0":{"name":"@xdn/core","version":"1.29.0-next-1590530036-0a284992.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.0-next-1590530036-0a284992.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-BbmK+WmyIozciEhE6/gsBTyLdx+hhThGVRuM1QnvTnJg1R0GsnSdrJEFr5YoIEBTcx0gJ2jx/M4Xrnc09AcYww==","shasum":"0fcd2fa4896826d73d29904352bf09234a1d474b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.0-next-1590530036-0a284992.0.tgz","fileCount":127,"unpackedSize":515307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezZAkCRA9TVsSAnZWagAAJMkP/ApP/ZNRWVrTB/sLXT0B\nmNjZZp74UJezWs9aQv/PggLR07ILoeq77nRT3iU2tXvsvoPpJFchuWCSICLk\n1Z97UAGr/y+mgYLv/Yjq+X6Q1QHM+ADnfXKupTFGwMW9psWRSyNQuVWWTXHO\nGoVj2FHU+rhx/EIwIJLUfcmBZ4E0707We8P63AJp8YM+joxji3jEOrvV3gug\nZX8JHqqEn0xZIjUR1Ne8vry8jog/7qTVMiGvCZtk4vD+EVt29+uvPhoAYHMF\ngtShRTPGHz/CpC1BWLpNLaSM0CqNx+ZiBVgduwTIchcDwTEKhORlErfgliKX\neVLO3i2Oat39DA405FH1bgXYrVKp+TpTvibKeRoTHGvXKRCN5gf+v0ot5eq0\nf2h/KKQqqAJSh+PbKa2CCF61fCbUi5Q7hveFJgDR73/JKQkQCqq93/a7OfEt\nS4WC7E8kKNfQNNgcOC0gfOYTpxd0CC/UZQewzhlfL9pex+IT2/bwbr5+bgWM\nU2J4hym+RjM+cbKCSp86PXvBkhpDPyw4jGKk4gKQDreECc2Dge6ykOrROJWI\n3JDqHzP1GQQfpgG8y5VxYzYZROk7U7dMNhFPQw+WdnILYm1k1H+YmTLd1HdB\nAdg4qs1U+2n1AqQBvdq0niuLNbIXrpEXseYldjXx543NAuGyV73UZrRkjcxY\nbQDa\r\n=UzKh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZekBRIpphOwzK9BcxEptjfQ6B1flf63+wlqLJG41uhAIgdpVtlcZb7Z2WMh5rlUVpGM55yg5ZR/6n4JWq2i03Uuo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.0-next-1590530036-0a284992.0_1590530084521_0.527423360378763"},"_hasShrinkwrap":false},"1.29.0-next-1590532441-70a3b072.0":{"name":"@xdn/core","version":"1.29.0-next-1590532441-70a3b072.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.0-next-1590532441-70a3b072.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-bKRMGc7uOvMoeXcWYDbA0zoSuf2tBEETAyo35pCNqvSJflOhbd+YpLb4wxrtrnJpw62vROfTItdC0S93Ts2vyg==","shasum":"19435cd8d66d6eb1fa24e5d26fa48c6fcece2577","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.0-next-1590532441-70a3b072.0.tgz","fileCount":127,"unpackedSize":515307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezZmPCRA9TVsSAnZWagAAtLMP/0886afA6X9ETyUzuPR8\nSGx8NcRe/Bu3FIX5yK8EJms35m//b1Nk0ZjfpiH2AeCWeWkIGCxFETPzWys/\nfDYUVprRwtCOpTS7WacMBeth6g2TOq1g9b5vgBlkPJrHrBn1tTBS4cc6VEbz\niUr9u1RwTxRCSPjGiuwKJmTUhv/SJpDpmkowH5I7KyyBwjiMXqrEW8pD5lX5\n+BFsoK3ye6lGmUTdynpD6FdHjPDNLPXdaWqEuCE20tQhNMIMXSzW6PVqnbgG\ny1XX1BYoTLlpEA7Ix2jBf/+riGif/p8FskXczWBp+FtEv00wIWTbj6/M3E3N\n6CQ+iNZXED8sniPVPCHTcuBCytlXj9ZWO8V5sjZBcS2KJZtdt6vXQ4bmL1Ou\nbOtq+hcFD9PRH7PkRhqhYncwzxoYr7ec0Ex+QaRcRe7bUzf9f7DIGXyqhPPN\nUPGUU+lGCAn7/Su0j4uddh17fAjPy0A5IMFBtzAzZwN6JDjwEXx6OAox9YWk\nRu77QPZ+L47YRjJQoYlgE/daCAtVm9O7gZlzuW8i9gjGb+EzCBRKP/okdA8M\nxRz498ool3OiA6DAI/EkUuhoprlyXXiBc5sJ02ldeFhvPb8KulwY0jUArL23\n05/nlZyPjD241kjWlIt6fPekC9iKzcYQVxOpWPb4472bvzk+ItDk9VZWPwfM\nUae8\r\n=ILZZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcmxr5ftLUZXF+6rFonHpF9fGZSZb0pBKmgG8sFKzCdQIgDgR/+Jc6IhgfzCHHpoD9IUcP8qm5cjqwGrqUQrTn3cE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.0-next-1590532441-70a3b072.0_1590532494917_0.25072498478488825"},"_hasShrinkwrap":false},"1.28.2-next-1590579745-33aeb253.0":{"name":"@xdn/core","version":"1.28.2-next-1590579745-33aeb253.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.2-next-1590579745-33aeb253.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-GkX92C6GhPeknw4rl9d3AXi8BgVFPFmlT7rzR2R1MgQ2VmUTosETJUG4EHTwzLcW4k8afZFKBN7yxqlYvMpj9A==","shasum":"2dd42d6c696053f5af2d64a096e7a412391dc9c5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.2-next-1590579745-33aeb253.0.tgz","fileCount":127,"unpackedSize":514903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezlJcCRA9TVsSAnZWagAAykYP/2oBrSZzQESIDTe4iisa\nNYKN28itPfqGIRIsrnUnUgBNqQwy3E2QLkWOXBHBMjyb0GU7JbIyGXDofGPC\nx6E6aPagxci0Gk6mnXGfoHrOZPSSXzc9vpHLcqcpRrHZYfAPY4qQG5Ym2i/X\n8uJzMuw25uJH6ucXc7+pJv5XENgzZosnNyx6O7Igd8PvdR1s6Gi4TLB1VtrY\nbctYTUpBLRFbfUsJlLours7klsgVhvbgfPHmuhodh+yVxVvgzG9+vQvr9QQe\ngrYurfrMpbHrcYl/0+UehPbqYVifpxDcAsoSYnZHuyxfXNV7bz8UDPRqMKT4\nY7emRxQOKHyiCNHKnpATo6f8n6ndroErRVpG7PBrf6m5e84m3z8TQjfVeWSQ\nsTgCVLKykgY4ZQnQVDH36Ty/xaRz2Shi7Ar4wdGQeYKbHpJs4byjG+X4kmIy\nl3YoA9eWoFgup5RZsz7ZDTPAa9gH7gzXovjyn0g6XZ7xb+rKxydWaVWwK7T/\nf6oRGuOWUTv0IMbiWBiCi5Zy0GLG2JcRDOXTB8DYNHq6vkm5LEjYv+5br7RD\nigeqkkR6CGFwh1SLAWT2efQQy5e78tfEW5Co1PaSXgg6NFBxQNQm4HXLrd28\n0ZVM+PiNW7KD+xis242v2bTTX3XSGYlEnRI3ODqf/bu3Cj88fb7SYbIQajcO\n8BYM\r\n=BdUX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhxT22u0kPg8HIsia1985jqBTBOKPtDwyDU/9PgcEHRgIhALH0p3dfb/L9+uZa2+T5M6jBG8xrSTOkrU1ZTDGPq5hl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.2-next-1590579745-33aeb253.0_1590579804123_0.22367180315983126"},"_hasShrinkwrap":false},"1.28.1":{"name":"@xdn/core","version":"1.28.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.1","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-WIvji+lL6wlgPT+wd8blDNEnlHQhNwnI6EZYn3NyXRk2tDs+4TwCV0hRw3w51+BsZq0swFprEHXrjefFyWWp9g==","shasum":"b7013269cafc23c5a66c71d4f388981a7f2f0168","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.1.tgz","fileCount":127,"unpackedSize":514849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezlOKCRA9TVsSAnZWagAAf2gP/A/c3KyK2VCLp816M84N\ndZOKKHOKjUMGkzFaCp7LZBfCz/KjolpoCUrsqR9FNSRqP1NQl7yvAotk8vfj\nNBMTXd/3IpAQQ1CZXgQmi/T18ZSWMqkIMrP8Itr/OqTBi29OR/LEC66SAAh2\na0gcYm8TgsEi3DGJJ7GkjF3tl9AC8Oox0vU8iuuZf0+zxvRBmUEuPotQCE8g\n8bwuSZNc/xKQ1tcBUdZUhxq9V/rJwx81kmhBujgarbwQHxh13vaLIkrHZaEy\n1nraUNc0I4KY7V5zm0n9hjJIdB3MnbgT5ToXrxZ3snCsIGjXxowPbIpN/JGE\n1tkT4fP437pv1nECnc1zrJDzaEl40Qu3WB9mXf0BYnZ6z1IjBR0Nm+eoHQzw\nlgT1nyL25iY9A2TMtgcGkewuuNq0GNcs3ND3WrYJJSDpl64ZzSfu3PxeYjuQ\nElDb+qMO4JMeq89VddyuUnF2QfCrdngFEPCkzqcCddXRBG5mcml9lJQL9zKO\nMj76JDt4LtHHtkbSVJmpzeoU4jcwCZZxm1r9dhdN5xR4UU+MTT6AbE6CeE6y\nj8TAYrGQtqlJxp+cKhHcvj8cPHYqhGGidS9GwgXUXrBuMEQSOIzvLTJIDblh\nSwoVPj2R/esTLu9rJ82RbvTz64XvmCh0utWaimXGDkVlXsg9feuwGf4L8oVB\nFfyj\r\n=5zL5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF59YD6B23t/1fhyglCs0ocxsAB4U4dV3C21WQZVcHcKAiEAuyG9074Drm9/V0Aq9LIakxZLU4vaKpFuzjKd28c7dDM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.1_1590580106072_0.2246616524281011"},"_hasShrinkwrap":false},"1.28.2-next-1590597417-c9023c63.0":{"name":"@xdn/core","version":"1.28.2-next-1590597417-c9023c63.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.2-next-1590597417-c9023c63.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-p0I6YVbL+G18cAbt4oYj6kZbfSj+ojeW52QEZBnuMQ9d+fK7E+csCHFwJqHOUuv5OXxvZ5W3r2vV9xKuP5rUog==","shasum":"51ff628d09115c29360d70e501980f12f141e44f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.2-next-1590597417-c9023c63.0.tgz","fileCount":127,"unpackedSize":517708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezpdhCRA9TVsSAnZWagAAy0wQAKRLXvCisiSUd2N8nOFq\nakGawNR0apfH6AO4vP9gtX3EQgFIuZAmHEkRsnLWdXL+l/EpJBpqk/3RDLmt\nuGHJ1WBFzuhQHL9GPL49PnIOVMdtWjeFEJGHgZSPbHxhqTIvfeUpMmnfxwG7\nIOd+BsN+RtQ5bYyThBFaArvZGpthx9T66+oiwavumDLhE8t40vCGzDOTaLVh\neACJktn05f1gAXM68MALRlHusS1ELXmiWAIsD1m9czPx8Bnz7c+hFkmuYcW+\n0pcXd9LsBfEknpdWG66lbtH9/GUrDm3/IvxpYyZbhx1+7R+jXEWntMwbkMdE\ntqZp1YHpNk4ReI+ie4pvbKnqG++9WOeTz6ASon6EoyxUaW3uunt2y5G7s/Z1\n3Hxd2/1wf120sCY7KJrilM0IoLkM7EDFZyfKKnaRVMirbJjGRz3e0uCS3hRJ\nsCZ8e82CylezYKPbdMR7jvxAQfHa7Ky0HHb3BTOpliBwltO8rWSqpbHtA8F+\n/Yw1o5Wwkme8LQ1fJ6Yy5XjaWybEqTSADZdPCKfuZ8eYloOm7iMGPL8/AjX1\nLx+MfZSlXSRESieNfuZfksWZZwwk7gyFU/RwNi/Ujw81NoJsMDdmlpbm6/Cj\nli3odqrTKByDYt16qME3GAfHKLf/U8cCXzYolHeuYAZfc7qYqeM+/fg7fkc0\ne+Qk\r\n=xHk2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+t213pM5um2rSLufZ9vAJ0ub/5WS/ekDIeBLCUOTlQwIhALE5fEwz4RqLt05tlatl9wqVwOtTtGIwCrRjt/YY+Fe8"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.2-next-1590597417-c9023c63.0_1590597470389_0.3866369871863633"},"_hasShrinkwrap":false},"1.28.3-next-1590597421-ce388866.0":{"name":"@xdn/core","version":"1.28.3-next-1590597421-ce388866.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.3-next-1590597421-ce388866.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-20eoCZLRh5Yn3uEnVG1az1FWYj0sr+UHgy46Bmuw6wUMQB8Zyie6bcCZCVPEG9Hw4CqpF3ZjuXrmn87QnqJGWw==","shasum":"3fe90477176736c8f40fadcdf5bca2613e83c50f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.3-next-1590597421-ce388866.0.tgz","fileCount":127,"unpackedSize":517708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezpdzCRA9TVsSAnZWagAAcv0P/0IXzR0knDPCZuJiPHte\niBgdPpsmrbgCZjGmOXmYA+DckUCiE6E8M84O9Bkf4IUuJzQk3wQpOv+lvB8H\nzPL8RSLt+c+znJENYHK/4i6A2Wx0zmiuQF2juf33MkgBvS8ul/ziBexIlBbj\nCKsPgSeJ8cZkoIoEX86ZDZBwZsVdozz2a9McR1xTkTGK1I2UmEm/7a4Y5FkM\n3Qj3sOOdQm1Z52LZXpeE/z54etRs5Nw9L7gh9oFmUYFsCiA56cv/84A0Lk1X\nzFAlQzYyImx1wNUbcaMS9BFkrCzcZuvcIgcVO38JlJDcTo4tkSg+l+geFHqE\n2Szi0ISksQ2hdVPcCRcvQoNg0mxaQawoaRQQgFuJ4eENNlN1HqcSuEiPGhHk\n/eMLt/uZVYEeqySd1RVrfOziswfKnWqByJ7bqUHgtx5Hv40B4jgak62EEt9c\nlMhlXX8KTOY1KOp+snZttxXtx6HSz6GQEtF4zB9l2hh2TohjrVpgDTeEMsc6\nWQUN3pHXqAk90mnaJ1b3lgq0Ycvr6JAqkuWTk9bJWj+PgHG6J3M008y1r+rg\n+VorOoJLlFR+DXqpRHIXd4ooJ+/6ltMcnQBXETBlkaRIAQ6/0ksgenznA5sj\nJcnt+QhLDhSCtugviOWyFBIlNcA9Teai/mOvzNj7pt4oEXc1PH1x55LZst82\nvE1t\r\n=Y3Sf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFSTBMgR8Io58uCK5ELyZqtgSE8PywzimY2FAIs0vgsXAiBp8DvJZts089g8RTU96nB0p2t9N4fgLZmm6VnkIUahgQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.3-next-1590597421-ce388866.0_1590597490869_0.8651741970672455"},"_hasShrinkwrap":false},"1.28.2":{"name":"@xdn/core","version":"1.28.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-4xAKvMXn+LzB2vVjWh1GjondsWBGhjG6mt3QQxI7dvrl60yit4uw4cE4va/B08cV9q3DYRbcmW5vlfrAE8ynFQ==","shasum":"b0f178e429ab8717b907f86e646b0adc18659d5c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.2.tgz","fileCount":127,"unpackedSize":517654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezph+CRA9TVsSAnZWagAA9GEP/1OrduxBeO68l0hZibci\nk1kdmp4gwrnWx3SVvOq4ZkHP7/Ql289KEYu5XggMY8VXVUpm984haoYreVj5\nNOfGNAgkgmJmstrDXj5m58WDnmy+SgHNGtMsJVosPbYKtwx6jitMDa0g8GbN\n1a9tcQevaT4u/qy18WZyuLKdpumn/+p37CR39krQK/65EOc9ubpIs+6eYh2/\nfaucb5KsOpiVVuttan+IrT2rVH3oz1pML0kazDRlt230ln+t4rIdDRqMi3Tv\nnocsqT9jmgVXidphC4lB5G9S3A16xssgJpOGEvE3xfViYiZgbrDk3E6pY0a3\ndMJzJoge9hqDFjZCJ2BAxA21brJD5lhgh6tRltbtCK4SO5Lmmq9cfve4oDbl\nNwhi4AmYW/2a+lh1i2F3uW1L3Rc/yxyEypcyvCGpz493DmAg6bYSe58Y+LMx\n8oP5nezUR0jJ6rgUg6kj4jy+zKvmFeX7QnDONdZ3VHJaqoP6a7jGyb8ChRxN\nFpvRqHKrLwpM5ZVW57iSLQpqF2GfG+TklmTewkmdPbtRCQSdRSve6QycNC6l\nK8pdseoFNihR/ScWz3uMNT4vVB3a2QhV7pvtUD88O4hqzNd6AFdjqs7qwclB\nlUvhrA9fCspKS14rLyWtJYetzxdsu5QtHRrWdmONO7C9rFX6TBJdVlUgERBD\n4baK\r\n=XvjU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+hIHAUSBpuPvtXEfpVUxgX6UrKPQZtMKMGHMY8LjZ2AiB+CzhiLwfCb317gTql5Jv1sQjfoEJ9VOExodRCNWeYFw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.2_1590597758389_0.22077654482295883"},"_hasShrinkwrap":false},"1.29.0-next-1590600687-db417949.0":{"name":"@xdn/core","version":"1.29.0-next-1590600687-db417949.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.0-next-1590600687-db417949.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-OR/kkCivCgE1holOL7Cg+7JVbbenwU10BZnUrZDYz/vfwablpTbptDx+6TxZBEPMHFved/4GZzhTduZds2HhQA==","shasum":"e97d068043fdd98a0e743ba5ed2546b8f14cfdb9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.0-next-1590600687-db417949.0.tgz","fileCount":127,"unpackedSize":518112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezqQiCRA9TVsSAnZWagAAvREP/2TY0bXAThP8oHymlPjG\nVaPzyP4CoaHGlp9Km7gY/GDh66AXloXY6yUXBCHNxUhhUVPaVzc11xHq/FSX\neZHQZTdQ6XQJtdxDxJFFS6hV8zMb8d6QkrrpJJnOWzJS8LOJHpnum3DxvYzU\nSXKYsMCGkQsIOXy7kn2nLh0dScbLgI7UBB+6win7DsN2y3M+rZTRa9J/gawu\nMuMi2leYtSETwsMXtyRmuBzAqJIIOXSuyc3D2qYJtTy0yPKQS6gBWfQWCFui\n0e5heezTC3F4e+TE7e/wbQIKuIzk7TgkYTUZl08ohVR93wMVJq/6HXAodzGP\nMS1hJxA1/U2rXKSQucsqrgfvGO0yBoW4KnPyyrkVXAGYXN7eN0eSVGt27iwj\nBJh/Wwt6V4bn7XnDLwtr+xv5/24ww6h/0abku13eYNwMpgUGZK7oosJeS4Q8\nUG6Gy3J1GQLwYDcScAVWj5OM2WMr5ujQdmcPz8+8x9LLNrgWqg/y8R8ha0si\ntvUODL4do8E0MN+PG5U3UXVMSzfbEmE0lgOGLFA0WCHdzwCl2D7CcFUzDSYV\nNsZLDFyZg7ulSGb1PkFLOoEG1GRfSKxA14poWY9t8MnICentUr7s91dXlCQa\nlaCq/TgozUmfdlpHi7ReLE3le5GNF9p6A82VJIvjSxmb9jLhfyBur25szQ9c\nNtLn\r\n=gfzK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTqviIH1lhXrw6Wj0lZl8sDBvZMMP/b2FeslZVOFBPnAIgaMkqZ78dDDxlgB5fwvKbsGeG9oYDXD0qawmScwv2rds="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.0-next-1590600687-db417949.0_1590600738173_0.1772795683532271"},"_hasShrinkwrap":false},"1.29.0-next-1590606876-385dca94.0":{"name":"@xdn/core","version":"1.29.0-next-1590606876-385dca94.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.0-next-1590606876-385dca94.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-odk8r1nlJqT34tSfZIjrzNt+XsIMo85KJhOhLbJShki4cDFOxRvyhl2RE6SD4r+ks9yODvHFmFrSRPCQL73k7A==","shasum":"580a6f113e9b033b9208c76d67c2b0b9ffa434c6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.0-next-1590606876-385dca94.0.tgz","fileCount":127,"unpackedSize":518112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezrxUCRA9TVsSAnZWagAAFHsP/1g6PTeBzd0t+gFDtzUp\nnlpCV/NaBjbLi6KDR0Eog7EzK1kanE4E/dkSpR7pNVNpIGcXPvm+OII9TAPa\nuTRXnspwmQ0mTPfZ8GHt3i5L3t1qis375zrYKFrTEEhLm02is4fw6N6iSdb2\nJ9Wkr7arYQY6vyYkeVvxUF/LRkJBcJSoX++vJODcBAwMvvbzTmRGrqS+abWP\nXR+HqqAErgqoED0a0qwWSQqSnGUS1surzKa7QrjVB8Y/CyqIRiyrdV/iQkWM\nkKNckg7expDEQC9T849PWDyQWRA1pnFMMxAu6113BOi/iJ2stv9qe1IDnX6Y\nTQNHyKr9SnHIyF08V2F3ipUvxRmtXTRl+lhNTguNdKYIzE7p85TM/v4bRy3z\nrF2fDLdFu5qCUSDIHnMcf/R6+wakhYgAKbW039HujF1CeABg2/nqEzhU4mau\n3zRj8W/t91LKEtmi9u1mPA+oKHvZuQ7ZYGAeUxdRRA3cxCR1M44BQg5NuyQy\nYQ+QxKS3k5UURz/Ee92+3lHyBqHoMAsx78U4wloJZg8Kmj284UmZSsWdjTbd\nCB2ua1SjjPfW5q7Tw8+MVph0xD8xe0j2xUkhINAd5sxgSr9mdF/7g9PdsZ92\ntQhhqZPUFtuxWFxOa7Emwmm0x6pf2YfHvGsE9vHrX74vj2x/Va6DKfhx0Kwu\ncZqc\r\n=hUJ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5fK6ZK6eOMdisvV3p5Y+gO0btiVCVzQSgAzHhO6+pBwIgHUYuWhwmWXZoPWKeYscSuAn37p/WBITp4ylJk+wVDAM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.0-next-1590606876-385dca94.0_1590606931294_0.14866628586875064"},"_hasShrinkwrap":false},"1.29.0-next-1590613190-2c3e1e10.0":{"name":"@xdn/core","version":"1.29.0-next-1590613190-2c3e1e10.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.0-next-1590613190-2c3e1e10.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-5pVnYT6MGGNiV3E7p8TRBXMpvqGxvRA0m5LerUKfsKT1o31uerNqYN99tzjGsvNKJi8Vux/0mEwTDoRrT6YYUQ==","shasum":"e2e4ea02ff19f152f704dcfdfe004d59a4b081e7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.0-next-1590613190-2c3e1e10.0.tgz","fileCount":127,"unpackedSize":518112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeztT1CRA9TVsSAnZWagAAFQoQAIrrfU8FQ/RLE2kl4EiZ\nUFqZjwAGiCISzYVwjX6cJ3pdn/kusROC5RvCck6BSIVXmJVuoXlJXK0AWuOT\nsBfmUVp9jRKW4O9ksfZUUUVODHU8AX6a9q0wuL69TWYz5s9DmDC9YhRKB8nU\nsniMtY/K7fhfJflePaGryQDbm1BDblckIqR32Ix+imqtK/0drcrPvVdEuXUW\nXZPa8zcSbLQcFgLmi+/0c6fzjWeke/5H+1MrnqmAl0L86TsM8cJwrJ0Flet3\niguCmEWOf98XgJdj6rwkU0BJWWRWWbvELIWYASsfvFOHr21D9ZKoUdnid0WI\nrKKy0Q2PjXy/t9nIE44UJnTLs6YoAnOi2glGwetDNF9s1qEiUN9dLtJojbmU\nyT5xxAC8yytALfpTVWg9/HQ5WosIKpyo7mm4BZzHsbqa2ayqBOnq2n2xpPOm\n5amGGwiEv0OJZCaWaavQpMxdxRnHt+Rqn63hIUJz7DwtnAZjt5MV7fSAkIRe\nOcGJaSC9e6r/NO8A71BnO1KfYjABh/1YKs68GcRXNcOsJ3W6/Ku/AObQOtAv\nNwcH/PVbPvptA4wIQhJLzGStcp2uP6LkDSH6wMN05RUc7rYIoOUnX7mD+sgT\nuEbflwqYbZyZGv3/2qDKfUjzshVtZsMX96sK9lANbogQAkJg0oL8x3/B8/2t\nWG0h\r\n=PEbk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGheB3hzK4fE+pRYDDnwD+JD+QEMYKNBprBs2KV37/wAAiB1XyakzN2UubLBc5NM2kd/OTXm0jqw42xp6P5PGRIHDA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.0-next-1590613190-2c3e1e10.0_1590613236746_0.6781778875037772"},"_hasShrinkwrap":false},"1.29.0-next-1590641329-5c9e58bc.0":{"name":"@xdn/core","version":"1.29.0-next-1590641329-5c9e58bc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.0-next-1590641329-5c9e58bc.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-/LEqSaKYpUg8T5s2qRp4dNXgBXgq4FsYFu/7an3ZSIU4IX8WAO0DDQGLhaZf6CMHLvQKLp0Ra7e7bqlGTBP6yA==","shasum":"93929dbe8da76a47f623f53312d53eaf8009b7d6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.0-next-1590641329-5c9e58bc.0.tgz","fileCount":127,"unpackedSize":518112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez0LoCRA9TVsSAnZWagAAG+kP/0Bbl4qEpVBUq9hbuHvf\nRt9UmzEDEGw4TDFi2rFq0Gyz4wb52cLQGFkT8/B6AFYnF55vmdB+Zxu8yaDa\nwi1roUlu6sD1gbZcTZX4CgtONqrBzFFKZgayQKcj+5jbzsmXKfdoM9txYkgp\nvYYVCm6YH09K0ZpKh3Wg95xNQa+RCpTGb+5PeHf/0AYxtBoB1BzfWxUg1CX+\nTtC9aSu09Er0h02e7g5HfSeHFgzsWinayQyMfhMNmp5DFKVYCu2FPU3w6Kz6\nYtz3KBnTP9fimwAChr2M4UAZwYEV3ZawV9dicojYnmIZX5vCzp2+n+QwJiaC\ne/fx64+43K9g9tkwmLOMtcRLk2CIT5ko1jaqG1F/98xEHSQqoj1cDKL8Yylp\n8uMbVBMU2f/xICvNF/KPHc9LYGPz7xarTc5swWojRjEFt0ux57js9muYSz7N\nTm1e2nLQyRCeiP1cxCjffWjHN23/xZ/aUN5mFx9Y5rhM25dWy40wYj2u1+Xk\nFo5m+W0hg3T8o9vizVip5/1DkG1QUEOxGw0u9j9LdvzUC0ec7NSBlmYNgzAF\nQln5v3K3JaqzI5h24bQAVCCqySTpZ6Bpg88AsNShHm7ZaI0WSp7lJf/Pb4g3\n2460LftlZyNdsxbtq05OiULkGBjyOkh5pRE4XOfH5Re+4EOMOghlA76VCPbs\nw8I2\r\n=BFkZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFYLJbj4sm4kztATH2EhlXwMHFxavOb75V1E1Tme3JwpAiAC4tuuab+tfQuZeKMYdFleSrE1tvdVmQJxad8TMb1kOw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.0-next-1590641329-5c9e58bc.0_1590641383729_0.5212101832222917"},"_hasShrinkwrap":false},"1.28.3-next-1590642401-5950c000.0":{"name":"@xdn/core","version":"1.28.3-next-1590642401-5950c000.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.3-next-1590642401-5950c000.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-07xXOE7XoIu1Z91RhuzrXcNSuYjWg13BLE+2Z/Gi7MFLp9adBoox2V9ppgIDMcDnLhO/z3FSauUxOJdyB0Q7IQ==","shasum":"e8a984183b9e19b7078036391f0db975ab2803ed","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.3-next-1590642401-5950c000.0.tgz","fileCount":127,"unpackedSize":518112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez0cQCRA9TVsSAnZWagAAXcgP+wavqsy4r+N51RcFo+ch\nnkIIxaVDTuDfmeVccMv1zdvUtIbeSeLctqh8vKpG0u6zAPWh1sJPxPISINQA\nOAa0lok3oAx0215iE71sTY6Y0sfeFlHkb4CFWSLrMsrNjPgGZkRmSc/DqVr2\npR+8D971g73w04QX4nK8RUvw0IfnD8wTMGZoMmWwGHuwIp9ux5eENKn0fzVx\nzOsOiQWMIPfSyBiq1zJSMkodaJo3z4e0hpiNNfQqw+0sQclcse0rYDdyZx+m\n6VFEih+cxXNdYgqViIW9pW0WGZuSPB85LR0J7vZ61YBlRGA/sqNIwDtS2sU8\ntPloXH7hkyw5m1a98niuyMIKHAsZSngN7Cvg+Aihi4b1eFIKdzjAeZZraDti\nOfWSuHR/hxyU1GfveUA2OV7lD5WMRQoTsUHfKTFFtyEMBp+i8lnUVRtPhBeh\nzB30D0iOpa2JI8r5IMwS26KUJPK4J5M93lBqbGkx4evAQYrnt0c0cxqL5aaj\n8TXUxkEDF7KTJs6kpEQxaqqpyQkWUTiYuDxi+944FKpo1jgrbWg2yrEUFn8i\n7IxfmMVnxqBEL4LABJtd5eu9wFkmsJBOTKBIyuSdRYM3AGDhEtPIFD5wFMfv\nP9uE/cWROuj5b6X9ZOJR/+wl19WyGqsW3zKhjnlyhPiYv4h/mtzdq3RT93rK\ntHa3\r\n=Sqex\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnH0jFLTVZ7x2DfCCH1XC0lmgeYQXOWzpkXFy6F+P5hAIhANksRaNd1LjXbmU237XWpgwN86dt/qwtXDDREFFVNW9j"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.3-next-1590642401-5950c000.0_1590642448155_0.5259852936670626"},"_hasShrinkwrap":false},"1.28.3-next-1590663854-6033b96f.0":{"name":"@xdn/core","version":"1.28.3-next-1590663854-6033b96f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.3-next-1590663854-6033b96f.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-7NXC9emlFpoI6tT4vSg54wsAqiK8UndeLa8HkMMlb4em7owfWH9HqF4BRilix8ae77hY8hb8n4Jvde84p5BojQ==","shasum":"23e9d3d9ff394e0a376d3ee7212a188f7920953c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.3-next-1590663854-6033b96f.0.tgz","fileCount":127,"unpackedSize":517708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez5rhCRA9TVsSAnZWagAAlc8P+QFbzpDbOsxE7g31wRNn\nBu+IDtfoMxKgYaoQFvaNOLoeS64ftklnxS43tuSUPSF/QyPKGpIhCXgSX9ap\nMN/cCdP1L/L7VRJWNk8AnHvkPlThwHqBNjFbPzHdUQ8wi905K6GvefL3T4GY\np6r/HOyH8TmJDVgW4k1Ps2IoMgw+fhdUeyYPPvc3OfpwlEuUBcRdG6eXVypY\nT+GYM4teScy7+Q9rsaL0k8WK56hgTQU/EULgaOhy4M5Ce4kqEmtQPckESH/K\n7yZo8vc5oZziXVsK+CWBq0j+fBdtIJXwG7Yfri4BNXGOlUgolhNB+NiaLe2d\nWP01AW6Xok0Mr7hhNc0XIk3N9rljd9c0Dinhf097BWNrhlhMcROeBMz1jzEl\nUIICJyg5xevKc/cTYB6G5o+9yj+XRhR+tJGnJ5hpVb2p7xxsPwX6Kv84mvtF\nNfzZhYgwGu7YEaJc3uSWbjOAoIZVKh1ERq0sGoIkg33Kg2O/KrGrjfXMPZgH\nOXs5ASp2cChR0/ke1t0Dsh8Wkdjc6taQTBFS328/a23pQ0JMK1t0EcGMyR9n\n/jdZuobMtKtmtMQ6zY+CbaGo29aCLBDNyGax45t30tBaYzlTYgpDlG4mwlEu\nrzPcWkLd0/P/0tL2NqdW9HTJAh+lxhGOAmFQbgF5L+jQdjKxKqDx7rvQP5ku\nw12R\r\n=eEMM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBpZiPfxgJprZmKL0y3wGI46RT8K2xdudzEb/sOSVxIgIgH5RoSKh/gVj4qQG8UthJfzDNmubl6snt22uAOv0dpKA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.3-next-1590663854-6033b96f.0_1590663904593_0.41462988251740596"},"_hasShrinkwrap":false},"1.28.3-next-1590663861-1758f911.0":{"name":"@xdn/core","version":"1.28.3-next-1590663861-1758f911.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.3-next-1590663861-1758f911.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-kntb0NvHABkn2Jbh7kYWSTzgKGJ6Ku18xKHwsLZDDQ3dxTGy9+OQqCIIK6AT0Pb3U9CjfVc01FxtLvWjSFlFqQ==","shasum":"6f5935450c9528ab97a5f12786596d022d265e72","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.3-next-1590663861-1758f911.0.tgz","fileCount":127,"unpackedSize":517708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez5rmCRA9TVsSAnZWagAA8esP/1e3oKCeTVS082TLiYIg\nzVPGBGC7OpAiZL5OkAEgU35Cv2kXEIUNNx+OfhVnv7FR+WZbc600oTrZpLH1\npticb8gi8ZSxWoa74kSoOz5IcfxsWyYPH0VXPYwDPo9bU2KlX1dAskNJYbt9\nv/Kv7TlUzG+WqDp9mSRSVDVUxan0IwZZLkiQvxF1O7V1Fqa+k6V87LlPn46c\n7At66NJ/DnuMjnTA3rBHY0rwX0D/isVG4WYevZPiGaj6X06tBc7/GOsbqpPj\nubYK7P2aNBP4GlMF/Kvrd1XvTRDpPS4J4NYf5XlOQf4/CUt1jtO7JcnZvHDR\nUnfbU8oHhnMUYMfgEVA075Ot9YJx7DoNVzveCr8pLGc8HRVWr/WIWuFyk1fQ\nnbrdfso0v/4WFvfDdw+0adRaEmWS5lQENn/voTlLZJjY9gKTY/rfXDocDYAN\njv6eESIMObYHLEYmkFRi51+w3FV2rnFzXEy/eQpbt2+0teIhSvcPo7tVC47G\nWNekGyIby0xFiT7YBNfuPiJXFJCNckJzF3yeCKAyXO80lGJ8V015yqbRseQ4\nIsvlChhQ49ASfdKbpUC8ikDDwZSdgnr7Du5PzgUH04l6ZgCKbevStWC9Hx8L\nkEjHKR238EC9ojhyjd6Jb+zzob91m5OGqJ3bD9Fnysk2xLfrRfWOSoViHziG\nZ6et\r\n=ugu1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAPZSaJmkQRmXiDVwb1NvDfLwRf+CcQruzMMigZ/NrZQIgO+YlogP917Gz5CLZpKZ8LjOCHjYIAONC5M7DnRZ9Ww0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.3-next-1590663861-1758f911.0_1590663910288_0.40862220549434825"},"_hasShrinkwrap":false},"1.28.3-next-1590664692-3d77f6cd.0":{"name":"@xdn/core","version":"1.28.3-next-1590664692-3d77f6cd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.3-next-1590664692-3d77f6cd.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-CzzbwQb7EG5cry/UUUJADbM9GYJb7acEfCR1pFn2hlNA3WqZab17N2Mewgz9+Xu+1S1/0Oh+dSgjcqJ09C/ULg==","shasum":"05b02a4dde0febf13dc7953b87e2b3bf98406b16","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.3-next-1590664692-3d77f6cd.0.tgz","fileCount":127,"unpackedSize":517708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez54kCRA9TVsSAnZWagAA4WAP/RC06vqBkyk+wv2VYQSn\n2TDQWKgqpy2Lt+DSVVGnXR6e3FLG/RXQxZ+C/w6NDUYrDwaX6ZIagVGfsZA7\nmqdcAo+1VTKm1/oEezQVTsRnF6XbBEXamQ/PzjOdUsiuvZzze4KN71WR88I5\nWrsM5Az8J52eJ1eUICAI2s7BkK9EmuEIs9p0fKtTzatnfrUdcysSQypCC2Nb\nJMD4UfTWV26pNcIK5QRY33MIQYunRYr3ul2R2zaqhlpzCdJnjwewuCC840cP\ncGBb6ej1Ej3KZX4CsN72KUAgns8A8R+3qgc3yGrOdtb0HLQaUsrktwb2a/oT\nFy454PugM5reUIAg3Wx5MsAf/M0YejhWbUuPrKA1cPLkaxpEUgMGYN/hrO1f\niqmBr3WwD4YSnAwaDTULj9n8MK1i+Vd6aYk0btA8jx4DHhtxv0gWNCov2eTl\nykNdQf0jJPkF18mPFVDgBcOnE95PFvWev3QYBWp8Z5w/n3DhR9/KLDyalFlz\nCARqWu9STS3WuN2pZLPRgGUeF9afywdqFf/SoNwiCnJ+oeOf88rD/h943SFz\nV5uXAh94/6xk76ggcIXQ9tScbQuEftUUfAbH3gnlMGjxUudPYPEoRcRvGf7G\nXHWuCL9Q2uMWexRgUr1FVnMMjbI3TzwvUtm5BnBpckOEmYZVxB+TSJ7LR//0\n9XMU\r\n=h2Th\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzFOkMKaiZmupe2EWIzYnxN0MOfWG6iCMcAiS2wOWO2AIgC1jLj0E9XQgTi2NA6foudqA8r0Yktxy0+Ykcre6eewY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.3-next-1590664692-3d77f6cd.0_1590664739733_0.726018452601491"},"_hasShrinkwrap":false},"1.28.3-next-1590675419-db473b15.0":{"name":"@xdn/core","version":"1.28.3-next-1590675419-db473b15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.3-next-1590675419-db473b15.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-UcxD3aXca00ewMlv+/T28ywXAOXeVph7pjWoBHT0LEaacwksvc5igKu5PxfuVbA0XVX+PLmLsSfWNCK5iLwofQ==","shasum":"569148f182be64213c9d2485ed61db21fe733f2b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.3-next-1590675419-db473b15.0.tgz","fileCount":127,"unpackedSize":518112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez8gICRA9TVsSAnZWagAAI7MP+gNrq6s06Y2b4zRKtLfJ\nXNvv4eu/6vUj5DbKzvS4Vi3qQg8qzyrjjy7368G0oAa4WV4KrIS75qdaL3x7\nryTUGv+TKCPqeTNa1fyZ6RlEwmPW9fBEN1Hy2ekkHElk8in8iTgyCJe+YrfZ\nGZ4CIkuLQQ8Ci1lWBskMsPl1XAkZwvqJW8laDj1/dzhNaIk6WEKfxLrfQD+k\nUOTErQKi5UaFHCvLq8k0xIEEP5B14lS2MMMX7mu6YlnqNNfpF/pdA37DSdzr\n3IFG+GAPbYQsf4KXeADMZEUTK3pN/aoy+nCLR1ZyJ5q7le922a9IIDh5lF4l\nWR6w1jH4ZMtFoYHmWeQEF9R1QDh604S0EQt1IVP6EzrMR/OmAfxQr+gdfxYX\n1rthMJpE6g00CjqOmUjp1N2hoq3oB2Q3P01p976i1pIrz+chqPfSEAmyKfuZ\n9AENkAQPwnlnClC81bNcbuIig3WU5lENCH9kA80XIcyHXjpPhKPafv97/Esc\nwww3FBProd4cdKwPUMy6PhA7mlMOIRfJvlk+ZNFbIBH/JAKXcAGK8AE7uYvo\nmf1ednhNaDO8YTRvulHJX9QH7Z7nO1ZrK0ppr8bkEvOJxhPPyzR2ABtHn9eK\nLwr1HTrUnZc/wf6mngeaqGZ4x4Z1cBWf74LXTJBPk28QZAXgisy3QDopMO8I\nZdH1\r\n=pOPy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtAODqmzmwZ2Bpa8p2KmoL5vNUFGpgmJBxBReQ+14BuAIhAIDglwYsUZUR/EvpMGh54Q7KtXuHDIkqUgwBViN9KAvh"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.3-next-1590675419-db473b15.0_1590675464384_0.932275051847403"},"_hasShrinkwrap":false},"1.29.0-next-1590688452-314d2cdd.0":{"name":"@xdn/core","version":"1.29.0-next-1590688452-314d2cdd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.0-next-1590688452-314d2cdd.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-r6rX2VKy9Oy064SVNS8h7LHwr+ZgvSH1Cd2hwK05X9LTntj/h/xNNMriIKdu0t0dgMDbiNlnLM1ZZontGtfl9A==","shasum":"407c44525b9c3f7ce13a1fab66aa4d87675175e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.0-next-1590688452-314d2cdd.0.tgz","fileCount":127,"unpackedSize":518112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez/r1CRA9TVsSAnZWagAADI0QAIFNQ2yt0ZR8FibGfgCD\nicyJmY8kz2uaNpUGqF2dHiackANLgp16/opKAQc7R9RoXiOyYBD5hpW+0A1m\nNfHNR0fSmskeMmZKwjZlhPFKRbPxtGSXNYlfWQ9g3ACpkEOWJjdzdQYN0fOM\nzohQncIReEeZW318/J05gQfveSSTHdQ0ZxWZMuNeWUU7wSxhVF/U8PSPeWSR\n1o8acH4fcc8nUNirKb4mBqhzL3T++jJ8xdkLhVVMRTmDumSFQh/bIrd8JpyW\nbXB3rCsP/BP8l7+nwFP4/bL2/CtFTE3xtcomrvfGXFpDxU/OMfEILZtV3epX\n42wXYAPYYk9e42u8scfAqrLVoMPYvG6mQ6QvFONqtiwOTUNw3NAP7ax2DFoh\ngkc+LKWvNPl6dF7sKQIY4Y4L+EieFCW5Ljnm6fdCa9sjZuNH6qWqfMlWVHZQ\n0x+b4HyO6l1h7mS1j0MyooZSXzPRs8iazCMeqfRZKHu9gBZC6UyanSxSbb4S\npRiY/OjLdtZwuRg/XGQ2hzs3X0GoUqC59MhYgnihgpNXZhzp4Xsgd4WMeZ+q\nClQYBIm+Q/2zQyqanJNIFH1Zc9beqydRMv4ykmgsoNOAMuJNcm0h+t60kRrJ\n3M7825enoOBSfXc5pMCJ0p1RQ2dVdrH+6dGMzxEeO3UVClwgkEIf60stfSge\nQqkI\r\n=n9yL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAFb6vLozKXLGTPjpUDzOUljgyH0ufNOoHnVz6qeYTAnAiEAuuWFyFVWwGAiGbCZvVI9vBn1k2IuEBZLSiPoJbXqlQc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.0-next-1590688452-314d2cdd.0_1590688501476_0.10862806218280063"},"_hasShrinkwrap":false},"1.28.3-next-1590704463-5359c1c5.0":{"name":"@xdn/core","version":"1.28.3-next-1590704463-5359c1c5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.3-next-1590704463-5359c1c5.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-fhmQCquRzXc26sgZJOKPOKbloklOMUVg+pFqV2YrqTbzxx/RwZ/v5UpkVt418G7DelST9KnM4bET26nqa36l2w==","shasum":"fa514bedad381a93cee2d0ed51005fb6b6fd8906","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.3-next-1590704463-5359c1c5.0.tgz","fileCount":127,"unpackedSize":517371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0DmFCRA9TVsSAnZWagAAMAoP/j2Nj37XQY99dKU8AEpi\nCzeOp6OW72G5iX4yO/prAMfqQQw26PQoEEo9AUvK/53JhrhlPC3PEal+rqb8\nhAQSYqq3qvyZRp0+JgqXJ4cOxZYrRgXlyLfyACMSmJ7Hmk6XzPVOPCDCgJGH\nMy8kJNtKkXCVZaQMhI1U1YuC3G+KfS/wV5nElk2ccPvicSrJwWK44DGKmz5X\nxAWM4OpIkdYdFY4XmYP6S6fwW33THRxorpeXD7Dzdn5bHHSB7Pdlgbk3GsEB\naTG2wO8jqhAD2GbLkJGSv5UnSilB7Jqn/h5IdoSVyQIsdjU/wZdasG8bbLLS\nbVT21XxmiIkW9KqBqDa/1RUXCN4pAxQXRoMqwr0rBDlne1pz5fvsUg1PLp2p\nnBM0ktSs0BscxBVA6jWkPFD0/pgNp9PE5zxawAacZT8lX6CSWQgApGrPwNv8\n6IdLJilcqvvoUpTGuZi6vuj8OMQhef406Jl9vN3ZsyLISAjS+0OwyARdMuHk\nkOKH/x9nld5O6iPeIuBt2bSMnOscRe3zRuflwncf+bmbYAdXARhwHYFlRYRz\nOiIwrxzr7lXxHk3eYqrnQgSrowaXSgF/2SNUHk2pkprqsWh548FwhSfTZAWN\nE5HcZXAK3MBZmVbcwcsiBrG4cALnj1AiQXY34QKhnylidGA02RmjzpasG3Tm\n8TyT\r\n=wjx6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHusGg6+YaSK0IEUBqx4JpjMa+8lGcFzGgfksVxwdqLHAiAK5nhnn8rzlT3xQjUknL4UuM+cmSvws3EI3VykR9QSnA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.3-next-1590704463-5359c1c5.0_1590704517228_0.6304832766390285"},"_hasShrinkwrap":false},"1.28.3-next-1590756444-f050cca6.0":{"name":"@xdn/core","version":"1.28.3-next-1590756444-f050cca6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.3-next-1590756444-f050cca6.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-h76+dacZ+klLC1LKQYxqjL+rdwynOfnjhYAlnhva9YHGdhn7RlAOYsJoITA38tK2ZvBs//ILslOqQNPw0R3r2Q==","shasum":"305855698fd2491db189285070fd34ce164344d9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.3-next-1590756444-f050cca6.0.tgz","fileCount":127,"unpackedSize":517773,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0QSWCRA9TVsSAnZWagAAD2UP/jaEOS+aaEEM+SIxbmNh\nL6uKG72515c8tsGgAg1a1e6JG30urS3cE5uzDSur1dPxMOehpM3S3AHT0nqx\nh2M5rksb8yiuUGFRttn7umyyMfuuwREmyWAkDZHHX9fbMy7lbe9cH1SxwVBN\nFOr2xmoi1mYhFM/X01oeKrq3e9+F47/T+C0KYDs6vdyFZyUgvL2gYIgO5D7f\nsv5KpDGXCXnWf5OD5wGFA6Sj6bp97WOsE/p7cQ8jXNfQtpE4US+u5qRVOsR5\necybzBf9JDWm+sOXacKxgOqln6ZuTNNpqIqSBxQWYAkBQXeLzBrVMk3ZWxxS\nLmEf4+e2YkYh+QlfHddCjaVgdGEYqrY6LkmScSlq5nK4KcOen4/E/dIULsjA\nUgxFx5xcsXFUFviOX2b9UoS8mvOItfkN43RvC/u/cPnCz/1sIB9mmM9QJ6mT\nsC2Rvh3JI+JKWg+ybRyJ2SFAl/MMRbEnbIHRHodCfNjMF3Zv79dgOJdO1Etr\nlf/gLG2I78NxMwgo6OLxK5pwpfjvDMbgv9lDEEhpgFjeuI4XGfMb5GepJJ4S\nxOBpNpWmHZ1l0Pndkfk57dwQfNxCjFC7eqQ8zatAuejilx93EJXTp0SF2yxu\nzhkp1IasmG2Al5kYjwdb/j2RT4pYPf1BkbwHD+yZZ58BUJ30MW9wSjgzrJea\no51b\r\n=epLc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxHS7JQ1G2wGzlOyVQrNyLxjeziCEMMSsR1/nrJIkNYwIhAJ2Lx0OgY8uIdpAxGooWZ+eLgWDD+61btEH8ixHCtUU8"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.3-next-1590756444-f050cca6.0_1590756501751_0.16212785994872148"},"_hasShrinkwrap":false},"1.28.3-next-1590756692-46e13d75.0":{"name":"@xdn/core","version":"1.28.3-next-1590756692-46e13d75.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.28.3-next-1590756692-46e13d75.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-FgkA7+du06rxvFK7qqUQjq0lkpxeyd6oPvRh0IBFE5YvQfiPxqTyFRkOYzw4vaj7wm7M2NwhUWK5HRH3dL+srA==","shasum":"8ef0bddd31fcc7118231a6d43cab63c4a1ffd973","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.28.3-next-1590756692-46e13d75.0.tgz","fileCount":127,"unpackedSize":517436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0QWHCRA9TVsSAnZWagAAEyAP/2F/cFFy4wi/tvYALKOR\nuJL0xeIXq/jx9PHyoPEH2k/4BPrIIZqyGd988FeMGyKgDHhvce/p8++J1F6Y\nMwkNBfggupW0zxopNi8UJxyKlOb6XGLt2elmT7wQAtDvYBVKZwAcgrt8fVHM\nS0LeHBaCdJyF36p2mPgtAHUgBdh0tnhYvJHKhFlu6hOWhfkV37lvXcH4CQKE\n7Qgov1HJwsrMGc4hpMCwg9qnINqGFRRMSpbQUsU9aMW1bdRyDRXkCeueJZcZ\nHf73558SuYADXyF9H48aIHXIhqchgWVgFYKcI+0+JWf5aXWhNwYLr7Q8Gt29\n3yiaxzQqp9JB8MQj7wqF9UhUbV+Fz2vVJkeA/dNE+TRb++/X5Ou8ZVRlo7ns\nSo4/6OekNU8W7KKkmd7jREshPTwhIsyXKgOVhRttKCdPUCB4CsD9g3+dS4VC\nFk3YOkkd2RWhu4vO80BuiuPsnvTHuW1tDCEuIAuZdZ0tdpOnbFD3KxeH2X9q\nS47RhqzwUKy3ApnCnltXYaZaDK1gOidKgZzvXUp8IIbyHedysyxajnPQoe5C\nX0WUSVrXDOyxsV9kEGca9VvgKuIpq8rrM0u36YzdZ0QN8l6L8b7MltMVf4Yg\nG8cTrHHCCyq1KkWkAv3HFhorgqUV9/dxn3Nff2TCC9DBUWHZCm9xr55A8IKO\nOyuO\r\n=9tnu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE+PEROhBC0jpTzDL/GYjfT9qdGFg2GndwMYw9kFjc6DAiEAjWk5661ZQYqrebytBHPFYYLmeNHGgHnxvlnq6ZBCZNA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.28.3-next-1590756692-46e13d75.0_1590756742719_0.7398020461814212"},"_hasShrinkwrap":false},"1.29.1-next-1590759925-ddbfefbb.0":{"name":"@xdn/core","version":"1.29.1-next-1590759925-ddbfefbb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.1-next-1590759925-ddbfefbb.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-K0eHxvRhxjvr9vNK4dhmzwjB1lx1jZHwiDzbhVK0L0I7dzuIlPZhGDbQ0sa249YMgzFC5HqGv05Ee4wzqViXaA==","shasum":"e032ffe7f9a67eb0694f045884b29a9da45e380f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.1-next-1590759925-ddbfefbb.0.tgz","fileCount":127,"unpackedSize":517436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0RIrCRA9TVsSAnZWagAA7C8P/00jOgCBOjPgyMT26Yaw\nXWh1L8eMSqjQrJfU2EA8+pdl6JItDQJ8922612OlEzkCD85q+uCXbt59659N\no6HRZLBn9+tLhgML2Nrlohptzxy6Dg29+XygGINfQ+ZNiIe0Ojdd9k5aZBFQ\nqUZGCLfKWLPf9l/UU1uARGmZAnCNaiSKTd+pML1+4oeA8FemnlZ6ctwHN7K/\nWi1kWI5Dq4HPeusvhdxWGnsoc6Yi1QyMGfmHA8TfA5W6HEd2tI23qq6evoxO\nQFJ6oTezROTPWxIlE78ZX9qcIJpDeyLP3v2y8+aQu3ELwV9IFg6BDeTuaMvM\nm5WBeDznG5z7V7Vms1Cfp4DWvQLG6sPm8hX4GLTGxoVjmwPs9gjAYNSxmgjQ\nzDx4Q/Ob/N61Dd7OOkw7pbwT32qzjwsHgusxQ6pLou6J639AQ+gXsVizBaGc\nC5+P9J5N8fbleogIAYegfyzLZ57oLwI2htlbH6AauYcEj4rQl/oRhdCA41m+\nq6XhK6iWetSB7CfG1pgqtEh91HCBE1rPDsM7qHNCYN3s51/5N9P2BRoezl47\n8FcEGyiFAkx9nr7n7PwMmS6mJ5xUA2QCvM1YlLWfmBqmyqY8PGA/E4vPmJzk\n1dEIAhy85K0PoTVHgZFXzVXivND2hSGRxfdlPh/SBi5CAtBzJLHJ/OYK9ybm\nGhoo\r\n=Gm2K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDU2xCMUIL2j5ueVDuR9oZXkulr7ZZ1ujmSvTP/DO/zRwIgBNzVJ3k3Y4bNaDpZm61vURdqJ+EWfvG1CdeJItpFzDQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.1-next-1590759925-ddbfefbb.0_1590759978577_0.48082698501901255"},"_hasShrinkwrap":false},"1.29.1-next-1590765685-e5eb9caf.0":{"name":"@xdn/core","version":"1.29.1-next-1590765685-e5eb9caf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.1-next-1590765685-e5eb9caf.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-BHF4G9ZZfIatOJHzGJibDRwdbC+/KtFViqOQTz47Ryg9I3hRzxkPaY0Z4sKsz9sihmCdDeJc529tXpsloHwyxg==","shasum":"dcf7046a5493abb41360458592eb84cd2644d3c9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.1-next-1590765685-e5eb9caf.0.tgz","fileCount":127,"unpackedSize":517448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0SitCRA9TVsSAnZWagAAtZAP/0IymmGeDKof9276to5e\nThMQmT+5NbB2NofL24oQ10hT3I75VXTfkfXBpaZirwSQmRplTu6K3w2KmGQM\n0faYhpSXv2ndblD4YjbiuI/hjnR4VNa693Kf8H0g9dds/3PabhjcWn/AC/+Q\ntsANzzJnErgoCg/MLz1EbYqKga5NoqczYb7OEbUY0J3dIA9nG5KXv1/zkew1\nxsB3hyzyNWwF8/tqBEUhrmNE+a+QF4Hj9GMYIkHCP+e22GG5wnPHlK2bQ3tk\ngMcWNojMUpxH+/gbEKtp7Y5lhAjcrLK8ZbRjMLMViSd+2a88iGL7QOO+HOnc\nLZqtMJZbLZoeCsX76mcnk6Ztaw2S3I+U+Ws81RvZqFlZG7YENA3aR+F9NVUt\nQwPVNMOWhqm5DygF5RwyH9PUwRvW1UG7/9fI9ZMMHBPmN6XL9S4g+WyMf0Yw\n1eR0AFALPvZgjsDZMd7tYxWH9gntJbui8gI1D0jBdQMp8dsfK7Szz+ykNnIV\nw/klSuRnQhRGk//FMeVqXuuChfuQglNKuk/uEc4qQH4/870RmqqyzuXGAtKM\nJFZvvLNq9LXAj3eX/odIQf6RIRuQfJRcKd1vZzvo2mioKgF+6y3gCIO29T/A\n3GHoaoSj5CbPwjRSmvyFTUkh0QpZWoG4ejvJKqZdmmwDtCw7CRKijwd8EmFD\nWMVh\r\n=Zmq9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFeo+QgQF4qPSWHKxI8U87AhvZcg1lRWjCoGyqtGx+zPAiEA3dmMmF6eIKXMoRbznIaXnepQzgl/VDhXO/RGD5omVDQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.1-next-1590765685-e5eb9caf.0_1590765741284_0.9834376583928637"},"_hasShrinkwrap":false},"1.29.0":{"name":"@xdn/core","version":"1.29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qi6TpWQQbe0JfMaMWsCpnUV8OM/B4msiIOxtOZnNKEAzl3CuPAL2ZkSaF0/mtwc4U1KsppUA3Kr9n6FhKjphLw==","shasum":"4d16ac0cd74b52280a10ec9b2305eda815bbd9aa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.0.tgz","fileCount":127,"unpackedSize":517394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0SmpCRA9TVsSAnZWagAAKAIQAIBTLf2cBeyKa29N81MH\niUmsYsZJJKxWk4h7xmM/clpZ8LhpyS48CbfBvuFYdtjxiZWMHfLaxvhAiFkN\nBMN/LtiJZN2x0TuNkbFXP6hFnsmypG4Hf9XTb7Mc9JAJMnARvMDcgRF8dS7R\ny7U5EuPlRmV01t4w+CSxikAEhpQW5eMgEIZGW1MpThgqjA1qhRc0um4Dsg73\nXR/C7jkf2U11K04LU0mhevUgdX/ENQDD+LcaBL8k5AdAZsabww0jvvgz/axB\nHcWAZDHGAxE55jJsMsnMSAW+3/FjLL8dfriH2CROwQiUGx0+Mw2FYR3miqCu\nIrIGJ+4EB/p3Xuv4kfGPFFllDMG83whK3Bivm8Wizn/nza19i0a6U/qaKsuT\nU0MT7Q/973oyG0tPSQMPcJE8yfeG/9kQPoMGMl6TO6Bpjen1UHIC036y/Mqu\nszuH0NUm4CXAAy+uGSE1dEVTMpkPQfukPjqbaOMBnopmyfDjAUJAKtIKNJNs\naoljuHqqEbnuBDW9xznnd7SqMD9mM4jutmcR8lQj0P6eie7xUNfpCOb3DX6o\nK9HFQo/zXu4+5XPmdvFvGj6poRRLoHBTSiZGkqHgfLIizhioHEsKbBqqYp9P\nWbbeAaK/KAIqBk4WxoqVnyx9b6bhl5mUmLQerpl7ZuZQsB1YxPSmfD5ScQ2J\ncNuq\r\n=Nn4z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2m3oAfFnPZA0GLKUpWlPpQ9XmnegfOQ2k35+P+DlmogIgKLXJJoe51IOd6SJKSLMxqlmOF94WqzZTkiUh43aLcVo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.0_1590765992550_0.02952562869266373"},"_hasShrinkwrap":false},"1.29.1-next-1590770489-d78d36dd.0":{"name":"@xdn/core","version":"1.29.1-next-1590770489-d78d36dd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.1-next-1590770489-d78d36dd.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-xFRAEBw7C7XiACjyxNCqxFjDY/xtpDfTqlHWlEy1HibsEFw/ZeA1zMqKOohhCwvj1ijbOBGiy9Y6k+h9D758uA==","shasum":"74ab07bcea002f92afe3a0a257433c0443e85033","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.1-next-1590770489-d78d36dd.0.tgz","fileCount":127,"unpackedSize":517448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0TtwCRA9TVsSAnZWagAAuVEP/0hPZ1fPgahIXyGk2HkQ\n1PJoPATE3tsdzrM7oKMJU3xD/iyCIs82hWrNmbJIM+T6jvgEEbraKuXA9d1X\n2iw9gsADUkf2mdkF4UlyPRNTsW6ct3ILZ4EH5V64SrMDyU4anNcAeAExu+9u\niLdQ8mv/xythjhYsCgZYKt2CL616aqJdUSq1L65tkyImHNc/hVDZSwHFH8W/\n2bf+wtmPGjj9KNGaVebujVAH+sb6Tv6syoRVTmDW7ogLzGLHaBRqu+mUkXkE\nWB2YDTX3jQcIdTo09g9YzJal0YqYN/2tHgOXF9UISINjCLOKSfn6SsItCy54\n5kdLwl9uYrDSwyGrngaNY+noOs5Hio4KRpEWBVJ5yflohu3GZeoNZAwKqTfu\nI1BVjHwNUDjqfLghUSt3Wf7yDRWULGwe7z909r8pvaA9YPskHO4ocCDBHm/a\nypmBR2SvMZs7jMmZAxwrzG5e/81XDBbDnWabBXFnso/mUypp+F59sLMUcYuS\nfmFLCZ0CE0P45KIc5Yhq1BcwT4VHnNntiUd+ybGpiJ2Xa2HkC/5Y51CqWBeG\nwq5v47VDykM/SPufF0Fdv/xf0plM6TzXHSXvUJwE8cWel+jms2vWyY2ZaAwr\nr14WnsDgnLMMWpLHufiEBVnZ99KNgBuZF4e7X+fBq2jcO82KDP19hQ8C1M+y\nQQkd\r\n=4vX+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3812Fgi3X/SzgH7a+EBUu6hATz+LyoQo6FJEt0hOoNgIhAOHyDG33YqUh0TsCrlYEhXkRBjnUsCU9DgHKGzrqI730"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.1-next-1590770489-d78d36dd.0_1590770543871_0.37925520344858565"},"_hasShrinkwrap":false},"1.29.2-next-1590770536-04047cfc.0":{"name":"@xdn/core","version":"1.29.2-next-1590770536-04047cfc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.2-next-1590770536-04047cfc.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-JXLaYyksNFtpFNlbsSVla1LvY0UzPMn4V7FyzZsD0uNsmSPD1E6WehqspVMwlfGUyiGwHpS8ql4CfAZt1HxLBQ==","shasum":"e75736d1b1af1eb995f495ef1a34ebd2ef3da556","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.2-next-1590770536-04047cfc.0.tgz","fileCount":127,"unpackedSize":517448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0TuiCRA9TVsSAnZWagAAMAcQAKRkXczgZ5SCObklBVO0\n8eGMpssOrQPvdaSqvlZtvqzMYUBU/UWNbHtoaadqNCH1CNthhHhML2UG533S\nsU88XXdNuGVo3Ob89yVD0VuA25VH2Aomp9vA4guuKC+4NBk6q7et+G3NVewP\nr0Tn5tdUcKSjSYQihhHOlUcgQUrOn2B0uv3ZOHxmFd8Tgek93JLyQRa/nWkv\nfZ6F+nGzGhq3bDKMBdZogqiswNaUOD6IsFxFUVqwVYVleljE54jlfLf5YKV7\nOuPaqoyZGRv3NlOGQBxnZwFwhJnVuVO9uQO2RTT2S+g+RiLXTiY+KHY/l7zz\nEfJ1wmmDG3uAAIqeMTxoCK4O01Au030be5xv1bbU+fLCG4A3lxHyM46Tfau3\nFimYZkf+Kx6hmBkMe6OBTcRDZHu0PLoi8ZBYW3O0i8hS9IkQ5SL86oMwSy0n\npI6qRkalavd7dn6irwu7oVz52K51y/tUXZOOYaFk626eruDq7RozleV43b+z\n+sBOe3phWsiyduBgap0oOt8J5TpxM4PqFAOUsEpecVYOTqdiVCZLtBhQlgAW\ndsZxQ2D6PnbC2DmqrtbukNI5auA9yZmwyPpSFsXb23I9AFuKCrqS2FT80d46\nwe1eEU4dGklMJtOKNfCS4M76ThKJEth62EbY9WC44iqnxlHth6rE3JSpoEyH\nw/i8\r\n=2wvy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGpNbnmI8hivNSVUmsdxf53k7xeOxo94m4hkJCXRTc9gIhAL+s1DzE1GGh6gFGQGUTCJS+3QXoubc3Pbspdz1nNR8+"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.2-next-1590770536-04047cfc.0_1590770593366_0.20636236297053756"},"_hasShrinkwrap":false},"1.29.1":{"name":"@xdn/core","version":"1.29.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.1","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Shi6HbGjJy5Kop2+BeETGm5HE1n2mjQuPGtWCSFAPPO+nZEyCVs6FsWQCzNY8ONgu5L99XrO2Ncyt0r5o32kpg==","shasum":"fa7710e55630ec604e6b978000f3d203caf975f9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.1.tgz","fileCount":127,"unpackedSize":517394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0TynCRA9TVsSAnZWagAAxkAP+wV6asniLvATF8AjLQCv\nAJD+2a3gqxxtJGWwXuwbr1yse90baqo5msELmhGOfdTX0L2Y5mHIo8oErZmG\n3z3SElx6KR2BPhEtKnR/c7p1QlqhOVW02dy19kVL/HGt72NYq1kIYip7Gt+J\nhI/Uvu3u/FHrW9rYardbZuKN9aziSyfAGzVdvZEJ4Ulb3HjC427xcPw5VTJC\n7YX9HPvBiuFAsZAg2T6HoCeCvG//7TpB9bG29vkHZ2O3PmxXcKRQz1aAzw9K\nCdjb9qpG1GhNilfWhxoY/lv1D8vZwaF0kNTH54RpWgSp0fRxNHMad8/csQMl\n3unJUsIzYkMd6mClSPqX++VI5b62Aas3WKa9lXuidi8GvZoYxaWz3GvibrGO\numE6/KVOpNQiuilSBlN6z5ydjiuK0DXefczRiALheEoiaCB6xg0fRPQsb+jt\nKazeqbZf3bUXT5mmHeEZxsePZnYNoWLYzqzDL382pjfGWOmXzd2yffS9Mnf0\n5tAg+rzQUvp3z3f2eaCfXk5NRYHJbKY9OSbSlNhuKF9oSDwJ0XAd0nQ8+JO+\n9MzcPbtKUq/zhzlI8MorWOn+THXK95IdlXEEQQf6W/dP11iCFZcjc665v7lI\nlCqRAZeeFbytL6RWZ4IhalkDLQIHpvgBpX7KOWsUmNoQmeXdz98ZTgbC2QsS\nDnkv\r\n=mCxP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBInmSoxbLWIXsNOX4Ii9LPnm8Qq8Oes9gy3SkTpAZv3AiEAv/8ZBYEpMf85brb7NKbyN3jXCPJ534MVis5OUTT3IKE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.1_1590770855069_0.13109761997190406"},"_hasShrinkwrap":false},"1.30.0-alpha.0":{"name":"@xdn/core","version":"1.30.0-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.0-alpha.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-i0G/PAdHU/gCRzhwMGTew73mXeZ5EcTLvp7RtN1ADMRjb0J+RLKJZSjzSNiFNdeetFBlbntndrcOlxz7mW4vmQ==","shasum":"349938dbcacb19dba0119f79b4d05565d3c0f345","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.0-alpha.0.tgz","fileCount":127,"unpackedSize":517410,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0ssLCRA9TVsSAnZWagAA7PAP/ieWpjTokan4bH0qwAp0\nYc7XenphuTx1/k2VR9KMiy/WSMIFmp1pJBcY9Ce/GcnT60IKot/7tGzeRrZf\nfjBPedKBikMNNcOkF//VcthiSnBrlOeH+MKfAndYuj8fKf8LZPUa8+hkTh45\nAfjN3GgmnNDn+XifPm5xlBTdoTgqHP80KX7jGdUNevTjyUuo37cn6/4p+shR\nFUtYhTO+WeQUdNvoludn/QFbaudY8OwGhD/WTmn2NlI50CgEf5xNj1yG73pb\n3KUgGzk+RmQj0zIiSo1SFKSLdxfeg4AfytFzq47yoeNDoFg56QrVXHQkdBmQ\nf5LbWjYb1Jnm3BgXyLNIzCXyu4zlF7CWIpMQPtiGta/uP8l6iY1y89dsZwlY\na+jAWm6BJaMuXSCgq8aQZZ/SK0MnGDF2XcD0DA6QNshdfYWLZHGPTuu6zwr+\nlSZ3JratbyhnOh4ToKreclqtivwA1OvEAdXMBQ0PEPKeDVKb84VCBsb0BlN3\n2sj7SP/z0ECC4aHdbbDgKnZNS7VHvu5z7GPzAvmfJsyKGpwXI4PUyV4xrS/Y\nEKH5EdTWbzcbZKB8JdSikPYE6teB4of/NjLbrgMfychH5fQQa9uQ9IiT2KAa\n80ZW2Pv2QwyiYSfhWciUMZGiO5cbzshikyoiZN3OruSOxNEXIZYwZgvBE5Ug\nP3di\r\n=C8DC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWjoquvzhqhVz9i36SResmXqE7U5sDXCVCmExnOR/AkAiEAoURBLwFw2dx5ynXex+5geF9FQ/bCCLoT6KkERa6oG4A="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.0-alpha.0_1590872843291_0.36189346469137407"},"_hasShrinkwrap":false},"1.29.2-next-1591044917-93126d54.0":{"name":"@xdn/core","version":"1.29.2-next-1591044917-93126d54.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.2-next-1591044917-93126d54.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-lbv+H9nibyUfKhZGyqBBD7R7Kj7BIjelOM0bxYgwAUkwTrO6CIAvcAqxGpWc00G5Zau76K89DEr4tLrAk/ZCIg==","shasum":"a238b3bc978d6096be26310aac73059b51a38265","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.2-next-1591044917-93126d54.0.tgz","fileCount":127,"unpackedSize":517448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1WtoCRA9TVsSAnZWagAA7CMP+QFZR4ghsRaIcWEcohxp\n/ItkoNfFNCdhZM+00/jp33HQEw2wtkU6q9v+3VQmccZiqY6b6sdlS4uT6hqn\naRLHmz98M7ozsCvAgvEkR8VPKJidcXilAzibQV//kE5wZkDgGVJAAmgobnq6\nGNChg0M+C3k+jIJPgXLVp2LCiJq2z0oFT2DMlm3J2q5jvSvanMe7qhtBMfDp\nTKJWcbw1FfLfxpYKfQwnm9XqJ34831UrRVLwD9G5Mzxkms/xRSpIaxVpUqFf\nTUKjbHCi+vChcL2P1iKIN7Hv2quig9CyBP5wZPDI24cQw76uqABCWGSRkA/e\nIrK4+winFC5HkZZDvafgqDX0vW1OqZ6QEuBbMKbEVbSivgMe2vRXrLJkliuX\nYn/6JDYTsRpe5XpQbYsYytYLogd7qKXHIWc8nn9EojmiRdXTpRHBDUt9F5UQ\nVBR/Uvlq607IIw705s0oAZrkB4MfiaiivhVorNMcBW9FIjt5P68TvSakOtWF\n43urw2I7mYSdlHwRkH/ptzXc+JXUd9nddiRxCv7oY4BW2xQWqisBImlYdCEO\no/6MeJlVbgi+gFAz6KRFE28KEsnOUXlUiz9wAPywY7RumbOF36mTfdlwXuTP\n+urj0aLcoD6B/Xcll2O3zvAxAi1GoK6MHWL0LspQtt09rqoQAqEF5IYalAhT\ndRub\r\n=HlYh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEUewWGSwavZ+K/ZP/6CyMSx02w8nDQwATVffl/JxqnSAiBonyo65lHYdaTuBtDVe4NXFdmLUKUUgpjyWwFybYYXZA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.2-next-1591044917-93126d54.0_1591044967781_0.26804145124819057"},"_hasShrinkwrap":false},"1.29.2-next-1591044990-d74e8653.0":{"name":"@xdn/core","version":"1.29.2-next-1591044990-d74e8653.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.2-next-1591044990-d74e8653.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-6ks8AfTyHphFkMtbsLP2ZpQQKFfZNbNaL+2WK4TaLKt3XcojtXopMFt70NgBfcPY1PBYSjFdIvMAvNeKB8HhWQ==","shasum":"06961789732985c52e60101dc2d5de3b53427610","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.2-next-1591044990-d74e8653.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1Wu4CRA9TVsSAnZWagAAwIQP/RaULQmQ7QKJumAQVqSu\n0EqQ6DfRWTcRfpL+WBI19YAf4EvWyQwnTmXDKau+jkIoLyQTWsCDd3Azk5Bz\nvCfUIcM2TYXwGXZy1/OKjRBFoodtsnHSvu70WwDAaIfoAM8y6u1TWc/vImHC\nr9W7dXjzZqkH7idqxTNu1LvDr6vBHtlyewr22nHV6I4xdEZm07HwZReW00zx\nVzuka1iCU60KZ9Yl6rxSamQxeZdsr4MlSORRCfj16XEBL0kxZbDtP6Dnt5HR\nL6jRWSF6SafipfZ7uMHjvenUjYf6VW6VBMXmpzFse6kOfG/oajUIrb+EP9FU\nYfRpvEW7fdBHu/bf3QASmgLZaEs2lrOSfBhtYJdw635HwofnGBFTc/J9uLYm\nfvLUVLNzJQy2h+yZTRSg9mvIvOw3X2A+zQ+5Rn9sHXutYOIy3e4sqNTNMxpG\nLtVAE4l9QfX8gkci0BcHXMrdWgzVNBFcGlxP+10wJ8pSGVy8RUNJtGI6lECY\npaDaCfzjsgDFRvmn+QPlT3eH25TsSzEloDCgPY7wFWcz850LOYvbWTokRgxB\nAvhh7uzVuyu526QadQjebhjpqE+CG50bd6ICEHVbNhBroWPKQyWdD5qcvIfz\n1KTRAzgBOIhcD0+DM0ZvdRMygz9MZ37B0XDgsHEjBx94e8Y9lrQ506Gy41aV\nYlW/\r\n=xt9D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC04Bt98JLU+jp5HLS0nzCF9mis50a8SFvhZeS4uTLmsAIgOp73baBboXKzhIrSr7wQsxEqreP3TfUWWD1dK9/TSMc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.2-next-1591044990-d74e8653.0_1591045047661_0.117515689469319"},"_hasShrinkwrap":false},"1.29.3-next-1591045435-55b9958b.0":{"name":"@xdn/core","version":"1.29.3-next-1591045435-55b9958b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.3-next-1591045435-55b9958b.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-oWhHCx3CyW2EU4C3n4FCwUUSM7T92XrFlbOWYuPOzvqMzkUvTrpg/bSGqTzUpEpLJum+e8DmvC38wx5J38Gtcg==","shasum":"ee4697874aae4e0f4b7a804f40c3904ec7a1d0ef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.3-next-1591045435-55b9958b.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1W1wCRA9TVsSAnZWagAAwcIQAKAnqMOqKTkZ+zIH3BxA\nuahAYimrHairzmChixL8jFqN9g8lPCq8fWJR5NXYLckv+WxDvwR0BFOCl5oj\n5QLfnYw+QbUJZnwdRlpXwrTyFri+nObrisdiACmUbHPjJXtTgo5apKP56HHc\nhlR8454rgdIeLVj2k/Rj/k8t7WsOpxDM7iZymx+PJGyJHMx2p34MPzkgmcvw\n5tXg4WmQZm7P1EN72Lnu+5hRVuKh2XWvM6XM6DvkcsjwxGHmytJ/MFTvMMlQ\nzz0H+C0HXXefoDhcAUHQS9kDmldMTwNH9eTvfsdC3y22vIyziuJL6BWWByOb\nIfgu4qWqKfZL0z+gj0ynp4XY8LpHPDMlXJPcjCClgxgPsxkzpZ+kUfoMGq3m\nvrv6ZZk50wIkCL3TuVBhj0eUqprEkeGD1YCmG2WCgz8wy4EApDOzklU3Fn3k\nrVsU7PpqvRRWuC4XrLaohksrpBALo+w3KBt0c39lr6GSJbx8o8C9L8l10htH\ni9wbqCuY6nNGW5Kvd15QkayFiQs97wbntLuSIVCHUzvi2y85f505Et7w7kai\nyNYUHbfcJ+zLmTAaZxuvWaN4fGZ5PACOoKPJIvk4NvU19qSaatceFFlGoAwO\nTf89X5oGsBMuiiUpn/WVPUg+35jNPboVLv8WqKBdLHu/r6QRFWhJac2iDQnk\nDWoF\r\n=eIpB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHIUKnKhwI6J+dYVGYyBm9D9K5f389pgVBqcfBaq2IcoAiEAuSwXVPrk/i1Gn7BaYxG+wlqfcCiv8BLQldXfXt32L4E="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.3-next-1591045435-55b9958b.0_1591045488265_0.1728071531481905"},"_hasShrinkwrap":false},"1.29.3-next-1591046165-cdd6f1cb.0":{"name":"@xdn/core","version":"1.29.3-next-1591046165-cdd6f1cb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.3-next-1591046165-cdd6f1cb.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ESw4U/800M3k6dmW6FojodlPTP1qSbLbarLpqJsVyIncS7y6MU+FTkR3eieE1xIbpuhIP4lT6avonemICw1a3g==","shasum":"b2c40383d4600d215aa3f4d280a2033d10d57cfd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.3-next-1591046165-cdd6f1cb.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1XBPCRA9TVsSAnZWagAArFUP/3k0SOdlMWs4vC5YSRr9\nXIzSZPhdEuwRJBCcBijSOVO+AA+q/vsZ5Hmy1Ib2A+jG3GgLPJkrbpTAGsMN\nIeteIpW6LETlPBivBWGukn+HVXUt6wSe1hVtvHeboCxXUzSkcVfEvPRTga8e\nDNK0gxKavZH3fU1zq849NwLVjzxDAnGp5pxZhusgVUTQmFhWqiHpOdpbUrpI\nGkE8IFsj4/cOaXrKN0nVOFsZSeLnffxfhPFBaPJ28gbTghLZnxmjBoVQSwjQ\nyAMpP3QzLr5cLGeDw1yiuUNm3tWIWfr006HVo6r0wsWojVRzrGqc3XtvGprj\ncVypVXeZy2amHv9KPCMeCIMBabEadT7MPK4ISVNKxCzo89ocwhGy210zCSx8\nigZkTUz5UbohRiXB2E9nK93xayoCg4mq8b+px4r5x5Kfy8+P3gzW+O8l/hUy\nsXwiaeHYYAYOIFxBXvLyldeIFsng+hdTdIL/z46o83dR3nsXKplxpQcXhRFX\nlYwFC4nx0ebx8F+FCTC98YTYBXIp8qE15yGtzPZrV1/axUFmpBhqtw5O52x/\nOrz8tG/itBhJPlvXw2KptSoCvSquHlJ3SjKC278hHjQg6pzECrwRZFF1HhMW\ndNBGocRgXtJ0D/uP4DZDMUXTHMuwjzkg5/nvdVi0Ms/5SYXs7VuB4W2LOBYc\nTIVe\r\n=wRmt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICKK+MYInuTdwUs+g/NG34U8VumzANEpaG/vhuIDhZ9rAiEArAQcSbChjcSOLQd8fgWP5gPyf07fSngVFtF1/cEPhm4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.3-next-1591046165-cdd6f1cb.0_1591046222512_0.1267968315457162"},"_hasShrinkwrap":false},"1.29.2":{"name":"@xdn/core","version":"1.29.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-5P3gbl1SkNSrZn6u4mcN1ZPKbApj/yH1OSKa59OLAskK3rVwiTeSkrxm0QKt+zXihkzdPUz/QS7oAVG8X+Tk5A==","shasum":"46238eb34215948c2571d9fe8998eee8239d4f09","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.2.tgz","fileCount":127,"unpackedSize":516434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1XCuCRA9TVsSAnZWagAA2IUQAIWAv37qSGIMMt7ZP0ld\n6tFaLjzOQ10pASKW+kSNIwSTD7b6xqGPk5HoFTN6SB7OsbASpH/zodSpgtkD\nUDGOgSVUTf0uru3xakoTuyMPQ+VhdaxHgIJzdoatASmi6f7ODurveKEh77zY\nqKxfPn7wU+u2D0hSsvs836SXrxM9G+E7uJs1dMMDtIYhMs4OAiwhyaQkK8vl\ncv38L6i22v6JAwXxQ/6Qhe+5bXHUlWWeNiZSQ70cwr8ixcn6fR3ND96RWUGi\nkddWqGoiG+kIIYFlyaTCcChhUz/nXc/woC/o//oB6z/p/P0egmlhiy6FovQe\n+AwXQeVu2FjEgDZzcDBJ2kkrPUSzCg3nIvobHuxfGCcio7SG223TVJLVNmaZ\n6K3QPPewtB71d5+Ztho20yp4EEjBMe2dnuHUS951OyJnlrAOykAybbegyVXb\nxkKgRX3l9lmX3WiG2noRLbKuIN8GL6D2yfPLWX+iqi1WZJ08OSGwWqAgtSod\nsvxo0UMatyEsvZl3PQREmLTyNh2juDUrZ2CBx7OskGD3kOagySxbbBTeyHaU\nHIP6o0Sw2/AjxoG2G5Wr0k4qm3B/kK88CmaW+AB8vdqYBKw/7OeLzA3Uqxgo\nFrUe29wFzRen7TcDpXJFr3/NiFELX0dbiZOkpIGDY+8a6j6CU2JfLMv6NY5O\na55g\r\n=j6j3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAUjY2wlidwJZoixj/Vnk/JBxjYwE1D4DTX4g9umMHPgAiAXggdHEsqUL1BhSS7YqGJjifDsYlTYth/cyL3fOPSrRQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.2_1591046317729_0.5150578855568297"},"_hasShrinkwrap":false},"1.29.3-next-1591100487-18281a77.0":{"name":"@xdn/core","version":"1.29.3-next-1591100487-18281a77.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.3-next-1591100487-18281a77.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-64ZHYTHGEafzHGlT0cxFBS1CGdah2yworn+I/aTIzo0M8PRV3vzLokrXgPti6ztKEfgzpgtdN0WFhwmA4hGblw==","shasum":"4a766d9b564a7b9e921dba9711f281ca46df4aa5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.3-next-1591100487-18281a77.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1kR9CRA9TVsSAnZWagAA4EMQAIDLjHs3ech2b3DZDguZ\nudCu+e5j+WG9KoKnyerHp/czbZyobZzf9gQHXJnBW7FcDhTSmYuH3niwme0z\nMNj5sj1yBpAQgqGj4uc6Ak7Pa3LTNWLkwUNekKs9f4t6LiwE/0/KXvnZtcRO\noAPZHa7gqI1TODk5HMCJv7Xhm1QcxNev4oz/FNaWrPCZamPI8y7HmNhMe3B1\niZp/qZgwJxvJzRGxyK7PtoOmT+ZMVg5/IIUhmD8nKIe4CfRA3IdDZUrH/TPh\nwbjRqLE5GlfbCzxdfSmU/IEbTO0VNIxTBniB9oNpYMzm1c8rr9Y8mhXpL5hM\nVeNO/Orjdg8SHO3jaAzMqZeV8rLS7BgS96rLiXKU47Bfe/Nihd7g4VFmkZRh\nsnkCg1S5Jt9zozZ2+i7u5HadTck+Ng/4GdIgARSGvcCA3a4d7mgCh1r44Yis\n+MjVClEkwmzlisC8yDhwwY/DMVwE1huq3GIf/ch+v85G/j+a0LoVt7I+iUrb\nP+EVk8tchUlVX8fhSFsgJyGQx8VS3t2Jao7oP/yGMCMUORwhvk+G2QPmS067\nUNx4dfq+8lDTOfKTDGzh8ZFW1UrQNgZGbSDdo9StBgG65Pf5l6Q7UWK2Cw6b\n49jlPfbhGXZh9NWVfjc4wxTe3QL3j6TxGYILvxZXJmy9VwYO7MhvDJ5QG9DU\nnNL7\r\n=GuLx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICtk8U2BjYrh+j6uaGqbGEEQG8VR4/gMHP7ZvmzIaLRYAiANeVUz8JLvaGEHGcy7I7fDGkKjZQOH0p7qu79L/nt+jg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.3-next-1591100487-18281a77.0_1591100539697_0.6066307572898997"},"_hasShrinkwrap":false},"1.29.3-next-1591111600-fbb740aa.0":{"name":"@xdn/core","version":"1.29.3-next-1591111600-fbb740aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.3-next-1591111600-fbb740aa.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-UTaD/S/oa9K6T/hMP7Vc9uICn6qyyZBELYnI+AiRbxl50EeVe0nRXJQcZFpTFTQJHXpnF/NgOAc925EBIQou5Q==","shasum":"56b37b096db8de96a700027626057c302be594bd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.3-next-1591111600-fbb740aa.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1m/lCRA9TVsSAnZWagAAy6UQAIsmldjr8Obc9Vk2x0np\ncp+1VEqhBk2jrhG0+a+q92eZ9VO8Ayq2UTAG8qQmoJwD7K6+jY4Av+WdIaJM\nm53+6nxo4KV4K0bC01j+RlImz8IGcBI50xZjqRhC5LKU4yDUnjXvES9I0ZUT\nbov0CyoYsZp7BYFcz3qzw0JsiSYkjKZoHYn87cAL9xI62JTaUcZxDnHWYTPm\nqOZQC5nrvdBvozMxdXOGIxbCDJpECFi599oZ500sRP7PWzB+UNmEGt6e/4yT\nKES2x6vys9f85K9V2KwkzD4vhEz60qTocCR56cUMK+9NpFeLM845bjQMx27F\nW89BUnaccqjwexmG7uz1lmvftuHE/7/fz653SWUWxnAgDogMKNeCS9ul0I1b\ne9j9/PyJRaZjgzJhWrsfps0n8rO43Hpi4zFlsyih3zQ6SFOft5OzCES4Yn+x\n2p5wL6LILI2uhvNCl6PqbLp0FufzjLKXHWQO0giFSFZNSZPRez906iojgsc2\nNZ9maklUdtiHszYvK8d7Ibru3NNwfYzIy90YgXWBobyplCFole8/zFwmuhOv\nCDLiLfI1SzesO6ks/CmO8aR0HFTe6SCSsVW+LulPflMyNxpb661/9saY8614\nC8OU6jhedAujV8oWlE7wJiv/ve3ETGvuupFPpH+gj5Otc8glYjNnJ4dQheWs\npSO5\r\n=rMpl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+kBVkdmydbzotXxHkhjJmpFl+RcGX6JX45+7N9V176gIhAIgyyS91nCShdj2yZUyvFd02zc3h8E53ETOLyhBUN3KR"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.3-next-1591111600-fbb740aa.0_1591111653272_0.6877979369214928"},"_hasShrinkwrap":false},"1.29.3-next-1591113492-9f6a12ba.0":{"name":"@xdn/core","version":"1.29.3-next-1591113492-9f6a12ba.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.3-next-1591113492-9f6a12ba.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-iWLT8MhbcjfJfHHIRh3xSYnm5aJzppbjr7p2mEk+4WEzLI61WLyL75cxeRrX2yasvhuZ5+3XmjRUUB5mzawDtQ==","shasum":"48969b57f7259390eeb9baf60411b323b96c922e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.3-next-1591113492-9f6a12ba.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1ndJCRA9TVsSAnZWagAAKLIP/RvK3Sz1teqKaa+LiIDx\nhVGX4h3R+ZgofibRj+OaePvUBu8Hp+R+P20K7rmQOK7aOh51XhSqH/b01pN6\n/3rWiEoJfhuIKQ7mqA8VXyZq5tScVXlF15eHOwoJ2L0MWqlyUFRagwYVP1sD\n54fT2oI1+CkXGRIm+UQXLOW4YkF05VFlhmpYw2XTiFijntuM5uDcKWJ2nlKy\nTHwVZYPa3fty8nWQ2WVvNTrEPMwnEqir+SG2x+btmCtiH6vls6u1NalR5hcr\noWgpLSHRhGCHUaGEqIOXToVu2sVErKdR9f9Ue1ycjUpeP3JQwNfIPC/d5bp1\n61ukbg+Qubmb5oUSImeyeD/kKOA9dmtElg77pB8QjYnYxvFzmtuxL6+Pvb4m\nI4gwgd95EpHF8170M7SuPw+vERknrx+MVWyo+IttN1wdVydCZ3lNELmbN9tb\nXsrJVSXHieWMwj8RGaPVD746L/ZPYkAHXBC2Se30udmiFTFPM4p3ZFRWPAHH\n6rPyNML88Mmwjd3uSUDpVHvT/T4EtwwlSFEzyTYRgdJXsCE0xiMdOanhudeg\n/HZjygfgMFTeaWnoQ9IjzsiGR+JmrKi3f9zn3qfE/YUTjkywYqlsDo3q7P9I\nco7Q+xYToaO5WjP8fXF4xpi9EebXuBGTfT7a4qsb6s1s0exhwggCRNlJe0VD\natRS\r\n=INKJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyNNi0i0TbQR3ygJWQU8j70GjdczHp6+PmfbV3YsdMjAIgDv93Pw3RHrNtgcsVXkE6JDXv8pTbHcB1REr7przy5Ww="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.3-next-1591113492-9f6a12ba.0_1591113544645_0.354389552054692"},"_hasShrinkwrap":false},"1.29.4-next-1591113534-9b6909f6.0":{"name":"@xdn/core","version":"1.29.4-next-1591113534-9b6909f6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.4-next-1591113534-9b6909f6.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-6zeGFV2ijvox7avz0ah7WO04b0FFtjJ6SEhlnymHNjTNx6b9fFT8ubBU5ty+c4FK9jh8/B8UErHZUX1s06XWyQ==","shasum":"1a65f5eea56a104a753c81b9468852eba91947f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.4-next-1591113534-9b6909f6.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1nd4CRA9TVsSAnZWagAA/5oP/ilIDQcLIdzt9WyMPjir\nqpDtz6Vz+N4Oqswfl6xWQQe8h04qn0YsHSWx8qPia5gS59sZq7MNjyYRXSQ9\nb/ErQ9j7dXtAH7YOt7Y3CvYa27zxmfBiT+CaSq/p4xx+RK2/TAQzyHwJ0Ere\n9aHvbXptVtt16twrgD58mEPozPnvoA1A1lW8Zau0pUgDwPjWsA2i0Hw7IOCP\n5AiQ5RZJtIRWeCqTHvjGo9fJYZrE1nMTdY/01dZd6kPwWaNRg79OtpAMSYnc\nrZdqrjv0OIgUFdIbovxeya2ZtL6t/T5PlvRd+h4er0GVxUDAJGcX8vZgUoUY\nowNyqFqhVBZSs/P6rKFQCo4oorjZEfpstJgzEmJVH0Lts/uhcR0kORFoYxdq\nqQVwp1vRssBo0m5YQmgdQgTXuDyAGRiWxVQa22MyHDAejcLolNnLZLDsiYZs\nBWN6cKgywf6w2r8Kan+HDNy1VUPqJYTDHBuDOK/PE833T0JkBtr5uGfu8N3h\nFSzO/n1BdU39BZcRaTqVd1UOjeC4v+xZlkZ1g93nEeBRSoWkXBYxFBJXXMD/\n8QQyoubmk4TYk6KU+3/Mvbo9wFc5pxh6i+sxGGqkXm/rGF2Cwso7cA+FCaiH\nOxc+jb4P9rjInKPZ1JYhUftVNG9TURRvg/rMlZEgbgOwbyojkLy5hvI2PuE9\nN3S6\r\n=VkdM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCX/tmoB6CWZQ+IiJ8piNMME0q+aq+RPRvOVGeJmd7VMAIgfNB3YRb3Me4wXMbqaa6l0xupGJfet+jzccciovBqkys="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.4-next-1591113534-9b6909f6.0_1591113592103_0.23515166942232613"},"_hasShrinkwrap":false},"1.29.3":{"name":"@xdn/core","version":"1.29.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.3","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-DuTvQ7LjGw37AXwSwhHZw79ElghTmnfaaQ2GC6ArDe6Iic4vGLeIwClraJndRfQ5vE9/zVKjOD4lgtcUQGAQAQ==","shasum":"186f85d71959bffa991acaa22311d3ac55608023","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.3.tgz","fileCount":127,"unpackedSize":516434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1nkMCRA9TVsSAnZWagAAYfkQAIM+oOo3t91FBVrnY/bv\n5Na/T+B4uOpFxdX4aaR7jkMZm7R6DnYTMSJaReKjxYJuNqtsToKeS2BXaCRf\nodwfF+B/pKy2GNufqFC1CF2DO/f8pqjmM99kjNagQcLWGgBIeG9TXQFiiI0V\nmMSSqcp5Fc8TEexlQwVzYsGaoDGjqVROmK/1jHbJyCtqZ7gf/eJ33nL1bzVj\ngqPPlhQ7+5MKaCNUA07DsNpeEFdgkbEmLzbsljK9YgioyNTH624jB/srRLg8\nfD35kdWl/0jFJdlFxpI8PhYXNiUb5EYWMpkapB3tU1yPDxePSYGytriaI5Wl\npJf+//MZLCXMz2ykwUfbT5JiYLr6AqQDjJh+ECw6or3TalGB2GMW+nJeLQ83\nB6ut4Adt1PkdHOPVnEgsgwT+P/RcPoyRemwKM90yUTVeU62Pcbw6FTmo/x++\nIIBNIZO7lj2JP0Ol0vos6xTVwnUPL6i8Fyttho+bL/x9oBliWrFgyrlyRt7D\nAmIFcWJY2ZFAcWXyjtQ98sZbtN+9pjAQR31W89Gj+Q2BTpcrLiqF8YCj34ep\nSfhh37IOnKR0iJt1XX0va1NQVqygbo51u8tzz5o3pQw2qK8tC4poR5a+eFA/\nYFkaBTx5nZRldWii+xsb9iOXMiXdP/vVqnASeAx/dGv67ov69z2H1XAwUnot\nOk7B\r\n=gHIS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH1uYoYMoEVzhq9OYWz1NT2eV606xMFr0Cpf7RkagQ1MAiA9d0AOuLfHrNPDz1ZlqBb0nwfM7FW3EjrHmKlQAb91uw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.3_1591113995666_0.5465721433342878"},"_hasShrinkwrap":false},"1.29.4-next-1591114215-1efef392.0":{"name":"@xdn/core","version":"1.29.4-next-1591114215-1efef392.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.29.4-next-1591114215-1efef392.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-6b9fb5sdfygrnVGwHQU4GjinnFWVyArgQAc2HR4nJEGDCtdx24UPDtQgPRajQfv7GnDdNHlmvHFZ7DxgkyWUbw==","shasum":"bbfece7f06346affcb296e02f31caa4395f3c7ee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.29.4-next-1591114215-1efef392.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1noZCRA9TVsSAnZWagAAfhEQAINVqWfeM9H9G4h/pPvc\njL2T4aMRnaFT4yK9760Xtrp0xYVkVKuee58whg+El/R+C+9Ax3L2HRDz/1VB\nK7DfZ/07x88U+fltQgaKvnc8Uavbyb/NAjSDur7D/VWD/exIG73PG1uY/zGR\nF4c+FnnivThX51fUNlhP9rVRkda7U+N/AMxN3ghaEqbpbFZf5P31FFcJAVme\nOaazMtSzcKjsU2NWEO/DoNi9b/nHtmW+8hhWyhaww1LfCcTsLgP8dMk4wmRT\nydNiq1EZx5akNuMw/Kq8SgEXLpTjxfcYeJ7pAT1DzTE3RkA9Boe1lYKlK7Iz\nBjgt8Dp3ND0mpkoxM1iPD6Fhs3evIJFFmYwx3AqcsQ1bW83H4zjeaSJhP0/Z\naKW+DU0ibjJGuF5ILxZhR002ou1Qs3ZiiggqSlPFFcG2Vu7CCEMjhlxW8DC3\nVJgZK2ihQVoU/mnt/MOMR/oY4mgUsjAdApc8SkbdAeHj6IbpU65X6FSqeyVJ\nwdDQrUay3DWESuO7AzfzhnSs7IrVR37f8Fyjk1y9qseW9xdT22JcgwCUimTX\nl8pFNfDex5n7eDKbA5nnl/zDbNa721hR/On92UhqQ56yLByF7JkjSCVCh9zi\n5NW24Au6SW/PC+t6UlyCPCAeoRQWMXcT+c1UruSoPwhx/Dtcspds5fdVFn4x\n1Bzp\r\n=tSdZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCndVQunsrTIJ++xmNya9uQNUBIv530iP/Wdws+gJcr6AIgerd9ihTJzS3R+KgXLd21d0MmDSOICDb05/H2GJtfp9c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.29.4-next-1591114215-1efef392.0_1591114265030_0.6920191840690637"},"_hasShrinkwrap":false},"1.30.1-next-1591114463-c3a3f4ce.0":{"name":"@xdn/core","version":"1.30.1-next-1591114463-c3a3f4ce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.1-next-1591114463-c3a3f4ce.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-DzMMxuP3/bq6ENK5X3zfGoWfNbTZpqkayxuHlUu2trgz85jGcoQGw/snF+ZURWonl8t8XRis6S/O1ZGlFxr6NQ==","shasum":"47cf61bfafce9ba41413047478375629d5f3c52a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.1-next-1591114463-c3a3f4ce.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1nsRCRA9TVsSAnZWagAApDIP/3oVMpwDoLI8PKU8clOL\nr2gksi4+zaaC6V7ZQr14bXNFLby6MWfzTEG1ZetiDMFaU4jxHhtjNtEexzGk\nZ2xe+WmLjanSl+lOk4mkjhNOr8Vr7sutfj2hMO4T0SPpvDOASWXIG4RGxqfk\niwXjXHupFSxsFr7C76LDrn7iRTyzwMti8KMLkb3hw5JkXKK2lksO5/4dhfBN\nY7owKOVywDthF+pDaJcacLBLnYs+JPbb7QKPRszHejPrVedfq5c1ozDJzK4h\nV5erFcULm04910CWhkVC9nl5uROOazABmyPI7Q8pzkBxKVQ4bBhCUvJZJdKg\nwoaK90NKTVI5KnO++QZa7XcilGBsHWbhPMTHtkXKNjToxYUYHvJTN5zmpDgI\nOJ2iVMX00dbyYTcUDf6S/gh4F1j3g7QH6nFPQgqU7KlwPTvGU5GDzQ8j44gv\nRzBdBjrguyY75n9exwyaAW/UTi7e2qVe/0cNSO4Vl92e0mJBe+j7q6ZuyoBz\nPR/WVhSQ2c8RAUPY4QCvDBAm8o7G8U+m8y1L7k69ARq1OFK8DFfRId5EcU3x\njXgsKqfpxqmN88/lj+W9Dzv/ply28f98OXq6oAsVeNHcmF79CuSH8JkzIXAz\nTp+WaiQ+Y0fFGMa5dHCvPu8qxVKOv3kCwBYhB+YZcwSSGHfQHwBNwSrDg9pp\nH3bm\r\n=ZYWI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFF+CWX6HCIJIat/qhcvfYJ9z+bRD0XKZZMqTtMpdCpeAiA5onVp5eh5swXPkZFd+iHO7XTABGNiyMgtti3QUJkEDQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.1-next-1591114463-c3a3f4ce.0_1591114513194_0.3304459827693289"},"_hasShrinkwrap":false},"1.30.0":{"name":"@xdn/core","version":"1.30.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-5a9+fxXBeIMyPeObM232M69UkkY1FMxcL3V4P8Zjd5SD8vybXWm0xStkI+ljTjoCBqunRoUkbQa0KayZo5ylDA==","shasum":"6475cb3272a1a271fd76abbedd9a3bcdf747942a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.0.tgz","fileCount":127,"unpackedSize":516434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1nw4CRA9TVsSAnZWagAANLgP/jPGgNRXAXL/lwZO1SWt\nam9+t6qyzie7FDOOCB80cLEBVG0WunUgH5mz33CLAjssEDwwULvmcLRCbIfL\nOZm65tiZ5h9W1+h3E/IyIZ4yrMQ1UkoB9qLFSWWLcCXoMgx3nAJgCb1D8UWv\nWBhTXdEGgjO5sKDSZ5a5zlX96XnOTms8ago86sIptY88swunAQeY9As1bwFW\niXfueeID70m8nYUq5kj2JN0Ymcf6RAsPREGkWNaw/UySGmC2qpQ2aLIq0v0i\nQjPyviVXSd4mqPCSo9VWJKVEEipg4+EURbng4jM6v1AdmUay0wssWs7g+Mwr\nbqk1pkadmOjA9BMCjaykII4+SDiUwMSs6lRV2BItDZRdg53MMCp7wmuu4FbZ\nSAD/1DHTSYv0NGX+Hia9dedS9wNAaFPOCMZVZnHacrwls/kVBGPNXggnMWQB\n0l3iHBNjLlPcezGUB/+Nsiy2FlxylFfSnPypqDHhx8Xr8jB9V8eg7+KdKUg7\nIDN+BS2eGPeMruLzxzAFjU1gOQGkUJpN2WlzUt0DMCR8Cisk8nC2o2gUe/FX\n4rLAtyeD1JAx1hJKZdCP+xDdCtIjL8aBc1HqxmQuxFebCRxjRHsaTSReIYe0\nLB3GYAJhMaLvSOcN5vTnFTf/DevYNLSbkw/g9QnJ27Tu6JOiKn3HgkmZ/N4Y\na+44\r\n=b46K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFgY/DZR/COBydE7se5RZrMzRIMi4XZ3d3jo4FqJx8i1AiEA2HyTKBvNwqVhFTfcfIK9Fu2P+sRjNlkty10nFaHl0L4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.0_1591114808402_0.557390264204142"},"_hasShrinkwrap":false},"1.30.1-next-1591123259-bc695512.0":{"name":"@xdn/core","version":"1.30.1-next-1591123259-bc695512.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.1-next-1591123259-bc695512.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-u7vzqRVJtwCNhgDbv4FQwqrB86q8dlZTETZd8SdGj9HUP+rX1PU97DHPVyVRs9+cKez3r67fJpqJNyIYgGxa2w==","shasum":"0a8adc5bedd482ea32125bbcf43bf118c2656680","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.1-next-1591123259-bc695512.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1p1vCRA9TVsSAnZWagAA0JoP/RsR5lVrqqFs6xD7dgmk\nWl0o2GSngRPJiFmKnK81XPbaX4XudHRRYQ60p+QQpyS3S8doI/fWPu+TziN5\ntsND5rFSyzbTs1Ebgg0eymY/0oA+VgFKiDMq4R07dmRyQqduHpKQRMpW7JSR\noAROTX5/p6KKBCWLE04J5kp6kz5UY0t6BeRUUyFqkQXnBy3wZV/0wg7ubVLh\nhFEoilDv2u5hqoZ0DCXZAnSm0F0f9cL6QrSvpWzrHxxdhfrbrNwDvV6HnDFG\nqD9o+GKSrFj2hEo/9hF3j1l9RBwN/A7iEnSoTc2xXiTiN0gJ/CXS649CchMj\nj+aI305RgSvelRj/s83t7OBn8T+3xpgtrEUBeFwu+pcE8k5h92/QM+TWc9W7\nG1qUiDywfZDZalpVDFrlvQR65vzCfiq+H+MwD3YKrle6EPmjj49HuOdt9kEZ\nO3xjCCHU+TfJMgUGNJKj6ufwkyuYd0lHoxZYcQ4WyTPJ+vS39fzTGHwvFQis\n3dUeOMoNVvHceCKUBQYTIbTABQ8mNRBDTfsjXNmjlvpD7IhlBSzLte0oTEQw\naXS1VKhUAeMHHdMvkwcvRlE0R28QlsqQ3yr8q98/TFm/NfXTf8+ERsi5PL+B\nmE92hCva8iTnRqVbzazt3aZH1IbadHWfhvPpRKa83vv5K9MxCG3n07Uku5v3\nqfy9\r\n=pe/f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9dY2+vcT2y2ez0wQcQ1f7fU18+ymT+kr82g/pmiVE/AIhANvDPjHPxIkmyHXYT7XvnfyCOcwPEAHy1EPsutENWnc3"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.1-next-1591123259-bc695512.0_1591123311096_0.1441470499729398"},"_hasShrinkwrap":false},"1.30.1-next-1591123469-9f0ca633.0":{"name":"@xdn/core","version":"1.30.1-next-1591123469-9f0ca633.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.1-next-1591123469-9f0ca633.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-/O2z1xO9HBlwQrUKjsyAThgz6kdm/n8m0qIMCd3MWDDG7sz3g9DzfAg3qWOwe6vieo7Mfohoj97b3NvfS4FblA==","shasum":"aed965d0d662d25c580c7f071e50494e6fe5338c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.1-next-1591123469-9f0ca633.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1p49CRA9TVsSAnZWagAAYcwP/0/1kDQM7SdRyhw53Xo3\nSVd4OyeVXlMWQg3psKjHG6j1J4v/1ysrKE0/2zzgc0lqXx9ctNLQK72IMFdC\nSa2a41tM8HduwFJqaT7CXP8guMnojVp9GSNo3SM7arpjl3owP9XX4DGdqlis\nvhD/wanLFHqQ4CZykUDxGMKEMYVK71SDflNi7xl8PpfUmrcjD89cYhb3TqsK\nD15rMBUfunJuWIebjjF7SvNt1c7skY5LeIjG9Iko4Im08Z/OzbmBECWi9Wjl\nvX06BZbRzgacCoj4DqBbqmaXTneTX59Jtf6aKJkfZiBXGfW5xQnj5xrr5aFF\nrXDqZkGhiiTC95UcLFTdBR/6xpJ9Uz7GZLVK5SgKvSDYT/PCkH5Cl/69VU/j\nL8X5Um1rQBLEfJZDodPf5/prLVCztdNrd2gZFJWzDDnz3SnNG6Q6nCEezny+\n+OtQnDUDiJWWhq+npztisLTiJQR1g5tr/8fsuPoyb1V4uSV7l1rzLC4gMYW7\nXfVjUmhRvlK9+9W+98EZdE8z5QmhE99iBbqN5FEheQAnyvfV9N1sw7hSqD60\nIlJANb9hKcY6Iq/yz8iTWGmPRxNKfk7tkEJnaWGrB10UE7SZ9P7BcMove/8q\n7Q0+bHTRNGEKexbi2EwDfjs8scVodvagLUKJsMhoSiha4XvuSWJCkqOegEtP\n/RCN\r\n=ic8Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDIeGUPbmvv2omyNREOgkh7Nm4eGMwZkcKcAhQBpUUqyAiEA6PMPNl0j/ZGaKuVmXsU7z93onAWdAIUWxNEq4WBa2Zg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.1-next-1591123469-9f0ca633.0_1591123517294_0.6669792768440097"},"_hasShrinkwrap":false},"1.30.1-next-1591194650-d93ce825.0":{"name":"@xdn/core","version":"1.30.1-next-1591194650-d93ce825.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.1-next-1591194650-d93ce825.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-h43GD5s7Xb95ktjlZK0EYIP+uVmKnMc9gWDlqO5a7EUlcq+3hQMHNZjUFfANaflf47Yo0XU1/NNei5q6yrAo8A==","shasum":"1a3efe5c5140e02ec6e5e4c387479d2435257c93","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.1-next-1591194650-d93ce825.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe17RLCRA9TVsSAnZWagAAJIwP/Ay6WUr2vFaoLmDVUi/9\nBvYIKOttVJyIUcYR0QPVQMTOb06FPRF/eB7JU2kAuxICGF7aKBxcb3ZreSlO\nalkjcYvfBrexn9K77rXqDrT9GVYs/VYPUBNnrwr0KjXDToC72gcWMF2QJ5a4\nlM0PPKPiAUaVjJG6iWfbI5t2N9ciPcjiPbk9RzDrxAYgYUISS0s6VMFNn2ln\nVD2ZPSC6IYlNEiYA9kZ1OzygNxgWJMadmoO9RFgKYMC7cCmOR3k3b2q2v52i\nxi1pH/xfHjqUAj4AKjeSm5Ex26BuylNEOkSiUD1vDA+m5X1BmI2Kx7Qfo8b2\n5MsdtV/NWumyfZ6+cN1CkqqQTG/IosjHPc6eZVCOT5ayhjg+d3y/cycCVunw\nenzwiNgFla+bCLfnFYhV8SCrEynPE4quWIrcuh8kfxOqKRjotIFpTvpHWmQJ\n7TnJuQj7LCrMQfrYVl03HXFk9TTVI7Ri6I5GL9hngWeJFykqMulqEmlAUdX0\nGo2clK8T6CdguYFLoIxHL3UJZb7LsYplvVQuBg18GX7IDAz9l3/D8NcXxSOf\nbKUOLUbWuDW7tXpXzMGJv1Njq8Pd5WDl3eoVcXJ9Ca1RiuF8AbtFFghtXWGZ\nDvx73/ZyozPHPJysYALxhk78+awapSp93lFWVtbQYI36HNdvID28Bkn55ipg\nwjOc\r\n=1qUs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+4CBUXa8b+1A+TZJcNGWmJ6SlJplHWLrF0ChgErZlYgIhANk2Enmw/rvRz5fwddFVsD7j4Cv+IymWPdtWzjDzmiOC"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.1-next-1591194650-d93ce825.0_1591194699421_0.2983492173895155"},"_hasShrinkwrap":false},"1.30.1-next-1591195356-f90a9ce6.0":{"name":"@xdn/core","version":"1.30.1-next-1591195356-f90a9ce6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.1-next-1591195356-f90a9ce6.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ZVJ6lUWZf28frnTGdhqtzde9/gNWY75ltY2yk788MsVsrMPIjtlQZf7h4Odbp/tEF9ruwmQrIWrzXKkTRVVv1w==","shasum":"bd6c4a95575bbb5fa2ac8f3b752f876a2f11c34b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.1-next-1591195356-f90a9ce6.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe17cNCRA9TVsSAnZWagAAOBMP/3GUK5N4SSXgNNB4wpjI\ncZbD2Duo2n+9HpNhGcuXHDnDmzo1+IF8tx6GT3B8HHJYl+W1ZCO1EHh4cKOr\nr4Vn1INlt4hYNPYRFnDMWU71T9N26Il15QMoARilIt74HMzi1cpYjmm3XQ1v\n/fmC/y3EkzrqyxCOqcYS/ta/JXK+OLKcFIKkl+kVKWq44tgsH809sBUJ7Jul\nEd8FRjoc67FEoi1j3R5Qw33BOCIpNGWPhUjjQVP0yf/1hIfe8w3Qdl4/Dcgl\noOwHWXTYLhPC1tCx9f6qCVyhr55KxLHMdUh1TFRImQHoaClmdEn1+laN2wRf\nFaLLxRVPmIhI89RYtv7QvW6D8gvkIjGPWV6yec14nP2y9nN5JCnOke9qN5OX\nAhrq9unIAVRrXTF93t7C3BtYw/JiSM6Brl/sFL1rdbg/GmJj17YBBjaIQWQP\nNMHrPy22/OqrPmXNsl06/+DU/VIupGjrtSIHauY8jXp9f1ideUZwSBrlNW6a\nuld/7zq/uTGXgY1Kbl8bPUSAuNkYPZUCyxs5w/YL5W+0EF/IzVa8dqbeSVHm\nc+o6zRbRJySknp2fWcYwSIbeQoOmAcBXEbsFwMjJKU6VtICehLg5HGymqmcY\nj2HNoq1lsN4yxnZJUrAn8HE59mVYDly7HE6dFUPugp1c0eGRuDm8l+VPhMLe\njokq\r\n=SE9V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB4hxc2mJn5GQLqe2qvXLdBgAvMYLYW+4hhH7qP+/SkTAiEAhPnh9fXB4LUjvb3AQIhWo0FuPOloDkjMHqGQAAuDCPA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.1-next-1591195356-f90a9ce6.0_1591195404512_0.9071003094560637"},"_hasShrinkwrap":false},"1.30.3-next-1591196000-1d9fe5fd.0":{"name":"@xdn/core","version":"1.30.3-next-1591196000-1d9fe5fd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.3-next-1591196000-1d9fe5fd.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-z1ybwbwFFiB9q18vLAl6UTvkMWtFIiGn9QzKmuRFpPJ10sweptAtMQPj70xhgZxyQ19/D/bmC5YINT4IcvY7qQ==","shasum":"7f56b487213682f96bd3bfbbd65fae0bf7453218","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.3-next-1591196000-1d9fe5fd.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe17mnCRA9TVsSAnZWagAAudkP/1w3laTpBbSWZH1D1WQ2\nD8jGX8QRvKJDGPJArailq4p4e4pVZg/iVxffJIzflT6gcJfZmSGNjmnDqGes\nDEG2rG1805YQYCf7tescpFQqYsKfDfkGjyWZnWNVMDq9qql0Iz2kE/pIF5VV\n+aopPXS9U+TSkyDjUW2Bwv5ocroaFNyjvmtetJKoRHvZv9xHznBCnOtkOdU+\nJOxkCx/Ti10kV26FRyz6GQAMIqGNOpk58rCrJi79+OQK1LJ1eIApCd7u3lo1\n+Z3PnRUAxM0Fa7FfWgGe19cs9x00zHaZAMptsJ2vGgTYkRWhefcy+8H2bPAS\nSuKf1ub0IetOigEsoP38Ow3c1QCfXpwTqi0C5dIHDG9bYNhGmQCYJTpIY369\nk8jBf1JssU0YAZvVqYozzQMJOrxWuDEL6pH+R4kE07OyyGgARPws1LyqpvZs\nYL2DKbjFNyTW9fGFQoeIEIoDWkkTUSkUn1+Tan0Q2r6xErE/0wZJPnyhFnpq\nCVFaSJOaeBvCeIb+wEcyhAmQU6Fp7SagxhWYKvThtGIipA0XBy4KuPheREFP\nh7n1oYRCv0pUUYYaVvvP98YyDAFEQK9L0BJY51guP/+kClNDfiGVrGQOA6eY\nlmNSmyAPocr+ICC5F+OBgshaz8sbhFFGCzlkhiCK/7gHkkiFQUNEbXJOVteV\nCsMd\r\n=BooI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBIODQrU6W1CGHiRFZghWZQ9ScDwIJAcXcWmhsyv6AtyAiBRgXME1agVTX/wyJQxnL+HKuv/Tw3D5NwBluu35LWT6w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.3-next-1591196000-1d9fe5fd.0_1591196071197_0.12956238711613888"},"_hasShrinkwrap":false},"1.30.2":{"name":"@xdn/core","version":"1.30.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-gvIOQMD6nqrkln3dbtt3WKrfR/pm0/p4ovcn+ptHE9RiyFBMI59V5jraFh7dzXxGyGkIuMeJB2Ye2/H5q2IDmg==","shasum":"64937ccef6046e05cc27dbe45c4747f00276c929","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.2.tgz","fileCount":127,"unpackedSize":516434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe17rcCRA9TVsSAnZWagAAdwQQAJvbcnG6UGnJKzpxEdMw\ndEeNmreMd5wjPvGHD1+dziLhoQcafUlAeVVTPdRftpJWMj5kyXOnYaxvirm4\n+rXv56KSmDjYQ71C0Bk8CbosGuh0uCoAcrNEkTJtwjI8zuwiYqdGrinqjpyE\nsUpXPcVzkC5kacZO3D4HCQtwT/WK/3fdGUUEY0jwBFBvLktCjy0hLxAuOgyi\ngyX2U8zf7Mx0j3GV1ykCPJv6XMJewhFItNSewaeUJ2UAraQK6JGXRx4JATst\nU5NNamR8h7b/hxtiD6u1Iaf9X+6dDYW354mHs3xA+zDUN0X03r9kmggx1Lw0\nmDPc8h0fCf5n7DAw95YS+6z6AgPDNRmh+mee9mraMSYT2gX/ZJabG5KO9Nxx\nzElXIS7KM3mNNQeNO45HsjJFByH2wjRk15NCGFZyQMJxw4I2f73s2/rS0dHc\nJYEcaIRp39GobTSIo59H6n006mWAMFjbf9OfocR4h5HZW4TUjt/mK6Lt5Kz/\nqunv8zEIxcbJbOL0GDJ6oeDB7Xwkkte8L5F5G1mu+yvuz9FaWuGCOdnhuUJ3\nuLJNAyRI3iSj5lTogvhQy7WFApTzpGjnnipVT9JQ//kom+gGFlZVV1Swi5RY\nhVkHU4hZS1Utmgq9kSbSA7k9jHWn2INB/t3Q6oJH6WvCB3JYw4nXrwZcjmps\n5wzB\r\n=eirs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHw1YfwtRiZB3WmJhRrNQ+Cc5+tC0d2ul7a+9QyCDTmTAiEA6U4iDUMYl2Ud9RQRCFH1s2L6NFRGagwN5jQIPwaS+yo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.2_1591196379591_0.8550785701406274"},"_hasShrinkwrap":false},"1.30.3-next-1591269758-7bbf765f.0":{"name":"@xdn/core","version":"1.30.3-next-1591269758-7bbf765f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.3-next-1591269758-7bbf765f.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Kuqck2OIj6kg2lt3jALchwCUbag7tRZZjw5qpz5Z1Ica1RnmeO0WglICMEMSktqfugDTV5LtvpD1uqo9sSuJjA==","shasum":"3f8a6202cca7fc82f06e28427d860541c6ea3e84","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.3-next-1591269758-7bbf765f.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2NmsCRA9TVsSAnZWagAAoRIP/2QRRvzAJgn7kZYgA92U\n8rWwurS1hBttTn7luekmg3cX9/mR/+/d+Ga2S+Ybq1DK/zv7/LFQn8tOCQUp\nY/8mi45i1XwTDVZtu8uMBaQmqeRobwbUQ6r6ema5vKIRNCMGvz2Bg/7ihcsp\nIlGRxY8oI/RTas1AzGXXw3PNJvi218F9x9FPvGVrzq9Zh5yeWm8FgGOCvgua\n2As+ryZuIgvyrR9IQfhZbi7eXg3Kb5bSzH/6bUHVoYqpR0ZVDwdktt/IWNjd\nu1ENDbrwsStLuK9aWPqcMjJVH0BbeuT3GsU3cEw8obPQEPDbZWdZPLxduDYm\nr9sTWEA3dJ5YPwUDkeqmgzDeF/cjCSbzOZFNaLzHsxOcQn4cPkhrxK8YAXq8\nw6eOUbM5DyOMVb7UHXh7gRcZMJApLIFywPmEGPGv05RyOWK53KrfWhxBnCJL\nyDnOTm3JSQPw6m+1DglZW4H33u5xQxBfJc5RQcEqbjepQaabnmaVmUnvU3af\nZe6P+cikc/n0VKHCYTiR7qrBA2EnmegBRRcBM7KOr2+IYnlUqihU0tbmqp5p\nhdyWwUCAK52P+Eu+v0nzN6JsJC5fPooOSvANHCK8tUBsr4AJ9QaZDhase92h\n8Nvf8oKU7glGFE6dsCp6GI1KZe8q0bAGxycamW97t7w5ufiZes+EZae9XOBW\n00zq\r\n=Qq6c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCR7/I5gFNuoxpU0ESoMqveavcBy2qIM2M/0FGAkxlGWAIgPhE4hlTOJcApEcSvAmdAktAanxatUjkl+AmEvy+c6z0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.3-next-1591269758-7bbf765f.0_1591269804204_0.9763771758041511"},"_hasShrinkwrap":false},"1.30.3-next-1591269972-f47e3a29.0":{"name":"@xdn/core","version":"1.30.3-next-1591269972-f47e3a29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.3-next-1591269972-f47e3a29.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-b0Iz35JIo2zoVqRqmxfluj5CqTbX9cnub6sai40vUDZkYh+TYhkSJtA5KSvsluLv3Dd5DNOw3pXsO545MVnwgg==","shasum":"af831a21fa0ff8a24c263a8668a16b1be20f4ebd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.3-next-1591269972-f47e3a29.0.tgz","fileCount":127,"unpackedSize":516556,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2NqICRA9TVsSAnZWagAA3i4P/R9Ueth/AiZHyU8GTdKq\nMN4/+FYVt/lBfsJ7euTOlXbF+35YPs5kuhjyvrmFC+hrs8C1ALc0fN0/TZVu\ntdxxPobYQnlIlWa/PW5j/DFXi0jebiz14WE+C8O6vRzEDv8XKUgmWbj0ScG8\n9sy+U+dHJDe+AUHzjYAGP7a+UVvYwsqvT43ZTMOk7FqOhkwAFkDgQ9OIlosF\nDRw2Z3r77NmGMiMgQUf3r5HNevZVjHGksT9+XR3qmZD232RAqnoffJ1Ic/9/\n0wdUg2Fw+qXrcY7twFPF3cXwOlxtTaJLDQbTnIkSqoa+ygNzJa6pW9kkQDNr\n07dfRbETbJybUTNF01pI4qQOu5MiRucSoHJCwjjE/+F0WOY3nzKnNCBHnBMj\np3AZ3L1gpTHI1sWj3UKonAVTMsqBcXg7hvmMaKpWM6BhCxsKPXJF26FmiSyT\nF2Tujc34lOEGIqGa6kecaJAw/B1Iu2Kt9zpmGLXFY3QXa8Ypraj5QbmDT01M\ndQpnPPBvF+5l1xFrP2ueBfJ7Qwov6GJxp9S3JPbsVLiHksKZ/csTihItdXJz\nBcLQh4KBlowmQMaD7tloBUBxyqOYqhmVwXmQmh96sRRxGbbZphxBUaQiwG9t\neqO+Quw0G622DEtTKZxMREP8o2DGrnJcY57Fqo/d1VQaIK1QjVdN2mxxpVKd\nfDF2\r\n=jjRJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUZ/rHD5O73JLf5KkE5gosgDZ+zYxRfJt2douH8AvKPwIgcT4KkJXmTzDJQCQcIyBuX8FsI0FtbGPKNmHPRgrxddw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.3-next-1591269972-f47e3a29.0_1591270024094_0.030527818241271598"},"_hasShrinkwrap":false},"1.31.1-next-1591270216-d49d051d.0":{"name":"@xdn/core","version":"1.31.1-next-1591270216-d49d051d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591270216-d49d051d.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ZZ77v910uVbhi/umTFSc/SGJTXpkrE+6NrdXmHIA9r1XCllpvgbSY1KfTWClb4F0umNMsO6/QJO8w1X/zWugGw==","shasum":"84b75c7026597ad071b0a2e58f4e292c2df35b21","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591270216-d49d051d.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2Nt6CRA9TVsSAnZWagAAVzEP/0AKQ6gID7oHJOadfQeX\n60pHKrlCYQAcUjzUuLLMrXRNS5JfX5DGQ7091880QMjJmn9OPfqKyoFogIhV\nmWz/SlWMWWHll1z8DIY0+D5UggzORy9NmGNxej1t1wzhajAFSv6gClmAeoFm\nEWkmzPvKvKDHoE9gd/o7w85FuAeIiai1zkqe30l4cKNk3/7eLV06DpJX/vwg\nIxVwg6EDkJM7w0UIwSlpoXcUakAB/i4FPVwah4iCqeQn6ShxcBizvlj7skJu\nk5GkXz454sYkRSV7KhzwfX7JP7uIAvLrmpEQb7mKYJ7NpwFv4Md2fa5NSEdi\nQIb+OXlc9WZz0xw0ncIgFq2Ow2oaKIqcwZk9NBxgM+B7/vfXmMzGgR3yTXPN\n/hDweXjtu0elfumw+4T6qe0uAIBw+XMjtIssebuagIoS8YRlSDfhNpYE3zu4\nLqQXbfaYEx0IOryTVXZQjp3MQzaVAebva90LUIdwIxYUo607x+SD/x8rRx0M\nMNcu54VonKgBSwIYVoXx8kp1DAHcNQANsUTtym0EPh3Hq3Ny4h+XNVmv3BUQ\nGnZFQg0Frne755qcE1/mw4HHIJ4zvcoioNr0+S4Wuy+PLkLqLjoIzVT1vCOg\n3eBtivPcZk3DQk/je3BBPULfn+qu50BgTxGjx+nbcYpnHy49hXha1Z0JndZz\nq8zS\r\n=n4QM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAmE4Js9wE4ptPFVj5BqMEqcciY7u4VypfIEjHVK+blpAiEA/h7XJbS8762b6Wlxp+FbhG3deAXymd1x9QRqk7R7Pgo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591270216-d49d051d.0_1591270266080_0.21396186888901192"},"_hasShrinkwrap":false},"1.31.1-next-1591271175-b78bc971.0":{"name":"@xdn/core","version":"1.31.1-next-1591271175-b78bc971.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591271175-b78bc971.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-7IpUxye4UH6J6VJwxX0TwA2+BKNaCtpUQaFdCd1ujLbOnUZVsleP8XMMyI+yx9uwy2XhQX2nTQ8lxHr55a9YXQ==","shasum":"67bbd1b3039d3063573b437d0a03eca49f7a773d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591271175-b78bc971.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2N88CRA9TVsSAnZWagAARWIP/2+zcpJ4K/kkRYL2wn7C\n+6GqnYN898IN8aoHi7h6/LefQfQgBX1IjbEaHM7MSZzslzB4ozTpee8Dayk6\nuzN4BIW3Kqk5ukWh48zw80lbtOBZm7bA2PhWEU53HXEKh8avD7FR5Ml0EMl0\nGkFOT1F9vOez29McogArQiy0kUOY9eB36OjpdFgGvL86HUn2LRv/L9CPKXyW\nr+LyBXNv26H6dHOsbYE6I1/vVwR8g2XeGk3676R2YfpMLHnkx/X7kNQVs3Zh\nnHlQr83wyuxKVWhTXaQHMdBTZwGEZypCe2th8S2LHCNdj+LqDhBqwvJopAbl\nKL+qCmbb37mQsh4cBchqwMfHLO2Uif/ktvH+XcdlCO/OBUdLcZxhpJOxLpTd\nJ/exSaHubXNwQOV/zMXGvOaSDyv1VMxUFgIUySpKm/tRkZQA8ynITJoZhws8\n+xhQ5+4iqzUk3PfEmBGZBfwOUNNhF9CP3S+nTilUh+95U5A6YiIcehfycwk7\npnN785UyyYu1eGkpbR+Ye10rMCetom2NkP9SzmQnPipV7H00OE6oecedinIB\n/tMg4cA7jOTh6EujXOsDaTQ5dEzq1yOLjB+pzfx9e4aHjRoQFIgHsWYnqJ2d\nmUh9fuHfiuqpaMMS//QBVqzGz3wCI1O2hHxfuvTkY0WlgGjogJB8pC7LR3Tf\nzBE6\r\n=nLrL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1RSt0k9IJUOvCs6ppK4pTIesQ6C5NoIMkfmq0EX95YwIgM4SyOTY6Jq17q377NjeuuOYLeHN14cnreFhBvnNMc8I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591271175-b78bc971.0_1591271228330_0.23563139093443097"},"_hasShrinkwrap":false},"1.31.1-next-1591273893-3e905f3e.0":{"name":"@xdn/core","version":"1.31.1-next-1591273893-3e905f3e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591273893-3e905f3e.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-gUnlgr9RhFg4YPMkSIWThVZ8T1F/dVkMyyzPJxRr9eb/gs/A8kxCYS19OwVnS4U35IaUF7oX1UAXjS2GH+PR2w==","shasum":"cb7c222386a3d3d91d01176c29b66a45b560308b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591273893-3e905f3e.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2OnYCRA9TVsSAnZWagAAVlkP/icQmO8QuYbeJRfGkfmM\nmz4mV8nURzipB7JEJE3AZFv9koPqyAgD973Da+Wo2zVE769hT5Kanfrhh4hi\ne8hzJFlj0WXE80SjN7PixlL7u7ZEICIYaAh0E5CIF+x77wR2PCW2eQMf0Mi8\n0EXxDP6h79y+sAAZt5DZJFbC5Wb7r+kfnsOYtJ6VG0HipXWS8Pdjzkvqp2Ep\n9IUsxlIqUYphnjfnRQmqe+ZN5lUvJorPV167frF1pTvb+64zT3d+YOxeNqPX\nAPH4ZMqq370CQJloZ3kth/L9Sh8kxMHxTt159ssarfyfcjCSfiwV8Xg3FDpT\nPv4615RbxXbY7kQPCLO0cXDSHBZ2CaK/P8IAd9b7FKWJFQ8PKnyxy3P8XVmb\nV2Creo/0pog3WW/FxN9Hv9lixay3n8Afn4lVnyWCIz0NV94fg+SL9kQ0Zy/x\nDNPaIN9Rmp7pdJvWo6lEo19GI34rEVqXDjzOqgdZAfeku+6X93XoS6MmGuqX\noKUhgsYDJbU46SrKWxikWDSjdXYl2Lg/g6RbAJnk8wTur3l4xS1IhITGZKIx\nmipjOTBRAm1PjuspDIYb1PZezUFuBOmYetPZSvIliuQBciAKzzhuyHHMZPUk\nETz4GmQiCZk2De9wXc+S0d8zW4eSNy4gILM7YmmTUUhW0jXl/kYTGyJfZikO\nQScf\r\n=hKxC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFZF1G3dlfKzXlc4cc+e01xOETImRZWclHi9S6z2bvWEAiEAyOs3ZbDsrQKa53oAyDq5OIis7lCME6qXg+0w0EPgIzs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591273893-3e905f3e.0_1591273944221_0.8180200275302929"},"_hasShrinkwrap":false},"1.31.1-next-1591274461-8468c460.0":{"name":"@xdn/core","version":"1.31.1-next-1591274461-8468c460.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591274461-8468c460.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-jQPTeb73R8NnDYhwzKbZQ7FYhztc4bGQq7BuTPH4ukBDM5reAoMrsqRAOovqRZ/CrR1Xr6LAQUnbRQEDcywxkA==","shasum":"0892a8d13f81e9c7418fd472d40e8bddde284b64","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591274461-8468c460.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2OwPCRA9TVsSAnZWagAAKn8P/1T0y1IlWy/HwNU1dtUX\njHkmgCShTxwnTKDrXKjQFYlqEIcDE1jupOgJdkvAZWc/iPBdXG8HDfk0BmLc\nxmXAAaFrdRLN90zI30YOkD9s1P7tvlc7FFkn86c5lQGMdZL9HgscISuRqtYl\nPDdu+vfTidwqtocFKmR8rdgBzTjJTZS/5zqW2r6tQaSS12V67qgmWRhuc7We\ne9Dr7rpz6QrultNHAolPLp3IVQv1LCfvHcAqDZO6scY9HViza6I75JL9jD5O\nrkLkZwLB5IhLfUSKUSmbpwp9hI8fx4G+EeZdzKhgH1de9DQk/I0sAAWRaww/\np5U6x9GaKdBCQtPr0id6iEArzLU4yokDws8vs2oZUFq36JQAOYlyT9DPP2IS\n+X2kIcbj5fijPRJrcplz/AdLmRhDzTKS7MZ/TC4mufgAwXm2n1YUbFlQ4O2i\nKjCQ+eaHU/pRf5cz6EGrjHLQLQpRgFERv+qlRU2mDXo/ATpQGBuBjGn8zHp6\nZqmnS+hkOFp66GxzfjIup4ZCtY85IIKIoKL9M7PnTzuwoqtPE45VNAShQW58\nlJxJwWD/0KQFYNwXAAx6D0XcLYWqd/dPRf8kn+Q9rM3pqPF7RDPTL1kbbRjO\nnbPgYdaoYD+N8ETDaBCKmLrlNF7RBnjHHiil2+ZjK83S5jQu8DBGlWpSb9hp\nwVa/\r\n=Hr5/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEWKOjT2VED2Fekno+9Dhlocd7Kr3xgy4dvBDxlpTf1cAiBxkCBVSfsMQanHi/4oAeDYvkFi+oiT8pcs0s+q13ov6A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591274461-8468c460.0_1591274511211_0.8495350955524712"},"_hasShrinkwrap":false},"1.30.3-next-1591274725-6465e8df.0":{"name":"@xdn/core","version":"1.30.3-next-1591274725-6465e8df.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.3-next-1591274725-6465e8df.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-9tr9vKp11SPjaOY2ASIWvbU6mKZHySF3c0+rsudnBpaoCVhFoaZt4DVGO2TAswe+uNJ5NMCnpWnxsQ5+/y1EXg==","shasum":"9d686ffc0db4591f626aae54992bd1a6dc4c0d95","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.3-next-1591274725-6465e8df.0.tgz","fileCount":127,"unpackedSize":516556,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2O0nCRA9TVsSAnZWagAAP5oQAJdtkdnu5DriQRZ845P9\nUAzHKiJx30QZHDsfwuW0Tnog2mhatDIy0YQ/Xu2lVYIPhfNcSENiC4E9jcGV\nbcJzLkGwOBstipaPCDzgTAV7qt7vEwamK0PpWaIfuqC9mIgg7+RWHDx0aIgI\nbxh8J/vvkhPbMJ9GzX3E8s5PoUAA/spo5l4rhozAy/y/r1HeMxucSEoNZVkT\n22moyuszLv99q2XX3tPTY4RNvD4OXxDVFAByGodkqzzMv2e1+CmYHOgMJWOI\nc9wF7pLI7VexVJGen/NV9wZufkfVLsnKlDRLZQdOo5/+oeQo0UGCU7rRK2Gv\nj0aDK00CaM2L4c0yICh2D1dlvQU5urUzWEu5Wsa/kLLu+xXpllrzTaORQunq\n0DOiOLKuytbHbC8Vq1sqLcUOeCiWs4g3Qs8K5R0swsaUqFv50mxdHXf2PwCg\n5SCNJxAM7LrhmjHRw5dbvgRCv1lTHSjgSLiQYEfx2idfuNsG3A8M60pGHfnx\nKDvc8oBnYh5x/r+A+hj4IyVmZZubL3EsLNPYUhv0RNC707Rxth2vP8vUnnUy\n7P8MwHdpk+mvZok51wvoM4uyQfsC8nLG9HZjEh8cA7NitNBtBvo/PhJvkYds\nR1vX0YICMZaX8207USjak3d5m/gchMJWKqcxh6IP0EueQPv7SVaiLVX/qOBC\nCr9b\r\n=onoc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQ9KyIIj9GKF+W5QCYJ9w7p4ctjXwUHQPjdlFTEHA7ygIhAJcdWoN/g3PhR3Tf4RiHe0T8tMAUSttv00slbFMGzGyo"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.3-next-1591274725-6465e8df.0_1591274791501_0.47473521615451486"},"_hasShrinkwrap":false},"1.31.1-next-1591275371-c99481f4.0":{"name":"@xdn/core","version":"1.31.1-next-1591275371-c99481f4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591275371-c99481f4.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-VmXZLizshDTmGYckMAo5pykvZ4QDAkl44zQz1oSOqqG+gQo34kI0juNu0neDRtc1gRdZjxkom8c4dW0/k7dLsw==","shasum":"3abd1574e9cfa35ab309aeceb2586139d8fb140a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591275371-c99481f4.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2O+gCRA9TVsSAnZWagAAEkkQAIqxJ3kpgfrNFGmUopjN\nRx8cuKZHBV9ilAHxTIE7JpI2/xGnug2o2ID+aiXPHQ8iMtm7g5iWtqYLHcDz\nn8pMLNCVCGGSZhw4cn6ydHtADMxkNJ8P9+2+yS0p5AEcEah7nXPqPiSwKaL4\nm4nGo0ACiiY1CK5IML2pI+EVfLDzZKUeClkJCanjD4oLP4ORlIkI1bPG594/\nFlNa6xk2fzzEbjPvSKdP9Go7+3l0oTfF+r04OBbB/7h6xehLqDu7Nrfd+xFL\nfxvK9QcV7RlSPE33jNiBLL4D8FflsWRNxym78HAlPW2IzkoYSntlwVjgA5Eb\n9/1WHGHcdNzcXta11gJQttWvmjZafmNcZG1yn4EXD5tky7vIzB40tJu9yhI2\nuU/esbjsRpOK1hwm0wapEgz7tiNNTdAJ++PChYJOP3BHMhxQGjSK8I7o6YgV\nWLVkuSMRcCFgWixsJ1JofK5cU5DIYsIodoSMEMhbnnT3zMRLMZkWR7XTTS7g\nz8972zsXyXZSR/dQwagUyt9sZjyC2eLPKwDyOTDh9dOjR72jfRn3KbR7bgM0\noxj0W7RjV4dK7wpHK5NCABP/Ry0JThz4TnlMwyhizo6CsOsak5l6XKXP2FDc\nxFigdzcSGAkqRs/q0D/fEbCmW7H3MQxufDiOsts4BfflXbIMvBCHLx/9SpQG\nNM5y\r\n=wyQG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIArjt42eL6f95yf3AbsN6BeLWE43h5lZzIqDC1QOtviEAiEAwpYAyTUNWRdoYig68qmmwlKB10dL16s44E3Ll9q5PUc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591275371-c99481f4.0_1591275424447_0.27782564675961363"},"_hasShrinkwrap":false},"1.31.1-next-1591276545-755bf3a2.0":{"name":"@xdn/core","version":"1.31.1-next-1591276545-755bf3a2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591276545-755bf3a2.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-QroxJymSgFwmFOwFYb5zxElei35hEuKavnIBgtZYfAd0sa6gfwv3eTaDc1tUbhLIa++o0CwnAuMNYbBfp0g3mg==","shasum":"6fae0d775a57050aab96a29ca698e5f03834d54c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591276545-755bf3a2.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2PQzCRA9TVsSAnZWagAAuqMP/2+lrq/RCBLX7d2VRpiJ\n+hG+uvTzKztb7XOlQykvIkAH0maNGM8fLYTL3+lUXZgSB//SmuhqXmrYy3Cy\n5/MGFDPr4c178RtzNucCDIsKel5Bqgyl6N8ODu3J9CdQzva7cS8WoaPRXEMk\nADr+pFBEMHZ033CrYRqZmCXNcOFbRhAtqP+wMmXgJRrZCq9nzXlRic/fkukB\nUpsLj9Vsd+o/Pa1PjFhiUhDMvhrtgoyWNFeV9hImUgfgpaQ9Nx4teeHhhcgb\ndnOBlihhnITUroOzpZSIhvY0mI2qscVAacCt8LvSmYSDXEr1MYbM8GKJvzJN\nI5pCpEqHqH8cn0GOysB3F+AuVDio+da+OWIB4LxecX03o5u4nEpyG6rjYscP\npwlX4BaSIp7JTcytK28gnkO+JB8OyESPiA/Pew+JfcTHHERACxVcbalSRWJr\ntBj5Y85lIvlziebkP5TJTdaBVYnl6AemeZ2qG2KGnvKFqLTOMqRzJkpui7b7\neqFMFuc3CTki/Cu9lrT/1GYU8iDcXgcwggUmnQnhvKcMFgkVAhHX+VrMuD5V\ngmR+sRj6KPB/seKwl2snNUfMtbQkEXvqZcF+z5cVRhpwlmviQvX9RRRPSwMF\n2FAggT/84vR6fB0ItSXLmibyC+IoDrXE1WrjyKV4oKvtk60O1Fv8BuFKDwNe\nB5ae\r\n=A/Sh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFrOfmIu/2pXK1qfQ3jJYeME+GUFDS/xvhS4z+VaVbxxAiEAu01UbBVbMo/Y4qDhOClvsEH/4Ivt8eJ+X0Fllmt/2IY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591276545-755bf3a2.0_1591276595338_0.22033007566597984"},"_hasShrinkwrap":false},"1.30.3-next-1591277622-d6c14e49.0":{"name":"@xdn/core","version":"1.30.3-next-1591277622-d6c14e49.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.3-next-1591277622-d6c14e49.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-OgpWyxkKQFjyj/iEPmt2/D8FScWwb3OeYn4Kuy/QlfO4lnnZIYmEuKwtxrWmqEGUWt/Pe7ecQ02iwx2BVoXc7A==","shasum":"16f77d7c73b286477dd458b7f94bfd880c843e2f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.3-next-1591277622-d6c14e49.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2PhlCRA9TVsSAnZWagAAc7gP/RJcweVfMasXtAh4ajVu\nvRAO4PB2Xlvy9n948mXE14ggmHr0KmnXgimsxuclN82knA5PNflZ1zxraLhp\nG2Vmol/NbvBv87SFX11E139v2rqutLmYqHNvki0Ga9XCjYRtg5qarmBEVrG/\nmKWunX9GopVxtIxY2H4i751bPJSeRoJyJJ9EAPL2rO29PJZzml8Yu15JEi3q\n9W9bGRvQcK9hrQ7sZDtYK2N/+bhzFHZaE2ocSX9dqI1mMycvlntfGFUb5Sed\nLo7wUpsx68Iui/NChEi6E1k1UrrDFgwDQH3l78i7082VJi/UT5YWI8rlvvbM\nUYOLcy8p/Y3Q9XJo3eJJGJCaj6tTZ79NYFexrXNIhr/0APcTaHn1kZitazd+\nLmDUzEpuVJ1UZh+U72Y4aabhooFtpCM99SIpj03Sb82j8zGcpkGIh9YTOo2h\neizVuBDHUpUmkimqJyduGNU6vr+PF4dQqaQsTBBBY+6q5xYURG9ef1IzvPzB\nXNeBG+5ZrIN7K+nqWc1/pygzzDjhjLvb9AH6mkDGmCHrOYq8tgX26YYfYEMd\nIhSpWqCILUBSDunjeUF6QhOlT6g4dHUnIBm+HZgcAeGSA/EII+I1W8rQxhUz\nPehDBNkOTKMt5UBZGcgPEZcDgAWRRzwlfk856gCh9xkrlVu02JeMKqVNzR9b\nooxk\r\n=/2Nb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE0ANEfZjzZn+JrpPWw1DYcTwlkb/6BOu0fAI+eiwXjaAiEAwlaXyDc0D9ccfVdR3s8HkG6YZ4YyfzJhVYqDcV+Ug4M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.3-next-1591277622-d6c14e49.0_1591277668664_0.9709234991193421"},"_hasShrinkwrap":false},"1.30.4-next-1591278945-a98191ce.0":{"name":"@xdn/core","version":"1.30.4-next-1591278945-a98191ce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.4-next-1591278945-a98191ce.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-k5Pv1KhBkomSg93GeTc/q5hAabnHMMv+tyn8RU7mBTIjaJSBdQRSSWEB20nJIGDXmYyoEcOQT1KB/BFjSaRISQ==","shasum":"967e572cf693055687d4597b267458a9c5ef9314","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.4-next-1591278945-a98191ce.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2P2aCRA9TVsSAnZWagAArEkQAIF3kHD7zKzGJBW/E06e\nSsf7jQA2smEfceWGzu6ocDcPm/ExNeHvKcHiWSxVbKI5F56E3VVmMoMfrvyO\nvLKKx0e5E5iYqJOcn2aLJsmuEc5OjckBHqv/IxeoJhdF84n1hD3g/lR6uvu4\nCfoYQpfDPk8iSrcyFERjiNs0bBX4Gt2UTdDAb08hkKEhWORjiDi6J622WBSb\nLufv88R+pmc8oAuZ8hGyImDNBTekWS6IE/erv4PwUDgEpydSr7gwg/T6slJk\nxxxWXcPTYA7G2euKiTuvGIWNsEqQy6kDI+3QWSW2ePa6ULWapyDdi8nh0+79\nk7bU1VU8/pA4O3mus6/bpmW+rUEiQ5EUcazTN0JQEfXbT5nG9ML3Cz2dZfqY\n0fa1TRs4AF6dhJBTMpkt0vqFKeOoz+WZp/6US3kNGcFZDVai0RvHQg0d23i5\n94GdF4JVNGhNtH+RIBE0rnx9HTtSTIaBHS6/anmnTpqkQUJYWA3hWHJE/gM0\nexzDGWQ8f9A/UTaq811y9RGWone+hH2p7cVqiFqEKONUNwUQsRpQY66OvgjW\nhID1iqCA4ff9E+p5get1O5jjvws294rFZvXn5XYmbRXjhl1RtVNPBM5kZ5kO\nSZW7yTmifhlqLkjxZ6uG/XoeaoqJvUaukAYqCqq7vgCe1indhUthq5CRzL2t\nsoP/\r\n=2sMI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAWwJvXz+lJg8bqRVgqQ5FF/GJ4EwqGGthHnyvitzQz7AiEA6LJy8u7XjPkoBIsf3tfdAK3LCBDGSTuO777rCtjSwpA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.4-next-1591278945-a98191ce.0_1591279002143_0.6530694221974902"},"_hasShrinkwrap":false},"1.30.3":{"name":"@xdn/core","version":"1.30.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.3","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-I8O19gnfYV+kUWepoBBwjd6FiPGq2ABQkTrZdu1+fhHh7ZGm8kCtl95CWzNHiD5HOEm2Yiz4I8NtnDIGPUmpgw==","shasum":"b0e69d0fe62cd4021b8510186fc62af84ddef1cd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.3.tgz","fileCount":127,"unpackedSize":516434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2QJbCRA9TVsSAnZWagAAlZoP/AiEHm+0rpS9EBsE9lM5\nwQclln4qHyHRpoOChbXOZOXyiVPbBLihoCd4S9jxQRsRnNF3RX2cubtUeo06\nWhjstu7S9gaPx4BJidqFyO44PCJptE5Q471fp++TeRhuH4rWDci7DVFlgSBy\nx2FvBCZYb63L/XgX3VlDv1ugWXJkMvXhiQQhLeIRt8wnKaTca7lZdGM4gXGU\nL69Xwu3JDyiRcHUlmLHkYgn0W+8t3n6xPQRlC4cpS3i7GbzS9clvnZifwALs\nrxFzS9JbWFTP7s20VFL7bvTA1vIwKD9oYQozW9s4OYbpAzFM7n/ASEVPtEZX\nyIZmjq56dyvybSHjTW0xogEZRi/BLxA92Um9JJIUtQUhvKZYQUBBq2M8poqh\nebCJ3vABRromiB+W8Yxk2Y4eBmpnhynQIQn6FNbV3REoSWq9WdBA0Vt5YRZz\nmkrfZaRxRWNqrlB8cIQlbi9tyeAFILvmvVDIxDTYyfxhAcuKjJBl6QAJzazm\n9ZHTOrRDg0DgIH5NJkp4+yKpRAjHjEuKDEOLUWYjBi5n0BpfCUPPkb4yU5Zv\nLi18Ruyolx0bQRXNOj7tuPYj4pUpzNDGxGqR4zCwZIsFur+s0RntuFipwfuC\nz/YJkm5+HkDCNWWWOo0UPQiYaA/CSoiiXqPXDjLYtcAA4Sd/hQSuoe4j7m1w\nPY3E\r\n=RD42\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAtSw9QRZjnAQa8T3sQGbUPueQOVjGdGR4AZX62GmzA5AiBKPMekfx0VmqO0gc4hd673RqXFk5U8u7+TSLboEdh70Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.3_1591280218710_0.8232619093879623"},"_hasShrinkwrap":false},"1.31.1-next-1591280492-cba2eb54.0":{"name":"@xdn/core","version":"1.31.1-next-1591280492-cba2eb54.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591280492-cba2eb54.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-FPKhn/Fvamfg+tawI5cB+cNmLYV3wZQxDXnPZz1DJaFyIHSWA5nKL/HYqBkGfLMZts03oeBdBFk0iWdLCWIiMg==","shasum":"fceb71b7f981ea4ab0df49ebd6a8d028ba299384","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591280492-cba2eb54.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2QOWCRA9TVsSAnZWagAAe9cP/0h+oXwvw8gNjH5AdupR\nv9gvoT6I79stSle46ftA3ifa0LrMVBvtwFKLNJ9CDnqT7km4KH+5IV9DIAfF\nGkY5o182z0II8QDFKzh+P+RCaz41ErMMQqbHKn00r7gKL30ZZJvCMPwtbIUB\nbsi5DSQhlnZxQEAUGFmMrA5+wRpTEwHnEaEoNK2L8OkKb3ObfM8JEG1Dfftq\nF7eK3b/cMQ9IVvZ1AUxrDdIXcEmShmIQYMlxdNa8Krt4bFT8V9MiSil+ddsl\n2uQ1EpC8w1p6AGkg9BAIsotmx6ia24WtEnJ+4XMvuhJ6+4Y4wXmwicJX6fVZ\nw7hFEG0DEEGOZgeeytDf/3UPGEIYIZ0fcDotWT1jYsnMFwPMrNDdJS+sfaXO\nL47+p7jzmnRO5Pe8aSWJvNJddfUu9uGjhPbM36nph3zZHt58NKBxQaCbXbVj\njRi4C53uju81wFxXX40rFHUNb7lPMTXp3Cb8u4uWlLAofvIzhQ2tMb7TzzlP\nANEFUaTKz2oZ84jZzGhbnxMVSkHXrmfZcyFsefdf9Dd5KAIOpZ24scLNwCSP\nZQhRhiaAnfIHW0TnBnR6KZs7Wd1JtINwt+H3ClgzM4CnwL8qh+Ksjzi8ztzz\nQvyXpgIMmlXP6cIvIf2rbtq4HORiGX0atpMNNUtuyIdOX+y+ejg2Oo/DZWDz\nPmTc\r\n=JX8D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwoSA2IjEJlrv4QGAWocXTXDGcP5iJY/RPda9prUzt9gIhALEDy9pPr4qZnCo1CwTyZ7KKjyU2AKN8sq+ado9GGWF+"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591280492-cba2eb54.0_1591280534032_0.7310339637607894"},"_hasShrinkwrap":false},"1.31.1-next-1591281064-cf89689f.0":{"name":"@xdn/core","version":"1.31.1-next-1591281064-cf89689f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591281064-cf89689f.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-peF+xOcEMiC4VMyR15yYxf7dtnplh7K3MP5qY7iPxqXuweDTwtTeW2TOAMz7RDzys1fbNr/cdQ63EFlc5PvHmQ==","shasum":"50cff24a2f17b08290b35801dd9655f2b26c4b91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591281064-cf89689f.0.tgz","fileCount":127,"unpackedSize":516892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2QXjCRA9TVsSAnZWagAAwfIP/13y3ZiBJ2wcw5M44D/r\nu7xlDL3qUQ3BVq+h09ChfXnRE4VBFe1bX/qGqknUBRcPHocmAiNPt47IBhx5\nEOW9tManQ8y9QbbSMACWUeKYepKEnJYETTAxDZ2ULohwttz2RWnWwh/1bgz4\nGVeWm6b2Ks5PCIhojtb/fr7hkGwP5hnb5cSh9hXb40dTd6W5p/Oj2vfYNPSD\nw8ZBNvzfeB2Na05zagttS0xDvtNLk548/v9oLzkQoFPj3iZAGUDFAJrt9tYd\nuli6udS8Mmh2hfLD0LXp1lowhD54IyhU3Q8imurj+aT4QXv6Ii56A2CuS1QD\nWMqaCV8t2zba5Ct0bJuclvEkAcLWIcgwWeQ/NDIPWYv4J4qlxG1fJ4Nc+3QE\ndTuTSRh9aLqCmzIdf1qm4PakbhIT2IPlox6lZxo7tu14iB6fn9t5RJu4UrrI\nIQ/3jv/SNYEjzVrDrTtuAGx6YZraDsBjjzBI5Vl7kmsDDoCX1CxybJ3CVtys\n7UnZtNRLevACMRNVLviaVikelV+oDCzaOppjYG49AXFzAaVeAuvnDT9VBksQ\nZLrZ5jPEq9BigGJDtOebCfR0sCuyEwUGV2RIDmP7vq8zIfll4YTTkmW68dL5\nOciW6qnOtrXbnr9ypn75wLVVz+tHLtzOzCnOTOrXdQk81R8rdlH5H5z5ez7F\nw3tG\r\n=zVf8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnWmqYWYPnpgc8KJmy9w4KjFfjd8ioE0YMRaw4KTxNmAIhAPVKq2fxLbznmZUkdt1l/IdxnkcefR1NR34frAqwIkA5"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591281064-cf89689f.0_1591281122801_0.5102986225623749"},"_hasShrinkwrap":false},"1.31.0":{"name":"@xdn/core","version":"1.31.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-11e6x2C1l7ttBy0p+dOq4fwMsJhywmrw97Eu9eXaTZDcx2rFS3BmZzt4QhRpy3a7xMeqUaXj9NvK51fs46gLVQ==","shasum":"43ee67736896c3827c925d35d4f1aa526fc1747e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.0.tgz","fileCount":127,"unpackedSize":516838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2QdSCRA9TVsSAnZWagAA0d4P/RygOLJIBKifuaIKsSsY\nESQfrnEVBT5wPwBVlzLFwtdIfYQyDLtXXYYSIta4St1Q5KL4+/5YbkEvqz5a\nVVmPs81TrarPG/CEqsXt63NIFD6CuPZ8KkoI2qYQ0JpZfVSA1rxez2BCJbU0\nJ+JH67z4E4LAU1PuBBXCJ2HLsVhx1Wefo3QzgpyucdpqtVjtB5NXhGL0hFrQ\nEnwJ0qbadYcjmZTHOCCwELDvoRqGKaQhrYfiFk06D4x4zAhIeHSlHt60XGf5\nrWciBS/Xn8HfVSSd97yku/uD7MaxDVFYeBixoNyDAdRvqjpTnYpElUjxKERc\nUBIBsDVuEJskU/asZqSwNeqiWlhlUHRUkhUooNIUN2d2wrm4gQQKeF6AjVuU\nG7PSX0nw5+ql1I5RwCWT/aJs4czVo8rzjaEwRvi+PUqnXOAhFruZ7LlhhQOk\nLbqf+bOFHV5tnGI3quWiRU5Rf26npGUMvGy8D8WsBHLT496jOWUG6hFzCmjm\ns9HOOE0G/2V06GjgYbT78s2O5co2I0bSL2Nax3O4J+iVfzL4ppTYZYja0OUz\ngaZnubOXU+u28psvSQUw9W/hs0P2Qfnzen07qKXDa5kKA35L1SkVg+Kllah9\nSuPqeRLZXw6EFGb0Q9+zs0YtAF0ZjYmnJtAmlIFQ/5qKXPz6NnKy/ZEi2gz6\n04sy\r\n=eeDT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmirABcV/Ep5uEmhY+gNxdEo25l5/5lbPe/qTIZqLwGgIhAMZZHVVfSNcQIbAdRDy+H2TmbITrpvKW3XxJSsMLt6bB"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.0_1591281490314_0.826980681427987"},"_hasShrinkwrap":false},"1.31.1-next-1591344635-6c092169.0":{"name":"@xdn/core","version":"1.31.1-next-1591344635-6c092169.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591344635-6c092169.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-gA5ni1S/YcKwHPFWjoIOO9OtE50B99tKD/MUzzZUTk7+DxEuEQ56eNuJE8gTaYT6pf5LonwxvX1BK5C6kxQsqQ==","shasum":"868eff3e7c363b4e80f9d19873748b1731f6a1a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591344635-6c092169.0.tgz","fileCount":127,"unpackedSize":516960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2f46CRA9TVsSAnZWagAAqaUP/3bzLGWZnuk3d4Z79JK5\nX2Iesx6zK+2+2i6JiqKJ47Z21jxVoqiak29fYBgmwx0tNzzj1ot3FQA7mfRR\nZI5GYJoWcI/Ki6X5KT7BV69OLI6/Hiuwb/WJUVbrj5TiTczj7dOv3rWPtGGO\n42LkwLoVSQ2+mBw+nlIQTWeizFLER3V+O9DZgpzfJLMuiXw0b16/gSRjpLAx\nZeSyfBRAJl7Rb98Nnd0ABCJB0wlIMZybsqSopemeHWDGMBHp2NvMNOknV0NL\nXI4LNq6QEYNB+/r/jW4MivyqUzkBpqpqQ+qB+04WOD3/Q23PnXORFo8IjzRB\n8ir6gG2uMCktkzD4xlGqz53hDySj6ragQm/YcN5K/CtyVpfG8HPLwfiaD7Af\np1zkYfL9wiVmMxWfK9EMIzhVjraUWNUcuepa1wplgjlbViK1FhUECNrJCZep\nA18vhjdv0icUVzaedCqnZ3GISIri4N/nrIlgGZpeF2xebM5JYbwzH1oacMYG\n0UAw9gqc/PoExwmF/F9F5o1Q1VQPqNSvjYBivhfX2Aq66T9G5kKVy7JC9DdH\nfy14vML/XpseoByPSkusGkhF6m8t1Of7qr8+Q8t5B2RUdLHXB69Hp4worTuF\nytyUuBl9FJXpa8K6ig2Nays8wZoeDroehwVCLLvGvSXffXJiimnp5DcpJt0R\n71gq\r\n=ToAE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMEvFa4ddFv3nTnqhSKTCKkFgnb7Y3dH028pOdbhGEYAIhAIoniZCO7RWcJ3kCHhnOPXZ6YioWuIHXgU2zHqZO3fEe"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591344635-6c092169.0_1591344697528_0.20011360286334767"},"_hasShrinkwrap":false},"1.31.1-next-1591351320-1fdc5205.0":{"name":"@xdn/core","version":"1.31.1-next-1591351320-1fdc5205.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591351320-1fdc5205.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-jC04OY1ZqauJUEKpjzTNbt4YbCMVr8y+mqM9lBFY2wpkiel3zUQqGoWM9E2EVFs6D73oi0bxLM47ae413MHFPg==","shasum":"a1e7c3a216a4fa157d4179323629b4be3562f18a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591351320-1fdc5205.0.tgz","fileCount":127,"unpackedSize":516960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2hhPCRA9TVsSAnZWagAA29EP/igaB8FxT2U+CBfdnfzg\nfcr4p3hEezYitXVS4Hp88I3t99DBZ+ONDz/swoNnSBp3DJLMgf2Uu0xvnh8s\nFFhTrme9W7E7prKHEnAab8TMuc2Vuv0STjd8+z0l9PPpyFTlDOaloLlXaKxH\nSXdLMbsVETZJTCqx4R7OLQBnp9F8PnMgrirmzkCbZNgO3Nq7EOaJnda0cQbS\nqgMZgZelN2fg4iEz46FP1IPvj30kAsq2h5sv5js8A34a+zmd9G9ZigWJsDBd\nyQTc0ybbaeLejrlwvAHuwkqD3q9N6suNqJIrhFnf6I4lH3BDVe/3swyF7zmB\nkxipBih/pdMD5G/sKR+U3V5PWJDJ6U8Z8SbvEl1nlVr6SYuKQMDVrNwLyoN3\noMRZ3+Vpx+ZcVbK3CxXytWsewbQ9evkdR2bUKLW1QeV1ly+paeDizcWbQPGn\nLQdZydemz610aEvb8wl74m6Q/4Za8reQaBkrdgsrgjE86jUWeDdDrk43iWzc\n/D7Q71LJukgJPnhFUnuQcYVxT+JfI+BKoOCSg5IWR6Fd3zcpxIToHB2Z6LK4\n7rIicOv6qN6DVtnIxfL1Iqyu8CqN977NIN1X4kovwlYSoJbSrqcHmt8PUHz/\nTUwy8wZzxrI69qrJ3pwdzsrPZO/t6WWg41XsHc/00laY/TwQZXOtQYAOd3ZW\nh145\r\n=qQZx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICnjtVn8AFsW+HMeRpV/Yxutk1K2a0U5bCTLVv8XicfDAiBN0+Qui+mJ/SCZe1uhYWIFwPRSu6fEf3tHGcErN+kNuw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591351320-1fdc5205.0_1591351375121_0.388807784010162"},"_hasShrinkwrap":false},"1.31.1-next-1591356427-150ae696.0":{"name":"@xdn/core","version":"1.31.1-next-1591356427-150ae696.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591356427-150ae696.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-BkEBPR3Zjv/GSWx+1WO5ErHdJcSD5ZfahADb1oIGXgM+Eg+plb9CZsxQPf7/Zme8kwDR7FGRxsDz4yans2sVuw==","shasum":"c3537137c9a67fc0c6769d44aadd1cc5463e686d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591356427-150ae696.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2ixTCRA9TVsSAnZWagAAmQIP/1NS2FufJ+9TaBU5AbBB\n/odbHCdteiatceHP/2P+Uso4Po8QqZM0TM3VB1dq9POn27952liH0jCvlD6W\ncFjugGXdHDmamiZkct70QPvUVF9e3h4FuTR1GXn881q8vvFc90WWzPB+JSLY\nPQ3uyMbMfmlTi7PWDwjkNvOdFruolTmW+RgbUJ+tk4g4y96g/bkdT3SvIF3e\npVKSzfyBXVl1uNjh05fKZN/kJjP9Rm0TW/Y2sxd6NI3itGm/dQZ5WLS0YfRZ\nY8UH1oAd3w7iMpWKiZaPg7i8+08UQirVhJG+VFHVen5PHiJlv4pCbum6DmW8\naSqEnxATmC/UOWfM5IjHQQQYWTi0osoMmtKKW/aMbF7Dhps0MebsmTY6uASK\nNFVKzaNtRj6imBS2fY+24Jhcj49Ch4Lrm9xlPLAKfTp5sgh+tm/DDBTXLGvN\npXHs9WAPVh8KxYXOUTKJs9efw4gyia99b0mnS4MCLgMXXYLAOpapLuc+Gp7I\nu/FXzNYYQwwTBxxl3kLW4K6NdrM3viEbCcf65SIRRIS2qZ23gGkxh8R1K0w5\nfuyLlbr02oAkglT+xaFvexYG4Cr7ikVCTr5+5Qd1RPRzmXUwvG7HAT4knudl\nMS4hjRnoCiSVAfJtcos/rp6RxCe3QermuWX+NnVsp2V0dKWZithtdBWgdCq4\nNYKp\r\n=M5XH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGU+Pnq5HXiR7Lw8CyyhlnH3TSxobnY2AI9qCBzt+Cs3AiBKu/wvYVIevmMh04fhu3sw9+bx9Y4c8NBLrBnAyWqAbg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591356427-150ae696.0_1591356498759_0.04691103297401833"},"_hasShrinkwrap":false},"1.31.1-next-1591356454-10b61648.0":{"name":"@xdn/core","version":"1.31.1-next-1591356454-10b61648.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591356454-10b61648.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Jij9q9bzAI71y+baA3lisFmNgo0kWTrUJC9bpNj4gptSQRuoXnn6WpSAvMrXfYwgIq1DrPHi2cu3DE67h4g4Vw==","shasum":"10f175509c2716f543e891c52c42cd6c308d61ac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591356454-10b61648.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2ixfCRA9TVsSAnZWagAA3EsQAJa/h4IUXl5Ey6BvUJvm\nm1e700jvp40aeqlMlaQCC0mqu5HNhF1WnW+H4OCmRDYLoka0uKSmZdcHtWfH\njb+S27KaXY1vsLmt+cCfA9a3PLKHjvlnru/AvGN6QyavYRzSVguSWV7dhOtL\nO+XRFh2E0QT8jYhODhxxc+/0GN7gWmz/YEtuqaIbOwKNyeeeM/ZUlEmfHuX8\nSXC1JN53dWBW0PDeGlkdajYk0pb4zwDmZlDHM3a0hVyKKGSdtV7YPGs0yFYD\n7idhhtsANtgZVbDG5CDfa2606LYqavUZd7hT6NnaOmKzuB1w//J3GzzXiWyd\nVUJQaZzjGOBozQ84U4pwPdJg19N1/J1UwiF8Hwhwo1sheW2F79gy1faehEWJ\niY0vDTY649cOGFbB8F+tRipIfVEl4DbhHrQzn5mr+Z1594O7DpnH/v9vXHLw\nhp+2NGwvNQHEgq3swzwbU8sVwA5XoVwEvvkE82D6VoUEihbChL5OmqUYBBxk\nKc6fMGMlA/BEnCsEGD0S0iLLIckQK3G19eGouf8Xu4raUJhZhzdRbz2Bg8Lp\nU2GnTZiEkX3jl9F6G7YOE5tgdxDZ6rc66E9Lx6tjLDHglry3MRBATExYdaRy\nNrAvMM3Re4lv7PvYHz5QNva/yxEVLPIQy0TfwCT9FUQheOtBJiR5/ZCCh5oY\nymEB\r\n=dR+5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgFeHpRzI6mEHChin4lSnK3k7k1YOHe77Z52vhmfYVxAiEA+NiU9IODzxw3nbjLC4PCYMxlhaMiS4sYcE5KD32SdoM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591356454-10b61648.0_1591356511109_0.16704650115931896"},"_hasShrinkwrap":false},"1.31.1-next-1591357570-40a48007.0":{"name":"@xdn/core","version":"1.31.1-next-1591357570-40a48007.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.31.1-next-1591357570-40a48007.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Rb5F9++fHPxHkJNuJfjF0H2scAkHN9vofY/iBuzf6y2nE5UIwKyXjJ6zttJTTiuvVUxlp/gFheQB8v9gqGhS+w==","shasum":"b0e2990a0fffbca28f2af747c471df6c9be4d7e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.31.1-next-1591357570-40a48007.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2jDCCRA9TVsSAnZWagAA/okP/RInhfxq1zf0FW7J96co\nQJa0+he4zpFt5Dq3dVelYDDDM6D+I644DsJ+utgdPI0yI69Q9s56dZCVmHQd\nN9fyOsVUrhl2QYH9+48C+aiLWz6ZKa4Gc6CLSsusluIS256A7b1U+8tjEaDh\n2EdO0qlGk8FgG6F5YwN3+8e2cZQ0R2p49ImLCX26QSF98UrTVcy3jc13ixwG\nQf90lxBwSq4A1vTtrDdo8wsQVwYQ2ifZOm5XiqYu1gb1bogStJa3IiPpKPSa\n+WavQbhAUhupvRCrjFABSkCYsi1JbFnteXPTNg/Fb5uVcjRc/IYMEqrgw5Wn\nM6CqpDuhEnSQm0R5BrQw6mm0uFs3ipybLjOz8x1J+yi0LlLH3fbQEQU8tf4v\nJ7v60RYwAYhhpmcOvMzr25jXoqWHfhyUbTsIA210UcljWcqi5s7RHVVy11us\nrOjEwVzMNOaFVjcfInu25pOQzvPQwFraG33G3wA5CV73j71OofCOx0jQXUHI\n5iwXW+fb9xg3EU4unnQftJivlQNIj0yS4PTYJ0G3mKB/FjAzTDiySnwCGA/o\ntJAlpydbrIeWJebWoPIQd7Qp3DAI2sVvCjTGAmpNIyTCwODq+004p9yvJouy\nr6RQaFLXxvyQh2LQ/POtr55kjStXK3yWR21Ft7q1F1drxJ7Pr8om1a3BSkJw\ntZZA\r\n=r8vA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfP0I+OkEg5y69/E6UtZuXaqL6J4qLhSghBh3WRrQxnQIgUSxp44YZU6FEd8mp/ny1BxN9tgEdo+ADq3Ix+GYNWuo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.31.1-next-1591357570-40a48007.0_1591357633192_0.4513854728655191"},"_hasShrinkwrap":false},"1.32.1-next-1591357781-8f136de9.0":{"name":"@xdn/core","version":"1.32.1-next-1591357781-8f136de9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.1-next-1591357781-8f136de9.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-rLfR6Stscp3IeR3EooaNYQ4tgqmfLZZ9aaUyz2BI2UaCxnnlKFI7u2Tv5gT9xipQQRkq8dv/Car0NRhuMSKUdg==","shasum":"c5598c3ae87a077d5acba67969048419bf30101c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.1-next-1591357781-8f136de9.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2jGTCRA9TVsSAnZWagAA3vEP/jDB9YxHp1MzQ0pgAZEK\niY3Bc0Rid5SZFtnjXJ5jskusufxEEbdc4NKWIT5TnCufU9L/X7ZuQAbgoh+r\n+v1Tfd3tztXRG1gUbD/Wfnk/6LZPmhDaQal7Vjw4J1hIGkcNpHnoRFMxsNeP\nbLIpvNckhx2KC677zrwy0YcDVCyCjiE0Q8RDtyaZAfh3baoMDPhvD6jx3rM6\n2Tn8q+WkZE+mc2LHWMo1t37x3nzu8wqCWzSCMDoZYgYJFOZj9Hq0o3345PjU\nqJuLvt7vYr03Im0SCad+gHuaKBC0tDFdeUVYLmadZs0JfLB6bzcF5YbKvlVx\njB6nZjoWLhsxpFmzMSKxNriqYGwAEgHxLKxH1D8GLNnaBjBksbCEHhIPeH1I\nUFkCQ95Funo5ZyypPzAKHGgQqSWIsIco2kkLQF1zGW7ssVk/GTYXZT+Z29Z4\nt0oNNL+HJb2WPET4zUC8ldhQwEuSZaTK292jtsFPRN8I16e74+amspPZZ4vg\nzApO3JPAJ2jQyX2vCeGJVOz1Vr/f7h1ZIVpRVXzgDOiAcv89wxaP+ArSycR/\nWS2xmImPsXtoJNDEMfTuL4fHbnxTyDaZzkxHMyTO0zroKHZWbJjTjT6L63jH\nVxHdA4FhzkTdbZkXqkURXvZpfiHUywucAlyz/YwJIpPNQzf/qhToXgveLQPv\nkGyT\r\n=CVc6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAW9OpA8sDwwoESIYCFdVUYpzHLN1XMb9QvetTaVZUygIgQxf6DdlM14gD0bzR3Bw3hArBDGuwrCul8NRcoM0KKH8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.1-next-1591357781-8f136de9.0_1591357842736_0.4676631729927383"},"_hasShrinkwrap":false},"1.32.0":{"name":"@xdn/core","version":"1.32.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-kc7e/ieutG2rxQTvvw6DElAIm8BLnbwfASxlIut9fixWYsgtWW4QDENm09yyRbeVZkmeUn5EIW7GB4aNP2nrBg==","shasum":"3161fd5fa6860f2bc0a62f7d046bfc272e5648b9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.0.tgz","fileCount":127,"unpackedSize":516998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2jJHCRA9TVsSAnZWagAAW7IQAIwYZGk37gcHdbbCsIV2\nwI5saz6FAd1eqIpYyjQ9FHCr2GUlRmILSyvKd0skpidoRd/1jnZK9k1X55tu\nPMyeREXtiRjJVA4D+XzbCj4MzC6ToWAj811amHoARyogS7KtrF8nTck78vY4\nosFm1TbmnWv4Yx9cWDrveeXTbAWe1h2RkPkLhCdbz1spXSU7cUP6PadJ62BE\n50QygqhRCiM2rtbc5/BC/f7VYc0Nsr24TEoltz6FlI1tdLGyYliffc9zHeOb\ngQCcPhiWLUDvsUinAuninmEy43C2i6RxLgbZ8SBFyKDhWLWVRBb7H+vs6C5P\nEqvH4s1LahpMpo0cxYIqupbA/KCWN3KA3cjDgiihkK1VB2P2OGoLSthmqon0\netQ9MYeCx2h5hjDvD7+EFfGXXdaSWy41rwofyc0Av4j/9fitunXpjvWEi/uV\nDsIakwtGS1AXdJjpSAIddAy6x96+tuVrj72z4oOBtGn7L+5PhjPaR3WM1KoD\nIQglXbKbjoDjazu/V8ryfQvDryY12pcuWxdygSLn4t8mKx+toUXjyzPV1JxK\njKPl+lqbx9tHjryYz9RFn+NOu5sUjh2/I8ebqDpcZvYCdc1IVhyrr+b4gzK7\nh4r7x26GTqu6oxp6r6SuwjbRbmI8Q5fYyKlkr8mcjNcsE3TE4tK7NrSfGvLc\n5DuB\r\n=JYuM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEwtMq04IhwVs2NZrIqwk4x+yuT9y8CAOQWj7OQ/n9PNAiEAwWlWWp1bmELt6Af9CCMi4zUaijvCac0SG9x5chWhgas="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.0_1591358022888_0.7007770287407744"},"_hasShrinkwrap":false},"1.32.1-next-1591362528-372d9914.0":{"name":"@xdn/core","version":"1.32.1-next-1591362528-372d9914.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.1-next-1591362528-372d9914.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-gRfCD0oyC/CvBxLpkFU6rU3RN/TsmU0lder8wAmHaF9SsjFdyb6yU4xCeYxE1ecgWv5TE3C//hPwcAQZLyViIQ==","shasum":"f4ce4fd717a64124413d7fe7a943c805094d3482","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.1-next-1591362528-372d9914.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2kQfCRA9TVsSAnZWagAAY30QAIpg++ABHN5rCXh/JEg8\nyi9twDm8ETPlNLNDl/eRsOd57resfxQDfxfGG/8jtmWynbZaIY4243vbCvyd\nfoEHT/re/q0d4ObTCkkGB6AySBjs6tWFhCNhq1tyfDY7e+X445lRwN+YInVn\ncUaCSiA08/hT1YGS4e9moFsWGa+tJ1z5yz579bDfxMuYJRcFXyYLXQI79lT4\nwNRNgEultf9/jBHU0DpKTjs3FihQ3xUpmbiopDBD7e7ZX7VoTzWZMQ2p2J23\nNO/tLCZAHrLINveoI2dRP6okEN2WKgeZEf4puXtbtOOR16yoPricte2vTg1a\ncakV89KTHzqfF65mPWVxzS9Rdcp/UpUFDB0ILpYBqpGE6rXCnGYOiYHPtYIB\nnIwEhla/H051x25KwWikj+cx8swWE8atuHa0g9xaRilyHH7ELVUGVYkUj24B\nss1C3/IJD382NOTW7dkRx19tayHF2Pkvt5Dud28xdjEp+YXu7QIdC4Att+CI\nkO+M0D2DXRgoC8nNvALlej7bPPOQCkYBGWCeLAJ4K6S73PRah3VSM0Em2E7K\nCmCaKmNsk21zStGIQ81ZhfwrPWnJdZ1eZX6jDASwFaYPK4HtrQZ0xb+vw+t3\nzCbrwz9Cv24ugDj7lSZ2A1WTf9siWN2+SoBLoyhF/vZpyZ6Rsk50JVxLAttQ\nLqSd\r\n=NE8N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAYZ5LZi02dr1mFFAikV7cvm3KyPJMJ6W/4NB6ipWjAHAiBo0Qq+oj47pjh4Usg+ecY4itcJ8cdwxX3fczdBLJxMaA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.1-next-1591362528-372d9914.0_1591362591380_0.9048393891951989"},"_hasShrinkwrap":false},"1.32.2-next-1591362632-ea5c8d75.0":{"name":"@xdn/core","version":"1.32.2-next-1591362632-ea5c8d75.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.2-next-1591362632-ea5c8d75.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+s9Dn5sNIAK4y0Wjeogn6VnluHm6htn4Js4pXpgy0PO6Q1pNpH/f+EAg1C3fW0nAJlMcUxJ3ABaxnXmFtb8nAw==","shasum":"5a8fb98dcf98b855e55f1bb6e5695fb2c35d9065","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.2-next-1591362632-ea5c8d75.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2kSHCRA9TVsSAnZWagAALDAP/2S5Tt2ecC3WnsuUGNLK\nKWGbxcM3ekgAgVUi5iRlxmV+l5RlGq/x95qaf7Cy8UbNVmJDa6Y2FiVI0tw1\nFLXb7V+/+JWQVNOXLwF1sTHjgmgGQ0o7EHDUesRNdLRbe8+Zsdmdun4fio5k\n04gp0vHdv53hSf15TIPzmd5dAn6wIkjYRzo+A66MxzQzH33T7C9oQ6J+/pui\nrhI8+T+Wl38n3pZqCUSjWzlPCKUvoyZaSqZ00a1t7RKysPrOlIAkGchdmkSV\na1xIPSqHKYJQ5hkKOvDwH041jB6JxkHN1HlbBobzA2jdD8UthRQiHAQ+/cKP\n7B0sC3uG3Ma6ArTvg+WQi6iG9+ce+CGDKD5eeE9gz1ZwplyUGq6VFtQlJp6w\neejucG9KZ9CztiU0Rw+SALRmcTqRGlwdByZUoEHzBroOo3WCENc4VILPDZ+p\n3jUq17wTASbVtmAsvDGF4nE6Agrb8QnogsxVKXn3xI563nceXWQiPUIS1JYD\nQLo1hFZKoAEdbd0Qk5U39/lLqk9VN6QoXIhPPBj6c94Z+we3utcNAVdgpzrW\nAuv0FAY4nld9KHAnIfRnANNLoMNfnf5KT1reDPABS1Ov+oRBJ/vyF4LbCCLh\nToVY96K5eJ1wXWJvAjwLLpKMUzYB2BIH1Ss1RXW4oNiLjGUMdYfB45estBzj\n5TfI\r\n=pkd+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPEvofSBblpjSSTeqIdMcERhz87BsCm3SF1N68lditvwIhANxuESa36j152nUdHlIBBHMBusU2c0O7Sr8PUVAF29Zc"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.2-next-1591362632-ea5c8d75.0_1591362694920_0.6709130950291382"},"_hasShrinkwrap":false},"1.32.1":{"name":"@xdn/core","version":"1.32.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.1","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-KZDYb48NVVUr3DeERvi1o8225XHVZ3Vmsj0f6pz49iRursUgTxG+hBrNhasAOVFy7iKUW+Vtng/h8E2MIHOL3Q==","shasum":"6dc9c02195e3abc35f77546fbceb9ec1e0fe49c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.1.tgz","fileCount":127,"unpackedSize":516998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2kkeCRA9TVsSAnZWagAAx+gP/jfqX24NywRoI/D5Aea4\nWsLEZ/DXLHXWMCuzhnAf947kXcKUynOHBOQUaBTtnyaFwD5TNi0uLfQBD2Ec\n5m7t/RshuG5z5BS9iift9ELHLzhzpng7C/61MdQahyMhTTFQHBvV/t8mV6qB\n2eFKjOomZ9oVI8ZKxG8AqQSTLlrqGf2I+c+XbY9CS4Ql7cmP2qHVYKzSHfr2\ng/VLKOOYoEsKPqGPTNH+xUcbWtz9hcIkoC4US9b/0VpoiXYyMsRsdVunVl9S\nvembgQ4TOkw/gPqOiLuU3GFcuat/CcQ1S6OshznQPjXuaY9nX2bKZoNkxyiT\nFlfkMSDUxXOYiFKsYT9ZsdxY1H8OpPekrxYytX7sn5SlKTUaRx21w+wz3mJm\nG0IPqf6gpGGEV/xDkUV8vN3/2MX3NpJvZxoFLUuzX6M+5huHSCnKJkrhVwC1\nqpzv+cR4VQ9BNfju4ZLoa3Ooy3nkDVvIrt80y6/G9iSE4wZEwl5o7LsApskN\nWsf689h8k9pskSZBKAa9V+PNUj1ecufg2tsAMoB7sJBhPD9sxc9aF2S/RnKu\nQ++XmbJab+AxqzgR1oCnHOFcLJ/kU9Xgnlmzf0iKD2dJwZ1++dtgVoM2gfsm\nXZFov43XwHYdNBlHDkQ1dGb7Bc86E8jE5qF/ViI42pRQJwfWuIUiG85Zgpsv\nhik1\r\n=0kH9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICXMy80JCHA/8BvNLnZHNEm6Uasya5YQSYNxpRJiJF87AiAIvspB+PKgXfCLiiMe9b7jRhk2P3S1MbQ7VNAzEf6DhA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.1_1591363869460_0.4939400968997594"},"_hasShrinkwrap":false},"1.32.2-next-1591365315-aa6e26f7.0":{"name":"@xdn/core","version":"1.32.2-next-1591365315-aa6e26f7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.2-next-1591365315-aa6e26f7.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-a/DNXjDCd3DQ6HGyB6RX3yXsfCbaH2dU/E8FAhkVvu03vjIIJ4JzeSk+maMfHeurivVEu6TNf+ObGegy5ozWQw==","shasum":"c2a1f87305920e8b429091cf6163a53f6c7f73b4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.2-next-1591365315-aa6e26f7.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2k8CCRA9TVsSAnZWagAAJ+4P/AqHIgpxO1OMhJ+XBDyb\nMvWwmNFCy9nyQ/ci3jw+wIXP5VpW2rFKO7k9AgAbRTXVjeT20rx/Y202LTpl\nHPTXOAVqrvQtFbVWErln/+QNJQai09WItdQ+To0+56LtnfpytTKdS/fu0foK\nL5QNr6Pip2Bq6ylJqXPLzdFHpNN+0yuiTBMWeJSiNiLgIBZzBmZO3dqQqPod\nUIFxpg6kQ7gH3ra9N20WUNYuRpBKY2L2de/W8igIM5Swqak7aRSLVRXAprRi\nOd2PZABfpVWvekcHs1NEBDI1KmlsUDCG+Qj47nlqLLoejXV49fhtu0xwemuZ\n5tnI0H5DjUoefZQZx00fE3BIilEKbPavi5SVXJTEqiDrAGz4w0RKe+yreyU7\nqteDwvU4JA/sL04WwbJIRiowV1mXmWnKeyiqfCanmPPF2NnWYHiAtt0R0gs/\n0ckKLZa2imepqp0+oRif0B42QnkjNUs/zRuKdulebLkxHuvyMAzCd+qAaToj\n4pF3OWMYDl5THVdA0+n6Xh/GjZso0uXnoy2rO9vhglwpHKnrOeZQwx7dWu6q\n3GDjBZM3qUJ1iBh1cbCe7CUdddvQVcdXp3yXRkrsIRVpxtDfNuKIQJFdlTPP\nH93dECAtGV3I0JjoPOCuRJzYGm8YFLEjrb9caPc6CuDpdCGj1tSX5LGd3Swd\nBgJq\r\n=Db13\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxinAnzsn1ebkeYT+9VWL3VhNTCfrIhreYWlUGhsL71QIgO+gbZk/ZQXcnS/HE0hSJ132JoFRE82nunWtMc5u8QTE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.2-next-1591365315-aa6e26f7.0_1591365377567_0.4020769730207274"},"_hasShrinkwrap":false},"1.32.3-next-1591365909-4545c691.0":{"name":"@xdn/core","version":"1.32.3-next-1591365909-4545c691.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.3-next-1591365909-4545c691.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-0MNBAEodJMmdQ5flfvmxJelNssEpg0JuHv+iUZ4xf97QH/EJU/LwhQECPGyeQGDI5mJ5w/Ghn/9pr+pApKFyQw==","shasum":"a98c5132115ffa3ddeba52d05668b6f22b043660","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.3-next-1591365909-4545c691.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2lFVCRA9TVsSAnZWagAAsu0P/05o/GA6mCzwtNZjjzZI\nSKGFf2wTtpNZaTZTdYztrpFO61IfFuNrGcWhLK6kWZM2MiAGFXutjR0CM6zm\nq6BVvtFhryC65qG3pSGLE1QrCReikdzWt+Nc8jov+Fk5c19ccp7ZFkhV16UY\natY2Bh8RsN8ihi8ZCv28c8zUKf1IJXUhxShAbbHU6NxKh0mBf3OWYTT6aJ1P\nPlP2RMielqQNKvAYF5iRqL67mcD52PJYidu0AylQxQEzHZ20Gv5UnFahWm8f\nHZSqeH3WFyPX4P4y6zdF5ZB1wZ7GmLt7gQx0TnC5eqlyBNokUadvYdXZcG7/\nxZ5n1LK0KuSOQ6kqdnF/klfw9xl9usVsJAlfjN4P4rliD19BU2f5cC0Py4vh\nr9eYmMZPguLM6hy7WL3czsLQly5f3BTtKB40Q0/blGBc+S4DEfdpwB6QuypU\nCyFB1pbmdzxa1PMAhSBVZlMpdEERfxK7Ashm7NLPfiIBLb+/FibYNB+UISuj\nxLNoKczaQqwbXVn1yU1HK4nwsI1lC0uPwGcz9YZJxA9xBkwMoJP0SthLfgMV\nSP+t+T4DkGhMkGhNrEi1wPUgbV4pDbJLIh5EIAO8pEXcWa7kRjJ+SdFbIbhF\nqF/JPQ/P+y5GY1l8o5ibmoZzuFUWbNVwvJ1MxBZC/5LYDYpwn7qT/bcZF/lr\n0IYN\r\n=1oUr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG81rGYV9PVlrBxvpNpHv6EZAiMjFGJpEFVA9BcfSPSPAiEA4kNPqM83M/Y9IAnE8KfnKJX4EgWyVC0ZGmFkjaZSHIw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.3-next-1591365909-4545c691.0_1591365973429_0.19750453060676643"},"_hasShrinkwrap":false},"1.32.2":{"name":"@xdn/core","version":"1.32.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.2","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-H+RdxWpNdIgYU3SpsETo4MZubBNOhiW2cm6w/ojiKqYA//PVS5E2JrdiizAanGA7kI+5Ev9hLaT/KzjXEb4C5w==","shasum":"d74abea670442099003592a854ed390f84cd86c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.2.tgz","fileCount":127,"unpackedSize":516998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2lN4CRA9TVsSAnZWagAASGkP/RrnSLizDTZeq0TymFnU\nEIbZjdaUTt8On+ZvRaDLNIgEFBsf/9bM9vX/5EOCpAR1V27/hKFiCA3pkAX1\nX7e0bpgcnHMYu5U1d0NbX35thQ60cOpCCLg+xTXfONhzO1HhoHmBiSZLlUMa\nXJ2acVmpefhaD9O3wn6zhEjhmVcWwLU/Q4BHgAWs2CguSvaFHeb2i7zxber6\nbwVCfBWk2vVeXvr574cgMVXgWNCFh9Ik16umfYVxP9pvRxGau1cCcHzGgfy7\nzym1ykg+1LMAXOPNGZMzKt0JeW32SYjAyDBaJJkcdXhtXbEsDRrB31aQN069\n1OQnIoU0YytgJigXjdfhIBQQPyhrlI6zrQsS4nVu9VKH0OTI4vi5r1pSyHKL\nDG/q29QWeEZA5loPoHIoub92DKut89yFhO/i5kKMpv7CsJK95Lyqt1OLz8AL\nx+KKcQ3NvAfbq0cJAW00S7uCmdPvEahfydi9li5kCf5uqcaDbE6nx5X5swEs\nRXHlTP5Ov5Di1LxBKoKZQNpx0e4eWqZ0maJ/qb/unyHenzIcddmj7F6S5nZ4\n647rJ1/8w407MY48irrvPzZTZ1F+RczDhgpn8bM/AsU3hVc/BG0DRdYowB+W\ncEYcHWkVWK8rl22j3jxp18SstPJLQDegjakhVUmoOc3ogth7PvlZPzDa5LBv\ne3Nw\r\n=dXj5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmJGAAlzy/HUJ5tdpg6dCz/dZxaOdSppe+3wq4+ljBrAiA1H8EJsqi+DCfKQTrFj6akaFvsEgknYxPqCZKXRsJ5PQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.2_1591366519505_0.4355442524581825"},"_hasShrinkwrap":false},"1.32.3-next-1591384132-b7f29ade.0":{"name":"@xdn/core","version":"1.32.3-next-1591384132-b7f29ade.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.3-next-1591384132-b7f29ade.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-t8ivWQC9SS0zSZ38bAtIDi5VjdE6Y1l+0NqyjAXvt2EFWQplf9bYf5UoLUiEAwaZi3V8HAohc48eiMBDedFzoQ==","shasum":"6df96c04b528e442781fe92a49f384fc23a71cce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.3-next-1591384132-b7f29ade.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2piICRA9TVsSAnZWagAAcKgP/0I9PnDuRy0nAm0mPt6+\npu87kwVjiAe+O5y0ChqMTMvbYSn0gWrS7j1iMm2vln28STFf5qsyEpjSw9Bn\nQ7++7jx7B/ovV69TdZrVdm9diZDPYSKp0e0xyfGhAOCESg2GeWfAENPa6cSO\nE9S2Bdp5jrPiH6zVE3IhOhV4d/jXvJYppqRY1I1BuJdPy/87ylNBSi0GEcqP\n+5lfoW20eSKdDbYzYyLTO7Dz5IfGBzfgUfMQnPEX/Nhu+utQTtPlBZMCIe7G\nWWHXjOThJIN3xtw9SoehItOMKjrkGHmt+dj6CMzcMESmlXDXx4ki7vMjJsOk\npHcKWkbfpZUftYkwkLYVHBXzM4dQ0M8KJLdZzuF2Wtk3gdzU9w9qSJ+EW/GH\ne+WT5Ez8jxPvHhn1FUQ409AellYMqQd0gnzKtDyJfuYwe+ZyN+gU8IgZd9wA\nYDlw1vMC3xSZrcDh7Ag+I/7/YCO4bXSUEShD6CG6BpJtfv8ZO8pLnBBcUyII\nrqsRXYhKUm5daoSM3HFjsSvPlgyfTwboIfGv1qAxQ/zBN0mhK7VBJO6xa9C8\nmm2gQAu9N2yQ0QI0tcBAkJYnja+Bcn3YKEIb9QGAAmyPJC3FdZKzQyzeUvlR\n7CxVrubiK7rQmGW53r033JGnyKRicjQs1S50kKbodw2thBuFaeqc82/5qmc3\ndg3S\r\n=AATu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHaIVK664aa4q6A9ycjDDmDGdedhWhSCDmgt5PuzwhTuAiAOi62OX5hbpLFRBGNHqWo6hQLwFRB69McAshTmxYKtQA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.3-next-1591384132-b7f29ade.0_1591384200014_0.5369127202719994"},"_hasShrinkwrap":false},"1.32.4-next-1591384237-2e40e89b.0":{"name":"@xdn/core","version":"1.32.4-next-1591384237-2e40e89b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.4-next-1591384237-2e40e89b.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-eDoXbydOxoDbjv6dnB9YpCOl3nDHghw/yiFlGIyFPP75883ouH/9LiKIgc1wJqgjRXIAE5oACTnHQ/aC51wk4w==","shasum":"46b7b40e550082a77e0fa0eb8348339e6f3bc9f5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.4-next-1591384237-2e40e89b.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2pjoCRA9TVsSAnZWagAABZsP/1KJBUud0UeGlZqD4pJF\ntgFBg9ww3NqjqdrlMqnCnjoVFfZTr6IZO8VTFCoCiCjuegANjOVNzIFSOLrH\nkXWnbTMly3dGsQbO89mQzi4Ms/DlKLTLNWNeUtk+fKJTJIk3I4HdfNquJoQq\nysAvjILAPI/qfFFdOnd4dDNbATi1EQGPzTphriEgAHyqTvy1kbmFPMxgFKFe\nJfRfDD2tfVCgj79eIllgox8FPLdVlCGORKdDg2Msf/4vkV+1unxF0hjKt3Wj\nHBSLWZ8phSHSaGmIMgAve1JCgpdh3uQOSvCMVcyVIccUPD8S+oCoiaeEjXVF\nlT251qTTgmr/a0s5v+qhpyFdqwsE0TWUPqkKOMyVb3fSITgyWcusUOjdJ1YS\nidMKn6YPzPG+3dALStZbLSvKgexeiRcY1dppyPpuNHTzQhXAUdTukb2quUmW\nEvzJmdy7EeqVChxQy/FXYMhUgEOFImyXk3Gq6dBm55ouZKhqYfyIfGa/JhxR\nKeVJas+C6276VTgAjhhl+D19tE5iV5y0CXEWsIVvRh77UsfvAnKMD2NjxrD/\nyWJwF1bD7wgOMUfXwKkM/L1UcOL+xtaiP2rAXd2zI16Ui6maRGUmHsnqaq/N\ngzMpxGZt2fE4utcCwfgiAyoXzFg35T+nO3JWlaCEO3I6S18j+jY9xIE+rlMG\nFZez\r\n=VcUk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCimwKbvZGjNjpw8BPZhDlq8wM9Y92mqUYPgcNZRs0HqgIhAPy9DXqZttefVr3OOjrPs0B5PvDqCPuygI/5wMGFl6QO"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.4-next-1591384237-2e40e89b.0_1591384296222_0.35738151706793886"},"_hasShrinkwrap":false},"1.32.3":{"name":"@xdn/core","version":"1.32.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.3","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-bdeCy5g6mBpTE11ycLGcqxUZ6fjnPI5ZObwLWtqKqLTsK1h59gvY5pmqDuO0WTdXhv7QuUcUFrtBqA1j1vMBIw==","shasum":"c20e8d1d4fcaddcf5ab152385f8acf21472118e1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.3.tgz","fileCount":127,"unpackedSize":516998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2pkbCRA9TVsSAnZWagAAZ0QP/2V094L6RgXlFwsNmTPU\nvijOcmflDvpDzVhK62cHJItUSF8L3pZQKHK8VhwIGvI2wB34BVNWomrPpT5c\n69Ft/SBLGwfiV9h+ow7IQh7D0JaXpKg40LjgpdxzWjUsXPB7bAe4IYby8WL2\nanGQIIlPeCzL25L9FY58KN4PFWistNdVeFY+uxUVQubCYubRpkwkdpQSW1kl\nc1kTS9LVFeBZWOC37TMpnL0wzCvgLNMviV+V4trhkOkezAPuPh6eTM5U8vQw\ndWzLrvt95VgQFXN+ePwN9r229DcQbhvfKBi6xrXvpZz21cHsU2/govPZ+03r\npWt/s8jFdH59yeIWFIjMfHzXSIIE7q0wBkqR7qnufrfpQJAgpA9TTruu0zD2\nKe1/WmHlVlwsqhtSmLJ6X/XX3CbT9iWrjAgK3LOst//oh70IoOvQKDN3+m6R\n5i3ctEDTNAxHqiwVHAO5EgrZC2SnauVOyf1eIMAe26dUBnKX/flIASQfHVqk\nd1PRXzbb4COulCOs7Nq/2YdFhTXRJtXSBzM3AR7cc4RdSu0LqJ/bF3iUdw5H\nK2GvcFVVwC49bY6ytswQ5RjMKbOdegF7TpBvUOvwx/ALANXvs4gs+FXuMe0J\nJAoRqs9l5Tb4tsvCjE2W/MeZkoeRLyUc6MuCFFX/HqAelygEIgxBUgxo2Zx5\n15Oc\r\n=dx6o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOeCdBicDWS93b2ZJXovgWqb/e9DYuCXIQSfsGx8KrrgIhAK4YC2tinRPZaM7v3P2IVhInCqVDNKebVEkPP0xGCQg/"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.3_1591384347253_0.5939978389934499"},"_hasShrinkwrap":false},"1.32.4-next-1591604924-0c44f6b1.0":{"name":"@xdn/core","version":"1.32.4-next-1591604924-0c44f6b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.4-next-1591604924-0c44f6b1.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-gfE4orxI8Csrs1/MvxeCX7XDsVYK0yeFy1q2k3VYn7iXmaCim51CQiLIwetonuDTquGaJm7994ZW58g27XB5iQ==","shasum":"8aa9eb55a50f10eb3c0b25f0aae4669601a9ed2f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.4-next-1591604924-0c44f6b1.0.tgz","fileCount":127,"unpackedSize":517549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3fb4CRA9TVsSAnZWagAAPJ4P/3L82I1P+P0A8N0Zwo1F\nQeP63EUAzZVgDm5dN/4oOCDDeS7HMT8+Uuqo5nIC93zkoh7Oj1vgIRKXjg+b\nG8Q1ZwEcJ5sFtTj9NQpMZ9OiYAxLOPWHlQZ3B4mYpxbfJCtyRoljNMmlua/p\nFSf07zVsNML8rwGrN3IX+nH7k+36M3FWS5+U6lzNQCj5+0/vkWPnFJfzcJMJ\n+QKxUNgrWivQ4BAb51DuuwYCthYTE+ercKM4oTTXBEgJLkF9Dk6Vr83tNpYe\n7+cK241UYKOz9zAGI2SeDW+SmzBsPI7MkZoYzCVs2Vgbycb8MnW4ZLJRqBdc\nrB9z+SAeyhuaDiFpqlgwTU/Y4cW1cRVFzGiX6WweqkztRsRLtjgalLFWMBsd\nomm2waJSlKrqZQZjEYl0VWKSWWgr8wZs51nHxq2k1vK4BteFxraYHrWimd0f\nUW/siscwy9kfnonC5fKtzrozI4GEGA4rjmI+965bwCSV0ZI/QG+fjWX0n2t6\nCzTd6HKOZuqg+t01eB4ApWrFRY/CY1l+fmCvykJZPACKB0s91RFv5cOu47Se\ncGjkgD1OzGBo7lfg11BInu+Eb3o26hYIxRWlTwdOkZPjxZPRZomWWetta905\ndir39LY8QM9CNhWd+v/4swVrtyAjkPSr3IP44V1CV3juXu5IfNckdaIaxC5L\nN717\r\n=5A2w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRaV6YwFVVQHSnZ5B7khpBO8X5Afy4O4r1I4upuWkFGwIhAJJ/RwAWNZC/w7RDHfWkm3t/eRzbvLGiX8z71SLSQcT/"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.4-next-1591604924-0c44f6b1.0_1591604983972_0.9290761469656439"},"_hasShrinkwrap":false},"1.30.3-next-1591615549-03794b94.0":{"name":"@xdn/core","version":"1.30.3-next-1591615549-03794b94.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.3-next-1591615549-03794b94.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-y5/wBp7T0fOZXeLRXTY3u1eg35RWtDuAYk9fSnuMr2TvkE63ihNFmbvhTT6Y83ZKM+Ogy6QdJU0d/VbKxhOUKw==","shasum":"6d63aac9e4b726a27da0fbf6cc0a7e779ceb5578","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.3-next-1591615549-03794b94.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3iBtCRA9TVsSAnZWagAAlxMP/3yhrA+PNGBk0Ul2bVss\nGye2fk+PiiVvec3Egk/cTY97QxwnHqn3di+7gdhCX104+ATuMKWOp2p/2WJ+\nakRlmik2AQtl2zO1INdEaFeQ5UzFTp9f1LrSodVKNW1zARpR8+tWcworanGK\n8XnflLq4T0Pbf4OnXh3ntR3Yk6chbb4cStZ1vFBWYvp3aW7twIplb0/PGW5b\nFaFM9hnEZuXpvQi8z2sUNowHsy/Z7WQ5I5re3bwN38DvPIdGq1ChWQjvUu73\nw1fqopAFl1BR4r7myUf4mybZ8pacsF4uHWbun1veL+JNxCn08MBufGVYkGAt\nJcGMBuWz+f5v4Bgf5vd3vo/ZzeVA9ByKwx53igMZkQWbdAKaZFlQAoupTxkK\nDS3XLBmnhH+1fG3iWJuPpD+1mafUlRDgfsy3PAuArG8S+gBqen+2B1ADQsLY\nmpd8U6Rw1biAHyg+eA0IkaJmn9+Hw4iL3yBWFdhzlW4QVG3UOyonHcTu0Rzl\n4TGBqM9TTnliRUE/dwWi2ICbYNUscJTMtRiyKIl+hSWDopNsbMnzxGBWWaL3\nCuvUdfm0aBdXZqi7ocF+9BKxJKrQtdCKyRDqK1BDsk5ji1e+ANy15g3AJcgc\ncMvG1FdOwMlEYyJy1aeETCzYXEnF4JJ6SWrCrMq+MSzDzZF+C1DBhWaV6SKI\nUlw6\r\n=31xM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBfBaokzFdezkW1/U3v0dGYTsDS1LX3sIR7m84gVnZ0CAiEAzS1J3nTyeppdLNWHXDneofewLOAofJwJcokurxd56yM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.3-next-1591615549-03794b94.0_1591615597146_0.7987617478533469"},"_hasShrinkwrap":false},"1.30.3-next-1591616664-dbbaaf44.0":{"name":"@xdn/core","version":"1.30.3-next-1591616664-dbbaaf44.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.30.3-next-1591616664-dbbaaf44.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-PwLCXH7v3FrMotIwvTiZum99BWfFW3gScdiQIROxf9sy8KweJQ3ll9y74VxZ8GjpiX6GB0KJ6uK5XnM7SZCyIg==","shasum":"d478e67590cc612087a4597335c9c4a2cfdddead","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.30.3-next-1591616664-dbbaaf44.0.tgz","fileCount":127,"unpackedSize":516488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3iTRCRA9TVsSAnZWagAAzKwQAIJFxILS527uf4hZSuE1\neQMTQ7X+CYCXDLgpFQPn4ThCaoH1qGMEgnTvaFFJ/2ol5PYhsCEWAUU5/LPX\nCNYI+Nw6d+Yv0ah+DO4xEgnx8gVsMvhmyaC3odqNHyJRHppHtjpQ4xR0/rWg\npw7IEP+Ial1+BNv76uqSB57zi6Wr0YgVOfy1/k9m1Mqnk7hYIA5rI64uHPsU\nSZ2Pv5st/5qOUrh6B1MCbBs96poKYzVWVnxVXyNhmk5VMqbB1jHLkdybyxFD\nQt2PmRHniHnYGIwEXEEeULy4sdi6Ush38uaT/oyljAF8JuowtX+1HKyri4pf\nmeixOXuWyFoQb7WOVaquCu7ryQG33o1fWJkbOAyfuD7/fDYYhZzSWKT1VoYD\ngiGTOQMJih4f13IBq2DiSmtX4YY8H6dlsB1ooXGLPWnJIZ/gcxjhq9YQpJT/\nF5jqoqSr9xaet6vnw6HNtI2lzEVii8ezqUU2LSI4iWxl3/CpMUiGgoNls7EU\nSbQUP83CQaXDmmoVBDG4LsrbSfXahnR6vuse0UAq4dIGd6T+9C9se6Jw4YA5\nMHc8gKO8yvY/xPKjgfKcLWiPiOCHmqp7UVVGm3UoS2jMs+bgxN4WRC4D+mPF\nq/J1cDkvT6oZQqHsAXYB1P+lpAq4AoR1wnMn5lYn4ewk7BJXtbPOCw9XDrQ4\nuCuU\r\n=7GvN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDx4Wz2ZFVJKaf3J4tmwVDrgbQ55CvaI9kN7BXcSCY12gIgFeYa7xtuogC7O0e7HLvKy+sH+Rw//RWYPFI525q69qE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.30.3-next-1591616664-dbbaaf44.0_1591616720821_0.7037109668764405"},"_hasShrinkwrap":false},"1.32.4-next-1591617441-66aafce1.0":{"name":"@xdn/core","version":"1.32.4-next-1591617441-66aafce1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.4-next-1591617441-66aafce1.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-hufEvvtJ6W++mRcHwqJfJ2pO9Qa3SnB0lhxcbbpLv0QE5AL94miwX0XEdO10Gy4MS1HJo+QDQ1Bl1/mlYmC3+A==","shasum":"749da36d48a1fe04d8e4135a26a7a4e0b7b6ce32","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.4-next-1591617441-66aafce1.0.tgz","fileCount":127,"unpackedSize":517052,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3ifhCRA9TVsSAnZWagAAIXkP+gIlB6TSNAQXDmJ/ILod\nQ/4LDO2JikaWHJ9EpMbappHvlAGI5tFNTPxvvbTOgAGSqeSngxQj/73VnWAI\nRGxOM/VwgkedW70NntcH93KLO6bcSdLxLYQJpmSW66+AHfGFhywUU5Acxn21\nPyOafCBRDpOi46DTfvvmoTLCNwLzJVX+z/iTVEihmLiq/DJKSQEH14R4ZGj+\ndMAEWARONIFB9dm716KjZZx/dxmOHu/Y5EqiFRCD82gNufAEpYtWZqOZ6gkz\nHMkSepN80XfMXbXmLgjpefrZ1pZ6xXxAzTmDgt1g4bDFM3lBlCuFZIQBoFAZ\nWZmNynkRw515R9Sm1EyRJCvVwBwe/BBL6PDiNnDT59h6oo1VPuiZgtTrGZq9\nerUZmC6TyEiz8YJZfiR105vnQF27kCe/lLRa/hIcKNwNk6zoyCGVS85//gr7\nKiD1BiNqOmfE4vToiIQoPqGMMF+RD0EdWeB7vNS6LFrs4pWfZbYBcW4KWkcM\n3NWQAHhKSfkrHxmC5Qvtx/aO5+5cQClozjSkXunWVqDOju1j8S3Ab20yqzIj\nBySTnyaSN+3Axx+d1PcpK6huFjk631kb3kgpoWVvI4+b1JvghNjqmEw5KBXD\nDK790ICJQJal7EHOoUh+dWKGpHRc8ep6T1vBuWWhRHMVXyc9xdAKjJlSul2L\nv9/s\r\n=oNPq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDknX4SS4DfFhg6rHTUXUejMt74dXLpT/YecYTbYvzJGgIgSnVR9LfR33ycxfsKUTpFeeVI+EOtcGZZooTYS8f5mzY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.4-next-1591617441-66aafce1.0_1591617504982_0.038060388531936606"},"_hasShrinkwrap":false},"1.32.4-next-1591617746-af2a6a42.0":{"name":"@xdn/core","version":"1.32.4-next-1591617746-af2a6a42.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.4-next-1591617746-af2a6a42.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-SONMjrV1JqHEonHL7ZowiONt9Jhb9BWnjd5xVN+5MhP8FAgvafNsE7W3tz8Gz0GPPQ0zohv3hTYJmpnbIspGqg==","shasum":"a0aa5a06bc1ed774b4e6acad11ebe117bcf28be7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.4-next-1591617746-af2a6a42.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3ikOCRA9TVsSAnZWagAAOWIP/1DonclSSv9CiWCde4aA\n27kFiMho3WWEbZ+4GbUE8CQ7CvtI5iyuN/ygE8Ccy+eAQj/NkPIWE+g4GpUq\nBnukCL/uYlDB8YO7Z1KhaV1ixRBX5GeJxhIowCmU/fBSEp59IfagT11+Ut3S\nKzQKxBL3PygoZ1tVJXommA8Jdm4pR1yx3xQch7tKj8O0Wh02nfueG9IHQnLl\nD6aBYLIFe8J305cr0pb6NSqS4EPWtIHex3rAFKdphsgy5R27kbZA6Nd4jeL4\ncVaQmhTye2nxV7xqJ3w3Z7hnZ1JMqsAmHr4W/yL6c0ZlnPNQ8J6Pkehron1z\ntSzC9jdqnfPpXfMFTNDftZOa4933lfyih2/UyjkAkgTcC1iJ0v6dt5gNDRFv\n/1ROadCGvYKMJw2fyHd/FHo6PgD9Mpo4hwaOCcu7ira4h5WXCHyV/K6nADJQ\nqz+b3SXXYbO/ENLUkCFC7E0OKqRugSIIXHbiUnbK47314/gYGK4a+MXUGNv4\nW4iHks8Reerbts53d3+nZK50j5gGlubJmgxSI1S9qmyZPTwHaZUJNLXTLxR1\nj5Npv6cCTgyKfPIKoIMyX3R4Zw1xh6k8tKlOMSMlj/LCYN5ZDimiD4DajJju\neFvPLDLHb/SzQueCqXTr1sdw456fQPacQpDjvG5zyZm+TKp94Z4rkdQwQ0Dv\nqMvI\r\n=mp1g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGAIEiFRFmOJ/+l12TvQImee1XIVdCVRfgUUJmv8hy5AiBF9z43tWKkCCWFXBXoykQcVpO3AWELaroaEWqGOtW7nQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.4-next-1591617746-af2a6a42.0_1591617805864_0.3792591615113725"},"_hasShrinkwrap":false},"1.32.5-next-1591617841-57ead78d.0":{"name":"@xdn/core","version":"1.32.5-next-1591617841-57ead78d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.5-next-1591617841-57ead78d.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+2CtWFH7QydimuCDRF4om0JS+vPc/DzeALxZo7/1/iDDLqV5kPl+AED/BdZVHFazsA5TKcmcKplnj1HgEjj0og==","shasum":"6372a7c699c8a0ba27926092377f08eeba905531","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.5-next-1591617841-57ead78d.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3ilrCRA9TVsSAnZWagAAjKQP+gL1EtIK1FeSVSIJtJuk\na7I55xgdFKQvOCJxZcw5fwdlxmnoYfL8oLcJBrwRv/bGer4zYV1//cYzcuSd\nFTHKDgZk6NMutlOqgkbo+4clqxMiMb097XzRP+/3LE33RIayp5d98F6A704g\npbEmc28LAgVaPNawTWckUzccWDsaNtcBia8c4A9nGkORh3dLhj+MrZ0uORB9\nzjenR+2rEuZGQRQ7McIscInD0FvEIJM+bVSJPdUVI17xwP3m9kdfM+kipNUx\nl7ibkiaDxOVoYZ3BqRz5MEBhr7riDiUGsD/LIkUj5IJsKenAMShhz42RlmbK\n22hmK7BkeHD/otpuZ/v9y4awcqgnhzaYJ2KbpZLpnEc9BdNCXl+4m88o7Xvc\nAy62/EIcQwEjdvw70k0wV9y4BLOTr1kJmsCEYi6FORfDHz6mEF+dX46VTpPj\nlvNowVhJkaY3EefKoML7Y1SsRdlL8w8lSwSue9ekUXkkeWhWecbPA5hkVhYj\nOtlItFpe/Ybnj4hOtjs9aj3CpaSB9PIYlHUCArYTzdPEtxdGLFNekDzYbiWr\n5rq7biDi7SbWe/esn4RowMYCBVtjL2YkdQPS88fL8Vd8Mo8ApZg3Bq1Gxs0s\n2fdqafSyt5l1fPxIvDG7l3E4juAnIMVmLLFO6Sy3XPMAvhMOP8U4K+1nQzaV\nJuug\r\n=Fgy6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID114B/yc1uRrGt6tE2lKrpGcWgsmNB7kI3aPAyLjmO6AiEA0tXcdeK3AcUuchv8SEfjucESYc1wvaTqcglrNh4gvSc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.5-next-1591617841-57ead78d.0_1591617898788_0.8103684004793577"},"_hasShrinkwrap":false},"1.32.4":{"name":"@xdn/core","version":"1.32.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.4","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-nBqAKp5HCb4+Dk4Lg99rRyc4efgEUh1119GSh8Me9Pv6jNWekSe3nDUBYBgGb89NrREBYtpH8m1G9up/0ISeHw==","shasum":"01868c0b7518fbd9e8cd3a6ceda6dba3ab3e1762","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.4.tgz","fileCount":127,"unpackedSize":517087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3iumCRA9TVsSAnZWagAA0JQP/R59aqubCqECtDZk9Jxl\nvthFcYm+QzaFWxmBiz9+hku+Mu7Z/LR+AefCm7aCXMhTvNyveQhcDxtM0s/s\nhoKoL+b0IN5VtyAADDJiKOVFGXrb81ZTzSyPBeCWe9ZDSht76sTs0/dJ7wKD\n4TqwkZJ1VMOdFZRbyjZZNwBviJ7JriMu5p2r3QUNT4GzYuInXvoZxLgeFiIy\npwnuTjSEHfKNUdQapQoPKZ4VgDWTbm4cGzAg2Yv8FDei70fc7jU+/Nbr6qPR\n/aFGMcouaaWyio+c+OVEszJZXiCXi45iZqds8G/9Wl/p4A0WtzTatTkzwYOS\n8DuIfCYTN5M/jdmW1R61ilwtDEp16eXZFQNYdJKvtEO1IOeMM1or8+Fl5Eak\nNN2tvXpsoV/O3EcUaQLxkCla5/czGnlxYSfyMdAltPH+X/68yrHV1psZ0N+3\n90Ys4ehMLK8Y2MlpQEpYr79KtlT2o6uFEDSfUaxANxKmWdGUIoADuBD5VmOZ\nqjAYlmgIN1S0vHahB08regU1s49dv81ugd707MjV1PZ6YtMR3jV10J+Ok1Y6\nM6GeviudHCLnFNfV86zqhsujQ8xTkKy8mPLwElkA/F+ayVLfkmtGAa490aMN\nQTRqas+u8j/tPCmE2Yh+8RbyChTERiMZbNzC/69URNI4W3JdXwyFAe1aWliC\nJaIq\r\n=s4B9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGWwFjDKPX49lXw/+hBCbaQLvt3Y9Y4IBOiBtjl2C0uoAiEAgoSyP4WsYO0MsuRMqmdaPbGt+QLQzDjW2pJ/XuzRp6Q="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.4_1591618469849_0.9760567047060758"},"_hasShrinkwrap":false},"1.32.5-next-1591620669-d62f2e70.0":{"name":"@xdn/core","version":"1.32.5-next-1591620669-d62f2e70.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.5-next-1591620669-d62f2e70.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-fsoVkmD2pfuCLpwrjCq+uByYWDH1P9IJbe6zJzvA2P+TUwCiTmBu431Jl73YlDQYfTg5qhiMVWzJ0s9jMK/LDQ==","shasum":"5bdc8f7c20a498b9d0b6685471418f5d33b730ac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.5-next-1591620669-d62f2e70.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3jR1CRA9TVsSAnZWagAAW8AP/Rm8Fq6wBS6/yspYjqa0\nZrWSmU8Mp28y+0+sSu4gRuyzSkseCga8sNqG9RRmrT3yzPfq6lyej3vU7Jpd\nUmSsURY8yiRv/NGJ1bl9MUkqQ/Lm3JFxRevFHiAvVaxAAzn6c3YyCHfXNlsT\nY2o1Nu1V6pnvyHPWE+tIuSSqHeuHrdQTsVtl2saDMBQenzpCwZpEXr9Y6QXq\njGwNjj6njh0p+1kh7bXUT1vqlQHor+L73OulNcshoaHRBuGSItLxT+DWFkGG\n7q+0f62omszeyLMuKUrcRNMyVohp4Y6TgXR3tdovYMiOInbQIOwzw14izWde\n7aIjvgSBFCiy0A677q8J8S/HttBeSmDsVZXuvJBMeElj/lMgTMcNXfATA/6+\n0xaWU+TgWuROTcK1u21uCiaS+jk3xJ/BkDaVQr8VetYp7rti8I44gxvIaS/a\nCt75GtXCEMAZqoPRp5cQfkL01Q2f8GxBZ/QW+H3LAavk9YICoB5JNY32BIGf\nIItIvkwzDyXwR9/kFFaX1iQwFNKJ4EfJ+EiwoHsuaNNXFqqgNRm5N55Galbu\nArH+qKJMnRTQHlPxShRZynISGgEVrynJXZyuvDAzlyxBFI04cy4DgRjYUPX8\ngq0YVeoITdZX2plTIMW/mPcAdz9nuG0QNMqF6CRan2KDtYPxJZbYEy+10QeF\ngl0D\r\n=PzlR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDBhpf6wcRR/zwhLr2tXKcsD68pnCbavoiEEIZNIXlzOAiAZ1lH8kDhquoP0hRGaj6o44yo5V88M7icg9szNPdcezw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.5-next-1591620669-d62f2e70.0_1591620725192_0.11163896348695213"},"_hasShrinkwrap":false},"1.32.5-next-1591627086-47750462.0":{"name":"@xdn/core","version":"1.32.5-next-1591627086-47750462.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.5-next-1591627086-47750462.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-4Lt0S/eoTCDIHsw0kcB71j8DrgODnRfdnMx5Ks4AFfQ4ALwRmZY3qYbgQLl5gVhl8ocJBvp8v/uVs1Ynf0AzUA==","shasum":"b0106dd6cab166c56e9b3a23b26bedf9df671cf4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.5-next-1591627086-47750462.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3k2SCRA9TVsSAnZWagAADHUP/2907QTPosYh5I4URd3z\nGkw+Th46HLkDtWvir980zDnC/WFidjUaznFTS3540+pMtubmmNhrGhuGu4lT\n2z9hWQrMcABRWPJAgrP/EaGuvqYknGfx1FkqIEAQk7AT8YFTx6C1XUlE4jMe\nuYoZMxLzYFb53stxY8asYcWDdt5aeplqfUlSnti+H0HzEUhIUriMmYKEB2/4\nJ7lNhmEykA9dAXGKMl7Zl5QaqW0ZDTp1ynjRgi3OVVZqQNQgx/wUYkaCHTWq\neTxT0Bfej+/myk0hGekByYfN/GfdE0NqTVwpcI+W5qkkGooIUzZxj3zqSMl4\nNX6/d/LBLKBgEqvF6gne44HC7OCMvMjys2yNfZWISqEIhkWfM+hGn6/BA8+e\nk2DhglS+41lCEy054LuLpN9BZlCfX3cstd5ZOoExWmCeRU42AvsnW++K1Pze\nn5incXmvDNtNGn3be72p7/ENr5Gr9sVg00xxNpj7IaPJz/U3mTiCUQxGpvAh\nfDqf92fZ7w179LzbAOKjT956MpkYqTB5yzpsthqMKXqu7+5QLOH+Hm0p/fp7\nhebFfOKI1wzGT6bm7sq7Jmcim/VzLugtRYvRs4yNKYqqSoImNsk0awRZZRbc\n4+iyDvS+0ysOR4NxjcEeDrbcCHy7ww49yA+0rjxC4Ckmo4RvDOOUCdpjtzfN\ne8tR\r\n=hZdX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID7C1cxiA7VWJ9AZpjo0/rcClPJFQGfi2u834O5NWTCdAiBHdkcIoccrCTTAHSPWWGJUG5suUKSr5aW6PqYHBiv5Og=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.5-next-1591627086-47750462.0_1591627153875_0.9984664875031615"},"_hasShrinkwrap":false},"1.32.5-next-1591629014-b4ad35a6.0":{"name":"@xdn/core","version":"1.32.5-next-1591629014-b4ad35a6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.5-next-1591629014-b4ad35a6.0","_nodeVersion":"12.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-T8CR2s6zcUDfecZbz1S2ZuCIeOLzj7EcCrO02PEGWp60RdKq3VOptzRf8E8GLrnVlfhJZuvlrhXne1HovPIGbw==","shasum":"99b77ca2c924ba041214276e3b61096a46b0312d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.5-next-1591629014-b4ad35a6.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3lUYCRA9TVsSAnZWagAAYHMP/RIzQ6QbOaKN8NJkKY1y\nAgGdOCNQwBZHPTZw5JUznBMYablsJMBIYBbmq7W2NlH3r4IsywYsagJ8+SqJ\nsp7IYG07Jgn7OAK9Bk0F/nflGvpOAMRD6LR+XRg42x1oDk5EHRQ+8JpBWi0a\nFHfkAE+afoUuPG5mWQnoTRnKQpeeceW/vqyNo75HIYtl31vm0Z76TNolhxN9\n4R1HbkF7FriILXbTH4CbUDoSoxqjjvNu051rlDGsi0+JdLWQzRjyiTp9sL1S\nF2L1X1cryEpWMHOqqJ9p8eL2HQtzFudrLs1p6O8aXX9t2p/CvGIJK5k/wz2O\nBSXjaBVi0DKnHsLt/P+I2rYD8UUIXRamT9HzozZtoOEriDeKDFOPzCkG6qvf\n2z0tNeUGEzUnWRE2o3z0+K7C8LvrWwn03r40IEuLqD8qiwbcFMMamGnisjmh\nZjMYpzY0iHsF1r6GDyTKGD8sD15BiUAoi9NQHmZiDAJ8tdRERbHM8AfPq/iS\nnqn2nzWUiLbr9FBHd6rO0tLKpOtMj+0Rq6My2XwZaz/MnsWkdgq1YxIgWmLU\nSGP7zXPjNtWbJfnGhPPu2wcD+sk8qomixRQNzFNv19BNbXve+j+9fTMt2aIU\n37fiYsbB/xsc2xZo8iBeiBJrqqKP4xCyAKTxAyskEsL3MHDjgJs/gNpC2c0Q\nVQXG\r\n=5oHk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHc609Ni4h+LwPbGM44/r9FXTYI5pm2bz2cstEiOulMNAiEAj5JSOdcpm7pSPJ+TQbyJ1H0ulnaREJiLOrJR2ZvqJE0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.5-next-1591629014-b4ad35a6.0_1591629079838_0.8558017366841089"},"_hasShrinkwrap":false},"1.32.5-next-1591702415-542797cd.0":{"name":"@xdn/core","version":"1.32.5-next-1591702415-542797cd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.32.5-next-1591702415-542797cd.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+jY7+mw9VgE6zaLuRGcgeCoKgGBv5dPe1VG4orVGC1hfUvFhwsx+jZU20TuhihjSVWCGdF8Z2GlvJuyPoUIDSg==","shasum":"9ffeb77443998cb5864b1372c44545dad5ceb285","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.32.5-next-1591702415-542797cd.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe33PQCRA9TVsSAnZWagAAfyoP/0p5Qi/cNzMFkCg3xY45\n+gIYdredP+h2Dyd7gdbbjQOvFT9ajMkdGVlqPKhUs6YsBlNAddkzUb7Bsy3J\nhEOiX/aeoW+LtaJ+aCF6w7BR/ktZTqdhEvl+TklgI3zLuasLvsNoVvjFCwVR\n8ARWQyNkEGxVjR6iIcHo6MFStDFHKCExBmzFeWjGoaB05WrNEN0c3yTjwyU+\ntn8Dl1tI9SghLJkxqdtphkthaoZgkovkwksAzGgD2o7lJXihmhAbXVdRS2Ei\n1hgLh/MhnYwZFGnOL20armB+yJv5ALsTABvVtwllCJAkXxVTfiz+g61CArTx\nBqRz7srDYcdFSqfgasSDSVgO38xjt7PZbpkLkkRQs4VMzYhL30RRMo5DILpw\nM1r4a0XoQ6/CmNaykHpMgnend8dYFALZsjNggmhBQ862ZGk+O5uSB/Zf3O2Q\nx4pX3/1pE0j9kv4z4IQLcnRsBTtdonzPc2LPk4gRrGXtuqVu2WC+kapO4ZK5\nAM3NW2n2HwyZnIYNbVKKSRSXGvjun6j5KdwW5ajJQjJ/ttlzb6U02ONs69yH\nNjeIR4Or1KPxzcI4PdWF7NDQfJ/IBqCySdt5/ybDEM4Itq1yDgapyeNZy5wd\nmxeJwALQ+7KhOdxKuu37K9ggJ7C5nNdyfSX/n3KklxbNN8MPSGimVjfTUreB\nMLbm\r\n=HQB0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjcAUKt5DXB+crHI46Ju+41UHGEViXl+d7ZhEBghRK7wIgEm5gIX7hPcJzZHSw58+m9D4qYtgRc8q2JMr4tWOlyuk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.32.5-next-1591702415-542797cd.0_1591702479116_0.08368195124319078"},"_hasShrinkwrap":false},"1.33.1-next-1591703336-2f6fc8a1.0":{"name":"@xdn/core","version":"1.33.1-next-1591703336-2f6fc8a1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591703336-2f6fc8a1.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-BMHdtcdFVf+J1Hvq0ptDYRf+1Wkqihbo5qB+4ESWNwAhHH43w0wxgaiEXfh4TjWbzFru2319dzwJbbi577Wu2A==","shasum":"782eb82ab0b2e7b1438397e7a2ab1d4ba31a5f36","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591703336-2f6fc8a1.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe33dkCRA9TVsSAnZWagAABbkP/0TUChlGXn0yayjZZtuG\nk8J2QMoR3UjfQEqYLu2FAgzoPn0WQ/llV6An4PC1LkkUqVqrrXl1c3PsPFQR\nuVHEXMGKZnlQdkz6ObyE28MzT/IV33znga54/w8KxsvNArfdp2AhYWQnCvIx\n/Ef1qzkH1s96KVBYeRXMAF+l/ldplTiVUIkfisXIvAR2qZQFlXhrKqTV+KgD\n1VfkAXmHO190aMosLcWvhvlvy9z7ghcCSvehrZDan3/jt454e1u4hHWucV0h\ndxC5NK+UrDBZJ9iFr2PWGm84OPo7/R60Zy4R+N4x8NjDfljNHSIGGHMytqn0\nu/lr+1pb19A59WtOCd4pfITVnV+PA27TglmAu3NQcLL9ZDV4kKNhMZi1eHxD\n/cPifu6pyUIrmGB7fHAuLau/h1E95n4d/yL20l3f7i0gN3HUO1XlGY9a4gBL\n1aqKwEo/Q7ePFN8gKfBfi+hR7fRoXZMd8eTuWYjwAUhphMYoksIrdSS+4k9a\nEjsDUGxY5bHuDeJPcw8VjNLvZqLBRZn6jVRWvsFtTYHvmwtknByhBcpAZHZl\nEooRuK3pkmhyH9XXq60zs55HLl/R46ydQyzLr0ZYiNTaPt3SBCSY5A4kltf+\nPPHBdAABlOwdgxfLCkTbdEkqfnRkbEerprhTHIp9zBtQUTXUlo46GVy+rTRU\n9drU\r\n=GpV6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFBeK8QOkcZrEFrtUwP3hqp6jy3l7vQtT2Wg+2xIymmnAiAoiCFSpX803CmIoWdsfQFJGDo5z0cOh5laXqhz4zXuYg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591703336-2f6fc8a1.0_1591703395991_0.8343004001942373"},"_hasShrinkwrap":false},"1.33.0":{"name":"@xdn/core","version":"1.33.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-iglI6uodq7bln9GUsS58o9yLma5gliH9mMISrb0SShnes6Ngh1hROQHJ1FUxGgCQgWINqY3c9uyHyVAClbWemg==","shasum":"92388808a808411392c53d57bda8168f07318b23","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.0.tgz","fileCount":127,"unpackedSize":517087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe37NoCRA9TVsSAnZWagAAMIsP/0PaJcOTA5VNxAcFzdde\nUEmxJULRWzyK8xs3nZnShl+aSs+5Ncbida/ikktNQwZXO6W3fJK//kRNNbbF\naLuY0A75Xw81z0IyVm6NtpVONNxHJW9OnniWi6ZFBU1DrKcsCr/PD740bD0t\nRTt5EaRQQM0Cvyri77gwm8pGRsTHNCoBYNXWeclseoiT3KhIxNJdVfcq8Y1s\n/4fHtdGs3nx7yMNQx/i52wKG7y+yY+jATRZvJrFx3OkeoJUoEiucHxEhAt8j\nY/mjfPvtNHk6vD5x5bbxAqVqc5yIkbGiTxXzP4EG4op1UZjdRvh6NpmFJFOu\ny+2GSoFNAMrMGxeW0nPYm2B+LwKE5ufM1FwZtwxcbj/GmKmufD5DLQzGWc6l\nC/xRKwsukatQgEKzWNqjpwRVUQu8kVfv8AN1DHP0l7pmWvyUakhql6nrxY73\nNL4yUAmQVMfj3dwHGcF6yuMVaUhosJAf2Gj6RbRd6esYGGaSj/8ViaZOjV6J\nO6pnB9A/teEJ6T3KUGVV65ScdVW/ep/vZ3rFI79ncGn9B4z6sA3z+5jPemlA\nmkYgvjwZcg1D9xjvSt3xZr3UyryFb1gf87uDmuZ3uv4svEw4vd+4Izo5kD3Q\n3zqE118KD1pbcTQp++xg140u8J1GmCfNlUb3YQ+EeHSGhniSBWrfUdPyd71l\ndb27\r\n=xyj3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5s+69So/zDqRXQ1Wnrg9TZZdleVGUGeOfj2heVWfpOgIgEuV2ivfjxYhlFVPU6+WhCDMKFYON7PgPRoMMT2raO7Y="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.0_1591718760361_0.8253012324690785"},"_hasShrinkwrap":false},"1.33.1-alpha.0":{"name":"@xdn/core","version":"1.33.1-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-alpha.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-2+oLr97+fDtMev5yUrDp2TIgOl8KYQDsK0/nq3N8YvwHowxCu1QnsDZ2Y08UMlqWqBRLgxMgI5eNTypmdGE8dw==","shasum":"847b32b598f8454090217c9cb9dd6dbf6819844a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-alpha.0.tgz","fileCount":127,"unpackedSize":521596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3+SKCRA9TVsSAnZWagAA+GgP/jzFLc/wkye+poBQCqe+\nyqCvgIv5Rn0U4L1K8I0w3Yn0I0+ggaS9T9y4RnMFwvNsqJ5a04sFT1cgovNA\nNQTw/DUj2ic3Q3BMnjxmmgSl1zjrks7movHgoCvwrsr2Z8g6IoPqOdcaoRXp\nlqazkTosGjDt1stQE/cycPOkQkDBnZvgFpz2sPhx1PZDnCS4kpZzCh07iKzg\niYk5jOWOmOQVvabkE/ylEuSnndTON00dcVn6YKwAjBNSOZ+F5ePQY2Smp5ty\nJrnzqmwS6MTJOQ54/qP+RafJ8z0NKyV1SNlsvIKYnHuR5Y58V9uPhgppZc7e\nVo+RRGztEjGOWN9z7aRC9cH3UEQYqroxdvi1TOLQE5bNL7jawfrlEtaA+nMv\njS1SJlUGcDUPJtYfKIZvay9zQHYHWFTWsZLFpAcL6V8nJ5dP4Wl5jJ6f9z9l\ncAjl8CgFA8ACVlAd1ocffNN/7IoMxPLTl43DrEsXkYJDPzYFZAqFt5DWyFph\nNeww1o9/k9bj9KUDFpiHfzIJJsNzftcWVrquZr8nnQKouvmRELIMHSMviUfw\nTkHUKhG5WCWugk6i+tA+6VP4WxNhgyqSulsY7V/Q9Okaikab8e970LdxYpIs\nO3qLHJ1/1XMsxZwDKZ7fDgiulJKH7NaKH9h3fN6F5xBomeub0ShZyWVpLKmU\nEIWj\r\n=5Ln3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFuCKEVm73lTfT8zWHGzKAnYTwDbQAbece/VoQEuZHQQIhAOmk5/YyVu2R755G9IT3aQCO5A3R4taOij9r0kUCqS52"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-alpha.0_1591731337691_0.20787818602884833"},"_hasShrinkwrap":false},"1.33.1-next-1591791327-80d95168.0":{"name":"@xdn/core","version":"1.33.1-next-1591791327-80d95168.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591791327-80d95168.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+VAj8WLzTjIqQ2sw45gq6fHJv6KcjvakD1ltdIN0uHeFpTPxIBAwTXdiD2MZCnEuNTXhxFF2vQen44LHHUh9gA==","shasum":"b7c09307462ca94bc7e25c2f12cf61f8c0718f9a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591791327-80d95168.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4M8fCRA9TVsSAnZWagAAZFUQAJU+ZjBpykaD4b9Qk6ym\nLmD9Vgob5prYX/HcyzeDbmM+1SYy6xyZcDM8OWY1/q0rdD+3o830kakQ43gj\n2Snsg8lnNuNn3vTEjrGIfOm5dSlqT8FkNav3HFvUe3JSB2RyXVscArBcqZs0\nTBhSS2v7LlcnO8Z11m/vciE4h/ixL6Br94e/sH1p/E+DLH24IBFANIHxegMn\nC82qzFWnDBkHqklLAoglhRHbn9gwbD6s/VXdmtyd+PGyhhEhhVnm53pMUDgA\nMhJ1HdI1vRxXVBpwu+Wanhn7vPFv35WqsKIZW9c0Z8Im6K6TjN6Ru27tuapv\nxq0vnu0RsfWlHulixXFuvh/9unh2ijsTgsTptELjHCpvfu0FkQQXjzCNriPe\nNgr7UkxhhASgcG+P3ttNf/oHbT2SH5RTln21qRvd4V1XWzu40eB65hEAtq+B\nxi1HNJb64H2SjACeiphT1vmpYO3WaTi28iIs+nQqstQJymKwIPYzoOknPQb8\nvqX+5SpdUsk4WDvrhZJQ2XKfa5P0gVALGX1D7+lyVoZ+CMsSp/832NXyjlH5\nyn6otrQU+7Qy56btIMIZt6kXHywgqdOSdazTtmeVjuhGYWGaJPAFVk1HCqw5\n6yc0qaOTveIKC/jXAS++s4P3jDDRJ/zpHxyndyjej7jVyGlcUYdCUiC5pvJt\nEMw0\r\n=uSUZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD++MgS+3RmjzAPvmVFW0MkA6xCIqIJZF/fUduoyNsttQIgOD3cZz1oDdivea23PhJ9BVxAjlRKhCIJiFfhi+dM6hY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591791327-80d95168.0_1591791391291_0.38709352813786735"},"_hasShrinkwrap":false},"1.33.2-alpha.0":{"name":"@xdn/core","version":"1.33.2-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.2-alpha.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-u8Q3Rz1hJdJPOJFIoXfhil+32tnr6iCtwP0J6DPQ1Nz3ieERvZt44B7wWvDfr/5jC/Z/JOqnv6LNi084bO7pbw==","shasum":"4644a257cc8ab7689939b7766ad4be5f736972f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.2-alpha.0.tgz","fileCount":127,"unpackedSize":521596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4OTaCRA9TVsSAnZWagAAreMP/iB3M4YrNgJVNu6NzvTn\nS+Q0oyqVfE6QIiLoH97BuwH6h3BdA63VjHkAeAtIneAHF2h3IbE3N9xsvkaC\na4o46ejGHmX/sopicu76wfCh0M5k5FNNYi5AuOQfb7bnMRAxAZcFZmi8WJ+j\n79syrBNbCMSdEhUPYHXMVjnGYxX5gECQTfYGbVz+zgVdcA7URREjNMMFs0Dy\nU2rwjqotsASqQ1d5WCwqfHLl3F89fABWVXPRLyIQs5tVnnJgrduNXlRJSCzr\n32J4lFgNFCtttc0zU4/4vX3EsSAFBNZHFSD0TQDne95wmFKPe96gu9Zbku9N\nU2uza653sTSZbcRloHdP9xKANALzseCsblyGVZ2OAK3ha7PIgxVW1Imve6C3\niELnu1fVxHO1m2t5+grXiHz+tNICvBTqv+S28pG53Cy/t6TPJS28dDe/NQlt\noJBxnb6cakWv3/9jIUfoxze6EnNUvB/872hWVIaZ+3TeVD1rVXY8laQWfDnP\nc4jxvxxL9hUESi5Xf864ICXq6GLy9DQNU/aYYvxd3VULYCXryCyq77/SDcm2\n9PBUGx7aS3yf1DiBMVHezL+Rt5VR+P/MeUUZ1TyZIQhjfBKQ801VnUQrH3xX\n72aSQIFbZwylqoBWHullziNDKh4t/3x01YgKe2gA1hLKP93nuCidUFoorKCV\nhfji\r\n=pPdK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYLgLQyVId8j81b5S45ixe41ylJBIydL5XSZBs2v+9RgIgMuph+Nc9o1p9eh2SuoRaSUzd8pww8RFMCDvA05YMvuU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.2-alpha.0_1591796953965_0.9104600444669619"},"_hasShrinkwrap":false},"1.33.1-next-1591797511-e17e8d73.0":{"name":"@xdn/core","version":"1.33.1-next-1591797511-e17e8d73.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591797511-e17e8d73.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-vsvNY3P+BsHzi0lNRYFUD92bi2dIt94mBNhNRNxzCKnLnCySI7saanpeHn61/rEI5qFZlcTlFTEhBiOsQxpp1Q==","shasum":"380d6f030aca94b6acc9cf947ad98708b690f9fb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591797511-e17e8d73.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4OdICRA9TVsSAnZWagAAe0sP/27BYDndsdK1/ru0O5eG\n2i6+pZEANUVSVvc3PdHYzAQXlGYNs3WY6I8cQX9HtPZiFhhaS+FMz0hEyCVp\n/i8nfhT7O9O7v4c8IU9crsQdUislmleqSquATLwGMZvlr2y8ji5V7XHwlNs+\n7JpfY01iew8InUOuGL25lbZWASHaUsdhc53PULeTmtGxuirwQ8iUYqKELNiN\nyfif3JowQ8pWhsDcm6pwyuZwbZoKrSyLY4j+qsRJALEvUrsI+ZuQmMnnaFZW\nJJQWgUEv1UibIYDeZSh9N0Z1XUO6JPaOHT0kPS1TaYdk5G0EVMsP9mhgq7E2\nXHjsXWx2UIzSb6nHl2mlGZK+4aCtwS4ae1KnPkYr34kg9+7FfqbJ9bqNmHdn\n3kMMjO+7KNWkmxlCOuivYn0WohhNaorBhSVqw/ktGASlxNgECze0MZCmr5C0\nctvQDXCQIMmceBB8MFphYVb4VYrFG3f83+Eq3o9lc37JZmXwX4epn3TTTkJi\nYXq/XX9UIMJtH4m2VP6lDqgIwgT3Wz6mTnUZXEEFsknFjafXIF+64v2AP4zS\nQ9YluvjwEI3a4Ah+HbcmV83NIkoAmA4vnMA48rasvO19h6wlDnEkN6VEzCd4\nFaI/3uf3JuCWjrFChrr+4YNHEovRnEHtdWvhk7t/eecxisxHH12Go3gPOXaG\nTrc9\r\n=3nJM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCa17bO7bmgOJWlfuX6RRL4PKkT+X+6qWRxtkCS9U8gRAIhAMs/AB8vzGTQzyySizjP5/HXCa4jI1GqYMTsL2GCnH+q"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591797511-e17e8d73.0_1591797576071_0.9667474874104018"},"_hasShrinkwrap":false},"1.33.1-next-1591798373-9eda5fdf.0":{"name":"@xdn/core","version":"1.33.1-next-1591798373-9eda5fdf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591798373-9eda5fdf.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-QQ1fm1Zr8Y6fwDxOJvbxlFrxUQHaxPZYCoTSZJh3uUqEt9z6/PYuUSKFXt3V8rVmWVtRMYSQrmllI3BFRzDmPw==","shasum":"52f9c5a14f0a98e81655258a0b79dcfe7205ad20","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591798373-9eda5fdf.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4OqiCRA9TVsSAnZWagAARtoP/1yHfp39Sver2z1xMjeZ\nRiJMe1iI46KqzsPKaYevUFPiF11PRcvnD1TWIwX5B7rsiDEaYRCjF3BsjxdL\n9KmDhbJEkdK8JxS5z/LeyyN1RXdhWF1nJU4m7rKnxli5+x3abi63FKUc3AKR\nZQgqke3jgNarEt+ftvJerbUCgxG+wRfnuOzHdBhA27Ps+S3MeDsxOLG/eofa\n7MQqC1KduJRRLu5OYz6ccTn0oS7jw9T3N4ASfioGoU4bubW+R0Ht3j2Gx4Cw\n7sf7pvtRy8z3+jZsybcYXSpZndTvhrVM33GOGkcpmb6mt8fPI48vn/YeEA3X\n7Jh/NH25NrI/URnIJuYR/WVkmN4bTbxKkz+uftuZxa6SZeE+nq5sjyarI6i9\nQ8jNAmJUlEKvDtyqgDSPKVIS4DTP/JA9QLcuvQVFQhYPw1csj9Fni+ZsbRou\naSQhVySazyp5gLTiwYOug8wkTBfK17Cqhw406+hCb/cfURNUUc8g5Za46ErG\nfS94UwO3l7s+RnK/SGKGeZU947/1nplCaXLMJG9SceQx+U2PEX9qnwev91HN\nFtbanMKmiLAPa1vGQv8OVygijmH5Q7EAyfalXMCcy9zRdHMjevR3AVITJxc6\nAiPvBpVxOehvOq2uXWp5K3qPTfe1FsV52OOzRo+UKDYiuuXQ+yYYGWechZlP\nn0+D\r\n=cONg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICUXvmbh+kq+6M3b+Z1CC65EgggQka5vboK2MeC5ap8rAiA95811Da/Is9re+6zlxnv/K6/KlMvSr+4xc38VFSLJDw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591798373-9eda5fdf.0_1591798433783_0.18735384903462604"},"_hasShrinkwrap":false},"1.33.1-next-1591798472-ce0f7e29.0":{"name":"@xdn/core","version":"1.33.1-next-1591798472-ce0f7e29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591798472-ce0f7e29.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-VYA+/egh4YxzUMSTA2VdD7EAcrnHx3D5RnyFCPZJygt93T1BIe2SbTy1g3otiCn0OSMm0PIWAVwoVChVYa00uQ==","shasum":"f579cd01599598820939447cb7e36465d1f43648","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591798472-ce0f7e29.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4OsLCRA9TVsSAnZWagAAjmEP/iYle3VXozEV4RkLArjZ\nYUhyfSK02ATnztOQyoKV1gtoBREMfQja9CebvVXut+ZLyw0a0j3O8rukG6QJ\nBu0qQWksz9i+sjbcWGKoHWzH0xUkL7gfXnG6yTRjx7x0wgfQQQ5QfY6dIwrs\nlirOLqbtA/Rn/cynKY1kJ3E8M2+0WD8Nj0pU1d5utVMG/BPWCuqGrRrz8ggR\n5JuOt1HOmJPiY/PoYOqkxVsGmNjuVwbIk3TETrXDTwoGMtsq3gnniDPlvlhX\nOX5yllk5Evo28ZqPoZ3l82edoXQKVoM4VcDWmW4ke2RojUxsLYHE6kMKmSPn\nu5lqLlBBNpxQtAS5EccSEzJJ33M0U5Ce5tRcbvCLVoVMZIfNlW68wvt8LpF7\n5SCNO8I69iB/l9CaZVLyRegR+Bhnd3tjU89YBJ3QyHGdO0ffuoSaHUPfxww/\nb8q3WOnNZ13teHPoSvv1Ax6iQUOeEQdQihk9kaMMj3GQ0/giB2yj7JPxLJC8\nehmIXyHQctTXoog38POgEoj1DOrpVUISPiJ6hKIU5soyDrtSaQfLcKKwsivN\nlj6+ZZBTyI38J6mzLSL69od9gqNjffJz77ah+Nl0nehsF1sB4fdzmgA8WndQ\ndJiZ6ecuEO5SEKdnQboD51T541g6CqxmqZ+l7+UVejexL2MPo9KpFkOoXI7L\nMUoY\r\n=DPdx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaa2paQoOI/cWbg776y+KTORg7pt03DEWzUnnnRz7CgAIhAJSiys1JZUuNcZziPV8cqVpwP6Wdp9vw1NsS9KRgTlqr"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591798472-ce0f7e29.0_1591798539259_0.9650808429780247"},"_hasShrinkwrap":false},"1.33.2-next-1591804159-9bd526b5.0":{"name":"@xdn/core","version":"1.33.2-next-1591804159-9bd526b5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.2-next-1591804159-9bd526b5.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-nQ7cT0RshwT9DkwQN04POMuKgoY0hS47TZMOktD8/IToHh2B/IBZxTG4u+jZXKVaG0kc5TA0O35Nve+RqNRXHQ==","shasum":"e59149332d7ed4d65f77c4433c073809f17d6139","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.2-next-1591804159-9bd526b5.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4QFCCRA9TVsSAnZWagAAmx8QAI9cbm/UVifbf3qggGRm\nqmNeKURY5wzBWIE8XvtIhZbzVN7b4on5KmrFcPBLNb1M7bhkFLIvzj2S4Sf6\nIW6HWcNLpSsqZMudZANdCibFu/atQCDkdSh0n2JYZQai5Jadef+RFe/qZ7bz\n+It9iWBKvFhWNey0dg5xKaYXpuOuSQngQNzl/whDTcm8JdZQ+DqRXlpRKj67\n3va9kdJFm/lAqlKUIQmLUjfsDZRk7cMp/qY4E5V1EuutYPoK6wk5W7HX3Jcr\n17RHufBX382PEDgBXDA0E/Gj3w20LBA5kOm2ji8i4HeRhtwV9kTVjk6gxf9x\nqCBXTfzZhRlAhV1cY4v59vpsHWY/aafTcfw+8ONlC/TQfnBKQChurWdzEicy\n31Wlm0BB6T850aEbb/tytLELJPz5NbZXPvDAiGMexNJ6kRY9dDh8W7BbKCia\nA+LwL7IwaZqa96p9BfKO33hnFWuu4vgR1wNcZn9gnCjjQ0aO/VRF5lUXOaVH\nImeWF+WI7c07ewDvPvuVYnLKyj9Bhf3aBNazsu97kW84PI/21FwCRKebNv9J\nl2uYK1r5qnwmg9flpDWbQgoG++3Wbx9z27W41wvfd6HE+754yAwdTh8xbQ1p\nnu0F3UCtZ+W07g5Z0jsHSMoboZF53t21GBzleDK94QTCVYUo9K3uYjNP6U7R\npQMv\r\n=2Twy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEa1byh6sgbcoG8wrce/nRuLkk4wf9p4TBbAMCL6ToFyAiEA51qttHsOr6jVgqMTZPtpwmbORV0wfi0q9L8P00qJFHA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.2-next-1591804159-9bd526b5.0_1591804225964_0.05257233656557503"},"_hasShrinkwrap":false},"1.33.1":{"name":"@xdn/core","version":"1.33.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-wEJQTdO2k/kfuGq2Bo+VLw1I6+RrK9nnIU1KuFwiOI2xt5rH2oMZrGZebJtjgNOs9tzLf+af5jxRd8IP+opq7w==","shasum":"c12a8e036852ef21c70c08598d42f4ca1f4a0f0e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1.tgz","fileCount":127,"unpackedSize":517087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4QJsCRA9TVsSAnZWagAAmVQP/RLmNxyGOsSP6OOi5D6m\nmEMsU9GX2HAUgukOJ/ZJi9QW/m/ciCCxSnvrLuaNZeL5ArQ3PxVHnnucfRpK\nkwNJW7pM4wiA8IyWOexCYsGWGajawTq2uPRPgutLnucdlypiOJLJYY+IhKVQ\nDeuZTpCE2JnnKKTNEGxUrnJCpcN9pkYd2/diVD7VGFet3UCLsRomYQFb/Exj\npnAHc2nO4oOqVmbxINSlbDkO7v8lU3KoIyGd8eOhDwtTyu1CyPuW6Aj2iF/s\nVKL3IYMQJKWFhaU0AYcrkciBkJdWbcLTFcD6aS8I+wsvA1ak96p30xTQIm1u\nCpdOpJvaiM4aXPlvUfjg622I5wt5MUPtGHsBiBARgMj3+OVQT2lTVSYgcx5z\nRvTy/KhQr/yuj/G2t9tyUO9WHuoMe01X/3mhodXmw9/1KtuF/O4EfXYgmtfl\nptBj8xyJ3WleA3uLFs1E2mg4W7Bt7C0no6kvSus4DhV3AGS77gsqqcpTzeTZ\nd6c4XUkoCXhMk7rwXuGCgxLA78l7QL7r3zer2dzg+nX+xPJqoL9Z5nW6WUC5\nYLPblFFjNURJi5NyzGAznLi17s93UKfN/oFlK3i0pcT8kAqESwERuBrQJ7Vp\nFjLsD0hhj8pjOCAavbr2qvWW4GiKBl315AomhDN+2hip49GcW6zjfldHjIfK\n2Bgi\r\n=EaLt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH+QDEA5tGK+WJ8fyg0ix4i2m8fhclyl0H9rUk00aBwdAiAyOFf64XwTGwcq3/AuMfD/nI9WRdVDexahDX+tMp1kPQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1_1591804523970_0.3732325263328493"},"_hasShrinkwrap":false},"1.33.2-next-1591818633-b0caea5a.0":{"name":"@xdn/core","version":"1.33.2-next-1591818633-b0caea5a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.2-next-1591818633-b0caea5a.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-CDndOOC3gtcqe9Akr3PjbRlwvoHO036CMRnSiAFtelmVLHXxP090HHF/3eDPMUY29v9NEOtxSK/kngs8TKEXjQ==","shasum":"1170a0d1a8c97023310c42cc55a237fbadf2c3a0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.2-next-1591818633-b0caea5a.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4TnNCRA9TVsSAnZWagAADOkP/21YCK/VwfRunMJNW8v+\nc196Gwd2siQT+IqrjRDIzBzUoT7Dj2je3wx6SO+pLEt1Tc5RXLSZb0uocS7X\n3dCkHbrm3fnpryiuiVNjzX3lXkcsQN22vo5rW2n3oUXbXf/bMWuJjkdvRpkR\nFChrBUTSb8zFTFILxO0yXsyO4cV1S7H8aFHQKrPkipvxd+WeKHKCU1iibszE\nbXYCinYUWipV2ZlDyQazM3HgQwuvuLewSAm0Y5Sw734ZO5+sAIrPiR6TK1Qd\nOpwovyM2WDi7NddqekyqSGiiYfEsP6y2geH0drqD2ki3mT7s5B6FZyqSzoux\nxVmSrhHZ5+48Z2UeiFw//IohIk7LLMwX/fag/l4dX9qKSCDVcI9Ma/kq6H1B\nFEr2Kxg4TLO2GaLRMEGXXQSHdDj+Lg7JJknjnPMxJReqP8J4JIjBcqgzD3y3\n5OtvQHalkCKh4eBVGCoJ6/XlZGpfChliu5L/1xOrvISRQRflhpKrxQZMn/HV\nqTNyEC+gamrL8dAP1C3Yc5aNHQx3Wwa6sTbvS+N0zCvz18HP5FJZmwV6fpI3\nMP3NGpA8ESt+hZ1AP0mJs6QBpuOq54l5mpL8kI+I7gRnHtNPeEThbNVnCedk\nEzvgQJnUKLI1zrwfB+PMbNt4fcI6wGnL+JW1SZxcnsie2la04ilSPIvAyLJb\n2+mL\r\n=co3/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiFNyTbylbKcczl60qz77phfn6K/S5sD0xLnOpaVHtWAIgd9zlm38ozq271xFJi5WzyTohYrrRIchw1Zube++gPO8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.2-next-1591818633-b0caea5a.0_1591818700552_0.3708829500949442"},"_hasShrinkwrap":false},"1.33.3-next-1591820164-cc7e19c7.0":{"name":"@xdn/core","version":"1.33.3-next-1591820164-cc7e19c7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.3-next-1591820164-cc7e19c7.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-EZ7g1LNuGvlrHgdUxP2uVm3SQSeWTDASKU0atg0PkTwut6aH6KTTIPWtSZW+LUogQieKs6vRiiA2P6bR80KFfg==","shasum":"f9c56ebfee6d136e859cf761a57c8aa3a52a68cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.3-next-1591820164-cc7e19c7.0.tgz","fileCount":127,"unpackedSize":517141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4T/BCRA9TVsSAnZWagAAGwUQAJjS47/DYMTh1qwGAXT0\n6vJwBPho155DAvtcoE4HkbUKN32F3y4ou2PiJZXcZ7ZDllGL2IZyZLJvc1DM\nhUEHlLy+s7KMjnE3X7Eh8sDhEX4ccNlmkFlUytUSTB2uqDtbpoffJoNELucU\nAepLBbpjTBCGaczudbx+rFa/ubsnu8unz+qrku+EIM0tL7PB3gzZNfc8uTL6\nJTn5g9kLJNMYar9M+zWU3mDZEdql9SLUZJKSfWNRvgbyOkYWWxkR6r2nbXeN\ndUjlsGupoDc0V4wu7T3MqXwyNfII8cm1OmyO29KTpaYSVA+IGqgfM8zaJG3g\nF/0QsRPvBpRws4LZzDQecifJNtA1v15/+HbyhHHfUo5ZiEP5XIZlhMBsPRHY\n9Vz+JRArI5O+GPAXNZiFq3w5cYx+94rtX8t7eHnVn7Tm26WndrVGslVAKh6l\nb6kz/9k6Rpke/BAub2wnhir8VNw6lUxWnJZnwyzR4G3n/eQbIU1MaNv9zUCU\n3RzveXCHhLDiWv+hjw4Z2M5dD39JjN70Dg7esfspE7AVLzxymhm45EqZ1GrI\nse53v0ngsnqEoF3kZMrXrs2bxi8NJE438hSJZcwipKjhWCQI0Po3lgoy1FhM\nfcmi1O3rE86s+0FMpBDUL0EAXqysVezBvyQhW8m8x1/lVSfdDuhWGI/Cs6+7\nvfxx\r\n=sOsS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQIuQhpStXag9ZUsdz4ypmuvBXWo+IMdAIfa8ZvtM15gIgDkYCWWm8COUKISges5MTB+ivBiBMFjhhNcKWejxIEb8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.3-next-1591820164-cc7e19c7.0_1591820225151_0.9333424069262866"},"_hasShrinkwrap":false},"1.33.2":{"name":"@xdn/core","version":"1.33.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.2","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-jn3UTXz1wIxo92stWCxo/gtmgbRVczjulkiC1pIvOA9lwckmAe6eUo4+OK5Q/3q7IE9Wn+tfJmKriU3UJh++ng==","shasum":"ccfca0d39185682d8553ccbecafb1712e00f5442","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.2.tgz","fileCount":127,"unpackedSize":517087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4UE2CRA9TVsSAnZWagAA7o8P/1/K5ee6/JdSe5yhviN2\nSJarGGxyynU64c+UVSauhQtYCZ7dD6r4dVzq88W3J8hDzsFtfEhqnEdN/vrH\nMogle/xmWy9l0120GqF9wOeYt2TfK6dQww7Oxumqo+HHanpNQVuNXWXjYvzG\nrrnW/3oZiye+QIpwTHVm9cj135XzNt6zT69wndlgAIiOTzVsu0Pz/1CGy+u0\nHuEcv5tF0hRaaCXWMibiMkZt75qrEMrDOWxxULzvXAUUN8+4EIjFhVYkh9xn\nKuVflriBVeNd7y7dqMihR3G8F61aqsYkdr/uYTkvr6F1IFjnyHHhrnPrJEzs\n5Plg+IxypRPCoydcPrZNuk6eJeXh4lm2vxy//ie2avX/+sA18wT5snKSxiwW\n2wOTx9GHfAoVrI0u4zIgzzncTZTNYUIIhPrOi5Dr1mIUT45aGmBo2fKem9L+\nm9p5ybuITCBG/LxTrO5hFtm4b+skf19OpnD0nXwmqiFCRL/TiQ9UPAE7d8EW\nPi0n0vTCtch9hWnHL95Xz6ohZVuQsuWjfB60jAO2vklP1PUSOw6J7k7fVbwG\nSHjUFp5yeUkbnjccgwTzppgNt1LcQHmzPq7QKvYFl8pss3bAa6sTv9krdzOw\nbGYuqjnHDEeXx51FBanBEHT9wMmVd8iWdoJk7YtYNgMiO4FqKK4ZkzJUW3UY\n6jnB\r\n=A51X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHhW9vdMavXDC8OHf885cH5zsGUw/XXr9GKe6Fz07VW+AiAAjB5kYaEMdI5CBXMkjmCpdxumg5COXFg8OCo57IwvRg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.2_1591820597913_0.9257035062379544"},"_hasShrinkwrap":false},"1.33.1-next-1591951804-3b4ace33.0":{"name":"@xdn/core","version":"1.33.1-next-1591951804-3b4ace33.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591951804-3b4ace33.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-cs8z4ku8HJzz37imOZOYCpRFjpTFOLAdONWR1y+0N0s5t4/SUo8BVLvyP8MPsEZHP5wB4rMKldNZ8wczctbgUw==","shasum":"8246346960d7df4dabb120217738bf5837a90e67","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591951804-3b4ace33.0.tgz","fileCount":127,"unpackedSize":517703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe40H+CRA9TVsSAnZWagAA6F4P/i9k0MjVPHH+3PIr1mbq\nD2dAzHEO0VCBZYYF/QEVAiBlymkoKq+YxFjy4T8RJ35VhNouPqhVIz5AR8rq\n2dPGOz/BFS/vqBwv2PtsKeaXvUWg7FdoL8NibbsMqx9/8kwMjDKMh4vFYJro\nZnEWn5JAjAP2ncvAJAdqvxif5k2cH6n67/cja6Uh3HhYW+gbzhhfdF9py64O\nThpnNySJE5sWmvKCcyKxOiUUi/ntAGKaz6wXWNXxL+y3oBP+Im7FhrEJUYC3\nNC/VBZsc9nftMYUemhZVGPv0m4SqWSo3PQMXEujdwDOtT9qB9cG2FwhZvQiD\nDfM6x68MH4fWNy9vvw2RUFV/kQvpIs4DyTc1ntCULZc2oMW7YH3tMuRtdhaq\nf+PQraig2aYf0znvGDxD8R6DABs9nBNoOeP/4zS941ULiWSlN6OZwDHHj2sP\n+5tOay4j04x+oP3V+MdTJkaiPUYk/ZKe3fEf/KAseTjl/U3qhbljW/sFE9G3\nsNNNv6NxvWZ6G0wVBG671HYz5+LyfbUZxcumjLcT7/FQ/peeMouj79eYKTJU\nbxNiw6KzoRPe6jfqIWdohMsxKbVzhlEtrGkNPthrk7FTwehrE7m+fnnZ5hvt\nnnYNOLn+H5mwg7Hqrgi3J1R45tp9jnG8fiypd9GTq/a3MzvUsN5Ydtx0UlcX\nliaV\r\n=AzDS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEhIgxX3yDGTQFbVVc++4VV5QRNxt+N3Pfq2la5fh0TDAiAfX9ZNzN9EiWQFrdw3URJ02LkJv8sfWWQ0gAoTCM6p2g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591951804-3b4ace33.0_1591951869897_0.5322121564148228"},"_hasShrinkwrap":false},"1.33.1-next-1591954589-e953b4c5.0":{"name":"@xdn/core","version":"1.33.1-next-1591954589-e953b4c5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591954589-e953b4c5.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+t+ovc03CHDeGqcdhtvEi4elEpzZMx4F6AFZxB37Uh2yAs66QjP6kn5Xyk7+lurUAK9JYl7jc14VpZiinor7Uw==","shasum":"b4ddcee14f874ab654438898511336da3a849114","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591954589-e953b4c5.0.tgz","fileCount":127,"unpackedSize":517703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe40zcCRA9TVsSAnZWagAAlHAP/RAJGy8skOGcqch5ltoX\n+2bub8OjeZjo9if7IaCX3KLqltLiTiZd0ljbgqnJJSKPKM0u/TOuUOk+scIJ\ngRETwNYaTqYWEpdfo5czvo5WLgB3FyASvYdJ7sDo1rKivxSP6YD7Z6o1WkL4\nuBpS3TUmPJ7wXpLmC5J/LnKViF4iQETdBLZgMg79koaGPUlgdXjyCjP86jAL\nyISxRPjSO/WDOmAsTUnjPsILXWF+AGr6D61AokFxsKB7SrkzxsIKTq8TyQ2M\nL0SYlBON4pr1JZscqyiorhEFEvSOWT8k67TnvYMqU0l7wfouZNYbebd3ZxFn\nZt7J4G7o+Pz/RJcqhmSMvqpyrxsxFUUk11gQSisg4M7qmB3Woo7Y/EDWRtJh\nF5c/qm1I5WMU90q7YEC0QnOZ7YvjmjcovBqafda3EeInPLog4jwC9r0sH7Wq\nO8oG516P/TD+H211UWXx6kP0bbW2llSaNfHiMhwOCZxXnM+mekvgP0B4qTUL\nQnF4v+tBljRcZ/HsG+kOsY7wxLTfMQJP8QMgLUPAeK7pMDoCpQNK4OdwKizf\naR2aNCMZOtPAU4WT4SRfXji8kvWUHuJyYbgBd4vJdE/7p3XBspLEDZkT47Te\nZV7mdwe9tfMejphdcLI4hSeayGMXAIWhnoVgiNNxRGsXQuxw+FBJHbNLcM42\nkfRi\r\n=d3xf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCf20LoGcfQ5mV25dGKvoRXqoH+mXnHdIlTdx2Hfid6AIhALYSpee0PIEp8v8XSF6JMZCDKd2QmKV0+uldQZnI5lDZ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591954589-e953b4c5.0_1591954651920_0.40104184914899754"},"_hasShrinkwrap":false},"1.33.3-next-1591961052-03ed3950.0":{"name":"@xdn/core","version":"1.33.3-next-1591961052-03ed3950.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.3-next-1591961052-03ed3950.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ndqNZ/CViDwMWgxceHQoo131JPB2HZut6Tp6b0jETPijAXRymgmq4updYh0+ddZruph5Dm2oJMCR+Xb/Ods/UQ==","shasum":"a311013d7cf7595a58cd0d9de65f40164be79ab3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.3-next-1591961052-03ed3950.0.tgz","fileCount":127,"unpackedSize":527058,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe42YbCRA9TVsSAnZWagAAd+cP/RP+X2ugDD0H5hmZpjw3\nINy/xzx9NNx39gJMO/gjC8d9QjiZPNaGYhMUGBkxtl7cHNmMkZZ/ThZgAurf\nyo9iFKO3wmen2ZCydf40ZL2zaOuxyM271ptPnS/NJ2EgC3mBHTtXxqG5HF1F\nC9302iQazBaC/GZHNd33VsjdAntVJ5503+BoA8qzl5n21dfYPdCSrUbxMBVG\nkfI+8lbnfxS4ENW6DHAMm63UfEsOuwacym30HXFRkrZF5Iob6DBpWApFAQCz\nKR2njBk0A/3g7VT7Ek5i+whfxgngPuOl0iKDE7/IhL4NRNSwI/DXAS1nlt9Y\n93QOox0i9q3oqrrDt3tw8urjUIY8S/YK6A6u9pLnk/cuvxyou65QvD7hpvN2\nkbwCIIO1RDXPEHi1pRRcqBADY5ZdSwwM6G/hRxjxQnmhYxw/QANyMtSt18Zv\nfHUupfEZwxVLluMkPwie+TCIWUWfxzDNvHvYdYMgwaGY8MdsCUNWe/IplWPj\nqXQoE8CW1/tHpQ4LqpwClHwsv1AxKvkdPxUqDMU4sPXBmJAhi98qq7rtPckS\nmCUL500RLBfcTsKRRcf0lD9ILYq7bqJV2cG6WwamU89AhxtICs8m54BCJuvq\nSIi1fqq2aRkJPqcG2/hasQ3igT/Zkh5mnpiW4IWDyVu7uGW6Ohs1ZfImb4D8\nBd1f\r\n=pDH4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEwD0MgvxNGCNRFNwcdtgEgEhFVJx06xgj3/rv2vU0pkAiEA/VDDv/bPWvdUAQ2sM0iPSWm9hpmIM873xJEysCIJSIY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.3-next-1591961052-03ed3950.0_1591961115292_0.34156529197667895"},"_hasShrinkwrap":false},"1.33.1-next-1591961380-33c74c42.0":{"name":"@xdn/core","version":"1.33.1-next-1591961380-33c74c42.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591961380-33c74c42.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-6X1wGBZYrOQ7iuF6/Vlj107dwGyjKjPhB2IvWKHwU6jKTqJ08pa/hgOFLU0xXZGo6Z6d6gaghGsPKjG9/sSsMA==","shasum":"5ae79fa46b868fb8a5ae26ff5563ccebea50fbb0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591961380-33c74c42.0.tgz","fileCount":127,"unpackedSize":517703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe42dkCRA9TVsSAnZWagAAhC0P+gLbxHFW9PtshWqZ3MND\nhri6tVJarFZalm7vEazi1Cg+NJ4u87HDO0MglCEPakFb02JImlUbWmARGbEM\nC0cAmR+60VT5CKJNGMPzcwkBOOETY1Bd5cdQjC697mFaPFZVvklpOoqPqad/\nrIj/Q+VIwe5qvstUuTm3qah0+qpf4gdQ21lHTzjksex/iLONO7WLlH5rQizm\nC14xt/iYA3V+yOV9Bx5reo7QYhtVpb64DnLl5KUCpI8KPccPMnYcnjgAvmJq\nEKdS9Qm8Yzxlt073hWkHdNE//0UcCDgzIPXVbzo2sK9CU6ucnqNyBgvOUXs8\n2yPendlmGSvFWXgWEUEHuwc00kiWKqZY07VTI4Wb3cFCs0Usqd/intU/Sk7r\nCKzBshoJxlqZAtnFbkzyvWCChOffU2YUn+rKXsPeGZNmWDEgjm22mVNtlXte\nM70ckYldXo7knkrYOTyyDPaYsElLhs5Joj992gzQzfeY2V7s9u1LoSAcfKKL\nXSKxAHgXW2mStGGMsCqfTp62kSi3QfNQ6X2Ed9MY/l/iyKycJiFG7Re65o3+\n7qOUrfowWLPSXe9/S1kT3NhZ2tT60QjwfSIfjW/LDw9kkudKDABVzUWDp/Me\n1tW9LTtitzLkUz8ZGyXW4/8j/x+nW6egCRHsJ2r1RXo71ztR2D405dNAM7PK\nxGWi\r\n=Wh90\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBT4SDognDJiBAHZVugZv8/8y0qZh9rdk7z9bCCgMX3WAiEAuaE2mw4F3gWixihTiWyhCjt90yBGIrbHl2R639bZXPg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591961380-33c74c42.0_1591961444474_0.8261258231518442"},"_hasShrinkwrap":false},"1.33.3-next-1591963237-a7993127.0":{"name":"@xdn/core","version":"1.33.3-next-1591963237-a7993127.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.3-next-1591963237-a7993127.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Vf13GxNjxQSGxjNPfVaEUq/vva8prwQMYDBLSE4m7AH8NcT1Pjx+/GHj4IYEkV+/5VRf2cWEQASelKvwTHZTlQ==","shasum":"1754d42812e99a5bb141347c2136a19082748337","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.3-next-1591963237-a7993127.0.tgz","fileCount":127,"unpackedSize":527150,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe426iCRA9TVsSAnZWagAAgWoP/j8kEgtBw5l2WA7o7EVw\ngd7uUAdSQLU1+sAD1nB30Mh3kVVhLxJ9PymdRQ03hnyskYC0A5HhdyxpDln+\nlgkoN1h0OpumJU6UcrcwiVsw+mIyfyNpkDyeVIH8hTOLijmJUcenYjipZWHx\n2pEAi2soU4Fp5ddM8yslnlUuV8HSD8Dew94OvvWmSqJO5G5H7V2LeHG4DGxE\nPwHyazUH+p1uWqooG0lFR8p9ztY9pg4OP963c4meXNZYH2BeTaQs+sZYIi7D\nW7KJ2x9zslgY1usk5xUvoC8OPutrjC0SnVlhgW+MowD5n0uvVd8P3nOoB3sp\n2muzm+p/LlQIm3aiqVk3FiMHtx/dhJDI781d93qIIqu8rmkqcibYsDZTM5kx\nVo2iP7Ktmrg4vlD6PKd2HmYf/9I4zL2nNUlZ2HOYijEK6pA35Yrr8XBXwHpz\nQNlnuHJ7iCnXFleznKgvt8BSMaayM3Qt2mj29yQQ6ehok7duLlg3JBeS04Fy\nwyZFPw2mqtxDRuCB8sa8BoXtk5mTMbCAzTWF77+Zj4QY7rzYLeQ/m7B5lm9P\nqOtXbuaNb0t6L2MlYEe5zEqzQl6bnTSYtr6gKODnZR6OxjraB07fxeyJ0+b/\nxjV2oiE8y0JrkFCm1o4aaq4za8S/fWelL5MojzsAM7Acn13XcPr6+jh+dN0s\nW5eN\r\n=Lghi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHu8PSVoGC5ny5p0wlCdo5pjTFYZbw2Y6cxL27z6UIR7AiB2Rz7aAVFuFx+Pq7VNtlJa5uMwAvDN2xzuSGepJY2l2g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.3-next-1591963237-a7993127.0_1591963297893_0.6243894405388235"},"_hasShrinkwrap":false},"1.34.1-next-1591963247-44817e7a.0":{"name":"@xdn/core","version":"1.34.1-next-1591963247-44817e7a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.1-next-1591963247-44817e7a.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tU5IGcmwbm5ohAfp/nJ20j/1I6gsDJQt5hCU1LXBcWMRpSv0UM61mg3AUN3gpzIgGTBzKQslQp21a2vErdb1Nw==","shasum":"1f3de9bf4c51c29ff7da8b3c52d9bf343c7c0bca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.1-next-1591963247-44817e7a.0.tgz","fileCount":127,"unpackedSize":527150,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe426uCRA9TVsSAnZWagAADu4P/0JrxDPASZkxdyOAJfq+\ngqQoExMglcKjTQVM+L7mzUbyNCocP6K2aIDqr34LdQl7WMYbK6vDxcug3J3s\nl8AMs0uvSXcoOXSDt+bB+NczYGGCFo+IzCz0qQTViYr9Ss7fec+W8ViIt8FF\nniTJJNdpxfsx6iZsDkA4VPJRk0o0uCHU2kJmtpWLvnjhDHRjMC3I37420RHh\nKUKEjqxd7EvI30CN7nZPa4aM1Q+3+yBsHcf9DEDRE+SZJ8947My3t5u0t4+f\nT4CinO9dX1bCae+WCz1VAb7S9E1OqEO//cNx7ZzgoumO8q1d9lIrj701nYDK\nOp4ex5RxaONEhi1RGFgj+6oW3Fu/Hjd9WCEIRz9XGWn+RFXbAUk2pxa6QubM\nZXF/DbpebrVE5EywQ3QserMcp6iLAMaXMW8l2Z/U2mEhk4b43yp6dD/88+ln\nHd8Zqh26UYdG/eAR0jyn1ArVMKsxMItexX77X57r9YaurbnxXESwyhyP1W0A\nX9RzIwAQ++2GecF5GBL2NGtB0AdPKTIiePCmkOmsiqKxmWZZWVYlkumROg5t\n45oGO8OKApa1/bKdZxehk63GRPoFOdRGFn1DQBf+ubV9ZbOALKJfPwZrFLeG\nsOgb8pDwYZmYBghkVTVnoLjCDAUts71oq8aHfzAE/qPLcTurljgqXxvHA0Wf\nZPBg\r\n=+Lsd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyiaAxWewkPECjU3eiYmT11cdJfhx/qJM8Gh/r4+IYDQIhAI4JWKl8s6fbxCGcQmOZh427CTQltHwv9vy4oXtp5SyB"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.1-next-1591963247-44817e7a.0_1591963309692_0.43398439535058553"},"_hasShrinkwrap":false},"1.34.0":{"name":"@xdn/core","version":"1.34.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-BD/UL+kbQI9221Z19l7apPsRWdBXp4wlDiqAApQw7NB88p+6jY5w44yPJgzYNRJdmT3u1/64+M16NfCFIXjOcw==","shasum":"9ad578e5343a964bef82e90bd46c486bb2eee87d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.0.tgz","fileCount":127,"unpackedSize":527096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe43CoCRA9TVsSAnZWagAAFgsP/Ag29IvOB1Q0whjPbIBy\nyFswJeaUZz9LTgnqXVOeOybTXzHFAU4kQllHN7GTdqwnlGCdYex+ZetC3avU\n+kUW32TtOrXuYUyM13rYWkFHuOJD+QxAZ2bZMrI9E98Rb9rHWibY2N89SOgC\nqqOUJhpvYaU1q0lu4zoyWT4VOr2P2fBCWVtydHMUpwSxNdOHYvw99uydYM2F\nwQZct5NAmbS9dQE5HA2SUcsNqzbWVwWIeQOaC6FoHhDVOZ4bWyGDGqjHrT0y\nm8a6IcVyRzW7Q19qS262+9VGYovqeh9K1Sy2HATFlxK16FpQguFpLwLxmg9K\nWw2t3dRR6vml9okLmGPChWwgeybAE7Ih93zxOaW3aDfJS66Shbxd3Do1L7eB\nFBcC4SNUb2u6KEkbtMl3uK7dNz2jK60MSWeWqvPI8QwhhpQiqn+6YgxJehL6\nlvAi7pVaRNtbtOmfpQwYAc9dJ/g2N646Szcac7tVrglv7z4fGvP1X2BN8cws\ni9pMXPaU8XXkhadNduBilMk5ME4fR1NO8r4H2GaC+wV7WzdFzc2ky3dH/xuW\nMDyRpasPLn8XeL+vanar82qhiGd1qa4gI3neIY2qCv4YDS/UanI6Sj7cRkFm\n4NIZQaTqqV3475OPbTaWUNJZM42CMzdfgEe0d68TdlozhkwSS3ywcvCBQxqI\nKqsZ\r\n=IhvG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCd7DidN4rXfzLxYd8vhfYrGOdiN1ng3Ecm8O9ODho5QIhAM0U/LRXE6db9WMx7f+NBC0ff6x6izDGUNomSxxpCAZh"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.0_1591963816382_0.9692783350879175"},"_hasShrinkwrap":false},"1.33.1-next-1591967872-6714c2a2.0":{"name":"@xdn/core","version":"1.33.1-next-1591967872-6714c2a2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591967872-6714c2a2.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-x5sEmGJ2bhrTToIoiUqMh6rwgrK8hWUigwwmijQ0qXD291oXvk2X2oxgcS7ZgiFyn5dovEEDLSTnuYR5dwtgNQ==","shasum":"f967b07ac266af1b2be855457f2b38737a99ded8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591967872-6714c2a2.0.tgz","fileCount":127,"unpackedSize":517703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe44DHCRA9TVsSAnZWagAA3MgQAISCSO5ttzw30SiJI/zn\nrBPuNnl0a5o52zUocEXKAT79xFBiS/DqHqhJKqL/aKNh14WhaAVsku/E/9Qc\nPglLXA/g1Y3KwV4CIg//sduqEo+OOidDq1Ee8gPXugDwNl494DYOZ8jUciU3\nZgUpK1uvtcK3/WZvW86I4ePlK3O5rzuxuC/7/JqqPk9gZ8thikj+S033x9v3\nKJr660ILBMmk658qcT6OlJR+Y6ZBGQnd4jUNxD46winICd3VP9wHgAUegD9t\n/akLbyUkviI+0ydxziGbx3mrfCDHBISVKMC5mvx5avy6hXmF6rMwDzcONU1i\nIKVLUmDPpBdWRImbc2ol7YdIlYtEQXGG067NHzyNFOHKPrB9ZDKwenRQO5CK\nlxzxiLlaNKukMqxat8Zyz+muFiHe4EJ7Mp8iMeJxZrb+nwcOeaI+EOzk/iYM\nxN5bjGB7kBKAkbb2REkSxzTJfKvyY6bGF5kSYI0KooQi9q+KZow0mtRB6mNX\niPAy9iBqQHriqBWqrgOL1Z38wW0AiLu9X/IzBGL6KttOJlSqHusp04MYbirO\nFcjz0VkYOOKCelfu+/aPkJkwxq4rUoPMeifKiix1MnP9FDKwmHdZzbfzEffy\n7CL9Lgpft7da/ILqcIBsXHTNfrAi+Vwo3LQhMQ4SRROmh7nNvu3Hfs7SL0N6\n3YY8\r\n=mrL2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDCc5p1T9M8k/Tkq9SYYMEBz5+vhp4WB64ViEmjv7QIiAiBWMemF/aFPgJopMsZysOTB7CyXx0rFmslXr8c6FuQ06A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591967872-6714c2a2.0_1591967943112_0.6248275603163145"},"_hasShrinkwrap":false},"1.33.1-next-1591967888-8f086b96.0":{"name":"@xdn/core","version":"1.33.1-next-1591967888-8f086b96.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591967888-8f086b96.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ClK+4vjwoymAolY0//hceP1eYZmYGKju+eZBwmdKqlVyLIA2afkFs1pwQ1h7Jz2w7N4oN5C8XJ0Hh1NAuqAk/Q==","shasum":"48494c8a7d322856a829e03f5312a6c0efb491ff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591967888-8f086b96.0.tgz","fileCount":127,"unpackedSize":517703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe44DOCRA9TVsSAnZWagAA0KUP/jp3q1b0j1lXzgnufZv9\nolk/XgLAFsHscgCc6akw6fU+KJAGl44Jl6croDK0Dz6Pen0M0wlyOXGZ7vU+\nN0GHWB+VqHdtXMRXIh4CbzZwViI4vjuQIKElBQUqRBcH6jingOK5LbUuoELf\n+vtNFDga7Q5cIaJ4kEN2XOziv7ybMicropq19IBYDiA6ncI2UhqGlfk7CYqN\nSxvc5nxWLVTyVfIcYNm+GGfn/tc8M6TkG+GVJXaZQ9OmquCHF0msyAnk5+Id\np7UzU2K89aMmNyauEcBouoybLf/TzbPx7+iVm6BQ1w0oXwKO/n79SYW9sXYT\noV2GHq7oc3mpbg97I82sXM8qPLtxOYPWm6e6Tfvwm00UkzWw5SkySu1nBucV\nwD2wrzhR93obJYca++dnnbrWRqscv9ZA2JQwGITPMQyWyosqWI8/fJqI9vga\nc0OfF6OBjz7h6MuIExrSbyGNyaH3F9orpajngbunPnr6eiBomoe7b9QsplKn\nxzUq98o3K1OCSjUlYP3YyihzmwCmwSqeqheLasHXPZ0fwY9jgcFDrsZhie9R\n2sDCCDE9y8RGrtrOQnaSS4NjOPgrjxW/00oQHOshe1DJpvLS4S0s2GzKMzpf\nMi7ze5RRUp3LtdMANpFGFWXcIx0LumRIp1jBoqCuC/4J1Zf4jId54IdqgDA0\nyfRl\r\n=4e6T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWuR7Z5J4TaXU6luns8vyl1J+lKIfoFXxrSsoo7RpuqAIgScl/1Lwsa5vD7NG8fIKFkT9qd730sAycxkBon2VCkOg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591967888-8f086b96.0_1591967950046_0.7876442624223314"},"_hasShrinkwrap":false},"1.33.1-next-1591967907-c86d39f8.0":{"name":"@xdn/core","version":"1.33.1-next-1591967907-c86d39f8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591967907-c86d39f8.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-wpz/KeJ7DtrBht1S8DnKPvdaxddprJxaFPnjLGFf/1x0YHTSJ0JMs+luNDOjCzv9TacyG7ghItsRzzTO2dlR+w==","shasum":"295836769ed1254df9fc9ae0937fefffaee97a99","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591967907-c86d39f8.0.tgz","fileCount":127,"unpackedSize":517703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe44DnCRA9TVsSAnZWagAA7koP/R3gyhP56FmQC6AFpYa9\nni7QzPw5QWrqzI436DdKUYSCCjx1bU/OBkvbvF95jF8VFz65SRNwUGNurkVo\nzU+ukvL9gF32fhs7VIWpgyHpZIxa5QFJTCpB1NfXfXcW8aT+FIxJO3dJC8/j\nx0DQ+4mIm248Lt2gJwdh177iA5si5NPms/I5FrQQFugo59u23sG7No8D5SK0\n5KUU2yrKttE5GPkm/ZrZYGQJQMzQRCrQsK2kbaJqq93Vji2prDGNJNPAQB60\nsH5fUxYGm1Evd0x+0+v7+EX+XVig2o+ZkEHwrvKUrRgUcw+5yQhT3xZzcJRl\nnezNKtuqbYGkArCnPUcZpcuNSDNhOLO3FYsEwXxsJz6dCxCC0veenYRiNB/B\nnVgYDLpInASIG3wdr0vQqdhuTKaZSZGTsxcG+GSm7NE8B4F8t3pYEz898AfL\nVn0okNS/oKgC+4DX2CLFStBX/EElUofgFNoz1v0RPtcVt7BtfKyAjJ0Y1vnx\nFn6kxkkciE+XgK8ByLkP6Um5iloz/f4VBY3B8/wr3PgKA42SDZRV6taA5bYt\nC+Q7/GdK+ZXbpxOlgXPbumaxVNzNcdjUc5hnz9nMvuLsbICuyDPQwBtOvjrB\nabIfNMbxVFntHsH3Yfgcv0XEcMQZjMyzrKgyqbMzUGyNsJwLO+7uV5YDMm58\nljnR\r\n=72E1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAX3QMxcJnowhzJpVA28khAm8QsuuSs3/w5dZeVhCObLAiEA+7+S6VHi3qfAq4zo6nvkkInNFfvXNvmesjpTS+SBUsg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591967907-c86d39f8.0_1591967974837_0.707595241054749"},"_hasShrinkwrap":false},"1.33.1-next-1591967919-af90a447.0":{"name":"@xdn/core","version":"1.33.1-next-1591967919-af90a447.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591967919-af90a447.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-KBxUPSrGwWO1k+mppGhRHF7yWtq3Ve5SmBEQZZoNQAoWxjTh0VJg4zRTbwcShTaZGJTspABcQxWLkFX2qa+pKg==","shasum":"6315c5b7dacf53c370dfb46f341fba40f8358812","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591967919-af90a447.0.tgz","fileCount":127,"unpackedSize":517703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe44DzCRA9TVsSAnZWagAAWwEP/2uvf4YnvTwkaItf8sfG\nSuo+YwwqyJHYlYBk8bmf9x0Sq1vwvcEZjUlxhhbmFl0aw5OU02U3zGbK2GcL\ngDtYPKTbcMiQMT8j2RDAtwSGVj2rsIJjwXYfO8fl6myrkTYQqqm6lqddESXD\ncobnsViB6fRVtdWNDDkvY6v3erffMAjmWVHDSXuIzk2TnupCQPbxktgwKccZ\nA2w4m3BLyteFBlmEz6pEkK6dyz93fXWse7Nb81s9SGB5POw8FGo3LilIXCaN\n8cGcNrt7xilBShljgS1N2Lu8Zj06dWMMTPm2fu5Mlol3gLlzZjkTk4+WMwo9\nGqodbosMWgwCVzDKIOk1dBy7BZF7Sj8X364Oqbta9yzj1mU0Qqh384pFGxJX\n9MRKoN5stwmVmD5vOLZ+HfDGEuYN2FTOjUseJQQEGPwQD4xHeGx7k3LAtqSe\nELR2clGeCSctGFawuxBk6mxWbM5GYM2Ycf3luRuHoTm1yvDy8/fAuiRDkNPv\nrygexeVYkj5OaZo5Bk2Y3terOoEf6zLdGTGh7ZSL6JYKajcxbJa948arSyUL\nSjzpVo2daWhbE54qgZONuixL/OKCEjcsDAjDmHVBur9gKUvgaFP97MkUFNe0\nfMdwd0TUTv/LeCuQ9bR8Te8+zyi3/kstehYM6Rh0j4xKn8yUaWpxqqvkRZex\nxM+b\r\n=EtfU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHRkb7TrOix/Aw/FNm/BZauzsh5XwfLaqmLPrTspq0/AiEAspGEQJ5yYoiCtf3cSrO9hK8gwCQDe74C4Q6UR+yWJRY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591967919-af90a447.0_1591967987097_0.8668738400612204"},"_hasShrinkwrap":false},"1.33.1-next-1591967915-55cc7765.0":{"name":"@xdn/core","version":"1.33.1-next-1591967915-55cc7765.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591967915-55cc7765.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-HOZfwX+Yf/Z7pX0YVz4rJScScU0646kPX9oadTjsT9RTFBCAo20c0bha5eLLUJlizSVJ1isVS+o4beG/BYwPQg==","shasum":"89841cabfd8d3814e40817f1fd489092b2a26617","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591967915-55cc7765.0.tgz","fileCount":127,"unpackedSize":517703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe44D4CRA9TVsSAnZWagAAy3kP/1V5PRkgffYdpz6PJJM9\nY1TDGpEex01wNyQ8E5Llf/wz2/xH33mlnlSwyidPp0kkg1mH7BJstSIVZl0p\nC4X6bNzFeJbs7n9KbpjLoREvtLibj4hE+tYqngWjf1/GsRKBd499ZqcVu2vy\naXj8D0rJeR0YB0/6A4yCEyMNUaSKsX2A21bFZlSaTRQz7F/Ht01kDiJ019Jr\n3Li6ElNOXgEO3Tpb+y8m8Hl5f2TZ3PlXpiEW1NEUw9K6ueWTvvnYNpKw4DnG\nOgywZ9qJyzG9n90E2/HvTY0aFfa4tFDPSJ9ykaCRqxWH4WYbZCYwpxmytGh5\nOC2NcFVOaeoF2XAGJwRzivgGxRiAlQoc02F7vvwsgETjwsfVPpQAcN4bdxRU\nlEpmoqIo0lID43CFoQid2Rznk9huTP2EvkEgQgrP0OhQlkjn29d056nq1PCg\n5nNZ1U4Y+3B0mVg38mQCGmc9+rgBTM2pezspcWsE7A0uViL6kTNUfHVJtqy8\nItnfqu4Go49MK/WyJK+CMdhGrbdv3v2jlWExbq+8XBlncBYfCJlInBgh20jU\ndAsQXI0gbesgv/Xe3TxDuYsgNJ2IH+x7XMEyqdGspnlRh5JOCNySmEedXE6C\nvwV6Ogge4iSXLPKkDc1FrtQFUY9yK3AncYT5VlTV3sk9zc9jbvElGqeZh9oI\njD7/\r\n=RS9W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICx5wGq17s5LZ6hgqqcbo113gIRA9ZIvA6A5ryl29L8uAiBHR+bcvKZeDsA+q7HCYe0AR8SsdWc9yYT69oJHpR+TfA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591967915-55cc7765.0_1591967991718_0.6136636865970093"},"_hasShrinkwrap":false},"1.34.1-next-1591972972-e628a5b7.0":{"name":"@xdn/core","version":"1.34.1-next-1591972972-e628a5b7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.1-next-1591972972-e628a5b7.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-k9Aog867H9jrLo8Oz00+19AzgYTp/wKgHiO7EZ6Gy8DgvFBau47h14d16YCaEHAkXcmnbsiw3sPBW95mbqsaeQ==","shasum":"291ff7ca950ff2b177540978389c306cce600433","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.1-next-1591972972-e628a5b7.0.tgz","fileCount":127,"unpackedSize":528243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe45SmCRA9TVsSAnZWagAAeMEP/3xVbgKGQKI2nbsVsNCg\nx4in7cnZ6hipoz47kKXsSiqRGH7OhaC8vWxVxM06xVcDYX6d8gWR6FkgI1Wz\nwlIijVyD4A7csmlfjBxpKuJO8KFp2R9eeC78dHT61JsiAQyD18MBpugMMd8E\nMLpLoaOWs7AeqQtQMT4p4cGXg/79fTAPCFFD6nsZoc9BEteAVUqhxzTHX8M5\nMaq54T6hTrXU4HZ5N8ZWqFrf33GzvQ+2+i7eiTtovCWKVNR+49XzLgTORQ5w\nNR4i3+IWNB42JfccIt9OhG8GslIPePuJbl6dKr/qap/Q2NpQvMP+uIwsjnQU\nxKj0wH4Lsjy3lLKdDIxmMaYI6hWaAIRhmzMPUgB81Z49xHiRq1Izjx5peNqM\nFXc1yJ2PcpLpc3thVgHrlnIieQAnCMBoNBmXAKNJQMD7YRmBapekUGzhqG6G\n73dZ/gIveeD29aOy1ogSB2qaNswgioKf8vNuUD6BrAxqqsGioAiC6gm9X3/g\nHrQvccRJmQP5KlphQTRrPse5SJ8U8SH04LC7QuczjlT1ftv5pRLy88J6BpzG\n/6uWrxxTzbIlvRPQueeQmgAd5Waw/seHjGAc8EjaNFvOwOCkIvEFNfxqFxDI\n0zyhnPjaAJW5rnGEUq4Qkty+rVD6s22qTaHGAtG2dgsaqzVGkGmFZrGF0K25\nC37L\r\n=qUuk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCl/8Wy2tLlwNfVw1uyqxd9wYOH7Te5OFz34XELOP7IbgIgHEiPdmcVceMCYuJHTFsQrqWKHDFL1TcJLKQRlILSOuA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.1-next-1591972972-e628a5b7.0_1591973029986_0.5508567941615097"},"_hasShrinkwrap":false},"1.34.2-next-1591973147-3bab3afb.0":{"name":"@xdn/core","version":"1.34.2-next-1591973147-3bab3afb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.2-next-1591973147-3bab3afb.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ETPn/f4elkAcTP/uPKV8vYDoSiD2mhZuIbwBEZbbkQe9iS2jaT0NqmcJXHxGtJMQRbORm74/21Ad3Bk7DU18iw==","shasum":"2d1201ecaf9ab8f0cff6c2ea1be89ca1ae197cb8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.2-next-1591973147-3bab3afb.0.tgz","fileCount":127,"unpackedSize":528243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe45VYCRA9TVsSAnZWagAAJdAP/i4S1pask5BKe7MX1vay\nhcKbmpWaH/GFt3b01UfRoXu42ieLvqgK1BmnZ/FJaCwRKW+5W9f8k2NfZTR5\nR2YyTdEpRhzeFf9hORDsGdSzuKJXAsTgqxdrpiKo5DLdZOSNGtC0HOGlC7d7\nrzWfOg6wHMal5ldcAHF+MfbOA0gpeY30rlZuoIO5BmO+yttTApNhHFlc817E\nRYe8BVi09yAni+s7kqMz0kSmcZqzN2fks7dmkXXa6XpsLpO4hPRAo5upORR+\nFOH7bY/SiWpgsLJTgkF6kMhMW3doVZlo1a1mXuz6jAESoqlvkNVvKMb5QeJe\nYhzVGglRECDsd6chJZ3pqPp0iUTMaL115kDPCV50YZ2pFtpKiajhhkDqGRBu\nrnMYuO3/g0sowKu3yeSeIjFbYs/70daXzyfFtEBXHEqRy1u8bbkXdy9cVEml\nkJAMfS5vhe9vcgTLGT7VK8Ypc9i0TEw2MJ6J3rUCcqQzkRpa9O5A3AzQOcXc\n9OSsuAxaTwpm7JmN5vsAjsNi1jGt+HRDqsz84H/b0bWPod7GEnoWs8ff+lIi\n7PJKvxAhDNscX+OHIKWyqbCCaHZNBhLFD2c1kHMfh2YRkGSWD0ESbaIdJH1n\n17Kb8nOq0u0ijNCePjVNuFOT/pIy/k03QPkaPNXX0fJTupjI+V93pCpjudN1\nNWfv\r\n=seOS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDw3aR2cONN/t7TrB5+1ThUf/q/1HKzbHnUFo0L4eROVAIgSv/ytPEbkYJ1vVUY1cEHwzE6O+F6WT2DBmlwBb10hg4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.2-next-1591973147-3bab3afb.0_1591973208452_0.7369132819892499"},"_hasShrinkwrap":false},"1.34.1":{"name":"@xdn/core","version":"1.34.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.1","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-/rJqTzJxc70oCbGzWdh3pHY4zUC0Q4aP7+irLY2jguK176+BVlUqrJhAUMW7EG8Ni11E2O+tV/X/pkJKafuQKw==","shasum":"6ce5abdbc9b7c95a421357ad2c42702c1733de18","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.1.tgz","fileCount":127,"unpackedSize":528189,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe45hGCRA9TVsSAnZWagAABl0P/jLXD+mRv7ctA5kVnAHD\nQ/yWHCS7sbF/ZmcvTzBncPcbx39dBSaKU0lQ2932cx7ZI7UJ5VInGJ5v+6ml\nocJ8jvuNZlEbYyCPz9UJgk3QRNBJ94eSM0R/zc7dUdAKcsvCXrjqABdpx1fC\nFeCkyUBAmzXXFILC3KgzRMBqea4mWcxnYMhqaV5YtOYCY5Yfq5X24pRwX3Af\nxoJ86zKF1jR12cLOHKiRx9HJOWstmaxqRbmpTH1Gy7o1PxxtVYxh4D6xr2c0\nvIZ20ahA0UgR4O287eDIlhAhNUsjd0NbbpAdu/ODiGO6100+R/GtowdcWntE\nXwL6wZfOxV3ByPrY1y1qQFNaX8gAh7BOVl6BpjbFD3di52D/8oxUVf0qpivB\nEK7FuYdRqv5onR/z6S+Z5r6rpYrwG+qHZRzOaSyB7hic1clgTZUJBbLuogLP\n+j4MRZeun15CWqOj3HAUthwGRU+bK+jQfq62/jI1MFQeYlA22WzVoOhY8W12\nUkU01c4/lL7tCa0be69TOAJ77o65gZoruz3sVsScpKOrQDrk16Zp1+T3Swe6\n9f6N5BBSv2btkLhk0ucOe/VivMboeevwNEOymEj/h5/AO2SX412aLJIcjxsx\ne1s6RmCxQbVf7IvPmnzVJaj83efiu8B4dTOpqufoLIYLEmrLVTmFIoW/PX7z\nhb//\r\n=Zrk9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrK1hSGRpbGKI03R3VZAyrrtnAnQ/7tDkNskl4pp2MPQIhAItQ9dEI/RZHUZPk+ABBq+4Cgc8MCQ9jyOKm5qSNQmin"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.1_1591973957648_0.4433263592343317"},"_hasShrinkwrap":false},"1.33.1-next-1591974637-a2f64d24.0":{"name":"@xdn/core","version":"1.33.1-next-1591974637-a2f64d24.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591974637-a2f64d24.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-TzDppYjYBwZxqnx/odH4DOPVJFA45mH0rHzr5bJeN9CWp2mB54paXvvmFbFDm3IeoDoj0BLDwlucnl9lzf4LcQ==","shasum":"9e08cab0c26c31eebccb5f1ef496a8b6e99107b9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591974637-a2f64d24.0.tgz","fileCount":127,"unpackedSize":517702,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe45syCRA9TVsSAnZWagAAhKsP/3f/E/LpjkAGuqxyz/rw\nkKxes09jS22oMxGLQ90IWY/Zy1EFpJhXcODs47mPH8yzd6TXTaDg9ugG3dvV\ncvBQbDGDqLY6e/b7fbJ3QX4obtXNNPLwozivav0a2D/CxUzvzlszNv0KaJt9\nbbZqW6H2nXdlwwkxP7I1ZtrWwrawZFwgGoqDoVkUeZunB7kWUygGQ4NU6Otu\necHqpHRazDAAe96YsHE8x8MN02juwa+aj7ZjWyOVj4brYJLdUORcRRxB93Hm\nCpBeu+OihZAdKbOXGAQDukgHBcQQeOkeh+VBt8AjAw+o99H3R69Anb/W32Cb\naOheiVq816iS5p7FO/9ZN+zY/ntP5QfdIp1Q9/dze2YPrgKU5F2OCJRHoZwp\n8IMlgh5FRrCrjMew7Y5ctiw3qX3p6Gb0IBoOdmPxYr5WgKvi+GkUpe0s6RQh\nmY1doWfGV/FfW1GDl1j1gepw0ufnjQhWuzxQ4BD4uyZSgJIuexr7hKKbJ+lE\nnP/sAaky8PI6wG4cb55jdmMyZYh120ArdHiTgCLXSkcr4PXJ1sv0727FPWnd\nHC4UQJP0MUUuvsnYk8siyC1+EBPiM+S9NSmoOH0Bjj0sx89wJCCT7ffYODfZ\nmiZ+5O7Rt1b/H/X+LemgyZGjtd40Ulqmg2jv0xm5/lhVxVcL+teuJ1e0BNm5\nabd/\r\n=RESF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVOkDuA7pYcDMq1CW/B0b/YqtEBj1kA6d6jdXbhhf7aAIgFHZjGe3JvaOf0B7Yrh63fd2pjMhwy3ngMCczwRvvTkY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591974637-a2f64d24.0_1591974706051_0.41761318448941287"},"_hasShrinkwrap":false},"1.33.1-next-1591974983-9f88a9f2.0":{"name":"@xdn/core","version":"1.33.1-next-1591974983-9f88a9f2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591974983-9f88a9f2.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-3icLhD2HbdbMagdbff1E0tmoq4ONFUV9278AIvmHK4qxLvf4lbJz6NvTvwWXxioasgBONCjTmSHpaH/kZHKrWQ==","shasum":"f71c0ba18b01e31ccca83f39f25c30dbb6f39d40","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591974983-9f88a9f2.0.tgz","fileCount":127,"unpackedSize":517702,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe45yGCRA9TVsSAnZWagAAhTAP+gJUbq6flZZzgsZ426e9\nIzK3ugbGN00La7fjTDhEWa5VPo7oqVl97SJQ0Rs8hwADMhs77zoMhcXIXlQd\neW3h876y3BThIsaEMS9SU3v2oTHWKZwS290X9fEmxyziJT0GnNYtyTqPaYOP\n759pyc3XaardSbbYEv6tYHcSOotrafAiJo+Hrn155T5cW3in/KyNqCkWXQS1\n7vV9e3qg4CUwvwOnc9WVh3KpqilY5r6oPStKZ5vG5QjfSogXurr/Y06Ba3ZT\naljkRTPFmuwJbvR6wUw1PaCf1+2M4Qrp6gnIbw9XdsobLjbhnJdwhO1ZyXLX\n0JUrHbULAtbJN9kYR6w4lYFLi8SC51GiB9iY4OINRZmO6F0I7LD8wcybUTgK\nOXYm2B24PxF74ds9WMn4qM+P9gPs6cNDVt5DdpakfStzc/lJc/c7eSijcirP\nuqQIfVd83KzUhjT3dV6RMjzYkQ4mrTDOrvmJL8RIyzXeR3Q6VzJmd98cDw7l\nkuwWhwhq4sdL8XvRWGJdLU/LZ7BruOYTzczP1i2Iofr1o3aGgcAHd0RNxGiH\nnbxVPRb9rgjFwXcm6pWpXnliOIsin8twYPJ4nQ4scYCsvIbVVSeLhvH5NCrx\nlsHJkkxwUlns2x0Z+XoQuiTsLUPWV2JretjVjsWYccm2uuL72PnZi4C7pCLh\nHM3v\r\n=2+3I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBTdpoqyRp5Wudl1Pi9QImNTfeYjDz7fy2CiZrsmS5+WAiBr1AN9ZJTNJGUHEJaIklevfwE2fj25h/YXCM1SqAHL+A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591974983-9f88a9f2.0_1591975046158_0.4136210698341385"},"_hasShrinkwrap":false},"1.33.1-next-1591979403-bb779dd4.0":{"name":"@xdn/core","version":"1.33.1-next-1591979403-bb779dd4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591979403-bb779dd4.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-YrVqbQMm3j2w3bvyFsxFFEWjrReVZ9rdNO+jpkf4CvleVqSFqv8h9Pc3WAGpOmwr3PtLqUoXdAGM9RwGfDjUrw==","shasum":"b46575c2e435369dfb67322dfea3587192686c3d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591979403-bb779dd4.0.tgz","fileCount":127,"unpackedSize":517702,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe463LCRA9TVsSAnZWagAA4w4P/iYtwKrhhmPFhd2n6H9F\nzl6F2JXBHZmY1dwkgrm59UshQzjpeUCgYCRjeSyFilhtjWYESfyzOJu/8SZe\n03kGW8TIeTri7AmGHT5JMBWmVLNuK3G2rrxeOrCQqvDDfJ6PJu31Pa2HZgus\nKGKe1qp0U770Z+d28eIIxeTHXmIsfTK1HwxLlgD43zhe4n/8NFg4OXwusaFG\nxMmfkQ9bGmVRzZJwpHLn208LC/jBVJFAcnXl3E0MOi9m3NEvl78vTaqHiNSU\nLpY0CweoNzM8aqGpvCSWyJky8rGh0Rj0CCUS+BETj/bFQRboby9b0K5nfNZv\n+YrqRtwEeeTSFLFchB4Xu8xjTx/tyWielpFTuWlo2+WeY5Qq82m/r83csbMs\nwzGKJ1h+HZoKR7IHxvue++AYs2f42ywIiLZpsmfpqphWfszvqPqskBnRFJpp\n8p2ItTkb22LqYdaFh6EcbMEmOW37Xh+bvcwn5ipR+EAROuqrIBiKBiwarAad\nbVqogdzGCMTU4R+p0Ym8hFLU0yXuXc/yaMNwJ23Mn5jnufvcARW/idG47jQO\niUHV5yOB11dktme+G5OvzaVrt4HfP8DtIP/66ZnR+wjutXHpQ8hMWi+nsq3U\n3eF6xVNrPsZnwSmObaJrCqOq+IwGalFuNxXePOqN3at0QrfRGMCIrUkdwdE+\nmSwP\r\n=9TGY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGsQFhL8ynB0q/CqtnCvXMveGNzMv2Mt1Ta21XH4GYAEAiEA4/AWe4kIEibI4kHWHziFtmUMk2ngzaleNtvEeeOeP1k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591979403-bb779dd4.0_1591979466935_0.8752877263222076"},"_hasShrinkwrap":false},"1.33.1-next-1591979774-e0ec5d31.0":{"name":"@xdn/core","version":"1.33.1-next-1591979774-e0ec5d31.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591979774-e0ec5d31.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-dPkCbiIE8IlGRVzGIxmQoS09hN4BOyYCS1pdsvx1exF6YYNbvd9IZ4kUfrQ1Eys9AlXNzOWXxwHkjW324bRzRA==","shasum":"f998256df063e2386faa92319f13f0c161b1f529","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591979774-e0ec5d31.0.tgz","fileCount":127,"unpackedSize":518226,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4686CRA9TVsSAnZWagAAuAgP/i4foiBpYwzJtu5Il5pC\naUgZbWGn8OlwzYqGRQEm8/puLdbRzZyT6qsM4sUzotUfNB2sfk3vaARxWuhd\nGzoMS016XT0P16q+YZ0jYZ427BJADOCCdVBl4zGYgSQMPLpKVllD/dHdDaNO\niVTGjLYb4+j/BT2BNsWGW9GSQwC7WQM8eHA4pDVuRH7ZWhnJLWz43nDYqWgi\n1hEYOmQG7LFY5jJKpubkihBnjtkig0l96YVOxUw4Ohq39QN7CTQbm5SOgef7\n1s/SbMOufyz5j8KkcLnLXUCRSWdahzJSccJ3TsFiq9MHm030wC1n0wMCUJvt\nZ1FWu8fFwvJ08ou6mvVFVjQdUP5FHDse3RBBqJqVniDp+nuprEylGC+PnrEO\nRdTXEQtISo82krUEWE7q6+YpPqneDvzvTb8TZKEofchz/IQ+ANb6mc82xIQR\nHgSiuH4ieqywySKpN2wZiteMljQnPBK+z1cduPvgusFK4TRGfH4Tyvgzd/CP\nwNQEoUE/kBoQ3FctQVVAxm4iwXOILC0PMukA/IkfHXV6c359b8aV2uFkaqAD\n9haECb6B7xYJEmQnmY2Tr6P3TurFU2DUPtHtQQIJx+VgwN0YL6TJ+JF2lqJs\n2ghBOP2yKEpuaaWtjrb+iy73YuybZS1RtIXoFAeq4+EFUpFG/6IynfN3UUTk\nvMr6\r\n=kYi2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCj0Ei/4VWdGGgSnFGreijJW1aC+9Mer2Ese17Gcvs4NgIhALeFUQA9SJelIbDRELTmeKU5h3MBQa7FypG45Q5HjOvZ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591979774-e0ec5d31.0_1591979833640_0.8061355680629243"},"_hasShrinkwrap":false},"1.33.1-next-1591980112-1b8504e1.0":{"name":"@xdn/core","version":"1.33.1-next-1591980112-1b8504e1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.33.1-next-1591980112-1b8504e1.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-XB/VoBVFpPl28LiGRYpQpKnQGdSKExLcVVhEZnTDTmJRKzNCcmwtXndSCGJhEPH9ZvrZUcCqvJXkEubgbCdGkw==","shasum":"46494b569389749b4a0e1c8848327d39ebaa625e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.33.1-next-1591980112-1b8504e1.0.tgz","fileCount":127,"unpackedSize":518226,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe47COCRA9TVsSAnZWagAAPCcQAKBzOvRyNL5UxQjIWEhp\nDdqcIPgDAFfavgFfWgEVCWa1ikumlVfPEbNoq6EQvSf3ah+LU+P+KNEOK/lo\nHpLeF+ywSDncMC3koKFYkBdIce0Giafpt00+Puj2apq7C7nBzr82DnlP7Hkh\nr1urWjG5JYdJoAGOVU/xahKBwmTAf6VaQsaOkDXbEkumbzmN1Jsn3pOcuwIc\nLD3qoUvrtuyt4B33pkm8Cy+bddhR/9dOqAOjmJWi/a8MwfeUd6zybOLrBmlk\nKpcwri5kBrN8710cVLPXBhKZW+8ZcMOUNlQWBpdzebio4xbDecyzwurqvyxZ\nR/HaunRTm2u0nwS5WN01oNIsEskCvehYmoz/8w4G1UCcd/lMiObLDt95WnDv\nX7XwT5xgkRy+iea4wII8R6zKoRCsT2YHzw527zauF45PFFv9X8RlOUqQS+f0\nT8gAyC624yU4IUwq4SYIUX0C564GSyGpWRyoPL+zsmhskZe+OGVQteDe5DpO\nl0gxYgJg6dtZxocxihGboUZXO+oK24vdBtr0go0zvMdbGCVOjJogENI2qOTf\n8zhMRBctJXBjtBeg/laIjpS+2cYLNXGHN9pXtTDvDAC7yvLS5fjJOYqlob9O\nxhJTxeLY5C/dQv4FrHpuFpYkwlZ9qeEoCLrcB8MNn9G1UFZS/fzTryVYq0nw\nxA2p\r\n=vQgf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIElsPjSwr78/GzD0rK1E87CHcalbd3SyZNStYK/2RGpQAiEAhUdHgvCKfH+gvOzFVCjY3xd0b5yhQqr3gStYVEZNSlc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.33.1-next-1591980112-1b8504e1.0_1591980172998_0.9534918276121314"},"_hasShrinkwrap":false},"1.34.2-next-1591980763-ee2eff93.0":{"name":"@xdn/core","version":"1.34.2-next-1591980763-ee2eff93.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.2-next-1591980763-ee2eff93.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-cIcqDGSUzPpv1Hricr3jvTipmTGo8ylphkUmoLRvZD8MVULmYsULO0nT1z1+Q6CVXrGuy9OhTmTebil5OJX8HA==","shasum":"5647a90c3afe64dd409e0dd81091a3940fd0620f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.2-next-1591980763-ee2eff93.0.tgz","fileCount":127,"unpackedSize":529328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe47MjCRA9TVsSAnZWagAAg0QQAIlXYsuGHN+79RitmtyV\nrjXY+pxaw2OEJDBr2vGPwi0WWhmEzbCkg2ziiodrAUPQqIiBw1Bo2HRB6Sg0\nDt+NGnoeq8zc26PDLJyqOL0hjOZuucAUEBJX9EibiYHE9+9tvXY12KJbkR9m\nZi+FrPcKWtvA9VJUWjxJBCLDeccJLLjuWa064K6vTmc/fruK1PjRY13aiNOA\neGkAvUBpoF0UhbAeSay9u3qoEx3ERyB4kmemPX+qumZ6zfXOqyrQ/BbbajoI\nf9a+b2evnGui611NcRIpJ2tei1JY52eHmP2cqnVoE1pZE3FbRUmN0Y07WzFI\nY+lcFaKepj6YFaXy02l9JfytvI38srpaEKM64DhZtPSAyIcyD6ttZdnE0h7S\nA3gmV1BG8LjcQnd799g+g1c0I0eMYGQXvguccrW0TVAkFqHudQiPqAtJN+zp\nFe4D2WflR5TTU8+cVF5qVI9D1ns/LM67TCBk6pXBZftbjMVv03SWO9UCZF6o\neIAAreVPV7ADiOKVtxsLoAXlX9k4UbRqRRk8LNIxLAF1u6qXkFK5uAcKRGHV\nnfZWPhF4rgrd0tLZoRCDklyFsJHUpW9Ux5oLv+qnq0q7qmsku55H1NIWT34O\nkLJyQQ+6h/LJcCC2iIqtQOwoSGwEU8JjOV9j0D3jCBGfJoX2+IlZcDX6MTpR\n3u8G\r\n=S7dA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCq0Ah7i75NYTrzB6QCHiJ/gHi8Ko2MwqR25jBN7jI3BgIhAIdMYxAaEkpbzt5fC12nvI/Z0zMNwRPZwlbtuGr5ZF9g"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.2-next-1591980763-ee2eff93.0_1591980834984_0.9501620471016301"},"_hasShrinkwrap":false},"1.34.3-next-1591980852-f46b52c3.0":{"name":"@xdn/core","version":"1.34.3-next-1591980852-f46b52c3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.3-next-1591980852-f46b52c3.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qtYonfsXRvawy0rghyAM1aWRqWFjCdDOTcTh1bJG3mXhs2Y8xQEEgqNNDXFAX4coejzEadM6yr46aWo16V8L8Q==","shasum":"df428b7075b6232338e371c49bbc4f5bd5682fc9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.3-next-1591980852-f46b52c3.0.tgz","fileCount":127,"unpackedSize":529328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe47N9CRA9TVsSAnZWagAAcUoP/3TFzKyp4CpPnppJH2fj\n6TbbcFvX04Qto7+c6C+OOgAg3dtbaXhETmFxfqwP0+cxA4NxqcVy2E0SQLcm\nAVmDpezYFFunq9xn+B/9CMpfkbQLxxUZ0jQAi7BIcCqYOul/cMte1RiedARp\nZZbcVOwrxPbQ1qQTjwhhdZvBaUkDvXt0Kw+E/yS6jrFsk4mgnJoX2OzHQKz0\nZuy84gwHLRpHHCqcAHg8SLY7XqO1bw351LkHE0DktPDZBdBV6NV4gppN11d5\nlD/Z90BDwxoOjyA7PpH+rvF55QcTaHyUVKaKUS34jt8h+USKOZBbd6bDtpjQ\nVLecmh7PhplkHSJqJoUJGMQgQa+n2590KdMrz2J+dxS4tCGZBziFz2xNwu27\nHcTdQS0WiRo5D1U77knwWMzeKX57hzCA9cm6UIRG/Aj8bwRsNGbgKkQ+aHLP\n+/TeZ3kvFYWmQpZK9YQ1rNXsmYJT1xAdmXGUkosrQ5q6/WKG/ZTLclG3VsJ5\nXyBCTp+JXdrPbwUyjohpGGGpNGnAtMZSLPDBAs8iTIxLuIWJwGFWclhe4UrJ\nbumaFpfWp268ILHVQfbEGtb2OdtKDCNRc6VlgEgt0J+FpeE5yqDgNplvHogk\nMVhcIElp8FQyQBTK7Qp0VcMsWULuNEIwsCXlva3Jv17XGxZga+H47OrgiQbE\nOS+G\r\n=IHu/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAiTmE/AfqifFjREq1NgdONtq1Y87Im4TzgbBCt0fWnRAiEA6+58m/HhT2Yw7d8jbQcq4q5Y7zQ6t+a22aShpGSlrHY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.3-next-1591980852-f46b52c3.0_1591980924973_0.48769920803316236"},"_hasShrinkwrap":false},"1.34.3-next-1591981842-7f06c136.0":{"name":"@xdn/core","version":"1.34.3-next-1591981842-7f06c136.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.3-next-1591981842-7f06c136.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-cdNFpxly1hmyXxKnI6oMAFegiiHAFu8ljdMYHLgFJ8JmWc99+JMK9qVSASk2vNRHKUbr4152oMPS21MtJ3orJA==","shasum":"c4fc98df82803beec8b5c8fcf597e693b03c55ff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.3-next-1591981842-7f06c136.0.tgz","fileCount":127,"unpackedSize":529328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe47dPCRA9TVsSAnZWagAATTkQAIiDZckOvjX4zn/Bq7xM\nTiw6J0nhJD9RzxLSfjccMuKD/ueEeeaXckWbWTOXJyej+13zgU3A5PxvVxCW\n81Mersyl3o5zkPYYXG7gZd9K315Pj74iz2ov5mLzTOYcbZvFelTUoBj+tJNH\nur1Azs56nhHvzMr97ii0DYcp3B2UfYEHdKS/fSAMl+uoMeSD9GZpVQrNNzi2\nGr7eCdy+LCw7vV0oHKE6ZXxwccXnZTAagW54zMX/102yBLv5LhzR/+Et6Cjr\nkzXBWFaxhgfmOvyeadZtJTFpgBYoqcVNg7n9X89r+AX/pS190Usc1TcaBPJH\nEmAFLgGzhOONg4Si0jXrVAS1sBYpUvbTxtdXIdhd5Doc4/RIu2qilblHk4/p\nDYC6xvFbDY/gljvLBrijlr+WFPbGM9dvVABaWxydyYbz5h1WDv4I6g78jA+F\n87RZXjAUYeIKT8M2N9wV00ZA1iMs+DJ2ZY1V6YkXgrw+TEBDgFDmyUbrxYEN\nZASF7e7S8NaMOoSeeINUmhRPEqvVv+lgcUXosYlTsnup3Oun5pDxMIqwMlXQ\nXz4cswUMdnP8ivLxp++YEz4njBL1ArFkU7nwhA82BpwkwRowOh4X5xnkKarx\nO1VPkTlBS6EJ53y71x/x2l56p/oAvCdLjO8cbmxV55SmhCtwiVZQG7yFqwd8\nlRbx\r\n=PQVo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXUy1j6jUia0e2jcHTL9n11CJteaZO+s7gTJa+Qr2T6gIgPGxFdc83MZz1CbI7tDazi7RmXOc4bkJjt23Ni3N914M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.3-next-1591981842-7f06c136.0_1591981903033_0.07047424247678813"},"_hasShrinkwrap":false},"1.34.2":{"name":"@xdn/core","version":"1.34.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.2","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-EAy4FYRHuagxPWkuHRLOKs58zsbBSoC4Dj+fxFae5Ch8pAD3BvAabABlgxLxUPTJsnKNsKUAYFEAnzxywJ+9EA==","shasum":"f5f504ba62f63143a869f8fc6c64bb8c9c84c882","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.2.tgz","fileCount":127,"unpackedSize":529274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe49JVCRA9TVsSAnZWagAAQeQP/2GBUZdWo9a77Pr/xN6I\n/qsFsHq4dMmSNeXb5OsATxMR6FyN0zztYRIEF7f1JueW+ux+xrGSJ8CVGVQh\ncxcG2aEsN/O76lVWRSYnRoKDCxMJ6Fo1N8s/m8abs4FNCLafVuwO75Ql0cJn\nsXq/hYXaSFcMhjFtrWOpb1i4FI46hKljdnXddrRfk+qZ5FnNriEggHQDcCx1\nqk4ReImYSPdXVW1MgtBoTVLTbToWcxQ3RD48Fy8rJGEmrgF2cf1XRi+xHpKz\nU0Tpu63Jw3yH/yTOMnJy0SJbklGCCsW8p2aiCz/GnEiS2PDhHDeCwunsVWZw\nnHxCC9hY2az8nGlGrnjGnoefrl2Lg1laSLpUJpiOXFZsZ9fbX4C6IYBNgjn2\n4tHqoIbLgkzWux+69D9g1umeB5b2l62C7dLry19neij82N9GQbN/dvzC0fJV\n+jtdmzJJ0XnvYKHG12y5/nQ5gq7qDhYWjeC8rOtF14hAJ5ZRt9lRuqdRkIwc\nbVz3K/CJM3+O6DJ4FpgWH/iIZYd3btlBfqOdt6OYxC2sirWWkfEBjAkC9R82\n4HKurbJqfiIZp/XUCq7xthO8LhVwcCapJWXsDKsa7zpvx07Y04ffpYC4RVn8\nLMWi368cgm4OFSS20B8mOW/qznhOPf5J7qIPSanNHTlQzzFBakhk9Nuv717f\nzLpk\r\n=ACSB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCit6PZyp4E1uLOaDGoN4aQG3GD35k4wajD8or1JEUUcwIgVmqICEb8h7XwfHo2qWsJvS28SdXYMqeRdnqBOqLICl0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.2_1591988821065_0.8654290093176957"},"_hasShrinkwrap":false},"1.34.3-next-1592225481-7fe7f490.0":{"name":"@xdn/core","version":"1.34.3-next-1592225481-7fe7f490.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.3-next-1592225481-7fe7f490.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-r/Z+PUJbGZGMrkXV6TP/TKem71+CSXG8nerpiK1erwU42muLe/D814YfhHrEKplCDjXzZkXdQtTpGlz5BkJUKA==","shasum":"e012ed94d29dcbcab1909c906a8dce0068126fd6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.3-next-1592225481-7fe7f490.0.tgz","fileCount":127,"unpackedSize":529667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe528DCRA9TVsSAnZWagAAZaQP/1spkuPerAaSQxfuD40u\ni8EQ94K3mMCUON1y9fD+qsBMKwHpln5nbiZFLHQsf/Ao54efn99+ZdCMyU/e\nRQLmbouzMElKoajqltsjAQk1FXoDMbPLdUiDx/78+ZFX+pZvBy6icbUXgbeU\nZmQammXvE0ryQWW0ndgHzApfhOdWqi+Y9mOL94AHsa/rjApYmXRD8t+ngpF7\ny1xiYuN3NRqBP21XvYwiwdFzgNiJ1t1lu0n6askxAxlUO62qRLCprGMGrT0b\nroAlZfleAQCWr6UfMFWLyxDO04F/BFwF8RS0PDBkLJm0hHGa9dUfnwEMlTjZ\nSGXv7+1SaCGZSBggyW5U3obgCRoXqg27RK5dtoZPFl/TcovNzftT1Bm/L5D8\nbltOGKAg9SYVhdIJH99BWRhajLNtkRfC/Q5SYnbldSTiy/scbzkh/E2cCXvC\nlRFAequMiQegENPyWvRGEsMveLyHNWAkMS/i/yx4CKcpT7Y5BC+YG6HLmdQq\npVGd66Yk9NaHIDwvd76VJcJf2QBlvGkwz+JH0/xTml4JVUphkWKjL18acGyt\nDHBGfga43tWKVnypsuDao5jwlkzhG4/kRVxukiQLy22cHs/2AvkkP+BJS677\nqLUw87J/vA9P7wCRSNMZL62YXt8VyujP4bxhfW/TJssyhk6RGFabFDyLwk+m\nQ0u+\r\n=S2re\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGRb21qnKd3I/Umz40XFpLAUngJCvPDbaPP1Y0b5P7QBAiBiOzn0/Z4Ve9xurZEI8buaK0/sk6hEnJu0BhpLCMlvwQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.3-next-1592225481-7fe7f490.0_1592225538977_0.9327975074279817"},"_hasShrinkwrap":false},"1.34.4-next-1592228297-29715c4e.0":{"name":"@xdn/core","version":"1.34.4-next-1592228297-29715c4e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.4-next-1592228297-29715c4e.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-xN46kdpQfGCHowsdzD8WMvCz7EgTyO/0rIBGkbuv2fiF0f15c5+l1g9S4Ld8APzPyN2vjb0WOrvy/HhvnXiX4Q==","shasum":"d511c1b4d1b55e8fc2390155de6b49294cea8fae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.4-next-1592228297-29715c4e.0.tgz","fileCount":127,"unpackedSize":529667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe53oNCRA9TVsSAnZWagAAlHUP/Rgxpn1hzzFVaXFhpxxC\nbVDE3RINdSxtXIWOBBOULo6kEemqw/TzLuQGTcKDBLl0DK8yPQIk4k0fsVkN\n45kzRddKgYEmOk0j4cWSHG+P3QY7PsIR913vqzmvqL3ZV0uIuYY2CrFZJNqw\nTSKNwZekeCMl+K2sU3T0oKN+9lorBlHvMgA50E/m3c5R0sdvi4yME3K5FTxf\nOIEAQtQSG2M7yTSwZvsCrdIvp5ZyCqjW5yM6gGrYdfyBnpbZf09Wjt6MfYQC\nBp5mOOCdM/bCPJ0AxDNdnli7ffm6P3qzdNozYTTzETeZXfQ3brFWeJvM5Hra\nt+MIjfi4W7GQi+9GwdOsJXwrcianqNqsRx0qzCH9jyQibjSYuv+qCIdAMen2\nGD58R2Y7WauznO7eATE4mIXpNTNwQSW2ZuFmP3yBeJPxatERfXkyjfgTvc6q\nRiJCDP6CLzBZ51E1VHhor6zFuyqySnONA6aIAYSdLWFa3AX5H68lCVXIE9ap\n1ul0di/jGeCR5uSQH7g2zWPSvR7YCTIac+Tc/w/DCpwCS5MphcHva+014dwN\nV+HfUJ4ix+B5QVWlonJjSTLBboVHsemxIku7PRDR5OUByHdqDSWPwMdh2idt\nDXwrz/8079AUyqf/3RxfnW8O6RK5Kp8cxN+BWgmUJvdFbOOaPBtpfGxcCkZV\npUgx\r\n=YOG9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3t5lrf65npYf3GE1rjSG64dOhnrL+MSFNMzAIkM0sEAiAGPBH4KdxFzgh0SlM0Y0STlhX2+gLPvKPN+5jKYRy2oA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.4-next-1592228297-29715c4e.0_1592228365256_0.03902983373613611"},"_hasShrinkwrap":false},"1.34.3":{"name":"@xdn/core","version":"1.34.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.3","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-f6IuaQXCQQkG21m0KZZJBlURi3mxCy5SE9xz1jcJP9ErZMful2zIDm+JjnaOlWjYbtsSoAtnTQERicCi7qCBMA==","shasum":"298546a1ff64a5dc93159c6b6b01dc4a91283f1a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.3.tgz","fileCount":127,"unpackedSize":529613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe53ocCRA9TVsSAnZWagAAzDEP/RY+kp9mkApMo/ilMwuU\nyZwsm0kTS8GyBS8Cv3vbeibKs9C/m4xvLCVq8CbKm36Hud65jNhaYRegx3vI\ngzNrIPe8vs/vZdCJJezEa1FpzSDy5jm8kiyTgJKbgwUjS4ExvFJMBnVV6zJS\n/ZilE7xiHuyA24FUZpwuNc0utuLU52WgM9fgc88F9Hpy/QxF372Eirw9cFvo\nC1NpkSM/+x83jP9YQe5is+qENx9NdvvPsUraYGpJyWHofi8Yxr0oiqsi5bvY\nZ5o2Dv+mVAqfJZ8k5yq2pzw1wV6BeJsVr30r0L2OA33/eNVgYsIWYHC+WP56\nf2kHCjk2PTxjyNopKaJC4mdra8xX6FR3JhytJVypo6SoUEPRR0a1uZbXD2bI\nibwytBEtmr7kXTGo0H0lMDoRfTl5HwPQrnNBnSjJDA2bhwqfQFLyJAxjGX6p\nlZKsjyj0D1UXNo1DmjeV7JRpXCpYy2OXn1FuuExwIWLPNQ4eDQY9kJd9W40R\nRTzGxDMsLBiXF0TP05Bikg+d2UuRzj6tJcCeEgpkUDTr3UX95+3FxoVGhfP5\nH11dHoTTzIW+evNTT8AFMRQ8U1yNDD4u2T/VQPGMPnWDc6MtOlih6GxmUxDb\npTP1W9RsIV8uryBmGzixbG8xXJMI25NB/KYZLY9XKtTirjVlnCTYN7gLhdRn\nFUei\r\n=ppDi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFCRU3DnppDT/H9nVK9Wr+Um1I0wUWGOOXcUUuZYe23QIgduD9DO6RSQYTnMRvHx28Smw8KdYL7aDICgXi4zztz+U="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.3_1592228380099_0.2716324102746255"},"_hasShrinkwrap":false},"1.34.4-next-1592237100-c90c0f9e.0":{"name":"@xdn/core","version":"1.34.4-next-1592237100-c90c0f9e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.4-next-1592237100-c90c0f9e.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-eNc9p2uqTifCNAbh1OkwO2zhYuJaQp4aa1TlgWpJa+s7wQXloHZQ+PffmtkdeN6/fBrNEgxT9EjBAHsTos3vVw==","shasum":"0e9a8459ad7a796f6923777037c35f76c8f97e9c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.4-next-1592237100-c90c0f9e.0.tgz","fileCount":127,"unpackedSize":529667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe55yFCRA9TVsSAnZWagAADKcP/2LwK3jcmO2Y8tjcHV6b\nGfji0CfjmuhpT6cPRhkL/U1vCwWQZvgDOE62eBKMdb0mpzPtR9IApeirZVkG\nvL19lJRyxq0A2OhFH0Xiq7xMX/x7usvJOD07ehZCfg1kRoi9VyW8zW5v31qJ\neppJ0M/Sv57aWAXCQw9ygOvlQSLRzA7GeObnafDSFfj/Fk4VJbWlezfWZZSE\nr9APrMeuseYzCKKaFej/NqOD0iSHrNubTF2IHElVJSSCQIan8I6mik6r9eZw\n8gATA8nM2t/N9d1m+GFkihpmhJCHbhlAsxTzSEyjOI0TPk01jXB4KUCBWl1+\nIYcJZkO8I17pB9PfPVeR6Ss9VNLoc1JTgxMJSHbFHCHvqBgxqdmk0rDJMVy3\n42vLkCSZDV+MonSJWpzM7+fq+PUeX8bvWXIiv9RkY+vKqifqxVLNbh6T2kBt\n6I6+9TjrScTtm2sIcd1BV41XyF9YbSnFZj9SC9RD+IPSGnl9heZt0BPqDghu\n9kD22AzXc+61637quayWTU0x2VPJsZIYXnPUzFaqccWe/VykxzMaoOFCWT0V\nq6MNZinC37VbQEymndKrGLrLRMJJFlxzAZ7dLIBhrieb9/oh4rnI/UssgAxe\n6iIPXUsQHiHFRzNCqx+jZutP0pARFEK83UNUjU5ULokzSwAIl/0qqa7v1RSw\nk7cV\r\n=UPfT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDO7hTh9N2drdhDd7TUYmDEFbmb9mwHFL0mcCYt78xYaQIhAMtTF5cO3pnfTqceRZhciV9bFdC6hAMZT+d5S9qKXzN7"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.4-next-1592237100-c90c0f9e.0_1592237188914_0.3003437226093131"},"_hasShrinkwrap":false},"1.34.4-next-1592237121-c1b532c3.0":{"name":"@xdn/core","version":"1.34.4-next-1592237121-c1b532c3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.4-next-1592237121-c1b532c3.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-MZNZm0BCnbYNSKWtXhGyHtp8AGTgDLF4k33ZSK3VRMisuxtzfRul0ewZE7ErJ1HyVcLmMLWrBfcxpoOc1zaVVQ==","shasum":"da5eb8776baa36a30c944a6d65dc6685b34c6b4d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.4-next-1592237121-c1b532c3.0.tgz","fileCount":127,"unpackedSize":529667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe55yoCRA9TVsSAnZWagAA8bMP/029+V8DdxHMJ9EuEa0c\n1eej/R1Cy3Qv0l6zXmq2/Z+YaHYrgwpck6LDlU51PHetZ+VHdKk2Ynj1Eu3K\nne+F6tRVpzpEsGOyCi083i/GnkEcJFM3AmxuMqnKsioArUevm85sFXCqOe7Z\njCds6EtdICWLYjyxbrQ0d1RjmHmYTmExugJnEaa0T7gFqOSahnc0K04mWynF\nOfM9giqLL2RMsJ+sXfrk52W05ZzTQIeytro+eV6RHRbEO8D/na4ADvaiPB3L\nyvKLXjxX1sA6MEzrFRPJlLc8u9Vzb9/QIShaMgJHSFoQvZu9LdeQfnUvf5rq\nApj1NJCpVzlIhwizLhcmB9dukgxkkrXINqLg/ph7dNu5c5ocUEj2kYFaYRKR\n8PTmnaL4Q1ot4QDG/z7Wq944EkIE+xHCtX94MtCZwgBqXyn3+/wcEYe0ZLH2\nEJE/N5V39mE9fp7Kzap2vI9/sm2QQKSbcdHrhEe0YjOFy9+zHG2PqfxmZVOp\nFwNQolZXTYN2AuFOS3bSX4R94b6aH+N2evOICHFart4R+5v/oKHXeIAipn9a\ng5kWXj4/fvClM2y9HdSqjMTeWN9eNZrARKEQDYtv4EBmm6txi1nNFV6gTcg9\nHQx1e8yq9+mwIRsGQ1P8kplOHCFqwxKSRLM80aHu5histtjUpEOEFyuQ1FIT\nsGcn\r\n=PxcI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCH6ldNUP/QLRxdCrg+9EGdNO3JOTcxwr4B393JoTVw3wIhAO08t+gs5JO3QFlSU0dleykoJwfdPi8mbD/DNj5rhnHo"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.4-next-1592237121-c1b532c3.0_1592237223791_0.5917036838024621"},"_hasShrinkwrap":false},"1.34.5-next-1592237203-db7d8d7e.0":{"name":"@xdn/core","version":"1.34.5-next-1592237203-db7d8d7e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.5-next-1592237203-db7d8d7e.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qxdWef+xgLfCNqvpiyrpXbG/596M8FIVb1E4R3bLdpGiCkQhNnEMipEC7auCohzXtoubfWjpAYV+B/bakTD9gA==","shasum":"f259873908f5ad37bf732df3374482e3e0ed8d96","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.5-next-1592237203-db7d8d7e.0.tgz","fileCount":127,"unpackedSize":529667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe55zWCRA9TVsSAnZWagAAZegP/1iQKE/rEua1qLlxyloX\nbRS+9x22LSIefl5WXRa92Xr8JS9wChLwvGDKYb0s+7sOZvl86AKZBYhtUTGc\nBwg2Z4vWW9aAz7LtOxVesnRGoIPEVlfDDtjT+y7L3lzQ6nxxLXaPqipIJsxS\nRbuB/b87SkhOgABbsJj05e1G7h3AywxPf2jqjujjdgptL0ScVPje66tUFZ7X\niQ8puj9cn/iZvCTzW0cg9vUV1+Nt1cfo+XvtJzKA1g6r3CUqPBjuGP8c1l3m\nxnR/0GjuA2mnqcMQ2lAjW382fxYd1g6aSUjflwETvy9A96HBl3rnD6I+Gzq8\nId2wsLdSmEVnH/Q76/rcFQvPfLLkkI9zbHQFbDFdLgF+I0lVonXTw2yBWXqH\nqauC7NAZx3jnj6BWSfBxRL4lCA50GOt9FAuOHnl3oWs4HCHABWpq4d7s9xLa\nw6fW3Im7Ivsv3kwZk+778TIl/XCMGurqrfAJe226fyYNDHCzuUFdc1FyzPF7\nzJkAKyWdfmTLW5+zN+cypWLj+IOLGdslUg03extfq4TlPzhT35BbEEOE6FzI\nILTnJhO5bXvbNGv2NHFzDZVqZdVpI2LCs9AnwyWQMpXIb4sj24RdDwZKtDmq\nltQNZgA16H4df1rdjZaCev0Py+zFQ0+7nYY1TPNusfOP32JhSoo/5Rg2Jh+g\n34mL\r\n=g6UC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFf7InkQWXn+CMHWH6ZUTLj8umBeMLauPwpLJrJcn+bSAiARiYXzpoaLJRTFUfDslnuZUpF0nrr7axqZzeuKL756jg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.5-next-1592237203-db7d8d7e.0_1592237270559_0.2782231308637526"},"_hasShrinkwrap":false},"1.34.4":{"name":"@xdn/core","version":"1.34.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.4","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-rEZL7PuXYmbGv7n/beHDs2Eb/8cOBHRZbUOQfIQBdddxDprpguHd5zx3nw9uGtcKv1Nfhc3YGCXfWflhBro11Q==","shasum":"a4d9d427a9b5ecf1323c701667eef8a33fb14d9e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.4.tgz","fileCount":127,"unpackedSize":529613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe55+ZCRA9TVsSAnZWagAAlhsP/jwfnKlmiov9GmV8fJRx\nYrIX6I8NODvhdyb5+Q7XWBUsDJSjjKCbXVcVtzr7rkKWtk4mvOTb2kgwKszb\nSkLCqkS+Vi62MBqFPeyNL1EgtLonxb4FBOif+niqLzjveD0FjcWNjeL/yMEj\n+P5rRBJdQeKOkTLKoQpLg3zsVeQi7lynC+b6lboK9bE2GO/80cWuTPavxW7i\ntc3cNVXdFLosWDa7Y2KTkB0GAeFGNZN1cTeUfAftfUrnzdZz3Q4jX0L5hoWQ\nDLlZsW/1yBTZ3gqXSArD0uYrGy4mkm7+P1Hg3U3sQiROBW3Og5CuQ58lFxMk\nsYKZgWVrol1Kg5AxD4762c1c7/iKcsq+FWL9N5fmGAWCxPvJkuYWJCsNob+u\njOs6HIbyjaVQB/d9xQ7Ucj1oI2yLKoKNv1b27bRO91hB/399w3souxFXvwbE\nM8bo6FBa0Rm6GkZlU7fB9+G4DwhbSpSNPplf6GJO1PKLjXPjlK2s515sTNKa\n4ca7um6f/qrXAT3S49Z6wqa4MIeGYL7Y/v6hh7Kf66MfQC4Ty2WtmXPmqpq8\nL2xOd9RiXCnBiOIgaMV9wRQemAdLYYv1t+oRRRCzE2/CN2cD7AdbCt7J0ynZ\n+1Q1OGMFhiqVctnPO+EIWTBE5O9RgQEYmiix3sRE4ZR3Fc35jHo4TphF4CzS\ndLNN\r\n=5pu3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEZ755Wu3qSduRdsxTisHiHzNfik3/38NgZULmwkIWUdAiEAidMkHvElnA279IqnhrtJjRW5RlZS1MvDkPwVV2exeg8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.4_1592237976620_0.3690623891855678"},"_hasShrinkwrap":false},"1.34.5-next-1592249749-82f3e3ad.0":{"name":"@xdn/core","version":"1.34.5-next-1592249749-82f3e3ad.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.5-next-1592249749-82f3e3ad.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-btg94tiuE3J+Jtc15InWikHNvivNjXithfBqNSZstYkYW3tVev4wOf2HxNs1pOwIhHrt8XL93BaUR8WXD3lDYg==","shasum":"972f6343b987d82de4070d30609aba3e7f2bbb5b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.5-next-1592249749-82f3e3ad.0.tgz","fileCount":127,"unpackedSize":531255,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe583NCRA9TVsSAnZWagAA4sIQAIsIHb5QKhUiTEdlM2at\nQht1vMJ/aLqCSa6C/iQByniAjm8N/7096+KpUupvrMzV2hUAvtybUoKg4PGU\nbWa4RBe8FdFNSNs3voff/J72+624YAGhW1l9SAT7niT4XIKQH9GIFDxsq8pw\nrTWpg1oPtdty5EpBy4+3wc4Tr7X1SpjKGpagLJCil5a+gJccUWPvDT+z6Afg\nxwIpOyKBSjPIwCx5zEM6T8PT0jTh491USVVl33lLMTsMtpKvBALKW9SzdK9O\nd85TKcrUwfTjPCO6STCyTuKbX3f9iTPbwvHeVKJ3argSyP8YkFGe3yXiScTO\noeIl+q9d77bbeBsMYY2+5yFXsIX+5mADL8ZgftwG+/LSmQ8lAbpizku8m7MO\nLLfwr/cylZBJc+IWcw915Br0RrDGkiGyKf6Zekk5P391LV6hT5zOxRowc225\nocc+HfLZasOrAgF9hZL7qCT8StyY3zmXsd0m/izHuOXFv1FhNjdyCaPb+5El\nlGydIANrBxqnD5Az0olndt9hPvtY6O2menglZ35wxbHrisurX6TNiZKqkopq\nYv6ej8wsDaiMhnN5IW2ty2H2kNlzgR0VgQdUb/M9/RKn5gVBLDZpGFVCiKjK\nGeZuxwcPhlFdeIv854DAz70kPjYvKiocEHJSX0/Cyjeodf4c6ccJL/Jflld5\nWRAM\r\n=nmC6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8btKx0cvNk3S5K2NpzxwikBWvUky8Pv9CW/apNlORyAIhAPaQIYkpfHl9U2lBCLBoQuqTMyQX1d9LI7yCS87+Xpt/"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.5-next-1592249749-82f3e3ad.0_1592249804944_0.2757499814132274"},"_hasShrinkwrap":false},"1.34.5-next-1592256951-45cde524.0":{"name":"@xdn/core","version":"1.34.5-next-1592256951-45cde524.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.5-next-1592256951-45cde524.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-WBlX/HI70mRnvch40r/cXn1bINyziCaugjifpnpLoqm6el8eTHHf8lpn2+GJaTOuChwg071p4Zhes3FoztGYxg==","shasum":"aa1b4c66e626fd5c2828e1a56eb09944af2f83c1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.5-next-1592256951-45cde524.0.tgz","fileCount":127,"unpackedSize":529667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5+n7CRA9TVsSAnZWagAAp1QP/1Gwbi1LZJoZhB1rg10b\n7MC72Q6Il72YGByB2o/5VPR77+pg9nxZO7LA4z6Q+tZPUyYc1teGpjhyK17d\nwiuce0bEmwIGyUNj6WIjzrWzG19tUac5wSNMejFvbbc/QRDAsnNf50pO5fLW\nrdCqbrYA2z69yfpm3B4qCn9eJn5xcF4otM95c6avMwkKD3gxE0qU7rSaVIA0\n6ISwtazgSaQLqvghwQ2IqQMb+D3qg9Bi316dqoxD58EGtjMaT49Sj5kpL0Y4\nYg1Jej1ObwjJ0nfer8ZD8+QqfOQ8DyvJKN+K9JLxtT8lwahHVaDErNCBVqeE\nSJVZmWxkZn06Q6xTeXHerelIUDTfYl/k+wAbZLj6IZ3h1Mg9uJK86+6HXMa4\ncY1D1ovaz6Sv+C6N6kqed59+OBMu8wA75o1XoYVxj7PWA2QItlzqLMEqn7rT\n1wLWZpt4gg84bJf6Mx+xCVT0zY8w94APLEsfMLAk5Z5A/I9p5nkEdB16ScjC\nEKH6nzdVwqrCJsDoOtZwHg9WiruOTojW4BRbwye1yreCJMlo2wNYovC5mHu5\nLfApG8IqPcacoK/KknmhmNCsoNThLaNFrZNZOTcpftYpxgh6r25lzGRy5oOf\ncoH1LHoNL8SmXAHDNXaM20MZXJGcuKIya9gpivOu32gUaaf17Wl025+RahLk\n31rW\r\n=yjuf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMyrCHO2W+9qg8sbvSNINasNQnem7DCJEl4WLSREYYEwIhAL/dbREwoY5EBpuy622UPvP2Ayed7nYX9LZGSPXf7hl1"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.5-next-1592256951-45cde524.0_1592257018828_0.13057781155925818"},"_hasShrinkwrap":false},"1.34.5-next-1592257149-8d27b08e.0":{"name":"@xdn/core","version":"1.34.5-next-1592257149-8d27b08e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.5-next-1592257149-8d27b08e.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-jSpoHxmzegFCkQq7XlfpXdvTPyM0GYwOpE3uaTSH4OBion5lqy5rPF5VFb/Euc6kNeSfl2tp0+6BQOWCRfMh1A==","shasum":"f0420be54657269eee69a3b0570a64f8d9f3ba49","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.5-next-1592257149-8d27b08e.0.tgz","fileCount":127,"unpackedSize":529667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5+q5CRA9TVsSAnZWagAAxQsQAIDXvxN8DdfBhnWa7nHC\nUeYKovrxb0ow9jAp0DnHXSbOXujwMZJoEwzOpZ/+u9c72lW3f8XaFGqRERvw\n1DqR1vpnhjuqNh1/S+7No2w7Fo6tpk04sPXhtszs8YNYmkgE3e9uAiwX+wnc\neVUyx/k+wx3n2v85rfy11BJX4/W9H6ud3Xx8sweQcewI9pQfB2gxEXbt3FO7\nYxEL0symT2o1VjlsWHco+eNxFVLzLc/vjxVG0IUqsnoe+HQmK/95HaRDeM8I\nAj1u4QgXNzQ4ViEbb7W+dIF8qwmj8GANKYrcYCnOqKvmfOJXQykPi67LHFVy\nR378Zq8o3KALQXRUK6zgcW77JS+s2hrYJlPS7O5AZ0SAic7mY1QNISHDUGZO\nbHqeRh9ytb61mQHlMjE3bQ8Xy2qaZ8ZLUUB3Oob/2Hn+IvfTsR0mYvuexq9K\nrOGlHGIbcuKVTVsExtfW6sJ0RXzOxrocwC2n6y63RtFw6Ua+v6mOMhsQsokM\nrZAnrHLOIjgjo/fMIMkq15dK9BO7YZJhbKJTnhPOJaMch/ZDf0T1JjZlJ8Gj\neJ5ecbs0+kzy39no7mj4tMXXru+71PtIU0qO5i5zupKFNebY4k9i/pFdVSiJ\nQ/sDXgesEA6c6k5j69h0pTr2j7HjiWJ4NO5QfIeDdNab5xaPu2/94LxLKXLN\nY3QP\r\n=b2+g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFyijwoUOSljyu2/xydgqZC9CWDqjMdzqDsaZfpgJuK7AiA36etYZ9V/o81kKSR8wx8LhSYxf03RE7/vlyS8eRAV2w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.5-next-1592257149-8d27b08e.0_1592257208621_0.888137603461717"},"_hasShrinkwrap":false},"1.34.5-next-1592296946-b1cc37e3.0":{"name":"@xdn/core","version":"1.34.5-next-1592296946-b1cc37e3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.5-next-1592296946-b1cc37e3.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-FDnE7J+IZYMiOkp/LpINeZ3ZV6n5UcSQCsUWUiPXRJYqMhGEmkhbVga5azRh/tjC1T9ibdjx8lGsNpmZXJGI/A==","shasum":"93e59629e0c8fc283d80f019c583a90a1f9e81ef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.5-next-1592296946-b1cc37e3.0.tgz","fileCount":127,"unpackedSize":529686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6IY0CRA9TVsSAnZWagAA2csP/A1ZOU8uhANTdcSBY3Kr\ngDTWbMM0gXR6SgxWriyklnLK8Zeh0pa5nTKm75jXmBf9b1H9xQ3JbTZ24zUG\n3wQ9bD1jaRSl8wXcMK6iY80m8RhKweIxZHqK2zYmNmclAFWZKLxufjRftvAA\nnjBiY7H9voE9s7NS5LZC/YUjoKYS0ka/kynzkg2rk+VLfxTpryvK9U53UjrV\nqYvKkvkiGFlo0jjeQSkX0Y7l+2SxdZJa2TRUzlrmmwpYO3Qc6oK1RW8svBfZ\n8YvId4vft1gfQYa/WiEQgx/AS1oKI9VnstVkOCrDnAIPIzBvIjhtrGq9hDQO\nzJ7CgL5hEABuPeLGvn6VeUdan0bWbV00XrSd/6/+RKA2JbumH7NMaPSc61sV\nEWZrQz4VV+RdGhhGRV9Euj1VsR+TpCWC4fOjLGOcvpe+GnSMD/vt26lChsa3\n7qL326RGL+WrG6m0KJ3qq/gStZ5+Gbc6IfLY8M/YX5zU5TPev8XJCdQjn82I\nkaEgZX6TYoKo+FwIdu0cqElSb2nUzGz2UO8Br4liCf4Ri1Edd7kSMzEq4FjM\nB5pRR6OXvqDxOiCvS4j/5zpVaCZx86Aj+dMcDIMvTZm51LgMTa5QS+uo0NBi\nn2U0OQhaDXV9L9KUKV+YX9mDcRLdzJ09hMxTsyhZzXXMPbUoGBpO9HxW5OsK\njQaT\r\n=vYUf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7cKyHA/9q6N0Qr0bjkjXkgrBJXrIp6hb63EIPopjUHwIgTBHIPE0sSw2jiuNAGmFjQ7lfJBN9h/hEbXadZ0jDmdw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.5-next-1592296946-b1cc37e3.0_1592297012504_0.3046537725564331"},"_hasShrinkwrap":false},"1.34.5-next-1592297488-3817044b.0":{"name":"@xdn/core","version":"1.34.5-next-1592297488-3817044b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.5-next-1592297488-3817044b.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-QuOGGf/qyMcCh7zLwYR3BvH+hdhY8mZltTN38jQrfBIluXgML34kIHmgEBYxwSkdPY3NOS5+4iV2CXIT6+m46Q==","shasum":"e25054422cdb1834757e13ef3e4a9d2e4e3d7666","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.5-next-1592297488-3817044b.0.tgz","fileCount":127,"unpackedSize":529686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6IhQCRA9TVsSAnZWagAAxn0P/0fvM4ddzg6RitDjoIaP\nWRdxscVGVBiofi/t53oLnukfCX4iFYbnmlHpF+B0OKiYtxmke9I3D3cAvDLE\n8pSzLj4zs/aVKjQxXq7cFH/7gbtD+JWEYH6I3wCmopxlIZDmuqdmF9mkU4pl\nGjB45J9msTMlujHlpJ8sUJw6XgG0TFcLFO7FlY+RWTTblsFmfiXWlib0N1lG\nGm67ub6IZh/cHy2ekDEKw+VByb6NMIR8QZ+FRld/n8WK++ZHQrN8qgO7bRTz\nMd8fpEfDz4HxRcVkZcARMq1/uF1p6ueUYrb06GXOFp3yqkT3fvvOUrLktcoD\njYo3iSeTUapCgvFdHxFTmGi1sYwRIo278Y5fZSADKksRrqKIwq/fcS6msx2+\nSHb6SgK+SpjxFGsfPZ8coIaUzRd0ax1lNb/k2W68HIgwZD3unwPz5wZ72y98\nKZlDXYx2fgbQ1kR1aKByGtjrRvzJgn1FIV6PRfntGrBup8oo6gkV0z81SEO7\nkVuABqJmUuT/fEfl3C6hYm/fP8A1k11pzl1W8MMzPvPlO4HvODtHEQIodUrQ\nE1Y47e35eWauIW+FEg7RyEhYwnn5C6Xa837qklnkc00ZkXiHsr00W6hyZvl0\njR3YeXTCR/euvTqmWClLBO+0Bd1N8ztFXgjzJZzWoUY7oIXARppIpPN/XcSB\ne/Gx\r\n=gRao\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID92hqHQ9hCNKaVJLesGzdcSvJ26qdIg+xkG/jtWxC6jAiBxJXdy1FPdGtMUtkSCcc5NdfrMbac0bqmdZe5ePoRMSg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.5-next-1592297488-3817044b.0_1592297552019_0.5536777269850324"},"_hasShrinkwrap":false},"1.34.5-next-1592307461-e564d981.0":{"name":"@xdn/core","version":"1.34.5-next-1592307461-e564d981.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.5-next-1592307461-e564d981.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Rw0PAglZKr5L4AvH6w/KSRyM9V4Beh5JvtmqUMANPmH7KFJxWE0hiTzfmBVgALKIFBCR2rjVI2UfyybnHZAi6w==","shasum":"683dae46c6ae07426534f4204c2195ce46e20866","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.5-next-1592307461-e564d981.0.tgz","fileCount":127,"unpackedSize":529686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6K9DCRA9TVsSAnZWagAA/XUP+gOWtNqlWmpxv+SvS98i\nT4nLKSa2Z5t9ReFL8G/ijBUF13kmLfuEorZtMGztHnDHipTNXir54RsBL9OI\nOrEyhJYCH2jombb5XnwEGFMkJaycGTo6lP3ZDiLVKeVCFq9hvpv36emHCxpu\neimyb/1fBM86mEfHxOH+j+zJNc1r7rvrh+1U8rVCN2px6A39YGyjU3gcDTMG\nhmK4EFDQy30VylpdTfDyL47wm2dKUK05mBSK7yFzybodDsn/+PwnauGJcHU/\n1k+rzl6yaWXS6pobbWKNipqLEIskhkn8Mq3zjOHPjcje/ozfUG1Aw2Qj/Q4G\n5gpsEKyeKeCbzNRt0k4FHE7IWQJIli3NI2Ql5yNma6N/mBRFYKr35BCzEa/p\noTLTtwzXhlYecwdOeBg1rKuHj18XRiybTzOkap5qrwnaITX/ggSSW4alzwib\nF+Z+0rh3oIGu0lZpf9MinNUDYMFLqjWbBrRU108iBaAPIT9+GegNSTvdhLyb\nTXUlsuPw9Foa6iIgnnav0snwGf50c/owzKIc8ksC3tkgK4oJo590m+ul/OPG\n7AQ66HlwlTUiANoRtEUPnEykcAuFMN42/oT/EESAM+DBfaCwaychPL6RXaDE\nTt3/M9eZLD/t9Qvj0QdeK3op6d8mVVWdyPv/Ofz+tU7DLeqTQBBTo7bsINod\nA1M3\r\n=oYZD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAjQgdwAfd2mX8wj9vYHJdYUKL2AE7AnbNqe43iTNJyNAiEAhA2zJ2nwkJGGv2MadIQnTxSNR6GISnJfZ0CC1iEeI28="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.5-next-1592307461-e564d981.0_1592307523429_0.5284758283933761"},"_hasShrinkwrap":false},"1.34.5-next-1592309606-0e35e72d.0":{"name":"@xdn/core","version":"1.34.5-next-1592309606-0e35e72d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.5-next-1592309606-0e35e72d.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-G/EK3t52Te9VL5+p8S940rl/NTvuhZA39QqxGn0/Ugpf7knKV32nW7ryjGjBdsb99YNGhbTxLo1j2dU5fjqsJQ==","shasum":"04037de45dab1f789cb625d39016c42557d2a8dc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.5-next-1592309606-0e35e72d.0.tgz","fileCount":127,"unpackedSize":529686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6LemCRA9TVsSAnZWagAASiYQAIRyBwM1qijSfmlSZIgA\npp+/bG7ykUCJ6bdWv2jkD/1HizQrJ3y2lcvM+vM2KIvQT1b7OYLKgF9GJMip\nrTZa+Nz79Adw8o9Yxz4Niz9rzblFu3Wl1E+92HMt2ALyr5PM5F29WSwxhZit\nPPZeTjPa/x5Wpo+Eun4I/nLiYGEdjpkGDhrIN5DrDni537jD2o/OKj3J+04n\nf3bRDmx6HCeDEvRK0Qd5ddNIvstzTLbMOfp3zeCQClq7o1us1RS+mxM69a0Y\nyfsOo3y2ooTTr/THOnB8BhxN1dbuzSjdylSsQXx5KDLWK7PbeP/c1zf1L7th\nq24y4tgEfipWRLzgyVvKuLmhHc2aSpAPd6Tt1GCz+bUUI2x/2WsYPqB0HgLm\n7cVd8HL+exx57FL8jilCu/cN2whNJhMT5FreWF3GGarJNsUaBfzWyoejGiZx\n8EHLwIPfWtV9E+nK2Jav9B+FVVPWLJD1MHn5JsxiIpezVCJ3ciDsuWtDXfRg\nfVvP0d46KJZwS1teQMmse2CRFBUHESGWl8i0efK+GeKagSvYvAuT367rT+Zf\nwwQUdba5h/Vxf+NaagDlJ7vmT3eWGIm4a9uYQh5Yy/4d8VsyK6KOWIQtGbWZ\n+VXr7GULQOIV+97csqOkgNOjwkloviFcUstE/7odyhxrtPwYjayLlkslAa1q\nrrLv\r\n=opqi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC83hDwfeVwNLlQWeY4q6aTuyjVjb07raHW1tmt9ICqlAIhAOfcZIas+v8BfpVE5PoEENnAWEtvLooF/wqBZcabnQUF"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.5-next-1592309606-0e35e72d.0_1592309669603_0.7064006384692614"},"_hasShrinkwrap":false},"1.34.6-next-1592309691-c5e5b11d.0":{"name":"@xdn/core","version":"1.34.6-next-1592309691-c5e5b11d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.6-next-1592309691-c5e5b11d.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+1S5pPOCf8lddZziYZf8jyOeeVfccWsli2NQvMVkD4aps15G+NjkGLQfdhlLU5RVjbdQFvuw3WH5lt3ET2km4A==","shasum":"17aafaf4ea3dc5021a87711f833fe17eefa653dc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.6-next-1592309691-c5e5b11d.0.tgz","fileCount":127,"unpackedSize":529686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6Lf4CRA9TVsSAnZWagAAnF0QAKMwgzkrEUJeo+7+f2Fa\nmlQx3G+K8kx9GlG7u40Z9ZLj4ZJEQelle5DivGfUSq40X4qqfQNhIsfJg8zP\ncAgNFGakaDPLtjtWsTWuKaWZafcCo4SIw4gxycgOpe4h4Znw7ZQnn4IgfFAv\niURmPBc9wivr8WWF6onD/9/nW679+dBm2XpcMGJmE6OC6m6OZHFQy7a3459Y\nNcggvyaC4cMPlNOdQ9VkhC0ntu0h0XczC4QkVUb8kjcCCXtwC0UJEfwZ6Ira\ntUY6Ie88aU+Ev2o2YsbE8YSGmf7gj2AJuQaNS8f7XB0zPAPHRT/noZsve3dT\nS+qkEKvjdKCqXZwMJt2uFBsOhVoMJDpbwukq48lseiXWxNgzbNMXE+5GvFUl\npOoLALWcJpAK+TvK0FCI0KY+JyTRrGKJf86mD1bXYBifcp85MUkw+ZqlQN9s\nwfPSN40NNVfOLfu5X+5CvccQhXEcXU6Vbgk5vAmiIUDgQ5hSoHhMY5db/r2G\nBDWEapSVpofVQZloVZK1S6X4P5i5de6l6AUUpv4JDbtqC60a4luq0G/tmJli\n1H7H924Kz++2eWv/tepXMtkVwOiKaF66Ekf2PQHHFyL8h4yFRgRnM6fOnNZA\n0JTjjOoAs6GEUUt26AIBVxFrrzpk0gXZt0DEyL7VrgzQshjLqz2J9qfzLfz3\ncl3u\r\n=P60f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG1TZ+MRZV8Hom7QbzVDUaOep1DqdCQ9IAdLqojLmmKPAiAUiJyLAWd6k6y82z0dEP5ehyZsp9a6EgstGnhmNBczKg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.6-next-1592309691-c5e5b11d.0_1592309751934_0.30430686771944093"},"_hasShrinkwrap":false},"1.34.6-next-1592310367-a3cfa8f5.0":{"name":"@xdn/core","version":"1.34.6-next-1592310367-a3cfa8f5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.6-next-1592310367-a3cfa8f5.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-z65kLODjYCA6Mms/oVJeXJjeJmA84ZC3o+6Br63m7Mpt7Ra7Wnb+T/55iEVfEgLaUyLmnR8aT6vGmh+3Q+mfBw==","shasum":"aca976370ad9b4ffa822d0cdc56490800c3bec56","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.6-next-1592310367-a3cfa8f5.0.tgz","fileCount":127,"unpackedSize":531253,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6LqcCRA9TVsSAnZWagAA/v4QAJijVhckz/L7JkSoGBmc\nT2YuUO4fQn28D9wBtarvsjoyd1LSdH4XmM3NV10tBrrCGUgYcEHLn++Q3+xS\n0ypj9wUO7HwrGDFR64eXCLwwpm7+t/zsTt7qdsHHzBHDlJmDBjzsCQBfeAdY\nJxi4wUtdUVaiosPHIng3DMd+YA39OsC1KXPVywxRrs/fek3Zo2zCAO5WzACt\n5TkXWKt7IUQIzt/Qb3NjFi07JF2x8r0awiCsRCy8GFLbEBkwAzppPGyNjctS\ni9oxImzjuitWSm5LjpDwmQLDQIPxsiFsfHlmpfYoWmZMJFCJ5MhTN/hrjPci\nFO6lGKnvHikOh4u++hXzZs1/VNgyYR4fAczc8+zNDisqe9jvojaiyJ1GuTyf\no8qfu+GkHvSx1S/B1vCv1k4bGQv5CXPXFYdownHyOs+Rzp+AA/mG8b14QI08\nWCyGYpygGWHkI2UkN7ITegXX2VQ5c72rUlm5Dexw0B726gt0mjriGLBdH+CC\nD3rd/LKQ3m9GtcCPsnBrXq4wqVkhdg5HalsGadg17wKfbfaG35XeD2iMAKSJ\nexjwzeZJqS/M59v0b9KSPND2Zg/e+m8Qmccul0d/Ch7Sn8NpwFBjPevXbbVU\nBgpgEArYF4En7DYxR3efDJ68vqf8Y3avMDephY3PKhpcbI7crns1QTguV7kb\nR2Ij\r\n=7M0d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHitQfa0G9roosn2iaoypOpqf5kXN5mcNNh16gmq2iE/AiEAutwizq+LjxlMfSugVCAUokt0zOA204VXYexcpUG0780="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.6-next-1592310367-a3cfa8f5.0_1592310426504_0.18132625451478446"},"_hasShrinkwrap":false},"1.34.5":{"name":"@xdn/core","version":"1.34.5","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.5","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-yitpDw7G6B7xns7QTL+4UHRMob4Yy/T/pjyfzRxKxyf8lskOfFiL8K6CmPWVeDwO0WylB2jP+COGdWZyVrzHlw==","shasum":"4d3db613150651b66470a4592e07100f10b37786","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.5.tgz","fileCount":127,"unpackedSize":529632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6Lq4CRA9TVsSAnZWagAAJJgP/0sPJ+fuVqNxcozEKYce\nJvahyNYiZ+zo9JQi+EnrDffiA9bK5yv8ORjo42pvaaxsfM/S52A0Bf6I9cz+\nPgExHBBnPDvxtgBreKgkMds2OWEYFRibPUHUtBvcWX0QpaYZDtpGpJkmficM\nt428y+b7JXjltgUUftt7/9as//PXdq6VSnAtq5Zo1eKpMujKA5YGR6A0ZT8d\n1wbLmy+xKuQme/mMiN7uFX+2bv5wO/eP/7xBHmyrA6jiwgezFViBoxPerVL0\nrmaOd5mzG1poYO1TP3XjavRRUAcuHYSP1JrCuWFUIIsoFWnATziSc5N+jDby\nlW8HdsQvMz6ETNO5cq5+7AH12gyAHBkr1u4vb0QStw9XhpPZVl+jxrMT87/Q\nD2dWsBPKRrzRchFHYnPfqaaefb/u7Bhq8E0LkVSNx+uS4hDqXTatql6u0qjX\nArE5cVO10RfCv2cf7dEFNEPtlmOeNWgV0djy5HTyviEUmhPjzKxebwQzsDHt\narql8jmfIRRRWPjMbKpNIHafJxByaLMTIp2RPhCndawyqc1Jp7q6oAvbST6L\nzfRzundc5ODJ30DoCsypR3gjeTye4+NyGIf4WejTXho6knqUn7dxCJ7Oq9CZ\noj0m7nxk7KdgH380jEwNcPaDB+YPP/xVDGsocds61XvCneXQpz7fxoA5zWve\nkaRD\r\n=a4Mw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHI5O8GLnIWvSrbNmc3AF9q6aDJYxaMEV0F8Sb0mQ0LTAiB+OKi7j3Rt+xbdAZ4zNnkSc1qKlwoTnushCKqTntlI6w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.5_1592310456140_0.20554720547031846"},"_hasShrinkwrap":false},"1.34.6-next-1592311845-d7d4041f.0":{"name":"@xdn/core","version":"1.34.6-next-1592311845-d7d4041f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.6-next-1592311845-d7d4041f.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-GwS4MWhGKBMiFlp5VwPR+aFsTYWeYYcv9Ea8B1x06h6cVsD6fZNT6JzX8HSb/GdLr4cQyJ+fl+G7rFWEHALiNw==","shasum":"8bf0b5ca1cec28fd85da2f5ccb887057d44de024","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.6-next-1592311845-d7d4041f.0.tgz","fileCount":127,"unpackedSize":531253,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6MBkCRA9TVsSAnZWagAA2eQP/A4cjnQ4ZBXPQXH1DApJ\nCcI7ZVwr17+VbsxCOX15pkqNguzSGY2VVxKJOIyguk59yAVgVU7aJD9nqVN2\nndwnvheeDOnELBJmzFqGbRXyIZvjegNk41GyQEBV70HlskjwgOmTMDV9z2gc\n3ZO1zXa0ixx3H5GjTU/j6oJL5UjoRIVEYjCMB10igFRNh/1dVGP3mkBBiNwY\nBPyfqlmca5WElfOlHaOEVzBOp6+ssSn4PFg7YzoIvKCah3hCmAZLQUwLGxY8\n9tYiuFG5KR7GBemC7Rp4f0mU/Njl26MGCDokhNzBUtLZ2gJ2vG0cUITNM+tc\n02c1RIFE6u4Ah51Fwol1qSRmu8ihMd8bZWTmVQScS3cvJg5J64zo+t3uTm7n\n8EsB06YiiZ97e3fN/Ud73b6tDlaY2/w75dJlcHA+3aDyD1huo2NN/Ln23R0y\nNbKaxMDqTrkPcHAcE+tk8qVxS343Yrm+CKatLTjzXHcj/IZXqIgKnHbDz3LY\njUE4HodPUVZdFjDzuE4c9gPId/tZj/hhZ1KX4Q0Qq69gehte2DS1SpHvB8Xi\nrmgpmKnkzt6MEc9VXjX4/vWtRhiFoW5lDgrv5w0sGyLfTFoTb8tP53DG0WCk\nZ+bImRi4u0UVdO/cMso58iEkdyps3P5Wm3erX/ttRDDHw38CZIF0/pzXsvq/\nLWln\r\n=/rGS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCumW9a7sYBh5j8mguIhATEDhNGp2uGiqaY2/vs19lPEQIgOSMPq+RtgBAlrab4mP+Znvy28FpUx+am92FvGAkufQU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.6-next-1592311845-d7d4041f.0_1592311907840_0.9751940217836432"},"_hasShrinkwrap":false},"1.34.6-next-1592312588-87822b57.0":{"name":"@xdn/core","version":"1.34.6-next-1592312588-87822b57.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.6-next-1592312588-87822b57.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-KkrPP3uSlCNW9i5R1RK1EZjiBBzLTcm92M0VQjTS+PHR3RTRWjqtAWTMjFErpJwOdevi7txMjIbV3MVE3TUgYQ==","shasum":"16272de610753f60870c9cce02fdd4814156a4a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.6-next-1592312588-87822b57.0.tgz","fileCount":127,"unpackedSize":530426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6MNQCRA9TVsSAnZWagAAr4MP/1W3P7rsFvHhpVlvDt42\nkQJqqOFxJhc1uRIbdrAlhSuxqE7goIoWG+DD84qQ1w63ScLHfVFauTFMNtw8\nENvFT2llaxbzKHgVfaIqFz630+2T+2mn9IAeGDJ8+SrPaFWMw31+fKi2UNsU\nbUP3k0g4h7IAMF8xiuj6XqCPPBlS7FaqgYmxTneYx/Rc/M+64CSwKjEng5of\nXUb9yJltIBTuwNdkzvYfggv3jLQPm6DnQJA4j9BNE+O9YRaqjzqACtfqbd02\nZoMqt+ryNIa397M0aIT8E++K/WFFwYniFXwrnN71kWLKJdOye0c54e2AaFqa\nIvaZzQ0/NXsGs60LA5u29Q5YOAFqKj1xZ3ojaL+z4pGL86VkiKyOnzw9thi5\nEurCM6ih83qydkfqswAP1B/7dvOoxS7Jsmq6NQvgdSpFTQbBfGchnYoEQQfR\nbLYj9QjEuQD2pHMDi2NPpcgNJw6IzpmrX6Vc8hnOAgbUHmCzl0ADeZndHDng\ntdQ5g+65qVPBjDnPIC1ySUTERbhgusGy9ke/+HDkmfr+WtZJ1yLBqJsaXrvp\n9rQrS+vHbz4/MTcJzkLi13R2bI50mVhhwN7eKA9UB7TH6wIwqbVUNutlhSGG\nGa+VmGezDZuyvWI1oRFcjql0hYqqtCLbgvgIUUCH34sxOhCz0p928ljRG27V\nKjxZ\r\n=C9TM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzp2z9274ulJGNdsuAM7MJA4ONCG56RDgjTUuS1YR5hQIhAMVzR9Bh07gXjbey0kkdehdUd+QIv9NC4bAg+A4PaSAT"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.6-next-1592312588-87822b57.0_1592312656091_0.19441697938975966"},"_hasShrinkwrap":false},"1.34.7-next-1592312672-1df663a8.0":{"name":"@xdn/core","version":"1.34.7-next-1592312672-1df663a8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.7-next-1592312672-1df663a8.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-grjFscbwu9UqvlcJKAUOmoniNGdxBgIX9yEalN3Z5oeeRrY0pHzNdn9V+AZvssA1eFVvPR9nXwdhUx+ZPduhAg==","shasum":"ed24eb1514d743b7b3170b3daa59de899928dad5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.7-next-1592312672-1df663a8.0.tgz","fileCount":127,"unpackedSize":530426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6MOjCRA9TVsSAnZWagAADEoP/20IjDwIZ4Vp02yW4A5Z\nBG/OCTenjhGo6Um3Gc7pMTKmTNNYmP7JdP6SZom+U90XmvqGexNM27ouVYpR\nBt2M1molohDUqrH887/VjXrEH+QGLKrwiCVz6Ukv9aKE2STf6soJVHgsNqK7\n56Kd3oXTl+lpicIDFAAoTL6rWbXIMlri5GV7cskvgZ6NRiBbjNmekCdITtB/\nOLFEtHwChE6BmOjullLzFVEgWLMZEyPtO+0xJ4SBr/YAdbDS0WjRoAX82Gca\n7QdGw2gRkmkaqHxA6Vst1lmJruDQX8xb0+zi4OFw1Jj70XGdpwcce9SrxHIr\npKYk/wgPgzdLujio3gAYl8++8ToJqm4sl2kt3rHF3U+bAcNggK8ALCUbNAeD\nPZd9EfakrtohqYHDf1zZhrnzz30IlNF4LBLPB8zGh3/kZjWU9ko/OgjLKCdK\nisH2o3c8uHXnGSKsSBA0JP+c2x8jb1Z9r7DzUlicgJBaTeGEw2plE+gRJtPz\nOJl5ye91SYhnt9YsRzvVef1zICliBj7wezTGyM/JAykwQFiSn+EzAlBbMw96\nDvG3sX4Dh0LpMdC7hFO5exiBJyhl0TY7TzaxzaPQgtHiTdjRglnvIza6szbZ\nrMkUTJYCjDq5DV0M1Em106X2tMaq2AeoHr1fnjNIbDAbclgXE1wJLTevpoAD\nVyFl\r\n=Lodo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBVFlfOetvhLWHURYRYyTXSr/lNtcLDtWuxlIDVFqqsYAiEAtke2jjcYlHlMxEVZsmV5Xpr71ehO8OuS2EmefvVn6Bk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.7-next-1592312672-1df663a8.0_1592312738630_0.854556283301608"},"_hasShrinkwrap":false},"1.34.7-next-1592312705-2b105632.0":{"name":"@xdn/core","version":"1.34.7-next-1592312705-2b105632.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.7-next-1592312705-2b105632.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-TLGx5S1I5yMtaio6IomKHBsl1gZpuPWp0cq8kLsguRqUEFD3/eilghMQ2MTPEANFpZYHTv/hCTW8fk/eJ6Bbig==","shasum":"775068c4d06b5f860ebbdac89ac6508f75cf2d35","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.7-next-1592312705-2b105632.0.tgz","fileCount":127,"unpackedSize":531993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6MO5CRA9TVsSAnZWagAArPEP/jyUVhJ8MJF64ABzAf2F\nj+ER0E95ciyJPBDKVW9Fja2UKzPRI88qZllpS6p+YGXRr6lkZvE7jXK9K4pm\ndKU4wHR3yb5B/LpLc2c48sNbM5xM8CkMTG+vWGN5qctNx0kFAIZRpMZCJu8E\n2ZU7p3D6HA/7nKKdKkp1ZkDNyW2jA0qoki9UJS1+abtLzuOSFTpEHa/EEvlf\nqdx59InTRIH5yQAbW1WGAnYsmoOjias4OL5vHqcvHWTCoslFkp4IQhGuvc+1\nXOO1o5l2xuFpNG9gj2G+ymL5PM8HfffphzAmDGiTqjq38pCHvTOOyj7FOKPP\nIL9nmly8NE0AhXtHNpLU9MjCiy2DEB7ZQqBtdcX+GPZXtGzoNu4zeKF+UNIG\npUhKEMcG8O1QrfutpF/7OG/AoqVGgdJuZPI9DFHQIoX4I+WdCRz/YrtY9y4x\nzGg9VsbMe8IIlmdnNejKt5sWVeuf3inYvK4wKjf5SCmIs/WUASq6yPVjvGEQ\nkGynmNKuKgecvvU4EifwXPvMlrI4X1KH57PF2Df3ztj2a+SUn+T2JXHaf0ST\nYN73m2e85WjVD9cDzYgb3Kz/hBuq2P4glfV2u/lpj1fsyZXi99uumvZ1xrcH\nbhuKxVE7LF3Tasqd3TpsiuAaFg4jI3gQ+YwQkPC3YZhMlNmAeSVNhEX6MLh0\n1ZNA\r\n=ojSF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICGae5q1NcuNASTRWkY+u1FmmYj0p/wZ6Rv9eeZDykSyAiEAiIYgCP5lqmc6/syTwDzqH6TOsqP92tt3Ymmksv6kG/c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.7-next-1592312705-2b105632.0_1592312760572_0.7983358179434363"},"_hasShrinkwrap":false},"1.34.7-next-1592313144-1f253e41.0":{"name":"@xdn/core","version":"1.34.7-next-1592313144-1f253e41.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.7-next-1592313144-1f253e41.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-RjTFcxFixLa4slD1sda3Q+z2J+/vG/6AT7Qli6juqhFgy33GpQ73XYsqRtryAZXE3ZCU3qCcQssqPETiruHEgQ==","shasum":"bb217e65cea8bf53966e81ed5b42f7375bca0a73","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.7-next-1592313144-1f253e41.0.tgz","fileCount":127,"unpackedSize":531993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6MV3CRA9TVsSAnZWagAAE6UQAJamQiW/D3HxiD3dT6Pv\nCtHSm2O0SSJeVZa6R6aCtil3PRVG2x9hD5QWPzW0TO4htG71habCpwGDMDNN\nzkjhkbM7O64q8dAfkCKO3l7LWjiBu/sO2zE/3VC8rUkaCHxHPJrgr9jMObyb\nGs7FBHdpjZevYhURBHkx30XA3npBBzrWnWR/G0JVjTaasWT6mlqrzgJ5IlsO\nSW3Jrt0EPu5ya2UC2sh401e5e4btlmoj2oBhrSSTBjlO/lAeJByoXbFsc2OT\nd7zyOyCMqek2lSWPs2pM+ua0QnwtzTtEZjOm+2tGrDkgTq85c8JSxtHChU0w\nRYqu8qhUatVTC74R+5eOEZXwWtSWwfPyTFLrUwaBuacLqZlMQe5UVBHjw8B5\nN1bxz3GRP2eUpddKm5wE5u1Cre0Qv6hFFhWeDMrnhjL+NDIHdU0qCgglmn0E\n64xgFpd/X+QDZH3QRH4F6JyZlAW9obKcnCbkPzUhkqZ+cm8254oeHFVsy1rj\nETrNP8Scc+hSAo2jTqcCpfMv4vUBTqGW9ZShfpa0PUPdF2qO/ISm27nJQz0d\nM3eTTeapECDt43zFUNUJ+umbpcj7cf9LbFRMMcrnDEoIllktVdfXw4tyJxeg\ntpkjxBjLHaphCAZR/ApJ01goVaa5bIoNOorbzL+IU7pMpQMKf7l1xKvoqYyC\nZcJ6\r\n=fwx5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDaGAaFXn+YV8M8CDB7gnZlluPx2xUhluCsrT4RXABdMAiAnv8/SR8oCbyIczmBbEWnbR3qp2q5bjs06+pUuBn8kEQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.7-next-1592313144-1f253e41.0_1592313207324_0.7619471273401088"},"_hasShrinkwrap":false},"1.34.7-next-1592314772-89869084.0":{"name":"@xdn/core","version":"1.34.7-next-1592314772-89869084.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.7-next-1592314772-89869084.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-sNc8G28x3L4LeWr2I15fJccn0semnxio1sFtlOB7Bn+qwyUTvpAT0gJs1ItQi46O0tZfmfZRYqHJwBsObTQR4Q==","shasum":"37f4d72d7c865859bc6f8596537b2f82c58ca025","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.7-next-1592314772-89869084.0.tgz","fileCount":127,"unpackedSize":531993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6MvMCRA9TVsSAnZWagAAYoAP/3xp87IOw+SL+fZSFEE6\nm4Kz4GhBZnw92uLRxo/5/Xqtoadp39J8GSSlp7VPAkutbcvmOsfXjnHFdIvi\n1IPW1Xx6Y6kMTKsc31mQ87ghtksDJMkGlJMbLhKvpT5pLILQg19KmCFo7rep\nfHNINHTwyVVkmdjoO3PKNXmHN9hj+L10Q66MSZP6XHRWVJTa85zkwyrzRpQy\nLhmb30qh1w9n1TrUp4pWI+4+YehtQwKFtemHfHwj+U4NxNc2+iZebrrTmipp\nao+fA0SvLC2vUu0jVjJSBeAzG1GOoCePSE8GrOzGePq2eA/7Il79VWoWISHy\nnr+tTsJF3opEVZZFOnek7/NcfbFlG04yusxLxwvJYwir0OcOE/OMuzLtmL50\ngOCQcD7agUW1ulMEuOeKLDCDddPHtKUmGpJPQRKWzUV7oqeoCtxgFRDzPzit\niiMGb9pzBNAMxzhDhjsdvvtZEvA/pSGl0jB8prWj2fC4Fi3GCbV7RrG6XLVU\nN6XvBInpvAHj8xFvrdlL4kNRyGfCXyTXwEcEFINJGQec5RBrhK2nm20SB0lW\nkuAuepd3Kt38NUDvxdIf1HB+ZZLeiJ2keXLqMXeWpBHNkJqg+WA0vUyV7IE6\nFEN07vv3vAJJmv0QB8oYkd55YiBbvMTZTZCCdRnC+rjmvhqE7Yq4u768Ww/9\n3Yam\r\n=ow7I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFWWeMcYKetOQ57+8H7e5QpvtlgCFjICR8UYw/ZXstGhAiEA/DlmYCQAs4zkSL5GLbhAgoocsdzicUK9MmTZw79Skj8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.7-next-1592314772-89869084.0_1592314828301_0.9358999835973045"},"_hasShrinkwrap":false},"1.34.6":{"name":"@xdn/core","version":"1.34.6","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.6","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-mB3OnN7qrNpyAxc57/zlu3YgJw9aCfTYxweYfYItQ/uJweapvcSJ3v/511a59ka8rQ9fln2cz8+Eazvg51BpUQ==","shasum":"62cc79cf8f0a0b04d2bc51dbd912d879a32e0037","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.6.tgz","fileCount":127,"unpackedSize":530372,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6M0GCRA9TVsSAnZWagAA/64P/iKNlDubQ/Vi1Nz4oJdT\nRvjQcQuZbAvWbV4H/lEhQvDnu4W3VdCbFKhc83eo/gHcybvecJ9R6kaZMlvq\nXwCcv0JEzRUUMg5UFQ5CpSZ/bPHvs+khTPFty9E4NDCluqtVxcMUiJU5twWx\n3XMNJE7pzn6gvQ9/FStCLtobHpzjZBRsxYpNch+I/R7aJBKnDWBdXYiU8bI+\ntR5d5LKTZJM6ZqSirHFIMaS4q+17quke0p3CzCvN9RnPG/zLpHe4QaKiwFDJ\n+hcBSEcMW2xm/2vd/UHLEWck+/E6yhfq0+ob2xvDXm896y9Kvsj3qKHxFHBT\nUQmMNEzgGRYrtLd4OsAwv4o/ZoBcF/K3PDFaoNGaXcE32JZUC6/WqeQ94O+K\n0YqfQEdi1QmRSwBJdIoyL7+1zlmKKAQ/YSS9t5oo/q9og9b2AzQM/DkdYnRH\n4L9dE7aUVihVrgJ1PyuH4LlNK4wDYKg+PN8D8jGXGLxPqFxnTb0UbLt884nB\nPLxNhoRjE7IfGah2Sct5eMaGdiStORwwJ184scFeuFrAcF6RNRILZjvgpua7\ncm14Jkf96eAcEKHq+Ea0sIToS6wLYlz8NuM6YX+JhbX0946d6Z42SX5MjQW9\nFel9xhLRps6ENOvGovrArWT1DUzGcISNCDpaF3Kqaa1JDCRAtdxNd4G+qZ50\n0tHA\r\n=RCWv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDuttQtCzPyTingrJvXEQttY4u+UEBFwXO/SGowoGMGHAiAQDIaFDE3gAf7Dt3Lp+K086qHP4h09aSP58EENsH2rjQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.6_1592315141867_0.6745588308771775"},"_hasShrinkwrap":false},"1.34.7-next-1592315768-d1b40077.0":{"name":"@xdn/core","version":"1.34.7-next-1592315768-d1b40077.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.7-next-1592315768-d1b40077.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-giqxH9nQf66OjkYeVun1GAKJmBOd4i9hZR3BSiLjA7G1Bfc9Ym1PDqTcz3uNQQ9V2c5M/QZ3aLEDWAABM/ii7Q==","shasum":"30ca1c335c023e768fd69c5b8648f717b05a2392","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.7-next-1592315768-d1b40077.0.tgz","fileCount":127,"unpackedSize":530426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6M+6CRA9TVsSAnZWagAAzi8P/2/KmZoMH7fjlO0tI5qI\nOe0I38xnisiExX84WZykdtYx6tRVzm617GOT5FPU2KP8UW6WH9fdFz6WOQcw\nhXMjjVIBJ054t7PAo7o1iiQoSDFfYb4rKStgzs+feZUCpjC+1pQ/HdgwDD0f\nJGgSvNkoUW0SDTpvR3NatGSvZMAzs7lVI8R81yG4YJ9xG//29dZEigJPgly4\nkJCcO1YE3KQUW35LNskqRswph1V+7FJTnOJYec++6IGH1FfX5xTlXblUGiKZ\nxhQNysTDHTgJ/zvslM7ar1ZhWCXf2gvPDgU1ZjRx0n4ISTCJNx2y9qpWjIWV\n8vhBMS2Iwfnzjm1hJJoNsZ17dWZ/lpY03cFABmAeimx6t7TnFioxgCzEBAnw\n8ufyMDPAgsuc3KAeo/zW9b+99yzIiquGS9CkuNIPE9WyWrmVlD0HcGaRtNSR\nMXpKhsSC69YszqGXwnOZgmOnmfuGsbpibEMY9Hgoo+gl25Das0Tm0zquUFvm\nMYrn7OCqOlzZxFx3Pw6+pZDOrv1hgcX+unSUe652kB2GpoGB29E+jKIRddlF\nu9rMUBWfI8ajVsyiph/ZFm+IYGGv182U0pdlDUcwxSt5TPtqZEGwcM++paKD\ntV6bhCAdyPuQ7hIiXbeMshT23oTcU15bnnsi3O9KxvChtODgOPcVQXgozcQE\nNU/B\r\n=CChI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOTDStmlhL1SYnLmvxBEnBNHM2YMWX2Ed2BFWsm6iHhgIhAO7hExmqRJG4NskK5pY2RyUWwn6qDKdreLKBqS+OHgWi"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.7-next-1592315768-d1b40077.0_1592315834275_0.338202744463866"},"_hasShrinkwrap":false},"1.34.7-next-1592317014-c857295c.0":{"name":"@xdn/core","version":"1.34.7-next-1592317014-c857295c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.7-next-1592317014-c857295c.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-OuHE9bxdjRQOdQa9D7aqUdChtu0qlF5b77rJwUwhqPeVtEya+ZJC7NaIv88w1GKqNTLBvFG0UCYFjrGCvl1OeQ==","shasum":"e734b529b6dc88d4abfdc364f04414d22118c2cd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.7-next-1592317014-c857295c.0.tgz","fileCount":127,"unpackedSize":531993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6NSdCRA9TVsSAnZWagAAUwgP/2W97PHZGoDmlBhUKjek\nhxrSyJQyMGXfvDelWVqynN4cFLqly3Pabs3BffX4MNH3r6JIjSMiG3Y5uLxC\nBbnEjUme+k3vr7zuDRsbmqXJqdtCE+UfvFrPlDuIb3OVLf/dU+iCoDotI84Q\nOHoBE3fCU9x2B9BfNF6V9WyLfFDBUSz0SGpsxhZRNmTvwI9Gj6E3U4e5D/bF\n9/gtuOLvDlCI6JGMHsRQ4KVA7Z8rphXBWVphKUytMuAHlQflLQVz4N1ijeFG\nN1fpTP35qGHYVrgT7UEA+4kWACNyCCo9Kpu4Z9EK1GHdFEo3LkKcyLZjCe2N\nW40ObMesfpxs1lceS1swYkXBj7FWw6RVoZ2utmFmQFwZKdj9xnHnsksSgjQ7\nfh/G5QKhEEPuPMMGsiQZcKI1CYjCT8S/z5tBFE4tB2uZLQ7jEhH4C2AVLdTZ\nCeXR3ih7aC6wHaGPCl10eIRLr9dDQQWu9/4JHksKnd4YudSiv/d/Dw79nNgp\nRnV78Xsq8TCHI8XQm1y1n6OctazhkNrkp5yvj7thzhwWPwT7bJU7oqTH8c8z\ncFdiMndNpbcENnewXdnvHhDu5s8p4rjKZWh14LDE4sgjfjvCVuXJfSabaz9U\nwisjZDZa5yzSAUYCzg1Xn9aIkJAPG60B0uiPkA7Ggp93ztFjMGCmvuBqCt0Y\ncDY9\r\n=g0KG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFFYSHJJaU9k4NGBDHIjSpx6xA2e7s+rH+Kwfpo2ogK3AiAEMG5Nu/6JQgOfQ04q8bg9uu945bqpFEVVGSUPWXJO5w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.7-next-1592317014-c857295c.0_1592317084802_0.6141561800606121"},"_hasShrinkwrap":false},"1.34.7-next-1592318936-b9045aec.0":{"name":"@xdn/core","version":"1.34.7-next-1592318936-b9045aec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.7-next-1592318936-b9045aec.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-X2cq/fDhl8CJhtWUhzGvtMclXzA5g/2dGkovj52k8/pymg8iFpmj47mGwVVtB0NwggKxswYSuQeTK1XNDqDASA==","shasum":"f934662dbf2810d46628e515392689f232d33fce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.7-next-1592318936-b9045aec.0.tgz","fileCount":127,"unpackedSize":531993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6NwbCRA9TVsSAnZWagAAFtwP/33usK90JdvDgvfUScYS\njGB2c1BEVn+gNE5YYt5wWue6qzMzSqDUp3b/obFXiATYlC62psMfts4VWzaK\n+Vgwu1oDq4AfttwUv0IVYI23oeoT7agicx5zsk+DCeM9p6r9g8dGEfPe/bxh\n6Q6YoP3PFwOI1TJxV17Ot0zqwpOOx+cN59uxNYM0KSjL4Z2AXGY49MWUWDPD\nCm8P/9gfTl4XNW7qiAcqAg6e/LnkJULL5ZFo5+ndOp/5sCj1a84rAzorqtOT\nlHKpq8VEbWI0KdfIsRv6GGx3lKQUlI/bfap4VynvBsAclXDnAMPIVpPsUHaY\njMrLe1w8+NGtmQmGQ6EOu7K0RpCrrYucgFh5ZgejSvBLThMiFD5ftatTiT1T\nf85Uc8A4V2MXtJJ7tRyiJg6tf3tqBwVcohfnKeOmMQotisJ2E7fCC72AFkJE\nl2UBVZSgmv7QWqthnf4ME5AbieEWSTo4q/C7/EjnAdPpL1ruQmxGZCSlq51z\nyd3l4SAsyP5HjoMXC22IsGJ1NusWczVcfpDhYuq9YINEQEfAn0ve67AxHvmX\nRxiBBRMbtfHKUb4rnnvveHUk/oIWO41Jnp966HKoqV0DHNXJpIurb5GR05xu\nPC6rgfr1GY10skz5QDzMKaeM1GmMKb5UyEgfaEt1dGxPpdEpTnC34VbF7HZp\ntwxZ\r\n=uBup\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrG6s4ctp53FA5XHlZOTMQlwlEh70B2S/itveWviRkuAIgYwgLjYlwyHqp05MgOx52YiSsc5CMLywoo1EgyYGgtyw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.7-next-1592318936-b9045aec.0_1592319002809_0.6165127653384312"},"_hasShrinkwrap":false},"1.34.8-next-1592318977-fe0422f0.0":{"name":"@xdn/core","version":"1.34.8-next-1592318977-fe0422f0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.8-next-1592318977-fe0422f0.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-HwD7VufUv0iDfnRfpk/TG88HHzRN+mUvz5VMn+AnEHPI0qHTUSWQLoO6rzlgQ76a220IDiE125cJMJjtMzuhDw==","shasum":"14d6b6dac6e70445dd481082a7d226ee4a089f72","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.8-next-1592318977-fe0422f0.0.tgz","fileCount":127,"unpackedSize":530426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6NxCCRA9TVsSAnZWagAAsGQP/i4eOV9PSz50r/P3AfWP\nKIkO6fyFN1rx/MnvYuSZpcB+Oh0EInSdoZEHLTrRAw09ZQ0sf6oXDXLHZZ0i\nUiIttd+HPQcK55ztyDIOPGHCsUywLVWIQAXfTYkPekJqLGJpqpEMafplhu7t\nPCXlluGlRnNVTvu3SRB/rewaZyypplFXoFkOAa+i3LW9mYWxRhId1D22Xogv\ncsd5eT2fI+QKIUO0k0lN30FUMQIAzQE6O3ozFq6ipIy5+7VAwBkDDoNl79+e\nlSNLY09pu2uFHNswjBC6bWMmQ9SN8YOEI+Dy8BXX+vdcVNCFjO3IUitiJS+/\nBoNEx8yy+DGwG3FsKLk9Qde/FdfTwsjWH5jyWvsCORvkQdXyPkuzW5sAmzrU\nNJvdVQFDEAm6AlfyRAkkdxBAVeD+Qo+AYFyJkHi3DvmJYrEh0kPK6OH1seR5\n918+rRiXEAo5KxNiC/8vA2CXtw4A9r15wk6P64/1tdzZ4VyvrFHvWAoaFN1y\nbBMvxa9LY+piZCS0dr3BT4CTFZVmyV+OwkdWp5IGyCG0/uspLdDRUgTAp61K\nk7MUGDfW+uhpZfepBxZGlpGeyd6oxxPnw3fcMUujm5c4u0b2Xw0S5OG+EMDq\nSV66qMFRjREc//AYk6DJfSc4Qr2FVRTKkcTltogHGjuUjOpGUhtOPten6YAA\ny9nx\r\n=9Pot\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3rpEJKFEJE+Ga5B6SEHU0J5GjH3quJ612lv2YDVV+nwIgHj5SOvkPbGPLVDu3k9hFxEWBVLSYpskEMbgtnIAM9xw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.8-next-1592318977-fe0422f0.0_1592319041364_0.21463250849212057"},"_hasShrinkwrap":false},"1.34.7":{"name":"@xdn/core","version":"1.34.7","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.7","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-GdI4gzqjHX1bK80R2AMgy2X7c43rBF9CUTdRfXFi8GOaHCq8hm/pSheCiZQG5Vp/gc1UL6e9GJjB/16eAG7A7Q==","shasum":"28705d7a19dfae4ff55a91d81609809acb06b97e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.7.tgz","fileCount":127,"unpackedSize":530372,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6N3HCRA9TVsSAnZWagAAtwkP+QD4JshECReRWBTsqFTu\nF41duu9P4QKAGuJweGBxFW6bGWb5MJSIRb5GYcuOCH6fEHtvbYXtoAhGyiwU\nE+76OMCnj9cINB2eMW7Uf+327qlu19/e62DxFUg0/3NzIy4Ic6YpTk6Rcxff\nuleqg/4pCzcvKnlmJjDZuC0JOsAXur7Imfm9Kft/Vv6krYtjAxIYZKSlo3se\nM9fMQMd+YznuZ5YB/UMQv03EhZKNaEaWPg9tS8kOAr4c/ZygtYGDzUe8Tp2h\nC4YZdk+9uPufr2KWVLgKqXgAs9cvvTRRXxLq+PZwxZuVLOrWG1U9k7AMjh+I\nFkMgbUzSrstnb0Pu+Mp2K0Ijbe1ur10Nvq359j6p+uczvwUCDNiYZFsmTGLZ\n6p0B4JvnQqBLn9B0Uz6NehHv3wKpdAYtGbzrtAPvLxS3oON3kRVcbyXr4R3S\nU5mFNsn02QTd0X7phEM4RF9H3SnV+nBBMgQiC8oy+Yck5zHrKUzQ0QOZW5dJ\n54XtbsP6KgLtNL6ikOx1aocDxA/WDQiXbwfnJyWGGAaYTPWnyn4vTmA0630u\ndqQ3gNKEYsavagfUUThzGX9ytD0BgK2M/BVcjG2GQgE9Oa5WVfZs01ieMp4b\n0Qb8oLj8Zhq/KZQEiYs67aMJWh8uyZe3dQr1bICSB4Ea6IgtmQpxChBCCS2h\ngxta\r\n=NLoK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2jcSEbRb/9Ds14N6N07S6u+KYWzefzsLDTF4mBPVLjgIgQ+ejyZ8VmTPXGEkx+TfEx5Z/LQvNjXmOUhW7nXCWmrU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.7_1592319430995_0.8971965445242589"},"_hasShrinkwrap":false},"1.34.8-next-1592320383-bfb04986.0":{"name":"@xdn/core","version":"1.34.8-next-1592320383-bfb04986.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.8-next-1592320383-bfb04986.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-C1T+Zs41Cec6ueADN/uc647382rbMc3kyGevaGBt2bE3rdtCaHvRUdKuw1bgraC/2xm5xZXl2PfcVb2DAAs5Ug==","shasum":"876b137cd73fd54541b6cf22ab07bc6cc3247c30","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.8-next-1592320383-bfb04986.0.tgz","fileCount":127,"unpackedSize":531993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6OG+CRA9TVsSAnZWagAAOWwP/RxNiLPAxsIcHNow0ufz\nzaskelku73Mjp59d1Vr+eJIK/O3BVt7lAShyaeHsaeIU5HJ6cbpk45CK8EZ4\ngSPs+wJ8k2t5mL7QqAZ/k5Nb6yY0rmW87gnZclHx8NOjccS0w1FLLdpIAl9T\nknHonb7Brhi+/ydGfknlGN3teqwsPgvVRH0f++eBU7yvpRsF2rUKwy0GEgiS\nnPPv7J8DqDXmECihwFCuR0EZafVi3FlK3t1lcl4boFJRfSTRWMUgDYhv5AEx\nVGoVB68glncVOxitu1j8D/Vx9nqm6faF6SZLeHiCYvF6GQdE4lkRiMj1DIiL\nLSb6eXH6fcej5nfSbIPX/DKgGJmEe2/oPo2ZC5DLBNLZNuXfdBmJ4myxGNbJ\nl96+AYeIt5q73+iUbenEpUBC52iBYU67pPUisJjd/LziocSYXaxLJiO5DYij\net8fEUxP3oYZkvMIXLdr1+4IkTTRUT3lNNzwZ15xKFqALAICELTknQhcshUz\n/PYwRScb+qVwW9/o2i+dIL2w7wYYGxyyNoUANi1cUWp8CaZSpOAyy8sOaEuB\nX0lNPr1ktgqmN67a1YcKEcdx4Crmcfq0kh7xbgrog+e1ogt1OiOv8bkJcFGn\nN0X+ER4WpIIzeir5qgPxu/xptFcsW5R27rE6ZSky5JPVDvbqpuUMLxRMQJjJ\n/fhv\r\n=KVf1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCElLxqXsFOQ/oWGRuHPTLDChzRNDxqTY5Cx6M4WeX3ZAIhAIUc4IEidmJNkh3tVTfzxLU7QAMykUJmcyUtPyxAoWYz"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.8-next-1592320383-bfb04986.0_1592320445493_0.84606549751688"},"_hasShrinkwrap":false},"1.34.9-next-1592320476-e5788115.0":{"name":"@xdn/core","version":"1.34.9-next-1592320476-e5788115.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.9-next-1592320476-e5788115.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-hn3i/nQKt7KxfUfdITjKu7JrVLyw93vXF5yVtTggCYmi3D3ht9Bq5cEIrHZstELXcAduAj/dup0skSCTaypGSA==","shasum":"ea3d148966b5784c5e2da86f99c74c97da672ff6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.9-next-1592320476-e5788115.0.tgz","fileCount":127,"unpackedSize":531993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6OIaCRA9TVsSAnZWagAAy/kP/3vZF8k0WE5IpYxcny++\n7k31uS+odjplQvemlwcfePxoNg1l69Fq0GQBMYyKz2b5iNFqGsN2CjeRzMcH\nPg8xIokNEJ1AmdEXGkHl8hJziUQnXe1tMjOynLGnVQL9ChD861HPVAiTK1r/\nOGhCzvigtTIuftXN7Slz5t2K+D+evvhcxyzit0MsqgS02K0fd0FtfOCV+8NG\neYbUAzFvss8XNG7dbMkUmoX9XC803EQCjITI9lUdV2xex0bmKbvVxos8xN+I\nB/rybqgB8NVJU/qVOss4X3AsVXaybXo55E1dEd9W6uojgf3PJnajYHduPHJW\nSWY8LSNgB4D6PuNmD9iXz0cUBw/GXpGnppPXaOBaglCddYJk3VFuR8FHnmRC\nEN0bkJZIO/08sp3k8fwfq1EtXvBCIu5nHGu/hWtnyZl2UAxouTpdczYYyPLh\nifOFG3HTijZftmEEYAf7wwDsYefBLH/lLpPas23vflrluveQPDZXWmyeU1TG\nl3ZFZ/JzR6Dqjrd85E3B9bAzzAop/GjRrwBFg7kqo/EPEVw2GQ3uSB4oRC8v\n2qxeFA+AWZeKc5wN1hB9v5yftBWbdSDRnIIo5Gy4oLQAUFoWeWAp2BG0z5CI\ng9BvPEfQ84svYyTuMoojztsysMnmDVW2pJCAiu/djx3H6LkjiOvql8YmY/Kp\nhVPd\r\n=5TqK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD508hFkNl1HP5/vmHqzPFw/E4y0OWWzBo/+Eccz6NwAwIhAKYVEXTS5U1yggqAaCbrxGsTB2YE2s0pO6UYl8VLv8sc"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.9-next-1592320476-e5788115.0_1592320537596_0.6625173168405216"},"_hasShrinkwrap":false},"1.34.8":{"name":"@xdn/core","version":"1.34.8","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.8","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-UodL/ITfWe+W7yIpeZ+eAMAWDGj67LFeoBu/Fvd4vvgZejXyhO8L0sbZj9wEfXorfZVzBgVZHFV7TTz1r1UOVQ==","shasum":"11f7e5a4030564d0747ecf575e487a3080c66e0a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.8.tgz","fileCount":127,"unpackedSize":531939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6OT3CRA9TVsSAnZWagAAHtYP+wSpz9WPi/Bkk4kln6oa\n3kKe1RyJDahwLfHNHUh/6l3v89yKAXs/tCaubWBGtBEXy60vwSd9WJrX9LIK\npweeRPNdj+Y7dO61iXmODbwFCyspi4OeQkxTqK7umoFUhvzS0okjI7cOk1o3\nflikIFPih4XsWXgy3DsCEvijtvLYJHhXFnfVvd2iA1k9hETSdtVqkMH0fzc+\nb/LJ42W9efR/waUQ+BtSDGeidMoNwYEkSPtPJPO6fFDWkOw7QGEqyWdJ+PGp\nUvLLgLj9sw87mkHfpWPC5l0KmebpJ50zTI5rtoXWsdv0egD7uCEQohlCBNbI\nUn562ngiHjgAziLmNEeI8masfpW8PDBKzMfANsy2XBIqbRyM+BQcdYCJRxz1\nH/fPXHUDW1YQhaG2XA2e/qeQa2xXgU9CQNgo/jH93DzPOx6jmufgJyUi1wQ8\n6vsoQh+d2N01xFnrujVpWgB0sTmYa/Loioha3aXG3HTwkgF8ACskyXL/AN2U\n1eygmVnZH190hWEPoSZv3UvJRTE7mQvCmCl/BttPFjhtYEm7kClHFhBD+Ohj\n1z/7JtDB7BoaL4CiQb6P64CkSSdZwxfaVOPpf67Vtbmqxo4qVbswuVSoxU96\nnu+wbce3JqIvG26P+0H5h8ocEJbg4Q5TRSh1/WHRCwZlHrOMf0tm1MvCAsz4\nE99k\r\n=vSLB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTAoVyFSOf+xXD7zOYjBpBKozB59TQnNsfGuLsCPUCmQIgR/RaDcWzRqnrFPIkf7NbP5HdwSNGJKWChRa7i0E1J5c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.8_1592321270748_0.23453243078094754"},"_hasShrinkwrap":false},"1.34.9-next-1592323262-472d13c7.0":{"name":"@xdn/core","version":"1.34.9-next-1592323262-472d13c7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.9-next-1592323262-472d13c7.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-gxEcTX65Ma6A8bDQRcmqugBcn89qz01kF+KwgL/wtI7z74ITp1teXk4n2/mTlsirqZECcwS1WwcgoNjmhfRsKg==","shasum":"83f63cffe122e2355ffe7f42d8276c3ce659d105","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.9-next-1592323262-472d13c7.0.tgz","fileCount":127,"unpackedSize":531993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6O0BCRA9TVsSAnZWagAAYAoP/0CTkIuGcV3SAIbRDnmt\nDbCKaut31dBjtpyWV9Hrvo9Co5Oy88n2DHcSH6KHtIBnGFKujajLLqh8uzer\n2K1TZHSYvn5fXufILcN2PH5BB9jCuDvN4ZEsB92/tO4CfvrGLa+AU5x1W+x4\n/DWBuWUMB2+vCQh79Rhpae8sos9wfli0RabRj8QWQF+nDCSjmnvAx5PqFMwT\n40OXKDxnDOlyrT9BtRZiMB8TAaCz3jCTHKzTdrkQQ7Py0ejNWSaNXzEffw17\nPJUPrZ3VRkzmQtaPnv7vj7Kpn1ehAe5oRrWWYDAPIsLixiKV7bh1ZZ/y7YD3\nb2ORjOHL+ikwTDDdyxChCNrJeLSSVuGrI0pONRPWUgx/svaCZQREbKApsxVx\nTAO/5Y1j2qbayYB3oe1CczA2TEZvJJJ/PqTPYIj66ASfkd0EM2rVarW3LKMx\nryP4Clccs/Pf9UmXfpNXjilcASxAy//OLIT1p6hNbZ2LpPkrYAxLnR4WgLyx\nhnaabj4XQZh7wuPPZBMp22M8P8u3QhOTKhU/BWbD+eI+eYjdB4hPjv6Fucrh\nrJi7+Wy+UQhEdPnKA+ygD2lytTOVIamZBdqUN7Gc2cSlRmblbPg7VXzaaG13\nC/wFJv3Q22n0bGch4Y+9eY+cet3KKFtFAHr6xtf/GslJ/B36wiH3DVLXr+k9\n7Osf\r\n=xtov\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCp9tp817gNg73QuCUDtegrzfQc1sajuu9WGiilUOM8JwIgB+sagTGRNAU/8bwzfmgAm9IiGJMl9ln76hAB7luxpAM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.9-next-1592323262-472d13c7.0_1592323328661_0.7627732146251824"},"_hasShrinkwrap":false},"1.34.10-next-1592323271-b9c2ae6d.0":{"name":"@xdn/core","version":"1.34.10-next-1592323271-b9c2ae6d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.10-next-1592323271-b9c2ae6d.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-yxtdizI3yjFtBMdlgbbveriecUa0yS97aGyxNoIHCzh4JPId6dWS4C6TRRcxThqmQEvjvq4+zaatm9FU6vm19Q==","shasum":"ea8c786381bd1fc5625dd6f696d53a83b526e385","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.10-next-1592323271-b9c2ae6d.0.tgz","fileCount":127,"unpackedSize":531995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6O0HCRA9TVsSAnZWagAA00wP/2m+K9oWH7KwMy1THNgo\nuQS8LKuol03r/fWIUhwdvKsbBdiP1EZN1jc19oDCbyteqEj48+A2yjq9ViRs\ngVBkNvV4DgpB+5TGAQM870E7ELATauiYPLpdLzDFUiC9CSA/oJccinF3cW8F\nj1+pZT0sJytFx+l6oJCoKtH4E6AD5TonCiIarR5uoTFik7BjV0UJJKLaRkUo\nUPzNRP9ijj9jwP8gXd8BScRb1zzh8dh/bFjU8bjoRPCHAJkb50SmFRGnLKdl\naJgDfNLWVOD4Qt4XOCLGyorvnkgM+TtNes8/3RXYgdyJF7HwiU2gd0zykDjz\nehCdMMZCw5Wy/mMWKMZTDU+/whaxI5oL1iJvNi3FPERCajWoOciVIBBURXil\nUD6neu2M25Rm+mqU4a8UeXAHfYC17ZGhqLV/bU7V7tkunuqkd7uUTNla42V5\nxlOyozTWQZWWZJk4EBclw5PSF1bguaEx24RuK8nJo9NNLdE8riTVzizvpM9P\nmBRFLcvBQU7wkWLOxx8LW683opl6tgrAI1+lt9RNtV7+lEdotaHu9Wsrhy2F\n1Lwlj5BIQXJYXGtGIV7NAZxnv4OVBNNfNFGx5eFoMHcE1RKLn50m5CG5iWfJ\n217HalyJ3YO+DfMCD5t9jhFWTKFJS70sW0BguWxhsJK1u3s61meUORMyOEpn\n5l4q\r\n=oFB4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH51XBpzjiwqO8rEQzovn9WouKcwiUu213cZKQQVoMBmAiEAp9gSBQR48Jx7PqSvWdmtAE5Jy768VeIzaCScSUMxsHk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.10-next-1592323271-b9c2ae6d.0_1592323334722_0.170811770520227"},"_hasShrinkwrap":false},"1.34.9":{"name":"@xdn/core","version":"1.34.9","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.9","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+oZ9DFXFjo5t9870E2gff6SVuKWKCNiGlYeL6MaK0OrTcTW1bALJpJUr5d2bIE1n3+cgXipRavF3tHORb5ZNog==","shasum":"e6b7a04877b2cb15aff9f6d9036b67c6765ad5a0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.9.tgz","fileCount":127,"unpackedSize":531939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6O7TCRA9TVsSAnZWagAAxDEP/iLEtrPAgnUjD95UkR1B\nam+RzbpoUjgBHjPIAg90mDpSAlzNcUVXtrqDxtfNaw5EpjWuEhXHfUke39Pw\n0boo753OWMRfR0FjFb+PEdNzgMGwe1lnFynTDZ3JCw+t0DEl2FPcarfrh78a\nTDWC1U5RJ8eI1eDg5Aprhg2VNazEW8t0vGDZA1ZAw/m0dQ40khCvLoDcUMoo\n/mTVBzM7KDTovbws5Zv4ULTBRi8VzwOwc5B+jtU0Ky8BY7wU5Cq9FgwE0xQN\nj+o0sdiuS5U1JiNuPao6Tmjc4kAd06IxtAa/x10dq3kwV+15NuWNyiSTHM5B\nEzysKmBOqCvTUrseMc9jiSzBwC/BAJXevQu0TSiOODtJsb49Ix5C/EEJOOtn\nlTdSbZseN6jrogy3i2HqRNhN5l19iscFjznTBmCDdGxTc9BpOw1MkQjdti3c\nB4Tksd5SVeVSn/AK0U9elrA/HAS7ew23BDdD7c2YH/zioGeJiUt6NUmhanFf\nKR3fnhCZwMww7crxk8bT1KZPk8o1dcgqmMXTgHt5PQBHRV3qSIPyi3i1IH16\nW3+IAa5Z4tM918wdGy06ZQhA3fYwSHJqHYK3upA4i9Zgz7eDKbJYmAERC+5M\n+FdFhACHC00US8tz/GjYK+ifVQHeb7Zmci/2wztig6jswc31wCHL8iAEJ/wH\naa8V\r\n=kRK+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTcoSZ4QYmMm1HrIBd19xIYEsgwSIzQoXkqzLwbHdmhAIhALqYUj40xw2nRNxmrluqKtPpWgOBTpL4AJ18+9vekmQA"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.9_1592323795097_0.9283206188296615"},"_hasShrinkwrap":false},"1.34.10-next-1592323825-367c6528.0":{"name":"@xdn/core","version":"1.34.10-next-1592323825-367c6528.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.10-next-1592323825-367c6528.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Z2cC/VtguFltgAAwJVsy+lfKft6/UQus4ias2QC6QRRGg7K4KPcvmeyP95f8rRHTEJrsLwteKk47+cOtQhXRKQ==","shasum":"1e509584b418b1cb132e7499d6b43a0f906c2f62","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.10-next-1592323825-367c6528.0.tgz","fileCount":127,"unpackedSize":531995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6O8zCRA9TVsSAnZWagAA4XsQAKQcWsTDrWUGEf3QSWbP\nc6hbLJmPHfIzQ2e22XgV7AFT4GHRCMC/Wv7qg/o6i1l5szmRoZam+lzQ8sc3\n7nJvBim57wktz0oLDvjerJjHu788Cw8VlOcZrjh3QJsqxuzSdlMohl+EuXny\n7oXu9+Qv4el6PaEvfAodJTDVqKcLk3reXIx36tdWsYiLI3mykUJA8/G8Wn8z\nB9eaz4wGY5lVPOKJrtZcmKjnA8k/X4o2MmWSBH4SAEWumLxMW3RNsj3y7tfW\nf6lRIBRZyvE/isMxW8lVhRsiDuyzMVBtWL0tgikw6yNliM8h8+yanbgMtG0n\nSq+VFiHn35DKOGpN6Zu+tURGNJtAfTWzVjKX/1HG8PzGpaPvwg7dcqx3HmDN\nxNf1Oc3fer2/rlkYE+0EeUyUMPWXcTNmUIrH71zeDj5VYxkuuflgIiVHLSIQ\nggdNynE9D7TWu8XDzIo9DnH6rWannUiezKjH3FGIjMPFZdooeyICVr8+KZeC\nF7DVAFXEYQV0buFgQDnSsreE0zxdoII3B2zrkCCH75hK7TNnxgbbcHFOH4V+\nWziXCbwgo+4ZrtjDIuyGe5ToWoEzqzAnByF6a84VHibtgEF7R+pbuduewcn4\nZtQTnBKrN23xMwQMwQGOeGRBCeSb829C5uv1JxOgdAtnINUuGoXAWrFL8imr\nHfah\r\n=cm8w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYpMFRcn2iUhlMohtwBkKwJ4irvgOrq3Hj7cdi6ASJHgIgd6C2yLZfaCnlenZwLfH07J7/NNCjCci6cBtOY+G1ZIA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.10-next-1592323825-367c6528.0_1592323891225_0.4850816372360336"},"_hasShrinkwrap":false},"1.34.10-next-1592325881-76268dd8.0":{"name":"@xdn/core","version":"1.34.10-next-1592325881-76268dd8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.10-next-1592325881-76268dd8.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Rokvq5RqJjcDEeotzx37sOLhDx9Tt9DmJVj3GS20D/XBgA08nIVBAEN1gBCnD/eFDBPJNg/EBUmxJ1sXC/QF8Q==","shasum":"3ea9b3a0c7d783dd2405a0ae892ba882901c2012","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.10-next-1592325881-76268dd8.0.tgz","fileCount":127,"unpackedSize":531995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6PcuCRA9TVsSAnZWagAAN6oP/jenu2xheNHJEeUlvs07\n0VPdPGMCAoob/bSmuBdR7H6fI+9FD/8COPwXof7AEH4+pIdZZ3tFFbER7nOz\nRkD0OsfKPD0rEWepH+urCsKFqpN2Z5ozDTvhFSrOvLGYC5Kcnlmq4iR8cU3g\nEqSYCIVwAcWBxamaToQEzxkiZWbAxzr7VhtITVu4uZloKpltUfkkoWcfTHQG\npw51QsERui65QyNNlr1AtjZY8Qbbwl8HhtTdtrE+QZXz/iJZK5Xpd1ppvSC6\nydi129WcFTNyZYTZ1RfTmQNpHyT3gr48vhPGa8Oxhvvi85cwhTXg6DU1g+uf\nCQKpoRYH1xXlcka7WvsWRwUZr7gTqnCSRbAAf4smUyqpA2rs2DA1+TNXQdmW\nwwyFiNtXNHHZ/ZAAvtrZMUmy8zpI2Lva3Pic61jl2qLMp104jHOxnpsrtLSK\nHRJu/zBtnSWx7k/KrhfJySX5shNQXppcQQS7Jk5/kuLk2QJdSnP4twffvcmP\ndgYs1MwgRweDGRN1cZ55x64jnp/5KIL2VVyMzb5TP8I3BBqirXEykMjindUl\ncFHPagjGYEVDGgi7vIHw9lOraJPislULsfqx/sOmH4OsGKktCiEiu0et307x\n6DVjAF0bFSEprcHHtJrdYTs75tR9frZWH2k/C7U8FQhBFP38Zq96Sp5tG7fr\naTP0\r\n=7JET\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8cGDP5zMaEweKOaefNU8wcVHH4Y8hlCVCuvASRj468gIgUyi84l8nukDB7dxukq2CciCD4auMgklPzZfBrbnpcB4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.10-next-1592325881-76268dd8.0_1592325934419_0.35561315800262516"},"_hasShrinkwrap":false},"1.34.11-next-1592327309-198dc88c.0":{"name":"@xdn/core","version":"1.34.11-next-1592327309-198dc88c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.11-next-1592327309-198dc88c.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-PrAGgcZRNS13vzBs9D3UFX6vE0DhjgtigpeqiIcYy/1uTXLUvj2PrvBvcyDef0UN+y9Ws4svKw0DdTUDyesH/A==","shasum":"2c22bb37790d9c756a796e2e1658570f541ebde1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.11-next-1592327309-198dc88c.0.tgz","fileCount":127,"unpackedSize":531995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6PzMCRA9TVsSAnZWagAAymIP/1CL9j3Zm79MKNjf/T39\n+k84sCvExJaCqVJB6v+ecw04/WTrRhWJ/lRrWIZDdXo1Fk15VabfdS+QRb8b\nDCcgKtVjR09+PHdBztSmNdl5e8IoWK/ek1TJBwiT/YIJ7m8ZqAfVVcfkAM2O\n+CyTZ6iFfTffBm4EPhJme36rpSnx7snJqsbgBgL3GwMeNMYlEnaynoy7srXH\nA1IbwgpCVFU04yHGf+UWS/qL+1PtQdQr+DBVrF071u/vynIWvyC0OCuyKNuA\nrSQBbRuOidFmvauiEZeKJOuZ/oVb3a+CobQ29Uso+/AtSM9QH6lYANrxL064\n4GEFOAw8/4SsYsweQIqwfYh92xajLkGHeSZQLj68g7K5d1YGgDdTvyT0DLfc\nR4XkxCca84v7xgq016T6GW5yLle/wYpfr35wwhy79eBdCNnigcgVOeQykBtB\n4ZPwlIIJA8XKWRk70c/S9JwlYmtEcshHupthg2C84K7CefyTdWkCKba744Js\nPuao5snZW9hV5g+Mtr8lMQINVI9ZEne/+yq17SZ1sW9rdLgxp9Em0LzYOlcy\npMiqvCP5UjJQgf9UCm6Y9ICDb0wgljXU+6effbqvmxK4Jl7qXK7UbYCrDcEk\nLVTCy/jMjwLDBisfmNO0jm9WTQHUTzypnClsh/2gRAp2m3o61usR6gYZV8yk\nhfvo\r\n=RSqS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzixyak4j7/jrlpQ1APenb5SK3tj/l6us4VayEU8q/5QIgRHvgjxwPyVsF1He1KgJ5IS2PvP7jId4TPOypc3LylM4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.11-next-1592327309-198dc88c.0_1592327371998_0.9772697347354695"},"_hasShrinkwrap":false},"1.34.10":{"name":"@xdn/core","version":"1.34.10","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.10","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-8j+j3Tl839h2nDwUSlBZIRdco8TPiF60q/+YJkPYa/HLZWqMbElwSkzT7nz5KjzCZl1KbgIeoDE7sVEW5X56gg==","shasum":"61b8a047da378d4d897a28b9758bfd3f5fef7d75","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.10.tgz","fileCount":127,"unpackedSize":531941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6P79CRA9TVsSAnZWagAAlHoP/3kOdEfnTG+kBNW9h5RZ\nnPYZdQXgWQsO4P8BI2hr9aWqjxzXXoZm+qHs99rNBZ0aR79JiyZHC0b+VIm6\n3hKNPIuRvNUFKM1l7xLI64Kn8OIOgbRoye2pU5WBem5WTrvUmOptSBweFy+v\nOZQpbOwkcG5b12ROlJks/ot8d6R/N5Vp0NTWMJDHKMR7vHr5wFzgxTdOMYKC\nuP9TqosiroDpMtVhKEcXNLZRZ9v7ddzq5jAZue1pnFqpsNki7Y0uAMLSZJMX\nOgeRRL0jMBJD8kj255KpP92efmjnTxOVenyaUDJz6W8iedR1nB0RhBJnVEON\ncSx1nnflugjo0xiKIgKwq4IU0Pd+bRkuFlWv8TRw0QB8+BEt4PayTTq1PQHI\nXRoNMAbL/RoKBqWZGf+SYjsdtkMiV8sXksqo1Ae+4zCOfNZQdZWoJan412VI\n9/GJnZgYtFB6bw25MjgjGfqoXXs1en1EngNYZG8qzvDMRt1VyEghnQH5y7ML\ngAi4j16LdnhcPH7hLHjTS8HGE9Dy0fHrvahJLKXU+9+usMHcmWlqEDitqG07\nxJz6Em0eMNG/aGTnjoz0c9wiew85AerAQIKWCbYTWrEcI0Aq8mloGCuIRZbE\n3C8C5Cj8llRRJueNpjXJezKzeGaTyXsihxIYmjRrgotzEkT38UfHspW5CCK1\niOFo\r\n=MnJx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCi4sip+6wzIbltuV+XrCT4OBPAHIy1dqpnM/EgEj4UFQIgVAFJMCqSIt8tip7Bbp0VS6a6fhbm6+IOd3RUISn/+SA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.10_1592327932524_0.582554281432053"},"_hasShrinkwrap":false},"1.34.11-next-1592329819-f0f1d007.0":{"name":"@xdn/core","version":"1.34.11-next-1592329819-f0f1d007.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.11-next-1592329819-f0f1d007.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-POuoIJByu2kYNl7LN2POTvON/L1nSumk2YZkc0wbC6iPE6aCdc7uFPcr0MGcVXFUu1/mLSsxMrUyCFZwmK3f+w==","shasum":"2e2a42fa4afc335e8d275f403860525d703cb717","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.11-next-1592329819-f0f1d007.0.tgz","fileCount":127,"unpackedSize":531995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6QaZCRA9TVsSAnZWagAAtZsQAJMiEjBea9I0uVS8OSFY\nICvCBuxptrLqkhoiBDBhgh8c6dJlbhTSEYhJcNz+YXYWdfmlxnkY5SirRQUr\nX/pvX10z79ER+b8qdXU/UNBXmKxy7ckPIhQR5T4HcZKs5K7L9Sn5J2cXPqvt\nmsRtxkuGGa/DBXHjbHHL7ww+3CDiM7iizFBidiw94YwDWr341bkLR4rXvL9g\nfCjgTm/5biaLNGIBRUownI5nI7fdsqo+eZqjwvw+z9sxXYIlT+zWOVaI8Ige\nmgV02Vyz4BxsspRTg7dktQAz0114ad/FAOnenXUl79cn9KjWGJnnJfZ13vZI\naSna/cPBt9E8ZYFb+eR0QG24hm+mqdNarkJBwU6fEOFCATbSrUmZQXHLDCUw\nsR6s8biQsF0BCwD/xHjGq+klLgvWop9Jf3OJmpVYKameQvTUDUbvn3BPPzS5\ntH2nMRAyG+pOeyxVSksypG3epYNYJbrtaVjUdv79GvDSsZVGjkwt4jGuL1l3\nDzSGnkOcY24GnToAimECyEQoMwWVWjTZ0Ehq8mNqrzkLdHPFKTWMmmCcYIXp\nE05DZ9w+7n1e+ZqBD7Fj0KJKbvX0a5J01wSgCvpBm8qyqvMy5vFmcwGbfwtw\nlc0J9nMWZnOPvIom8x9N5a1bV9LThSLTzprRDX4g3eD/PF4ru40RUvg9YV2Z\nOdfD\r\n=702o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFW/8yTseFE7HbTt0olqrUXpD0A/rfH2Shk4upsVw5K7AiEApn3/N82+Tm6zonMxLHjwlEOpFh57BWY3qhVNDruaRE8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.11-next-1592329819-f0f1d007.0_1592329880400_0.14954699979872643"},"_hasShrinkwrap":false},"1.34.11-next-1592386147-bae79f47.0":{"name":"@xdn/core","version":"1.34.11-next-1592386147-bae79f47.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.11-next-1592386147-bae79f47.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qTxr+J5ClQpM8XEWr7aMZMW7cQZDSHHOb4bGgOl8NjNl2t3AU0BlB7WtbtKAD9v5v9pKyEpVVqdILW9ZSmphjQ==","shasum":"e0a396c2f0c76e23889286712c5c51f7d1e8aa0e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.11-next-1592386147-bae79f47.0.tgz","fileCount":127,"unpackedSize":531995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6eKfCRA9TVsSAnZWagAAjJoP/2OwdcyEBrR8XQ6T3ZoH\nkNS3k0/7FKtumcsDBjkK/rHoXr8ob0XUnlI4dHX48rIm1F4JekrPEfKuYu8e\nYbCzgjq+CNPUiYmiVldQLUeb3CRHfOrFznJoAa9jM4y67Dh4byGCWacax0/h\nO2Q/a+K1Ut9Jd5SxZknNbk01pk9hOK4PgwmZFx2UQClKNpWdBnmNcS4P4exu\nGEMLtAicMFhbubw7C3j7DOUn9nG0DrzpuXD1do30vV8wScPkcxuWFrSPkl6g\n07a4mrl2xfmXsvUbyur8VIGnxZUHnF0TOal99S5NHYmY8+7KVGCBj/qoMg2Z\nvcRSg8EHkCP1+CBREqGBqNqUMDAQakx99h6VnTpAkTCHPkHbN7h9CgpqDOGH\njGvW17XS53sAgVIHNphUgmz4TL4leH0Aq31i+y7fKo0ckp5LOvX9XiT20C5N\nMO0Pyh4USBDvN3C0kRcQ/Pkc4MhGwRt9a8taXlYumQv1jk6mZtOcf15Ytt6i\nzvlraCJsCE5cDvZcWAjRR/Zfflx2Rc99yt/2bjDHfqp0fbmiHdRclUeM2EY5\nX5x/HIPVLmWhj5wlRJRvqpFKTSL7xuV3PX+4TylC16anTZOW8HqzeGvGBvjP\nkygTsHiHmXyR0C3cQlkC0RTm3BxR/RjCvB7hq6Uh/ZN0jacOPlSa9SZ7ybBM\nL/TH\r\n=J9EE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqWHXCkKFmuCfuDkhuG6fsQodnN491ncYxlc0NKukv7AiEAvN+wLbROI9Rav9N+ubiBjCt3ZK0gHQkO4Utu3cx8/Hs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.11-next-1592386147-bae79f47.0_1592386206690_0.40081627295858513"},"_hasShrinkwrap":false},"1.34.11-next-1592426534-c82358d9.0":{"name":"@xdn/core","version":"1.34.11-next-1592426534-c82358d9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.11-next-1592426534-c82358d9.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-NPS3Cm5lxEVHgDxEEs23wjEqdmZtHaYuLrcewZ0K0mNXA0IGFU/1hUmDwc4J+h25bsp0tqeLNrEFY8jTBb94QA==","shasum":"a574f22ab6b88a3bfca5716ed29a4392c9b039db","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.11-next-1592426534-c82358d9.0.tgz","fileCount":127,"unpackedSize":531995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6oBfCRA9TVsSAnZWagAAlTMP/RcDhmAJJCd1ug40JCab\nepZ4x5xjqSxdLxASvSdTZ1Vggd/8L3nr9XYlvpsPlJn9KJXRIUyk5CaScCLC\nuyCJbbjDcDWS8qUX7OEZXJw79BbI4/LizOmlSVGu1D57bhbSJwmFlpe6KBAX\nx2LV6uLKwkf16SW8YNRpP3PR9SAdefuwlYR7i/UJMpSytQgeJw2ht1kF8gHO\nnucW+94CkU8qxbcmUE+5mKekZwGBehwJ/vxgftdJ8LrkpWUcq6SbfeirWK3P\nfOOfIb7E1FQsjDUTO+ZYpL7mXxGLPAnsnaTo5b1q0TOL4qCPV2RMcdNVJqP4\nRzDn3ZlTj4a6JSKqGf+a2KzUjAvLrCkx62R8t0L+XjCQ4L2K9DKGcYc02bLm\nDaNJFu/eVL6jt7smirm/C9biCez8axsHlvwOQlGPKBHwH0pjUYMKFwoUUxan\nlZFKlcu5eWRbeN6ooyOnf1VK6saaNJffZ6MHm5Aa4DwqMSgp00RJz/BdCvvk\ndw0O/VAN3pknJ5F+QoNPjJUa5kSWVSG+0elBSlEjLCVEAfILCo5D3/z5Je2D\n+8HcQeTjjevOvHskjAWcvZc3Upyqv0LPHLD10fRHMC0fVh898uS1GcyUo3Yv\nhB5y6JeiZu1qy94Q5T2LhTuvrFDZFC5IHJzonwUJjsatwg3trldhBMHJIBe7\nE7JJ\r\n=Y5rA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICKjJrlb5cwKkVNeXqipPSOfwHl4dsoDYk3T9OP88yweAiA7viZLWEARrep3XRGNPBd7D2x5pgLfY8SAJQCy/1pQzQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.11-next-1592426534-c82358d9.0_1592426591263_0.26426827210102655"},"_hasShrinkwrap":false},"1.34.12-next-1592426609-500e177f.0":{"name":"@xdn/core","version":"1.34.12-next-1592426609-500e177f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.12-next-1592426609-500e177f.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-eSNFLLVdlHr3+3IIgZijqNlrAXinSHXsepZAPfEEtU7tnjMS6H94qhGLsUfLFnrXQA9BHyAjFHMmTvOE8ELTlA==","shasum":"1e572eb87485c54a1f14c43299895bf63a693e9b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.12-next-1592426609-500e177f.0.tgz","fileCount":127,"unpackedSize":531995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6oCwCRA9TVsSAnZWagAA2vAP+QBXVycmmJ4uydPP2iWK\n2XhRhRtgypUHFs1iqIa+MHaxag+m+LV3NXchsXTg1ZAu6Bk9w2WfOENZ/q+0\nWhvZCgKT42Gju+xIdiUktiyh7BV1l/sRlLk1PegIfs3aJdXksGS0b8V2flhq\nn0B7pZpy2ef/sLIDc93y6OOBeY3vVJFRgimd1ojByH0ESpzx+KSUB/WIGj+G\nWjPtqyp3uebMr6FT136M/V5VjOgT8DgeNk52BRv4/eZ7NtxS+4axwFH3tp44\nEMqoIKotIYgRt8PnG9NdFmuVb2N+e7AqhIiYMHBpqpzC2fhmeEGuRfsBDQlk\nkFdmMvYN3b3WFs2DznMRMY/R+OoG3vYh5GI//mLKKYXlZVbKEN7C5y2EP2/M\njv0TI8lQn8Y92r1i7FYNP/pMfO+XOqe76YECTezeoGP5INJ08FGMc3psafkS\nuNBc+O0nqk1tZDajdcfR9N2FeNTYMLP4s64QmCxdfRRD5qS6heWqcteH9553\nLPtc7CiaONzUh3M//d0J7Jtqt4tOT696/XTzDSznnXHRVkX6RP5kUGo2T7YD\nbIrc6b/xvjrCT7sXguAhVX2n16yXHbKW1iyxdw9KmENqDxbIFA1Enxi960fk\nGOqSFqcijKG363l4wNAGeuLDi75piv9rKsd/aPUiWjPk1W3HWwi1zkg5lYL5\n0yMp\r\n=tow+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCecWs7sFqbl9kocfci2H6VAIH7Ju/vYfwluXh4NFP1PgIgL5YljKuOzMrvbYd/nvRI2gL0//0ELHuSSKsViTvHOHw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.12-next-1592426609-500e177f.0_1592426672246_0.9796408241991275"},"_hasShrinkwrap":false},"1.34.11":{"name":"@xdn/core","version":"1.34.11","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.11","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-TCKneNoGRCbhxe8Qc7X9QRwL4Z0FBVMHWcGkU8qGypJDw31dnZ9iDn3a4iqmWDDpVdccdrQEBr8NNmRAdqX0BA==","shasum":"9af86e6ddfe621622d68aacd3a1d779228067ae0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.11.tgz","fileCount":127,"unpackedSize":531941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6oHRCRA9TVsSAnZWagAAxmIQAIl0NhvCmUwULiUh+oTR\nc6ZfQijLqDgklnpzM8z/bTeKqPMbUjKH6RUza75EpJKtBRfzTt19Dka7D6vv\nA7Ye9pNY471p3xrE+iThrUnhNeMYXTnaOCxxHJI3vFJpkj2YOQtZGzERrHBl\nE/CXsJpBgzb24kH7PvBSiKJMl+aYdU3wZnEHS8Z9Rv4sGJAe865usI97LMd7\nA+lvpCfkt0Ls5T357Wmjm0sl+bNV+YUH2jIHk6a9cs10aJMd9B53wazjQtop\nA8+fW4BkX+c1acUTcvyWhOARbCoh269NkQEMT41XP3KCMk7c82NZ2IfKQ/Au\non+qA9fbYTykyml5pcloNQB0EPgqdod0540npbPImh3s1ZMO53gblcE0170s\nN147E8DvJhfJOQILM1OTH1IG92t8E06hOWfO1xhKt7QGRqAo9360OSSOWt8i\nwt+yT/yL1C+oC86SINEZXrWGbEXPOicsiTWeN95wwrq9bcjcV28Di8zTKjZi\nCH9PS2TVHtMnxcMGU2sE3AF2mNQK9wqM6UqL+3EdLVjIVQkn38E1/2MO2RBT\nk5wNIF2pjhb0INLIGl29PIHfsIBzwA64SeEOrNQTiskr+Oz06UFc7S9UXSlZ\nLDsBE6sCW3UNK71PBHIpQNJI31zy+cSLvzRY0F0c8atsGtUwuTrDHnuN7yc8\nBLrg\r\n=in/l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTHtN8XpXKmYr4XEFmDaJSY0ezacUmLiGZVIOPoX9rxQIgRi4nkd8/Rp8EfoGbEUbG+SgNK+THGhjTUyOXJPEhWik="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.11_1592426960666_0.5762785676226359"},"_hasShrinkwrap":false},"1.34.12-next-1592483956-4c1616e6.0":{"name":"@xdn/core","version":"1.34.12-next-1592483956-4c1616e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.34.12-next-1592483956-4c1616e6.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-UhjYv4DUL9d/ZAhcd/Lk+yHXcj66KAjgi8acn9+fZE3Ckbm2tENDzzVYHx0chwz+JGpdyT5Om4xDpxLFtxCbrg==","shasum":"1c52799f7cf1d3468faf92eeb01d415bf1b064d9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.34.12-next-1592483956-4c1616e6.0.tgz","fileCount":127,"unpackedSize":531995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe62C5CRA9TVsSAnZWagAABsEP/RXweOx5Bp4Z4mivYw5/\n0Qsm93fUrnXnJwXnfUpyeROLi3GA5UeX+hhq0cjTNJJ8P478MtpYMBempvRc\nbN6cUjXLIQnr1ZjyDlLYKFvKfCAzHBsmD0HubgeWYb6jWCVLfuDxG2mKy0Pi\nsbzB6k561Ws90hNuQlC2+KmYYnzIikEBWWeKjNeCKZkGmQbGykwESVDNJNmP\nODQEH8ITbK6nkcH3JUHqh2x0mSikS0qGRpuJou2PjCyjSV8alEUkpMnl6hKD\nIW94nEagPLe/sdi0QnAFlF7G1b3k+5BDFl++VRpQGwuQLrTqqALs2ww30iQy\nIzPXQPZWXX1unU6ZPzySC6+UgK6bXvvTeDsVIE73empXrXXio9YEigMlvEjZ\ntPiAU9ywLoYXlovpfWiV9O+xKLJ/VYPViiqcElKmpgrN2e7OojXCqeKSd2+q\nxkZ0I/t8+TUutAu7fMMG2v60Qf7s5fwBRMqlFu4n6OQ4BvOaO+zBhmgeh+bK\nSLuVUmvpe+fk/L7w04dJkESP2Solronym7lcsxtZyJ1uPoRZOKn1OZWBI+1M\nSfsCWAbOFlp9reJ/mAgxSZN9K6hGwj1BGcCHt8ndAcpnR/fZDxl2uZ1/SEv2\nzG/xtL/mAAnkIPRja0v0AffHyK89Ii+frwitmrykukApmHVY2Jkt+J/A/YCV\nhyxz\r\n=D/24\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZKq08cJFRWpr3MEGEsgSsuHSeVkYS5nzuTjdr1TiG9AiEAk0MCx6OIGMk+DgW/2wd/U08gPOyv9JAka3Er7rDoTc8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.34.12-next-1592483956-4c1616e6.0_1592484024867_0.4197697375106475"},"_hasShrinkwrap":false},"1.35.1-next-1592483976-87888543.0":{"name":"@xdn/core","version":"1.35.1-next-1592483976-87888543.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.1-next-1592483976-87888543.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-1E5pKJZ8gPXvfQ4OQK06n6lbw2EAljlB9h/CRt0CwlkMdwhxN/uGqZbMTf734j/9C07tE0IpJo7ELOQ1nashMg==","shasum":"741bfeec138f3571e7bb14bd88063979185c8647","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.1-next-1592483976-87888543.0.tgz","fileCount":127,"unpackedSize":531993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe62DOCRA9TVsSAnZWagAAbywQAIoomWH0+qNjgbneW1C1\ntcArqcChtzhkyFDVDMknb8BEt6hZx0enmAAKqrzed+KlKj3uDpRPCLmuVFKe\nGQsE3pnQ1Rq7hFwK1M8T7qKA6g1goUbDpGB4ojPJHhURZlOf6KUbKKe0Amy+\niGXKW0tCo4Bc69lYPZ0h1V4cqNUEVGy3sN0GQXXvLQXSxXv/Bdff9xvEfiHx\nR0ylpFm1r9xOKmLIe4JixbD5CHS28HicQKU/fJyiq+0omiwy4uxk+bXmj9IN\nkJOZdlfUjdjqKZCO7pRAysGTUZNQicCCjMxV/bIxweEr+s6wpvzlbtMCo9Of\nc/7yHkA7AmFtjnqW5rQpyPimIlwdodBr3uK0vKU0KGYaDkBoOQ4CpUg+Nhtl\nd+JHqNcUG6p9pcK5ziPHE4zbYXZHwD0rTRXNxJ3pQkSvFbN3qLVfeNSjtNAJ\n9RNXpk0GCx0JecFpfdBh5U7evYJcjhemLyYKlDX3lv9Kyi5WGqFyRZYyeoL/\n37516kc2g1znj89ZtflP88ULzqcbRvUfv4+XYo0iWSM3xXGSDxK6Qd69s8/B\ndKnfQy+Dlaha0pxD/FqEvTWFLgwdXgOLNayAY2EKzqKQ7dj0icfp7pM3VEqN\n8LOmZ1Ur7+ufIS7ns5d0HWnT21uZJxCaudVLaNDglumZnifGrBv1iNN51X/v\nFaFT\r\n=zHHE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHBQRB7G2LNY1ww01b9HH3zW8hqfxzWSyh5bgFZoS+NcAiAKMk8cuthSePVVN8uAq8CyJidOygVey63fOYXfDpDjNA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.1-next-1592483976-87888543.0_1592484046009_0.9493701975397502"},"_hasShrinkwrap":false},"1.35.0":{"name":"@xdn/core","version":"1.35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-xOHSBJcM14JkMTIsG/ZF5+ZidyOtdRxdPeTwdZQ+jhe4rjfhcBYK0CcD5vdv2NPRe6g8QIzAwW8R7gMJHBil0Q==","shasum":"c20d2fb9d3e58515d18000cbd502490feef00cfd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.0.tgz","fileCount":127,"unpackedSize":531939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe62LYCRA9TVsSAnZWagAAV9IQAIEyR88qdY/L6msAd9Mc\nbUzkhD3WTGIsquxGYbo4b85OZlKvfkC+zkWtTBI+9YToxaAxmmO12mDo5Ufa\nhg+xgduZbMKU0T4259RYxanmEHtRzkMsJyS68eIpATd0m86CbYCX3tV3fwOX\nS1jhb1imUgeYkgfmvOiH+8j5pxhEOXk+8PmChJzPla8Apu6YZPRWUgu/b+ws\nhKDQd1FW11ro6/HPfirYYfqq1gX8j19mGpsdNm4mcmM/gwM9ohyFeFZKl8QD\nLTUrFKDgpnzZE2YuCeNSD737hAikKTVDf9vIQcXd7uRswpbjA+Wzu93J4m7u\n4G36Iq18Gfqfsp8p4rrcLeeWrTudKnMhyrWDU2taJtnaiqNzx4Cqt9Qnm0I3\n999BWGm5DyvpzUr8J+A15QhN2F1ulCCoM6x/9J87fTA8ervulmwuFeex2NQG\nlom7pSbD9OiRe8BcAdSE9QCZyjxpyxICN9gYsLEFC86pMtGxLAzf327ZOCS+\nxn+jSVPxjxEwx7Mridme646uFJYM2CUiUCCWufGhI0RLQH2Be4MXeRjXqV2W\nRqJGRWkw9LXvvBPCHAjko+3v7+HjaajfmYACRKeaCRJbd+xCdoEYYE9hGv3y\n3f4Yq4gt0Q+5T60b/+ffGtd4NdbNSYm0ioGiLqZZR/BwoD1V3hBLV5ZbMxNF\n1tTw\r\n=K7Ht\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF8pfUCrSondNH42RFij+d5ZdZpXWWpZCQR2/cI7WIQYAiADiTo8EbcvgrN6duT2kj/Rp5v3NCudi4iqhZ4QpJMEoA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.0_1592484568193_0.6289666457569236"},"_hasShrinkwrap":false},"1.35.1-next-1592485157-c11d4ec9.0":{"name":"@xdn/core","version":"1.35.1-next-1592485157-c11d4ec9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.1-next-1592485157-c11d4ec9.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-0LBX2aBqIvsMsow6qVvfIGdcRlRQvkNVxPfYkrmz/bCqbZnigIy6rhy5kxuYgMzUWY11xsQKvvo/beyX+re+rQ==","shasum":"fcc1cdc31159ad00ea2530bfc465224f850e3b20","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.1-next-1592485157-c11d4ec9.0.tgz","fileCount":129,"unpackedSize":533496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe62VcCRA9TVsSAnZWagAA7ZYP/iv7vy1dTtZcM0Axu0BP\nb6dFwlfxPMxxCc/bjcTT+T2BOagXdctf52XZ1L/q3tH9ohK5f3pncOXOrASc\nK84plQRktzfxRcA4yO5rQGz50p0GZcZukQYMj66E58R38cTn7bBEgmNerFQ+\nh4EuCViTeyYEqhVJr1Gfnk9LVPZbmnZvLhLsUJHn8tk3k/2cNs2J0WIY633j\n9eFWhIOb8tiUZDZ+/JcHdmVstv7Zse95f8C8DnfXfouU2EB7cCQPLco/Xt8F\njyVSsEjFropMdKQXch4myX5E/LwjYSKd+ihS1oUfrApzrHGkoXglhVU6UI8O\ntw6ywhCmROpPLPEdgHbJN04/buDmFBOAlLJOTi90kGYaLp6s3cyF52mNpYPJ\nmBX5gHGgYErNSO1OJIqOyTzKsr3WuwVD7Ilmqv+xKzQKnP8EiDo1vnZZ6N4G\nwerQWSQ5b2/siKtqOtX2Z5ZoRce5LoInyK0lNOi5h2KQB+C//i8GI7MGnaeh\nQNxr7lWBHMl0CsxhnMlfr9DEG98xdd1C41IqCAGwh+PvYyPmuQTuDhI//GRV\ns9BjYNu8KzDsWObFCaCylAc2NBTH5yCj3a2ZWKQKz2pmp3va2JK2H5L9Y38M\nq1cSUi3xOOviyj9rLi0qFX+Rl353GTaJgs88XkYJ2GozTr2j6CUZ4gBC0lPk\n5l3i\r\n=Y4d+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAI3EkrrnLdpZhDyV7iqK052nlAHa1Rj84If6pQEGjf9AiBXLCzL17VJPVGj1ADwq0JB93CeNS1KNy4LyJCzegkFPg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.1-next-1592485157-c11d4ec9.0_1592485212270_0.49459584711756954"},"_hasShrinkwrap":false},"1.35.2-next-1592487094-eda51d10.0":{"name":"@xdn/core","version":"1.35.2-next-1592487094-eda51d10.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.2-next-1592487094-eda51d10.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-SDXfPExASdlETqKNhWgJHuPz/ZH24YeElEiVDonw7c8DD++Mc79edV9sYs6eIA7WgxC9BcC0X5gDqm3NXfRU3Q==","shasum":"c7b602f216c03acc65a0fa33fb917ce534661c5d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.2-next-1592487094-eda51d10.0.tgz","fileCount":129,"unpackedSize":533496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe62zvCRA9TVsSAnZWagAAVbgQAJS5bTshqge/ohrkGrGu\n6qMalMYgqwS6/rEwKDTMnZ7DsP/Ipnwv5g0H/MCqpp2506js3T3GCwrNaZur\nvgP1osyQ7yPdzN6ets64Ph4JAb2jEkThz1U4N5o0kxzkSDsPx6IuxqBNA9Z4\nQQdQUMpwWuBr+cjWqV/vyXUukHr6cOB+atGAqwUjpUwhHY5kOWi9oPvsX2+m\nkEdO7VIkjGRKQg+3OXxuVZmfKSDBAzs+H3TSUDlO8MXx3Ls6Wi1JyeqRYfXt\nlApcwUH209IZilQ0OtEyl/r3ybPvi6qJ4hkZJepJ4FJCe6DQTAONO8DaZLBp\nWtTi7dzdP7R9mEHNBCAY98hAvZLOs6JBnzsoxzeL1tTQZFTQnHGg5vJw9Xqu\nbA3iGbAEOO6XZcR3Ixn7OAZ8stQmfX5hD7MxGlknqHU5M7cH7UhQ6Jt5yjPF\ndYS7qQgR80Ap+BSvkRl4+mtQOGwy/BnXMd+vrKDdMBFPAxygOzerNyYEMFYt\ncz3pOcZbh1gdIybg1dh6j30IMcvrCtOJQzOEYgBZlLk4lI1tMisE8TGn0Ou3\nTJ5bv1L3BtF2aZIfdZH0SUjqyeuCAeeefnhI2HhGRMxy2C2etCn3rM31mHvE\n+15wldgbRZktadVjKX2jzl/D1tmgqtZbFOapeMUI9Pa806fNnwayvLXV/QhO\nRBt6\r\n=C98O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC//zkKLcjHSF4HlB1aySrH3egA6Js7+Wmu4wjMrXmnBwIgYpOcN7MIxogzCBaIa71+kb6G6UhifTdByCmJCh+X4ho="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.2-next-1592487094-eda51d10.0_1592487151119_0.6102858287808073"},"_hasShrinkwrap":false},"1.35.1":{"name":"@xdn/core","version":"1.35.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.1","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-zK/4MCKtagvEv952/GEOMOCiWZn56VilUEZ7++9xPiVEZ6Rr6RdIhE+CA9Y/bwYYaJpMtiP84DXWvFNGWzrOpw==","shasum":"2e167d823d6be7111c94531f2b3858d62784245f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.1.tgz","fileCount":129,"unpackedSize":533442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe620HCRA9TVsSAnZWagAADKgP/0ix9y5TF3qjfB+xwT14\nDRTa2KuvdgkZTmzrzho0F/fw6AJgr6nBzRbDAqXPjAmmiEzakzhdbaJKbvWA\nZvy0pzCHZZhScaibtzEf/7wRIXG1Qj7eq6k2D9FRNiEv4UcHbA5KKWgeOS7v\nHF2Cl+U8U0q0x4+zIM/yke8hfjkGWc+Rn+oxyY3s1spbTFe5/DXGhEGSStdg\n+0XP6TC8IjyvlzhXlQorA5v4jVQS2QoFPJInedcRgyU0SPc9CHmH05m0j0W/\nXEsLb3aUoJ7TpzWWkYxo5GbYl0eJPBoV4xJeNN29EvMNDUD2fygVv7Pljj/j\nMlnApnj3f9y0PuXpnLNhJmjvoQnXjn8Kv5gV5M/xkTCdM+QP4exQt/JM5M7P\nLCosTJwHuud23oPhZgo10BbfCsiE9m5jOG0n3DwdKPebw9XpWd2gNMH2MApv\n8lNqsf8u32jqt276W5LxWZdATqdzreAbRlVoDEviaZlMvsd7e/DBa2ajQLpl\nLVFWiXI8DtEq2tuj3bMj4kvV9rFFcm4vR8A3UZn5/lNp8kFkXEl1T4tzNFPw\nm0ycgmFI+6YVGtxr5j8lfYU+vO9lsA0+35B8+flUigEzBnDI2hQqWMdVB9P5\naHt0kVlQ4lLiSgfDxxAnLvD8S1zvEsGnhbwDAQYd34dwQ3QDFE7OQuTbVDav\niY8A\r\n=W2El\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAd5PbyzLsBjuAOewQynZBeipFaZwsnSDmDTQqYfzh0+AiBoBGdD/q1VBONni4BJHOsKPSOHNrHIWoM7vEEnhyhoEw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.1_1592487174887_0.13635489903693254"},"_hasShrinkwrap":false},"1.35.2-next-1592577984-bf61b231.0":{"name":"@xdn/core","version":"1.35.2-next-1592577984-bf61b231.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.2-next-1592577984-bf61b231.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tYZHMtYzjGrG0BaCcKNd3LldKHHo+aBqjenDCb2Dl19t+0+U/ozf4Z3gWpgUaS+VeVI7B1MBaosm9CLrQ2v1nQ==","shasum":"f122b37b9c5a3d342ce20dd0e64bf61dbec730df","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.2-next-1592577984-bf61b231.0.tgz","fileCount":129,"unpackedSize":533496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7M/5CRA9TVsSAnZWagAAO0gP/0ORpi1iq+vkJLa5NKkF\nW5Hxnpd6A44SAMsYo766mFS+ijGyXi8JQ5LdYpgl8m8EhZP9FSn2RP79OZb1\nQtpRnEWs+Qv4hq3S2y7XUSvUID8iDa8xPLg/elxUPOkI+AT0HTdKNfSG+UW+\ntB2MH1LSQqo4z5XIcES/qy7gS4zneRJcmv8oGT25RnitcK2x4MurXmtnN9/A\nxz90l9af5HnRS0YeXjvvqdS9zXjFX+7MhlAPE57H4TsxfnM/FzH7ElA+xOG7\nRDGNitZC5+Av20XIdU+MJ+Da55J4zLPEjcZzR/TDochxTguJ+CkKwqp56EYQ\ndEb7ejQrtTJkFuyHMc1cg0jGue5eydt7FCBMjFnOJqb+HYd7gW5WcwSHirkI\nWRvTdGyyfRoxiehUumUsW0p395Gv7o68RqrkRh+M37d6c2HE1LtM0ilB9jOW\n9K8XzqHT7XOlh3oLMFuGvrRMowlrETledAHf5UBjcgnF6bPoKJq+I8Uxwchz\nZaVql4boutScYqe0I7LYUDtgK58hT/w1hXXwVmCu0SV5yo2fHg29iv/+LqIH\n3uF/j0VOnW03sNl9ILFnqaSbDtiq5jbpIqbEj9t35BYWiSpN5YPbqGO+7tSs\nhkf2YEVBmLgi4NVcnfOwZULfOBTQypuXQgCKwRqa0GjwGkZxz1CQGdEXe3SE\nzHWT\r\n=o0k6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmvdBg9uffcW00e6myrZVaAQ4gra8gQiMHLc8r0E1KNAIhANKrrBkzFJ0OnNN8Erhk+iYLfu0YIPDpjnlzB9dI82Rt"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.2-next-1592577984-bf61b231.0_1592578040830_0.7578886985093196"},"_hasShrinkwrap":false},"1.35.2-next-1592579281-878b8fe2.0":{"name":"@xdn/core","version":"1.35.2-next-1592579281-878b8fe2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.2-next-1592579281-878b8fe2.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-JnxpKvyHtdUMwUBZ1dCOhTZgSso+jFJTiNyJ7LbpFE5uHz15RGTM46hzQB2fXjYtVkV72OpnyF+FN2589H9Uaw==","shasum":"a3b88b563ca25ddbb4ffbac37cf12e2a3441a1ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.2-next-1592579281-878b8fe2.0.tgz","fileCount":129,"unpackedSize":533496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7NUNCRA9TVsSAnZWagAAjGoQAI8qZAo9ZTb7EPk9tfSJ\nTkr8W4Rr3T6Gm1nAyGPBupX9+/nJAA3irAKd+CWHCa37ejbtYg2rlHhHYNFq\nllsEYlM6egNmZOaNfbqSBa5NwtcWKCQOwar8JTERE/uP5jSeQah61uKGqtol\nJB3bHijDAalwK8ysWlvSu2SFgT65IOgg6406EavBkMtNCnNL82O1IHUCnOo0\nxnM8PuaI7TR+VF6ExdJHJ+uo8nQ8fGjnXUA3w5M0Mwd0q9dbfpa2+nRV65rY\nr6eldSPuYFzp27m3AYbmZ1bkukdc0IN4BCmO3qirYun3pc4p+ax7p08myCvd\nT31u+Othx3eO4hZtgT3aGT1nugYxaJXltlGZMbTR5XlRFPYDkT72/d37uC1S\nbsJ67mLgeaa4CB2MjroXHzOmg1QaiTNpBjtIT2+U9a7AlO4A1UBtG13OlWa/\nBva/RqaGkCmvYhRgyyJGHVloA4wylc8O4ZtMBP4h17USfDWPAZRsoJEXkam/\nq8pPeczuqsUzj2g8ABDsGqy6N/z2+wF7E7CfVdI52udijlO3uwUBB9LenAA+\nmFyq8GO+p4oln2ahDUVWlLbsaQ98kjqR7KacD3Ulh0i/olm6utEUBmos4kmJ\njQQ84rvec8HXzOr1otlty2iIKdTBNY29T/GeYEJqkmJy5AE3znuhhDnQKggY\nDoSq\r\n=q4DU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEFO8c2Sf/pOHRKSZ5Q1dcuoJtur+Nc2YaBunTMGRJ2rAiBxqDW8ViOJwi1d+Rc5otu7mudQ4MLZ4YwJm517cml8kw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.2-next-1592579281-878b8fe2.0_1592579340655_0.766638748768208"},"_hasShrinkwrap":false},"1.35.2-next-1592847960-b1f4455b.0":{"name":"@xdn/core","version":"1.35.2-next-1592847960-b1f4455b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.2-next-1592847960-b1f4455b.0","_nodeVersion":"12.18.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-1Ry96MHIURJOqrSYYDNc8sWJ/PyQ4nId6o4UzIxUpJJ6WOjcywGhv5I1qtVB+8ZbYDdr5tC6Y8F7/s7ur1dadw==","shasum":"e5b4923d6128ebe60d2d4a7e10dd3291e635b4a5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.2-next-1592847960-b1f4455b.0.tgz","fileCount":129,"unpackedSize":533496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe8O6WCRA9TVsSAnZWagAARwoP/jClocmvTq7QGwZn3BjZ\n4jE01hL93PxOAtNSAB4EfLYpTq1zxTqoHgagh8yzu9r1Y3z4EyoBvqbTyuiM\nI5ZTROqDyBuAAyCdRRgUjvEGO8RmnTMsjjy4IdmGn3eB4C9bfo4NpCP4G3qY\nVNuZ658iSY/Cc/LJlGz51FmCh1ChkQEN6ac6ccLqTkOdoIu1KruX05p3q6Gj\nStO29n4S1IXkdnlvUmznv8JnhcFnwhBTLF81iQ0h2XmWRBfAaET4kVVdMLeY\nPtc3Hg+W3+HirzFkpoGpWe4AZdQIYwp6TZ4IMK35dCwsmZXAodqXkKKbds23\nE+oX21g5I4UWrhzKqfhe+ke2mbBCTpE36Ae2Sx+JocdOpRQ9erRSa0aWfkQY\nRladRA4D+/GEQPDShzAwYGm7IzGyszYElijyLI5hExAn71Grf6uU97ghSUji\n6HQkl3LktiJ+eYtzOwZ6dbjqFP/E6xiV6VmwxphDmduyGfJkEe5r85Rqvj4y\nwxUShrgSjrmG3TDOS0I/1epOQe8uKgBxIQelJ2gp/e5kUguDp94P6LWWP8MN\ncN4gBIYUvoupZ64qf3FSy9wfCpQl7tCJc+3LUO7RvbOq17wFr0F56gT3VP8W\nsf6GBdD9ovCoBx27CD12Dds6KOEzDs9t08xA1irfnt3QJv/5k4pYR/f4h5cf\nTPei\r\n=KFYR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC02GdFA1bgG1iR0d0PtzT67tZugWFGMIW01iSUP9IE7QIhANVtx9gNFYicruLV91UfStRde5R8hTOumB8BmiEyjxiU"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.2-next-1592847960-b1f4455b.0_1592848021712_0.7805609415676116"},"_hasShrinkwrap":false},"1.35.2-next-1593034822-7be62321.0":{"name":"@xdn/core","version":"1.35.2-next-1593034822-7be62321.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.2-next-1593034822-7be62321.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ZLzxXdX9y0/BeFlCS0hS0NFx5X7cVExfS0DDCQy84eEdoChrTv3CQkJbhvG2HTkgii6OahwgFHkICHozADcPfA==","shasum":"20564ac6c199ba06bffe63905af7d4973c16bb18","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.2-next-1593034822-7be62321.0.tgz","fileCount":129,"unpackedSize":551581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe88jtCRA9TVsSAnZWagAA8QgP/ihvS4Oj8EfYoDqfBaaw\nfvdAjdZbGBnDoo/QHlbFH/mtbyZ+DYDil7QT0hmwwVEiDWzq8lqeVhTkqqlY\n9GXRm+8BZvQfEBwTNRPiLoBrB43oarpcRcEqtzzMMKCJUJNsx3ZZr2BGkiP8\nuGMK9JwIMlHXtza8TjORiN0hBODt9/ittLLyfTOFLT1vfAeNR6OD/czbpj4i\nKzJpvRGYaBXiU/hK+kw4oez2oKBbTCwPaD6e4YLiHBoXrruGyvbVuYJjOeUb\noOjb8t1h8z5Lt6JY4CLqPsKMvJVMkviC3pvi7vyywoVRqyGub+zAP9aLzaa1\nGee434dNoC4CkYPmShZjb+U6MNN6//+C4g6p5NuHyOfw+vYo35QXqghMXyJS\nbKUTA6s2zeFssMzO/JRshHsEBfCicXwA94XD9CRT7z7hy1e3sGzvK0zFasUa\n9IZdJIOetFdvvbVH2FSMb78KbouHZyjuIGm+0aFm9tanjG9M+yHI3HNQtEUQ\nKz445OME5QJzHRhHNNvUvOdp70GxcrqTaLNIbv58ph/s6g6ZkoX/QYiC6JoT\nAltCbbW44ryiVD6jhcQiFq6ZVRTVm/olsv5Wpibo1NO+OffkQ0lG0XLsHZXK\ngopvg4KPotYjKYKQmj8gXlIZ5ozO0b9Bbox6yPoz9kbMpZE+q0UxSsEyFS8l\nzFry\r\n=QghV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCN21xp3r2u+1GHPSxOf7cvvzSKmofPJp02Tki605yUQQIgbN0JeRRmMIG13IfO2DhyF9QnDzbLffAFZEQ7b51h6vY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.2-next-1593034822-7be62321.0_1593034989148_0.10831626140663375"},"_hasShrinkwrap":false},"1.35.2-next-1593051570-6a0e3ec5.0":{"name":"@xdn/core","version":"1.35.2-next-1593051570-6a0e3ec5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.2-next-1593051570-6a0e3ec5.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-73u8PhHEIIeue0SPHqvYX3BOMFouYgF34ujVkrMBn8fuFCucunqNOnI7daL4HYHzPZwxt9lN7ZWz9v2C6b2E0w==","shasum":"942f54df7e1c3647107f53832ff68cd3795a4292","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.2-next-1593051570-6a0e3ec5.0.tgz","fileCount":129,"unpackedSize":551581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9ApLCRA9TVsSAnZWagAALK0QAISvAnLAPACzsC9azi4B\nsr+kaVfReJ/kxoq60wih8dR2d18sNUi7ugPC49nCmGP7Qdk8mQCAik7j9EEy\n1DFArqbrbc2t8ktSkuMKMGSKUG0CnI6eaEDjKVNDgKuhRo2Doel85TK/lmGv\nHWc3x85TS+BYqwa5ZoNi+Ui0V74dwtYP5UBImgXG/IsZjUTGkp4j4S9q6yQf\nlUFzRIjBrnu30Wiw2YDr0eWaT3lVEC0oHNXcGTBnC2Azl82TaINez8w3ZpAF\nKZ2iNrdWBj4qe3UyQfQWeMryw48TkyWpJGksly6gxgQtTdGilYDwpY/hEiyj\nOfi2lVnACbNeALqDyJGzWg5wUxuXoKktJ60dt4KLI5K877bCTWaFHiW+H/I/\nZrsHinwFAtf4xfoSKOg53xzxEU1YBKtAEV/Lro/vXej2zY7aGac3ovcBiwE+\nO7rNpL9L4T9UVN1Ay1a8uDcHBmaSuOp5rdw2YD1UUIIJMFYhuHpLtQrqXQdO\nDocDFXscLl2LV7QawG5qfcklhouBgPxCHBOiV1nVAz8DUbGQmXesxIDLjeiD\nC+yOMZ+20Ij1eK2Hw6HzlUenZr6oDyWX3BOLzACPbl7luN/rfrNd4vsqyyBU\nOAmY4KexDdosnpahRhcQASd7TmyEO6dT5Y0hDNE4WcJe2lNUAVxbsKrKdJrN\ncTM/\r\n=rPlD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrmQQqfO8uxLf/LvzKSzgVg6Sll4ksVEJ+Ai5ZvGyNLQIhAIEYtfXLIaQT2WB1qP2q2A2rDRc9rhWZIc6msm83JAQ1"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.2-next-1593051570-6a0e3ec5.0_1593051723202_0.5145737183143431"},"_hasShrinkwrap":false},"1.35.2-next-1593052063-3ff2dc97.0":{"name":"@xdn/core","version":"1.35.2-next-1593052063-3ff2dc97.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\n\nconst { renderNext, nextMiddleware } = createNextPlugin()\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    await redirect('/some/other/path/{withVar}', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/{withVar}',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:p', async ({ render }) => {\n    await render((req, res, params) =>\n      renderNext(req, res, '/p/[productId]', { productId: params.p }),\n    )\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', async ({ respond, responseHeaders }) => {\n    responseHeaders({ set: { 'Content-Type': 'text/html; charset=UTF-8' } })\n    await respond('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextMiddleware)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.2-next-1593052063-3ff2dc97.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-S6Ox0phmqhSKjDEHWHtl5Jl7QFGDs5xJ+r19kj4MdUd5Ucey3dDcTKKfbv+MT0eTsXbZtae/zPulb2pTYum6Mw==","shasum":"4f16a0ead872b8ec56c10d00a26e1f98a33a3b45","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.2-next-1593052063-3ff2dc97.0.tgz","fileCount":129,"unpackedSize":551581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9AxGCRA9TVsSAnZWagAAVv8P/i7gdc3joMmVgQs+l3+T\nv4SxXv+xCM6Gdic26w2arXBs4c+14pkjoF6a6O+rlJRGDxuTUSSUYQYGmJK7\n+9QYx9Z3oQ5zV5yr4M2xwOi4lG3svCzWfGNDcJtEQA7wpokye/Nmm/uaRtG6\nRS16cm/TY7vGeQOrex11qqHoc3E5U7sH+YKUGG3Fqy3OES3wfYOHc0gVtzSL\nyz1GObjo5FH0KQtCJqHl2MmbmzhSdJWcYpLWmJQQQ1ebfhdOtHC9kYBYqbrk\nLKsU/d572JTf21Um1ymQRfoybjy3QOigKIaC/m2bVUfqPoywaXgrWx88nTWt\ntHkQCjb0F/HxvGchvj8XZhvHvQxgqx0sN2v0+eL+8uKiMDyIPogCmu0yN0V3\np6Dj3mrYnEyFA6IyDVwnZFY3Qg+ofANCPTjtPLqKd23aTgKP2g5K5oKJePB8\nzXPgxLU58ZIH7ZLXXsIUqAoqrZctfJmQe2v5kcg08vVPq0ERKubGDSuGB/4Y\nfG3pJQksUf4THBo3YcGbXeXwxui/mHdZfs3wK40tvx06GcHnmaT+Coihm8y1\n4I/3P7//Zehv6yNwtFRiWIue0ji2emI+slt06nkQduB7l3L4hZ05qkuIhWbw\nMPSxisVxJrjGOzXrkbpTUbnZwhTP6GBbT2xRC61Y6jsQTv4hmzR5mMv36B30\n8GBF\r\n=Wmd+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFeZI2l6yB0QybqDXslS6NqqXnejomsRE+W2hheUlBATAiB1v7xmoz1p5uAjqmCSSo8cuz5e6v4pJjLKc3iYTCyhVw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.2-next-1593052063-3ff2dc97.0_1593052229500_0.38501966671394916"},"_hasShrinkwrap":false},"1.35.2-next-1593053597-087fad45.0":{"name":"@xdn/core","version":"1.35.2-next-1593053597-087fad45.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.2-next-1593053597-087fad45.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-O2mFeaA46k1P2TGytsl8MHSsRDQOrJ5TKeXJUwS6EhrUEknUTfFlELAnYZim9xqrc3/h3+7FGyED0jMr5YouRg==","shasum":"82cc9a3798726b2fadea8d5d9679b3d633a0dd1b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.2-next-1593053597-087fad45.0.tgz","fileCount":129,"unpackedSize":533360,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9BHTCRA9TVsSAnZWagAACKkP/0TiSgTeRFQ6TdWQL2SX\nuh+kl39wwkdX1biYb8OM0A2qFesOV2KS0xsguZzO4Hmyz8ZxfDREabiSSHRU\nue5JhzhQiB8og4qyOUfoqGHbKA1kRUOm7pXx09bOARh3tMnWrVwfdcPVzGVG\nwj9HLt6/YPnKD0Ana2COiABPmbBBAEXh5gm/QJs2KqfH2uPwesWoNXJWnxdo\nBYh7hbSVuSBq3/1Q9n1iooqgTCWTi8gprH9vZ+9QbIRpxvNS1YjpXyOqiVHP\nNbf3u+qzCPSHwj82oLYcmMavyw/AGL/IscwY3oIe73v8QTilHbF5iYx2gS3X\nEc+/RFPfzpwDFGrWcBtzpvNs3m7vPqg82B1YRTaEGIPYcduUzIrGg5X7mlBZ\nmd1+j+DzUjwubdoBkbKwSl6KCAhk6slpglDalB0V6gNXkLNClA4jcqeHNQYw\nqaOJbWRfqXY9OO2z5h6+GmH7Gi5AUY2VdIt0xh82SUzPteoUulL5/Pmge6Y6\ne3xmjPEupkTO+IXiG+k//qyAMidPEkVEOCLs+HWeYFqvWK4y8gtvxWkcdKVK\nRVjFVJlbr2nv10+lvXkiy/Oi9V7+fpyHNO3m74QA1cQFd+Ef5FeEPUDuiPja\nSBCo/pyO7bRTUav7Se/OKVe5RhcDZB2QHgPaDQ3PyuNONfTz7TOsqNpMiUxD\nCAiY\r\n=aT/i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA8ZFUgE8MpjrtMQXCjAnrNx/aYO+JyWyFsNuh58+A8TAiEAgsPxKU6/JPTkzLrVp1LHfjSAiML6AV0R/uzh89UUT+k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.2-next-1593053597-087fad45.0_1593053650950_0.761947303843864"},"_hasShrinkwrap":false},"1.35.2-next-1593053845-702afaac.0":{"name":"@xdn/core","version":"1.35.2-next-1593053845-702afaac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.2-next-1593053845-702afaac.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-7PTa2nqk94TQm1dpanEKrlLIrEDv9T7cJsDzNPFbCzg1LxIDQtffu4E+fZTWr1Ea2ndmW+Y6mQKyhYDvocRUSQ==","shasum":"d94cf5b6cf71620469a47bf269eadd5b702f5fec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.2-next-1593053845-702afaac.0.tgz","fileCount":129,"unpackedSize":533840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9BLUCRA9TVsSAnZWagAASjYP+QESKzU8v0iIwulRKtPI\nrVHNr9Jqo2wb434SuuY89MWol/3Gj6+TmoFAhmMoxcbrcQzKrm3n6zMoMYn+\nY/zW0dPScMpf3jfaE7/1Q2OKkF61DIXJvYwMJjQvpUypYP8OPYzghselfbv3\nzz9muIqwM+mqtVnPYd/mK96pOHu4Wp2GU+SPuFWHpLH72hyb4ZrZQOn/vElk\nk2sb+3Ko0Fvk9LhcRzLzoPFmUQaoqEk25mD3onUpCdNr9u9r19A5usLqwM0l\nNhsoglCzlUXTWcaqu+p4CLAQXzm0b6Q1fFDA/kJqHQlpWsBZX220eARfk6P4\n4MrhJalSugjj07Auk4SQsorq6+FZ8487z1befuIAcExTsss3CHzVgrVSlama\nIQSrgfeYH504TBJILh+1WwE+Dy14Ifkf15uH7Wq8aB1LWA8mnhqu66++a7Ci\naC9EkeP0yOLP88NQIkkyn/CeUOvyqBMZFF15eL74ynyPHR7feiHnhAWTij2z\n5EQFAOqP53raBdepjrx5aUbKFKryT7H98Z6wvH1NEF5h7b4WzI8VjaFP1v0V\nVuTQqKs7z4D0pxxJf7BhlnNevzkCaw6XNKJGd84rZBrGoRx/roTubeQHwzOK\nzAPCsDAby2fjXkVReMNBpwgbvWnSRo5nGE8YRSaQzRampi22J8n7QmFvNxv+\nSNgx\r\n=tLLc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE9FUpjifK2sy4ueDCcFYje/mr2G7g8mxoPi6idDJQhBAiEAmYdBaus2jGPgPt1ClRlPj9cDfqtZ+v7zNmzh3/6uTqo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.2-next-1593053845-702afaac.0_1593053908240_0.5439441955974118"},"_hasShrinkwrap":false},"1.35.3-next-1593055253-0c4dc1da.0":{"name":"@xdn/core","version":"1.35.3-next-1593055253-0c4dc1da.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.3-next-1593055253-0c4dc1da.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-V4dNDJzn1jyFl80u2dEzSKRJayZxA2Lrhqz0P/6j0o2EFoHdRWJca1tBs+MvkzCtLNRZdtUH9RYzeq8gOwgRgw==","shasum":"a41a2bcfc262cc85c9bb8b4797ea0374b3d53423","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.3-next-1593055253-0c4dc1da.0.tgz","fileCount":129,"unpackedSize":533840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9BhSCRA9TVsSAnZWagAAxgwP/1qxqeK1FgupTUVq4rvy\nMeCMg0UJi6/GlnOXglDLZXwEaoIXA4BrJHkt372ZhybfTyFXm/R8O1JfYwGy\nXeulU8kJP9gn1GTj9lxbWbtgDE6RwpQSECE77zsbMpcmuVaLEKrfpR9jV1zQ\nA3tbrDAkKKMquwBigVWRzciNO0g+3eKegFRD5Ylr6q7P0u8OCc51suo4omY0\nPrmkT8D9ap3EDdktMhtA+f7zy4ZazU/v9pPFTHVRF4n5Ulb556NL+4ZHiWJb\nORUeW895599ThxXWtaHdSDSktSXWiHkja5Kd+43Ukpfbag1upB11BnjdKPHp\nWtXEnr3Me+XMN1rx6+7jSiO5OzxGnNl0UbFp+RAE5c+IIAetU5qsFU4Yie9f\nYEqNba+bAfBO7heemWszYHvOHEwsUZMyVdEF1wjksK/KtMQwIK/5wZDhp1e0\niPH8WfsWlHHkGH3RR+Xq9eKyuJ3tDSiKEgtZknsJK4lNRDTNJ7qCiBz9wOSx\nppcw/jtIOFWVu4SIk8RqUqWtqzKoPyak5HcWemS8NeMLlpKVGLS+LmfHz9yG\npiyFPPCfMJYCAayUpe5TNGSLcYEt13g5m8uVAQi3Pmx3nBx9BIbVorm0HqJ8\ndPyVmWvAw9cIMBNNZ4FC2cugvly4hcI/8f/v7FBG+Riovu88WZUi37R3hoIk\ny/8I\r\n=ygqa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGQy8VsbbgqYQWwOTMNBzZjFntfa35IWxqJFwa/xSf1dAiBnd8rSwqqq6SEF8YpwT0lD0Wup3K3MmMEV5zPPy7twUQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.3-next-1593055253-0c4dc1da.0_1593055313716_0.7576375273495952"},"_hasShrinkwrap":false},"1.35.2":{"name":"@xdn/core","version":"1.35.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.2","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-6BJ9s7kJ40HxjAtNSTn/TrXdwQCs0kG4LJani7p5kqiRZOgxLjB/4NAdNq0umkU2XZS3OoCS+OrJ+y8sI20AEw==","shasum":"0cf82e094f8865f69682d3565121c2527e2e3470","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.2.tgz","fileCount":129,"unpackedSize":533786,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9Bk0CRA9TVsSAnZWagAAFCQP/iDQ/ZWUS2/6cj5gFEVg\nl5Pdg+iO/4s8vXf8ZziihAOKuK8Z1JAQ0VUHXUxqWFiegyHIdV6wDGGeOoTu\nu7HUHuOdGs7NRTfAmOJXFI/D7tSYUXP8Lu2CzdWy+jlqXC9UKWzLtDq04d1T\n2rXxqsDnBNmsY1LP9/HxEJYcsjid7gEsnB/1SpvvUJW3bJh56T1hxqZpPFEo\nTAn6qYccruk0uTUWxvrJRbAtJyJgvO7+ahaCkkQ+wjcV807TjRojc7d7XgRb\nAlJRKbYOIcA9tD0QlyP6+blXxd0XIR4ciTxMzdj5Ey8N2kNIeiAsNT2CRz3j\norON5zLcLTorcWeqQqIDYdy8wgGNGiDRMFtYzmH7IccJ+JPvBt3WODkRqJHm\nsy4HRFX0VQfxnYA3dsRrHr4CLT3u6RhObzJySdi3bWvpmkQf4UTS6oF5J6yE\ngTTinayjVkIVBLLkUOBPeSjnb1kBMCR4Wq8YYiySsbF3L7lidtsxSP/Kovmc\nGHnDzMCJBsrrGELc6zFnGK4xa8eIKYBGQNUW7ekLly7WY7d5tDYcKqp2GkU7\nd4YaqkXwI9fg/FSIr0O7ql1QngGFmsNvUipyf2so5H//ioMeZElzk9/oVsm0\ntDjQSNSU1VdezAXuS/7upCbfZR2K3xQz08CYWjejtL5oSjFhxOldTABZZZme\n6Wp9\r\n=Z4vG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCBlPa0IHz72GoG5mpVTPuBcj8Sq77vKnCOQ1mXFZl4wIhAK562KUOlDdFDgDA8KA44Px+WR1JhSxLMCdbizfYUlJ5"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.2_1593055539462_0.8808046416742752"},"_hasShrinkwrap":false},"1.35.3-next-1593086359-6ad88faf.0":{"name":"@xdn/core","version":"1.35.3-next-1593086359-6ad88faf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.3-next-1593086359-6ad88faf.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-bgUlZdkVeIVWHHTJlnoXYV12INDmU6gJ9p/Qp83ZdQ/41QSa1+LKC0hD7N3mQxCULarf1wVqnLJ3MDhXRybqaA==","shasum":"7f6c55eba5dbfa11e7bd1b0b98c094d11cda0a18","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.3-next-1593086359-6ad88faf.0.tgz","fileCount":129,"unpackedSize":533840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9JHYCRA9TVsSAnZWagAArKMP/2I7BwLKaJQDdm4EsJ3p\nM+PaDZtSo0YHQmstvSR9TIoSlm+QfycQxOydByNScT37xryzNNee1xtj28Pm\nAgMkQLX5X6dPFR4S3+q0+4OKtOzV9SHLuiTfwR7XfFpNXoNYSkFV5FoZKr++\nZ3kpSIIkL8pIGH1J7xkHBVHMESMlF1rHl32mFejLARlu3NkaH8us0Dfu0ghs\ndWey96ekiIyjlNPUZgBEh4tbslEh4VMe3GOxZbb0psKiWrvDPnWiW4Lj+7PB\nqzOMZK6ubEWSaFizLYdgHWSaLQX6kyEyndiKI8Mc/pRNZ9a3tWLHSeUdb1T0\nlvDh0pxAlOxKxPR5Xye2wYy7GjH45cZjRUmjx/RCpMkfRgTVSatKdUP06tv7\nLgZHDLQbstAEeTYMgyjZjAYc5WhvI/m3sfMl+A2A9qYXUvV6+353+RfMv9sp\nCMfcdoAsV+xIIryd+7R8NThiFcMf7QZMS0VVzeEbZ1Nz6P4eyQev8apMhm2M\ntTs6IQ6Fq/a4NuI0hGDCRxnBrIPRiskbdyq7h3FqoPyd3P2F335FB9eWoe2x\nV1xY7dJHN157v0taMwUup2JVbSwp273rCeGackWRqy4VkMGhKs/UwC9ebIL5\nZyymNiZgeLaPlI65aH54/gavcsCMqqCoaAUhG2C3V5nDgKJUe1RZx2jTClMo\nDr1Q\r\n=RMUJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrNHJQQNfRCr0ysneYzLsyti+rFjv2VZ7rEAQfCXWcrwIgFIPAJvToipxD/4eBaVjfhQ5nTqvydWoN/7CfNg3kFyo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.3-next-1593086359-6ad88faf.0_1593086423357_0.3646896722868076"},"_hasShrinkwrap":false},"1.35.3-next-1593088664-326f25c4.0":{"name":"@xdn/core","version":"1.35.3-next-1593088664-326f25c4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.3-next-1593088664-326f25c4.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-w5c6bMmVHODzJBArodfvzaiYmDMgLTHHA32LNprQSxO0WQt8UX1PYCr+SrB56xiyahueTzE7Q/CXJR2Kpr6w1A==","shasum":"ef477cfd573cba0576878e6c1d38542dc7141174","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.3-next-1593088664-326f25c4.0.tgz","fileCount":129,"unpackedSize":533840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9JrWCRA9TVsSAnZWagAAKBQQAI8lOqFfWmGVSMOQ0FNS\n+XJ8SoOqWFWCR2ttacYW2fezzCWNw3V1wQEvRcQ0W7IDVnTI9y0cqMhXggK1\nPkUjO9cnNlOrQfwM1SdDGtUbXu25uAXtnkdjSUUWL2DzMG5wtOTJPq0jh2AC\nnjqiCef3S9OZuwecmqv6JKmQygClG0Z4t6r+aytb2UmZAUSfbu4N+MYUqz/y\nrhQhoTB9qOIo0KVPSTExESrLBiw83FIG4NYzgxu/4xBbj9stX/sSVUVMumsl\n2yrLjwkBym33zPrucw5hqrcie85LOqrhItppiHEGl3c0apnJT8fNnOu3ODY2\nubLBjlrIP7GaAKbgbMRnjU/8xatSFI3GyNJqmol/OhhpXtgtWAPy9K8WZdio\ndjN3RfoQWi4qv1V38jSmRrX+4FIWzcCR1m2OtGKWqySK1xhrleu3XNbTI28u\nl0w/0fNrRxjhfE9Gg0F/YfZHqaAHv+1ZWa77eY6p1q802sVFz4fJqxrkdaPx\nGSrXCJmMwtap479RuFOo3js6MgQQEjAdPf1GNHyEOnNiqZWjToiMaRNe/bcr\nlb9N2kmf+PvVZSxS+LVDpgljGQYE2olnAcQ2X9tRlrgOBJ25Bgq1Dhijdx4o\nqUFB4HIALykM/CuQkrAotmKvpOtW7kf5uvjlfh0uvFEDRZ+0klt3yMVzMK8v\nILC9\r\n=uqKN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB+tGSPgK0DkoSa5DgU9NIPA6Rro5v3eQUa86sbWJZq3AiEAkHdn7czJPZTw4REkGoUaV1xh2kV/eqedfnD0iz7Lvew="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.3-next-1593088664-326f25c4.0_1593088726395_0.7148327728496833"},"_hasShrinkwrap":false},"1.35.3-next-1593120365-67018c4c.0":{"name":"@xdn/core","version":"1.35.3-next-1593120365-67018c4c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.3-next-1593120365-67018c4c.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-+E6Ft9IATPwNgZa4mIVLtsDW2jMRO6HI1YuFijajO/RFj3Ia1i827CG4L5Qgw0yy4lTIipwBPyD5rWUsBWveQQ==","shasum":"4de04c3cefa6fb6167c96188f0e862088a4c8e60","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.3-next-1593120365-67018c4c.0.tgz","fileCount":129,"unpackedSize":533840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9RaoCRA9TVsSAnZWagAA8gEQAINQaYdmPxwhD7+a/CTf\nOp3DGeewUWJxBHWRoHtaCk6HudLEKeVcj/4ls+5jhJ6w4O6QovXPaxoyGt3o\nRMwLpCRYaHHpa60LTFwEEY9rhWv+JI0Qa38eoAaNCWZauKL8ozN72eJ7TUXj\n/i1mYotmelrRQE1ITqeY2gEodbCwUBFLC40eNYRYfONcYon/QrQEZBp4txVF\n+LaEcx3/f4Lo7wX60NZtl6XsmTa8utqimMNd8v1z9iEYClRDwYhvRw/J7mog\nGApmdQC4/B1hV/eeKNRffZc0NIg6PR0/9TAVVuHoO9iMyXnox4utTqlnaIv4\nxyi7SkUq8vaMRNhveOcXlTH6AB2/zadJA+/Ep5YwzAH9CS5hNmlPoPHY3HCF\nks1r/eIu1a0VCfQqyXbuER5c++mchTmcnFqb39LHfaZXVq1jHnq6Vg8K5+hV\ng1BvFZkL2YM5asiFu49R3VWPypZPqu3lVxXlNa7y9VPOc0byypW6oCIs/R5Y\ns5rI/zko0sEyGPDw72Fj1kQkbJK8w3PjAN3dxIW51Bbiq7D9zOAulzkVV5nz\n4hZAessmB9TfWSm5jEWhpoylheMC4SgwYnDMqscuQnRu9PoPiSUEIOy5r4t+\nClMq1XNRgTsS2TmJF5PHHufxvbsDDk0ZUNZ0LEVRCjW2+efFFolOGEMJoEOv\nONts\r\n=2w6a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICyFkN0kG98S2Mfd4cJk8RYB2xfCDS0pYua5/XUF+VyHAiAT7iy9nPx340wwS5P+AKejKR7ediphzBCoJHTSfYqPoA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.3-next-1593120365-67018c4c.0_1593120424053_0.5949683011630145"},"_hasShrinkwrap":false},"1.35.3-next-1593170082-5d285290.0":{"name":"@xdn/core","version":"1.35.3-next-1593170082-5d285290.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.3-next-1593170082-5d285290.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-zKf1fXW+OxYYwn8fw9IrN46FypDNKyYeFH/E091+VPWHFZo6BvhPDelWHMjZ9ji7W8qQmE6q76LIsPfqolsc4g==","shasum":"ebbe442f015c2cb1c45f4ff5a1e356eadb2221fb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.3-next-1593170082-5d285290.0.tgz","fileCount":129,"unpackedSize":535632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9djmCRA9TVsSAnZWagAAZmoP/0ZNVNRJxgOGNQgAkqG8\nsYqYy1RYfkt+MF9HKERzrDyqbp3+T4QXQAKqqwUewyfxoACb7nUAyTWXB2jG\nivuIfzrGt60VYOEeFgphkI4cySg0O6KHKbT/s6aA/qa5xg9399JeeQcAMjcA\nwEGnX64fV7KprlvtSbV+fhsSMbu9mRHSMuthjH56uC9omEJ/Fw4A7ra3XgCd\n3rlscEJP2q4503H44cH88Q6u9g08uUwzzARB9WPGyeMRZO9sqOu+SFGyRs8G\n5ID4aguClGOy35imZvTkh5OM7SbH5psljTf0CUjMG8ebBNBsqoWTsBpHCCcU\nlL+RFV0M7kEpoGngf+8nuSy9K/EjHw5mOCTI93xBi7WDhcm0F8bVvwz11CNX\nEkEemYBezSblRjJ0sgSNVGPiIkbK8p3uHSoQs892lPbCFndqyN7nvnMSSw5X\n6v4b9wX0RKwCuD496sZOzxV8Z46beQakVYErEKIzGhhAzBNkKkL0vpQdFBNk\ndH4Sw3igZ8zUFgaTquBZXS8iOYfj/U7e5uN01bu88+crhtPTvWFI9w7C4lp5\nA/lqI6xBGev2C7VdWPrC8x0k3jbu1CI/k6FYOXBqPWpJASOViFsttzA9llOM\nN7pOTWFNh5VPwB0VGfwXPsjKjFYdlw/5Xpc8DuDLWLya8TF+K6gE2sPE9txR\nUx+5\r\n=qQtX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDFSNloY2JzyviwZKRf/6HJzUm9kJyIw+jKVgT6JMw7bAiEAyRKGEJ50iet7FN1Idj/tO5Dghed7+/qY/Ux5qo4sc8E="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.3-next-1593170082-5d285290.0_1593170149880_0.25655401608659556"},"_hasShrinkwrap":false},"1.35.4-next-1593170336-82741007.0":{"name":"@xdn/core","version":"1.35.4-next-1593170336-82741007.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.4-next-1593170336-82741007.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-+j5jaVMqYyq7aTXTLLljBPH6lpaTWzIVRKTdA6H9eIuDDzitgdlnVMjGWyWqLeqT2U+dyNzW3zvS4ebB+NA2OA==","shasum":"9b59ba41481f7179e5f99b35756beeae80477d36","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.4-next-1593170336-82741007.0.tgz","fileCount":129,"unpackedSize":535632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9dnYCRA9TVsSAnZWagAAVgwP/RKsRS4qUXHF2TyyZspN\nd6SUPxwY41vYMWkg7vJz0G0CEzFp1nNB4u9VmDhzCB5/eYAb7IDJu6yFwgG+\naDipk1W+VAAvq+oE2hp5qbGM5W/69lyumKauXx7cTCgV7LlI2J8iTY0nBAB2\nRo1P7KK0YoI1VJqO9Kc1OkG8hemOjgcUMN8kongJ8nIeXs3bx3i5OVuUw1qR\nBlH+MrcE9IYsRLo030inu2t61uy6F9m4VrsWhRuuKpylLmH0R1iMSFK2z8VS\ns7RELdgJu4c7v+PGJOZ9TPddaC4ebqduFl3yHghecEEYuFjz4q6upqK6aji2\nRyf3L7LG79s7dgXgNa6Obdeddx1DMFHv/hUB/+qKrElmbrWhcnOeCVgnad08\n9r0cdhfHi59W4xZ+jfjCkWidxu91cisUlfmLI7VyngNLFoZTq/ZJcpHHoWsG\nReypz7Kjkwo1NX6EgSI+hHW3YZpvcE1ZDGG7wA7+sgpU4AkCMaCw6lemuuXm\niwYMBOKzPv+BuSvpQVn7hfXLpjple/rHMSQJYkom6iIddiI/S2Ikrx/VvE+d\n4Z4pI5UJyOISQuC+W5OMHz3AUgxxSmHao2zM2h9cnduvKqk8NxofLHnzJ7Fv\ntIwOrls6rVON77aRIbHHrvyJI8suaN8EsaUc5PTSD/rigw7jCeeaKxAhVjJp\nTX2g\r\n=ePLC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHVrfoVnwFCpiZvplsznmnClSv2SgKbc1KIiYG457Qa9AiEAqSjN3Wzi0gMq91niLeO4sl1b19AwHK+HO68Et2NBNE8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.4-next-1593170336-82741007.0_1593170392275_0.7038389679951531"},"_hasShrinkwrap":false},"1.35.5-next-1593171431-5063cfd0.0":{"name":"@xdn/core","version":"1.35.5-next-1593171431-5063cfd0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.5-next-1593171431-5063cfd0.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-oUD538EeT+KhsatP/qrMaSHyVySxhVyanZtx8emfuaQyAo1Z49D6rHFRiY1ak4YgKxmRqqxMDkL5Xk/SwGarJQ==","shasum":"eb3a7bf3da8a10e356f2cbe8820a32a65ce11b0b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.5-next-1593171431-5063cfd0.0.tgz","fileCount":129,"unpackedSize":535632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9d4fCRA9TVsSAnZWagAAwDwP+gPLYfwAL060XQgF1E6y\nE37pY6Mvnan3wlsZMwM3FPVmls7La/SwJ/4hHootenWSJ8Q2L49Aw45KSnMx\n/oeqOeSV/32o4XVAFN0tQKWpKPIb5q1bL7r/jvXZIaPU1AkOvI/qsM/JlxwN\n4zsE+c/Y28bXhrQdifFX3m+2jeKxAkk6Cww3KLGVxWIUxO0PfJGlcKLFDnOw\nba9SXzlu0ZlOwqwRb8jK02IAYFqkAWuuZSmH1/82cZ3L8YaK2ehBGdwnfygz\nhuopCStlLyz3YFCYsUmxRdebFioypxqdI8UIIhOd7/2z8d75X5pipRzqKzGn\nrRHdHD7btv3WRkllBGda6+S5hGY+iQ3x9kV26W4mJ0naUnHWxf60lv+0H+s7\nzERiFMA9z4ndyGYdzRoUN6/j3cL3DCk01RIpS9xnLHegOwoGr988RDZfKIuZ\ngHRf38GlZn3eSQTzdTTNQRJWq5HDcUQEa1BpNdm0tuplKrrX0Bm0+g8U040v\nM/yODPVgj1B9rMBk3JYMnBwTeSvtv7OZem1oAMFjkbSp6WkV8AwAckvE0YRi\n/1K1KokyvxwGHNK5KJZSv6pUhX5D+MXRViqnQ2bH9oBrlIKpqECAIGktGQ4Y\naHz7ajX2gBsGXMnU/bAMk2exmOsInXl7nJhZcGvZitBV5PSM9JYYTiohF73f\nRbtw\r\n=xD0S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkCpjtZExD6xjVwp/nYfOursAC8IUmhR4DXmDXmEva8gIgO8D63ZhhSX20/75MI3tEdNfwm3Ckjpa2ghCpY1ynXfg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.5-next-1593171431-5063cfd0.0_1593171487372_0.71150396332811"},"_hasShrinkwrap":false},"1.35.4":{"name":"@xdn/core","version":"1.35.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.4","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-fUQBIwnyvIfVkfrQsoXfPNOOj/4QkOg0TbQcPWbE485ejel6gX8S5xQm72Fn9bK263NUJ+3R36M/tp2OH7WqVA==","shasum":"55c9811751981e6fa1e888bb99868d9c3e0b3750","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.4.tgz","fileCount":129,"unpackedSize":535578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9d9hCRA9TVsSAnZWagAAU7cP/jfjYvsEwxjJ7KXEEPAf\nAYCo1NCDYPpXiCem5TjNX5YIWTjZyt1iMorfKcv6ltrGMGnxrCWegPF+4w63\nb2Lvtw9pNq9BVkdff9K5jjhVxDzyaCSsT/UcsJt4VJHAtCc34C7kYrQfzEQt\nq4lbeE0j8sPABmik9xYbG5q2jjXbXnKLC/Lw9/Z+d6ha9kuul8nupcEMFSE2\nZxqrfYsrAUpyE+/bLlMV2tB12701tG1vCPyz7Egf6QGs6CuKd6kkLwlc1GUu\ndBjOVhndNWJt7hhwMr1Dvmq77YVKA8YcD86ugknbUdszZ80L9WdT7wIwJszv\nR4gDs4qvrNXz8j3AeuePriCE/ZRmYVYO3S+Ph3TLQ9HGdCHMaMBNBxR18H2X\n8drkkHdWlhiAzV0SbS0HDE2Pf2lKa3pRKc7EAqDSz8+YjAxouAwCEG6+wIYP\nxoig++/uzhzf42DGEG7PvzLotOGlXrhnncOFeNJ2LjCdhil8X7hgrcQElZUU\nWWsSSHLDohHju/t/QS045RmxAp3bgFaz5BcFylYmFbqs6RZ4BJ8QFiSkzwj4\nIYNf0LlQuJKlv4D+eEyOQFBMnv88CNOWBXqMw9sMowBaa/Hnc54VdDlFt4EO\n+VkWXd4XJQnFb/4n9c3jW59e10717ULpP0A8dpwdxYx8zTbUpMjTUhh4hlMO\n1e3k\r\n=Y+WY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3vSry9Zz3wZtL0d9GjosK35AsJcFm3gYN8JDLy5kQfgIhAIy/hpopeXM7jj7vvBwuhJI3t4wl1YNb+p1UxZ3BtNTT"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.4_1593171808673_0.873988877305131"},"_hasShrinkwrap":false},"1.35.5-next-1593172009-2bf4674d.0":{"name":"@xdn/core","version":"1.35.5-next-1593172009-2bf4674d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.35.5-next-1593172009-2bf4674d.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-lg+cI7UYFLr2t2l8RiaSeppHgTISWnVPoT9/yLmMegfAQYdKPX7n1B5u596ahuvG9y8X4/2GKS69eR5Kc2GhyQ==","shasum":"7cceb242997197f9876f7f0faf78ff76da0b84a0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.35.5-next-1593172009-2bf4674d.0.tgz","fileCount":129,"unpackedSize":535679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9eBnCRA9TVsSAnZWagAAtGMP/jP5maIjtCjzTliTfb+W\nhaPKciIAaLVFMHXEihshqIEy6CiVYLJ+eA/qhMF0Xhw7KupfzYvMwGwHLFeo\nu3frzpQvjcE0uAkafFLNxcYavGCxhGBsasyZqE1Tbe35Bi7rN+I1hdr2ibu+\ngEonQaSG7TlH9ki7UL49cxsW/e4MqRfvVME4PMl5ASByadSWilN3rIdYgXRL\nEOAF7AEVsa4k91VUuiJci2bMHdifQV3dynypK4GbQekEpnIrVirlYS4CK42K\nAn83BHoqT7ooae5rlqHOvrWLIotFVwoQ0Xy+WH7hayVi3upN67MC3UUNu6rj\nNnolMtqoh7jimwFFHDznGmUbh+u0MMv6wQEP4EpHH9r++c9VRtMKQQODOd+j\ne/nPMg0JBHmNGQpYuNWBOgBjK1elm+SW7/NcKSGB6J4wYkMU7dXEBI0rmSz3\n+gxepz5zihVa7GpFStpS/G59qqBeEwlG61yxdRrbI0YcLgYemyvSb/+9fAmg\ncK5Cxvzs0nN07Hl1fffS7H5uNBSm9t6/9r9vZl3TB0yzACtxCRhZMxaN1rfE\n+sQKt7jLLcDPJIB+Pmq0qiulyB2lM6rm0V4bcOiEl0CCUwN5+ZzIX1MsHf2a\n9zxjLxC9/gNJwD1MrLe5NDM2/qpKRZguK7OdgElAsDsv/H/jwNS4fk7ib2xm\nDh4C\r\n=98Wo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHCNdQrywl/nPB9q8yFB3J2uBf7NzbSfBw/8sERGVzcnAiEAlo1kvoMa02e3m5i6AFctIuHDTUfpa1kApfZz3SGxZNw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.35.5-next-1593172009-2bf4674d.0_1593172070804_0.19124075591108536"},"_hasShrinkwrap":false},"1.36.1-next-1593172030-a801d848.0":{"name":"@xdn/core","version":"1.36.1-next-1593172030-a801d848.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593172030-a801d848.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Md3rWE3ZTv+NlMoM687yscxMleAGPRL8FaL8DuXk2WUv4yNIdIvtsktT0oGD7hVifhtu30G2+seaWfjFMCt0tg==","shasum":"ce88171f3f112af7265f7431bfb880d49818a2f5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593172030-a801d848.0.tgz","fileCount":129,"unpackedSize":535679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9eB6CRA9TVsSAnZWagAAaH8P/2I+bSq8c0NHrgRcyznO\nOIBZMcVF1wlFn3sQld6RCvy9kdm8SSoFgTn1CLgtz05uX5HiZ1EgXtnp1ad+\nPKsBXSHgk6z6DWldWjZprqkzCkpWrKvT1wRNlXBRpqB2IOR8tzls3DMeGTE8\nCtqidwrf8m5LmPx3VRyxPjNbCY80AtKPq+rBYGzAle6Ubgxid1dFyfDGiXfk\nIfl6F7pnDdDHZlqNLYBRqTjUlyKCtWtGc7+LJH9NcoW/WLDbyUML74lZRsy+\nDaDr9L5SmPfMqd1DCPZdG0MdaQKbpurIhrGWPjZRe10qDl7wIQ17Ae9F0NOa\n/2WwJGXQ1dEWcadNZ+FTehrJnoLaxKfvyZRf4JIOSRSToePL0zsCVvq6IALG\nHxq0m97rLh95PUOFfMs1DKGkH6xduJh1ZqCI7v2N4ZTNopc2onjPwwQqeFJv\nbXnETymm4ALpKXcYK/FIMyWhksYe9mLVyl6iC/Qq99KpcFOAKnUV5lug3nsC\nmAehn4paio7Qv0MddWjmBb8oTAUFZV3nfErKUdGdHWbnZg3i7G/9inrRIPZI\nZDxCWfrAByl67WykYC9/iv1jMRf17JYCvzfrMzMsQHAGaUDbuqfONhj6B16g\nqKl4k1evvTne8gfPbDEiD5nfL+WroFskQ6bESTA77BsAPblneW5PkxevkMv6\n3u/9\r\n=LFpd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5vevXjNr9W8WB8SAil13K+ywcNKmqLPPHfBS1FRPxEwIhANHRnB4Bb/UOYWP8OiseYzMhFK780j0TUkh8qDzkBx8X"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593172030-a801d848.0_1593172089671_0.39079257961253977"},"_hasShrinkwrap":false},"1.36.0":{"name":"@xdn/core","version":"1.36.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-WTS6wy8m6mGdXbKWyhoVmjmtPPYmOpBnAAUGm0+74rc9gdNfmvlL8C7WP65kXeu4za3qhZwSF/08eV+QlOWsbQ==","shasum":"d7b9d2c25a94da54f5e6c076332d48fd23cb1b2a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.0.tgz","fileCount":129,"unpackedSize":535625,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9eXQCRA9TVsSAnZWagAAZ60P/0T/HGN2HYWw+KGpT0Yy\nBuO1aV/3fpTJNcvA2fYL5tflCGhVt4hjC7j3+eGhKHcvDEdugUIyjk+WCbxt\n3XdmkVc18myxUE7Fgt+WPe+rowlqkcMR5lwtX/LJ0ujGahfKqaMwhL+gBO7i\ndzvnvXeM7DDYLqFjZPNzM4EL95hGRME7h2Lfcmy5P+8hQlTiUm3wdLm1becj\nGeFzC89js2plbETcqzqayyqC8haRG1f3YIelvjkDvjcbWaA5X1XZht3jKHg6\nkbmnTTEJu1pi88JleGiruBq/a/us1tCGQFj6pexu/5Qd64bcMdwDfixYoi1u\njNoa27oKzvVAvC5uawu5n8P3HHtH/2Js2uL6PzkrT4K2qp+EX886lZS18Q+g\ntLq3PoBGn+ZxuWIITQ9Ry2qIvDLEICH1MAJsV6nMqUGzik3W7I7YCnkz9X5s\nAR92PVdNFywcKTn4CxrGT0Qo7x2dVYNS9hkFXtdin6fL4cdIbqIj73KxwY5C\ntoV3PYnaWG70n3JR6KMnnaPXfMT/c2EqRuxU2LW1mrZaydOrTPiIpN7pbhBZ\njK0xJbK/J83nRI4yR3553ROBHpQXzT0G4zLZqd26Qtt/gk8TNrm3gHWB+Eou\nXPOPGIEOIEWc0QgB+B6CO6pzDXy1y1VTX+rDYUdIGGe3dHKyWseq4p82bALz\n8RGj\r\n=1N3V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHGyZxWjcfsoYc+F9LhbIQnRXnnNafd+Dy3HmTvizWZAIgfkxW6M6nVhGb4QNFY6mW8QKE3k4cj+W6FpTFENETWRI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.0_1593173456570_0.9902213465499174"},"_hasShrinkwrap":false},"1.36.1-next-1593184843-51b37031.0":{"name":"@xdn/core","version":"1.36.1-next-1593184843-51b37031.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593184843-51b37031.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-yc4UryIJpp+xisZOC3VneFNBt9nk09ld2HR1WErO7Hg8nzUC51Kx8Rz8vjh/jYglpy6AT2+covvbsmrnwshmCw==","shasum":"c6394596d2820208290ce36edd88cec287309942","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593184843-51b37031.0.tgz","fileCount":129,"unpackedSize":553764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9hLhCRA9TVsSAnZWagAA/NkP/A5lqe77CHCeVXn9U4BJ\nMIIzqppIC1yQD8RuhuWegKdtNAOgrDcUjntTiaW2lgxygxuOIk9NCYzNHjtm\no5DL+Rav1jdn1wgVtd74xy9kY76jvGFrKoO1a/TB9CULtJ9sG5CNE3ztAATn\nqVfYGSLZPrh0kIdQcvUALYFb/kL8JfCihjcIJfQx1pFsRM9fLmTACjaNq4jn\nSGMteCbaxLbYhSmB1PltOR62qFnMPNt/gtePjksJ988nKqGGabrjDGGbIRO6\nn+Y6N19i8ESP2pVjGmw2y3vmILASxHoIyoKDvaevCXNB9jXhEG5BlIDtM46e\nbqafMd5DLFSIwARGp5jKdVTbtZe+QCYS4EQDs7rqfxI+jnGg+C7PN8iPuuHT\nFyZSOJgK4i2ZGZ5M/9fJa7eaXn0k6WsnCCYZl6au/CG7xNALYPm0C1c1wEU9\ndY7ZaikolzJoZnKWldbyuCkgAQk+Er+1GrIIjJ9z3RfUXIIpDGEV+A/y/xRb\njwZsIkQzYPDVrU8oY+u4IKEjI96Q85Oma2oa0Ahz1LRHx8jZVwr7A6VLB/PA\nRJdn7+/oqTjOymt3B9DBMXX+8cPsipNNW23APwxU6XCPOYJ0egMFOe9lTLGd\nehk6lD2+KWZoiGQiE04BEwjYfhmRHwVCTfDYJZKTBd53TJz3231KNQSwIU0l\n/AaH\r\n=gJ9X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXmZcX5VPsmXJhfbn8AW9Unut53QOWvm8KTVHey7SZewIgfwHfRAWWduF3s7nB/QqqW8o5CYMlALAkPI/xdO0nNJ8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593184843-51b37031.0_1593184992612_0.4042747560706954"},"_hasShrinkwrap":false},"1.36.1-next-1593196174-f7ba2714.0":{"name":"@xdn/core","version":"1.36.1-next-1593196174-f7ba2714.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593196174-f7ba2714.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-P9D/BU7eeppEr1RF/J9u/FU0UAx9tgOjIuuuO4TxM5xAYsghz8oFJ/qQro123xpu0nfobxbQArwAOegjgpIjKA==","shasum":"5504ab14efee905dbdbfebb7bec34e5d5757e590","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593196174-f7ba2714.0.tgz","fileCount":129,"unpackedSize":553764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9j85CRA9TVsSAnZWagAAfT0P/jSaWFiDjF0Z26A2kvP5\nWjVu+opFmeCjE2Z0ebHqfZIX6QXhsrM/x//6Sb4FPHIcM53lR8m/zqFnoqkr\nCd3Ff++T46VLbeqUTPpixghyhZKNM43XGLXlGqtGCIUOxIYV0qx75PhpkQEq\ndk7yOWwQH9NSA1YJli5ppmQKHqd1msqV5Vs7/RhBrBHak8zbgwcfvAP9u9r0\n0I2NTbnJATNnKd0/OVTISB8+6DfNGY6JgZkDrL0rNlr2e6NSBdPkQglWivLu\n2Bze/ldeUaU4EiqQWsU8tplAMwA6sRf+aeTR/mpqlPfq5kJAY9pEAOpqSBjK\nQJaJ2h4nliIXf61EGnx5DU+95kdEZjNA53/QuxMy/vraiMKlStu1r9rNFk42\nIX+Y1f921c8Krw5aazO3tZ+h+yz8Pp8tISQ28rYWLgC9RJjs4YTk1ZIcLyGt\nDZbLbQgvmKvlv5sQRFAg+1OSXD74qW1t0ngyWqpX3SLKZhLxq9p0X2i4UP8W\nhLODU1LqwcIp5Ft+/W1ybd0+WOKAf5sS+AZ3XKZiAZ3AOmWZFv+W5hMe3M/Q\ngmnRXX4EasKyPCp/xfb0O4+0rlzzlyAkx3j67hKwHxWB6fnsw4H3EPZuk3+1\nkZLhd+B/5zYmXmEJF0kqbueQqaBQIcDHRZZNeLFqv+mLJKW4CNh1Eg8sdhXt\nQrHK\r\n=OsMa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHYuwG+Z2gk+niE/9vBeobes01lKWN5JxD8iLFBw+q/MAiAV9j8NJZRmvBuA7u5cZ9FZt9K/jalixu49SHuGrBFSHQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593196174-f7ba2714.0_1593196344526_0.7111983587559947"},"_hasShrinkwrap":false},"1.36.1-next-1593197890-f1d237ef.0":{"name":"@xdn/core","version":"1.36.1-next-1593197890-f1d237ef.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593197890-f1d237ef.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Q1ys5vsCcZe9emXhcmRahEB74YjeS+4yAEnje24u8NI355GZXNhFLby9o8o8Ogu2BRPhb2SF2Ta4WDdEibM5rg==","shasum":"f05731ebb263480f237a1c0af89b6f135dca528a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593197890-f1d237ef.0.tgz","fileCount":129,"unpackedSize":553764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9kXjCRA9TVsSAnZWagAAk+gP/20RvBd89BMTIb2WB8gY\nC7PxPFEKXHxxHKhzMFrtY1zAFfRK7c1Jy9rz6vOLKzPLbypY6ViK11hjCo/h\n7pjNeZpu8raVlpfWi1ahWrR6kUtQtr8pCTEly1JX05xP6MElBur5Ny/zICMh\nycKvzDTWmFIQ7xAfYAs2IkKowXTvCBjy0dUMZf66CXdJKuRZ9vo1xEddzR4r\n/RkzEzPk1IYbFqgGomJ/WSL13wYhMLpAAtqBlo7ml3EYSTsu4tV3Qj3bn+5a\nkC+sccZoh0GVEei66jmT+xZmR33P3AakAFI8dXRUIdbBEzu/Uy/wk6+N0IvW\nBzpm0kiIjG7yWzvSwQd8iO0/ZpgyJKQjChLSoMOcP+F2Hzx9vslmhYVMXlOP\n3hXJdAJBk3h+t0fSCOSgznkYxi+XVEb69wMlj+GWZU+NEMN5QP9s1qjYGeRR\nCFSzFwgp8sXzLJqBNVtHqnv81A1JJr/ywnenKX4Cm9P3MB7mGgctoRMC+NfM\nNnQN+fgflFlXaZP7t2605vVSBFSWxnguNOxp5PMoitmsqe44zVk3U7ny6v+0\nzrIJ72uzvXI4ix26YJBwn6T+0soH/U8Z8YjQz34FXEOi7DXr1SpJ+2WP285C\nIzGYR8rNGcVqAm5GYZ96W6d8wzbaL1PMhkmBVE0C410HhW+TfE1+ywQ0kQSJ\nxf4l\r\n=6HtE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBlZ2QR8qSC1Mju75DyBiIE3YSO5ly4qWlodOO/+Wp73AiEA9KqkmIJWB5oUo/20fsHe0XNS8T9kfLGm4JAJZBYdSdk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593197890-f1d237ef.0_1593198051058_0.33250960864667545"},"_hasShrinkwrap":false},"1.36.1-next-1593228055-005c0619.0":{"name":"@xdn/core","version":"1.36.1-next-1593228055-005c0619.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593228055-005c0619.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-h0VseA3G6yxRoUQw2fNgxygtdbYRvkdy1xq8TxzjsQHXnXUr4XhnY/hl7zezHtuC/1dTA464TqPo7EiMgXwqYA==","shasum":"c0f012281fb2a110726fcdbf5bc297e7587b019f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593228055-005c0619.0.tgz","fileCount":129,"unpackedSize":553764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9ru0CRA9TVsSAnZWagAAGlcP/2HW4RHkMAG11vNrQr95\n0B/w5S6GQCfmgzy8YMsQrN15U94dAgDmNRkmKyOATy5YaO71hQ6mvYp+XYmO\nj2YqkZ6sEDJkMv12XKP+rIHAkYBZPJk3jpL9QxFj1dGSiDh76s6vIX2te7KA\nueioEVqqAgaXwMH4nM5vPLgDHRI4J4iI3CKgptsx8BbL+IhHjmDioZLNyEOB\nwPhpN5591/mNr1HnvRX+BCNLs637I6zIo3OMAPVPokvOs36+A4oAM6chXd2x\nQ79oCM7zlRGAGgjJ334F3QORNuYXBfNjwueFRiOBYcm4r/n/a+NyZPXf5fzE\nQR03kULeGjknprkvuXhS+IIlQ7mWnN0Lt/tbD1cc+jjIldnweLXjoYSEqsCN\n95fr24eTd5JKjJrCpPG1tbfbgwy9CSgKEuT4o9QvLmLUuS2DE3mQvI8WUXCh\n9W5MKRcqQw7v6RgZTaxKLxwvCdZiDMQtN733FePuK7q7R4HttKFM8pYF+D3r\n/YJ2d8U3E9YX+pmENHBEjDNsMvRYVufysD82X1FPcHFBcw4nD8WD2S4DUPws\noVWFyCtqPSLdHsQcxIbXnbVE5/bex+vJtAEuOik/IBdgZ+1GhiHtVabn/YpL\nXBhQ8BBFBOggx7LnlEoDd/PruRVW3qyEXSkj8GgyTdOD9sfM9Rt/eHYfDkdB\nFPAw\r\n=uSPX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCskUIBCQUxrZm3XvcO1icKfQgc/UYEXMpC62JwrJM6owIhANKIgUy4pmxAn2/Mv3citFbnbymZc8Wn+ErtZKOpq53T"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593228055-005c0619.0_1593228212366_0.07059129229164962"},"_hasShrinkwrap":false},"1.36.1-next-1593235437-a888e8d6.0":{"name":"@xdn/core","version":"1.36.1-next-1593235437-a888e8d6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593235437-a888e8d6.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Pl/7XFD3YtuMsmMQ3XPxk2ow2pexdM58pUWyIvP5jk+xxrhTRCfz8u2vyqa0ooxUQJArVLpI3i7rMJmtLGzpYA==","shasum":"018ae52a6b6e8f163a5ca185ea362d7a971ebff0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593235437-a888e8d6.0.tgz","fileCount":129,"unpackedSize":553764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9tiUCRA9TVsSAnZWagAAF+cP+wYIkGeOT1nRtS0nhhVn\n6cV4wm7e+FxjW8BozldnNSvxdwYgHlkacVe32VXZYiSKo4tW27MkqJEFA0S8\n85NhjN0mHFbTWHZ36YLoqri2rpDAUUGe8YAlu1bn8vm+2zIE1cCXJmRq1djB\notQ/vGSOwfFbHq3BlU1PnkeYYqTTdotEO5PCklZwFhUCsb0wyeznG5vxecVu\nv1MWga/W4lZX1reHeTU0wR1SIZ0DCeC1rFiEoLV3yoO12HKQU6sjr0s1qf5t\ndfGw9dEwijgoiWVQQ2yB1/OGLftQ2xaYhloTk/ZzTnH968FSBBHn2ePWVL5z\ni+46TQkY20LUQAWs0ExLNSH8bBtKmVJ/v/v6cknytK26rUzmOmay+btLm5Zx\n/y6ptIpaiXpJoF3DhOD1cjdYg4Ldxnk5RkPHgnW3ZnPVv762h1EFcJCVEAO3\nNNz/RA9h5jOSJ8zP/FsvBJbX6YZ4gWlnYF4JHcBWT6tzQfpeK/hvW8U7mF86\nWYjHGZRxDjP2hNiIfSCHY/87ZYbLntSOjNMuFDrhjpg7EWOuliVp4KPEWaPT\nPCcGblpHYuUafjkTtGZFbIPLF9VeuuGQi4rv4MiWnSBMLGbrrIW9AzAuA/t0\nTABtEmBL7xjbUGqmP1uslkF5Pbm6KRxlLbG4OYzhpVPbpAHVjnhACSkxOxMW\nGwEX\r\n=aC/p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVvi/cDPqQN5EtiCQ61efx0uShlkz4+R1LU/tBLiGmXwIhAOS106ly1E12vQ7U23YqxJnLYOa2oUazDmJYxmxwEw2d"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593235437-a888e8d6.0_1593235604391_0.42322294059225696"},"_hasShrinkwrap":false},"1.36.1-next-1593236429-51a1dc55.0":{"name":"@xdn/core","version":"1.36.1-next-1593236429-51a1dc55.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593236429-51a1dc55.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-/xKM9AKH52upg9BbFzyOP6qFHxtpuzPBFLxikRcEeDc4Td9pKYLJ2lHPweS5F4RwoCURzALASex36dAgmRLtVw==","shasum":"2370ed95bf47a9152fce3f9d65e31a4b66df5ecf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593236429-51a1dc55.0.tgz","fileCount":129,"unpackedSize":553764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9txwCRA9TVsSAnZWagAAeo4P/iiZlcuUB0MSbTcXvTzx\nDVjJVHhEk1EYcHDWy+Gpb83YARkQocd+/xIW41mwpbYpEin/aq+FW8lyeqQn\nes4g2MnLl8SR+KxdR+Y4Zm20TK37WRP2+petWE3l8Iq1oeejnmb5mGGWAZ58\nFiBVb6OtQ6Jr0xAJIR/cDi4azcmmo8rCcTAANFyUtJMYZDS0/dB+/FTXCLun\nrzqOpsRwhns/8LUfRAEsUWSsknM2e+KLzoTMc0QKSWS5GwKQqEViE7Fecf6Y\ntdT3b+TwuE6/b4E/eIlDTi4OLpt4ezcut6kKOdnPxhvqhfJEmCZSwt2jhfOV\nYkzFcZ3uwRrOJ7UwNzDSEV/GVo1LTlpW6hWSQs3SQdWSHa9oeVLBizvIzavq\nixhw5rDtWUQZA6xR/cKZMTdJPM4csETwftmqG1e1jQuh3jb+lcSnSxD+mHib\n+67iMuPR49ux9Po9GsbsgZNPYrmu/kVDMHn/pIRzgUhl25t0FrYiF7McAbXs\n87csb5tzgOpeZyOnVK8fd8AdhLxSZFc9NDpEkZImrWXBTJL8beN4H6OnTzKz\nnVXwCKZdTlmaQuPGrYAJ7SR4zxkiWGukNVCL3IGfGWGGuoAwr8KsKm8lopA/\nrSXb+fUSRmvAuj+F521TMO489cBw1tuzeCqANF9TXXbioCzTH75Ao9noI0ut\nVlMj\r\n=yWTu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRqjtd9cLvaDj+cRYDX+KfSPOOgcOW1T/SZ4BghMavbwIhAJe9dk8E5TsK13RS4CH+R3Fn5MmPw1nklcMfME1eaU9o"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593236429-51a1dc55.0_1593236592068_0.33110966446858225"},"_hasShrinkwrap":false},"1.36.1-next-1593431998-aaaa9322.0":{"name":"@xdn/core","version":"1.36.1-next-1593431998-aaaa9322.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593431998-aaaa9322.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-3LdeX6SvepGrpkTkY+szad8cDOVc5Nk/onN6qsKRcr6mvQtU8kvxqvHBBCWc1oHTjF7LI96t7mVhKIl5E+75Fw==","shasum":"c210cc0c134218d4673c713b6546db8fc97245fc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593431998-aaaa9322.0.tgz","fileCount":129,"unpackedSize":553764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+dhaCRA9TVsSAnZWagAATJYP/A9rnj1xTT0R0mGk/sKM\nhsVz+paKFmY439OjRSPzLhWfnW78BXbDGp6Bymgl3uMUyenvD2Vcufk88cpp\nAaj8ou8jN0j5+5LcMA8XZYldbb6XXRofiR2H7IE2XBBA4w237uzqOy0LEvSd\nzDoY8qMZpZnBs3+pI78gmwTyJQBSqFSY+WeZjS4kwsQb65Gog5zDmpR1D1rp\n/LYT49Cib8QS3FTql+qeOQ/QFqpf5Wm91b9O23yU2HwBGrEzMx+NRMVxCYln\nBbCT+Za5gFIHcavafyYMKqnwQ6WdsDDLMGx218q6t0gncrbixs6JAbF9hQeQ\nDsVQpvybpfix+JyE/7HWeZyeIfjxxTq0te4LIIlHn1bTJiAZGK19+inB5o1L\nPfdSvzoC9JrQpnAaywaDfH1ayuXC7SAaW+Wl0QJOOn+IP+THWx0jO8cI39ru\nh6gLWDm2QYbmKiVToJ0dnpcZX1GmZqW96mfLvaemG40UkxGJCXQVKoX+msdl\nH4+QN98kij8IAoD2xSh18QtDPkS4CwTV/Pdq0xu8uz+9HlCqvoQYhlvC7mBA\nrRbBu4urdOsO6FhkzuAL9bvgqtHevdk07DnLjUeyVlHqAU1J72RTwCZ3dK4x\nX08Ipg92RcLudiy06PU4U93sggqNyNLCaemldwf1sQgctLwpoXAvR/YQ/ff2\nog+w\r\n=MIhN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEqFWUfYfymctx2Nt7QBVxkIoDt8WDyuFOYbPsMZxoCgIgCnviz0HZosEjsgoPt9FO9OyFYwVRXtV/UujmxrNhccI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593431998-aaaa9322.0_1593432153981_0.6708287841918892"},"_hasShrinkwrap":false},"1.36.1-next-1593433296-6c43e818.0":{"name":"@xdn/core","version":"1.36.1-next-1593433296-6c43e818.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593433296-6c43e818.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-hYMYTLiyZFhE7AXwdD2OR2KlUMFVeQh0LeIu9yoLjTg3icXSM4Vd/xQ7Uri5jsCOLLe5mVUgR33V6xeT++3Qrw==","shasum":"78f3cf9accb6ce072f888112b5647aecc032853a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593433296-6c43e818.0.tgz","fileCount":129,"unpackedSize":553946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+d1/CRA9TVsSAnZWagAAQFEP/jXInJfz9msSAOyi2g1E\nSI6hgIFPNP3zxyW92THyVy7SSSHUJg5xllrdErSgeG9qqKc2iGhXTmlGbTiy\nGlu/M6Yd6b9aneNOwdqo3GwsEEwnhMU/c3BLTi4zJPJuGYj30Ka7B0wrcHBr\nJ7KGrPvckOPJ2CVz4ru5kmT2WYodxLeIqSs82DxO3w9woE9QeW01Dmrf4T/E\nhYNLvDM6IpKrDedt1WsY11UkCP/jgLc6XBev7gOFyEITQ0nbYceiNusfToR4\nNrdQZ6HdaI1Ij0wOfdbjEnqsTaWmEPAo3s7tmczKVq/dJT0b9OJ4IkfMxgnc\nAThUp2VW74DHQBKIHgPf0nKGTioAY7qEPT0tLntcw8Vwc/DkC9OVE58Flccg\n1yTotFIvKxJMHxLlLluURS4l3sFk/WsHTaxNJq6AxQLGXJu6lTc/VdnCICzq\nro6uUIshSGvYMiEaZHpEfpxGRkWucsmgehfKl1IhnxUUIA03xphqfDs6vXVc\nK21WqODjUasUiWExvamctyyrClXLfTzEg1DmCPxKPGQPKkhx0poz8qlPRkj8\naJa7e6tNYxjmP7orEDRmnvnwZiEsuJbClPwTcyBSsXGxZg8+I9eJkLBGD98S\nhb9BcZ659zLu3IiNEU7EwJPehnWRznyEv8H5mbj7tCKUCzKXN9zdv8ZnPveg\nrL2o\r\n=hVkn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGyrdYhRPtzHxhL0upmkQ1MpMJ16s6OiPAceMaaMjYkwAiEAgH9PH4Elp7EStdM87Lf0pntJ9d7MscI88fv6xdQ8GqA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593433296-6c43e818.0_1593433471094_0.6351825814416956"},"_hasShrinkwrap":false},"1.36.1-next-1593441245-06d0ffe1.0":{"name":"@xdn/core","version":"1.36.1-next-1593441245-06d0ffe1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593441245-06d0ffe1.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-9ofw+QmKwUgJS+Ey2BlyLHivt368tjFJ0Bu4g9i0CbIGXA88xid3zUqP9+MjUIrtOwtjBjEomhz+9dIC7hGlKQ==","shasum":"a176ca2f1d87992822f572f5df6c8bad88955140","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593441245-06d0ffe1.0.tgz","fileCount":129,"unpackedSize":553948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+fynCRA9TVsSAnZWagAAOKkQAJJU3hWTKJoWW0LGbHx2\n1fyTAXO7XIV6c45Su0jGhvBjfbs5HNE24Kjuobpwmtn3ZiAfT9jr6gQUObAJ\nHIPuBo5hV+NAHVSoeqRnb0QR2JLLa/pu0j5fFEL1GkZK0aQY4tJwK8xWjrax\n6FWC7uF+IwKxGVQZj5yFeER05d3CJZZXdn7wD71+k/KTGR8O9FYMUpqWKp+E\nPpcvBSCx/teVDvWRheElBieNrpvARtmvX+wl6dUuAU6YeWvMHp4tHKWjTtrL\nsZCdLwC9uQJpn4Vi+o+e4QIvrdJRyNyc1LCwTZKC4mCXMNKbRCtwihKPoeBT\n61N1T34/q9fK2ZqrJfAdxi1NgmgQbu5Ld/VoH+S6zpUGjgtJzEWMqvKW+pPZ\n9PIs5xHfiNsyQD3/Xi877aNStifrEmE9j/ucsJoj7Ynwcl3uLuWUQuB3CfRY\nmGc6QAuTNebpqPyaP3wniiiKB2hBt85DFhEi2Rc45wiUGh+nCg3J0zro7Hxs\nlIgFp9sRwsVPa/rxuAYiR/QzRx1LUVCNw5NDVl9koZgtU0sUMmubc1krcCYk\nunMaSwMNbLdtURlLukwfWrLDVSg9biKPPXW6xUBiCdTxUdAT83WQB315AE6o\nSURMOulQ0xC3YUdtsZDjKzDydw9O/vY5p2GM6c0hiHPhyDOyyzbIVivL8WIa\n1SK2\r\n=Zqlz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZegG1gGJByG5+/0FzSPWBptk0nBjOBqP0hdFoRPTpEgIgJDmP7ci/aabDkuXgCG1dFujUpSmx+eZOPOrusdWarZY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593441245-06d0ffe1.0_1593441446844_0.6447059170453691"},"_hasShrinkwrap":false},"1.36.1-next-1593441744-b471c351.0":{"name":"@xdn/core","version":"1.36.1-next-1593441744-b471c351.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593441744-b471c351.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-HmEDCadzk54r6YiQkkT9h2AbwHTqFZPFmGNbHlUh8FjV8lX/BMgB7eNHdt4ZEUTxy7a79cvMP6YNVNRkNjklog==","shasum":"9d34ed60f4206ae3395ef596de48f3c2dbb610b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593441744-b471c351.0.tgz","fileCount":129,"unpackedSize":553948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+f5pCRA9TVsSAnZWagAAPosP/jHH75P1CscQkft3Kx8L\nrIylZkluQ3YNBjSdehjssxhD8b5DrTdnFY2uCF00Pjvd0VyMkosa4RkZwVQx\n/+SUKowGtMth/caIfVjo288ENUwevxfS4/+Q6u+OxXJzm45CFD3Z30cs0+FM\nDTndlrx0ylAVBgfsQI8TgOxNVV9NRaHG7SFUQD1ELt1Y/1x4XIPTiUc5UC2p\n7XoWbrFzuZUg/jtLkJ0BIG27ND+q6NnPIe0EB2BPJLSI678QzdFGeGj7jqLB\nP4BgjoDZ6lbAdUCnoyWB7EW1M546NbxKqiKJNqFqpMJMse53JrX+Ni53QtOJ\ntQ0A4lX+TsjEvPhUWW39fMlhkojSVu9ySjxzT3FEiGccv7CcvJ7Ds9aPTR82\nmln1EQukFhg3M/1rcqbWEgCMncSAK2Lf827nJTlodT/lQhJQUP76k12POiqT\nru1uK623thxS7U5i6AH8GIZFtlPWQ9BXKAUvksuihYK1FHjiSTIbVVpoMYn8\nIyJUHoGFlmZBYKz/FL/b6B0Ey2z6/Uk7gSxk0eOYzG5m2NPefG9dckOSUaSu\nJoiioqA78sOCAinXLvdQ0s4FwvVVsEAVJYPsd2szmOwZx0zL/yigoGwVwKLD\nP0nKlSwXql/7r3QCbGfA/tSuRw7CWctOqKhGWIxIKAiosEYi/BSJrD0RGe/U\n//KX\r\n=QUnH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAhblZKSATMktHK2dyzJD7efVZf3REe7RZBksw7M4hApAiBmJQKx0cmCLEyxSdVOhU1T/p/n2o2AiA7eifcJPi5xgQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593441744-b471c351.0_1593441896808_0.7785815045767495"},"_hasShrinkwrap":false},"1.36.1-next-1593443432-deedac67.0":{"name":"@xdn/core","version":"1.36.1-next-1593443432-deedac67.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593443432-deedac67.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-5cGXQrHyrceA6FNji5ioXHvQEFuwV6w3IZgyG/aKvWDJK5nq2V0pamlB2K0rApI/NsEGa86/vFgRKLd0MFnHEg==","shasum":"f4991482486c5f0e5f287dda9a348eed7557aecd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593443432-deedac67.0.tgz","fileCount":129,"unpackedSize":553948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+gUICRA9TVsSAnZWagAAdrsP/RgsbfSKFc9qCAA6sA3t\n5RdyLTGUt55EoXs5sAaZgzxAEH/ExoogwiGMKnP18XLtwTejoYUq5Krqx44C\nJpYvRTDNC5/y5kstoVQUmOQ5/CmaCV5blo+oIbJSmZNdUQE8tV+Rnyv8N9ae\nPTnwQYpxET3x+ViDx4BA4ED4sIKnf6M5UxdsxsfWybSJMSLM40LMD2oXmvkw\nVO8DvAL92iDmjONXmYs0WwRk0MuuEzmPkwujKjSUS7f8ug4y2IE0k54Bd1DW\nVLt/Qp0lJEtoLB56yOA8ybIbm73IzYlyhuhbmgWyjA9F7MOlebUU860o2cW/\nhHq8ecFfzzxLY0WgAQgzW8wx8f0VH8xbQ/XwFk02/TA2bmr1DTut/exre8HZ\n0mU7tir1veDC++aMLfqIgzwTjoNkwzQzTxCkrM0No0apFthSfwwpuXmiFV3V\nIAfHmmygRZfko5v6lh4ZtzsakPox0vux0S20KrfLkZME2J9VKf2P3gfXEJBt\nNGgcP92H4mlgjQqP2oYG+OG94GEL/nlcQtqO6qWHQ4TorKWsjnxUPw1Z3x6w\nnZozDPLRze4hcTkKzQB0M8rPvt2FN3sAPMSgnGHP/yGdEKN62zlD+FL0rSjE\n8NLbHL/qtJmpvktGIuRQWod991M8Z45ZoNNqnupXIcsbPsvcgel0MIMWvAc7\nR4TA\r\n=20VX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7M2Ur/TDyhkSvIgCU7R34Lrm4PxrjszIEmUh4RCtUwwIhAMS2pTKDdta56moV5Ewy6f6fAmOhgWTjVDyYqQ28I1W1"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593443432-deedac67.0_1593443592192_0.7784348206138323"},"_hasShrinkwrap":false},"1.36.1-next-1593444146-e57c9734.0":{"name":"@xdn/core","version":"1.36.1-next-1593444146-e57c9734.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.36.1-next-1593444146-e57c9734.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-wbeFCDr5kCK2lZvLHDVrHi0n1lPL11rzFO4slWtGPhVYG2SIv8YjERufxigbxDJKHKqTJIWAIsnoIeD+SSBI/Q==","shasum":"9deca918307de709348e0e8e8feffb373c255193","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.36.1-next-1593444146-e57c9734.0.tgz","fileCount":129,"unpackedSize":553948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+gfnCRA9TVsSAnZWagAAfWYP+wdY2to0ToMg42a107L1\njqEmFjlkP8TfAH33Gklw1QxMQIMV1wrGXHx2MswQ84KO/FHtHjx9mCVJfJgn\ndFjp5KDtxtSC5QHX+uBF17r/IgpD/3K42M88QPJCEYN6WsBCSEgGx1Cek0SA\nP/inYG/3vz0r++U8PPokEIfeFqeBHHetuMVBOu6EREYifKRXLvR8SHU5M3sW\nt2JuCf9AwC2J93MPpf1a8E9CpHkRe5usewlopuXr0SMX0/vfNkR+I5i0OXj9\nP2wffGcRIQDyaR8V3ZRSZBAv3fC21sYqsfxk6k/j2+J/V0OvXGBHD6TFAv0L\nAQLEtFB+HIydOoNPNJQW/4m+9CsxafXMu/nW1Ax4m9Jvg4stNm7wP+xFmLSH\nbsu8Mm9gzu5DI2aSIGbSeDuPQHN0aPCSgdsqfhI2proRwpAdpLzS1/vfEwJ1\nV5LdhlIH5+T622KDCGRe7TPXCI3JQRIWbX1I9JFsLUMvaJptr3CnyoeItOJQ\n5DpJws12woitImLVRRkVahDiqQzBgM0ZjMbZJUIHYyBRwzPXOpeKQ4EwG/wF\n6yyBnz+r015SKWWEyPwqDPY4LV3maNgFmcguLYYwra2+vVvkN2OhwsFGsJ+Q\nq3SJ3gtROXuSFEudUij+y1oJp3AL/yfPWOJJRi3mhvEgBh3scccleLXmIUtd\nnKFm\r\n=xpHO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFL2xHJNRiy6ac08OhvI9WlCC82NefWRoLEuk7zZNDrpAiAKf091oncaqKLe1C1LqSto7AD/7b2bXuBP8+n9tY8heQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.36.1-next-1593444146-e57c9734.0_1593444326803_0.5719332079953161"},"_hasShrinkwrap":false},"1.37.1-next-1593444160-67f3495a.0":{"name":"@xdn/core","version":"1.37.1-next-1593444160-67f3495a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.1-next-1593444160-67f3495a.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-3pE4jzSFtENTkf1G9AD0RoRhH/rz8rW+LlPxYEsDl1c/UfBV8R8cALl6IZe2BRc82Y20A9jewRStzuUTNXlDxQ==","shasum":"1224cf3d2835239eebd15d58f02645d1fd95779a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.1-next-1593444160-67f3495a.0.tgz","fileCount":129,"unpackedSize":553948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+ggFCRA9TVsSAnZWagAAcs8P/3jmN9msggfM9KigzkBw\nMeLKGX9+KeHLxptjSF81dUPH9f+JQXOfuyFXC1vOAveQeWkTxBzSaBX0I5nI\nrdQckqbONpmE5rQ3pElWtJ0V0L1jkASosf05CWBKBMUUFmhFrqe52bemdu93\n9a3xzQcTDfvf9eSd7YPIj53TMRwWK+hgG3TpRUl+B2PWNx32uZ7kUbwBkxnJ\no0IJEluoSm49POB9lkzAQpW1oVXEERMxz+KHVpdPJHCuG/3qvuDnrGLx2pZg\nxY2wSSfltDwFElLIEEjXnM0VgdVesK9uL4b++GNk3Aj8+HbBqyPf8DADl/VW\nKj5ZEvtEX0ECdhcBW/nG5JGh8oZ5dvYLWZ7NNh9QhSzJhKY0//pCToz7aW6Y\nQdYSoPZ74A8EVXtaBwq3bjv3LqwCl0g1lg9uV6nhDbIezYhmq6bZ4HXgEf47\n81z8v5hv1ouDP7FbtuO4+xAmkCBgt/BhGcP551hA3MjLNjRVgJ+NV5/oyS+u\nqUbEOVOlcvPL0wZ1eypNvj+ZkymG8Q+4kY6tKXvVlg1hB6H+O8ux+GAiWgr6\nDJ4fN1xbUDt6unsgv8VrwhMoU0tX6ZAm2fazmkObB/UV1dCc+2mLMHzpqLyR\ntVwi1RbSndiQvhKNcGFz2ohH27Pg+RSu1KVv9nZOKLrixvcDx/2xK7wnAesa\nyMth\r\n=drLP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGvntXQX2SeEgKhbAG/tQqcHFvy3Epc3sm4Sl43WPv0cAiAdQiRhPkGKDpx2ORkx+J38ViF4A3OLOiCVvIGJWQmThg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.1-next-1593444160-67f3495a.0_1593444356757_0.18986923172561299"},"_hasShrinkwrap":false},"1.37.0":{"name":"@xdn/core","version":"1.37.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-30jnFakeo/ybnvNE7QMPxWYtwMq4cDJuMJ4/elyt39xwSq2/ONtQ8W4Cst97shSew7B/11lD8XXnaEdHlAdLwA==","shasum":"4474e12894814de7e6e6046da9864ceef0960162","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.0.tgz","fileCount":129,"unpackedSize":553894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+gm8CRA9TVsSAnZWagAAj/EP/2VET2ETODLSqy5o4ZVz\nSEY2MBGI9XXOYvoC18XdhB3YoUYkkW+OufqW4pTRdtGD0mYLWih1HKjBZWSN\n3xrtb/rLrhJxQVzwi6V1dvCBfb4hPu2QIBErtnmbvzVjKyfQq51A16rDloRl\n07jWOZLzAnV4um75NWRsP/Tfpp2PdKn7hrMPDr5CgV+StaMITJ9xJBHZpl4W\nut173224mSOD4xGnratPywJkYlx/nc6zxE/fZhsTcNwtVaNAGJec3RyRYEfP\n5h7bvYoyt4qJ6M7zolPo36b9SrJHja5WJUdE5pipfvM8m03+Ue6JexNBmLYk\nrNnnyyFwo+I/c21u9+tGBT8l/ObAXslry/iYcGk9f61YFLgNeD/QY81HwHh8\ncEIisL1ugKXpR8IOF/2ie75DoE1gj9Wujw5NKyhSbNWEfXwhIih+b/0t8Mt4\nJ59EKXuqJ2NqFCPUnDBzF+k2e+8EiDVF/csep1j8bMkiCjbEEBT79R9bhEXP\nW+kjwdjItWDUucId16ZvZeaTPki15gtCiapIiwyCqKy2G+VgHtwh2QGG0llU\n0UfNQTqCQT1PB0Pdu2gNjO98nAhzl27JQtPWHrfzP1cssFmV1ptDP7C7LgIs\narJs+IW5+4Is5hjwa1GuwqH+QkgjWTfZmN5SGn2hvWI42q+ypQYMrQArARQW\nmfag\r\n=aSHn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEtL1JYLuGM3KBO4VZKfJ6vpLeBuLUMOPbTTzbnKHFLgAiA/fzmdRLnAsRcL44VxYVSaO2fVzWRd1w/b/dlDb4MBAg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.0_1593444796124_0.7244206564077447"},"_hasShrinkwrap":false},"1.37.1-next-1593527079-fd512ae5.0":{"name":"@xdn/core","version":"1.37.1-next-1593527079-fd512ae5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.1-next-1593527079-fd512ae5.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-HDrlr1NGcLL2xQYFcN5WsVlBdyd/wbs4325H0GIMTFRENIMfaClvztyvL+6YvwoEvao9CqBI/zMGINRFd05Fig==","shasum":"4ca2b34ec593e8a7280a09a1970de424466d3f4a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.1-next-1593527079-fd512ae5.0.tgz","fileCount":129,"unpackedSize":553948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+0vOCRA9TVsSAnZWagAAJYIQAIGfKy82Kxn/A1J+6v7H\nNNbG8Clp/MCzfZQogvpDmnzYtORdbi9sXvNdq87o4mubSzG2kYDtq/3S3FGD\ncp79qQBcCqF2MUi8GbY+0zHUkEjAjIKPFCIICnD66xW1WxYZBfkFkioElKGd\numOBYhBOOJP9bwi56d67rIFO20x/YWQ8vufnaZ9D+0JfUuCscRT/HK8qvpWN\nnYYcYs/mgYht4CD3gvjH0KmtOyvLGZ9LUcFNmRuyvf+fsLz0HjU/ZjfHwgCN\na0LwW2hLt6J3htXgl5hWCDD/gPT89SVuEFBouiJsqL50rJq9bEUAMv6ztcrX\n4eSmp85RI794H8O/+oKExjAvSO5njh+/Nn9QvSGmKmqdzSmJ5Ml8IoINmnr3\nHC1dft9MSHZRwadPane80OMHlSqGW7yaEkLmhU7nwR2rFnVC2SOVzb8L7/Oa\nwwX5qanJPGZy2q4x+uUdqGV5NZrtICCoHxVcXZpzkokZQS8k63ggM3y61N58\nzoVoUb4Z7xpjPVY6OrO+tX/sYO3AWtuvJhZCWbCqK6wEc70RPhR5cN+2uh4Y\nktz3YIxNHCZL5VyDcIDBjePoVBxK5Iqo1Ogu/UBlON0FMj/2izh1dyvtLkO4\ng6up5drvp2ttlHlgnK8dOh9bUv7LPYjbnz/WSE21RKTi5so4+Y0guFD1/QZI\npnqv\r\n=CvKA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZiGdGmOZFmF0MdltZ15ev4sY9005WsQnVhlLZd+MZ8AiEAxOgEdHX4c/QV9cR4vrIfNMO2ObGWFWgAL8ycI/ZgQKQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.1-next-1593527079-fd512ae5.0_1593527246016_0.48008395946483184"},"_hasShrinkwrap":false},"1.37.1-next-1594032190-b01bdd5a.0":{"name":"@xdn/core","version":"1.37.1-next-1594032190-b01bdd5a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.1-next-1594032190-b01bdd5a.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-r4jY17Mrsf49js9Tl+nchtf0fI2MSkZUndTdyq9Qm3edjhTUqBB4gbKryM8myMRO7vE2ux8+Sd7Mozj0KO6k0g==","shasum":"a42916479d1ffe8a4dcefb56bfd19ffabc91a167","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.1-next-1594032190-b01bdd5a.0.tgz","fileCount":129,"unpackedSize":554457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfAwDoCRA9TVsSAnZWagAAtyEP/j7Ic83t4rZZkZdyW4cZ\n13TYzw7S8AOrY/nJNkiFQVXeOuEapZbclXOFXaExXKQ4O15RUHwJo/uoxa+e\nLr4/OKnJaTfOdiFw04ot+qPcxxj4kmoZBGtKbIH7+gZMD3RZAmhVI3/3aicn\n2bAMI8jMl8D2f8qTjwtGy52q9IA51lcM9pCqnzgluNFwGDV39eS7ZgYE/IPF\nHCkTu9EBYFRAxokoTxAIYflVdQ9FDvTJqD/EyZGuJ2aWaNj+aputSFGeccA3\n2nrQAxFeVlyrvrVshXjKjuVtNCweqpgYP8MHgH9MLKMwzoYsQWYHGMLCTB/P\nYnuuH8rwJsWXaskwGwgAfYq0oajNm7Q93UvtNj7x+w4gUmKjivjIggTvCrBQ\niF57q8PL31GJMTTPAP2lfSSadQBJAe0DntGTS2VmesUcZt1svEnfeTGDPBtq\n8m7OPs51cYIN3nJUYwturOU7k+X/tpGH+Vkjc9KXDqeigs6zAEzRfWWE8E8f\nC5tRBAxAb7fAEoQPZvqO6vzBxyVgUQHUZKRRYtZbDYTfJo1nEgPucLMxQhtk\n3+52F9wAIrbkLOWaGL0Vlt+1kigZN2SOnuDvTct+7wG9wXY6gD2UyWRfNmb8\n1MlELTnIh4TAAf025s1lx0gIlM219ETUUJJN9oTM8kn7T9RqTEYz0zMM2fVf\ns+BL\r\n=vbyB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDGr6dhGmRnSpzuxE4xaRqP53CcNlRNXInLRITkcp9m2AiByhgQXkU2a3r1ptgxoN+icYRHOabF5qIbFVSwFvpBKiQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.1-next-1594032190-b01bdd5a.0_1594032360309_0.20831534359245563"},"_hasShrinkwrap":false},"2.0.0-alpha.0":{"name":"@xdn/core","version":"2.0.0-alpha.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@2.0.0-alpha.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-I520+Gm6ruIDD4unKeemZ1RozpOb4j+NEz8rK4YdXenPFlGle3WUoFtJJtaipzASOAu1Jp8YZbceoo7gUMVexQ==","shasum":"cf57f422cb33b7e4db7776368f9d08e6eb4458f4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.0-alpha.0.tgz","fileCount":127,"unpackedSize":553011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfAw6LCRA9TVsSAnZWagAAWHMP/jvv0hxc4IiFEGAbilTj\nNYaXiPVhJRwoGcenkeLJJHiDAI1X/offkQZM9AQ18PnOoVUFASnPX+R7fzsv\n8BAaYho0eczj5vwGlp+geVTKpZNgGp9R4mC4NTerlbqTjU6Q/vkIW3cFxnum\n8MsXrloA96/lo1P/RChUtYa7zfk5pQlzTS6pKPXQh+/JFoeROWxgBdx0U0Ky\n9ogbqh3exoO6cgDiLudN3kR0LR/ta6gY/Lu/fs4eCgEcd7k1Kykwcohf8WwL\nZXlG3EXB/1NLDazVcKPodeg9XGangwi9r0X+cwNg7NPvfcK8RAg06ltslNSG\nhtewgQFrxz40NCXyTRk6g6m6OUD/rzCOpUwUpk1qdxAIX/wNeSI66wiONjb4\nnT7hd+dJN/uHrNBYH6bsyrGpFflI3GLZtimOsMhpFT1lbAEd9Egj0wk1QqvK\nTDwbssVtqvJnWsew2NlBXF+tZAMsbhiyP5hs+jwbchRN5p95kQGCsNTEZFYN\nFlApE+b8Q/dtibeqwy+FdHgrdcSAiF/+NwihfQxSSs+4UzhZOAB39UPZTgGx\n1vlQVsB87U+CCfUKgiBmAAQaRQz4W5eM1VTPH/HtJ2meDgzwA7fjBDHTWELc\njAOiWNhgHwNzsWEHspL3I+lcdKacnqsWIRFmdi7RUErYwnocek7KrOFP3ImW\noKyV\r\n=T15w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPM8nBbr/DOU+l6NpgImILRrTwchMMSASAGjlQx0rpJQIhAPVwYyiOCjF5GHWW8ziS1VvqizKE4lX1E8VhsijFR795"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.0-alpha.0_1594035851189_0.5237444471852539"},"_hasShrinkwrap":false},"1.37.1-next-1594042055-f7fb2c43.0":{"name":"@xdn/core","version":"1.37.1-next-1594042055-f7fb2c43.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.1-next-1594042055-f7fb2c43.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-zNXbdQ0fJTDLWCGuR6ftpbAnQBgbd71NCPIy6i1Cfxxv7yZNLTDKyd2qiR2ThL1akJUtn7yFhDKCBjUGmQrRNg==","shasum":"59c33e4ea2dbb8e4e392d0b1c0916bbf17305db2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.1-next-1594042055-f7fb2c43.0.tgz","fileCount":129,"unpackedSize":554457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfAydsCRA9TVsSAnZWagAAqIAP/3DNzG9dnkv5cufFs5SI\npR+zvKjFlSMiyS3pbkV8jRSsiKoNdRzCRCUPNKxgJMCF12Dl6yOfreVm8r0i\nN/PAGwgb23lWnIVXq1tMsQyHEGRbGKcYyE9nUtFa/Cnhikw4WcwJr0ufPB9+\nn253NYKDAc6lkOm1saLLCHs2pvtGW6ceRkTRVpf0HEVkXgt/59IpWHbLpkjj\n2Y2hCRFkHg2VRfFPjdz1ZYreiq0UNh1/x3qc1c045cgKtJHNvVATUZXca1Pu\n+waEEC3o4IycVRY2lYMCOED4fUgYMKN+46nuQAkdq4alOIeccXYSTQEGifkI\nXAvGLrMwpWAR0GIs18oqvAJxFNZrhVUTmG29/yVmn8MSPtOHwH55WcJfF8sj\n2fnLUKM8jMTpnQK4WI0/CqrlOketJOlPSZ9mnfJaa7lI9vgMGpnb8iwg8Y08\n3ug2qrEDW5P+yS75AxQisBTA3f+2ZWeAleaNPnDX3myWeI/3yiRgyEizSZXt\nSpEn16mMsjklfDFBjnxHGjT1L5eIx91SRiLA+JRnlx8cRTXs72JiQ8z6QFTU\nVFHlMqJTwRgbnU5a7UGWPqfMLK54+B66xOhXCmz4g0RJBRJWBgsaTIkjMJhO\n970jshjrakN/7gOdQM38f9+zvNHlZUgltiof32Mn5eVl0BAvfpE+AkDXmgzU\nlBOQ\r\n=ghBk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHs9h6cRv6o/XHYJ2LQ4c7ig97TG1InZOdvq1PktHHIQAiEAlxxNiOqV2wn7STFe3k6iuEg9g8E1Td0BKj25jDjzK4M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.1-next-1594042055-f7fb2c43.0_1594042220127_0.7913651152204442"},"_hasShrinkwrap":false},"1.37.1-next-1594042844-211acf27.0":{"name":"@xdn/core","version":"1.37.1-next-1594042844-211acf27.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.1-next-1594042844-211acf27.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-skQ3Vq5kb5vsdVOhVEfFjXFWEBki9jKncbo3odqfyX3KWRzMbwJfKZtDRR0tvxGUoWUIRPty2VEEp4r6FDhtHw==","shasum":"690a44ed001678bfbb1fc11f145f638f9a876c8d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.1-next-1594042844-211acf27.0.tgz","fileCount":129,"unpackedSize":553948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfAyp9CRA9TVsSAnZWagAANcYP+QBdUSWBYPJpFsW9Wt8W\n77NkGnEQ1ZSBEopoB/x7ZghqU3oF99Z77Nl+LXlGUNbcaayxKWQ1bNNl/Y2E\nLmIAV8TBfQ8Xbo+kAcvtCxKRYvtvAcocuql/LJ1Z6Zw5/es7nvimmY1RYf/o\nwpIuuE1v6d+04JAF7dk2xRebz4Jil4ipmPGmwVhB9VdTRnjLk6EYeUN6/CEg\ndoYwdyGcQbd2TVqEpj0JH68UgX53ojXHytrkCfdovQIm9gOKjc5Q9Y1n6Ov/\nHC7zpdWlmiSd95fK8wjdjtdLQSIbOqB+YTslYCDq+MaICCoaBE0n7FB1rNir\nPzM0XKXvNPtDfDpC2F/TzfUiyqCrNAXLpJwPpjsMGx3RN/au3sPgu84vblx1\ny0UOMdIzwClITEYYUsx279TUn0MjmjhoW7Qyzl2tiM9cBcnq/5IfaJyzf8WE\npQOeHO+YNgFqa90D4OCQkI+91mAxXCo+CUUMQ6jZj9jlHaYlumHt5/Mtv0Eh\nXnlWF4XM3tW6iS65bjHobR1YgOr8jByu56dXNpfBDUbHUSBQmnV3dG3xPlzM\nlT0HELMCp59CdQ8fx0dfiy6aZtwkzJ4WImcmfV5HqlQZ6Ykjut8+OZ5TnMFJ\ndb0UQltzBot6Uk9sBzLhgYPM/IeEfKh1dH1HrwYQ7qB3Nzb+nrPxvrdZh9M0\n4Byf\r\n=qV2O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEb2moa9xcY9tBPJwuJQddhcDE7kB5GN31sS1IUqEfCgAiEAyuWsOyskLUfLL42AfhXQPOPDAhISFyoVjuwzhXNn/CY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.1-next-1594042844-211acf27.0_1594043005175_0.4922485118458917"},"_hasShrinkwrap":false},"1.37.2-next-1594042958-931b56e8.0":{"name":"@xdn/core","version":"1.37.2-next-1594042958-931b56e8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.2-next-1594042958-931b56e8.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-3RgX9Vi7hOvEClOuEakQ6zHKZ0o/d9hu4KYSni+LZKvTluCpN2n8jrE+6/7zOyT/pNSKzTjVIL/qEHg/K4lPaA==","shasum":"4ec0d24cbd2909ee20a42bb1c726e0ae82492246","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.2-next-1594042958-931b56e8.0.tgz","fileCount":129,"unpackedSize":553948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfAyr/CRA9TVsSAnZWagAAJGYP/10t2GXIdrWs3I83vdAL\nD/dPQLyceU47YDCvyVJmncaz7HzHm8zsbGViWIeBILcVQt+3oClJlglxshuQ\n9WUQQ1TedKzcg6lqN3VOZso1FYbNlXhh30Bkxxcj5eUWwVtT4nk7kz3GSKVi\nSzttXsJc4WG7KpfNpO3itC0gJUcFXdsAFRJI0OKaM9n8PWsV8pLSAVUQLkH/\nbzEmIhv417cwAkIyh+asf+ZY6yEWwA5T/ZStjzNAZ0HpP1TvBPOoXzi82jbj\nI5Xkm/yajYPODm6c4JMzP39/t+7yTBpYOp+/7G1DxPRyvo319gIG/XXZBQhs\n/U5jcIsDxkKes1iPrC3lrW20Ko2OfdM425my6oGLBplAFM+s6MSxbqJbKGm1\n+cyEU4y+ASYSHxakfG0RQgJ2NzFcbBZvupej9YkoXqefEokdTMx/QNQPAhzp\nnUmEYYu6H+NnOQqH8KdIYhU1Np9HnsXcMdQ8nymmqAB0mhEVvT75iUxlXc90\nKTDZmleifHxLUcl7r9HZo2sDTiKURcnK22KSUuQ4G50e06/oXqDBKHuCJ/lx\nNicQ6XCEm5HFUIGgZqgc2CWjOOwMqSxawb5OpII+UlxisWLCmDhsI1vkzzrh\nQm2PwTas1g+0Qb+hiIH5NBwdUecE4eTuRhTr8QUHI+isBxaKz5g3MoyPijjS\nDxGA\r\n=Dk5H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIES+8QhASEVjTmQpS7CBqHWVFNIwucEcBSKc4aMvLzsbAiAUOTuqr6HBEGH4t5JsHrGmj6oKFEENTjLr7+xOSbI0kA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.2-next-1594042958-931b56e8.0_1594043134840_0.8963941617745783"},"_hasShrinkwrap":false},"1.37.1":{"name":"@xdn/core","version":"1.37.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.1","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-HSNufMNhUeaw7SP+eUs5EhiCejaIZlZktEelUoPM9lsZjEBapz5xqFzplX6Kb03U1Z3/CJmtZaFTMR25zQCfHg==","shasum":"d0a9cc6fb47e2f1a37caec33f68b164224928bec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.1.tgz","fileCount":129,"unpackedSize":553894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfAyt9CRA9TVsSAnZWagAABBQP/3VNfOWy7+OBaoe4h4rb\n2ZdaGbFiAlFcfXnF1SVgeT50Bw2oeO7QPps0Z9X5EVc6b0aaebAydO56S4DS\nIxMIt2aTwQSffarr1MgMjEI6A7iUgAEoM+HyyVKAOFNgp378l+8a/2gh2R8X\nruM0mPZs6Pgga5tUWdr4UUmspW30AjitkWUregFIg+Fs/Yd0/zdDwgeA+qPO\nzJvelir7DnOke/zEGEKsO8xpW/jfrzJzoDhyPEXprLOXZ45+mSCHNbN90wv/\n3dwbmNDzqLJdUSFm/AEiXEkRw22g9F6PrX5VKk3ZozoXaMWcZXeFx4NJo3rN\nvp6KGLMGTAIJXmhANZ+eedpnwv2/IXG+5MOINM4t9ql/5IClGhJQQC/dAPh4\ncXP34BNKysen3BuOYnLegLavFs7Eibp6MEB9ac/rt4+CEtsmkRe+rwpq1fe5\n2kf6olpX5HFPIxU6viADJ29DAmRqCbi/qnOZmf1qOH/TD58wcQMrXKXgq8Ft\nhcQ9FJ2Rqm+uyEsGNhXxmDIqpdxsRSbuCKonYzYCDa6Xlg+dgQmmQ7OZ3dsb\nNtt8XT6lIF8AW8Bcx6WC+Ck94r5oRoUBpQtPbT36btwZclHLdQ4wTyQcw3e/\nRZJceapCyWign4DgqG9E7a8yJ/XI7OxWMO6Jjz/9vFSGmdp4CrbCb+f7PnvB\npvfI\r\n=htH4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC94GHEfuNl1GxVcrwitF8gwD9DkNpEBTSjVpvcYso+lAiEApXLW8VFhHiKKHe8Ez3xXDFFEnC9sSy0K+tO3MBLpalM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.1_1594043261435_0.9236545693014144"},"_hasShrinkwrap":false},"1.37.1-next-1594111137-d6339112.0":{"name":"@xdn/core","version":"1.37.1-next-1594111137-d6339112.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.1-next-1594111137-d6339112.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-mqZ6Mf5rWcjIwshp+A8iUfyWekkwzljrdaLxNneiWGgn9r1eGFpgrOHOrg89SnlxEnD3AIo02uSbfQq72VJc0Q==","shasum":"00d40289eba92a61ff7d5f8feacbb1bc636befbe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.1-next-1594111137-d6339112.0.tgz","fileCount":129,"unpackedSize":554457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBDVFCRA9TVsSAnZWagAA4DgP/07qjbrTpkBI9AVHGMcj\nkY3FOvjsFqL5yIsRsyCZRLfqVeMSrhZCVN3MuSHwDIAzwQXKeF1szQMDJcoT\nS4/qwwKnnKz4AGcHBcwqtAN5f3hj07DDR+Au5PHcNNW934H4GnAkiBKYA752\n09Yp9W0O+TTISXm1ziYpVgy8Ud0ZfSRzIr/flttH3k0gr+zkfWOBjK5zq17M\n64IecZX/asWWi51THObbQrZPi5G0mMNnVLRboBTkDvozi1P0EWIQ6/nvpzJn\nAX8dbXVN6iOlXH7LWBOEQEB04mGAxf9/IKy9+s5Wvbb8FD22UB+U9X4e3A1v\nHTrOkBH/lxJDhd0M9pBZx1YehmVE5DiyGUv65IFkUFwCbW31vf3BOqDgeVdH\nlgTYJEkdiMZp1zemiFJGsyzk50a/tiWQfyIjl+KTLupTU95N6yQ/cjyHKcB5\nDjSDuYK6N/mjH89UpnrzKPEfrV1HKRjesi/CyTWCgigHHl9g0+s9tWaE5PPy\nBNA2FBW53wNb2wmt/HAEYqwAztNadZhkAg1iG7aF86dTMb5GSYfvOBKSX75p\nb8aQvcSlKkO28By/tz34sR1u1dmVKp17CFUrHofpMIIaYskrve8cAut5TFUN\nZKZuzvxug2TVsTfoHbmSPZu1XC1ny20Zb8LAjjVMxj7kLUaZlAEC2T4ANDEd\nB+Jg\r\n=9iZh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJNEVxEFzqvCuckYvcjVMaTgUG94xi8VkBu3YHOS4hFQIhAMbOdOF2j6bc55LJM4IJ0tL3B/ERh2ubBOKPkCNpmc6H"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.1-next-1594111137-d6339112.0_1594111301012_0.9229413005893754"},"_hasShrinkwrap":false},"2.0.0-alpha.1":{"name":"@xdn/core","version":"2.0.0-alpha.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@2.0.0-alpha.1","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-5J7NF4CobYichAQaL3pZPbtAN4Lot82YkPPaoQeYLrw6eE58c9r6qBanjc6wUqRtb+VE+z2ktmLTUgrC3bjYSQ==","shasum":"798cf8dc14b84b167e314b78cee5cf465b0aafa4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.0-alpha.1.tgz","fileCount":127,"unpackedSize":554737,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBahWCRA9TVsSAnZWagAAjmQP+QD4HAYkR+Xow+zyLi8w\nKyHiK8A7+SMiQbYJ2cGqX/2M/DV/RdfO1lfIEBin7d8idh4Q0q3yKqK278q6\nzF+BCFDNFviNIbKJKcnHE1vqSdQQ6/dqo64u2c9K4grnPrVh8fTS9XIbTTnH\nFlelcLxSK1uROGuhQjBVKDXEoSAw6p0hZLisITJPbWjdsPvLiAG1BYulS9dA\ngmdQp4yjdoQx2dTP7qM0l0czaRlfCfRO44ni/+dLIF9y3U58r9IUsG8L3jlk\nI1yyieLPgb0oRd77+5rgU3rfZvj81OhwgB+80hbphqI5BC0dcf4jaBoD46v8\nvlTcg/z/4b6MMYxqNX5ozX3QOjYkDgAjqe/2Qj43/1105wH0qCMUlru48l9m\nqrYSXpYgr7tCA2EkWh/jsjm2y8OI5JKH/SjyLlHv+gA98LkC1gWp2sQh33lk\nea/MaTR9PjUt+62HoxXgySb/UqVgQFl5Ou8E4+Kxdv0HI13AGdayjfxJigIx\nnWJs5PzqSvpUY6sQIZhKlkv+lG3SN1ZAHmbxiJjWDQPXmbSSMZdBIxhix1/p\nirS1bahlGkGne8HpoAnNQD8qoY92nbujit1+sQnynEUzKql7bUuwlSmWvOc5\n9oTQCnqgVD1tR34EzUcKuXNicYbh37GpIJIivmMkZJ4zo5OBJZjvBuV4ljnb\nEP6u\r\n=qGBO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChq3WfGa9UBslJMPhUfB2eFvyDxngmhUYS5hJmzWdkcQIgO+tOE04mNwfXBW1I1tlwRcFJFqcGRSx5zoDIEUWMbWM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.0-alpha.1_1594206293972_0.13512729479705987"},"_hasShrinkwrap":false},"1.37.2-next-1594231465-f4cbb7fb.0":{"name":"@xdn/core","version":"1.37.2-next-1594231465-f4cbb7fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.2-next-1594231465-f4cbb7fb.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-7WZqx2F9ebZ9AKpM67SAd2iVs30P2qPebMJcJd5hWw3mkHrtXWje28Yh7bQXSLTHM3FZVuB1UMAwNWToELKCjg==","shasum":"57fc4c802f4bdcf8d6b94faf978e6cae203aa704","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.2-next-1594231465-f4cbb7fb.0.tgz","fileCount":129,"unpackedSize":555769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBgtXCRA9TVsSAnZWagAA4GYP/2krpFocN1TcXrsd3Ae/\nJTAJgJPvIrtvFoEP7vWsLeCXNbAUInxYgGoBPkCZTuUNnn8AdGvQc+gZlwuV\ngPoEmHGaqtOcHTviIi2GotLOSiJRCiYCYBnvezFgT7kmE5Wbuxq0FfeWepm1\n/h3wiYgaMPLJY7+lqmoq+BQ064WmZqC3iFNBIS7alrDHCEVmBR+Dv/etFaD1\nkqtxBR59fJwgmd0TdH7PwDja34+aefxljnJ4LGKjSfZp/E4nJQSFa92cHBIb\n9TQHuQc9XhHpTx2W3/uDgHYEXw8hpWfDhsMo1pLS2PRNJQdEIJhtzNwuq2YL\nNR0TWhXeR1wJ/TGqWMYAoOtJ9way6UMUTqvwhTPPiv0AdM+0CTvhyCSvlqIM\nS8zvlOheMKBAB8Yhgw4lZNEvIOr0D5NrU6Su6cwAU691dLIdoCUaHm7wBR//\n5hbs4tCOHg5eZYOSoNF5kckIyWdxyv+J9MLLedX93gHtnzbFH1uqc/HNSgnq\nVE5fD/LsMEttEHnnXeOfrAH6gmxquBTDhvy2WMCDFwG8cY/scXN813cCnwr1\n0Jv1aenx2cgXVpy2KGE8cNeXiUR3h2yMaFRmvkLWvWR+VUMWMaP7ASa/X6Og\nZQWH26Lm/mUT2BoDDk9czeicYUFwqUhKmWdEha9saBvIq3zJx0x58xYORNGK\npHDS\r\n=5sRF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFrdJJQ57lRaoSAnjPi8adcTLaNLLqk+0/o/7y2k3Wr3AiEAvGGpkmnsz7o7ziVyFs3614d9cFHC/tKI+M4QEOAUePM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.2-next-1594231465-f4cbb7fb.0_1594231639384_0.8001784097216917"},"_hasShrinkwrap":false},"1.37.2-next-1594232161-8a51cbd6.0":{"name":"@xdn/core","version":"1.37.2-next-1594232161-8a51cbd6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.2-next-1594232161-8a51cbd6.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-z8uW/gtDN3MkUyKFAvwG0+50FueFxwNffkJw+CQJGlnVOCsA2FwQydohOOQir0Qnolea0b51oSMFKqKOSTdAHA==","shasum":"16f41bd122a3b00fd0f12c5278566aa880e3a352","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.2-next-1594232161-8a51cbd6.0.tgz","fileCount":129,"unpackedSize":553948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBg4ICRA9TVsSAnZWagAA4ZAP/21a2SC31S0IJxpTQUJq\nBRsk/AIMzL6IHeLA1wlQJ4X5WkWbfuOpCKW53F8io4a/PDSXANFENkod+fBk\nR9MDM17L4R4lnoU9BFrM5ryelNkIYpzFpx4K4b4MKA6MZImA1XFqaN31K8kP\nW+bOy9u0OXVMlt2kgIfpHobrdcN8q4ihye6JKhR+Lzj0zB2PAn5gSklx2q5l\nW/tmQNiNHEi2ByxzSkXzec0vDOi+BpWjFH5DHl0E9ev8GyOu6RkSvjfuwPlp\nP9M+SHOGrsDD34ySofWC4BHCym2nqRIQsrYxgH2SRtgSxYtzorxjOPL3ldng\niWQpEPdUyA5i/frfPuGrELsUrmCfAJzbme6jfP/2uLIKFqYNNDnRd73aPDTy\nDVk1zP4eJOSAmD4NTfv+/K0/t4v1I1Dxk5LgfrKXG0bAFyPBbHpWkLyF7jYi\nqJASdh4Ape3Fv/GQSRdjMu/lM7RFO8uLnC5pjULly32sFYGATKr60I4tqUzz\nNYCnsfV/EQskAcIwt8lo33ZI8HOOgvGYWBmCgGrFgvFPsTTTstlalwLHf366\nUse5w4rfZpFgZaLilxDjIYp0phCVXHq9qf4fkLR/qYZb0cQjJwWmOrdcrTf6\nQpW0wcC9/1mCcQ12GoJ9yH+Q0Dws8kz3WCPxvfBzCr7n8UmrGJiMK8PIdmyI\n2U9d\r\n=n+DD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIu6gBZsrBvosy4q3GC0oQZVv1ic1jZXe/qVVaqmN4vQIgMFxee55BnD4j5QxNBsp01qMW2JvhBIFonj69ayKuCXo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.2-next-1594232161-8a51cbd6.0_1594232328005_0.2586253826519258"},"_hasShrinkwrap":false},"1.37.2-next-1594232564-8a51cbd6.0":{"name":"@xdn/core","version":"1.37.2-next-1594232564-8a51cbd6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.2-next-1594232564-8a51cbd6.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-n3/1ExcPSTZxrk8699Us0oNJ81YNdVaS1RguhHStBLJenPI2DmauJMhbPN574zdWpa5dWBgd6MqCkhTVxi+1NQ==","shasum":"8a5b4d649f9f3b8635a13454e8190d21eceb7ce6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.2-next-1594232564-8a51cbd6.0.tgz","fileCount":129,"unpackedSize":553948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBg/ACRA9TVsSAnZWagAAFEMP/A2TY5uOemyyigzSi04j\no/bdBATTAJScPrHSzzjwSCr9oK6eYl7Kfzb3NBqZC40hJ/MuUT2LnhkfcYGj\nnGm5iR76hBu6XfRLvJRkNwWFVZ8CNcuO2418jfa96Af1qIjS3JTkhQ2GbQuq\nhEVf45mniKGUa8WQXp1rJtNpaGb7Qxdvd4KHP+w9xYATFJ9GVm89yIZuW45L\nGCs6HdYe2+LW0nIX4fVI5zgCdZZBIPl1YcvJ3x37x4/2+1Hdod/iHguwm8v6\nj7CAvVsUDSTfMDzeqZY0cZTktwBVES9+Uzs/0cByyD1jzAsTA1INVTx34Zaf\nb2Bm/k783NCBVLADDBnD5GnKvM99pQwllB3iRk3bz+xPcGvRPK1tQugFHhfA\nvZP43iEycUyQgUtChxHWAMTQtalUvAJsgcL9s5gRM4NtQy3zwAezAutu4GuX\nk+aBkVkr1eUdP2+oP+0FAToh4/OoexUjiCNGK9A4aBO7gvxyYMZ2u+NcKjK8\n8d9k5L3MHf0UUGdAlhX7i3Qz6dfg73PCp5Lzru8iH5ldGXg/T3LBRt+PPxyU\n5KOHHPmzEqXw18dBvUIarE3Wu816HySqjjhPk6LrB8SR5OdJoMJuKvaWLC7T\nBqarIRVmkuTPSfaoqyf5x95Isjs+qAUrwBvONDLLKffHEn8ha6WFrLslQkaK\nTEZg\r\n=IG6R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHFtkCCcym9bG5VBZRiwKPO0LHJko4D3eAgQZwxE/dV5AiAbxm+wvepQggGomyJXas+ES/VqLqvimkm6RtJY6GvdvA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.2-next-1594232564-8a51cbd6.0_1594232767907_0.04750058912522248"},"_hasShrinkwrap":false},"1.37.2-next-1594282725-6cbe6484.0":{"name":"@xdn/core","version":"1.37.2-next-1594282725-6cbe6484.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.2-next-1594282725-6cbe6484.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-jrAACmDQX3nQzrQdNH3lzF6usPSyelMU4MuhC/nVlrfTibI0dYrXCQE6LaU+D/ZLSJO1Vl2kz0MrZHgNjwFG0Q==","shasum":"79589216bf330259dad12f1674361644979202ae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.2-next-1594282725-6cbe6484.0.tgz","fileCount":129,"unpackedSize":555667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBtOOCRA9TVsSAnZWagAAan8P/0yLBKv+df8BmHIDeFxl\nmqxsxSCaA6X83//51rzwfJ1suUTGI3koviMh0xvhZqDCKHo6xmez8lHbRtVl\n94dG9DH0pKi/u5ihp3irnpIpBgsRJn5YhF2wwhP2cLAV1JTRaUJNroyGbxVF\n/o/gIBnB84TVu6E2whEIH2Z0HzF35E5Q4vHN2c9AIb71uU73fLjEg8xsXkBc\n/E1jnUI2A1A4Ft5VlF6Po6MJljjsG21aCPSjy1xZm/9jfBk5BRyb+zJ4rBXA\npWFZVGL8Li0+ooOhZ0YtKv7YzHMFVXKzV/1o3D0EC62jEpA6VRoMAV9Khueq\n+nsx+LJwlKZErpZtwLWUMdPwP8w8IXPuwBUt4EssORiHtNNgAPnV1x7LThbo\n0WB8+wHT9/9DpbphVV1g2GZ7cRGFdxNpWb1lB8bAwSQD4SCl85fFBdc3DB+B\nvkL9SxDhEBZfyI6A1O5QnRYEysNsHbYFkV6rAb/cHhloi1u1VxTCVMqhUbMS\nP2kGjXRJV8KmtzxeKphOWDo3djho/jBP3Zsm0phsHZDGltbvEiHT/3N/eMpE\n56amemJOpYZDE5sWv0urz/6kpQvs/5k4ExDi+I09+RiLvfZsCjkPvCsxdxJT\nrYTvhqyjY8KG0WuPKEAXd//rI5FCBgfGW6LEtzM6OWtjR3M7ZfF9vKtP7Ll8\n4i7s\r\n=HhS7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC+p1zh4gE6spOv/nfEY6MVyI/4I4dqcYGbKzac1A2LTAiBqBtCxdWjTqPPatqGb0dIESLuIH2ER3Oas0ZXCycNtFA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.2-next-1594282725-6cbe6484.0_1594282893735_0.7986008767792208"},"_hasShrinkwrap":false},"1.37.2-next-1594283073-8a557557.0":{"name":"@xdn/core","version":"1.37.2-next-1594283073-8a557557.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.2-next-1594283073-8a557557.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-KCQr7UQvKaMHd3ZIL7hq81bhR3OATJc18jmpEkTqMEBmlz9gstgVuYYrslO50eSKEeoGbybuYCV7Dn/nc/ovAQ==","shasum":"5e04d6f74f4c4fe3aae3e45a5e78c7eaf4d69074","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.2-next-1594283073-8a557557.0.tgz","fileCount":129,"unpackedSize":554712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBtToCRA9TVsSAnZWagAAjkQP/3cI55lOeyMnyQzZi+kC\nKbYnKnnVqcna2ZSo4qZyX59AyQwgDevlyzZBcOvBNl/W8in2OJCvIxN25utR\nU292VAiDIqIg4c/UnRaVSePCx4qLWHZis3v2bPsMEaJ8ufHo5VWofB7h58gB\nFSXZev9OGrSwid5uPnivJRg7NH5/5AZMOUaTYoyEFjKN2IM83d7dPWhPXkW4\nNaCpYdNEIcCw9V3ZkA+g8Im+tcsk/Y12xfZo9M4Yc1mi/TUjfdkm4zjr5C1I\nozzwHVxz1Av773HoF0PpG9t9xELzcR9GOzLD/AI8eqr8URz/KPwQc4HtdIJA\nIEYd33/h018URkojpuLjKyKDb7h+PgMGttsfEUInHRMyLZWrpHAOl5K6SoZk\ntLuIQrQqbwiPB3Thg1U69N443F2+gkBLA5v/OS4PTHCDuP/FX9rtb/aSraJV\nXOxIft1+a9QF9U5IoUk1O1a80+NSI+0XoSOrU2NKB8shbge6T0PT/q3h9bH0\n1H+7WNel1cqH9oxSXG2Wa00p8zPILADe/5Etbb7RjzHtv8CWxd8pdVos4md7\n5TD3JzRsXrdOwP0ovmmAYQ11+DJugPH/j8CVc4i7whg8D3ORIqDxM46fDfo6\nLtfULP3BIWQyoBH41BB+xU/j2GnUsnmCchaWotW8w4mJ8XIhr8E4A4NvYSdy\n/qzr\r\n=Vu8u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTJcNiaIzI08mhJcfxvfpyJVVdXCQufBfz44B0H6eC3AIhAKnegWCJVixlNCZeV8HHym+Y+RPDdSWS6T/ggWlZDEPC"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.2-next-1594283073-8a557557.0_1594283239442_0.9789014993591616"},"_hasShrinkwrap":false},"1.37.2-next-1594293976-19cc07b1.0":{"name":"@xdn/core","version":"1.37.2-next-1594293976-19cc07b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.2-next-1594293976-19cc07b1.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Bw6OOFYnlvJqNaDC34WZbKgD7C9KO4X6Ib9hV5tWuuwQ8ruDfKOCDE6/F3vsAy3goYDKLxEnXObtpF1i1QI/Ow==","shasum":"ea7ed7af65fe77a90d875a57a2b559b75df7704e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.2-next-1594293976-19cc07b1.0.tgz","fileCount":129,"unpackedSize":554712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBv+lCRA9TVsSAnZWagAAffIP/Rca9w6mb34vuXWMaoif\nl+l1mb0nPB/pYi5O110CJS5LT1tPGKVZG/HnbXNPCljTmihj/YpGGwv5UghU\ndav3RjL9p9Cn1s1IgV5d2dJotwOgax2VH4Z6Xpnv9VoZxAdXbUP3OsIS/k0O\nPal4dRnp12T6vCndfG38UZS2WWThwHNt47Ibr+rAiRuMobYRV0Y2gtRYVhpr\njwRvNAMuO4ZGnN8buH64/hRW5cXvvEONvcqvjtAegJM/C/J/etcsb3JExB6m\nPon8qyzIfXZRUPNWsmwllvGxWX6CcM/MfBDBSWfeud5xeaIcE0o+aT2EtdYQ\n4LYct2D9ku/YolpKFxrPDBsPivtp5Ng0XlWQKEGszmHU4FhmGplScNAQ8p8Z\nkWg0B7J1w9FPRv+Q9cNLgtj0DWIphvGvVuMAjsMDA6LxlJr5J2vNB0rqgEYQ\nEoG1A2YpPLQUsaUhuYtWz0CD9mFDWRdZDJHpBM0VOXYGkhkcWJy+u4alPjsT\nT7PFWw6NOyjDvot5WSnRHDBNlhvDu00JUT9bzHEeo9tlWu7b+sodIMBBogZn\nAxWVXnMlHACCU8m1lG6ZzCap480F1prPuQ87GvzLjttQqfKTYeQhgrUeBI7F\nUJqSsi05TVIS3d3vOYE9qDmwALlqGghqYHxY58wXAONDjpPMYHum7eMFdVFT\nWq0a\r\n=DxPM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFYtouTt2+xZ7JNTPeNYbjh+UW++YOU+iNXg896rM43FAiEAyDu8xD583Bh9BvYAgJYGDWvyzb7vi7tlXRbCudJld3s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.2-next-1594293976-19cc07b1.0_1594294180673_0.44170528000932174"},"_hasShrinkwrap":false},"1.37.2-next-1594294015-b2927c66.0":{"name":"@xdn/core","version":"1.37.2-next-1594294015-b2927c66.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.2-next-1594294015-b2927c66.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-KNu918j7MHiu3pLnDPGUYKxJ4PctHnnjlhHO9fl4OVvOvk6/dWvh2eCjGpYWeLkgt+vmlOQFHjl5fgb4dmEoMw==","shasum":"87191789ca081a51524116e0fdfffa5f7111c514","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.2-next-1594294015-b2927c66.0.tgz","fileCount":129,"unpackedSize":554712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBv/ICRA9TVsSAnZWagAAOG4P/0gMf/ZjbmPFjNxxX3e1\nsKum2byYH8+yAcyES7x8VpWGgiNR0oI+WWkhqxFABYlzqcgz71aTZrIhzA/D\nXcnzFmk4M7xpVHgylGEb/iPpeKYvOZPKGt/4I3c3S/uxt0wMiX7DUm9FfKB7\nBTl5Y0tsNhTzEWSGumbgeAMO+uNLUEKOVUr2AURODJo05RIbeA7gAcUwVpdk\nyNWAyyezvfJ7FRy0oPRBDOpXkj/1q7+0axzme1s8jWAnH1EyOoFMKjy8J6YV\nnrLG9HmhxG4L6uXkaO0qGJbswz8yzBiNuktbmqMppIW2gExTGfxR8GQflPZG\n+qaqRDZtmNwrkxjJHFuuRMUQJsr7XcpwGBH81QNAXBLwYiJUyVsZfmG/ZOqA\nWnesDmXV3esYHgMhHuI5hySMvIbwc2VuG849ahEWiW91okTPAOWW/l1NOib9\nLueA/gW5/EdsSai/dqE+AVx74TaMVQDgbbUdfQItMDycCWvpf72pJt8KANAi\nEusW9L166G+chjmf1A9uJCcx/NqFmRiSvOA3iVPemqtrq7AFlnrzDGzZzig8\nxXfBpPk8KCp9uKuwsVv7SEije87aHwf6JCI31tlbaNM0EdDdWMvTgrhvqTSa\nFrs8iNLBFE1UWmjK8QDJaKRbz3hTKOnyyxeprmX+M0qL1fQFTF4/+Sf8LC66\nUMjh\r\n=Aw6r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1O8EJ0fb2bQOB4RiDLNgj1+nrO7Yn4+dWNZzwPU4crwIgfW1K9EIMFl93/aNHRafbAz82I58kdkoh2EBxEMzsdTQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.2-next-1594294015-b2927c66.0_1594294215822_0.3444109150916157"},"_hasShrinkwrap":false},"1.37.2-next-1594294994-a97cd941.0":{"name":"@xdn/core","version":"1.37.2-next-1594294994-a97cd941.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.37.2-next-1594294994-a97cd941.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-5vaB/cDnPM0pdX0oHquMdN7AH41V9VSc9358M/bGnwDwdoNIeDBGLrawgkvMJN/g5kMMlkJsCJcMZGhdw4sZrg==","shasum":"b58d750606a863d58ffc134b3e59fb129981d615","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.37.2-next-1594294994-a97cd941.0.tgz","fileCount":129,"unpackedSize":554712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBwODCRA9TVsSAnZWagAAbAsQAJt5LOQnwwKd0EWobOCA\nBy3McLqcpcx79sa8ik2nKeg6OMFxF0YFK6gMcLTJTiMvKFio8/UyaPRvXL7R\nugvhoQDaqz6JBUbaz5rlPkbLIwgsb1hdNtEJiqByJynUdr2zaaveDkJSVR/V\nC0ScoEG1fiIZc7PReN+vOOMvVPBcgIcwGQqUGThge1VLi7mbToJlljG1FL3B\nFFfH3diFmQ89sJH7WJIn/95NdjWZud0xI4LQEG4Czn7v/hNRUP3Qtnxva1fT\nU7GN+6CvDiEevEd8nWglHgGZ8raMGadoYBBellcOpLZUTCf6IVRX853/KKQ+\naSuCQ8DEr+xm6fsL1FzOrkaUg4UX1qEw4xyzeJHqgZX7RuVhEpjnSGw9LDBV\n3Z+GtKg0dT15kiVR9f2aPcJvmFmK8GCQuGewCM1cK7Ydx971M8kzC3DiUjrk\ng+56sV0wi3JFgK0+yfF+3rnd/PxLqTTSPQAN6t5kq6uJGfxzjPgE+fA6MSWT\nvrep7PvbNwz69+VDjd3YkNUsW/CFFXzyxal0uJYkhVimjSjDhhggI9h2w5ET\n2rsRcALv832Td2U0UlvQlE2A35esBxmI9o7E/lY0x6S81ydA3skQLrX0+xfI\nGKQrdGS/yIcucyFhmrc5XEr4sWbMmrVad8YMRpvJSU0NUWTUhkU7JzC0VPbz\nvFCN\r\n=7km+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF/5vqVdGjeNyaUO6CMadRWLuNEDBDaSRTu3vwAhrMjwAiBvpPP4vluhWdXnwYvmfF3YRoSrLXC8WPBt+gQJQIE+0Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.37.2-next-1594294994-a97cd941.0_1594295170707_0.9005221416141911"},"_hasShrinkwrap":false},"1.38.1-next-1594295189-8b103c1f.0":{"name":"@xdn/core","version":"1.38.1-next-1594295189-8b103c1f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.1-next-1594295189-8b103c1f.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-igqHZXizzlFHAInDQOBhh4Bpptgt9t8SuoqpjNLdh9rbE3Uzi0HOj52F2G3I4NVil4NG5O2WQrAZpToYrNYeJw==","shasum":"a7752aae9db5403fae2ccf5a8cf47c3098b0b498","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.1-next-1594295189-8b103c1f.0.tgz","fileCount":129,"unpackedSize":554712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBwRECRA9TVsSAnZWagAAhVoP/2PnyaLWK4fiRha0KXat\nQTxc5vnfhz2Y22EP/CorVXvX5XS0eOQEFD4CWF/RZICz8k921B42HZQgki02\nHCnunpJmkqR51lYLrvfhRTfbpGdovRBRtiWEY+++812WlSfP/nm3IGdyDr87\nMQqrA9p7hYVP6J/03wMRrm2c+DZJlNzt3+Ig55j5/lMMTEw/qNeoZU1Crik/\nXmTh4oeqJphVhrcClBfetgZJEl9YQse8agLTzlqE4DBjCfmYNYMiwv1WVpeE\nRNjlAioNZW/tg0vGAAYAjAQjIk7ws6VKC0JG8dRITJ7pKO3/GKE4m2LL/6Qo\nxQcX2kt7MyLMD4r9GlixOs+uGe8rxa5ZDoKEwMWzYWQvUa01Fn7/FvCElc0D\nidHFnOVPa5V+R6Q2/b1vEPkuU7jj52F+2XRqvOXIglIQC6oafkMH4ldHcgBG\n3nB+Yboi48EHxf0Olzg8CocLew8R/kRxZ7c86ogfbKy8kjPM8Hs/kHJFtHtm\nhz0BKTS/YSZbViemDwobJ2/aPX5OC9Iti5TsAPqQ4B1b9GN/zDTXB6ntw49i\nJ6MxeKf0VwR35kdRd/gu2NzgyXQTBO2YEgP/nlrq0vLcSbjs/17ivpiUT+w9\nXqSMHs/HQ1+yADOD53A1EmOHEaeoY9FohfWjzSZRuZ5Drg6skZTh5f7NhQTT\nHG5v\r\n=CsqX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD61o3P8X0lEF5Lc0S7J04k7Vh6oyKBluPBRDVoNSWFywIgXeoNwtb6TOxplI1EVi8uTRODwf2YFnK/PJkOjflKkK4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.1-next-1594295189-8b103c1f.0_1594295364198_0.8397411654108513"},"_hasShrinkwrap":false},"1.38.0":{"name":"@xdn/core","version":"1.38.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-/2cP1MJ2OftIpYsBUs9zmT1yxmMqO64gMxm5Knj6hY+sow2z3eVjFczazfofqxTlY9MT3k4idm32P0k5W9Y68Q==","shasum":"ea3da22fedc3807ab1eb4517da72cb35a18f7e1f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.0.tgz","fileCount":129,"unpackedSize":554658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBwSwCRA9TVsSAnZWagAAmoYP/31RFhq4gvgN12pwQyvB\nSbu3zWOrFXAv9LEI4ySbFbGiXn6gJC4ongQSKsO499Pk1tyK6Bf4hOp2BzYZ\njlCSbcUlfet++PzExHVIwoJ1QJRC5JoysMklcgt1SfgKAW3afkr4kWle127i\nnZETcoZEpFZG58cQYmdjx7aCtrJagMD06dvUBFKrbzHHOO26WE2gvAJiMG24\nd9Zg30PxZw+om+S+l5pIsfn2EOueIdn+vI3xCaGmPOtRuMPf3pgtNS+veXyq\n24uhJv2FS1yfZDwA+ANfDTYVV+yuMtRSZPO0JU/bPSNvQkcLF35wwo5TRcDU\n0YVkj0eREcvBdH/RkILvt9EFwzswJOmWe2CZIp4CW7havsr2OheU8P9P0MIz\ng3jaIhqHM9CC4tpjVMQ2TE+UhYIK9667jankzVwMmlRNRjB04h7oFOaj8yKu\nmQE1Zr5AlYGWIFfbE6UgjaQdUgWzUFYVhqSpZrN/Bz1S6PeV8Ra23JXNuFQ/\ntg7UozUOSdFvtWkE7T9CKMTCWHShJEx8c6s/+7ivEUasTn9JIbJW58w9ujE9\nnDmcv0detAeQ/yCTESCAbtacIsCEgm482qVBdLNkrYh1v9vH2VzDKItu63JO\nE1dUXE7k08gzj88On3dmIIEJKJSjPrjtrOLg/bIsKRSBlAl/95Dem2WzDDy5\n4Nqm\r\n=poap\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHqLKoZsj+CseNIqdP1PNdl5JIOY6jf/UMG550tcUHwnAiBIRVcFOaj+jtUdZJq8hPvjNWX+447FO/4emY0jiiyJ1A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.0_1594295471690_0.8554169206907098"},"_hasShrinkwrap":false},"1.38.1-next-1594312222-cf1fd3f3.0":{"name":"@xdn/core","version":"1.38.1-next-1594312222-cf1fd3f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.1-next-1594312222-cf1fd3f3.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-5nIL8p3Atmwcf1Jj93m84yJ5bzqOENHvmGV6p+3S+VKjGsXSNbSBuySiydecEoVNlNlJ8PfBveXIbqXvF5B/bQ==","shasum":"d494f1d3619256a652fab41a27c0f61b6406705e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.1-next-1594312222-cf1fd3f3.0.tgz","fileCount":129,"unpackedSize":556031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB0bMCRA9TVsSAnZWagAAeUEQAI+NvkIVrR2x9zHBOh/c\n3XKjGwS6sx9dUJkrKHJ9zVAU4Hwv9KuRS6mZWm1w+vYD9dxjop0Bzvtxd9Lz\ng1L2b94KVNAoxlVUYDzZIMnCSxby1ynfBUwtt3wfjq53I2N+lyMcFXL6CskN\nbUjlg84/H+oQFCmyNpm7/itXCrQhpJfvvCQhgN9PT3gF/uVTkvYwAleVBvA4\nz9Tz+mMY44lfIaXlZc52GlYz1uYIHo6ItDavhc5mJ5HSQGHdmnFVbTxsPjOR\nJgRT3h3mEoAI2pNrC1wujV6LT87LAqM9AIfj78YVwMqt9q9xAoIs5Jc50sEK\nJ/ILEEAF/3jqO5J3kxCdY4XdTMnPEGLTfF3SCVnZXITQFaJi7ZwkDXVGrT+r\n+dI/av9IYuPLnpIoH42WtAM36Q6O81w9aHqNWpKBH0APJVW4nYsB4ibCAwjO\n0b4ldUhnrjb3IP6pQ0It5DqLO3uKhVxfNUkukeLw1Ljz1jdL8R43PSZkbPvF\ntxGJJJxWFCkDOdDnNafALoYhaSChWASqYDfG4aRhYnPQnOArDRM15FJ5JT4E\nxot3cdXGkC5WyXQ2MVwzgpI+bYBQ5fAQu93CxpLGLBsN2Y6+Kvhzd/2BAxvg\nKHBfeVgum4izGvwR4qXOkowwiD5b1fj44wOYH84qi5jFQOQHNHYEQhdULxNT\nXXwA\r\n=aUCn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAU1vVOyMrHnRLTH+ccR4gNKcOlKk60d1OyvQJ4LD+ZsAiEAyzg/8DcET3jrfJREnGDZF6gALbiofLPSdO/gb6r2O2w="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.1-next-1594312222-cf1fd3f3.0_1594312396109_0.4418585304772056"},"_hasShrinkwrap":false},"1.38.1-next-1594328729-bc58f996.0":{"name":"@xdn/core","version":"1.38.1-next-1594328729-bc58f996.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.1-next-1594328729-bc58f996.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-dPbLz6V1c08COMSx6FOvGH5mkAgcyA0M/yxlMKhYENhMjzwWfwnnrQsTQAwwGW7KGlIHPv5mmXJ0VffNUG6zEw==","shasum":"5101aa559487af12d8dcf609da6ed47449210536","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.1-next-1594328729-bc58f996.0.tgz","fileCount":129,"unpackedSize":554712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB4dWCRA9TVsSAnZWagAAlHYP/isG/gzCP0HYosiwDT5/\n8G6MrEYXsKiOYqN8BKoEwbxucQvrtpmjZqT3gUmuPgyExfaRbiFyn1OLgwrg\n+bpUUpUE+GQny9j8SOTbbXIqlNnvnNmJvGpjRoeLm/aBtLgJQuQIm6zXe2jC\nkQZksrNizvP+lDwl4MyKPxVQtOxs4qSU+HQy/KoP7r/ZNyIQ6U5uv35jyvor\nSeIo4o1k94ktU7S0G7+Pk1ZHP8NrwoGb4e1xznUWVDB+Hdb8XYR4ffL1fs4a\nHucqwwmQ+Q2JS2VhCYa1tLfG3L2/5ghiASEGLlg7Q59LFbMJZVXDT4snZn1g\nDOniO+z98Sk1InzUPa9/4pg9xoMgi2hLdOdbQOC8lctbliT+sT4vQBqAUI6T\nsO0qTevemGuSBMfqAYu7JNkiYleqJ3ofVtLSKTOvy1GyDlDJg+Nm5hjggt8H\nC6QewdP7jYm4AU17mrt+uXD16dyR5DpQ+zWzK+J+3x2gh1xCxhtzeO90WnYX\nHLOr9yLqZkn1B2DltTycLFvBVrJLNJU4FF6Y+1RMKAkVQPa3bTpnFlK5sbcf\nzJr1uZi31y1JFX2uaYNyMGqlCKL22zIjpl4uOjWZP+1EeEGGM2A/xaoEMn1j\nYPJy7dSZ1TEJZeiTRlA/z+VfxDCmN2uioRmW6jEhpvHY+iUfO6iXdnsq2nTj\nT2jy\r\n=aZO/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDX2ISPP1Vi60wHbmKB4QcxM5oagmE4PYWkAyoMnaaimAIgRxUwQD4KpMKM/whcWBUvAVEMh4UQLgtVk+vLoPoDPbY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.1-next-1594328729-bc58f996.0_1594328918358_0.9271633060645517"},"_hasShrinkwrap":false},"1.38.1-next-1594330997-c93aa09e.0":{"name":"@xdn/core","version":"1.38.1-next-1594330997-c93aa09e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.1-next-1594330997-c93aa09e.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-XkWDZJvbZtbFIPXYw+PR8QHPwK5lv3x2OHk+LEljCQDhNPp0NIOQ/tlBkPxMaU2TTiWpM8sM3/eYx4QzAPqIsA==","shasum":"4cecc375e95b5ba5002cdeca9177d6abdfca0fd0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.1-next-1594330997-c93aa09e.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB5ArCRA9TVsSAnZWagAA048P/1RbCXqcPKcGa4NEiyIM\n8DwfFbg9t0FRRoWx2VG0+ANuJX3yGh+aZ6mi9Uh9bueFGDgwa9XlBhOYfLLc\nZLmzqScGOwcJ6F+ONncrmcTX7QsYg5bHJPCzLcCR6eaNwND0N0jWe8S7Be7o\npjQU8GpI8SImbXPQ4q9sfYQsWoUOI/D2xYxgDkmwAwr+PZX1/I/EsCNug2qk\nG4xDc/Irhf6SRlRJRBlrNX8tgiyM2IheUf9/oXFUQ9O92ANGF22cGiIM1MCO\nILzBZ0AO5M+jll3IpGTtaClZxs2p9yzs3omCaaDc4fYsBGvkBSuPV3Fo5jwG\ngoxjquqLllklNQ0oYd5r6Xi6sg4KXeyGfeQL+C9ptEBqf9DVk+CQIQn02qW7\npUnZvAhuahbPNg8GJ1m7b2D5uqhIsJSrKekd38DWUyro92a8X/P0l0nEVmYT\ngwFu5eiyDIEQMeljcRV/LIKBGkb+oSsW2AxSY28sAvd55PrG1RkPJqaW1Jtk\nmGqeSyQM8rzlA5xrHlHRMxpKsLH995wl3ZNimHZEzzdJoNwtzspz1ZkM4JY5\nInCLuYKRtEoiYLCUiL0tfGvfOiJr/JY9cZ8OpYWfsfOf6IafG8y6iZw3mQIm\nWAi1TIPZ+T77L7BwERzr0rKF8MeMcLiiXsyUuTNIiZ3ZWx4khMRQVldKd7CZ\n5ffc\r\n=Ro5K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOWfCpzNt7awgwlgDUZ+w4bxUiUsOZahUUN8ogx+BjAQIhALWSZiwdc/iZN5K8xQarQ3TFVovOcVozzaS/f1B2i1Zz"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.1-next-1594330997-c93aa09e.0_1594331178876_0.9247894137313866"},"_hasShrinkwrap":false},"1.38.1-next-1594332443-8a00c5b5.0":{"name":"@xdn/core","version":"1.38.1-next-1594332443-8a00c5b5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.1-next-1594332443-8a00c5b5.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-xuyjxl3fKMtEaR/tFx5xVvJA0Ct+IdAQXNZbGS1vmLS6xu/HTy9HSLwP/H0TxLPY99m+CSnn6lj+P25Ueyd7MA==","shasum":"ec86fcad1732ccbf3f4f74690e03c58df4159714","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.1-next-1594332443-8a00c5b5.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfB5XJCRA9TVsSAnZWagAAg2wP/2PnWdfqRw0+worQcNJf\nf0eQxKERjoi43y3iWn54ietp2sdVai24OSYwRdP9rAm22brLMT/CGrT6nFJz\no914Danl2bZ7gS+K8Q5Lr8JkTsEk90QtrB3XFmWn3+DCMGyaNe4CMRSO3KH3\nIOu6vAX5gHjxoY2EQZ91kU5YgXphk0lZX5qQ0aQFrljAhPYk4KwzhME6Rdqk\n2wnj2CbASfV8zhtXR+SdNQ4Q1LVDEy7GlzGLJmnQlbt1tvM/XlYGvAb66d88\nNv12tQWFjbhDu6nZjzGcKVaVsHSnJnzFBIRD5cBin/X3r/G69Kjx/g997DYk\nPUxTKhGBKFiK/1fRw+I287Ybbf4OTaGIDorf3VTIvZQ+ROQV/m9Kn+GXceBJ\nWzIHJo/soXGJdBmpq3L8stV+huqRMVQnNfnaUYBDevtjzuJuYWfejbn6FCGu\nqVbCy2AForP/aZiqRQ8x/LnXaW3DPTnu6hFTXhfoLAUmDzU0h+wc1s4iKfU2\nUlNc90439HQCaJkIU0MYVbb6JmUusSHrENxql6WllL3lfSypdoXDGiNBnuRW\nnXmLRNVumU/L5VoicLVKyHdjenB9xBQ36H14hTCZGZEoNvxT1t0dvdbd85XR\nFLzEwisBo/HoIdKoGZhabFmj/lMCRNS5MTBcIZvrEr4lqgBtWBkczfAmMgHo\n6mSv\r\n=I6KV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFAvxOc1tr0HqRsIhlFIa4Rdbw1h1QgxiX6181IfwUi7AiEApJCH2+0CoKSNxUJUyBYK1H51EwaafwDhBBiE94sU/s0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.1-next-1594332443-8a00c5b5.0_1594332616886_0.07400865288100755"},"_hasShrinkwrap":false},"1.38.1-next-1594369970-663419e3.0":{"name":"@xdn/core","version":"1.38.1-next-1594369970-663419e3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.1-next-1594369970-663419e3.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ZoMh+glEvGKpamvMzPPCcI/QBw84EhXmOW6/J5jKpVApnlEUMUWBOtVB7SRWsjiFaOJ4hEOrJIA0NjAQKwJv0w==","shasum":"a462fd7d5fdbecf2e08d7a9d2747fac60148b455","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.1-next-1594369970-663419e3.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCChdCRA9TVsSAnZWagAAb3gP/3+Y11G1nAUJKyMS8CpT\nfFgrYCNYSfoVSsQm3FSxtB8y630tPeY2Rf07vn8Pyyg9lHfra/++Qbu/cgp8\nH9CY5Cjjp1NyjuaVTgWzUpdTR8DLDji3SpWT4SREheKG0/8OxwrJ+z5qA0B7\nJr+CTeWDfRO90z1712h98CdznZcR9gPi3JybuG1cIwvTrXZ0HSonBBMp7JAc\n5Qgk8uSdrkIALdSFfF7+UAzYd/5ICP94HJlXFAPphUHsT3qHafohLlb2lc/9\nVFCmtNlwwKj8F6FuC19KU+GFMdP5HWDieHQ6GlEpK7pfkWX46Fh8rEE70Lqj\n+tSadzkc+BT2ZuZO9EzmEQ/U+5BHXvaYizBmgGeT7Z1GIv6TEqs7QcLbtJ0F\nwqEfQ1tmk7cDeZg/B6DzGzyloX9HrEhu0fxyoaGOTEwfS6q/fQnV607YSTWc\nClzIAZ210oMa4mVpvmTXWJHnyI3RyZw0RPFKO10wqJhFAHn5cE/wyJkDsHwW\n6p3NtXbvyWHmRo0AzKGW95ljVoK48Onc94eSf/5T2a4XjeHLQUg8TqgPyCfV\n7EB/Q5vpYTdTifGnmG/JjiN59IPvyFrXpskR0DznW/LncPSdhx0rz5mPqYRi\n1NDfMILqSAS+setPvFeOE0VndcN5XaoHi6DCCA2NjeKd1rcdF7dHH60OSGsw\nBXub\r\n=CRVk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwrS+lUIMSoJuClywgiSXXX6wAuznJ6AkZJxhjT38A3QIhALiwq8YEf3jrut15/CrijVK1ff2IXZIz64iDTsnmGEt4"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.1-next-1594369970-663419e3.0_1594370140566_0.7128679368084077"},"_hasShrinkwrap":false},"1.38.1-next-1594376555-664a3d11.0":{"name":"@xdn/core","version":"1.38.1-next-1594376555-664a3d11.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.1-next-1594376555-664a3d11.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Rv+hlyZEhp7diXw+/xkDcF5Rq8+LGnXjpinTlPJ5BrjQhNC8MvYxU4oYklj6sSU3mo1PhFFrQ/Pj0BRESpaiwg==","shasum":"4452d2e4d7e4a058c60b83429607a538d4ef01e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.1-next-1594376555-664a3d11.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCEIFCRA9TVsSAnZWagAAzNEP+wW0oz1oa9CMdCxuDSBB\n/Siv0xBBfBRSFctj5LWd8u9OgPzCICNHsIE92asjLpXxNFfywpE406iNlAom\ns6bZMjyNmBUXbLhB1EkNUig4KaDFHESHQX5VY6coT54lWkCWXMEVb1gHjWdR\nczXsR4IAOwv4Hl5pBgz3HzvSzr3QUDJ64Y+A59jbnvXqfQbP3v45Lp49F+4+\n/aHvylWT2D4Orrgb7L+mgJG40s5apge18qWuHAv8iYILkTfrHSDpijqn//9+\nxjXKQPnCO4pHiK7n34fTKcZAB9PUZoiy+KEeCfp9dL2ae0d9kpw1plOl9A8X\nD/apJBjRiOjc39+gxdd4lrj1Fm7FscjYTvrpSGacnwkMdwPLbchEQSg8N3J6\noU18jZuhBVeCqc5cyIRj1qL+NV8dVE2rIQwmaWvp39LTtRlOcHA8stcM/Wil\nLKYvoB4ENFCvtuY4/Fn1H6sQxgA8LdwyWQICO6ebxiyUJgOVMLhcRFgQqeiU\n9vaPhQqs8pv++gLUFcar/GLdaZZXZghxDXE1YQf4Ak7bgjA5pko/1h1b8TTh\nn1DvP6gCY+ikbFHiJs4nIZ+jkFxXNifJKCChpBstUTQTED4+/stck4KMzC2Z\nFvCxDwLYIIOwYoFx6M7UtYsqFJLJggvI6jl2mjzwDN2kaKy5Gpdx7XtYEeqT\nOpQU\r\n=5Vx0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF9ISitEbYfJtL6Cwi0pHzgGTdj/fDvjldxAl6jOjX0AAiB1Q45DMAfIN0xkN+xfCKHFxR4i8vFCf7r8z0zzV8cepg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.1-next-1594376555-664a3d11.0_1594376709442_0.828666175571354"},"_hasShrinkwrap":false},"1.38.1-next-1594378057-f713e94a.0":{"name":"@xdn/core","version":"1.38.1-next-1594378057-f713e94a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.1-next-1594378057-f713e94a.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-P/0/cYBXe3iNcO7CcJHh7LFYWfbQLzf39LFeC8jRdP0JtqZ838fhyiqTBk/VcwueoCRAMbNxxjya1L6863odaA==","shasum":"5dc04d8c46fd85e89c2ea568704debb6da7b7a74","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.1-next-1594378057-f713e94a.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCEfuCRA9TVsSAnZWagAAaG8QAIDoUUt+9lGvy7xTrXZe\n/gNQ/yuTim9cxKM7gfSKt3Y9GOQCPUsfknWtvDzrFZsg7G+x1pi21tPSHbVO\n5F/HVLrMHSWU2/dUx09Y6yIsrRTtYIGgUJraL7LQv+NpnYZ9pVheLKUt6zhX\n0Nj8Cg+w2S8DePK7bjOY2+01or34akrL8UTSQpDRz4qkKvqIDVSNEnhtNMc7\nDRU1dZtPqxnmpYXrkbVcnnxp2WztgG0DxnxiMcvzwzCTXjTaCXr2xY4g0Q4c\nRWrAz99KWwDX3bcxXJU752jGauRMNeDKzdEIBCGouLe4kquFS04loZJ1Dkrs\novg1ulrbs3uqBaoY/47LTmC8u4C+nhxXF+QYPFRLWHcy1xEyYvQVibe/qA5B\nPjQrNXxaA9M3vbHX9aQ2/JlXrFV9eq9c7tQhzEoTopUu4UXHn7vc7Fx5IPkV\ntX8AgcxXsoP1rvuffAbsDFWabC4yMZu3qKUSdzw9CxFAYqMsjvlh0Fo9xf0p\noiIWRRhibQ8pVhHol8eLTvrB5cJd41JsKizLqT2i0Y8o8BBAAgUkgZK39RCM\n2xEE/VzgWRflzxiC0Yuc9akoxV9BXjvMy5iQ9faar0EKgdToVCu8p+3t3UgN\nKTxvi5vNpszxICzHlt9D4Q8SKyNlO66Zty6dYgi8Wy7/ccA5Y17ytdddWL1s\nFIhQ\r\n=vYam\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF8h0LXn0/1eDNnhcOmuito4f4bjDbHpXJ2kriRNCWjhAiAneFuZqpdACNK74GazVJF880K6j8xUuAyTIE6j5czHPw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.1-next-1594378057-f713e94a.0_1594378222297_0.5109651375624349"},"_hasShrinkwrap":false},"1.38.2-next-1594378252-f5cfe71d.0":{"name":"@xdn/core","version":"1.38.2-next-1594378252-f5cfe71d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.2-next-1594378252-f5cfe71d.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-nozWDwUr9DLir3OD3xWVKCs5VRb60fVEWQplz2Qajrz5TqaRjHOBMZcXbg4xrvEGLbCgiUJHNIK7uLVbRPODDA==","shasum":"04e0cdd07ff06d27592957c0d7ade144d32c64c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.2-next-1594378252-f5cfe71d.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCEiwCRA9TVsSAnZWagAAn5YP/jy6G/Qc2iIk/bT0iYF5\npFMhCbmIm8UGRCORZIHo+BODV6+gkM6ky6LBROW0qBhK0CooJfQlD96EHzPM\ngJ/+YsBQqo/Oe+dhCP9wWcqQGoYFJOaAimu3NR9Gx3CPccFhExsqq2+0q2pI\nozklZZhuUDrI1t3QO6x/DvZ4C9cm18w6vJHnmiisJrLgmVWObZLSZHGGmAxf\nkdu3QDX1YxFhRtWVXZc34MtfEZR9cRYNNZKQuZnEU6eqKSndAQr0eehFGWF5\naLdfKnSUHwUYZja7mdUFAy9hR0fUH8Tf8RDVFY2oBY/zR8fGwkIuSmY85CpZ\nCV/fYDiW7yy1YfMc164qoH0ZjHV23OQ7bscA+S40Iy8hwibtrP1/lh99rU5W\nMP+JveS1F6mn2x1WyRkhj3bOO+3J9NEvrVQr7tkFkrUNQN6PG1AcOQCsFKZz\nu184bhs7dTRtlaiax/Vgyndc+in/iVblBwiZEGU4NlyaCCJUzpQP6SFNNtLO\noPe7O2uaD5Amlytzx5tXiYXa5OwnncK8bUobLGu33se5RFRZha3OOUCg1u3I\noTSIB/7i370B1XmcDlcXMMV3KPQss1IjP15V3A7O9EjT0cy7MS1AiAEIsLcR\nVkR9VUTOSrHQxQZtFwMpQHFLajb1FJQKGFk2Ql12iNwPCHt39ZSZAZ6wklp0\nON9g\r\n=F00p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCL2fvAZG4i8C83YMUssfs/9CBbSCDB9W41XLoHRWbfIAIhAMCaT5TAlYSZHQIvDMVMHWFAD3bINk0Pb1LclwxZuM2E"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.2-next-1594378252-f5cfe71d.0_1594378416402_0.03347582795101678"},"_hasShrinkwrap":false},"1.38.1":{"name":"@xdn/core","version":"1.38.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.1","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-nkwYWAtO2VlOOaQAJUUMWX5+Jsxzr3wMfLTQ+ckVQluxfR3vSONqOfDj5/DioC3X4vbTZVK9rSskKDmDQby2ow==","shasum":"2dd63d8e97825d4121921a6ae8822122296c78e7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.1.tgz","fileCount":129,"unpackedSize":554770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCEjYCRA9TVsSAnZWagAAb/oQAJeJGhZGGf+0PqgXNvR4\nqenfDUXXZaYv9R80c5q8OEwynoEUAyhpuqX6ikULA4I/14uNmvyAk+ifo2NY\nSMDlMGNt3CkhEFRVz06F070sn5dY7RvYw9d1rSpix/kNzwDYjmpafJLPv9Xj\niWIoF7t7Nzx1/tSJkmqKs8ZTit6w0CpSxX/VK9vegYIoNfzSzaXnUsLRSiDJ\n/Ok00bpP4yiDIwoHwA4CMj1InaF2rsn2rvGN7zYEtAYZywEz607ImAlIXSAH\nPUbDDzSEvyhmSed6YDr9FxF2ggDjmjLI9EkFg1wB9al+wAHgDvfMAcxK/w6Q\nv+bMRijIwsE2PVePBOpkyonyaafa6Y87kM6+2JVKl2H17cJEetnan63dsLEL\nG92zoui91fkjCKjt4L3d3Khjkmpoft0JC+6JW8ebF1xrMisIfltOPaZj8HVE\nRg8aKe+NmwMvh+xsTFN3oOGf2XuEvfv0+AI8CTeTJloErQ0sOccVbm9ACdft\n9tDskkHGu4oaPFhQqo9qDWwpCIQd4HRKeVz0qg7I0YzEAZOniSNH1geIvQsH\nhapO0Wdbk5Mf7uibjQIB5UPZ5mpDckQpbKOteK8Y6K6swUVuiI1P8LO2EXzf\ndfVCJFcG7JqHhVRQmR6ii136Ct+Z0+vR0Ovbumh4HWEBffssJX4pSdAt5RLw\nbeqp\r\n=sNfF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxju+QcpNfXIK5piQhj136XHTGEKQEsdRKtO/fbBi+kwIgNJFvBdzTZEQPGmQOfd8bMD1NFAB+ojIJiZvwlHsnfbA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.1_1594378455741_0.004845690843563677"},"_hasShrinkwrap":false},"1.38.3-next-1594384746-32ea3f02.0":{"name":"@xdn/core","version":"1.38.3-next-1594384746-32ea3f02.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.3-next-1594384746-32ea3f02.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-V6ArM9xGdSBeYoAiug6PLXNG82+N1c+qjvTspv0WiW8wc1uT71EnE99eGFeLXab5cODBopCdCsPP+0/AivTpxA==","shasum":"64f86fab4131a699b7bb136374adcf37113fb327","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.3-next-1594384746-32ea3f02.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCGIPCRA9TVsSAnZWagAALfIP/3Xx40z4fWcyHgXb48yh\nDm81WIJc/osKqoJDbbag59zp/iaWC7XY7YT8lIShT52/J4V4dxFFeFzdNCSu\nLQS8LQpt2hY50L+PCr0zjhVuISKBz4q08kECgdb0YEH4a8O59jTGBMgZGlZx\nbDBtY0v/wFFv4KVw0j29Zg4LY5REz4f/Z+RHC3cNv10OdFTk9PfJTXtvvj/d\nU6XHzGG+JwCDbHeDZIdwy2RVETw2mpGuz3Nxzvs/n2UZJLTQyRV1mH9E5rNm\n3TVBv2FoFoNs47g9AjxL1bgvqqWCTVgXPdBYy6qkZQwkc58NVZnUXW/h8pRz\n5s6lWKztDjlsvbv3HAI2EVbbMTnH3G9wog/D8I4NV/GpBuOQBTfs+1tVYC87\nAR3QwOwy5LoZDQb83Z27OmMsco0zNjmfn/hZJVrbr7YnwbkQOQtL9EAxrhcD\nyObQ1EvXVJxDvv+IH9qH2iJ3CSSFKF4a2e7iEwYxoapAbOJOtgB/35SRgscH\nywJSsYpyLwLma6D/2z0tBtFJOCLMuaJeDYP6qxgPbg42O01AQvcIMWrRLySr\nMf04UvmaWj8slggTaF7w8UmXf54bS2nEpJf14A9u/MlrbywkLQv2orbFTfgU\nzISVDUnGWqLsaKIpXUo1yvcBPItQ/vMX37sV0a9NaNjVF1L8eyUbmvjYrpWQ\noNsu\r\n=w+PS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIbQA1VAXMTyIFTzFcr40LwRDovpjorh3y1jW7iN+IJAIhAM0es5o1ptqtS+TVUWtGQN2nhmO0jC7Sg+IvVThFNoTy"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.3-next-1594384746-32ea3f02.0_1594384911384_0.8397075975146526"},"_hasShrinkwrap":false},"1.38.2":{"name":"@xdn/core","version":"1.38.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.2","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ZZwRSddTituCgG2TFmfOAL8NF+pFlvO2GI2xY6svOBnNPtyNoLv50t9NM7wXZQuXVN0pfYEcecwKzNcc1u8rfw==","shasum":"bb3a3008291549c670c33bfdfa32bfcd8dcb4eb8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.2.tgz","fileCount":129,"unpackedSize":554770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCGJ0CRA9TVsSAnZWagAAQJgP/25ugbXpS0nwXDxx94VD\nlfs3dtbLNh3OEHTnKROJSwToJCmcfy1FxL4azQ8bRC93kfcP2EGWI/seA8i6\nykNTcrDx29AKjbuXslOnI8xjObuwskKLA4Pxnd2uvLdYbIyUUwQolE3eOnXI\nvxGYVXUprnW5rel8P1hiC9cSCAKf7GkBRKGP7vLglEb0xk6RU59UdQ2cVsWb\nskTHTMSm6zQxyONEEXxYzOTlEtj+D0jAFMP3Fj/LGrbuimMXIYvz4nnBVTN+\n/VeLVSs4v5vbj9GtBSTPHDCkOAAgxJT4HJBbDqX4X9iQmswb5cllFRg9ZQ51\ntc6UzRfPuKGE5qMVojy8RkOCPTRA9hsN0dtlMkkvxbgkNvbXkZKrYYti/iKy\nSpcBM8o88PeH5GxJWd6VV87oKguBVGiwj5/eZGct2Vps0hMfIBSUoFfUksk0\nc0FvH1/E+14gJAjhK1u/18ReJAwrpfE/Kcmk2VpEFIABsmk9+uyvd4cZWlMK\ncP27VqaqBlLDL0wfbyvxhoZTdkBVsCWDWWxgPH+IoqqhORJMegUbyo+oxmkb\n7R456qQObG4TWL5mjkifKh6jjz1UHhdSnCDrzWwxRu/pB6U28udhGU0ptmaJ\nCuA7A3XB8AwHJnpe6kU0a6px/urX7dmCL0Vhvo2Ny6GYgzgXtM5bWsIkneVX\nPNjg\r\n=u2+9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFCJH5myUuQ6G5te4H698At78VrNkz9DiIyCW6ybo+UOAiAykXRd6N1BvYeDdkMjqahcmEogk1YesjApm646jtmINQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.2_1594385011785_0.21122058533369192"},"_hasShrinkwrap":false},"1.38.3-next-1594385777-433e3ace.0":{"name":"@xdn/core","version":"1.38.3-next-1594385777-433e3ace.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.3-next-1594385777-433e3ace.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-9aS+RrqVR568aXYnlw5agxWnp7JpLfpa7Zo9rkv3/XxEngO4UuWePVZCeZZoJfKQiml4t2a/6uqd9HAVWZD+yQ==","shasum":"94e79b83899ea31d0772828517ecf6689de396c4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.3-next-1594385777-433e3ace.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCGYbCRA9TVsSAnZWagAABS0QAKPGULBbvoHFKnTN/mAt\nf1/CSRI+/2iw6Jr7pAgLZbeCZPjJHv4UVdmv8j7QN1Qh6sWc0WvReM6kTiBh\nTYx4MNLBCUrK6odZK1XJOWcEuCsdKCxo9poMJT4v+uqK/HjS1KlPoEVTPsMd\nce/eJgiiA1XZsW+8w8oiL83Fq5AcRcWCjA5tzLghnkzs2DxD3jhtXlnJ6dNW\nmk38X4xJ+Nmy404CQ2nEefbJquwV8warZ1U2GjMKqIJackgUmhmbOD4WnBA/\nGLDcN/pbcNUUlX4EQC5b7fk+0YYev74qslYhb94AUrF7rDBO2tNHUFBKXrVJ\nu+cRdNfmqmbmJPC8KhDma96f29fOwctCYbEpiSTY5BNRzMHlbR8uATdPGdqB\nO/pCoYsEUjxTskn2SeWAWBFnIwAOcqnBp6CG/BJrd/YZtPQs8u290sOulLvD\neq7ZoXE1Vw7PTgQsd6NHs4HVEHkRe40dX5qjT/hb2qWvJnDVjHJahEJ359o7\nxSrfe4BbfTQBozEVr3+bSm9UJF0J5Y/EgYbhjm9OgCkxHfJQosF3N+uin/4y\niVEPqAdR8ccEP5f22nGABOqsBNqIDKGla6qfzyzWDF8cclPn4emtNMyfueuA\n2qFuO5uZduEqDaZA6q+UJcJEaI9YNwfCY7tIn30ED29GZNE7R1An3mfVcdSP\ndBey\r\n=Jgie\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtosb0M886LmqwnXADbbOwkSAVZBVvvcdc1BiLniUaNQIgAaQ6zXYD8fHV5Blp3VAoEwQIH/lrf2TEtIe3kCtHKNA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.3-next-1594385777-433e3ace.0_1594385946855_0.5632664007885535"},"_hasShrinkwrap":false},"2.0.0-alpha.5":{"name":"@xdn/core","version":"2.0.0-alpha.5","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@2.0.0-alpha.5","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-n29C3ZiWUVRQZQVRXkn8yjotpXmM71/yppyhLoLnq/Vx5P7JpnKx1r/Nlv6z4nQnM29uW0TY8qwAH/J+aACxGw==","shasum":"fe2cdd59a02a15fe72978d1fc85f905e21283a1d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.0-alpha.5.tgz","fileCount":127,"unpackedSize":555289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfCGe9CRA9TVsSAnZWagAAg7IP/0yRpRBt+mNGw87IWF34\nA4FT65ij+0gJriAmfTHgl+tgyX01dqiArG6x0oSQoEcN2m9LPhLvgRBXoCNC\nb/BJC5P95pXZxEO9XwQgzdCH6hgcVzEBcR+0T5InldKw2ijZOcOWMzlyPSsX\nQpH41dveeOCnstE1VDCjMSQJ1tllBBFFriGo/hkNnJ8RCyAgRSTLL9fwbqVg\ncAzsu6juyvWaHr0a7gR9+UDVT0nWgDWSpCPKYb07Suf+Nl0+H57Kho7VEnMT\nDDlgnPN3L7uKcXYPgVVDpFI3ik0rISJc3vWP4Cg7xJKanX60mGKX8vw2YfGZ\nYHOI89+yYqkWQPUPh2+4TCL1kyWAPIr+ajGqCehty3CQOcKf2bxQm8AvOfvv\nfBGoJtn8D3DAyxIigzhGHzrhpblqpdx/U1SG1aulBQQTTGkMPfcqUUSfiyNF\nGBBiGEomzc1W1HvN2cmafOiQsWCYF2h3bRvwCaQgFdRRb+/cg87shnWSFFvL\nFiq9wWjXnB55zb/T6V1W9Gs028o6e4Ragist8UG+dY6P3qSA52/DqeKmCcby\n6wOFQalaMctSzoQIiLrR2OKYCOsYrifitDattTWUininNlLEMc9Sj+dJLEvc\ndRClIz10aY23PGUYK7Dc0Dh3udg03oQzcnwzEuyWsQFKP28LpvL0QT6b27g0\nfaDg\r\n=lVS9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDLF46BDpe4NLyj71Rh9i443AomUEylHZbdercqQQ0k2AiA4DRE60V4+ls5vSAbz64WJq+fTSpPCvXusbzZLOyU68A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.0-alpha.5_1594386364900_0.5902945170160543"},"_hasShrinkwrap":false},"1.38.3-next-1594642501-8d89315d.0":{"name":"@xdn/core","version":"1.38.3-next-1594642501-8d89315d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.3-next-1594642501-8d89315d.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-UImq3g42Yyz8dgTWrLALNF8VKd+VX1pXhO5B+SUwJBcz2SUTj6qSlOiySybGWSKti+opswYZt6/8iBCaaMYNtw==","shasum":"aec1d208a74f30067683af2b45595ec0d06cd41e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.3-next-1594642501-8d89315d.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDFD6CRA9TVsSAnZWagAADQIQAJOt4sS32AhgnXckbWDp\nOMKw/WdZg8iwHNKbIFPToLSjkd4LJxNhjYwx6TCcXNV9XAYBFsRNuHVitibi\n9Kd0xUYoxtjJ7A+T7EWRiVF6qMf5/wDXiTE7le/EkFvgz1x0wk4sUPF4Lsob\n+KreKNsOgq5jUfsh2dy3TiG2Xx+ehkttSfVjL7cYl856Crz5X5msNeVvUFvF\njqyGI1QTL9BWGmjcJ9MpP1tfd9RSMG09GLX5X1epgBk2KfNHquGuIQ478Y9f\noBbGmqmnHYb8m8eCjXm0JkgQZRTN/Gd0yssWvS5lHb5yteJTJzEiZZo/L1Rv\nCTmJSLqUXSuKniGM2h4et4JcG5Biavf4/DDTv27jmHXPVm18wUKXfpK93dTD\n0V+BTVzfSZrHkfUpKE1K+j6v4rsCQ3DGe0aBX19rUO66vCr+UlkDoCsRV9pg\nwmkJ1nqFNo0weAaA9f14aobibB/Rz3xzGuKg80I8m2sizlPCilldjLaJlKTh\nQlBe1hxMyYP9BdH3DZRmh6zVeG8SwDGvAjloiOEKmgHpaL8LKpBZ/sFEHTrE\nVwVHugBowjkRqrnrRXwu8EWXug/h3K+9ZaPGveXBWafHPytdZe2qeUZEhaaD\nN0qxmFVJBUtnsQXZIGKR26xmigOhPk9WHb8gMDEkCxRQoQKG2Unb7se7wWHj\nl+81\r\n=H4m6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhdpjR5vlZtSwMISNJ+PCFmcJ9Ln8j8wJBSveAvbwQEgIhAMA5s2sKDxr3JSh3FntuxSMojP0d5ixww1c3530+tmZC"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.3-next-1594642501-8d89315d.0_1594642681930_0.10774548445099641"},"_hasShrinkwrap":false},"1.38.3-next-1594643568-b7f9a6e2.0":{"name":"@xdn/core","version":"1.38.3-next-1594643568-b7f9a6e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.3-next-1594643568-b7f9a6e2.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-BKVX5Wjs4RLq7b2YvqvDME3V9iKtE1OhaxF1U4SSuHP3S7vm7RjDT+zqZHD+HCTLoy3MPhSnAkiRbnUK/QlpUQ==","shasum":"74c514ab647ae738a7ca386bdbabe3064864590d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.3-next-1594643568-b7f9a6e2.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDFUgCRA9TVsSAnZWagAA+G8P/0WrF4oNh05r+5hm9z7c\nLjfE0o664ed2ADhgxRgSnDyXNuPzCRLi2tHYw2x50ftkGFmA1bRJ8ADxVRON\nBez2VHA6L+qemxhCTBEEnBuAEDvigWpv14BJ236a8ca8VemuorcZjYseftJr\nhvmg9OR+q8oT+8o5zVzNXK+jmuW9weXzaAZEGl9DULdGUBd0i0wa5euyW1Og\nUpmPE0vLpMrAvVR7Ugtiz606n4ApldY9dEWbPtx/tm6y8jxSyfZR0V6PXYoa\nLRArwbtMGLjCktYNcL0avygzfnKXVzGq7+5TTLVj2ilKPclr2n34Mcyx5g2j\nLHzciDiqz9SmDPJXBa5BTwezKH5Hx3K2o1ckHw7HU7eE+qQ/wP/W5dsjtIsl\nCjFUktlGbh11wJWlE2aYsfZb68sy4AjNpt7GEQwFFtArIw9TrLXEoVHjeFv/\n/A4+Aw4owOESk3MBO6lXLakkdXR9igdX0IGkHTEvJLz/n3POj9eMbhAireA2\n7w3NpWgenksImsXvVESKOXg0ZB0GfPoKIefE3KOPAeFor/QPS1VNFiRsadcf\nVi8qY5Az4xXfI4u60tjJge38/Pf5A01GCSpo9MkUOYLUddoLRRkPsEPunV/5\nEaTwPV9+MBOR53j6OCkuJHtkji0fKdlO8u9JoCLEtoni3nV1es6MZyC2KEr4\nOOyK\r\n=Fogb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJhCpYgY/LKF+O77pJJ6eD6TyEUi0idxpb/1a7lylxHQIgYxj4KPNQTdQLSihSxIogIeLXmaSxgl3fXPSIIOdOVj4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.3-next-1594643568-b7f9a6e2.0_1594643743994_0.779696633475272"},"_hasShrinkwrap":false},"1.38.3-next-1594650335-45c13633.0":{"name":"@xdn/core","version":"1.38.3-next-1594650335-45c13633.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.3-next-1594650335-45c13633.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-iBoTsaFwI+qeJOkR9ZPdK04bt0x4cwhYL1gv3Yl+WacrUTNtXmn74rjtnNHFjIYWnfIdPMEX5ExvKUQYoPyeOg==","shasum":"ced75b9ed406def42225c1b2fca2b6662dda81b9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.3-next-1594650335-45c13633.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDG+ICRA9TVsSAnZWagAAMzcP/jTmdUqBfqfD4Y+rl7Hx\nQhtcZ8icEb/5AK/u8mSAdU6RYpNOzWZe17aznZXzXFM/I6P6aGR1SXGCnfN4\n2j51BE0ZRKReM/n6TsUL+O5IY4rN4hnT5sSjYDshPLaQvDbkv2ac2wj4s2/5\nxM4zEH3KMNraqVvGHHynS19rDcMg1ExPg1vV9mmJMft3rz7DqXGAP/7jzl8h\nmEKEE35RpC8E82B39TmVil3GIvbMWh7Kf3af6JR03HKTSvMwT6G3WPwkAbNf\ny1VForQrfBjYHFiTANNfLKSMbsbj9YUMh39dC1u9yvurtdjMSIYXC1JzGSnq\nCs2mjXIfH2bobwagQln81W2iBl3h+cYqVDzXYFk564P+2SYywNACGvj+NowC\no2u+193Uc4EAaljhh2Y9xHUEjJwEN5CVEzxyQ6mUMDcy43Hw0KCtmRZZNQK6\nh0jzhMm7k17vO6DhP0H8r8QxUvrrNOcX34pcFFRutJYuOIm3ADvfmUNDxrUH\ntFw2fq2pVoBVhQHlKUJP+iGqdx5o+hx6YQWd6tBxSYeoAf7UZvdef3UGZUPn\n3GvKyR4JQhNwrq2NNahbFZbpS3Wpjk+Ja+So7yPmTuVbeLLuvaZJJNOevxIx\nYAkUpsBBTfc4t88D2urtw7BrajBWLSu0A6B5qUYCeRfzmcSA3vkaSZ+JBMHt\nn/n9\r\n=dJmY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLGvkrbBt+w/CnbsEy1QbCAIOkNrrqKhkd/2rEFduL0QIhAMHlpgIJm40MLjNFKXhSnYdTvq/yoWx1iChlToZq1xUL"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.3-next-1594650335-45c13633.0_1594650504199_0.7940060458065579"},"_hasShrinkwrap":false},"1.39.2-next-1594654403-5d690c94.0":{"name":"@xdn/core","version":"1.39.2-next-1594654403-5d690c94.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.2-next-1594654403-5d690c94.0","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-HJCNF0JzkbpuzF88tGidSpfcBfAEVcBL7M2rjgHUqKySdOm6peyZUvTsnnBupmOADOUvmaCKAAa37brKASJ8FA==","shasum":"de6ee866e51d017fbd14c14eb12ef5350ed21268","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.2-next-1594654403-5d690c94.0.tgz","fileCount":129,"unpackedSize":554824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDH9yCRA9TVsSAnZWagAANgQP/ibtZ80eTOzZ+wbmapU1\nFbESClQWSe1hTnm49kRHhh2Z/ecE92xwbxah7dyUWFGEey/kMx6KcQUyo4o7\nnihITRG5oCEkP9iyW3f0WPf825mgDLq1qQIcj+6NPUtrMocJVmUklZLoABEI\n4cDuygmJ+T7PsPXveyLEjLQWgRJU3PVEj4OZSZagJANB42hzPZtwuxPXR2W/\nC0rt0Q9/qYnAISOkq0nem/oXOKJ+Igb2dHGV9+oCetiPx1SThFl5xbhAxZTh\n/DBjrcd8JLoTaKhiEUp7rbFcT4KcsgRKHFcIEptt/p9dNfUZbMtn0cU8xSmX\n60c0pahAmKj0u3iK7Jm+ko2cfHxF0ZM/CxAGvre9Knh7XC0pp4us8iTSegqK\nKLcBjWHegxPw8huuyLXBT/cX8b8nT6JFlblcaPJpUyiOFCUj9Rp2DO0QxtvZ\nUh9fdLt1ziJyAA7QCzOzpcJKSZb00jGV/7cY1WXZImNczFarvx6KgWQCbQ0x\nEZ7nfmzqCiAlEQz7oIz+Js8LZDisK5UgLbSJnRkwB1ReOVfywAuHAlpcZnNp\nGUXJzEmXC93N2R1g4CYewO4LB6t56ud+qPAR/xnm3OvOz7kxxSHLq3hTkocC\ncq4i00mmJWQ7lgNMpWgHAXqnzgmwCbD3M9DzaDSkRF7QRuPDIlBICgzMy7Fg\nGROt\r\n=BiCP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG5sFz32Yq4KDzPAXTFeflcXEagfJGONOwz1fxTH5rCPAiEAovZVdxeOKnBX7swvgVBm3o/EV41vDIK2+YR4lG8mQEM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.2-next-1594654403-5d690c94.0_1594654578532_0.5889847239410786"},"_hasShrinkwrap":false},"1.39.1":{"name":"@xdn/core","version":"1.39.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.1","_nodeVersion":"12.18.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-3MFPYNOOTtsZtsn7t56CAedJNFnJQxuBzg942lB6O0hz1BiislZ60EVwCAOt9HQ+KPEPr32QS3n5jJoP3tRECw==","shasum":"eb54893013c1d6ac450c99735e6f460d0a51877a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.1.tgz","fileCount":129,"unpackedSize":554770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDH+zCRA9TVsSAnZWagAA/qkP/jcGmZ4L1IrgkY1jWcHL\nRuznNJmEJ5Wq68aUIi3yALGH91NekIJ8F4jxpCIsuttlSiHPZMJbciVBKmnH\nX5SEtg6SXwrq5CDQ3/1NO0Pk/fs59AmpqZwqHvoUimRHXpKeVlfD7z/N1pYd\nkFv0a11Bz1YsYFzTEGqdwOljaVfQB613kn1bKxcf7ItICs8P6PpU1c3BbjSC\n3tqJL3b/1fo6KE2QcfVba2uHoD35BUBoE3CaXTWlw51HTotaM7fS94iG5z/n\nDTRcK0kOiT9Zgwhfv0XmRT0qpRBjELp8dB0kybKbDQ2mGtKb9THa7QoVxCLe\nFvIhwTrOpb+YqzsiV6s4z7FG0jJsqVDDHt2vw8lCDhjNAuDS33WPjgJ4hl72\n23ElpQC9qh8h5GDD2zOIE57KEzgZVcSfQRRGHe7oNRV4udp2pIJ/8OdX7Yy+\nRgtHh77vV97YBMFoxzbSbQiJVKJg8vt0o4KpDsnzHcyIWSQ2IxADfpKNsnZS\nWeJbdCkE2wGD+Ck2PfGwiPCd0eL03xoZj/6vbducKsWRwOFlq3CBaXYafrWg\nXZxO57TdgbKdq80zXTnWc+1fPcdEW6IblDpafUZzpdbG1BimjSQFedn9xvDZ\n6c9TCdUEmgsLLIxOmSBSMtzIvPNSb41rsDNTrVfCMVeQR5grg4Smd+zS7pP2\nZRRa\r\n=AcvB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuE/G4K1bYUXIVicI88IDfrm8rcGl7il7HE1oSfrzcewIhAPChD3a1pDV+Z2tuVsODeywzh9r66kHV/DrtLA8ufBgK"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.1_1594654643478_0.5063979659332287"},"_hasShrinkwrap":false},"1.38.3-next-1594737036-936a2d93.0":{"name":"@xdn/core","version":"1.38.3-next-1594737036-936a2d93.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.38.3-next-1594737036-936a2d93.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-k98j4c+loQ+ygaUFebm/E+UWHOiuHQfPEk8kV29gl7g3u6E+P+mW9Y/7kkixfab75nc0gz7iOp5U8XW5hRgclg==","shasum":"ee126214676305ef5941e955fc29c8147995283b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.38.3-next-1594737036-936a2d93.0.tgz","fileCount":129,"unpackedSize":556143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDcJACRA9TVsSAnZWagAArNQP/jWsbcOrH+wjiz4GqikV\nG1YjUTq/sdUavJF/U6jOkeoBpwp/z2s8ZC5jkNPL0u5wXiKyzd0JLDaM3jHo\n0VuimLa/GP8p4/OiqDPQcSkHhzH5So2T6Ryl4rXLG3ffQh0oTn6v4MlFKDbf\nMTIrvN7DLI97DIppmCmu3CiXLoQCQgnelycb+/5A+Tal/x8MqcBafq6lQt5U\nzbpQnDZkYMBNpj4/4zAZJ27J+13rPq5+udbP+YJv/7uLpeXmrJgIXf/YfjqP\naNsDDzLoqvl7/IGwGOskos8d4cADd0BT9Ot6Ru/HWkUCNLxIp9fX6d04pk/E\n7wbyh2nVR1arBAMcSyIkXJ4AYN2goA7BDEE4Q5EWShe+uQo63KcGInVZedq6\n1Ajp+tcpjc8L1/qGwJ0t7bddzBkQA4WhE5Ztnve1CxHHZvNFgT1WXE7YqlTd\nbRh+SNNLKRoT2CZiz7NhGtvXEq08c55Afx8csjcoQPY5Wpo0uOavh6ClJSxE\n6ONTYgL6WqzXQPnUL1CVt3M0LQxfW689wXIwXxE53QZx3u8mNjSNHVW26wvA\nMojYQ3JkGoMBaUnACIPRiVM9dYpJQtfXEis9DnAxX5W2020Okkrp4dMSgf3k\nbF91F5MIuPkno+3UpGlQuEUMZNPvWQOYoMZ62PrF6/4AoR0gBHPD5O0lEkUg\nUmSx\r\n=glbv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICkOwPG28+4FFfpZRD5pnmQ+EwPOVFYfrZg9vegmqGkYAiEAlU6a1otvwh9pt0KC58sFkv/XZ0SG2ieTCzORpaBeRGQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.38.3-next-1594737036-936a2d93.0_1594737215811_0.0219572070963876"},"_hasShrinkwrap":false},"1.39.3-next-1594740572-0e08636c.0":{"name":"@xdn/core","version":"1.39.3-next-1594740572-0e08636c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.3-next-1594740572-0e08636c.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-rWg2+h5c/YvlknX/pkZsaPylYVtTVItm1/7MAxEgWyW3/Hotd3BsSFUkk0RvA48HUomyW8pG5356EaTY+pVMAw==","shasum":"8eaaa5ed5b69c464aa98ac30cca4fa2f0967ff71","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.3-next-1594740572-0e08636c.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDdALCRA9TVsSAnZWagAAAKAQAJrtcaapHaTigDsepM+7\nttEU+LP1kZ09WSe31+7Ik0NwZQ/hx/i2cZe3gc2Y0QKJF7wYP4w8ONw7sAOw\ngyLIfpbAkcFFLpQR4A0jtLuMIw1MjuvChPekE7iFirSiU+inG4fpkIMBCTLP\nh1td/NedJWt2+QtW5f+QmCH9RWgJLIzUoZdbujYAeGyKjC2SjdTlnsC+vAOf\nYxLssQtsM5uT5pOxnzXpWuy/PJwD+EtGWlyNCBB+/aCKrpp6cc/zs9r8Ko8Y\npg42N1LgO7mLl0fb/m1A4+RKJyy/Zos+IYC3LJyer1okSPiJUqlQA/aYTb5Q\nL+2EvfdEzw7aXmjN7sJmAXBe7yodK1FnjWiiOBB/0dt+JoNN+zXAeeH/b8uB\nG3FjoLH1Tbxq5Bb8QEyR6ZjcT5cRrfVXMWJbIrWTGInxg7oa91eSNces5Lfe\nPxhOmHrUoqeRHDjA9xs693uxMjYwwo0Bxc4sp1HkN4z7WPrPa7ypLp7UFrlb\nL+J3v5Fd+smPwT5lVTifKqz1wwAv4l+QmewkAAsH/srmYnHs4JwI0SLhqU4o\n5LNbK0lwqEOmJAH+l44073VJcWmTvfNLS92CLwtUDp7MgP6FNa+WULKvJznH\nWhxJViNAd2hGASse5j13u5SeURoLbNZEDTVmCDs/vXegh3cHZULjNo9lHEwc\nOGw1\r\n=faj1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAgmOfLZv2dLCouII5iEItLhnsQveWQ7bhcoXE0e0oZQIgcpG4H5AU8Vk2HVLiGcch4zZN+6PFbowuh7PSt+Z03EY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.3-next-1594740572-0e08636c.0_1594740747213_0.3400824663168638"},"_hasShrinkwrap":false},"1.39.3-next-1594754486-3f4c8d9c.0":{"name":"@xdn/core","version":"1.39.3-next-1594754486-3f4c8d9c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.3-next-1594754486-3f4c8d9c.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-1j0mqbk2gQ1SI5aAvzLLOZVHBRH4qKQStfbSVDwycce/IXukG+LKNWlQKS2UL6W9BavfAj1/VHxT7K0Ej2Ty+w==","shasum":"8c0737d8f4d243c7ac9648742297025d863c6f7a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.3-next-1594754486-3f4c8d9c.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDgZbCRA9TVsSAnZWagAAfSsP/1IFmgKVZ8XEhGZxxuZs\nVCC3BWXvGEMa0N9Pye9ZeLMFYAHz8DJBDW6jr1lbqzA2nOGq4JskEZVLz5JG\nHd/8WwHhBEeu2Y/DZA9ut/iuf3sTSTxj1s6MstTDZzsyNvGAx1RC21rG8hBF\n1OqeSS+/XUiiYypS8Nw6YG9usrNNGSAHmsD8zBL51oGWNbWKGV9TjNPFCjcb\nu1OdE1W1pGlgPwa0zTXRKEjC8PSck/Dz9IIvTN6EM79rOo3w5njMaH1SOxXC\n+LoQ0rKG69wRgPWHqsXhiOwRphlhsWqV5aV8Idp3ZgJHscAlF/Ju7nPhkALe\n9IMVEDxYSDklHBKkIYzkqVn9BEFGum1c3Q9k03KGsf7rySO+beA0KIaTN+eH\nrzicMpAL5LlHdqBPGOoXyEOvVCyUS6moRBFMCwCeu/GGfsjar5amh6Wj91tu\nNT7XREVeBDujyCYWcwZp9BnwtRPTuH8wGt7WvGJjWjHfsM2d/lT90ZjWQP1P\npZpmf05ot8K64PjnDOXCojKQFbZY/7zlHvsD//u15Su/qWuesPkq7deK+zPP\nZkwBhMND6Pmw/uYU3DxA4Fpmgt54DA0R9QBdVuQ07o3rB9bLxtLdFjdcwDFq\nOjpFK+TBqVNccqyoM/RihsDvSUh17ap8uL0zQqiWe5azAEz/USGC3ifsC32p\nFCR0\r\n=6f1x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHcLb8rGLwXKRpZ4iMAfTTlY5FToDI31J7Yp5/51LYgAIhAJxGfbIJ13hSnyHEz/q1wehr1ydZsS2jRW7ZmhK9fYT8"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.3-next-1594754486-3f4c8d9c.0_1594754650863_0.10300833415097443"},"_hasShrinkwrap":false},"1.39.2":{"name":"@xdn/core","version":"1.39.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.2","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-XahkopiN+JJf3kr3FqgWfN1xUI+49jYX2aFkiyA0u6xjxx4l4lpLqd776hZjgmU2PNts8fV7vvOEEa137OVy6Q==","shasum":"f594c3647d336f34741489642ed1a0d81bda001b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.2.tgz","fileCount":129,"unpackedSize":554756,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDgapCRA9TVsSAnZWagAAVE0P/jphC7t915JeIQqiF+2c\nhoKr8M1uRFNMr3BP3G34ona3hcgc/FFFzDF+S5IgvQa86mtTuIbRIlj4wZDC\nAKx5Oi/sHfM/9/wUPqPrbUsJb9Z3tQtSkVuCHCkaOWt8yXqe09Se8neB0XF+\nrU0W8F9WS/uLp3OFPdd15lnyuQnml8kibCqU261VgDyfXMxNrXhAn2RXSFOx\n3BHMl6u3ySnNJIUCYRVy0UNJQH03/lKKDXDGDSqQwHhQtZW42dhaEvxj1MZQ\n1wvvXzV3lawSNj62yO+xFHFDiWAzR/AEPWKmxO5x6V4Qn8qxAZ0eKaDgx3uG\nkUi2flCOasATV1bHLG3npt199fd0brM5Db1qUEawO2xYWzcE66yGImaEHQg8\nGrLRzqb0laYWwObBiUT64ByKNO7K7qXjFemTlsILG4kkuyqKoxCmQQbfX1qo\niEbphox2YgCaiHihl+onaf6PHe0T9gYfhmPxNU1LvpQRs+qNt8ncT314DyrM\nJCJWQBrSShxhZszBbHXtpnkrsDwaFcDiyuud+Z0GwcuDxYyk3t1wcc4TfVHh\nSlIswr9OF3UtS7hjJqk3ehfIh/Wj+1T+VKpifgVyZ9tFa71R44lkgj58aO0O\nLc6TmlrRQVsXexV2ZcMoPnfGfToTxxOrK+7HfCDyXdse8ktuJedGrjweOHVU\nFhxm\r\n=9/Yc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHKea75YESEeZJMAhY4mZseNTSngGA5QklCVjg7tdnwTAiBkTTFnC2GcnMCkJvC7ywr5q86oooYmsGrv5tFHy58FQw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.2_1594754728711_0.07238657830289741"},"_hasShrinkwrap":false},"1.39.3-next-1594809539-bfceb7fe.0":{"name":"@xdn/core","version":"1.39.3-next-1594809539-bfceb7fe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.3-next-1594809539-bfceb7fe.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-g8G0HIRI++hGUsgE/3Fbo5x6ie4ENOHaEtoqYwcakntmaIpskbw4hWghs13RsaXDXwpKpVvS4LA/GC9mTU2BaQ==","shasum":"7988c24943bf84901483cc8ff35b44d9cd651e52","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.3-next-1594809539-bfceb7fe.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDt1qCRA9TVsSAnZWagAAybsQAJ0PzpHF4d36urWCl9s+\ne/U+8P6ny9RG3J2P1GbiQLZSYlOTu7tt24g28fF/PR8EFcz9kGh4TyEiwJT9\nAFc7gO7JirvEiUgt5uLPS1T3Ft8gT15yUUhn4H6C9fvyKzHn5336If9/e9HX\ntf0EmOu1tS6rSDv/vCut5ToDHDtBYx4KbWNRECkp0J+SUbYL4r/+gA0ExYNM\nZgCll6Tzpqhiq6F8NSGLv6T5lDeGrZxO64tJMpkA3HqlR+eZ+ZGEFUwoSAvN\n14JQCoxMaQwsWE3jOZiT6It6PQGqhiUX6helbKNSi6y3oPQ1D+h7p9gR2QGW\nKbTN/HHSJeed3cxUodF6cHwK3fNWZog4CVhpLnPrUOvJ1TVrB2EvqzM/FeS6\n6j3kgNieFDODZkW1KmQU0ZfGYW5pbfNdM3qlSbYvcik6HIBxI1iXaGznkB51\n1rBxAjpf2g2coKTJ5x3+6UhzuWERAOaDrm0rQn0IZckrTMGLbOC1ZYEKQlCi\nupr3Ucr1wuGPNa9UboGKnfeyXBId3YoSiS7TMUVsMq82OePUVHDCIOB8aoDi\nMPMfQps9k9dTymY7EU6hZwxRDE31TxxDg8lpWLyPPAmW99KZiL30lYHDI5m2\nQOQsHbP26M5hOkTBxh21jblacGyBRrqaL1RIbIfBaHz7LahmROQg077+mW9c\n3siO\r\n=baQ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCc8bEjtKQMeOYl6nSe/hce5oQX7FHf1dFsl+o+B2OWygIhALnsUZkYKMrOuf1BvnkjyaqZDrD+T92r/mFg34AYN1En"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.3-next-1594809539-bfceb7fe.0_1594809705554_0.6610436093719034"},"_hasShrinkwrap":false},"1.40.1-next-1594809654-8761826e.0":{"name":"@xdn/core","version":"1.40.1-next-1594809654-8761826e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.40.1-next-1594809654-8761826e.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-YEyjtbJ22SXpOJnYQGSWLYiMDdiAphxnChWT1SQUzXOvMEi+q13k+6ELYqKtgG+jD4qebiuXfR5fWKNrlR0uSQ==","shasum":"a270c36ede83f39070bee141fe51cfc918891619","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.40.1-next-1594809654-8761826e.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDt3dCRA9TVsSAnZWagAABK8P+wRE6ikyNH2o7T9dds7I\nnGdsTsGFYra6d6op2nUm6TtWdjGSVk9LMLy2YAEWF/JSmtjAA1jefJF7CPG0\nAkbBe0u2Tbz5Wdd5+rSsCf7D0zdj62ROazYykxefVzupIYn2JScUdNt2WyiG\ntMT6n7RPTUqNXvAl2Ah5SJqQmG8qeU8Gug/YCnLozwxUHIL75M2orsVOtlRE\ne7StH0APpb7Br2tLhYAVPGZMisK5IuWl5cR2gvr1nF1sPPQCBk/Z9yvtUBzG\noUWLiWTxJXzhh3oDF5AzvoxZzxvL0GTgNHeJumoipYfrIHVdD4VO14LPwrnP\nL6ETfrvQO0d+VAWqjfZ42THHi9+NFUWa1sTHKk0UncTwE1/bnRoLTTOus8bM\nGoS4itmugOLDZz8oksvGUe48IhKpAm45WxpIu14q6VvAIiQKFWZeoE0gOkVH\n+6oWO9yNIGGY2nn2Cjm9Fjpr18htscA+H4kVif6vuvHIENUMEjZPow4FRQ+o\nrgCeHSj15cDxqsvLZk9JN0ZXnKoqFrxjSOcjMOHCiR6LuEjtJfJwrttIMS0w\nxfcGSX96//ZjPrwBTsyx+hyGyQT+ucVjqbQrD/svnr/SAjg7wMg2NDy7ROhQ\ntiNSFgrdx+YrRRLfGRBDNvkOPN+la9MW/9oCS18jNV8WkasIShAwvAj957RC\nHfA6\r\n=3bGw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFbPQFGiugjCkYDsETPgbErySooBhZv2J0kcPe57yzFwIgECvG9ITGminCV8+AlBYRZIO11sRHxb2hkgCTMrst9cA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.40.1-next-1594809654-8761826e.0_1594809821093_0.17522351404800318"},"_hasShrinkwrap":false},"1.40.0":{"name":"@xdn/core","version":"1.40.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.40.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-77F03Kpf+NzkjTR0EWZTVD/7QyAj276mjoWxZcXGoOHw9UK7OXjfwnIzPDnZmDWNUxz5ArzByCekvLjzOU4awA==","shasum":"4acdfedac2c00c955c71b8dd3e7541dd86c46e84","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.40.0.tgz","fileCount":129,"unpackedSize":554756,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDt4HCRA9TVsSAnZWagAArGkQAKSIwAUyVck8ZcVPTIYy\nCbxSw/GhWQqpKQq7ZBu2O2IphO8N2dh93Oi6E21q8i5UH+7iSx/i8vYIM9Ln\nIAt3RjKSLukA84VOYcp5zjDhWMqnYSIOZD/kUrqtl9D8UU5IJ76X/JE4qNbo\nlBjT90gwr2qvZNjiZb640RNrgXWs7LVIIJpdyuay27gKJRCzOO5fEKwyNHMB\nytblvWcycEDeWs9GG2lKWxfKHUNxpHLjziuJzt+y8XyYvuTK3VVZko9EKCb/\niy8abm+dL2+RC48AyIDoI0pAElnVFE/RCmzyNlUadSz7+W+rGWcA7JO4uQiT\nqN9nigO6LPeWeBkZnO6qNTwvuiRqkNpfp/Xm6glHWizZn7iRBeg2+cZ8Iiol\nquqj+SAHj01IrNFnnRjNPYuoVIaZIeBNrgTuJXwgHooE1/D23yZscqR+P3wd\ngC3qZ6siTHE7KyYYN7YKkZiT2vkk161GWWRRRi8UuOOmjfv2J0z4FgmFifLk\nko5nNa9IGUoMeptR9UGKVJ6X7e45kR3B/K7tYSlQi7ZjSLZ8xWWR0BG4NlJa\nBKujBIKY35ibFow7kx4xjiIQV06k5S/ExGZ4DuNu0gYhJbmG+LlgC5+964Dn\nSuIi9nf/ZU4WADSpQoBo8yVTmu56maFAQ24a9zdCGGG3GNfzQ2XiskVRPr3J\nwZQx\r\n=mbx6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFqnaY/Wf5PJ7AhGYj9+j1bCjPsm5DqHHv9LzhiZ2gNAAiBsKwwJEic6L1+u4Gv7QeDQpqNmrexYTCL99IE9jX9osg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.40.0_1594809863086_0.2670561509445053"},"_hasShrinkwrap":false},"1.39.3-next-1594810237-e5337606.0":{"name":"@xdn/core","version":"1.39.3-next-1594810237-e5337606.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.3-next-1594810237-e5337606.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Gqa5gpLRkt0+8QtHivCPicj7WkFr9rd3XS2eDmmL/zSCDbTxqsczxTpWTHVvBfG1USNovLBQ+MFre2HFw6S74A==","shasum":"b19a084faa930b40d2a768d31b256560421a6f85","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.3-next-1594810237-e5337606.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDuAqCRA9TVsSAnZWagAA1QMP/00SS7WR0lU1keC88amz\nDPHQHYl0pAUIPK9LJhSrMJIRiM1YGrNWXoP0CBSE+nxYlIdYGe+xWN4Tt6c8\nHYcKikq2usTPUP/UdW/D740+KsblNFfapU5IPcrGrl89V9jtGx+hQ+gj9Q3j\nNgvZLyO6bfin57VckBb6v8EWNEW3cWqFj152ewfQwdMTDkEX2LZWQZHPfxa1\nYAdkM7PZTvpyPWJ+IJ4Vux5kspP/xQ4O8aBAF9GdYcCxWqiUk8vU8oC36rbA\neegvYpOx6UV3mzAQdixWldvgiuczXkP1UXAa3OdJS1ijY4/acnFhXWQ9uA5p\nJXIofbTjddDCcCVs7P3kJ5WH9+YqBE399xtpEEEERUPe+UE+d2G/cLVLTWvn\nSF6vPvRCbLPZnnh3q41mOsGW8Q+1CWr/ThNLkf62KVVLo4KOjEsKzXfokkTw\nAtnf8dHq5QQa8rNlkO2AVDAIHxjCmQfM1WIecrebTwfJTCodMcShr+Qx1HMn\nA0CHoOFM8t2y0RVRmO2QbBosnOskIq7v0MT/mFeuwRhDGbf8/6b4BgkZwdkc\nJP96kk6xDqrq2VgoPJsRpNAnBHOA3A5gD2JulYZNETMYV05eOcB+Woxo8hQE\nLVRgr6x2qBIKL4pPorZeovhmqHKyzpPgkbKMDH6VbyWtXFVAXDfUUzyfKhLH\nhs7b\r\n=jZJi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcqlY4MvPY+h35KbeRgKHxK7AWA6gGhbFGyYNemrInvAiAo6tEl0Ez+a7F5mWjrQEP0CGwm+Sj1pb/zpRw8T7YurA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.3-next-1594810237-e5337606.0_1594810409642_0.7313805938972979"},"_hasShrinkwrap":false},"1.39.3-next-1594813468-60d8396b.0":{"name":"@xdn/core","version":"1.39.3-next-1594813468-60d8396b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.3-next-1594813468-60d8396b.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-0F4KuHvpI87JTpzaTAgGIKsDc9q0P6qQLzhkPymsuhVDCPzrDy3MlhIbBG38wguZY4Soao7nWQQstl2/vpHoFg==","shasum":"e8a48507c242a5cd92a9afeabb1db05e09e95fce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.3-next-1594813468-60d8396b.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDuzLCRA9TVsSAnZWagAAvzQP/14Mhvt1M/Y2UaDin//p\n2CEWfGLU8uakJYGnYnrRlOyNYo/lltDlwDyqSkThzGKb3MUk9KZjAhjirP3y\nCFGFCv7q9PlMZB0xaKVGKnwRglOaBxylogftB7E2EVJ+3T7d8Xq/YGnfa36l\n7KwTJs8j4+KubztX49VyguKzFG47nJICcI9NMotTzdcaBuablJqcTs27iP8N\n4al5GOyCzQi1ABoEQathNhe0Qu/wmZ/SUy5WiOiMHKYbZHL/t6tWBJ6cYALl\nZGW3BBa4rYYrzoM0QJp/cRlOU88lb3WSu3dJbPA4at5X9LJaZ/DZsB9R3ZQZ\nTZbGht1zUlYy0/v69Nj0gK7kb4muUl+6OssGlh7rRFCYWrF+RqNpMn15cMyF\noyiIasksyI8JMXmBzzOooGu73pzZ1Td56nj8nn4YMfhnc4MBkpqWXnTHGWVi\nIFRlzgrpZuW1KDFhW/0PKTst8/QQZ6hYp1uuHy1nBI/kG5hdOfppMDyQx1//\nH7BQ+mb+AGnMPiSoQGAvzkbngRYy8F8pHtIsB7k9lgBS2FT4cMcDmqrMpIke\n2xfw4Ak2TVQhYeonjWtCRmI2aEIDrLDpyR0CyIV70RvtQ6n/jL240ka9CY7O\nGcsGvPeUQVbKsUZudZyZT8BK5vRepc6eo4R/uZd/WcQEAH4YNbgxydG0/TO4\nDWha\r\n=D5lw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDoJD4j+k1PeZUQVC3ggK+8bfoG5DvlPcrIN0oVzxdhsAiEAyNQy2KhH95eMsOxCBKAKbHWo5ySgYHjLyYrPUgqTiAI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.3-next-1594813468-60d8396b.0_1594813643163_0.35685132264380437"},"_hasShrinkwrap":false},"1.39.3-next-1594814447-a26e270e.0":{"name":"@xdn/core","version":"1.39.3-next-1594814447-a26e270e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.3-next-1594814447-a26e270e.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-wD1ftC6n7/E8PZ3mntL5SXiNwEQnNAJNK4+7iHidd1lUpcscnGO/vsLwM5CsIf9/u1gbCl2J1jxgVXmrSLnZWw==","shasum":"7c9b6b9a69a31c209033602615727f6c6f330e6e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.3-next-1594814447-a26e270e.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDvCxCRA9TVsSAnZWagAAn9oP/jPbL9JQphpRpBRo8YuR\nmmEofqJiqt9eJjwDCqu4Gc6pVRw8LL26g3bzWLgl8ERmpBo+tYQPyx1JPqk+\nTge9vmuJBBS1/b08cXNu8ydA5wfMXFUdMKhvVVYnxTX6/o+kI4+eKCgbZbqk\ng6ZB+wPEsModP5Sf9vh77owQesKeus3lVn/RahkSk3pH54iGRa2xpPUaQfvV\n+bVIKdbgrHDlSwFsqokG499cPLGvCq26P556y66f7pRpJMkiE3HjsGqUDfI4\nAJcdVkNTVw7EbMKQUnyFzJQ0U5fCw60Q62UQ5f/zkMtT73K/FtKXoy2s+75t\nkVsM5of3J5uQp+YiP5YhdSBfWzJACDV9RmNDO7FXmsKW1QWnL6K+k2lkov8F\n8HVO194or2UJtakaDTCbW2iG/76WCib+sQpnDJFzcVnla2UQlCExfKL6Qvgd\n6nqVwHjyDudUYJ3yC+y/s0emB/f8RnAvLKJC8q/QBM7ZFfcFFTUheH1fpFir\njuGCjiolGfStFOi/dWJHPow7qoQipsMBbkw0IBMQJzi5sNWhnKbIVeWbMwe9\nuXAqqfDQ2m/mRnPZQN0QOG2bAEQQRGgWxOzAeB6mspAzSoynNVuKnVnMI8FA\n0zDx7pitrzbdTAhJWNv5MsZVKCFW7DI+fqA8RXfJwPkO17+KNcVnnppSP5/1\n2Pyh\r\n=gJkt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHeELNiVyVQ/YXgxa26Pa2026qSNIGarbx1ZJJqoajT/AiEA2yKpBjt3zzahUUfUQMZAV5wJF9Sa2pMURpHRcvNlCWI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.3-next-1594814447-a26e270e.0_1594814641437_0.3789787375415308"},"_hasShrinkwrap":false},"1.39.3-next-1594832011-d4751dd8.0":{"name":"@xdn/core","version":"1.39.3-next-1594832011-d4751dd8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.3-next-1594832011-d4751dd8.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-F66K5dbznsXuxx8yTicnincQNaI4fn7goVzCR9WEInKNUVnC/sBe42zog91ZH01qV/7h8Rrgnh4M5/ROJZn0ag==","shasum":"9e20f3c31e06331bb8c693c0ec81c4b57efe24a5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.3-next-1594832011-d4751dd8.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDzU6CRA9TVsSAnZWagAADZsQAI1zBOfBIOAz4B8t10gO\nkwAC9tuXCHh/OMqNA/dn2H8Mdyyv/YKgipNIuC6WZF9DcyZsaepLtsZRH6hM\nleomf90YhDAlpcmIJilpJmLWmZBbclHooqOTmAof/s7xTedQwrO30HeF+3TT\nOkPdlVUU1sTwdff9H5A1PQ2bTzgfOBQQ1UEzcQ0O97Tw+JJ9EgfAQEV/65XD\nTe7OdnT0VWOv+eQ8xSC5V3nkdHCevVrncyodV7Uw44il5/jChTOtT2OztGQX\n1noYKuUkQNnBezQs4wjT+1PCExBi46QF43CMMkuP+F92OhyO49XJ4z/ZlJMM\n8/OURkM0uB8zZHtkqPgaf3n7GyIa64F+7HEtm5NvrZGxaa8LEi3byKplyixs\nRl8UR0zAC6JXVxztKIrfZZ3Apm2fQP6UEvb7vv6nR1oQvzErvhHq2GjJqwsS\naXWttD5gnFjntPtQZKx0h7EABqVWbksxWDAR1e88IP7S1KDbrKgZyzkkzmGj\nQgQky0OOgz/3jLudW+WzbTRCCqN2BT3SCnu6hDpfVJJ7Dlcq6Fe7xxstlHmW\nlw3gP2ZV2ZnHDHNTUUuYUkf94tzj/te7BHKU9lxKuwYkzkoLCrJ8+tU5MlB/\n7Yi+2P/WWOX7sDunbs8wBJ4IOpeQW+Q7o3RpPSD7wdlcxDJIW+v7gRLNf1NW\nehAN\r\n=hFen\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDX7jD1cAVdqCnQn1IDER+4ASGcK5n3AOkOBb9Kp1F1FQIhAIWbHCPmefvYarccAn80fRdjq6ZdaH9689+g6JgqpTw9"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.3-next-1594832011-d4751dd8.0_1594832185727_0.41116424849670796"},"_hasShrinkwrap":false},"1.39.3-next-1594832446-cac48aa9.0":{"name":"@xdn/core","version":"1.39.3-next-1594832446-cac48aa9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.3-next-1594832446-cac48aa9.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-7rfAVbLT0maenia9aX9vqN0MqkVkmLaBGz7s1sUoRnhtNnqDlv34+cvNYNlKVtSntX2GlUakCa5ddzAsp/B3lw==","shasum":"162ae51eab8652928e7a1a6e3ea2379fc9168788","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.3-next-1594832446-cac48aa9.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDzbwCRA9TVsSAnZWagAAoNAP/ivNW7oYvhA+IjJYXBPb\nQrlj96xjMAeaWbBR5HuGS+pbkZAHXXGSNWOf35yQuL28kdudpU4RtrlpDEL6\nZCSkxLg78NFbVlkCo5BG+bxFveU5pZa6ycZIEe6lHozwis7XW2dOW45UEk4L\nFy4kGfKTgqQU+eglVq2QvK8oJTwZtqmHX5Tmkp87VoViAHhXGS0lU8o2RBwG\nzplBB4geZ7cstXMW3J+vwRTKZ6GMeXvoo/ZMHfpvxwvki5D9h0tZ6hubJrjp\nW1Uo5xtMlty5aDFRm7/rVWNX1XWeZfyNGDzjgntiOqQLRs1vDmevNOQ0LlWF\nBl77zEyAkR+KTAkKOOonlJNsMj+unwSQTJJV3aQkyMFvhdCAd5Is3KhHvqEf\nqv7v1wkZbRLEcrV5Y0+tqgB9mIM1TeiJfUVPVGKBJVwH1n+z8wIoS6apo8zb\nIkvstkDw4s0t0/9Hm/O0vTfDnYBiZ8C0nlDFGC2eACl6mkLz9bDrlFHIzFxq\njKJJ4pIch4uHs8v7PHzyk9unGxIDIAHfza0hN0cpqyBJt12yltPUiVa4sNFp\nTq0xwHRZv41LCPHScAkGu5ym46HMczNaOUKWt00qI+K3F9yssQlslvDf57yu\nrnm9VaLV3gvej3zdvDzQHUHknHJD0KmtAPBpbXDMVWKxkVPsYAFDUVoSRSKY\nb6A/\r\n=zira\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3C1GSypANsrVOBpcR5QpWi5u8M44mCmzFQBjKupv3GwIgGTBo8ycTjqbPAoFKgvuJCgHarTU1bpAtMmtsMNAAbn8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.3-next-1594832446-cac48aa9.0_1594832623878_0.05481447491003433"},"_hasShrinkwrap":false},"1.39.3-next-1594833698-9129eb91.0":{"name":"@xdn/core","version":"1.39.3-next-1594833698-9129eb91.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.3-next-1594833698-9129eb91.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-VDrjI5b2m6hBVSgDhDVeEXaT8It0WopgaxQ4FEkdzw/GmBg/2X5/yqJe6R9C6X7KXPMZSVNF4HKOQyq0n4Uf1g==","shasum":"64a75562a021ba8e32d7096cbf5447d16f4e664e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.3-next-1594833698-9129eb91.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDzvWCRA9TVsSAnZWagAAG0IP/jxnWovWnhvhPoNOCePq\nWmHughi63Tjq0alafjcWnwpCDwtKMQoSaU4/gDiOtlzq26/0OTv9iCUe+J/H\n2HL4snWDSZHaPA4S5f2Z3xTL0o7Bwgg5X0+lSCYzKcwfk+6GYlQpGTUTRdvR\nNKhW3WGRBKWekQNmFBbAzpNLRbVVvNezJwOOT7/tdSUZSndxD1QxgN9CM/OF\n5rqRBhC0j306d8cvCybOakTl8bGqxJB8Q1pOwVRBrqFpGeUQgO8Rt1GmSYDf\nRDCYMQ0HAEx2n9Um8emUCwhjmFjP5te4G5rPEbgwNbyd6BKpfUjnS5GZrwdo\ncY7j/K2M2OmAHiDsOzYTDs9wxb+XpCBBGM1liBSkFMq7yPN85Dmqm0lD6lch\nJyMkNIcqbNjsISUe4MphhXKspik70hvDX1BRvhmwuqYTxsWCsYp2PvddbC+d\n3r5Gofra/81UOvVc6Bu74RBNXNe4GjCAMAus2PvfGyFqf/DglKMKmiM5E0Bq\ndKDzKYhSr+DMbgE7buM4NDzuxHhWge+k31lP8v1btjR4tOxo1cgZ4KykaFuP\nLoRjbNzYCbMdJ9phcWNZ9bKutKzFhYXPZWj6hWRumTO4YOJ8VrIq12Dr63cN\ndwJdshswvM5HPHaDpDtn2AeDHpqjM1eRN0UMKU+kO/QCLrXeU6oHEivLAydY\n6uCp\r\n=HWvg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICiejQ/EgTcvl2sZAK32oeRlpPSIUKpO9FfPQYsyRSd0AiARFtCFYZHsBnfBiObOqPUfqJXR5u/aOtoEpLo4SaoqaQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.3-next-1594833698-9129eb91.0_1594833877525_0.8828003650329226"},"_hasShrinkwrap":false},"1.39.3-next-1594834400-b4212cd3.0":{"name":"@xdn/core","version":"1.39.3-next-1594834400-b4212cd3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.39.3-next-1594834400-b4212cd3.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-h0fAZxDnKi0cVdmxWTT8MgRRBisHmaL2wa7QVMkwS22JKMHDiZ0wn8Rf/zoYRDm56jhYNS74YrSPLFy5zb9Adg==","shasum":"1689fc06445e6a087c20b9f184bbe8d22dc4cb77","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.39.3-next-1594834400-b4212cd3.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDz6lCRA9TVsSAnZWagAAFKkP/2tDMVjbUUwDw+UGemae\nbaJRQC4nESDN0VXpSPsfbrNT54WC3LSJhNNFzArvwNIc0bzGe/CpDQ9ogwUt\n9ITDVv0puXZ4n8Oc8RhK/MqVXmY+v0cqc48kgniwhMw0Y3IE6xHFgM8z3dQm\n7IzJ9/NBz89e+mcBuO5D1cBOglPfXN/riUv9Vr4bGwTBtMSCBbsalNsDZQfQ\nG+BQ8tPhMLLBsg/MbHXI8pHXAnUQM1NLvPJcbu+4CkaMLq7xkk30QzkHC0lw\nnciZYocqwJS7ieL8HcQImoOMDGqSmGQW42WXYu0sL3cRtMKxQdESGzySYH/O\nS/gv4lhiox//3gn+v18NA3Wa+MtlwDxtjD93hZ8AahXhPiOuhyhxNBRnhe0B\nI1Kz8DawJm0xDhYncr31qhrOYOU5Xj6Ks945D+2Zs/H6X3HzB/FLOiJY0A0V\n1pB8z8ZlJA2QwYh263Bx/EUe54b6YsjJjsHfyhvoYDvIUwpSDnIjI9ZsKzoY\nGwYDgtDSdMT8WC608IqKlv5KIzNfZjIVSvyUwf34uYH/f6jkXW25/9+TKzkE\nbJIbbyDL3IsEytyKxEE6wqOyCaF6d5gZJlvLQX1ls0chVSIAqdIhSwtNCJ7J\nVwApe7Czbu91Jdg1mpvW5ptsScjeIME5FlsJiiv5OdsVl1CyutrZrRxWzcil\nV6uT\r\n=8v0c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgW6p7Mz/MG/rTjmc6JPoG36QmaF+xQggBEBHW+iAOrQIgSdUuNMnKrOswjUTVQfI8+0MB/1WhN2FsK5uk5BVbACE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.39.3-next-1594834400-b4212cd3.0_1594834596468_0.13425582657937518"},"_hasShrinkwrap":false},"1.40.1-next-1594864906-2a16764c.0":{"name":"@xdn/core","version":"1.40.1-next-1594864906-2a16764c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.40.1-next-1594864906-2a16764c.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-J01kON7SS2AgXJxdWm1Oi0vE2zo8qFk9XnCJV6mx65kcVyVoBOh4aCuAN94+EDZMCFOy4VmuNG9ABooFDVaaXA==","shasum":"6fefac785cb5c9f7f166c11ef10328d5e52877c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.40.1-next-1594864906-2a16764c.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfD7YDCRA9TVsSAnZWagAAoqAQAIBlN3QINPdkZEnsybtr\n486xq/10VS3yz7EypoKHwqVdwf58OXHO6G3uB2cTbSyuMstSfcaL07QKG5+Y\nqU3qYL7waYhcHJRz+d+eU+mbPi2BGVoVO53WSdSINFDXVPjGZl2MLG8BnJG2\nxmoh5WR/I0sGGtJkuUyO99VePmucbiGOvdZowqKkB9fLOHuw8gAOhGmTcJXt\nnreJV9ZHiGXslLqqo5dN7NDrbsy5RbpaxrvoQO9jBukmDh2iMPeuq8oz4/Eq\nQuJhtdvjlM8g3prWLtOgDNVs5WEhwvpLZazIl0OiGAl/qPkCcycMTYKmDHoF\n0ALaywz/yz1nOQiZw+vInXUvtxNU5lqhpp2bV4urjkeWVGKyc+WeK0J4Syj3\nwYCpe9qqCUArp2qUWny/7NVVSyzz9cKHpOGBgEzUuNg0tjO0LkOpGXOFFN+t\nz0intbdI7cIcJY46XV033WS1FT3PGmjfaqT4kq+KajiNmVFDlRVcNUge3wBo\n+2gwQyHTlg4g3ln8TXismUK7Il+8BYM2WD26XREaZl4pGO0T3CxS5+UV5tFz\nhWEzruHqaRaOAKGhCHjYEn72cOU5DQepp+pWFaak9OnC3VMoHCzwsbHa97yT\ngxT9uBwEJeV0NQTvkb9hPIFrexi300BZdt0QV4BSzmejrZxHs+Ud+9S9v9vI\nWoxC\r\n=XYZz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJoIcjvZZ1rvadYeq3cDa4U+qVrFKot1z3YQcMcUSKUAIhALnHCwa7gr1xNHvKGO+paYiKoCortZocts6VJHtwNmmd"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.40.1-next-1594864906-2a16764c.0_1594865154518_0.4662554419243974"},"_hasShrinkwrap":false},"1.40.1-next-1594868183-2f3f4e56.0":{"name":"@xdn/core","version":"1.40.1-next-1594868183-2f3f4e56.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.40.1-next-1594868183-2f3f4e56.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-qxHWhfRqn1wr7JiTiepm9C9UN1loMfg6nFSJvPcYwQXeiuTVr05rzMXYvXH6IMPyWaWiAE67kmLdPKe46rdm1A==","shasum":"13168db74db04fe1b10bfeed1233881628beddae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.40.1-next-1594868183-2f3f4e56.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfD8LECRA9TVsSAnZWagAAzccQAJ/OCyOeHHNe8AQ1GmAc\nWc9OTYrj8tgRPlpHTH0rFwTcn7QGP/i1bCbgBgFiFWYW6yx7rMEYyYNLp9pm\nI1brr916IDoDte8j3vBHBPrsfxZorowEzTOMLdjTsu9rgWpFtRwzdVyJIo7/\nuO7vX1h8g3leChO/ny4RoBJeDTwrK/+zbQU51SIxsuiS6nbBMywuKANVKus/\n/ioVES/tOEJBUvu4UdlQvDs5xFCyqS2r7h3wJV/E6MSBfCICa0veXH+W5sld\nEsQ66oGKkCnWsuVRuY41XkqlOVmy7r1c8iJAmr9WWc2y/TZbh2nUXRmjdiWb\nmprID643XgkcZyCu1IBUYTq+UvvNoAQrBx7o4zJzEHSpldxSIuXziC9zvk63\nCmNOhwMBXPe9PkG3TaAhmsTjeKAh5UNK/AZaJEaHeBratOIMsKAkllBPC2qu\nccADMXCwPgf9rQyyyaRbHrN/M68H7+cdy9/y2qLzIGS8Dl+zty5aV0oh615p\np35xHDooOtaRfNLqgqbK/PZg4XuTQXaqmFKM3A2kyyJSbNpWu2oQFS4xjgM4\nbTFtq0TDI/oHWLqhumydmW8jDT4QeZXuDLscCWhoL+waWySGTauRIZmWBcLo\nws2592EEgkFkTQ529MFXaLAr7ZWcQ01v4hwpasbngDN6yXwsinVCj04xNK3C\nZLr2\r\n=3boC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCebL22zW0ccDPBvLcm1OM5wRsn/MXsVoshdVQuWp4HrQIhAPndLYKKD1mesZ0Mu3kky+PIt2eqVxl0wA8Y/ABZrPtR"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.40.1-next-1594868183-2f3f4e56.0_1594868419963_0.8252406314725154"},"_hasShrinkwrap":false},"1.40.1-next-1594870573-e49491f7.0":{"name":"@xdn/core","version":"1.40.1-next-1594870573-e49491f7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.40.1-next-1594870573-e49491f7.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-vQJmyvX8Taq+OynOm1NAUXQXcl4U93TZPdBvtVZ70hMLarOOMM3hmBTnCpMPEbHJWZgzRKsMWUnd04c8BsGC6Q==","shasum":"e84722a8633d64dcf8048118b14d680c19b24340","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.40.1-next-1594870573-e49491f7.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfD8waCRA9TVsSAnZWagAAZWkP/0qNvhQ4qEdY3BnfcpRB\nc/Y3JS+Yg3lKuyM3ivLnVV5fyE1UwXxyTceh6nJHjZBcCoSOkhPFwjf4ABI1\nqGnZ7OnAf/QV0phGLC+Hj7XzBwl/s5g0rVdC7IJfd6omaCmB29A1tKYPSOTk\nUm6+FI58fsOS195c2gy4cIv2w7fqtnIABtVOqh4ajSF3WRNNv9JSoUAXl87S\nP9xbWU2ICdUWSBr2XQ+R45CXqptP8MypmPutXdp8ygS+oQQI2XC7Lug7avHH\nins9n+OSjDJDg+ckSgatKw0xBacoXKYgls0yUHVGRpJ3+5Pa0WOkCT8mCpTe\nq60n81adOPE+sXLKQE4p31xOcNZHFS4now4cSxqvy+bqVnPdb4QI7l4lCwTb\nGANrVl3xdPWGcPAWNstYAUQfEsMp3owA0L+YXAC1/Dn45+bTvP/z2qdb2gOH\n/PkXYa1mI9HJ353LdThihYOS5flEq8TTFnCiR6P0a35so5yNdaxsY0af+usI\nGssjkmTBMqRD+r7zW5SeRldYQJoJp6OGZgxf4hgCf4QNMEfaFQYfgdyZ0UBy\n+AFUdIZoogGq2zWLV0WFgUHUal38Abo837gp3luutKa2Pe2CI+AcZsjKSeC8\npLrfK+3brRMqKDl/B365Rr9lDDqu+dy3vRSUNvSW41ZA/izYRvDvMbLIYUoI\nf/MV\r\n=ICC9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDRTWPKymTWL96miZn7LS9zaDJGC9pjcBzLdXlMwSJ20AiBmKRveVOOZ15elk+bvuWnXFj0eYah9AgduVIRQfGPP4Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.40.1-next-1594870573-e49491f7.0_1594870809558_0.10458747489801001"},"_hasShrinkwrap":false},"1.40.1-next-1594898063-817e9867.0":{"name":"@xdn/core","version":"1.40.1-next-1594898063-817e9867.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.40.1-next-1594898063-817e9867.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-/yCifhRdA5G3G2JAqKaxgtR+zHgq+oiDm4yONHAbwGwK7gKbv9smLEiaKkFZLowW6gMI3MZNR1s0vdSqA7Z74A==","shasum":"b70ab1a8066d305affac63e2b8121ec0ba05d92c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.40.1-next-1594898063-817e9867.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEDdpCRA9TVsSAnZWagAABzEP/A9sKbYTfSdWbZfIdSai\nWUZkh1KLAmYvGNcndBjxxCuTyd5muWiE2uaEkTMCzmH6dpSu29WyTT1LUMTq\nkBSra58B9FdbeXayD3PmE/otUTy7SGoT5hmSiZx7V63rNeNwRzmcTsPT93N9\na1qDDXExm9K006ETnhQF9/C16mDJg4BmJVFHlnpGlsYJ5wvXwUK0ne02FMDq\npiCmv9IyMkMVeLKccph22Ch+ldnPmhLmbFSDwDMuW7XkLtB5oOF78H6dlq55\ng+nK6/cCbvuiIBtgLSJBt758lkvXBRST5WSeaC+yY76AY+7fYSShPQzzfmHp\noBsxFn/gMe49c6VJjx549Yecit7aMxoWy1hP1v5v3gzz9zW9xXqdcbqeS2Al\nojPO7/CDn3CIvvHQ6+bu0N7jwjcdIXtIgF/LMlDjlUCYKl5Lf6mUZ5zj5ocE\nA2v/C0WPfW4sFuP2l2rAQkJFhjINFcNWG4ZqLft82HEd1MVu9cXok+e/Xjfi\ncUan5mURH0oRIfWASBlcy4JX2NCO4CUkTlbCIPizuT1h0aJuThZNKnaAV3pQ\nb2YxzTNh0tr/LJSX+oavuG+mIgINNQ4cT+jzgjp7JvWK4Zt2sMx5bOS3A4IY\nycrfYN+GH3HrH4HhSZRrMjelan3iwBx8RkecTHA8q5sWHali7GGSuRDzAphK\nyVNf\r\n=8TE8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICZOHqak5gcKnWDjaoIRqsBvnaRGYRMlVjs+j0OJ8DTvAiAadSVmGFCgIwlQNsfZHg6BkEFEOVtvYBiN7glyBzdivQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.40.1-next-1594898063-817e9867.0_1594898280718_0.8085490704188165"},"_hasShrinkwrap":false},"1.41.1-next-1594899124-f8e682ca.0":{"name":"@xdn/core","version":"1.41.1-next-1594899124-f8e682ca.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.1-next-1594899124-f8e682ca.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-nsMZQjNcfisbg8rvgy902aYYT+01WhejxznVVaLiy7Pk8XIQFvOoacKiH1RaWMmOp7/1DR2llzOG9qO4lJhW+w==","shasum":"d95bf55407dddabfa46c1f44efb2676b5ea8a984","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.1-next-1594899124-f8e682ca.0.tgz","fileCount":129,"unpackedSize":554810,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEDuaCRA9TVsSAnZWagAANnAP/1IlZ9dgf2pUIEmq9rg7\nWvCx/ZkvTMB2rP2EN0h9dFAfMJ2kZvyXigHhBxqifcawZRPfMc55CrnUlPY5\nKPUVUQMlTKKuCbsxWolcfxCw4f1roKdil70XKqXre8TI9WRa6ke/h1Y5eEOI\n6ks60hibeBcozJq+U81+9zCLe+fcHEM9jBSsGBnlCH+tzelAgtfvnSZ4zn8U\nJf5A4QbG4U+SVDmWhm2RtiiGVL+jB6BFI6fTl+LCMe/q1K2WDqtMMXBGHE3d\nNyUJlZE+dFZLmTtrulYcfOBFrUPlij3MX3tH1Z1xxMzWh2FhNdrWq33vusdT\nk5tCkTbSwiWHbYBKo8R0TfAjQ5WjUukUyufyzXw77eumBmbqe887ag4iQtZZ\n2ufBlFbuIss51fWFrwdrYLhbpV3mDDhmvrptgDALVXJ9eq2lUaVxP0HEfFvP\nbo/fdvxqehh0v+1xa3RrQWpQSmA5E6QFaHUvdKWBtY8TvUhP6neOgSe4VI+O\nKiKhxNELO92zZFYlIGNmZ7fWmzhozqWliFQ337yRe+p34gUfS87nKDkqYDJl\nzFE4D9F1AR71DYnAesDDedxrXmefPHLimb0xHVa/q3BdBYJ0GkXSMSOdgL7E\n46CerNGY/hqvM31+V2oBhc1fDrbGqSZd+mOWOZCpziFC2Tc2+NY3hU9CtR6U\nEmuu\r\n=0SVo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFWorT/YOVlMdgTwoZkuvYC++CMAGTaDlP82YocgrJZLAiAYG0sOlFdJ66hH0p5Byfsgdw2hk7B2CA0tO9sOjrO9oQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.1-next-1594899124-f8e682ca.0_1594899354053_0.9265138556103689"},"_hasShrinkwrap":false},"1.41.1-next-1594904480-c3421ffc.0":{"name":"@xdn/core","version":"1.41.1-next-1594904480-c3421ffc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.1-next-1594904480-c3421ffc.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-G+n+OyQ44t3O/uXSYQwI1zvphXIbTf+RhcGGIKzQT8h7p+3OZLrsVZ5HpuGGE5PhWWdXVP6Ye2grebfPbjS4hQ==","shasum":"454c71e4315cbafd39726cf64c8963b3e362f890","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.1-next-1594904480-c3421ffc.0.tgz","fileCount":129,"unpackedSize":555937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEFCMCRA9TVsSAnZWagAAA4gP/1UpdF0/wfOfxLDscCF8\nrp7JJ7rDFI8BCe7G4h+HtTDU7OgCL1Fl9mWvLLIgsXMnd55ebuOrgFCwKonY\nDWVLaq5JIuFuDPAFP53uCbk9fcIS0o38yf5/2cnReFoiII224KV8ScELLw/s\nzj6drocUoGYXX4rbicP94hEURslo82mk04bgdimNvBGXf93koq9GzpIqNTYa\nW4u4ivwwAa71sX6Y8A5NelvEQgokaTTCsV1md3K5SSH5hSF8XBnhc+qEEGoI\ng3/bF7rbHp1DJ8wl4XWeXRQqybF0c4V3cl6O3zt2VCX0lhzTUO3TLhawXk96\nB45vB9FlMNvy5ZUv91Am2BwRfTCHuRIOKC3MXBAa7Bl/Qoy/981nCGctupYw\nOsbZ5TMNsDfFtP0wOWsPbO5yxj0rk57WEcCcKVIp+p61gyx3/6S2hF0ByP4b\nZHevjBqlnmwzYmLzsvjCEOjpf6jPbFGcxskK8/xhhxQtqziWOvAXR/hkCv5U\nhb6bUQC3aQd2ZA4WXZHntGEKXpYAnTQ8f4rXWuRViwMjvbarixEdPb+xcFmR\nu5hkHebCKh95RcZzfFTT7syNUqksLHXefEftJZEB3kAywDJv9olImnJsb1sF\nE25lUvHWoinc0vJzP/x49WA0lRJ0bylRUr5xUwEDJhLh3JWUP/Up7L7KdECW\nvT0l\r\n=0ccD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG9cx44IdVQve58PPgZ5Q5td68OLC6w6wfQkQ8je/XEXAiEA0XKVlO0QvWg7LhI/0qF8caIU8vuq1k0XwXHDlZ5Wpzk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.1-next-1594904480-c3421ffc.0_1594904716482_0.2212407416174953"},"_hasShrinkwrap":false},"1.41.1-next-1594905040-3733a603.0":{"name":"@xdn/core","version":"1.41.1-next-1594905040-3733a603.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.1-next-1594905040-3733a603.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-KI8spXO/3w0jwg8s2zeYbFE7oYpSAtCBUG7whq5e0zHdv7vnkmyHzAvOMGjODmfdGgCV/YxMkfH3/9IAIL/1Ig==","shasum":"6f801fede3b0221230bc2cbdcc421de28916ee7d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.1-next-1594905040-3733a603.0.tgz","fileCount":129,"unpackedSize":555937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEFLVCRA9TVsSAnZWagAAN0IP/0MECQXzJxacc+N19mAr\n5949cOIfORJIjkq49P8ulR8syNoxbsxagV8RRuOQkKrqAzdBBfWhC3FZFsDd\n30GvHL3Hjv6hwONhx5reKZRe1nORnDh0awgwkwMUao3lnAIaWuyWIiNSmhOV\nZQtcCVVPOIT3MTHf7BHdZTKR7jtJz40O1HEGN9G6CjTWrp98Rrw03Y2RzSxP\nQantzMSFev+BlReWqmiNVzhDeo3q+bqvxk2NWwf1HbP8cIVvtcG7iOq3RhMT\nUjmsvEnz4Foa41UVDpp/R2aZhvf73I8B7lya4Q7puQLPn13y7FeWQUQqVZ4O\nTG43zTg2T9jGMOIJcWnUM0rWHNZ46/mAwBjHEDb/eD39Ua7IxzhoFvEBPZIZ\nMhuwXwpQagHpywxZ94DDlA9Y7X8e7P3C7/aIveNr4CZ9hp5gyB4fB5qzCvou\nFdTmSzHZczDZW+4OsYPVMS/cfrZc32PJEIoSa0pM0nxB1PZa1mVZXpVhHDlX\nB40axAOkJ13SV4luYEI+kR8228KB6R6QrnWoWRiALDowF0wOop/vDLpjFxAS\nCe33mop14x7oYYNnaespIvxtUnb34V8jW5eZzpdTA2XnuMOc+/GxriLH9Vzr\nVPqxDg3WPE2KJTuuqviAe4qcm1/Zn9AEedk6Kcn8/1COxXhv9kuSN8udEz4v\naqvn\r\n=eZgi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2/z1g8cK+iXLa7O6QaXZYPNx79os9Haqps6J3mGZhHwIhAK+0MExInld+wHUVNVtHvbpbG39omYOLdeTh1A/Sa1UK"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.1-next-1594905040-3733a603.0_1594905300936_0.22352753750317755"},"_hasShrinkwrap":false},"1.41.2-next-1594911210-60d938fb.0":{"name":"@xdn/core","version":"1.41.2-next-1594911210-60d938fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.2-next-1594911210-60d938fb.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-97uZmwfYYIaacr1mBqnPxdfKlADS+WpFcoiSVVuS0Xe+UHMZfk1fY1Avdyi0GM3qrSKQmZVvUB6Uyv200dxdTw==","shasum":"b956125e350282a16b0d0329007d908201e94792","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.2-next-1594911210-60d938fb.0.tgz","fileCount":129,"unpackedSize":555937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEGrcCRA9TVsSAnZWagAAuM0QAJ81ItSYUB9xvB64mgqo\nh7AaZYgn39VF6pHJjfjtN1rJq/v/I392ojUw7flnX5GWFXi+gGiGRX0yO+tn\n5/Rge+h16iie/swqriuaU2DHsbjz27kqbZyO+/zrvJjcQXd5Vs0cgcfDqBcJ\nZfcfKvbAzGi8pujczzEp8fcx7v4AaCNqb3kw1jmL2F+IcgusX7SvJXi1RYOM\n5eqEQHgGCGpqvBRFiU4eSMiJW9W48Dicf4/K2JriEnOLcrwwuu6GrDyS2JMh\nX+wd0Ewr49a1hYNt9q4Z83Qi12VIeexPvbik1uayE5Ni0y5xecXHOd6/o03a\nZifurI76t8b28Z17Z5ec5wavhGlW/g0k+FgYpIiFJu3R9Qo2K7eWkybYyF3W\nlN8MKCWX1FlGtizAeMUkhatFvU/IpvrFDqp7MTZRLXmSJdmylu5BQx/fhrMU\neN4gmsAPVS4b0QgMZtnPFWYetzIEEu3Vi6COHvV9MIcRpMDH4n+B7pxe8USM\nbJTQXfh/yjRogNTBKSS7ZaUCSLBmaVNjMIlC4Pb62TwLXsiwC4aKQf2IjxLm\nmWR/oFWmCMOHcRGMJ/rwwXGWVUEeFYVgeHopFKZ5Sr8m6K5tZhrgZTvanwws\no8V+zrnoOpnW6Bq3uX1YGyyMh9uggevyirncyhS7OKzeqJA5/gHEDyFtteA8\nwR+f\r\n=yb7X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJN3yP2OFlqj71gJUA3+C/ZTM3yYJzYGc69waGXJi3rQIgfjDK/87whNsZ+Mz1zELDk7WzlZ4uSFvVrc6nCuvxFio="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.2-next-1594911210-60d938fb.0_1594911452261_0.21365659497863332"},"_hasShrinkwrap":false},"1.41.2-next-1594913330-b864e920.0":{"name":"@xdn/core","version":"1.41.2-next-1594913330-b864e920.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.2-next-1594913330-b864e920.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-IDcTLjC9bjGz41KaaRTI0kOWbfRRCctXOEdM8fDMyk5C48fnmbsKV/si2ML+prZRqemFDM30d5sUWMZ3YGjY3A==","shasum":"d0c4026824fd6eb5a2fef7133e0691e5c7bc2fcc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.2-next-1594913330-b864e920.0.tgz","fileCount":129,"unpackedSize":555937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEHMiCRA9TVsSAnZWagAAtH4QAI4oKCPc0SGEJPh9iiYV\noOkyGEUUY/BXNP0jjhwya1YGz/KHtJ1qRk5vzZN/MeBXVQex9d2KU3GA6RB+\nghJDEPnZWqb+CAOjzLQrEJq7EXwxYc5/BdJQVQW+uLAfPkVj+TcnYPPXOmb6\nPj+9UoBOeBi3cZvN2/ASumC0AMWx/E1m5ZP0Ya6ARHIx3RwqRRD4/P18Di/y\nMmAadshhumefC48Iyx8FJIbcNxYnrNyUHaQGx5HxtBWSmeC95RzfXdpj2j1/\nJylk4F+KhslbcImvmo7/bthozHzTjW+WNHt7+yp/Y7nvf2YEu7zrcvRa9l+Y\nACKsXtHjp9aBf4F5EG2YpB0NNQFcmpl89Wp7qEwuiOcdKjqSrT/UWdR6Tf9/\ntclmRbycfExkU+wxJZa3ZBy29fH7qfSb1kGT09gtfWm/9o62/ghxSC/KPxeC\noR10cgyjUJI9lYJpisVg8q6BHpkTMTfQhxkZhbSv0GsRGNV9r6U+S8bRUBWX\nI1NhMmCcRCsiTvJ74haALSoyvZu0N85G+fVHHC1hZd4fG2gyDUU/fxMGMSmd\nzaZKOoT5dI+wKqmDbkux26ezM4eqAeWvL2PmZxoV1w6Izs8H+jNxgsED4aO0\n3S9Sw1/O0Qfux2sTvfHc1e/FQz04BrKexEI8DmZcpbpTJaHHgJd4qF8djhq0\nFz3h\r\n=RoEu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGUgM4Njpcr1cFDWoxBun8euVl8O5Wi3e6TmF4mBU/sXAiEA1vt+4eRZP9UEh4ulaNziv+gxcH7aaA2LTdpay71PELM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.2-next-1594913330-b864e920.0_1594913570222_0.016008911524298508"},"_hasShrinkwrap":false},"1.41.3-next-1594913470-2e2c5d18.0":{"name":"@xdn/core","version":"1.41.3-next-1594913470-2e2c5d18.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3-next-1594913470-2e2c5d18.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-KoSDc4y5/DlUCr/2KHFvx35AlR+arjKYO8bhYvOvQZT22XLBMXZDkiEfGpfud+FMkyDUYkNkWN58soji2HFAHw==","shasum":"9804105a7578340b1ee2aa06f3224e6ac1a0ba66","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3-next-1594913470-2e2c5d18.0.tgz","fileCount":129,"unpackedSize":555937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEHOlCRA9TVsSAnZWagAABhAP/Ru5QUkhVODZ9vZgm5yo\nxEpRsKhvQ4gUy9CqgTdSKhbJiLwfPix45j6sg7WbkLUhIhkRFpDi55JXg+Tx\nUWNlLcNbGkt6iBTiprIGI6uXGxpsr393Lb6LopUbh74BIOPxqpEZhtoK5Y+C\n15XYM/PELiYzUW0BZCMRJsYAglmBA3MSoz5oOQlpRArOsZkoM+xFsq+vlbHH\nQGUv6iaZ+vPi9iUym/R1F6Ao5S8xoJ5uMSQJ7AaXt63x6CP4S9IPdJO3xpfT\nDM+0fyr+6VN/JiLQqSbvBzlT4DgQ+bAG1UOwxA05xoHX8YYz8O65Cl7C+VwJ\nHmCaDekStklIVVXWEQ0ny6yhJUDRhQf3mvlt46KDyGNa1Mht+TtCqxl6KmA0\n9F1L7ZdjtBzuFu5jpDcHT2LR/W6fvrLq5bJdmKPXc1lWn2qTr/yvIwZm/NEq\n7lZdUebAlaMvK8wZCoSSgb701xeO1/A0NgFAqmoI5AZZRXtTxgpto6giUh5W\nM0rqh89NBSOSZNw5/kYerVCC5ehyjnswrZD602XagiEmDYFLyS1MfTX/06Bo\n1doV0njL2sDavG7T43WbkEbe5p8bonSa8RKZD13DngD17rZ1tGi5FYvDzSjv\ngtHs22hB/z2yp704NWqc9JL+nF7/FC8koHAKKwBHjLALY9cXpRwyL2Q+jfRz\n/Cai\r\n=aqEv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGfwIvwb6TZl0KI6GLJJ0OaIe86og+T9d7GSASSeeeBkAiEA7wWrRlT9gNh7mlTdbe23/Q51dbREperw+Z9k+a6/fb4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3-next-1594913470-2e2c5d18.0_1594913700439_0.46197187502357084"},"_hasShrinkwrap":false},"1.41.2":{"name":"@xdn/core","version":"1.41.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.2","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-hzdwgoUlZazIt2yNrBW2cigFgsZciDwLbndzHwW1Uuu//DsdLZgjvPkVxMiz82usL6Ah9YrbfgDd7URvzrOiYw==","shasum":"03153d5a43951d37027c0945d5f3acf15ab1af27","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.2.tgz","fileCount":129,"unpackedSize":555883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEIINCRA9TVsSAnZWagAAppwQAJ/4N9bxEf8UBIPVTHZT\nGnTyfknJwbJXyOLmB90dPlAugdArU1hppxALwCC1FD/40Gset5N11nFlyxgN\nGR/pfWZyd2vSYKloaB4l/Nw/s/uiRIpmhcXSmq5BCmbDobsZz4lEbLTs8mZ4\nCQdDyE5pYEgo8fUqRwIMAhJRjXcDblIrT6LG9jImPSsuyDZOKcutg2e4yw4u\n0HN824TNVD1GrblvaLWSY9Lm5UJp2wNpB3Cfd7Sr2Kb7Ej+wP14LMbTcezRl\n/pYpk8lEFNjfaVwNgMjYwaN4tUZlI8aQj4C8ekX7IhpmO4gxNSftPc8rwg9H\n4SJrEwbwsIjbpUQJkWD/XLUCnjC6AogLI2GCtFgmO70/h3daTIHqwnpW+jXL\ny3ZF0zZEOTfjTDc1Dbzh/qqyUxxhDXSXtVch5Tz8YUCpNucaOgTrvoNdBvfm\n/opLhykeaBBCQwzIfTfGcV1zpZ8A/FXRRkhZMNmds/mbHzhPzJazgeotrjfI\n3yufTUzdijFG+OCixulZv11V1gY+XMDZdhfST93H/4FZcp3nvq5hoqYWbQ0c\nXUehd7jJ0uJAUKnj4HYlmlcjykv06cl6hcK6jPANko4Yk35+p3OerbvfTM2U\n9FmqNSAm2Pfqtv8ch81J3UkzCyxTvfYbY2mwRSnLIYD4LMW56mg1bw3sx5S3\nmKMb\r\n=0GMl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFtm/yGkuAM84wfSDLdnFaH78mYQkQJtSjpmdV17IM7/AiEA/ivGUYzfAriv/kaStpmk8EqtImrGn+35QM5+oSiN1qc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.2_1594917388758_0.6622838842473808"},"_hasShrinkwrap":false},"1.41.3-next-1594917390-6046d6fd.0":{"name":"@xdn/core","version":"1.41.3-next-1594917390-6046d6fd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3-next-1594917390-6046d6fd.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-iAqZZsyb8W4vxT9Go+qdgLkfBUDXs1z6pguBt6wYnZnx3Ahvsap50agFgZfbCNJdZppFr03CJLyRn6Qs6MP1SA==","shasum":"2882829a8380c6d11924057b6beaeef14476e2e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3-next-1594917390-6046d6fd.0.tgz","fileCount":129,"unpackedSize":555937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEIMMCRA9TVsSAnZWagAArMAP/ipAEQPFcp5H3jjIxYVy\nBuAW3zu4U9cCU7gQJD5RKyXFw448JDxg3IPNVWAT5rldgvJ0+udw7/b/OViX\nIHDHJ38k4Tv0XIVHSzsWxw1ssmEJYup9PbRezUCynB2yM+YFI3w+bcxSktRV\n1qUEari8NQaBfVoLkPkCkfXFtxWoLkKi3iu3MxPf9VRHJ7cyZ96YmI64pq/7\nznluST6ey2LsQ79+Im8YVEMV56c0j1fJLD6E5P35CN1+lTlBTehUSW85m2aK\nyLvGWFVkow738cNl+8Hypwl9oidtAEVedsQCdXKK5z2diQX4VuTeI3MkR7H5\ne472qu2A2FIAddiJ7fqOXiKa17crDXW/LjUrprzahtsst8q9tSPiL4io0bF8\nNJr0vw22qchij6tRg7uEmOGqEQTmxATFh6C/TWDQLUGGUTkhU8229CoS+F6b\ni+/zVY+rERgLo8h4mCGfgdt9ZLgETLqd10da60BskcwlKtTIXJb60r/r/2nv\nJwu7brYDnjZaQT0BiJubjUBPlAGDv/58dgwVnE0tN7PVuMTj7Hovg9dG1aeL\nBmWbhLxUg2pCW+J4LybaQt27MGFd9m1mGKnHTMEmPkp6KouQkOw91pyyrP3j\n586l6qdibtwbDwVgPmp6WI16yfT16tKFtqLa5oBDbg6C4NAFODlmH0IW2/iy\nCh9L\r\n=+5lA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtEGcexAtdBTgvQga//SK/AicLGh7g4ot+eVY4+z8LAQIgKyAL8KM1noxoVB4VUA11X06MtsqLwamWg7+KnVdQ5Kg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3-next-1594917390-6046d6fd.0_1594917644366_0.1711759693641972"},"_hasShrinkwrap":false},"1.41.3-next-1594926395-70ffccb0.0":{"name":"@xdn/core","version":"1.41.3-next-1594926395-70ffccb0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3-next-1594926395-70ffccb0.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-lS9SSb/QZ+XlMWyr2Q5vnw+VCjpHvnnPAeNAOkVZpG2eJNMZm9xYGq1CD04+ICWJ9LWlXxb5vJZSuYqmk52g6A==","shasum":"015c43e24c05f8aff8357ed01425cd691783faa0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3-next-1594926395-70ffccb0.0.tgz","fileCount":129,"unpackedSize":556123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEKYnCRA9TVsSAnZWagAAy54P/3gBGx0aQVPa7rUSIurp\nW+zpWC3PwIONDsyt202mSF2/kKDfOM2jvDuRAhKTuQg4u53b7L/p7zitwhPu\nB04rqPZwDcDN5TGxKxQiUnONNGzQ5MCOcoRW2WvppVXsLvjzbWQ9m3/dttYt\ne2edo7V30xVzNkHfbBvb6oMPJZpP4mT4Jr+2IrdV+11gZ0CGSiDA9x1AoKWx\nMNLn1h+DANV7/4Bwy5C5M105fs1JCq5v6RbTvS14s8ICz0CfsRT78MxorEZ8\ndClZpBS5/jp5mAw38t2wHlPbV+BpSiPrjnqWqwpWbPVavXAR/Z4dbIyJZdzK\n7W9zaEHr+jxH9GtMFwmc/l2CrCpZ17ZC0DO4+cZgU3YqVLr+QraM6RIIBs5F\nWjDP0ztTxT5oekMeQjMMPBzEVs5UnzkBw20zXRn4JEuifOTrNxcWtyAjpe/d\nNn3H71vdZ/H6/EwxA6g0CDYKRtFqJeaQhDb5YYNVsTX5BsZyqY+2t/Vd2q/d\nrMQr7icWJhtcFkdd3gOSpZ8ivUNd0BccdkuxDbWv/+mmoT6Ap4TaPOh+aPpo\n2SQlug81HpbalZnloIgNXAb8IUhGDXvDYCk/llHQuS8yIsesiMlRrg1ssyaM\nJcCYOxa5J8MdaBYfWzWw7B5pG9OHtofLVyxFwECqHyA7eL3yyy52bQefk3Bu\nE5Zd\r\n=s7Ad\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGZ1OeWfMm15HfWzIZVL4y3N6Mu5PP2//IkxKWA72gZOAiB7Sml3b9lJVjT0CHgboDAoP/f18t6Oof0Fy4K/HlPCqw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3-next-1594926395-70ffccb0.0_1594926631177_0.14772894635632072"},"_hasShrinkwrap":false},"1.41.3-next-1595005637-f8a8f5c3.0":{"name":"@xdn/core","version":"1.41.3-next-1595005637-f8a8f5c3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3-next-1595005637-f8a8f5c3.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-T3lL7DT+d4hkHW/04wRNLzf1c8VgWc5UHx4lFKKlvdvfMOg81DlBF7yjxS4L0u53AYA48B/WVetvTB9DykkudA==","shasum":"45d4222de3a00b4fa13f850cf45d3be883b98f52","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3-next-1595005637-f8a8f5c3.0.tgz","fileCount":129,"unpackedSize":556123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEdu9CRA9TVsSAnZWagAAZsAP/2zreXajn++Pk+Kdlmjb\n8Mb00OZxF3YnQJI8MUAdVfI0FFo4Cw7keiIDoiB+Kc4VzdyCuRSYoPHzDhpN\nJN/KZjPnuWXgPmv4oppO6z1iwXhRmIInD8HH/HechOMGJdFzJFno+/YzakE0\nczfE4DY+Zl6ltfgfAOboktK1WS52bTvCviH9y7bz09/WVzWJUQLJIppoyuag\nrVkWoA6jFNekoBG8dXdGBGoloDpH2ALSRkz5XqNDbySXv8G+cY49+yJ6en8D\nUGx0xI+Zw5mz7I/QDr5i1Rr4SKsEnOQAZY7p+ljeFZZI1UxC2UQ5rZ/HEQrp\n8ZoF+u0pTuozZ4BjwO74Q8Y157gX13UOZlkCimDYFA/xw7SWSdromB0sembM\n8cjEWLrF7zJjWznWnm+GbNcnPc/ivTrykm8vlnT/qlQF3abs9l6jj5d/fs7a\narO23y3YOIlF4MnRMtRizHgGInA3OyjdQL/Sps2vo83R0lJMBi6g1HbAf3iE\nRFqtLifAyiIxtdQC7F8AfxUkv7+JFZUSX9OtgtlnicXFmryKi16VLrPF17Y+\nzZsvUz2sZJ4pf3kLGsWb+QWEaGyLe/T6v4GG3U3exL+ml/1PH4eDvlpOBHZJ\nfBSZv9JXpEzKbw5MRr9l6NAsAOlcDTgg7KKCiI+/6odS97dFoRtCpWGXOsdE\nVyYn\r\n=T3QG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBIOrbb7aCyU8WbI1gY4hKuZzWlhrEoFTTxdEH6418c4AiEAs8IREecyRWg+Ev41p38mt3TA7hL1Q0fmYiu+HSDW6+0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3-next-1595005637-f8a8f5c3.0_1595005885119_0.5425264208429854"},"_hasShrinkwrap":false},"1.41.3-next-1595008005-e0ee1f4e.0":{"name":"@xdn/core","version":"1.41.3-next-1595008005-e0ee1f4e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3-next-1595008005-e0ee1f4e.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-UK2EfXlBfcitV3LBFIHzVCkm9GE/rdp/mfY6xrc5PfT5uX0IFDNIQt/o9OHPI7xyr6MXMEQrGG1xIS11K+4muw==","shasum":"969d17c281e53e5877ff2ddfcb745c8be72a9f75","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3-next-1595008005-e0ee1f4e.0.tgz","fileCount":129,"unpackedSize":556123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEeTiCRA9TVsSAnZWagAAq2sP/2Esi/79heTXwD2QIwT1\ngpima7D2cTkt1Ei/OwEUj24a3P3Rps1RdrhPp71yOMEbsllPbSaM2r8KKDtM\nAONoixZPShvW8AlebaJEkOLUxoW3qvddFYNNkqFxIdMDyFz5sF95zINaWWj6\nMcTLDQnNsHQ/52Jpd7smyZJYluKSA34sy93gjd4NMehEI8sAnxR+SOccnEQv\nUCa7YiZDyZuMVNwFVPJE7s2FQh25bmwU20MV4IYGG2J4HFB562ZYIVZqnwhB\n9bOXAvAOGMTq7/G3QvRro7PKSRUUANjcxTttAvgtvNjwNuXJbnGGa7DUxLzm\np5etLLl/AVlmRodiSkl86EsdBMJCDQt2s4NM5XfO9uFtM9YduvCb1WUSaeZ3\n8tBn5e6qTN38b9Dw2n/rv3/uW4LxEncfKqWBq/WCxkkVqe41ySE1rsS/SPHp\ns9Xm7yRMRwLkn7eU1koOSHrp2HQZnTNzt4OjoMsxrVFGI8Po8CLYz/qQVLNk\nzIpZrkVDuBXJYPYfGakbs+xaJzcUmAfIAKPiQ8V82l2ipJf9PivdYxr7wb99\nw98rvJZlDpqtDcFBIX5GlUJx4NAgMNnVNPOejrnj2t0si4h0GAp+bjdV4jHz\nqEPHudsWScprMpxev7PeAlePdzc2B0cTmc8dpi4kfiMjZen41v01APcwY8qi\nsWB0\r\n=5hc0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzw3OFNrx9VKRgPM0TIiF1COjeYj9AqJST5zJqCs0M6AiEAoYX1dPv1NNTbC93LOfMspLXgfcMbu1h+NlkEdEEblbo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3-next-1595008005-e0ee1f4e.0_1595008225712_0.6787660991076718"},"_hasShrinkwrap":false},"1.41.3-next-1595008382-836a4804.0":{"name":"@xdn/core","version":"1.41.3-next-1595008382-836a4804.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3-next-1595008382-836a4804.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-SyHrHGuU/DguI3CEGsGB0+tFKshAqY1eLYl0poi5+rzpMeaVlfPoLQ0ns1zlzLYllpapvfflKl/7np+mUwDuXw==","shasum":"24e269b6ec64e4103da101f5262e9a6e49f3a4d5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3-next-1595008382-836a4804.0.tgz","fileCount":129,"unpackedSize":556123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEeZgCRA9TVsSAnZWagAAmzAQAJkc7Y19hC66JwlirNZp\nsEewZA2bkUdJiM6N4KIh6cXiZxf6jOeL8Wt8zWVvqc6KPcFVE4Yh0h2WR0W9\ndwurq+UVB9p4spNminHZwvkhA+6h1ZiZcDLIHLZjhbyfnKdv/sX92y6HyDD6\nTrDcNjLF86UwAN8xYY+pqdQXvhDjn6tDi+UU9N9QlIu3lbcwNr6tiFqgXRLC\nP4+znL1uFq08i0QXi9KySkFnA7IGpUO7XpNMIY1c7OEpNQs1J8pfx46StqIL\noLG0LCMZX9f8yDAJyieTAqgkNTcqsZILi7u0bPfgGhTnVa8Rci1tqyS8h2mG\n4rY4EkVeyjvJLmNGG4h14RbOJdj07hfk/+8RPlpf7DisowZiaJntAeP2xFyW\n571eRYEnTv4/fUw7ZrhU9MaxTGe8X1EWYrov3EMSSnV5KzNTH32o58BJYms0\nB2q+9wXVVjNlRef1iLhPaHpY8Rry/ffUI6rbXQ50l9wLDgS4AH3xYU+nO2FG\nfy16XOplEi6+oktV23Lee/4AHbOXILtlBdYi6tmGLv4O8j2wrWrdZW+nk6Mh\n6cEhZkiT4NstpFevapzPN7LSQ/xwwzaAwpzQ7vFZZjE2m948+A7ltD/ByR3l\ndlik4kfNgAkaW/6xi93ZWWZPokG1jvmxB2XpBYA+nobc4NfkzCwfqiJEcnkg\n0zDm\r\n=Lr5R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC37PKyhM++WEMnZ57p8GlJyXSacm/1KlhT3QVBSPAeCAiA3VU5CQ8yTZEtYpEELErB6P/eYtvGKYd9icC7fiwbgTw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3-next-1595008382-836a4804.0_1595008608519_0.8325907285632899"},"_hasShrinkwrap":false},"1.41.3-next-1595010640-9d9a9ea1.0":{"name":"@xdn/core","version":"1.41.3-next-1595010640-9d9a9ea1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3-next-1595010640-9d9a9ea1.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-2hNVCO59A2jnXYOV3vS/hbXFYDWhE31BExw+sEFRc0wKX9j3Qbr6qhHZtf/AZI22loWk6Qj56fYoZ7iVgLaLCw==","shasum":"01dc97e4391f798ad14f4d7e28ba02a03f70819e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3-next-1595010640-9d9a9ea1.0.tgz","fileCount":129,"unpackedSize":556123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEe9YCRA9TVsSAnZWagAAPnYP/jz4pAzvF9o1aprmqbvM\nDdtXslYU6johhR0gdYFWeeVUNsIVNVM+ZDGUmT+8W/hAr3wfcKeotLXKAlmd\n1XorolqqxdNbuvE/WXYfc2ufQrCq7lrDj2oDov4GYJX18Dmvq+aHQMs5Gsq0\n3UFik5kY5iJxG831i8lk071Ww/vzW/IPO9iCF7FdCh9pkoW5c04IFwro9uWj\nGCH2bZvjeK48JEhvGZolwXq+goosSakajDi5qU6vBpVEENwQ5pucsMk3UWgm\neCwHSdoRjllfOMQ4Dldg3hz+Cd37HgzV6Ryaeptnowz86cZik3uNnkZIBbUJ\nVamlX/hWqLLztyD7u6aBB+iugLXflXTIFYJ1CrKOMLxZL0X6NVwSsWSP0Vdi\nse/PNrID1hGvaHp1zNjLIEhBuiLm3YmyyHlNF4oJOl/x0CI6Rw5J0h9eRUgL\nV5MAuh1KDa9q0HyDvaYDAaH2bla8Xcfky8k7GMqdyCqth+HJFyaURk0XsFNq\nQ5PiMkPE50b/5kQg+qEWj9v3dRvaSyl/mA6gAdAppiu3iyW7/4q+ebkhS4Xm\n+CwPBNX8nAnsZ4xBbinUAlYXTWUVJ6P0kkmj/Zqj+gjO3JZjPsrSHPd28j9W\nfZYGRC/HS/UYmAWToPRXFCZoMhcYZJ9NKSqWxcJl6pWujjUzvKF5V05ucF3E\nCSRq\r\n=ysEA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeJMBrPU9U0OQ8XNWVV/v3zXS+zoUljiaVh5WLYzlHtwIgNrtJVfnhWL/S/p+uw3i69Yf/7IZU3hhonM3jj8lxrv4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3-next-1595010640-9d9a9ea1.0_1595010904367_0.035791031299679865"},"_hasShrinkwrap":false},"1.41.3-next-1595268075-a3522449.0":{"name":"@xdn/core","version":"1.41.3-next-1595268075-a3522449.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3-next-1595268075-a3522449.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-9SJzQ/xRgr0NdEXPzRLy9bbpHJLbDTSv1bk7YD9Agex3CYnb3NR/Y7TAC16lVksTMtGXhGmIHKnz9Nah6o51yQ==","shasum":"524ad563be581bda08528f68c492af016ac1ff3b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3-next-1595268075-a3522449.0.tgz","fileCount":129,"unpackedSize":556123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFdz2CRA9TVsSAnZWagAA2DkP/28G+V9K87eqyIM1I3B1\nnwH2ohzkTJIv1tB7e5Z5ct1CWnKXYgnoX7Q4T919ZxTOc511g9WvY07MCUeD\neo/LEPMJ7SJzTAWmfj3jHHGVHgJ5akCjEqVDt3GuKw71OZBdxz8AJjn5wmHB\nDs/zQUc1vL4bGlGmsxMcq3AR1Hdj0dnSAduHo89rwoO/gqxm9AMeiFv+nnZD\nEw3w5nIKwezUFuoH5FehZnqiQpqMSK3Esyg5jVFyECUUncR1wDtanP43IOG/\nR6qc7yYJLSeiGLg//J285pk6pf0X8CQiqdQC4ehPw/9MVezht33W4rHTNE7q\nPeou405ATJvy5a/8OXfvSEGR96BCbFOvPZhls0OiWOn0PidZxoUDHz7KZX40\nSCC+6DoXXGVAti2LdOeCr4+BUnxqjOrSWlsmFX3MG2mZyJADp5aqC9Sselai\nXy5wUufLcN48g/qlpplUNpBerPczshsjwENxPux6VE01ntaCBZ9n/AKOUYkF\nKXkmM44TpZN4OAPC2YCw5zUiMtUzvXkNSa2SL74keoVv+urjwzUZLlBg023q\nDO5om+gH4wfTSPwlZcledk5scFUf6LWvCfOsMuTZPkEK1F80vbebsmFrAU2V\nU6joZEDeHyZJBCYX7rsCE2C2ie7BaDmKqT11BenOqDe7Ho26aGYqi1rW6oup\nrnbb\r\n=DP20\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJv5nC8rmihZXWZx1KOGdXgyvkDXwrPOhEK0aKnAQqQAiEAxdPywfhQKYWh85d1AS5y+EdhclJGw/JLA0LcXsz48sA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3-next-1595268075-a3522449.0_1595268341720_0.7033830737735816"},"_hasShrinkwrap":false},"1.41.2-next-1595282226-92693a43.0":{"name":"@xdn/core","version":"1.41.2-next-1595282226-92693a43.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.2-next-1595282226-92693a43.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Zo9U79w9aY+TeWJWsEiFx3UGRo3JRaBfDCazRJ57X/j49CRx4QJfB0/qyf3MjE8SOlulnVLGeYGBH+Jtsvh2Jw==","shasum":"d16110f466d97242b4e664879f625ba7d64f341d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.2-next-1595282226-92693a43.0.tgz","fileCount":129,"unpackedSize":555937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFhQACRA9TVsSAnZWagAAwV8P/2uDzxoetxn7QeyZE+6M\n37oc0WbQop+9VXDdDCpZeUDlyf5U+3wM4M1jMWNb5MFsSz3ehHxOcjDXlEET\nJQetgFJ7H8QQg0TPe6LMcyJldej/ljOSoGnjzVLt/X+fiWQlJt4H4/zi100K\npDBsD0EaybLhl87HXtoLhwkWQZ6hdtSeKocFvi6gfWy3MMamC++mD0uJBIgx\npUh1WTVuL/bftG3ppi+IGs05EsvMIJSVxVpvkNHCB63nXZY4pKdU5oGcLeF9\nYQdp4PX8at+nCAZtfivJKGCjAZFNI/PttCAnDtzCrAUsPn7m0D4vu7ZGr6/y\nkhVsjeuqY0NnVRCPmhEXDqzRkwUjx01PHtilIbh+lT6FqOvxE2PIHt+xUhj7\noqE9M1rTargJ1x0bZAwQRY3CVj2uw7lD3R2olDowbFG8Ns7fWLqmdYk2PdLM\nkheVHowxFnRW0Umh9P+41/tbqaZxdqesHiBryaUwkYJfqk5nRW/MxG4gngHr\nquwrZ3m+bC1aBDyawRI8cOoaFwvfXF8jMM2674JapiGWUMaq3hp4JnO0mRpP\nvKSXSWsHMWQmBR2OgDS9jDCVM4oJLZkbjzf+CfBIlxYsAH7SceM3f3x3Tbv9\nY3XyGMUfiwcyTMrxvKtABpmLsZ4vTSqf3j0sBHd/mokVJH1r84CA1D5zDJgA\nbYw9\r\n=DrZ6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEPaOiV3t+l+HWVDOOTxoteHyoyjZhlDhe2WqZETO9HdAiEAvCK4b8MEXEGCpwgmxNtLAzvoDzzRzilm/OuodglOzXs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.2-next-1595282226-92693a43.0_1595282431762_0.9058298479461893"},"_hasShrinkwrap":false},"1.41.2-next-1595294706-11805640.0":{"name":"@xdn/core","version":"1.41.2-next-1595294706-11805640.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.2-next-1595294706-11805640.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-TXeex8n0PSr412U6kQNVtREQiENp3DkT3ybvc2zp2nxpaqDXavFdQ/T9/KOyuZ1Be7CGkqGKJI/v/JucN5OzQA==","shasum":"5ebd59d477ef13158c5b30a9c42337d4678088d8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.2-next-1595294706-11805640.0.tgz","fileCount":129,"unpackedSize":555937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFkTxCRA9TVsSAnZWagAAkNwP+wTyODEVCDQ5SydfsLPg\nHpfAvah/thKNNHhxwQtnzFpeiO5Uv6EjR+jfBOk92RSTppNPgYQGg97+NHCU\nZBLMDEZog8OJJJtTnZdQsOwVdtgS6VmXK4IHqOYnDmEmdU7iNJ+NdCtSrG9e\ncep6/AgggQP6JjFTxPiV9r3TqDhBrCRjc9Z50cklr9Ym/xwsNKCp1tFBLT2Z\n0oHQEfGW/PP6dLPO/w4AfW4jkOidSP9DBehpI1h64EXq8Gx/VIjNlkvlLL6v\njeXnbAotPa8vqZJsIXIg9lGF0rCbU+Mt1MkSbmuVpCiN2drE/EYSgiFjnRB4\n6Q1BHaRMbLgfwwx3L9kNkv3Y7VJncoCozpFXXt+Th4WIFA0S60lDe0MQShFY\n61OnSZDEMC3UamE/OlzcG1vyeXDgxGIHMWSIQhaN7S+5ZT0et5z5GOVeJXsF\n3coYcvcruphOk5zCu5V8DZ/wTifXqgzNZHdBjcpPC1OcrtvEOSZlxAgQ6sF6\nN6UM7IHQ0SuFY5mOn//4Ure5TIVsMsXWBPdQXbt25/Ss4Q0ksqjLUqNNQQSs\nxfUFa4x9vbNf8+4EgTskzMmeGeyw8wSUpvqevAtXQRJFmtVEggDZbQGLjjxi\n0Idg8bCgjF8bAacfw6xjJn6W/jT/CG7lxm7uPXzRIZUslkparreK8at3pzS8\n2zW9\r\n=mLv5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHhTlTolfibMHga75I6jdOsBM2gMWy6FrlqVKyCsLzpQIhAJPbPpC1WhFYjH3OcEGiMUvuk+P9WXofquZn3a14UhdO"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.2-next-1595294706-11805640.0_1595294961132_0.9488781378676379"},"_hasShrinkwrap":false},"1.41.2-next-1595298686-48d5c565.0":{"name":"@xdn/core","version":"1.41.2-next-1595298686-48d5c565.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.2-next-1595298686-48d5c565.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-TrcYRywhcwoIPaR+BVB346fvl3TuvenVEJByWHPnl6sBvdzYntYrekTK/vEOPbtFX6RLFRZ5FwhTiPUXx9A9Xg==","shasum":"72bd51f8fc733fa9de91072c22066d92b298c38f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.2-next-1595298686-48d5c565.0.tgz","fileCount":129,"unpackedSize":555937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFlRjCRA9TVsSAnZWagAARgoP/2rE3beW9Gg/drkcw18O\nNVh5wWQif3k+XwnSgIEE1Yt00Q8yAz0O0brRyeI4FoSrYEEYiAzb+oC5ie40\nIgf6lCM6LUdEqum7IAF4Gy5/J3V0Jnl2T+sxlUaVRYKNKCs1tcbQ6whhLXuj\nXydZ7hrEjGGb5C1egl+pDODtJ2oAljk4SB8mO7CquSo+8FKkVZIXC3IjQKNf\n4dhBFUkX4oVyI+4pWNOahzCu7Bpz+XCLwqoHku01SU6g1ZQmpZn1ciKEmBmb\nIMM6ZkGBqIG9DhYd5Myi4evEDmPFPpjtcWFEJ/tJQ/ZN489oGtZDoMmzU6zR\nsEhuaktG8cjEWr6tjQHiTqVO7hcnjwjrY1+2JCCn/fl5wSrCMunIvcprQCVy\nr0/DXkJtJtqW1Y09VDAlOLghokgjyc9vZVDtQLsbz8+0+KeqgS9HOL8EtaWl\n7JrSur+GmcpXKuUsIHzrgCj1VnwkE1ZP5SBvWUQLa9ZOW0blSEExhCTasU+s\n1xlc4nsVrJm0zskwmBDzNDphz/kZdcs1HNcciZqw1jJwzDO7kiCADqAwpRMg\nXowmtcoBZ+XT2chn0mwTjiYF2Wsho5UFnZ2CSCHSpcMCji4OdExrHB++v1FS\nbcV18gw8hcg+RSjaRWeWSUd3E/JRfOeDwv7vvkLbpGV3lMerxOmxnX7BX7hq\nWiyc\r\n=j4Ys\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEGbqpBzXwd9HG/fXhJQIO8Y2yznukdZpc0s0XTuIAZrAiEA0dLy3J6UnMkEhX+VsCiwq/18dGk8e0XDwlNItc0OYrg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.2-next-1595298686-48d5c565.0_1595298914663_0.17597935892419025"},"_hasShrinkwrap":false},"1.41.3-next-1595300412-0bb5e5e3.0":{"name":"@xdn/core","version":"1.41.3-next-1595300412-0bb5e5e3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3-next-1595300412-0bb5e5e3.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-yeEqoE3ntcMTK606g4h/n1He/JevqVvtw03FuTBz0fDIVsREVPUKmLM1boAazjzYIkwh1WmbSySZtv6GETtYRA==","shasum":"376b416c3016ce893561504d7e2de45173dddebb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3-next-1595300412-0bb5e5e3.0.tgz","fileCount":129,"unpackedSize":556123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFlszCRA9TVsSAnZWagAAV3cQAKTMU3ShfxA9206lnBHT\nuukwKi0iUVD/ElGrJPsmjPKAfZGnS8Jx0DLlvph555qG3fQtk9KGaYqceStk\nIqiv3nllIKeEARpmG7shaoYlc+0fsiXib0gLuP1frHBPvxbmfOtV2Lv/u+MI\n7fjN0twPsVAImnP2HzKWILdaKO4uBgTrzCHWadcCds5mV/pz1f8NgTVINc7j\nMrNwg5Guj9v8UB1DrFeYKJcbtlQqhWTjH+qxd+DLnI0eZFW+ys4tpYNRLxg6\nNrI2IS9vzSfRkudyJxHT6hxUnfiSav02oeHuv/5poYAJsqsY7HYxvRKKoopJ\nx2VxMRTRWC3hVneQf6+Dt9A5kyA39rqMbNCPl/h/Di7uWw/hTc59Wgeb8JoA\n5IEl6tIpgDo7h9E6EOtrDOqcPX7C0L5nSdQ+vdsUfCAj8TAGhwkOX1+HVRjM\nyfk3jaeHKz86nyiruD1m6Pd1l0ObYvSWeYAVjTFjfBxNNs8ubJsUELH/MPMR\nKsb09PYpWm/RWvHRc4MokY3GCqwiq0VA2qzuiJLuUXTWA5ocwUBd7PIPyJ4K\nyubNBBnT71hjLHV0XPCtMu4wnsXYDBzRhfjAoiBh9pB3VqWf3UgDVhRnCPsG\nPEu/Fw1U08IFKEsK/+2qzmM5aYk8w2tRamyDIPjPA722U/q8F+0JLgBgRSfw\nSM4i\r\n=obj7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGQ3CViTY9YH+7E9bbE7LEjz1DBX5ap65W2eZxHJk2WmAiALAW2zwXze6OpX7e+G6ISUZCKIt7j0kVAhXxHHWjdjiQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3-next-1595300412-0bb5e5e3.0_1595300659377_0.4191922053783659"},"_hasShrinkwrap":false},"1.41.3-next-1595327631-2b147e8c.0":{"name":"@xdn/core","version":"1.41.3-next-1595327631-2b147e8c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3-next-1595327631-2b147e8c.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-633XW7amZ5aCNEJSvWh0q2RzJnPatsJ/wE4obeuKM5RQaTJ1YATcvxtiTZGCQX2eJGLeYwc890SKrY1DHJ9ZmA==","shasum":"3c81083aa62a921be8f1b048c06e290e6168e1ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3-next-1595327631-2b147e8c.0.tgz","fileCount":129,"unpackedSize":556123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFsV8CRA9TVsSAnZWagAAJbEP/1yxUrX4fXfxoRUp51sw\nJamnhQQjjZjU0o12KVRduitcy8g0f7NZXntHDkqYSX/PSVviJ11In6OzIp/j\nkknqtvj4sN19o2ivS9I3+ipa2sibcth2S9zrrnFOIAKDcuGfMQjLkLbOvsjq\n3LwAqGgbsCnKdZ3carFDfmLnYXMgU7lPewsRXDK6NfCdX1wvLY6xto6NCzCs\nIEFUw7YG1WuLweiAxKhYOp/iQ6XiE6LZYJxDQWCacd+B9eNr+3Q+GL0A9MEp\nsaqI5cvbHxnLt3ZfhYwJcjQBkF8gVQ0tA/A8kK5+01UkB24C5l4/y2yRCrkP\nuLaxVHCCPrGhHcFPuIZOKUUJgncIO/mhYJwpUo4+Mv1c+PtqYDmLYTg1nP8C\najoDHFQYDQ35naat7OApY2hbJc/iGS3ICCK8I8G0Yw7DTrczIWQLO9NQTL6R\nseOiXgq8gCmvJ4NJK9Hgf+rhydpLOrI6UdekJasg3NOB3GO7oqjl2nuv7AFX\nbjc5OjFKHawe5cxwDiCrDrd3q/QLXUHcy3LQxtMIvw+rK4Es6hjQLivvUfn/\nVDO7xjIIQaCuwubu44gyhJ4EbR4fWuE7uxpoqbYl+Om6FzViiWgTXYeITSo6\nydzRzw05Ne/a15PX45q4RV6Tk+Gwj8NknvsA/Pl7NPFMOySo0XUWe5f5PIkm\n0hdU\r\n=0d4c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHbjqky3I/NBu5/QY0cY51qNVBYBijQru7JUTe+Jw8NuAiAoY0zQrzk2BBJ+1vicVKt7z5/W9qV1W+ekWXWyNo3f/g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3-next-1595327631-2b147e8c.0_1595327867718_0.8058538376798019"},"_hasShrinkwrap":false},"1.41.4-next-1595328202-2351e36f.0":{"name":"@xdn/core","version":"1.41.4-next-1595328202-2351e36f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.4-next-1595328202-2351e36f.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-6i0bmMaAMkHOkP/veZoQxoIYmhTuP0BZ+aNv2r72L+igty33aDcKHghUs0J1lo3QhYFW+78AlEeNJZEmPx1+0w==","shasum":"382f2e4e296e2feadd11049783cbbb04610b2e2c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.4-next-1595328202-2351e36f.0.tgz","fileCount":129,"unpackedSize":556123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFsehCRA9TVsSAnZWagAAuPAP/RPYt76pO9XqJUkcuh0k\n2BeZvjTwR/2kRZNc9R4kLVnQGIQrnaPFtIzAvhnfK1oG4Ey+j+B0de1PzgID\nSwXl4M4AST02iyV7sAlavIQAG1BG+vfM0V6p/Nm6J4P8TGl+xdxv4ztiFaJK\nfx3uHs/rElo/exTvtIoiRVBOv0z5BbB+3ADbphSMXDPuHbDnGfXq2F+tCJ5B\nP6jIEmBRR+BKq9+wyWToGLQUMp7lrXiiMWSuH74Stw51dFT7X8Z6eh2045MY\n+iLVohTAyuSACBt0enPvVEnKQKIXwX1t8xT0i3nu4gMxxFCeFPaHn+3XhS2j\n3G/DZi6vqmI+AAcPRElVGI5d5Xc3iHJ4HbZvn+rFE7Qu4cOinPPmcNuSzawR\nbZ5YVc0xKZXM7FkFQvyFtxgVS8HHdgFAx0n1Pn0IJjnFApuNG63mPhedVvKp\nZyCeGsvjX+AqoV8F4AzSVChhrixeVovf6kXn23qPQryB+KqccIyJIXYJrqdf\nJXtrXtPQEH/8kLg6DBky2wVvuHZLNGsnG72xU8Czsde8JQ2jyeaWs+7l7JGg\n8jpvoxYw1bhqohWinq4Mx7GGA98414bnyPadEy4H78bmZHUxERFN1HrnVTjk\nVCYT8IwrNOml3XdrpubU/rjw3kmLVY//619+Ib750WxXw3ahuF5VUxlQUmSb\nBhvk\r\n=E1u5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1uWXGvsYph3sKIen7Ubz8pb8BUna+hzBBMa8qFxlafAiBg9KKN5GErHcN25d8aCAXS7TIKuf8yRuq6dtx8OoEh8g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.4-next-1595328202-2351e36f.0_1595328416706_0.2889567010896559"},"_hasShrinkwrap":false},"1.41.3":{"name":"@xdn/core","version":"1.41.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.3","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-yx70IF5PAt9OHqU+s65Pt6jZS9GYlfLgFdqtNyivHjQboFFpst+VRoQV5N2OKFXpz6Io+Qat43cXyGkxiNtTgw==","shasum":"45569209e076ab4b41a4ca21bf593b6bc27dab9e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.3.tgz","fileCount":129,"unpackedSize":556069,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFsniCRA9TVsSAnZWagAANBkP+wfW6BVK8WnycRvH9UIM\nrdQZxLYsHd6Ya0ow/211E1meZHV9uk6mg6mRHRyK8UPRXhhg1JW1MBmZSX1U\ncdoKB7qKaSb3mc3ijLZSW4pAzPygTYj5zdMjmB35PcTR8HO9b9uBEvtQvm+Z\nC0ReiYcQRv8Fi17IZO4WGGZ5V692j9QgRhHpvfeWx8/of3v4zOJ44C3/MCCZ\nPlCrDdcN+bpk3tHagSpjE0/fL0pcbyfsb0OKR5S4SfjwrM5VKJ7m6Wf1ZdsE\nkHs4Ia88iKUsJa0S6tHKTBIJ9dUTpNz/JeBw+vrocA+pzhTyba6y1vbfguXc\nRIvZvQpzri4MqyGKtrO9gRRDyncwot+GDn2ACRkIfqRGk6GtsFuEds216dQE\nxPs+CsT6YWg5xBubPwnpzKHPwQ+S+tze2Kfb+g32gL42y+nrJeG9esZzf0Ju\nIlSxAn3CPpGeMmw0oOfBHsDv/+GQVm3YBF4s0pNHbJ6yisp25WPh104CXNy6\ngerjz/1seKCDZf9JI1o/7n4SXE7kpVuoTharU/y7DtBrZYbnp7LUiD+2DjGk\nKFx7WjsmdqubXcXDJoA2jcVKWkvDt+sYNb0g5ARarKrHLiHaHfqvI0iVj49k\n2x2SNado0LUuyoWNNlNYw5wrmNafgqFtCO6oHQPcx1nX4KZB8FnVKmvcUvJ5\nxyTq\r\n=HmEF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBah+NVJhk0m2edAwNH6IXOb1T4k3jsSgvOSEHx0U4AxAiAZfRnW3IsoL2p00j/IvzvCerVjggLwDvwLNp9DCqwk9w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.3_1595328994381_0.6725610930735211"},"_hasShrinkwrap":false},"1.41.4-next-1595333985-ef318f78.0":{"name":"@xdn/core","version":"1.41.4-next-1595333985-ef318f78.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^3.0.0","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.4-next-1595333985-ef318f78.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-xI+8a7BR0/8TA0LFXHGp1IuCP+ndEZn3FwU0Q1p/GS/Yd+Gr2QVWH8QKAImigInFl0j1JuGqxtNAHftXJ69j3A==","shasum":"cb7d83f1d410981d46772d6b963130d678df7599","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.4-next-1595333985-ef318f78.0.tgz","fileCount":129,"unpackedSize":556123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFt5sCRA9TVsSAnZWagAAqRcP/16xlk7sZM5R1eGrNMu+\n4UInTxf4oxQwPVXUEdgUjl/mkN8MM+0LDfW9J/IirORj60tte755bpgE7oZ7\nPQ6pxMk9PZTvQhdx1U+P9VA4jo/X2FMoeah6mJu5AYTQiOrhYYFIn6BK6/Mt\ndPf8yyTdoHitvzBZTFXOFteMgTUJsRfl008HlGw/hltsPd8E8dXCCmxP7RGp\n45o/ENriyWguDDglNn5f1Y1lvcQ/R9zwIRwQb3J8PQZo/qsOA+JPivfF3P53\niGwTGI7pNy2hJE1QEZZJzl38QkCrlDkiMmWmSiNP4BZPcxl+MC5DtBk0e4Ma\n6MPSbammdfqENdel3PExUUWxFjEhzjIogw6nPwaqaBNR8lGrTyVsfZk1fcQU\n4h6YlvcN3OZOEHoP1by9IV3Z6jh2s/QAY4DS06GIlTOIMvU09F7GkWLW0vq9\n1PKNNxDLiQr5/XZ1hWJdVGsB1Sx3LryHjr2iM0tMnylmuymuZANu+vzJqjTd\nr91GWCDXi7kLhtqx4ZnOAByIF4URZeopWuVEXCNMoKFW4xWHWeLRbcb7lfmb\nZFSuCURr8fxzf+FYDAI9xtfpSIo2vjwVpTljXngRcMYPJpA9qh6sBFD3T8Mv\ntMuzf3zFZHQZ/nsi1VSNgPglZqw83EMmbz/WZFl20c+ZytQLa8e2TyBVQmTr\nr9zq\r\n=SIL4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVk4rlBot2Vv9QUOTtr+AoWW5R16HgwPgr5ZyR5VIq/AIhAIqsBD8Bq7bseVr5SpM/qrNuiqYqAx7yv6OJbPERYFqk"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.4-next-1595333985-ef318f78.0_1595334251511_0.6718826243198137"},"_hasShrinkwrap":false},"1.41.4-next-1595334862-85cda14a.0":{"name":"@xdn/core","version":"1.41.4-next-1595334862-85cda14a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.41.4-next-1595334862-85cda14a.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-pKaKOlcqQRiA+/tYiTS4jv/uDhZp/nQJbyiZvoQljoGmXY8vK5PGCQ14MgVM43QoBs3ZBJ1QSjr6Z2sFEj9Pxg==","shasum":"989ee23c98feec7205a2e900ae44c8b963ade1fe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.41.4-next-1595334862-85cda14a.0.tgz","fileCount":135,"unpackedSize":572240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFuHICRA9TVsSAnZWagAAWZwP/R6lzkXtjGGWPWjzMTAD\nNbW7+QgpIjU00GMXgESHYn+7AMlhoi1CqALdSiItFl/0g9HWfsItDN1BO73q\nwMsLcmhdsA20rMgQSoXb3xifjeuGWumknw7Pf4YHWJbfUPB/8AJfVuMmoxxf\nhWU+6DeMmbdAC/wkz5LB+qpvyR0xkSy5nHZaN2pU8EKWE5Toz8/Oygw97pJT\nfkggAbsimiJVgwKWoDKYIaFNyr0ZJEKfCK4MUR86ZmlJ41pBlGXtUvfTz1CE\nRoSbaYlySIxBPaqfyw81bCzKQiIXw4PqzhQ8Ef9GxBfe8lVPjPYc0cBNfKK9\nEUdPAcXJ5NT9rNBBEvc4e8A5XxSmhhTFtkEqmpx2uHPi4qr4l5kttQnZ2ajl\n67myBQm02N57Leoct3bEbsoLeJKzhpfuG13n5zaWotG7G6/aa+4sJpHmeDJ8\nm74eGAkqL6lVbGycAy5Al7Vtvhht/NzR7fOyo2Gq+789s+qxMyGcMhSKvILd\nBiqaz99hLG/0ryDgV2WRI4CKfjGwJyZSRP9XMuePniZpL1I6J5EJMbw9J+Hy\nzxcP+MUqjXG9fMcTEMzgr4Q5uHdamAbmPHyLQfJ3Efc5bNnW2m9KiG7lioPM\nYQD1R9qd3GACSFvKbtZupnGYtg9+EkjU4hZve9/fHP2AveV57DGkUey0936s\n+3Go\r\n=xggE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAeJWZ+j8Lir7Mzg2juoMFodmubpSV456a1Js42td75fAiAriKzMu59XXSkzS9aU3LXFK2uzSW+MZAKz3Ibu3O+3sQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.41.4-next-1595334862-85cda14a.0_1595335112088_0.1863687666599585"},"_hasShrinkwrap":false},"1.42.0":{"name":"@xdn/core","version":"1.42.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.42.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-0hFXEcK92W4A1K6sVjdfnSF4tu+2B/vJtvo/q2lDSw6xqdNG1b9BdsO6WR/L6uVrMH1V2pIa+XuvsrA2SmlNZA==","shasum":"a7077c8e44e241b3a5413fb6481e53ce5f5ded68","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.42.0.tgz","fileCount":135,"unpackedSize":572186,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFuJBCRA9TVsSAnZWagAAyjcP/0XPCawt/brPQbO8eS9q\ncYapjNvloahbicnM4qzGAmSJXV4PZp7Y++dtWxpw6w+rKKS8Yd4Rirr+bk4g\nBrOueuD/I7/uLIJjfqYoxIKZD5nxTKb67OkazPd67/WfRfpEyiYTcpv2tlFs\nuyj/U6dR1qY6ffugfW6HgTBEdH0FA8t8daMJI4yIBkXW9+z0kMUP2c358R7x\nhE4dU8y2hlnrnXxzdheVHGevXmwCRymYJzEW7k2gRCFuVH2CjFKdwv5XgCse\ndJXYmGnJ3Q8BCboEmzLbsiTsF440u8dtW1Hi1XGIgl7wcvXNbcmMSDDlJ+sM\naiEpJ27lHOxnfrv8LpysO9Pu9MgqkV+Va+8zLsmh64AJpvmeVn/dPJpx/C3x\nusj45slkqcBCpKdicAj+plUixncO2dsQhjTTt7xNj8zsGQIkqPYQXDenLVXf\n9Hh0k9KDpF3ZBnfg/s38oAl/fFG1s9GNnWVEBZiofJ+BIBYpT0U1Jc2OJEti\nxPGK5G02RbUwv+4iNTTkJ/OxVOC9BQ7+Wi89H9QU7v2eOVrtubiRK53QENDM\nSr8RHCi8Sy1fAmjAgzFFkigeWGIFd+UxZN/qR/JG8bE4IhCWBmCeyMUgglec\n0pdyUjk/XqLN9D8RvmzBTU//r8dFMXr/nuogIImDDx0R4fHrYcTrdI0dqoW0\ntWSM\r\n=oAg3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG3aRALg+KbfQ9zGE06b2rPVETOxdPuzhc5rTBkbVBguAiAC4ND1Gv93EwBMh1bo+R8bW6AVWqpefDrQf1XgdP9hLQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.42.0_1595335232603_0.5520048832572306"},"_hasShrinkwrap":false},"1.42.1-next-1595351340-3babebc5.0":{"name":"@xdn/core","version":"1.42.1-next-1595351340-3babebc5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.42.1-next-1595351340-3babebc5.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-vEL8fTWlxpIvM9+86wfxPIweVVMvmAx7KiNzUmpe4bS8bujvpfvVVlmL+dHRp/Ho7FIptk800nPUf3Z9wkbN6Q==","shasum":"41199e4da715d60b48ac72fecebc0c771d976dc9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.42.1-next-1595351340-3babebc5.0.tgz","fileCount":135,"unpackedSize":572240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFyIsCRA9TVsSAnZWagAAQQYP/26DGOAdBVkaR2+eACem\nsL3S7mMI78qfRjIu2fo1aZK3QS1dP8K3v5Rk9mhwpL8zxX3xTYu9OWe8LWqR\npFMihcZyQy6DFBu6ZMgPfk/IvG3v2uFnpvFUNgqjxCPWX4v7VffMIq0joAhO\nqvB3tSeSo4vD23FiUsCD8BCjqywk6Ef+M5ABGTVLR37PMfodVZaObY6sSWvg\nKP9KVKiRZFvHhO/GUPWc0x9n8TAFYGM98zEiZxdSWIrPdysj6mBfXHF8Z4qe\nwNa2kst3w+tbdfGlQlDoPHlp6Jxhr7ZrvsponFjgaK+wEw/h8xj7CG5NKgG5\nEFyWWYsILyUn7aGMl6R2Ooo35mrvaf74wSgKogSOHTp6e8wfqYFBM32bspbD\nvwiP4Qul0L5VZsO3GJJlc7teg4Utayx6GbfjkHVWEVN+4J0W5XliMw31XrKH\nHnTRGyoPOv/os5bUiou2JOH2FCciTcZBdh8mIoL1Mvb6PI/RhiftCV5TlELX\ndn5+JFnWsXgvuKXXPL6bVt7NQ4Rew3vKc8LrY2dkbKrgZfxArngYLNWLS1UY\nZrMe2D0O2ifb8a2DCNJxsU45TEipkLsKPpWrHnLfiynfmW7nrGReP0m9FiZ2\n8t2/zRtEaPasbpUrDeAVrl0bVsFITYhPqHtjN6js7bcf/DcXEZ+B0DBvs6pv\ng+B3\r\n=nLGs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2jk2h5ocVHTqOel67LRjZmm1KgmIGffIEJNMdjniUBgIhAJW+1P9yE0dfAPEn1SyET9uJmOvO54YT46BxMU3SRZq+"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.42.1-next-1595351340-3babebc5.0_1595351595879_0.7238216025083928"},"_hasShrinkwrap":false},"1.42.1-next-1595357119-a3799158.0":{"name":"@xdn/core","version":"1.42.1-next-1595357119-a3799158.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.42.1-next-1595357119-a3799158.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-WLv7wk3VmzW4iAACOhWrbHxmqzNizIVmOKNOw1GKCIV0L3ANThgVUEvnlNU3sGFdIrFtIwNp/w6xt0qQNq3W+g==","shasum":"bde37537002add7a74e1cecca83f428221233f39","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.42.1-next-1595357119-a3799158.0.tgz","fileCount":135,"unpackedSize":572240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFzjJCRA9TVsSAnZWagAARGUP/0E791aEimZ0LlWnJDlL\nCTyEeV7sPLyRfoJF7QRXKb4sBMIvLlZdks0zZFwPhg7et8f8rlKeU/u+7qiF\nGLgAKasHc0JmHnq6n8E7PNy4BHmeupnsubAwO46mDv3dx7NT9dzW3w9ybq6Q\n6w538rRXN/pOzJ0fMmzi0g99s0Zm+iswGjwh3KEi5Qcqytd9bz54U5FOwMjv\n+7rkk+fpNLPfDv5NFERZZVaTe9dg549/NmtAWMcYwXUD33ja5xnRkI9JSfU9\nPdE5pneFnQNsHU/Aa5CsLeceS781D4H39t7jrGY4R8MaSkUy7tqr4pWh/0MN\nAbBgXWFvQqxDavSKepzPKsjk4Z2NIca5gyglIeQBavlNst/Qbzf7SNHVRjG0\n/1QsgLYkKKvi6h8hNmheVNSYAIdAbRDcTGdadEZ61aYlglz6r3ZqHGyIKZ0R\nqi24X4w9GYzYNocSWkZSu51F9y2bN/RlXONZFe+05DyZwiyNtHtWjxvtewK4\nKKpmm9mqA0gZbc4i1mXoChpx4wzz1xrHOA6ipdJZ1xU5/uCL3E51Xq3yD/jM\n05YR5ZSzTWyJ6Kdp8+xZohBs2yRKr2jxkATaDRFdItVevF5Mr8BGDwEGfjNI\nVV5anBjaBlvEf94iKxCIKO8mjKE8IR3stFob+sOYqQ2VIFpNB5IP6Pcp5F8g\nxbke\r\n=q+lr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUvHDmmi0lAlLohcO6IATezGan1W736QDTee2mHJAAEgIhAOuMccvdLkUgGCcB6Swh/1K6MxBKantPPnTBX63yC8T2"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.42.1-next-1595357119-a3799158.0_1595357385024_0.8940318656329802"},"_hasShrinkwrap":false},"1.42.1-next-1595358007-a285e756.0":{"name":"@xdn/core","version":"1.42.1-next-1595358007-a285e756.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.42.1-next-1595358007-a285e756.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-7MtkSNl6u2OCpAQfPbFDnvlJ2RL0Aiq3MevZLpzpVKZlDqUJI/6CRqI9BnbNLm6z8LUov45leqgQgDdmSu958A==","shasum":"a0bf9da405fd731f0bd5b76a132d429a51126fdf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.42.1-next-1595358007-a285e756.0.tgz","fileCount":135,"unpackedSize":572240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFzw9CRA9TVsSAnZWagAANZYP+gI7omdH0ISbyf+h2om0\n/dFt4xnOKJRDWNdi+rZPRKwKHOmr7LlTt2YoehxI/HYytE4N8+6yBCnrsbQ2\neP2IvzHUEXYE6wupFFa2t31k6ZtBGxbYofUd2Li2rCPYT6YN42i+zGExVVI0\naVONRbuGYTBRHPsCQpTfaB+6iHbxk5kdvZPTAcrOTZZK2KFJn6A8hA4fcUle\nAcWSFHU8WgMTIkDoAah7MDMw1AJWwJduVHc5V4EVAmsTp99M0fkaH578R2tG\nCrroSLeMKx9oO/8kI+cf6fl6iZeeGstvUjzOmqYVUN11uxtbjPR4KB7zMOA6\nwEKC4h0dWVhzQ8jY8jkM019+x5XJrx2NZHrz0atUckFDSQEGiZ/kVS1sXQA/\nP2lQosfs7uGZZs8OFhHdVsrILxtiVx9v5uOO7WZs9T14qb2qZInqTMSQlV9E\nmyAQnE1yVNgHUnf4BaEFm1tc9M4K1jmAuZx0gwfHzETCchso5k41qdMDES2z\n2XvNzqxL1cuCt/1ed1LQKwL9NR5wwkTLvHkzpmQ/yp9zEGcmmuFOFQbJnLOt\nLlsm9K0WIV+rgOL06weh4Z7LoimHtKY03n1pQKXL4tfuWL3XWihBz0Y2IuT7\nzSd+eFvnwdqGkp2maLrT4xy4lIZ1J1szAK5SNZtcsotHLT+nriEwqtkWhvfH\nAq9J\r\n=gJ17\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGX08AtUD2sQHWExuIs8w4pwindmvoweUzX/wcseoVhwIgNZzTYPQkiIrdCBHxLlqRcNDAF2zf7AutMAQnxep6osE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.42.1-next-1595358007-a285e756.0_1595358269348_0.042473834753671946"},"_hasShrinkwrap":false},"1.42.2-next-1595358304-9ae40bc4.0":{"name":"@xdn/core","version":"1.42.2-next-1595358304-9ae40bc4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.42.2-next-1595358304-9ae40bc4.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-YUNm8wU5KfJ1Sok20NwyYQ1kWXPqzXb0Dsd5qB0gE/TrwQw1ICUSOT8v6fOuDMsv4/oQcPiGuukKgEXJShmFoQ==","shasum":"dd1fe18af1963164009e5406c73afe775ee04044","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.42.2-next-1595358304-9ae40bc4.0.tgz","fileCount":135,"unpackedSize":572240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFz14CRA9TVsSAnZWagAAs5UP/3Lx5ZYUMiDKlxLkiAaj\nXdoaAldxX/P11FsroMqTZDUkPAh6DwGaqn83UGeNgGZ2ccaxO3HFc+vR2CT8\nsCMJ4IyWVnt6ljRt3evxief0YgNA3pl9mRgOtLzXCTKPlrIUD0GfHi92FoNu\n1Rv739kDX2jLm9GczCbVtG2NN84qKm206gTbo0Vn/KUKjzP2zsbatYHWRlLh\n0U8W+TndbgrIS4gpJD6Lfg873WUBa0gTW+Z93wsSEkKuazrj6ottX6Ndllna\nWataYh/u+vY6Jx6V3v4oYlFU8VS4czUqo1rgBnT4Yp8vS/dn86znBjk0CGIu\nkkI8tJrLGDCrd7+etUOSOc/5bwaieuubjc43G58gPiWwBS6ASlx8acz1SxYV\nec+3LnWwaWANGzI/IaV0VFcO73CVPSIYKs2A3B94MXHx26zKiUuD3imKCH0f\ny5fhGvg+POxDiHOKyU7dgC2XjPmYPR8LseHq/SCEH1xBbylLIUlFAyqNQGPQ\nwXDTumM9Wpx+P+7RDREcKUZ+MPrw2lW+0L7H9E5i796ojDH1+ZZy2Hu5Y7g4\n2kDh8WZcXs8bHmyWsvO5PbM+ZSEH0fBYkSLVyxjl2d57/RzBjh8qNm1mbfp1\nZZ9EhTgLowD7+MWZSRwptJ0VvE8qEfaB4crDTkIlzPKvgEKALvDVbGfst+fa\nRTQx\r\n=owKo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGYaswwmtB1ganMNNoR5G6M32xTdaQA/APdKpaFUWCOZAiA3H010roEpFx1VhjIOUmkMdYl/duog1Xukdsr1QguHJw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.42.2-next-1595358304-9ae40bc4.0_1595358583747_0.4522368513784718"},"_hasShrinkwrap":false},"1.42.1":{"name":"@xdn/core","version":"1.42.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.42.1","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-lRLvSI/T769IMYZ3LFaod1qtcUPuDYU+K4S2R1ASBD6qO6wjK/vG7d3cym3AOaiA/pSzUFFOTRA34qEmvJ6akQ==","shasum":"b21218b618e80bdb6d99b1626f05a57d33f9d28f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.42.1.tgz","fileCount":135,"unpackedSize":572186,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfF0AXCRA9TVsSAnZWagAAfKMP/iD2p1U0hMrGRBRjF/dm\nEkFanwJ/TzX1qS5irZyPESeBq6QkJsutfP+/QyzFx1KWtV8xNMdLXHe5vkCc\nqvD7SeRpJQzEeazY6slgusDk41TEOxvim6M6raOylQaFdHeUz9+J4JSFnmll\nsJCU5ya9T68ix/JkiKvsGB7sRRy5xYw1BpuA5d+dPIte+GhvfvDW8tMQOB57\nMk+nHohDzAPFgsgoUfmF56CtPt4wDkXlZjdKhDoUTsqCDLF34hTCNnHuTq1h\nWWPDTUtioUo0rMdQRr9gqAUYgbYAAma1xJOg+3HGx5ZcTrErQo2COxqdlb3e\nRjvMKjXoUkectf9d6+xSfC5ht33n51FB9XmW8pF46tcRtohpCtVbX29Fub6+\n9bmSwaysbky9Oekqemav1GfbFEESeUTZiVHCDoA6D2SJsb3n4T2KUlANYLv9\nKI9fuo2AZ22fez15Xv2UJkGL5Ziu5ohruU2sD9XRQViHzQewq4yWvO4v5/qV\nh/H0f9dncfhlj28QT47vAAvN9zfeKeR0YbEi4MCvebKI6NlMrl4Vys+npapd\nZq7Hd8tw5C7dMrN66UWSK4k3ZpNGWAHHF4+p76d8nw0/pG3Y4LQYteXoaju7\n18vcjU3TD2NYuwO+eUsgygXnuFW+d7+9RaGDXVEngPAuZVY0JdGQPzRFOIrg\n14yX\r\n=DRH5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8mix/1F4jfPpFo3Sw8+R4Z3CaGx4vDkbX1Z3hk9L3hAiEAyFiN32cBfrQxO+yW8a/lJtvnCTe3LcT5CGlflcRz/JI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.42.1_1595359254602_0.036624261012224046"},"_hasShrinkwrap":false},"1.43.1-next-1595417423-bf3e63a7.0":{"name":"@xdn/core","version":"1.43.1-next-1595417423-bf3e63a7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.1-next-1595417423-bf3e63a7.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-lYiD7vw1LZxfG5iJAQ/182eHXarSq7k0cDqHqGXkNeyEf4Lzq5WhC91+jMc9ST/LhbDdgo5EagS9T8qiOqsV7g==","shasum":"7b165a45bbdfc923fe5f36916af0ebae7c01db29","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.1-next-1595417423-bf3e63a7.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGCR7CRA9TVsSAnZWagAA4woP/3225ADxOvl8NvHst1eo\nZmEfT1XCv+Ez9KdxMecvfdWZgjP5M+8VmMcxYYmuXy++2RnTBDMjJ5hl5a8E\n28db0ErkBdGhhbEx5RwQ5TtDcyqvhhWxfGKsArBRZ9xdnGVOxboEPkCIrBPm\nuCPYpfjWkHyCBX++XYqIrdILQrnlHYs/38h7YUXZ5yu0tLnLrpRov1J/kVSc\n9R+fizwaZXgdivVGnWx2nrIMMMRpWyvLmx67tmZQJ71w4z1yxOifyaE2LgZk\nsMY+k5b8jDKgMvyHPEY+GHL36RzUs7tVbu/neGP0UDELzBr/gg8GNTMDYa4/\n5/p/mzfNaUlGMcsljPZpT6sdrT1PslP1QTonvWUl9pMdUF7+4JwieOAWNPCk\n4kffgIwGewpWun1SGGjbd0gH8xdfDbzzQy24xvF+tm+fPEh2thVOnOFHDABU\nh2d3aRbgRmH87wIRQVbR1oyG5qYkp6JJUA3wDO8B1XOWkIagbx0fUD45Kv0f\nuwua9rSGpHtgWh/6nZnhbRqIY3dRlXPXvtwT7j2igpatwmuIYHHoWJPg69vj\n69UvCByPOgjwG4UWzDuB/ak/vmCj/JzltMp+QoQ4dQ4WQuJAMKpO6lkPqLFi\nLs2eD07WIm1CCKJ5a39qZ9sokTncTYxjlbq389hwdcQ2KKrORwO4hNfNEgIC\noocb\r\n=Mjpb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCP5VkR8uBiIntHVFRuN7qsrWUYVFmlJ8xjeLfSGe/QhAIgSN//tYhyDZJZIHEaQi7ASXHq7FdFshOtYtBHhEgKYTU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.1-next-1595417423-bf3e63a7.0_1595417722784_0.9690778657630814"},"_hasShrinkwrap":false},"1.43.0":{"name":"@xdn/core","version":"1.43.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Yo4VCzqhVYCkutTGc7Alfya4jiNh8OwzLZ1bGx1rAEXLVVvzQQzHo22Vhi4PN40is8IC7bpMcU0qQwZACv2lPQ==","shasum":"ca002e0cff3d689558b87ba256e81d67637c5df3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.0.tgz","fileCount":135,"unpackedSize":574482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGCXOCRA9TVsSAnZWagAAzPYP+wYgz1exrsI9C4WCmd8y\nGY9i3f1ibHRLigUp6VJclE9ULPfJJAP1LlJEf7iKMf203zpXCUomNd2ioH+l\n2F9FP9a4i5MUyktLjBdHx0rLPwJYt9P27Vhon+nwJ2iZ64kTmwHq4iHSGQhQ\ncIveNPtOKsE6A1p4kI4OVHhZPkry+M5I8aWtam3Hop/AnQiouZo6H3md3HOS\nJXENZ7xF11u7WbMzk2D+DsP4jcllgVZ3TrKl5rhofcg6cU/41tUIh9GIpcnO\nawJfiwPJZaLdJ1XwTKrwPwiuof9tX6Ku4YeH+psWC4ukSk4sJwA3onNpi9/p\nmkmlOSRtEEvquNRMo0OwtwKw2w7R+xrHHkv+pcqy2CLiBMY2+PXrJu4SESiG\npra1POZtsYOtOeRQEu5cw7HYJKSqP5KciFVKb1lDQWQRK5Erww5sqmB1TSzL\naFa2bJoM6e5oYpjOq3NKl2D+X9UAg3j9+pyEwJBFWxW7YebP1ITlmvbEN3j9\ncv6DpDmPcFf1Mjuep9qkGhaIxfXWm3YiCFjtlVDz/RaiTLaTTYZJkb45CT9Q\nqyO8iMJcukOE6DoQAlaKcFu7FNA72ILrhAjY3xQ21Jn0ND+xwI0zuGNnsjCF\ngGLLUy6Bs/5yJSDc/3hENEooc0zSuy7HKKwg+mT1I287KO5VVNjJwcAVUyqU\ne6qC\r\n=Grlr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICKGaVHgr8asTZtYNwUS57oo53U044Uf+hirSsOdwWm1AiEA0Pt2pdUt3XYvLKWP3yP3JRRHE5miAe/LYd5A3XwDPno="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.0_1595418062478_0.9501612720047863"},"_hasShrinkwrap":false},"1.43.1-next-1595432835-5e9d44f8.0":{"name":"@xdn/core","version":"1.43.1-next-1595432835-5e9d44f8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.1-next-1595432835-5e9d44f8.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-AdrIxmHWxN9Cxu/fMXTObXKFWfvQOIf4HHPQg+gW/TltsUjKXWmxkDONC52NIMLEdvt+PHM3mVxKEcPO1xfzbQ==","shasum":"be8bcc619d24bce16b1df755bd3db0d0c066bd10","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.1-next-1595432835-5e9d44f8.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGGCaCRA9TVsSAnZWagAAm+MQAJDArD+tlasl2eE/w1cx\nFje4WlYcP0vxCBODogF+RS/wzsVm5UT8sxd6s5ebGnZajspRomGen8nl1JSZ\ncyjRTRCNHLtiPnvcCtravF+ylNGh6KIYh2PmPM6YpWPcm8G4AEKkQnjc3gmA\nKFLf2wxdey6a4y4vP3WPLZ9309WVxkasRrBO4YXd0ARC8PDxbUtVFchZBr1u\n0a11DtZXwlvj6JSN+HSG8UzRGhqekVdF/0bb7lkJYdiPW5M2PsnMzz05VuGo\n0GvMRdtrieeBvAscQ1qBlOCy1vMBbdThITVRZrXR4xxWH3+AXWPug4uifvMS\ncas/eTtX3oNLhQNn1bia3XIHMrwPfBmCqcL0wPx8o7T9/GNYora/aKUaEH3S\ncUi+TaIytyc5gdrtg3Kzrn5zhsI7O+fCv1yX49j/Wey8YFdyXtCnrJeaG6Xs\niHJ91ZeZrmYIib9Aayf5yqY//iw6+OIKZXJNCvURT5o1Um50Ka5LdjCpGRII\n/hpRC1XqM37ejqk4KRPbCYu2fu6XYKCTkxfOGoOKK68PMeCe2H+WYLQFyZwG\n4jKMQf9r5m5cK+5WlWUmE7E1cqHIM7PLCmq8DMzeUvOUqbHLSLjqLomFJet1\nl/GX2T5mqv+lx7NmOiqRFhh8n7/ty0an2yaIC0ZP4unTQwU/oHBg35IEdSfB\nzL33\r\n=dDKn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGzFwZGbSDGa2e2dbrpxywfniyGee83HIuoYsxUOlkEWAiEA1y0oppZ/T5sQZdbm3JFI/scwxixxUUonJRVdszYW24U="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.1-next-1595432835-5e9d44f8.0_1595433114382_0.6140545642207154"},"_hasShrinkwrap":false},"1.43.2-next-1595432988-9577659b.0":{"name":"@xdn/core","version":"1.43.2-next-1595432988-9577659b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.2-next-1595432988-9577659b.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-llkYGzggBMARTIl7orVaZ9oEySNd2dt409OBMl+ZWbd7zxeNT+6Ov1aaeobu/SxU60Bfu37UDTRMSM2zavsx9g==","shasum":"d7d24e01b344cddf58ba1c592f08c499d5fe093b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.2-next-1595432988-9577659b.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGGFJCRA9TVsSAnZWagAAM3IP/iMiNhICDTLF+6He3E1S\nWid71B7q3HNfnCjVgLKUIQopm3IdfAa3YfJhMnLUR+NgCEmoc/9lDENlQbEQ\nWCxqdJ/Ujjy1jHpx0lnMlhmqJ43GVlhi1LyhjVCp3SflKAfDjWlVi32c/+AM\nQ/EqNrOA+VHbc8b/B2FNomqhCOv5aEFYzjIizrFPyAGem3ljQmtK8tR7XAww\nAJfWiUcDgQdir1fgPs6WmdoyqWRpGuA2pu2rxdxut6llbJad5Ua6anLj/7ck\nB8afdFCbNeBRm91oVF3Q+XkRFEOp3SWYghm80ErhllNAJQFzaBZzFZoqFvNx\nZSf3g9tq9zH6sT6ejKhKT1o1ZphK4JFze2FbXpQzH6wBaiSdGBN1Sm55ZEQe\nb4946uYhO4f1Fyn8lVehuYeZ2T1IdSY4XtKHQTO/2msx6IhjBEJC1O9roVCI\nX7WHQy2yxddBDjG/+3mmydljnvndmC6wf8cQVGXjBGN92fniaFT1OkUP7Ntj\nrSEwq5gC8rVOzLhQvZ9zdkeGxpNpcQUWh79wd6a+x7lIFmqez9Aa9SINqGic\nDZFmX7vLJ2F2004OUkeSLkwKvjJR3vBoRZ8YlyQppP/chSPmCyjV/1M+TaUP\n4gY3G+bhiiRQR4pv4tvFm0ew2R/n2MgVU5kz2sUB7/hWYqaGyylw5lyz1hxZ\n2dLT\r\n=wC6a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCG7Qd+q9Lxf6H2hSXNa1VKt17uvMyPVQyiwSApyw+dvQIgBxcXksFuSZLVD0cj7SiDJmuV2XLndOzEzVXc1Or00R8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.2-next-1595432988-9577659b.0_1595433288645_0.3912637113552895"},"_hasShrinkwrap":false},"1.43.4-next-1595436809-1db87882.0":{"name":"@xdn/core","version":"1.43.4-next-1595436809-1db87882.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.4-next-1595436809-1db87882.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-cx1OgJHsUkVwrr7wIsirOw5OlPiuQXWCkUGGoG53JFHJ7m+FyxJhZA+eMVaaayWqk/x9LpymYQ5tmtig0JWChQ==","shasum":"5c608660ef69fa689e5d7519990bd7e58bfd7d14","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.4-next-1595436809-1db87882.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGHAXCRA9TVsSAnZWagAAkg4QAIfC+BP0UEHFRNRxjiiZ\nqf8Co356rfjBSqVHVrdAJIzFkZLqCgCmFVnsmc2y1g9crOYHz3xA509Q6Zi5\naH5Eqh2iqLT+1Onydh0EN1niOpFEAUSIBSKZe2V6sVdQ93sly/GDB+6CRgTa\nSZnDjyggLrDLxlZOSeOBQ4M/hx0T/SO0blN+zddmyWF4FwI/FlX2bafBTvrw\ndQfoIwV7iUPi3RZx80Yg4r0s1oxu0c8npd6RlJinpxzmuOW25amRVK3Br33I\ntq+wnhitHHwU4T0egfAOzTcdle9Ptz9TF9nmaCkzT8tJ5I2RvNVMTV90ReGX\nlTMVvGJ/09mVRbzymQtYr0zkk0b8+YBlRLmHaCZf5R8YGQV9S5pAtopcrixj\n3WDbtUyBIdfZ8m7uitQgzyFExCEEk/TsIVQcgchi/cvDi69YbBT/ALCI5PdA\nf6dUNAOidvK1DnsMqCa3Vs1llN5exGnEoyve8Rsar1Ky//Ot2LZ7JIhIiOhP\n2vJywWSvRN92+w10jVkDqcHRfakpZfYALClphYVEXEt35Mgwc1hlyIvp7kRM\naDv2j6qb3Xkz59esJUGhyY45I8u0fZmL9b9Vuu4koYgHWoeV7N3HuQ/I762N\nMGUPnUaVQR8UdM2dtlUirNz0B8E8abxlO+jrVRvvi7CM5kxabwAHtZ1VKpX7\nIp8C\r\n=OpBL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGp2LnD7s7mfeenJvKWFSmWQOwCavV9iZj56noAQHsAyAiBA81nD+hliTw4wuUXAUw3/hipswiyhS0sTnfYHL27WeQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.4-next-1595436809-1db87882.0_1595437078917_0.5337844611669107"},"_hasShrinkwrap":false},"1.43.3":{"name":"@xdn/core","version":"1.43.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.3","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-SVUU7e0/Vc1Ju9DAiakDWWqC0uvuyosZCci9BuKQFHqRdNLQO2xpB/Ikz9zn+abDKcNZXQihYCrrVBvUskzt8Q==","shasum":"4c753b8bdd1556aab08da65f148e0fd99721365e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.3.tgz","fileCount":135,"unpackedSize":574482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGHRFCRA9TVsSAnZWagAARigQAIdoqvF/UTcLcV9FZGSU\nKYEa6A0CPE/X8Ym1yKOqVouEryZmHJVfSZv3Fe7Dm1Y0FEpk38hTu0OfRJ+3\nQVXMxNfGZN3yGibzoiSmhSc6MeqFuuebVg6vNnQ/lrjSS3K6NnJsQR1OKv3g\nIlfvpOOYy73UqOxppzndeicCaSWdGBWla5dInRpPd2xmc6e1k3EfHKducP+v\nfcVhJ8QfrWw/9jpKijhK8qsge9kKiFuXKwL2g7qhZVa0H6UZ11QREdTNGCmK\nTIlzwXNHvxfK/eYQv1iFb22p23Ao/6/sPzF3oIWqpXA2Zx+yEDCPLAtMZsJz\nsEDMz6RG9e5XA8yPWluutQW96Yjr/1Hihy9PRbAm4E45+f6He1beZWItumZO\n9n0i8tCubPriqSvYgAb9P9vOeKVWKbB/udQUZdh4RO0YeCUfz/vPE/tZmS7I\nxVS2s0vseCy8TNAY5Xussq2shh6K5TtOHL1vjBMcYV7TEuCZqAvQtqoJgC61\nWvyerNkhEBCLgSOJQrlIM1bcElN1AE2xXFMwjQzTGvNNz/rg5vbvfMJX1tzb\nAS8Ojt1oFY+K8f6oswfFalfxA2mf196//CxhrFlSMb7WoRRsdaz859L4h/e0\nvv0+VkqBsJC3POH80agk0l+pz0NMcLQ6RT/u1BYONlbRlePMg8xH0mNLI9Eg\nvbOd\r\n=M6K4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNJc3JCHNgWe8AI7BM0M4E3XXSkQvatfBprxF0XE/DlwIgaj/UpOMg5F/bNnVWKtGBijmBdVSV9IOjBD9yKg9LIVw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.3_1595438148643_0.04865252331247061"},"_hasShrinkwrap":false},"2.0.0-alpha.7":{"name":"@xdn/core","version":"2.0.0-alpha.7","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@2.0.0-alpha.7","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-fKsv4os3ByQZqgnB4wIqtS9r36NwlB61Y3sKFHSWLfViQTanzkF+h3WioMD7kkKHXm0ozmbJParQQOk4sQtkRw==","shasum":"74f4c8913c6e001dc6ab45f402147a9a094c5d0e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.0-alpha.7.tgz","fileCount":133,"unpackedSize":574855,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGV6/CRA9TVsSAnZWagAA1bwP/2UUZj9KHJKBpdp3GAgV\ndADSLXcd7UkeL2/WKkmFtn0BHK0DQyf4fCHIqrgM26oFx3YkaXJ/4wx6tAfQ\nd0sW3l/GiTPXNFSHdxq7xtll3wF2LuDFFTS9B6bR0FOq4ZRjTitO+hp+i3aM\ne9+OFSmSiY+E3F0Q8kCSLioA5QF5y2XseAhRgolacfbgw7QhS7ou3u8IYxw+\nWXknUsOmJmjkkGkniuYLo7uu2kwKRYimKQ08obecutNmJZX1jFs+qhxkPYXh\nng+Dl7l6WRFTp6EiXiXDybJCH9uiMLPNzbnskCNHjVz0OnFwYR+SWDCIXNeX\nnicPtepK96wUY/SOG5AX2hvZXsjs03ecUCGwQcqSOqlzlPCBVEYvBMUJ69JL\n9DkMs21AhUuPgPLdMN8ohrfg2D1nFqjHpPxEZOqOo51BvUJTiQs1pMmcMKiB\npSlWM/eKghUFSSMAUmVajuKKW+NVyearU4VdxGY1BvVRLiFUpk9jzxBff6zf\n5wuqhvq+xUOW3lrwvhKWVxTjPXtpWNT3aORxSQyZ7mG+qyVNbjl3pBBBzMVU\nhIJwsl/8rOTDaQTEKqrzmqO3u1ipsPITid5rlv11OLIdF68zzG503mGnJtLj\nAUalAs3sfCtgv+LXE/c5VW4mff/6HUPioKSuHkXyjF33lS8EmgdnEEP3zriK\nN/40\r\n=4kWT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBLKrz13f819W/IYlSshIqMuWpdMbfy4iPKzv0uFrdZbAiA7z2xISSGv8Fe5OVUXY6LDEz0WrxiowrLQLhrgmXuQdw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.0-alpha.7_1595498174853_0.9338845139726262"},"_hasShrinkwrap":false},"1.43.4-next-1595552590-48ce13aa.0":{"name":"@xdn/core","version":"1.43.4-next-1595552590-48ce13aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.4-next-1595552590-48ce13aa.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ZdAhzohIFUlCN5SiAoei4P/WPRdnufSdNzPrBZXOtilkiivwRjiIoL57Enm6lYGB4ErO9blaJrjKkUwUWUnHPQ==","shasum":"80af89cfbf66e31a60ad08643ee7999583315b55","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.4-next-1595552590-48ce13aa.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGjRWCRA9TVsSAnZWagAAvH0P/ij85Gkn2PofHF5Gnli5\nibmM3QP1W9a/VGAekWKCcDntPq/qotvgk77wxUOQuZScLSDwUIVLM0yFPKuB\nLfPm9LwKE5GbvYx57PV61a2Ko5VXZj47dmBWJ21JlzkaGu+6HD2pjJuvEKu2\nz1x6WyLNO1GuHVC4h4rP7W4OgCWfTR8Fe3dZFYsL9MeCMY3bm43JCuYmHbmU\n5g2mC0rsqZOgvy1/LoKgiN4qqpYNbh3ylt/T0Mr44jcEeU6lMLMeWbbh4a5K\nivbFy1b1WSyJduGRGPPeFvrpFyeEUtM+EDsLyr2DYJjhUedrCn/47YwwCEs/\nfIO8KHuFE/7tuWx8JaCE0NukajK0UXg0PmwORWeiFlD/bpECrlbOKDGX+GhL\nNzALWbz45t3dlP3Gx6GpsL+YJAtp1m+31CW/caMV62mpO52Ty78rEeY+NbEe\nlb2NvrUmKRH6TD6bu8t5W9rHo/TwQH1xrQ731tFKZ87Dvz5KZuYo1WECD7ZM\nQnkLoaO5gEG5VTe/44SIKv6GymGLFbVdFW7NVD9b1VpvBKSE58nlLuHTF5j6\n0gP2dpy3HpOxBRGO6X6qieAxHnOYv/dH8XBgD4OVKIpRsrCk08vAjS/PZ1xN\nQNhhyHDuX1ztf5Mu2ODQTI/EW7f6U+cgLB6RblFd+Liz1YO2fsm/3ZBDhgNC\nC+BT\r\n=KaiZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkVRJCaIjcZjZm3/ST3t64aZ2iqTQK21nIgjbsK4ChWQIgcTjPvXUfzicGyplL9OtxBF23ZZeCi6YJdo6xp1uMfuw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.4-next-1595552590-48ce13aa.0_1595552854348_0.8258351465295473"},"_hasShrinkwrap":false},"1.43.4-next-1595553515-81b33b65.0":{"name":"@xdn/core","version":"1.43.4-next-1595553515-81b33b65.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.4-next-1595553515-81b33b65.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Wc8GG13Ab3u9y/Z+vpOujK5l9NV5p8K4Vjthc7CQ63ejCYId6xssKHuPKcD3xvZl2AwZ0Wl4mU0u5nWPjbO0Gw==","shasum":"9d22d0c9649ae52a6e53d951d90defdc817024ed","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.4-next-1595553515-81b33b65.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGjgBCRA9TVsSAnZWagAACFcP/1pmHg/268jTfb3/O8I8\n3hr32DOh1dbi1KG7GLWT08YAaOlruZ7nI+hEE4PXrH5J229E/BW7gAu9DC55\ni2CNknB5V4/Vg6jqvp2IXBZtHa92P875ZW5sE/ru9fAAEOlA7D4CuSm3Qgeo\n5jxrLIIfJmmh/P3koO5v5GxGGldJUHv8S6YBURXvfeppXKYjj0haPgqk0G6A\nAMc1cAEK30BZIRXOD+Gj9vKK1l2X4o8qVtefI2IvGIZiv0JLqMP5Htwz7kcK\nPWlCJZ8MrW73zORw/N760SQ1jzY+7N1bx7n0o4ZIe9B3k4ghGzPqd01PrKzX\nhI0zTCzZ4CAYNzWzttXudzZlsZftY7mPZyUbRSexiG3i27mjEs0OjpP4d4/4\nmxTCWk44q8cKNHgP3KhBzp87zLKDs7rcOhN3M6Qhjgz64i1HQwIZeQgbBjZa\nmYdlzp906XAYIwPAVo/gPgBtp+KrvcUtzIANc255gx0Gzx/oj9QvUIsvRwvv\nc09LDmZFfi9MSNdge5WSQ8n3InjX1G+m5ruPbB6oPsGsAf/h9nMXZCJZQx7n\nLXi3LlkfJuKBViGuq8WxvdUCpv0Cd0rBc3pfSs3EbBgzg33VnbyxaSnxrTr9\nE24/8sn/JEmdMKLYHyD44ZAXb14dD7fspt/F0fH0GXoQaXPoXzQ1OOYfHHtV\nuexN\r\n=4ioN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTCyZ3aD+e3y/ghnT+xLcLm886Wp61OxA6LvxNtYs9FAIgVQog9MjEz/QAJp/uHgz8X27e6Zr/au9tx+B3/McVL6s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.4-next-1595553515-81b33b65.0_1595553792919_0.8098952210551742"},"_hasShrinkwrap":false},"1.43.5-next-1595554793-085b61e6.0":{"name":"@xdn/core","version":"1.43.5-next-1595554793-085b61e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.5-next-1595554793-085b61e6.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-wd7y78sBmc/OkTV2WDaEk16qjkd4eccupPAOm6oVEgP/Om7lDiJu0kTFmn5or0KtHFiyWddinh1z7zoIvKMuag==","shasum":"3d7cce1cdb4632eb6852e86f5961954cc3c66823","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.5-next-1595554793-085b61e6.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGjzvCRA9TVsSAnZWagAAXxEP/jrgqm311lHwP6CY7OfD\nGMUUEDTHoZMvPmTVT100+wEKkDCVxus2jMBJkkcgliPr+2d6D2+UKpUod3QK\nxdZpXcBDAYkiQ42CHOlA4DSQ8xhCeI0vpayueV3p4g9eRP/45LgXQEnB0Zr+\nB7plgW8gC55zyUYGRphHAf9qqmbNSz6bYgv/sOByQPmU2NcZ809UeFTSA1fd\npA4brIDWBpWNgvMHyNAjjRGSYe19KP+kjtAjcS1H6cq5FJCxEflBN3hC0aC2\ne7nfll85SLl5DA6bawoSpLJ0swQzBOHC5h2ZylRhzKGUo4GnPrxufWAc2MLb\nSlgk5FdikpBoPKPvo5Dtl5M77co5lZunGIdFGHl/ddrXfmdoEbatjbuyZKNQ\nYL5qk48u9TW7ShXCLpjKwbvqKG45s2EIAm+Xnnnt7C1A/gg65kR4UGZi7AVG\n7H8RYZ4Sp1DWPMt6u1p8Uvj19k9M/77figmKJ3FZ0DtHJPyiRxqkgjVzmpbS\nj46CzoGOTW2wdev1MX+GLam+X+hwiN8sE/qVQPZYEVYFIZSgE6wDiZ5Cz/bb\nnlA0GKZFuPI0nQP6ZHredoiXYTFscQEMnULHbUU9d54pQPl0xufAqp5aFSpl\njLdq1CTU8cdEEY5J46yf5gA7jgMhnEAhjG8PsWIXsyll4Fz6k4B+ZofeY72q\nVHQM\r\n=PFLO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAFt9cYCQr+uXM13/Sbt5g4sxS5r0vA0gpP77663OhcrAiAwBce+phy5jHsGVBsC+o1a0g0wnu/7uPx1uLvt1jM0NA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.5-next-1595554793-085b61e6.0_1595555054972_0.22266823205947883"},"_hasShrinkwrap":false},"1.43.4":{"name":"@xdn/core","version":"1.43.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.4","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-B0ApKleNgdcg504Sv5dBgIafDZoPkyYU03kRZ1AcWNABmD7smjBzvojvWELwTgtvj6AqrMKwglpGChXhHlDzxg==","shasum":"d7206e29f18ae99491afa5f442b26919743977c2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.4.tgz","fileCount":135,"unpackedSize":574482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGj6uCRA9TVsSAnZWagAA4wQP/0nZR6my89Kp60CJ1kxl\nk/PR5hhR/9Bba+SY4Hs+oDqnzXes83IyTyiWpk2twIyy0G5vkA/okWklP5r5\nGnccpadTvO+saqKC10y6W/oiA+apQAFhlYodnDDD4WGmOwS+TJtk6/p3ZF+6\nFFv1TDIA97wwQoLSPJTrjsknS/Mi5SYm2wLYx7ziD2LR9uhgEC0O9i9ZciFf\nISZZwy1KtzWj1Uld8voMGvQeJl0ZEofpunV5Du8MdzVNSJI7mrYQQ3k42SH0\ndBN3jEWkdaWrRQSoXRAET2TCfz4nzxbK08yuAevJ1WJK2DD4+Xy0tD9Iy5Op\ntLg0ekthMCIWlU5QemdM1tF+sT2ag/Xj8hUZrPWDeFVcvn2Q5Mav0I0ZJDWk\nnQd64W0sZdF+5k6S0NoraReuxMSOeXzRWjl51xqc0pfxOmkpbb683xv50S0a\nrrv7jeVIVnqxv1HghuiCV6mVddG++Mb7A3cV3MQohhO5NIVOFDy8uW3yR0XU\nEQO+EhEVsl4dCv8NpNO6bxFAFMVJR0LUx8J2urZwECiP8DdiOkiC7qcHPMiJ\n/blUjb8O1zfzA4BTahU+TWRo/CiZDVec5OGVaWmwQMB/V6ZixEL/WVHTtwTa\nl+OQT3RdSHigh+5M/sJ6SceuBAzwP6u8Ns3rYYzkaB1Lrv8MOg70gC6GM2VI\ngo0O\r\n=i4XW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCr3fPgJsz5aAP5VO/gCE64HLwwaggv8fugtZPVxQv7xAIfZlV4nsKwmrLl/EAMSZhL/PgdgszScxhTL4jtSPZgBA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.4_1595555502236_0.9074596167394924"},"_hasShrinkwrap":false},"1.43.6-next-1595609316-2326a724.0":{"name":"@xdn/core","version":"1.43.6-next-1595609316-2326a724.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.6-next-1595609316-2326a724.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-RY0jOezt15hpOk1cFWRmCYcUNnRWVIuia6bGRSHB5UDxpnAeSebRwRC7oenjO4gam/fXPO885oL8n7XgNI7Hmw==","shasum":"8d1d6de8fa639f3beadc792b17b111eb6c0d3984","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.6-next-1595609316-2326a724.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGxHsCRA9TVsSAnZWagAAjpUP/R8x4j/zHG9814YRt7V3\nD2Z+89hLmb16wvYyQwvtz2MGzsgOPwPld41YQJbSERU5MohSq44/a6ldHGu9\n1Pd8Mdc4G1p1dVNCWIoel8fsbn2scTqW0FI2i0hbvZ9e2FoJsIQsMH+OqQtj\nTv2I7YPeYMCM9x4SL7bWrXqvK7eajZkg3PBn5CxhlhEhEBAqvIgIUMMHwYJf\ntc58NtWewNRPwdEYzRgXig3mJN7b9RXoXxjVThrS16YZlBtMvEr0UPzU+F5g\nYMJD9YvSMc8PJVkIs1/OVWPzNf+rmlnxLiQzmamc+Lyn51ZnxoKU/x5e4/OV\nP1CRYqPvYG5c8lW+bQP1so+xJaEsbfdnXOVv0XNH7Ndjq4Kmwvg05lhY5htY\nDDBvCEnqutTQ6xDzlz9x3rSXMxE40DcD48gJzCvfb3kf/ZCjpCzy/lu0LF/6\n9jmdx2OHmAt8svgAl09FOd6NGK4ASpsonVfoL0g8OYb1FVfdIxNf0KNDeF5g\n5p4jzGTz3WHsMjbAznYObctjsyn1QoOrDSk6bVJDDZ6Sb0uz1tk180F+PKdk\nA8cOkU38XL1KotmyPBawL+almNg30unhe0m6y4kcw1oRbmYYK07/nltqrjLI\ngG6iXyEeMAQ5o5pTNz8wqojKvvOACm3y2McNjy2Yimvk2UyQhhOPiZ4+sxCt\npcNY\r\n=+rmf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTLZvqk3Qeu6/S8lG34OHz7OvgJRyswLUMGay2WUOtDAIhANzn190uzE/2qtblX/11jdrERjC7tMl5FeMWPf7/wnlO"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.6-next-1595609316-2326a724.0_1595609579965_0.7678232880616267"},"_hasShrinkwrap":false},"1.43.5":{"name":"@xdn/core","version":"1.43.5","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.5","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-QlbTNosRzCdSugqEInlaDCBk3DWJa1lbpohZ/6YGhphg0iLI+eR6iDgRqVfbg+S3SpoqVDro5cx1wdcb57fjEA==","shasum":"9bdb8792563127ff1c2c63d5a7034d54e9b5be49","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.5.tgz","fileCount":135,"unpackedSize":574482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGxJXCRA9TVsSAnZWagAAAuwP/0GsEClawHXYBNvM1dTa\n3Lxj689IUNTmwfRPmgxbIpRGZDJjqHovPeVDY492+rsBVXKHOuTTmZ4u6UBr\nKIXwoNGFFU+Sjj7jhKZ6XWZGum0dEF2s7YGdViDVhmCHSVZ7I33zudPc3v9i\nYzuPX00oYkja/iW/Y4Lg1Y5IJd/qbX93enDVady/OrcFiMO8xS68/a459UtR\nIvumBCsJo7kkXFet9y7oyQSkbOuh3ozMsIskJOPRbwwBwy51btmxRm763dhr\naVcUivGdbQxu0R1T4mbsV9CVycOhA9qIN1QUScZnBwdY2/makzYLx2yPto2e\ngyjAToZ/HnfaxGUGI7FisM8iaU2GNVbqqzMZiN45Fu8Hqz8zPv3DS/4njAH9\nl7P+K1D/m4k/GOswRF3doL3hhH95lyAitIpHUByUkGtr9CmN+Q89R9n7ZUKQ\noGm5ytbS9SWzKIaOL4HeE6d6zuDTRU/rU18cKU4ZvAh0eYY7urgz1zyfqt7X\nKhYULbWfjC+7fAObLQmsWlN0N255kL41nmexi+VyFChw6hds9VVtrhH3WYIT\ncNO4JROb9XY2HCTd70X6HJN6zcrO6vNybtAIG4RlAi+B0sObR0LDKQnjoawg\n9ZsmwFhP2CLrwYzKKCGBgCwmEGz3fPLshsCcQBDS+E3lnP/7WjTGVYpaWwyG\nsf4G\r\n=HhSZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDKyKAPavqkCb/APyc6T7IqULgPO6vjt8dylFAHidcGOAiEA4e2JW4vf9H9yB8UaMTJ836O+EAaNL8brS7EuDzSrMi4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.5_1595609686974_0.9159408264255691"},"_hasShrinkwrap":false},"1.43.5-next-1595612787-b88d515f.0":{"name":"@xdn/core","version":"1.43.5-next-1595612787-b88d515f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.5-next-1595612787-b88d515f.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-7o6DJvZWhWUAuGmoZEc8RoQgOO7kEAywkBGuvXe3f4WlHC6nKGPGo6AIQi6bnUtKno1NyjsvHFlFp9CLis4SFA==","shasum":"22c1396e31834a7686c20f34afcc973a36946538","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.5-next-1595612787-b88d515f.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGx+JCRA9TVsSAnZWagAAubkP/0Rq4x8dndRmub2D0JH8\nnE7oB5a4lEf8Taw2DkOdzrU5I6ET795raI065ZEra/DFUARTHbA00+KTwxWG\n9c85WXLyV8byT5YpoFsb+STnOCwaJimP77EAnhS42EXX7gO/Kww2s7jD+dIH\nfRWPlo8zufTQO4hdjJ5JTfkFHOAC03Y3LQcQFaa3mjSTbjPv2Z10VYFwbzkv\nPHk3LwU6GKOvFErjk+Q3tbkD4PNkW5IFJrzamcLOWR4Ki2FrcPeXgjpFkCnL\nJQAryHnTKpTvCg36VpG7u7YahtHB1rG8eW+3CCWPGRlkGc3Ui201KvxCM7NB\nX37m/AmslNM/hOi5iatRIsp7N/Q9PASgK5WYhePJcY0WUr1IfWxteL/W8Fa0\nvr6EJj5KipdMZCJVONBeaG8AknSUdR/FrXSiiyyuGYaVv31HtzVUpYQK9SAD\nxHI3JcD1NkMD6aLlffUaUzvtneSs8SJdjAOWdJu29Z9xcrrZMcZYHqBJQTAs\n00YWD75JDzcHwb/wlEvCRmrieDL8HjHC7Fn3N7FuCSaLZK6Vig16eHuSyosU\nrqCyZIkpaCsIDgLR1pRsXAGo03pV0ch+N2iWNg+aiZVRApjeSYjmz2vtxTQv\nXF4bbDIQomG8b3IpOzMLbQqMz0y6HlPO9p0DIv1Ac/DV+lM38VwB6MN+cks7\n1uxo\r\n=yH0x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChQ1zS3yBCfLgoCM67ioa9PSaOliT6rttdFzdGrKCiHgIhAIXpQz6r3KzTVD5utOm+wm+JWAPb1/PV+hOYB9UCvQCn"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.5-next-1595612787-b88d515f.0_1595613064811_0.35086788308055206"},"_hasShrinkwrap":false},"1.43.6-next-1595720614-cacc6182.0":{"name":"@xdn/core","version":"1.43.6-next-1595720614-cacc6182.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.6-next-1595720614-cacc6182.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Dlnl+LzS9/bQlSW9EMsje6Pnj/RC2jxi03E3qcYg2mT3Y79N8CPwKrves44UingaakQOXuyfqBuvV5yxcOjs5g==","shasum":"1e7fb321b701b6cae292dedc6b822e580edfcc7c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.6-next-1595720614-cacc6182.0.tgz","fileCount":135,"unpackedSize":574722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHMS2CRA9TVsSAnZWagAAwH8P/i/sk1CvSrG+Y744ZmpK\nAWqD7ZbN3XT4wN0betXs7O2GJd3lQSpEW8HnTsiivDl+sEda2z2MOJjUcA9g\nWSk18L8F2lKBIcF9F34C8BZTWU050E/OPD9zNHe+oP8h6TrgTE1h6LbLb+GB\n+6Zgb5vLi0rMfqCH+nam6J35uT94ysoKCJ629tWj5znQozOA3pJW3y6T5a0/\nKMRdYkghAgQYNiHkLeEzuCVEzM+wswfVZY9xbXdRJfPIwrY5fGlG/mCoEdqD\n0/WgzMkI7HQH/R5BR+Hcgz0pTpb8bqfIR0NePXP4Adyn0WmE4koboznd2GB/\nlhEA7R/C6nbLZrPl2gKN1OdQcaXo0zF/Tw8SDcY0CGMZbRv8rjloNHqnwX0I\nbxvoohctxRpTDiOpOgm73cwZRH04qNPmddoPs1MTIpBAMC3LB/LSkjtLC11r\nGFJg67VOWkB0kmmKKweWHUpRgKkJ+SwgF1iLpK3jNmU0ELeUMHWygDY0VOqi\n9w7jSrgBnsQyp8w1ek2AHTflm0WD1V9vq8uHtjrCkLRqnC/2o4TWib2LlzSO\nb8I73o6+soY6Ylhjnr0BFPR23tYOwRMIBEoq6xx2ySqI0JaFa70aVvbqIo49\nMywMmyEoeqk1CNmfLhUiGH3x7zL28NtIo9hV0aaDYTB9POPc+bFt7tXAFy6L\nPoPH\r\n=0V/0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaIWcFTnHTWp8QnT64xwjntX0hwEGNUmenuDkUOUOLCAIgb5Tm/IfNyvtMGNInx3nZLz7CCx0hpHBgKKLboaEXcEY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.6-next-1595720614-cacc6182.0_1595720885616_0.6778768158449611"},"_hasShrinkwrap":false},"1.43.5-next-1595725185-860ebcb0.0":{"name":"@xdn/core","version":"1.43.5-next-1595725185-860ebcb0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.5-next-1595725185-860ebcb0.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-4QrJBeYNu8GVjsKdlyybfe4hF8KAghz2SLM0KXULzpk7x9iY9bKfzfyJcIAllSsiwrFP2P2/+nCVIsf3GXfAvw==","shasum":"7b7618fb05843f8ce1e81eb66ebf39e3211959a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.5-next-1595725185-860ebcb0.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHNaDCRA9TVsSAnZWagAAgJMP/j+Kfz826tS05p/5yCqv\nOChgHh0k/NyiBQAo/mgjEqPXqWmdLjvkYglyHW5Oz33pVqBl+4R53eQyAyyQ\neiChlIahgT8D4nU3lI6espGwaP/QzCSyKDpFUh9MrOD7790/owjMdQAHffYH\nXCYqvpgL94fi+TuKdZFZlvxvhrFkPw228XPxmxyL2naru9NKljTrgBEUPHxf\ntcaXAGRb5iyicMck092KUegHgHhwjBP/L2HkxsRAOrfXh/ZrQJ8Svz8s2OKJ\nI60YB0CfyZW5PJhxdSFy8TvP4DgYoA+9yu88BlBE7PGFnF+ueFm6qcLTXM0w\n2+jjGFL9f+j5zUiAAxtzf6ztFebnnFV7wkF6O0iqokwv5arOfUTokTiXGbPp\nOm6MiMdNXdVKlwyuUQ4+eS44mKHkHcssIldwWQu7YbKmYkkJ8T6lWfRFB9iE\nfvvX9AERmm8qxp9XHITxhuDtTYWCsovENkSisMupeAfMgMy/92It505XWoXv\nhIxTyXAcKlGwt1hcKLgPjsJ9NBGFgpI0J+gk1umeMjBQBpjSyEYwgrlUDQnW\n4ZnXj39bo2aVzH2+bUTIOAj7wbh2OGnnscBBs0GNg66QdAsePaL1ILWHyMSy\nUeGnI23dqBKnKP7xtPoXGdqjlzM1bSlTIdDjiw05xJwZNQaYxSczFaUKxW2e\nGx2F\r\n=WHnC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICaCTc3O+6Be+NzETruCKsGU0RS5KLU+Igbzb25Vfz8jAiAlzB+5az86oxXAmoumAWln5X1HM488WBEj/voCOjwkCA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.5-next-1595725185-860ebcb0.0_1595725443014_0.9917871551013759"},"_hasShrinkwrap":false},"1.43.5-next-1595726573-6ab7a20c.0":{"name":"@xdn/core","version":"1.43.5-next-1595726573-6ab7a20c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.5-next-1595726573-6ab7a20c.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-juX+0GTw3KGtRG7vRkg3zlc07/A/fZrXKMUrdUIcmFIYQb4KNS2YeU4nFqj60iteCCPWZwOsvhrsCI/2KqdbEw==","shasum":"7e02ab6edb89c366e727f48f272dac603d5af849","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.5-next-1595726573-6ab7a20c.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHNvoCRA9TVsSAnZWagAAq8IQAJy6E3C2LtgGK8OY5b+m\nhfVa/VdumYqGR/W8L6bj44haWSXrKWLhmYwdRJT+6Js2eL+mJWvMUYmU2I8x\n9fUt+X92KV4dK7khH0+rem4R9JOjE/10fUpFO6XF2x1YMQxNvj3g/euP/0qC\n14yjz9Gs/304PT9vNTm3YfPc7x96xj5FpdYxh8N6fe+TjsfBJ0OZKF9qhT3A\n17spJZpoDulbbSVm87gpvH+Dn08d7x09RydLjNJzyGUAXmQgWH1Kscd0y3I8\n2HkFYaNRxQ5a2rtThaDWC4GeFcscw74tXyk3Afz6RqCr5ai1hZKXMKwhotBy\na6XYrS4/yl+2Wn3UpiLnblLHqL6ry3O2wDxPIgu4ekU0TYb77lKvmapX8hKi\nosKvvbO+GSWS+e7XrWJk4eAotbwfzKDsm5AkAstCg6wbhrwL3YsauUijnyXC\naoyJLpnWMQH/icHVU+QbGUHd1zp//tFEsPcgK+MY0ChJM4lg0rb5Ta9xfFrp\nNyyzAOLe/i8vmbyVwCZCB9TpqYmXUgehNWNnK9TljgVNTsV7j3FY7sliluxB\nq9UDOvq7X3mWVfBZmgHciST0+Z485DyACEKzL6J9aLNiCX4pOVrK0gnQ2Hhh\n6C4ev4hWHC6w5R3L3en23hPx7z0wSbC0yiC5rZqSNz+gdyYQKJ+ZvgHKnmfu\nOuT9\r\n=9h06\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2hxpL6UkJokgoSS4uXsKHy0aL10Se0AxA+Fzz5UpRTwIgNvo9INOi7f9/7QkbQwd1+9tkovScmClf+y4+yFJYi84="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.5-next-1595726573-6ab7a20c.0_1595726823983_0.7074293802828473"},"_hasShrinkwrap":false},"1.43.6-next-1595848332-32fad928.0":{"name":"@xdn/core","version":"1.43.6-next-1595848332-32fad928.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.6-next-1595848332-32fad928.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-u5DrcA0FHG8GnzdPMM5Kmq18DUWWec7C4rBg/TXF8+UphHW3lEBvT2q8eDPac3GL9Kt+9MnKF4lXLRAFLmFFCA==","shasum":"43a5fab59bc644a9c7d3cd3985912e17390e530b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.6-next-1595848332-32fad928.0.tgz","fileCount":135,"unpackedSize":574722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHredCRA9TVsSAnZWagAAaKoP/jmAEto3EHaPCE9pluCM\nSIcDhuVNn3tPUzIS+CK44i80+ILwYsV3cEwB/uIw+xLXMq8t0XQgeNQ34nx8\nWRPjo+XZVcPMmLxr3IelektKzPLsrMrxbybDVxBEfDMZX+E5+cegnVYlawYJ\ngINy/KSirHHIy/3ZlrifX84m+v28R5MBQz5/bBFXqSOp2UPv3rs+palzVGO5\nE7fS47gdvvNBqSj2JNzYaOoa06XUveoaEvMLhAj49Rxzoveq1BKW5buFX2xo\n7YH+Rw7BCyjuY3IHM8d3vbCHiwcJ+XpR11VRtVAi/q4Gei4dwdg1aqEbhVak\nqchp51sSSmVrRqCth24pPIieZFwmP16ZidDibkJgA/qVlZp0FxrOehqTGM1e\n32XsHQjuqkx9plGcAGU8YN8XHv0fdKEaXan5bF1eLlY+TkWAeBMKd7Qej1b1\nnfbXYSunbEX0v1hz/EDtaN6dEjZNrdmgOpDo7LjfG8AkeAIGf2Ns9/fXkHbh\nZL5L8R7ag2fvlmDaO/hZSPvtE9+KGEnY3a9vl0eGHrvLx9AmuAO2ynyeVdpI\nnS6YgwbJWL8N0VonjOFEKG1/8JsxCThv4N4EC6s7nh1VOb1WJbTjoJ2ICycf\nB3hUMx8n1XHe0D5RAS2G323UGbKqcjYATXuQ/3AIdEi9XkOSlCJMh34ExNrB\nGUoU\r\n=ZQ4r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBYzEhpUwX1DSwD92ltgtF0rOtI01B9Cn4gBiIGkCeiAIhALySz5jFj/tOBGvxSWRUQdK1ksw8g11Fqe/rOOMsTGVw"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.6-next-1595848332-32fad928.0_1595848604641_0.8638976045035014"},"_hasShrinkwrap":false},"1.43.7-next-1595848459-adcfd257.0":{"name":"@xdn/core","version":"1.43.7-next-1595848459-adcfd257.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1595848459-adcfd257.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-YxqwUTeiJplVp6wFA6aERWg65buwkhRolxqo0Z+SUJQrAGkOpQMBGjg2z7R5fff+Mi49+TdhiAUpD89X4+aqzw==","shasum":"58af394a792e3d060bc0cb474f7ec9366afe8d32","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1595848459-adcfd257.0.tgz","fileCount":135,"unpackedSize":574722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHrggCRA9TVsSAnZWagAACZ4P/31pi1rmNoLXwvQfNNDp\n59Yg7D1jKwfTS/4vMUsZcMITVt+ov0h20SVrnya0PMhZiWyhRUQ1CTq05JfV\nJ0OkbbV6WcMM1HkGFd/utsmZJlRChyQhvK8p+8aL3wzIpNFRo5QkStEip0wM\n7WfjSCfmckTp3ucY+QmfCrhnxsZS5u8NryPyZsYRTTRV+TfeYzrCsq8sMdLU\nqc/g6G1ipVAWkxfKnsR0H/z0yVLMpU1xWSvootsUVxKb1gvnS8GtI1c48Uhl\njdgGnnVKC4bUnLfa653VRxJb8PuFq1OsDrKGBGBavITpbJkj66JFwB3YC/zB\nO4AfM6/zsQ80uetZG+NxfXasbinT75MzUUrma1mEB0pVdjyrbyVTaV6hOsA6\nXf/q9jOLfnSwjEhvG1qGk5Na72Tri02HVuxZKRZAWbRBNN8vXKlbivfhVwPV\n46nLPO8weXbal26iyV70a7bSxhQ5NrXiihvlNhWkvhTuACm0uD2bmSxpDkSa\nJVWalDKw2Hh/MlGFl5dUoeFKeWLdDQSvpadX5wE3kLavV+jo/jfRAC2cQP3w\nrPKrdHHsp5zchY5/RrOSzw4vO5lWTOZdhY3Y4ycejFJio5Mi3MvqTXhiW1X9\ncToeLl6xHSNCOSEX7lrobccubHHEdvyok96sg/UT2eIuB44Gsl4PYA7dncBj\nLVbu\r\n=BPvF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIARHgSbrBtPpDZ2BMlRX7V5giGynZA2xk8ymDSTWbRKtAiB4q+/hLLznqzA/9FYkWfZKm+oqoRR3SUfWmNHm9pTwCA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1595848459-adcfd257.0_1595848736457_0.2629099614342041"},"_hasShrinkwrap":false},"1.43.6":{"name":"@xdn/core","version":"1.43.6","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.6","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-lRztpja6eUBTSGeHx1O9px/u0kK29tjrvRDI1UoU2+PlJ2alXqGg1E6l9CydisfI9qFznW6WbuIESCEZw+sB+A==","shasum":"add988f874e922bdd8c66e2a7473c461e9277fbd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.6.tgz","fileCount":135,"unpackedSize":574668,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHrm4CRA9TVsSAnZWagAAHqAP/3efW+quGBbCR6mRBC30\nBuXx10bBDLAAthRFCM04678s2FVljzQzBl8MU02XKjHxPo6bB9RCMAZMvWBY\nkpp+SqfGvAJZxoQTbT35HyS9EeUiczxQQhu3VZdSxFCgjo2VrpVARWmlALp8\nfA54T9c1/8aJbzGv4tfBDHZ/L31womYXyfQ9FHud6uX/cNkfzaV3Jcu7iu3q\ntxh2Ax/tAZx3IUVPy9aeRkcllPjswiCce4tkKxwuElfb45MFCYUp9CJoLE9L\njCJccwKFQ20QhGEuHy+IzrYtEkUXOxFCZ0Yw24pjvtQXWowkM9522YZb9HEZ\nPSrNpt+jB+MHe9B620I771AawHdc5bQOpKaOkcLarUfWOK+A3dme2hkFqcQX\nYm6SVdAeutLRmFcfj6NE2p4uhioqpHKH49iR7oolQhNuMndKa/3XuokYdT9j\ntHg6cU2lYOCkthxMQrPLR6IgMuNJApvKwxd/skFrh1UPGbl6WJZSSjuYZfIz\n/XIcxP0YtNTlwAVun3YgtY42V0n6Awa2lHbMjG242DBjXklUZ2zXAv4X3cK4\nn/nBGPYNmqvkGyv2XmyDAg4/zd74e7Nk3tu2qMfnFr/BWLS+DYaU+RsvwqTi\n14KEqILbQt6piI0uv+usywaoLYmtaDliaXhpUNS/mQSj5taXNKnUJWvd7r6Z\n5bzf\r\n=2CVV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxn6VtfVdiixppQrRd7lNrgVVBCpYJ2cFcwkOLYiq49QIhANp7DMoxDn5/7OvK9+a3odSD1hPtMAHh/J8uE/BEkVkY"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.6_1595849143936_0.5992914224473764"},"_hasShrinkwrap":false},"1.43.5-next-1595854815-cb58089e.0":{"name":"@xdn/core","version":"1.43.5-next-1595854815-cb58089e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nThe `@xdn/core` package provides a JavaScript API for defining edge routing and logic.\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"The `@xdn/core` package provides a JavaScript API for defining edge routing and logic.","_id":"@xdn/core@1.43.5-next-1595854815-cb58089e.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-lESRqNpTZQRpjomooKbldKtEmcA7tz7Q1W1p9gMjaSvc1Cdof3i/UQBqusrD6mwSCIdO9BGslJRu0ZK2mdD4+A==","shasum":"cc30691e63568077d4db97d3ff3ad51a888d8b55","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.5-next-1595854815-cb58089e.0.tgz","fileCount":135,"unpackedSize":574536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHtD4CRA9TVsSAnZWagAAG/wP+wbZ0lpXriJsQH5k2tLM\nTJRqKjGkI55WbdySQlYX5/PHNHqHKHw+8+aCOp5bnFF3+0FqK50Ibpaw/Ira\ntDQge16DUeHcfo2FkxAUL6Pvdhy4tTjw56+S+OgBe35NHdg9e39104gu+GOC\njSnE5eiUmUa1celB4M4nZziAPMLYY6oWeJH3+7BhcD+GAjDmltE6sW3a0/dr\nOShBMki9+ytr8VSGXHeDE7zTGHY/D6nj+BUOtQ62l3udpNPw5yU/AYhUuIOZ\nuRRS4VrfnjydM+M92U5otIpJRo5smV2vo6KqZpfEIk0vB/BCiHGDiRp/Cau5\nAUIarcNX0zClTvvGq67VEm/P/3i/Om9Uxvrm+oIjUou0e9ElG5BRfn7k+4C5\n5c4xMk5+gU538RkgQKUNfUIq9/Pwpye5DI0xib7VWZX+ZH0Vj4XBZKojQs8g\nBS1KwXdVDUb/ydpxfw/Aw4//e1iDfN/9oNx//noqAZbwU+gnF+rPhnMIbHqU\nxe97B1KQiX1co7fugRf73zfC0FyysYMxUjNXoNnCzFiFoSdVzw7dIJZ8zPT3\nL9M8ZuGOe1jTZXMt9DhbSvcX4+WM0nec0tlRXQPNSM6tPSFtXzr4gYjrZqsH\nhTm6l1hfWK3XviWk2DURgIZMSGUkzGl7qmsARmHLj+PjmRnSGgoCLKQnzffB\n9KxC\r\n=8uMG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRe/W4nBvNV3irEN4nEUL5e3reFALcpDAfggUoMNhV+AIgR1l/88bLl71zSOv7J+q8Ad6sRh59hpxgZ/TjemOtXOY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.5-next-1595854815-cb58089e.0_1595855096332_0.801697808147821"},"_hasShrinkwrap":false},"1.43.7-next-1595963318-b2229295.0":{"name":"@xdn/core","version":"1.43.7-next-1595963318-b2229295.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1595963318-b2229295.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-3jr8oMDuOg0W1ad+6yuY9T+fBLbYpZ92Q+BllkNUNNNQHvBD7t3fBXZ04lHD+5rTHGfQzRDlRtaP5N0HTPi1BQ==","shasum":"3967df1f04aa8e4f453b1bb1dbd79d6d9b3feac8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1595963318-b2229295.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIHjkCRA9TVsSAnZWagAAorsP/1kHX0vPYbAVsS84BhLi\nAvnjQ9T1j9Yr4wuNbmad8IDg8TCVclKoTDyqGR2SgBzeS583Yc3/p0xr9RL0\nETWTnYy9LsJyQlLUgJ7/hqBXmH7acddO2/PmaII1dor8jTSqCV2FejSxFERC\nXtlZizSEhi8eqpbsHZBEbTN2Ql+NVk9z0wXlRS+goVlLMqM7VEkgviprZ/9m\nJNAiCzMi1ehUdItE2giCXdTnhgHtVpFoSmrBUzj3mdp8I1vX+2yt1SHbKtUw\nsJlOZFR1sPRE/zt6MzCHwPUvhsn8uySklABaoet0kae+1I3p6udFDaOXgoX/\nIMoyRTYk0VGupgssRgfsvL76VoSPqBIXonFLH9zDUUv/32EhLexlPdxcET9Q\nK2j0JfZyIFpujFfF1WEAOahGJybbUFskwV0Zef70ovVDhZ1zKRrReJXRHfbm\nuyVLW5tcTzolaQP/5qLw+7fzMOJa+iKzrg7gWr6RWRTXt7NviZPDZ/ZBwBOp\n8vvG52W70xDiurQOtPVMdZflggUWbNtv2Ulc9E0jyW/32LeBjVTdsZlaS9Kr\nV+HO1aFzRsDCOQGkjgZqnEade2fuVCSwlzMGdyPjzzVAw9dkZEFInE3NvKEm\nKJVFkcDKbvMOGbNYYJ2wExEdgBBCHUrsFcspbuwpWEJweBqhA4S85VBeVTIV\n1nL/\r\n=Ml9e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDv6Ey9aYfzKIC87nIjQ3Q6wXD2RvB68BD3k3ALXI1xTAIgBvzR/RskpnBODpIJEwOxeh+AIGqNWOaz80WpQftPjLo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1595963318-b2229295.0_1595963619841_0.6936736025667576"},"_hasShrinkwrap":false},"1.43.7-next-1595964224-f1c7702d.0":{"name":"@xdn/core","version":"1.43.7-next-1595964224-f1c7702d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1595964224-f1c7702d.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-u+gdURFOnhE3a/xXXM2tp6V3TDWz4sqhT4z5RVLp7SmbjaH5inJqbpiGYTsDXW2anwNmYE/LjeBY+jJGKiAg4g==","shasum":"27a2e6a7bfdf1ccbcd8cc57187eb888bdaf87ad8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1595964224-f1c7702d.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIHyKCRA9TVsSAnZWagAA7tcP/3686gJ++MhZRgTWSrZV\nPAhqSN0bukvFPmhtYK6HLfupfJbEkjU/ckI1RFXtZ16ZjUsMb5fBdG+uNt9D\nkGqSmMptOxHNqwLzSG5LUqKd76AItBUwe1Eus1t6ZbU8gqhXQaCGO8OOlT3P\n8Y/12iS5+wmXPtcSKiMO4U0KxQppD/y4V2cmXhiHMXfSkJjX92aASGDxXSQj\nAllEQXS9zCOZPpcWRFocXAiDOgHm+Bv7W2bc48xH9FHEJ9NuDb4Fr77GnGnE\n5tg9b1UdDlPV/ZMA+34+f0uF62dzQADoicK9UsHkqh973zMMkBekXKgL9IK0\nsLLyXU+e/PHLtFnDmVjG5OK8JdHFCPzPh9CdQJ7MMWdmiSRLHzfmcjixBmWw\njWkdFHopmaTHR3ygc3Ijj/kdaaGVLITEv7XFCQoPJ8I7P2Qyv/TsEkK533CM\nm8RPQdvfDti4X/BdXUNCdAbWQ6n+Ng2VFY1jiHhOf7yEhvmzvRArzN/Dr734\nf6/mrbBtQo5SDhW1JO27w8mIv7hdBxiNy7lJskOYBxSKLHyRAnX/pPB4vE6D\ngCohfVltwvsPZOgtXNJjI9uZbrdn3oZVOEwKTzAlaTATA+L+i5cWEAJmQyNZ\nQuJQiFJI73iUUNOfhkqFik3Ne1ovnBwRYJLGV+YHBRCajxXcFf5V4PntIdqH\np7qS\r\n=qot7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDQeK6ywxLIFhgw+qO2FMtindMOuRmDF/SJ8go6kTBh3AiEAxpOcwJgZs3YIT0iAApsIrvycle5im36D/dqNTTAeKrI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1595964224-f1c7702d.0_1595964554130_0.9276315865369649"},"_hasShrinkwrap":false},"1.43.7-next-1595964785-6312033f.0":{"name":"@xdn/core","version":"1.43.7-next-1595964785-6312033f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1595964785-6312033f.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-YQmg+SQlidtYg2sbAk+p/TWPe4BCy16+WjDa6SRMKywllqUVRgjPEG8LJiaSB7FD0IZQgn3q6Mon1mSz5zaHEA==","shasum":"6935dc15353ea81e0cb99e67eaeca0dcdade5412","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1595964785-6312033f.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIH6YCRA9TVsSAnZWagAAP/sQAJ+TWbVSuA01SEhC3gpG\n2rYZBLJAuhHqem+KWc+FShy2U0JJpu4dBAYD2Ln92Fzjlexp2P1kFC0g7dGX\n0KNUZOnr9pBiAk3ROFkA8gcQZfsJXge8RoRuZUFNLPDsCeDlmMbkYccwArh8\n97nlTefUQy/wtlvWcXd7/1xky+VzqjYE/4OaIU9qIrVrvPu8SKHwqvAlveVj\nNA58zsDcGh6vXTEDpcNEg9PckXcW8wsIw+FeoQIB91v+mBCcTvzXZ4V9G9Qa\nj4TtwvvPPLJX2QT4g683M1hT5uO+5Gm+aa9xImzCQxyK7S9JR6Ew5W+JwNZ+\neQAmptFjImgR8e9wi8q32m0jmJy4kkdzv06KCiN2i1O6IBZlyTyN0e3Yq8+u\ncTWYpnsY0vRYBitLOvdJ8EsZv3Rnke79RmI7ctPMZMPTvyZrumdnrEUAT7YL\nLqoEhNxV2UcwAchFAGYNpHbvjR4Jdg2gCji5XbV2yfubncIc2ZwF99X10hzY\nUSQTX7IxP23/1SQJV2PItoLdKtCfiviqQT5T3f2CkuaHfHPXfykVV4bHnXH6\nYG6f0ipdgmFahiAVvXGK069OErEMnjTTjX0+khcJhQroyD2Pimk2SJyHSm0f\nSXfpsLIlvvieIOtQHOH5EFOlWt9zC1Z9BS4xf7mtYzLobDeCW6SSo90hw+lA\ngn7F\r\n=BOnY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHGgvAlBb7CqRgzqwH7R80cfKTHt5m9iOsremQ7hkpVlAiEAlsr4cIMe6HVjBDs3zd9ytRiaUcat5nf8vUk+YcfWop8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1595964785-6312033f.0_1595965079824_0.3980595671665126"},"_hasShrinkwrap":false},"1.43.7-next-1595964985-5bb00b39.0":{"name":"@xdn/core","version":"1.43.7-next-1595964985-5bb00b39.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1595964985-5bb00b39.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-TXM8Mu5MW6Ge6lo9Fikx/q5UUCAtJt67asN/WcDCGmN+Yw4qA74EnXm4k184c1Es9v+xdlNtG1Kl5OmPBBxQkg==","shasum":"2f6f1768862850e85c90a0c9c57220d6cf29b4bc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1595964985-5bb00b39.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIH9xCRA9TVsSAnZWagAABysP/3WTyP/i7oaQvzjfwkvF\nV89f/dEMK7RC627G+xQG0R0Hp6zrVUn7p4R5dJXFBlhnKkTobjI6pAxjgRe0\nJ4Q8S9vWb4z/7H6vHVT95lCwc6hVDV9D/H7xBm0i3mGpN6swoke8ENlJbY0w\nRWO1cotZ+8GZjsC+twzjblYFqCMwM6lQ01Q2HYbeSGn2uy7IssUeeNK2B7TN\n0Xujp8OgzHHsGrvbbRS37cpf2DHYp6spfEbp1ZtLbLIICTeFlNghptogeeqV\n1HyebX41D/hGZP1DJs6H/8ZnX5yaHdQoTGp04/DfKxiyP7YC9ScySAT8FYXW\ngZmXJ3Iun3E6bT3HQYXXPVVHsJsvS113LptxERPuztFV/hJciTPqEldPkoaO\n8guJiXqZ+3Kg/rzWu3tT4xaXv9JujsebR9I0GGZ+smhfz3d53wMRTB/bG3af\nQMLyP5h5ZonF9Yjq5aCJQP8ZRmxAPqarqTvCN+B8k2Ht5zZZvcP6xdCCM63X\n53+WsOaBkiUAHdBU+qV0uMrrySt7Sc4B/6ozDvKhzmk05T7R+ZUTiPro5mhr\nlStIQc8zXVKA2m9QwMoD7xDdTZa9d7kXHVxZHwoKNgCnoqbikp6ewKkDf/AR\nSX85R+lhgAers6YIYrdH4ybkP4N+siAYohb4otcUS6/4LWeZbl3vRTqxzIAN\nThXA\r\n=p8rV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTGi4I7pQwGNG0oS7VFH36cHaJOBitWrjqIGtqIMoh3gIhAMAQLaxKuw9NHaQEtjCv3gGG+oVX5zeeC88q66BBE7ld"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1595964985-5bb00b39.0_1595965296787_0.8725008375039114"},"_hasShrinkwrap":false},"1.43.7-next-1595965464-50de5295.0":{"name":"@xdn/core","version":"1.43.7-next-1595965464-50de5295.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1595965464-50de5295.0","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-/JA0XamKP5JzqDuNFIP9vK6Go9qODIU8y/HGg3XJUY8x3eNiGG52Iszpj5iJJb2cU/rSjpSZ5sde1nouGjI0Uw==","shasum":"bfa4e73b490d154770f04eaf182e7ded414f41e6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1595965464-50de5295.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIIE7CRA9TVsSAnZWagAA2d0P/2uTYHlGnvvrdIIBOj/L\nx/FCRVhX4YbcI+lUUVHmJpln5JUSJGEofxTV6/xoWYMvmvYudk+xYIK1Z792\nXd/HUXs0Win0WQQ6taY6qNf/kgGn3TJOeQkYPRDX2YmCLTi6wCz36U+/yyae\nUHCIrxDdLDLf9sidyOX+BjOqn+oMz5UPomMuaDxahEr/qEnKPYyOZXezHyKs\nAgBzjuc6SslXQMTKp4Rntt601M0ROtWoIpETZ1uEhWjDCaNGh/iaNkemE7gA\nPZiFVZrheFeHHJhdDgdK0dl0Bpl8RtUoM+AM5gO7Kz3ZBxmmkNfQvA/8inH2\nxEpsY7fygidW4r5wgVzFTz/1UdROXhDYMh5PHysDcLeN+6/gy2Bkqpjn3Kbg\n9gYZ1XI7f0nYy1YUwvZ/AGmg8g0eN8Bj0+jjqJda+vWf3axxBaDGx+MhZk/g\nBb1exN1bQA+IBPYve18ImRmPTb5NDISBqqQwkOCDGHUMvQcPTACnCjk7BROZ\n3OscX/k2/7YHm1ShR/vVgolQn3Bl45WXtVKUr07DgS+wTc95gOzO4BsBeVA5\n7YiKCCFAfcJ75HKa4jt2mT4AZFBpBENQJuuANxaPz7ol2wORn4Y1ZHSsbnun\nnwuL7QVwv2vN54E/LSz/eAicvV2YOBfWgB6GmjSLsQaeAidK5j6irEiD0KOk\nDeQB\r\n=zqcq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIERvRXz4I7X14lZg/K+nr/3rz/oqkwe9Gn1+d0tdsvsLAiEAwQf1OkfKnyyb2FXyDGkT3T09P8DQwAuV91ZrtzpO0iE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1595965464-50de5295.0_1595965754952_0.12308007728703263"},"_hasShrinkwrap":false},"1.43.7-next-1596042368-a87782f8.0":{"name":"@xdn/core","version":"1.43.7-next-1596042368-a87782f8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1596042368-a87782f8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pQi+0cxoCXxWG5iYQIoaTanhGFOJQ0c3k0jEvyvPV+e7GzDfDBy9DN0R1HmbTeBIRrgcZHDsQTMdqPfmOeVcuw==","shasum":"b8a628e217cffbed15fc0c702bd1ae4817d3cd9e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1596042368-a87782f8.0.tgz","fileCount":135,"unpackedSize":577707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIa2HCRA9TVsSAnZWagAA7mAQAKHAbbE4/T7R44qi5wfP\nZ6PAodCz+JhVdm89pv46TxbfwjwL+3Jh4Po8NGAwAQRlZW8aGc/RdcPYxhBM\n7ssoWjmKBgqNu5plBe/VRAA41OIu91gU/NChfllXQToynh9ej9Q/ZjfMe55R\n+uDLskNDugp2n6C8crSWicc3dC/PBQgWrJaAgUP9GbE0Z76rFLBWXTeBQBRl\nftzDU3g9J20BZHF9/Vu0tXooB9OP8hgnYOkQBe5s3BVtBYlZaoxKRiUoakmj\nYp1zJB6UAf5BFrVulDSjDdrn1+r5CW8L94rTuPYF7yBvQKxjJlqNgkby1dtp\neGIN/6Zhm4IjX44Sk4aTY1l9/MV+uHGv5VnVxreMw6XgVRKI5uZKDhnIL7Ee\n2RK5DQaBJDbcF440/XmXGJZDqcWkayr8Jdv9XWvDejyy6poeFBD0ebXM8ijN\nwYENFhZcZyg+Qxdi6E6mXrAMLf7eSUuUju6q8thb6fpAGbMLesUZTx4pF+BL\nBQZ6YwPT9URv0cxSzzIY3TxqlXQKDWYDzZFlUpb6cf2MgRiQivQFzoNUCQ/v\nX5ykNi5x+2S7XEJxM9Nst9e+cLTcdz1INTqU8jJKS20NkeQMkp7DO3/bU4hi\najrRoUo/jR/IetWdZoqRDEINlL+5HtAQhDkONJmMpOYVVJt3349gpa2kjCqF\no2q0\r\n=X+Il\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCE1rRyRi8eZQl+We5dHctH+jzqhUHKPwYSr7maUEC6sAIhAMODuNFgBjv1LCC4h0iS7DlxLUjSRNojxAeJK6Xl6yQ2"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1596042368-a87782f8.0_1596042630760_0.5058615773856749"},"_hasShrinkwrap":false},"1.43.7-next-1596051671-32c819e6.0":{"name":"@xdn/core","version":"1.43.7-next-1596051671-32c819e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1596051671-32c819e6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4Dat4WYipGAvdocdKXmYCb0COFycHlvCDdWqeyM0I1xUHYskrVT1I33z109lRPDDU68ifE/7XDuoXDzl7Geruw==","shasum":"21e34da81e69bb19e33722a69841f4b89a37a3d2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1596051671-32c819e6.0.tgz","fileCount":135,"unpackedSize":577707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIdEmCRA9TVsSAnZWagAAadQQAIdokTGCFApOzyn5kr/5\nZIMB5ilEv2EvRdm5VxSOY99Y2RRs1uRS1/paK1j1h0GN+Q3d5QSkjfmgkGr2\nnvTzVqekYppGjdCOpaWQEEnyt65L3XcamdKHac7aWK7q3/b0NAtgRd+31XW6\nLj3jq26nrLeNm4808nCnCQBZyRWe6PoXip5KW4kQgS/yXHjrIplUIqtFhT1/\nLeNUy+YqrZPaGHFamXID6OFnb3iPYh9MGZhHEUUHg/l/FlzbKG8H/E46sT+d\nP0bRLcEqqK6BIzQ5qH6boCZemTk+6TSxzucZDdcnWpxUW9T2Sctd1Y9mnX7x\nY7UMkFqrXhRP3Y3Hh6WaoOVzhfkg7WIkpiaOxbjdp5zid4IZqvSNKHDKlgYX\nayGnE+Ggz641ImvF1436PGm9/EubFeY+ZaPJMffvNKc9fbk4BrKxaV5lcOAO\ne/Ap02W2A2SIHP1x8QFtdJH8zCrwn8KHhMPF6diT9GCaQav7xdfjnJqwVIBZ\nG+8xlZmdPTVZIKj9r+l/bPpa3qFKyj5GoH6Fk/LLdGiWO21+U0wz6fvhW5gg\nhaf886eYmKeOzeQR2uGJAZrlTDPPVi+uZI02SZSB8xDezxMwzhVCX9a5s5M7\niUSMHSFQgrBz6z2OB9ac/+9UzZKVhWykpRg44andwZcXhbu1c1KIkXLy21YL\nODA8\r\n=zQ47\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfiBC0c0ZOMhRv15w8W0zoasGnmrrHbHbIvB26WHLk0QIhAI3hQFqPJPh4hiDnOJPZQAjmR1lNg6goJKD7M6Xm4a08"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1596051671-32c819e6.0_1596051749829_0.30935861790219854"},"_hasShrinkwrap":false},"1.43.7-next-1596053055-f01ecd48.0":{"name":"@xdn/core","version":"1.43.7-next-1596053055-f01ecd48.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1596053055-f01ecd48.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-u8KTfOixA4KWXP004SGjDAtdshXGXX+Q5gf487U7HvNXgw0Q1YLmKaJSv32VdyPInBAJ2dALWupc8aPz4fZVOg==","shasum":"d9f4901e6b4850549a2f84384932f4c7df0233d4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1596053055-f01ecd48.0.tgz","fileCount":135,"unpackedSize":577933,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIdaPCRA9TVsSAnZWagAAYQQP/iXymNCzUcN9kUu1RCfI\nUTTQI/+hi6u+UryqJqxIGbHC3HvzG7S7YljbgQG1eqI4t/NrfqXFwnFpZakF\nbJMPD2DEi/RxK7WRGju8j3aXOUMn4cqN1uE7+zNr8lYsGqY37NAYJjlTSrlU\nqErW/uZ8cq9y7NJ2ZVCKAJfDTCSqGw+YkKn5gjFXEt1EM7grtD16trbIKuZ8\n39K997k9FEQx31V2MId0UdYTJGf5oqGE2C3c/hWj9ubKelbsL7kocvQpIjld\nhY9qZRZ09vqKg6xkhGOOuQURT2siSsmSNayNnY6DPBHsbPBCBcGkvE3NuNWc\n/WMctsGz2nGwZzkqw5zlgSZcMNQhohlBwEPp/TBbe+ODG4elzfj9XIfbEFNR\nVl7SrxqWVx5REJvoZmKnDI4RhQjAFnaCohqsLx3cFymXgk+nx8IELBL1Mmzr\nHbq1B//ls5XVBcvCPgdrSkpQoaBcZVAoexeLoVu2e6yMfKt0CvWZJXSJCjL0\nrNnlZN+MvsASH7MqDAERVdVDxyDd5uhONzIZd7+CuuPxL8rj99wwtocKUIhY\nT3LOayoF3yE1pQOrkyMv77ya14hQJVLIL3oJr7dDcgzqrK1ofHSaqGSa4Hie\nTRt90wOn+vxFBsdhKN0r7hiaK1u6ZeM4T0vAFlflIRB7rbq5FQXudITUQZHw\ngCsS\r\n=tid1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7XHTzqKDN6XtFtECDTBRlKRKLdFAsZcGQIZhn5xJo/QIhAOCaAJax9p4jFo1w95g7s7LqRxMIjuv74nUbWnrqKmlt"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1596053055-f01ecd48.0_1596053135142_0.20093360229282253"},"_hasShrinkwrap":false},"1.43.7-next-1596056362-bce8356e.0":{"name":"@xdn/core","version":"1.43.7-next-1596056362-bce8356e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1596056362-bce8356e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-AZtiD1io3QY1Vz/l6tcga3MPabN8SiJBpvym/OwptXM3iakQ0HvlG2wm8kgUnXJoOZlgx2WL27DvsuxtMTPhNg==","shasum":"9a27994aba97dcac28523453a5ac52b30eee4667","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1596056362-bce8356e.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIeSuCRA9TVsSAnZWagAA26kQAI2Iut+2m2a3rfWLQHV/\nWei2WLo71PsbVis51mLd1dcidPsytURpQKd5LCke+HxOJWVPC9cJofLH6BlE\nKiNlWBu5TtctrA7ZY/5pfOv0soJvth+h8huGLRCojW7YU14ElHmr/lE3Fr2p\njnWFjl0rlGHGgk8Bi2Jv8QfDkc5mPawS9wPPFnLxH6T/yHzeqJuQpXgWHWiX\nbwijRnJlr74aOXP2Czy4JwCCZd6c6OvaQ2E4XLE5sXPqrx63ZG6LiP7hdjJ4\nnEdcpuKES+Ub52alnWly1vvOgGcSbeqfoc/V20XfYtO3/pggIFNAvnPc1y1B\n1li+joJv4KUIaeCe0uko826b7wR0yEYwYpagJITR9o+2gZiuno+ZsLghyvy8\neug60JK+ASm9WcN5mh/4MYcmYSrh9zVDGcBmLmmqf6z6kucN/VTdYW2B2dVr\nHjf4RInciSFVTmXFcpzpXox4Pa/oK0kZcWgVuSJfg/7J1U0hjFJi2sNDalwo\nS6wVih6x92kemYRoS/7Q2CXcYbmDOBTx8YWW+iS2xlRpA5baqX/2GvsS7vAF\nMX1JSNa02nP+FimgEIxA/H191iCW+VQfn36+OeD23iBSvzKTDYf6LxlkBbdu\ngrqZJcrDDpcdvCWz24nwqyXJolFqjnijvo6DWU0/Lt3ZDL4n24ecWi9ebwQU\n1jNp\r\n=xpUb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkBb01BgAm9yYwUk16vW631R29DO2GqXm4o8w9TON7hwIgdXCaMug9WLT2m2LSu/JEFabhJlWF0Y8rwCTkp0reUJY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1596056362-bce8356e.0_1596056750191_0.05871596240781263"},"_hasShrinkwrap":false},"1.43.7-next-1596058289-1ce5aba3.0":{"name":"@xdn/core","version":"1.43.7-next-1596058289-1ce5aba3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1596058289-1ce5aba3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YyidqE2K59+6HYgxBLLuXm+0BoECWpawJ1ZfJfkqv0My9EQySUL9lOZQWQtyU0hvLMxxGi2Dnv5GUutF9+xXtQ==","shasum":"e8b12a52880949e00e50366ba1c0be6fe0f2803e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1596058289-1ce5aba3.0.tgz","fileCount":135,"unpackedSize":577811,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIesGCRA9TVsSAnZWagAASOIP/381mVA0nGVcnDXbdcbR\nv8oE9Du0ta12lvYGbAB7RfUpBHbnCaSKn6EMRBjD6zYLMz1zIje52IfXm1RI\nVqui3FITARlSe9kTMjeiAcFKkTTFTNcjVnGYzvufQqxxz7iTmN+fmlvWTYpr\nN1b4spvUi+RTHFjK39vhA/1sKlbo5nbUBH+lj5KLyffp7X2tkaFpAMtuJ5Kh\n6Tu+xZH2Lx/NglH8J7PfhMpazyL2muM02kdsE56qxcclSueN+zk1L9aUlSEo\nQAKgMd9cF9zy5sARy4aSQw0NBaGgx+a9mytbpi89VFrutGjtGjanNDff6xH0\nEA9x3U7YlaCTGhUbR6RN/DOmcxMuntm3E6F5URLsLImzEbyITkYWuG+fNHkG\ny3ozqSirmEnlYSmqTdOLybmLlSDTH16orIVLMx09gd4PkiZeZ9DqQNRs2ZLl\naPXtFX09tr5n/GMGa5Ooct3XHkhbry+rsUeq9o6zf7yFQSaHVh7SMxPokJkc\n2sOo/UFaeRZVRRR76PNKZIDoj8NiI1/tHjWEBmjPehRrptXKpZPuqvVqdqhg\n+cpw7VMxv2g3WzS4CTFl0YITnclhaWJuauyUptIdqpNG1iyM0xR0vzQrVvyq\nobM5HijuwgU1yCDQbW809zjQoHXzISYMRr282T9nlc1+TbZrmGeLLMhg2CS2\nvUho\r\n=xGF6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8ftMDyLZqMrWW2koTc1GFg0XIso8i5EdXfzXDQFw+zAIhANWf9K8eq36gpcdHjQYxeuv72xO82mHjUl2w0H/U+8A4"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1596058289-1ce5aba3.0_1596058373886_0.7260723019380175"},"_hasShrinkwrap":false},"1.44.1-next-1596063927-4812ee41.0":{"name":"@xdn/core","version":"1.44.1-next-1596063927-4812ee41.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.1-next-1596063927-4812ee41.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ekioB7XyRcPeEqd98WC8cUZhwnGdlQgVTEC5RSXwxQ1eitdmmVMS5kwmicAWsozWqYVc+lxY9zb7LF0KLCm6jQ==","shasum":"2dd0f312d04dd5ad69e8bf9c9230fc6658f45d5d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.1-next-1596063927-4812ee41.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIgIuCRA9TVsSAnZWagAAtUkP/ib/Q8NsUasq5wqwzO0t\nee+eth03z7xIylpqSmGBrsNnl/WsEY/nLaoUBNDrmVkJ6p9Rxvt+XV9/VT5e\n5XhomgVj33JitwcA1slLIfZa+4G/lDqk0tvV/4bOekGLozoFZ5mZEc22YcYv\nOeASjLX3kw+ndMWAMLK4/fKidiQitP4q42q7foXsT+LLX+7VPQkRUVlfUvfk\nZpUcAtbCfVrFHX+nmdpZnQ7HPKux3CVyL+yUtAse+wWVVvHoiZRX8JJV/vTg\nghIt0tAPL8cLxlM16nT9yZgKpLA87HneL++vQITSqhGrvk0VPLemrEUzovhA\ntJbHdAdh6nxK+FHPqiz8R9HvzhCCf2unTJO4HMg6VgMuUMw3QYKsElp/+0uP\n529vEykL2jZLefqiBBedcBbeoieK/wOYboytu6MfFJDpZ5s91VT0tsGAwAvS\nny5D9f0UJuUWF3AogCIlKoBl5hsrQk9yZv3rZ+IM3QrrACIdamrTf/KycSHH\ndRidz9wuYsPH7/SMUqVWZy8UOixK5pgxhtGLaxRfJMF3g8y7pg88rxb95ugI\nSxwXvy2ZN//qI3OGqyrC6aQ095aLAlZ6e5hr98K1Pwh32gGq13UVJZANQkEF\nzIS1R64hYqU3bcH/ZoM91nsdcqtRFmlrUmRMr70uKFAiAuriYfGmlbrhWlGj\nrK47\r\n=uMlh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGgfpYpOC1CNNWA+Gg4HzlIEBeTmSGzVTzkpQHDP6IclAiBC84oGgR4VoFp7oeV63rQWtyuC9grsF18EbD0MmX/8tQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.1-next-1596063927-4812ee41.0_1596064301916_0.4670562559213596"},"_hasShrinkwrap":false},"1.44.0":{"name":"@xdn/core","version":"1.44.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-y3/8Yu94qz54Sbosxe4W2zckr9uR1EoTR9QtqOSex2ktMrIvZUoqYaJlB9CegHaCNASuN2zNK5Qm1oEzHRxOCQ==","shasum":"fa00b15ec8928ae5d0f2e0c0f0a666a4a13617f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.0.tgz","fileCount":135,"unpackedSize":574809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIgUWCRA9TVsSAnZWagAAybwP/3a5+jhW0NsryvTcft0B\nVgYe6Ux/d2O+ZtgfL0eSHfD357tmjeCjls7lui+L0UFfN/zduGuwwGdtwStY\n+4/1eBmDc1wQqICxNCBBt4F2AhDJs3wgeRFsBJBFXsfuf/xcAgZq7y8JpvZu\nv7ALDYoSsda2SDJ/kuDKJ6VMqIwJfgOsiGf/6pYRE/90ObBHtWxOXZICf4n+\nPxGZWoPo/+5JsK7YJgo3zL10JeiSMwzLL6aT5Hx6LPC1bEmFUi8aPGb7aD+c\nyl90hz1UlOyQa3pEtNn5tJtBjmBSqOoqriE+sA5aoWUl6rQPDi8Pc+mP5jpC\nycH6CoPnEpOKG2VV206FgjL4Rsfjo7L8kn913W4hcRpyaTD/fGG7bzwlovmw\nLFDWFWRMPpf0t0tarPyQi3V8U+cJIw6ihP5DI6bsO308+v0cOvaW+SzZvS5V\nMsghATHAwBEM/IErfMpj6v1x8Z2jPq7At4pH+WDXnELmFclEjq5iCjsElXxN\nX72GRxtDuMGraw7zvqGaHXxYXJfpjfHkAgoNjoA2hPFGgvZPQv5Vp0r19xlU\nHvcqye+lt5pqQLdIGc8yiV3Xa/LN83jKbUr9RKvaXIx+XaghvWX5a741QmaT\nXhumOdTV95EVA1P4kIdJOg2WOqTyu6Rz9QBCYarf2ZCnDdMZjPANHNANhzMI\nv32f\r\n=Rc3K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICuRvxGtpGF9B8Y1+Lhg0oBEc08ncRjwscctxO27xsZ1AiAz5bBvCrp3mMyvAZKSuTbCP/ZE2J1/WXsgs+YgUEZWvw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.0_1596065045918_0.7151375280526227"},"_hasShrinkwrap":false},"1.44.1-next-1596122797-252bda56.0":{"name":"@xdn/core","version":"1.44.1-next-1596122797-252bda56.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.1-next-1596122797-252bda56.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-RtT9CzGo33Upq8r6fMz8QtS/QMz8csoKkFJzEPSJNzNcyrXFfZaZCGwIx5Pu1SNfJ3jAg+QkfGA+QGohhC646g==","shasum":"f5572b5ae02b0081c823508f4620eef279f6e927","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.1-next-1596122797-252bda56.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIuhcCRA9TVsSAnZWagAAC5oP/1p9Nk330PfqI46njbyt\nOj/pSO+11zioKnldGHPLOJZlyFOWqsCEAnXzEXeJC+Pmc0kVlyHWdyYu/zkA\n4AVg+S/lTLlkn9UJogdLptp9pbH4liaJdgpJsxYJIxU/8yxmf8bXJzxzfud7\nb1fi+5oxUbgycQnqgqVYwMiyHwYQYde5h4s527g2uxD787rJOQz6bY/M3+aL\nUAbKNkexhAaFgrsznRgKfSbAEep9xGcKsxM1tjcF1xvaxKe9qfmIXumuoINF\n8HCoJV5byD6zC/qUGMsuj/VdG6xnc4gay9Q9xjyqLmTseuc6ptyww8JOwTKx\nvu504LOhpCS1c7rDBvtZn/pg0co/KHN9JQDJYSjArLkHaoOVy6q0PMW8s0tv\nDyEK1WsV9RjpqFprHJdDesLIHELAXZa9jutK3sJuHOedFBiFoCtX3hGRb9n7\nICAeGXnJVMlwMOecg5HHKhaTjbFcK/5FbBc+A2Y6lexqUWFpEDYCZcq+GA6D\nmz5gPUk1CGRNNC854/8uQh92EjmY6RJuppVado01nYmYOJU65Cxez6GoQiy5\nfT9FmOLKm8TZjx0ynAsrwTgzheaO9rHNys4HFEbxzqvc7XZaYOBNHRiMlJOD\nKFHAEmAFN4PUYfvKssU9gAdzTvLz4nPM6xYbK1L7BbPxWMo5tfN1J1UsfU1Q\noNa3\r\n=nQ42\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZsntac/QPgCJsjXJBGSiczBzQP2hW+ZIOZCuwIL/D9AIhAMSs49QhHvJsS/ZHCaWLlQ/YhlWfvXTrOuGtJQp/2q21"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.1-next-1596122797-252bda56.0_1596123227382_0.6217950182611514"},"_hasShrinkwrap":false},"1.44.1-next-1596124738-091d8aaa.0":{"name":"@xdn/core","version":"1.44.1-next-1596124738-091d8aaa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.1-next-1596124738-091d8aaa.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-gDPYYLblKWsCVHaxaZ5fbW6nS3PZDhH7imRZM92miUPnCqriRXG8bfLZlNkEco65iJBGd0I8g93rAvkoBL9UYQ==","shasum":"d3f3cab44ab961f2d1034e9ea8ea32f8f367892c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.1-next-1596124738-091d8aaa.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIu/tCRA9TVsSAnZWagAAM7MQAIKtGJ6ZS843Jg9us2Xc\nRfQWsU29OAJUXQ9MTg4Yf/i+iI52r1cnp6zMllVrfX+t7olDofbhEyfkbPWI\nIMhl9adN0qwyjlnNEK/N3biYAgecr7H88WErC8WGZLZVyMYWnRJI9ZRDNRM5\nfecihqVFI0EwVqTBUIZcBJdckUuQ6Rjd9KxMfqkTUymjDRMHP1jNUZ7DA9pD\neOhfxVwsvTdChibbkS7Xw8RBHNSfdAlE3arCVRXE0YenuRAVeaU5JMcovTjB\nCgSxjr4k/NFzV0f5DHGNNpohMQN9lbwZ5pX3N5wkC2m40IdNs36aQZoCloWs\nEbmHzrHDcXN81BRlxB+G5uhPqY9GduXVi0xFrxUv+NiydETNcFGIK2rBBXDO\nsvqNNV0mw7E3epcK3x5j0+kCQTd1DMZmgkPhMSWApQ4ec3di3vBc7wpctKlq\n6yhjik8LgvpoGAP4yzX4xx9ggWmMYnmcWyz7HzcoxsYL0rwkJn40wicmpFr7\n5uXKJ+E1aUUawaRdblJSpdWFRclMk7Ed4gEXMtnrHRRYIsHNbAw6BmCHFThG\nKRcblFbnCpzaFe+b+NTtb+s7pLCHsf4OiLzuvIA90WSNFnIrvYVsajgZmxrL\nv51bNlG2KOBdlaE4zK++L7trCHyEH5QKFYEJctj+5uxWB476OLCqEZ3n/VyA\nVm0h\r\n=XGm3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAD9Of3mUgXpusUu5jfeZC/V3Dy7A4K+fxkquDc9JIf4AiBaatb1K/FFxD6eJ+8cAfwks7sZiHxE9xRpjm1EuBBmFQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.1-next-1596124738-091d8aaa.0_1596125164375_0.11378967416223751"},"_hasShrinkwrap":false},"1.44.1-next-1596126560-b3ef1c69.0":{"name":"@xdn/core","version":"1.44.1-next-1596126560-b3ef1c69.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.1-next-1596126560-b3ef1c69.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2W3y9TOhmCNh+k01Ln+/p285nwH6iLSS3Ylr6tnEhx7gqs65nUN88Hn38sPuiMC4Od6ZZ8jXNjnpbKSioV8HzQ==","shasum":"77158189fcabfdfd3d0313751b19f2759fe0c4a8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.1-next-1596126560-b3ef1c69.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIveKCRA9TVsSAnZWagAAsjAP/1dvUBTtJMf3Jiv9ZM1g\nC+V7iVkKfDm4/COkzTA7L1JN4XfY91IR9zryF40Z4k/31Bgg0/NN6s4FfNG7\nfRn+UrMG+uWfShkTCRhk47lCUEDNh3cDr07V8Sh/EjrwdSt022ESjSB3ydM2\n0nzWztG+Bqzb7VcOv4+bjyA7YlbqDhYz6hdoPJb5kCSvYq5UF//DKxGuAkLK\n9JqPaC0mh9XSDVUBPqyIYkcku5Ra5l+dSCehez8LIEel59BP7Yhf02wKA6l/\nrOtTSWAcyUBsg0q4Wzf5nge8/LGPl0XMzdkHeCrSFI4t24i1wB+u6tMr///J\niviW5UDG2dEATzKk18RsNmzaUacqRGqNWgA1BYJpYB1L1JnMuNpdo8WtxDVA\nZUK21E7xQgYF0o0dkzgbsXfzNJr/Klt07C62tUwAb5T8RWqQGlICoW5T0/7f\n9ogI+8d/w4N6VRrlaCJBf4ZZM21IQGHTZHYYJZAMhXdTXfkmDf5evPQGg8kj\nOnphbzjV2wlHvjuXOAszoKqmZ7GANAmejc0E611qYgIFrlfQ2l6Eb6cXVK/J\nAX0+nJfZYW6e5m+D92LA+bKQgC07MP28VtOvB0UUGKxbFK+ZwGT9koWx6lWo\nXClGSpI2366VR0nhXATyV/MZGwf8GvO+VvxsG7msyMTomwn9Ok8M8KjGhxAH\n7WRi\r\n=wcx6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICnHfNm69Rg+eQW9GLYhWeIJvm7rhITDlI7R/XXL8xZ3AiEAkgEZ2EG77+Ot2gPFZzH+QnAvTaszlT48xu+bXTuZ0gQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.1-next-1596126560-b3ef1c69.0_1596127113972_0.9572932717268938"},"_hasShrinkwrap":false},"1.44.1-next-1596131312-87c56632.0":{"name":"@xdn/core","version":"1.44.1-next-1596131312-87c56632.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.1-next-1596131312-87c56632.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jUA22koIUhFEUQuwQJH7ZvGM1YGf/ihtb3WWpO1seU13ab77ZzZPTCT0GnRoBFMMAR8x+oSUGLPdQL6KWFAVvQ==","shasum":"c3e12ca274349465a5b501b6117b267e16254a54","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.1-next-1596131312-87c56632.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIwosCRA9TVsSAnZWagAADGMP/2cKCeotyE8dsCncCpP/\nd+MzkY0sJvAxBgtVHeSNw7u4rSpnBwAMGziKHyZ3dzO3xb7nuwn3aZ9+yxyH\nimNFy2FpqorSfCBXG2CxSPKdOCMV5eA3c0BYbsT3k0cp/zQfzvOLsWhSTApe\ntkqdbYWDSu4vOoAjhQ5it2YTB55HYlXGB1Vuh/+AWyApRQtsauLcyRlXYAGX\n3VXmbKO1h+DFL660E16QS2g/Wqpsln5yu6j2ckaBOmRmoDCARxVrpq65Ztc6\n+kr9Rg9vYhcOKrXGlVp9BF5gjwoK9xf7fLPdxlsJwy8O8UoFqB8Pvw16vyBC\n8uwJJE+9gFowLDnk5SpGsxM3myfN4Gq+DscAPQO7lGbSpxAjnwJLtTI+nqRO\nuF9TRHHszMNCqLIs7VaFDXsHKBwmPucHoGfqa2t7+vOe6raLk2sE+9wSSNHn\nOPBbEgDcpFRovGSQn8kgNi3R+l6KZDCnKPeC5JVNJQ8gxmy2uyHTwxLJChmk\nvPDy08S3yxQ7qE3jsKrnFNyWRudY/QLZLTzk9zfcMImzIyYPCiyB5H64yRit\nerrHv3+3+m7/FAozFwWNo2wgi5W8chFPCjKUgBPhuVj5M9oJo5ZW6iQoPvS0\nWCnbjIRuOsKeEyvzll2sQ4j3ks9v1PRyApRcf+1C7hdhDepOENLBXwuY9fL6\nedbV\r\n=Ep+0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIArPbH1uRSFlO8lehGPdfjHK+UaZtRv0g5wLP5bSir5qAiAmE38JwQeJBL88Ms9N6y1Ly9HCjh6M8mhqgQAYrRoqdQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.1-next-1596131312-87c56632.0_1596131883473_0.7498833400031462"},"_hasShrinkwrap":false},"1.44.1-next-1596134140-b6040981.0":{"name":"@xdn/core","version":"1.44.1-next-1596134140-b6040981.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.1-next-1596134140-b6040981.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-kh0FmQxfoh4VDb0KBIUwzG3WbJLITy8ErtSKxXWkcog6sNqOMzMWPuYXwwScqUB5eAupESc5mvMghCa7Ezh1SA==","shasum":"0685b95fbac053e950df79f282f0ace813219714","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.1-next-1596134140-b6040981.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIxV9CRA9TVsSAnZWagAAUuIP/08rqCIl8qwY+zufN4/F\nSH0LS8fLaRzKQIuylE7p9etndo06xVBmJi869sZvgNguJFN1IarGKj/AxyVo\nzl7o2V1xE74YbtQOU5WWlRaayjPjYs+aNuIzpXre5YNntfxyO49avqfV87BN\nYcckfJhaghDkZOVjINQsdWykapybnkr6vrzXbHl8PKW254ZT0lH4q7aDmTJ0\n6HHc3WgdOW3AZL13+gCMuRDYWAdEsJSJGPKGHPVqaUSum9KMnK3gWMaWrIxG\nq1MUuY8zJgYydN1Sm0XzQLjumVM0M14wLv7cj+IiIZRRMX8Fb+iI5lVP/e22\na2uSvF7D23prLcfa5wzagfCrLWLN9CBaCn+LCbSeSEHLSEM2dJgu/KNBF8fZ\nWqQD4/8pJ7X3EWynwqtHc4rQC4oepPJtBNtfvL7wzT1WOrk+OogjJhiiL2ru\nbSguThyd6RLRJk387ANrjT10179fXOH08UKRkf3Stas6dn3ezuVl4U0L8OBt\n2a/TUVhcnRbBTKcM7HyAApV7MEDOyHfxp+4MQl1ZCHzqqwprOquvHd80pouM\nS2u5iEAMn02Wm3EtA604hHO2gZew1ke7O0bs7DUqMJM58/4OIBPK34JNxKtr\nYAY0flSIbtppCtXKuxgZw3wvgyLjiFZzD+GqCmA0WA17L3zZK1Isf0LNWbFS\n2Psa\r\n=fZD7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDKYuHbx/xhoo5DufssFUOvgi5WqBeeBwjAHtG4+dZo/AiEAjg4FAzMuTanq/5wAL0yGwhdLeZt5gT6SMMUtP0I/0Sk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.1-next-1596134140-b6040981.0_1596134780465_0.15731550039452058"},"_hasShrinkwrap":false},"1.44.2-next-1596141686-3444b9e7.0":{"name":"@xdn/core","version":"1.44.2-next-1596141686-3444b9e7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.2-next-1596141686-3444b9e7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yE7HKTFNX8IUzd1M1og5x42OAlNL1CBEH6nXd8jn6J0hAKEYrkd+U0xInaE1PyhzPEzCuz+yxXfVbUbDH3aF5Q==","shasum":"defa997205e93cbc611cea71fe397ba78f856808","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.2-next-1596141686-3444b9e7.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIzL3CRA9TVsSAnZWagAA470P+wWJZ5goN3YjKqfWdJaC\nFJ98+y0NFINQMZcZqKaRL7SgriRLbmSsHXBQmd9xrK/YKqtuEnRpiH7d0U1r\n5Fd98ehaorb0BFeYaDf3Vr3j6zM07yhKAFXBpjCbs9XPVm0IxkLK5jp31zPX\nwEBLixRZHovdLU+wRAdVU8n+QYDszIcXkTn6tQgCAgnBGat7Y7AtbeiAlfP9\nogoS2pOBgl+0EPsJSnO9xEzN5TaeOxdXrCKDNFAhJU6/60HgRLd2SdJGVqPO\nCEwo0o3zkP2M4VW7oEqn02SIxPvt5mqkRGec8ek+phji1eUiTVAhq0swsfjt\nltclT78io/4CerTXY3IxHOy1jZ4lavVdSW4xR6VDPaL4sfnP9adtlyCyCEkt\n4Uz8aV3XG8ZCQvW++NkpNCQnjsSmNjguu9AybRBu/qLo4vxdVgL8pV3vXdzs\n1fIk5tQzPl4NTIBeLXw9weD874uVigBHUod/59PcLvz/M30F/e/xg6DB9teo\n/qzfZAjQQKZ16JJr3DL6bPZAn9/pTel6OFEz/+pUqKlJWDWF8AzCymuNHuzx\n9KK+ChjPANECOiViv5B/a4frOUPm229AY+5oRH+rImEDk9y99tEqS3p7rjOT\nnT/6Zr0Yoj+okN5sVyTSGwBEhU+HBwopgpo+rhNo3MrXI7KiqLSgxK1DaZ9M\ng5Kp\r\n=LhQ7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTKVEiQNaYojpxjB/bB7qG+vYAGrVk0KPHDjVSdChVEgIhAIlP1/qJHhR8UBQRMkzBaZ8Epat/s8GQvyHNFR+ohcK5"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.2-next-1596141686-3444b9e7.0_1596142327350_0.6819232318871373"},"_hasShrinkwrap":false},"1.43.7-next-1596142580-316d8f24.0":{"name":"@xdn/core","version":"1.43.7-next-1596142580-316d8f24.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.43.7-next-1596142580-316d8f24.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MIFe+9tbTVLb5DarDoUQu7pGvl6jPL4h2kytimguCPH4+Y8sxN/wM1cXbicSXRsOIzJ0e+WpC3QqExmoT0Flzg==","shasum":"63bdac516e6ce63a6529152a369e738dc453a4f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.43.7-next-1596142580-316d8f24.0.tgz","fileCount":135,"unpackedSize":577811,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIzRRCRA9TVsSAnZWagAAnP0P/16OJs08kktRn92MdlYB\nGCNPWwsb3mOAEEzrv5oKJZbF/gaklpNbI7wL00dVtnoLfME/nyCohYhIpWrW\nA8XSu6XtRYsKXAp6RBo2HYLEa1PpmuyZ2ym1EplMn4QTLTm8iJcJFhILdp4T\nfMpkXKmi7oZzhLGMD0XBUylM/oM38wcf/dY7Xdp2zV4AmMyVG7EbBr7fL6UD\nU0/pJRjjgkqV4POqdTkhYdktp6vVMCw/GEQ2crvrxBZLQOREcoT8Bt5xs/iQ\nZ/4/aoIddejam3wMocB0J5nEY7dd7MD6WsQd9cAtXU5yah4Pnqv/PpQgTQog\ny/yQgutK3suYUGU7AMCtg2bXjtgs4UHK1cIYL+RZRq7/AYn3YMZD9f65eU8f\n4meZtPSxWP19a4cFyU3QQuiaMp1em4q2m9BnvadEd8mqSnb/dExc5DtWZjmZ\nLTxBPD0EnLiYgdPubq1xWYM0XukFs7RaM3imPpvI2Z4zssTB0jDVzYC7wNJy\neYcQcdlhn2+jR0TLugrRs0X8UrgsXyJKw6dfpgKKjxpaarIJ9cJV2Nck5Xmw\nHCdfggXBOYeqIsbWN1nwf9rtbqjDJrKxaBGvDAPhHPL0SYhcRfZeHfFFf900\n40PPYkEFToumSElbd3gAZ12r1CrzQEqTcEeePsTSLW18LNsWEJtUi5WDBWS1\nCjwN\r\n=6ijh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQ1Xhno33F6glxWwnOeyJec/z90b4zc2s8wy9XvN43vAiAYo5x5zs1MJQ3jFMKck6SCqRTF881EjIuMNQDKJJ+uTQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.43.7-next-1596142580-316d8f24.0_1596142672654_0.9174305703469818"},"_hasShrinkwrap":false},"1.44.2-next-1596146994-607ba953.0":{"name":"@xdn/core","version":"1.44.2-next-1596146994-607ba953.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.2-next-1596146994-607ba953.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-iDmArYyjSSwkisebK6sBPf79jnbkQuBv9XulZUm0jOv/olWxZ+lYNw57oycKlJHoEGE29RlGOLlhjGF+ZK4D/Q==","shasum":"697291ec2cfe1118b2f7b3360eba71d16bbff0a9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.2-next-1596146994-607ba953.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfI0fvCRA9TVsSAnZWagAArhcP/jdLJu6KRG3Zk3RuchJr\nJl3QtCP3Wd7WsKZCCEbJF4Yr9lTVUEO/eCv+vM9KBwIad6kCF/4HCsaGcH/l\nua2e4eqgOJxwN6ojUZ//7rsEVfeK5SfhMwHPaW80gYZqcSIZFJEGKSZXjD9/\n84092w3sguHsKG4bu5htE75TriZlRLkIVIHfjApr/tidSD2h/jGVevtQIIHs\nWZ46jym7NBlSRPFZZgWZ+1VGB8r637tK/2dR+Oz0Yl/LqZXVO1La+KEUF4q8\nbs7vHwn39h2/xQ6BLgayb5rui9N+SoXkt+i/X6+yBIK17P0YEKyfuY3nSEZL\nXaxSelCQR9y2HYyLter/NXbH7LQawPagt8a0MaMjSKwHKXbm8uJtzzoOBCEK\nCc8sq1sVHIVFHEzjT0yWw7adVwiGOa+osa5VngsI54RCYhBYmFJ18KyHKEnr\naja4Evn9Z7dma/oHvKHKOe3HnXZhUTOYrsdRfiJcwKzui9iq6a7A/kRsRuoF\nbGeCeE/47cv8ARwR4y1xXpj9rLyF/RD0Slg4ZEmKiXuhS/w4LdCJBg8r+NBW\nuhel+10E7hJ8hSa3iyIkswmyZ4NOfaRx08EyLBqphMGAYh+qm6nlqA1kM+xZ\nhYFR8/1jGNwKI2v9K9y53lBKW74SgeUP3SkTEwDus9RnMP2yR5X3lH6wXjOO\njeAg\r\n=YO4w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcxFUlxXrEhkvz+f7veVEJk3lyxZKOd4NzVDgiunKCOwIhALyYU8Ci9NIg2CYtplPxcThRPaNXAZ1onWpNpO9Gi3X8"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.2-next-1596146994-607ba953.0_1596147695098_0.5107631359798059"},"_hasShrinkwrap":false},"1.44.2-next-1596169244-e640738d.0":{"name":"@xdn/core","version":"1.44.2-next-1596169244-e640738d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.2-next-1596169244-e640738d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Tw5wV8nK7Xe9UXnEdJL3ioRxMcIXgBc3QO+NWCmR5+a2GNO4WBo8MtR/ykN5y1jxSWd4XU52Tl+xu0yW9rJRLQ==","shasum":"67e7e1283f88e8611b9685ce8ce4647a4236e8a7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.2-next-1596169244-e640738d.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfI56TCRA9TVsSAnZWagAAL+0P/2TD5CxgRoSnDPK3vvCo\nH0fzUjMG/1csk/is8iUJDVFytYNZZs3qvb23z7/u4/H/fnjEC5TyjK9OUtmn\nEC8M2GPcStqBeX7bKHJQ8/sB0QzBAfvFtQav1N8567wZB5neqgrWpPwe+tLI\n52DaLhGen83rG29TffsZVSDsUkzgNUPL9/4ov9W+DzLurPHyaw3INZ5oGM7U\n4+zIHdoj6HdNYxsI+TT54JXjleMK7iz9wdUDw0xk6e4LGLddTf7UyIv9elWP\nVb4lRaI8MIrdBEbpYkmDahV/ZplFaKkoQn9U/JfewD5F8X9/HS4OImHOdSIn\ndcsZMz/BYh/MVGQd3BLp34mY53yqwI34qP1Jct5FhL+SeKvedNn7LBRsHBpi\nnlEWd/EQeYUk6BgZWfBBfIFHm7uGySJnchd+aetZfDUD25QSeham5eLGjmP/\npgmj8tcleGOb3RtVx9PL18OFscNAz0T9gi2eQ9gG6z4tTxavTcuRNljaNkRJ\n59ZfRH7ukzumKnqbrIN/QyfgeKxdpIS55RYNTgfQ7/jmQx6t9Rv/qfbtMMfY\nvNYr+lVKQEMjAvKzFcF1Lk9chvOiEGplusm8xC87Z3XbuGQ7MQ2JyXyZa4sh\niMsUZ15Jv2iCCak7/P7dREtdZzSLxh99599mIwjCiZj1iNsSEES4/cTJep8+\nFjnG\r\n=JEv+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPi8YvL1Cnounosvf0tNJcB/TlzT5EqEp9AkAaY2XufgIgWISqQdeo+517QdojCLsncjvKgxiisJgu/yv1tCvApfo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.2-next-1596169244-e640738d.0_1596169875001_0.21282878567845653"},"_hasShrinkwrap":false},"1.44.2-next-1596170076-4aa832d1.0":{"name":"@xdn/core","version":"1.44.2-next-1596170076-4aa832d1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.2-next-1596170076-4aa832d1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cspRc1i+qXTyTOAjwhht4b6YicF1lICMAhpy42NDoJZKbAtnO3zJFgtQXNROk1Z0iaHIYOPS0bS7svovtVxZJQ==","shasum":"3aa7986763cf87b04e9f4cad83d3e5c350c05bc4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.2-next-1596170076-4aa832d1.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfI6IVCRA9TVsSAnZWagAALyUP/jH+ScTLPPVuC2ZRanYR\nkx8rXEh5n38Kjbr8rKoyXDR5BtzBjVb9bTQsXMpBkRSfepv3d7aDCycxGwwZ\ngkrjflVIwPbCAZziLdHnZcavkvatHf/6cDotoTCJvLP2EF3la1rbdsBfUtq4\nJRxWciZ2I42vPQBXFtExFqpf5poKGs/HTspAOssIJybxJl6tk7718lyppB5n\n32gi16kQRa4TfS7eG4vOD48fUSvA1bP7YbG5auV0jkUoqTph+vWGk0s0XuCY\nGeE7GKO1EToijthDGylOD3tw4YPPcsnipXojqROFAA71/ZKew0K6VVGWlqAW\nY+4sXDqtHnvd3ZEWaB/IcvEK+KBvKymGBTYC0HLQg0IghjhdUQCopAJFb/V0\n/QBvCQrCahpaaOnugTS/tF86rigZE6VCuwYCBwpW99882wDyUvYGMQAqY5SA\nr0GP4VNbQq0aqH4xm/A8Xxbkd+1AzMt/E26YeolhgDP9DIQbq0SooAOxtMPm\nj8QMjxl+cFfv4Vz2PjEIJpdEuX9wjyjbDgZIRwD3elSCXIMIqY22QVJjvID6\nmMjHbE3P4I1GUOp7F2fAJl+xUG9hdlMGbKObM77wJnD4GZ8gmg9CrigLzr2g\ncWxxsvUOgHwzbU74TvHn7joJKMZnZvfqr5GcoiUPaVFyp5xwiL4PsMlYaMu7\nNDRl\r\n=q4CD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA3SfHL9Xdw4Hw5JBb8IN9dqQpxGuADXZ2tDvdlKPLfBAiEAnRqPRWsOFvCI4N/1+e7h7giSsoYBQBmGO7ckVKGKgQI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.2-next-1596170076-4aa832d1.0_1596170772726_0.8290793463094679"},"_hasShrinkwrap":false},"1.44.2-next-1596217722-c51db5f3.0":{"name":"@xdn/core","version":"1.44.2-next-1596217722-c51db5f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.2-next-1596217722-c51db5f3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-liufq/4dYww9VhqN/iI2X4EygaOEATGMb2cXa2uZWUJ/DUb0cYLZTAgtj9tB3mewnRmaDBcITvJDjPO1uY6SJA==","shasum":"2259252e7482057b95e4cbfbd876f6e1a29f910c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.2-next-1596217722-c51db5f3.0.tgz","fileCount":135,"unpackedSize":574937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJFoSCRA9TVsSAnZWagAAcCkP/jz7JaZYcXaEZKL5meRv\nhpXMF7luZdCpavl/JouAp1bfXoecgQ/CTbJm8TTrjsO6QdeLeoEsL+FW6eNC\n6pyx7GvTdm8Yh/WWbGdfAi9nTHpU3AMmkXcvlivu3iXXSMD/FEaS2ZsueAjf\ni1+AL4yBxumrT7izC4klBqy6OngD6E0YBkLus3vqzFWKWCg4UL6C2mTGkCs+\nz+996wceuxgsbJcYSW8CbS3uuuSAo+alt6e8C7b8YrJZKp6aTCOSG4ZR88JY\ngrskT75m8gf67qBSm4HITEy5DwXPTOTilJK/7kzwJDJ8NCpve/wuud/z6z3x\nIt3BMCatW4nVQ5ONXMFfTcO1+rqRigZ5NpROrca8AMR6/GrIys6EvxLHyNO2\nKO48mxW60rER+fLLa4hQV4b9xy/Wq2qHlrFK8FcNEpsi7pz3XXyJeUGJp+l3\neFA7lMNDw7jfRedls2d07rLtYtqcpSM6tfPWeLcwmCBu/0+kLQETmowFx1s6\nsxpClZAgCZUyN8S8VA778RvM29VU8jDl0NI0btbhcHpkSFmR0L7mSWKSfcY7\ntRY1qfBs5sHEuV+erErSXPFYHyaLBt1Vzr7zCIfuNK3qN33fG7vc8LVX6bXO\n/i0J/NvU2iZoaEWEcm9zB/xLAy7MHWZgRoz3ae7i3Qs1GJbmnptRqRs49Bjh\nwoLW\r\n=h2dy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJbKfrqdJcMEXeQwjW11a3S32ebcC3TqTwrgnkmMooJAIgd7Gni6K7wmRHcW12cykzJV9UQcuxwkymw7v+5yFeTKE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.2-next-1596217722-c51db5f3.0_1596217873872_0.32840024910323473"},"_hasShrinkwrap":false},"1.44.2-next-1596219609-d8c6f904.0":{"name":"@xdn/core","version":"1.44.2-next-1596219609-d8c6f904.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.2-next-1596219609-d8c6f904.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vQ5541PmBhpaAgGc66VbwenX1Q4wHDkF8Q3gYzhkvhwuX+l7JOIsfGldD2se639Iuhjs5fyx3mKfUTAEDtO5SA==","shasum":"67bb045d0afa482a42850d951546166dcb7f4e5e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.2-next-1596219609-d8c6f904.0.tgz","fileCount":135,"unpackedSize":575005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJGF+CRA9TVsSAnZWagAA2lEP/2HlyWD1nvuj/LrHjp2r\nbD99jHKlVIh1mhVQvytohxIbxKWAXFwgf7vcOX+xktZC9HUL3VenOeIjQGH9\nfUnZO/4DGkCSqdMkzYRpp8viXj54rnDZkRKi7wJAqrt6wiSNZfmlttYR9Thl\nKzlkYWuIAYLYYqs8Z3KA7ALgnK2JRwftfbMIOfLERPwYEbyK3jZ7NpGM3eVL\nrwr//CybxkVBP+OioZ06Fs4der1GDD/LTkxZOE1s6cS8otlybdiQhkYNXzfV\nEQx4sp8vFLkA0F1otwGTQoYTL1MHBlvrXjHvqfl0c18ziTsqDWj02MwMoNLC\nzxL9yExh8m7nrb4IDRITZAeu0xyX5btCLT6cGtkUDcN2ghR+VinApA7KL45z\nTFOFYpOO5q4OCTXnUqb3BBy0r670uawMBUtYAkcld87aMCorDGO4z+EXdubP\nFTR92Py640pCVXyKLYzOdTnrUv+1aXQ/5Wht0otqm0vM8Wsnp9nlBcbd5Z2L\nB7n4D9wSq00qpAwXGyynDYc3faAFyrrCsVp5hiToX4sAD1WCzILYHt06WIO9\nL2mvjM3C3/vV24nLA+BNLHJGGxkGoQt6cNdx0sksl5xx3KXmo0SX6sR2lMKO\nLkz9V0BAR2utUlUMKv93Nee4Sn358YnTC/5KgC3uc14bEse3LIXsWu3vdIA+\nao5z\r\n=8/0r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeZOTZGCLimfTJtdDK1Wj1fpxC7k60s3YAXMixHh4e9QIhANpH6Rcyz4o5gCUeQBOSfdUKOyrnzk/K4uiA/gKivOjh"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.2-next-1596219609-d8c6f904.0_1596219774318_0.798186141512242"},"_hasShrinkwrap":false},"1.44.2-next-1596220109-18de1ce5.0":{"name":"@xdn/core","version":"1.44.2-next-1596220109-18de1ce5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.2-next-1596220109-18de1ce5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2JR/7EwKr4I7D5RcJf4bNolZ5gfYtBcFlBCZa1miVrhQ40Zlp8Uh3BdBU1CZSlIz0pnbz0hsic9NZIRRWJHk8g==","shasum":"55c9ec03c0fa64282ececafb4630cbf124a2611e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.2-next-1596220109-18de1ce5.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJGUPCRA9TVsSAnZWagAAuXIQAI+HITxptUpR6XrPHvhN\nAUVN68+2GFhG7WCVmxO6nFS13mLA6yoHXECOiwD0D2Dn+UCYKeHiSmKGV4NB\nJo7QIVbyTWyHjjULPQBQPJZRFOyaNln40WF1PPQcie0WIrqZcJXSn6U1psNy\nVh8gB0qJ0BoB8ywSvHvTx0hGRT0L04rxOJL2lWxXcmk5cVegoAz7hDmoYKM8\n9YwKkaT8kJlvEkpDlF/MjKF6HHYjKNAss/GLvCs8XUgeLtu/Ko21GxclorEL\nZo6UGzQIt8ULAbnH4yDXRxiSnjCpTHe2ir0aqzzelp7vAXt98GECVISyzGYr\nH4/E86z+3cElLcU3kegtLhSfpW++9fBKO8XX1JADJO03Qwmkzi7KWtLm2CcB\niUWEtuOxUxT1Qk6LYvRpFEq4KYhkjRmRZv/ET2AgFbFYnt52ZUsQBvu12uQO\n8CO8NogCXw9eEuBJ/ZV1cV9d80hFu9+uN8TsQNw7ogq5b178J+CcmHQQFN2r\nNtNIvQgqK0y8E9v7TuYVRe28YQ1mYZrEGYFooRrOdjBtR78NnTzErd9Zoxvk\nHYw1bTJcfH+SNXlqT6VStogpAygvkgH6WaDm0m2BlHWlCCtrnatg95dZ+5Zf\nsWW0VTwd47sldP2U+kOB+wr3H4AdajPIeizARJEXnrIGGevCeZYbq3qBxp7s\nGjqO\r\n=ioGL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFEzleL+Fy3ZXL4j9dGyLA7Gy6b6TJLQAk8wUDIL82RiAiAOzgg4hq4Xc8P8V0YwEBXqNyQeVSbXqF0wFPqeG/Jqrw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.2-next-1596220109-18de1ce5.0_1596220686940_0.44378392740478856"},"_hasShrinkwrap":false},"1.44.2-next-1596221461-45aa9c9d.0":{"name":"@xdn/core","version":"1.44.2-next-1596221461-45aa9c9d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.2-next-1596221461-45aa9c9d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-S05Pmkq8WZxjn8K18VVRNUmMORBtJRAvoTPH0itMPPBcTAzxVTYRuylGaIDZ4lYSKPsjV32X1vm+KuKAtsLMnQ==","shasum":"253f11eef88d8c5702b47353ee6354c251ec06b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.2-next-1596221461-45aa9c9d.0.tgz","fileCount":135,"unpackedSize":574896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJGisCRA9TVsSAnZWagAAeecP/0XIgIZHfH5hwkNwHgeV\nuxk7UWUOBAiBCESL6cfXds3Vfqm0GQhYzUPaJ0NnUFBFHg2tnyD4JunuR+1W\nnO1WpgaCytLlCiChWHlA3PHjn0PBmvbFsO1y9n0xbIbGO4YrJLlTJjNSvir1\n/qkvFspuB+MrTxmTuJE7U1jNpm7CUq9Otb3cU/C26PP4Ih0Nnrh5KT+a75DQ\nl8G1jIuWYa0Uu9LNmwNnV1q9ighhsgd40sZdaJkVsaLBgBwLfojrTKewSSKM\ncHWguwk5XHnXn/OHwLAOYEBAF3dCp/QaBLvtQuGWwfWmHXHZu1M7fuhIH/z+\nZFpVN0iX7V13wbXznPc0sacQQDfhdc3a1I8koZlfSGTVziDR5Z64y0Zq3QCD\nzGdX2iYEYQoFw5uPkKzfrr8F5kjfHoH7wI0/u3yVM+Pwnx81SaNopRcjykpI\n+K67yPmmRTbsTfbFFVHtDNB1vl8uEyPXGtFDZvAdpwo9Jhaib3xgPKQIPPbv\nZ5eVoNPjYEVRnXCX+B5A+DMP5H8RxyR/SGe4eonm+TgvjS0jJFPp02mFvjIM\nfelcywkipR9DsVnFIGlYfQKQtzyHDCXVpylAVWuzIaSy5ztADLaqX79RbioI\nrNXi5fAWtvOu11xrr8izy+xplbFxSB1/up/70FP77khHCcs2QseIv1M4Xyz7\nu2Jm\r\n=hjFx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcmMXVXnDHb1NGMX1/jggE1Q1a+PQk+I9cM1Hk3X7gJwIgKC9ssLnZpbgy1aHmGWE0uWShLP9jReNgAZez5rSotPI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.2-next-1596221461-45aa9c9d.0_1596221612303_0.945096230854739"},"_hasShrinkwrap":false},"1.44.2-next-1596222428-298ce5e2.0":{"name":"@xdn/core","version":"1.44.2-next-1596222428-298ce5e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.2-next-1596222428-298ce5e2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-W9vJqQk2kY3TFG2v7l3tfO6WqbcUGTp4mxD+Fd8e+MM4GBEv/3CgP/qZcHYmrM6V0B+S9e+5lIMYNXxIx+IWGQ==","shasum":"569460fb789302b4ee6322e5ea0cd1d402ecd3c5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.2-next-1596222428-298ce5e2.0.tgz","fileCount":135,"unpackedSize":574896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJGxuCRA9TVsSAnZWagAAtFcQAINKCt983tNoPdIA+4Zx\n7WzTJ9zNTlHZKTSUTCDagUG0SW5ohyZIvhTtESxApbwUphoMTlP7fsxtD6xL\ntLOgf9n+fXXsf1JEl2KUNERjOdz2tyMmhe1nq3oRQ+t3mdW+OxufOJpKhUl8\nDqrHeFlc3YFQSnHCG7qOBeHRrbcQEbT1Npz3FHc5Hw+igU1+oXxlbtg2KCMC\n1b010mJQsLIfOXYdjjb82Tr9bYtc5NyIJAJ2VXzuFb/XdexH9OI4gB6iWXUf\nyyuJtrOfq/e4pn6xPZjMH20Gkj04TXsgCQuIAcmr3LgbYh7Mb9D6fzF8tMA0\nkw2imHWYlDX3aoCYZzy+ouWUH4cWcqAfeZ1j6ybvFnFX4lQh2mZVTn8SZEYE\nuCM1udZn6qeSzzQWIETYQgb0KrpgmVqLkdP9Z6C/Kl+cGxDKFW+y8dR0ECAD\nEsgjnnC2uApkw5NRmkHdfevSuwffa2EoVXaBk1+1ZgekpB0HbxZXCDY+S+KN\nQ7q7zCrmkr9V7I5Ny9mIeIk9BHPJQNDKwwa7XyS07h51TSrRrExkMuvgfFGC\nwVkm6Dwwm/LjUaRz1WX9PPsvic1Ve3NXrhLThSc9ZJbwo3XSmWmu2i1CBasR\nkEQas4f5t+So43gaC6FtILI3bcrmLIVog6U7u06TpF3tbmSNN+XACTmESQwY\nTg4z\r\n=AI4A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhkO48KJ8cSYd7CWfbQuDgKdm7GfJtgZ/QfVHEbobXrAIgNWW3j5szsxScKHKijBv3xVjgYjwJ+9XjjY8PZ5rIKZo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.2-next-1596222428-298ce5e2.0_1596222573852_0.5854557077049674"},"_hasShrinkwrap":false},"1.44.2-next-1596411906-eb40c053.0":{"name":"@xdn/core","version":"1.44.2-next-1596411906-eb40c053.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.2-next-1596411906-eb40c053.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ziXRYn2nfrad+W1j5P0bpTMY8dhqUXjpeYMW7PXFQl5SltdQOToq6qQFhXAVLU60KDLGsZDiDe0n8qyGz4GP9Q==","shasum":"99c8adce86dd9d4003af0b4b8a2991bc9c17878c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.2-next-1596411906-eb40c053.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJ1IfCRA9TVsSAnZWagAApJkQAIHbpNbWjMWCVppTQztM\noZE0ysOjvC+L2RMqY27vXndt31as4/58gSMlz2K7iZwhc+5yvZjNOskFKUW3\nt4SZ7U3Np0rV7ytXA7hvsDCNwyfY+m8nYL6ZE5cMBpyoK2A2EDFS2X9ZWAEs\nMMiJH6FFzQYQCEpljCR9fdwl6kadePYGtUNJ0WYvmP6t9vavQj8amzfeaome\neLyBJh6SNsFdtTYyXjUhIWknVW/0sw2a6JnlgGfUuxjrnxHH4AUtpH1gUQ7e\nTvIGPHweB+UQ0v5/AyttCOTIviCGPx8lxe0aaED0v9bJ4yXfdQfw/SOEA4Qe\nJjzsV6uCKYFzzpFkxZx7Vcdlb9qRm4twdue4+jVN4SZyS/gFojihDiQ1fzDX\nznUWP+7jMaEOBo5bOWfiQL7aqs6Nqvwxh4S2HlODvb7e3pmhE1V00pR7M1bu\nS8hiRPj4gNP+CbIO4AQUZRoKPbyKk7zebjpS+Sqj8YF+P2y8XFsH2l2fkk1L\nmSU700JApKiTxI+wdpRBuKpeNReq8hRDgxe0OI0hWiyAzd2WTjsR/m2CGN+Y\neK82hUwhN9/FfgP8CLnHnbhlVzclolZUYxmtfppb1D2GoaCmoaoHDkKyyk97\n0+NNi+m9sfaBvsTnD6NH9uudm315b082KCu1cFhXn3jE5yhT73DOYoauXB/G\n23x6\r\n=FC91\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6diDF88W1Xeszjyw9onzQU/bdYaNE/txmcsz2jBp2xQIgH7uEZQAfuYAwWoqxfNCavWT+9yGRu5nQd9nwB/u8UPs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.2-next-1596411906-eb40c053.0_1596412446564_0.6710534150592025"},"_hasShrinkwrap":false},"1.44.1":{"name":"@xdn/core","version":"1.44.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bRslZwaElAbulLk4xt5QSd9LAWRll3ddWzK1AAQdAist5lJCVboRLTztW9bcIcPWkAsFD6iLG61WGmUyPjd/4A==","shasum":"cf7d2df9b6237fd39aee96b6dabd8221d2460889","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.1.tgz","fileCount":135,"unpackedSize":574809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJ/15CRA9TVsSAnZWagAAWnMQAKIvd6kDd+WN2OeMeQRV\nZuK/d4swL1F4btKaY8x+QuKC6jrjM6rMb56pmRYYBcnAanzLimF5AKs/TK+I\nYngOOZBb3bGdtMDfLouJsqbPpzWckDnfHcjw/z6EZR35W4oxD+Pypp7ASFne\nuIhMauAKcdLS0iUFxcljbrxgFHly9/ps3Dad4CWETPa1dM54VPmr4DN5WkxY\n+QjYfYimSK46Ohv5eKiTew7NSkKDIYi3OV+FcnYzc20owNjyBq6e3ntiizij\n+WFLKNj29QSRPXt7qKjqUvKwWdGOj5vUMcEOAoo/nmjM9YtsqX9S3EoCk9K6\nBPJyenJhEZnLeLZNNFkeOLqDbr2BVW94WqwPVGWUEcdcqvzZFW/KISjng89O\nBipr3vQlMPZINMXOUu8/UbrvMj87bnWCWmtDkOfzQrsW50EcOoLh28TCLVkx\nZtq0gJzFSD9O8HLXyjDzEXrp8PROPq9XS4BSQ6W0GhJSQOYDhH+MiD5MUAgg\nBFbRoTM8Pb9ww2ndr2wE2wr05QW2u/Ft6lqz0S6B72C33i28HB/gMsbyJo0b\niQh1ITxdP2v57WGjh3mwlbukr0GrUldL0a/G7RDUeA/x3BF8xrZnD/87HWDU\n713Cs/NsEFzWlj9dnoLSkHfGbiIP2c1DcrdtYR9PulI1hEwIN73Qs5OkoEH8\n9t9w\r\n=cR2y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGpJdpcnVKYukFk3JblxB6z/Ab54j8BKzqvsi17ebyAuAiEAvuGQIbMHVqrZCw9/zkhXblIZGZYp0CdifWN94k7ZUwc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.1_1596456306140_0.43112672778022865"},"_hasShrinkwrap":false},"1.44.3-next-1596460637-eda6dd32.0":{"name":"@xdn/core","version":"1.44.3-next-1596460637-eda6dd32.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.3-next-1596460637-eda6dd32.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-iLKhVao8TbNr5HPrbTmIYROWFQkRYvafQlYqyKkwFaCjQWGH1eu27bGb5++FLHdhQucna/qsmpWG9d2pEfVN4A==","shasum":"f0334aa1166af1a57382341b61dff56d4668b9f4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.3-next-1596460637-eda6dd32.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKBCKCRA9TVsSAnZWagAAfycP/0HGpjWFZXXgcFdahIKX\ntXqbND3AomvD+V51PGcDna1rlEj4QsVBdPyHUHQAl+qFbj+ir0af6nwPCev1\nmApSrTJ2Vzu/7hdzphfFYAOBRvl7P2aBBtepEe4oGtzSx8RX9SCkbJTGn8KG\nGKwGMEWKTDpZJywpsOCB52VNAaky4d6zXg/3JgVhFZ1hr6W8HvyXuFSkFRmA\nT0JJxYMx26I4pPn0gYtiSOsPvxgKqzbdjhpLEMt9bHvH197G5WsQTneWM2Cn\nkkRb/kzUlOaMEJ99J3GcEmbAu5DIUpY+I1AN8q2Icj/ELz3SuqLUC1iUZtW3\nOiUBn5ThL+ykpeWv9lX1KzUQnQlLrz71W1ePDz8+2jw00xk8l2g8gXOLy6cJ\n3bwfJ23YmFnJDc60E/jzktjGi+hOLiDJRk10rdFoK4lvliyrFD1z8652cdVW\nS9x5uc/Tunh4pEPGYrsEgPyRjs0YD8r+vgbR8cKeF8vJvO+APJ5g8BbIcPwr\n2o2k8bL88q7ZQ+gZjpggwMM2y09KoI3RMgSVDowwq527KW7XZQdOSpExv82M\n6aRHT6oP27DOaK0HYaj/Whw3RxXeMXFSvZoZAFs77tAsuoYAfagR+8GObegQ\nCv7yLzQyceCd4dwg42lVnwBS2Q/AzwF8BmSF7tUIl1pDnk34TrMWcfxMDosh\nfFxG\r\n=i667\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGfxomCR0C7eCxS7+5SAPj1jNldI45yHO5+6EacMSSzHAiBYrpSMoGiuonOL4Ob+sDs4BsWveMu0BgL7i6B3TyS23A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.3-next-1596460637-eda6dd32.0_1596461189380_0.08823968911891389"},"_hasShrinkwrap":false},"1.44.3-next-1596468860-99c97c9f.0":{"name":"@xdn/core","version":"1.44.3-next-1596468860-99c97c9f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.3-next-1596468860-99c97c9f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Htt42RfxTQM7LzNZAVAcaS+HIWhDjDE+10xK1dfK2SaWO6atRy4w+cYRj9AguN1LqyHlPL9Mq+sl7FnaKVzayA==","shasum":"f00be208b8e07c5924c8c4c6bb01d3cdd7680ffa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.3-next-1596468860-99c97c9f.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKDCpCRA9TVsSAnZWagAAykwP/3Eq7IBCVpOqwsDL1MvV\nxgJWPAps8E//QJQfTgS3VkDOVPTtjT5dvG+X0fFE42vEO7EWvYwPuwgHpLK1\nyHQj2Vs9X+w0Hh7aqvwYYHGRdW0qzGd23PNd7hPX11etMgyQAfLwfBvJPXxM\naUmbmeNJl0aJCQh7wwAQCBW1yHc7XK/0onV0oMRPFCSGKyu1With0hRvFOvJ\nm0JHlJVIDp43+8CW48do3H09UGVQFQFf3VW0ExS/5fo/4s+nh4gzL8dj1yEE\n3bLrDPsgz9Dp0iZaXwuzuS2GSTD5ZO1uzzubWUxfoAWmg2Raq0u9yR/SRmEP\nVD1AkNluTLEv4H9f3nQIV45gcbHJs4HsXA3C3k8QFZF77ztnV2n7vw8BIcg6\nIQqhXR9yoGipXe72k7yaDh1QOZzYXFegJvvZ5l10/6mTrULZ2milDjzVfLNh\noLOB6spiYQHocrA6A8zGSTgiBy4XK4acl3cy7sIUs2Unp4xWWawpr9HSGB52\n+sW9JD07sOPT9qggl5Yl5nowvUO2NtPL44PoGLagvI0uyNvqia3hNWRo2PQ6\nlKd062eaVyDJy5or8wBtj917zH0tuUmAAcGZPAt0TSBsbApJ2V0Og/nyu0Nr\ni9yZKeuhqXt/vMyaqAiuv48loGsaOcjlkazC9MLiDRaA7FW+hTFdCk+7vmOK\nFZUO\r\n=D4Zm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4s1YI5w5jFZ+CbVy9G1qISsyOCoUZL696zTpoMESnMwIgPNkvf2s8Bzz0/QEq9t/z98b8E0vGesjI9jK57/K4PGI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.3-next-1596468860-99c97c9f.0_1596469416560_0.650729904290893"},"_hasShrinkwrap":false},"1.44.3-next-1596474634-7d70c2a5.0":{"name":"@xdn/core","version":"1.44.3-next-1596474634-7d70c2a5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.3-next-1596474634-7d70c2a5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lfuWRC7gzqnLGYoJ/SAUtuP6NtAEJTmHUiJBv4846ZezTA+7lLqub5ijwo0BTU+wn3YN3AeKtptA2z17njKnaw==","shasum":"55fbf05265eb14850a76eaf99d809dfb623926c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.3-next-1596474634-7d70c2a5.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKEdLCRA9TVsSAnZWagAADjYP/iVB9fBY3gLwp98ySOBK\nAbNrQKp/qKAtLt4KG8wAn/pi/7tK2RyWMkHZ/zIiVTE9J35IKtX8xyhIDL2Z\nf/u9Ojemhsds/YwGirdIxnbqyYFQ8tDcm3etNie7asDNOZ/Ajo8n6mDboHeF\nEGW/h9+PIJNqOe4IHfOAjkoDMhAXtkeIAqmc3rWZGZX4KZjz3lgwWoIhFbp6\ngMuUOQDbt116HSNnInKAL0GAYfymDSbHDWTrnH+0g2V3MO+LeoOWFS/fQ+ie\n1IPURh3ZTbIzxafQkrKvcayh1lU3zdYD0Wik+BhG3KbDFNtrZgHqMPqoD80l\nGF25aJJDt5R+9j05/aPdRci0GoMFTitsFQbiP1w9s2x2jHeE8hUUhUBcmiPd\n274444hB+aHsNZOuobYNxBUxjfdf1U89AbZgHKWL7VK2GbsJ3c1jgLaplE+W\nimOqHbwCiXp5Bzl4uy1LrkHqO80R2cmqoB7ysKd99kzm2jfzVQyOqfyV7ele\nKcsDMY8WPjOFB9UOSmVWn/jiiuqUTAVpvu2cF6QmvXrukOFbGVyH9OIT5ClW\ntWdYc/ipHaolUtXzQ0ZLkbAVD1+V9Cf4ISKX9HxHGdZee8jSZLfj6w9EdDgS\ngnJsQTiiCvAdxe6bI8l96pXh5xD2prrNsF1rNbyV+BHUDDhXYOlISJohcb+f\nmxzy\r\n=ub6+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBYE7w7LJ3Qq8thveZVu1Rks+44x/xyhJnOJf4SvIopQAiAO1jvKbRsED8BrB3z7nNbrnEXA7NiNJrLO5z5YHg+iwA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.3-next-1596474634-7d70c2a5.0_1596475210484_0.4093397573885069"},"_hasShrinkwrap":false},"1.44.3-next-1596488022-9427eeab.0":{"name":"@xdn/core","version":"1.44.3-next-1596488022-9427eeab.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.44.3-next-1596488022-9427eeab.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-F3lmIA8QQ6lH8VgS8DjBYbDTvcSRdrszNS5+2NZ4zktdYVLTioCYjOpMhVl7ytXgrMxU03FG/i/5FyvMb83UGA==","shasum":"fdd835ddbe208729d2261b1b9bcf3764ef5b1491","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.44.3-next-1596488022-9427eeab.0.tgz","fileCount":135,"unpackedSize":574863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKHt1CRA9TVsSAnZWagAAIUQP/0B0GEkFFfGLN3YaDGDP\n5v0yZaz1RKTI1ovOIk4xBxmh3VZM2mLGx9I+qL+t5ivhNX793JuGQg4s4uyC\n7/7eMJAdSrXzwnBy/WX3sPqF1BBrGS1aWc9YsmTYAx3uQOVRmdBoViGhx5dn\nVLvuL8IQa4TQy/qh5NP3CHO3GwZYaQ7r+ik6lpKQTYBEsU0DOmM9NRxbCxxD\nK1iJoDRm7nIZ3cd9bgJeoGyIQMGCLmM2d472yaNIR+NslZq/NILejhYtGXMb\nhm6D2lnmLFUtO0piIAP4joSfX5RaOKzTAkcRaMM+QHldYdHOHCbb6KBf/xE0\nYdiKtBkDllBWfk7Oe/6Oyd7DIJY9WvUegAeVOx6lrm1HJHZ407F5pJ2FJ+5/\n7UZYqrN0FzhtY94Ox9P9JOfqdwwlG3hUjWwyFE7uV7NkAZGuE1ujPJK/UzUw\nYzrsTGKGX+fOMMnwWVeKbZakbEhWWwydSFp445PXr7Ph7Dhm77LFbUybJ9+4\n4qASDu13aEd6UYziDlC44yODtvDqF++0i3BUWgZZ1Ykm69/ZTOOt9KQbDqbs\nOG6VIPw1Gn9ej9fS6BdL2UnBPPNaKHigvH3ey5GB5AmTNm+mAGpXkWBMik+D\n0KlrV0Xbl3vQZ3w1Pqqyqiax7uuMVkmNfRVDR/RGyh2kOWBxhbI0hqBSPTxZ\n2Bhe\r\n=8Fn/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPh95RI/3XzFEx/+yXgzCIA5OdyhJYuvtLQ95vhqcO8wIhAJdHrd7ogNt2QjYpUvD2NFcmz1iA0YkE0vGcqH/QZkFW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.44.3-next-1596488022-9427eeab.0_1596488564828_0.7367514951035976"},"_hasShrinkwrap":false},"1.45.1":{"name":"@xdn/core","version":"1.45.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-IWdSTjsF1asPPlNIn8fSwKs4rwDjr44Ui7Z4G4AVs+leIJ7y3zvGmZ10KuhrutCIHKuoyHL2TS9/dEMtnuaCYg==","shasum":"07f613bebc8e2e310842fa8237a6aedbea2b39f2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.1.tgz","fileCount":137,"unpackedSize":584853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKVueCRA9TVsSAnZWagAAHq8P/RToj+r74fEMr/x+i2Km\nJADAw4gYeq9tOnaTkWiQGVKwT1llXBbwoCpWTPG/yjP/2+0BR34UjlY8wJCM\nq5IVRKDiJIBBCRmvuTbrETLLs20qgBWm3SUKkSrj6P3KTlO1C7O6lLHonzXZ\nP+r0Gn0ZALOW4qvZr2IP6uITlkQWji7rlaaj2y6+vV+3THZeXIybuv0Ppuxu\n//ylBGli/Y7GkR3PBnizI+plSeJxgSMEo1l0xnrB06lyBBdWfjy0DAOuTp+3\nyq7pk8WJOllsq4I52JrtPG159Wh599VTaOAWLaAH/ZPHsgkNPlxEteg21aCf\nAKMe3nNKlwO5pAO2m9EUpRk37b6qwdzgPeujsShLQZByq2I2J1qzHvsAaJ1c\nTte9Sj4rFmJPYgSw2TujLGgSB9wn32mbGYCCHzA5O3uu8pDDptEHm6rqkErA\nCS7XoUXE0bOGaJC15KFopa9dxsvf94iRA8dM8IcsNWc+rSrwBQ9DwfBPcOyw\nVjMsx7/SOalJEXiXv6dZtHwatSf5ECnHzyUO0JIgAZVPTNWkUC83kpncZNg9\naCkO47TnqVPvfT5o3+oe3JkOpuTCPYckRJDDy70CNcqfU4LUv3i1lHPSxv6I\noHoPeI4fxU9JTx3oRQkQtLyDd/EnreOm9+o9QZyGMJIlYRasQT8LccrvamcP\nRM6W\r\n=h+zg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvRe7hLrpwMCcbztcgc6fa3vFOSy6Kch1Lj4z8SSCG6wIgGBIrrClKABJEn1Ke4ljQTwWHTrvE2AguEh+JxdYX3/M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.1_1596545949933_0.3298212259425204"},"_hasShrinkwrap":false},"1.45.2-next-1596563413-5a5ebb15.0":{"name":"@xdn/core","version":"1.45.2-next-1596563413-5a5ebb15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.2-next-1596563413-5a5ebb15.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Q8TuddlIQOnqJwoAlFniZBNTIJGVXZ1vtZd5OtAoKzHTOGqAoxXS1tcMVxNHfjugQaN+ji/NVAIXYsMSQHolIQ==","shasum":"7248fb5998d7e3e29ce399dcf13cde7ca0c92e9f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.2-next-1596563413-5a5ebb15.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKaIACRA9TVsSAnZWagAACNQQAIaG+/4fK64FIZO0kQBb\nwh8cmvbhOllpnaeqDfmj7g3IIxgFAKrvk+nREd9JaaLKgSLPmsMoSZcO+4za\nz6iS3gPWleu1cqTPT2o2REDaKj8dzXZQmsgDTSzB1TCMYo9Zfz+hYtTSl7FQ\nLuZL/fx/fJ+Ws7OAskJfIWI/UcfL7kzuUM91XLP3loDDv4BY7p0tI2HCB2jP\n8jMjY+PEk9Dr3cJF2Fn1fHDzNXdnKKRwErr7E3Ov1BpHZo68w/F7OqSpnoTc\n4dBrLCpaapLe1b7vFkXg9QQ44y4t89sTnUH4xYFBSkkp9Vy24jniHc+6dmRM\nFom/nS63P/pfHC85UtIYU3rkCbEZ3LWr+OuQvaOraxgIy9Pc/NvMgX5ZvnSY\nF1H51bBE/DmlNtCsoQc7eq9YeTg6hWq2s0Aj8BGFRpF51YeI8q7d4A2qE8dw\n3VPeNTv487GMM+bdisMKSge3AEyYjPvLvB94oLusIiYjv2+SQ50A1SmvBXNX\nIyvNHkQcVbvpzm86NP2xHGDuJj4nMdzyz5kSLdipeOjynPu+AutpRqEnY3nX\nG80LXXnBGQ7y+AbQzNa67IIvUkbb2bw5fqUeKNAsLWdoxj+jCxxypvNywBMw\nDa/LRot6wRwYbDjC7KSsefqXT+tXJAulfyauyGM2duYsTwMxizGLBcjyX5Z7\n0h1d\r\n=Xwdd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEjDfm5IsATzA0p1lvshJ7GCXH9Cws581TiPsfPDzOWUAiEA93jLfUsD1trzHrFfvaGep4L65Euq/YZ13YHK+A6KqSI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.2-next-1596563413-5a5ebb15.0_1596563968218_0.8396919600586201"},"_hasShrinkwrap":false},"1.45.2-next-1596578728-3928707d.0":{"name":"@xdn/core","version":"1.45.2-next-1596578728-3928707d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.2-next-1596578728-3928707d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2tVqlA2KN95ivRHs2VxtCufaGJZhlrflhtUzIWAAPmyzs+F9mWGlJL9M7wH1cu93qrN/1nWcjNfvy9mgql53+g==","shasum":"b6840ab6bf1ade7b2fa62b0c4d2156cbdb1cc8cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.2-next-1596578728-3928707d.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKd3ZCRA9TVsSAnZWagAAdYAQAIhNzl9Mkj+PxjJuyGtc\nPiX4VKeXPM4TDg5cX8HCbBDbdm9rBLVC5fjR1zWc3u2m/o0e/0bimAuqSwh5\nG7vXb2TdmbiUiCSbW1fDODTWa203z5x3X23MAxa2ukZpQMh+OfpPXshLOJYq\nI54WCyTcsL2/DipePZGvstOBpEcoNrdRRZkTXDUF9GOMdjL+95HlZNxf4Ze3\nBqb3Y1vDa7220SJkQDbly809hKjxz2gyEPGwbdfMZVXW8lthCMTBaLTCZ2p1\niT8aV75XWI8bQk86dRR0CHAk23cXL5NGTwQWkW8xSEhTBaWSz33vxvDDJq11\n/8xbkCPPlvTW6y+3JutcwEX8OxeS/Odtdq5OOxZCDzKO0Wsx0icpseWjLbPR\n4BiAWDQiD9JiIjalkwUJg/CzGYGCoFbgIzW0uV0rfJs5rkijz8U2Aym/PKBP\nY6QeME8WqIZjXdz35bjDD4KT/BihEBDzjQ7LumSoyyLPmEAmbFzG/kCDmiDE\nfD0gXA4mrJh/xnBzm4dhfcTDb5afkjmqudNmc6JXUWQtc987qeaCUkhC+b46\nDZwIbMwjJ1Lupet4pX/hntRh3oN86m39d5Apj3A5y+wJAZ3zv+8jHRQV808S\nYsfAGADEfpAitFhL/HhOQdPDRyQGlS/xb5q9X3rIzQ3yvjQQAQ8WzO+raxU+\nNB0g\r\n=5i6j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOnptxhqgBa/zjmgZdF4k0hTEajxO+N9HBKW/xdSTVAQIgcvGS1kot0g0xpaBjO6mp/hyVL/aA2eTah3C5F0egALs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.2-next-1596578728-3928707d.0_1596579288781_0.5504965301751872"},"_hasShrinkwrap":false},"1.45.3":{"name":"@xdn/core","version":"1.45.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.3","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bI+/Dew4p3BW4whu3Iaa+lVk7zPR0/6LavuSjcFVSpHvBknZ4Y5kCgoDIlqZ07gUCecAYewtrQ/0QDQtS0+gFA==","shasum":"9d17c6491da851340af1401a3e0a5a65048d149e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.3.tgz","fileCount":135,"unpackedSize":584590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKebrCRA9TVsSAnZWagAAPigP/3kkqnslTFutOjvSbNfO\nmpzwhz4LFp+pWL2Xv3hpd034bQ93tnEd5p8ytglw87z2X+iAnGIO8nK3Ik9x\nzVnyMfr3crUgMkYypKqBt3/cjorGCQiY4njlZiwRM2oFiXmWwcFMJWPuN4MC\n25+OCG9Eh/S91oHhjEkhTN/AtB8iMO6jZ0X8PWTTiswnkhgFWbxafF778eBK\n+uPicdbdL9L+f8A60YF4fEZ1YZvvv2qPJIph9vVajk7bV+ibPK8eXDwgI+G9\nOBKfLBPoxlDFRpuBnEFBcZas6MnFWUZLzEoRaNrAcITeMfkBuaxQtlSVSyBf\n43J/RHmpPR9qw7WocKSCyNVLE76nQ0mp8myblqhVwM5zNdzB5CDj3hYgQ+yn\nK0ilsjVe4DDvCahGH3ExxesHuVDJ630s/nMQpsvruFjx2K4OY4AgLBuViwzG\nWdJXEto/HHFYH3gY1KonALLrrX2c8rud9VpufccxyMhNsTJTHSKPM43layKr\n6uYasqlUqYNjQTZd/S5gWpfaQbq+FpnZJMOTFCzs9t0IAWGJZBR4T97urQny\n9ddwX5z3VIno62XsB7kiMuizphhQUa539Rxqh/n1aPuYDHnjMFems5bifxjQ\nVWedINKRqkVU7/rctNcd7hxegSojdG27unMNizAOpkD5vCgEqTvU3MGOX21u\n4yG7\r\n=9F17\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCS5ZrAkN6+L1dYIrYD4HygT0SAvYD3y5b1a3wCyEt+UAIgDhAygb9WlQLGZiEJjD6A45FFzzoYz1eCtF01Eb+DsPU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.3_1596581610817_0.9947934773743345"},"_hasShrinkwrap":false},"1.45.4-next-1596701713-cdb4dbac.0":{"name":"@xdn/core","version":"1.45.4-next-1596701713-cdb4dbac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.4-next-1596701713-cdb4dbac.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cGCsbbRMk9CCEfYSW4WNf2x2fw2MINPu4DM8hmPM8FXQbZ3OtnnINVMYfFIZgjrcJAgvZo9zKDPg6/mbhjlROw==","shasum":"cf729592bf491909d8896b7a0fd1b472f1dcb2f1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.4-next-1596701713-cdb4dbac.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfK7xmCRA9TVsSAnZWagAArNoQAJNSMpZigzGdhh6fN3VR\ncN99v4aAjqHMJ3t0vubmbyPiwvoy/vOeZ+tc/rq3LHRcc/8uxtCJU8n1rbpb\n1ljUrJX2wvYzXPkKiObqaE76M3w8Q4LzJNy5POdAPdUYcd+Lwvp5jfl9Soup\nUGIGHrGLGRk7bZael18xnfTAU6v/ebB3IntJg9c2tLf11jyM3D5lseVkw4Vd\nNxTjXUdRmPpJNPvPoTgSwRrtG883ue4ZKE8zJzp3oo+cyIeUPMj6H+mCm69u\nNKQ2YdsnyfkE8ESEXnt24xhIUEBbsG5us62MBya3e7TsCcYqp2TgUIfPn/fx\nkr7CJtbWudi1XmVAf9rvpshc91xo1uVa1ABnipP0BKWLeTQb6GJOOmstqqHz\neaDHmCftunAB2GwnECBKoSB7BmDGtNRlsQLsXWcK7UqfvlikCTNMNi4WZQWz\n7KYVjn8NW1ewSshRcZhlOC6BO9RrOQXwDD39XLk/qYdBbVBg+o1ZLZ/iAjtb\nAR+i08mFwhLutPN7HTNUf/3aq44NeW4guUNXEtcaHnEuyZq9IkqDfsrcOVjw\nbCCbJCvHGe9meTlMsdxaFeJHOrRZ/uq0/WkH5wmcdjOqoDfFFCaOCe2fW6U8\n8hDT39IjMJ3Onms9Wpq2QqglvKg40qh5Q0IHKXxVOyc45dwz9plzVEjfGgXb\nO43s\r\n=JGZ9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHuBB+byB4qdAjBnhieOtf4ggnu+rh7SxWFwZshjbMrAiEAkLZNfwydAsxcAcGx61UrexOVxwI/l6rKrY/twD88tTs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.4-next-1596701713-cdb4dbac.0_1596701797672_0.06934768317112838"},"_hasShrinkwrap":false},"1.45.4-next-1596704983-7408682d.0":{"name":"@xdn/core","version":"1.45.4-next-1596704983-7408682d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.4-next-1596704983-7408682d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-NVHIB2DmEZfBMmh0g5Madh9MrXDPeZOAB1bOWPuv9J2gIW1Iqr9CUYWDsdvXyx2Q75c97Nc5IgOaF5L/6e5Byg==","shasum":"24305d5275618901f4f957bed9c40e3fc02d26c4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.4-next-1596704983-7408682d.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfK8koCRA9TVsSAnZWagAAM7UP+wcXbV/ElkDXJXk6dRWO\n1RZTk3yyRiBS8Bb1tZRfpqVDuCTv8DlEsug+crTVdSIR81hPyICbO41M6jfF\n3ypvT8cy49OPaHWiWTukZiGcOdbnADX41XMKqEaBYPyeFvIQ4tFaM00SubL0\nPakWNnjd3LEM4mOiCcgk/xeWYoVFawl7RifBauaDHmnexsiaxFtdXnC6Ewg1\nR4o7jW1Elo6+sdwQQ/MmtRpexUQEs1EiAqjZz5krOk2Ups5Cpe+rSvEK5y7A\nj8OBrhH1cuGmvq1IeEwzgclpQpKuSCkbd8w46G6No9uJQQ9FBYGyDr0Tu2hX\n7Y1/CSxgomN4XFYHQjbTrJSN8e5REUSrrDR+m7Bwd8bFtN+bcn9j023FjwF7\nMXkHBf4paCnYjQBTKb/IzrCKIw+RnoIVMnmMroFoMgg0T+gl/gUhfXAQs9uG\nPUTq2fa9lGeTuWqoAo5FQUGhMysWXjFxP/i0RKpuY3NZskI04GQZ1qiOxjCI\noMc9cCTY7bJvodL0VucCrHXQ+6WcyalJDe0lYGKLOuCGaJsDe7wTFcRBjG9n\nMZS2ARnmKdHdbhBrWWTEnLlItoQdgUJT6tBe02QwiSSEvInYOoAsuz9rQIU/\niOKK46G+CezL6Ya+wthSJAxLQwf6bJWvkdy98u3kv3uL29LbmzpAhyyl9eYb\nBFfK\r\n=58cu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFzly4r8h0PRw+RiG6/QfNpclI7WZKQkNVRSJKhSJXWrAiBN1+j3rr15tAGyCP8qR7ZhPG+MBcg7yVieCr3raoB/zg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.4-next-1596704983-7408682d.0_1596705064469_0.0818359880599393"},"_hasShrinkwrap":false},"1.45.4-next-1596713300-529d7a6e.0":{"name":"@xdn/core","version":"1.45.4-next-1596713300-529d7a6e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.4-next-1596713300-529d7a6e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-k7HpLp0vxkccOVtPX47o9SLsccypWQwpsVxl7eRzaTnDJabrcbp4LHfYH9sw0FdoE6YZS1TyUxAGyskldxfdTQ==","shasum":"428bc881984ee2211fc0dcf03d70d749be7ee384","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.4-next-1596713300-529d7a6e.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfK+mkCRA9TVsSAnZWagAAxIYP/jZadyGmZ8aeJTGVxzE/\na0DFkPTIeosCyIRjLFY3rAdW5dRHpvjP3j6o4oTTEfmGHTuqhmBLmTJSCG+E\nGrxFtQCAPyak3ifHDPuvAk28YMQfMjifN2/Duphtn9y8uv5i2QzrvBIbQ6nJ\nfmFOPIK8ITDzsgXI6VjMyO1auduDPAO2CQ8ml2nQMDapGQgbZCHP0nFIYV08\n0pVN56083rvBmV4tQYzzsxMZPAbSXIqpfJJvJwAc/pqE47FVQuwgUbg6lh1u\nCFzZHYx+7Nh/utHEJ21YAfwHRq9n57cEGiU40plhh/FQlMDnL6Svm4lrLSV3\nnfeighwoYbCma1Rew7lG3D1C6QGMN7QczeQLanFT7QDdL+nkoynRNQv4TkXa\nwtufz9L7qkEqGommXS945hWwWEG6ahB6TbAcRdHhfdGeHnMEH92CAHKdh2gO\nt9JGiILylzJMqI4HY502pmQiJL9XPnc8GYY4lgQXx9iDom2WqIAV/higxsA2\nlF4yA7QJQydowlzOrlvNFIRhGgQ6rtqhQYpKMVGaFF5NORlOlXTehwX00XcH\nl9Q6pGS32qKIFhh6ggd1UndFU7L7Dvj1c+5vuZ1S05b3HmBhCXj4nJ/EJZX8\n/xBppXGvlJCUlUqLCE2nrx0v+xkIgnUYtJrgYW91byiJVVipoFkbPaKG3CLV\n5Wm+\r\n=VAtU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICJLUmSDlffUIjNVctmXeydPXomxpEsyTyzq5ZiR/lDNAiAyshbyqk2Q5Hj6gzRsZJcoXXSJ4sxfDz9vdnqmMyF1nQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.4-next-1596713300-529d7a6e.0_1596713379450_0.90383629975616"},"_hasShrinkwrap":false},"1.45.4-next-1596714259-44b326b6.0":{"name":"@xdn/core","version":"1.45.4-next-1596714259-44b326b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.4-next-1596714259-44b326b6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-B449CD7+FHbMB7PWoAPY8DH+3MTpEsUlDigIoOzKmZx61007pfW72pfi1ePLaXICqbnN+C6SxlxQXy1Tp+V9ZQ==","shasum":"356497dc3b527d945a4587b4b1de4e9ef3d08d36","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.4-next-1596714259-44b326b6.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfK+1gCRA9TVsSAnZWagAAcZsP/0iE41x09pjXMC16Rys7\noynucpA2rBtcNpPfta/OcUDzcLdCOP8N9aC6ohOBADlPrGvLWu5VmEIEVceC\n4tX6bh1itDwnv2iFD7DI/nJsRGdcVc2b+ZvNY/UAqMzWx0WVtuFPypnBu1Oz\nWZgDxIXta9+nvaMeNSqNStvC8y23n7mIBP8T0LLF4RhilCtv0PnaiiBaQCpz\n7pzirKzRT+ZmLxEmQQyG8q084bC/DkJy1FGUGO/dG0ZLGoW1HxBjV4g72udV\nYuvqrDincYe9eSm65Ct0r7mM+Lng4lX0wKLqr/l6Lq80mNExA5nJZXHqC0T4\ndLhW9mtqNI+D0csnFfKwZ2mBRgjx/VckVfcA7zvuMlESY/ualk38Y2uk+O8U\nRy0GmKncihrn6/3fP+rD1zr1zHbJzMXovFYb6CkqBeETUBS1Eka4XJuGEfUl\ntFPQzfz/AFXJMzkqxL5tATEdiHoLoOInA2xKerttSNIi90VO04p5GlN/VgP0\nhq/Rzl8XIzJh0Zqepjc31LX5p+Parkd/dmMp9PLPKQU5NwSPeRzblziI4EQO\nL/S2IsSefUSfLgyBJAdZxDI7tl6zfspoBr2frsjY4d8wSO+YzFe8fBJhVbo7\nS0oA6SjAw7Gpeeb1bcEjioMkCP/gyUYINZb8Z/WpyHfLyZH88iWEzDRHZoxK\nsqUv\r\n=x1Is\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICB8V6ytvbO/KcQVQz/7dgHb/zpSyGPxRPkQFqg9bppYAiACmdpwtOp5jSwdzZb2guT+4GAl0Z8ffHaO6ubiw4umow=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.4-next-1596714259-44b326b6.0_1596714336464_0.9854107212537861"},"_hasShrinkwrap":false},"1.45.4-next-1596715786-1423273f.0":{"name":"@xdn/core","version":"1.45.4-next-1596715786-1423273f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.4-next-1596715786-1423273f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Buyoxr81GzIt29VRug398xKfpFaH0OS0YxHU5b1xwT9NBXeCobjqq2YY6CF1+w9zuKNgt6rGBBRHBO0FnRPJqQ==","shasum":"42d3c16476c07b90d7c433ea6969b9735cf978d9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.4-next-1596715786-1423273f.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfK/NkCRA9TVsSAnZWagAAyRsP/34eGAWbbSl8GDxpA8ql\nZYNIORmwEyCW9UlJoq6tgsC9oKXMYmflvfMKNDvQ4Nn8xG4LknrO9s7Wqq7C\n2+g8KkClKAGaq5r4woV3OTpN1eW21vSP77LIMkKBzEOSfjQwoO5k807AuCGr\nrquiqU3W2m4nS2LsKTZK2oncC2thxQREylqOenGCv5tcBZbMqh2NODTKtdru\n1vcR8OXuLWS1AI8a2iJ4wnxAae/2s5NSUiRqquRg1ihLsPdowMkjpYEEReJ1\nmUPcN+e0QJQiNjxT/yzQIZ2KOTeSxpMn+Usd6Ejw99DPX6Ase8nZ3or4uUTi\nZ8i0JrhkM7ykq47NFJp1ShXZpH2GlpexjPrVsNMQQf/zFDRPqO9aC0NRie7A\n1k5M0HkmQ221ig9V4k76l9ZfxZB3oUuEt7aAYXH1IW16ros1jEX0R6BBgc0I\nyJA94hIy0QNlRMitaxNC3jtnqot/gUKD/UrH3RG0NOaFy9Tv1XNuofLepBq5\nJJAlIud4iGDtBr3005O7yESdoF3Uvo3yCcasF4wOuO3rqzrx9rvYWCHvHp1k\nMUTmYf30+ZWfYHbsQF81TnHDvI3IPKRTdLEcJWkGtrVkK+vkUW+nOlvIXtmV\npF/gBX2IrXTzr1RWVgi/a2RpN25Pd4DF8WjcjryDcM45tMWW9hpg43/JURmm\n+q/H\r\n=3Pol\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDf2Ceo2FLQuiKatp6gts+e2QYbHLtuqqRNC6IcGW598AIhANUJf+aqJRp2ynMv7TiUT+RXpyMEv/ybB4Yyc/nt2JhT"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.4-next-1596715786-1423273f.0_1596715876003_0.3233976230482254"},"_hasShrinkwrap":false},"1.45.4-next-1596723283-44ad01aa.0":{"name":"@xdn/core","version":"1.45.4-next-1596723283-44ad01aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.4-next-1596723283-44ad01aa.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Y2OFGFyc8MMhoqHZDg76vq236jKmTlPrn0Niavu1exzKZ5WeZC8hIYNCfW9QwkWZ9Wql1u5W/bMKol6UzNhvAg==","shasum":"0b9889d3ca56e317224eb07aa68f9e8e264e8227","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.4-next-1596723283-44ad01aa.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLBHmCRA9TVsSAnZWagAAmJMP/1Za8LVKvfQ0r1tkClWy\nkQInt5eo3HhVrCtc90rIrGzUizbv2l/r/p4VXZTzNyYg5Si/sDIDcGjP6tIW\nBkuSfQJIx7iEBCuQRgw/eUgkKWFfnf1xftQol9XXttHaj5G6aDz9353NqOqR\nYHHxhpIMLMnAuq3rBe4IuxLZkfN+JW5zT4GcapyeYgEFAS9OZZOPdqyH/yJi\n19YER5dzvFCkT/XujBJCS08N70tzNtAXlNk0GF82NBy1o6wPkkci28AAPr0p\n+YkXFv0ONW+4IxDMbmhCeNBj6d68sT5IcxMqTBP6MolMDqrO1RCOxDe87l2X\n0ktB9VHnLAiFmXliDMG57krE0UdCMJUat7yi9Ctker7k8hvAbNqeNvn1MvEK\nNLsIYZEhSB4S6XsikdGq3cOGyO+e5Z6Ra5aY43nX0t8lgq74C8x03WjVVMy4\no76WbTaYmu98Hu1pV8X0Ez4ISZ9lAi/fdZ1nua8VxLlWOiSHEdlSFaKzIDcP\nsWVK6hckie+vpqIlSiAdIGt3ex3i1gVBwL2zR4KeKIVCDVNDKmhKTu43Rqgk\nXGQl15prcL2wdDylal+SLznTnpavT/imV6Arlw56K6ea9dHFBGvogtcbempF\n00xbJ2siN05nHetk8Lrw8CaoNpUByPxcUo4/w0zpM+ba2EwhH65zj6C6jBHf\nQsD9\r\n=YkyQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUf/aonbZnQ0mmAXofIhbUSTDciVsni18KnbjE5UEm9AIhAJ0g/bKH+7id1JjZNFkWT59vsILrbWp5yTW7ILssFpaW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.4-next-1596723283-44ad01aa.0_1596723686043_0.2558935197155323"},"_hasShrinkwrap":false},"1.45.5-next-1596724691-d5b4f1b4.0":{"name":"@xdn/core","version":"1.45.5-next-1596724691-d5b4f1b4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.5-next-1596724691-d5b4f1b4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-m8BR8TRh1qbeypW8UcV+StYaItrixEz8oeBlD0ZKhc7k4opbtEWc48QnOrbZswwnmzBiZlsoK7h3N1Wq418Qjg==","shasum":"b9758db26cdecc04eebdae4f6aabd8da18558481","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.5-next-1596724691-d5b4f1b4.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLBeKCRA9TVsSAnZWagAAGz0P/3SIReo1lTcZe5+HWHSN\nBD6/HZolkdmftMieHOTzdGBR0BkgZi9Q/Swm6bn0ks+6Nrktgod988y05wxP\nuzRfk6qao7jqiiTk56PryjG2jP5WdeWEvKl02t9gP6GHZLgC8K5OG1KGSafQ\nVtUfYl5jvmb9kzzWmuwFvpk017DRw1kx2IJNuIn9gB8c99evQ70K25AlP53H\nJ31ezLZjWKAJIhqpfp57q9L7BH/hr0IcZeHOnDsdDF0BHNj4zF7PNZUEqq5n\nKysEkQG/WYCxkEjXCZCxpvxjGqIHDhcDtfQL9xTIjInZ8LAWpdYne+ivThN3\n6/HWO9Q1cyKKBxTGDqJyqiREARJZ31bkql/QCcCfUY7mYgWsUhSC8bf5cm0/\ncA2koPCq7D2ZQ3/vXrae+o0wJtdHMNKdw2dmyh3jpDvdVUNXWbtGDjdoCAmL\nEVUoi0o2x8UDYS4CcjWQ+9dTs6tqBVubBM+pGrGTuHfFOyyCOTB299hjTBep\nxM/GYuUr5kT06y6CFui7DO/hAexbg3aaupwgECtZkWXo2Vx+p9x1CRYLhtAt\nSUBoEz8mQAj3icMsHEgvNPFdXq0qlB5GD4ozGOBbm4RhIkPZYSAQ2l6P8lqF\nfzW7k8Efqsl4MAZDCsQemcSglr+4gS1Fvvxn0dgxIPntYVk6Rga+kTmzIJMG\n183B\r\n=1nEG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBvAnI6L7f7HiQWKg7R1eCZDWlIHTkyCbL11q5R+OtkQIgD1LU/GNUMQXG4A5j2BIdqHYZjC+6LpwwqFCdnV//dHU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.5-next-1596724691-d5b4f1b4.0_1596725129450_0.5654835450817175"},"_hasShrinkwrap":false},"1.45.6-next-1596725783-033db1aa.0":{"name":"@xdn/core","version":"1.45.6-next-1596725783-033db1aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.6-next-1596725783-033db1aa.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-AsdHy5UVMJxCORV1uyJuSrbIS3aC6h9Njpk5pFWtby/dPyC4W05+/ciZ2MM/TcAFr+MnKOVlxUVmc4iknTng9g==","shasum":"575aa8e950e2d36a821d77c0644485c573cf2f32","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.6-next-1596725783-033db1aa.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLBvACRA9TVsSAnZWagAA8P0QAKBevqPG4bGfOw3kN92i\nRrx5HDzFyzDxChH3q7afdsfU/I/muA+Mwt9V4u7F5QPLWeB6b+LnztCiDjZ3\nxOZxFg0VZEUOOtS8hpRosp0eXJfVXWk36A3oy6/A4RZYPXZx7NFFLcbi++Hf\nDrfiuTeYBuAcUEAcEbVu7Ip7C/wiGWxO4K3YzoaUJC4ltYSKr7P8SoOcDyyv\np1B1SjYu7T7FbyFw+APmpLqa8XgwuFfIJSYXTMCgZ0fJesq4s1AmKaIVpyw5\ncPRW2SqjqKUWmMNotrVzc6A0viDK91YtJLzTACPvWuj/6LN/nHlJjU3GsE8q\nbyozs2RmiVJMt2tiSvXzVhOkGF48VrtewiGzqMjcCWEv+CI1cYb6xD1lp+8j\nTgKMkvOjztpi/gwSPV/7Mx+BB3s9mXkQoMWhpKODk9ECj7KNKzD55wn4tjVR\nS52eJl2/mFYy0VFBfhMmZfk95IG7i2JIqcR+9ID0Zzeet5UaHvFgRAAbvrOv\nEjO/iW1BOjFoCk9qCk82HhQaIPxuUbZ54JaxYZqyLL6TERPee9RViGGNYbo5\n9fcfBXgYm87Q/H0o6weldh09m69/8rf1lVF5DICDhrjq/B/L034eOk5xNoMf\nYz601jVH0TQDm5cVv50z2KGHg5FK3ctnyQxdvxgF9vDk6+7TCS4v+IQn/dSu\nHBAz\r\n=34aa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzDXRuzXn++Ar/dUHk9+1Y67fn6BQ1MMZFXD9W0BYUTgIgKaXV6s0FyfiJue4twW8DGVjDCC6GaXU1MskTtzYqfHE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.6-next-1596725783-033db1aa.0_1596726207752_0.7635843607175261"},"_hasShrinkwrap":false},"1.45.6-next-1596743099-62c8478e.0":{"name":"@xdn/core","version":"1.45.6-next-1596743099-62c8478e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.6-next-1596743099-62c8478e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ywthQG9T0yWrDBN1L6yhMVeWYErdiy6QDy7IFMzVKee+0Ypg4hzDnWpN32rrSUEYBbPBBWp1fy6ZBCRmTV/F/A==","shasum":"c1903d6384c2c8e3cace72932d3594e6f2aa0971","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.6-next-1596743099-62c8478e.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLF/tCRA9TVsSAnZWagAAztkP/A68icP2lwmu5cqcH/KO\niomS3UuxAByuqsZLJfsFb5AdqmG0ad+0zv1ex72OKyEQvDU2Zu5/6f5MrfSp\nGpKD5uzeDgARc5RwIwzk7vDCTzW9WP2Pjk/bMQzAe4YWnxsvmRczJlQ70IX6\nivaikCOa8pCVWE9CyulRO8MKUVaRpuF5dKHWp9trzn3aLF2h0QPOGtALkNim\n2zdIWcZ2bdolqbNsohECY2IZJ4FcDdMvcgz/4ODLh2oXvCWFwDRY7CdrhKRy\nWSh4eQn47bKdWRFL06oGaXiugHd92J0CI8KYYXb+o4upsy/wxmQgIt+OBslR\nM1DQcAr9GjlKkrZ98j8jGV9L59ISiRNtThHVtjCEXeodB6WJN4RwPNjmT88a\nL+DYUeik8IKrvcVm8Bz9rfcv5KnWpuwaHlJEVfb8XiunxhH74ypuyqxq756P\n8Z4Qhh+29KiGCcpLkIOkH/09ZbAWG6sNzpgaW10OWG6pUjsuxrzbWzv6CB0F\n50DBkMoZ2p8e5yPXTg9x1JCwsGxC8V848A4NDxbX3f0BlcatLHnKtPHJvDqb\nsPgyMnswsjC2Qae6zd7/6djG6lig9h+UFfPbRlKKGdy56FWSjloWhxIlIu9Z\nqMIuxrJ0VSqTxQEbUAcAmqxLYkufyrOtRljQ2AJWvcclso5QRY/Nxd3+Kjf6\nUUOx\r\n=ONeh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH7ce0T95Gq5g9RmyjdqpAP4QS7sFa4/RUYTTkv5nNgrAiBpeRDqzH+uFAv0oML/CMMXvgIeJArJcU8ARNnkYw5bjA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.6-next-1596743099-62c8478e.0_1596743661063_0.3539083386488697"},"_hasShrinkwrap":false},"2.0.1-next-1596745561-e221242d.0":{"name":"@xdn/core","version":"2.0.1-next-1596745561-e221242d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1596745561-e221242d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nkxhCDNbxYj5W/jqo3yqi5Xq9HCXApBT9hwDzSHrFqWRo/42TOrVG6uIbY20+E208l7/nAwwMAn6stmImmqHGw==","shasum":"045e05e6a69676160a97a897347e23a5493a4a58","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1596745561-e221242d.0.tgz","fileCount":133,"unpackedSize":589177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLGeYCRA9TVsSAnZWagAAXjAP/RDKzmAfxZSB5SMcpdqV\n5acRbWR6VhHw0zWp7PCQfRPmyl3JqdAG1vUeJ/j53TuqZkPUQVKkqRc+nLEF\nyC3LbJYFT+J4ViQt0GlJhgsAGc3lJGx4ViQQbiD8JJFxyWSFGb1H/B7yII4o\nnwsxdcU1YYhK7KIAbkhzTZUFADzEVzh6oQil8pivgidIjHDtAS6VRnFDmWhB\ncYWHPdRX3Y44m0WgUXw9srmTqXWcqjw2NRhJWqHE0T/BugOtMgESnOgHZjJk\n2tGkVsANLmFzVjKR40MQgd5YNHEGHh0ESqRKZ4mG9mWsuhIM+Hayq+ih49tq\n1gg67x5d3mDZQwFXLrrDTM0V8j5qThJ5GdxtJo3qkx/8n2VoklQHBshpJKcV\nANd74Ty9+hvdxmsH9x941KCWZrphvD922Cni+62ACpLrg5ktFFF94ScGUYr7\nGkYknGPEkHnKBVbkhCpmEaYPIyQ+W5rJaJ/4kMYpGgCTsltwmyLNJFQT+sek\nADy9naxXOPcyeq+s2jCZEpht3S1uJcHCDTG8jLI+YOila4SKZmamPErCwU2M\nrPAqCl6n+UVK89iHwTxsN6QV8cAel3q782/7KFg1iB6NKdkDpXL5v5DxGmL+\nWfYGwvrYeMpHcmYWf0oBh6lQUHcmQCEWlvn+FbtlWyb9P35wzH6h+PFipiNM\nwmOz\r\n=S1TZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHrAkKvheN3E60AaBtU9Nrl7wSBfWYITgJEowhx+0ZpsAiBwVfvLJ8PAj1A3xrq6a1O7VzhknpISEROMQXNzn21SfA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1596745561-e221242d.0_1596745624228_0.6869852768658262"},"_hasShrinkwrap":false},"1.45.6-next-1596752649-5a32328f.0":{"name":"@xdn/core","version":"1.45.6-next-1596752649-5a32328f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.6-next-1596752649-5a32328f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3SrbkJ3NsJ6J5ilVpZ0c2dn8YkgwEP3KallqGGnVxE5CqAnpEAbq9IP81NJ/eNrQ2/cYtnbB4yF+yA3ix1o2Bg==","shasum":"678e11113e424dddd973a4805fe4b4aeb2a2c935","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.6-next-1596752649-5a32328f.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLIU9CRA9TVsSAnZWagAA6ugP/i1JAvaFU38sYKMLmnek\nHdBA89RxoH2UC9lUrfNp+t/U2WtlTxVzI6UJmy9tT0XUivkZkdLTnSKfcqPc\nWY2d+G7SuLYDdEmQJTrEdcb9YEV0s65ImvOcqTCuSJx5Yt6L+MKtsNCqhHi9\nzHdFjG0BnXSL4DgyoXGz4NL5EPaYXeAxbzpUL2FoiEsx+6I5TfjIuW0I4WBN\nnKg9Vs/bUFdaaD6fN/tX7UgwTc08vrQVxYt7ScHmqPZ+WY3TEefKjrFgJ677\nP0Db0PDf7y2YqC2U0ClG+31bChArtF2gJ9qYcaq01jfNLbxbnSdzi3EPcjKJ\nmWvOwbp5dMqyZO3ZaS/riMJ6uPgrlwtG0xwC9BtdlnTqfOo6AlX9ABK14fbx\nKPMn2Aln2RW6djF/jSHiM2s+kGXKW3+llebVYE9C0J8QUthxoffbN3wJe3JT\n4KxkjBPXf+8Ec5u8qoGde6jL79LPMKLZ3YSXDJOVXVdcBs3kuWw0mMtShVu8\ntB4wh4dWQxJClDWzVTm4iU7wTfbO0xYfKiJGXvAzRYAp/osQKbNX3eFnPEtl\nVgpLoPyWLTsGlVrL29+pxKY3IX2yno8E8dEhSYj6/DRaZU9I4KrOHBzzY1WW\nhq3nv8PTQjCBcOB5YOvK+zFAUpdJxq1qC2jv1pzUBToS+X4QIXZjh2IhIxct\nZBR4\r\n=6Ggy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4hHonsVzTuNWtBCJI07U09nOaTdy6VO9Cp0bCYoErDQIgfk5ls3CpSZ4o5jGta0mNECEIsRM4C7A/+0noPRjr5v8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.6-next-1596752649-5a32328f.0_1596753212905_0.3629240061355532"},"_hasShrinkwrap":false},"1.45.6-next-1596766432-a38c1cb8.0":{"name":"@xdn/core","version":"1.45.6-next-1596766432-a38c1cb8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.6-next-1596766432-a38c1cb8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SYwkzPmAMPVJg+FN2akSsglGjoxWUu+9ixdYZs1jlflev/gScLbBpnW+X7u1evuWU8W8oHPl95jsdt0ddm6YWw==","shasum":"71345dac9bb85aad5468b8c5bc2e16cb92307c36","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.6-next-1596766432-a38c1cb8.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLLqWCRA9TVsSAnZWagAAQWwP/jHbrN2c2XfORfVxodas\ntQOc8tul8jTf2jcv5zdo80H2obV9rRpgkf0xgjKozzo9fS/EAJtdKOFC8eo3\n4kp8lLkDrUJ7770GcBPoOAlUGVbDPX4oyx0xCdJS8rTCXZrq14Vdb+V64kXd\nTNQGC26rRzzk1jRSLABH6f31fnXtLlggImbKn/BPZZx0oF1E2zHYX3UGAsCD\n8TaRgIDomWEDhxaY0w48VL+DHlLT9g+DqqphdamDOvw3aeQxsQGesqQpN+L0\nB/H30nHnkDtEQHthNY8QeOTeknXKeo/v5iA+hB6elXaER7UWhGMzAkUERnLV\nALphT50OLHa8gQCFE7btB+U0p5dZAogAS1vgGCX3q4BWRk60DICKSNwzzIEE\n5nqtAbVyx/+5k2157tOuHa4Y1WQRnYtxPVzBpulxgK93ns22XL9zkgLxczt9\nxjPcWGHWSyM33O75EpVwrNnGIgfwdT0cj/OpvBBAlPmPIYjQh5RrBEPJybZU\nWsEDeDAxM/f0KVMrFNBSm7gtyGw35nP/8sfx3kyL0GTJAzslYbm/XYfVq+mq\nf1r0T2yRpet+AuGxQjJ7Ac3KKYClk47KT0AKfLiWdE3FsXWUNHNe1Sp+PI1m\nvq5DkqPPpnG2Wthc+j6NqRYR3Cub9H87TsSUqWRhBBygpWXqk5SLST3p+IOS\nQ8iw\r\n=WV5+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGRnKd0BuvW+24j32oaThwC95Swk2BrvE+6TI88em6WqAiEAiIO/sRmyK8WwjB/Td0dsDwdBI1KMzcl+otVcBzRsRFI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.6-next-1596766432-a38c1cb8.0_1596766870194_0.029606401477552557"},"_hasShrinkwrap":false},"1.45.6-next-1596767211-1e9105eb.0":{"name":"@xdn/core","version":"1.45.6-next-1596767211-1e9105eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.6-next-1596767211-1e9105eb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-QllCP8Tu53UYKo8vmDYqoJlbfMS6rFz55AhhWbyFoAqbKuyCq/1lAZwFLJ/idc2Puak4MZ+z7XqSm12aVfY/yQ==","shasum":"9a372b6bd154e919aea5a699165bca10efe6568e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.6-next-1596767211-1e9105eb.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLL4gCRA9TVsSAnZWagAAeY0QAIHmx5cF9oq+b0wW2guT\njNMGeDDFXuwYd6jW9CmaPyO+7aMh+E4wnmO8KQ2rrTGzYEnMbXfj/KE8fu1G\nOVk7CNxP/VaXUQQEpQzXPYJV0ToahzdQ8opQJJyZNvbl8PBaQ/kKvmYAZkJv\n3FUcWhEUpoIm7VOE5WlH/TdXVK3Ft32g1HSIzzEHgnpD+UMFEOx5YJLc6mHl\nMwIIzEcrQt9c8sEJMPCd8RS7EA5WlcduvY+sioO6Kc7Jc2e4TFwhlwvO7y7e\nadlIyjXM7QFhN8rfYyREb7604wDk87bH76kXQB+uobMH2oq9aCt5KiB3fDn1\nCooLM6uTr24nRkxk08Ux4c3eoMU9/6aGUnC4MA1IySGrqLZAIMkjHuEwNcnh\n+VgkoAoHmkey+MUK4zkp/B6qPW/lIKEazRvC7oK80nTMuxa5W2cSA+UvW/7s\ntuqJ7rXufk4hGBNNxzIslszL5W//EzIqpDhzFWcmioScaVIS7ms11y4U9p9d\nJw1t7l14qmmy8tqWE1zZgn+N0a6euO67qkhVGmdO0uRJWuB+LPYSQTtBPW8m\nSLd54dE+/JIRF2JWW8HEY8Ez7mnBfMzPuD/xYTza8J1PbTKE1wx7taYOYwF9\nMLufGzGn0Ha2qxOMjXejzmshDngrOpMdng4W1mp3vSRJMykN4krowsZN29A8\ntCWX\r\n=wLaa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnZ46NlYM8LaQOQvFLnv9dicw4d+NZxl94SlMipKBmAQIgObFkZwQQbko5ALeWzBBpTYBkR4MiNrp2y4OEBvyyowA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.6-next-1596767211-1e9105eb.0_1596767776348_0.27514445579449065"},"_hasShrinkwrap":false},"1.45.7-next-1596768253-00276882.0":{"name":"@xdn/core","version":"1.45.7-next-1596768253-00276882.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.7-next-1596768253-00276882.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-U2edB9FStTXNBMd+TsATAAOGcNR86kqdstJVE48klpPjoRLmAnR783XbIPkXdHfLlX4IuWh7nIlDNMx7eMF2CQ==","shasum":"6828f714784749959a1bf29d29122586e328c7c1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.7-next-1596768253-00276882.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLMI7CRA9TVsSAnZWagAAJQEP/1uSNYvhJNmZ2VXVAv4B\nzYY6PNrLpQkI16e3OB+uTHtU1Z/IUvmq6XHIeiAUj62NVc8KG/L+p9fmdAWU\nY13OYYZfy+Qz55JT7/pEJM10Pr5TCJJSUNG8IcdzvLSU5Dqbyi2sE5o/NFom\nRzHxZBZ2OhIrjrtnLmmLB4VnG7jkQw5AOlmVk+msCgYRXePd3VbVodgdqB3U\nDEmpjhgk6fUhiJxMK2DbJSKlYE9CrKm8jMEa9CyEHSwQanV3SBBc0dxjr3dZ\nex+TYGlDGEgOAREupwGQFZKc8LFM+E5FH7CuX/gguhlQCAziQh1sxPF4+h/y\n9ytH1eUX00FS7fdnbkoofnQOW5XLYZH45TrOeW5RCSYhDtRGbEmTGX6tVP4Y\nk95BMLvgnSby99jJ4hU19+sqG5OtTA7Nqd1a9/eaCK33PiJOPdvEqkPUyIFZ\nT1clyxgsiP9urIQA/DNy3OPAmyywLTFhdLF9+4+nZTzraFjNBsTTsZLxoq9x\n8S7lJ/n6t4B548qYQDRvTKazjKm7itfNpMnUJJYv+k61RPn/tB6czaSncVzD\naLfur7imtQuTk7tUMKdqKraHyn1t6zwtAhMzTTuqpL755rDRFtJbMWl2E7GB\n9DwEacipyOVRP0cNXlf8RIhSEQxRbPHxCIrQhW4TZgt8lQHKpklZhbg/Tu4l\na4tn\r\n=ACpA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDWrhnpW/PjfMfaFuFAok2tmb5Ay+v5sQAk3Ie7DobJ7AiARAmU4R+i55ADfn4aLo7UoOovM8RHZqnphSe6A98MZzw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.7-next-1596768253-00276882.0_1596768827021_0.6520799361665404"},"_hasShrinkwrap":false},"1.45.8-next-1596771421-46f425a3.0":{"name":"@xdn/core","version":"1.45.8-next-1596771421-46f425a3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.8-next-1596771421-46f425a3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Kp4X6qfJMhzxwHrHJxcB+g8ZzhwHEokbycsdPnxbaVu9JJVXQZhvAl8272Zj7qZCWzH1haiqQGMdvpiRRKPelw==","shasum":"5be65e73de9e9de70f587aaf7ba8d53b814537aa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.8-next-1596771421-46f425a3.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLM6bCRA9TVsSAnZWagAAEwEP/1BQQ+uATORMwuLDAWFg\nGvkw/jG/ggWD/5pfZQ+FD5AknPH9vydymxvixMAikYHZYE0/D1aQWATgqMGd\nsyCigsEs43p1oqzNHNf3wSuJvQM2O/kMg4dxxwBAXGzT9/dJaFmA3ypPXG3K\nUgK8UnsZbyM7Oa+Rh2SnjMLkxj158lAlm4JNM2U8mJ9BAkH4d0nmyrLI3dCj\nQQl+ThjFuLh1vLR4vkJrIOKaYUipc+EiMjC+cSFV8d4900R5JaR65xvPoXH8\nkuHQbmqIatoDvM0olWmVcze/jp13NOo4zHmKpknV7mrgMB02T4ZyfH5R09Xj\nnfNzX17sk60DTBG26QdXikR2Y3zEE2b2oFP8wotQ4BxOXKm2fSMHC/Ppsy32\n7WhDm0zTwx/8jZtrIkqeGL+oCIV3divZFYVR80LczC3pvjK5lbTnmW2Bmy/0\nZipuF5rk4v2uCjWOAEyAzbIuwQS47LSG6HkfqdqGcVI6z+/6F6ejUiKBjeCz\nd/xmSA+HhCfYkVeSrNhg32AGNY3opeZB1l09CpEl//EHrJcNsCqR8cwAEbRi\ncPq0yEo6nmlp2bf2UrnDsqENuY1p1dqviw63YorxntGXDXfSM4lLc1nQV6ui\n63vjK53wLf8mYCRK5EsHgICegJf+RIVvabSohR1MffluQuL8/EwNqgP/t75s\noDAQ\r\n=Ivng\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHwc9S5S77twTYmPn6KWlqPT1tvn4Xdz+TQhE//Cct8DAiEAqt8OAU5eYsYNhOQPKAj03GA8xguqBXNNKL9X1UT/dAQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.8-next-1596771421-46f425a3.0_1596771995261_0.1423885987100293"},"_hasShrinkwrap":false},"1.45.10":{"name":"@xdn/core","version":"1.45.10","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.45.10","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zZa00ku6rvKaYdbl1YZKbpMd3TMouXupZ5ymo54/x0xMSxY5c6HqH8lPEx0uXhg9BgPJfQQ/2KdRp8YfCS5ZuA==","shasum":"202d5e7d81f7f38304fddf72ea2a12de3294b3ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.45.10.tgz","fileCount":135,"unpackedSize":584592,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLNk2CRA9TVsSAnZWagAAWFMP/3GxAbH8QSTSgI0Clj8J\nbbq/RzrAPeM/JWqv+Eh///Ggew1trlOkPkq3RGD0mTImm44zyfbZOELJs9bH\nK9QxJmG7Cd2LTewgbPYfDgLj8M4cEj4xoId778KBKmnrLjxXihl+MIogLiYB\nuw6Lu3ti9dh2HlZiMy5Hb9tWhvy7uoK3fBgr3smozmrPlmdt2XV63vgSPMNT\nSzKYQFc95qmtlcz8Pv5sJhhzj3dn4g+BwMKIj6UyjmDa/QGTWqoo7+dJTFxb\nOmnXKcpYkLzqO0AdLUdK5ExIqLp+lC1Bt5fugb6n45x/r5QDoVk5CY4v3VYY\nlxAcedraXV0Kx1PsbvwO0C+fJRRhpkZNUXHrDjwPs2QOUYAV1YKRVDXLXYXT\n2IyogfWOPiRStvXpk/Tkx9XjaolE+SbO5OGylGQ8rBU9FTaIgV9F140UOcvF\nAT+FvVTMHmr3oHZhPI3W555Pv0YeoLNmkPOvMSQ7dCCE0XowNNbePPRvwmA1\nJ9t4g7hBKZJbRnfcvLw1LkPxOc+MZcWqJ91SCjK/4R+5d/53gp7824zYCG/6\nU3mnr2NLkc2KjgTW/iWoyMUb/RxgERPezN0mSZlY1W7bG53XElUftxSA0w0o\nOVcEAc+k5jJk68KCqhVkJp0/UExeIjW0XXJcspkSW5KeR3IDbvsE8ORs2PL7\nE6u+\r\n=FkUa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCF65+135VRJXiOvSkREqlP5ZwBlFxKUcBmnwEkEXDa4wIhAPukUbW140HwZXsGIcs3ieohO7o6yTaa0/kwPXOQfgTM"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.45.10_1596774709506_0.781557148489632"},"_hasShrinkwrap":false},"1.46.0":{"name":"@xdn/core","version":"1.46.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.46.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9ZvAoJBue1wOEH+zytCWxUw0HycycRKz0CqW2ksfiOMneIrzIB+yLSfgFZickuxxFw+ySBl8b+IkehRKrmLtEQ==","shasum":"06a8aec8924f34f5d113a3cdb6af06642479088e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.46.0.tgz","fileCount":135,"unpackedSize":584590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLVXBCRA9TVsSAnZWagAAVwkP/RRHsz2bXnCbBbmdoiiP\nUFmI1EPVvF3x/PUcYcJo2lMvO9Su3gCAtcnjuhnsjG/c0tu30LrJKTi3ksYR\nVrKykRx0vVGT99PPWGRERIfgPY4xFV+KOYbkAoq0JeCcmBqc8A1aiXjUnW5L\nNBxHmGn/db5PJtzy7CVYFe4kR0ZwIdu8rOdTMvfihe5Vor+4rUc4dfseSqo6\nttdiP6KaPM1GZnb90OqaakEqCqxWe4xpNGhpaw3e8G43oTGtdcGsa0KD11ZN\nJ7VV+0SMqWdVb1rBuIqzztXGb7flyYTthmjWEQ/Eitc5tPZvT2pLZ97EoHcT\niA5ExHxGuGdX6ZonXKW1arx53eAhSVfC/4ZpmR+2E4tV0Nbk1DjNP2wMedNp\nu/nb9Nh54jJQ2XZM7mra5Barij+cJCvh5OgYGxwNIeUHO0TuKDNRdu67h2H8\nr+AFBuyH92dhAPsIgUNNDxck1V1LBNmaMvmwf3RcqCklGg2wGjoApKgjcbie\nQdQd78BpVon1FGge0sXwOJj8lXYAX6VLy5ACikWYfgwivOoKZ6UniEZyVopP\nOc1SQC8x+Hm2dqm/WNyD1VoZLGhGeBzXzxZA6CJiyL6RaDQeW1wn3ca4RdHq\nn8SqWfaYBK+tZGUHuGjmdISovID7UhkVN44rujrZyDqfMP5br0fts0M7qSCd\nENm+\r\n=R6BK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGj0UKsKUIVqQwXUfZMm7xoDrzDwU94WqcpPjsVhXDtXAiBbLLZpZWs2jL90YzD3s79TW+SuGRrPkCbLRHeQDMi7Ig=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.46.0_1596806592516_0.5534715700916355"},"_hasShrinkwrap":false},"2.0.1-next-1596814201-63a1d1b8.0":{"name":"@xdn/core","version":"2.0.1-next-1596814201-63a1d1b8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1596814201-63a1d1b8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Vh52kg4k5y+aSxIp5GzvnOVypq0XZukyWf8Mg/d51RNGFtV2LWRoLwWtATjSJXZU9qnDFmbQhOLPgTNCYPehmg==","shasum":"93a1417596fc875f5b0123ad40b1586c4009c14c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1596814201-63a1d1b8.0.tgz","fileCount":133,"unpackedSize":589177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLXPXCRA9TVsSAnZWagAAGfUP/jH9SvqtIpBxKriqUXOJ\ncikONNlc9zlLKvNT1Z3mzsOtZ85xWOzlefFYy+Jhi+HmjfMhRBeqpQibwuXn\nVKKDyI1qYV+CdZ59OZBZV+okg1mn6bZVolIIVH2jEZojIu89WEr0YEIN8+Ky\nRRtS949/m9VsQLjQ+6AtKvFo8YEM7WjWN1QYcqTw2oFRRqhFkLh274rv1Ium\np/XqbCAKh8I/cwzP1ncvbC2Br03b4VKOXRftHbFjXWvM53luuND+nX1HwjR6\nTE9SULIcgAqfvB4jMg7sAMkNmgCDe+qOilH20O9VvtEhe4XHpW5e8Zze4cG0\nR4T3HF6Tww3FVBkQkoWJQwMVxZ7H5kfTaL+2WgDrF/mtanH4ISnZYuS5vpSo\n4XG5+ZgLYAeP81NuenN3MqlKVWwMGkDz7TEtGDjctocyy7MDNwuGDndJOPsG\n4VSwRy/ttCZdbAfjZkG3hA4YNSJHavJHdMKecDZ/lXYj7x0pIjsG0JljepQ2\nOtGExpDwJ4G3M7MPYsJvo5VElNmErWQE9lBdCTPqGpzPzICgPukN0rUONmV9\nM5wpTFGwpCASuAl07zD3J98N8VO9YWKHGimCEnKYH7H0y1XLFQd17SmhBniz\nnhEfU9aKZ9a8woPVVQCFs2+V9rR8KyGPN2vG2ZKIFd6DsYHPRWORVIg0BBJq\nuFwu\r\n=gjaf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDY1qcv+ogpj5UUVUEmqc5hqLPR5pd13o0sVQeUteTPowIgPbjF0mjdUI0zHwDr4sx9lHz0TRb0fypY3b1utcdsMRs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1596814201-63a1d1b8.0_1596814294697_0.2794551185709899"},"_hasShrinkwrap":false},"1.46.1-next-1597063734-6516962f.0":{"name":"@xdn/core","version":"1.46.1-next-1597063734-6516962f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.46.1-next-1597063734-6516962f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WQLCJ9AhWQoVGO48ZC4iPwt8jQr60vTbDhUu8hxs10oXWlm6NijPg/XOMk0X3BoxCKo6K0edwL+Wp8Kj/8xj/A==","shasum":"cf52ae5235a0ea64eceba06750cf043cf7413516","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.46.1-next-1597063734-6516962f.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMUSECRA9TVsSAnZWagAA1tYP/1SVXoj2q+QCIsHKThP7\nkuDU+00JaGtGgvhDRy3YCJyGa0AMcoJOOMPXbcMzamfjh7O00H3sIZxYO6b5\nJ/CZGS+m6qr4LmuPit50pl19Mf79NIROMrlQEZB0Fum7bhkGhP/yMgiClJkQ\n8vNtS/kYF8VrNOfAOf622h+3qwbmBH5DZCOeEmc97L0PjGan35GRYvXgIDZO\nCUNJM/ruYhf4snMJzSK6a3i5G+fn6B7qit9yaRRVqSiSuSKmYDYDI/rLEJa9\nXC3RxvrSPZDFtxdmAY5dbepqJm3Fo9MonIra4ngegWN9DPl7wewAzKDS2N0g\nyqrhXmpLHKk+qkuYhHQsWWRc/ggSf3nWGlAuQJBW7/rKxElOZSPAQD1F0Aw5\nqVOqgg5yM6BtT/tJMhS8rwmk0w2QF4lIeMxQnN6ObQQ9n/hU3XoGjArN0EjR\nECZSa1HgzRMsL9TwDTtpDJBJrNiYoRl/XpInxsZHK23gggOXRGRryZPdnpZg\ni2hMhCO91KThc3LjCYwPwrkhEuzo0ZU7TWlK4/5LFGV3NP3J296ZMBUpM3b0\njNnUjiEbFciM8HbhOHSITr1eLdZPMkqzD/tKWqSxBy99505j7p7c8qxFKn0c\n/RlBi9rj0cv0LmW5f7J8zS2bfVUumvDxblW0UNHy0lfsOzlOY+L5U9bE5hxx\nC+LP\r\n=W/en\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFrae7ms4QShGOFFlYROl+fkYmZTVyHWBeF0YN7FsXXxAiEAmzjCCG1dqe1lHuv3ceFnLRCZOJEMycBIbG9V8DOSziI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.46.1-next-1597063734-6516962f.0_1597064323676_0.03415190274230162"},"_hasShrinkwrap":false},"2.0.1-next-1597144623-0347f39c.0":{"name":"@xdn/core","version":"2.0.1-next-1597144623-0347f39c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597144623-0347f39c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-P2SrG2blHEzfBmVIWPr/VwDwQn6DuB3kYDmAhRKaTQlzBflYPOpvNd/Of4QwG1CF/84PXkDXab7WOpW+FaV6/w==","shasum":"625ca60e08d4dc01c6e3762fa1e97dd121f668f4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597144623-0347f39c.0.tgz","fileCount":133,"unpackedSize":589213,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMn7HCRA9TVsSAnZWagAAdFkP/jkuTt66roGe9xW7hVNM\nzsPHCnnCb7M1dTz0pmqg2YdSczRAh0KfQ5Q0FW2ua04off5130kWwwUGnOKP\nbzORtrQ51W3zJCSc4FiGMnV6LU/8bJQiWSdkZe8g6LBHnzIWmDSet97DlGmf\nZae3MDj6DnL20ISlXn0TURC4d/dQPkB6hGmWbeBLAdFYJbTEr1Pz6utDa7Fx\nsGu2HjxILzbVtWav/Vx8I4dxAHwkfHYIlcNoieSZeHvRvRhIPBvDThAC/ET9\nSwVcE9m6a0FB4a8mHmNBeszNTV8Zhjf9/yvF1tOfc1pLdQcXQEgfY0YU02Ir\nyNQN/ND9eTolmIhFWxyIDkj20c4TYB5u7ZZJgAIXs8mkpS6+lrr8vgzD8vvI\nM13zMMjrvqAyeiH5LoxmuWnGJUBEwS8oXpXPM2AuD176IR/kBh749KuCg2lc\nAb9faVOq1yWyfF7xxORPdldCWW8JBA4Ub8i3rj7nf/d/S93wQMVQWwZM+Ln/\nxtO4cFZaGgu06AcOk+p7n29EBTk4niQy8okdBP5rp7njd2RpZEZzY6qaszUk\nyvrwRyvGch3yU/DqG3cH1ST/vTyg5lPMTEBcYJ5psBk7JbHjDfZDvlTxuONR\nicV8JiipquacXJ6ToxqG3sf25L9X7NJL6HfBPXh+KWdjoe+EnuylUFm3I//B\n01mM\r\n=vylC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3TaaFd1mE9ORkUw6cY4uYfJ1up+EkfIMDBbMv1S5D3QIgCFKrdecG8jgV/fLSF/Sj0/rfHCkDnTSjvsCrX4TUngY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597144623-0347f39c.0_1597144774972_0.48870650449908815"},"_hasShrinkwrap":false},"2.0.1-next-1597146304-a4725a77.0":{"name":"@xdn/core","version":"2.0.1-next-1597146304-a4725a77.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597146304-a4725a77.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4yaDJ2nJgT82U2NIhVD3a2Fnl90MYKEATe55fgBcioINWiz68fXrVCcM5avQbuC6mlXZNV7JL6R3cntK6sxYzg==","shasum":"9795ea80b12ba3d6fa083fa455149219d4a06cb0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597146304-a4725a77.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMoVcCRA9TVsSAnZWagAA4rEP/0aIrSYHnlAbsKrAKLkS\nysTbtkGHozWEs9upVUmHKKZnxjXYWY1MbhTDTrTS3Jl9aSW8LdqBt9YEn/PN\ncSynVEJKqBwHj9+otmaB2+xLBDdwLUP1Z5Hxr2ZZqRkr08W5lq1peztSTtmd\n0OVz6/eqmYHtchrqHMGuJmiAeTcjZy4S8Nso/aM3u1ofWRQp/x2YX55doMwt\naS2IFyaZZa7hwprQ2OtwJqfY09wExC1hHCVMselAL/BML+3/eh4P9bcFGTh6\nQTrnUuWYlp4TdBPBdeG614zOWvPsDct5mnUyOHlW2EBUNegwvfujZnR7hvMW\n1oK9PEaDmkHzeAgCprjJGmGUUyk1asVgY7PZh9jF8ffhQxgNK9qcJyu5pBoT\nJYhxaQhv9dPXmU6vg7+tFBglAvBf+gxxL2GJkyFPpy5TaYsWfAvwHwr+2tBv\nvDGS15VBTwVEMHBH2+seKjRi0Uwx40cp78Yz9AU7e4Y34GECRaO6jH5T1UlW\n+jF+leuNFyxugfKa9IU16SifwQ3Hn5MxHc0c27O7HO2LaAKKtJNh0KoHt8X/\nIFPQZ0wBSAQYDge9yA2fF2MSR3ICghB66YGZ11pbdN3g9OigTTyXw61OIaJQ\nTktiIHQz7ExD4Y9NOWu8l5vQtAbi+doXCQW479xTV3ZzvO4b5CgJGA5amx73\nYdWS\r\n=U5P/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6/PadprzCyGvmsPzsuC1tycY4Dqy6RD1RXLVQTZNTDQIgcs2j2iKsLZWsEH5k4vA4grujowxUHp0yENlq82HeFfo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597146304-a4725a77.0_1597146460558_0.709880014912631"},"_hasShrinkwrap":false},"2.0.1-next-1597155073-2ea4a7fa.0":{"name":"@xdn/core","version":"2.0.1-next-1597155073-2ea4a7fa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597155073-2ea4a7fa.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tfd+DwpcF7oksSH+3N3pOwVszdxw63Q2+xxOm4YDJJcD67UC1yGookWyoYg6VrUvNfOIyAIb3dwba/suk631Nw==","shasum":"71616308798d41009ae136eb0c9be006e19fee11","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597155073-2ea4a7fa.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMqecCRA9TVsSAnZWagAA0d8P/ReoxrUW4fFGNhdRLqNl\n3D2q06Obwzakwu/3sRUN92tVj+8ioWF7AGvsoYQ0bnh5P6SwLCHdZm/ZpJcT\ncN5GaeCMEDiXmSfZPqEaN5gFyI8iuNgK2jykqTchu4LKsj/GdT/pYCwYrEHQ\nZ1uz6iaZA/rkg+6HDxlZnRofNnpfaeyCNQXGCNP5uQg7b5m9AHcaxxaVFCf8\n0YBhOd5qd1VqQGoJzqs1UCGIbUlPGumAD4Mv0J6a6+RI0HRbXAWos0arXWOM\nkmolFJJMzTBeCOU++Gvyl7wOYK/NzBgzr3o0+MSw31gKn+o2WOG5D9/iBLq+\n0fWpO1p05Oo//y35PvEk9lefRK2LVgJv6uHRx5GyaBxsCZCxMbGQ5FVKt/LG\nQxlYRqi9Jvq3H6i7CqVIwX25zuZ/2a4GN5K4DXzeRUubREkNMPFuqzaPTpDo\nwKOG6fcL2zWVD/twQkc8gEAlZHHnBcDJ8HiZzzHZk3AqVtTXDM4TWCZFknwA\n1VvdmVzVpVvikUczjmySJDYGcphv+Iw5YZUhbbULAAqNZns04qy6KbqnLLTr\nVimQgTBXb2tsGBUuPhJ9WKoIvWno3rIFPFJef7AwiJ+C8CKOq1ejH65Nidz1\nM2S4loD/HQuzeXtfv4hMIRISRfkvSNBH0TFmmmwZKxaMLgdIPnA3/QheJibZ\nGLlA\r\n=62wa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDxIHaZ/InHApkgtEUOX8HbZG5IO9Srt0sACYO0mCPTqAiB3yegT2IwDzVCUGTcAxTC8qJnD2IqiCKTK1zbRuwZrzw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597155073-2ea4a7fa.0_1597155228242_0.4380699646465518"},"_hasShrinkwrap":false},"1.46.1-next-1597168996-f927fbc5.0":{"name":"@xdn/core","version":"1.46.1-next-1597168996-f927fbc5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.46.1-next-1597168996-f927fbc5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-L2sNWYEEiduPqCsCZrY4CdNuo25QCZ0WSCUtD6f0gDdQ5qgsglCdEQWulU0qWPmAiDm5CDW7z/DQBqbz7UnpbA==","shasum":"3aaa1f11f1673a977a288d53da37d659472f2cda","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.46.1-next-1597168996-f927fbc5.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMt+oCRA9TVsSAnZWagAAmaoQAIIhEI57Cl8GsXa5jbW4\nXuIjJ3l5b4tof+faZJO83Ef7Ku24HTLKHMCSTFj+lIy+3N+evKgj5DArKn8o\n7gB7/aBE9eXEk3NBkzhrw93yjTS9YzOAo/UmloPYY21McOampZ1Smb3CvfCp\nzBwpL7lPU4fFDZOwRrJNVxoW5ttHTS01g/kQTCFynih7QCCPGzbmw892ldX1\nt2VJiOXnfYTyb3FskV89pq46rKuxY3eB5XbG6q00B6oGtGD65pYusDPba/Kg\nUKTT1ArcEUxK1NbrgMfjq0DA2Tgx0/4YDT96xRWtMd0k8xrdVjrgunie3F+1\n9fzYqb/qA81JF9MON1Pg2E3XP7vfdiWnVUb6wshl/omohvJDVBrls0aDK1+i\nE79m1Yvr64QRQgPpUtR2SSBO39Bl8j1bK7KT8Y2L3Mj13NiEE5pCVRpZ0wZe\n1EqzDhUAr4mF1rEpaT4pmf6AeYk6ZD/pux/td53i43nkLh9anFkV9Cl6kqzE\nfv2j18rQa07pIQOZAO0MUs4ooG+YGvqa3UnGliHyYB2UUDRfJNWTg28Bukz1\nB0OVD/XhdpXPYO80l2Z3Zm3at7kZrFBcURryfB1tK4UcJ9NeW4qNVMyNDuNs\n9k7otNvrPFdAUvhfKtVexHKwdi2Pv74SI+KkjAjwfXmqwObuav9HERk1J9pZ\nQm6M\r\n=24HF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGAEdYz3lfy9UWJ1Kq8VvuW+Eii/ztbApyUgzTacvax4AiEAxMoT0h98WBCfFwZAokszkfa026jZMH3c7FFEqAR5wdY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.46.1-next-1597168996-f927fbc5.0_1597169576465_0.34688959252159735"},"_hasShrinkwrap":false},"1.46.1-next-1597171954-a18e0f15.0":{"name":"@xdn/core","version":"1.46.1-next-1597171954-a18e0f15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.46.1-next-1597171954-a18e0f15.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2Lk7u+yJUZiIxpPNu/Br65iTQrn95FC09l+j2XCXd7ykAvpDsoi2NxdlKqgoT66VlFObuY1NadwB3VEsn9gQ2Q==","shasum":"2824de3c4812b02e7fa7fe1e6fcaff15f4c087e2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.46.1-next-1597171954-a18e0f15.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMusoCRA9TVsSAnZWagAA4QEP/1PPrCiI1ovBxF20JFH1\npf27covPSQq2luKOxfweBryFlQd210SvdYXY/fER/LBo26cFiR0O2FxcGHwi\nxV/R/P0qJa6Te5EGVew5/Rq3oI+3fQ42UU4WiueuCYHW1D6CGv114flDKiAV\nGh244C5/8+LAxPK78U8vgvuZZO4k0AgY0pEV6fSOLTlCk98++KK1aDEcrwly\n37i0M6nOypnACuBV8A2n2yXFSZ9yL6luil3FbYye74LJmQCOLX8vY92nNLZf\nM4t8dxsckjytEc8fZbz9WW2h7IZntItkqz3Rmp2z7KIDpgkG6BWwf9+0ZPh6\nkBk4IWqbSbrML5TFg0Yx6+lBAWOzdUwx/3MVFuBwmaBjm+wGyPHQnHCFE/aF\ntXQln1dB5blYVpLhSvg3Y6Jx/aAjeNzkt2Co7jkjr/OldD7jgCZ8+OHK2N6V\ndwYp9drTQ+tF1RSdNfRqv0y9H3mU8vYF9kg4Whlg+m0vzkHMegVfKj89/FTa\nJH1ip/55Nli4p9u1Qn2wq5/yT9B4KtnTrGIUUvDlOE5negbOPrZylUTh32tN\nN3RZqjgtiL1PDWV10M+ai04ZMHGnXkdhc01mhsCBoJBG0GmLryH12Z3HmJ1E\nhwLkyHP6E0rzKiJW9+hDFq+PsK9YHlfEB+YQPs3nK+P5huASWSgKxKTUqg4H\nYm+y\r\n=Fdb/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFpZ32eKvmttpOT+tfzqEWsBBmGlV92ByDRKagYkLSdSAiBbK1PmynH5fh2IxAuAsx2zILLkVya7MxiYVwZjV2TWCw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.46.1-next-1597171954-a18e0f15.0_1597172519914_0.9460248427402698"},"_hasShrinkwrap":false},"1.46.2-next-1597199939-9dfc4335.0":{"name":"@xdn/core","version":"1.46.2-next-1597199939-9dfc4335.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.46.2-next-1597199939-9dfc4335.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xJwsN7VBr/XTZzkvCQ25ektUiuc60O3hHQPlT4JCI/IdSvGRk5qo9hMu5nPuxV/G0Ir+G923LdtdUT0nWPSDog==","shasum":"2f622cd6d1d8aca32bb4d55e52f960cece0675d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.46.2-next-1597199939-9dfc4335.0.tgz","fileCount":135,"unpackedSize":584644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM1iBCRA9TVsSAnZWagAABFoP/1gnf//k2EYTBp3+EEZu\nJUws8LSR8++jv1ckOvjBI7d6mQFjapmd52blhj7YfN/UUPL32E/v/VbcEDSX\najdLd/EccUIulR7UcMuMsZc4o3NDz2z6UAhFNN0UfRAkb+unKi31GA+G4Th0\nm+9fzaZYV3qT2auAcvvYL8kdU0kUZr8d8+vPxfebNT/8KS2U2m02okeWPzFh\nK5DKhGwAc98Lco88yHS37/kWCyHnVzVFD5ZQf7aN/LI88NQOKeBxwRnS8h5y\nJQtWWOPfnEEN6TQm2tw0fUowH6S9MNXzLxV0h9yTTAFqTAQ95KwATbTDpL+X\nB16IKqYirQRlcoChS9gqb+9pnB3y9ooaSboUClF7vPKi7KjTu2aSfuuqFjfH\nuBfbif4JXff6yCYG26zzDoFHyg0zMNjt281xZcxfaf/tnCKBNrVcI2YRqPdZ\nie1Wa1SBe3kGR/TqC3l2MtfX/WHHwlKQpWnyKHw5A8FkRVyMmXoIrDRSHkTS\nkUp8CY+i/aO5swLNyy2zXoXJOqozFuhyYmFwRoN6FN4vrSi/XVNwjIR1V/gM\nKQV4xMKZC8ltimBR11ToQ8HgpTgpAE9521syUzfMH1+fV5z2S6J7Rq53Zlmk\nVuPTdOVfR2AC9Ta0wVZgMZteF6p1nazLWEWBXvDl3tzE4CmVmU1sqcIwRmzr\noYFD\r\n=fthV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG37Uw5SMysKbRPgrH4eismaG55gZezs4Cf/cuqrnDS/AiAj028A3EUZK4HVfK5fiLtspFcwh4EXbVoY7f+jNdwllA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.46.2-next-1597199939-9dfc4335.0_1597200513236_0.5772819115776555"},"_hasShrinkwrap":false},"1.46.1":{"name":"@xdn/core","version":"1.46.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.46.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-B8dRudR6i+X254s12ogcHCuvX0rLiaVLiDd0YxVJfWSTFaHtSb+3KBQk83MGzQ/AmoAHfMsJc6EXBTHqYd2sAg==","shasum":"91a5e3ced397e162a661560e4ba36ddbf497a79f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.46.1.tgz","fileCount":135,"unpackedSize":584590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM1zACRA9TVsSAnZWagAA1DQP/1oh2G7g4RxqEVXiihhr\nTVyNE0Kc5Qrx+Xls2d3MOKCbFPccMG2fLZwO03gI3UX1yhXGS7l4/SEi06UD\ndftN+wruRbGo0lEiy40Hgp/Ud3Y7Vq8E13dd/WYkv8LsVByMqPUcGxqHuRrd\n+UkKKRLwbfTgsn3wi33WgfFiTf1r609JekDHR0G1VOa5UutFotRbt/BtAuIZ\nlmf1ic7ssm1gIzWOL59wDfEF2xhR/5K+UzWMfVG3IRUAPq4GzpkPmn+eRuIG\n4+m/hY4GDkITk6VZuFJyDkLp1nbYi4jRE95Im6M05sK2QOe4E3APMUk+IR2o\nB3XY9V5Luz9iTQEusT1xzbqILM+HUZ0nUHwcpYGR/Jqzsp9OnlRWnyvNcJEI\nchcuHyxbE8DF6CBHSCgTUTZ+xUAAcJeQES6CJtaCz9OJOA6Ejz4ckSNZrKrE\nLrzlo7ow+ARwLsChxAVOtjIDVF2oT00uEqdSGe9dD4/zTmxrF1HO0TESWMA9\nmpUmEIsvx505w36oXWEDCRwqxDq2gdEzXYhQ+Tw+RhqT25TVyWYiwuaoCg4x\nbkuCN1pz/KG9lkC5lt5GIQqC9mxz6Jtq0Lt015s1lVAejSQ8CfFY86lVZi1W\nzwBcjVEvI1yld+I1kIi2joxQtL/6/ZxWAeKjmimkci5C5ixVbz2mzC6SxJfh\nNFBg\r\n=de/X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHunx1zWRHa34HNnf552gVHeGef/assvylonIBnaAR7aAiEAlwfNpoR3IcdhO9CXRLeLfG+DzXLd32h5WO4yyUDi8jM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.46.1_1597201600407_0.7270432585333095"},"_hasShrinkwrap":false},"2.0.1-next-1597201691-4d17dedc.0":{"name":"@xdn/core","version":"2.0.1-next-1597201691-4d17dedc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597201691-4d17dedc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KdGGerbfg3/0LnQ46QvaYfRzJSuud5uSI7VDKltn6KEVlRvEbBzXcA4lJhKYx7jB1wIA0ZKVxPhkZ8NWQvEq/Q==","shasum":"4b56fcc71fd8da8d7fa8a330b8afc864e07bc374","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597201691-4d17dedc.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM12dCRA9TVsSAnZWagAAt7gQAI3r98OX3s1RpYDrGY/d\n5OIWlbyUYU+gVCNtIQN2xGI36YdZMQxuaMvHB2DsjxkDBVYggwLl929k2xZb\nAbk3zTGVR9kvV5SF99xp/oIEWKXf/wWJWnFvM/ysDBg4Zkp3Fs7Adr0Q4ssL\nD7dNo59iCrqv7YU7EDLlKRV/E2xvQv7jiKgY9o0kxrCtk6lRX3La0TMr35a0\n8axLTHQG1e3keXJWxovG+k2MJ+p3ITeel3rysy1AFFTjnHtCgEdAQMXFTYwj\nYSUIaokWEaqQHhJFNNoU4l7XfTPtid0hl5/cGxYGTBOwqdWtozrSw14VdoAh\nGwIybqzkGAqszYSeYbpBQ/E16lAbQpevALCoF5m4S7w/9WEkPUmE+fvpHtlU\nU4+keO55+iDFwXZX+CsvPfGqBVnjzwUDCC9FG4LuMGTicxdIrm8bkBbfuTr1\nB0K8gxjcsQVetASezy5AoTd5RhLtpsQ3WqQia45SKM3uj1AUkRLQ4Sr8458C\nMhlJ0mqeAs1u1taV4KPd7sTbV5VUvmhMCWtiPHM2CGz/Hm9fFezjFml8nhLp\nyX2vIZ6iRNJu/+PXXpIiryVFo8mDcN2Q8lJJ4lAY+s9JgVSfGl9H937a2lE6\nwK55NM+SU1TxwQ4sph+2UscHud8ZuDYCr+3B20iscd83MVabVL692EVSu0nR\noAex\r\n=VxFN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHqF68oGW4aG2y8SR3yUPX+A9V/hsJpV0MMONJE939KzAiAvyc9wJGrfMeubG3jpPghtqxTs9T0g4IcZv/KCuAzu7A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597201691-4d17dedc.0_1597201820987_0.4128224039921813"},"_hasShrinkwrap":false},"2.0.1-next-1597223939-7c1ae720.0":{"name":"@xdn/core","version":"2.0.1-next-1597223939-7c1ae720.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597223939-7c1ae720.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-gnEfakF0LNjHR0scVGQwXWbnWaqQLDIehBRNE8FWf3cNjcnPRfT3AHysPTTXWs9RnEwwk649vcdDx7tHwZFZBA==","shasum":"069f8393eee42c187e70c4e5729a3827975516b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597223939-7c1ae720.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM7SGCRA9TVsSAnZWagAA+c4P/144jWP+Yv6ift1uZZwa\nZBNDw19fL3M6MALCwNqL7WqtvcS+BRNQfETs0sGWybsPv7oPeRcz/cibzPKE\nm+loJ7tOk5PNBGx0Pfa5j6+DBJfuWNxtPUfykexQnCAbder7La7Iwv6AOLb3\nRUXHUXXZZqdU0AjgGGZ9GDGgx4SRSyuu+XiHFWngd9dMA6FI4Wn6XCr5tc6w\n3sq6/SkGDD8Yuegb83TU63Y3lytmQg8YnpWEHfzNQaVoxSHtHd5T+NGwr8WP\nhO/RGk3YUtJBbOp5UynflDD4Yur3aYoc5seo2JcxALUsPuKjiYn2Uj3tJ/H6\np1ZAqepy7XQvTzvdGkQ8/Krurk9U8b//aeJPRXzCZyxyT0jXXhs1fyjFsJW4\nihjJFOlR1L4ctvwXcmBgNyhGq6rrrZZCoeO0sBbtZo//GTBxoaK9JZ7qW2uJ\nHcsexUPD9We/6m0biwWoIsiBE0mO820no80mbLWnBhA8wbjjjPgAEKd6PbMn\nr1rFg1BpVXGinwkzAii9/n2I66LnoIbdZmW/jXkUy7JehZjg54etbz+3CKtw\nvVbBcIp37VWPURazgX5Gp8DI6C+aR6sMAJKvCSxTSDYb4xhBAA6h2i5xJr9i\nV663I5uhJD4ZcBI1OxE2rtQJPOVMhvC68QZ3nU0bVVlAC7Vk0oraPNI0Gasq\n2ste\r\n=JGRG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjMP3Sz74+7/LHkmI8VHDtvE3Pmchoc6eTUarIPRKHNQIgQtE5foXYHClgoCypRrXoKJ+g5udbmW+W9vpVnP8MHyE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597223939-7c1ae720.0_1597224069680_0.20111508198749206"},"_hasShrinkwrap":false},"2.0.1-next-1597229103-6312c2e4.0":{"name":"@xdn/core","version":"2.0.1-next-1597229103-6312c2e4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597229103-6312c2e4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2YA5AXb6BOld0b/RI1mcSfn/R8n0Wle+4fohd+ek/mcmmD/J/wQIYe3ojGamL35x4wMF4UH3/BLbtIbk8RId2w==","shasum":"9b02e861f40c4ea447625baf51fafa67fbda92a9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597229103-6312c2e4.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM8ivCRA9TVsSAnZWagAAAuYP/A8ul+vXUk0vAApxj3zP\nxBC6kLF+OfP+5ualTkON56Mnmr0JH4uCb5nLL4QmFkJzIgPppzpeGCUOUFvs\nCO+gN12ybhSiU1z77uydHKLtPontetHSNejH5gmE3QG+k+JHwd8cPKrn0oyZ\nLipkfZCkwBI1zK4Jio0ipcW/dYFB8hg5yfy4XWokhv4oiyAy7+j/bRiEfMVS\ncNBpTsXdO0gti1REblhgbOqnFzoxOVoFjZjv3FOq85+/CyvQ6e7Uuj+hxJ/+\nWnFv5uryim7dav73DzquT+AJYZ+OucNTn3hpw7noeiETp6SK4OpbL/NlNzLF\nrCGwUdC82li1cR3OxGcP+W5/xRxVgITFZzk5X7Y4yjiAKOHJTpDOyqoosCfQ\ntpAeZrw2Pns/qR4AwHTWOCaCxNeWcr1rccnWK2V3KAxrZaceLDRm/lOArgzf\nuLmFFQAU4WlUC4AL+HODPU5T+4QdYAMjbAQy8T+8JSYaQbNItgHHyEK5e/kq\nqqW1P0sQDh0lLRV7Ze53wrqbjEnaY4KkK8kf0cenCeGadmFHWSi+KZoGnes/\ncPTRD2Y2P+tdKxFua0XxzvcfJJ7FIZZerj2JAD14i94Zz2TV5NkwQ8yT3ZHl\no4Sj6vNqmFOwdDpwJP5ebhYmaiAEhMCKAxLRqeic4ZXA6VFkqN6wCv5w8iwL\n1jTo\r\n=Uj66\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOz4/3iBp5vDRpiEJas/B5wqYxHLEtk5GGNkuJ03m6lQIhAM5H2du0fDrB4gqdXYlGcTVknF1crarJPWl9eTjABEKW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597229103-6312c2e4.0_1597229231034_0.6989507955571923"},"_hasShrinkwrap":false},"2.0.1-next-1597231755-f760a25e.0":{"name":"@xdn/core","version":"2.0.1-next-1597231755-f760a25e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597231755-f760a25e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-BFnraS3MLJhAujdvb9VCIl/qOJoy123R/O+S2hA4Q2hl73FqfpYBoghkhgNYBSF32muiwL9qK3rQT9He95s0DA==","shasum":"48c6fe39673122ebcf4dee22f3ef45b195a878e1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597231755-f760a25e.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM9MfCRA9TVsSAnZWagAAj/QQAJMBN40Ipp+W4TFP8sll\nK666u+3udzwByq9o0KjU5XFkhZgWGIsZYz+YfhoHKgVanm2yC/E76UhK4rlm\ntCNOxqdl3CP0dS8JzL7sJjEC0KGijw625Yl/j1DHzg543BUVKmznrD1s/qS0\nmwcmhqNzpq/f6+WLqWtJiPPFGBg00h767lrr56VTV1Y+Zg6j/PGgNad/cd1r\ndVn1Ap8X7f6kBUtHR2id4KVNNG+5LsCGZfPRrmAlbOpY09gGlehMsq8rTqMF\nyOJwbUZJmZqAdIJpN1KRFxz9iLsGFOrLh1vh14qz9I4aKLeXJNpC87LNjQpY\no8AyY7s/5oNPHYR7ocvDq5F5RGwTztd0e39aDn7n5A84/F9K7rRT8WL7bg26\nuV4DZZBniCD6OlLwCpzKeMzkA4sjQVDbfVX863KpXoul/AoAEo53NPtRaQGd\nVkRVT8ysBmsGT0smdX2gdcqqJdHk8dkR6q1Cap7FDN2CVY5B4iVFWB+d4XHz\n5dBq9Ry0FuJW1tMmHgWASNBGXDUW3xpjQSaOqb9uzs05HIQ4lBqC4CQB/G7s\nSsDON1viwRetBipi6xgsw9NLd7HLD997faTjkS4HzyoqvZXxAlunHMLtywzN\nj3MaxhucHAyn16c4genU6ag5acuo4wco0bIEpZaJUfe/wNMxIUb1lTm6Wgor\nG0uV\r\n=XZAM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBsnXPvEDg+tu3EAQEh/agfEvzrrQF2arKpzonvzH8rjAiEA7r/sOBeTxgnr+C1rX61im+RpDiLzz/Ecxocr/G6iNAY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597231755-f760a25e.0_1597231902739_0.040307014125334106"},"_hasShrinkwrap":false},"2.0.1-next-1597232841-aa09393a.0":{"name":"@xdn/core","version":"2.0.1-next-1597232841-aa09393a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597232841-aa09393a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-y1MuyBqt+gdQiasayio79lEYLbXYYFGuvi0zn32tmctGNoitkoFge4/AGfiUh0DmWVMye0L27bqtJRtuV+z/VQ==","shasum":"0ab80cf66a06414ec9e99271fff53ed8e0b6470d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597232841-aa09393a.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM9dQCRA9TVsSAnZWagAAUXAQAIZ6DZpT955JGv6YZV1E\nfl6KCdFM9+CIA2kTZs4c0DB7j8iccPmUXBzfCYTPFxjdtTD3juPWx02JLdwI\n6yH7JabCn0OR3YlPJroEepVSpEBchFZ9CEqvu/GD4LpQZ/27CQS3EY/qh74K\nMX47spFMnOGaMrSTl0vqJafkzUbDSj0nRnWbTmOme1VDsDpMYV5KSoy003NM\nI/dzayiEh3a1d8pLc4GW1IFdxOuv9kLyHq8nIHF51YiwogoNRUdjfSuG/U4Y\n0qUB0EnadGyw5jnT4Pi4xv2eCxxYEzFQLBlIsexu7ZusYh/Vr9Ul7qwf4hXP\n20AspKh2ytTnlc0ILL+B14mPV8BHTIxHMDzINKfu9UUh+ixk+nWCKHwF2nOj\n3/vRNlvIHWXm1yEmTr2a/jy4lY+MA84NJ9HlYIt+lrvPaC8QS5NxiddOZIEo\n+f3WzlFEbWE1GOGCJec9DdaLBILqEANpIga3yaGIPgaRxaSwcMiiLYe8QKVx\ngVtJojUN/0NcU6Yyc7TpQD0o2T8Pnc1NEk+SCDf8sradh0epsxO+5WmQWQjP\ni0jB30xEAegtVqmUUcqHNQyDE3Gnyo+QuNsIWPp90OggmZM9u8aTZhUe6Bi5\nydEFs6TLo+bfJWPPFfn/0Qn/wd7s7EI1e4NEfqMeFSYSDb3A+s5Jfg2EGiCW\nSvQ7\r\n=nfE6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDN3HmkwxwM6EDRM/oJBfEQIV3cLbCOTiSfzD3E+k40vgIhAMzrab1jcF2lTK7plXj/NYLBRMxSP65YoSKrWLUwP5mE"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597232841-aa09393a.0_1597232976200_0.8232480223419767"},"_hasShrinkwrap":false},"2.0.1-next-1597232911-ea9d2963.0":{"name":"@xdn/core","version":"2.0.1-next-1597232911-ea9d2963.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597232911-ea9d2963.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-w35C0peWR36Nv4PGLbqfyJvXzuCvdLEZGudsS0GbvMGRev7Mhvc8bUS97+KRCnFhYjnhUoYB8sQTqPy36hlOVQ==","shasum":"7923a927266e218d9cd8e8507fd3bee0e401d716","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597232911-ea9d2963.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM9ePCRA9TVsSAnZWagAAxQIQAKJEZQ70xDld5Gs6I4zQ\nsTD3bF/cUuC1Dahb2lJ2dzETM7WEw5ODLLO5FJ5uoHPam4krB5HACnxQTm3n\nMm7jsejfvSr3GjKTi0Fo8PvD3LCg4gM9RKR54+PWAxZRUreoY0JQ5e8Jgx4v\nSoM4Cnf4wrdHAjx9k+t3+V56HeGcJi4PcD972aEjJyPNaVrvCLkjUb5/Y51k\nVNqqJzDQStRTv+gxb8DVlEvoj9KhVQIrYUB13fLZ3zAU/Xgbvn+85M9C9Ag3\nY3TyQLOuNqFxwtQ1ROmk319F9jn5XJZIXUqNR7etU/QBm7naL0Ogsq+VllvG\njRZIb9/te0q1ummjDlhC5EbOEdoBiB0XTdSL2rWLvJGMFWHZC4gYB/ySh+tM\n1YjWDmizw1DS7csB/HcifwZAmFl5EVtZLAjSLgicYNtw7u/m4WQUtVuQJSYO\nfcGfA7+IsFYkGm0NHnUMcSnflM5bk0RX8XwTTiVLVKjQ+neDLGHQZ+g3vwpr\n+ktflOBLx34rL5GHH0hmJjb42RUzXTPbkvd/P4gNJ0joeCOutVO8hQX4kZ9J\nlmUzcdHzjimMvFutLNgAGxxZ/8d8F8HRDlyjHFEgl6rrFZQ65+Aub9kM1iK7\nXaWaa1sO9DfSmYDtwqFXDOqV6Mxf7cJyGBmhuBwZo1IH2PROT/58vrt1YdUi\n3j1Y\r\n=PkOF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIECFE9pyuQX903TDN+tNa4MAtDSJVNQpM+TJa72x1CkOAiEA/WeP8sNH+uELAPUQJGG0Vg3tHqr7YWXt4gnVb6r1F34="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597232911-ea9d2963.0_1597233038625_0.8167236231674162"},"_hasShrinkwrap":false},"2.0.1-next-1597235074-ea9d2963.0":{"name":"@xdn/core","version":"2.0.1-next-1597235074-ea9d2963.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597235074-ea9d2963.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-N1+YkO2YhwW/LMcNJ3tcwh3ZxrtTdJgn2VOKko5ff8O2iiGiG7pwM0CtourdR04kczpAKOzQE1CYVOig3m/0aQ==","shasum":"a2bc5b638840e7e05c2afb0c395b4fd7adcc6925","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597235074-ea9d2963.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM+AXCRA9TVsSAnZWagAAQ1kP/1WS9wbYpIHFYvLX6fti\n+N6LgfDmRfO+e6lujZ0FkBo3qHjGqbahh+ovmKYos69z4xw0gYd1GzrRnYeP\nf3v8EdGs7l3nczQa0P724b8eiSnHLRp163WJVuR42FH+Ttza2Kt/n/v1Rez3\no+UG//Elcr2Y7N+QHbzQCqPUE7oZCrIaO7WGhb5moS6gHdPthbQXotrpise2\nwblLI0hkjwNaHMxowt4l6a8QSm5HMsTuee9nf0bp9A34pJu5I+s5jzBv42+5\nv8s8RsbESEQgLGJBQJNHbOCglCeTtBR7Fq/HIri6xBqajHfjKOWR/SATv4tk\nFtX8Z0BC37eO1dMPQDtkkdHbO+cTHWPN/wqCeFUegAAuxBT+73uY+g45+pgq\n6Oz0dUS1bLvnJ1g7giXQNB3cV9y9KbLOz9G6sLTAuzt1QankQ7dy/vxFvpkM\n0R4SmaJP8vfjbosh+gpXBVJOnEUYicdKQfrYZ/qRGZF/JOR/cW7AX9XpnDii\n9XMH/coEEcKC5MfmVje63mbcnth2Eye7WKDu8HVV/O62gMd26YneG1n1idr7\n6cfenlWtQp66bRl+ZsaWoQggbnpoF40/q7C9oFO22Lf2PcDuhSv+q+A3Dlkv\nDWGHymCSu4yknLgwXDq9q00SIdekIAhea9xsQjnHYdjZtSV3oKSA4liaZR46\n4vel\r\n=Ssoe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCV2RAE979kRXkYDURYf7HbS2EztXjH8EP3SuZ5doISEgIhAMNRPuKvd00twZ7ywOEExnijVdQ2sD1mpaTbBW+LTwvw"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597235074-ea9d2963.0_1597235223298_0.43856951127646404"},"_hasShrinkwrap":false},"2.0.1-next-1597235917-23b1e88d.0":{"name":"@xdn/core","version":"2.0.1-next-1597235917-23b1e88d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597235917-23b1e88d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yvQ+r1oS3Ki66KovAm8iSG/JAbE+gWsHrnud4S4vLZ7U8/tvIU4K5pDUQQOW2GSJN17kIT+mwfbGgISjCHj0Lg==","shasum":"02bb01318407f37b6ec06110cfa769e99128d6b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597235917-23b1e88d.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM+NGCRA9TVsSAnZWagAANlwP/i25CEINzQxLkQvHhtWh\n3m4Vxrsy7YWAt534m48x3NVAmal0HHLoSa/xEWN3B4wh41n+gySOerL4KBOE\nEvrmT1b5uhWmi5LEmUISmDy+d9c1UYQwJf1YPjmYY7MlcKtYJVFVThLS5uXN\nmonkx7rQa3fGXq6r14HvqLzuvMRhrgoTNEkmITKZWMpvI0mmtTe+4Zzp6mqx\nJg3ieuZRUelluP2Pk7OwIZpdawOkphDJGEMGhjVbbv0wirMxyPU97r1PM7vx\nAAJOIrxvb/F/Z0Xxe4MpeM8PcwDIEwKvXCe8GFMnd1qQMbftIQ7bGypPv8A6\nwd3BkHKbMEYIS7wUqQ0lpwp2E0dlfP8DEWMNt7kjrEdrfhV5Vas2gGeNsxOx\n6EG3/yyqTx9cQTT03r/tPlqnbVeL79gbgU3zqhzUHt5DTgKVPychF40iiwIN\nhqmkatK+aNHTpKuDnW/BE8NXD8tCJ9km1alGcEOMNNsPpsEWHIilDhw+RZWH\nvLzSJn8kXPhc6KMjlA6Vk5fbaMHGfuJhPymYPGLgqtlTf0gS/xJK+5Ge8iU4\n66Rn9zN8ArNX53CDgtUuH8gczqGCw68F4aLUMScR0MbCQ09tjcxA048L+OnJ\nnQnXNlqM7/TtScHxPBIhwv3OfVB8w+Yrl+aIc2NVLVaHqFljotZ7EyMrnEdl\nOEEN\r\n=s4+t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoCP0W1cgVS1iOSWYdS0bW1K9uU7tOJJ/Zg6v4WbF4XgIhANN/ehux/L/P04aPx/5wLzRv9bfV+LVPij8QormrhL+U"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597235917-23b1e88d.0_1597236037648_0.4997280022462445"},"_hasShrinkwrap":false},"2.0.1-next-1597237166-8bba95b0.0":{"name":"@xdn/core","version":"2.0.1-next-1597237166-8bba95b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597237166-8bba95b0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ncEwTuE7rWup3VvTN2XHyhSFTxMnmsI1T8hNBMSdayXaEGncPr4igrrjUTq36WBNKPI0wbgjyqzcDy1lo+NURg==","shasum":"fe66d1de604345fbec24253e85a7e51d2c3a6cad","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597237166-8bba95b0.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM+hHCRA9TVsSAnZWagAAu34QAICNMHi7tRyT8sIgSvWN\nHCxBDKZIUG8Z8Wl26BW2nPUoJONC+qUIYQ0TNnWWp3TRDslzBG0m0c3gkclA\nk3I3rAZKsmxWDDZl+8BgxblhxhZLeAKB1QxW793qahc9YmDtfc4xQenVhtXa\ngCioqsOoMGbQiNYZ743abkzR0oejqWCJgrX1g8fmKhwiLzNzcenYFOrep9tV\nPJ5lV5x5f9vq4X6pGzX6ZcIfrDrxiSbrrXyxnNMjeIUP4we5kCbgw9fHImSU\n61ndPHUiUTlbVfkCGddwqc+SQEu2Eoy0npclkb0hitc0utrLJ4pHODfcRYhv\nha2i8bhj9Ja9pSf/4wzWTu3VO6Y+bDkmC+4i4YhnJzOzLI+FNA0yg8az9+nP\nnMcBNPPrvJxfol0Ii2NOR9CAXEUjH1krBGUx1a7mRzI47IHqrOJFGRIowURc\n7zO4SlKbyoBSTo8JL3Q89IHNYme6jpKdHbBYYitnxwZ7faguTiRgX8g1RPmC\nvbwrgupgFSI8EFsySdbjJeSccDiB6Frjc3FBGLaxj0I2/FowMqjnOs9d1Xyb\nVjuUZEkgRSkAG5oSM/RSt0xl9rG+zUUnPhmFazBqO9vzDOdXPNpzYtUEF1iG\niCzzEOf78IYkWKdBT/ChxBa29u+qfp+4ZDLodYPlr9aFTryYuqN/j43OQWPP\nXyvG\r\n=ETxN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiSaJqtxyQz8TTyjMMrciGlgkVt0SVx5X94QwTPZeGnQIgduieOigxsx2ZW2UaXzFPxs8hzF5P4Z/aud2BZIrkZp8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597237166-8bba95b0.0_1597237319244_0.4451446167648314"},"_hasShrinkwrap":false},"2.0.1-next-1597238010-37a6ff5a.0":{"name":"@xdn/core","version":"2.0.1-next-1597238010-37a6ff5a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597238010-37a6ff5a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-15LcxWVSpAE0r6p190mvxgYH1BRPbUw4lT7P6T+x57JzT4Z+vk2RjK4uusOe3q8lRFCRXaJII2sEln5inz9kaA==","shasum":"c7939320d73162a63be3aaaa4143ca7118a00bb7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597238010-37a6ff5a.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM+t/CRA9TVsSAnZWagAAIDUP/Ra6nEAGTfe+tuLJdMOi\nt4V/omx0xuShsIOvvO8J7NN8YZQY7lFCI/35BKXCLEGsovQCYJUKdUuwi/iA\nV+KFHu++S4IhzNgBoxCtzFWZ0IqlrWcu03/UJV4wVZqepnWugt+NS6Hukcoc\nAt0z8TGjnwTir2tGoPzJAiR/scb/gbPL4LkFBXI9sqjeno/HgDXQdVrweJgH\ni7mJpTiRSFy2aQ48t+i6VjLF6/ON5n9EKFnRVdytqL0nfMJmxZvlUA4OiwKH\nb42JQQ62ygJQmDuV6t1NIKgRLulsR745NahwF+Tx3AFplwmB9A6SyiAo3E/Q\nGC5Pdbm+7ZMYWZUnorGJkztvK/YMNanLkU3fCIUctCXjGXvpUqiH7zT+b3f8\nAZUNnrqIllBx8m7zQYrzk1CmO01B/+ilhoSsmOyaEA4MNQIXw5OdTaO2+zX1\nu5D9lnTw0v+Bue9Y+RBW5wvoZ9UduvD/SXTNNyef/HSPnRjdcmK+NKvirACy\nA0BBVV7CjT2W6Fua8ZP3V2Dcn5m0hU7zoB/MHffCmTnrSHCdk3HerrLHA3g3\nh7SIYhwo6wt2lOyqqRXxOBDGiZMwUBkUVxIjTj1s2/p+dKqjHqwtXMSWJrP5\nfsVn51Lvi2KJ8HaseHqaGYp5Ynff08xu7odxqIV+0I+bCfaAZjUpQ/VpsnSH\n7aCw\r\n=HdjM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFm1ezWMxZRXFl4uunS6gu34oSxrvOrBH9+WVyHzEBAGAiB71ZgQcmwpsUDktTyBe5YiEbqyeX1+vsqcv/RGXltg3Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597238010-37a6ff5a.0_1597238143116_0.1941153730687497"},"_hasShrinkwrap":false},"2.0.0":{"name":"@xdn/core","version":"2.0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-uUiXsLn/38d7YVttDtK/lfnZ3s9J3HMjmLWYJPgBZnd9LybiS/nNvWfdE7N9KBBx1yTOGcMWjKoh2etCPsZZsA==","shasum":"44fec78cb7423ec3787624ee9e97b276db87993e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.0.tgz","fileCount":133,"unpackedSize":589899,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM+9iCRA9TVsSAnZWagAAfRsP/iWkLl7X1scWqLX2XiTW\n3RwDq/rbmFFvaigooLO3TCsMwi8utTQVbdKDkq1zb0XABrwuEmIlKcjSeLbH\nwOzjl2tFtTigkda33maPpJyE1fHtxAlJiLze6d+h1xLittH0lfGs4s2HqqfG\ngZaAEEvXRY0P2/jzkI2RQrKsh7/z/ZdT25x9hci0I2pUaKYKKphmxG+tZVJK\ngbZ200pPO4UFO47ARukbA08FeRBK5ynUfmG78vyOX6Pwen67wR3l8lv3AfN7\nvJ/TBLDQ6lC0oS+J6Cl4g+toyyKcwFpNDB0SWmPdi1/fVIbCN5/dFkfpRpkd\nWnJOE0VhDkcYJ7otUj2dlcjjO9Brnzv+qmdbchCJHCN/vV60qmnjvdkGH5wX\nMok4so8OvwPITKwBw+LTsMTLRltYtH+emP0X71L4R3XpmBCitVffOSHyBixZ\nU/pym2wMDCwaHD0Z0IMt/EQe33SrxNN4DFqudjQIzoVbor2tHtmDfkUAGu3q\n7VCnT4kghPgne97pZUJ8qVNgvPjWLQRTzRw2mpF6/CaazawcgW01XcuG/SSI\nY0M0lahWflCjRfRhSMJf9CdTrtDw/tKdlLC2A5fHF6CQQ5k1g19tet90MT15\nOHefZVMMjBxlXnZu47GJIdLYfahTyCOFHya8xXUYC5Iq6Vge05pEZvEf6Qed\nzZ7v\r\n=WY8F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAGbAts+K0fK1u9AwNb4sFbx5HLhqbKmWUUfrWQS2aRMAiEAtVbBvPMAGblpciDdV1nP36Nn2+aCRV+ZGR6K1DRoGQE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.0_1597239138375_0.04286409388842549"},"_hasShrinkwrap":false},"2.0.1-next-1597239313-af45265a.0":{"name":"@xdn/core","version":"2.0.1-next-1597239313-af45265a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597239313-af45265a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-RjuLHYNZ0wzEgU3MtlogLX0dP9fSa2IOm6A9GmVIzI8rPA+AQ17VUPwsnazKaJ6F+tOUTscZxrry8R7qN2+scg==","shasum":"9b764dcd3683a196cbe1b2fdc03bb491d7f86f3f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597239313-af45265a.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM/CdCRA9TVsSAnZWagAAmEUP/j6MaBufwS0D+YZLaEXV\nzUSWZfxnUJ5Ku+KvbCr5DrMXqLLMsMvunlyD7K8hmKLv1AhKkiDpJjcQ/RcX\nNuq11I8d+7mswQXo2ZNoUfYliOFtDdBlPUekWRuzjRx5jYlTkeTYHozsgNrV\nAtkB22SJ/o9MDz5woLKutURF+Ggg0/pN+FTrZG3drCVrUh0Ru5nILrXMy7Jr\n251hV/yNk2N4astGMPyLL/wj/Odbx/Etu1m6HGdoovVxDo2qijf1oqkua8Hl\nfl6D2SEIsxxLqtjATfp0ZSAdiaJmbSoWs5y9CjXZCxEpaNs6PwL5AU3YeqFg\nX1LLjFPsygIsoxJJhf84Ikm/iF16Pfj2s0e0uPdVHPibuei+ldVQ9+05xmq1\nT4M8ro2fO8jEpUjxxVJylGOOXZen2oWDYYSYBMRf9BTwojjpupHQKo1ErDGs\n9CxAs1E2qQxAAZls8u2WvMZczFsdsdLIMcyhXvtldTZT1HG5F/7//QxJRWel\nI0CEW/QM2Ki7zsYlwJW+X0CsM19pM0trq2s0uJFp5UZuY0pKM1SRQOjnCXkO\ni40hcuwXXNtlsmPeJP0pbFBzQ6rDBv4HcEjJN56XWZ9AeYW30eegrd0kDy86\nmmeKgGYrzb8W1A0PJnmTJyZneMcPNljpm5qsvcfkV07A0KObkSbHFieN1oSv\nzFeB\r\n=eERE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3g1IXmlNVayR7rR6D/4wbikgD+moJPnbRePaUR0TWxgIhAIaIvG6gHbBzOjmOVpuuuwfSdaUTT2Ysozc1b2yteuFf"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597239313-af45265a.0_1597239452866_0.6585445098556817"},"_hasShrinkwrap":false},"2.0.1-next-1597239670-339bfd09.0":{"name":"@xdn/core","version":"2.0.1-next-1597239670-339bfd09.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597239670-339bfd09.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WYDyiiTghwUzwTKzALdpOgzDdU+Yb5vGeGMD8rJIJyk6kNlPGDkGiTd9DK17un2GH9Zz376Qby0npv5Tm5zFTA==","shasum":"4642e03cdf2455ad77c1102250eba2311ea3bc33","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597239670-339bfd09.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM/IFCRA9TVsSAnZWagAA2TIP/jQTm4q/uDaAoLfvQFoV\n6mNDGKfmj8AN449hAWWbKmj2zAAxOz8JNPm9R3dFu/AgxRe9bGYIUFmwM3ws\nusoEXKM3MFyXm6GwYp5Ul5kW5hvFrS/PDFei+79lAFx/0GihOKlIZGeI9Jv0\n7BbMlFv7uWVGDrEZhPK2y64HqePWwoHPR1F6bXWwgBrYdoGmfypp3lEXE0SG\nxhiWivRlyQcBx2780BQvEMUxaGyaLFc+yQm6SSDdJFRcj/Fuwrae7t4E3ay4\n70g+zHWy5NBrP69kVTSsdQZNPz1NMZdrSDyScO7BjDA6gQWUM0EL9o+YjZ+n\nrTVoxVk6z3mJWvj1XQ8X2Js7r5D3yu7498QsnKg7OXvYtlREjATyATQlJxi1\nuic2bQMVaCnStBqbR9/JM6FVX8Ubl1f00l7m2h404fIBWRMEn32BVGlMXMoL\nPCDYMUkf4zQ//n8Xex1cvOj5d/+XibrJO6Fnkx5kNNJzROE7SlTgy+FKfgXy\njwMZUC4TRZUoyqmV3KzDUcsduVa5blqLdcAnmv04+mHCLFEHaulH4Pg9TTqS\nDykRz7CE284tU+7NlDuws9JJGbAhwVDt+bLFiBfu+fuo0Iw2VVIa2PJXk39J\nZ8AHfWxIuSFdNONDFJopsLApq3Y6AFHTuN2EPbCcvkLcAr2j0DHon8zhRVic\nJ+GB\r\n=04Bw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICU/HD+Y/TmQ7L5nM4XxVTLr4ijAtQ9EJ188OR8tyZ0UAiAgP8jZ70AXrbh0ZWNE53GeEPU513zltMI5aloy9Sg6nQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597239670-339bfd09.0_1597239812580_0.9601523146983042"},"_hasShrinkwrap":false},"2.0.1-next-1597240037-339bfd09.0":{"name":"@xdn/core","version":"2.0.1-next-1597240037-339bfd09.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597240037-339bfd09.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-US+p/doW0oUVY5Q0soEt4KqBCKz82mTqMCQ702uNhbpkfMg4v/pUidvWNIfi08rrc6vVMZV8V7yO9/vGvLOctQ==","shasum":"23f6eb1e5851f8a39c83d0c49e97e9e0de7b60a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597240037-339bfd09.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM/NfCRA9TVsSAnZWagAAVw4P/2HLmPq0gruiVJfZL/O1\nHdOnR0K6wgtPK4GHsl8L//rUTKN5sr4DhlhdRq7JFIv0oeOANBQB5iXnaDL8\n1Y7sGBAGEa3HxGuVDAyO9CtrenwVi2X9+vaw8P4Jiyock0eWIn2W85kn0NXk\nnumJ5m5x7G1ALegpG2u6KCWqJlWu2YdX7DUuopNp/Gpb4PJ6xdlcnK0TBqEH\nKwdGILleR6DoDnhYeN/ZkkeM/LtfbjA6mlXMUUWu8UveDqArA5HUkITHb34r\nBz00khRyqz/y8vRmrT7bo3QFEdg1cL2Vvct371i5bVVXp2y9uJWwHIddLRMP\nVX0FQzP3aQMn9QRc6y59q0I0y0EPbm5PRCedXS4y3PiBqeXSp9e4yytynT4r\n4ltOVTtEEXboscvLrsA81XY12IU06CgOEpL8Y5mk7BpK/5zRn1iZCiQW8Ww9\naId2cUWfDj+JZOtBPhG1s6XfExv7Dwq98d8k4hInOPRSBJoh12P7bjU0mvJf\nF5WxvG2nVQimkpXKtz4365eJT9ROieLCiHtWH9u0OF+tpJ6w1ASmD/Qv6V+/\nSKCMqbHxj5coLv6gyXYZjhGXGpkIg/kA0g8dM52Wh1UPL2vt7G8bOh699IOC\njoi35ujmckV/xlssEeJve5Rz+EbuQpoaimPy6PjZ5OuFfJrWDF9lcwPL/qvp\n+tQr\r\n=3x8l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGAc/b8FKfl7qBlq3ubvZsiuxBswlcGkMHWsCkg21UKbAiEA26IfFZMz1PTpmr5skoCWtz9waJlAFaWDGoJDDLsAv/k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597240037-339bfd09.0_1597240159418_0.41258526704702225"},"_hasShrinkwrap":false},"2.0.1-next-1597246522-49e14675.0":{"name":"@xdn/core","version":"2.0.1-next-1597246522-49e14675.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597246522-49e14675.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xmw2rpJsJ5DsN4zOjOx1vzcwgvQeHN9IEdFhupyrPe2IUv4fda73IerJ07sCke30hLe+Za8g6eOfU+WT4jVjyA==","shasum":"463a13dec356812bf46ccaf8167b8307f8e76f8b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597246522-49e14675.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNAzCCRA9TVsSAnZWagAAH8MQAI6lGtuirWBz3Xq6TjDn\nH8hCgUxmDmgCPlNi4RsL2x3bss/+GC9nL/Dtx7nid46I2/ir0ang7YuZHYCg\nZMi9N/KBUM0GHECp8XLQfeFcaXFYQ1DLnFzKUrqCHSbS+4ohztQp0Q6O6thW\nPs3pKlK0jqug8FYyv3O28IB2g2Qmebl8i9IQ2QKP5veXVHmpPi4m6Trm2x40\nqyr7qEfxW/f5lMpC5+fVn8BfdCUHVPJh/avYBlFAmZIcmB1coo5lch71JCUb\nT5sCZqmNi0M0OJzX2qbcO5rMD/ROQQuY4b6rCoNrvf2O6w3yjk51sB07tw74\nLE/T/O1ZbESPCwuniZ7FTcDAe7a4p0wVF5zZb+/nZ3VWiqZwXPd4NJ4EAPfN\nIB5sCU+8Z+RTA6kOZ+1a3wK9gUbGypfTgCGqsYhy3LqUAb6RYULyBcfbO0OL\nQnUoMeizkPpI8pMN5Y1L7AnWEh30okbq8C/036kPX3gvEtyJOViEjOoOvL/V\nChxHLs0IxLZxrf5YlEyYie9rwI/+hVC+X01HuyEWueSxjXH6Dhrz/LUVKg9N\nhMAcgwPkx20nUxEU4llZPo4c1GJsZi2E4rLp+2TxHZIXsyed2wYX8WB/r7XZ\nnjJNGEoaYBSyChPzVXr5xFGbAmck0YYmc21zjUoRXgweRKuC3qQurnabAkih\nyDbz\r\n=daGd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB4QTzYEn1bFBHMd4YlrbavsK5QRn4v8YPfrEyxw0qajAiEAtK5WbD2zC5wO6WR/Gup9Pr+aZ4Tu4nu7lIMQ9NIrIHg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597246522-49e14675.0_1597246657826_0.12534338608462914"},"_hasShrinkwrap":false},"2.0.1-next-1597246937-49e14675.0":{"name":"@xdn/core","version":"2.0.1-next-1597246937-49e14675.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597246937-49e14675.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-GFQ1+o70OioXrPntoaKpPcWNO+gbMdOqnL/m8sRXOf6BxYedATGv+Yx1ANYlqkUq893rFGWEoTRFbSuvDQ1dnA==","shasum":"5c203319a5fa66308efc156cbe21db23feb2e8e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597246937-49e14675.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNA5vCRA9TVsSAnZWagAAxFEP/2NVkaVRelgOhppvGNRS\nx4eDSS7IfmkySvEErQ0L4AfhM2Axa60j6ob8OCSRb1Mxe0Fz1KsLrdPbmopJ\nqoKtiE4ugzS9zvMat/yBT6WVg6mCPJ6sB9G0aCLj7azySDaxOw8Oe+nA5Efh\nPhRVNeRWF5BzVHLrrwcEszQfoHUP4FQ9hBipShtGO+dihv8Ryfj7rD0mml5F\nLCKKDgqBSXawhujZxJjVArbLgDinXGmDHExST/V2Xk4WGqQlDXs8XU/HQNGH\n1jkraPewsdAOoaDOyLSkXIr7ZJ3QSlJXGnqlp8ou4DFvLPTIF5EZwAMSmDtc\nGD0gALcpcaOjI+nF4QUldT5Ewp9FyZR264BvuztlihUEiezSCvDRAlDWAQK2\nDUcOus3/1c9kM+AvFidEvganx4yA6YL1ZyE3RRmLhEg2BssHpjm4Grct8EoB\nxwi0E5OJ+CV7Ow4gOKd81p3DQO07wnom392BqODYFvDj2PuGMvEY81S+mKsj\n6siYe6Jf5RLIGBZPtFKjkEnBLZx+9x1wtW2PPrcz1fKy6X8c5UQdtaudSmtJ\nhdsVkuWz9+Z5E3QwgWruZcJBJLfiFrCDxacu2nq7S16GRC2WDvncd6BNg3FO\nut3RW3MOEp/iqHGqtRfHa9A+bqVrTuX9oTdIWJdg7qFo9yFeBiBSlK/K5tGO\n4tMG\r\n=UnzK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFZy2GbGcN6QQMsTn7bgjyCmAzpdj29eMfu4hmjI1ucNAiEAg80KKewAlL331eXe96YX74DrlRtyMLJ445aVgaKw0a8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597246937-49e14675.0_1597247087430_0.6443227066450543"},"_hasShrinkwrap":false},"2.0.1-next-1597248813-b2d73efa.0":{"name":"@xdn/core","version":"2.0.1-next-1597248813-b2d73efa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597248813-b2d73efa.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-6Iv8Y5DLMJtMHQDu5tH+B/+QgKE8PtjvXCC9DqibpfwabQAqdt6HytayPkQWKrKu6dDMhSUNYNhvJiq0/oVDVQ==","shasum":"529643d0546ee5828c00aa57dfe0effc126d5e1d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597248813-b2d73efa.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNBW3CRA9TVsSAnZWagAAq0MQAInTgPhuL4C1q2amgsK3\nD9maCvWk1izvxYjeGOZZ0VAwMjguSpJyscMpdgYJMyt9G9SMvaNeaYYNARcl\nGezXzoDpyBQ41ZikCqc/817DtfxuvBJE8UfkUk6bk7eGaTm371zSS7pMThMB\nR6yRsaj0WlMDQy3u5eLtAd4iIToh0W/7xM09BhusR0Rbu4Mn/268JqoAfD83\nF9RIrd1Dt3cBydnaLo92+lnELNkHC5Dh4jXQCMMqIRP5yeDC2zu57Du8/JNU\n+jzclD4y5DBVvRMcrVJ0tar0V7ATrYRgCK+Vrxnn0GmW/Xi8EPUjtEki8GBY\nj5Tb2jLq10vlBLLPyQdTE3sLSpW2NW0++0jTUolyKGsTwCAY8OIcCzAD5WNj\nTlLRAH8qs6utSNKwfjYo3/G1PbSzIUdUxO5SpRcMk69/00jK8MUFYymm6Wqp\nR7d9fS7u2En2tXbg2yeAghlyxclPboYlsf5wiME+Za70Nb7PICytk1ltMjgm\nxrfA+4CYiTU6HAYCOy0W8qnu39LGReDzewtw3aWZwA6/akZbUJtBXcsPBfpn\nMIzb7OiXeJX8JxQHGppvb7cHguyybdm+a3d2S/9HYsVjb8iGdkD107Pet0vS\n4gMRLGJwkl7YqalIbJU42yXgzV7m4qyshtfVK1g9MemogcSaGdbxlXAutOED\n8yJ8\r\n=iOFO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEp5dB41RbVONgy7377hspauVynQXGPAKPI6ArY8x8RdAiEA6o0cDYd911VVAjiKNc1JzsWrsbf0j9hY+Egiy3axs0o="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597248813-b2d73efa.0_1597248951029_0.27549483769228833"},"_hasShrinkwrap":false},"2.0.1-next-1597250776-5a7997dc.0":{"name":"@xdn/core","version":"2.0.1-next-1597250776-5a7997dc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597250776-5a7997dc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2GuMjCrGfeTUG1ukMkf5ewqejBn8SlRK8SlGTiIVmUjCAjxI8dG8tx50TRGmFb1UXManxKlfyMJU8yu8UXeo8w==","shasum":"cdf873fe07793bb60a73d382aa872e5e327656f7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597250776-5a7997dc.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNB1mCRA9TVsSAnZWagAAqEcQAJCwhCjrUOSExKp75sRs\nrOsCxFhiFN52oQ8wflkJlCspSYClKUoNs/UlWHBuTkIMvGim9hRq6k2bw5x1\n4OCHCp4Ob0U/LG9EWWSzE6OCRjjHynAW+PJOfa9ySZo1ojeL9JomABi4vDyk\n/Okk0NsnNhUE9oJrrPbpxGbbzri9qh30VngGXMKj+PPT+sR9qitS+OghI9+h\nL70XVkIo8eJwmWYZz9AXBatSMAO4Bn236EeXeKSYnb7/vXF6nzPhVw0TThxu\nYWzBsBOnmz5ARcPKn11quxBkjAk5FDpIEMxKyoqzsweVhthKUTPtNTIduNSx\nlEK2IkrETNvx1TIhg8n1mx2tJnwgGr9jqm3avt9qXuLyM8slcpkCsIvcoopX\nfBX9ZQKW+ZrkRU1qqpxllWDo2TILMyHSYOybOkJNFKUQD+f9Aw3KuKJdsZWm\nlGQM9QXqH1ru/0BcoPiGMnj1A+QXOX9HPaKTpMtEY9gU/zgZ5EHPQLK6ysat\nerbqe77YpyVL/Dewtxan8bmy/ZvKqaO1NldqRUImE0AeDCzo7FHlQvbx2lyF\n6rZYIW09nMjg/UvVmnPH4QXjToKL36Y0n/EQ9Y2E6jEq4JAGYPgNGpPLGw8R\nPLW2/EB2ZerxvzapZ9ag1IgROe5bKsObwSqfh8opIeCcnvnlJlZ04VvLkVWA\nTb/F\r\n=qTy0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHEEEY2rnpcBH6C7KVcK8/e3llMlfWMzx10JJfP36Cz2AiBmJP6MA4HpUf3x3i+O+W6TPOUGX2HK6UaWJJSK03EO7Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597250776-5a7997dc.0_1597250917950_0.9954302490692006"},"_hasShrinkwrap":false},"2.0.1-next-1597251397-5a7997dc.0":{"name":"@xdn/core","version":"2.0.1-next-1597251397-5a7997dc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597251397-5a7997dc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5Uk0jzfrE64kN/UiU1ggt1WlCSPFsys8BWsd6QiOvXMpz6J5kAWgh0yovq9kwiOprurtD/IraGNrtFsp7XXKrg==","shasum":"9b23d6d2230b8d22d151173f736a70b9fe64d6c9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597251397-5a7997dc.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNB/NCRA9TVsSAnZWagAA7hwP/AsjkoFruT8hGj2PTEKM\nO08DB3tz6AbmIspSdG6qXUqKkFHCd0Zb3P6WqwliqCVv8fJztghupWXexcKm\nA44gyeOW3ZBQNIS+X4wp9bSG6dSDRsct5O71uwjSUwiqvtYJpQxwtYAKt3t0\n93c4vF895FKSP/c/0M8Noj2tlvYCqaNxs9Kh+T8LQP6y85XUplHCZoKTS68e\nRRB9jG0YEcjCfv3Mb3zYiB157jpKIc+UYNe7rlNCjh/n614uHymsfpEfIeb7\nIHOHkG26NnvULw8v9omJ3dZWe8A5om3BEtRBSS5/MGLLyleLpWl1gi7c4W6T\n3z78KDxUt5YUjHpxTZwyYz9QwXsV+8v3VQlheQxg/KqO9XwSfou1kuDsCc7J\nTBOijxHs0eas0QncN+8Yb5Nib7XZLXHi8M+7JjznFtdQh4EmveHL6Yos4bq3\nO8HRP8N5uWy2L5jhckFtYwSr7IT01NelozPv5hYBuvkEr44ACFnK/35OGyvL\nkYqgqFOZOEYERfY01MEqX+DpUk6KuXZhl0go/GM3e1fqORTfVNqjezWd0TZb\nD4ljpoIIcPS9QYLkIl/q/GX0AR68e5zz7VlpSER4DKPB4ojbjZXg5czdgZ6i\nYMt1Ky2JDgw8NYkzv9k98dumPF3D5qswoKFvozm8skcR8d8LyPSgKCIvEcFx\ntI3U\r\n=ukAH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDzcX7Ufzvk4LRcuRqJ7JGDmZsxDay12xljjXR95eWEpAiAa4kfYjCUCltVmJrC7oraGl5/d2/COTzTeQU7NmWvYvw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597251397-5a7997dc.0_1597251529703_0.712269754327451"},"_hasShrinkwrap":false},"2.0.1-next-1597262026-2e1c371d.0":{"name":"@xdn/core","version":"2.0.1-next-1597262026-2e1c371d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597262026-2e1c371d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yKdlosx/3f5l7xFdLHQNFJ4wppS9rTE4VHc6vIZCDnmozXERgX951r3xEblhFG/lVsad2zo4aVKA5lzLdj45ow==","shasum":"8f2c8be89a4e52af5476c76b8d296386e0a9b67b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597262026-2e1c371d.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNEkzCRA9TVsSAnZWagAA8vMP/jYsyTybp9ck4HGnFZ1v\nyBU05UEnNnDfcuw/j8M9K3aLTscEJZDq8jPLtGP8cvj3q2HmptTAri7RBc9y\n+apf+PVY7jUUMvB9AcJOlfaI78yuJsNmpJ1hYmvcQwPhHBd+QtCq4IpXzw20\nYihBAGdiCQgLeRz1raXQVF57IeoA1qEUFJlkAQVCxcr729VulCWPKMopRwZM\nkZcoT5lTfBCNhavIKA36Ioh7yGjieqRve2/oLI4Zaagiib5/oH9LXh8+bkq/\nbf8jdc+tHjYribw+mOcZokYxbkS4lZewSF4xZwAlKvIlXjdOPR7k4MUHToFp\nQktWvAFKgqJmBLO9LxdV6H0PgHUt5AEJh6P2uFgvdNPuIvJ5HLl1FLwNY5p1\nkXjD8SgXrr8lfRm8OagFpZSOompDtPobt4fm5rbZoyQ10RaALmtd+2bUN6en\nziyqFNhmJ4g5w+UJb6aRygh/GKnZbOdyOFOg8K4TJqNF+54TH4UshTHA0JXv\noKv2G5KArFWjcf/j+Dm3fKNMnJkmPcPncvLg9vxlt4/SUpai/vhhgoEMG6ax\ni+wrNmyVyyYACShNL9bFgfZjijrfldLxNmYx12MnoIQYvvVswB8zN0qK0s4P\n+iFxdFieso34PiK3bYl0UkrVTj+TxQ6E7p/hWbqy8WG/VXmLZxTY24TBIY0P\n3+r6\r\n=su7L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBkS4aMswke+QVKImvy7C0/u569Lj+idOuPTGuObmomhAiBNH/MVNB0WZIKWZ31C2ynRIeAogmgfLGajPNslvGv6ZA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597262026-2e1c371d.0_1597262131382_0.9607493676555474"},"_hasShrinkwrap":false},"2.0.1-next-1597262161-ec425d79.0":{"name":"@xdn/core","version":"2.0.1-next-1597262161-ec425d79.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597262161-ec425d79.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-kkKJHLFS/4jJxSz8agk6dFFT3LWJ/eybXc+0g/0TvtJ7vm+pi9L2SCFkSX4tfTsSbM3tR0y7WuKPftZcvjEH0Q==","shasum":"655a82186640a34d8458923995da51997270c5be","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597262161-ec425d79.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNEnZCRA9TVsSAnZWagAA06EQAIAoEUkqxjKIPKcB+Hhq\ns1Rc8Ph+wWoCq+Hl6ZbYJA2DtE2TtcFTHHAscfKGuiXP5CSKQo8RR7OWjG41\nIqq6kCIaKzCpV9fGRD5KF5aqS3Qbl/7tTEw/he1y+J7PR6AtE/9xPANE7MJd\nprVSgEKWJdQzo7jFnHiMZQhsvmcGwy4TKgDyLxi7Lh0qhEpem9pQWQ470UL/\nhJ+g4eWXHvGO0rdYXYF7qCykHONRaNrpCnSg9swHyh+KOSffyGd/7+PDWJyi\nA/jnRhu58BlePfMsJuudHCtsp8lmVoGC53WqBm+uJiK3m+Oud6H44j/FR/Rb\nutTHjh5tbklJ1ZD8CtpqpCuIcRKVMWlc/o7mbOn8XmVx9MDISBhAoIN58ufs\n+ftukzq5M+HazDxw4aUTavZn6lH0klkXM0c5lUtuxNwU85Mnz8Lh6zCoSypy\ngDSv7JCkLoWMMNf3woItI7gQFCJB3rMW/02CQC6C0/ScUKLkJ+JXL9NKafAZ\nYc8Ow3+ZabA90oG2ugC0LdWAOPY4tdPoSjuHKx/Df1Vhsap+hBfG0ILHpg0Y\nYmoe/1BYVuMN44923wX+WSo5948VwAKtIBSuw/c8NBcN4K70m/ZL20dCDKwh\nGrob9lRpGWmfHyrI/YsQMsfUPkvxtV0058KDyv+d9+rMnslrKROv2X5JGt3X\nLyRG\r\n=zNX9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGEA+KehLHMsKek2f171nwB1/Zdb11o76nYaq/+Z+qKOAiAc1tX+CK5MeFmCS01uTI3aoCqFmecAODYsa9catxvn4Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597262161-ec425d79.0_1597262297056_0.8459543196799206"},"_hasShrinkwrap":false},"2.0.1-next-1597283887-ec425d79.0":{"name":"@xdn/core","version":"2.0.1-next-1597283887-ec425d79.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597283887-ec425d79.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nZawXo8HyBC5HMagpS/Y40H+5ZafBNUMoxLZnqlL7jYJ0RaDnkgjweHJGFqbcNVBc/N96dqDuaFO/dWUweK5Sw==","shasum":"22c35ee00a1f16b4d85de9ee046513fd1b925980","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597283887-ec425d79.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNJ7GCRA9TVsSAnZWagAAi8IP/AqsnPY3Am7PwlSJ5p5p\nzX9nahVa1WlH0nK5HPBDMmtj7GABipz/TuxL5sWb074eOtYMQSP7qx8qcluT\n0kJnrS6v8Aq+Z75MkDTV23/BSrwoy+jThqZ/Vbdq6LOYRS+7SbzaOHqZyA9X\n+wjrZGi5FK3a3W6KX7e49ZdjhXu8h1FXszjTIyvo3Jcw/401SLxyixCo4IDL\nTywRJj5RyllM2fyKfnntXIh2hArE4lYQGBSnWggvwgqS8HD7fSUmBW3jokOG\nJ3J9IKQeSZTNBA8ZU/1H4yoD+s01U9URD6h6YQJPTGW7o/y21ciMimmWiBFg\nRbluCDjvIk2Y4TPQSC2i1PanPdPZhRjnz/mujihanTuNArbfUckjgEP5I0Z0\nOesdHmSOobi2dRkite34Id+DMee5l2fFD7OEkguLCxktZ52I7zet0wBS35+a\nk3PkJAf3s94kjBUnM8TFJP6lrDTa5HqXDqIyf6NiSKiJWWGLjZN0QyAcxj0b\nVSFSYEV+JRO8OLUllQmuAPYNn2Cdtv2kMt9fEDoUxMOYBBqGs8LjZuJ12JXY\nXTiLeoJXIAbnRc0Ef4Pu4SznqFgzq9vUn3oKONinQlGAsGuIhpb9zY+hYDY3\nB4matxPiJotvp4BglCf8VGBJvTm8uKfzOZ1OB35p+hvgU5T9KOkW935FKfaV\nW5i+\r\n=XD9H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCl91WhkNcXGTN1yxqqpHB8FoUJobemQnhdCGCyC+MQlAIgAjb+24hpFj9NuAbNA0q37hSmx2N9bbQ5B7LAtAiBs5s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597283887-ec425d79.0_1597284038155_0.5105506012509535"},"_hasShrinkwrap":false},"2.0.1-next-1597316587-ec425d79.0":{"name":"@xdn/core","version":"2.0.1-next-1597316587-ec425d79.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597316587-ec425d79.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-sfg87oyRHJQf5IVFSe1Pem6b10/WS3xQjhOsTI/9GkNfuMFfXVyxTWaqxacsotOvHEa50esjYrugL+OZ8RjNAg==","shasum":"5fc6db5826bfe0890fb5b9271386fb8e662a4ba2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597316587-ec425d79.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNR51CRA9TVsSAnZWagAAGUEP/As7ozwmF4DFwzZpsKK9\n3j8ZMx0zhvrr54BQsjmEweKbISb4qT3I70E019/qe7aFwiiqjUebrKOvqKMx\n4H6X7RWxb2PrIGYEP9+LeZ72sh/MhbFBsEyFISTyaMadzfnvVIEc+L8hUQIz\n6WqXBnMb7xXNzpPZrSIboUb+LuKK2G9zQQFimjsiiuoshwXEtP4vqnsUcHGV\nfY+oKrCKbsgSopA2Hqr8ppKqLCYGksw6iQkyDu8PODJU9ua0hL0XA1UQVjUU\n8krtp7Z4p02ppMtvmdrkHi3Ey+5ukSzbETnJ6BAZse53ntbO4qMe4SHBObB6\nSP4lM29BAy3iVHDd3NxmDKVIAZ3RhomsM8MXmL1HWcLIhdxfEbNoLt7sKuZv\n/kkoyrSBWn84LJgO9e6FHCwT4Rz03VJJYYYRYbXtmKwHtZzlqWvDMnIzmtEj\nyahhSfSXzeJumSg6bjNPcCRRJvs/xBU/K3dBxUff7nG0uTB16KJDavrQuKpk\namxcGbGB79/KAvjjAgclyj80saXiUgcbLEcw5domEppfDoC8hlUInz5Fg8h5\nmF7zHaQaFJCSs5dohQdxUt16uYkyAUhiVYyegaJyB2hXnd6UJDCEgmLxO0oG\nN+AwhDr7NAN7whCbch2JK6ypokb8rEV/SwT14thjMXuIm0cc3oOTRtAfsM30\nwa8F\r\n=bF1g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIChG2QpnceRQ55MD1GQdTExZKMDJ8NpXlA09F/Kro1toAiBhWiWDAAxjlBipZ4FX1AWU6hYQVxLyud4IpqFlM85E7Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597316587-ec425d79.0_1597316724960_0.6419315596814219"},"_hasShrinkwrap":false},"2.0.1-next-1597318746-239b9e83.0":{"name":"@xdn/core","version":"2.0.1-next-1597318746-239b9e83.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597318746-239b9e83.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ghtwebEXN6sxPhzrJej9dewoywiFVlnThdLip6BPXUoPIZ0v+hDci7p9YA8hh7MAPSDUdoTO8TCCAtApp0G3fw==","shasum":"94c2d7e2b47b705370333ae9ce2e289987ff0682","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597318746-239b9e83.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNSbpCRA9TVsSAnZWagAAncUQAIhHyTp+GRxP/qFmcW5Q\nvmNuGPJbPv/zBHCjjbH6LMMvLa/gnT15FCRWUIceUjT4uMZ/cSaP1Z1psK/9\nPEht+VRk9sGnbrj9h91nT5GUVwE/l4RKURfcNWMv+uhjnfBmEKQtuUicXuGg\nCKS1zUq4K/Xr1ITTSIUyO2R05CT3XbhybZ+jfb8SWJM6wT91vPWFpe0FUor/\nvRSxBWuAmRqm1uD+cTiNJDcFIKMg3UwVG8yj0abBxOjHwIZ1C13rT/J8GRMJ\nPnnL0E2NcgeRMGK/sq8SYuSn/mkRor0eZjN0uvj2Znn/F4eNemqYItZMzV8A\nHmOjRPmSuX/7qW4m1egdemoDaGDS9/bw0fkVPueG8GGwnrQpf6DE2djocLNu\nAKvN7w0E6AD8t+lx5xqgGs1E8+yuhIoXBiBgmb7tZbLGn/rETPCBkG2bZm/t\nWHypLeeE40XOa6Q/HhytRvDUrvjpFmHJjIZJLSWBTSMQpNMHr4FIZW6SlzvA\nlKgekcfuUYfTgby+fC+7M3linlUaWcEXVrD9KwOmPJNaTXJg7Yj2N9o4IdB7\numeSoxYQ3vPCs5ul/TlELWPrXoxRseNCu5OHJODNVk/YEVtHjDhfs/F//8mY\nf/Pjm/UfG2Hx6vB6SGMYLJkoGzYK8G8cFQhBC+nxmANN0DAunyffIKWLXv1C\nFtIy\r\n=zujK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOyeUiBVn/b2DwbqvEEe8yYNf6harXpRw2UdQboWfELAiADdQk2WwPJPgBNpF8BDDfq52Hqt7OREN+kNbouyg1qPQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597318746-239b9e83.0_1597318888926_0.15742290642465595"},"_hasShrinkwrap":false},"2.0.1-next-1597322600-fa827fb5.0":{"name":"@xdn/core","version":"2.0.1-next-1597322600-fa827fb5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597322600-fa827fb5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yc3dIw3HVjUpgXFdzxuK0Eoz8IJx2MhsZHjjIrXDjeLu/ELyRb7w452Y2lRLe+B9llwQuSFUA7xrY7gUGOh10g==","shasum":"538b7326a237841b7d850d99402951f851174ce4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597322600-fa827fb5.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNTXqCRA9TVsSAnZWagAAbQMQAJ81qhM27HQKgoRdfRIF\nfzNisq4oAfieObSbRqP2WTyx6rJoJ4TWRhnQuPe7ife+wanlIeg2Yp01PsJ6\n+N1DGchod4AbM0bbj5YgtssTK6v/kW8rznaj6sdxCAkFNQqTSjz+ZBjz0SLY\nldrxyd8UGWxN16MgMNKRzVZ7cYSGQsZB09nh9ZKUydJLlQIv3oFxcjGNCUy7\nLID9L7P3m6criw3SzXQT0odDN9PabkbzaD7818mHJJHxo/0RcpqEYOxAusau\n9ppV9T4EzywnHAYeNuPH+JVBT8Xa8UJj4v9MdsJWf0GIZKjsKZJQEu3/XsdE\nI38mkkbVz+nPY5IKmuY6XotCkuvb0K0ZSKpf2bvE0rxGe3B3RbPdeoVsffNL\ngr3vejIwYk8KkVr3CCUN8Jg1bDC5nGhQ/f5Zw+KYn+arOUR0AJ3QdT/jY9i/\nZnCL6yqZwURfJBl3Y6I5y+UHvUn7H6OINbU9vInOenqt5b2+1RCdg8PkJ2sU\nGIWwCb76WF7wdtZHhQXrrtXeyk/wxIgxyeBb9KcvfTlTVbwclNOXKVsOI4N1\nvcsK1bx41z5BDcR58Mn31ukVJby1GvJ4uumv43ZkT9JB+DIwVMtz2GIL4G/5\naE9BL05xyf8Fjn2vqLe5Sx+UBE/D9qjciFd6ozpLFy1qOECpagcpek6Y7Imf\nORsA\r\n=ZMR4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFTMQ+RJEAf/t/z1JH2kNWCUk9Vo+lf3NUMX0939pz2DAiBNEozGCrF9KvV5ZVgmangXNT4rWIe+CtT3cScfyfG9KQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597322600-fa827fb5.0_1597322729786_0.7416784460775483"},"_hasShrinkwrap":false},"2.0.1-next-1597324298-c52fcf64.0":{"name":"@xdn/core","version":"2.0.1-next-1597324298-c52fcf64.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597324298-c52fcf64.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cI/6ub+FnSWRixjEMw7kgDC6zS0L3ZgtV+Q8CongXTJH5xcyi7K0VtbeM4tnWx782hmfiGyBaqIVu+ib7jgQJw==","shasum":"cb445575d57f463dbeb9b08df93c0c11e28efd86","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597324298-c52fcf64.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNTyqCRA9TVsSAnZWagAAlGAQAJHS5EMHOLneGp+clEb1\nsv3VyWB785kFWAhePPy31NYW2LetW2rXHavt44zJA69jzmjqcjNPXbo3JaUW\nqYUuEZ61xXAMDJAxF+h2PzMO2DGlnDF04l5smwIhGLEX/e/NIMD9XhXNhunK\nY3b3RulrcB1y0ZOnIMi6KCjuJ5fHV8c0JApsxq4W5BvozqufB1Sm95ZHsS6Z\nF3X5S2/XS5BpeNxTZi/Elv/JBCgQl/ZZ34L20BxO36oSOhzLCNzOJ0fHjMff\n9+OaYhuK8nPOc3XMxNJhOcymHVbGegeqSYLQm9hswcCbgOErmfUz+9tISSag\n1Z2i3lEJNgDqf4Z4/VrBY5nSLxgDkZT5lxFkprd8HGBR4PEvRpEgXdh9ec67\n+8Sht0fqe9QD8aX7QwdloTJ1BZC7xUgs8Bc0eUMWCSGu7KPr3Fz9Adqcz+c6\nXqFHRn1N2bkUge8FJO9OSBrYOelvxesKpeUGyTl3GaRI9iMYfe+qu3EVq9M8\nmxAqOzzrdl0r8ohVYW7DZ3+lNDjuWtBIWE+O3vUm8uDMnd9e9VHzsfd1OGZY\n7UALtAlmxU9COy/NXZvOobwHNeb8d4wjLl+L3TOz3GO1/+BM/Xc5IMMslW6i\npYVt8hgpM8tV+tTpemPVmo60+l62WU98ZLrCw/K20rqSi8bZU3BJoysULfF3\nDcJl\r\n=aUDx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGS5nBI2z47589RP4wXkJVR89F8IBftgtjRV6zySeBmtAiA4iE6sggbuNEQAzIaji5xJBYwk88+3ENSJLMLjxLMIEQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597324298-c52fcf64.0_1597324457664_0.14604071441804245"},"_hasShrinkwrap":false},"2.0.1-next-1597325045-e4854fc2.0":{"name":"@xdn/core","version":"2.0.1-next-1597325045-e4854fc2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597325045-e4854fc2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dPtLFl+uwBIQxJSDKkMqdsjlExC8G1dJAwBMYPtgHCPZRKNByMRWy45kj+ezirN6Gj+2b80TtJlf8sHJZiW1TQ==","shasum":"7089dd8ac46765b6865e4b8dc4f9bae272586411","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597325045-e4854fc2.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNT+DCRA9TVsSAnZWagAAvSEP/3Fbgtridq+adGk687Dz\nfRhMI8lbE4KnIIEmCEllSU5PiFNNXbGvfdtjMSD75znJ9UgLNAVv/vDYox5S\nMUEnPywi3FxMhNiJCtBrrKu2+k+9+7DqdWq3B6oasbXfTE4fxBZSeoedbl24\nGzMZikhrEJH00doC4L5mPzrvQAPlMaMORqKtREzHHJm5CS1xbJ/ks4/Rz7H5\nbtz46FSnH9l27kP3fevi6m8jQWnoZo5aEfEtfJ3Dh2F+ypPRrULj87YxTK2D\nLBjKHkwhIh3/7H3Xyo65vi84J4v2sMj/m1qniEmS243mqSMUmgS9vvidRA59\nNkqUfc/Mi+d+sg+YKdIw/LVIiFGSlEjb+2nI/ZbWspWUnKdEMyclLhNYxlLh\n4G5xIHEMp2bLPwSbgdPbskpNjbfw4bmkhGgdx7L3wQWHm36wQ2ZiWkW0KQlO\nAqz90uEU6uaBNAf1pxdW4NkSmV0dNgqomCwi0FjIoFKc8nla1wPV653zYWc3\nnHeC5AxK/y65jozAEHuJ5IVtu+qZSRnfyLajeznaXotptYL9qRNT00b5KGcV\nzpAQ9RuHMSNH2IFN79x26RWmnsqhunNBVfwi7VY5vwdWkz8DyIrGVu1UatQF\nbhiP9mlVQlWv8oEzQ06Grt0vzX0Dcr8BXB5Y2n8YYmTfBgubBIvX+e6USRez\nYa2W\r\n=ZZpr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/Bhv5asvCEkH+VETQqnzLnp2Llku1ypFnwLht+ek2RQIhALDWmRWu3rtlJSU/xUFlM+9FbfmQPF0a5g+eEs2gtw8E"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597325045-e4854fc2.0_1597325186770_0.36692974026424263"},"_hasShrinkwrap":false},"2.0.1-next-1597325193-beecbbd0.0":{"name":"@xdn/core","version":"2.0.1-next-1597325193-beecbbd0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597325193-beecbbd0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-om/n7Zzy5ijZZikwHL0fdw3cyCfNtQ8nyErIbt580+DZunNUiGQKSNjXPjlYxTChUSvI3OPNDj3FI5uLbb5uOg==","shasum":"89d9f272285553cf668b105dfb7bfd1366b03ebb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597325193-beecbbd0.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNUAWCRA9TVsSAnZWagAAcoMP/iINW0KhFtBrV83tHAC8\nFUL6+evXKUhIfO1psSnJKNho0k3q+oXFSryTAQMhK2UyKnRu0HleFEPnXEXA\ncm65b8UZ/WPEmpJ+ZlzEAWdxTARw38RPNZo3efadcZLeqYoWLsrGkkq8cxhD\nWb32EzN1xMTSFVRh6JMpubDoVVixzUJsHxxEz1HKjJNaagW3XKoYoy67m7da\nl/XlZDQAWF2bG+bjiKaHJ2vDECbWcdQWB2dLjtji4SjOovB8zlSTAx3O0SAn\nnebwyueAhd6ZyqaMFqWZxS2iJvvH2ej14OIitz5JC3i8b8X/yvDudaWP9yD+\nu7SStqZx7AJdmnRre5XKM9LxkJpq6hWtLUoEzfRCxwLms0PeyKK3d2WS7v+3\nr7igdXqnBOYHH94CgVQc+6azIx2Cj9Mo+8nAYfmVqUkia/y1Sar5Sz2oTn8N\nh/lmzF1K8PWOAHiST2jAeo0v+KFSMShfC2TLc1OK7NUf+obrS2YaAFuxOi00\n53A6+fBeP061puETWy/XPm4NZDchfUQd5ksynDchgmgRQR2gAIzmW4VBb6tK\n6+DVzuh7Rjx2buW1tun4k4U4XumnPWpetzLD08nqnIOM5DgmMKe73UfV1nUm\nx9r4WWpXfRPQPrWMekqokNhJKA1jk+9fZpgZQpj3AAIPd0yXfKhT8GdIDELU\njEiW\r\n=GxzF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgxjas3TOOfGdqZOzGMgrYmtN5dqXrmZzlS+N7dSxrAAiEA1JUkpEUH2uPt3qsH3vauc4m1RwRPv1lUC8GzYMCXZY0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597325193-beecbbd0.0_1597325334399_0.7637428693025501"},"_hasShrinkwrap":false},"2.0.1-next-1597326203-e4854fc2.0":{"name":"@xdn/core","version":"2.0.1-next-1597326203-e4854fc2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597326203-e4854fc2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MhGqxdOpy1GrZs88nNhlftJ5P285NpVr/uzvaDKLSwv8H91s/mLkwpz0IhysIwDzqbuZcNFTmgSH+GUZo6sDwA==","shasum":"2453a8cf7ec6f8e8d1f036728112688f341918ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597326203-e4854fc2.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNUP5CRA9TVsSAnZWagAAPggQAJx7vDy3lyG88N7T06/9\nKvYGB+GRuphY+AABnD/sZUCK9VXbY7/BEfMFH4PXCyR7tXqhDRX+PAURnhlT\nayupKGlBXnkCd6NzTCBwQrTTg5vERe2Df3rcqCrTeBzBGTIOLTEFlySLL+Hz\nWXLK+gRi3+ajZnJm9dPVhXTXyiwjn3LoNXHH3XxmlfIIBmRWXhEiiENz96dH\nK2C203+u+KTuBcVzFHLaEU04RYuV4B1Tho31L62Pt2zlzQBewty9lUoziiby\nO96C8IkCpoD/95z3lFKXf2Ms6qVOQsbNXALEugWx8mta+l/4YBGkKc1kcb5V\nXRw31iSLpfSl+PPQGTAmfb/D5iFHHjX/Hv+7qHCJoVVAyxxkcqIhXVqL2Ei/\n1QOpHDiKg2yaWxkfk897dJ7V3FREs66MhSpodfAjyjoB1XNygOdBE34GpHU1\nDfa1IKk5ilVfwt7yzWwTJxVTzl+lM0nD5DkAHbuMMVko1j96NEzX6DZu9Ckg\nNZ+u/uxzYkBWPTo5iR5xlrzlt6tQoyAwRUiQZNSXnMxWoCwPRKgRa25VweDC\nu9kpIru2rBIW+X3fW1/daeZ9h1Dhznc/Tpyb7FcWRy5yxFyv1/uOwjaaUk/k\n63cscQT7wHdEscDlyBFOk+EFxJsiu38tl3zSQl1ZfJjuVChe3YBgiZMC70n5\ndW61\r\n=uf7v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCjGLHzaU0SrHBiBA7umpvh4Ezz6jx46UAxDqS4wB1lwIgcJiwne0Xd6Koa1L81Ng3jtSp3qP/CUkj551/D1uIyzk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597326203-e4854fc2.0_1597326328850_0.6891255373404772"},"_hasShrinkwrap":false},"2.0.1-next-1597327104-d9f8adba.0":{"name":"@xdn/core","version":"2.0.1-next-1597327104-d9f8adba.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597327104-d9f8adba.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-AHJluFS/iWjKrsA8iEZJfVi2Dz7NmEVvUvP5UkRh8+P9vVhqXHjq7djGeBaHyd/52JdtnGU2n8NyDQ96RnDOhA==","shasum":"8fafae1990817d54711a268fd7e338544b6d21f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597327104-d9f8adba.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNUeaCRA9TVsSAnZWagAAQH0P+wUFM/RO4yb/2Ouv0pEu\ndrqCbfjSRLrDUSOPxHqe+gXsGDFYCgrsocT6/Pp2dGq+mEWXD5dTa9G9bnxW\nuQtcemfoz8sdljs8LPYNR3z8famtljFt2lN0OUu7jVr1+dq3i5FHgfPtxN+9\nzzw90CEBJ7Eo8PyxOFk+xpfBMyDX8y3FFLtrpLKMyLhtBhx9O0oHgonUebza\nLmlDg/ZYI1cVFHl4HCV4ZHHF8STa/MEavqzxmFi1t8vlPNEcv1/KbVLQMnKc\nb2v6xmyM2DWnGH4tia8QquGM41ZZN7FLNmJBmbPkWSl04kK9RpSO09xfV0Nw\noh1y0uoUWFRFv7cUQTxdNw5IlFh8fOmW0yYijClZ7G362mYOrzdZnoFyIrf5\nFvQRXN5j4RMt/tHdj45YpQJSMsAUZ18a8vofaPM9Ejs5r+F0ehZ/pVPpw6EB\ne61cp/zst1muKh34wf0NA0GXH7buiFXbuzLX05MGQG13tjd+4fF45JCKhRzB\nhfO4cn5ZIDIMrbDCErCGlBd3UUl2Zm+3juADshKkPCmPUTrD6dWJctMXPCC7\nE16z6M1zPsoP4i8USADEGjspeyavQskJ3uhL6e2LCmkRPUpJvZIK2jGaQLbw\nht6e9rk8zApynjXDHyy/lLINLPiu5FGTuS9lQV3fvptk/ORhmuZJQ5kx+cxW\np5S0\r\n=7Dfe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDkn3dJAujRaEgZgZ8PaUw+Eoj+z/jypr3cwhQ3pWJgwIgYb7VCVY3Gu3DDoMrLkpwy7t27IXyWgIsor256uq5cbs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597327104-d9f8adba.0_1597327257877_0.27138429145042187"},"_hasShrinkwrap":false},"2.0.1-next-1597330862-9edbb1e2.0":{"name":"@xdn/core","version":"2.0.1-next-1597330862-9edbb1e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597330862-9edbb1e2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zMPTGHzXAK7hKcfPojxBXUo1IBYkeY82FTrVnP2xh2KbwdK6jApUSVZQjM4xvuI2VFb047MPySHbnZGpOyPDzQ==","shasum":"49e49a44e4efd5e43df84105a9c857fa1989e48e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597330862-9edbb1e2.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNVZICRA9TVsSAnZWagAA8MgQAI33Oj2Tb0r8a4erYrfF\npcVPniYE+s8zy+86n5pCS1OGRuG3RSbjxAL35+Vfos7z5GIoYN2N4O1uBtBX\n1LYWdHM9paZinIoAqf6pXi9n20DgOVskNp+oQuLRLpWjIMhfwttG5WuzYnDO\ngmOVHVgZQRrknrchsRQ+uMrmGxLPsq3DgAJ29PT+/FMWphJSvX0VvFcPtZ26\no9UiJbcj4roZr/GR69rQS+ZXYIpRe6E9J2FJ0R+tZIYEA0L7kDhg9Re/IF3Q\n5z2S3rML/LFuZlafVd8fIHcfmjnw5bGfbQuHLlrpKt0aQAc0bhV2aFL+tWEL\nyLS0nYK3VPNaWczbrH+/2K9ygZB1USZa4hdnN/axUrERpoZV4ABoMFtb4LKL\nGytSvtD+snsHk/5taiFFt+D8OrIkHWPsIzQDWeFddhd4gEXWwSmo8rjtir6+\ntwml8+YlNyP3Q40oSLICE+e4gdde0UazyZA2THRahhO2AkFuP0lpfem9cfNF\nFhYds9Fu4TNjzeAdicIT7unl3A1k1vnyuSujYi7Uu4GJdOdoGY6QdZIlbqDl\nBMrosed/IIcznH/ZpWc3z6GsfTvLy+f+oxFRQiEKgQRUTG0Frm87WvKdlXPL\nY2KiKeeu2x/JXMgM99wy3DRY9qkm2xMuVp/BPm8a+l2MvKtPVelNeGfMu8d0\n7pqI\r\n=WJk6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2dNk++n1tahIrB5yBQGgYv1DSU7i8x2mYBUbS0ruzugIhAPhInEcRhYEmCkLOWYpezjyWsDqQQE+qotxAyo7N3y+K"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597330862-9edbb1e2.0_1597331011571_0.7317826574270694"},"_hasShrinkwrap":false},"2.0.1-next-1597332243-f211c7eb.0":{"name":"@xdn/core","version":"2.0.1-next-1597332243-f211c7eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597332243-f211c7eb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-x8fDLONNOHzAB4QPgOTHDtPBZP3pMXtB84lxEp23qRsjI169fIFMr89LjlofApk7ruS7CgfqG+ykwrPC13qi6A==","shasum":"2a58906960ec6e1f01e20b914a1a7a92aebbdbf2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597332243-f211c7eb.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNVudCRA9TVsSAnZWagAAL+sP/1TZqD0WvnJFXvaslJYc\nuvFA3lX58TiTfnpcvYj3yTFmfNzFc7oTBdYv/EOHcBmyYjVaJ56alwvJ/LRi\nXYYLESabvmLOWgbRxx2K8WJEjxJCEyWIWKMctlRH3dXclRdqdh7ul2w7hR+2\n148Oh4PjQ5UpBK7TQZa/DuDmOewwKxua5lyiIac117fDzW0ICsQO/2ls87ZH\n1/7+F7om7QrRpVR31WDwx1sCXsZHKleX+r5aIBFX6vhei85d5pjhL2dn+shz\noVVYAB1f4xs/T8bw0IxMpHv/HWdKehMkZyxeEZb5NmcoJCHhoLQii2SAfR7L\nO9SYN/Wc5wnJKgZkqptvI25sbjL7otYIN99h9UTggbyUdVyfBbtbvZsLpeO1\n4WKRJJojccjusomunAjW8ZXdiC9jNqWnaTsDI9Vzjq3G2EJTzzZ1B2ezfs78\ni9maJJqdLUM1Tz/xzqEWvsJu0w2HKg1uoYvqIly8n2n9USY3uiz0P0FO9wIZ\nIk9VKuP5W4PfYzuzNUvSooGFpDCr3AtX7JYT29b3dZvmhwBigp34CVwFJbUT\n7KDCshm2KFWncPjCYaAtwYwij49PE6EOVtWt6U5Ir7XLKyv5tUPwxCc6Er4h\nutSCSY3iETq/MDJvg4jd+TMdjxM+yQjQl9ZBk29lh6qr9J3w87Q82Bo3s5O5\n741h\r\n=zIB5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDF8NuOvMLwNyP/hc2X4KjBCF3rfQ1E7hao5hUM0JcWNgIhANxJo+AvOeVQhNlrKbCrBzZ//dtHbeYxfHfob50QK44G"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597332243-f211c7eb.0_1597332381548_0.42218052847281884"},"_hasShrinkwrap":false},"2.0.1-next-1597332303-7096cba0.0":{"name":"@xdn/core","version":"2.0.1-next-1597332303-7096cba0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597332303-7096cba0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EsK/zB5Og6xacNc5HZ2onD8t1nLMGZ01rAtDd68r/9dbaoF6lhP+2UowvKX5HEv3XcWY2ntDtV8XtNEPBGwLjw==","shasum":"67f45a3a8f32744fbd658fefb262a2e6db6a42cc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597332303-7096cba0.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNVvJCRA9TVsSAnZWagAAP1sP/1er2V342hhaxgTsT4g3\njQ8OfbIC7wPRVsloL5ggOlqqP8G5Kt8mPNhxrTE9K0iyDIlWAtFHfk4Q3tsX\nzSm5Vcf28NALgkmbpEOp/QVXpT2japx620CbGYDv6ca18a/F+XePssXlg1FT\nFlzvqoml3quv7A11XdfYGHze7KVC0wP4gEW6nrNzudGO3tXSsxjH9RhGYvim\n+T9RVzEJTudEcu5ueqIqVK3XpgBK7ArS4RQKD8NJVIGLCxTFwHw7VRWyaRPX\n8zgsAKNoGk0ZhweNOa/iTvaA6yDJIffcn/nKmwE6qaGMUlhY4oADnbcqCIuw\nmX7/tghqoNjBpgvPYYp/BfQefiNmFo4aBJF7Iq1l5euesrPWPgOH5lzczKKl\n81u5F7mSG/unXNhhS1VL1rBDsFCTKQpHYAQqCDsk45oWMH+mp4PNDTbFIcp9\n93b/FoIjvGqK+YhFE3/hcZCnhnj5eIn+l8mRMYXTy4UMivv2XYPRMY0fxEQm\nQS1uPfj3H03XngbYvZ2TJrV51K/b4YtfiDADf5H2lGMgruQKfW53IjiwaXNX\ntnt4tWMnMWrnYh5SsUoa6A+1QGIyGrCsT1vzkv2HytO5PQgLJ7CDHUMu0zkB\ntGnz8/Q6dEZIT1txGpEH07ATMTGVf6M/u5V0gQluAv5MSJDf3k4eBEUE5KBw\n0twt\r\n=AC3j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBpa3LifXoobeea4rLjwnKHQuMga3FBn+Dyr1GVfQ8KWAiEA6abwvCJCnWdpPP1afOQ8SnZcu/fpNHVF02bBy9Rn/D0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597332303-7096cba0.0_1597332424828_0.29740646819954875"},"_hasShrinkwrap":false},"2.0.1-next-1597333863-f211c7eb.0":{"name":"@xdn/core","version":"2.0.1-next-1597333863-f211c7eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597333863-f211c7eb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-93RpbSVEdoTVp15EnIOBPD+I0rrRg79BvkKh5hSbAyHUBEsCppDJJZqbIPZ/BMMzxA6R9i4IkDwuSkGQHp3jKA==","shasum":"ac02db079a9f1ffc62c44522c25d096aba772bdd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597333863-f211c7eb.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNWIKCRA9TVsSAnZWagAAxjoQAJDyJJS9mYDT+K66NBpu\nxN2l4mmRzUuNVR7jb3rvb+l1WZp8uKL+NtlIbgwd/Lh7AgJFQQGRzShhdHd6\nz+It+iHpL36wpX1s9jTjKANeUu1YL39QvYHomzB396NKYeNpITpmKVTkhx2+\n8/ihob04eNJwVXrf33AFujsbj1RJVkB3tmHEBsZtQcf0f3GAnPZNJoniQBxr\nbr6SP+m2Z6wnkC2CwkOfBghcFDg15wBj8KEVxzTjC66xxYW0LkcpwTbxRU5j\nW0RqRA1NUsjFwMOgsaWIVwQg7eWtX4iJ+U1yopdgvxBE1RpNT4euywfOLsTG\nuILUH4VRytkMwr4MFo986/ACJZu87byTFJTKIrklz9ldUaohwTrKRwR9AhWd\nobveoD71mW7jO2Ut8Uv6iB8w4eIjoX5oUh+Kt4GUBedjZyYoMOqPp+bVwvsk\nPQnMyYBBZaXqaHpRSkuar1aI9PM7UH7hBQGvXT8UnLgw+YmfUCV6Bm3SlUGX\nPNelyUzMyp9Gyc52A4Q8EJNRwzCGKt0g2H9YfbTw51q3n8vwVGRZL8192mbP\nT1BLCJBiXYrqbI8H6GnnXc3bFlIrcmGwvf+9OXePNWG3BXd/UYSEInrNoJ4w\nOcGWkxFDgmKdUR0OprmFd01gEPRPPILt1ptqVYgfxImaAdqQ4e+WmtjusfbM\n3wHj\r\n=cAGz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFwZU23ufxTqKwOd8VfQswT3tqOPwvo7jyJrWbL0XS9iAiEAvx+GNUd6I/bVOCDsH9Zr89p16KdiLFb5w/JrZyPJkv4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597333863-f211c7eb.0_1597334025498_0.8294052416572375"},"_hasShrinkwrap":false},"2.0.1-next-1597335167-7096cba0.0":{"name":"@xdn/core","version":"2.0.1-next-1597335167-7096cba0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597335167-7096cba0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-GLx+AQzuN170iH7bUEuTkIaUi78SqawiketsbdQ6l3lwdRvSDdhl8fjAkqiAfI5ykVv61Z7Te6qCI9BMBIslUg==","shasum":"a11a82e53a27d72573423e17ad490ade4dc9c163","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597335167-7096cba0.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNWb0CRA9TVsSAnZWagAA+qEP/i160YRTLFlrkDk5KVnQ\ngF2fSKgATdf8AOb8grOnsdGNpavyQOZmZF2cLtid1nUq9t4+JZc5pAphj2o4\nAoA/sJhSaJqNQgxTzt5DZVBTLRjrz4ZYPCO3J47gryDO5NTpBtAPMtEhFawF\n2iYsmNUH/+e+7MBEIws2e935l2dqQl1XOEoxR/1tqHu2svec0s/wg5RBBjoq\nK9TSjfRdw7zfqrs93ioFLdD2oxedIX79wlyr0Da+opvVCv5EvJbXmydjE8Of\nc0LfAvXu0u3i59JxJOCCsXa9PmZeULvImz7me4yqPTRaRJEq6vPlGR0VgKd+\nAH7EJYg6LoqyQNDdLTLDY/A3kg4zON2v7lSswyjeE5YbDIEeREEB+LIxe5pH\nGPwq7Cls3vdPHx42w3+1UcIottsazKc2/JJaJbgotuB34KZmG6W3OrFjr09Z\nlW3PEujvFzS5bKqGhT4jU73YW6Gaxf8aRXo/sKmHhXx1/lJ34/75lMs0pHOV\nG8jyT4bf3IbThwt3PO1qjsoUti9yDERkd+NHkgdQrt1/9jFFzPJm+97sX7JO\neqMq7GDRGQUnMWTl7uuNPP1y0iS3kd4EB/iw4zSYuo7R6Xu+Fd/1ASTeKduB\nlmskJUnsjO3JKj7u1SnhTHKgQTsNvKJCw1f2enUHUUBGtTahwmEVkhj/9kOg\nYGtj\r\n=nmMO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDG26G7ELN2epUSOU4WytJBlHawsPAL9g91J359HhDdGAIhAM76XwlRMCS/lWnsh/vTHOaPie06jsm+2+PMo8wxqZyh"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597335167-7096cba0.0_1597335284331_0.914741791017339"},"_hasShrinkwrap":false},"2.0.1-next-1597336578-7096cba0.0":{"name":"@xdn/core","version":"2.0.1-next-1597336578-7096cba0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597336578-7096cba0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fRSU72KH7g6gvxpFccDY2ZhWw7fTdpbmPD0+ySmpP76ygpkFZshLiZoCqrA6yHiawkQ0X7LqYaWO22v8KZS9yw==","shasum":"e810392477574d358a44301206d13ee7ec63f41f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597336578-7096cba0.0.tgz","fileCount":133,"unpackedSize":589953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNWyQCRA9TVsSAnZWagAAzdEP/R/UYOTmqM1+boQJ/RcB\nGbukoTLB5NCz4zmE3R9aQypBjvnA4Cbx97IgMkgJjjiaaPJ4speIzCt2pb6G\nwR5WZyjEcZUkE+VB//1GawOPw15X/LxrwqOSLoRvor6o945bF89CtWPRG2vQ\nM8Z9W1vnTxurlVzVhjo0PgLl7FDlafjWsOFE6CYYIyCqoey+mvYSXskQu084\nvm3Zlb1WKq8qxBASFQTw/YPhmZv9/F9knf/Tw9OVmHXPJjq5tMzqQvVRI3i4\nXyymgm/BoRyaHkx/XfbZZ1dHce+RX3OmjA65IvGThyQRtT30ioflTpWvdhIH\nQVqCiR8Vxe/YalSNZafaMHqA7pSkAVdrP2w8VKeNZO9iHzx5LtJQHUWj13zX\nT4afJ9mScKqRSxCiRvpVpreCXQMUr6cMMuemfTMB7s9fMtkGiSM0aYfwlqrE\nohoTGUJrL6CUORoQI1+4XOKfzEe7skL58g36TXN1ChNBjWkKJ30U/JBNRfJf\n0LN75UjznLclmpNVQNDV3WVgUdmD/brnIVDCobXKukDP6/5rTGvvQXItxCJt\npa0DWcagl9XW77zTN6JPCKha2IzREeIM44a0aQdPai3XFaaed5gDifhAiqNb\nL12Bm6wVpR+ljepzW9oRwzYTQ470AJmkzlRTJl8OTq/ggRhsnHMeb7LQmFAx\nCayl\r\n=3Ta0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIm8em8YSAVo1plJUIbukSKE94bd5Q9nMX2guIiY7IfwIgKhP6D6ko4qMRuWNKSTo83Av9F6CqriwXgXaFB0agyhs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597336578-7096cba0.0_1597336719874_0.9694188936151367"},"_hasShrinkwrap":false},"2.0.1-next-1597344508-3e7f53cc.0":{"name":"@xdn/core","version":"2.0.1-next-1597344508-3e7f53cc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597344508-3e7f53cc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wnyK0ia9FuphLfjP0K2IZhX1BkSviVI2uoI8n0MmHHuxFly315z0HmYjw4jHDLVuzsqvyd73x1VVFmtNxqHxig==","shasum":"c81fd536b6949a1a91f8ec6eb5d6c2802c097596","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597344508-3e7f53cc.0.tgz","fileCount":133,"unpackedSize":590050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNYuBCRA9TVsSAnZWagAAbRoQAIxx6QGTgvjUbim5gobw\nj/9bcFoBCNxIbBQvR9zLOCxZFwUxFyDpFxVz2zZ+OxnCnNXsO6Rd8vDHlEcu\n4WC9sO4ocQkQyMkVnUbADk2peD797ozpEl4jN3yoo25dBzPV+51DBXI+VVzJ\nt+yELsibr3IhHVf4OuZK0v1IJscIECmZPB6pIdXV2ZxXowPRVyvaBD8lN9c3\nBOghTFhXZh+g02B7Z3Yvy6VtdlWFCbnGEqcU0+ShCK8mHXreOcW2bXWb8fxa\nkNwquAHqHZdRVZFUDR7jbMXXMH7g1mAX8CjHUyoZwjABWOxb+by2xMYGogqQ\noIFia40pqpRVAVdhGLaGeKLljdImtDx+Zi0rARmF+NyeDKk6B1VDKCCJLSCY\n56HOMRFGPAYZ4cl7jkVcRPbtmOqKTSG3om/OKW/D040DQCzI3AgfwwtEabYg\nG1z9+v9JrN0l/4Kv1+q751QDQTsJO5gg9KNA4OXtJSSjMuzH+FSufm/cDoFW\nJhSxaqbhKvQTM1rif/OrIxeWmBijg44IqSCZD04q8UW/k7DirtphdI7MFC34\nCo7p62gEnUlIMAoGUf7B69fWgnfgvurxV0ORK/wQVN1iOV5cywjJfw6wD+5z\neoQQsk0bcMx3E9VWqz3yLU4SBnTwNtouBtKRg3hCN2HhXJVEoogNoE5orTmj\nN1u3\r\n=NMun\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6Qxj09ownDeBYWxKT0ILNMlkZ1He2sMQoRpFBbIPHmAIgE5mwytyCSFmmgt1sf09syNwfKISAPYpEU5LV1jlseLY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597344508-3e7f53cc.0_1597344640654_0.7264030348864041"},"_hasShrinkwrap":false},"2.0.1-next-1597344989-3e7f53cc.0":{"name":"@xdn/core","version":"2.0.1-next-1597344989-3e7f53cc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597344989-3e7f53cc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/aV5S8bgJTggOLVeizlBZCFDHDyOL59W/en2BffrUralNmSWihnLTzBmm9HaJWVKpya6GMjtJ2I9C/X4LBnd6A==","shasum":"d21707df6e10825ce90073cbbc54d45e5c729e10","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597344989-3e7f53cc.0.tgz","fileCount":133,"unpackedSize":590050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNY1kCRA9TVsSAnZWagAAibYP/2wyOeXg+/vJN5peq/bj\nfC1Xn9m40z4R7uTneJyIkCvPfOo8Am14DbK+gWI70sJJOWeHu6qIKmClv+4+\n7achgWxN8X8r/yNrfM4jdtRl8cG82P4x6sP/s4CnuVDO8coJs2vzpgypAQhI\n+bF7J4vAdRj/rUwUCT/QPYXOm+DGFbR4WUDeS3Yk+XAbsC5R4RL51y9fH8rD\nh23TVUKUig/umEhvoVw3zC/rDIlJeg579UrvcesUk0h/67fiEoMLvYngP6Sc\nHTLrW3GjbBA5aGGkJmFfBAU3CuFCPxPeHI2EKAoL6UhvVRPZLrrifWNhmP8h\njUea8r0sYuRIndORHNCcETlKAr90A1/5Kzg087hAseatKODAKT+0SnRj/9FG\n43bCO537PQtXQE5mrMNxWyc4r69g2g7MEk26oMqPuNtiu0wGbcUlbq/jf6ik\n1XmF3IUa6jilnKRZEyg6KPN4OuTqV0uEEjl0YZ1yjQKEyOrc/tSS6kh2Zrc9\nT6aauYnR+R+WUKuU8+ccHtyyqfFfQvifYP+c6rNL1DFcCReyaSyrrSE8aI5K\ngDVXeWZI4f003eZMxBPTSbkuqcMSsUUL9g7FyXUj1aCAWaHRg/J+43HsEqk6\nlW0EjmDe0RvYPzZNbXDCQiISN8SF3yRrsMuD2yBbMuxs3glZN1w5xP77eWQ7\nv6ao\r\n=nYcp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCK9Hb8PHmH+WJGUq6oL0yMlGRVvGboBrZZVCAdvUg+qwIgSjBjnCsSc1DhkZ0dzOZ2yn5JZB7sdYplzf/Pj8FnU5Y="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597344989-3e7f53cc.0_1597345123594_0.9349403414749509"},"_hasShrinkwrap":false},"2.0.1-next-1597345437-bd0d34c0.0":{"name":"@xdn/core","version":"2.0.1-next-1597345437-bd0d34c0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597345437-bd0d34c0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ln6XDiHjvvxYgNGbVP2iPzJTagIjRzUmZPTWlScaI9+ItOwBGLrI+rp9GTeS2vaCWe9kDxkSkPNkntcrmySxhw==","shasum":"c20bad49290566ae71bea65fb8ab9b91958b9a7c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597345437-bd0d34c0.0.tgz","fileCount":133,"unpackedSize":590350,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNY8lCRA9TVsSAnZWagAA+E4QAJJLxfGOKs/Eb8rkzasx\nWra3a9mWQAyH4cTWxTYJqOApJW1EnWxpi2qa8gf9TDxVSbOTq4JwE0xhWsxp\ncta9cOuB527w3d1LEvZtNBt48futrrGKTzes4HfIvLrEeC6o1hKjNwe+rH8L\noO01vf3I9zOwnFbsxhGNPgiRlLbNOLFjya0WTjk01/diSi3zKoTcg8NoRF72\naDACwzfXVqzyJMCuDyqxcwVYHrf9Rzoelm+C2ID2amh8Gtw5PYGo3ty9lt2i\nuSJM7Xyjn9ldE2IggA0LXRWvOOCxK2Bd2JCj9UF66RvvLQXZkpt7GuwXbf2W\npVl0z4Il9kGdX8tRJM9lv0124JXGE/iHjYh2rwxOGYKpfNj9objcnHec2A8v\n9/LqvB64DFaVtqUskVOhn1nZ6coFLjPPG4VHi75+tW2QCNxP6eMi3TfFSYw9\n0WL92vhu4bUoJbgHUtwmhc4AhEJS1/fNV/KiM2DqUubnrOVppyzowAYprYJi\n3REYw0BUCA0GhgvG/gaXYq4mvNt67m9OhTO7VCVx6t5/D4ivWmqgXnToAjgp\nPy6VtEYU3FVC1p26LH/YR7nEerGYkyfBEuWwmhRxok89GJ58/IfdjtbRL1fI\naBII4gd3IhxtF9q6Dw9JSQrBbmPoev8WUC4T4jfKmRskwZmJ2oCYPxj+/7pb\noC/1\r\n=Gjh3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDzH5eg1z3pHg5/FbjKB05YffdwGxfhENJcogOdnzQ3WAiBKcF8e08X9G2LGZgCL4M9I4qya/umMGu/sNCJb6/MOVw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597345437-bd0d34c0.0_1597345573085_0.5590247277866851"},"_hasShrinkwrap":false},"2.0.1-next-1597345983-759f44f4.0":{"name":"@xdn/core","version":"2.0.1-next-1597345983-759f44f4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597345983-759f44f4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-NY5djUlX1kWdL5F69xyo5thZ+Pzrm70x9kd7g1RH9TP3fTc6K649lzngrCxHfbM6ijkTCiHOZFWiD3iPcsr1DQ==","shasum":"8fdad8b982ddd44ffd547f557cb0802ebbe81d2b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597345983-759f44f4.0.tgz","fileCount":133,"unpackedSize":590050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNZFGCRA9TVsSAnZWagAAUNUP/RJ8WR+KspUZ+nmKWAzV\nbfUvr2UkFnfMbGrC7Nj8tgSsZQZQ0X4jSKJ+Ugqrf5EEwoyAQbRViLFt1WlK\nEthejq1x9Ed1KWcZTVakWSAsi5i3LD95wtBJHaePnq5Gn30z41rkjBN7mRYc\nettf5wF/UiOAlv5KvH3RWnRMMwcOXmViJsdN8ejzZ3AXFjNySvJddD4IZJsH\ntZ+IP5RCixZhHE8W339YyQTIUtPjabyV8x17ISrehAOJPcFu1Q+L9OGvtaT3\nWC1pUSQgqAkfpKFk6fxsp1KSKJRT1n4HApWdMgrGMVDkTvecO5EKdX6WOyfi\nE01iYHkg8eTKpCc+BzlaOREhNUZcWOIqTlAyzAZvxo8OXPwjENsaaqBIciCB\ng/P+j8hqMK/5Vpoyjm/vuQdYggSvgxYNiNmacU5FN5SDJmgV7Yknf5/EEciI\nOh4OzZgnVK6Xciwp/M4rBSZOxCVsmiIPbxunQ8IGsukH07/nu8GDfWfLJSgu\n2K0L6Whl1KpeLlfVhPEY3eDerOXqJqfRiDRgPrDcbhMq2cVlmaNgnwEZt9Ba\nnxshy42FZMEuPhqrwm/ysykw7crdKte7ArCgmN/VaGML5FP3r9itp7qQYmGy\n0wHoscc1ixYNya3JYUbPY3K7yqx106gSskPBS3lPvsRlb11ZxA0SCeir6o7y\nDrIW\r\n=oaIB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCf8mCbt5uAcUItiuGnJcL+W50hTNNoce/MLSA9P5/8/QIgKuw/1cSZN+m4FFFnLTeVb1Op/cBPsu7AGQer6YiAuMk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597345983-759f44f4.0_1597346118206_0.8815364699481709"},"_hasShrinkwrap":false},"2.0.1-next-1597346104-13163c5b.0":{"name":"@xdn/core","version":"2.0.1-next-1597346104-13163c5b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597346104-13163c5b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KXiXnNracvwNTwALQKSB65clQ0LxOgTPMhUmpHyxZC1wswmqhyfgAoGqyEi5F5qY37nZLKwxcQod57IE8inRJA==","shasum":"2da87f249360051bcd34acc5676465f2f5751af1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597346104-13163c5b.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNZG8CRA9TVsSAnZWagAAfL4P+gKU/NvSzrSpYmqke7ac\neVoWoZ1Z/XHwb/sOHdcaK7z9D6WWyJBWgYbCTX5iQS9NlNhy4edGYKKkIeKe\nrESbTWY0/DUcxhfq3cxhKWBqXhaUl7DvKARVJSSQ0xX/bY6LPigZzVkHQisC\nD5PNHNHIIW5R9UR5vv+GC90PObzTrTSiAhFuiZIM1DpgK/oHTjDV7RrwSaqD\nIRNZnNRbkbDNUS/V9qFTA0jpI9VZfHB2tw7UcK5NU6wPgXp1a88sDcwJBZDu\nhH9IBCSl0qVrDk9Fz4kU8GwdEz4RwCqYQFqffDQ3ofok3TU8IHNx4Cpr9kGM\nhCpcH34heg6ZOGVm5markpHzDk+USOVfJKPP/QHg08dcrhg+JRZthPxS6B/7\ntvsCrzwFtbsVje8B/8sJVIzEE+qaJRZ7nUDIrOJgBHOVGreiwFB6JmWe+vOV\nX4yzw1hZCOclP9QZ2jq0UoUNxKa7XEszL3hupIkF4aKU/69gWW9cCluhB5xy\nklObsCfP3XV61hxzGnxAlFeK+mO1ALYhnxMR4d5SBfYFcbh7GuSz2WbENe8f\nygDLA0t19nYqC8JRnHCUuuSHJuwbF+IoJoJtHEIwkCwlp0p69sefDPap9wDH\ncB/Fw7FY62ACg2n5MbzM9C7pKiO2qEJk8zGx5Ca8/aw7JjQaRk7A8hg4S0iu\n4Z0P\r\n=1hlN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4IZerl2EtSjm7LMLlHu9gue+bMRiu5yBfBFPdlYl/BQIhAMEb8aHkZaUWEpy8mIW6MkyMsKM6np8VdO8fb9DM7QbS"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597346104-13163c5b.0_1597346235972_0.492619397711064"},"_hasShrinkwrap":false},"2.0.1-next-1597347302-13163c5b.0":{"name":"@xdn/core","version":"2.0.1-next-1597347302-13163c5b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597347302-13163c5b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-OXuYtRTFNsoNRZikl44ovwOlyLJ3eGk8B70Ml/qGUxg4EcXiqRntHQtg0wCgvRLUH6F0kzyDV9WPw/g7cHBDRg==","shasum":"350571348fbe9baffdfe7256aae2dba6b0a85458","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597347302-13163c5b.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNZaGCRA9TVsSAnZWagAAyq4P/2/nXnhgA6uB/jrGHLDe\nROQUOB1sV2rEu3xpS4LQbF2n91HVbmh8SlzO2VEhai94VeWmeua09ZsB2GBQ\nfiDEEK7jtKLrwkHfwA9GNS/eKQ7dZPxgD2tEF0VsdYVrErTKY4JTwF7Rlhlf\n7eJwkz318cOzw2nMl0PilJeraInJ0wEZVJDcQA6ob4xftDcpcy8HK5PCIjqB\nG/iGJQw2i9kPXM3oJnyJw61vHjCTkhA/rcwGiw6vLG8kGsSrVoPZZp4SXD+3\neiAUZJDpGSFSEXoFQQbUkIqWp4meincM1OnnGbDWoNRa8UKa3T6Kf3rbNHLi\n0u+rLF5wX9gRuXtvGnmgGf+85a/mWW+QfMUl6W1dJ1Zn+uYb3HubNeZtRAlG\nXbGczlmUoi+4JwZ3su6gvbPHlPsNUDyh4LJ05+zt1odSbOJ3cE044plR14rG\nqv4aUwrTXwlU+PWFYEDshckglFJ5aQf0HExSY258JTawkj/TEpgjod1weWcM\n/ydsCCCv36ygBo41bQxC+nSwVKI5XzO86iWhD7Hl8VjLEELR068YeAawIEI2\ne7zL/aM6QP20rxSXkrkiQKE08jJYnek7CFX6mYn0iLKxD0nmAoNJMp4pL9Dx\nEgjjoqT0bRh4XMW4NdQKKbnq3z5Dd3yyciNsC9OOqhNZkfoQPG0MHkQ/O9ee\nIfOX\r\n=toVS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaKZRVW33UHjSp+/Uf/0RDPJyIgkG3lluPJANR9KPaxgIgf79rqQ+cjlo+oMHc4T/hI94WA7FYuEllthIs1Y85rEo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597347302-13163c5b.0_1597347462464_0.8652874081995119"},"_hasShrinkwrap":false},"2.0.1-next-1597348775-4100afc8.0":{"name":"@xdn/core","version":"2.0.1-next-1597348775-4100afc8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1-next-1597348775-4100afc8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MdYeDafrRaH7LFn1xFAt/gzumrf8YFdKwYpE75ydDN1iWvi0y5Bnxb7MzuxFbV8sM7WEmxJuLlpVK129DCDOiQ==","shasum":"71711edd2ab94d93d923b59819f02b3c5675e010","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1-next-1597348775-4100afc8.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNZxBCRA9TVsSAnZWagAA38MP/A1kp+i5VsBRBnK00Ul8\nsGGikuF/SruD63iXCIlmiKqWXjyclasFKBjZEATi6fmaw3uNEYRC5z5pdmuW\n2lovF7rn/6m5OFDuNg1zb4V/hxrm/U8xczCUtZ8/xpQCC1VHCmd9qNib4C9n\nJu8V4FC10NtWiWmX+J7dwCwXcRbaqyohL2LfpZzz6RLop+Hs245mFRzsXNyj\nINoG3E5nTbkDzkDhb9koNUiL/weWCfv6vFfLiulqBAQeoJPtHKQ88Tot8pRZ\nU/ubSYNHkB3Jf3XDy7qspE4GSeKmXOZx7vW/pOhulbYXWdKOvzOh9S4b2wGa\njZ82tsyPrTvY7M8siaFSPMDf1GrjcxSzMn7/tMbcGFznyFDEdbJQcEAAjPNP\nCqHDYwDG31iTQSlR1gRw2xAyLDgWJYtSjPD4Z+gJoOCqCYOm19XUJwSzS3tM\nAECezk3IFNbfV8DyLVROz3UxzvoI33jRCVLuXidKQs/n3HQZCFyjpdKyRcav\naRSnegtFLM4BrQi+sNSe++71tdHf1FzEF0u8qsSjNs1oUsIMv9ntCo5jyVo8\nMfgDUvFt6qI7ZO4vq/Sc03K6qm3m/nn734KRI8/p7Iw9bWN9bI4n3C2B7R8V\n5uPdN3t5BEmaa167Ss4p1H/+VfV7iDETQmQBkRLg+4ptpXkHn0AP/X5lQU7J\nXeWb\r\n=FXnJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEdVQ3k6dxREYENAykd3tx/lyYZPg8/xcjh2ZfRXXjNEAiEA/9PXlSuwPP+91+HZkMKeJy7T92nnXBhXe0ekW2G9A2k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1-next-1597348775-4100afc8.0_1597348928610_0.5227325190104728"},"_hasShrinkwrap":false},"2.0.1":{"name":"@xdn/core","version":"2.0.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wTJiLYb4JQ7aMykuYTryytper2nnMjb201g1ihkwBHjJ/KtOrEyeyuxFu0/5PpSi+kQYyWnRD7Atut8cXWvXcg==","shasum":"e15bebe37830fc2a02db1fbe6c6e8a2fbd5afba0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.1.tgz","fileCount":133,"unpackedSize":590393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNaDVCRA9TVsSAnZWagAA6PYQAIn+FVAAyq50cLHAoyo4\nQp6IurJx5cU6BNC8RKM+Kzlazusok8YWhGIR+NUdw1KgCalHt5aTvGXez8dF\nATzjbuvmZJTF2Xc2ICl0NTgUjsw6s1UFeUlkaySK5VJLoJDCz3e2zv97y5JZ\nh4h1r09PtSzyvidp64hwu4KUx6hlKMjxb7GIEnGuHjzjzzt4wm4tumcnbEI3\nzhzU/0h9jLTyR/b/iM54owhK+nudXopr4faEIYjrMoC4pulWzmUCp4sl68CI\n9vAcSWP60wlMoz7cKc3hkAFbMGpHk1wnS9lDCHD9gi0U84xjAZjkGYtYHU9Y\n+35jte/63cXOLoZu8yFvCNYQOrQhTbWZP41xLiV6SBSDB+bdby2AVXruWdmd\n5RJzqDaHJDBOanH22Xzp7ydTieaavhcFY0yaIq5hZ0iqXZ8pA+hvI/6BdgAV\ncdtvC4pu6LbznvW/2CZR3DAx81x1+mOWlIUDenVyN/tla2v/DT+Ngp81BF9h\n8xFeqFZ95IXUJ31BONsQVS/r2QCTcyaze+fkoai4syczHaOidryc2nvEM/rl\n8vdSJYkiMLJiZbuyDLwTLJUf8bol+fxC5zndrJNaEAibOjO4ggHYxyFXABjZ\nsmZxiQ86bDxAdV54LGwYoZdFsnZ+pZK8mShVQ7+tU/tfUhneT/FoyFDPQ1DN\n91kK\r\n=bIlM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtKr5RYuMzUHpkjPx5+BVKvq8tp1kB3Llld5dRKLHFpQIhAJqkLMGxNl/v+YuAKh7kRmnEMStLW+2j52BsAG/DEGeR"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.1_1597350100260_0.17349257450378408"},"_hasShrinkwrap":false},"2.0.2-next-1597349994-566495b6.0":{"name":"@xdn/core","version":"2.0.2-next-1597349994-566495b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597349994-566495b6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hOMoyZ9hFgZRiE3+r3cvptxaYvswDEtEPCbZYP8Ggq+irZ+V7TXwBDE848/h9tVeWU/0paLRDGjW+lA4f6Fc5g==","shasum":"687d134b63b62eb5ed29d27ea584f3bed9803b15","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597349994-566495b6.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNaD+CRA9TVsSAnZWagAAS2EP/3SerXqIS1FUYuTcikay\nDjmSp5MljlVkhM+3loO/Fr5kcYdDfdAsrQU1OamTgoptHnruKQkisZ5k0K0f\nV4LudnOnFbOnYayByO/1A0X/cY52NdXRM7SswzfzWNUvQCS4OrkqhauZcCeL\n5qkzCnAtWtYUEgW6+0B4BAH+kM7tbpfpz2ipgaOfQDHnOgn5FyKd6+bPJUMo\nDyVpJLe/aU2X/73xXRIrofgV6qrT9W3CghDzs6m4MAQwYZk4rMTnVT7SjRx9\nt7x+4aBn9hOwSxuArvoxjc8E5ae7OWPL+gnIlvdR54fs7pPjPqG533SRFV8f\n9XBMMSr2MflW7QfvR5P3DD0EG9H+H/HjeREhnRQkeeU3vPcPwXFpTl/ml0bq\nW429NOye136D+XE00d9VCLKP0kTzBADzKcRo1toA6Nw5eHxIwKS/eF5zF7eb\nxa8bh5nX5e0hG1dH12Q/D1ii/TJRSIpUmSIEx33S41RctlsleUjiXTofCLoH\nDtsqBWK28xfTZUd/5SFTJDrmYT1mvnZJZR97FdBkq/OQGfI1Pc8HvszkALv+\n9sU/EN8l3ZVHkdz8Q3NlN0GxmOs8RBnvHw26srT1lloOl9kmH4o1qjBAXe9Y\nNHhxtet6bDNtepY7vAHMDb+rqG1XjDTV08JUdJHXS5lE58I2vzMduQynlM3R\nR99+\r\n=NN2v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnFuc1lzWkO8C8AcSjors3R2qgx8mJb/xslbiHi2tqygIhAPRXD6ZD0iD3p4PVOtnC4M6cSWHsCFZO6XYmvaFx2RGt"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597349994-566495b6.0_1597350141822_0.769152434794325"},"_hasShrinkwrap":false},"2.0.2-next-1597353011-cdf8d0f8.0":{"name":"@xdn/core","version":"2.0.2-next-1597353011-cdf8d0f8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597353011-cdf8d0f8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aUbfyFlh9e1Wjk6jolRVKmxpIrX3DqTGaoxGO1UQVVm3IJEAtGl7Q3AAflZrXNwPXoXj4Ol2rqOj0LpFRbozPg==","shasum":"0dc5f2e3cd331a8667b584d59288b31f4a622841","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597353011-cdf8d0f8.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNazCCRA9TVsSAnZWagAAodUP/3UKgDWbe9cc/VhYBa4x\nmHdnEaoHt4N51xW0mDw2PXukqGnIBRnvroPBHqM/wCLibq9RZYi/iHdqWTmp\n4MdJn6LyTNvB02hkfqB0PLkeQuTy/LLhv5dPqZID6yqoVEyRw1lscQFqX/Lh\nSXy1Qt6ImRwUrE7bczq3A9StiOIgHvp0BRS3jCUQ7YWtAKKsar3Y4NbErTvf\nAcflyZ+W+jgO8tFk8rK8CtLiNXrjpzDs35UvUk8w8l5ygeqLHKukYRl8jbhV\nfmForPo6HetcBaTqL2oUwBaOXhOwgJ6JjzzecMl1qKufSLacPVinyoFV+Qj+\np/lB001y0GhrjfmkcR3uAspNL5GH12rryn6FS1fpY9gSD4NKwEXdoCzjMNNv\nX8Wb91WoJwjcBwpxY5HZrV5g7aIHyEuecx5D/YmFrtFZ7WH2aGdx/MAiDGKe\nnmE4UoLXYqg3oDLX51ziC8eR6VOr+aGehHPGJQCa5ZrQZhVib+yXm5YjzrG/\nO2CTJ91KhdiNIhIU91pc68K1dCPmu6SrJZfUpKlpbck7EfnzqMd0pE95q3mk\ntajnK+cw0s7g8QhRhUviB7WGFI3G4IEZN/69xX6GszMzEcnIprVTeez2dxi5\n+Jhmp1t+r8WGlMxhdsp/6pGhWlk1t8mbKng9FESKYrFdsti/C3J13n+xzrNl\nz7no\r\n=XO2n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMPA8mVt/K7zhEokT0PXc4NnYKRmGgVA5q8XAuL1XdwgIhAM1yNBKpgdJPNXizOmtoA/2YQh/Td0aTazY0G66Ro4oY"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597353011-cdf8d0f8.0_1597353153892_0.28379196480315705"},"_hasShrinkwrap":false},"2.0.2-next-1597354003-32c76c10.0":{"name":"@xdn/core","version":"2.0.2-next-1597354003-32c76c10.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597354003-32c76c10.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-64MSU+dvA/Gu+iohnXt5h2Hw4PGo2UO1CTz/5T4YaVW1XueHyyaVn4+ElTqMzskvYSW4yyq/w+P2qbOk0OfFAg==","shasum":"7c689b396970ef94b515ca165310d6cb0859ed16","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597354003-32c76c10.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNbCeCRA9TVsSAnZWagAActsP/iD7nAUUFQG1YNOaWupC\ntplJPzKGhzuIbqEbLRSrZXIAmBQSBD3YL5Pjn/qKKBLyrOH8uVxyvYX9l9kt\nE2uU0GqCYBZzFIKhCcvRwn0Hi9hKt8NuFSmD4tvDAL/O19Gr5qzwtfHsIOfW\nXxHzYWFzZarUvFtdyYws8o4CoZJEdZ39VQV9EmNpfWLHrHHOXNHrIvAovyo8\nBwFrlo1f1blOAyYXftqSre7+evWzVK8Uj+fYamcrgjJransKJjn6dJItu78V\nXPglqgjrvehs2BFMZzPnKvttdIU2BRNerwtGYvsUvjOEWMRkWEPb1NV4m1sg\n0kwdEm2KRpZTomLA2NuFK2BtZSty48qiXnBPveCIxblszFTIc9WeNplBX9ng\nZO1mXRw5dfhQ0qmlQ0G2gKHtNE0XE2Xq2LVBG1Ty0thaY8yZD8UlZj1YDp3a\n8rI5xh3XBSAsWgxoRnLWL1FgM6/LAJanSuOpd+NaecuShtnnY8NxsMd8fMvs\ndv8sJsOMVWk3yxRMi++dp2VpindckgGdhJyNBnfANUMwFRe0zNI0opfjmXBo\ntolWSaHpQV/MGCVTz8rDX3wMIttzPYuebCW9NLNW+2Ol966d+C06Oltdt+Of\nKVUAadikfFvFoTISc8NGDDJrOWHIR67gTkCGXmr7gp79Z1bB4z9TtMklR1fy\n9p67\r\n=+uxZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBTFgaFhv+8cWtXZ0h3xtZyNLQi53taoJrgu9f1nuGOtAiBg5wt9wLYxSRTfU9CdbLoug7po1c7B65PBn5XbEvFHbw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597354003-32c76c10.0_1597354141424_0.8638206856593247"},"_hasShrinkwrap":false},"2.0.2-next-1597368267-af8f77b9.0":{"name":"@xdn/core","version":"2.0.2-next-1597368267-af8f77b9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597368267-af8f77b9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EID6n4JgoIrvXXtkJvfsFNmQs/f7tA4+c0wNlwXijZqk2jX1c0I95lWGpvVrwso/SekjEFGXtrAoapDMTAZLSQ==","shasum":"7933bf896775cc0293797e872edf0b62b5c76a01","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597368267-af8f77b9.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNehBCRA9TVsSAnZWagAAXAIP/2xNctBX4txpm3ql8PWc\nIDObOikILgwDiLe6YHlxs6VRCOaXQji0j5hFMwZs3PS75CLQeHutlYTH6I8b\nfFoCEbFueNgPVp5DqGjKKBitqd/XylnQKCSjyMUrB6CZdAmW2hG7mLsJtqAA\nJXDeKm9K7moziHLrjV35F7YofIVHw6thCq2yFl9hNCoapjYiN323q94D36H9\nFhGBXq7fsae1Kn0AAR1/GhK4pJgTkHzviZYXsw9K/THr7RgwF3Cgt40J5Fbb\n6QRii5sInOAmIIPiPoPgVZsqn7sb59mC1cPgq2prSYsB+CuegdA7AjhFoe8O\niv3rETQAW3Glucew7/VHaIswsZmeX4bnuTJ0sT+uYkG5eFHifLOk/D8Ryo7+\njivf4nJ/YiW8Gmdb4204aWtMVTLfq8ecPtquA7oT6i6mP6kilT4zgJ0ng5kM\nfCdw+dqiOwvhPWJ86oFVAG4lSk8T4TjiTvx2w2dXsEO9kW42FVvZHsNe0NLi\nHsnZ17nqs78xizM4mQXBbvMuyt2l6Gn76qI6Z7Bwdtl15eCbijmZmRgqJc0z\n9nWNw2AdKq87J/4ISzMWCTt4LuYG79vq3rf3qIMWMM7gcLYRr2x0IznQ8Tuf\n4AvxfSMmht58wVDjkpQapvOdgvrtdZgxNQROHYYN1ysoxB/HTUzehXP9UA0w\nDOl3\r\n=clfh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHGjZ4jr339Dptu8G62BcuZHOcPfQGS78XKYQaiAsKEvAiAKwf6L4h8OgaCEhPeWcFVaK4RPM//vh03FjirUFwU+5g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597368267-af8f77b9.0_1597368383068_0.755766412992805"},"_hasShrinkwrap":false},"2.0.2-next-1597407428-5889206a.0":{"name":"@xdn/core","version":"2.0.2-next-1597407428-5889206a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597407428-5889206a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nBgsUQTVKJGRQbEH+5Ec8o9P1gl/vWsMd86LyiNgi2FnNn5CZYrROUc3jYn5qITdZS/OfCh6O4KjTDSGallkFw==","shasum":"4db39915c49e15418549eaae30275b69f4b89283","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597407428-5889206a.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNoE9CRA9TVsSAnZWagAAsDkQAIDcNTAShB+/kRFduxv6\nXkesa0zzZpOGNKSKgzIYBmGjjKqvVi7hkX3I723pCtqsHypHLWAfMFv32pHs\n1rZEw3n5P+GidJYIOnl/kNgX8A8obIQvJl4y9mtsEPVdV/W0Tp2XmHhKSaFK\nnxQ6LDp8FCBzsDouJXdt0UsqfdWGJF32CN735pkWnUO9sacid/sC6CF5TbzO\ncK5aHEI6WHC4gTWCTflDDvlcG3zR86s562Gy8635XPgw+t1bJ677yJDikuJP\ndrX1RPpX0Wvlw8d6fk8nAlmzt+/fHl7aytfFDpaNwFgwiyeE5A1+tk+fUOrs\njv8hDX+YOMZ5LJcOSYS/LRJDamlJ6Rj//rcNYL/avrog8i6+kAQPCsJTEceG\nt6cN+NVp3PANlTTySL1Okf/lvNpBM3JS37aruxXN6Cia4oHIT6117GijLHIx\n6VwRgNNbpNGHfncYW7ASICVlC2rb+mHhdiodPjUq7TGEScGseRp+qKqv6ZHx\nH8LDG39WO3SdM+GzI/o4vg5mLMg3GzhakoQ2F8uii9Nm0f+YY3ZVafZHB12O\nYDn2vUdqHm6WyzskpAR6Qi2PQO5XJRcrrpZ5l2glOM+NKYSKoQJ9SGMAhuwN\namAWdOKKCi4c+WQ+3+YymsK1hxeijcMwks+sgGEednxWslXfzS95IKCihGDE\n1GLu\r\n=BwWI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFir7Tnw2DJEo55LqEL2FEakEGMa7A68uUuejkdIYC0eAiEAl0n/oNpBQMDvUfwni8fIRE8NY5uxRGUvD/mSKSbGuzQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597407428-5889206a.0_1597407548416_0.18312572814597194"},"_hasShrinkwrap":false},"2.0.2-next-1597408349-9e87af75.0":{"name":"@xdn/core","version":"2.0.2-next-1597408349-9e87af75.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597408349-9e87af75.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vYk3HCpKiCoEEHXxA4Xk258Vq2nM72l+BgWF4Vk9nQFJQj5EN/yAQEqWvisIjn82Hhcs1+hr0eYZn8U5nhHnwQ==","shasum":"d9efed73f0d7793b0cb0d39bca624c7296c91d0e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597408349-9e87af75.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNoTOCRA9TVsSAnZWagAAGtEQAJKfKpeuP7Ek5+wWhWzl\nwlCT+/hPd1e+AC22yUshVNVlzkkfi7fxqyTmlNwbfGyg1LvgAgFe1D/BibRT\nWlOj6m61Yt/lP+V/DlULY66czSjdzxRnkUOfslzXtQRNFAVOVetGVMQ709N6\nYAdXUAO8CQyQsMAYK4uNutXB+vVBHEiNN/ESDykim0ElOCk7QguZGGTePB2k\n+oQSfBMVwEtROYurEXxe1NMHaitB3dXa5am5XtlCcNP8Z9qMS4TpnHjI1u6m\nzp8GdZnQSZxSTZJDKCjIfStmmAK4bCvZkWJhwO6KKEPmmW8AhqBvNGN3w084\nRH1WCQlNsFd3k9Pi1UDda7Yf8rTsufaYN+6K4wCspyiKft7c86Q1oxymbsrJ\n5OjZ7KU7e/svTrraoLVMb85KZEXG9hiAjR47smFRhA9OUAsE+BKG27Sxsx+K\n9dBaI7nIFVe5RJrM7cxXAktwh+3tViBnDoqLNJ8hoziwjz1cPdzlgS7zS6ZC\nmte9mo+ubCOmuHnpfmoikosvEjQqkMFV7prDtEa9xY9FJZjItSyffNQZsBPE\nf0wTDyvBbji4ZK02iGhhwSYw2NuUlo+uNjbhb9PFKBe/nQcC8W51iZDK0k0V\n2BK7ZB35dLJgNYfiZlc6/insDbjMv5lJZh9Z95GrHk/LPMYnnBIeTFhSQoE6\nxO8T\r\n=pQI8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHRSuSVu3s08HX+uPGei5bFFtoKW0CjMchPzJM8x79nJAiEA1XTU8Hvwju0qmMZGR/cqzu9dfy7TxHdTbzurAf7lcu0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597408349-9e87af75.0_1597408462047_0.6707373733445023"},"_hasShrinkwrap":false},"2.0.2-next-1597411199-381a2087.0":{"name":"@xdn/core","version":"2.0.2-next-1597411199-381a2087.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597411199-381a2087.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SmeUi/pZn53WInhecR/XjyFREFRDm/PVPhsaYZbRtkVwNTZCfZ3f+iC7KsM8Wygz6oYWSWzz7V21Y63EMRl4Mw==","shasum":"b20c57145dd4ca6d060fc37a5d614477b058ae25","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597411199-381a2087.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNpASCRA9TVsSAnZWagAA+ZkP/3L0pzlsOyWq1jtRnHB/\n98rB5gL/9tiSQWE9sgV85CR2pogFUP6L/rE5l/PMSU8o4qL4/AbcASJKBifD\n786mdqg8BKeR2Y3MmRH76keLZ/aEm9gvuhL3LHlwxPiqhe4UKJM6sHbkXPji\nPw6ucgPcjTvYjjrwVr7Z7o8eGDwrYxPrJplaLNKlRAhr4kFE/m4BMhSYCULT\nH3hklSJBhiEIQ2kRGygoUyNZhktaibpiC544kw+T5qoA2NUBVk5EH592lO32\n6drREV2dqd7rRPMQMOg2aWDgJRoglG2FlTJJn1l53Jt106FDRIyxYUZ1o37h\nTKJAg4q4Um4c5XvUL5inEfwwsjv/RXeDqWL2IsgFi3DlrZhCNjwNeS18gUOX\n2dgO7QRdGl3ZJoLIIQnervAYqnn02dFV+3sD2+X38jBlNRADgP6xS6PYfTSj\nOZbnBOviqkQnsArOJKsAXJ5TR83DZlEY1jkVgoUjKa5KPQ3RNLAMGhXh1Bwn\n6faqsybc+CjTzLrkPzKEoN6MY7grDBx9rOX+d/aYxbdbIJNJ2yht9V28rXdN\n5u415DTTddT144iol/Hir4ptHW2PqmBrWy0puJEF+funV1C7bBRMLLrQjqyV\n9BhPHBXH4FcV6R6XO3BJ566aBH/PGLHANZYExWvjHBLXxVmdlf9biFpLa36M\nN5Ay\r\n=7x4P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAR4RlD7oWuio396KAbh/vjf/SzzzEL8+UtxaaiJkc9EAiEA0JbFA5JGtzGsepXYAfawdsf0Nsntvbi27kYwOLH9nrU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597411199-381a2087.0_1597411346118_0.7337589171453756"},"_hasShrinkwrap":false},"2.0.2-next-1597411881-828819f9.0":{"name":"@xdn/core","version":"2.0.2-next-1597411881-828819f9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597411881-828819f9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zXL6lSk0+YytJ/c8JF90HEPDzUweMUI1x9uyMERMwa+Z+z1aDlvHS25I42nSEkhcK5ZwIqaV+3gM1pzMF1sVfQ==","shasum":"37b947f3fe2d5216b7e50f69d2691a701818f62e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597411881-828819f9.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNpLDCRA9TVsSAnZWagAAKYEP/04/1YA/qtKSZCInOCds\nMNjOnNZrasIHnwR1usXWpwg777n/u/GhpW0fr9m+reBSPZR7VCHI38LN0sji\nHG1Rvveys9LswLLz4zOR5ScGiwLnlgCrCwPscVKh1jTyJr7cGkXHRqJaWTT4\n2EbekTMjDpczlG5Av+tKN5tZXQX8rJVUu5J2924XqbV1mcS5w3JXMjw/I05v\nOgC1FRiQNh6kcupBS6Yudck5lsU76s67rSy9PvLUFoJWZLPT3mZKWXS8loxG\ni+BIIfHLGZxnntR9byr00MRTlnL0+56LuTxAbeCoC2sokXBoFOBeJOaiTBa5\nZBx+E1Ubq7fSMdcpiGMTl8HCWB95srHA5iZSptTIwcHFH5HaKyCSUt+/qepB\nAgI3gGx310c3+VFj496j4wphDoIreM8eDW5uec5lmfxt147BxxJE4iVAyCET\n78bj7mmch+0+OkZWoK2iC0ZLriEAtmaUwNvLXCZniIy4pATECWHhrNOUkVhc\nxsBFgKctdn5ll3Ej8h1UwtiJKbnsRdxHzMURvInMC7/4RHpYTC5l53NHLmGT\nUNXKgZ11L8gSS51swpx4kYatv1z+3fPah/vby31H/uQfOCpgcJRmh9ZYP4Gy\n3rfv4nwVhcFLL1kQLnnfUkHaHGRGQSm6R3LsZOzujFfFLFsKWjrPZAyt5Mru\n1HqQ\r\n=h5uZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJrcXAOB+PJ9TIYIfNL6hNK/wsERE/OhUyLbd8SkeQtwIgFT7YqdU2oGZg+0BkBCpgHGAP+9fZQXBxH8wUDxjLqUg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597411881-828819f9.0_1597412034894_0.4379078283650193"},"_hasShrinkwrap":false},"2.0.2-next-1597417313-e1f6b2e9.0":{"name":"@xdn/core","version":"2.0.2-next-1597417313-e1f6b2e9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597417313-e1f6b2e9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HgmYYwinPcGIdDED8Yj1yMpnhs3t/+AaUK2fo8vhAtpzd6QEExXUsNUgQ7RO2Y8blwerr5HsPCUG751x+6m5/g==","shasum":"c419f93632f3f4e68f1554d7fd94a758c1b9ee9c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597417313-e1f6b2e9.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNqfsCRA9TVsSAnZWagAAALMP/32/y0ih5VodwezijxTI\n8l73gvmeyCJz9dDgNjrpVXhtX+zQRIlBaVMJeh8zlFgo+dxR6fXpIredjtwI\nHfqwvVAn4Bb9plupTF+UUFVdbJSTEnOxe3Ql0BVBf8UVcJO8ninrHt9/mUp1\n/wYCenQjGGS5d2Jkr+yxo3sOad3CjwKkGWDHGvSy5Li5WYvRb4L4Baf6/HVB\nMbJxXlWy5a5BSMCdhzZT0HKGe1787U5yfczHJqwieTymJDVwqUjxavUcX0Sl\n2IxrYU//khc8NW0z47H9DFsUypYUs/Ch5lIJWwZG0aRqVSTYnKpMCnPYYIa0\nU4dRS5yNSF/+wAchQUuzPbY3f7fZS5jDN6wHBmFltuQqXBBBZYyWk1MbsLZ/\n2gRMwlZca+wZGeHqOl8NuWAWzmoTSuO7Z8gE1FN0YNpR40eUbAG3jaAs3kpf\n43v20Lqce3ZQ2utC/d1HcGBIDEF1LaLpSgaGXewRyCpWhwfpZrSn6dpWI/OJ\nBQ1wTv7ncFz2W4ieGaHhXmebrMV7AePCeQ5d3SqQEfj9uQSGcYqz21VX6uWb\n6e1W47/8Y05JAd3jXnSefUnpPoh/0Z/0kkGpKW6iAbocuazBYHheGsIfOq2X\nkVtjJ91O2cT+Kxs9f8XDa2qncx+bAy3Q4SFpvccw2m9GD9P+aoHkzxHNW8XN\nA7+R\r\n=1yOh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICmPWwVf7/KyKeXuoRJuUHT/3siFW5s3KwiT48MoPERAAiEAqzWGGbTaCAG7DFZ7Z3Pf0ODY5SUXcVQ9SL/NpqTdL0k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597417313-e1f6b2e9.0_1597417452342_0.7850915500111744"},"_hasShrinkwrap":false},"2.0.2-next-1597426437-bd242fea.0":{"name":"@xdn/core","version":"2.0.2-next-1597426437-bd242fea.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597426437-bd242fea.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Z+kb53GkIRuwIOfNXoBFablubrMvycoYWaJpCucUbpvswUv4seG7ibmZ5a0cjYdift8ZOnfhIrGd6nNfYncqmQ==","shasum":"65d1e96c82346ac97508e29be6d15136129c926d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597426437-bd242fea.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNsuNCRA9TVsSAnZWagAAjrAP/3FugGZTGcN55BDawNmJ\nI47j9PYNU64FesfY55zVMD0gPH3PdNgmNz0j86pq5cB2xLMNF6YAETtg1G/A\nXS0J7aXHJHm5mfEc/2PNG5cPEmoRdXfdLMqFEbrVfDTR4Bw+pinCjGWJtGCL\np7uNMiUC7jvNrINCSEyRTcS5+d+sZ6/QiK9lBeTQC9CC1TgewsAgwJ4sU6cM\n7r3nQ29tAiFKcVYSF38GnndadS7Vev3Gq5B4XshFMxr2Gnv5ruEyCTKVghQU\nFB6vXEkrrsZCMw0xDIaWh2xlVlqSmPeJxZvKEutAxRHCWF9P6wWhQuy3vHTd\nlON4EgKq+OFfs+D4gTIl5jSzpypiCy16qeRs2r0r7m54YLevW1ElBzjkxpy5\nQoA8cPW8ZTYLw9hyP/DlM5GwIMvjJ6l63lDcZ5BsBgFpQYpFg8dyynpzKNVW\nxBTs5zN2iuWmEhDuH1BuXF2fWdE0CmXyzG525YUrsxWfvMtu5ahoGVq0cnlw\nLU5HshfELQdhoGE26nw7GLSn8uPXet4i2E7YtU4S59HHEdtT12vP6i0BBpGJ\nKcW1YiidgsY0j36+syo5t82VqNuiYkdJ3qHxcArQ2kXJfQf1itXhWs0rFZKS\nP3ncYJPy1R9CMVURm5KBLbKypsdC087Im1s9E28uRwxxsz3LqX3bG/OFemiA\n1dMg\r\n=1qDY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNOKOc8DOAKkmV4sW6rqE5mLbw4OVdIS+sgcx0UbGBQwIhAOF7UbbIe6ykP7bJxJx3W2gtGZqG2ad/hIpSpLpcg8qM"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597426437-bd242fea.0_1597426572710_0.4251660828203607"},"_hasShrinkwrap":false},"2.0.2-next-1597426949-8ae0b5bb.0":{"name":"@xdn/core","version":"2.0.2-next-1597426949-8ae0b5bb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2-next-1597426949-8ae0b5bb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FJSo98aJ2+Dc60b3E/Go6aDZ9G/YkVUnbNkS5YlY2RMNVWh8O0ma2RolSMMsrXypA3TazVCcomAVCsIjowg1rg==","shasum":"8a8efc895b2501634a3d113ae774a0a9ae034294","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2-next-1597426949-8ae0b5bb.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNs2SCRA9TVsSAnZWagAAng8P/002h0H2MSdnFf6Esr9l\njqamJyw8TyLjaY/6O5Lh4fxhsT32E5V/bIy8X8UEHEEVL6yK4MDsdB9XG8Pv\nOEjPEYoDJF/a1SaGxSYQEX8DH2cj7vv5Xe8crPUoaQp8tCZ2gsR3vvS9fJ/e\n1r4nHPqL4fFfTcP7TXHt1Guc0T0mI15RNaVvyYbkzxsNWPi0GK/D3BcRXNyy\nD0Z7W0X7dk/dss+WpNtSqxSdD9fTe8trKCzzIxehcuDh67PkcW7mkdFW/W1E\n5nvZhnMlEiSphwirIxCXRcUJBsM7ffx4/BHIGQI9ieMbVBD3fuB0rJ9i17YR\n9NXxlIrOp4CMOxYUPmRL4WPlgVJtQvUMO3bRXh0Kh+1NrPOyO4luE9Gkgt8N\nglESq8/LORF4PS3MQ1mwdMTfXIdJTJ7eSJm4cg8s3O0oD2Tg7kSBmkIpjjN+\n0oY51Z+bNSIfB7e7NYAIyH+wafjgfNssuxM4Z52iWA3BmHagm3vIKKongwWu\nTTt4a3sRhG8byTBZDcj3zO7xA9ek4NUVwz2+gxYxoXaR6m1AqsFy5RUwm+6G\np2eaS95++zy7Bi0MkH2XWXgXJoeexHCJXdSETZkDRZEYNC0zznsbThLnHZ+D\nrk1IJ2xWBg8VU5+O6xKJm/MdVL8LlNUccgiXvnZw7MGbjzlfA3ZsK9tdIfWQ\nhh+y\r\n=3GVt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPiTKo8I8ZIHm/yqN7CNlmHPzc+LB9POn5FumyTTresgIhAOQTzTHgXJEittWzuxVs9PEmU7Q4kWpvK6m5l1LMJVvW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2-next-1597426949-8ae0b5bb.0_1597427090433_0.5119011928445325"},"_hasShrinkwrap":false},"2.0.3-next-1597426991-5cdf9518.0":{"name":"@xdn/core","version":"2.0.3-next-1597426991-5cdf9518.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.3-next-1597426991-5cdf9518.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-G7nEzf9+txZ6lBqftZN/OqkFRavz++eFCEC2GzrE0Osa+XeDzYFfhWzDln5H835ZAB5HAv/PDb5rLnQMqIUDAA==","shasum":"b242b625597374e8c4de90d04de026d48e9aa141","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.3-next-1597426991-5cdf9518.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNs2zCRA9TVsSAnZWagAAhSgP/1Qzugi8QKFnd53rKNS1\n/+iDlbJVxsJ/qzjl9OvZwRwRp5HXkyV5/YjgcQnZ7SO8deKOd3jgVnjiY+qV\nI2bWhRgHuXY7TrjtibakBxx7vIWntjqDlaSxWD96yRYzch4rK58csh65CI+z\nHdLB8tA+bE+VrkHyngJ3cYAa14eychvyD7wGvlUiUHXvC0qINku+psu69y1r\nPf+hcjGANCFsiEZ8WRKJbTK4hFEOPQjrCs4rNvtmcHfe10npV0ZtvbcoT/DO\n68NhiSx0FcJbUpu/rjC+3Bbdd7KARA+lxXT/unhwuUksom8A7x5k3OdB4Y+l\nSEFcXM5jTpYYCyCw4G4DOjlF3mX+6OGl5QuXg3Z40TzzDxr9WY1NHik/lZaR\nrhQEfcAvbunfkZ+DW07kr2dVfVPdROU6dUGYg9ho52EIt2vHAxqgUhnBJBRp\nXiMOipTKJTes3ClKOY4BexviK+4bAP89ceIo1WtT+n6n8ojKFQwkIs80a1eP\nE3WU/blafMAz8w3phz1G5F4T1f4AaZuNW0ug9TbzJDsjy55RILKshV/1hOps\nG/Yj0TDiYGtQ5EAsqiIidRN3nGPrsXP3zQNlhcj3N4I9UTlw0BFGtIXCuv6q\naqA2562Odjkb2l5z51w9z7ApiEw1AeKTzhS6WRhmt+D0RqNQLXrpPrd7fYP0\nENcd\r\n=57Gb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBiNd7DGzXKm5njSEOvYjOJ/tzAIAIQlTFikFzeNG72FAiBawd8vfuzRzcrKf+R8dXwjuJdkWSwvIprruvKNA67AFw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.3-next-1597426991-5cdf9518.0_1597427123002_0.09613816699151512"},"_hasShrinkwrap":false},"2.0.2":{"name":"@xdn/core","version":"2.0.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.2","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-s/HvyoGg7Evatn2nanIFAisRUQmk6aRojGwXdAprIU22OeGeb7F1f2OguI7f+55G2edpiiEbz0fg48GbisL8hg==","shasum":"9cbf9c839612bbf6a74eba62c8e08ea5cd442007","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.2.tgz","fileCount":133,"unpackedSize":590393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNtEcCRA9TVsSAnZWagAAvIQP/R7QzHi/xkdh6S/5rkBr\n+0sdAQpgrXYEgUbPjLM8Vi2HJzQgFyQ1tRKp730daU9O88zxo9ztG9YnbHOr\nB3+nuPIdC6RZVVw1wIEiQRXINLzMfetWkfyYHV0XdyxvDdeVLOS+5+guSJGr\ndkjiv4AIQ3SfY4kSa6yNWxGVzZVq7qHBRuu52CpSVgL4dV5qOhRF1WrQjhOe\n9uPB8OLuDy0xQZX70JPzdJpWnfypQ4iomBDCujg9UslVQDWrofjTAjsn0rx6\nh8nlwRFKm7lgvHOCEKpqFSq+nDB6JpEM07Shm9xUsyfTcuiJn2bB8cpvIQwS\nR1xuB7fpUtIDkP4Z4rvMfCRTHcq7vLdS+hr1PL2k9W1TFs8g/V3nUqf4//WM\n7k0UzJ2PPEdJMjtoFsjq4rdeYPJAwO7QBa24yO0YF532mPmF7kCaNWe4q+DK\n+lslxRhg9RGRLVp3rRN7fu601XVXuxj5CHJKTEjjiONHrhvWH+7R2R0fUoQw\nzjcvYcJR9QcZYHrjLqrAfLLkSjR4F0P+8cMoOq1zufWbYVk6go96JHAuHKBF\nAFhh4n04kq5CM8RTPxbl2fuarRP+ZmpCiTAzd47mRiWiqHguwArykteGVwTX\nuMszWXKh+3aPiTlUCxB51UIDIlRMqVxUySTH9UAtQeR2siG8Fp6MMp5XDv7i\nMMzK\r\n=xHOf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFEyLh5sY/kgpCiv6/7LJv6V1Q0AoVz9pmM3YFNH7XfiAiEAm3+UkZdJ40Kt9y7zMZTFOa0GThW5E4nWkY7rXmN/U/o="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.2_1597427995573_0.3285219665808017"},"_hasShrinkwrap":false},"2.0.3-next-1597429581-5cdf9518.0":{"name":"@xdn/core","version":"2.0.3-next-1597429581-5cdf9518.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.3-next-1597429581-5cdf9518.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3GV+l5EG8lTcJ6/qTTTrP3Wnmh/rQ+M5y6GXk9Y6CnEWbH37RAwkOqMPCIEpzKUb6HgwRoOgVQHIeqhgaxnVUA==","shasum":"6f6a221db461e6a79144841b809531c758a09fb8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.3-next-1597429581-5cdf9518.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNtfhCRA9TVsSAnZWagAA5rcQAJf1NVQ3jIm8QFHywKwY\nUyv9sNb8bdlmUciitFp4g0D6k4WAJSPOMFK1S0T3iapJs+mc6ougvTgjJbBW\n2n1mF0CY9gkSWj0ZdhHQuaA2eh4aTGzk6bbmH2IDsuuMZbit2tJUV3bAZwKy\nasDM+zE+p4E58V0jrcm/uiW/qGtangDj7RPGfwig4SJxWLaCg7THmbVtWuc4\nw4Vo2LL4xcVarg/Z/zYyv3YCY2NYgNvAjBeugmPPugcvMJ5dsRmrrtLZOGl3\np0Bu5HS48+mJa8RkyrA+ioGIFMjlTM2oH9+LbaunGQ4erxKtVjENLGGE/ptV\nBxcP1un465u7DuQlGmYeL0tiPrnAdZXtgEzC4DYbRxzVtv01LkY7Q99vJIdi\nv4ufFq8zVVeLKYy8Nz/SCtVqYEad07xHknrqwp3VttPbRGXmwPSHS+nzUXK/\n6Bos8bOmJnrIWP14UDVkAsagu4hBrT04PBSMdY5jeJQ2fKdfIAfdV63aV724\nacQHMX2QBnTYvCDgvpajSxOL2R0wCuQKHY4dfLeZ2fctDte4wnVnpVDHBroI\nHzqf1k0IX4iILpbNnowYTZaNtYZFyUukBdq8Dm0s2s+qX8eRHwOqPea8LHDN\nB6WQOR3n9jVUD2pB9XYjcchnq4wfmbpB37v4Nonl7o8HhxuNLvjg8zCL9PaF\nYg1f\r\n=viui\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHA7qVWpnbWEjER34s6r/5c0SWKONc7gnYRRNrsR9RN5AiEA8fNDETUBkQ9GvW3oQ7FjmFMoSzasd5Z67Z0x8iQGdVM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.3-next-1597429581-5cdf9518.0_1597429728777_0.5732305206644952"},"_hasShrinkwrap":false},"2.0.3-next-1597430496-5cdf9518.0":{"name":"@xdn/core","version":"2.0.3-next-1597430496-5cdf9518.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.3-next-1597430496-5cdf9518.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-T56yFR11OQdTjYoezdYMtGP+xRcvI8ckeLqm5vxKl0jGeWkIHhTFSRxH7jj4PRLoYvwIbMNQLzac4fATA7O2nw==","shasum":"7c181861a0ddd7f06b4fa49ab02ae1bc9716c0bf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.3-next-1597430496-5cdf9518.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNttmCRA9TVsSAnZWagAAihQQAJW5GgKOUMt1rfXPVyfr\nDlq7TVo0jGDqMVn0O0qEVrzf086zCqxXOpKAK9daxCD76XvaemhYVC3iKdVg\ndyyDPENS2dO8EcaFelsmqgpa3I/B3Gvhv5WUApNpoQ5cQ9VzZlTujhPDrKM5\njudSEAz1hCcoIJjv9yObidVfnls70gA/qSkFyT++SXx40VF4H3dMX0sbAABJ\nLbgco27VuF3+Pp8d6OdYwIGbpXhojhwJEVpcUyOQ55Jb3CcipfLr8LCjpotb\nF15m84eHFqhz7ik+5/99IncPOQL9SULqwVySCNqzfEXpHmmbo/+ZcfERcVPQ\n6WU4PD7fBG//TYebX0RsAzal1BUmydWzIj0PQimfB3SXY+Mj3pEN5Pk1FGwr\nZJ6LTAOAgeVebSqUrfr2Qf3/3bUdbnSGmZqw3Vsk/9/MlTe4CTlJDYQaaXsv\nOtQbw1WBjX/yzNJ3xZqc6S711pBV7o0SECyhw1yOYhpthx6NV5kV9UHwJPWz\nEmLMd7YkNf+cXfRY489f+mQiESnjE51CWSxSt2rGaLbRZ+hV0T1hzG2rXhxN\n72NZ32BOiSC5Uu6YlPaXldJIvfscfZ9n9ZpGxUHqgO8JBCBBjjEdPENgnVbH\n0c8FckeyzNbzhC1p3OTKkQ2H48qlAznAVK6jdN5rs/Oi4FPpf32DlPA5NN6u\nigHB\r\n=/TLR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDabUlzLH/a+4+rcVBFvgwJqA01RGwKFjHcOKcL79yflgIgf0jdVEVsR0CyiIPHuCet/b9UvipHknNxaQv5cBPRRYw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.3-next-1597430496-5cdf9518.0_1597430629970_0.319339695713734"},"_hasShrinkwrap":false},"2.0.3-next-1597445678-e66bd347.0":{"name":"@xdn/core","version":"2.0.3-next-1597445678-e66bd347.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.3-next-1597445678-e66bd347.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-q7oPytxbYa/cTMjxHiK62cStDiDGs0laQFb8H3JLs2Jljg6MkMGXfpR3lUY49u31NJty/xn37fbPLzQc/DK8Og==","shasum":"438cd427d4bb12bfadbd73aa117731d0f417ccb6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.3-next-1597445678-e66bd347.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNxa8CRA9TVsSAnZWagAAyOEP/2BsR0OpQcSgWRxDhvbs\nw28DROI5nZkruMf9vxifyNrmzlJjFYp2PQ9h5AwLYN87QndXgpLFekcLau5q\nEtzh+8DWQJ3tTCmMAARdQdW8nzFqrzsBnMckrVTBuoIApJSoGqpHHiew560o\ni0sKTpHfQq+ypd1gkA6qSzP7AIMftBMBI3dcJZnFrJNsPsZUfnclq4shibFu\nNtgrTfHI9pukzt+LY5FCNekz1ceWaJkiZUzsKlyrBH+mzyEWhLo9nffPgm1V\n7MIC4F038sZrhQyoXzivgftllxfcw5snSEIfwvuoH1aBs3zynIuYnz1RuYuu\nCzGTkrjkALvQGmFD3GQUKpjQJ4ViMgSnxYWvJia4i2bh1yGjSSajsd93yIsP\npfZho39PcutzSdTXSmIhFbdvjjCieXerp4YkpCZ3l/qWSf4CQfjk9IlieNwc\nts3+CHpgpOEwZ5fpUHdL33H7Li7zs4RAGQn2+3MjchO5865KBJpqpmLx+FDn\n0sF0zMMTpmKHIsB6OkMSw0zpNTDPkYrP2WST6CvivtRbWgMyOFM5Q8pYySId\njx94w3TQlcqMxhpZnSxw9zUU5hvHmNkc5O9WGEH80OAWk5m2jHwOU9WNH85w\nfRqR7ORB+qvwQymUSb2foR0UfHDgIcYb2zxgycCgnJueJvt+FVxg6KYO1XGF\ncff8\r\n=RmRO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICN8FpWQqdM1yuaS8aOlHL62pHuAIPJPVSrY290HnhqRAiEAkugK7uR3DvdRDS7ZerqEAPXTdjI5ww8Nzpvd/x8efMo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.3-next-1597445678-e66bd347.0_1597445820431_0.5038883882562448"},"_hasShrinkwrap":false},"2.0.3-next-1597487181-dac72715.0":{"name":"@xdn/core","version":"2.0.3-next-1597487181-dac72715.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.3-next-1597487181-dac72715.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1GY/vCFF/JEptYWr3IDQ3ov8reeobcl+KiJV+vCDMgUgD+xkx/I9wHUY5hJiztmlfAKtjlAbLPceviSS0JnCzg==","shasum":"2cfd7eae3db797e1b51fc2165d7fd6a9ba1dd013","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.3-next-1597487181-dac72715.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfN7jRCRA9TVsSAnZWagAAJXQP/iUw978j9lRMAKU5GJfb\nC0gbH49tD+ZVvtSR74k2iVfEeGk80ip5eTdiWpPtaZDtrvJHr2QNdD/hjxmv\ne32tbf+dvBfRXrUCLuJD00tVK87ec4WNDJ+H/xPDUi8I7oZyt0CB2S1TN+qT\noRBgT5XrRZ3ap2rlGb2WO6nvxSMUk+4TjS82PqsKdoJEnPCb7aWy0X+NCWgz\ng0M67Dskly9oTmaH+RZum357sUhRSfdaNeSByPTl63MqnPKwjeTHkyQvmCZZ\nOpAKHcA2BKeF100lAu/3qoGegzSyX1h785nI73AlckYXcRKF1/H3xhUwwdr9\n75KxWus5keZRKU+u/bNoDR5WFKKD0dQiotbNPmb8PUIcecWQO7GuVgIZGM70\nYSvfEID4XaYj6wQ59gBBDAJ0LMtht0cyRDIGQlJaNC79Qwv5sk+ZckhSdCGV\nRimWLhqdZ2yQo70HXaY5EsPNVG+45gp6rtqXPKlIp47KMyZM8jXIVMcXzEFF\nJhmG7+xWJGBSAJp3OPHaAqpMiN3503zbD1ZXAqyvtJ3CS2PlMP2cwmfyBkJb\npWpSlZYOn0Ubwbl+YCitqMqJ5thqBmSlWTx12mj3tHTgScbNVb55Lqc3znD7\npEQRq7+6mbGZoVhMGOQSU0Op5bBxhO0Xm6jCIH6/9TcxhEssmGoXt7e9XNLE\n+TTF\r\n=Z9gx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGJsf9yA+WtkpDQFIXywsJuLDUeg42UsIlgCqAiaLhiHAiEA19X3oYAbh4eOVewnrk8mcVLkaykdnDxGPEAGNQirf4o="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.3-next-1597487181-dac72715.0_1597487312675_0.5674250582158631"},"_hasShrinkwrap":false},"2.0.4-next-1597487304-25d12892.0":{"name":"@xdn/core","version":"2.0.4-next-1597487304-25d12892.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.4-next-1597487304-25d12892.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-j2F+MoDsP0t2h9OvCGqACn1zCha5Ew/KK7pa+XyROJlpoccU/hHqhbwVBgUVKA6V+CfsZ+KzZL/Cx8Yo0iti5Q==","shasum":"1b04d8da44c77cfdd5ab21637b6112ad87c75815","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.4-next-1597487304-25d12892.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfN7lDCRA9TVsSAnZWagAAiTUP/Ri4SDJwByzV/V75qb/R\nX+3R4nQ9GZgMaCnnelnhHWaUirhwUgtgHOotL2VMT/jkEhnjz/yMV54sYb/p\nVCyNGvGjUnsIv3zfXQdD/qgi5xPWBXt0cjH7PQszCoA156n3UpsEAr6ya3vx\nDWf8N5DxQLsvZvs5EdDJULX6Qeezf8isTd5XA2qCGmBnlD2fsqQYQGkmtBHh\n1Ee7PmsvDOJq3Sve8WVMAc/yZU8ylmD6w4gaWkhTZ/R9p0Me+ojQCuoYfgAH\njTM/J2/pPifaIMGaqv+gTLqpq+jnTB0pE4V/vCYK2fFoB8OicHOsgPq5lya2\nYdLWenmpvNZwUOLigRHbMeGFSpacOW4IH2QKuKWNW9VAwlca2E3yf2edPGfr\nBnKT1omtz8nOZyV5SFoaY6JRun7Es70jvIV1T6IoHIR+nawIhXBmc2JDhw4w\nF1ACRTBSJv2WfJ67Jqf/NHwOh/OTBFeC04041cjj1v6hYFzWMvkbZ3TFS7Vx\nXKF7+Djd+Jpqldtop/Jwn0vwrhUigHCBig8GCQ4LS3UGdyppJSifFa8xv+Wv\nYBUVUNR+y/hPPuj9/V6UmG6g65CBHV0C+wbZzDbTHA2Fa+IcM0mv+94WnDEq\nLCkgnmZ8B0vczLA9rr3EhKLDC53qTZBNOhtngGy6xZB5OsJ9K5m/+uZH8qtD\nB+rT\r\n=8TI/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEtY2u8MNU9cR44a9Od5kWh6M1vOxvaAmKVRddMEkUUSAiEA72XXZmyM3lC4Ej32yBg8FUCDNTu1dTscq+3JP18JMC8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.4-next-1597487304-25d12892.0_1597487427374_0.030269189864896795"},"_hasShrinkwrap":false},"2.0.3":{"name":"@xdn/core","version":"2.0.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.3","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-E50NVpMaxDBTiQEURi8NoS5RG/kOa3ioETtAuIYmlm5rkFsLLDzux1vifohfUdOfsNphWxsqgjQXcfvE90y94g==","shasum":"841dd938dc3bcad4e00e6018f0c52bfd3804af58","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.3.tgz","fileCount":133,"unpackedSize":590393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfN7zhCRA9TVsSAnZWagAAsskQAJih930k9B/B1+X15gaA\nZIUf93Jv7Zw2ycWOaL58KPmZy/8y2USV2uKrGePuG+NcI1AiMVeu/p6cnIQI\nPbbiK+y1rmEaeKIEecBU4Zlsdwd0e09rBeQccibvg8R6gT7cJYHxe2fcp1cF\nwazOuIyayE+qUWSNJ5rbNpH303Kcz+CSYNQJ3RUEcdjQlCjl54wZW2Wij3Mv\nBmAcJP+lRaa6ssguHrhDVTuy1/+PNBB5pp6tqZcIyrJ9cUQegX3zHAHgPYPj\nP0JurI4oRpWFjpqT2vlsP/1hFdnSE6fgrHyBRW2RKju0mjdkuYYdGWfdjc1a\nhXV1T4L2iqPtx1Igx4irfD2A1pT+DjSvoqHgR+bfcFWScBmObX2krKTwjqxT\nxIn5YohKWlxKz5HEDKEa+4dcDN5ptRnUiVlFMWIZK56yVpqAaJ/GhD7IqlfI\nE6TFqHPP1ofR/bIwFbgJhABQFdqdrTNafWdee4m47bmEQISuRJBGSvpERGzB\ny60ialryDn0wFaTRb+1Ugzs+FVKclA5Dv60BIB6u42vckmLgyLwetZK+Q+J7\no/m7gZar5450nd/ziAKoCM4NfJuYYMYqGw2rhDpzeETIpsNcY70UwnCBJswC\nhnrUZeuXK2kE/G/uJ2SpQ1zB4NfS9mIacimSn6nqC4UlQkO80NNLpEAMabIL\n63Fx\r\n=DRjc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoqCK3YKc/7Ydza0Dm3p9SP1cLG2AovFbUtGm8+rcUKAIgO3mI0Ryg5cuOO02mgXWvSkHsC1c77vELil9AzL8jip8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.3_1597488353151_0.5987351227675812"},"_hasShrinkwrap":false},"2.0.4-next-1597658152-e16d86f2.0":{"name":"@xdn/core","version":"2.0.4-next-1597658152-e16d86f2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.4-next-1597658152-e16d86f2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tvITe/enuulqR53XxnM87V7l05o/LgJWdYAE380cEzZto+cy6wHhXGkAqvuqaKHpHYulJVse5XIdC+9MwbutwQ==","shasum":"3256cf8e443c51ef0d166513e844a9cc5c68ee7a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.4-next-1597658152-e16d86f2.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOlSjCRA9TVsSAnZWagAAa3QQAKDWtFXzQUCs0bUUsWak\nkK+HcmaF4AwletcsgWDAXXijSUHHSD4gy3Y1OW6gOkE0NSy6O77W63mUnc1v\nxBkNib93S/Gll+Bksf1t5S3dl8v5gsme1xbraXBkQERrW9KWfMC9C18L3Sdc\nSjlhBN8KmTyd9WaSvMZhRnYQD818xVoqQY78U+gR1W3qGY+9qv4MMZ84Typ4\nYbqVacNGTFyxiNxquVd0fajEE/bcdcyk3SkVChheL5Hhpf4TcR+GWPlmZ9f+\nsIiabEIlo0nImLFDECDxA33A5UrHUTETHXPPkSj7eKc9TGon4TI7kFflhplh\nZKQQk9w4AzcqFZGGhlRhw3OSVAiOQbPP+aGgKyt9fKrLRr2YT0R0kHrP38Aa\n98w3moA6Zi8pjNBfJn7oe1sdyPNHfrCNe5Yaa+BfSUKfZlGjjae2RbBgNg+Z\nG137KiWvpd6gdxv4nLY3kudxBq9qdwUdcMZGmkoBtzxq4CiG1gmtZpZMrMY8\n7N5lJB2SQ5yVHuyUkjRBtSc33PX7Gjtx3aM/Dd3TrSQB9m3eiVAue1NKb+bL\n22Xk9No/k3QSZC3EtdvYrYMhhfvFGr19+d2DyP7YVT1nwxKPsy9b6e0Ru0uU\nGnp7EOKgYgBhtJBvN2NzAVNre0gK1gNQcPSTxCMY6wAckQs2OvHrU0Lo7XS3\nnk34\r\n=1pFu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC1Nf+uRfZGU/9GKnynz761ku1q4nS5ushdX2AMH3P1bAiEAuQs3BmUvvg8HhVU2Cm1HitXTEDo5+1du+loCl4Te6dA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.4-next-1597658152-e16d86f2.0_1597658275123_0.4431467762877528"},"_hasShrinkwrap":false},"2.0.4-next-1597659092-da85a29b.0":{"name":"@xdn/core","version":"2.0.4-next-1597659092-da85a29b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.4-next-1597659092-da85a29b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WUtbUwNwPbWZGNfrrylRCDPo6yYGYgbY/HlS7ss0U68FYfW3OMaevjcBbqufLexE3A27t3g5z2KeXcVFNQHTuQ==","shasum":"bfc4fbf3d36ba7d8aea49e725bdd3d3426f10b4b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.4-next-1597659092-da85a29b.0.tgz","fileCount":133,"unpackedSize":590447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOlhdCRA9TVsSAnZWagAAiRsP/1ddayQPmHu4rgVKyK+j\nJuIXITCbj8iXxYs9NjqKTIz9Rg6cVU0wGBGkMSFANkrTHY7pHNXmdq2EvPkd\nOAYFJbvhc6eMjx+VExvIS5svZa3tdwDzIVB9nhOkuYvnsG2+FUTsBOfqZVIq\nnL8z9wn5YBoVtdg5TJfdCPfa4Sku6dyl+P7frJ3wcHIOZaKpta80Bcf72Igi\naskKrgbvTvgv1Xp72ULymZP4lXXl/CqKdIGI+hrRSc0KlDDH5xO64t8Po2e9\nzelO4/rOK7cGbMHdhR8DdvNgc2e3JH9YOhoNkjfshAYMmQHKIdLJqK7stWdY\nBuGUkglRqBID7XCtM6bkYIEm8cVxnruyGcFlRaD0fgXBB+19mKMhEuusLnQJ\nRLEW6KCYRJhSsk7sVM++vnlkHEohdYhgeX96NoY2eRuTXUo/SJ5+LdaqBWsk\n/TQv1Q51Ls+7g6aV0jtaZkebEP77StRftWQ1kT2Fx3cgQPrLSFxCgolLV/IP\naorbjXqjn/ckKXNQgT6sGdjMyLlXfXXOJgFYrjw9BWMaxwFGj15uYHUTGyS7\nC58qaAWI8uOuPjWviVJdmGGkViTacszY/zwfNYK7jumTIy7+6kW1T3YvhgeR\nOGTfqWcdYo+2W3AKCwVOryLWc95S0ctvuOOqu+RVIbQh9VX6iqDPqbThNjU9\nWgJj\r\n=fwuC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVM33Y4eeZPEt3zcYw+rW8aFPHinzwDTvsAiFo6HG7vAiEAsQzdfArUKDvZw9UuLvslBL+mwxtR6b/vHyV5s9peQhk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.4-next-1597659092-da85a29b.0_1597659228996_0.4638534844833657"},"_hasShrinkwrap":false},"2.0.5-next-1597665704-0d768433.0":{"name":"@xdn/core","version":"2.0.5-next-1597665704-0d768433.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597665704-0d768433.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rTpEbEEAuMuqizJPqaYtKkkg8abuIzey4+stL/nW2sFkKgOgJEgrs93po+Z5CKzZVCzEJQX6K6+cB+/duAsjSg==","shasum":"095683e0d5eb4af3ec8818a47af614164bda99af","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597665704-0d768433.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOnIzCRA9TVsSAnZWagAAQQcQAJXZ9td6UVFpbclohYmN\nE90HHZknZ37TXK1sm2z6MIcQ6hpMP72aG3RLwf/KSCh/netOJAEq3S8wTMmH\n3neiRvejh6SrTF4yuQm1Fh08WIUUsXsHeLuKzveImeJ5sGJS/V5C/Fgc/lQU\nWwsylVKcA4Cee6wKk0BCfNxIfiMTHv2a2ocinoCU5r9PoqB8DrkQURqz+rHY\nFVnCqK6KFH6RClG3hmBtZJY5K9anFJV+6/a1fH7Vx/kO2eAP2Wvt2MlrWIo2\nKWQ7iIeksd69wo1HtrLqlXayVakGxY0ArbT5UAQ298tqFNRhDUDIUDGXb5dM\nzpePeZI9/WoQhzHmZfkGI6lOIOU7EIu64Zfk0HyxSvS3bXK/5L/nNvwiMggR\nB/syT8s7ZChSqHBQimLJngdOfj/ELjkx5n/XhAy75J7iitkq9OKT8AP7DhiD\ncHf8mrXf6/GKoAAMxW0kl4s9efoweVAhaFN6TswN4XSSEM+L+O0kx2zT0Vv6\nAqPqVAvTY7uFoeM2UBHjxe7sYTdJkDXk52OHFtK/lN+7p2cZe4qH9GISk6K7\nLXEumTeaCWQ8fFsZIuYz/PaYXXLUvwUSIOXu+vCIyrojdmPGCRALd/zQJTED\nXQHh5jWuglufOYW9/2wLXthf+rz0kH9XYV/xyUmuRQhYRa9KOQ5+snOQJIo2\nomdT\r\n=xENW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpQEXEsC8WMW3Lxx+goc3DHchemhpQ3LNsJVS+qPN+YgIgUemKWHiUvv/8h48tNLj9Qbs/lTsgJiQCaIF0wiXn1Gg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597665704-0d768433.0_1597665842617_0.8810598512804999"},"_hasShrinkwrap":false},"2.0.5-next-1597668308-b2f79f7f.0":{"name":"@xdn/core","version":"2.0.5-next-1597668308-b2f79f7f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597668308-b2f79f7f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vFAr0a9QD3PnTb7QBaIFzaq/sb5jo7WVHtTV/UEB9KJP7dzLs3ly5QLv5XBTBHUN/WfzfdLnTGJkT1DdhX4vuQ==","shasum":"e0d40203e28ad02324d8d9c3d36a49942d7932c2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597668308-b2f79f7f.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOnxqCRA9TVsSAnZWagAA6YEQAJI1jBeuqki3kUjfDCO0\nDIGZ2QwotyM4NIQ19ruwWzQXK+65Vtp4x5mhd0NhZo/8eSHt+Y2IXZ9F1Qzy\nK+V1o70QdfLkOPNZlbpfGoG6D6PAMYGaSVHjueQaTEz2DcSD7EUrDla/tGrh\nBRcSB1jPIoAASNWrofSww3A9DZet+mwZ1XO3P5zWR/6/b2NADp/0tWUVtqVz\novvQGqq1N8PH8h4eflJsKxp/BhX4qZC2LwsYCNp6TlCvNPkP6gRuRM9sTqCM\n0YVlFoamT73JPg+qYQatk2EOA0CrHbyiSwskdWMxzv1ZDBCCK8S0QIuGSmPt\nSlwbvuO0bAsdgS72VbwIh89+/3KWG+dnBulu1NI31b0LHM7M47qRL1aqP+sJ\n/XygmkmxJmJanKxwFx/wz4BVmPlf1G7Ofpfza1VVmzLW5rnww7AawZUCm1x4\nyqa0k25//X+yYQmaiWe2YQ87DF9r57ZAMnZR9/h9hZDpo1hobMUMoqFtrHqC\nHVXzG5gKHMlCuYRkghexgCO6fZ/bEJfemxZK3bqcbX8u7oSBrKs7vqqjr5VC\nWXXmXPpaF2oF3QOfycmn6SkBZpfjcLQRl5LCriS2f8QV28Ytfr8vHEnF40jp\nz0pasAxes7hjSMdrPd0GgfDZUNcc0wYzPz+8/nfU3Q3BtbhsWs8jSZDhvC/z\nYB5Q\r\n=iHfW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEAv0a+WsdlV+n+P9Oe28ohCeo7hsNfwIIr174xV9hwpAiEAxzZNpKtvjlRXON5rXnmzGazGUjGFDzMY/hPmeYpv+x8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597668308-b2f79f7f.0_1597668458428_0.4671651650319759"},"_hasShrinkwrap":false},"2.0.5-next-1597669219-449650c8.0":{"name":"@xdn/core","version":"2.0.5-next-1597669219-449650c8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597669219-449650c8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dkL4ttOGwtWdC9HlmmnYKd5pmJzpwY28HLmjw+PqOfbK2j33zdO61zJ9df5hJGMZuOSUcDFzmx10DKgvGii2tQ==","shasum":"9c495374694b37da1223a7a9652b210bc8eb5834","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597669219-449650c8.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOn/sCRA9TVsSAnZWagAA7IsP/RMXPSAn3izWnaXuJ5/D\nWrYzDnVsJ9I7/PfvgiUQ3B8PU8n5dCvmJNFMut/vjmbeePdnnJk54f7fK6bS\nE1of50EpHZjWDDfKRelZm6oXI+eeR3x/BQo/RJiFswG7dz+T5fxooCpYQHFM\nFmIn21KK15bfbkWrP2JDc1LE0R8/sJv2oSRbdTYy14s6ujhh6kO9iv122rrX\nFAyHw+YKKHbGjjuPLuowt+wXkXJg2G21wEftZBqqMJo+CbrN9F14RY5fitdf\n902Ct00oZiWnKav4De/vehlcnHxZnkZZRqbpM577eTl4MCBNhrCizwgJt1y5\nhERcfZb86j1vbkcDCAci9pXvjNr9Ygf0DEDPGscYOYAFnyLmaFQmbarp5J7o\nnchDXKIO4BvjnXAr6hZGGz/8p45+Nj9wqtEL61sijJ+ZYzOOPz7rXbTt9gSD\nc15dFALJGmDLx8kNZFCp/UK9+m5vavBfKT9NemljovMXWWiF2KKwFLNcRzEi\nAmmMrlc2WajNOaVEoUNXBYuNNgPbp0P9Nb6i0HWADRbDgKdOqGZGlRMQICKf\nqPAjRfxLO/zittxdH8z8fRksum84hkzsCJ1vaq+M+CwGeHG3/8vrgWIuF/LM\nwWXY7UYXyS25KlGnQS8MBqrCK+qulY21SFMUl+LCQuzIFNTBdjJhrpLXbBs6\n5oSK\r\n=M2tV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMVScoOPQxP+PMp7puJqnxOBTjsjISIwx0c+kexjHg1QIgZtg0AMQRoRVpESECVfBvEsdq7/2rHdV4NmBCllxOsBM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597669219-449650c8.0_1597669356104_0.49601535659629703"},"_hasShrinkwrap":false},"2.0.5-next-1597670827-1e01ff9e.0":{"name":"@xdn/core","version":"2.0.5-next-1597670827-1e01ff9e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597670827-1e01ff9e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-DkzLHW6S1ARMyq2Por80JYqyXmpynDpdvN2mlCa3cH8wHCIWSiIWE58z28THk4SmSqwpf3CBWTlmAZSc9xrm1A==","shasum":"fa6924edcb24a8a7d5e97f5880f6f2da033ed8b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597670827-1e01ff9e.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOoZDCRA9TVsSAnZWagAAvWkP/1QDqCW85o0B9gImcdS1\nEdU+WVwiIjsM28CuXPNHtB/jsQAG6+d16zh0BA5Gb1VT40AxPcegBsKBbyQ7\nW4KBxTAsS8iZRkY7hWnjabsbwBQjQK8NmkZyJsJ7tO9s+JKTa/SjkXjzrlVi\nzS8MakZIVEwAncjhWaAFZ+d9SZHrsPvSPYwjud5nwzA+Zl3dBNJU9CDkCj0n\nYknfKXwbz2TMaqT6tkfwQAuIuE6Jl6WQ1t1c1RMtx8rSlbnVcXKNAV39xB6E\nwuMtVgrGZRKZCphseivc5XhoRU20AdRFWNCMrCkYOifrWXxXcxis+1YJyS1S\nDUbigcVSqOABsjH3oaIUbaGvEf/sK+FBNznvP17gRKjv0kE5KdmMyXasaClS\n/BM/8kJWdX8U0V1IaSu/n/ym+AKa21EROssSE/872l15mP1dsf1cwPUPBLel\nmadvbvkCddhiT1Y3+o4TpoX1oD6bVqAN+6x1hWxh1lnJvmNJWm4XmPFpAkz6\n/PMnRwomlLDKWK0M2DqPzE8laSKnUcsEDMA6Gt2y3552TvFDHUEIlvaQwec6\ntu6GZLIQNfq1NDYsUHHuyey617XGXkL5tltZ3oyjy0/LzV/VfPKmtL8YXneG\nVJMoe6RSTDxd474rdPCGQ6Tx7Bx+unYeRzSt0Yzivx2zc/FOttBf0ZURKcl2\nJyaY\r\n=9Bpk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDKdKctpfGh82hvO1TomEbjdQQat8kYxi13bQa9/xhjcAiB2x+o+Yjz6Q3alD6rYOdAKxsCGMwurPypJde3D7VTNTw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597670827-1e01ff9e.0_1597670978684_0.5027065768934176"},"_hasShrinkwrap":false},"2.0.5-next-1597671877-6f632d36.0":{"name":"@xdn/core","version":"2.0.5-next-1597671877-6f632d36.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597671877-6f632d36.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-g6z1Z9ss8njJmlfyY0SUZrpRNm/nH9TnroAb7VruIx/5BBabXUFkoZEumNb2Janb/RRYaBSSf8EcreWWaMrKeQ==","shasum":"22b8a5d16d0b7436eef48411fe28edab53c9ec72","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597671877-6f632d36.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOopECRA9TVsSAnZWagAAmGoP/jO/ChFtkFEFHpW7m+NQ\n62x4zZ9/zUs0vHAaRpHoLy9F8Tsy0VMufgyECZpddlDg5TZl2w0IQi2SRffF\nsNlXBI+IHBDgqml+Mq4SjuodRNghdzWvKdb19p99dzpcfp+XxpT8zsuu/D9A\nWYnkV1LkAKD2+uQm1uNVkAL9wz4agh8v9NuVl+GbWgBnOqsGjGhKOzmbdowC\nquka2rqVU4F5iWO7xAa2ekwTv4wXce56J7c8A5aC8KDmptJfqOIzehj+k5x5\nY1mNR+zcZlz4YonBJlscz3k/wkhckOGfXb/RHTK0wLlWece7njZf9zRLbPcz\nZ/ByZMbBzvXaYiE+TZP7Ks9DTyiTEe/XlIXX8rj2lKHF9bMIwVUNutlKgb/P\nK+wvNuwDJAzfhJKgyoj3zsqakLgnDRIaUvGMWUQxdur9qBxOC6nDn5l5mPW5\n0cneQOpN/SHfMIy0j2QQYoRUpNMILGpQondh3agFx8FSS34pzFeA4ibuXJJf\n3AQUyR939kgiq1BhCkXU5mYwoAVDJHNU7pD4zwOU7zjOert/0rvcvgj62B7u\nWduXUqCf36kMlsWS62ULHlZwPENx3Kg1/vCSvBh9aeQN27gCRGqs0ZsfQCk4\n7hZOoOtba9V/E9A8Ml7BC1CLy8FtDHuWU7RJK5eIJUonZVnJHRdK9j5bsEG+\neh9Q\r\n=O1qC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICpoWWavXdBEdhhTPWuBUbwAg4/XVoMlUs32vMmtL9LGAiEAgvsukI9qkfl7VDXL69bgyaZWVHrVqCP4DrT9gHWoddc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597671877-6f632d36.0_1597672004009_0.7443496301670267"},"_hasShrinkwrap":false},"2.0.5-next-1597672217-3bea9935.0":{"name":"@xdn/core","version":"2.0.5-next-1597672217-3bea9935.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597672217-3bea9935.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-42vjgCN514vAQVgDcWzqfYiPlHiVLYcyY0Q4N4srzf0vsUE0CutCRJNGM47tvGCCh86mJyZv69J+BVnQYuy4pg==","shasum":"ff73080c0fcf1088b83bf963bb394d78a27f44ea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597672217-3bea9935.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOouLCRA9TVsSAnZWagAA58cP/1ygTTnDPZfq/NfgEEvN\nw9vIGAJAYQXjiRc4o0QyB+u9nLx4ZRtZArWixmRt+lWtxukYeOkSL7130lIw\nbPppUjUXHxQNeE+oPYfNGE6ZXGTDVcY/yNvDzWlI1TvDOHtwB6G+fikp9meY\nVSTfyvkMlRRe+aTFEVrY4zw15uLaDvdb+w356781kDTJ0FU1AXjtWyvtUXoO\nIG0XehX9Pv3OVPtBnnf3AjSyL/lvZM5JI1rlFp9olXeWonutcJFlSK3SRSFq\nYeLD0KTKHEFBeIshro39tYu9pkaE2ExRxPkAap7lg+Q5y6SDtL9Lu6SnsdlS\nee7nzEXN4k6aAAFY1Z9XrRbC96q9shhPIGYY2S5JgtAjsK8y+NdbpAzJx3z3\nqm5woWyRgYx97+Z2kXzTgBBMyFZw72GKZ4/S3ASwHPdsYYRpQjuwH5y0poAf\nQbcsqvz2TeXtdUa9mR9kH5o+KLw/jtEsQScsN5oPeK2tkh+/A8jYcJoJK7dS\nKYtBKyvYVRv7eNTVJCwhnhqw+vyW868TxBaftU/tdVHAAuVuno24oWHu4m4e\nUEMPAHLRrwaPQK0pRLcLstzzmhd1AJyjNiYB+MPmvDLh80b1qJbY9m6qLIZg\nG7rnvluCtHar4txc0I+IaSRb0siBiMqGdWawfuKniHWH/0AFHSdGaatNLYkT\nDLqj\r\n=mOiK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAkTTb76wS/WInyfwGiiSxN9CmOBsejv/Wqsg7/Cm8mFAiEAgffLpDsVup7UnH2enUBWA5wCQguP7VP1NWosBfpxl0o="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597672217-3bea9935.0_1597672331248_0.4797914324182777"},"_hasShrinkwrap":false},"2.0.4":{"name":"@xdn/core","version":"2.0.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.4","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zpXjZWL2gsMkUxXRjNDFK5MczykRA/sDl9E81WOByspVcmdmapmmMKHm/o0xUly/kwU6FkuuAgc+pqV6ly9n/Q==","shasum":"4c5494220e0b6ac52b47997e14f1160a2590ed7e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.4.tgz","fileCount":133,"unpackedSize":591259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOo2cCRA9TVsSAnZWagAAzKEP/iPseY6uoSFzoqJCDI+b\nS0PBF3H2atDzn3tux1O0f9x8bNNnKy2KJky4J7QO+YmRwYmlWD5v7HPZZQCx\nqxxHk4lO5AhbSQ2scnIZ6cJBzu4pFvRG91i1T3cbn3gwbGfrel9Ozkv45NwC\nwgsooNUQ+HrPR8Gg3DkK+xP2hC9R2NFqU8auj9cMp0KU8itiY/v1YlcmG69E\nFWt5tTnF2WpJ1bPvI0aY5SMz64EdkU4yBp6M7Zpe9gQklNRrCi81HNgaxIdQ\nqLQJmaA4uJ/KgSU4OLLyveGh63B/LTPvsti4X3rh1qV+I7MoAi629IyZBi5p\n1dJKTya/7/mDy4yu7Txee97s6ZS8gMqX3mDlrinuldI3k3pfgyzW2C+g64dH\nK5zfDNf+l2U97KaVrp9FpLxVwEKL8036T8d6G7N2iu0iJ4AbE+ZJSV86pTyW\nxAaiQJzKJYslKmD9uR4J81LzZ1+C0m3778kx61FsmAazHCMlOvKhYIKSIQ8N\nk1wJCruHpRqQslzWFDxkES2wJ4OJ26m3eUV8WcgZIyYApdtRfqq7CZnik1Gd\n0m9VKsr+zTyMIMAmVpdVwvArYlyfqJ9lmfAThok5DjXrNeA47WihdDz/BJQY\n/tLpZYZQKoytVFlmje6GvpvHK3t2Ca2sEcbnhTxGP3CYHRn3kvOS1lHc7UYZ\n+Lf+\r\n=gcXK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQDpQ7Rx56Pnxw6YTvUvE7N7hwU3N12Xw3n3KHjIITrwIgYALdj8ELuYz4ie/YSmLo3M9guwzSJ5IueWyhvyroEgQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.4_1597672859763_0.6140478476681615"},"_hasShrinkwrap":false},"2.0.5-next-1597683914-21b721c0.0":{"name":"@xdn/core","version":"2.0.5-next-1597683914-21b721c0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597683914-21b721c0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0uE77m+t8dhaQBhfuDAymBcO9xujVEnnB83pxEOxS4JoIr++K6mwBpJc8nDyegUWzzkqzwwLXiRx+0Atnn6kgw==","shasum":"0c0893921a82a4c719efe742de7592720746f8ac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597683914-21b721c0.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOrlSCRA9TVsSAnZWagAAC68P/AzC2rl5AmUub2EUk5Ah\nveZAnUbh3tRaYfZu9XpFBPEogEQ9Bh7e6I6h0xXf7mW+m2xgruFYdSHVlzBo\nkWvkB0WDWkCdO6vG2vV6K9JIsWOSdCpbs9kTEyGRrQUbSo+B7Y7fHmRbkf4C\ngXZhPZJL6vsmngGEFwN516pYACO1Bn2KUo3TFMoVclJFyggV6NWGDpaVGsnT\no08SeusnQsWGZnVl9l0mb/dazHmNJxIIVv+9ygtlQ41XXnFclOOoQpTbWFnO\njuLWx42Mps2xGMk+euy7WeNmq9aPirloYwr97VCH2zru8c0Sg18m4jk8U0F9\nbvBtzyPk2duUPEGaptjUOPc14TUEpmXtvKdr6z07JIoXgdf4QbHopKwwqJvc\nBF90+2wr9/XQMxPdXCrXpa5Q04sl0NF23Z1MLFA7H0XZcSyI9ZxF6KM0m22Q\n5bHfHPcdBTcS0VoLr6Sh8PosthPoblQyjyx/pH78xp4f/cSKUMRMGLTmuYf/\nTgpFrf/OXiUS+nDAmInTNnJiijdkNDGYf8p0UfYSVGiKjIKDUE9kY6wDDMH2\nr2Q5hrsgOQH9MEabFDOVzQdBlzGgPYpH/p2cooIE2tBWoGOt5wAInGXVjWr9\nrTbzCgvIL0PsR4f7xb/X36C0pmEd04lTnZXCPGrwT/rEyv9ml6nNZdkMUTRh\n6aln\r\n=9syA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQ6gcuo7uqOcHj1TtLt2iTNCT94JjOZDuDNwAw8496BwIhAM635SGnRGbXNqZRJRVkSB1q++RJiNGGB9i5ax7BRj31"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597683914-21b721c0.0_1597684050306_0.5126086568059653"},"_hasShrinkwrap":false},"2.0.5-next-1597685497-9337fa89.0":{"name":"@xdn/core","version":"2.0.5-next-1597685497-9337fa89.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597685497-9337fa89.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-o+VhlKXjXfyys61e6ndLnZjUqCqabZFzlKriK5ybYUIrUgu0i56FS3W1jI5g71pa0g5mu+4xS1rFyxwnhEyMkw==","shasum":"9e80f8e666387e024cc642ab02af1620d62baa75","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597685497-9337fa89.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOr95CRA9TVsSAnZWagAA6AEP/3a2uPreFTSvyIIrhQkY\ntfKKjOscEJmyrT0j0EHwBva1zVw2n3CETLMZqSgHTd55qW/YT6GJn7Y+rokU\nR7cV0LwTMZP2Q0GsRMVQ53u1+6zger7vexz2gcg+QvZhN6uv6bY+TzskQYtX\nxsFYWeUKgUj4c84jSSFiAcE4BeubWz9s/lVp5G/aYoE4GknF6EvfffKtuDyp\nxUCalvtIwqgHKpzzhXZASh6pnk+kIPUPEuj7LWRN/5Xbsp4SR+P8k0uzpyZ7\nCd7SBLokkMtW8+F8eu0uEe1MfEoHgv5vymKKnFAE1N2p6xJS4/N3pqRHwACj\npkUKH9j8jbJvqFqcVuhbG06eZ5rEBSgqxslvMxgm6mcb77jBchq9I/LM//g8\nblUdcWa1uTmkBgFSR+pey/ncEIGcqDb6GJ0Gm/Xf4ZpD9jqUnGA/b5DI8Qte\nhwWzZ03/WaT4KyMc9ZXZ9lVGiH2CyRS6etKEoNZfXZM+qcOhhiU79kUN72UE\nJ+m3n6VO4KQetmXXPR1xPENgM4zUTzlP7rTpVQ4NfY6izSIMoakxnxpL3eBY\nPkGSI1qpUoACg/t+TDpSXfb9D5zQyJLmdb5/bGSvH97Y1Lwhlj+fPsvxUxP1\nENZmuiffBeEhQnunUizHuKt5r2GbbZNDGPfV1sifDVMKGlSJ7tWvgdjrKhLl\nJ1Yz\r\n=h9lD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRG/fHYz87sTgE1z3OjV7NbFELB8UXX7j5pKUptQo0VQIhAI2zW48dI8/76taKKwVUnbnARn1O4fxQ6w5newd7Lwfs"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597685497-9337fa89.0_1597685624838_0.6743376292315753"},"_hasShrinkwrap":false},"2.0.5-next-1597694193-3a02ab41.0":{"name":"@xdn/core","version":"2.0.5-next-1597694193-3a02ab41.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597694193-3a02ab41.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jldyQJSy4KnVFUYdXI1cwBPzAwlzMDrveFJ2gOXbfn15KtmSqWTMV1zrhgFflx80IMBWyXmSaIz9iZ7xNk1/XQ==","shasum":"c39e0c51747f618b8216dd54f8b070244c84650c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597694193-3a02ab41.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOuGBCRA9TVsSAnZWagAAllcP/AmcKJTAL8USlnTV2gqW\nbCYKoQAYnP3qR430y2uP3XI+E60Praxi8uQeR0I7ro52C107u5VFnx0+MDtz\nS90H7c62OSW1ISV1hjrkTJhMb5S0mpTUWtMP+F6mCP7k/6U0VeDYB1bn2Wn3\n8ejoy1JiopvhTiZKERKcI65ieTZMUdbQNmHuSVwn2w+gUqiewFmmYHWWOwhA\nAvXxV6qbaRMIFnIZ9xwuoeQYBmk47JUXP8kH6L0zvTro0Nen4Ddw+oolOlfd\nt0TJrQYn1RisC6gT+QCcMUzhY3OejOQFpFMQhgxKtkR9iFEcQt7YgsrwoET1\nQ34aJ969MouuwRQqxekCWjZ+oTIQg32tNnP6TX63ZIzfNE9NW23GsWzdSoS3\nLAfmE0NMp5lK906RDYJdJLtsrK/ySot5ap+X/nZcsnzjR7Z+6DI76li5eUA+\nM28HiCiEH5zslnmrVAOvKe/CUkCStEDF3q7fnLpupWePYT6t7bWD4Xpekw8F\nCRSPlxEblz6ReLT89Lpc77U3iizr+hfpGM8hkfqKvtYnIq/y8z9fzToLXAY+\nIR89aG1DNPMQ8Ev2emmFjALDSCxwdFE3EEFPoLMoesqKI95ryyxNT/qUpIK2\nifJ5iaACQFlOhX9N8av/YzXQaCWOHUgrCjhDtPZ90hyZJpjL7klAXeFlug/F\nRP0y\r\n=ijGK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDf0l1/2cXRHA8Ft75e46j1Sb6b3SmZekZBLZbM1DlFzgIhAOKPsSHg5+7ejedB4gn+BdL7Df8QKCq8NyZkMlngIPHA"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597694193-3a02ab41.0_1597694336553_0.3759256832423312"},"_hasShrinkwrap":false},"2.0.5-next-1597697358-04fa30bd.0":{"name":"@xdn/core","version":"2.0.5-next-1597697358-04fa30bd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597697358-04fa30bd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-QBkH2ILofCbunHuHCEHilHxsPkaQdtBZOdNKMrIjL4KMdMIBehDqffr95QFLvR/fdb7kL5XHSE2uI3eyyJiO0w==","shasum":"fa6e6541409703336d12258edd041bd34136535c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597697358-04fa30bd.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOu3iCRA9TVsSAnZWagAAJpwP/1/5QnZrMuxsiD3c8S02\nj8a9bQtIRYAvua1BEsfGaBkl9HZ3jflLVDrTBB3ySfXECmVDoejHOCOj2rgN\niWDXDBUMKBuwD8ChLIrsuYNYouSCZ96BQ0SaNWrnEBgREjyAZAoVofJ6IA2n\nT6J8Gywi6g2Ln0mtuRB8qsGGhs+2YCDA6obO9XKkqIkxHbR5F0LT8+X21Vdk\nSugkkYq/YfA7WJLxQiYNbJ9id6hDkuo+PNn8asFFVVICrCgYqOWClAHvn+6c\nawfI5uXq5Hlk0YJ1kQ/5aKl7KvQnCA5WtqC1hgUiJXFxYj2uj/4FBG96j+UP\nk5n4p5GrfibMTjiBnkRLIkmas2RZtEAyMQjAL2PSsMirCDPGPKKGrV+40uSC\nFvfNUJUtkzg0fcdhFC5ec8Ns9oBUWQsICkiOGAUeQJF91hgAoH4iztTNM4Z6\n4W7oiaeJZGIOa2LU401GakUJ090BeDq00ycIvMr47mtcr9txNHKnLyUo8JdU\nvIjjEkI8vy07DezgtXBrL/NHzDYQZsiiQ58PGr8cxmbDLmLUy3NwBEZiaBfi\n9jyVkx0QnacnoB6wjjo/2zrxamkvZFZlmTa6mmDMbd930UyIiQNjJLR8S9El\nJNwkIy7/CEZTVYpuLL4XdJ5uWG6dVSmRAhLWcVMrZ8E9zRDZjE0LOheOYQUW\nn9sI\r\n=lYjf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHcoagR9v64z+CTkeOajJpuj0CbimvDQkRPmAsPUhv8SAiEAoLobV7D1n6XMpjz/poool2FGZM20Z5uiqi1kMm0fVNY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597697358-04fa30bd.0_1597697505459_0.45567968273615356"},"_hasShrinkwrap":false},"2.0.5-next-1597735223-6721102c.0":{"name":"@xdn/core","version":"2.0.5-next-1597735223-6721102c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597735223-6721102c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2yGnBN/PwQoRyvQ3oa6dP5hKg+83dtKG0usjTRGV/IPOKlhDXS2ipXXe0/botCjEnjA4YLJEGiPFCcbbAaMOgA==","shasum":"bc639bffadb888832fdd78c3c7eef2ba55e3834b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597735223-6721102c.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO4HfCRA9TVsSAnZWagAAL+wQAICnb2NwO9HxbKL+LY+H\nKJw6F8+7aWqoTIW7TbZRTX6BsRnBVMg6t5JgciY8Qf8SMf1XwSWXw9v3Kar4\n4l1TN/A0WHQZU4b7XvAc4+TGceI6TMoEp5hos911aZeEiqBKQkVbiYEddrUf\nliJxlMU6p3luHXykkVLopheqEDuUukoDf3/h8nljQhsaK9Sk9qitSjBGfQtL\nbiD8wx3xF15JMOYTqRpfR/twEuxkgOOhYU+hzrTC5Xi+LXTbERXa+wV+Utg/\nnK0soVE7pFaGqjVjDTzNPtSCcAWrKtm+CxF4AQYDL8Q3AkFsl8VqSVKFQU0g\neK2VNGWHOf8+j+GF1DvjcltSUJfHiijqTsrS3RGqvbfynshgI5W3OHfylRWb\n2pbqq6s+KjQE6WEzaEmxEyQzMShHJrG8DLRwPrfhHSt8Cp9WnYHV5lqMuTHA\neZuaWg6Mi2fnkq2jZM4LXIvYzFG0+L5TbzakfdCEXXYHyP+KX7eaUsfTuJjG\ncMFCAm2ia8cuk8AiyoRgFyk0b/6m9OaGifMpSby+gybZFgsTJX4nHwfGll7R\nmacliDNCeAa0ZlK3BUPhmjg7yzs3I5CaPea4XZ3pnhly9p9Hf0q3HC60MCIO\n9/tb2LjvLz9zKjTui0KZBlXU/qsNFhQApjNXJEbPTg24YweLUV/ZW9ypZQQv\n4JNY\r\n=CiPn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcIS7GDneHJLBW8+JkYayqUUFBGhrFZmdue/FURafWOwIgRe1LV2umX1Vk6C0GItnC9xLwGEkxsizDWOge851Kx2M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597735223-6721102c.0_1597735390570_0.3202141299340544"},"_hasShrinkwrap":false},"2.0.5-next-1597756969-d0ca5c03.0":{"name":"@xdn/core","version":"2.0.5-next-1597756969-d0ca5c03.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597756969-d0ca5c03.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/k/M56847DDxXhqZTrHZ8uViNM8ZK6KbMa0thu4M0+wV9DvTr7U+IceKgGcUDJMPCMEdtRVDKdcxzgpaVkMKFg==","shasum":"0260dd737779293389238388b3f8c39e41d58a54","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597756969-d0ca5c03.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO9aVCRA9TVsSAnZWagAASH0P/2OJeDIbkROi0buIIZMt\n42XpoID0wQBZ5Nc5CucgkIFL7KU7TppPwCck+L/FS+FDj8Bo2yufcYbiHYEn\norCJihxTZOamrwa2HniFcn6IFLhJ8G3E5YPSaLLTFjKT1THbbQWZeEwhIvP3\nJUhwasLo4v6rL/iD2FGObpAhT+5zGIqBckVol/gO3iXeOK5if6CIQHiumUos\naYHPjXiUAke0imOZRLNZEYbkV0bAhYzaiy3OY+jhgg7sM8bBi6u9C6Y+jY1a\nI+pt4sXYNgWVbpZUzS/MdR6AP3s36D5uNDs+tpXJy4SMU7Sh9AqaSVgt38nu\nE0a0RUQJ9gDVrdCPZ9WHPQi1ZM5P++K7ccCzDn3duitFsJUoVOsEo4+b+zpU\nC4zdBcjq+9wyXi27dzZol1ujrbTNBD+w+yoXkQy3uedcfmHj7OPedb9gLrCm\noRzyS0JuB/pi7J+S2s85atc1dVUxfIqCDTRWFoHC6MiCyntJnpNQ8fSCKCLr\nK87WGcvZd0VNby7f6jbh0yFlHKqPMp2jKST06dMeyjC4twEk2r5D+y28B2fR\nK1F+mzRQaetf+u6XarimM0GmF3//x9QMubKh34hsCiaN7P7lpb9Ob6NlYNmS\nNEmcjNIkkX/lsZWrxDvq/B9CEBaG6AIxNOP2PQIwsBtBltCP4Js6Evg7mvDj\nsC75\r\n=VfLD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA1F4Azv5rfAbM/AZTna/KkzdFTPMFboJmoZofDjN6bUAiBwjsoTVPS5ZaYnkh3tdO6XQ9qX1Y/yXA9oSv5ZYNT4MQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597756969-d0ca5c03.0_1597757076877_0.6636244297620504"},"_hasShrinkwrap":false},"2.0.5-next-1597757551-81dfc75e.0":{"name":"@xdn/core","version":"2.0.5-next-1597757551-81dfc75e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597757551-81dfc75e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/SgWujATyM1IVTJpn59GR05gDmoC2DGwTvqBb/7koyiBuWUVqJ8l9i4p7D+yUJLhRzSD2CBit2X4P76gQXFwkA==","shasum":"09667a10efbb785c5536d7206e3a239fe08c1d02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597757551-81dfc75e.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO9kECRA9TVsSAnZWagAAFygQAKA8+isWxfdnP4/2pOHO\n+2CtpZofexnIeCboE42r/FKuMJMXCpPllr41LXzrwZaQljQ2k8QocVnohvFq\nr+ljcuhjQoK6Zbmfq8HztXzlYuWpjHoq52jQhOwjbomr+DWkq/jLT2k7aS+L\n9OYx0QvkNoIVzlSXMkz8INJ17U3lsXEmTOq6Nr6aClCgLVoP8YJpQfPjfBlV\neRRpkwnY22ChPQFyXFYgRpT+K/Q9HzKW+fYDbd0whyBsr94es4be4NrWe4Rs\ntS1jls3ppkhqS8Tsny0iWAlC1RXApsruaxT1fmYEWZaGHayoiyGegdFtIkx6\nfOChT5JzLnPADlURceBw/UcXA7Uep8cA0rGeT4/azim3PWpdbpmswYzsYl3z\npSop0WfGnDzbXC9C6e8rGoUMEO29cgRpWsph0Y2Tdz5Zb1oXfAE19CYt5Laj\nR6c6nmbfX6B0qm+x1MjqOpY1EBLjyszsEdxLO1HCnNsmOGmo9m7N200pPGW+\n10Z2BBHsh9v6cCGsTnCorSx5hvULdnXcy/fZp7aNmb0nnkyzCyuhmTBPbJ+L\npjXI/BUlzrEwAyynPc3l17snjA0nVlQRRPepTtdbwTPQ4cZ8M+C1QayUJSXO\nNK5xlUBFRDYza10m/PWZAVyvuHXWYq7wp7F4ElCDMu2Enql77xXZ1ICmK+E0\nYQ7V\r\n=b6IV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGx7LJOxrVOtuvYwOhb1zDhHyiD/M/KmTzyEAFpQqAugAiBK49xiyHqKmik1RPpIrIK2USTaeISqBGL5QzYKtlt4qA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597757551-81dfc75e.0_1597757699826_0.5508526892161991"},"_hasShrinkwrap":false},"2.0.5-next-1597757648-338577b6.0":{"name":"@xdn/core","version":"2.0.5-next-1597757648-338577b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597757648-338577b6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-f0Hd0jF8SHyWr5XRh7YLdK59dVmgOBxPQl5QfSeIWExifLw+k1Tgnjb5TIggORAgUCG52+pn2upnGuripALL6A==","shasum":"6cd46ef989fedd964214894ac937cadcf2d2c83a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597757648-338577b6.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO9lVCRA9TVsSAnZWagAA2M0QAIlRsTc23L/GnwG53whX\neU/whznwxwaPGhrCJEktaaQcM+2HhC4A3lUx+l2Q/1bn9xnlSI9Uykgf/2k+\nopyQWdzyWNqf1dyLT8SE5EbDZ8ziDXD57CNdI9PEXtTv+J+hUkHnc/FZhu+B\niN+APk5zb/XCQnYaPVpVndiB3TnuwN+xr4fcvm6ScxEvUybvwSzYdt06Ya2v\nvFlqbRBDqcZfxXlSaLrWHe5C7S1+nDAyuxX92BRMyO6lWyD67JIytkR/+1ia\nJ+iBGw6cRFGg0HbLAlc781Lqmp4bPXBdway/6QxYLHk6ifmfJHDlk8DUbwwH\n40odRYKJGByM6HTBhWBsDEQ7BFI9jcwFDoqiOPpkh6lRaGFir4h1rn2EkTVW\nf8gtkqZ26aVPrNQpIHWyZM+UcySlnVfWmXKAqB8Mt9GOLIXWbzpfxu6I7xAz\nW/wPtFQjUFewRwSDUfXKMy3DJGjv1JuEDMvMCBm+rITLn/VaznhYJbwwRJKp\nu3sMGB+gkJJiD2JU7TsVk5r2Ei+eJ1xRPFiLgMc+UnxsiDj5M7cyKih7KR29\nC+sR0L8plex4ZHr8xPubfitfq8yXOzgLIQY8nV2GELkMr1ZK3QmIJZIuYHyj\nigiYqY/BXZtfrxe+KEMlo/T+aOo+ZoDLzdPhBMk1GWj6MUrgr5EPAEXYw/Uc\n//JM\r\n=xbF2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDap4vOHy1MErZBv7uBlGMla/ymkzZzlVRL4/d8U6JhnAiB3Dl+a/emU1L6DzhKnPvry+3Ht6cJAdddZ5FZIL+cwFQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597757648-338577b6.0_1597757781542_0.5794466434704506"},"_hasShrinkwrap":false},"2.0.5-next-1597757794-a960d622.0":{"name":"@xdn/core","version":"2.0.5-next-1597757794-a960d622.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597757794-a960d622.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-gVTdT8BVjYy36ZllxggDanmbLX5ZJutBepaIPXaiQj1aYTqUDsDVZMuUxLqoE/ynRlyvp59xLGTjwoVIetaOGw==","shasum":"d72bd1b6a8648634e30bc8bbf535fe6fc58426e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597757794-a960d622.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO9ntCRA9TVsSAnZWagAA/CMP/jq1E0Cj60b0QTkAG5n4\nQmjF4L2huvn0wX6JIhAuo+UMtDT0xBXlWFwSL0oKHVv/OCt756jx/H5J520q\nFv6uDvb8G8Q5N5EBl3leT6eu09rTUYatrOa+30+Ne+c6jxGIaae2u+wAeYs7\nPewvcitmICjyyenCmqtGyIvga/NyR6Jlgc5+c8EboXO7GzntxEp2cg90uNzC\nZzz7vO9crENGMTMbHl8Ko5jLCHFMewnXsS9MXn8gKLrVeoLNXCggxb6k5ldX\nUWcByTOgc7tHN7duTrddhhNnzSpdrMIodwnRtpx8ZLKlDJEAbv4E053+7dp0\nON4hhhfTncnocbsveQZ4yYxXwcmIADxcgTj6JOrJT8LcaFbmFjVaqm9hmw0r\nH8hRPaIrfokUzYdCDjpTYR0h49ulXAKSN2lQX5omSSYj3riUOMYu4zNPAOvZ\nW29rRzBqEkZm0TGQjMPGwZ+w46djFHVTcfqg3uFSY5IEjAg/xBpcXZBCLG20\n0dyn6457pNyTQjK+zbXshnP6LWXbD8OPbSl7bTcdT0SRR3nBn8EiI0raDMhq\nCy18dG8hxaFVtDDhP5pHNX0k8GAQlbMPjBEoZc14ervxzTOpjK7hiRWPrr7D\nWrVPzRjGocgB5XscZPwQYfpw7jOfZZdv0w8Y7kggv38OQKbFClaUYPgmqm49\n2Jpb\r\n=butA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9B6yZWF/tL8EEtl8TAPZcFM08tOssQHmZKq8cIB0y1wIhAJp/Hca88JguuA4Y1iuvlDCa6yKlj0k10AutzFnsT54g"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597757794-a960d622.0_1597757932655_0.043303218765083695"},"_hasShrinkwrap":false},"2.0.5-next-1597758353-8063dfa8.0":{"name":"@xdn/core","version":"2.0.5-next-1597758353-8063dfa8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597758353-8063dfa8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4/GqjUyZDzp+OilwYZqm5U/uDNku5OJ+w8EGmlYc5hO6Ui9mPxGzaZXs6htQXrchiUnLhuYODQJb6wtKJrMY4g==","shasum":"bdce316622aac8a6d3f4bb635acc4af45221fe36","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597758353-8063dfa8.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO9wnCRA9TVsSAnZWagAAUrcP+QEGJ1RQJ+Cg56xY4flV\neRry3IjrVi99SD7EazM1bzc469HIMDfT4xJnWK+G/y0P+Gvn5JmIZb612exu\n1Zf+K0qirQzF43giC70ifChYqZAFsYYHORLX+ZSsTW5ZhG3CdES7o1XYxmCL\npDOzmH8K1TZcRNkgW7Zn5mLkb3THW+Idg9wO4YdLAzJZJnZtye1wFeuNKjtL\nHHdmIYZZTdIKIbCaIaVIUeIdaCITb0lbTbDyg1HednukHE6FmcDktYpX762+\nSodbxRZuMEAOd4ECrMJfuX6oLe+BkPjDiC0kabV6vQYQ2xKGCLz/gPsTT4j/\nIQRouS0PNbIgd+1ujO5jsakbMdvZC31Vacl/uthhWby2eIvDkQ/7J5h4DmnZ\nMX+688YKUbpRSJqEAHrmPyH9UHRcvP753ilZWa2KH5QyDzg9ttPgJ8GkHWU5\nJUGQAkhXmMrl/Di/ap49Nh88Yu4QKzO2UptAj7abX74ZydhbKZriCEFD29gJ\npj9WJ7a5UxLT14G32ybu4NDQ5/l5CIMWfK8082RA4NoeeZeOF7bk291ZdJdA\ngWd7Wo6p+n5qsesEjzrD2eIhYZ3dm4rfVDqPrWlciTjekOk+LUrHXTym8Vb6\nx/QC8GbaV66QiHi96eJwyOLF+nVqoAdYgmY7DFzjtfBEmcTe9cZ+RxXOcHew\no11C\r\n=Ig0R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDx4ygCS14J7GwzKwTy98QX2d82UYq5HoOZHGt/SGKrHQIhAPzNCh2/BZpDWOZ18OQB9wgvkQ6K0J0P4Jq/uqKOBIPT"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597758353-8063dfa8.0_1597758502552_0.8036307535302565"},"_hasShrinkwrap":false},"2.0.5-next-1597760047-8063dfa8.0":{"name":"@xdn/core","version":"2.0.5-next-1597760047-8063dfa8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597760047-8063dfa8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bVhl63HfxvAn4MOuwGJIh+Y3mOcg3AYsR81BVGz0yq3eACk1qNa+R/xYCj4W1u4maVhgPCQKAc0mFF8L0+R4vQ==","shasum":"896567ad8b9423302be553568f7f46a23c8b1336","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597760047-8063dfa8.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO+K5CRA9TVsSAnZWagAALEUP/2fu8AMQjU+5+LkV7Q0t\nTJTo5ykuTEZzN0RmQbn+GYTXWyzMIluW5GVaKxE6vz34dx9xmZdaNWvDbzU6\nlMoLhzeWjF0+4jGCS4cxNm/1+3liPIYWUe36rDZNojA8twr2VTBfyEwQN956\nGVeuhfxNMyA3FsA9EMK7fFzB8PDXGsanuDYdQ+16TGSZ+vApb14S8TRWBHv8\nDCrbJnf6crQoJ8Jxrbl0lhxpEaEoS8MkaZcB+YguVHhDCOTZTp9Coh9R2qJ2\nwU14j/Bj0GDaX67XrqC4bViE1SYnRbDzYCgrAIJWcjFIt0f60kqELE/E5oCX\nMCaWpl1FjsBG/VCGR++4WonDp2TnukdPSJaLUIkwDpy8U5LtCo0SceInXV+y\nECp3PcCGQVd/9aIAotJCyOVHg5VXyiBfclFsGMV8nEoX1QRvlssSKGp4LiEk\nT59a9uZG92ll3YW0pFEquAGjrE/QJOldzt71Uo72HNi/Ns/WJGTc3iY+kKiN\niYpYtL0AySO9HYa0rO1BsdaVDVwr0k13k4AU/aGtuCYkxocwa6PlekfJF+q2\nm6JYLPCqAam8LCtKfah1kBgjmGQiHvrag3aMjwXnscYkaphHXWnLfcvr2zZi\n8SiSx9ITShFiGwtxXHzy5cAYXJ/PeC5Ybj4aygJByh3rRhxIWe1yIrYtMjDi\nPz1b\r\n=ngRj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxgiUudVdFhs/nmf4xvS2xqDrEXI9q9LblaFjwwhc57wIgUNjMig8E4seB7q6Q7zXOFzFHdCk9Wo8RJlYbnc9pHvE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597760047-8063dfa8.0_1597760184714_0.7918321830541213"},"_hasShrinkwrap":false},"2.0.5-next-1597760858-2f20f81e.0":{"name":"@xdn/core","version":"2.0.5-next-1597760858-2f20f81e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597760858-2f20f81e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-K8TzhU41afscZ12EVajMuB6WZ7qZ72cakLbTZrxTePVtI5hQQNMsjF91M/kVp7Q1hZsV5E23vPCXYjz/bvnxpg==","shasum":"ca036adb772cd9a4e9b10e3a7e7dad330798cd7f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597760858-2f20f81e.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO+XtCRA9TVsSAnZWagAAiboQAJIC80GTkbrX7AgCfVnO\nMUZaBW2srJjxnCRpy0xngesGpZZqbst5neQ8cRz12HxNtom0DA5EQ2dW/+gy\nCTGMkzqtkEC02BWCNHKFp+4oTbGlbrosTSJHMlk8UEBHeglIW5hNmgbQwlyK\ne+WoQFtSCqIcE6q8h14Hx/ho5+hD3cEMo7eF8YcLPMVRK4McpKGz/nRvrZ4J\nfesF2GM3f+OmCtyDYpvWThwLJR1f+ImaYoeqzpyD7vBsNgY7PKuI/4lyu2TC\nSLsuJs0eLZZlXydB1cEs6qKNF/8ZsQ6HZuweiz/txfxIF6COG518hMaTcr+4\n1Jksiky8yn+bfGVL5+AH1JaQi++meN02D773Bq7hwR9glFhJp2TX5lq4TYRb\nfnb/VUe9QIF6/UwtF9mneDRboI+3R8tprhBYNf7C21CvxqOU5ky4j1pVyD37\nIRUMLdqOXsdWJEaycGEb/2u4H1arCoy0gQ3pDS1TRNVA6iHCBeD2RE1elJrf\n8SKMk5VIlSj19dn7nhcxZgApX9Fn/3jfPQ2V3FSwSN9XYa40n9DU/zeUb1yS\nle6jMB2/pvOuIMuwL2vhkbZSbzJTL+Yk8JIaFUajVRVAordBsRqaYPhJBVoA\n9oWQOa/ROor3fYTSzoADtcNh/LvO6hwOxGgLOxU+hTteMQVXOlbV5o6NKO5j\nN8I+\r\n=RjJx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIACGS5qFqWASIu2QPIo3XwnoMIx13ep4mTOvvZ1tWLFXAiEAnmVTrL57Uv51LMZB9641U51N/7xZmzLmQ1wjfWvw4qw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597760858-2f20f81e.0_1597761004655_0.44019348850630546"},"_hasShrinkwrap":false},"2.0.5-next-1597762572-abb5b88e.0":{"name":"@xdn/core","version":"2.0.5-next-1597762572-abb5b88e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597762572-abb5b88e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wszXMbwytv4RLpWKIxmlDQ9Z0GFmx2xWAVD4rQbC7Cs87sAnQWNDzrDY5SED7QDEI4MEyW1ErBbZmr9Lpkn6ig==","shasum":"5fbf5166835f10d560fc6474c915108ded243ed6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597762572-abb5b88e.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO+ycCRA9TVsSAnZWagAAKesP/iiNk7+t9LYWlGrEssf/\nYniUg5o8G7A9bJG4j7SHQnuKLii0bfG81YjZ77I0OGNAwXKskj+B3xraOMuk\nfBvCzuPq/y0d6F1bVnH8PB5O345Aaguf68EP6dBayK+66BZC/Ad83ndxSpRV\nyW8EYjQm7D3vhs1s+ElZXErMbX9B9sRvElf7f/3n5u66F3ttohXTV9Y/TW2P\nKvoJ99lZaDRlQvzrNy5GBBz+kp63sptQ2wUaU59P3PdQEB3UjO3O+e55TX8A\nc0JgMFk4qwqpxe3t3LBV3hwczSnGMrtlWDreuC2Eg5Pm1KMbZ3L0oCuDnjYX\nGoqtBgC3FEd+rpLyYv/YTJYs0E06+ClGOPIRCQ+BXAxWGxhyP+NdWrvrmgTy\nHn25WDF0HP4YH4w/WW4ChD15ib84ekGakHEv2pVXfDap+TJ+EN5qrNt5wHCQ\nPmh6cb1sq84CrC+6tO26RSbJDB3LNq56jIpY19RmlwUBMzoHE3jD8IPmN2Gj\niO4gHG4xYQVSYVXDBd9tBraA3+QDe38BkOTAUQzwXSrxx0O6tq9VpxZBk75J\nh3z2gyS3Tn56IoYvho9uM07SGHi0xwYAANE7GteAww4C0h+fIzOyiwUdd1B/\n6+Uh/cxSZktO6l0yOO3i9kl1lKJTgln3BKMjl/mrJMPOxoP8mNrk3wzjfxeS\nccFc\r\n=SFxC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDl+bb5uUFfDfJqULe5SiIFN8KzlZ+6TM4ld1SGhrgsWAiBNeNXDknp9MbkNEZM71NNzh/sFLTk9yiRCraX3MeIjqw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597762572-abb5b88e.0_1597762715749_0.2779463425760036"},"_hasShrinkwrap":false},"2.0.5-next-1597764745-0f7c65ef.0":{"name":"@xdn/core","version":"2.0.5-next-1597764745-0f7c65ef.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597764745-0f7c65ef.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-B+fpkGewYE6zjzGToiZH7uqBvJ6436pe1U/XLp32TXsUdnh+Piq4HrP0OIBw3iZ2zgbli7IiK4hV768+be/s+A==","shasum":"465bdd20560df322237c70cdf245fa1f480edc5c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597764745-0f7c65ef.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO/UWCRA9TVsSAnZWagAAn3AQAJI/cz8792oCwxQv5+BQ\npaxDFpZp8VgLngocMVcBy2jCwsIb0/ocNZYWCigpcUci5yzWt8PZ5/P5CjMg\nQDZavJQrfHjVPNgwmb7Bob7OM0fYsT9H3FtPm1xmwAJYhqFeLXhHDS0C+zca\n65TV7dg7xiq9EXSVkZPjX39jMNrNp47Audl/wNsFrVMoHYhUMsxbQ8lzJFpW\nIoYTguvaSc777BqwpUBKwYYoyPR5e9qcBYVcqrUHP8ZkpB8k8aJ4hOAW3cHi\nF+9JdDxWnAZVvrsnghIHu39Tcc2j7VyT8huFaB1zqNTbZlUYhXcziNhBsWam\nG9cnhyE+cWM4Yd/pAn7ajMT1D38G+sNbC6Q0qDwNevrA7StZXckHmwzSk6LX\nSazaEGvU3Ek0/u7pVVOEGtitu6K78HH8meIgsY1K7421aqUuR6XG//ppPFJ2\ntwsNHuMR04EkhprfVZdS8yvlo32VNnssUkvslR2VHwquUK28vAKc8JDWLHiz\n4zCJlAgkWwiEihePDXH7Blssrize4ZVcbC2dj8I+/m9g5Dq1G54vPeFmHooO\nA/LxKLufwKqqNYgiwsIJBS/St6QlAeJXQzef5ZwJrlreP9Y5+aZN1B5cVlMd\ng3cEdkZzULqxbfgOatojkGBdG9ipj77a/7skGz6lZMLIAKT/HFR/W9fNJ7gw\nqKzk\r\n=eYrf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhpCAplwBdNhjUxAAkah/UokmWR2V6S4GI0HYtWt8jJgIgZDZe/tPZsru9/8hex/Vy8WUMAtCg3OAhqsOn0aduUx0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597764745-0f7c65ef.0_1597764885850_0.23304508350573006"},"_hasShrinkwrap":false},"2.0.5-next-1597766574-ef9446f3.0":{"name":"@xdn/core","version":"2.0.5-next-1597766574-ef9446f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597766574-ef9446f3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Q/idFNh81J5UERb3hq/dY+S7LEyF1/qz2X9zzrwWDqiw1kH0lcZO4QYuc6yaVgEMSqB0HIXvhGePsLZjPBXqLw==","shasum":"0f00b274c7c15c767fa52282c384579fb15b104b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597766574-ef9446f3.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfO/w7CRA9TVsSAnZWagAAxr8QAKIlCPfD4D+3rpRkw4Gl\natYnJ+Jq7wd3M0sX3Rvyh6yJi1fx0mePUEKP+CFUcr2pq34eaeJqtdWJX4bW\ngVnUPC0TyugnOkJ/XsK4yUKwtaY70ExkucIzJbaT5mD4SlsLiWPCZAp6rQzd\naeqVqhjV0fjfvKQdUk/46O0nSh2bplJsaHaJpNCkZZF3O8joehP+lR4L1eb2\n1/mfZN1o7qlIcpj29EVyGzi2iU87ZnbzUPequTKFz+K2Z58Kp7cfmJ0wHKl1\nQD4WlMVuK1Vx/QTnHY4Y49XDkbaXciEhNAZ4nmKUhPDgJ46U0Qmv/XFo2XVT\nCWTSN1qK8xl42JSBD01nCCv4FZtPixNjifPo0E01hElkPZSFeW0rs9w825k7\nCLJY8CbAVK/mAyshZng6d/mcrFUm3goQ++QnUkIicRYAwKLP3VTUWItLrxuH\nYPBqxXXuwPptccf2S7PONrtm8ksoUOnkIcPPPqLEfyo9rfVJY+H5jAyYwmDy\nnGr2neqB79T6dCfFw/pGT6i57wfGnoxoK8tlf+OQRIIQbcE/xyxPrJZwDAea\nz2GoPWpUo/6ikIzW0SzTwxQppQZ3cL4MVkVOqZxsOFEf5g3LQmob20wLiEmv\nmbYFwZxkdoej0jw0QNDqt5+gdkexTdpvS+wSu44P07Fz/NcGlBUJyrYst1OY\nGRqn\r\n=Re+/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+gaQwqim4yX1FN825Tr19kI/D37q6xthGJaNrHRVZ8AIhALIteDdoTzijc3uHGyq7GG//57+wHQf6pJsyYPWJtr0Z"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597766574-ef9446f3.0_1597766715192_0.3069620101223274"},"_hasShrinkwrap":false},"2.0.5-next-1597773550-c63ebf1d.0":{"name":"@xdn/core","version":"2.0.5-next-1597773550-c63ebf1d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597773550-c63ebf1d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-BE6SaLcIDYfmgYKsrqLkX3hyDn4sdWn1M1tU8s3JU2FFbix+DlZjqKY0LPTlHKZZjvT7NWgfY3wBJo6ve0zlEA==","shasum":"12184ee7af1b5f67d9db301eedcc49335337eee2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597773550-c63ebf1d.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPBd8CRA9TVsSAnZWagAAixoQAKQGZRD4NdMw+f8YjzU9\n2ORSicqb67yhyU4qer9d09AfCEB4nbhM5fmv3tYPe+gcUYrw06V4x84lVIg0\nbuSYnj5bYb2xYlRgvKuGf9GfwmlAcfdKKp2/NLs/u4sy19fw/DQcuXsoUlWd\nFZsZJ8g3o6ryNVi7Mb6HD+0Xa8DIAdyKiCTeYnxtrBVRe3Kv8rNVDeyzcUZ8\njOY2IrvtvVm9V5boGJmoYhlhB6E8ZaHWbk57DZHf0u1ecY1bUhlqmAJgJSNL\n9rmocWlTdxmXVY/ttTMMl7eMhlgLDGu1LcMA3tl5AyFoKd6fh+QbPkRR16gn\njhGcxj3LDfsX2IRV5fN3+5mkGwXbGSjNfWfehc6uBwBwB7fPm2lP9rox5teK\n8hnyFBvlgJCgRHJGXnnFxPjutqi4L1DDTOaKQAMfse5/pz1AhUo6+9EZs4YO\nisid1JQ7RnWtYaB/xq7gVMSXlXRAEHB8u6FD6/IEe706zWRZy2VrTdSl0PyE\nzVV90XmIJZmFUfQdfWXSxBuxNRlLvoODOkM+szRS6abG8hWbUW9K1apGxI6x\nn7kvStRDdmCjxAVVDUhLS9FNbVyfW56/XUsDJSEuasx9cew7VxEGPupOGkCg\nDwrsQSenkzREZCxRjicSyoulLgAHkchTYV8T3spmeb+g4AKc7ZmPBb1G0ZfA\nX3BZ\r\n=yckH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6NidsjFnzgrCoRTyCu9idQWEZp4FRdT5ZCZLElKnj7wIgbGXrnYxnsYt62MmzEKtW5uiVV7Y5Bj7Fmx4uhy4dDHk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597773550-c63ebf1d.0_1597773692336_0.6762076758954254"},"_hasShrinkwrap":false},"2.0.5-next-1597773572-f601925c.0":{"name":"@xdn/core","version":"2.0.5-next-1597773572-f601925c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597773572-f601925c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KnHBYWX9zK9FrNyYOvanRqPL/jrSzqjM/p9wRJEYDPhxOx2vncqK/txgxIZo9mvWefpmZkfE5yKciy4QfRVQZg==","shasum":"83dd463e86ddc7c7ed3564747ff2d7c3f839e7e2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597773572-f601925c.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPBePCRA9TVsSAnZWagAAgYcP/3oSyDpHoH2DzPDKQ2uj\nBtUzT146+3feSKHZmY6rHdzkZP0u5T3TgjOjNjp6UmxtZseWbNGBsHiJJ5xC\nuIBN65rGGf9dnDu9ZVhqLNsFi7kGGrs67HHlEcsH8V+W+TxOhcA7Q/DMTgUg\ncmWuOJAyKpKzpVlIX5kVs5NttgarflxC0r2b2ZPxKVeaXG++kk1dNn8Lee05\nAhwhVgtGMyD0jtT0AjkRVeWUYKGZ/SFZYIm3rqFJhNGHOT6JbrwnSPw9oW4o\nvsKsKo6L7ap1DgL6IhsqkQ4UJWGnXKcwXDm8XTuOZAr9HGxs08d5SW/Nqpbo\nUPArncpKkpvAyfnezDzi65f/3sFqMwSRJGEgiVChsAv+dYCL8E4U0BBYKq+/\nH635ZQUEiasayFktU9H8vUUBuzT43gxoDOkdBYUZyNhIbZgV1J/wtPgMRRAW\nHaUyvfvhVC0GWSoTfWuwAYCvcDEoNhTGgawCu+5y4qckDHyE9E4iYvefxQqJ\nv5Bjgmf1aaZr1/ZGS91BY0mh7UvlCUSaKHxmzH3+VxolegJL0Khqp6dM+lu9\naf2xJA6xjC6yXq/k5lfRK4zIqzkd1laMeyQvH6SHoYtjiHra2Wlof8jfPa8x\nUf/+qFQ1XCur+XbSLgeRrKWp5XnGbmkeqWCHGOKIevySoXI2SOZo2TRcUaXJ\nLOUy\r\n=KFx6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFj2+bg0NzuO7AXQ0N3hgdBKl59BKiD8F/HGSN8ydcxgAiEA74CTWi7S2JGTmWArI7hC5KLTMQf7LmzPQD1MkF9hamY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597773572-f601925c.0_1597773710917_0.8406431218901855"},"_hasShrinkwrap":false},"2.0.5-next-1597773628-7cf4c771.0":{"name":"@xdn/core","version":"2.0.5-next-1597773628-7cf4c771.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597773628-7cf4c771.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-euoT7AjP8h+qyKFt+tzP7VOYP8B2JmLzFKj1uaM42ZeZZ3TH71CBmkxz0FrCmizjcSkEgCOiiS90SQWfGKJQcA==","shasum":"f6f364f25df1601879276157589de3de81c1eda1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597773628-7cf4c771.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPBfSCRA9TVsSAnZWagAA/1IQAJyj0v65mwk5l9ggwgXn\nOXpWc+7UYT3hsThaoBUr+5jlkVsy4PQXODIoDlRXiabVSXr5hABhsrlRLKyt\nSCLiw7dpOEr7hmt8rNKwWr3PAYP3JDO0RKWHW7gfwMrwDmeFlLCOMeYhSHPy\n7qtP6uJts/Z1cN7IJa8cUGi0rbJnxO+kjiiJ/pSlLbEpu3pg/4vQMVKL8rB/\ntPv7k2Yf5LF0y4VKbFxCOg+7KHntnbZ8YMRXqQuCyTB4u88TaTyik6vXiaC4\n+P9GisTOCG6QopPxaNdL3SxtT6izceCXeRIMZmIVlLpLiXS/Qq+nIP8KwsY/\nJvrdobf5AkYF1h5pzWWOYEGmv3lnN8rk/MUJ/SeBFgR2K4XDVXmI1E2U5J22\ndlRN6iR25iI2qqVqF/UR3HXHdWTzbLplvCCUr6Hd5dW19iyFr/7yz03Q2rkq\nR0n+HMdBe7kKy7Mmx0uNuERwQgp7fJvYZjOZqsv8Y88HAYQcILVWBCXcXMUl\nEaQQqplDJlyoLHWVclHnHANMlAYHMf2HanCleV4rriLqyYPDypPhnwOd4Te7\nrt8IE3IQWMv5aJTT+2prIziVvqHH/tdjxaAr67iJRdAWL6wIm86ZCEsVht3x\nqoRxW2S8mCFx+fr3RrACjI2mDpNtn9QFB47ekuNILbdrnw0FANNpgH+tVa/H\nAZ8r\r\n=Dxa9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEGVeKpOUOdGddZ+OZs8CfTm/nEDI5pZQzEBLu5accSgIhAKNuVooJaPR8uZiBJTqE4NHqkb9nTdOHbl0PW21t4iC4"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597773628-7cf4c771.0_1597773777509_0.5531178270067467"},"_hasShrinkwrap":false},"2.0.5-next-1597774464-dd1542bb.0":{"name":"@xdn/core","version":"2.0.5-next-1597774464-dd1542bb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597774464-dd1542bb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-R1R2li0lvYAJlOJVW2LUQKofqWl3L6eIIdn/eVVJBs4bCWuGIqari8ZT0GuqpMhB1qAuE0n4b20o+A9faglfPw==","shasum":"c547762ccc493fa4738d6225abdcad0964c3d354","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597774464-dd1542bb.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPBsCCRA9TVsSAnZWagAArPkP/jE5TnN8gRXxw6zl7tFZ\nQL27D8HVTylw+QJtdbc+szf69XpNuLa/KnS3fj5rIuj5rj3gxax67Q/GaQ31\nrdgItBB7MXWPUwq6rlYK58zcF/njEjiXD5JPUvyDx95WLClsaFF6eRsNCPgg\naaOTHt8Znw+ZaQ3qUmcOt7t8hJFFvDXkkPhp8XO7FOSl7AkwuD8VX+4iph6w\ntaRnACZsygXTqpPdVrC7mAGfg029g7M5vwYnjIoPMp5lbhQaisQzEVfd9rkF\n4nxZq9q+sk/D+2SBHlUjSFd7L6oRNeLh+WWpVMaAlpmu+yjsEQHBFoSTvKfF\nuYVGIKmNtLNoOwAee10mloMj1jYGP9Fpg3yDUwF0VwHWgQZly+dW6TPPJsSO\nM+Zt+OvtBC5AYYoV6c5fSwyDvWok7nwehYbeEcIdnXzfMvIJ3B+cFgs6E6mq\nNlA+vBX1HTs3Tr56jXQ1wWsM9KbdOEMGLxYXYYeIp16hyrbmw9g2Va4xMn0B\ncSbnl4QWCR/BSv8mUhl4dZj+K/yGiDyppDIW/NugGiHAHo8PWCD8etE+Y9cP\ngc/NCAWMai5xTBH3EbGuavxZHDxKr2jlCMaqvkgmqz7+a80FWkLdI35akwgN\nIgzhesGLXzo9E+3z/STDDmieoani0dz71VWlsK40S7TYBmkYwszC9bZwjGsL\nfMvz\r\n=5VUv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOI1iyRsCi0J8CpCxvytvcrJ0CAHkJyd3aSfwX5x4cEAIgIY/QWRVhbGz3X1sJVvQDxPEf1ZK2GeZT/LUCBLIsP5Q="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597774464-dd1542bb.0_1597774593272_0.792494345534404"},"_hasShrinkwrap":false},"2.0.5-next-1597775108-bfa19fce.0":{"name":"@xdn/core","version":"2.0.5-next-1597775108-bfa19fce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597775108-bfa19fce.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bXngL+9zO3BZfvphXsqsgP25Rf9rS7UdouehOQpWES39/4b17exQxxYYKzSUHFDwXXeSQScHsRDCQd9vccTCHA==","shasum":"d9f287e7ec73a8978b22278dd7c1c97cc24d725b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597775108-bfa19fce.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPB2cCRA9TVsSAnZWagAAQRkP/1F6PhoZo4BuZ3uXJe23\nVijhWQsjrn8iOlVFuoMIXRJB+bTYj2GW/H9TLA1oGl87yr2c37DNyQjC1olA\n8DbC5Z3BJhzikiLXlxyYYCsYpR4Wzp6LOjJATQDz5MM6m5nrPHNw+1W1+/oF\nsfaMo+tmoyGNO2hSOwFkniv4ea2uqvnctChEMjQ5j00SLCziP/xjESoXUirE\nbu45hemZiUwUyPzOGf2+qVZFg/oGq3IPyWGAQ8XTcytO/9IvAk3+Tchueg8g\nslzDRhWKuRUeRZowzRi21hl94dvgk3zJ4FLBS//wVwiXPhZSlB65tuEVcew2\n5ic7/+xIV/4/5qHXbRuG/ZYhLu2OJP4q65uagFD60sCevvLdmBopvQ8aP14s\nhskv/LqOt4xLz7hsZZ2agmeztngojgvdBNTfalEQ7m2YP3WNU23jipWJx2Y/\nBCbJ/HOaBssGU4jg0aX7JikICoex2qD30a+1VUcnUTPBzoJtTITLttq9c8wY\nPpIulLN/9VL7gMKdQKZIGdPnXziO3xsgkm3BflTv14WhTZTlNsvBclWi2RB5\nhMMtceOmpTdZicH1Dqs/1YkyFSTwNp1DWM/kLV4VKsopSmArFx7Cd6LidcyE\nDQ6V5G73Ady+VVbd5Jg1wQwU9l6qKwd+AVuSk8zaP3zxFGa81W2H2n9o6Fsf\nvob3\r\n=a8y8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCHwzVoeqTXF/rfVQXtqwDJCcmYTIwGg+XlEY1vr16KJwCIEgowhuY1bweKbzP7eFx/eX5XcOC3x2odDYbpKwilkqc"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597775108-bfa19fce.0_1597775260135_0.05087565858504517"},"_hasShrinkwrap":false},"2.0.5-next-1597780246-7cf4c771.0":{"name":"@xdn/core","version":"2.0.5-next-1597780246-7cf4c771.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597780246-7cf4c771.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-10TSr3xtMlddo04iKKnYwTH97ZAt8QobyFe461pk6u5jIevTe34VeqG1F4XdEMO2NvniaO8JffkaA4EJQ4+mog==","shasum":"3461abd7c776d102994a3aa38737a36e0b61ead3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597780246-7cf4c771.0.tgz","fileCount":133,"unpackedSize":591313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPDGZCRA9TVsSAnZWagAAGScP/30/OJt5xonDJlmaXpUl\nMJkFP7lI3/ncXlOX8F1MgmvcgJQ2ZmHE0WkziO2oR5pNLz5GFS6zfZHWmIiT\nzv9VEDkxBvYLRQH6Gp0c/3Ua0Byozs6o3b89hPn9beF1Hr5L9CK+Ng5r0lmb\nStBO02FaZfHb6C4qHrshrfVzZ+e0Q7g+rtYTBpjRvacm/Gw/XHCBQOj1rQDa\nE1ikAdGlMGLm0drDEfqVR+GMm+F/Sj40AhzVmmPTOfZgLYDgrbYXBLJ4Q4Di\nTQBMsexchPHJeChIHFptM8aYedgaYooexY0Tc4QCwHpWkcj5h4oKupnwd4JR\nduZUG9QceMCYSs2ROQprk0ogEpd4mqYPhifwiQ6obdvfNWVPaCL4Kyd6+Q7a\nrFWtSm+qoJWosJUkTp3HO1i9ERSJw1+kQ+OAommSGiL/IRVjJ1WqOn8yj1d+\nP2XOWbXNk/6QYpz6ccrZOoJV1UZLMmUcPhuoPqb9XubMlEhJgmejyW1R8+5A\nA7WS063XahOqZE+r5y7rAkIF4xV64IWsU2Zh7/CUpVecjwnA/ki6CjNcF8ln\nSG74TxP4ZU6HoqZU/EfECRqN3kniPbtv5tmfQZtKQ5fi3LIDb/0BwBjch/VJ\nQKXzU1OlANgxhkx+C+YlHK9WH+qHeaAi5RgyMd/N6IgCZOk1nV9Cqkoj9rJJ\nUp9T\r\n=s8ay\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIByqVgr72W51wNT5o0n/VqvbSj8FwuXD0NuE0jos1jJBAiEA4fdLg48I8WjT7TZnadNHuPyEywBCBeD9vMiKi0/pmMY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597780246-7cf4c771.0_1597780377023_0.5363870823327896"},"_hasShrinkwrap":false},"2.0.5-next-1597783670-d5c167bd.0":{"name":"@xdn/core","version":"2.0.5-next-1597783670-d5c167bd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597783670-d5c167bd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8+BUI+jxE9ydp4FmKgyjwclFhF2Rl6cEReBaZ4yfnQdoiEYw6JxMSi8ot7BOgMNzQF2Ize4J8NMFx46ze45WAw==","shasum":"7bb0fa49a844d5097a814470bb4f93be84bfe154","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597783670-d5c167bd.0.tgz","fileCount":133,"unpackedSize":592459,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPD7sCRA9TVsSAnZWagAAFu4P+gJq8klZmUvIBWY5pJ0g\nvBeJwjm6JKEQ5N38ubVKI9ZI4g9+XiZCzpR77LAx0nIqgVe6oyHXg0d/YAZG\n1BpTQ1QKUjGFb/KSVnCKfLS28/6xa8y+ycTJczoKqy9uPgm0lQLeVXfL9ZIx\nJaL9Dsjv0zISYW78VTHetfhFrd8dkX3DFEoFu/Rtcr7nSz3dr2mo0tSECkWH\nNqkre2V5ZBRFXdvVAXIkGhbKkXPie/95VSuq63c78KFoIU81o3umURObKNNU\nPCOp3GqrO4MxZsW+0txyt2zFsLxs8llGiwshtgDc84dzk8AxOwnrdCC5RL7D\nA3f7xsBy36dgdhlIeZDOCSSRAAeOwQ1W3/mEmlrP+dRa6qZmKj0Idjr9ccLj\n9EgtfXVh4E048fuB56AdVOw9tFaHkg53UbWoI3oLbNtTrDik02Grcg2MGMmI\nUJPxt8F9NnFZ9mewRHdcwg2XlP8xw1CnqAAxTeRqVA/vGaFfgpUQrYG6fnvQ\nyWTguUTij6NW5zeVyCc/JsCjUgsPZ407BrGMn6Y+4SOMKwUHSGJjAkDtY0JC\nDwNgyBOXaDXPLWPQEZmYsw3dnrhfNkKmhRu38oAy6yJ2/qG0t3569d5NPrJ9\nm+qlQWVY2eMYsKhbZDYEphjfYx9sYqSI6YJQ4pDRBc8KLB/8rcmCk9RRufWJ\n0jVL\r\n=5fpX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjZ3lmtQQZ5137TV+nk9inUopW5d4G/7BsKcleym7TlwIgEaPx2PIp1eNwmeqSEIH4ABPPPC6JDT/AHcaYofPZHlw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597783670-d5c167bd.0_1597783785913_0.4250565061290448"},"_hasShrinkwrap":false},"2.0.5-next-1597786246-eae4aa26.0":{"name":"@xdn/core","version":"2.0.5-next-1597786246-eae4aa26.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597786246-eae4aa26.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vaB2bbI1ASZQMUrwz8g7yCLYA0okZFmwYUquDREnCSvFjCShJDDSmJBqy6OnkTkKB5iLFIhkSJ4GDsTSnM/f7g==","shasum":"793fbe5eaa2f6297bd447641d28abee6d48941e8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597786246-eae4aa26.0.tgz","fileCount":133,"unpackedSize":592459,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPEkcCRA9TVsSAnZWagAATzgP/3xeIXRkjzy5jLFfR306\npWD9Pyb9D99oqvD8VFUtbB0GGgYUyOzKTR+B5z0Y6RFIj8DZ6H70wSLLbSA1\nQjZpqCAB0J3XJlUdi90T656WAsO7l/VmoSLPqBBLwuqpUftyRsmMpwBmYX32\n7g7+EaDCb6tnWBBVq0Qpche3gmOsVdIFfW5Dtea7o8+PqEHwcj6sykS4yyQT\n3b7h6VW9HLP1ZAC4BOY9DelqtJv1YDc4pK0PA2f6agtxVM8H/ZfkHOuRaBEj\n1YAfqchBT0Zj58zai+5Jlf3Gj1kX+o9sTkQWWeAaetPl+atBP92ryP9brWQn\ny0PCKCB35WIEX+Hgowd/JvdCZhInGiTHsdISgAKH4zt18UFAxWWPHFR6ay66\nVUeMIhrA7bir2BSprDTUNspFnfauHPvc3sB5VZGOGC2FfKXYnyeoOqqGEsUP\nsMQ1Gy3FWfW3h7YETzhK2JY1krjRx3vicHkXnDk4t7Ur0GEk0ZPlxM5UwDS6\n+l+qkKSZ4Ya/spVLl2JUQ73RdhNXmS4HLsF2N948uxoQi+gHC4k/7sE5Cxw4\nLnPhEejFw3UkaAf/AJ3xAAablK12G/TA+AvP2Cp/X/qM9Ii6aEaVja/AC0JC\nnmNJZ5wT/kYoJVltNIXxfHwFK2M9qE4bKZxtjewDrtDbuhnOyM6FeXI0pmHu\nUuus\r\n=UBQS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFFsIQoeRHrQIc+EW2Vcavw53gsml4dZUCDALjjaAY5wAiEAzjs4bnxuIwykV3CJ7CU/n+JMuRj0r2dMyT8u+YQGU24="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597786246-eae4aa26.0_1597786395882_0.19884929760725978"},"_hasShrinkwrap":false},"2.0.5-next-1597787058-33e8b7c6.0":{"name":"@xdn/core","version":"2.0.5-next-1597787058-33e8b7c6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597787058-33e8b7c6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xesI9KKUXw4IKKAaFPTd/2mM9ssP3Y8TuqLrN812B2ibUD5c9lUnI0TwXTcQ9k3Q2SAklBFZaMH4CUMKAKSkxg==","shasum":"ee55c0616451ce00a79bc69e8bcda9af28a86036","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597787058-33e8b7c6.0.tgz","fileCount":133,"unpackedSize":592133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPExMCRA9TVsSAnZWagAAm8gQAIsmKia6TwuYwTKXFzPu\nxaav9EE7GWIzO+W0jNPivAID117GQ+mx34C+5FaTjvZlZff8kqqB/8uxM9Az\nIU57Vya97FZkQUaNLj/we6f05M8Y7zhFhlsuvo1+EOdP5mJE4bd5IXoPt4v5\nd/Ec9vy5dmXG0XVLqeecLzKU7Kmz9DkvlWgHdoVQpluZe7AG1xf2cYnoHKN0\nPhcSNUALrlP/qwRX8kRInGTiZtpePUcHxrBNGktE+CxryHZoa2nft96W8u7T\n0/Sy66ztFE9hDnAr3Htfd/0x4d42CQ4FmG+iTCGcYrWxiOdtaGIe5i3TmNiK\naJnEh/Hyd5k6aaaDKJ7z7+6MdR3A4W73Bch1o9OfqAW8l08t7DnxVPZlr726\nCP/h7rCz6wsCcIjjlIVD5/kJnAdAbwN2lkeu/wjURQfuOGN/BcLTbtI03Vx0\nuIvQ00oSbTxdYgPDQ9rUpLCPJUUDc6LilnaUdZcJfOQzC26mE97Wj+LASgFV\n8knb8OWrvGvAIjbxM0D+7vIgfCS1WMiFEmhwCzlVQLlj+bwu1BWq+pctoYDq\nf1b4A3V+MZ84CQj6zstRHpyx2iflZI0846xMMej58/FAYr6RnPD9UTLjqAmG\nUet+Y65i3l7h1fp24Ij5QUaTNJ1/9+7GSRL8pWbTrn6tN7IRMeR2JXmNZdBw\nw1UA\r\n=Nnno\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbREtwRpRoG0UPu5OzTAzXP0h3ZMZIHm++7qcra9Cv7gIhANNdtlEaHpLNZpBkzNe00liZPuIusOP56jRPVtDIm7Kq"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597787058-33e8b7c6.0_1597787211904_0.9354743994436783"},"_hasShrinkwrap":false},"2.0.5-next-1597789402-11528e29.0":{"name":"@xdn/core","version":"2.0.5-next-1597789402-11528e29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.0.5-next-1597789402-11528e29.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/oOqi/Ps+hpRYHcjmay3gUUSHxkA/X3aC4EfHSW+vZh/3TXLutYCV9Pa+lRBBqjrwgsFUMGFkiNwq2ocYSvYZQ==","shasum":"72803ca86243d859db579383671dbad77b8fd9dd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.0.5-next-1597789402-11528e29.0.tgz","fileCount":133,"unpackedSize":592133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPFVpCRA9TVsSAnZWagAAVAUP/10yNulRm/gh89TcrqKg\nByUHl2fml85yi9sSFL+WDaUI/Sv7yTAFZR572VXkGJ6SQFPsm6oNTfCf6y7k\nPLswoGjYgfoBgEJ+dGWT8iBHkFPN9ytgfrSZFSKSkY+b49oMiu1+ETq6GsVs\nKrKH5qr5aHk3BOcFAMckrRUy5cnSTDIv1hNF4kXvNBQopiQ0w51FPCm0n8zu\ndXj16iN1m3ArjPQfgxHubfX9Qrz6ZCL5+6GFOtnHekOX1KVACw4cHJYELt1W\nHJ3GxxG69UVqnsxmrpji75i1Ufvi5pG4vW7t19ttZUb3OUN7dZEuZmx0Miwi\nrZoE0hnWyw4ra8FOQ02LJXREL5w6KEx8PJ+DL6I5KsNVYygiRAyeJ/fHR309\ngo8mdCjRKZklkHo2G2xcgTaPqslbrmlvyfHLzqgwP2zj7dhm0a3QQS0x/Eol\nBb6NPqnd+bxrSczoLedwEjmOrzT+nPfpEAQFipO9R4DjqNjEX9czLrEhVlMl\nHc3j2duNcbkD2kztzfrC9OZuXaKOHU73CjZrtgzeRB1XOCCIJl+YdhuY00at\nwsqWT+Pyaq+CiEEYUbQphg9OL3VKiPcLVgoZG/M6Zgj0daBBldbv8FhkMKdy\nSmQ4whD6Nc0BtmPnsuKoikTMBHAfdyT09kRT0dasyDeBcBJr1WZKE7awsq7c\nnFii\r\n=2R/N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICIgxcVPYiV0B+yk+/NgR626yYh+XkHiWc86sAjQn4fnAiEAiaCKnenZPaQ5DUdZ/VmWyV/jXVrdDM5p/JWix+RMsJ4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.0.5-next-1597789402-11528e29.0_1597789545227_0.6741490255230098"},"_hasShrinkwrap":false},"2.1.1-next-1597790800-c5397a15.0":{"name":"@xdn/core","version":"2.1.1-next-1597790800-c5397a15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597790800-c5397a15.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5is7Wka/ZWOitd1y0FxFTXMLEyfZ65YIVYtzyM7c46IfYo/N8CSmhRvJdfkyO260LvpZjjYMKizPzdfFB3oHOw==","shasum":"121ee9466b28b384cddc865551a2f0f4e355cf23","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597790800-c5397a15.0.tgz","fileCount":133,"unpackedSize":592133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPFrQCRA9TVsSAnZWagAAXI8P/2I2SnwdQ8wjS278XdmN\nSrNTLwERn+CvSTJsVeCA64mS5oZdjhSu0QjLTzZorkAXOqmbgRBeWEvx1UZ/\nM7vziDqwnGsW1bmlakohM9GJIMo6VVJNNi4O3tuba15OO0qsd2xGKl8PBbXS\nded/DPcLbZkpO5JhEVe9u/NGiJkKSan812i0JI58Q61uaaMRleEglpNRUMrU\nyIxHnkTBu8azKBmm3i55NJuZTyknqrRGPhNegxdTPl+5/TheG8Rb+RV8clZ5\nDPT2aYHJg+vgUYO82p4h2r8of4Vx58A8YEc4KlgOvY8WSQh6GqFKXIbcrUoa\nNwR4zosdIImGvg7gGXzMJ2qnXYU+UOlWfitTp1Vesz5L1xIdKJxKMF7qUs3R\nY/luxI/8QwQcvo4WiTyxgugsyLc4L1L8lFgNrbvIaLMQLpwHSwVak1Co+1Mv\n2lOKoa+Ymcaq8Dib2HXRxQmYEdq6jmj+44nG8xisIU9LPBWetaTW7ydbK0uR\nYNoHpx970oTQ2kqHQEvjcAdq8/6z1pB1EqMZS7bfKrd5UWofWNV80PM2+QHQ\n99Sdk/qEFyp3cwQXpyZvpyVmS/SCoTXWKPi7T3c9ndy9duTbEB1oeHJtIAO+\nKbNxJyc3e0VVVPYdjJ1ntsQObhDDUYOZOKFSYSAxlE1FtY659Kwtr6oNGRD5\n3Om/\r\n=i7/B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDLM6oLpAMKYwu5DemqVbpJ4GmWHxpieXwBf3DB3rVogIgWgpTAflqpjcaJsBprrTlSVDRo3yzKuuGzEhfK1aMWWg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597790800-c5397a15.0_1597790927644_0.7037517267315736"},"_hasShrinkwrap":false},"2.1.0":{"name":"@xdn/core","version":"2.1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4zns30VXtyi83lNdpjowob1+MBLj2Y2fwMAUPq7VwcAxJUrS0+260VFj8UBHyZF01ARQvNx96Z+EXgijLZNYAA==","shasum":"d1aef1a6c2c5a1123506b19ad7a581b2b464ba62","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.0.tgz","fileCount":133,"unpackedSize":592079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPF43CRA9TVsSAnZWagAATaIP/1l2qpZJ0QOQTSi+sKno\n7jfABZexuM1wrT8cZgQwPQwf4DA7jELDfc0dRahQ5uT0shdV8rT55w/uSVyv\noy4/M+9FKIcNj7ugEhKn2h9xQjyPjEoLOVWJ7y3Pv3omEwWItEz9JWWZMB4r\nqRcKX3zhWfqOsu5KCO51dqd+2Jzlv9s0aFgusqp3TVjTlvbjlVufO1dPfDdR\nsVbx5ttn69tUzjynTcjcJcxXpW/6CbwhZlQIN284Une1bFyzOw75cSuJ46pS\nznEz7Jhd/WkqdDwnOd/W03PYApWaf2Tl/jWjoGljcqg4/XclnjFlAtC3bl11\nrnUs/kxgf2wee+j1oPPSCm0sPl/TUa0C78t0TsQKFeBNv2yFMIdvshZtW6fV\nK5mu3cAhMRBLES5puVZqw+SgdQcIMc/Ho4kUJC6O3JqSg5XXUiohvDmz0J8A\nGNu/hSJOQweqpf9LLDYZOukGtgZPUyisRlBosMoTl5YhMiHHtv0WSeeN/1TG\nqKUqq77RovqDI8RtxNScW1aHsPM69BtIWbrpQ+C6GEdEjK6r7JEF5zdaBKrY\naO7FR3Zi+/RRtKxzfXNj1TjukmpNZA+Xl7bKSiGDi677N0cHwj6PMjkVSCtG\ni1ayYnuz/ypChazFZqtnpPchu+CETiW8sFe/VHquFxqMG6yNU33adftsxYCS\nUa3A\r\n=Jk/7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFDGd99Rnp0rEHVSW8mnP8zvP++uF3Q9DtDG0/66gmT4AiAxiG9Yc5O5I7HfctKwx4lox/Bqt781vqMxEVyKbX860w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.0_1597791799031_0.03776505360783533"},"_hasShrinkwrap":false},"2.1.1-next-1597840297-29b52ffd.0":{"name":"@xdn/core","version":"2.1.1-next-1597840297-29b52ffd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597840297-29b52ffd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-uIl1lniubAmL36JcS5/TW9Dhr5MPRKaT1ZKTZXyviURmaP/5+bm9bD6psHDQKbrevA6EmrNj6mr5I1k6FD9tJg==","shasum":"6a4b751649dec7949f75ecedbf5153a5112cf256","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597840297-29b52ffd.0.tgz","fileCount":133,"unpackedSize":592133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPRw1CRA9TVsSAnZWagAAingP/3mN1YiDJe/kH26w9/NT\nHdNZ/i1FsRWbfcsQW2IdlJTS7KDzHoOie/lXs71xVohb1a62Zk+FO9/5n4DC\nUuULSVbMchN6MgKkP3FUinAUXQW0AZDXtvqZ5YJLmYGBjqxvsJwCSwSjKPEU\nYP8SceU5vc3duTsq0e5f+wmgcIas2T2MCugZe68M2b6WweW37e3wR2bK0Sxe\nAotHWnV6EEiVfu6d20j9fj9Q6Zw5nNDCDM0nYKJRgiWBEFotlx2V2924hhg/\nDJzKicWd0hlwmaKPf5SPAO2rbNSteqlQGG4EOZeha6FaeDUiP26xM7RjrV7E\nhpLA8isnbyRqJS8JsR4R8s7FkWReEwHLVX++v8b0Q0skzDDhLQWQ2Lmt33iN\nqaZ+Z78DDqIvE3ki+i9RsjC6796UdrHUDA1vUNOWQr6aLJGfvOU1yB1pSJNB\nN4KoGbhWmobt3LYKbglSH287OiU3GIKqBqHQUTS065OmQBveaYTpL9qXQTFN\nxH/lc/5f2KXi1LqZmchUjRdq+Rau6d4WILuDfihYRmTKFTNRM24UL6GkJOrK\n9rC5lFGC765FcirGbU1l4bMwRc8YrCF+iUUk/m3r//A6tBrbvpjcFLPmk+ID\nLUnvxG9mK8UTP4aiWA8LYU0+Bo9m+UDTgud5ZZ6iZJqjj/E5uEztJcLglmuz\nsiVH\r\n=FCau\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHDDqIxtHPeQ1NuT+RZtt3137ApgF5zmetu0uVvVqNHvAiAr7J2DRl50fvdX0xsHgJlitk6FlE2JNsopp9XI8t6AGA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597840297-29b52ffd.0_1597840436938_0.3803129897794588"},"_hasShrinkwrap":false},"2.1.1-next-1597853580-3045583d.0":{"name":"@xdn/core","version":"2.1.1-next-1597853580-3045583d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597853580-3045583d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-oQZa48++VMtl25CfuHmt0T7KSUoFjhxDl2Alj6H4q6SJ2A38JJBwU39c9M8w4TZKHlrTFpKr1CC8bD5lu8anXA==","shasum":"03aaf22778e007af5c03b5d1ffaefc6f01e514f6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597853580-3045583d.0.tgz","fileCount":133,"unpackedSize":594644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPVAICRA9TVsSAnZWagAA7HMQAIiulQlYCgLXj/AvGImm\nDne1JhZ/bP8AFyhCuWay06KUZ+O0Jz3aJBmMwkTMEk4E09HHP0bwGK9U+rtS\n02cvlZTs+VFznIw65plnpd2ztouHoMOrY7OYUfFHlksZ51y5k4r2xPS4221f\nJTcRHJS661ll8VHI4/1ZmDPcNC5VK+Duo8CTO9ZoqdLCJPiG1E2qF9PV++1b\n7ajUa/oCdyQb7S1/E6DgsqRF8kOF4A/onU16JdoBvP5d760VMOBwBVrMaveF\naDF5VQtcC9FLb6oWMoRopHy8PibaCKzjhubbBl18IttcyP9uLUDCJRXHhVIn\nYufxprNnBIXFf686Bj3/SCtRuau0V0spxxHTXLL+gteFiGdJdp+RmcYXigt8\nkxEAPCxLAb90OAn8k6ym2GvZmEa+UxKiDnFwSJOE64SzXmfesULAZQGnS0HP\n2bTr6C4YkREAENJJtjP28kVw90JQOEQ8lS7+Y2pXAZEzpWRj87Yhmu9ccBGA\n4MIXBlgFJQqOn2HqstdWbncm2mamUC3XPk1+wZMq79w/txzU7TrhBYkNcazP\nix60u7WfKmdNjuqp9Hf+TZZwjP6EnWwL08h8vscH1z2qcZpWG6PArCmfT1SA\ndHVa44u4iUtYZK41ho2IpQqbFgX+yBcY6XzP4XBwv+XNEePc6AEaDqJWb0+B\nPg9G\r\n=YTZW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2WPdn4nPWws/zevTz7ua7PQG0ZI0MPbE0h44g6YCVKgIhAN7W2e18E9K1ujogiujgByIs56N1ffjP+Bomj/SNYaCA"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597853580-3045583d.0_1597853703936_0.4375979628064641"},"_hasShrinkwrap":false},"2.1.1-next-1597855175-a3ec42ca.0":{"name":"@xdn/core","version":"2.1.1-next-1597855175-a3ec42ca.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597855175-a3ec42ca.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0dYenooc4MglhPJl60GgRsjuCzXSKTaWNdJ2qtXUqpxAjVyg6F+NSGokmeOZAfUAv9IVHae4P4ZsDx0CH9iTlQ==","shasum":"0e8fbee685b3304c1642dbfffbd2d5534e5744be","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597855175-a3ec42ca.0.tgz","fileCount":133,"unpackedSize":592133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPVZTCRA9TVsSAnZWagAA5JMP/jDUTlbUEaM+PiqHPsoY\nD0A6fJiGHP2/KHtOiQ6ioj4B63pec13bQdUDEmJaEDRXHPA/n5zc7RgbL5gM\nhZXbGFrEV29iSS1DLqJWK128L6dfbbZ8ox0NQPY0vffeF/M9RdTR0RYY5xkL\ncGDKgslLS9q+/PS6JbP43N3P4vhh6tCO/6hC4Vjc3jGcOF4mxY78gTTrEKWs\nYMXyCSa3/XjSM54T87J6DwOWhlbRDnLJm3mwoDGIj7F9uZ11yOhJSr5lx0lR\nbT6uADsdmky5oiQEXLgkMcD7z57NxbRYGVQ4lPJUZ3FNsgXNaYDbcUTd21mP\nQ2UtmC8ZOMKJvfF7vGIxi9ijXCNaCgfyfWyV5fmZ1BMLpfPz7ZAdo04I1G68\nDPv3+rGzsNmOZmaO4oXM1xrLoZgWgJtN13gBDQfS3PohiCv4WQ6b3+daroHA\nc4FagZyRXRkTpNHcsfH3naIGzH/qVGYvueIjtY1qNfLvon7/gu0q+oE1YiHW\n7vH4gUzYovuG7UO8zGPqKz6whHewD9S03sD3iDpKFxfFaubYiBRkXfdxDrUd\naS4DoFfuQ2t/zosy9Bxsok027zxqT4lFVH7N7Zdi0aGtp+goulRbqi7prWxE\nU5cbeoby3G1N0bRZtJictrHHxhrIdKC1kq1JiKwYSAZMu9Jx0Wc5ES5vcv3B\nHbZV\r\n=0nF5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG9KEMyOmNYGhfd2oYZtC2vbmNpACMMv5dn15W63kKMfAiEAqvYfuUeQ4j5kLq5luwowtJDRvOToJMtJv7cCSCrO+Sc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597855175-a3ec42ca.0_1597855314368_0.17125681051191788"},"_hasShrinkwrap":false},"2.1.1-next-1597855677-8e6d9df4.0":{"name":"@xdn/core","version":"2.1.1-next-1597855677-8e6d9df4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597855677-8e6d9df4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-uvM7G6yj6ynHORVuBv6J0uPHfvazMCtj56DorSn4RZ6gr6Zae+vNA1063eF5m3r6yYLZ3zDYc725M81c1eKWyw==","shasum":"94a47d8dc589b07965db89a637eff8e94b03cc94","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597855677-8e6d9df4.0.tgz","fileCount":133,"unpackedSize":592133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPVhGCRA9TVsSAnZWagAAa5YP+gKun+CzkC1XiK8JPA+K\nOJEQuMdpri0HhqEFHhnrLoIBPGf3MTU3vQ7QBg0iiRxzSHeZj2kC77aYPnMj\np4DedrPCD5exX1TUEbL1zg1lBK+TWTEvEIjGX5P5uH9j4vJ+yGfy521k39Dc\nsfqrUj5cFN0N1UOoPy/R9CZf0tii6jF6bZDXIA4kB43DFn7jPjkr4Vsg/kag\nYGIAwL1MaX0Hm75eBlUCZx2mYZT2QCu381g8BRNSns5O6yQAHPGvYHKgFwe2\nNmVAG6CE1kq/t6HpngtjurWaLNdFQHTZKb0dXMvNkYMGO4SOFooOS+6qEOLn\nFE0WiLPqahUuRUhy2x+mMz4JqSzskl37in08Noena5UrNgW4VqWv2JK04HQb\nikjCMjEMa5xQ5VhJ5ToYrmxFgruzM0SbgUTrqwPOs7i15b+HXaCwAmcj6id3\nngaALub3hyW/JCktdEgVBduCuG5kSd8n/3Mx3UE8Rvn8W8tFekHi2h3fNQHu\nvT9nbfk3+DcsA8MAAaAh0yijfDXsWOZkep2e8IGSAkIqQEFr0NrMP97iJS+g\n8hzovy/3IHNhXUffBrXg/ncJYrXWBnipK9pW43NErwvaMD5REDNtJS4osRZe\nDHaG4LMOc11p223pI8/hjQz0veEv3A3kFECcxNVIvu6XBHKAQpbBBBJ3y9Pd\njvuX\r\n=RtQu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+W8FhqhsWoohTLoAUDgL0JjjWpDilu5ORvjE/0zOgkAIhAJh/d0pvpE6ellbceT1guahFs6M0LLZBAht6PqmkTCDm"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597855677-8e6d9df4.0_1597855813552_0.21643266382969095"},"_hasShrinkwrap":false},"2.1.1-next-1597859455-8e6d9df4.0":{"name":"@xdn/core","version":"2.1.1-next-1597859455-8e6d9df4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597859455-8e6d9df4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8zzsXCaQkSqAo7HQuzWL2BO3kHGZcjzStduTOrWsI2xWBNVh3QvH07T8pHrWvtmvkE0drrCm0+EzSr4tgxmjcQ==","shasum":"b4226624c2441d3360501d35f23d3b009494c982","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597859455-8e6d9df4.0.tgz","fileCount":133,"unpackedSize":592133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPWcMCRA9TVsSAnZWagAAPa0QAItAv3bA67U/5Y56gnCt\ntb7jdMRDmGzJXOxvvpKCcGP8rz/QoHVCwb4wBG8EwA4ampb8+8Uym2PxXSKi\nR8ymz3VPve/AJ/wLgchq8/P8a5Fq9T+H0zkLxYLJpKNxsX23Ig12moQs5wmW\nCJk4UMjSfNz+qxg5lvVyLkTzTT/oizMaleIgcpRntRiDbrBX/SBI61mZ9r0/\nDjY0ExCjlbopMCCcoFaLUXKHLQ6yB/PJkiS8LvTGx+jPaJxP0A9yBve5QCq0\nVVGj0wVylyOwbhojyfL91bi3Uvs7Tzqm/HwYyDLbfiSWllG5OTAGXFXpRZCA\nc1TZ15AvAswPV+FNZSTCNiSZujP8wXR6t4Wv0Cq2MERHpIkzOhJnGphIvfpY\ny/+FDbd2C5wGzu13E9Xd07tZqCJtaXEDA7IDg8FO3g0x42EDcGDnzlzAlHpj\nCwxu+wdjKIvzd26M8Y0x3Gme9VEiiqZbjgoom/EeB8mOJBWYRIETXYj6MKJg\nI9hlr6HFnoYkr1Cev2HeYyxTFqDoFiLuRW1mRI4a9CLke7KqBx/ozmpCzidM\niqFUoPkksC+Jq9rhwTzqpsmizzibp0KfegGXr89nW4rByUDS6gWUXHCqYKbl\n/RbIVH1K3rlxZ3fJ0s21VB/RVUZI5xXCtBlcVInS0VR2TSBkEGx4gEZZiRjl\nP51Q\r\n=AEBi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA8MWSY3iij5Q6LkdBMcWdr9fLcPuJO89HxcS1WApLJYAiBXeg784QIWlx151faeICWk89ZSHGzUjpyqYamkTWKUmQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597859455-8e6d9df4.0_1597859595436_0.5699403173076281"},"_hasShrinkwrap":false},"2.1.1-next-1597860467-2bc72678.0":{"name":"@xdn/core","version":"2.1.1-next-1597860467-2bc72678.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597860467-2bc72678.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-l4R5wMk7fKuIKbwjP7gqTGMzTQj7IPZqkF4FFsmFYES1IHwp7ZgUmkSZ+4MCixonbx3Z9KhhjN6cFyaJskzYqA==","shasum":"07beda5cdc88ebd75ccd3004ff2b975d614f2639","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597860467-2bc72678.0.tgz","fileCount":133,"unpackedSize":592133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPWsDCRA9TVsSAnZWagAAeAUP/0KEiRMTgYNYLZfr7bHS\nV/7mtVGMucp376kJt+vViIoBoHLLJNHz/jg8pOE2RWpPU4M++XfrniE0xI86\nKYWrDSavU6yTQb06a3I94a457/AC1UHADIlRm0pvMtBKpQAvTOiPanY1/W/a\nG/Y9qoWH4UovIO0YGQ/dBDNt4a/9YZ7TJJDFnI6QPZRlQUEUUJ2X5Q6z0duR\n+tYj0KggtNS1pKmgPokI2kAnro2iLNyqLEjl7+/zIOGjbyCUKCk7Jy3WPdXk\njFMRFuxwg6gwDgP65dIZJKAZld4wkQPIJVc7Q+DJA7RGC8vy9nCcz4uDIdSy\n68aFm4+VpY5xEtU7inBsV9uEaNzjmx5wZAG2RgkbN39JbyWQMeYqd4qvDqaa\ndMuXijln3g44oc6cV2MV2vL7a7S7JtcTMH14Q7iJ8E6pKUPoMaFWxwprL5Sh\nMuEjog6UuSUk97FRVSJjLBKbzJPNrppJfmHW+Grj+jKzRF1RajMsXs+Dh5EB\nrj1SBJziCuB0qmga+ZvC1QCQGIRLtaKe3DR+j385JA+heCbQL68DrAynBoKj\nYdcjtytFSWE6ZiFlrvSRbiNARV4ykapfBpNlDw5DEs5sGx063txo38DQowBg\nF6FYFl6Nosq46LKcWJVlGzaT6wKxd4Ua6yD88BiDDddsmEUi5yoJfP/vl9dQ\nqHgQ\r\n=N847\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBTyMzp2I6ai2v+VGchjjU34nYZZpHLRZTYqpqs8n0y/AiArEN/yErLdZxF+VJTnoCWB2tf47ks7ZSbWoI32q1gWVg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597860467-2bc72678.0_1597860610793_0.8003004855181062"},"_hasShrinkwrap":false},"2.1.1-next-1597863537-8aee349a.0":{"name":"@xdn/core","version":"2.1.1-next-1597863537-8aee349a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597863537-8aee349a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xpYMS8+LCJltvq82JBh+vIhF3M6uiLI5krEE22ljfTiz9/r9kYgo+IDldWn/De/Oyfdtfo6PHVOs6I1EQ6LDJA==","shasum":"cb5ba979ea2fb8f8982b16a241ea35e521e52fda","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597863537-8aee349a.0.tgz","fileCount":133,"unpackedSize":592133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPXbvCRA9TVsSAnZWagAAn/oP/A5qVyz5hv73ZqIRKEKy\njYIynNldmNxnBYMPp3ekYXchK5yKGbN0/rpIw90tt1tkYJJ3fWe1vQmAYaLN\nredNGy17/8/YrygnSllfIVwVTKAAc1hae8zBuA+tG/VAqfWSyrt0Fy/DQYYb\nZV3j1GlSHXseE5iGb9OPOeD5Ejoa6gOMwSHSymGDswXPV40pQ56gUVuJD6KP\nSAh1kYOErVZ05smuPdnFRNID7HvoBO1tMtwCTJ4ijgq0v4DxUNnp8ior6pGc\n4uaL2oSu+rFkroMrAk+hb+2W4OU1O4PmjpxZdIM6r8cn8v1pZoLHMUXgxcdX\nsqNfFO67qGxmOKiQU4bIaXz5ydhWIumXBRKoOIdQrg8c1z4cKRoYAWpzmfKv\nHPMjEn3ch06XiI1DWxn9jOmchCLwV/FeVbigpUmJmS/vBGcA2dOfYLebB66A\nru5PSRHcjMxgRfbpz4Lv36NUNNE/nh1jDrnuw6UYt3NeZ0Dm8xe8iHeP5uN2\nHBTgGVVrqAJ5dwlEH8wFUr69XIvjZKz+nuhUkdG0Fk7vFNH26M7DZpVZnLMR\nkMtMID6qCK0OpJDF58TvykaZ0flj2a7IYTKCmWwr4ZUMEe47P4pZLfLRV+Z4\nIgORDNdRE0Q8a13mRPhTZU14pHFXKQDdskJazeRjBBcoJ3dqwYmTruxJCX62\nDL41\r\n=JEw9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0IxoRBdPVIzjkOc97gH0VJ4J4oCxJhxa68VnFseyxFQIgEwXzF0xCNk6115FhPEwgulDjV5yxNrVrp1dIX70Vi2c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597863537-8aee349a.0_1597863663083_0.5480875445935605"},"_hasShrinkwrap":false},"2.1.1-next-1597864689-8aee349a.0":{"name":"@xdn/core","version":"2.1.1-next-1597864689-8aee349a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597864689-8aee349a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Z7ajdK7H5R2TYNrlredOkjHcsfTTXX8XvtCxsnEcZkL+UmvL/iof/UV9/gYoGvv8RTtTYcpx+WJLbdhkmqU2Iw==","shasum":"7fca8627dc09e240b51732f30b14034860ace7cb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597864689-8aee349a.0.tgz","fileCount":133,"unpackedSize":592133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPXuECRA9TVsSAnZWagAAU1QP+QBSuT6VCpuGLop9YM2t\n6RYKksLsbxZGYgtoVmGJevRgkjSxbA1NIQeDSrth6PC1jAgWiw4H7MOHSr2W\nB+aTeVW3IR/vTJcp0qmyA4vdL6oP+XtVhSLQXZZaVNzRO72JimHqi2DQRCN8\nDKwgkRFHeRO5GjxzdlTL75RF+5a/7Nhlo9cQyoKJZzobalwAY3cb5al6MK3x\nQy0F1nyJg2RA8JKAxUE9NF2zhUCp/47+vzrv5cpSPK10ZTf2N3uYPmzzBCdT\n6MCD+56l5f9a1m6ldp3DKqJuXhYNNjI7ugefY5eu473GOZ3ZBopcCJU9DfHS\no2JKsyj0M5bxNZFyWsE6An5x4ECCpJ97q25Zg05d3ZvYr2ujDrdOaGZvIlIO\nf7v4VbjVUuYl/HdD+CCxMz9Nwf64UEjlBaXI4JUB1YearWZ6jqCVdR1oiQDE\njj34D2IchQH7sAh266vsWnLif28ZBGhk6nI8VHRg4ZCrOCTJjZBxEzAla/HU\nwlyUXovpGwmvaATpAnzX665uHU1evclR2nddGqVfpH95idsIUnRMEOondQpB\nnaQEdS73gJLYaXxmDChuERLi+5h5N3kUEd1z+DOTwBJStRg6rNFYLhNA9DTr\nXEqxURXhuuJLQZbIrqQUgA23r67V56UdlVMbQau++GoITKwBecx19FB3kpOY\nBLM3\r\n=X/XM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHg/FD/WdzaESNTOzrGBHxl8rf6pt8Kp0agnB6Jc6wPQIgV4jfe7SfAbtesm3FAgzu7XdpqLN+bxtPL1eRe6LYOAM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597864689-8aee349a.0_1597864836193_0.9563374961183706"},"_hasShrinkwrap":false},"2.1.1-next-1597869772-04a5120e.0":{"name":"@xdn/core","version":"2.1.1-next-1597869772-04a5120e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597869772-04a5120e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/ifajhzDT/XgTvHIUgqpmTNuwns6Q4OtGzI7X4k5Zh0gDA2TmPCol2Tr0Ac8zA/kHmW5V4WUERVXyb7MzteOwQ==","shasum":"5d729b0d668489d2b3e0a8f12e98c543126729ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597869772-04a5120e.0.tgz","fileCount":135,"unpackedSize":594620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPY9BCRA9TVsSAnZWagAAxs8P/3QXMjmca3zWK//F6+Z/\n8yq/TqwyyN/x+c1tj9NuqVk2GkFKqnxZCbYfjBz52Bb/6Hn9tuz3ltddroQ9\nTEB4Q3kb49cnwf4g3lGwRiHOJSlIP2ehcM5Yk2SH96ytuVPJh6YbCsQZ+fHp\nFG3bMc6KbBtCm+MMUg4ytiY4nTYB2mU+ChSfD77slf6g0t0CTIFyR3YiqxUK\n6bhhGyjQuyw8A+0EpuMvz+/soymXCccCsAHwIo5GMZIKlPgIw8O3rvzf5g0k\nhwM1hiC/F7uye/UBgr7EpK9q0QLl+SDqi/vwuu3uq3UHkstB0CCKvGQGN4qq\nON4+ortr6VMPSbi1M+qKPDEBk7a1cvLb/O2k9YjBSf/TcuBf4g3JYNQX6mWb\nQjJL22cSckvhcphtgAI2u+2eSkt7cH54z+xmEFxAGcMBG1/SzFCUQiVxNuVg\nQ/q1DBcygEPciH7pCo49z/ViI7MK9G6a9Q+Tc0rBnPD23VlvppHdXFIUCWAu\nOXGykoIzYT7bktwv8UOCcn4kzgBgicipHLynYhYUi3jI6Otv3W6HIauTNeqU\n5xxviejXEn6vskS0PGTmH0c+wSbUxJ+tT/Ueoon58IKLrsFyq0g0s7kN1lHy\nyJFPmPSBz3NfE+G/grvyPgElAavLFPLmBvk8W3CBO5GY5UGFPwIHyJPvC9KP\nBDX7\r\n=L/AO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiToTK6ktPD6NHKwNu2fO91V0dhTm0mP4zLdl4JHxOWAIgZ1T3c2DMtARuyB/7GKaiBV+D4EufKi0P7FME7vnzmXk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597869772-04a5120e.0_1597869888465_0.06903263718547037"},"_hasShrinkwrap":false},"2.1.1-next-1597870219-06c97be2.0":{"name":"@xdn/core","version":"2.1.1-next-1597870219-06c97be2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597870219-06c97be2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-z+tQc9Wp+hTRUihftarVV4/EJEUrbxEc5UbB/NzaeGGiPIrSCTBjR23Nlg8/rUie77hxOKB3t4maA00c+xbqBg==","shasum":"7555a73a14696b21e4191d4caf65684a385ca21f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597870219-06c97be2.0.tgz","fileCount":135,"unpackedSize":596580,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPZEVCRA9TVsSAnZWagAA7H0P/jVgFia//KmQaDVlXWZr\nXieY10hs47nKQqVZvgKST29e6vJvPqc0uC3VACpuZTB8Bc5X/HeQ87QUfJha\nqR7HXo3LNuoe/GZvAtuxEyPZRieE32fTMSAMnnLU9e+d0x5Remsn2f25ray3\nl6wKLYCNeXXcLseaG8WLK3QchNN+vQj80WrWLYc5IIeqk6HKvITl2YdGgn6I\nRaGW9GCF98rdXWILtXi22uRCTp54rILjikaHXmeFB2Cx+mMbBm+JAY/L+sHk\nkkhCrzt7Kh1WrMHq0gfaN2eSbZWNfsDIeGLHKay241qoRgCkS7dcwLs+ajrR\noY+6wCtE4zUSQp+gyVfGyUf8BsJI3GqrEtKgRnJhwoplx/d5yU83bh30PtZf\n9jtE9YHVqQYk2mnjhQyRJqyzyG+0qYWrKrqeruWVzZfuTt2DDUwS86beMWjH\ntPtDO3uGEB/8qwMRNEramg/e4S069hYdEGlpuoA6sMkWeEJVtgDhdWFaSjrS\nH4+oFPfUtq4M/lkHq4pr++h9p8GQBp9uwwZVyszOXNqFomDbTL550nd1D3YD\ny4mbGeCoosdqlscQRRR+Q2o3fYb+stZElrH1g+0om7FSqFNlMO2Lb2YrIoQD\nYUZPUXNKg9S/ZMyoAgnzEhafZ8uOKJAfcrk7AdajKf4VlDPSSSVscPBADEyj\nTO7a\r\n=DQrz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIClGtTFxVkZ6399e3CHChTPmcMG4+URwUIBMRaJ77ik0AiEA311MhmngLK+fYnMEx9FWRsGiS+6UceZPmp9bqh1kTwQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597870219-06c97be2.0_1597870356586_0.07940669901031971"},"_hasShrinkwrap":false},"2.1.1-next-1597871105-88c801cc.0":{"name":"@xdn/core","version":"2.1.1-next-1597871105-88c801cc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597871105-88c801cc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-kfoHqPx/nnBCkqt8mD+81UR1pj+tJaaVQAFPW7/4gvlXXWgZVzYG2GPGMT0N5vh7cKLEI8Rln8BSxQSus+RwLQ==","shasum":"218e311099973d09415a77e650b0c8c025e36e03","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597871105-88c801cc.0.tgz","fileCount":135,"unpackedSize":596691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPZSMCRA9TVsSAnZWagAAanoQAKNkyULlhVJUYAMkX48P\n4ACmZMclr8zkThexeioCs8YYkyrMgWfEm/j92iyMPft9p9ann4c7We2Uzr4e\nBPK6e+72mdWBcpz27YfQiYmPrOVVxAGH04x1p7lusBJm+1qyLOIB8HgH02Mr\niSgpgXL6NDyWDp0IIBh2rWv6fxJUAlWVzrUcSTqJGwcYBTAxt80nyBEl9HL/\nVkJ4HbFFj1ZxQRGYIpss1p05gKtpRC9tUofdhMKuqEH5tYxorrMYRx6755S8\nbCJ/xdxfXJavG53gcYdSOMBy4qK6yPYvsyZVjOJm7VKwONO4eBIGPwE/o/IO\ndgwJBxm1wIlRExYggnCYCboCG2vAfhmkw4N4o+qZGzvFVi7cdDgjb9GumTPT\nb7gfHMwfg5Yohv9dA+wXk5HzIvSHtCtzTizXhrkCHbqVYqsgk8OLN+u5VIU9\nf1BwxSfHfx4RUhDQ6iC4M/jkMIHYTHcUkUGFMNWYVDUFONJHmH7IE2XknAiM\nqz4Zx7q1nw8UYguDTUCKhGSzwOTHNMBiJoGFDfNx6+1KGyBa+J91mfalUREs\nD5W+ojuM1G4kSmkT7UBAPcPJ6MpnSpKtqrzmtQIhXa/GZE6QCZNbeM/Fdlyo\nsPl6nIVmKffF12t05xFJSOE7EBLjIWHNslxQO002YLVe4ZaTNNZkVrQ6iTbm\nMXM9\r\n=Upcx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoVuFqwX1uIJO4brdhebEUGRry4BMwGPkbD0Jrx/yirAIhAPVL5EUt/hP6tJmEX+TpGrCvQX6M508L+G+BB+/E2Mky"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597871105-88c801cc.0_1597871244056_0.8495668932275682"},"_hasShrinkwrap":false},"2.1.1-next-1597871191-672b03ed.0":{"name":"@xdn/core","version":"2.1.1-next-1597871191-672b03ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597871191-672b03ed.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zaxA5K0CDZtakh64HwCv92pigW3i1P2M4qORDVtSLbCJKinALCGf1rj6052p6xnk1PCNw9LMIPKcO/VnCSuC3w==","shasum":"9592805873bd044864337bb19e7191027c835798","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597871191-672b03ed.0.tgz","fileCount":135,"unpackedSize":596779,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPZTeCRA9TVsSAnZWagAAxC4QAIijMBDuV+yt36GN5b+V\n6pBDFWK/SXcNuFOUU2hyU7Qh8VLUzPGh4hSGmCk/UplDa/kOyq+tQaJiGq+z\n6B2ro9vwPm7kjd7LICOOPdgZNuKajBt+pPDSgz9vj6ndl8WGC4N7j45eFMAj\nTN5aNSz1SbMpLcPRTzEUozp5+8bjyMlDXbpkrMS2VkzbQujA+DH+zHZHtEC6\nBNQio75P2Ljg1Kn+JJl6OEGgwVLCxLVFJQHu9zTqOwg7Jq7C/FwGLHmp49gh\nEn/NaQaCqh4U4hGYP3nQ6FGvySh18OjDrh80xcbrmWdJL8yH1i9Mn/tvpK1i\nOzBwP56tpis7yCvM7X1+mxV4l/XG3NudTkZz1OUbL5Fa6YUgejS3YQXjqCVt\nle0r/Av/lJq4OVStgQ9mGjg0CqD3HQjNgfbqAIeBpgCJjYxVtVsY6v/IPyE6\nX0/Ny/Js2DlleWGYmyTt9ZZ9QbJc8wfCJAPz1YrQ7FglbuFnQU3Oy7zJSGbR\nrIZVXPq1itzXqXGo91nCLyVEZ93bYbuIe+agL7BsTHCOwFU88DW6gNeIlq+z\nojTCaz+VUVotq195p/yQkXFBRtRhXhDzI1saVFAHWFOk6/fKUB88xym/vZT4\n5mW6GItDGV4/ZNbkqs2aMQX1+ota7q0Cxj3C/qxZDDKdoXX5yJGIyv1Alrvj\naDoD\r\n=1U5p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGA0oLNaZnRHfHo5hYoiVg5g0Zc9xdbpXBwOi20NtUkeAiEAiNa/48yf+3g5FmBPvAEwCrWshfq3Ipn9e9i0HqOzMYI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597871191-672b03ed.0_1597871325861_0.6595592456597483"},"_hasShrinkwrap":false},"2.1.1-next-1597875608-4f4335aa.0":{"name":"@xdn/core","version":"2.1.1-next-1597875608-4f4335aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597875608-4f4335aa.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nL+isbGG0AHzRf+4y9drckt12h+jcugEvJW4GxEER8y+g2GPGzssKcn41Z8Q6VsVq+puEidqf0bbvrIPWfNcFg==","shasum":"165b1be78ed9f732c61a77ea0ed9ca9b06ef0647","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597875608-4f4335aa.0.tgz","fileCount":135,"unpackedSize":596775,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPaYhCRA9TVsSAnZWagAAl9QP/04dFyPteuTjtI+hsAhS\nD1NHlXvSeCBUR5Q18IoLNF/FlrJT+tGLOFmkgRtlJc7cUakP+ALlzJmBarKy\nrq1Ere1VqPFcMPyUZnlIkLqaqDhtX+OEYP16UFRix53ViYa4P7fXb00bqf0Q\nhRNlQdwk9imVAsOieiGKBgqMyoNgATsoI6v5BiLZ5YIJyEBosJMzzDAw//jZ\nfbgr2EUfRLpkDAllIM50y7o5IrlCVnGWKSqiH6PiSknANHmizLqtIzYRVqma\nILjVnjffzYTDNVvkqoxsw38jMbNdWQt9l94/G8tt6XZIbiKLjQEixkklYHAm\nbO8kdOhEY+wTD5qeFGLaIVHePaNMawKvgraW5ZhJwhcPBGSDFuSInN8GhIqV\ntqczh53VvAeMy61cZe910yx9I3NmsBGiT3sE5oYrw5TF8sr4QxKs14OjwgFI\nkhMRAaO/sObkF/8mb2GEuZ1UJG0WKcP390Z4JcpNmB77TFj4NkXecO87FRJ6\nmTlm1i+aLzR82n4NWCzQ3K3K/4ZXMB8ndgzgN9T77DCFc2g8TmPmCoJjaxQW\nFhHFwsuzDJ981b0s/R0bTKdMKQu4bHQyNjLQr9dliWBBnRmm4IE/pKuiKxfq\nBc3KzIVYz583VHRGKMrv0A3DHXEN23URIviwrTXPty70LUSuV+OIXvHR6Lao\nd61v\r\n=H2A5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCB8dMg/kg4ZXSbfquobUaW88rcb6X4UKi/UT6r/0k1+gIgS3umJegTD+UYcby94CoHa26iD0mJ2ix4f8VdGrwNJxY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597875608-4f4335aa.0_1597875744802_0.707518363517186"},"_hasShrinkwrap":false},"2.1.1-next-1597875693-29faf328.0":{"name":"@xdn/core","version":"2.1.1-next-1597875693-29faf328.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597875693-29faf328.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9vvUFn4LkztJ0RqMoui0V+yhHs+XxUBQCQAxyM0ZCvxlPmzDt06bqWWL/d3eZ/poJAg+OCdXPy99DIeZMznV5Q==","shasum":"4562d0c8e74f7f360e7f38bf81eff78d87112ccb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597875693-29faf328.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPaZvCRA9TVsSAnZWagAAW9gP/jfvYGcYqpyVAL+cdU6G\nP/xEmHz2g02Hk/xJg1c4kOjmmJer5MNzCReRlpq5IlbGU7H1h/PWGjBUQWwC\nROdm/hhgImE7trZyPHSQbU7+VGeTU4sry73sN30mEoHPLzCpdwiEL8hmmI8A\n5faOZxBZs/q8kwLhioOFYAyOl/cIjY34pl41R2sa651y5AbgpjJ8moK8Iz/e\nldXeiwKl3VVy6ODQFuZ9RGK1VlNk7/eX1w1AlNfQAzYfrEsasaanBRfuZnPI\n93UBGKkpzI6hN+q4saxPZL6ysM138lzFK00KXBfykWEMtLsPSiOBwQcmZm1U\nNsy6BB7wlCnJhbSwpN7uAPU4+T1FWcvft/iGkiOY7dRX7n9FEPG026VAvOGd\nLj5rDkb5iZMluEw8CgA49V4nm6LpCRfNlEuB7r46HWN1050AaLv8BHLsoXzb\n0s2EXjmkh/RI12zbYFvrJdVlWOVKmi1bRW/2Bs78lMpbNX2xDRTuY3R3NrUA\nzLkHYjRqbSQf45NQ94C4dOE8Cor2MkJ3OIy/aTS4IAM+eqBVgIeWliR7IqyW\nd2eTdD4KB2RhpFv5VMsnv/D00pbdOeyo1oFUhzERkRR2FGTDhKvxWp3aPG5M\n0kpvlfaPHIXyZ69tr1NLuk5Zgk6tbBH8pngPKpgqWG81VcbBFA8d8zm67kXS\n/9mI\r\n=gem7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGNolbKsYAENqAfy1oSCdmiMoHQMlOlDvcI3gVK/XtLAIhAMC2q/BjOnXk52dxoHK1MMR4jRra9INRaN6pb7JrT/OS"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597875693-29faf328.0_1597875822648_0.8397738557509791"},"_hasShrinkwrap":false},"2.1.1-next-1597878575-8f338472.0":{"name":"@xdn/core","version":"2.1.1-next-1597878575-8f338472.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597878575-8f338472.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hgK101C+pe1yDz62xvlvmYNG+QNk+iVdXc92dJewnvSlfyoPFYB6noiuFnOjqzjl2Sjv1Rxdyq57PZdmeDXUyA==","shasum":"8c89179812c0e1d6ed615f83f36656dc65ef9777","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597878575-8f338472.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPbG8CRA9TVsSAnZWagAABDkQAKA8XUAlzG+R+wYo1hGO\ndEul1YKNx/Cb3ckFe4x15DE/hdJXmvqG/w455HGHt6iOmEW003NlxcUBVBLn\nD3bVInm0o4RSV8dR95WauT2aEh9o5tDMY8zUOVHQ2iroUPtkzPbKlOMM5agf\niRVYYRjFla/VG96E3142GXo8unai7FHlY4a2qmHkgcDnRoYY1E2lMldB5b5Q\nzoakVh1Ykv1eTk8HYT+M25utNcV1gVBvitqWPeglwWWx6JHavtPijttck/s3\nfaFDraLhDaWGkBMYNormOOD9zyOUBcBNHIlV7JQwkMyfIVA84URkLtcnK0F7\n9WwlcbmqqqV2V0oRrJ7HKVy9guP02w2n6OwbKqddamPW2EIh3NglW1kHVKuW\nurCq+YKHKU4fJagSCVZnI3tdj8vFXcYvUM7zoYFOL/C5AQr36MMeyAfeutvj\n6N+sRpwnxEUeV6hT/2dQ5qxByRH4l7W+dBff9dsaznAf6TS+whco0YF8SOBS\nzyeDIDGzkkFvK2bLV0r/H2BtzCk23nDmPlWYGlX6xY6nS+EE8TOlCmpBILhD\nEk/Ye3AAFQslrC6CcIN+ra4NgVFdy2nX5egDVNHE+OteTxWS/GBwVmU8Ff8M\npms7z11SHVfrF8qiZsE5SYeSXmLV71zlo/oWZnQ1P0PT9XTALYYyGdolmwWX\n/OCv\r\n=QiU7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfgR3JatOZUdArRAyfewmg710SlZoN6StOMjHWyiCzhAIhANNdLSCOgnngC65agBq9mCsFTV2h6F1mOCfrxBDak1su"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597878575-8f338472.0_1597878715970_0.1296458147570021"},"_hasShrinkwrap":false},"2.1.1-next-1597881583-831266a1.0":{"name":"@xdn/core","version":"2.1.1-next-1597881583-831266a1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.1.1-next-1597881583-831266a1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-if7QgxZcrI7z2OiBKv8AIrlpy8ByXJBrdrI78Rb97NuPUSnfxAigGhm04wyFD95/6baMABeKguVPzOKoFyvY1A==","shasum":"58f96f5ee968acc553607a5658774ce5e782669d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.1.1-next-1597881583-831266a1.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPb2OCRA9TVsSAnZWagAAa4AP/i/Gbn5ClqlmtJyoZxrl\nrQqzXEVE4yJ1JYdDUVqK1u0wBXbm2YgAsXoAaj9ylyeRlOokMsdlk86oWtDS\n3xS9YG4mPiAmER0vyMPZmUeQIRxZc4flnXj6l5GWTR/j452dFb7pFTof57qn\nE5pzqfmzAP6fZhxyEVM292I7w/WRVu0Y2xWE10e3fRxGPXXH8IfRL0IBY/W0\nO8jx6tQBQ3dX0oB1g9TmfYYKX1yB/60g4BtrufaVRksCn0/swWLKO6A6hYK+\ntbYnZMXj+dpHcOBzp+rjt9RQ4lHe1JXbdAw5/J1TLZBVUABcg8rXH4H9Rpo5\n+Z9gIOvshUwiDBGppoFfO1PJ32NqS0nb2OVYN+UHcPxnyAXiCymrs5BRNmHi\n2TgbrCNyFWxldjTpYUEVIE0Oar+rZWW9tNFvII8NEpOu0VvYtcR5ciOHZvtd\nJbj2xOD4DO0LvKep+GVYgqK27d6kfrGTImNLzhIuejELd0d5SZc6eQOT8FBf\n6YOzdOewiprt0W9gg58L+0nt6mbRg5wbqG2uzCzseuvzZhPDjLQb4Ac2S5lw\nqD7eVhg6NzjRVAUNHv/D4Zw4pU/5+AKpx45N2dSbPEUCfUjmyssou5KvSVq+\nPLlgEw0MHsOyPSmi4MUV6FY+b5bOouIduffNx3+HBYXFBmhRzzdq5bHGIJ0C\nIrM3\r\n=PAaz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGG8wb75zFMbURtNHeWWtUbBMfzwHvc/2ZrhCUVyDGiNAiBvQ3ViuEVQUiaStRyQeVcYD5j5lqwyIU+YxTysln0VTw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.1.1-next-1597881583-831266a1.0_1597881741995_0.31503016348210866"},"_hasShrinkwrap":false},"2.2.1-next-1597889287-a9772ec8.0":{"name":"@xdn/core","version":"2.2.1-next-1597889287-a9772ec8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597889287-a9772ec8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-U3HYehfBt+85a929WfOT9fV+kQ6zO9Tlw3mrWoZyywuqYUwiMsvQAKfvfC0E0YGiFZ2prFlFp+izrWapHfT7cw==","shasum":"ecb47dee836c6190a606f09c5a9b7f8044a7204e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597889287-a9772ec8.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPdurCRA9TVsSAnZWagAAd8cP/ikF7M3kz0hOADAORRBX\ndUC8Ip3wfYOJ8krcDOC2S8aXqUXWKN3yo7ZSmKxbY0K4vgezLEzQyvk9miZK\n0BTBSeBqmVvRxtLIkg04Pw0ogIob2UIe4KYv+ZD0452BAFhUvk2XY4E1A2D/\nIMMU04wPTA7d7dHSWm3HoIK3pQjR4a0NzNnOtQPSGfiOQqTy0XlUEg23dNTj\n+k3DSwwpOfZgD391dRopJVqhGCD1GJccmHeI/XW9BCYBZcrgLrbJk5fRJFoT\nyPAA8mb1lsPGq91FTuEaZmru/+olixE2J4xjf1mz0YUqk7FD+vQ7cG+Axwso\nZfv2b0P0NVispjGStaLd3Tln7ueSresDrx5U+U6hIm9WpaqBfxQXv8sLgwoM\njAWJQBKiyh5sCpKCq02uFwlYbKAaVu0cjKnNc1CS0F35zdCF0UTIUGnVBEWL\nIJ8rPT0AYxjkYMGfKC0zePJ32Vc+DqC8Cx23MTGBmo76GrCLU5ysf4cgR9Kx\nRHyjORh4o7Wvg+ruEHcRulyNe/0QNiZKwScWbOLDQI9GhqN2l9ULB1Kig9cD\nfppKl5JqgLbg5nV3ZL087LaRI1koM0g1PHGAVymypXkkYQYdR8M2A+F6MRjv\n+5r4dGcOZkYMiD1GXM7Ds8oFlcd8iWUcTz9JldYdrRWM2YnHyK9NIj6P+ss/\nBgSn\r\n=NoUj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICFSahmG5SI9gqLg9lWxGfrPMnbq5sLsDldyOQSZIiMSAiAim47Vewl7TDj0IF0KcSEikEihXGb1v5EtGCqX1TMG6w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597889287-a9772ec8.0_1597889450556_0.5924514005724604"},"_hasShrinkwrap":false},"2.2.0":{"name":"@xdn/core","version":"2.2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-GWQaYaXbdqtjFRI7K0MHCXDVMaGhl76/P6LGJeKwgYUdwO2mlym2w8WnQsXdRCMKz1eqdwzxgb+2j/upnqR7BQ==","shasum":"9a2675653f99f6bd7766632d45d5f9117afbea80","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.0.tgz","fileCount":135,"unpackedSize":596727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPeFSCRA9TVsSAnZWagAAfnwQAJGPMDYzHLxP11pYZs5W\n2T7EyIH6iv6aAr77PyvC8jX3D5d0jEndcflp41+mnPqyD8r/+DVjAWw4QxN9\niPas364bxJoOyNGiLsKaMWCmds3gYK2P0tHKgrP6nNa5tu7xjHFIqLmslSq0\nYnkf72zjboysScdhzaTK05Cu7Flw/1g6CaC6ScHfIqYJ7VFCsdU3NjV3BfWJ\nJ0mhn9X4cakdYxO5WUlIKkkrd/wrAS6N5/ZqtowgA2XlLiL5TFDkEOZTqsrG\nGEz8Gql2S2OlVkDBSbed9fRL+Oy0O/S0fDsAbr9ywSkYK41DCzZCvwiQm9iX\nt6rifOWM4TyLkG9Q2p215vixKM/rtC7WYG7KHg4JwX1ac6hP7d/rYy8tWQ+2\nBgtU0ey9X3zcoEP1qF3NaMOpuB1PvcDRIur292O8wtEkKHppTj2TsQPTuRan\nmWwuCBqRxhIAQwn58BZJrxguNiG+5Ke24snBk8iJVpQfy47HQThCHTArU1+t\njYrKaoKg6XUAXtOjT39T+iQQqFuFXQRNI3y0gPSLBn0v+oWnvjwBnLfhEazh\n9Gqx0lwquHxRPSuMmACt/Gn0+08CMMkrOBwdMjdWEVjuiWWT8z/JMApoDjmx\nTga19flu81uSzNYCbNCCpJt48rhBhHUDJhrmR2nsZNSsDj8S2/ri+lZJWqSw\n1rq5\r\n=XzQT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvX4fhNAKH+dqQ4go9MZ2ejvxQSpJcZlNXEucU0FQ/TwIgGR5VAIT62xnMWVUnRa5P6XSRvmz6ioQAxfJKC4V9eqY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.0_1597890897628_0.17284844346575556"},"_hasShrinkwrap":false},"2.2.1-next-1597929665-aeaa2cb1.0":{"name":"@xdn/core","version":"2.2.1-next-1597929665-aeaa2cb1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597929665-aeaa2cb1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-OHbFCT+cNO4BAzsWeJt4GebqqnGgCB/6KPuMTrCm35acsmQTrlltXUYErEHIS1EyyNz2Jh/M4AUk4dBI2l9D5A==","shasum":"7b7a1a8c183530aaee1fdf02958de6b83ee42709","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597929665-aeaa2cb1.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPnljCRA9TVsSAnZWagAAwBkP/iGskgm141i4M+l7GuYU\nl9lmAlEzHuSoh5iW7bVCybjqE9xx+uXoXjFq0FovVKjGUSkOdL8IX5RBIlGR\nhRFTYK+bdyQNmXcRtXljYWYx47Ff3A1U3UoKJGbIQu51VkbNJ+jOY7o66UpK\nVG01LdZ+EmAJbFgoPDggyUKURK/Rs9rr9u2khanb828a3SAW+m8EjmsDzDvE\n5shh8BcbsqYrUD9Q4DmHaEbTvoZsJJsJohpCMzU6WkGzI1Np37svLhbvfyiT\n4xNndM/lDsWXhqvEiNlwdXeR8gBrmeH9eFL/FsoiDTE5nJmmksrYBEtWhnqu\nltVi2pJjyafwMADzIMmlDq4PJi9sm2VuVH7DJ376k0aSZVSkoA95zXJfCa4u\nVK+tPBd2Hlo/brxXXVLamc3cGLoEBBtjRggewMSJfgB7cMHX6+mBDCNgHT1T\nMbYXK2h7Xlv65Or+3kvu4fCI1AUlcET7RT8IvfRc0L7gAd/c5PFt8Am1U1fY\nOLGVgv0zdDtAbpArZvbKMrDvl/HOH2SZBzces2sWnAwyX6VcKFRCiplawn8A\nS1pApoGWcOLUOdxP8QqEr/XyPme6k8xVfyB4pVvy0D1YbqdC13BIJQU/fyoQ\nADYqRzj5JZYAVWGKTzqnQIRxcbQHb2E3DV9IH+xzufBw1Ng+Z1ncdNmUdFqs\n6v06\r\n=L3Na\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDbjxhcOoFMaYJMertOH84BLXiBs3oe5u8tDZlEin4mAAiEAmlR9Zzit1K5YIQbVAdYBl9x/EqgwrKSkwNixOrvcXqo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597929665-aeaa2cb1.0_1597929826799_0.3935730077319759"},"_hasShrinkwrap":false},"2.2.1-next-1597931828-a06bc161.0":{"name":"@xdn/core","version":"2.2.1-next-1597931828-a06bc161.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597931828-a06bc161.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-UnbxPjWpfviwu5rMJX3NiDHYMa24TD+0tujPd52k4oUFkVNMZGdgA0aLR0DMCCQV2YLUsSNp6P0T89HFrJtNqw==","shasum":"d61a617912ae50826d9798852b34d9536b1b4338","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597931828-a06bc161.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPoHPCRA9TVsSAnZWagAAxh0P/02JG7rq3NZdbIkEaYQS\nDQQWvZmb95LV5grmiuGPtkb20D8ZHcvZLDCFw+q+VdlgWbDe6ZikOs1JEkJw\nx2SCuaPagqrikEP0kJjQUjOax5DIT1jODNQCdJ4iL7xMvEc40z7vtrzjPAvF\nBYxWOKeOaAYcFyACK4d9UZNquTWAilfTJiiLdaQ4BORktL/6JV7DxayEDWT2\nTpLi9IyRWFFOBj84MbKmE0gtinub4O4KsGw5opd5OHf2MA12mG5TP5wnjHUg\nRXqD7eoWIScDh7mtKiWG2jCVO9tz8SDnQXIQ2UuBGD7/wzpnyy5ZLKz8t+Iv\nUUImvKtZDy33woHjym6k/nQWFV53oUaU4gtmdG9LB69snZAttB++aY0IMl3e\nf/b2XMH4VY6WeCrQ1mCIX32vVyqaGpJILqs1x3zcwCp/YDkxqc1osy05HAAZ\nbLVt1Nz2oK3gn9sWqyzSziMmCI2xAnASf4ZoZnzSqMrCq/1uwgQrIr07h6eD\nRDE0+LEB0Gq9x92pECCbzDWSeOxT6AIe0cEFdwQf9FoNsHEeMDkkhrSQ2qPP\n6kJrRw1QiUsask+3rhjMDb4IEhCAz2yNuH162qvoTut2gIT8fuzu6bNSVqZS\ni3rsKh81nupuJ+9TlIXyUeGnWfn1/T61PKZLDy4pWV6bEVRHGsZOmiPJZq1h\ntfyq\r\n=aXzb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICc1yECKpsbY4oykKVtbQc4AKlrbaWAw5MCT2bGEU36oAiEAqNn1HbASTQ6cdJRVkbq9Foaf6a2ZKYVH1Zxcnru2Jxs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597931828-a06bc161.0_1597931982586_0.5944575296338286"},"_hasShrinkwrap":false},"2.2.1-next-1597932138-30cff415.0":{"name":"@xdn/core","version":"2.2.1-next-1597932138-30cff415.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597932138-30cff415.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Z4Ja7E+Sr9xbMpydjyfRr1OwnueRlEB+ClUoVBlufQhvKRivUbI13EZSExJM9jIoDJFrNKNztQs0x9PADg6xpg==","shasum":"0c341c6807733d5b5d220fd81d5b3e2f44cdb8da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597932138-30cff415.0.tgz","fileCount":135,"unpackedSize":562073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPoLsCRA9TVsSAnZWagAA6CYP/12zn80rfH0ukTGPoQWT\nnGRIaMdvDm5Tm7rvZ5IR10pm3v6oMuyC3jJDoWdvBfzIypaTiqGldZc8Lb1R\n6ZBwNNtlHy5MwTVhutFYQanP0Yph8Vp3rzdOGLPpPkAZGBL4RZ2b5XBQyqk/\ncr6tnHFEkYiscJheMVsZXleaVxWIcbO4D4axhZk5KdXblcMQl3OJTrWoHMuz\nIgBBEXu+9aAMp/1O6ox20l0/pmRua6CfxAq4E8o71AsUqUVT+WspNTBzpENp\neWXFcwpFW0Wt6kcBaJhQcLGZRuRAFUo/kWS1lLN5XTlVnvakkNHRG/Jx6QHc\nhECM+id9OGYfZsckJHyu5GggyWOm0nLgrhHPWYQZDPdb9TS69PpXcKh/4N5k\n+wRQAXVtXnntnai0gy9fNuEQUR1HcN2CDyj15pDYMTsENTNFHsGNvM+ylN2j\n+thzeHnWOJbtDfLW2/9Lh9D+kG5iDn/drdLjFiI6uUeCE6tDkotIBdp1438B\nfNtMuCDaMyltuvED25UIjbu6uhMKM436jbHpIrvUOGHa5ITw2+N6H4Ww4xD8\nnsZtFOU95x2PPGDd3SPekEQnomTdhkFADwSR1cgnVFqQM6gfBZ2/hxsvyZj5\nV39tHsiXLKRG68SnROX6YzM6ztd9Y8+p2KIc1N2aaOhqWc598wtTsSLVPbpH\nLWQQ\r\n=SNhU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBgX8iJj0X5WENduJGT8yHnq2rF3ww+FJSf33LyCEMMwIhAILi3jJPYRpODlZUt6B68CVM2Q3tDXl3Y3x7ghCR200P"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597932138-30cff415.0_1597932268164_0.4280381216537539"},"_hasShrinkwrap":false},"2.2.1-next-1597933592-30cff415.0":{"name":"@xdn/core","version":"2.2.1-next-1597933592-30cff415.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597933592-30cff415.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pvlo66AHt0DddQSfdRfvbRN+rWWhRItNqFqqkn6GZVo9zWt+/+Kbti5Un03odVHNK2TNiJAFwww5UBDa0wHwjA==","shasum":"40d925df1070dbd1fc1376a5796d14dfe0a2ecb5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597933592-30cff415.0.tgz","fileCount":135,"unpackedSize":562073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPoiYCRA9TVsSAnZWagAA3qwP/A8W4K8H/Mlfv7DQfhtq\n/0y1QIr9wxP3lBUBnjSe4CROAU68sAaMtj3gLmPZfsAKBdk93XIobQv8mZux\nnUj6vp4kq1P53YigaXSXbUCLGDXN0x5Ll7yOSQnXIa+VCZOS+LheWY3WXQIb\nz9yRk9dhJUjcrQh+4nVZjtEyxe7jo3u69t9EIXw2UhmElhtfuo9rc2ADzzjE\nQjKzaLEM0iH5sy8tlSMswhH0YeLGQzcPcMsxqqJdeMEM3MxgbSYBGoyhkX1a\nOMk1zJv3ccn3CNliRPj7ny7IUOAHvR25uMV84ySCc+er3TRkTdp/4yqc0+4v\nK9I6bQIPLn1RWh0DJN98mXluG4OHekAOXZeEsVaONHvtD9YcFAdLtA5cLAQ8\n34dEXQnRFqK20LYPDnZdPq3xfLNNQV1AfxtHZMbG1VOMuz4N1S6CCE/U3W+m\n3oTe8fLIJKI9WRvZN5TCiO2kAjK76TO1O1BbHtZ+fB3w4cufnov3enJ/LcwM\nCMRGgsKVLXsJVeKJE+v/iUWD/Rpa2sD4RUKfm97clXD6bvrU4/6bKVnv+qyv\n81UyUvaiWoKIXrCmRKSvoMiDDC01hHaW852fzpUY38ShwJULsx5OwyGQL8wG\nwHpYrKybwU+CoNkzdurZlNAE4iCWcY541p1OvngwXhrYJ7VBg0nID12589bB\nIsKt\r\n=V27x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAZnw+V91vb3xzPNqizos1Z2vwfiQ5N/HTGND5grz8YnAiARkaAtqjftTcGGB4FOHo4baJSFIgi9RAM8so5kNOs4jQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597933592-30cff415.0_1597933720236_0.9167331533427712"},"_hasShrinkwrap":false},"2.2.1-next-1597934334-a06bc161.0":{"name":"@xdn/core","version":"2.2.1-next-1597934334-a06bc161.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597934334-a06bc161.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-T/yY6C/XUurNfgNbs0CGIsA2jUSQKT6rUyY7nd4U5sZs8E5n+Pqq3WAuUd/F/4inX5ZMTw7dUwrUvOiuT0H4zw==","shasum":"fdcf98b8da08acaa9a620967020eda906adc1a54","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597934334-a06bc161.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPouMCRA9TVsSAnZWagAAX0QP/3bYocSjL2VfkU/hrBPB\nqldlQZwkX2qIH6Lo8NXDzOF35SJrcAvzUkQcq477GmLevf084EtGTpGmIEkP\n9x4ff9H1Wf40M3R8mK7qkHx49OwiWCUUuz9MCVZ47ezHq1/KWOLmAoOukxmT\n9/0J4YxOSWjZpVrOGNaQ0o0GYeVJ/vawzpK9bVzCsrNyqu9wOpQSMC/NqlNn\nbxK883hKo1bcEQXppDG4gjgc0UgC2vG5qs4XyD6HF/f0naLLUxW0rHqc4pSI\nfqH6OaDUjc6kMr5spv5Oo/DfyLBbA95dPjE4x2Iq98NDg11prVtPoH/fy70a\nFzwM4hNT/vO/YoLEzrrT1iAj79F/beRZ2SgKa6/kuIc1BJvanrgopACrrvlh\nNzw8YRQ3VoZdFIBSDnqUEGdLLEd9HPtZ2S3M8wmzuNuNYhO2GoO22snRGdOY\nf05QcGdNjSrl5K5iGkxlanGPYedkFpDCBW+P3z1+sbZ1dknz5p1oZKrQIXG5\nha4svIpf3NfCoiqsjFBNr0RT6vsZa1Qq8+Y2+CVSrtnWGvHfk/M2pO4QvUuG\nM6VBF+UL81O0J6TtfbtrpJESnz0xpS893HRm7J3/XWSO9Zo2lGHabiApkO4a\nCcb0CEJolIl8PrYoxZYi6ruyP1Gvnc7UOzNBFmYGoUH/sLSHkV8pPOA/rsnU\nIWXY\r\n=fsSu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBg6raBF7bWi/mptMMtxJVkbiqjpVe/MkuiyPwVNn9LEAiEA//oDcZ0yRafKg3lP42edAqMyCo4ULYrI/stwYOPS6m4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597934334-a06bc161.0_1597934476243_0.3394390709641437"},"_hasShrinkwrap":false},"2.2.1-next-1597937730-e7114708.0":{"name":"@xdn/core","version":"2.2.1-next-1597937730-e7114708.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597937730-e7114708.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eRilQmpa7m5Lw3FNvPJ4dhsTOEPqS52jJWcrbpa5va2gbbPHc/WAk6bPDoXNdx4w9RAISpeEtdJV9wqq6DTrUg==","shasum":"78c12011f45b98eff9972142c3695fee32707ad3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597937730-e7114708.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPpi2CRA9TVsSAnZWagAAyLwP/2HXuQCeuW8fZX/4nom6\nfdotx4xKaPz2r2OEna8IpwXqMi3toRkEfpTPgJm/yJPirEyByXmzmFhB+4lj\njOXUcGvYplm8iW9kTvaGArWk+r25h5CqtzlFpWdKbrOyh+0taKpDyONqLkkn\nAj1fARnPqpP+GDGr4Pxc889fFA+t4u59SVlsC/4nYZkT6LesiP61MEnJSCcu\nDRBQIoE7qUVzfbx2R9EnLMjWZP2c/3EFgNiiYTxCWOTA+BsBhxGaaeKOrUgG\nRH/vNiqyWj6C3N9S7T3T5gZBnfFKXW0YWcqUyF9J20QP75XVxhhWeTlBNcId\nHDCq5OYyheIWJUmbfOVIo2Mhe3p9WaaQO+GTicO1+AJmd4FMUngq8APaCtwY\nYwXOGI6A/GL9gmylEd/uxTH2OksmSRtD9X5Dqtk4+TH7EuDJV/YNnLsHU5f/\nP3zt8EaATFHe114bpHJGrqM63FEd3l0w7BSjf6sPNUIVR0E65KUp6nN5dloe\ndMPpjCrlYNxgaK207h08sYCZ0ZSF2OS44/JMZOsc9FJEfx2E2jkdA2aEQj3+\npz1KF3GNy0JqRdxYsn4mwwcdCVeegT/Yblk9MhMV1EDkYDHE3mWtNW6Ktwo6\n63w/TGRaRnSmVADIeLA+BmXzx2pQw1mjtfVwHtIKGITMm8asQ55xiLPH1eoQ\nfnR9\r\n=L1bJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFt5fJwG01GvlMJNr30NyzQcgxzokpHhkO4UPh8QzqmTAiBTiXJ92b2XYwDSMO/LD98sp+CMzpqGAi+jIN735xi5qg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597937730-e7114708.0_1597937845755_0.3314472734511624"},"_hasShrinkwrap":false},"2.2.1-next-1597938784-eed5ece5.0":{"name":"@xdn/core","version":"2.2.1-next-1597938784-eed5ece5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597938784-eed5ece5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rzMDwEyC2YwvI2l+fMinzCPY/29X15BH5CNYDZvrZ/P+0QnHqdXlrx79aar588zknXxapyVOaJrCSMQeXjQqMQ==","shasum":"95a4c59ac504ff4863857b11245ec9382a73fa94","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597938784-eed5ece5.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPpzdCRA9TVsSAnZWagAAqfAP/R4hwqxbN1mgRhnC9Ob1\nPnjHn//Ug5uJDC+C4FpXTwrgvudkas6onOzH871QqerTTunwoiiyWYsFLa5H\neO0c0dLyGXRM3oMr5h3cphiBSCGlW2vBOXHL0+4eB4rtV4wd4iGUr2i5T1Ci\n0YGa+x6vJn3jISOVtKfGigT6u+LbtaRonvkATHgtbJovMb9m3Rzq3K7+Pbrr\njlxh/qp7tA35KSENbZVzX8vDFPwnZv0aZnmRCQuHJmXvEfZum8vEmU3PHOCx\n1tYcKpgidEBtOMwg8fQeOGeN0HLpa2KQ6MwlpKx933JfOLbBIIu/xCwS6nYl\nRnVZPwNvOTNBhcRvLICjshUQH6DvcsMNA5tNCzp5w/FZUcV0zsMDqm8aA5gt\nfJP6/abWLpDlHlBMGg0U0m6uJFzEB4WYfsaA7W8NvkQqdx86qR/JHE2fUWYd\n9Aoc/4qaqkK9QBmXIxVQD9O4778IQNrjMkbG4Eu5qgmJDbvd3aBFOF1IltYj\noGyxrOuWS8/2tdY2h0EKl+maiBV1f7EhEaE7QJjIIG/rWyqQTCo/K4H9lYb4\nV4EnwdNs8gZGt7OCZf3NWskByBBK+fupEmTL1YjAmm+DpDm+Gpx02c2q6171\nicoCVjAt3nElIQgBCyP70E3bofp6IXpZHufrzJCA1nGcH7YsWI6qVqUSao+R\n9/NT\r\n=HVoT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF5c5xSUZmZeuP+XILqP7R4wiKbL56vAX5/+46b6M7EwAiAmYwkeyfiNkXqCd7jdL9qOPZbP20WI+MjWC45NBd2gOg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597938784-eed5ece5.0_1597938909040_0.5420556987405489"},"_hasShrinkwrap":false},"2.2.1-next-1597939783-eed5ece5.0":{"name":"@xdn/core","version":"2.2.1-next-1597939783-eed5ece5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597939783-eed5ece5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ZTGw+n4AozVfwdHhSn6Z/MXipn97CcNAHNGNA4VaP4NonRaERvl6j6JxeP/3X0szmU6jOtf7M/igaLGo1GxE3g==","shasum":"4bef7a7d7f83370e3fb43e55d9c3fd5b01535e68","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597939783-eed5ece5.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPqDGCRA9TVsSAnZWagAAyiUP/0kNxMERRhR9UjYat01b\nQ2+y+lK7sKrAjpsiVEJJWIW9fC5OLIWvAPmNm8t2ovR+0kVSXWjgdCXYzq68\nz5lxku4s4DICUGMiWo8bWGoPL+vEYpN3vhccsavOLzo4kUCS61rDypLvcSiI\nW0a329Q/ZkKi5HY2XcuV3pAbG04uXL4+IEcZR03AHlhcW9jhpT70bLFAKZVi\nshex6X5nlAhnaP4TnIZYwZkZa0x3OIcn7O+f/GLrWOXvDTef5ChZtQNEPkNt\nnfYElVgipJkzd3YB5DG8MvPnndsjYmMxBr6wM37XxYkbGv338Rs0bjO1kIp3\n8bKhkmmEyzT7cn6Y/afP6CJx9EP8UIwpjWlSOZTaTHbEzK6SE1dNuWbCqaP1\npF1f7a5trUEQQKAgFCpZgXT+t6dio+Lw7kFFL2OLNXTWVpdJKMZCeAHfrIdY\n82ArjWdKtX4SQrDozTshgQld2eNjsgIaEZDDpfBUutGWI0KHlY8Qdnanp02f\neKsbjQVU4AfDgUjzXHQ5B23/HBQiPfjYDFrh8h74ZIRzH7mj+HU0dH7FGcqZ\nJ7vHfZuOyb3Qv83p9LTjiCBzZfoOxXY9mEOXqQKx4YQ8mr5iWbCwPZpQNnT+\n5jN4b1ftKaFjLMcrlkDeFl5jChBeenWnTOTrUR6/7bnqm878AsmjbZQ+42ZP\nz3EN\r\n=GLRI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0MHR6YB7StBhk9t4PmR9+0cDLhEDnrXihEGlMiLMaVAIgJe047ZMLu4jU9JjzNK1+oPK4Ubl1b0Mtwna1O1eQfrY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597939783-eed5ece5.0_1597939909908_0.7795726302435888"},"_hasShrinkwrap":false},"2.2.1-next-1597941363-30cff415.0":{"name":"@xdn/core","version":"2.2.1-next-1597941363-30cff415.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597941363-30cff415.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7E5L266T76xDMyIXoHSyNm1KyDawHVJ8YTZ90ZFF+Tv27SwBIDOppgmfEQz1wEWWdfV3tKdMPPeq+nxgCbqVNQ==","shasum":"4d51ce8bf35c39e77e96eb1a6ec2372aa4bdab6e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597941363-30cff415.0.tgz","fileCount":135,"unpackedSize":562073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPqcVCRA9TVsSAnZWagAAHhYP/jab4zRgBOm6HijtDtQE\nf7gfKimusFtl4LT690Slw4eHSxlOkuQPePWh5mVIMu5c4Hh2yH7CVL/rIaZp\nVcqAN2fEdTgeAh70WsZJXartkPGFPEEb2poNVTVpGb5DWjwxPz9dJc3qE8FQ\nJFRRy92IP3q2HQMFN7TTq1bQO7oEUq3HNs+fFfCp6fuox2mF8yjU1hmq6IJb\noEVxlI6c+YqilHRVljcjicPFuXO3b0n5YHng0WNOtws2DS/uZW6hI7atsQPo\n2wG7sVkUOGXHv9f3zdU0UTxXjzAaAv4LF4izmMN6OJU8TRJYMQNgWo9uye86\n0ml4OyI3h9PNH32y2c24oQrSpN7YNLztAW3PJJYdzaKB24wQbmkxmuRIoPZI\nAvG3gqTJmSxHY7diuQboXFa9oohFZV5ITB5EtL7qBE6/TxlxZlb9//Y3mEyi\nsMrYk0HLIltU4Fi47mDRhTEao6Mw6/8GNqT0FdWb7bGdqxKX/r8aa1nuws/D\nw+sxewIE5c6EE+cV/nT60JKfy+iM9oxXU6MfWIbuzNM8hzjhK3lCumbZOToS\nYHVL+Vdyr6HerVN/w5Rsq+2r40xG6+4aCkFHfCW9dKh36WETlwPcculqaT3U\n8SdYI374bUvpKwwD9z/9VxpaM9mJdobGQLFAY+0nIhWQR+f9CfUYogtuj1zk\nHvcy\r\n=p2vT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZN/IgMCe+ZDlw+IlbM43mtJt5cXl2Yb0R3Hp9YIPrFAIgB7fGeMX4IKPJWZMpYGlu+zlRvA/CMn/e7agERE2J7oY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597941363-30cff415.0_1597941525347_0.9878781296210557"},"_hasShrinkwrap":false},"2.2.1-next-1597952587-30cff415.0":{"name":"@xdn/core","version":"2.2.1-next-1597952587-30cff415.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597952587-30cff415.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SopyVCVa/m8MbSt7x3AVKrA7VK6wUri8kaKPGIQQBXCjOy0CNRlbqdoXVjFYWuxYesdnSGXV60gXX5Pv4TJ0bg==","shasum":"084b6867345d73afb91155d6d4ee11cce6ccd1be","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597952587-30cff415.0.tgz","fileCount":135,"unpackedSize":562073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPtLKCRA9TVsSAnZWagAARbUP/3JxjJ3b0DTiv80hsXE/\nGBsrDqoDTUj7MsbZXzgPqpVUjwyMmgHzhpVpC2u5/stxv8Cs5it2kvZ0sCmf\nZMcRnJiISCtvQx1bVUPBo2oPPPSdUDbXQGpnNODv6n/0KtIZVIwE9GdP52rf\ng8Bt6bfJ6rWQ3BQNwfAUq2PpTAdbCfYlECpqXITzW1+Qz6wnel9f5WmtZyLh\nGLT5zhhPDiviMf5GjmhE//qRhhq2EDYTDVUa4eL56rtLl5HZcTniAMSi9/59\nH7imlj3a8Da37ZV5Rh53q8OUAFmHD0pzP+YMRpOqEHg93oMIUiv9JsL3ytL7\nnW8B4OMrwf1y/d5sKMH9sZ19UNc5bFbSUk+IeWAS0yY1IDoWikhXTSpta3xM\nOcAWFZ5o6idgdzG1sVyaEwlIIVhYbIa4YteeCGHTItw/lwZbscl0yFj61PC5\nBr/ihjmkbXOiij0ODg26ZpTZkoFpZ3iD0IUVWgjVaaz9jEE+W9/TwvF2S0Qi\ng23cm7z8BupUG4Y4TAkGfGQX9z9/s+bOazHfiTLIXZBeshSm9osTZe6+ts8t\n6idrAfcHfFyT81kQ2OECWuYkXqxtSi+uJHOWBf38VA+U0L/XnWrWcLJeDwjR\nbDtyh0yd6ZLj8T1FxKeDY4qmJmliRFn6nRK9QGhfK0HHwJLPeyGEoSpN4Jij\nra1H\r\n=HcOF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDiw0mE8YyYAvFcbNyW5y/xu6LZX5BgYbYyUUfmoVPidwIhAK+D3VbkgVjHPNJFFWEtvyt6gqaSoyAsfiU5EOlUIEjO"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597952587-30cff415.0_1597952713617_0.20386752514912754"},"_hasShrinkwrap":false},"2.2.1-next-1597959456-f524f830.0":{"name":"@xdn/core","version":"2.2.1-next-1597959456-f524f830.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597959456-f524f830.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-e6ufHLE4GJXPFzuaxHAYelz0qtfGK0VYVvU0MaFw34XhxhHjdEc9YieI+C4y1FAKk6R3HY7RrMKNYQuuQr+lIw==","shasum":"257e60f4006955def9105397d9d9ac8ca2ba0145","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597959456-f524f830.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPu2pCRA9TVsSAnZWagAAlb0QAIJZVch825GMAazWPmWV\nAT1KCARRJpABkRxuu0dSKnbejHA8cEMXFnKVv7C0XPvuQIV2CNYXVmGB8Cwl\nRZOAfVhnYBE4w5rfpJznUuw+Hf42B2ZXSiGhFopG1rJAm9dyEYgXAtlbWpHk\nFPMAbQanCzrc0BOqbpWSu/h+ZWvWbzwzv+65MXZ2EK2yBHjTUwFTa9s4Twff\naDYZq9VqPCWL+fRdzZLXBsRU2s32Kqe2D4jVetAUJPR1W09gokqVq9EIOyL5\n/CyLF0rlyHANgWZtn/F2Rs2ESID173KRnfV8XmIGj1qe78kTlfOQsgfMft2o\nXTREBPQgA7XJ0AfJbnx/4YpHctE/5ywbvE7NRvOxlKajxWmQeJGQTPZoYGJ8\nqH3/fOVpjKbAaBGSc+RErjUQGZjU+YyziuSo7gtjzSyRT1oO4CDmcDWEppIO\n4rjd7seGPBiZaqtVQJBFCRqSOUemGCPdK0GDg49NDfcPyV+WzELWwyoMj5Fk\nqaQBhwmDPw7C6af9IFVxWZCxuJlUfTJqK0pTT6yiB946FhF9FAZbxUK4t2vW\ns11bi3WLnwWv+ewfGSBPE7c/x8R4MY0Cfs9tUTXvJxc+JdureVjwh9a7lUi8\ncfmv4DPVMwzkosRhF/J/BVezXwxxb/CXaAxNhsYnIRcYdJtSSz56YrYDM6Ek\nUAYd\r\n=TkZt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG0FwchQLYpDWk+Oa299ziA4kU24OOrayxgy4ICuJh6uAiBOyw9lLEmZzy9RGQ2tJFNRNz8rmF9fwYUlr+xKNbmKIg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597959456-f524f830.0_1597959592804_0.048613058211579796"},"_hasShrinkwrap":false},"2.2.1-next-1597962156-063f6baa.0":{"name":"@xdn/core","version":"2.2.1-next-1597962156-063f6baa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1597962156-063f6baa.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-e3unCdsU2NEHKOrMFtIkPXCkJ4ZTqjkLAEokWVOWPJL+BYg5W0oOJMUJMSY4leIfFVX3sZ7VGX6z+qw3wqjo7Q==","shasum":"59d3c29ed28e5e8affbeae2ca3d667c64c362232","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1597962156-063f6baa.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPvg+CRA9TVsSAnZWagAALb8P/jZwaho2GtyxKZ5LVRo3\nuCrhsj5E4a8GHroreTKAKKlxX5H3OmZGascJRRUt8wUhUZbUarrYbOjLqUfW\nQP6YT1lDqKhi18JC+gUykv0kQT58Hqqr5C+jcyPB+LJlZMIhsq8/rtcoLrWD\nORAi4Zp+Yub6k0ue+mZ1/OFhmbmY4VjNqJu7W4WwX+SzKEctRmwCyH0BFY+5\nbEHS8yZq1NcAuSMoOojUNVN14y0YOYjKc8FEC2xvrUD5x+/aqOJoNk8hCJS9\nKXKswR7G5qaCjy7S3Cu81Y2KKltijEYdxpoyOTzLqdnxJ6A7dGZGE9+6IKpu\nP9DLi6+j0uK/iEcOJhqV71HcSuS42IuANk8CenqcOkhtOEpeaU5G/d6O5U5d\nySGI1jc3e1v8+C+fFx8yJDz4x7s+Ga7G99egf9gtUPi+ppV0o0GmhcSZIz/P\nzMzJda+FHPcL3P2mRWURlDirYUIG4K3Gq9SciCrCdbVZSlPYp8m0/829y1AB\n6/kpFYLdC4yWXllu25+OtKh2jrvnqr768RqQyJgoniS2rd6AcZhVQISNNBhI\n0hSYVMJu2CThgpMr1f8eyFIw/6oKo/xQ5AdkwHniFBU1KDC0Bn6stRXAQs90\n4umDykXkJeOaPLK4KQx8W8LH/PgXkqonwv2XMHrugV9hl/yFS0++eUVILK9J\nGM6B\r\n=S2QJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGYgPy1wLvC5jRh0xp4RUcRi9iudxBYNeYsP0f55TxKvAiEA9TuRc7wT9IkQGC3ESieQPhCpK6bkiYePX+ah453ZsqU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1597962156-063f6baa.0_1597962302032_0.723260530799336"},"_hasShrinkwrap":false},"1.47.1-next-1598011024-6051392b.0":{"name":"@xdn/core","version":"1.47.1-next-1598011024-6051392b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.47.1-next-1598011024-6051392b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-B9nJnpHo+S1xgE7CMU+4ZLoVHMqFVIs5IGjAgm98yjCUtE3FfOz8ZGitL7nvyxdOtdfFq0jfxvNCRZJEUL6F7w==","shasum":"eb7d00d51ef9f43fe0e9253e26573795abb28af7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.47.1-next-1598011024-6051392b.0.tgz","fileCount":137,"unpackedSize":589292,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfP7jDCRA9TVsSAnZWagAAxY4P/jGbm2o8d8z9X3GF/vez\nUkk9aeP/HavQyG+uVBvsPW87AzFT41YbMBCmtzXQGS/gmudW91WzB1Z7wAlA\nCsJdxSkBiWEbeB2lXfx2kcjaUPY/zSJS4wKLuZEt27DSGus4KezUaAYqYTPF\nDNaStDN5JsvU4JVTr+rqHdZ31EDdOpyKMOWxgbWlJAchY+vlR5HwsFgoh1xD\n9gCyYhslhnozjI3bpk/98RevwXi6N6qLv4dyzMZgvywgILvfQeUP1e3yEiV2\nfSFK4jvJgaQZAdf9g13rTF2XIPvnKyuKJi8cs4DB192J43PP1sild2SKvzVi\nsNAYuMrM7zTtSg6l+5961qVa5dIJkqpWuVcdk35vTRyf6i1Txynz9isOHhOo\nUeBWqTiwYEp/FI9b9YBnXgIkqA40yt+ZtfWuVjFqmxyg+DhTWZmmL2OcDfqr\nH3h3FUXVdbpsPzO2RIkPf646Ra2e/AcIitTlA7ZGLg2+YERbVEO66HiOcYRh\nQMGp5SpyFbxvbKYxYcT5fffPQev1evZfC8ItJx3KdzwzjB39puenTeHPTtkE\nwB3E84yqilJHSoLRh54YT4tI7mmxIXCDRNz/5TecVnXrn4Qe5thO2Le+xQx6\nfFaq/eMHXtVml45iHKCGYLKajvpGOEUJ0oZ2HKBfmS0COYCU44wtBwyCTJbQ\nfwRi\r\n=CScg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDneWBvgiqiRQ/8zXMC9jBHM2jUkoiQwUa8ErxfRYHyNwIhAIuYNzArxuXdp2asEI7BTaRvnkK/6yzAwDZnP7lHreD1"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.47.1-next-1598011024-6051392b.0_1598011587204_0.6219491659747496"},"_hasShrinkwrap":false},"1.47.0":{"name":"@xdn/core","version":"1.47.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.47.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zg4F1a9ntGGh0wfe840uwt4HCcmLfo6dFUWW0QoUCAQitu1CnmVsx5y+g6LVCXokkOHq6odSHoeqmslPKqV8aw==","shasum":"8c04d4d059a0916e59a8a96fa10d4aadef719f87","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.47.0.tgz","fileCount":137,"unpackedSize":589238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfP73eCRA9TVsSAnZWagAATBcP/2vq22bf3z6eE8z/9dgg\ndv6IDk1nz3R/5U0uokC9UycVCcio9Kh0pfsdnV0rmA7QqkQD1iNSBRElZpWP\nAb86B+is03RAFYGW8NnJCfo/Q7OZqQT0XRQfacVxl8qSOyV9UpZS5Ucyofpt\nLEr3+PpkQe+84Qe+EbQzLiJUI4gAIkqmjIlPsgeNTxybisof8Bq2ncltePzi\n49cANtvc9Z0wYKdktIOGrYgfGz3LO9qWs1YnkXICEm7GTFeza3stQqbpwSET\nZVaPLhd44JhvBoO12TT5TmAp0MgKSxFmkDALAZaMM1691rONFTNHcr0+3r3e\nehP81HKZtCVzYhSwKt4dA5+WWx3N2F6p3ZNeqIhEQQkffbNF0GxC2FHqTIsv\nJSdT/R/j4Y6OSnZ3LxUP1wleKUYqEg2dEkEmOThAxWhYrC74c3K3ZkT451Yi\n5ZgCKv56+Vpy/9PBcyAenslhK1gIw3t+4/V/IgtzL1cUmM0QPm6rSiogf48Q\naum4ln0x0lsdJslWREIN2fPubTdEjcXtAbzvuF1XkPHmagiICkNwXUNmxQvA\nRkfmS1jIuoDg8zcKPHKE9IfsIgWBCcVP9yArs7WW+ZEXzwPZ739wlz4mREyN\nON+CHh/H/pPfIiYomFgQ0cCEtqWh0BEBnpIAo2wnnHUpj7Hs52vLpb+G2uBi\nTBQF\r\n=brv4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCV5trOXfAAjjUihaQCruqi41p2SZC1z6lDCOhrsukFQgIgbWoCHOM+ZB6Jc6IfpPaZNVVL/zoG7exzMzw7HpTx3js="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.47.0_1598012894093_0.06296034764236969"},"_hasShrinkwrap":false},"2.2.1-next-1598018145-063f6baa.0":{"name":"@xdn/core","version":"2.2.1-next-1598018145-063f6baa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1-next-1598018145-063f6baa.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lq0TJEPVEj+4EUPQq9755xVhO3j4QeSCUOq+zQix/aiEM+WFE5qgFh0whxpl4XOA2lRrGD6KGHvAeGfLJw7EWA==","shasum":"302e814a38633f155155e992ad65c7f97d73b0e8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1-next-1598018145-063f6baa.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfP9LMCRA9TVsSAnZWagAAqtAP/RFz5czUEw/LYway2n6B\n4uHW8Jb7KYPGRgvV+tc7H0qWr5i8Z1Dnb0+I67k7m0L5UwO9yyAdy8q4QV3f\niWGOEi3Cy/p9QOG/pqV9J9DUE4ETX6ng6WSEIOS2sRSTfnB1X4sT8w6nCh/x\nAD+azrq8rul0V6bqJkqMsz8eKgmMpl6CImRiKO4aF8lplb5mm+CR06nfkxpQ\nucxftM7OsyD9x+3zSQkQpCF0B79FLIpoEq4YMjqXLaY5SYZ/P1gQbCSXPJ3I\n6hne8nG9AhRqa1lQwDBjuRI4qCm2Aq1CdUJfpbQHKY6lEYMBH2mrw8OFS8bh\nAtuhsSZPjhxKqoa9hea1b55nmjPVP8t3AYN9Ced+4agCvf2nSJ1SlNeTlBUs\npCeYUeKFQ66VRcudRSg0tzBxQSti/1s9br8DRTBUyVp2rkDcFjqDCSCHiqA4\nf7keSz/DpVgszNKXv9rEYEuHqaDQXOdRYGbd6+9lFsis6BYL+G7QlbOeR0b1\nKeRBDI2wc+RH5KJAv6iAhAoOxDbUJQGuxfcClmNapfzQecO4CnFUI8J7VEa0\neFYgjMKbmBD90yIG+qUb+6CgHfRALKI8DOJltw16jWQta58EDIXTTfgBdU19\ngYNJkjQ+3B39fwzU/d7bWwAZemaF5SoLEGurPHwXkgFp8loupySWqBQ09YK3\nkuyP\r\n=6sO+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOLoEX91z8OrG2l7vp2mKXJwpnhmQY/siWha1tC6gd5AiBGg7BV4k4GxP31efce3t2XfukTi7EeETI7Rwq/lv6J2Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1-next-1598018145-063f6baa.0_1598018252386_0.5948954860920841"},"_hasShrinkwrap":false},"2.2.2-next-1598026898-9caf050d.0":{"name":"@xdn/core","version":"2.2.2-next-1598026898-9caf050d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.2-next-1598026898-9caf050d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FlW0pAAsVQAaM26BFXhheUthDtceFxwlpuYXMiUsGbFDBgedeKU0opVeaI0YRCsAGbiVqylRlmzIiVaOroHy2Q==","shasum":"c4fda475b17e66a31c5e57f6d1cb4d7ec2bfa0de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.2-next-1598026898-9caf050d.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfP/UbCRA9TVsSAnZWagAAAnUP/RINllMXtriZiKQTXEWO\nPj78Quws1DckItn4GZgjcV+3jlZ+uGQA7fPrtX/8qXmlE36RKPtWoyaFhQLQ\nxiisB7A/u9pG0BOmhnnK9tSZu6+Pk62RdkCZ5Kd3s336oSBSfuNtfKNx3KgO\nUyx6Tr+w/MOacDNIhZHmiK8VlFaQCYIuDTKETSuXDeaO2IvJQbUj/b6JqoVl\nXJUupTEi4M8CKRAVYn/GsvBgoEmjxWOaIVFFdWpSCjTKf6z6QbzZ1eblitCF\nh5movmU3UH3PzUlBxEwXHOyQn5fnufi3jQNqHHYJD6zW4RJW2IqhSwUHTxf1\n4v1+H9SneTxDDScqZzmNsZqFP253q+F4bf5uGzhvwe2PnulfIZDFJyygszj8\nG0Afq81h6SELKtENzMyqKp+/iMXQ9z1fZBMOmCUz4pHN2bWtCHTuuoVU4rRZ\nde0TT+yxqzxWaA49zK5V69/1a1nlDLEIjtAKDuAk3YBTiB+rs4+v5O5b31Zk\n4u0J1rHOKQ96XE4W2fiSa1ZDF1LFsdJt4PMMPH7IbZOvMOwbZHteuPoWlQpM\n5wAaolH23oidQI5JUrhKtodmevFH22NPhqPid4HvjTaWjEBIQemxtlViAj5c\nGzUc2cXg+MsuhtyWaGMTWUSVmnwHZHSrly3XKrDCZu56MUzskGDJlsMpm6j0\nKHQ7\r\n=x2wK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKDGzVlIOuypZHKCR2g/Ww6Q2aGd/9bRAfy7BN1hS2WgIgDcsNafOOsBCaysktU7+0wRwnHl8ehyS4xZucOpPxdjc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.2-next-1598026898-9caf050d.0_1598027034743_0.920986046821052"},"_hasShrinkwrap":false},"2.2.2-next-1598027588-9caf050d.0":{"name":"@xdn/core","version":"2.2.2-next-1598027588-9caf050d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.2-next-1598027588-9caf050d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-g7fz0Ems3es7mJzSldGOP+Qdv6Gg9d4sr7Tk9o0rwFm9lbMsS41fi0LCjf+BXlbXScqi+Rl0SPMyK4Vt/BaS7A==","shasum":"1bb5a345d6595ff871d2f17c097f516bc3a5d11a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.2-next-1598027588-9caf050d.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfP/fSCRA9TVsSAnZWagAAT4IP+wcoF26JXBse7z+AgVQd\njftJr1I6z5LUH5Cgj+iyJxhhDsxGJ6JTtGgerMiFt/FGpDlHqz02YNojvhyJ\nzlxfoBEMSYhEgByzqa8ZEtctpvb4R3B0P0AzwM+BJm1zg0Bed5yFaem3Vqa7\nE7E5uT2ENdt41NE0EX85tmUva4mDF0l7BzERovyNPGzlhJXGek/2WTWiyGp8\nJ7deoOl7b8HKJmpTbokjA1RMkJLifEoqn1VjfvNyS7I4vLb7TWpKUxw4phgA\nr52bw6WkKEltTHKY/lq09XFSp9IyuyfMCqoXNPHa/u9q0S9+0JATkYEjm8Mt\n8YJr02awLB5nsXq1qyyuNJ472gWVpVfQbh3rNTg0uMoTO9cJory8S7JKQTo6\n9bd5qu4BHMZg1cXY5kY/1XQA0SGhXhJALITusuZeZGrS76uVOT7s/OIORm4j\noksJPBzCfsVTjrlSsSiHIbMDJTtwruRRQPL9XQQUNnne2b062201EPOvmH7F\nfbPv8BHPqtWV9gLyXXXAR8w4TmnRw3zvyqgy6M7yklWwhufO/M8OXQJTsAR5\nuSNHb5yqlKzljlh70hD/RTh8/PvG5h7Ap9inIDmWlFf4GsUfELottVkJCG0Z\nC1T92u7lmXw7LFohUkp+kGkGoyCfOCaY+JYVv31oI0YyHiKNcrV+Wp/lf0pn\n7Gjb\r\n=/iGv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYL7mWrIJbkBRRBUljgVaEqlrD2P4kk0CYkYJvmSBf4AIgf7dwwn1HToxfc/hJJuv1QEOKgICPszkki062Bcv6Chg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.2-next-1598027588-9caf050d.0_1598027729854_0.5635186110864472"},"_hasShrinkwrap":false},"2.2.2-next-1598029281-d07b6b5b.0":{"name":"@xdn/core","version":"2.2.2-next-1598029281-d07b6b5b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.2-next-1598029281-d07b6b5b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-g4UDi8+F6pj5g/chdXCvuJHqLJulMscXTHsSGvMb/9JfOCRwMK/gTYTS8sLTqIGmosAUKBmv+vtsKQq71X8CxQ==","shasum":"9bd05eb0b9163d4a31a46663182023332f914932","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.2-next-1598029281-d07b6b5b.0.tgz","fileCount":135,"unpackedSize":597139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfP/54CRA9TVsSAnZWagAAYoAP/jlHCwUTIj24vIGWbQMf\n2MqHoPG2hGkCkH/siTL8EoptFDZBRY1Nn/pN3/UTMBGjXJvqyfh4J7oGRwPe\nDosb1atO3cP9G4bXiOfOOgLuTzvLyhR02sE2c8PAxbCD4rkeXxif5/FssK+6\nZznIjGYrAYuzEbElxFfasoWsugsfmf63H02wFytHU3tWkAcCEBTAwJLjyMWx\nTB/RlyrDEo8kgoH4xDm6ZriW9kQZsQVZsmQn1FR4azxo1HE8lsR0jt7aLfAJ\nLvdjbiiXCyMKRWu07iMTOuxpidDSy/WZBr13Na0S5I8ZfLfdiGO6FJgkVMql\nvMKTl7VI+ATeKjF0kAEAnyJfg5g5gOy6sFTUh/6CpsjDGgiQS4e7fVkRMnKR\nWgcLznkmiD6lUfnTP9Oh9qgSYhYSx1TtyT7PElQoSptrx8adzgE5gYd0lAlw\nmgr8mAsWpN2nLrBHNL+UojNiHfQ82Z4P4w588x2byhjztB+eER7W+h99b3Zj\nor4iFZ0RUaaoKaNEF/4zrfMhX5IvoqnCP4Sy50SR7Uv5riKKSnSWeQRh75nk\nPZfn2JG5kh2cKhd/b+iBPn+nhtTQ0zYU+6FjxAt7+SFVx7s1Iiks34xOvqy7\n2azrpQVBIIWDHp2+b0RvxqofwQF57lXHmtfi6Xy5bMQARh91rIMGsMxdvt4J\nnP+J\r\n=sKj4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFj1cQY0LhLoNlRXVRVTgbDzizjjP9QLfiGjhfw7ZWoaAiEAscbMXTBg8zy0NbhVKrP7DJ7444sZZYX60jYevojzwpk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.2-next-1598029281-d07b6b5b.0_1598029431576_0.12308782607433844"},"_hasShrinkwrap":false},"2.2.2-next-1598066805-9caf050d.0":{"name":"@xdn/core","version":"2.2.2-next-1598066805-9caf050d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.2-next-1598066805-9caf050d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ardLvP09TVdkx6WNmICGeHF/pHQrNmTfJME9bRiL+2sF28QrRaJDt42eoIzYQNOJ4tlnRPzUYXW3f/lwjxQJHg==","shasum":"47ea7ae7b4ad90a678cc430d5d2abb40ba84127b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.2-next-1598066805-9caf050d.0.tgz","fileCount":135,"unpackedSize":596781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQJD1CRA9TVsSAnZWagAAxuYP/1zeCYGN0wmtQMAFHYeh\n2anICrU3EMHPCNkdwWnfVnMr1/BZLGhDS86o/BsH5q+PwimoKtHOa4EbnDRO\nfM5ujYFp5I032bD5A3Zuvqx3OanTZcrSJK8BJCDzSg/tZ1VRnfvXT8qDocEZ\nHb5uDunCfZqMIcGbicKkkyzt+Vvrp1GbGfy62jOpF1zuY5nr34aR0Yr6qKJ0\nndxDY//PIsVewkMFv4FFS/yRFcnUjEi2G/Fz/41QUramChIBTYL/0WCgbBTs\n3htAzDQ6cageMUzfo29MJsfQ2A7zL9g8lKBxrkreZH0B8YtNllb+MBYVLwl8\nlt0t6x60Ql5iWvD3zyLXss2vSM1T3ZhPru82MxM9upr9PM2tzJIrjulkd690\nobKBro1TXuMfqUzG1WEDwBCDzpO0gxAdB3zuf9f5kLLzn/ZYydpHITzxgU6y\nFwb9pH1TmgiEdkzbJPS/8TIfIxtmfhiJiBCbEJDyvYTQ2MzHrSKhu9QH7/7y\nWGk9iOx1MbeGNKEtvpdibyVWB98CrIF2aPi1JGqwBxZU7OOpVWF5Vbbr1a7U\nYrQ5LUDUzZgY0pdRSdsFhOPCpV6lVW7CyGu+AAEUpf7dro8vA+R3DeAcuU5F\n9/UFLiGqWZplzgIH0bGeGsFk7vwy9a22KQMwgMp+wuG4Fm7YSmNsRPEIaOc8\nlJiT\r\n=96av\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID3y1izNumTVkGL48WavlqDK70uEZgGpGgvIeFHIkzptAiAF1865gaFp7KEk7tTJT2+04xMULcl1phmk3jlX+p+2Xw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.2-next-1598066805-9caf050d.0_1598066933415_0.9109294420500342"},"_hasShrinkwrap":false},"2.2.2-next-1598078104-ab598e0d.0":{"name":"@xdn/core","version":"2.2.2-next-1598078104-ab598e0d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.2-next-1598078104-ab598e0d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-P4y8dHfJ3hTVa39cNJ7mxrRmlDAX8HMUW9B7EYNids9+1zo6jlpbd1BsQL8x+wxm29UTpgRFwG9aLq7YEOkCFQ==","shasum":"0ebeae8a3bc27047abb31cec59fa90f1c60bfb58","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.2-next-1598078104-ab598e0d.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQL0xCRA9TVsSAnZWagAA0goQAJ+hA1YoRW88h6jdoAy/\nNaNcTXcnN0unrEpwBMptFrZSjo95RtjPuKmThBM3RAlhJR3xMPicE0gKmOb4\nrSLAzC7/Rn3kdDITiHMVovJnhLkZmyiCG3kkbxdSPqd6/JkyWLt8pTdXUcFs\niVwCXXnkNp05J8Em5OaHLFG9dgXNoVqAe52vgmJGYvS1HGKMYY9y7cKPEDA3\nBQoU4AZiLiGdCEDmcUTqBUIkADO+qKeW2mOzN43qVfG7NX9LSEkv5e+UN8WD\nHpYLV4oNgRXWaMF25IYc7OoPHqOujGfVU7d9+lcFjQk9h06scbEYuy5kX8HP\n8C+PEZ1oHSibkyOXM+GTGerhwRSQfbO58+wI74KOqhvNopXigq5U+VQCDsNs\nRECa5mJnEcTM0fqkYquPrd8935CPqyq2WFWH85yOJuDAnhCNOcXG5FHlUVct\nDkxsFAHhdHqe/t+eF7NkCjDLC3rDFFiKKK15SEonkC9bsJZoNck9vZ/nYE3+\nI3h495Ay0T3xgLCNQLaVvf8TRUHbzOVvrC0CPl1GFPj4nDPhAKueBaxA81Xo\nilu5J7OqbjjOGHMkyWcdrUnYsnbFXtY8VAcwX+epg7mTt2L+Pb4A/bQd0P01\npeJiglraKW+Z2aacEseb7B5eq/s+SRrBj8Xol9mB8jQxF5GTZE7DPzjeijNv\nr4z6\r\n=8AMn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBJk23wWpjW/sI6T6cUckk8aoR2MNCznwGs59pgD+HxUAiEAg6oRsdzfj0//whdlJaTSsmDoOcctine43o9SRk3ltwk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.2-next-1598078104-ab598e0d.0_1598078257417_0.7596380770288993"},"_hasShrinkwrap":false},"2.2.2-next-1598078717-13d1c8e2.0":{"name":"@xdn/core","version":"2.2.2-next-1598078717-13d1c8e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.2-next-1598078717-13d1c8e2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eIdJgbcUcxWSP7AkUPvNqq0j24HYbzRnnjMMK3skq3vbgWV1QNr7sRsPArh60McsU7Hi/iTgcQd28tuE7687DA==","shasum":"c3455569bf6f00ecdf254756f9d34b549e8498a2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.2-next-1598078717-13d1c8e2.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQL+ICRA9TVsSAnZWagAANP8P/RxKD7ehGDVRXSK53w5V\n2IhEk2/L3pEwgehV9Ufv4O154rkITUjd+13BDVCGYTLA0eYFtCgDYRWrMBTS\n4hhfkJBzh8car2SFmPbVSVhJ9unpaQ6k0mm60XeB4yJYR+zwdbxDzGGfScPF\nffIhuhHVKcYgBFqeaQdbwESwgg2BSmD8fNdYORRfvIPWHHw4qoEnVB/E5gkg\nB8O0A87xeV3pQzXadw1Dw+QJ1+5hvXSnkK/C21enS4fVAzpSSRzEa7J7JFeb\nZdK0jV+bvxGihwu00hfKtiF4/MuzI5EJgyZ3RslzUKpHAN3xMCgawY3eAyt6\n6lFXKcV3Pc4neN34mtexcs0xRzPdF3QfGEs6mfc3VYm5dNDeIhFNXM22m76C\nB7MCyWen9Q0r53fCuDyIIpvrg8ypZ7eOGDlUsJcuN+ZGmH+3CEZGIcJskBEn\n11HOxNzJRH4oWzno3pDOZRCBVp7pHVRb68O1ao9fTGEUXu839ugck7Dxr7Xk\nMFJhmWWH7IdYR+egx3s4512tOJ1aAMgZUZQXfB1u+WmnX4w9yDGaoq7uLHPk\n+RSkVV+8XWYO/KA5j9zLwtRfr3KEkDYQn14Y3HE7AsiOMVRmLJd1HICPtgRI\nuM9pb8pPKdsUlX9oHOTv771Mt424bHJ6n2Zb5ybWEUeTMqWDAqT53TX1yf8H\nAjwG\r\n=5oNg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICocAHGXbyDv2jO9tx9tJ6afLundlaKkiOyVOnT2oW6kAiEAidA2oGaj0Qogb4vM3OZw4u092DaipETZr4AlPEmOt5A="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.2-next-1598078717-13d1c8e2.0_1598078855565_0.9817975720449206"},"_hasShrinkwrap":false},"2.2.2-next-1598079919-7917afbe.0":{"name":"@xdn/core","version":"2.2.2-next-1598079919-7917afbe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.2-next-1598079919-7917afbe.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HtpFTzF7lbxuGjOkJ8ZAHZAu00GWS40YM3q8fXWNPeayQ+LspB04LpsOnZl6M0VTj9OI9EhsyuwaYwMSR7V4xw==","shasum":"108b159f2668df2d09c11cc0c620b5a0f286fbc2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.2-next-1598079919-7917afbe.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQMRHCRA9TVsSAnZWagAAO3QP/jT72YUvRDMFYr28wZbz\n557LknT0H3XVmBC60q7ixJUrR3uA/h++a7LFq7eAm1qV5bHuV/bEyMLm7FKx\niIRLm8iUxTNcod7+yAnNpgQCvXF4dnOo4QDiA55dEDs8Igsk4BTVwRG4xHp+\nh7pYixHI0ObzF9w9E+xOOgmF/zJKjWyRpJrnt/7LPDWBmJZxsd37HtzIYm7Q\nvksWqWBby9447ZkPpM2o1cDzM9LdTJ4e54kvGjymj2t3Lemv+/TQKkdwcQdy\nobxvAMI0wnQz0Fk1DaLYazZFCnnf3UlKRAAQ2ws8i7S75+UxJcwE+yEthcZS\nx50Chspu6Vn6BEzLPxQwW/2q1ZcGPiGgXz3ktc5KPOfRjc0RdXbZzPsgoQFo\nvTbUMVV4dEWLgx3tsDdH4SXi0/fFIArG1FeW9i4OIWZgji2kVHImPvXuqNDN\nLURx5O7BX1DYzArsAheMXYhUYlcUqxHDJh8Cc+ioudvlHYB8nGD3kdfKdEIL\n/GKNl1uAnxHN+JyUxs5EVu+yNteJ/P3JB85bJUIqu8aPtIknfclBrcqnG/4/\n3Mvb8VcFjTse2IURy8x6LbTiRjTzvn69L9+xdprY0JVqvKp8e5S7ZWfczFVL\npjlKy2NGVjRf+C6KVHGjmbpaErH+FUTqfZf6RnonlbSuVH8JWVdIsdpMYFcO\nk7vd\r\n=bOWb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdxBXdoNz+JJBSSj1XsIIgnWzu7GhYWcXaykxN17x3qgIhANOvq9s9JkjrlivmVPvjQ4M45P7UThuFDBFZiFKYrNRK"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.2-next-1598079919-7917afbe.0_1598080071083_0.6429195021076894"},"_hasShrinkwrap":false},"2.2.2-next-1598105364-87d59521.0":{"name":"@xdn/core","version":"2.2.2-next-1598105364-87d59521.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.2-next-1598105364-87d59521.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yIFYq2LrmviH0EBxVFyFvOTTw8dylXLg2fWBvdP2fXJlQmdxqBkR8p/z24FCD8cimAafD8CuHK71ehvAH3bQ5A==","shasum":"fc2088ac91e0b7b322837739d11d4292aa038a0e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.2-next-1598105364-87d59521.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQSeiCRA9TVsSAnZWagAAkvIP/jkwPn4QoiLILxvNdSUJ\nEdlglSoaOlxnSVTfHf5TN9VaIKvO2FkjqPTL09gdhT5vvsXqZHQK/JVenrRN\ndB2AignSKrlJCFCQen7+CFeDoycKcfP27C6dB54VPdvVFEU+iqQjrBrpG4Hs\nBRyPwmAmoQDxc07QF5uZCtX7bMjJXNHaArCU5I3KQ4T8dg5XD8scuvGa0qhL\n2/q3utBb8BAuX70uT14tAU8+xHarmcNdbbYIlkoEEp0P+rPel8Gmd4p0BDv2\nZe2bwf8DwdEBVkICfnJ+XpPVK9LuRBrsKzkVBzHokYT1ISRuY4RMeaQKviPH\n5QjMohSm8VqXTrgOvulSlLoLRO5dXEH8osjNgp7296BhiasO0DZ6oHkZh5Uy\nhpxY0Ap8Lq/Cu9+zxuCE7+DkrcD7K910rd9NRyg4qVWghIVhWH1gMOZWeGLp\n+ahtGJep3VDqJJXCEnPzhRwsGAL0cypN+o9LwY62vrzwBaTLFpnpAqa9ChGJ\ngTtjcOIMiCU2AFDdsbNkxvzWxUXUNqcwGa17ZotWQepciDl1ABLlB+nnw687\n+FtP6locuvgjDAh+rf/cc5X2yZcmUwbmSPDq70BBbpfNs7yScar3uXyzYz26\ncZ9tJUZMTzYlEG6bJHCYjNejeHJEu5oD5PVVBS2A1samKvHmjYk3bl2dBTbQ\n/rIW\r\n=SgFr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCM/K7OI+h/1Nsb+DQMGPpjHfp7YIpOThFFfHkEr7mICwIgexBpmy0rcKuKIp1xp/k7G87UlA5QOyonF04qKoDoXto="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.2-next-1598105364-87d59521.0_1598105505878_0.9971067555722857"},"_hasShrinkwrap":false},"2.2.1":{"name":"@xdn/core","version":"2.2.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.2.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Hrb+1GcDFC6xSutumZMMtQe6pQPqbxOeN9O1GNA5nkp7NEWDCdmFv95DoytwfzLWnTkerLHnek5yXB93YybaSQ==","shasum":"47f3843e5a54e706df42984642697d5869f40955","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.2.1.tgz","fileCount":135,"unpackedSize":597434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQXhVCRA9TVsSAnZWagAAcnoP/1CIvTDRufXlqBx+9MBa\nfarT79ySFnxu4gpOLGni6cgXcapK3dLbLjSzWVbEM1IabqR7kDdctoyylEkz\n3d2aqb1qcftQow2uliqzu73kYSFCkDxPydaqiOsg0yglccfNLv7a9uM+jMpT\nlpSyQI01GBihiTcX6Bh625KmljjW+FRhf8f3I2+RwyB2bM1Sx7oBBMK8Cpwp\nz8ECGZLPd/+6c1NfMGlEFjMcrxM+lfcffjY7ZwOwryNiJIyDie4R5ZLxe5hQ\npOaC5AEi0KV6nX4o2A3QZu+Q+ZkxmIDC7Jn7nU/ZXG46oeYYNyhKATjUuycx\nUhpHZMsd3LB/KLhTYHCIRpPhKOrY46cgRvtvBBNW7AcMsClTQ5XpDZz6VWcs\nOKY0KMXIkRJPYVZ0YLwPTkN4HBiMUZ1qbdglJZogbf1tPNpuNMCY1ftwM0g7\nXd5XJvkR+jiu4rSIKFkbQ6UbuVdsf+31drB4lKVeXgfXOl0lcegUztDPur0X\nTCxGKBXJaSFdhGaHNJLoUZalT7kXGXHy0DgzQgMd3nCDvPrvLweKIS/xH8MB\nFgz9sIbgtx7IdQ3Gn9qHUfZ3p/iHxZdqjeSOmgBIkS+s0TszbzxTZtGnStHg\nHAL6stNWDnXSa+7rm/DZmGMC8Yo7IXxBBEeDGlVsVhSxdRrfRrFrK1TcM+mu\nfWcN\r\n=ylHz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGVMcL0enaInEcoh1YAWcX0Xuw7+8J1EV8Ajgh4TKYSQAiBTFXdYzHcYtvdWm6kW8ZXloUdA5j6hpWAk7iJoVl1uBw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.2.1_1598126164544_0.9226214173876377"},"_hasShrinkwrap":false},"2.3.1-next-1598129360-966fa6fe.0":{"name":"@xdn/core","version":"2.3.1-next-1598129360-966fa6fe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.1-next-1598129360-966fa6fe.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KJbVGSKXNXJgv0DZQE6ULpWf55PjEDIqvu2Qw6V3Lock1+wHjTkm9rCrD1kMyTUNlDQ3V7czE2H5bU5U0EcDSA==","shasum":"177dc1cb9a1f3716ef366a64950894593e57eced","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.1-next-1598129360-966fa6fe.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQYVPCRA9TVsSAnZWagAARXQQAJ5kwd7qVHUeJ1IvwdIr\nEpsBKwg6YeGjh66ghxa3Pu9bLjnGyMJa1hP4kbh6HpcMJtKJ39cHUL3hMBHn\n6ztR20NLnt0/16iWYWzRzWqaYxi3W4IR0N5VrZ3VVuVcuTMZ3QdSQtGtViTx\nWH2jVXP4xIy8LrZ9voh6uOgG4FBhWQ1SdtDDjoVRmOb0qDBkTNcLQFPfeNVt\nLC3Uysa9n3krjMc/NY81/r2mB63UjvZ2tgfEYX8LtDBhVpmgzCDFiPWA0kN2\nFE0Gdh5ZubXksJu6eg4Q5bImO97cO8iVX1ynbVnnxI6guLTqRDO6vG8cMkBY\noIPN0rkVf/FHOR7KhrQM+TVCcyC1BQXL3na5XBYDoySKNtAtshes+ENCzjNv\nwL+an2Si0gSylGFjNbYFwPOGiAIH2nISg0Elg7yXFVDh8Pjd6S2wYqWoeXgt\nLpi+uk+zT1smsBeyVmqWREYHGtjQxVFvLAmYkwjOfmv1f+2PbHAsoMOecwS+\nfqNWN6Hl6+x9AkyuwTPyvHTAlMHQQn5Dn06HJSAErIjcd5+b2Fd/JH9SZrGV\nIy59pTFTOIg7OlKyHEhQlk4JGypy2XIgpB0LCzWkpGwUgiJZvmNVmiIMDUXF\nCsr9x/E4jTT70t1cgNiOKd+3D78jQA7XQ+oc5w+ySC0TXss/tSFWPuNmcEUW\n8R0D\r\n=gCku\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB2m6Lg9RabiTMe0ZnQNfD0ccJSPZIixVUpQ04+rI/GQAiEAvuChXgcRzYkdOkXb3RkutF5iICULh/BX7BHPfY/9eb0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.1-next-1598129360-966fa6fe.0_1598129487193_0.5439368526036823"},"_hasShrinkwrap":false},"2.3.2-next-1598130821-4470b23c.0":{"name":"@xdn/core","version":"2.3.2-next-1598130821-4470b23c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598130821-4470b23c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wx67m+IisfuzEJbmacTd1/2TiufrQSMJY9E0tQ+Yabi0Df1p7xKeH9UMguyCKgFDTGkHKNNsMUCSF/kw10GK2A==","shasum":"ad8069b35e22c28b3f1b97d2690d380a54616fd2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598130821-4470b23c.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQYr9CRA9TVsSAnZWagAAjHAP/1jI2wrVwpFaa6Vve6iz\nE/uSKHOxSdQbFyJqRpJYv0HKtStcPyFduw2LDiNuMt1rrXcRoxzUTVTG8WVx\nqlVwlPSwqnzzRy5Y1CjbE4OMT9Ja4HlKD9lff63tG5w6DuqYvhgwemxLFu9O\nkPyr5pQze7jgjkaEzet4M44GuoargZbFfYqtHViHfo+xaHQWOTPBkPoTcrJR\nX1t+6twnbZc+Rkrnd72DpMziYSrZnxcB4uuzSv5jpEz2GEMopFk7lj5UWoKI\nJsgj90tuw68l6RcbK5e3UCBVmWYSpVChS/PayN2qUhN8G27n/eUxkhcJV2Qy\nPWzUaJZMYi32Sp1k5icsrGaSwCDZUhrK+bqxF8V8cPY4DW5KhDsQy/91kTLF\nzuWgwB+dQK1AY4sn+pXbFp9y74HfhsHe3JNzQdoyv2+YzmtA9XTlO13gshnl\nUlaK0yepG57oE8zX0TMCJ/X0szFx339t+j7mSQt+sv1ABRYE/LJdqjahRPLW\nF5kJlIk+jiHg9DNfKpCzj41K3a1eHvqqwCnuoaMvahcaX1MAqDFudDS5vUH+\nBIOFUWDtb8uzK6q9Uln2Ea5f7f+IsQHOFsm4SyKssmzuktKkCEmT3VLsAj91\nc+fZMg8QdvRUeZ9FKP4HtLVYI5DnID+Pso/GdVBaScvDDUBTnYICmepm1EGP\nAVGh\r\n=lfNg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6l7XOwN/agnHXSohkvG2i6E7pVVrNTsva61Ft4dkYAwIhAI35LFf7OcU1WDoL7JzISDUqIQg2IZleDzAYoRC4pRYl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598130821-4470b23c.0_1598130940860_0.15148392697145452"},"_hasShrinkwrap":false},"2.3.2-next-1598133017-4470b23c.0":{"name":"@xdn/core","version":"2.3.2-next-1598133017-4470b23c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598133017-4470b23c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-UOfwWYOENiJkeLUtAsx6CRxggLOuxZOl0zxGD3HR+SuPQiBrN8zOlqxz+bMuAO/JAB1kUxpyRdBrcAKrEOyhmg==","shasum":"9d760e0d7ab74555d277dd10fb392436cd251c7a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598133017-4470b23c.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQZOPCRA9TVsSAnZWagAAb9YQAJ2khgp32mERkCRsBHZ5\nPurblzgJ7jJzsB98SC2uCYSSEb7AmeuoZqfzMD93SdGxZttf/LBJeiwtJ7Ni\nLoS435jtmA+OF6XlSFW68mcbpD7R4wt4DRj8kkwGbkwqEfb/wQ8OQB2rpjtH\nmEquSLbIpTfJDDVVHzof2GIqOk1ZNN2NpNk5Hq6SBxzgRjRVpbGun5Lx/I5W\nDxr6iotTRt5K1JgLyvSdYFX9774x6RAbcarlkJKTFT+AQYnyy8AsdWxwTkog\nhHRfWnwZ3rvmrhoNKZ+hhvO5dC+U/PTYB636iMDzLEaNHXTJYc3TI7IKzrHD\nDy1tsUJeKiYSlEklim17WpvS8gSUGgEyB9SH1bc8z18q3CEOZH25JKujpgFZ\nEDsRB7PK1pLkrbD/IzBxue2xriR9LdtqceKl2dc8tKubBVwTvfD8h1EYHuH8\nCefSDcEki8kt0sWweJcsIVKLSQHFkp+cSowQrVHPiOBbstrCkntHlwmqQfzp\nKq66SKT2WMr/l2iv4Cpm6wRETv+twVVTulQMrG5ew8r3DsXOs4Zv2B/DRq4t\nH4fsnwVywwyBwCVhdun3CaoDQMs9wdcgcj8bJg+B4fF4y4xYdwTYi3vZbaxt\nry+LX9IOWiE7e85OmZf3gCkhfVRatTwCOgDk7BEzWg3mk9YoJume+BLNvbxS\nPfXc\r\n=sLJO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+T6I4DirCco89kYV7MyyR5qAw1iTwyrPWKJQSRy17bwIgCRwaoRLP3dPjfyHj+0VcC6/oxNirh3nCQJVdycPtUfA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598133017-4470b23c.0_1598133135172_0.8843754211897428"},"_hasShrinkwrap":false},"2.3.1":{"name":"@xdn/core","version":"2.3.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qkqXKJw3VqZW2pEiRTXJjeCaMc+Vg4xYU905aRXkPVJw+0t5N71iHCVolDjhhz6CGKCIA3tK3lg7ee0oKR4c3Q==","shasum":"5567231ed0f961b0e3a5f3a86566a24d4f608dff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.1.tgz","fileCount":135,"unpackedSize":597434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQc1VCRA9TVsSAnZWagAAh/gP/iJHOlPXUnp/I5KOUYsp\ntDvSkom63z1rUWuK+7zxsVZoVUjC+FWZVTc6CtID5QhYxW3C8jmCu/L4KfqW\nWjLnD2hC7DQDOlq6yqYk7BnnyUJVm1Perxql9v8N44G31QGy+dIPvqGWbKuR\naA9N5FRtlee6zu4ROCqVcHQ8YkywsRZcUKSmlCK1TOp5Xwibirx3bh0lIbtI\n8nrMR2Oec7kr6dEBg31gD+YcSPATKaBsRnnLhuXhW7iOqn2vq5a1w9Ra+Htd\nJeaAXlCRQd8xw/s3UsDpB85zrp08LfEok3jE9XPrKRBcXBHpxfMaPOXdRRLV\nb1lt/oGqXen191FNnElCPjigv4Mg08p3wiQVvemJa1ZoYNvp71zTl/JWQMqo\njSV4Rio/pUnw95LczjlC78ppl++qW2ELHIjXzbMwTBlj4AJx+3kAqCuHbqws\nTsT7z9Rh2c4obFclq7+ArcdchMIp3+b4eyjhFOuhM+srbJaDan7DWvSGMc/8\n6Ur8y+JXONmb9Gz6tXZnIMEQvguTg3d89H7XdIXpJdiN1EDY6Jl38pd/r9zR\nnMPJ9cY5kAtUd1IgOnZaTx96ezwrNnibtHx6WoHLjHDFWxrk0OSx6i5sg6NM\nSz9wWRNOGlsspdyX/QDK37PPLOh7Xu+5gabgcUZxtqX8QHFyUhobabLAcakw\nC0Ro\r\n=U4h1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGMCXdL7VdF4RMGOdpWRRzJKgjKJN4M1EPFv8jk1V0opAiA2gPvv1coJ226fYPNGJM6c57+rMKkAha7xyjQ4IH1Nvg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.1_1598147925090_0.44292603925460927"},"_hasShrinkwrap":false},"2.3.2-next-1598265120-42473c34.0":{"name":"@xdn/core","version":"2.3.2-next-1598265120-42473c34.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598265120-42473c34.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PrwUolauJ2byMoOiNO+Aq9tldJNDf7Itz3/Uv8qU6mL1z0FRawyYjdm27EkRhnYzurf4Wp71S47dUxrrHFnL1w==","shasum":"b5404bc2bb0ce03a5348585fff40c2325564bdfa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598265120-42473c34.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQ5ekCRA9TVsSAnZWagAAf8wP+gJpvO4giz0wKl9JJGho\nXdiGrwl9T+I2deUKzw+BD3DCpqd9+q8fGIXDjAYjnl1/9YSoeQr0A2bxtx9B\nSsqOUGyXf1xpf71ToOvFjkNZnQ1YW9Lcp9is1aCSc7tyElC2Rh0SZdo3Z6Jc\nAhLIZa5fK2hkQ0nnrz7sJp/Spn57M4G0bNN2SWHH6nJtTO16Dj+2BG1iW3/8\nmC+fQI/DG5j1+95BdyCIiBd5k3UtQcW0wm9I6hldzMRZJQLIYLuixRy/2GNh\n+ZPTFsKFSUWjkUVPSy0KNMHzbt4anxhqAXSkMHm9p0SI49QrexqA/DDSbslm\nZtLCtPpRzIYlTwmTcKTEgwKDN1iiSeOFqhKSHb1OoXwjw+fHpfKhueePuMqR\n/SM9pu1L2+ek9IXQYBJMQdnmMv9+aDM1VaE2fGgQh/mwFZtBGGFxh2ykWJeC\nIorAYehCqSdOPBTLj6Sqq8kZQ2HqROOW8GPhVUpgCj2a9pJ0tois1+zAzg79\nGDDC1xIaN0PIqy3SC5cOvmkehiUq9kayrO4dXAI0a++rVJdpKoFAbUtd6QXl\nr93zufEEdXX8uyNzWekT8ysfdQDBd8mK4NRxiNVYofLk2OGoxVyF88kadGWa\ntS25XsfNK6luiW0VaGZIK7HxFyQLLowSHAgXZ8EZ1iCq8bNxNd6OWzmckVqs\n64bT\r\n=d22C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIASWbMHQPEWHWnJHNCwmppj1ZWnQ+612WFJwdj1yHJXpAiAYBcrmsVZ0Hc22iw0EZ8M9hpsvlZDcAcHeNqz081Lm3A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598265120-42473c34.0_1598265252142_0.8614845402021274"},"_hasShrinkwrap":false},"1.47.1-next-1598265422-bb0cb955.0":{"name":"@xdn/core","version":"1.47.1-next-1598265422-bb0cb955.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public --tag latest-v1","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.47.1-next-1598265422-bb0cb955.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-iF9HUfzYibikvwnZMPSoR1zyrJcvlcuL9DvPtyYxSw3ooi9VTpdiAXPS82jiGzJ1Zu3kP4b6cGoq1Y8ajc0y3Q==","shasum":"8e9921462faf1a0154275a97faa4880e2ef310bc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.47.1-next-1598265422-bb0cb955.0.tgz","fileCount":137,"unpackedSize":589324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQ5qKCRA9TVsSAnZWagAApWEQAKBcjHf6LDh8itHbEHOD\nG4K1es5FBHVDTi13d2KGxjuSfWHFlXD1jXmIWj/TIOjKKs4wNHuHu5fgTOaq\nBKKSSLvAMGGyEK4G/+9qfBLB2RUggtCttwehTE6g/Gcj4nyRBUmu6lLTUIT9\n7LilWJ+EWBxVA18QujhNdVww5+TLITkqjYaoq94cAs4yEZQWGl3Rd5aD8PQC\nBYV3k699cEohldObLp8rG8wQbnjjvJz7m0qeegE3rORlux0OkCut6WQeCddV\nvgjSpsbUmm/veJMZoxOhe2OeX/dHnKy/6SwVcK1ncspfKMWnThTTnmAxMNVQ\n9iLryV+qaV23q1ijKoiq818PxdnoqLKfiPazeYYl86lMKDB0BSJN1Wgly/0O\no1GJjfM/78vqT1RBUXoxvGj8ZWWVmAkTkaoSN3bu98v5hEXNuMMkP/9AHAvg\nkR2tRRrhJX0iBWWNbh1X4xC2W1xscrlACjbefjeXi4QHzM/Mgk9WgGG+HX18\n+IyEgECKhBB6faxzkgB/jdKzdKxeto7qLa77nBF+ENNG7tLwmWlsVhjMu0xQ\nwdi1YS9SiGBOkp8oB2o3HSlimJKLbdPnFwDYi/4RdQvmgxNBB4LBNR8NqFgZ\nnSQ6uFRR8Ok+puPOK7uGTXSfPAfenUpfgiFcYgxvuhh/1rAaOjZLYjWrMG7k\nGZVM\r\n=Z2AK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDGSDLqvCyk9F/qaFmRve+2BYbnL2uJuOrtdaw4PJNVgAiEAieKgWxrsic3uEpS8Miv8gM9UByF+5USyxH+oc5r0PdI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.47.1-next-1598265422-bb0cb955.0_1598265993776_0.7640974154913212"},"_hasShrinkwrap":false},"1.47.1-next-1598265868-5aebadbd.0":{"name":"@xdn/core","version":"1.47.1-next-1598265868-5aebadbd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public --tag latest-v1","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.47.1-next-1598265868-5aebadbd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rmtsKo+ay3U44vefpyC7xdSqnt98UFxT+ZqfJparFG64DZsxSDhcRdObVtUOJpCLYR8ZPUeHYUWx8ipe0ub3Jw==","shasum":"0740928e2f7bda1e8525e9b4e3cee04c9f984f46","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.47.1-next-1598265868-5aebadbd.0.tgz","fileCount":137,"unpackedSize":590031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQ5xWCRA9TVsSAnZWagAApZcQAKBEKpRkhy7z+jETKx9l\n4yHPr992yjbOHXnaxSpXpEtVRdZj9KTcVwJIsgEUSa7ndYhigUwjC/2urfOE\n4iCreXyBhlfiID+todfuENYPLK01Lq3WO8ZgdufvT+vRfwu+9Whzd1ROhSML\nOc+4MNWfP8WA66sKnnzzEeBPWt3P1JtrFlflRExJazv5pcsZvsLMZRNcy4kt\nADuWGdl4dBZk5JGsnI6F6/4J9aWCaO7tqJGKeezo9IHmBSHtK2htx3UqBP2P\nSquP700cWr346kydCOBq3RM+lkM4uHD4t7VtMuQBJSU4yddOsalX8wXfywhd\n/tmGx3StN0JjjVpLHb/Yf0QweFG1zRvaoEDKJunFJ0Z97zC9ltXKEyGsRAGr\n60ZuVFGKrzGGi1yXTIRtA6j6wTrVbcH05E4u0SAgRylb4bBg6UftULK8MpoA\nTX+1lv0f+VIry12YC7NkIseYXQkOewPUC+/Ou3W4MXUjcOUw1jd3pVezh93J\nkXgbt4O6RXpswEjhU+rwLlkB13qdibkXpksun9TKYCCa6U+zHCUpQxnEqwuc\nA4S4copr1CU6AMuua1503QcbShis86A6lBSkgZx0wqM53+dBTjNAqTxLew0g\nd9liB/SkjljueoBa+ZJJZ+iDcUiNf7XNg3xKPtZGQbxCzsMehwNqyhyYSW0p\nyfR3\r\n=NfbX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHimqcSyB6TvvvY4q6yuNBfIj4yVxR+HQg/JnjCuvdZAIgF7BvMqt1i0DNKIOd3jSpVVPx0JrsmslpM1XdeZ4GUkw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.47.1-next-1598265868-5aebadbd.0_1598266453613_0.22090784096650284"},"_hasShrinkwrap":false},"2.3.2-next-1598267391-fbcb9df5.0":{"name":"@xdn/core","version":"2.3.2-next-1598267391-fbcb9df5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598267391-fbcb9df5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-TFX+GeK/iWc5eHsDTpsOqDhHWi8mfQP/gxPqvDsnmdYSizq5F/Z8JCZwg18UlaP3td4n9lw1tvApDgDwp1jqAQ==","shasum":"d9fcb031040ac83b055df9c72df4ac96d9642fae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598267391-fbcb9df5.0.tgz","fileCount":135,"unpackedSize":562864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQ6CMCRA9TVsSAnZWagAAGtcP/2bw251MuIRMydHDE12z\nAxkuG6OOzZx5X3e4iVlPYMG19F3fAXg/AUSU/40xh4mwzsqqZGDb/UHiBc9Z\nCKHNH5A/x6Ec21VAbsru2n4Fkxnp6FS9T4bUOW1KsUtT6KI6O7D2jgz+02ku\n0U2dWZotgXvxGGnuzv/jM3cCrkqsglORd7yY9O4XN88PMQOK9rSOiipu/3My\nApsgCL1Ycy1QCPgnRlZuILD7crzlAwt6+Kgt+nM1K1TCgyHLz4G/Lf00SKfK\nWnFRzhRXQCTbR/qUYVa6EOBPO/yPx68t/u67iI9hg5y7ivt4YJMDYw3V0tpT\nrxKjndBArI1XX5JRRNmKtGZLCLlzH1Bjvcp6tlP2sm9MMAH55Nf3k0KFvLyS\n+Y0Ej8jCLXFhc3oCm9ZczZodCY3yIcGf6Amy0kWt9PM8/9bmWAl/Tw7fbODx\nKbWGkeJRPNerxdSc6hHGyE1sdsFvPcDqTbMMoluGpQxUBGXiLcTPXQjzb4X5\nOb91axxe2/Fz0A5R/knTEgSfnywaoAD3hhEKiUUwgpP/uqD/HjRLrd+hakJW\nf0LACN9LVwr5sS51U231N+r0/zpaIaXrGCkk2DhxqcqyEKKmIW44xQn002th\nAsmww7yhBgWU48ko3kdUZugfMRgGYxvBU1ud6hvLUQ7H/O0U1eFX46fwW7HD\n3NBh\r\n=A0Bq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmltcVZwzcNwkpLftsOrN98kyL6AuTf8BH5zQ1BQPilwIhANwttOTELmX72CMcdW5WqFjjBSg8PRUbR2SQEg1z0Esc"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598267391-fbcb9df5.0_1598267532362_0.2536313273577886"},"_hasShrinkwrap":false},"1.48.1-next-1598268302-46367a13.0":{"name":"@xdn/core","version":"1.48.1-next-1598268302-46367a13.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public --tag latest-v1","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.48.1-next-1598268302-46367a13.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-OLtjx86A4K+1/85PS96d6JLdYj0hb59NnC2JAxIzT82aTEdDlcWefu4ZSE6FyyLr7T5TjZ8upfBAyU1C3LhSKA==","shasum":"2dde095898121a7b2939d34b9b5528c48f188519","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.48.1-next-1598268302-46367a13.0.tgz","fileCount":137,"unpackedSize":590031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQ6XqCRA9TVsSAnZWagAAXnkP/RIlJyyC3RnSiYjbBchL\n6gVX14xfvRwFWiyAIxBOAgIdJ9ujKfone1zoPqfX/RKrbAxUDqF0EHcP3Bw2\nx+5WajWkNprDZUOVKnJhuzeNqneRlFuvJc/yMmq6A2Uc2Rby5m/7D+k9xJIX\nlAG+Y81dBNipug2FT89gY5fU6Q8LR+5aRRR6EbL36hUgKHug3A3qVt5mFM+4\nIr8wqhzkU9S+r2ZGhSh9oA88TAi+9vwMHLPAGSxNvYqh9yGwUMe9fG83fa7j\ncmHS6YfQP/4X0FuV2SVYsYPkTVQaccs/ESCz5YpRi7RbjN1YZmYOD+07TsKh\nndxLzPS9UCeO6tfA+Su3F7LODSSmprA69PP7U/71SL+W5/XwNekXE8xn85D6\n3RLbsbCguVjFEQe+QHRv/XC1pTsob+uNbbwDOGSauz/QuwbndLQxFVzDu38w\nk0iHhBhv5rgNIS0mVIu3FPSo7Xdjy3TAY10erfo88d3Xm6NjPxO2unimtbky\nRUrLWp6UUAWJm8QhcvL4YbcG3LrY+f9gs+BwOSXw14gCvLqaj0JFCQLYJwI6\nff1xHzSGzvAF4dhtVRFhQcm0opgroR3asUMRzhGmSmDIIY+ITVWiyMOfXjsz\nanexLWAmqb+CtVfJgMrwc4DB/DFAPPJg2NdmVglmvEwyfARyBcWxqRz6B8vJ\nCXfg\r\n=TAwB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDA5c6Elx6qAbk+ddhTZMUn0uQpQ3/GLzoKE6wnAP84yAiEAini3xOdo5D+Y5Sq60/CtYr8JoVT5AeVZyT3EMt8t6ts="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.48.1-next-1598268302-46367a13.0_1598268906170_0.6867532486188082"},"_hasShrinkwrap":false},"1.48.0":{"name":"@xdn/core","version":"1.48.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public --tag latest-v1","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.48.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ZE89qw+WkO2VxJlsV/2293EjJG08Wh5Ju+vYIiKnXxia4ArQjJE0V7hutzTW8fnlDmlB1mnAxOqefHmQnkh8wg==","shasum":"aa4bec3835ee6d50ec8fa576aef3ba7e94ee4aa6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.48.0.tgz","fileCount":137,"unpackedSize":589977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQ6hKCRA9TVsSAnZWagAAAGEP/1zghD0p8ss9bL938af2\nTnMU+j+sFG/WJMZJ2SswWW9L3x6KUVcc4Fx3Z8opUdxwaOCDSxlIyuKJWGTh\nHQtNNPGH5hRi1kDstT/Kw8oozHw7OMJZmBwsq1Sz6ZtukcEqduLvTUQang4v\nWz7rP2BRdyi7G+084yLYs/s11Ggvp0aaT/xxQvkAbMYLpN53FjFsVCobMc0c\n5Mrm/9vDfkBvGUYokkGGLOX1yVKvV5D6Y60ePlwNUV9TBOhvnyjInbATP/CA\npQUFaPeZnQGOPFOMOUNxyF1XZmM6e7tvMnR4qnWqosgvXTx+kZI8k4rdE0Uj\nxMgoWhDAHqeh5BBUqI62Mr+G9uYMCcmalb0WYyrDqqr+YcpC/eS0N2mjWMx1\n4AYIpGnLvu/8D2wsjPKtmtSeUV39a6u0MwIRS9QbvqrwlMs0utBYofE/5sDz\n6jy0KVn9X8kRQKtLDdgVlesyuiDtDndADD3VVHexmJ9Opv+tGWhlWQdlv1Mm\nj18QBK4/7phxMRHfduAyUr7KMhpgnqumlVyqv+7X6kER/qzbEwjA9kOJIVLW\nTeqD4oxZthmHtYO4+qeCqm0uw5wGxvnAKxht5sP8ZJWivx/5xAxCfkTrlWTD\nv98nuSpQsLFD8aKl+Q9aIThS47BMWySN8CtaC9TuDqRMQSNx5EKOdI+Crkm/\nMwmB\r\n=99nn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTdscNprUsblBGPfjbKRnj60StqWae33oAmFIvPsMxzwIgTVFtAE6QAeztjo0FY6psOkHPol+4CZTu68HkI2gkvb4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.48.0_1598269514190_0.9922203538736991"},"_hasShrinkwrap":false},"2.3.2-next-1598288525-7d6db5a3.0":{"name":"@xdn/core","version":"2.3.2-next-1598288525-7d6db5a3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598288525-7d6db5a3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-S/yIvNimLn7mENZtconWI7GgY1i+PfB9r8Gk5Loun7y8lhgGu8+kROzrgJbjlPf1vPrTcEjMvG2P0bsMYE3usQ==","shasum":"6c2837256eab5af296bd23fd0a5b44024aa35eae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598288525-7d6db5a3.0.tgz","fileCount":135,"unpackedSize":597846,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQ/MdCRA9TVsSAnZWagAA+UwP/14xQyypy8FxR61qVI9P\nAtK1Ji/pEg51/615jnSDY6OzjRQ13jEIGI0Hi8rxAdxtFZYb8NSooUExMXhV\nygyxNVLCcGAUtKQgHXRq1DZD5wAXaiP9hG4FwK6SVT1A1/f/m+NcUpXY12q7\n9+79ud351ySLcQWJyPG3aK3Y0yBumR/QiRmZKmi1HB2sxSgjpOU4yx0i46dX\nglbpPUzDmZBnQK/QVkcCPN3wxER8+YxlLOXmYN/P8Mgttkl45y3eh62632mC\nOGN3+9Xv9Is4KsKLuH8sG3TUq9JbNbRRnZIVlrUFZQmvzdIyVI/jPiY7RVdm\nOblEhRPUpOgNKEHSVvR7dqd1u0dxym0F24Vn6OHbEoJmU/9E56OFqqBrn8K3\nwyVSFLZegGk3ADzzaWYsLAEnQhp4ab3GcmUEiysTlK6WYzBSx4/4LQD4MR8k\nBYH5ZYy0mX8nlwEbkwW9GjHXH4mVvZQniG/u/m9MQvJ+5pTHlNCHj+foJCRW\nrp3ahVbsr56fo3Kt4dPEH+RemHTHO/SFSd9mhelmDDC2HwiQy3kfECUySOfq\nVSp1XI31QXl2g98On+3zFya9x9uJNzV7QApIcvFjNymz2Yl0b4LSveBZhQQK\nFRBN9vr2WptVgWoWvBz3hvktOSTs0iA5u8bswX2M6rT3xS74rIUAWuuCv64R\nVxMY\r\n=vBO8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGdglqKSbtL4MoQn49YDhL4HCqEd1E1hCgRKn8/Wj2gsAiEAo+qn83v0+jpLwhdht2QxyClXJKey+RQ1GJRWndbWM1Q="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598288525-7d6db5a3.0_1598288668416_0.3050423505854982"},"_hasShrinkwrap":false},"2.3.2-next-1598311032-8d656c42.0":{"name":"@xdn/core","version":"2.3.2-next-1598311032-8d656c42.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598311032-8d656c42.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-z3BVfTGJoILXpld9hQHLBS62LqG/dG+gbr/pz8VFXHTCTacpZzouyLwPZVsrtcFP4KDw8YP8rGzOaXapjq2fsw==","shasum":"626c9fbc41b7290e0d62ef4417893af39d72b27f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598311032-8d656c42.0.tgz","fileCount":135,"unpackedSize":597438,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfREr+CRA9TVsSAnZWagAAu4wP/jWwtAwSmHXp0pciFDtg\nqCWknh1/87TOsgxm31lOdyQNNDZEOR7xhtzjUuNNX+QlM1NeFqQnK26g3WmE\nvAmYbt/x/oXFSMuEl+eYnc0bEPrlD95pApAHrbocTNgeoVgid4z9JnogR/yW\nrdp17eRAqGU6HtKXvg1nHKi0KVNJYS1m19VXIvKHoTlcS3drACDHkGaDjVFi\n/t4GMWgUq2oQek/p7JO+7H/f4t/21nIXAlOBYu5JdvUPxx6bt10rNcQZLGX2\n3ucw8b/nK6ORjiCh1BXCbxxtgloaEkp4XVt9guEtp+MsGjJ9FdXnQN5DAEwy\nnEQbZ0+EUX60zZckR2wjHuIRqW2mQK3CKgzcFYMxxHRZXTgIFdQfnLdfQm/v\nI3+U7VTPJqH31CVzZMYeK/BCvft13uT5ev4YOsWj0Y7pFudMDHqfWVDGNHXv\nitQHS6vou6Ff++HJOGp3rPP9diC6ArfsIcyuoC3p5NyXeetbBbGV30sXmSXP\n2VlwWiURLl2QX89L1FtjAKcleclJCTObiGadWAw82SouU41DZoY0+oFyeKCw\nFW3WgC25qTnN8SrF88935qaaZptdCxq1hzsD9roM+wi2ErczKhA0gabLKWov\n5+nel0+XZOAVELjBIox3r8zgDkPieRgA0Dfp7cIpwy0FyU8vgUSeDiKUP8fC\n5eiJ\r\n=MqEH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoJZJQLTFMSTaxxJdGGg6wqAYrbopQXmRFamkBaHqcVQIgJI5yhUjFRChI/S2PTjt26hh5eLWhBGmaV3lkAjX4gyU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598311032-8d656c42.0_1598311165945_0.6538849141215046"},"_hasShrinkwrap":false},"2.3.2-next-1598347523-ed4bfd8a.0":{"name":"@xdn/core","version":"2.3.2-next-1598347523-ed4bfd8a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598347523-ed4bfd8a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-j+jK6BV2+Ab7foTopij9+IPbwv85A2IpEnT3nb01avESdhU1gieheBUj9+yj9i6Q2ENR+u658d9upbjSQD3ohQ==","shasum":"b3e647c0134e9b9c3d33e0e9846288cd9327982a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598347523-ed4bfd8a.0.tgz","fileCount":135,"unpackedSize":562864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRNlzCRA9TVsSAnZWagAAt9IP/iWHr7tbzoZ/EKvmNR+v\n3UbX3RAcDpW5y4jgk7rm95cnT9h8BV8gAR9hxi9bURkyOdXplxLtVG0eqneA\nm2lThYlY7bMm5eDfvVNkR9XJaSFztZdQQhCPkPAEkK42Ht0MWMXfCSdJoiUY\nRp166RZGLNluqwVVE2LHfUAToUI1aquUVT63zyXJr+iHs/56wtr++Oxd+v3M\nwVeFrU10nFxiWXodQYpeDaFitDAPaO3xSy1iBDnzedXlDKgUEpnzbsOgV37U\nW9BK8fIGi/eQJc+4GCYUZu5jqOdPDba/USrQcLMtFkhwgJPJEhx5IkNi6P7I\nDUcu6J5Rb0PBABomopsAu91Xy5QNkNv0DE5pcEpIKGWw1jSFfTV21WDdXfWz\neE25v89VqfXvHyjqNl29ruhVDLcvA22phDUGHijmtHfeRdrCEcXVQCIxrFzG\n9RRvbwlnP5wiX1lEGsRDcwDCXvo42gAPWPvsOP96BLicyH0j/PBh9zwPhzKz\n+BL4N6Fh4w7CfFamn4bvjs+2tqE1SwViR1nhGphyMhF9dZL1t2C1waiC4yVj\nK4dAvlFs2SUCncKYHrtjALqosuXPQUOimDe+5JNm1eh9Hb66oxjqrLH/eiUo\n0JkN3AQ2V7LXkF7l7bWaeR8JR9hDSM0LIMECWRtodTivBugAwcgpD5NvqdaR\nGsFu\r\n=/Nk/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID+zHzM7hn2eMHEo8PheL7GfZKfXWGIN85dXlsnempT1AiEA8ZYZy7Nfd/CK69l+z2klAGYdApVyvd/MGN4gxrLLOio="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598347523-ed4bfd8a.0_1598347635323_0.035991214947533434"},"_hasShrinkwrap":false},"2.3.2-next-1598347551-c7779255.0":{"name":"@xdn/core","version":"2.3.2-next-1598347551-c7779255.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598347551-c7779255.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-UopCwF+X93/tfr5mihTcXaCGtjbjIHZCjdwh8XtgA7HdzEM+bfoKrKrUUN8fBSFlkQG5/NssB3vEaJcLMCjwPg==","shasum":"6faea9a945aef0338e9e0dc6bbd4050b250150e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598347551-c7779255.0.tgz","fileCount":135,"unpackedSize":562864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRNmXCRA9TVsSAnZWagAA3JIP/At3z/vbth1MHJZGwRrh\ndIG1YNzn6xC2PrLZOd68WX80oGAqBw9B9nNU9sACWcYZIctuxuU5v6rJOmc5\nerr+CJ8KICrtJ8GtlyCGKILhpJc3bDeb9fkJ5x1+tN2nmNf5WnSVOXSEqOVO\n5W4rsGBB/wneuQ2gCvbIYoPpDzijG/ktDXp6ntzh+lXH0MqIdeaLLBduc4i/\nQ4Pdu6AfUwYhvOv6ZzNla8OxZm0ujqL6ISHD5EJx0s1leMNJZQYELHy+ukv7\nLgolxEEQuCBjROljGuAMporfe/GE4JZnIQmXJNHGjBeq3hxbNM99Jj0JGMlk\nZVUcmvgHmisuoHgT5DeJZziTzb2Fa853jglJrnZgllKigrkNIqGFRWbSWDUq\nH7iOEDL8QOKJqua7r4G5GmwHRbXrI8WuY1DbO9tRQe77LBYoYNU3wYBrdG+9\nKjRvEihx1b+fGv05b/2ET6UcW3igWWHcJxTSw+dv+71PEJO+ymhxxKfp68FQ\nd136D7IIkRqMd+e+ig/C+nvIhdn9jQ1Rh1LG51I6lTvDoIEiAyqyWDXVICFh\nQmFKSC4jaVYIcO9fZM13OFj4MpnQVDQG+WYY0dsjAUJW3YcRcP5J8s0OlQwN\nP3YSj3oFrfkbJW/RDY4mfMx/fbtrAjrpUg7qZ00cyIrixt4TSJ5hMdKza+qG\nAOvs\r\n=cVE6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyRUfDm2G5qB6WentV6eVm6Kh2jB1OMVWwomdIo73GugIgDxEyqZci3C/1sA4upp3/tovD5I7MHH5ERPR7IYoK7Tg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598347551-c7779255.0_1598347670899_0.5390971079839617"},"_hasShrinkwrap":false},"2.3.2-next-1598358062-87ce1c52.0":{"name":"@xdn/core","version":"2.3.2-next-1598358062-87ce1c52.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598358062-87ce1c52.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hLek7Bz5EhhcMSFAkeZMBMdrV6LS2D7gCbAXnCpcP1+iEFSsTtfzATwdmUilieOdnUi4OdcFLPVJVUGWqNvSwA==","shasum":"2e9a9daed6191987dffbd13846e74703542630d6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598358062-87ce1c52.0.tgz","fileCount":135,"unpackedSize":597623,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRQK/CRA9TVsSAnZWagAAndYP/2ro3O/bX70c85gySpV9\nO4e0QPVpWCGgwBgiOOB1+YfsreIHRw7kmxQb5zyvpAVpQc9M4Pksnog6jBW/\ndCRH26OzfVi9MJuAVSZv1NhwAipoBRCI2+sU7QcA7g+JvGGS2ZUJ7P6p4PgM\nhU73rC4xQw8p1ZbzYKwzAM/ob1XXlbvEZwgD1O+sWF+nS+sX4mcHiloM470i\nBgGcnQxZipau6RetdC4tfQVlMNuhK96rYiqJXjSOCjAJl8+lxm6vaYQ1VN+A\ns8HmWaX1KMpDVR4aKmZBOc+l9jDQ8DH4tjdXvciWqxe4pbHCBlc6eArvXJ9T\nj7uzY+GJsYb8ptjwWrl0lxVL4B3iFS3p6lKacBZEh0T4l08qcwEccW2N7XQb\njz85mH3F2GLr3zO3Pu+lDJ1b1S7kAIYHV4on3Q365ZO6kJ1fkdQX6fO5dwIL\nq4pbwU7QmtrU1gs3XEg888pXhTqkv/y0fki28p6ADZUMFE4XEZZB6yrZ1K2S\nb5to2cUc73eMzUH3zkE0VpYVi5rJ6Op7m3SL49TntHJfGSoYeRBYmFXmfPaQ\norkAOf3VzjcRaHiMUiHtaa43Uzz5RytHWRCN6dcxxWEaMD93CH9w5bo0nfk/\nh2+hXHO60FZ42gfWmnLUJu8dUclS8gbK0XfPLnxB4y90IAtmZUku/kqNcwr0\nCmDJ\r\n=32tU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDIEfAxImcagwXHsnCmvtow1SWjZzBVwwQTX60YAMkKQAiAO8hjoKLCNgIBVv7SM0pdfqK0jNgaRD/e8cIw9Z5xvqQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598358062-87ce1c52.0_1598358206606_0.5693924939110477"},"_hasShrinkwrap":false},"2.3.2-next-1598359015-c9522060.0":{"name":"@xdn/core","version":"2.3.2-next-1598359015-c9522060.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598359015-c9522060.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-C1EqHh2j6UEwrHknHCkCONCNWuTEZwIz6Y0DYjstElJWGTZoht2DJzyKtukdnF0CKdWhZS4Z6mOkmaTrBrfFbQ==","shasum":"2c63bf0e7ddc6404c319d304cbd946a1d299b171","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598359015-c9522060.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRQZpCRA9TVsSAnZWagAAsC4QAIRikVT2tWJvIiIXg2Yk\nRDlXcX00kG2bCP0hKKurmf+iRmQUGOUqynn55z6rhEQJlt2/y1XYogYc2FVa\nSW5CYT5MvuMg/dKZ2H02JS8CV0J7tK7P3GgbLILF2rkaEMJ9X+FbEwfxZkta\nOcWRUXcrAF++WJOPhDcQwmmGcGrNiRX1RmlhDcxUVwU0hEq3vy+q1tJooeKd\npXvoERym8h0J1aLemJR0v+jRF6Wo9SMkYnwQgU0cUdutkRny2OSajDBQvyYD\nmLGkMKMsRmKgVbDVIEqVwcvOMz2c/oEBcrAjPB3mBNdpzWhAjNuyBHp88JYs\nsY6965Gu9wuOoN4uG/0lGI/ffuPmXDeShCEHtpGnSDBMGyGQREK9kELsYBp1\nLxOpG+8ocGN8H0uyuYSdfU/OcxrcasTAe4kt7iHAbTdIko6IPtBBugxfk8Wv\nQCpv54ye10GM1TAMB81K1ejo0iCGX5uGoe/AXOa16oLoluK79IfbyjUyacXC\nRuog3XZiwGRnSEYrwlfpZ9HOO1DCF1l2CH/bI4+IRxBnud7fMV6DTP+eegQz\n2YrWB+4HG6zmMoUTMgx5wzqUyVyVM3rSKRDt4XNVYASKhw7jbvUb2f0Zyi8N\ngFqwz3kB37o8qVXdGuv8z64AqkZzMkonnjcUXOv5gzAScUgdw1eoWLcMRu8g\nSB39\r\n=iQfu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfzts5Y6Tqc81SkPC7ucJ9QtHKQMb0yO+8Xq00AIEWjgIhAMqa3KMDt0/i37JQR11nM1tCs3R1brt8fGU57Yb0YKT5"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598359015-c9522060.0_1598359144937_0.2037057058111731"},"_hasShrinkwrap":false},"2.3.2-next-1598359080-3d61264d.0":{"name":"@xdn/core","version":"2.3.2-next-1598359080-3d61264d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598359080-3d61264d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hp/Xe3kHT3KgK9ZuGzJFKRdXERwS8+WdAuZUrm312zFvcNQCKP/wW+HipSbkLXFb0P8naN4wD9+32lYoEqadkg==","shasum":"41fb7d4153da31a059f7f081bb8f966f88907798","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598359080-3d61264d.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRQa3CRA9TVsSAnZWagAAQ3QP/1volpZPeyKbYX82sNxB\nnQ/YaSPGLleDw5h/nWkFgUbRncrH+mq5rBG7vGL1y/9v1tT3SjGtoUZ2/Vsb\n382ue9hMl9z8elecxVMkw0pBTLtRTbCEDD/it0smce532BNPwI97f9c/D62Q\nKX5Sf9QGK6a/1RbopAyeAfsSuq/hBqyfxjUBq2dbjCxMFZyEoEdRM4or2d6f\nt0/exoQ2OpBJvAa6cxIrap4ck05jhZ8hY92079iv3BBnQ81D/E4mWpfAsKna\nI/wDHXEPqWUztoSDn0HbE/Qr8CAR0q0fgmk7UBS9Wn2utdZKQ16asN1PBcj+\nNzdJLjqqxC4NJx2Ey+Jmnt/c+GGV0bXafzPgt9BGglDg8ML19rAThhgNw/1O\nxbA2UEUB6umEcPu2IcJUJ/LDjS1+JLx/ABvNp+r0jXg8JJSPwagjZDTgkfQb\nbLetVALEv7joAdQCzLFSRr41BugT6SAmDg5zIiD1XVQUoBg244aJK5gwF+k2\nCix6w3s8Tbg684MuNDiuSfWX4gCJRgMgiz25Tyb5wTMDNox1bgY7wZNWQnvb\nVfLs2jbkU5134L14iW7/uuYOCFadeYkYN747sH7GN952N+So+nT3d9NyLSUq\nAXSP7xBZUlFozbKwWVgXoaEu8EHhGn0qomORmcf/8PxqMln71Y/yL5yKOwSO\nL39s\r\n=yph+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDN+hcx01arhlvnothqTj2xgFImeCCHqnjK6geIuGt2AQIgVPdTjo98f0VGlUD/5CycQCpIn51okL0h3SG+2ZHGpXQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598359080-3d61264d.0_1598359223334_0.026554114725642064"},"_hasShrinkwrap":false},"2.3.2-next-1598362190-9b823fd8.0":{"name":"@xdn/core","version":"2.3.2-next-1598362190-9b823fd8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598362190-9b823fd8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FCNlSyh43Ip4I3ZnCffCH+7itzWIv1CMEoPlC9vgxE2QgYgSdKnsbmawoGBKtv7IW4MY1ywoRunwaUDkhxPQCQ==","shasum":"78a6f41a5675e29ca729232f3258876801bf0700","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598362190-9b823fd8.0.tgz","fileCount":135,"unpackedSize":599994,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRRLnCRA9TVsSAnZWagAAcHsP/0ojRgogAlTKwYeR03Jb\nDBIT9seQgGjodJ3/AjbgKT0HES0M/hWIxFsBDKYggfJZv8iF2pqCU8PhPFLF\nmBlZbIFT1QR1E68DVk5hBC9/xog/dtU5fW6O2T1JrAlv0o94Kv1o6mftrNbB\nHcrNhh3+uKTlo0t8g0IYmRegBjK5JIo3+zX5bNNzART7j7omojSRsDYApE79\nxo/fqDUwV3o/cZHgtvGPYCnfV/MR1psNQwD2IWdIPOVNnoqfh4vaG4kFrS0s\nSvu5HlUpEBKsVmGb+yIT5hzH1BovycdYSSknp/mpP7aq/ib2oFbhvpOBLvJx\n9bIBlLOtvCa34MnTrXgWKaFMS2AuI9tYyz56kBvp/OfiAKVK/gzbMWMhjIea\nqERuorZYOqs//pb73R2yQ6kQw/Iw54MkfeqJdKfj+XLvEU6/RgfuQKz1TyFV\njUtyEb8Bj38ikfWYtP0rrY6n7nsHP5z1GEjcimj4B7C4pkmYSamJOlE2IaLw\nAkuSbfnocJCyouxA/lA0aUmJvCfmoHamXdU+Ek1Gl6fNLZDZBsjPelNWNQ6Y\nL1ZF6n5Fkdi7z6HGSve6Q2Hg3dHsBCEg61RoPJpaOGj7d9p4wTMcSV19Hbj6\nHayx+jQQItGWIO2acQTQCtA0aZrsWf9npZZNZnHBpZzB8ITsurRr42uulVRL\nyyb7\r\n=lGbR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCd5+CnvRh5DTCOe5x+pQiodxVjpRiTGdiZ/7V3VYDOEAIhAL65UdDLYS7weuCzRsPCmZpX/kXXDtYBKHCn3COHHzfG"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598362190-9b823fd8.0_1598362343061_0.6969936636490217"},"_hasShrinkwrap":false},"2.3.2-next-1598362665-bd191f24.0":{"name":"@xdn/core","version":"2.3.2-next-1598362665-bd191f24.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598362665-bd191f24.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VxoOMO8f9Yurr0JvUVs2HctmHAxbavRHnFkP0m9CI++/17vF+hKvq1qM6gcoWSvygFsKpo2fwHX2A9CCWyuqDA==","shasum":"c481ab85cef2dc9bb1a8b9c695c55722893e86c9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598362665-bd191f24.0.tgz","fileCount":135,"unpackedSize":562864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRRS5CRA9TVsSAnZWagAAh3kQAIiR1mgwuoJmMQiSPQKe\nK0OD0Fw807zSSntJDsTVJBzXq4nTMiKWGeyrK7KOpktAOk4wOKtSWTN72okh\nXzOoicaRVOMR+TlOAFigcNuiuaFl3N1GIuRvt0g2XlkfxLlh+TRyqYaZURsM\nXzSjegGK6BdtoHmcvS4BktLiH/X7gt4xHyBXom1UhjMPg1mZhCq2zP6popTp\nU3P9j2JFk7v4P7WxTdT759/MDlJjQKDEiddnXs8T17hkcIA9xgL6WnnOPLl3\nm1EY5im7R6G9dz6eK8kc56wZmwAJ7Q0iYN6zdhJ1NuA2iWH+EIdEvUnfqjhK\npTsg82dJVpXDnandmpMjJJ/Yrlm77s+bAGFRYAoSfXj7Z4ZUxrV5Z77fUgLC\nrNGaNf8pyN0DE3agK5nqIQpf8QTWZmlXoSmJH7xzPUXEzR9/6cVRxPdPKkIV\n2+z5831RgMfgOk5t6E54LU7KpK6BC7YGaafSH7DIWchVrrXNEJe5EnMV5KV6\nyewOIQR8DfZJQuP3plvNNw9Cna858+O82KlwhJLQbYfL++MTqBnd8dH+M2W/\nHZFr6umlw53e/D+mLZJCUWBe6tSNvBEKI/OgHgnhXt+F4G7E1SABdjhcsL+/\nWg28dEHagqjVLOCeQgptQRiQpdo+rHbiwQF5QkRF4zOCtvQ61Ut9lGVjn3mk\nftWt\r\n=WLSG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/hlWaw/dC9946yndOhPuhE/O26dFZBRYJ4mFePzlxvgIgMu3BX048ajeQ4cu6RuHP98C4G1eLLgOWTpzZOAJBjPc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598362665-bd191f24.0_1598362809369_0.8208010898199096"},"_hasShrinkwrap":false},"2.3.2-next-1598372021-9e2f344c.0":{"name":"@xdn/core","version":"2.3.2-next-1598372021-9e2f344c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598372021-9e2f344c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-sSYF4jJ6m54Wdemdh2HRg/wlKdZBcMJY0cWF/PKKSiO9I3MveTWpzXtazCQnU3Wxc+HStVQ/utBxNo0G00fthw==","shasum":"7e1ccdf04e7bda9114283754e1c757b616e6a692","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598372021-9e2f344c.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRTk4CRA9TVsSAnZWagAAF+oP/A49CijmfP3SEfdDkmbN\nwn/GpvToo+wl6+gf7ZPuTbWXSLh/BtboP6BXaMJo52+/4+R+lieUduSJcAAN\nwSQNYIJDx1d2l9+O29qMlHwcpM7ikfjxTudy8uCr8e260tNTfA4aqWc51a+2\nBQVdC4zNe0Xm2dMe26efFdokwluaOpoDg6BLm2WKr87ZX2SGT8OHxL5WFfGH\nkoXrnpgIARhb5AlgEpBM/J0FYB7Bt/qh8ClAlEc741CBfZkYG8RED+ha4fqG\nSBBTN1HxDB6Odccus+WbT9ch8Bj25dahdJvHPhRpj3QA19pKTZAf+6A5dZCY\neo0c18ibNVrp8gPoYCwEa108TBrejXqWZ1niK+9vbGr2LvIcLiUeaTt1k47t\n69XGShYG3zi7gUjDZNhKg8hkfUdpZD4Hf9L6TEeT/r5YHz0RT3xKaBmiTDeI\nW1WLITZlTwz3CBawBDXYcNYuCgBWxKg/s+AHV8F7zD7QXJU5pb1tIAJV2yor\nucOKwjZIprVEs/sQ4NWBcP0c5cCocAUTtvO0K4Nx3DBVu/cp90HcMky50J3t\nIP1bUG3RpW9l9w0MrjXXjEaGiA38PKZLlQat/QQkTXBc7EjTvjm2BR88Tlcp\nSND0WFaXKBRN0douFSdv4SJf4PacE5BOICIWTScB7PhdFLOIExkUALzdSzKC\nagi6\r\n=hPlE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTbl6uCDL+JqlURK7wEbnqFZLSfryWRs4zbuOgpZLt5QIgQjeUAomcKIWtclxPqifnugUuFlPfafG6t9ClcxxeXNI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598372021-9e2f344c.0_1598372151679_0.05654976228898145"},"_hasShrinkwrap":false},"2.3.2-next-1598384617-8d05b97f.0":{"name":"@xdn/core","version":"2.3.2-next-1598384617-8d05b97f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598384617-8d05b97f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yOL+Sn22gxYliUx84EGvUuKLMy62eJPFmpf6amcLYotXQbXEvoIEL4vS03dT10++2Up9f0GLh0bAxicapX/PbQ==","shasum":"786a35700012896388d7ba3a0a80b26cef1b8bd1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598384617-8d05b97f.0.tgz","fileCount":135,"unpackedSize":601078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRWp4CRA9TVsSAnZWagAAJyEP/RzM/nMZHQz2zVm19jAq\nRPm6bNMG0eAKYX+2QLMM5KE/t8+FK9PLXHRCRNGQj4HdpRAnHehdrQvRTRde\nHkpWjZDRtfeTOdUq8x1RusH0PmF1BEDt4lRVkDmvaJzUdA4XC+dmDnpgR5Q9\nUugZYj71x2XE87ef6SBj2gRKa3nB3GntL+a35b62hMIXNy8W1I2i/0HK+AoG\n+hBo0c/8+HgoZFAMYdpCOcHqt3F+oRMiIvkXZ+g7/EZig/DT+89dXzCfi5RV\nGhcYXocdJE85XYcf8FAOUlaDcH/WkXmCL8l2kW0trCcnVhhtE7C/+633Zzqf\nIoPoAVxl91w72mou8UbULUOgkoUf03b8oRgRuIPCi+WAoinAjbsIGYHjM6AX\nEqzN05+9fzrFQcGcO1M57oK0vjnQ1jb9yEdf9Zr+nevlD31qHKTLxwVqLxVo\nEOdVp918EBFuCktTysi3UCwYHKnHdHA73Ns8UMN53/CxS9oWe0UlV0sKXmVk\nIQBknm/iQJG9nRLu73LW1NdU+D6oGNUGUEFXym8FF7/n79BAkXeCYsj78isM\n2J88hJTZh4RNNZeO5uH7ax2yB4cfD8UlKRD37kL9GO1PP+FKrVdLo2AITvpk\nQlGB0rMRgsWZTyC6qb5EiCRjUn09jxUKBJY//WjAQPu0sy4ne/RKihesIL1r\nHFsA\r\n=6yAS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHAP/DV8ytfExLDrMI61ev2AehTWaTPozs4W3U62DiCyAiEA0sNIsiwuMn+b1yNdd9QlsTAIqRDr2E4snHm7szr16Gc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598384617-8d05b97f.0_1598384760124_0.013957509508458532"},"_hasShrinkwrap":false},"2.3.2-next-1598386779-66e41eb5.0":{"name":"@xdn/core","version":"2.3.2-next-1598386779-66e41eb5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598386779-66e41eb5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-NnxBvHg/A1N9zi1Pq/nQZCkpCEO4tWATNftY96xjuwIOr9TuBj7vjRxi2WkJXoPxmtm52iGjCaWuHzQlh7IA7g==","shasum":"a5ff74dc35e87d2c8edaa6bf4a87c777af73ea35","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598386779-66e41eb5.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRXLwCRA9TVsSAnZWagAAj6oP/0kfdiWhVrJP5hRcxjQz\nW22JMoxmnLJWMauNd6q6uqKKL5Mv8IncAEmtmB/5/khWvHOhOdQyeagoT9W3\nxA2/ecNI4Ub+vhyUdrJH/5+2aiRucfCLq1sgGKkaput3Ga5dBZaimLbIQVHV\ngFR9ZKZFi/lDD7m3+WGBph99vcYuQejnJ9pLmc46bU4O5qSLriEMhEfSInso\nUrP90NQP3kGD5kO77IHwn+R1X0w1WnwzlUcK0/Nj6cxjvc/6Y26BJNigoxuD\nlhrwfrWGc3UPpRVgQ8WwcWzKtZApK+B08n3EQadWb8LdJkKyVbjQ78NapJaB\nK2UANMwYlWtkkXjl7HKRvQd1og2uMDzh1Mj/mWB/hNZNNkL7qixezLc/xVXD\nrr5vxBscrhIr0v4EdWFBvE2c6EXmvEgknIrxmB35Vk3rOOatz5hBYb8Es377\nWIzw6hPp0lpr9etvyLQfYkkLbxM7Vyi9oCoMkG2Dm1ck1fOa9bpHu3AP8DvN\n5CvYyfyq1soBotdGmgjK74rW1IGfrNPbeeUhdZ5ArWDEyQHXsWuApnujo/ov\npa9nVkX8xqPbuiV/O7fSM2HW5RBCkyrUnImJOHID81zRUTUANE4mZz0vv88T\n3fCU2C/mOvSDpmA+uDw6/Yymtztu3WQG3a0CyRQAMs+D+Yub7J1sMARf2z2y\n1f/e\r\n=RuZ1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGIxh7iTEzGw/va57HXHEPID1p2tmO2ZYSa+BUALZ1TnAiAx3sEAchD9NMjMq9O+z7gDSi1AMwq7UPe8DQZW+oz1fQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598386779-66e41eb5.0_1598386928284_0.13342691624793668"},"_hasShrinkwrap":false},"2.3.2-next-1598389767-cf60ff98.0":{"name":"@xdn/core","version":"2.3.2-next-1598389767-cf60ff98.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598389767-cf60ff98.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-k6m58eVD7AuhPsGbs36p384GOUDjgWgthAXnjUVToKhbjjrCTU+cJOtc5zApHW7hEjJylMTSBX49cdro1dUbPA==","shasum":"af0bb4f8ca2d29cba39497bdc90a659bb1385d91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598389767-cf60ff98.0.tgz","fileCount":135,"unpackedSize":601082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRX6BCRA9TVsSAnZWagAAEhMP/2ZMswEudszD6oJ//lCX\nxVd1ORYkBfTsmG1PUchfyhLomwBPRfzk+HMU67wntaglxvGZwaWHwdDDt6bB\n1LgLFsjahmCvkeI1FA7yUZCN0zIeAJ9pcBHj7pjET1P4Vk8Qp3Fo21xt7jiM\nEFAJR2ARoK+kMdRNN6G0/5sRETxPRsg+Kp+LriqzvXCKBmwMGJpPBN4vGaAb\nzVVnh+vtANQEsHgAkgBcGMci2VCuqi1I+T4Fz5+PX/OC7WY0kXdH/rMCA+DQ\nV7iI/G6YpOtNvq0bRCuOVLPfhtY/atoq0Q1zVoALrdBl6PbDf5G/Vs7fnmS3\nhhXhvZXU6q/vGrKd0trklDgDsJ4rSaJGzR/Ngw433BEhDKPdWd6Z53B2B8Xp\nlG5bcn9vzahMLIO3yd1b5RekykKmBKehrsZ6+qEve45lH5c0diEdbAmgqdIa\n7LCs7tzvv//p5++uJaLmTMGcYfxvdomimCu0iGRxQqsqblVT0ahLmgUyLdru\ncG/fhH70eoZFIiRkVj3QAMkEZwekbdGbAWSynNV+hvmoADg8yrBZPKuY03sa\nSVifDqptMXxEd5jbmtWJPGwRDyn2bIYvleeaUIudY29nk/QScV95U/wHFgU+\ne5J0gKTe5u5L5YvMiZhwFQBG0RSqJcqIYeN0vZ0VFNnyaDo9+sNmu/5u1TFp\nGddU\r\n=xR3C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICm9fEQYK55reSZUkmHKi8CiNRBwsVlhVJ1ZZa0KsB84AiBT5RKt7T9azmNveOPBLbMUYBRmwPqk5ylrNo77lZoEEQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598389767-cf60ff98.0_1598389889361_0.27380678751831766"},"_hasShrinkwrap":false},"2.3.2-next-1598389805-cf60ff98.0":{"name":"@xdn/core","version":"2.3.2-next-1598389805-cf60ff98.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598389805-cf60ff98.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-RWC9NmFqKmulHZ0Lb95vd91q6PneIL48ibqIkYej733lq1u4dRgpe5CpTLL9FLEOGCilbVbDo1vb0S9ZbLDeVA==","shasum":"f911c7ca422f613a83fdd1e9a944f8ade7c7b352","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598389805-cf60ff98.0.tgz","fileCount":135,"unpackedSize":601082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRX7CCRA9TVsSAnZWagAAtTMP/0dZQQsBKgLJ3QNdaAKR\nYMndyEAYBif7c8dOMvKa4Fl6LHqlf9vCEZtK/J7XYW5ChP+o4J4Jt/p3Jm40\nxfoUjoTN1NaGbaC/xu4eHsEVvZ1UZPzlvb2SaTu6RfpM1LOeqVebLtGzU7jP\nOSSIYN6SzCAC3fs0b86QqB7CxhwIljMyrFiQhm5F1QEyuZ/bMHD2qL4HylcB\nfO+Ahu3gK6zptHKj0TMP3amqaUg9FkWkLdHwO41G2cH3f1AP6VBbzPIxZxac\n5EfBP2Axd3QpEsTAD2SX4PXiAaSqOCv1Fyd2/DaU0A4EwHkRv2TLNy2axc1t\nd75uqSXV+9nXy0Gw3JLcAkXEW56JRf1zHlngN0X5D+JAqkwJTX5K2/Ws5Cei\nFsezKIg+Bg+/PCH47KRTEkTQRaGIcTqZwVPgicmvE1fxwlnlH7RNpkVoPg3v\n79B67W44sAStGZngWFy/enZZVTkIDbLCzyFtVZDRs7cISSms1QDLj6Z74mTs\nXHxD1NZ7FfvN+WSHPnjW7ymfGHv7uIlCmUWLGpEKH9kZZqZ3o7r0uOS8yRN6\nw3DvvKukimydVzPLBlAHzCqI2VPuXq/26KqLSjyy5B4T9SLmwDcJ/PO7pFBP\nQxHLMpsK/kJSClkrDg6QCYNR69JWl0iJEjYlOd1siD0JnHw89/kzI1w8/dZy\nX5vl\r\n=7oJr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwwOPYokK4iaiOkFtRm6Z76v6nHh0Zi9hsZbX6wR3C+wIgZ+UgLjF+RdFz52UeGdQsCk+FoXQok6Ji5GMBENWXUHw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598389805-cf60ff98.0_1598389953779_0.4005644146277285"},"_hasShrinkwrap":false},"2.3.2-next-1598393403-99d3eb55.0":{"name":"@xdn/core","version":"2.3.2-next-1598393403-99d3eb55.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598393403-99d3eb55.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tHV6FFs6+RpdzIGt1AUL8660KklNicb22Rc72GQOkvPqstHfUPzeI3pU4HNjYmKtaHBwHjQHIt0q/+Q/qr25TA==","shasum":"f299ca154df6d8bb81b4f71954cfcfa43869946d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598393403-99d3eb55.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRYzJCRA9TVsSAnZWagAA5xgP/Rf1mV+OOYiwiGdXJwQg\nbhfNSggBU4ToOuunNURq4UTphsI9iNugzL7rf5v9oG1QIkylXkK9zlYRYYGX\nv8Yu8CwN09sSztOI92t8WEUf5drkZkDCRlUONXQ9jNpjeed2pjg7rE8TY7Ll\ni38QTFcRv7YSV2zKAEzoWJ7LCM/8xyRzz2ienx8jTgM6aLrPUCQcyBA1dkR5\ntZ4EJcs5I9MfsA83CklqEPYp7ofbZBkppYGb9rJP1NsrhGgBYuAdBgwUMR/+\nvC3rI3yQi0NhYZaVr39mjQ6Vmrm+uwHZ1XfB6sjkoFiLAdqVI8QUkoBneGAn\nw2cf4H8FaoWHO8S421+FRB3hHz7IKLIBsAWo2xShZ8gHIhg6AOXB0Ht3EUWP\nCCm/478N/GPd7t+wELI6AsyOhN4V2yXajQmLjEvsKkZsvBIR2ykidJZ6rzWl\nhetJzwCO4yxVAW8FIhI/NOx3bC9u9AIxsnEyhzpFZzKFFrOzCzp/Q7xWYABd\nCMSexzyUyLM2QOkeC/nuGoobTf8O75Zs0DljAlB3uy9gro+iglBHZB3H6WgT\n/hco+018tV4/i3obWvsFey+pxK8DLNpOO2BlUUMu5w325EPSdSzKWYbSH1lm\nFcBw+TWPIjF32CZMCzgQegSFIRX+pln7Nl16Z4D7rDymOJMy2yAobj9Tfpa1\naFWh\r\n=UJOw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjUdIFEQjw2eWIjOJOeEoVHmEYL7dg/9qjDwL+5d8ovAIhAMvpnnCQVSTApSt/AgOfB/P6EEOEsqrfw9UYXm7l/DpW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598393403-99d3eb55.0_1598393544780_0.7639898390844491"},"_hasShrinkwrap":false},"2.3.2-next-1598395965-8c63aa9e.0":{"name":"@xdn/core","version":"2.3.2-next-1598395965-8c63aa9e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598395965-8c63aa9e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XDv2WfWqwQPrmDI2hfgQrHlZzgfowYwsFDWK8/oehZJZdDvAJNJjZs7PzB6dTicKaowO0a722a/zfVDF1XEdGw==","shasum":"214c18c2aedf552664f78652b2f3022cf532c337","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598395965-8c63aa9e.0.tgz","fileCount":135,"unpackedSize":597438,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRZbSCRA9TVsSAnZWagAAhskQAJCrBNHu3stDir5inGng\ntVBlNI2/+4+PV88vi6Z2xLU1Vz/UR/pnRHo6FVXrXLl92bSl03OQ4b31sDvJ\nHQTAbsJ9Wi3Ahwj/Oz8o1h0ZKoFV0tpt8LRkPzHYuMTIVReTCw8h2H9yLOXV\n2eSPhctRdHMnSIBvjhF4mPzn3dHMXgesg54fwG/iDa6fqNHGIlmzA1XeOHFs\nORR8dzEWuWbxpYfbG2dEwY4svmnBRiAiBUfOkUsu+8vw1DGO/E52eSMZqJx2\nmX1lrfmWR838Ow8UKTk+LDMWWLVhvBH9rpBAuP6pxDfqbyLcM/0rCFt3Q0GQ\n0G5k6KcllYXcqpRlpaOFFRSGL+aBGMUMo/d2yO62B/ey6kuOB5HKTKKIZMFa\nh1sViG2GcAQcg9xCyKvd3+m4HMFisYw0fwnIMcUM7IlEnV4LJeimeij7BaUh\nih9e70Ej2AD0MqOyI3VWBxUa4FhMjTuvMh55hwwkegVRjH50wCu+8/kh+ZUr\nuJFq7mMngso48242KMhKc+YIu8WiwKbggP6fU1TNvlcnKlgsLwTzgfa5y9jf\n7wnbluBvmR4i49k9ln2wCw4/2E5QIbzT974Hy4CBPpIX2fKlyEb59eCnBMx2\nUcxMtMVq0d9D6dIdXiGA8MGA1MmIqf9jrF5x+XxpC8LoMbHLt/GHxC+bNE/y\nc1aX\r\n=BJGu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsyRli+QR8RZ6Fqb/zs0ymSn1gNxhoNAmfwzQ2W5W3uwIgXCoOIPrrBUpKtNwDvF6aAuMiR0J/2SrPs1lSIcudMwY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598395965-8c63aa9e.0_1598396113853_0.5248358542085103"},"_hasShrinkwrap":false},"2.3.2-next-1598439065-c0278e9f.0":{"name":"@xdn/core","version":"2.3.2-next-1598439065-c0278e9f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598439065-c0278e9f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qs3i6zXhS15Cp2GzvIpNqOW0wxesDvJMk0PAW4rtcavOJSinDslYCLF7S3+/nBvvhhK78yqe2XQeWGKE16P16A==","shasum":"93bcffaf787d978868dbc2e51685c1a63a745f73","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598439065-c0278e9f.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRj8PCRA9TVsSAnZWagAAjqsP/28CQ2EfaJiokiG5UolG\nBEjUgOoE+QceE/1YPLpSLlW06zFOVNcGJib+2lXEbezowOoFYPzzV+VtqtUj\n7w8Xa/rPU597yLd8KsJCwfEE0FAiHJEqzYZKZ1wJGV8sgEs8PVAmEiLbtFVo\nyybgQxxJxZofAPyC17EArhRzAFtDMAiafPLn7KWj04ibBdrXKtnWSOEd76aK\n88FAQO+Suv0Sf4M0/isOe7f7Sf/ffxuDWMZp90vIXLy8Mgt6YUDxcyXHwPef\nYCcfWOXvDwn3+4EBWPMmIUoy1xz8qmmNUc0WOFS2mjtubYe+exosTvU1tk8B\n5ZGvEx/+EPL0RJtkczYNvUY60K1qKD8xmPraOoq9jISYrDREV6EgUUIHH1Vk\nVWBdOuF92VoqWve0IcGMjq0vfc9VhkWGv3MuHFZvd6fTVYfcMYqF/lz0xMBK\nnNZOwFDt6A6oneesGnpUgJ3Hr+cjguEUiXTKPBnHYxqUBWEYM9ZG4842PKUq\n4yIW4s4iKKqBcqjkgNZRgnuINTXWixS3TKhGPbKGfgLe0cj1ecA68IkxoKZQ\n0+XFrSL3I7+0AftaHAnkZHSfipq1efwb4IaPwjvTutWCsTx8QXfNiIzkSHAL\n3XxdMsl7nvU1ZEoXth+B5F3ccaniZunf5S2eQ2BfTD2bcPWPKbYjsWDVKrSM\nVNsR\r\n=wbiM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChqf4wD8HHmK9tn+rzd185YFcNxkrtHB1lJ9VEPbA7CgIge729JaV9wpE0X9d8hXITB+2IN0Bz1Dpq5ucIPk8AAgU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598439065-c0278e9f.0_1598439183039_0.02892653429787262"},"_hasShrinkwrap":false},"2.3.2-next-1598439616-0cd0e631.0":{"name":"@xdn/core","version":"2.3.2-next-1598439616-0cd0e631.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598439616-0cd0e631.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-i/XK4tUykMFMm0hrpGOqC2WT2Kw3XStrgSt8DIv1NqlwgJphhAvX5rKtpNY9quXybo3CEQk+ew4x0PBRQ/T2Gw==","shasum":"113b719898d75fee04a1b5716ba6be90e199d8de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598439616-0cd0e631.0.tgz","fileCount":135,"unpackedSize":600390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRkFDCRA9TVsSAnZWagAALjoQAI8Wa7M64OFF2rRLpaVf\nbw3MiRoo01tiL9l22MTVC/67T56w+HE1w37vUopVS5tEmbopeI3Vt4yj5YDl\nXqSdSWe0L5HLuI9mKkL0aFXv+b9YOhOTj4NjGB/IhasRaye2aJty5IqOwk32\nAG8sDYlmTapoTYMbyIJjaqiV+IWwXWPPyRwKGsvpL8TCsMkBV8BkgWZb5/d/\nnXC6jA28hOGLxWl1gFS1k2RHt12EJ2zgKjl+dzIuaffi+ZWm4jK3zHlHW9KX\n8SO1a4vqdA/TBSeI9qVG7zxUp3vJVB8Do5GKT8n9LCVGY+BkxYfit4UzWIlL\nOyXRKly893NjvmAMPa26m881IvZrBy0iHfhUt6E/kmaxc2nr4A2QldT6EfOZ\nMveZY5NOEtm+9Jay60KjWBFCQrAhfoNOgD+Fz2WojHtmnQXiazzW7+DeVV69\nkAoy2u3PR/fevglyersJUnjQIUBo2RqP4azzh5ZSei2qxZgNbODzM32G/e26\nhxg7nd4FXsBvzL/aABhByl7tyDaZpeYIAsxkxTRN5e7b8o8IPPeUGp/6Eg6U\nPNPMmpcNiy0a50MxTsQPmxOtQlXi8jxHtCPyrJ6Ixgdn0AMnwGsmeqkyWB6s\nutm64wT+izVFwPn09bS5QRNebVQ88HQuVt63MsEhr8JxZ7gxm1S2c7AReZw3\nf5lE\r\n=ztVq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID530wjnbjbBNa4F4Mkw9Cionx35UXgFskWJwkeyZpgsAiEAwr73EDaLJ0YhaUXvGbqh6oH4jzVc+WxZ6pstnxAUjLo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598439616-0cd0e631.0_1598439747421_0.6838814405680997"},"_hasShrinkwrap":false},"2.3.2-next-1598440694-f9cfb551.0":{"name":"@xdn/core","version":"2.3.2-next-1598440694-f9cfb551.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598440694-f9cfb551.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lTN2jSbVU2WnYdhLgdWYrVLzxVrf98kWmrpAYOcMHk8Gmd4B74Iqn6+fTzffaDqMoRLy3jZSo4A/eY4YV6wIAQ==","shasum":"2b201672a3fe42a098339716cee7210df6125819","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598440694-f9cfb551.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRkWECRA9TVsSAnZWagAA9kMQAI9CBzL05/gt5UIH6Q9s\nFOeHHgtP3VfNc1RjcNRUl2MzBzABqZMHeSagBQGWvkQpnaaDtLr4Ilz46upS\n+qXuQzVCozXlEmWhhF7vmPFMJVf+QQCg481YOQRWEtrNrxZH/8rUoCFfWEeY\nTI9PdOK0SuipAOmVpXmDq0mvVSKrTJKW+Rvk2kBebWxyclxBxoclqFXLCnUP\nTnYHEb6TNuhZIkIM+T3H4Wc3/cvzdVMzT76FB65esCNj7oRRtQa+JQVJrs4I\ni2Wmqi1yxfjFEGNfvbYjwEa7DRFGnpMyZ40zzA2PbX6yDfYI2JCr+c0gGq5P\nZKFGtBqVIFe4yhm3hEdlSOYdvk8ZP3qRgDV5gXwSUV5BXttKk/pY6lGL25FX\nLZpv0/WHkYtd5+LDfd6x8MLnxg+exTMbwVxh02OpYWJTNpfnOwjuJatrMdBY\nLb4Vry3btMH9xpp1wl28NCggXR20H9u3IaRDrvLgWgaDMzAUd3hwNctjHxLM\nyE4CODhw6oI0CCTMyFrcVZGF/xNL1dXDL4v1w+H3vxFPaWtlzX6276FrhgsC\n/CmvkHa/1iPKgeOIA63DFdr7xZE7xG3mW1ta0YrFVp2BaynyDQV9gtfK/udz\n4JbDm+W5NxBr1PEq+kRS8YkoC893zzDd8o/kQFHh6NajYXL+eeEAx97T6jh3\nyTG3\r\n=fSB7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEd56SeS6KWSu9TdqejjPk7OvAdXPgfutjwk1WrdLkehAiEA8m4JEflJ54uMCp3q73SBHI0mm7pXpMSHVHwtVKDB/QY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598440694-f9cfb551.0_1598440836398_0.23518630129606488"},"_hasShrinkwrap":false},"2.3.2-next-1598441720-981dc1bd.0":{"name":"@xdn/core","version":"2.3.2-next-1598441720-981dc1bd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.2-next-1598441720-981dc1bd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8djYarU1ut9Ie3Bi50usQ7GrVlDmhJY5qqYiBmKljMADg/wTu1IlabSpXJ7cTrASJHjRIcehutrZuL1QzQuJng==","shasum":"50064411e1038b6e4916bf0fee57f56c830b9958","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.2-next-1598441720-981dc1bd.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRkmRCRA9TVsSAnZWagAAVicQAIzD8kH0LigBcrqk4bP8\nCdyEKigYp63bAC3oZc6BzOJrO3U3IO9bkt6qtjOsV/3qKfpFylJke8Ay0nUf\nDMw/EsPGOHV2qTGb0m0lrG3ymuEE5Mp5hI5IZIk4Y3Pn6J/vL/9K6N/c3s9U\nOqE5Lq6mHTR3PvR3QfiJbcreM4Vn8bFXOH58vRWmmhKIMiv9ERiInQEjNmWS\nIRgdoa4AMYW1yiVoqQ/0i0EDDrqTk17oT3gGE+VFs0sU88VpzLw245BMrYuK\nqouszTKvtMQlW2CvvNfC3fGiwDEh1eoP56ai4kswg3fiu23fNzm0vRNmgYUp\n+F1X/4u0/TbAq7QAiuKPBpFJeItnRzAUIvzccKqXr97J+5JATgpwkk3pcZMZ\nzkKYsqc/fcQcBV2v46aJvlHOx0KBSR7iRozGpGTnaanhMLLBJRfW0LzuxnMN\nUw3iXdQXvJGFaNf7E93q8vtrd4ABgxUQca6HSjiLRk+x1wkJ0ZRs32vuJ+ek\njoerwEo53dGRIG5+N38KP3Il+YdUvIXjI5NdxLkE1aIik/+LaazVCU9cdfug\n2MRNm+gXPx4TEG8V+1sIkw7BLifDeNRmLug+LFqnYg8zLdgXk3qP3Sl4xaB6\nCC5KnyXK9pNK4mi/8kCRdw//ZWD/IwPJECOysCmIZZEmfrpFmw2/71l0qokv\nSaDx\r\n=lhpp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCu7aRiR6rf1gqC48DAzyAJ4BMYcuxmOMXutR7KYHFXngIhAJSfv++zY1mTIEOxqEPivR8Y3jNyLTHasgTe2nMbZSSN"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.2-next-1598441720-981dc1bd.0_1598441872871_0.7678189242999476"},"_hasShrinkwrap":false},"2.3.3-next-1598441814-eb3fe2b3.0":{"name":"@xdn/core","version":"2.3.3-next-1598441814-eb3fe2b3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.3-next-1598441814-eb3fe2b3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KxxlM++kgP9d52emwjMyoarVICavA/Pgvl4WD4wZOl/F8fOmVYtNLbwNoTPGk+iKNgCNv0Fc1v+AeGqGV0xszw==","shasum":"6cad8c4345b1c4dd5d00f426585f5cb4a88687e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.3-next-1598441814-eb3fe2b3.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRknWCRA9TVsSAnZWagAAiXcP/1hyRFxV5yUAfBuWCG95\npVutB3SGTB+fC8o5UfNmkDWI9tVDOrIji8lXFQlxxnUbkAC1a1Doo11TVTZD\noQqrv4Ws7wrBdHZ6Q8jTP8aO+cMDtDtOwA9T7TXV6zfjAqbGLXknfDxkg65s\nHI0/z+JgpTST3c5+qOmqFSr6ccvT5T7kn1oGlQkJCyp8LvpOkDZL+ijoGj81\n3OW1vdW+xF+3xHIP7UUqbycuww2/ffhnyOQXv2IO/e582reRzVCFnQDj7yTs\nNiaNDwdWS/amtx3ZFFBh4lhTHgBsIijYphm9a2jfzgnGXEgis7gRVBO55CpN\n9XX1wsaUWKWsdJnux5WroiL//hQ3tdZGjzoT39Bcz81ea0HzkSvXAdh1EG3W\nKzgSaj6EFJGDgh3t8NkSu4P/w9YnldifzBoBPgKhlLqQuCaeeMIE4ITm4Pn6\nt+lEZzfsNK5hPDvTHBhpYbgl85Yy2reiGU7YCsJfBoHXgnkpbxGjf2LSvw9N\nRwEXM6Xu8245SjZdmOa1zxacXd1/dPzhqNu04TH0IpunjEl/6fRjWikSbg1m\nSX2hl16GmX6wouNanTjj2CUDh5jsdrx/22r4yNzESnzUE8j8m1nWzJBrVHqo\nVE2kPNhq3FF4rPsC1WboS1hoqfLXubYUKnoJTHLbGTySNlSvwOEmAQ/FFdTZ\nGe6d\r\n=JW/b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHKVMOUvDw8k4nCBqPehj34Oa9jPuYces37rvIvTMMfAAiEA3CeQYcKKP7OrQLdpvBYLz+ozdM6TNw58qMSWDHQeKrE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.3-next-1598441814-eb3fe2b3.0_1598441942233_0.29337677409776464"},"_hasShrinkwrap":false},"2.3.3-next-1598441850-f49a2d9a.0":{"name":"@xdn/core","version":"2.3.3-next-1598441850-f49a2d9a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.3-next-1598441850-f49a2d9a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3hkyYh1nOy5EFcB2QP6qki4uHS/WUnxdhG/OZAabB7lnDDokYeo8geX/NCNXm3ftukjOzdSr1/aVSLe3F8MOQQ==","shasum":"48af0eba27ecc02c9610b8a06514234d1328156a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.3-next-1598441850-f49a2d9a.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRkoACRA9TVsSAnZWagAAibIP/jQYYtsq2R8Sby1cSGnE\numuvCyWAI2n1p8T+zjr4oK77IQ7SrApwfVoiooLve3nGs+HWK+Grgu66ge2u\nKBV4MEkVtlLSID4VDnZwbpkLKAoW18F4bvttK1J5FRUz0kpz0TjOyM//Kgeq\n+JCGOqZSDvEXWpOR5ETelYUtm+M3qlBSfZ8jD4fV4dlXEJRwBefPQdRdE63b\nuIjGIYoF0CfkPxmqIvdRjer0iseVM8n/u5JvPFelV93L1ZnNKF/E9+AT2glb\nYr8igsXm5bGsVOizjRyxjW6ntVME6zeOr/2B9scyZ2cxjXsoVMIkpWHdrOfo\n3eQwZ0wCCMPzIwmzsCPr68yrc2gDRwvAKzv9/7SGhH0cXCw5odSGbEQg4rhN\nK1y3MOA4kN1M3DDkNdc2QPz3uiGss5eAImsN3U219kWSILdEjcNOU2n1gV9p\neRqy/u3Vmq9wFiNKzwqGJLCdJs7nFo1yb43088McwpH+GcTH5c3IxWImZlOO\ntjzTdgtEtiUCWwAxUmLZVts7goBCvkCrRHEBEA24SV/1kgSpR2FMOOjkjnsV\ntxyTYG8iRnoKvSPPgvu7jmPuYPmpb4Jp+7dJTi3Cf4ynvg833c3AXhv+dMhS\n0kuXL5QwlKiRK20jkcev3JDw+CNpOun/0z+w0lbqoEaHlfZWkrhm+KjUeuvL\nra0K\r\n=DGdB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDeeNKO2HXqI+WQH3LTK9+KBxrWK2DF6tyOh5uyhWRf5AiArbt254WGkuoB2iQzTX5Wi5+Kj1l82la5P/8P+MWRIvQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.3-next-1598441850-f49a2d9a.0_1598441983720_0.20676659533085417"},"_hasShrinkwrap":false},"2.3.3-next-1598442966-f49a2d9a.0":{"name":"@xdn/core","version":"2.3.3-next-1598442966-f49a2d9a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.3-next-1598442966-f49a2d9a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vNnZw3N3p4sW0WYxWFpfOcO9sef9vxDf2RnOoSBQ0u8K513UB+9dq/HWDtK7TjryhsXAM9vHG1SIAkc9FUxjNA==","shasum":"940e1d7f241484f1140e6d185828af94681fe3f2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.3-next-1598442966-f49a2d9a.0.tgz","fileCount":135,"unpackedSize":597488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRk5gCRA9TVsSAnZWagAA4F0P/RHltbqn9COEb3+QaQzG\n+3+sX76XQW18yY7fWYDQxiTa3Io7qoXKTvbGZbnxOEWti/xTu5ZEng7BTR/N\noXXyaNq+2ozr8m4C1X1YQQ+x0nFNW8c+CS7DtswE5MIey5miQMNSfQHGKNff\nRAt6fAfdt/ozSk8BG/AgH9V6Qp/f8fLrai196MBpjrPZHz2cOCGj3+WspsUY\ntSrm7P6JLHU4IsskgatPSzo1/+im6dsIPG77Q+avp7/eAYm6xRjZCTx+zNNu\ntl5+IQ3dgXLAl8eE7e6gfSdsUpYM6DnO3G/hFf1dUTxb8RX4+k/xQThqbpkD\nfZq3WDIjAP0gixOiVXsrc2WhdTu/hNG657LjUo4ECYbIYM2Y+wd9q+CO/uAP\n/ppGJs78N9XRHOikq0H4ej2912RZzclDeH25PjvMIW/OcQR3RrOAdLOoFXvl\nE15gNhmAeV32RKmSgAHVoD1oqDbapLjsBiB6G9PocXyhieIknHxmJt7nFSrP\nzT0WM/HDRSSuRYAJya6Ntq2S8K9Td8vf8ThCfVzMvc8n2QXDCJlHFJCkcbRk\nr1rjOvA24pV7ihDnARmoNZHPUkyP8Jhn8sHFH/cznGp+kBHfU29xGZfO2ixo\nthjOqUUroX3aYxThwCDVb60CjrBhhnB0Z3N89y2NRpQDH4NHtawSqKa1DkrN\nrVPJ\r\n=nHvK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE43kuuHC6t7qWKtA8wPV7PK+GtcU+uJl80WOyhEl9TGAiEA1l5NSmy5Eu+iuTTknT7ugENr3dHg2Xoku4giX1q1XQI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.3-next-1598442966-f49a2d9a.0_1598443103722_0.613304778546649"},"_hasShrinkwrap":false},"2.3.3-next-1598444882-96009724.0":{"name":"@xdn/core","version":"2.3.3-next-1598444882-96009724.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.3.3-next-1598444882-96009724.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ksd2EksyxdF8rb2f6rUrD3xd8F/jvNud6zmdg4Up9NpDKrt+ZV0LLc3kpsUt3ojqvwGjF6Ym2TY/ls/BxbIuxA==","shasum":"1903131f3c8766cff6d82a15481ff7f1f1cbd578","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.3.3-next-1598444882-96009724.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRlXQCRA9TVsSAnZWagAAQYkP/3TtmBC1wZ8rr85Ua3vI\nvMWAZyqnYQITY0xuG1jsZkFEpwrF8HVPODk6N9FnVwow2ZpgIPlsqeESHYNT\nlHbW84vhp/U/3NriNNnH1hS15Lk9+Jt+VQpP/O5oj5ukW/GHNKBO3NnEfYEz\naDLJNpmDBYd+EtBBdcy+b+GCN+x5y+i7nLh95jobHpaXlxXnco70qP/P4W5N\nCcyR9XXuCSZnZ8eHbUf6khTqCWxXuLcmpqqCj0VDwluWGREeHP+jf3K4YJ9q\nKUrZ4Uullt7ojNEJPRQ+DF48Miz9B82LTHQ8U9Rl5EbwLmuah/ei3ClTlyW8\ndShpbT/w+iiVAR2EjlZ9vPkJxUNJE3ySqet/5x1M5HeMQlzy2ni4XJhklXpU\nuu8bggEFlLfzYIHmOFGqWq2eefwctIpTRT/Zt97XoVKtOIMkD1uQ7bk8f8wX\n7DgpwDg0ZXG0bKW09Z9WavXwzLHz6nFNP8YpXbuR33tMuobD2vdGgHZeLgbC\nAwKZO+p4MInxia2pJqJgzveLKWPMe13xtZgTCXf6AeVFfbgAEd68uEMKmYo+\nemB2SIljTeJJTCrE1JdLNsFqPYhfpQUFWj5kaugtQe761dNwGRKZO7PSdu0k\nqOCU6wErjvEPhbfkv8xMl7w2Tu9qeVl/ni4RnaK0uX5rYZ1ze3yeHBTH3ZSC\n1VSV\r\n=//bd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICbLZNGmEdHYkmI8xEx6dkQ4Jrpq/rIAgxiC6aRp+O+2AiBFyYuLGHiPDj2hMKoE3pMslcYHatwbToU65gyAriT54g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.3.3-next-1598444882-96009724.0_1598445007684_0.5445721031556698"},"_hasShrinkwrap":false},"2.4.1-next-1598445276-fe8e8d4b.0":{"name":"@xdn/core","version":"2.4.1-next-1598445276-fe8e8d4b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598445276-fe8e8d4b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eqRCpJilhZEKYgmrloDz2ahTvQacRawonp4ctYDL/O4rfCehKAAR81Eo8O6OySCn6TjJGw53slflQRQEDq2U4g==","shasum":"466690b558f4bce24ede3035db21ca9b9df39fe6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598445276-fe8e8d4b.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRldcCRA9TVsSAnZWagAA7zUP/2jfrAHpJHjedtxuw3x7\n2oGg6V96oyiOamXmvRqktqFEbNA5Nb6LSGB93kvNsD/J+a33r8dlVDffRwiO\nVa4x6i5EqK8dnyTRgMgvmmrpCzDmUsxR6O6Wy77dBjaHylMKseBChfFdIRbu\n2sSAQy2YSe88A0PE38f2yVjfssGwWzktIJFzEqKA5t/niSJwk0TGXYm1z3tA\nBwKwo/l4lJGrOWJwBghfEPheod6a18czLJPEZHWK+XuNGYsxeIhoZfz7swXb\niXuJLWz4FNXHh49TG0yKGK2phDYvl6Dtgt5NZMROumvUZ69iX/RRUspxe5Cx\nv5w9fyIwwGJ2EKMdxwRsuDLwATNCifhqFLe93RfYqYoaRr3UjhprPYXESl6G\nd+VY4guUkfdEaX9Vknz4v0RyFD6IdCfhYA8x2531ptcn10GDB/vauxZr88Vm\n21uRxnPK2Kq5GymKIEHNNn7uDitxOeQ6msnO4xzJqV1v6GQ1B7FylUpcKP7W\nSux9F3dlECfea2FTVCYpJIlZNDhZgiHhYMl7tY1i0jcbos0th82oFYEWKAZb\n16d8Y+yV8PQGXoOowLt0xz7MdE5o2Bif2dhQ2FOY0lYehY8lRKFXy8MetbrM\nafvU2mZM4GVl394AcodW/QYKmZbU5TrlR+ECO4npHY460ZLUKJotWXFPd7qx\nxnTW\r\n=buZ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDpj8eh8e75CJ/xyPbTmP+LGNvyw8ypmXMqc+KZaJWcwIhAK9TWlI+8QbzhcIqgEpgvizW2SWohCcOM1hRyLniX4o9"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598445276-fe8e8d4b.0_1598445403498_0.04186968796534374"},"_hasShrinkwrap":false},"2.4.1-next-1598448503-fe8e8d4b.0":{"name":"@xdn/core","version":"2.4.1-next-1598448503-fe8e8d4b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598448503-fe8e8d4b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yZPhkMb+6gwKwBF7bEbxFrMTBGm2UKXtUCUQfrjR/Q66olN355RVd4NJthfoKN/DBRV/h+HjhrMwgMSmU0KI0A==","shasum":"98b17c5e57ef937e6da5afdce2c59a760ebe4ec4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598448503-fe8e8d4b.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRmQFCRA9TVsSAnZWagAA17wP/2kq7IsFCHcgpFmZQXLJ\nD5bbfuoXlRX/zE6cjDtRmQ3GSeDE2MbwgD4I/SsjFnmH+DpfBvXFBijmmIjz\n1+0alrg6jMdiHL0xm8fqice2y/OCVK5ekoLxv2Bq9wNLtxXGp2o/NfNSIZ+A\nP6FaMPTyDGfgBDE7poj+qOZ/8bjdJ9CdgyHbXOWLeMRFdX7NEOxo4QotnQiH\nHsxAFV74Bbx2gW+nfS63ZOVOAZx6+LLSh89Yhjpkk1c15icK9mJaLykkUJl3\nnl5ACXS9lDLYofIcizbOlvciFo+KGgvcT19RXFL/Yr2WljQBlr/ysppFbXRy\nRpKlA+ZFsLFotT9OcSdLEWce6FFyRthrrOoYzvZ9px0knkB4/KCLC6i2DBR0\n/isa7xaBbDN55dLags9OYQjQN3JpGeVzbIi3Xp1ctLpvr/mMM9M3KqYCp8hJ\nDb3LPwA2UMF57BXk9/O7YyFU3DvNTYaUuQ1ujGvPUfu3YJ17oqXr8A9iuOb+\nh1LLEzfT+iElVicmYy5oZD9F2YSkfjnAVA+9mBj2xGYI5TOGYHDA+MxE96Wb\nqtxroVyXQpgecwf7IEJpagCDiqgLg30c7onAQkPikeZmwmOfCv4iGTZkVY5r\nzS4h/vuozygAunkCQtQxSLUH3Lxps827SLCS7q++QGzdbPURZBu4eJyINN7t\n5J9O\r\n=P9/a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCweSMmdOx9cUCfmUJp1459C0so4HAiHfrHgEwDfy/N2AIhAOULgra9y6zXWtPFtW7VkNRQp/XC36YkBPF9z7hJcu49"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598448503-fe8e8d4b.0_1598448644922_0.477541342496689"},"_hasShrinkwrap":false},"2.4.0":{"name":"@xdn/core","version":"2.4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zYWWC0lt4VdoRLxdyW9/PF+wyNQG7mAFjX974T2dKu+5Ue3jOdXdAO2FsYn04KsaCiP0l87Lb8Sl7sh/eVilMQ==","shasum":"1479a36cb71c41f281ccba7a91087f91b7de5299","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.0.tgz","fileCount":135,"unpackedSize":601489,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRmhsCRA9TVsSAnZWagAAYCcQAIiUtSgmYw0SDGy8taIF\nDyjNYDDky2jH+Eb6KEsGrET6MxEtl+yX/RjlffkyTnMXrQRTav7pXKCy/fGH\np3OUrT4fcaySSX/huzmBil/QsCiBt7V/MsKg23gUcD4qKsC+OIyMXBxBiuSI\nNZlP6ZXtnLC8SmRHFT2JUkma8q9bsfsodltNRsiEUmBLkm6LdtrBCYWT6oyn\nJiEuUNkb02Hik4HwfaFk3MA+nyoUTBGjce2aRh4Ja2pMPYgA8Chikq6z7S2/\nqlCJk6cdeCgEABYoRIKcWlZkv7pvl4kuGcDfmdCk25XR/z5vW5VYmqTYrHOh\nGJbos5aaVjSCm2ajjHQgJrMy0hQCGq07xjM194h5WKleeL3qD0HjG1WloGoy\nud52puYX9wJbu7T8/kG1q0rrISLwsUTBZuIRXq4x+Jpt+K9rQLIdhsbOTS5B\nEZnLKZ9dTEYFRnoqoCZd6BvB4sxahPnwHBAbIubWhkRSeHf89MI6pWV63DgM\nFNN0biNsC1MteC8aEtp2TMtZ6vp7YlClL/xPIyLTE+YNY2tWkVxh2hwjXo1U\nYpbw8k5Roz8/4PivJ5ghAzsDFBYM9Ij+DrsDG5VfI2GDnpSgZwCZdgjhq5uN\nxoQ7esqjFvpEsDmMJRSvmwyyaAL9/MoQ6x2jQUlzwvCk2c+27Xnbl6RQ5U65\nPh0t\r\n=WMHz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdaLeAUBuWWwKtwZp5wl6U2C5AOwUeqPxrEtyRQgcq4AIgIqvX9AcJJu6lQsP3YXgtiMf5KSWNtLVL6mdVc3np6Ak="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.0_1598449771492_0.7615467670218377"},"_hasShrinkwrap":false},"2.4.1-next-1598453444-a9c7bea9.0":{"name":"@xdn/core","version":"2.4.1-next-1598453444-a9c7bea9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598453444-a9c7bea9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xJC+UhGroZE/wVlpvKrlFQ0Eqi4nO590w5Yp9w1WaSSBjivNC0RXl87rKGnk3yYDNPMdTWYrdZw1/AtGKj5RwQ==","shasum":"d44650e331b53132502c7a69fe1e35d9c002b8c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598453444-a9c7bea9.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRndKCRA9TVsSAnZWagAADVQP/1gNAmf0+MSeyABayFB4\nyXgYRoxl8UX2zkWLY39ADZ5LyaDyJDEooiO5lrsk8JPz8UU5aLCU3ULwvujW\nXVbrZq99cm9Nff0BUEGDNEXazCYgAPfp+3mThYc0BXVO78NlEPYZj1o90yuW\n+OezH7jMYwWqw9cG+sS04ah42bsym5ZWOqMrVky5/oMPWz/tmOZt999K+4F+\nXyBmn2mkVoWH0Ox2s59NquyTfdOXpb0ajRf08DdUrE/r+M3nQFqLxScmUar+\nD4Tus7tAvU4l6T44rg/29JiWnKtfOUrgiJHPdK89uVs78kzoTSwk4eCXw2Dv\nTgyZz7NWLOfa3g+j9Ofs0RJ1L2mYGR0QVLm5EPx/P/W4S74S0fRQMlM+hgm7\nC0z7Tb9OXDXTCY91p7rEknR/vR4BKA791sQ7n0MfJRQq8+RKmdz8gipNmkDt\ncanzd+4RtAjb4PbyCQW7fyNV7s64NryI1X4tlD1iyvRqIdpZA6aYwXBY0SGe\n2Z4GzFP3koXYB3UU14DWRxjWin9FWpQ/iSnufkK2+QZNfL0BCMn9di+XM5Y9\nbMEinGv9amhvf1TP2f5WQ7w+g08WsqNy1TLK5Zf1wH7XWQ9ABJdIc1jkP/Ry\nbaMcdPQHjP58Pe4sCOhX6I+8Vk/bH2BQ6yyu+eWSwYWPHE1objv5I5Rn28Em\nwpfT\r\n=tYFX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDY6VxMyJm1kjttXmR//L1hgUkXidsj7AyRZE1xNLGX8QIgVEhPzAKRBTKJVOT3bc9hMTyPB8keNaRBsdkrJKmV9PQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598453444-a9c7bea9.0_1598453577698_0.2636772040926665"},"_hasShrinkwrap":false},"2.4.1-next-1598454233-8d6006e3.0":{"name":"@xdn/core","version":"2.4.1-next-1598454233-8d6006e3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598454233-8d6006e3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Gc17mFYgFyE9rVzDOCoxVPSNIwFfhXPTmpEj9Ewj0WZUKDFl7HBjfv/Fm/xmTQkQ28W7kiU+zMtuXGxIWPRonA==","shasum":"56933fd10344f718e5bd1309ddc441ff5316840c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598454233-8d6006e3.0.tgz","fileCount":135,"unpackedSize":567485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRnpjCRA9TVsSAnZWagAAJUQP/jOYt6HyWJHaJsHHyMkz\nwf58PaSSjnnyXFfJDtHIdYVIO+Iy99/YvPNh42Nl1k1se5yc6BP3UTt0S1Aj\nSgi7baw4lvYCgofsUbFEHbf7QInQZLJzGRTSb7c+D7uOKYKUK8UaO7Y+jKsW\nRVH7W7EPlit3FUt8PxedtCQmlIkHgpL3fbIwEl0orGauPgncvdRdL7gPGjsS\nBxZzxE8bQi1njEYBOuPJ7FZHV5+i8GIVweAoYa1kLd4Z3Hc/ImI7q8sfvukx\n/rGgkaVOHS9ztoQwFbLXVCBicqXial2jORxkntKYz4gk80XaCBRRz9q5lZQn\nPM0pxiJ2CNPU8WU1HMayHNaE6HVf0zc7bhAGY0lJ+J1osWzpErju/ISQFE2q\nZJrDmNsBkLujtSKrlH6eQhClAuoJsmW+F4kkuiUHXubgeO0D2t5rKgj0NxIj\namX5A+lnLv+NTzHLKtzi3v7MS8XemvkiQAIw+NU/IHxP18G0iTHDxAZEbos6\nZeqNgAUr/oUAe5ySXy/RQTYexZR5pFEa9cmH28lIR/ol9zZWEPbwtFZIbUzB\nZHf717ThRQXiIhaCL0Hg6dpjra4w8KHdrZVjUavl0ATHunptAft/113BsrXF\nkdnnD65m85LX5FWi6hkmwKyNC/pLbdhpQJ5VoCmHoiwueXDg9S2NFVA7TXyO\nIxx3\r\n=fwK9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGUatLrWtBvi3q3MZm8yuKu2LzIlBqx9ll0r+TiOwsFeAiAYDC3nMRoO7fY07Qy1xnH1VlAHFQzSy5YkqJikBlhLdw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598454233-8d6006e3.0_1598454371048_0.9361049252116129"},"_hasShrinkwrap":false},"2.4.1-next-1598454437-af4a7e21.0":{"name":"@xdn/core","version":"2.4.1-next-1598454437-af4a7e21.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598454437-af4a7e21.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aTTo3+tT6lXQJ8BNFDydTDQBAmFquHZsyX2k3QlnmmcmuuKDAWyTS0yHbdKKklELMccoYLgSbJSXgNtmbYAmSg==","shasum":"028eb2c219825e0bc22d08cfa687b24770200cbf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598454437-af4a7e21.0.tgz","fileCount":135,"unpackedSize":567485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRns4CRA9TVsSAnZWagAAkv8P/1hPwmc+T/53AcOvq29d\n4tejY/bUeGq4NGqvlEqlmjUB08eMsWQXoqwnbXkNyAn6fTSEziQCay3pGJbU\nOmd0L8JG5QCtrLMJ4rOZbyV2x+Z9/ZYZa6IDNvstBfxRvsr+9earNaSN/a2v\n5Nkk8kMLiQrZaP3S0YdECajCWr1+Q60r3QY4zrB/5+Ywb/Gc/VQaQZnYg/Qn\nHZ3tLqs8KnASNcfRxZHfOsHHdjsdl0x2keJPFOxLM70zHlu3Z39ixH5ydBRY\nXaawBDNgxEn64facohignQmYparsqxW3nUraJwn9y3HpRh4FFsBUNmmEGBB8\nWzOpSfACCndFcIiakXxOxJBsGNcxZmP14fsmtMgudC+Zg9AMykFF7wrHlJXg\nUwkqjAg0o7Xk/ktgXkxuHGCHPmhM0yvBccIWXGuaQs1YmObPJTNgZd1HoDbB\nwjzyjrCp7uSjWK0MfDA56+KST6jfeu2qFyeZZRnA2KnxxY6rRVcSimU63FB8\nJroUR8d8k9KQsyinfWahARd09KoNiEp85UaRiWCwvDMTayNFets/aK2dp5Ov\ny924XUFeizTMpSAHZ2iKVQIT6vTwgslh/nOmkLUmv06I2ttF4A1UY5sUVw05\nh65GGuWjUAyJ6hkbqD7AwdFjwfK+QGRfRwex0RcwDptcPiEEBG+NkOoMfXmJ\nqlCW\r\n=3slf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDPYsB2FxgOdZZbGqaF22INKSgAT78c1oIxlsYEEdj5oAiEArIeof3Pcvwf0GL97VIWyJPhHxrfM0m+qJ9zk8rV9e+I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598454437-af4a7e21.0_1598454584207_0.09727325311171464"},"_hasShrinkwrap":false},"2.4.1-next-1598455420-5a4574b7.0":{"name":"@xdn/core","version":"2.4.1-next-1598455420-5a4574b7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598455420-5a4574b7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+JZIL2VodsJgYJHttDPIJ3qKwVOlzeajn3E87QOppxxk/g0BW6bVYsI8vSKqJhJBaVtAW6ZASsXZ/WeVCHZCRQ==","shasum":"eb4d1fbd9189ad4631ccc5f4f9084cbed49552b6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598455420-5a4574b7.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRn79CRA9TVsSAnZWagAAszUP/RFSJ4XJxVCRELaiU/Tu\nisy9msWYQDau3M0c7+FlSbqBMSLDRNiV3ou6C/T2n5on7Fyajvcb1puuCsPr\noCTM7tBy0uoorxouC5aJRy5MuDoUlpPa7Ltpa/j74kfvjyOIX9D8YY5zyLRr\n9KY+1NMJJ4A+vKhKqBARvyrvFdiEn2LgbQTuzVKnx38QV3zn7ccruHf+/7Jc\n1J4k85JuNWho4xyRVTqdwLRTdziAO839M++gelsONs5r+4IgqdCRdN+v0qOQ\nw4avZx+nPwZnxntytTaj8KTLgcXy2ARVq8dx+Ouvg1hTMuMmFVUbzKt4suCT\nF1gszKAzO4R84wqPnzz7Ne8qTbq4zgy//TaoF2hs4Dq500dvQbqq6BbxQV8P\nlCAmOlJjHd779CgiH4ofU8lenMlud65r8I+aCdOhpYUEvcItS1Dl5BNRd2ep\ntCjTX06K5St+gHqjYiZ5YckDkeVDRWJrVXVwKp68XLf2hl4wfTurTSmDpHXl\nW4GMHcRlUvZkj0oyTRKcdeJakec8bvDGC+oOXWUZC8cnWVx9dOy0/6j0NdU3\nYSjGwo/cmbwpYoYXPcQLbjJMFMw5fsguoDcxE9quRT3cUZteSQIwYT9xCeox\n1LeOSYgbXnJGIVUR2rq7MjrIm8BEaozhLRZkq9nehg3gxyp9I7DQmF8sXgxf\ncmQS\r\n=LoOF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH760xnwsFgKMSRWKkeCCh/2tfSWdPwaztodhBbxUatUAiAb0zQa8pWeJzu6pNnL8IMSRmYWd6KDGDlVFbkvrfHHqQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598455420-5a4574b7.0_1598455548917_0.7368056407284178"},"_hasShrinkwrap":false},"2.4.1-next-1598455785-da2ca773.0":{"name":"@xdn/core","version":"2.4.1-next-1598455785-da2ca773.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598455785-da2ca773.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-i23qNquALhXClkp5w0E49D9wzTM21kyHe7OT1xkrRU+1EE596osSkVBeNZL9egI0f+zLobtdrnLL5wYkiaGleQ==","shasum":"6acf8022bd39cf7bc6c472c8a9b9c46ef68ea495","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598455785-da2ca773.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRoA+CRA9TVsSAnZWagAAggoP/0BN0tIg/5lx8jueFGvs\nBkMrNTgk1ZCmMusMDorsyk2kwbJy6duKT/ZbayUtXmuvh/aB6l27LHeycHGg\nHgM41HGTAJ25tr1R4WCAiQnJk7HFHjM5dLO1oI2dhmp9V3KnNd6Q4LPXpvbr\nsGZOWo/FpOpQQH4oZdYzUZCrrEpG8fgV+Bc0gPd342AvyrME4OJMWUcGVZHq\nE5R0MkM+S8JqJenBPApVJpOkrJkjiiKbxFTfRMLvFbnTo/vG4u6gNN+RL2tn\n+oLAnzNrEmrDviuuZiOalpKWYnfd4biSany1JT8l2E5eyAxGWj8LOneo2s9n\nVIiEh/nzwARO/59ZZZU5pSlmnacrgmzHrnTxI5K4YSPYpyQLeNTyoyQTgpth\n6F8pMX6c7+W0nzop8KFWBEY4lzSZXPxpnVPMT/eB22hkr9HJheHYK/P3G0RK\nS8V2QNAx+VZbASS8bTgM5KBiUmeblFP5rUu4Pni5Ox4hMqTvu61sueX2kZJt\n/rmTTcTLNQWJzC16o7Ade4nTFZNIQMOzzrphJXBonao3OnwQgqNXbo8lj+Dw\nhYl3lCBCL9eA1z1W9QalVE3uw8y0RwmPOG7sAqHFBNArHZh17UXbqbpjLP47\nbdj+t9EaunwyKD+4IazGhNm0CdfFDzf5WYoFHYxUYWl6Q831CVtlW6UjeJec\nRDbp\r\n=tFSp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH7b9yNNR6Di+vRtc+fSAan12yM36ZOjVFuo4zujufaaAiAPsdxRE3Eo4Dz41TZDRboQ2GFO1C2wNy3EzALwyxTIcA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598455785-da2ca773.0_1598455869799_0.18279087513336156"},"_hasShrinkwrap":false},"2.4.1-next-1598456749-d61719c0.0":{"name":"@xdn/core","version":"2.4.1-next-1598456749-d61719c0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598456749-d61719c0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ah4UYT6PnAVcd/Cc57yunVb0IPK01dG68QllXsCgsL5QMRJiaYAU7I6QvffnGXMxKxKN6PJWRwHevDCYfAiTQg==","shasum":"7e18eaf13736c2ad826573d174d945a7eed7ecc2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598456749-d61719c0.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRoQCCRA9TVsSAnZWagAA2WQP/3SH89VVQZ6rp354bA+1\noftnwa0R4uO6gQ9eTFTJG7C0eUv5vjm1y880/AJ/HbrMKSY19yP6of58EyhY\n3H+f+WreC+fb62R5812JzMKfe0q+huD3dwwQMfsEpLgJgQeREzi5lEvrAxXn\ncypCyc6gk6Ntcf5EuH2jI1drcMYXGqMVhdq3SUTQxo/i4tvMCEuwUV8i4nfD\niR82BvroefgSH38nynY4lUtMh8W+/WEkPNVLZFnEmJNwQ64I4znXy7/q0PT1\nHF7HkBMuFWF4OJYrkJ5n8vzogNvvcea7LPVjWQkJVz2U0OAN9mA6pz4aPccS\ny+T/YG2HLMLESJFW6fEP7bq9A/2yq7Xx2u41a1dNjSSO1muSxBf7Tl2ZFI/F\n6pk8R+OcPXk/SiYimDmc4ZAl0SFvPVplufo8dU3BxiIzoFaIICT8ZIm86Gyk\namkQqDfuhIHDcfPSqDzqXN41onGbNI7sFCY54OjQeg3JUfQUc0fZBXQI7kK7\n+W1VE4l0JmVfT1oDdYX94BTZbnWQ3/Vl9CewSNk6HqzxxcN3+U/09Id7yyAl\nd/LZ+yJufZFfqkkJ22kdlMMrkeXfZKmOfHj2agmtCcxfjsnbzBxC58PKTo6o\nrcqTuxjRChuofVW2/6nBUAJlQnws+hUiBZt4WuFNuCee+sG8dqDmVbOKWdiF\n9GwC\r\n=aPnm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQg2tp0I2WCU35EGyr2tMVMNkZsc7HQxxmVOCr+TATiAIhAPKddSaTDJyDogEnBfOLZu8z9+98ZRutXaiqLG9XNFAx"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598456749-d61719c0.0_1598456833618_0.4982237466429047"},"_hasShrinkwrap":false},"2.4.1-next-1598457160-54af56d6.0":{"name":"@xdn/core","version":"2.4.1-next-1598457160-54af56d6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598457160-54af56d6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wNl6iKbuBcV1tozRXRSYkAU9xmFyIqPxybTavN7rJcOEFxraPqk23zB+Z4ZrzEsM5BMQIVlqi+k3NUXeDPSUsQ==","shasum":"e06aeb76695931ffc070cc13c4556af3e0dcefa3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598457160-54af56d6.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRoWMCRA9TVsSAnZWagAA3YMP/3fxGiB6pyfLbn2isTsm\nM2a0NfWA8fMdMxzj7VUH3zX9V9a27lxqVUBgtJcevI4HqX3VwHC5PxA+XbN6\n4ZEyprFPXrBXk1pnh1nhJqV29T06RPukdLqN/OJMbkyQePwlAl5umozVGrz4\nSthTDkWh1Ay8XMFeNjitnOrKffFT/EFCIJpPtOkUUEciQ/ecXumdkVq47eX8\nC6tdHG+HpwLEQ9ey+ZJSJjOkCidz+AIpFApwUfVqu24/UkpBMAWy1TRhhjWT\nHqWv+5WWsCwB3eBQFe4oxhYgUhT3zWVsYs2/DDMMxQoVntIoFHpbyllkC9Q2\nV9E+ze+0LkEeL1F4HZGoZf6lsPn1AXYTc15EHivbrXuSXXj6Kh85bc79d+XI\n0AnWjj83CHHOZtWiq6A4FdDSgkWLZHu8v59xpCCAWq6xDOyUozBRuC0H682G\nT72ObDspaNF96QWl24RQZJiIGMV0+wXIf1KABW1SlF0fYFAiu6tUVsMLJFlW\nCCr+CkW/GXoQfst1aAuzmeypC0vcXkVHBKASJczAPEgRf1cmccLepAsniSTw\nH/YWWbmiy8bXgJ9ZbQf5ZqtyCVWmJ3OaFTmld0nA6kSx5n5h+EUxlLJm0aHH\nn6IBVwc59JKryNxYS7lEjKQa9iifO1n+GNZT+39zfL3zNjL9UCa5rBSMfkI5\nw9SL\r\n=XEPm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEKHtGiFDlpQQJy2r1iGsThspc0BT/SlnKUgWEZLDxZkAiEA7rWJo3DlajInK6s+IlMTgO+treXbzgDzcm1e2+oyAHo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598457160-54af56d6.0_1598457227639_0.3192776553047725"},"_hasShrinkwrap":false},"2.4.1-next-1598458310-d5007e4f.0":{"name":"@xdn/core","version":"2.4.1-next-1598458310-d5007e4f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598458310-d5007e4f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-536I4h8Cde1XTEVpIUwnbcy5J4zbKgpTwnNyv4z6R1nQ/tcqdEq0BdNfxgKgoxgqWn8yRoQ5ls2ggYR+SHzOVg==","shasum":"93bcabd0c16c803345070332150127f04c729208","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598458310-d5007e4f.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRopdCRA9TVsSAnZWagAAguMP/Ajn0TFrbB+FQnqVNPcB\nRrkbXPCm8PkUCgySE7A1bryc7LxxNCO7Xho5fq/ykNnbHNixCn84duFQ4AsR\n8oIP57QrsF6TJpNY39Ny6e8/VKS4n5YWpFAPKQWOVQSYb+5gx5CQUtSr8Aus\nZRTktBaXYllh0lXhtKSxjBU+H8lSTJYMY+ODJJnGP4EejNO5imWiACiTHjZe\nfhBjz7ORC0apGRosiPeq1sqqjRT67bcXCn7fnJpoISyyxI7bM182idiDbuBp\nAeclMHTrR+EJSjSAv444v0+6ztalXMF/qWnzy8RtQQnNc8vIbppFWMPlEyN9\nE8kNm2xLcshjUOlzyntet6pQvln/j7qmwAIhRLlDWkEAVWhBT/HQyt0jBdov\np+BdlReAmbksBuv+esYetH3977M569Cqc2cZy2cv/CYh+18tkIQ5/JHKFXou\nZwlH3RAuI8Tm0R2np54j+2ns9RzrCFq4TOmG19ENqEwi++l4CvWuKrL/B7Hh\n2mNjxoKKtT3DWkGlKk5nmybDrmQwkXL8Q+1/BXMC2eDFtNZXPHyfnBwQnz8p\nddUE/MKMbfXLElNzm4wySmHom/xkYKvij3qRZzdYjUGmEIRTMwPnX5qVrVyg\n5AEHplmf/Hv+X660fggz+YQubSYTN24jAOSpiTt2W9T8xU73QMkPpx1rStQL\nftSM\r\n=z4CX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID453HpF1cgGkB7akr5hEAuNusgSs5Q6H7CLn6JmeOexAiEAuKbhieDE1aIkXgdhmmcev8gG5sHKUafCSZz4fp4MA/0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598458310-d5007e4f.0_1598458460762_0.6754559612124744"},"_hasShrinkwrap":false},"2.4.1-next-1598459582-d5007e4f.0":{"name":"@xdn/core","version":"2.4.1-next-1598459582-d5007e4f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598459582-d5007e4f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bS3qfLDx3Kffc2i6YwSm63iTRu+L/nFBYmtepfb/86TKFULBKa+Bp3QghKuDD7+H8DA4/WD1ES/uPl7CEFFdNQ==","shasum":"ad05c13a8c6998de2cff3c17838363bbfede3068","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598459582-d5007e4f.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRo9DCRA9TVsSAnZWagAAnRMP/1sK3Nc++CImuw3wYz2I\nhMkN6Cu2yckmcIjRdRIi+utOYG2NPj8ElA90wOgKsR8fCxqGNBlrqS1HWqgp\n1gpVPKz9TOryboZlQxKGW07Lqusxruzt0BOhYN6Bpx3yD88c931G0AErEah7\n6qx+Ycx/ZS89f6UnEDs30fBkvGolRUYW8WtQlL5Xqkap07+jbV+UdxRg/RjX\ni4XiCdp/N9zDwZ4L/gGj9FyYLKRfHUZ6C7st1S5nZ5KKtvScWXpFLDvjHGeP\n0toVEgFJ1gCwARohVxWcKjMeTCwe8lfdGVV3AwYTHx51V0/LExEY3kvVv4Wv\nKWZX0lpWEHGdXaL6UlP8JR+hugc+rkj2BmKBysWu+FIqLIUow7TnwUlRvS14\nMunVoOghb2CS+w3D0N4i00nA9xR9nJ0IGC0D+XPEXgpl6qd2A4CY0b1hZibN\nIEtwjgOli2nvSAdyureZGR6nSkxt/N5Oy9TjjMzfUQIuCV5U/Z9snq94iXmW\nDjTKUZDaF/JYcnmG3LSlGw2MeTLE5/ezC1ZV7Z45hzr5SQwpL0nhmIFY9zHo\nXf0nj+85UPvyWT/5SK3kLznBG5dFDoOM+67ddSjhV7gxM6zEAuAMJVEo/OAI\nJAlULH4isWcBp3gsd3SM+coJtjPrdY7CUSjapVZcsvBCWyMUdsdWB77UhKO2\nf+IM\r\n=oSt6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDRLdDerXNyeoe9dmknG75E/NHbeoloG4uYp0pybPbqrAiEAqCF5QBWrU/pdXwd7NFFmlwIwXvDCYoTHO9UUXPRryKw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598459582-d5007e4f.0_1598459715254_0.670826744157137"},"_hasShrinkwrap":false},"2.4.1-next-1598460571-5866de05.0":{"name":"@xdn/core","version":"2.4.1-next-1598460571-5866de05.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598460571-5866de05.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-UHPzQJzoswAdK2zvBeiXomwzUSxLditmClG0mo94/lYZIMwK98aoxxEZ1YMr1w+dnlITM4kC5EzqVT2eExyBNw==","shasum":"aa8d2c470545fecff80c5dc699f368d632c40eca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598460571-5866de05.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRpMdCRA9TVsSAnZWagAAGj8P/1rwlB3nMgBcdEGjftov\njwg/iwBGPuudks5CzvIVy/K/c/NPKsK4urCpIBhXxQQdzBFUrhcKPMKLO53e\nzKVbXGJBHJkxqqC6509bIO9DBep7XrMNoVKCkXF9HELjzOthQ5mvFt0CuG16\ntimXa+rY77XSXiOpjngHtUJQDWxskABad2lVNDAStLMSrKQmEqXfJiho4AWG\nNius8TPDbNwLRQd3fxCEMKrzFbgBs7543oXYhPOLjXl3RQDCJ0saR7ezhNoj\nKpI+du5oJnblSh5BgtEnP5zjbkrGcSy8auxg2i78uZq5hLVsf1NTldT10Qvj\nwwy9ZF9EAAEytYq/T+EgeFiAWEK0EXI5Y912cYP7u20xX+PvGR6HHyQZvLlP\nelubiJcTVcvwqTExBd6n6YlRQ0hp13SR2YlS4R0bikf5CbujliRucxRE68B6\nP9+VbM7rABek0+ay4+qxWJlf7XVmzJ+HZgomqvLfs+X8IiAgpZXuJZGrnixU\nyUZxlvP/Jh3gBqhSFqY8Xf1otz1QqjziqPz65OdStIBK/IDVIZGI/tsZL/cF\nZYk8RcqNCPQZ6/SbiJ5eght2YriUlnQyUO1gYMOaqFeAOXC7WaRydYtRyKWq\n+qjDXGBgUbZxo73rvqvVq8bqpPIbBe1PQRcjf9X1d9MkoVwV4feWBfDrOLe/\nsLaY\r\n=G9Ly\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG1+1ANmHavgYFS72GCu0QEjbuQjouQG9lujklXFLvN2AiBeQgdKOoPduuBtd8FeZTeel4pzPBaN71i0oqo4o1TPHg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598460571-5866de05.0_1598460701232_0.16848510112993198"},"_hasShrinkwrap":false},"2.4.1-next-1598461028-5866de05.0":{"name":"@xdn/core","version":"2.4.1-next-1598461028-5866de05.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598461028-5866de05.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ly5AInoufsZGEUth8bLEpPoy/FIJzlhRsCzrwNHrO3IkWGZKNwSVco7ipynUjPcthVvL0hrdT142htMyjQ3dLw==","shasum":"7325b0f734994aece7955aa5f883cba5d01d7f94","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598461028-5866de05.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRpUOCRA9TVsSAnZWagAAj30P/08svqZcvTUKwOWP/Nvi\nrcjV7M2Bo+f8WrDwk4UbrAmRTRzoKSXYdz8L0Ad8EGh/Xzczamp+Eu5n+uyB\n4HZRpyS0K5uviaSkD8oCFu1vUmlxu3V1n6vNbog8YmX7VEnIc/L0yVRmtt/V\naA4/ND+HTt2Yx0e8OCls6m/iz+4UeYIJ3fj6SavuWshDw+1KGOWMtbPimaBZ\nWrKiFhxv7z/ONhxQY5WOaDnaEDl63ZJJfjX1w8US3A59SJQc1uQTqdT5Xmmk\n1DRUtmnYk8ylX1VmB6YT9em7Chprhy4Ihdp8Y57PTfiFGdXdmtA6tfcvBCsa\n/CIqkfn4qV7TRfNxCYLbHB9KfRVlHvlRejgL55x36B+9vnV6CLtdO5eEqXeC\n60KVIaGpBbY3UDuoblP3HhdX+C/TEovhmjGWwPb/CBO4ldO7LIGU2JZlm89/\n6z80T48MPe6C6dX7oeHZSXtwiPt56rR5639/WAcIAywdmQOw/3LS3YjQrpRo\nwLh+/gXfIel+Vi9geBbVJNdK0ZWSr5RppPSsB0ExcdoZAVe1J27i3uWk0XJh\nXsXTxll3DGohhC1u2WSi+2p2Y8Zy4tlQXz+GBO+UWXnyvWl+vFrlM2JCfaEl\n1qy14aFa00bj+5GMR5LKvDBYjXwtPqr6++XYP/GSyL7dy6lj5JboFIgsbgaY\nHO17\r\n=3I/k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAKgPS9mHuQdQIhxVdG92GmXsD/5J8VFsv1c+noCI9FQAiBIdnrD7lzS7YIMHpOSLwzSEilMf8GSqQ2b2nwDJpj7ig=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598461028-5866de05.0_1598461198119_0.1904499675208391"},"_hasShrinkwrap":false},"1.48.1":{"name":"@xdn/core","version":"1.48.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public --tag latest-v1","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.48.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eEFjqasyLbpmuY8aKfSWnsfgXDIM//bITF+USO+GSyyVVI24xhnrEDXbucRRBYqth+NdF4l0o+TjOGfgMlHPdA==","shasum":"ec88d79fd84a1787fe81bf329521f5e17fc6d283","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.48.1.tgz","fileCount":137,"unpackedSize":589977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRqQYCRA9TVsSAnZWagAASXIP/jNMwPKRNkX8NPuks2jo\njLh7No3oW1WQp2jTSBSsTnRaT6ygbmvXAeCzQk1zHkUD2Gkh6y1s2BFXnt5r\n+ie2EPUQEpTDvevHFLas/heKQ+mV/eYRt7qbJD8CxNyjtOL9u8ytMgqYRvhI\noUOsCzCC0ITPKNxafA1PAoBC3xQhr//Y57NRF5modWzZvkZexjFtFQdxN+Ez\n7MP7RArepbI2Mqa9V1n7r8EDqHcNbj3GtwAiUdW421WN3/Nv2HujkobWzHH1\nRmuINJP17VkE2N5v2hB7kDse+1Uiesb0m4SBV0reLubgvvxP7cdSe3jiyfCm\n/8uN5ZA4WMgmK1k7jx2aSuwS91qn3o7u4XuB76h+c3FUYi1Hb2j8P6QZlTms\nf64KrDy83ejwHZ0grzcPtbQJANLw0aI32vizdngG3gAnNA0YwjWoj/MSNCEQ\nPZ796c97H2HTXUrOhuE3DJzjWOonUhI/Kz17vi0YmWd7CQdd9GwvCGMGuSd6\ndSJwfLfC3Mi7wkqJgFnVYkqH6/jKfr0d3TnAiJeIgPsNR3WGPdswqTr7mTiO\nyTdbduijjrH6z+UkkFiyr4xN8my3SDiDwLNKodwQGOGYkPKnBa1GV7l8wUiO\nOZG/XSWScvELhiejpITvNQfOCDjcVQlQoYckFZGaR65wqRC+y8mQ2CYrONHY\npaA2\r\n=k/qw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpatcU8NO4jXOWqcwXVGHIZInMlggQwL3QQ0RsZBaOBgIgb74O8O7Ut1HIZnON8EjTXxxzMbPWUS8dJTYMCp5DDMc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.48.1_1598465048322_0.04031646034267178"},"_hasShrinkwrap":false},"1.48.2-next-1598464963-9ccf21d9.0":{"name":"@xdn/core","version":"1.48.2-next-1598464963-9ccf21d9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public --tag latest-v1","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.48.2-next-1598464963-9ccf21d9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-U1stW9C8Zww32vrvcLmOnzfSFzZUGdlAVxU6Vyf15tzTGroajcoq1RUVMoxrU5NXPZwcPcvdWtzst3Flo/LDCA==","shasum":"5f859f51c374fc2c4db513408cfe6c975aa15590","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.48.2-next-1598464963-9ccf21d9.0.tgz","fileCount":137,"unpackedSize":590031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRqYxCRA9TVsSAnZWagAALT0P/0C8xZUhd/LYFLnaUJEJ\nQ3YbGNmVsICf+bStCy0tmrfSmD89/+9riXLcc+WR8Fiy55ZmI/9Osbe0UIo+\ndVopsNSHF13gMEysO2jw+WLkg72ktpx3WHNChd13Mqfrug8874LSOiNLVnZP\nqd6lTC7B8ed9P0Di3757Wyh/MxR0Uuq8i1DIt9ChKYaCUKGvS0+8OUDsnd5r\nvdX8yuzSlnh88IpeT8kr2xL9gOdDTkWXxTBFaz5+p4LMFz3/nfjs3pxyHcdL\nunUGW0BbDCWMiTvdatW/OUh95VLOqCFpyD/MaroBper5yUzCijJeNjY6kEmf\nGka8RZOto4z8oF6NFxxaQEq18dlxntxR9NYB1NiElYv6cr0CTJxZG5kJERDJ\nItyBKIzrlHXrH7vMoprc0heCA0/P264kaxXzTpt8yh4ABrbERFsaH1wZvSOw\nBjOtIdMqrTy5ABg99dlqtxtjmmQ136NsguwMjAPjpzbdPoWoAlwBrKw/+0J3\noWVMe+F++rc4C9sRcUj7HSNALrHWecubxmhzTrNJt3PnVhXKYMuylMYqYfIZ\nM5jtwN83bMojHPhRodmAfD1odCpNVtcNLWX/Xsyk28UOO5EjZo188Elgzl8H\nlz2wtSCRUCBGGrfe4wOKEAOOtt8QuXmzI1GWF3U2nnZYulZoQvAtdS8ZXGx+\nLyxp\r\n=/GG8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG0c9GpJjSyMiJVUky3GlU5s3JKVjmpiqje8n5LQ+DqKAiAusZMfmVw7+0N3RTfDyWf+91eaomM07zQZEISi8xO37w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.48.2-next-1598464963-9ccf21d9.0_1598465584969_0.38901697637523047"},"_hasShrinkwrap":false},"2.4.2-next-1598466571-6412a60a.0":{"name":"@xdn/core","version":"2.4.2-next-1598466571-6412a60a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.2-next-1598466571-6412a60a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-RSd2xVwk+Ln2lVJSGxrWvDT0h3SwmDaup3DnIYmiwCWscHrMvlpD3VtuS+ePOS9INBl8UYo07Etq3IxRu2W0Zw==","shasum":"59a00db38ddca57c0807c157a470db9b5cf02f00","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.2-next-1598466571-6412a60a.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRqqPCRA9TVsSAnZWagAAQMIP/iLEvjGtqbopSS8Iv9BE\nOubpmDTS+Lh7Y5xgh0YnNtuskoVurT68yU2LZ+wiBAdpFpuc+3sd+38d0dXC\nq1B9nTDe5vhhmUzqzlRRosm8OtLRphv5DDXVyvz7SVxCokuCja8YHRtVoZfb\nft303osOuxOZ+m3wmUDSN/K9BiKgW2aj/PFFeZoIOgT+vZ8nEnVqe9R/IMtr\nn3CRg1UzPxqsmiyuB11WIZ22lYzYusjjvYB0SPbakM25hMqO2gZ7O/iZxbin\nCiI08fv4gGaM3IgHOwuVuiKM3KJ5iCf3DLBZ/vNfg+4RfwKwSRaszSLaH6Nx\nwi0rGFnDsku7yfjIosZbswE8m8Tx7qrl9fAFzxkHmf2S5BlyQSg2r12HWFvm\nvHTnPHJapcT3BCiYUcIskndO1H85vWNU5keVPu6wCXvhmriWLPELOsRtuMy9\ngm8Om+V7x1ZRW6Gqz7fj7tQ8IHI/JasElkAlSPzFWV1ehJqp7ZnYezwAV9G2\nCBvvcqAKGH6CJO6zBJ1s79ofvvG0R8hxXyytjs7tHVBkfHc1B7xnKFXm0GAY\nhf0d3OAV3/oMnxKiyVYo12o4mTSaCoyqui1LMYlOcapKVY/j4P9fkH7PV0Fo\nKxkx+b5c3Eh2tTv5oYsIjEXQNMOOmg265MjRG1gT707/Yy0jIhrivWhEdxeS\nAidq\r\n=F1rn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3QTtk+v5iPrCdl/EtuQsfyuXCHcW4UUix0KWEMbreHQIgUP5nnLpl80AM1Eo/aXmiCV/FB1GZPLpkERg2/bOtOmc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.2-next-1598466571-6412a60a.0_1598466702862_0.8749278941717962"},"_hasShrinkwrap":false},"2.4.2-next-1598468870-2c6fa743.0":{"name":"@xdn/core","version":"2.4.2-next-1598468870-2c6fa743.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.2-next-1598468870-2c6fa743.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SqWAgD1hQ+G3QhGuIrgvEpYf7TzMC9SUoDrPyLLLXXwoWAzdrsFsrelCa8JTiKyMe6G+u1nWWBzH7VSdsIJRVw==","shasum":"7a520433d85a213bc6f4e9a4ce54c1959799d6bd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.2-next-1598468870-2c6fa743.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRrOcCRA9TVsSAnZWagAAx5oQAKQPLud6mySED28giKHC\nG5mDEC/qAaKeY2VfL+giWHfuhOvqYbwMMDxYJ/XQrvCUvXgtQuTSX+hEXLc6\nZL/dfM8jaLOlfTk3Vaxv5vcy2WJXySwXo5+lI2xI+pFVQxJqrR4xN+du5+gG\n7fLjkiiYcLYXcT/vl2DON5yoUGtlOvyZGrcwOKiRQltA3g9h7HcM1gGhb3oF\nkMkTeXMq/Ri6T8v2PFfEpX69lUSlxOie1k4bgJQdRESVrP1zuh/J+or5tA4z\n2NTBrlE5XkcnRoCIrte8JkauwZ0UXNrl+AX/nLTQheGC3fAVzcLXHHurA27m\nWDeA3FFTWPNd5ocQsYzyj5tkzmGUm/023dAOC6gDHyLI/RxOTxkaz3ryuucU\nI98NmyXsQW3IUOIKeYx8RHY+hjQKz2F+eArguhmWOhiW/NKhwT7XGqQZ/If6\n4MF+4N7vDl/CEpup8WmjCYZF4qAZhpVBKmijRuDGAWNmpiEtBMlByia4BgMH\nXoSIJ4zulURDmaNRNYwpMm6lhc9I0pM2mDWHlBcIKIENRTAzBGx+YwvOl2rT\np22HN9HlHEI8U7y22YG6df0lKsBnVYOHjK3vLLFHxqKnCCJfIpia5ZGZupCx\nu7AWuVvh/9PktPNPVlFS45cVKhtoNaCPi6v/tkLf01XLZbagjTU7VhhqZl7m\nPiZh\r\n=P141\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDQNnM6JfrtVA6L8riuEzpYEJ2eV+Q/amKicdwMzqb8HAiEAvR41zj1zE3vb7RjBDvrVEYs7t20oXkE44PoK8B5NOaA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.2-next-1598468870-2c6fa743.0_1598469019935_0.062238523792973455"},"_hasShrinkwrap":false},"2.4.2-next-1598470440-3868a808.0":{"name":"@xdn/core","version":"2.4.2-next-1598470440-3868a808.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.2-next-1598470440-3868a808.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-utkNOvxWucEbT1d2a5+8fcmCwgP9LfVRxzFZbI5yJr7lMjVy2eDhlmyXlNthaXOfiB2Q+9rv2p40InPqXhDO+w==","shasum":"b00ecb5bbdc3aee88278a16bbd67d06ef8158b13","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.2-next-1598470440-3868a808.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRrmXCRA9TVsSAnZWagAAEuIP/j6oiUL9G62NKRVkrolD\nAByXZyuKQY279mRpTKZ5/0DndO1hY7EM8c5Ft6eHPP0TPbSXfXUjloD3RKO0\nwULx+3r2F3EGUbDoHNDasC/GPFKkfgO+GtFC9r0XslH75CGoaCmjEKkditX6\nKDC69rdeajxZLT0yXvpB8CQ4oYbmbgea1C7iUo1cljoU1RcPFBfrjOdQ9HVG\nTNnKdFspj/WIYM3sGddLJihjzZGskMyB08YVfevwUAHTvI8eoT6QaaX6mdXG\ngw4PSsKdXD4OtOz2fdo5BVg1rPTxjz61KIsoKobzz/lLkgWgV45OmRR3ih/s\ncIPzmp0LcsSPQkFM+Gvw+sro5C78XxcgqM65fhMpzYZ++9i5lo7BLbgiix6Y\nP/M2EFnaP+h3z8NnU1W3+r5U816Ssb5jRFrJLhKSNipPigbNwmXIl20v0d65\nAOWVMI2Q6TZOasY2WjUS3Ld+KiakNGgEOhYDTvnl+Auds1o+/a/R9s/OuzM+\nAIJ3XShmhO3YZgzp5SVBDpIbTvZUZbPi5I4FjhKczjBxhUKCDERWpXvWVHNU\nWrXoTT7K2g9p6d2vR0j8j98U5uVIyxgEX2fHes69nCb1bXF4pOAN7sE+kZdI\n1dob3LXqPCD6mWrTcRHuJGQ3ihkKxP6F3ug0NF+bmZ+vZuJfM+Dtqwz7FmAI\nFst4\r\n=mFZ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICwuFSgGdX48bSN/i39NPTBOKlv9oAXClRhv6P2NHuTqAiAkb1FK0umWPrUywmhVWNOCorrjbZEMzG2n24mi3XWOkw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.2-next-1598470440-3868a808.0_1598470551011_0.3392211296488148"},"_hasShrinkwrap":false},"2.4.2-next-1598470866-3868a808.0":{"name":"@xdn/core","version":"2.4.2-next-1598470866-3868a808.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.2-next-1598470866-3868a808.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nLcfBolgS4t9T2aJmCs3ILplUbPZEE4VrdG1yhxVWsTvzbGb58Nrch5B0qrnOCFDLOsfwSyVqj0wFQDde+ZfDw==","shasum":"412e94f8f42705b0fce92de94b114d2a577a29fd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.2-next-1598470866-3868a808.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRrtfCRA9TVsSAnZWagAA3wQP/RVMQ+4sA1cEC/TYbCBP\ncqamRmypnqrIUqlL1uFewDwgLTZFd8QRLKuMnZLVcX6KPdUbUFJFIQGTFOn6\nh7akiWCIMk34s4WD0x60KjV3kb/BOq+/TqnrSqDHlXjGZh4tf7j/QSOLoEJK\nmq9hsk6GIBWVgZpiq5ILxZhY6r9988AVaSznhLQrjHkgyZpxJZ5OqEbXwgMy\nYXxkUhdGpPVURVKf/yu+pY/ZXnr3VbcPHhd3htZTqcdetEgTVomoHhGw8n5k\nDcuIQbPt6COjq2DHvg/bjf8bdTA0GquOJwHHg66b5eDnS5f9en/LueiGKJ/s\nj/Cn03OnGCorFRuBt+fkoxZak115gZhT5mGDDfH3LXVy1DX23uPGEIqUD0Jk\nBDGSEDZAYmFbwcuU39ppMo3LAZgTnT3GKlQdy9dF7m2V6hWTq2Ix5Gdi4jKr\nWDuPpmV4h4jw2HAt4mofgA6BefrQpzM3pn5ix2aG7C0co+Ss4Zpa/kIjT0KG\njazMq3O0rAYOClE4bpnu14DbXIJnO9qhaT2tRDcJ1fiSooqrnqtLMm7tqOTr\njbaOj2HfVmqqEPqIDsvs+eFsbjP6X6kxd9oJ60q9VHhkYK1PVYLgiLgSCqak\nwgQuW+8/CEDV74nmwpMJEB3+ZPMc43ssv3AFm4OUYC4crITp8CGI6S2WToYg\n8qnM\r\n=bv5s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBx37GIPo7IiH9M1k4FPgHESaLIjeOZCFK6JJcitIEFmAiAOTmbpI1QdtfHi29iFQ/vWHmmhWDuxEQDJCh1un/4mFA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.2-next-1598470866-3868a808.0_1598471007058_0.3564624569723074"},"_hasShrinkwrap":false},"2.4.1":{"name":"@xdn/core","version":"2.4.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xQ+htguOELD/CwzQNHtv5YcDmXXxrxNtwqG3Y0j9U2ZGGH/JtJmdb5SPMFBnQkGjoTvavuUVUDX3gZDm6sbaRQ==","shasum":"484c6cb7c5459ec125defb9f8b758376531ea509","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1.tgz","fileCount":135,"unpackedSize":601489,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRr+LCRA9TVsSAnZWagAAsZIQAJtLhoHjpIjcZf/Hc0cX\nYF/cswaKB4gR+ntkZVHjag/ifs8uRciIa5ZRZ1JYgP5uYHmpGM7BNFgv0bDL\nZqKyQyKy5XCZ8PEHGnVDLoTGv8iNUqaNLejQjmDfFxzVGZNy/CH2klhxEHS6\n+Jt2utiuAURfsKK846G4iNAdQDDtZ1+y1WtQbDW/dkgJ/2ObSR39VdA8XL8s\nvQFBpdrl8TG86nhKDilEUeItgfnQphZeIFDoQt6/30MnMg+Zx75A6RU6crqD\n8e3Ffj7F4fB6Hl2cscewThyCD0OlJC+DG9vI3FUlAHbCL4U4XHNXVH26BnEE\neyf5tqmfZYaFBmXGhDVNnZfbMZX27zy9ijVcEXzZQzAYCyteGsZNzV00sLW/\na6RdXUpdX/gOK3DWmFIdR0z7WbsGxMcCXKAZxzM32M08mXTR4zN6ve7M4OMO\nK9b3nQMXUpnIoPidFwEEa2hoQ4J6ocryIO2XqVRIWN8om9wrCat2czuAOeg8\nXoq16Sp/e8rk5BcJWH91OiwVo63pVgbPq1z/6TxGMdoG9Zl2h9Bh+1RmkjLO\nrT2UOx7oIUQiUSg4uo/qP/Es+K/w6MFlDdccMVLGhGRk05ipqsHo9B5UedBz\nVj1b5RD4c63kugQKwBFbtx3zzAjjEQzGJdrtYHkkNMWGAHHDyiEf/RC1qjIN\nk0z1\r\n=ux81\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9+87+j8AN8FwkLAQyPabIuUKg+1sQ47awhhaqjAow0wIhAMPsGXcvfSEPUzYDZJJp07vS7b+N3wyMlST23c7j9WqV"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1_1598472074762_0.5664355015460782"},"_hasShrinkwrap":false},"2.4.2-next-1598472235-0252eb44.0":{"name":"@xdn/core","version":"2.4.2-next-1598472235-0252eb44.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.2-next-1598472235-0252eb44.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PdHzioe03t9uPjl6+Yq0+UHnSuNkVmk8zWOJWHeCl0YYrGGh/t6Nr2KRsMEv9oXOqhcq63W6O9J4EXWPJMHNWA==","shasum":"1e02808077a08696ca27f148cfc87694defe3494","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.2-next-1598472235-0252eb44.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRsC5CRA9TVsSAnZWagAA4pwQAInvKgtO4yaH3MF0FU00\nvN4AGskNBVrbszw0Ea5gSd9iak9Ebq8MGaztwOWFEZe2o/vN7cQCZ+DHJq8n\no4BZ9Mzo+MmtuxK/ZIKutCI5lihZ9Hg5sXZwWJI3rDBKsdYnHqaQ0NIMNJzb\nzMUH3d1x0dmLeAb/5ddR1wZJGbhnYOrRf2/qykLP4lYAkTdKHdUX+SZrqOuQ\nuKvV4SSoVa/fMwLNtID2czgPHgfiqCashhE8F6QGUI+9qKkEilNyLLOLkG89\nPPLfz2w5Ol3frFUu6ntjFluDZGl4XIgexKrnnpMlUA1KbMt6+sSZAO4V/CFV\nLI75MrWEYDrpw3q5Myy74uGjs9d5unkOdaS0CXnEwtz38DSnyx7doakWGZAK\n8qJxRv+XAQC8o1hYH5HsGvaouymKFD9XkO8WP5zRZOAkMKv5JDDHuEc6Y9v7\nwx0MpL1i5ISNXEm1qbcgnD4qxANxpusCpG5uf87qizjYKyx6NAVw0zA8jgPy\nCkwV2xwBnBh0uG7eH3KrSzCCwHu4Ygrq/kOyWNSsZMANFX58gO9IBvHWaTuN\neIxnQjQdc70JwdMsz2Z+XDLZA07bYphJfLJm6AWFQ5ZQWm63C24h2illc9MZ\nnovgE6YcoaWAEoiZ2X3WDiUJrf4YYoi+s4rhC3iMHoiVvZ8qpUI162HZWwIX\nRnmx\r\n=2Kjd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyLR5jite+GP3wHM0vDVZYCuNFq0gxt813EsFNeff38gIhAMW6i84Hi5p9h4KMdL1jmdH9Ay6laWVBW5fL/+u+RB1i"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.2-next-1598472235-0252eb44.0_1598472377159_0.37505541929647124"},"_hasShrinkwrap":false},"2.4.2-next-1598473779-b4730947.0":{"name":"@xdn/core","version":"2.4.2-next-1598473779-b4730947.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.2-next-1598473779-b4730947.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yFsn13g5m8FvSq0W9JNsJcXn+oIbfGpKq9c0xaYLFRM/IjhVQjspXnGR45VfEXZDb+2Qnmcr3Yl3rKSB7bekOw==","shasum":"7c73efb44ff0b2beb3ef6a7ac3681512bdf60207","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.2-next-1598473779-b4730947.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRsbECRA9TVsSAnZWagAARM8P/R6Zu1eoSI8MMuchdwkd\nNImxkI0J4WpbJXnxuExJgh4TJgMT/NJUMfbED1w+RL/ELeJLl8nQM6PGMjKG\nx0THSoZf8HmygwRCL38zFbEh/jIplO/twwtCtq49jNYMhqGUO/6DXr9nM+Qs\n6rsim2ixAvfg73OM6t8elTbmW7/WxJGdF2eO3jLdXaut3/tmd3ITFekT4Ss6\nd+vfJCu+0m+mExpXazAHEiQFTznRMdxUcPzodvVvk476EBYkBYzNtHaYTFzK\ngX5AXzB22CCy8RHFxKVFoMhBu4BKUcShziv8kGpIZw9LFjyRvR5Go8JQZqan\n5ZAC6Gqj3+sNMspfAUZwkeSlG4SrJSgRNkE3wjOa2gScWmnsv2brqmuwgkky\nSQuTg5Bohk0v1Hp6jdsCEtp159lrYTU7e1bhBlOgjNebogkyKrquxrjkAahE\nIuFC9dWN8vFgBhxFCLVS2u3RpZCzFexdIhwG+tCcyXQ9m/fPnLEcazTJxlf4\nF2eLczLJs2LkQgpD3eXORwoSz9psKXM7XVV6Af4ddoWhS4o7aKXTtpoDb67W\nkfQWZPgx2dn9BzEnMzeWFm4NxHh7FIf+1MCfWAqfcWuzik2uE1UPrZ+mXs63\ntPNJ7Vzs6UzVvNX+PIXWKMF6l/znyiTeKDPAh+q8DVhwh4fgYX2Rdik0C0Ga\nZdm2\r\n=Zzml\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA1NE52bAaXDCf2snM3oLJFb1neGx5EzrVPNWu+qeXYbAiEA4siyTzh5wmKQwwvOcOObtOqVrGbamMl0dPQaqB/9FEo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.2-next-1598473779-b4730947.0_1598473923459_0.3298561140739322"},"_hasShrinkwrap":false},"2.4.3-next-1598477257-f4f93890.0":{"name":"@xdn/core","version":"2.4.3-next-1598477257-f4f93890.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598477257-f4f93890.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-klkP+FtmBJpTBp3oRvG7wL9jEVMjyYl2rb+jnScTqzvmxBDLFM+vvfxZFTT/tm3GU21RS4wMcfyCSNfwfdXcvQ==","shasum":"6638f8087742f034d37068a6ba8bb0fec70edfea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598477257-f4f93890.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRtRPCRA9TVsSAnZWagAAhroP/i5FChhxVv0EQ9/tuqpR\nwPhu+CnvXBuPKxWHzfHV6OHfhjiCK6O417oUHpAdjO/xZfz7Kymg27cMggGg\ns6UTXrKgJxcb/LZ+SL0bdd8BWlGaQy1n8e1lqZ5iY3h8K0+WfE4Hm+9SVLai\nUjzC3HctwI0AQ+/53gl03tAXpMlXtANleVU63VllUVNC98rLru0Qa+pEgcxh\nTYqaV4fBW4U3onHGanL2VJPqdwsMbMJe7wWxnQ8Aji7MvfMUj0q3v/lvFrdE\n8yKsNvG4AeQjRyIguzt6blRIzm4VrpbikacwkT1fEWtXl/hN1ZbYy43gnCZ3\ncZzbQ0bUUF2uSsuT/+OmqED7rdw/gqcc3WAMKcqhjqukDZ13BV2Kd1BCQut7\np2cXSVUVzz8nhXtfcNM2+TmmZ+1ToVnJlwFdYxNz1jbHfsWFO9Bd2D6gqGAz\ntd1+xg+9JDnaaxr9SWAHxZAf1NK+pHI668TaSXCUZsw4dylJ/eyNMFpyPLVI\no2TzySwT9wRPchmboBn1sd+73Xm5NO5nLruajWvvSK62p5gfYnnf4dAgx5WA\nXvanDHk3p9CnG0ZBz3oXg/m0nBmRlqB9PxfD317UPN86iXeWUdKeh5JxkoVQ\n66wbWsVBFeOc+LAo5IKf6KA82xXb55pJt60gvrnUm3PnRbS9OGC+hnmigkBd\nQ0Zs\r\n=B9ss\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxqrdjTySvZ5B0PqsZrk57vPFcVK3P39nKds10OodFvAIhAMAiwQyqFE9p8WK+4mmapfGO6CBuxKqmKlRnVy+q/Z4D"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598477257-f4f93890.0_1598477391064_0.5272936575982743"},"_hasShrinkwrap":false},"2.4.3-next-1598478068-f4f93890.0":{"name":"@xdn/core","version":"2.4.3-next-1598478068-f4f93890.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598478068-f4f93890.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PndPZFIfjWsflGgKCyFEbE4ZNreO+Tl9GCITVZVjzh67nv2+lrgwFpblEGezZbHmqgyzYE78L8dI0U+98BsJhA==","shasum":"a5a6adf3f56b75f04c8f5f6807144890dd3257ae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598478068-f4f93890.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRtdyCRA9TVsSAnZWagAAJKUP/1YyRYiKmwmsTgCnzIP/\n7GjUhwKTLqKRJyTOkrpJdewNCKXmNxUoXT7Og1x7c4NOFqtr0RDDe0hr++Bu\noqY0ySZaLwHbjvtPZ8SaWrvbsENRebCb4kaReRpvWls/wxXihrDryjyhPEtV\nDottObGCX7QCCVheDJ8EDHXxHyiLM+rsPgk/LoqUrz+YZ2gbiulyT41UpoRo\nMqkeBytu12Ej0sRJ81ijVkX8Qwe4dr2nVqBmfztlvikeW9OwvrgQJd2N68Gm\nLO6GVcs7ulRzCfOe8x1N2oU+chHbhmDTmQJzQJa23kH4xoqI7MhXQHzW+bsg\nWgiM48wvk2nFFKV/RgUbc5xfcSBGEydFB01PKuT7qxsFnz7gtBSABejzyb8c\nfhsIjvzCoLXXe7sFJzmeDdxfpx4N6qEzhb3XN9+uSPt9inQ5kDZzlKXlOeVH\nsID7+GJCCU6/LchFXrj9w4G2g41vPCT485gXEREyj3C5LbvxcSxar7JrkP1l\ngARwKSb2Bb1ZLv05rJdJQt0NR+aQn7Wfj4effxPe1yKOA+1ug3hAbCHhwHUV\ng5JJ71SlyQnHeKYd0hrkFatbBFMrlUAUNfK3wd/bp2vg6i4qEJLnBhTpY85c\ng5OMTd5i/nxqtAxwrXAuHNdVxRmDSd2wu6rQ8u6bgfLiWaGE/uCWSbLp1cGu\n+PbY\r\n=8hzM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZ6nokJEYYa8NlbaFIA6SFEqYhazat5u2ZheDTQzrZIgIgP+d63Y6uvNKPUjBJ6IdMuLSZ/qobIKKrFecz+/tvvMw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598478068-f4f93890.0_1598478194531_0.885801163524335"},"_hasShrinkwrap":false},"2.4.2":{"name":"@xdn/core","version":"2.4.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.2","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wpP73f59hW3HLaKibhMwwcYBtChqVRd06FM5cYrCHO4uRhKD5sysMZVhsBHKa1oWhaS6/dyZctgBwf/znURHEQ==","shasum":"19ed73df3246e18e9de7f7e40978faa0e6f1abc6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.2.tgz","fileCount":135,"unpackedSize":601489,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRuVxCRA9TVsSAnZWagAA5GoP/2uk2HHaDGL0otS6JoHL\nA22LtOBcpb2Z5CgSPz7fgqFkxrF54QZVO+1YOBx0J/Z2yeDGrGV0xa2Df2KR\nXJzrqj6XjpT0wzOmvPdvI/KypJnB1P3zJjwHmV7QuOtJsjAQISuVjgxjhLZF\nPMORo3rBQgFPK0MIT66iz+Mx+XmQBMgi28y2SOzGEYQcELqpoxCZqVdWOrVA\n77eCZRhO6pw69wb3saVHGJBhNUly+p49IOEtP1bu+VxNXPoEGS+WB59R4MWw\nF6yKJBouzjlaSodgBAzkktsVynRb5cpNuvQsX2b6t8auDwPCA3376q9nv7tI\n3KII3ay03miGlrcmxRoUNPzviLWRjKu5iVzmo05XbccIBgXQZFOE/6rpYrzE\nDHOrmEDOShYVjaJooTwjRoKmSz8XO82D96xDeTxAn3D30Gp4rR6qPv/vJ6zx\n8ghjEJA+nlxOvqj2MOCd83x4Yb8dLcpABPax9dLiUOq8yaVAKGQAadq+g/Nz\ntvrqhOSU9+o0PwBKSKrvJykhuv4DWhT54Js+qxvD9BFu9Np/jqLhtihOti57\nh/CRGxW2j6qaFyfj5sL3yrDGDhye4lZkb3NKHmn/r1VYx95euVHlTC7oM25n\naei7lxH7hGasvpoNxikAZufR6EyQDujJi7133H61iIufZURarqZzIU9YNs4q\nhxZj\r\n=4uCU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFqjcc8xRJnH2ewXj+QrsSL7Ok1IkhDNt5Ni1How8Qw/AiA1OzbDbN/KbDtZuFnVo+U9/L8Q6oybfQdfHS8oGCudFQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.2_1598481777010_0.8026758572930919"},"_hasShrinkwrap":false},"2.4.1-next-1598513578-54af56d6.0":{"name":"@xdn/core","version":"2.4.1-next-1598513578-54af56d6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598513578-54af56d6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-LZATrh8G6PNDzL836j/E88rk/0/FafqODiWckgqdyxKkgLooYjBg1x8soXh9fi6Q1Dq4UK3m0hFAwpVy/24RSg==","shasum":"97a5fea7309f415c0b3a0eb702c1ad783288d2aa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598513578-54af56d6.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR2H/CRA9TVsSAnZWagAAj6kP/0t/y1yJdTpY1npwmHue\ntkzso5vnBfMDfEILzUKBpQziTVn7sQ3ybY6UzHc2PzqnWgupfKfRxsxbnC47\nrDtYG/5d97V8R5HYGzbMyly2srtCvpvDCQBoq3ZRLS8ErlgIvorpHJf9CEYm\nkbD3Vrb4KLaVrDdA+wXfQekuKF8pNJ4wRP+tVDs+eUCGMMPNeoGI5X54C+u5\ncv9BRLGcj05+r1nn1An/6OPG1ENmsZk3QPykFxEinMITE7PQTC4dup9OGiQM\ncxfS63I0lSFJs7Qg8n4Lyy7pxVXR8KcARAq0B7u9g3UzZiHasFlyA1DLguPj\nfqpAC1g6SE/ggd9pD7vkapTnssesCa+zSYyJSCiE9d6kahBGC0h3UzrC6n0U\nKvsR3fO527AsjyNE8PC5Xxd86qocPZ5Da1fvGSsOlmMv/wq5IfwwuYB2VQAq\n4MgOeQuDaMJJ4k5nRENzpbskLTXQPVwcda2ND1e7Xr28WSkS/R1JTfkH13RL\nKi7gosP/+NEjLndD8W5G9wlReCsGITQ9OoZW2wsBrZw4nhJzNIiiOH9sSj3x\nAdZW/C9Yuo3OZ+g+RnaekfVwslZvfMDRwR4m7IbrG6ghrtLddEIPHRaM6v4S\nLz96CJsWSbag4gDeTsqNEjgfLwhjknvp+jr07glnURcV1mTL079cg0PRgEuf\n8PZO\r\n=GNTC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB6/7AY5OzIKtkwrHVS/wCggfC9PfPPVPRtt256CXozeAiBRbVC64sp9/AwHRzzax2pVg7Lhzjg51iFZOHkrzIAaIg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598513578-54af56d6.0_1598513662577_0.47075933469861364"},"_hasShrinkwrap":false},"2.4.3-next-1598517629-b5f1f466.0":{"name":"@xdn/core","version":"2.4.3-next-1598517629-b5f1f466.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598517629-b5f1f466.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dX1uHaNFJuO3BxoG21Pp7NP8d2fXiRq8Q6P5yc9MfOwIGSqWKHUY64iYh46tws3cvgnbx3S54R5QGAMmQM8sLA==","shasum":"550a6bd827af077ea991a1a4a0df6dd27ec752f6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598517629-b5f1f466.0.tgz","fileCount":135,"unpackedSize":602605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR3IGCRA9TVsSAnZWagAAyvYP/096wiATDmUIOLCObbeN\neUUI5DhAx2Tdy7u8A47/53eYys4zt9X8oB9mQZn1rosdzZf/hoRtCzviXAkV\nSsC6OWYQQnU6Uj320IO68BcBUtB8C/OEVN7LAWTmK0kk+NvnGv1nk5T7CoI/\nAbf9EYPEyxrx4yTcqQP4GPQ2tOXtNc+XXXyra1UZaCvtuBn34RXjZcdFnhDC\n/wE55VCChKtMd87cwSmQ6XU4CY7koISGRNieQyuKvS49/IDybrfARk0/6ukg\nBaZ8Sik3FsHTv4imhl23V/sEMGP15EcSb/ZK81vTit9bfDhY0wn3a8f8IE2Z\ntG4NpRHsCm+Njhkwd5gXtZhfakV/18o0O1Mb9T6vbnWvPAxWlG3hpNhrbiMA\nCjeOYb3TnlDP9D5qC0j7eMPHbzVuQ0I8qKGV/w65Uk/H1vqzFZZZmvCs/AUz\ng50RDkNmNq/dPmz8q1ck708lyq7jsI98zg721JcR6OhFCEmJ1A/vlQ2JtY7O\n56TtN5UjFpXy9HqpCS8yOwPqvYoHmbt+O4KI1eO8fVSFr8RveekCxOXHEl8a\nhD+5xQLsZsixk1b9WxqYkyNrdcKu0/sMKKW/IqNkx+grGtg496xi6gnOnFlb\nc0KCHzyk04xgCxl3mXrpra0FwDz7rFVw4DFGJp3Igl5j+S6ORmVkCCKJD97O\n6eYx\r\n=k+fG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHrTc1Wg3N9es9CESDFbiCXb9+Kt5JljVq4vr7L7uX1VAiEAyM/gXZYMCZpGpVcfJ1eqmjv8ykdC5WdsaZ/d7c1hsX8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598517629-b5f1f466.0_1598517765644_0.0861279367708212"},"_hasShrinkwrap":false},"2.4.3-next-1598519508-3c25dad5.0":{"name":"@xdn/core","version":"2.4.3-next-1598519508-3c25dad5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598519508-3c25dad5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vRDWr7/IhEFb9IOVWYmvKZueSp3MJFeiY4MRLAygfY60GnYuU1Mc10ANfmdhgfhs9pVtRNnWW0QfVgdSHf5n6w==","shasum":"7b50cdae2cac161cb6379e16903ed106b8d6611f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598519508-3c25dad5.0.tgz","fileCount":135,"unpackedSize":604445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR3lYCRA9TVsSAnZWagAAi4AP/0dZw/MaNZoSklGteo8T\nzl0lwwk+gl20SxBskpZi9EVbWCIfem/rIOqftNY+/nw2x/apaK3i45wAuQhv\nI7UIg7z/xnAU0iTy906n3VEOo07nTjJpSex49ekN6ECP/EdjvAIhQiVuHQzm\n2keSL2Au0Rl7PcUaVWFyELOy+qZCQj1ToR5bKRFwqnEAX++SYGsgffr2jQ4p\nuzI5YHZAZkXIHlQ/tWXAxdm7FRhUxB+YiWJC6xuNdpml8uNZ1Dct7fuFRPFn\np6zDbJdbD3XYcYU5693Q9fvJWJYXN0bhYZDFv3X6xUuJ0U4qzkonnHe3wIhO\nIlCRKWcgR3CW5Ksq9DukQw0BsGSOZPxYDznTC7yR1ioCmBX5Vod9ed8AFuL/\n/H3suQLZYFsISxa1sNDTvKgfK27pDgoJ57Ou2EShfI+X6wQ2Y4Anzca2SI1a\nuQurXJ9/HP1gBwf7Mjc8TWHdgXUGGcNTXQqZzRroL6w9EASoLebrBdLw4m61\nTP/GMKapxWyK42V5pnRysxDnsKcD9BhgLcGada0m4n4bKbt9U6/8l7mlPR3o\nmmc5X2+zgUgCs0oztFtZ4Wr1rzzbYGK4NexJMYOx3skP5SZNZrWZV5RzOyua\nMUHRejq2Tcu4MXdGT370GYcQRd9L2gqxVw0gCRPVot2Mg08ugS4j1M/9KA0X\n3GAP\r\n=d8A/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWn8AzvhKyqdLVZXCq0n4taS2v936ojLA1xwost+i3xAIhANkJfcOvbHlfrsuVHs4PFaolDzFFOrwHCSk6QWuTFJdF"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598519508-3c25dad5.0_1598519639545_0.3392005574919954"},"_hasShrinkwrap":false},"2.4.3-next-1598519803-2b4f860a.0":{"name":"@xdn/core","version":"2.4.3-next-1598519803-2b4f860a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598519803-2b4f860a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-TDzcePgwPkb3EekgXCUAHox9vvEwyndLYwfdr95mNak26UETw0U4k3DZaiB1hu/AtheThkX3h6bbhVVZQ8l8Lw==","shasum":"5ab1efc91493270f78e8d737f9930bec200567f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598519803-2b4f860a.0.tgz","fileCount":135,"unpackedSize":602959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR3qACRA9TVsSAnZWagAAw1EP/1aNMvf3yIwS9Ohi2mtp\nlvMchlA2rbUhhijTfskv2s4ZRyw0RFvAMHva3aTMTTDev57pSwL/jpNhe12O\ntbWH6la+FCYamVe+yY+Cp4Pwh1R8BbAksmGKnG1bXcm0rITbAwmz4Xuw4OV+\ner9rE6qS6Rc8ATPt7rYMclExhRCMc8VbjON/Ipez5r8fhr5Gk20id0x0104X\nBy4rjF7KkNxJPTxF080YYsahe2UA+s9Cd/75JEyk7DuWDV/Vp3y5KxfviTgI\nZES8ThCEFGEJwwtKdTvSpCTKNyCa+j7k0NTD3/epQ9PaABCX1qmbIPI6aSMq\nNep6ywcRQW+sEerZddh3cUEWQV9r4yzlO1BD7FYkwQob8fxCw8jR8lINZMkP\nDJbnfQ2qIelON5xfzHe+4U97sPob2l1ZVNfTEqCQfioMvLK2nz7GE9B6Xxwj\noJzgeL+DrVYc7VezOj9m4Ys4GHEYUJSil+9nyjh3n5RUeq+sGo5qh0YXlXMP\n35VTQ812hGjaJsdkcca5ZOboYiui9/U2FrkqewuSxYI8rbjZABovoJP/MVl6\nK92TtudPI5dl3zoofHChEeaWgyJDc4sFMU8ugJ654WnvIz4DjMXGXvUopEQg\nMzFi2pIbtPfN4efwykjpLI5uFpd1FADDmkt358kiTZbD5pqUGRNmL77jte6O\nU0lr\r\n=LTjq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAuw0kdwxDQBqbvOortkz4yo6KgpS9W2S0FsS8q/KaZLAiBI4BldLQBSlgGLfS9zfXjQuI0XCw2gfucT1QbF6GZGSw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598519803-2b4f860a.0_1598519935810_0.18580276934410267"},"_hasShrinkwrap":false},"2.4.3-next-1598519988-9b78c838.0":{"name":"@xdn/core","version":"2.4.3-next-1598519988-9b78c838.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598519988-9b78c838.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-D5hCZAX5TxafC48JbrLYIfXNkvYdyJYdMMMZ8YzAf46YHj4l4gnJUUBQuce3dDPkFuatJa2oKC5fRF8Hny05hQ==","shasum":"1c79212a76096bc2ea09c0c04bd295c29a16a6a0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598519988-9b78c838.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR3r8CRA9TVsSAnZWagAA2ZIP/39QWsMS13O4vYPHuqyP\nG9DsqO23yaH+oW6R/jNGQ1ckLZnO5J/H0ty1CpEoX/cfkPNm1+Cq9QgD3bZD\n/PuQwXjE12gwvWMLOCvWPu/3iQj5PL0KcIZsu3X+eWmjchL7UEhMC2eGD7A6\n3i2pBg413XKUDCzDczXKYiuzGJBvku7yxzuFrf2zskHDfBLriGjfVMlh4AzC\n2E+vTKlLQtRA9uMib/8GmoGGadcO71nX3ugzGmXW9PVP4lMsiTNHhlA1qjxR\ni6iHhKfPnRTeBNyaTRyD71rGlTgDu51WTQTMDxmV9IFQJF2RC5KPLiASVoIH\nVXBIK/eAd3XWtCJ8aQj49O10AFnJLP6U7quq16jhYEdeuL1abBnouLU7Bk0m\nAhELQD8d7dMNuuSYCfPetcI0YMRGqsxdEM8gHqzB0mwgnlABd3mrBwDsbuqp\n7vmphk6dKlME/bI0+GB55K0xHb9Sdo0FsUwNA7W6gWDVz8xM/i7MSaUt+Cxl\niLksKv10LKTi/N4SHS690W3QanK8deJFcDeEWoOxRE3aS9+M8AT86aZjcXsZ\nuaF0qrHJ/uhbtFSvzMhPdNBBz69CQc6VQhS6J6RUdF2ocSqKZRfxWyYb5h3S\nDso1o7kUtOc7qg52lukXJyD6i1agtFwX+GtxkejMH8xTALWKZ+qQGK9I9f5N\nwA+O\r\n=Ehsp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxircLg9YrD9c7KZiuhgj1lxPPg7ZQ11QirCkygxK+mAiEAssoFx2fes4vxVIckGla2akQLMqyOUkLjXFcA11bJ/Do="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598519988-9b78c838.0_1598520059695_0.7112351648804207"},"_hasShrinkwrap":false},"2.4.3-next-1598521092-55cfff36.0":{"name":"@xdn/core","version":"2.4.3-next-1598521092-55cfff36.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598521092-55cfff36.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5goshF0FfJfpIoVziZGLX0JeKK62Fm+ED6li9rIVuj015YVtqLxIU9moCqnF6vZMPfb5SeK9UpZEBblago/NOg==","shasum":"3e02e03b50f37b4a32f9cb83f421821eea264863","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598521092-55cfff36.0.tgz","fileCount":135,"unpackedSize":607696,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR3+XCRA9TVsSAnZWagAAS1IP/jBqpBEtSKGPl5sH899D\n1CE/iSjRrDe8iQvD075JfNd+ygUEE87keNOxKgsvfFI3AaE+4K6+T+claS0i\nmgSMepwlC77Evrpsueb84LT18tgAJtYGahsJ0/9D+J1+7cir7e2HWOarOLDo\nCfFz3ZmkWKVS2JXCh+WRrDxaaTp1ogLTot3sIZFM1T0ZU2QxeQ8LMETv8p35\nC6VWVXxLU/s3DRFb9d4Yz/lzoXbp3ryh21z5vytbToeMuh7OwxzJu+l6sbDQ\nIam0j6OwdwkFOb6I43lfzzcsLZPQPdauyWTV/erRoEYUFuLPGS5CCL6A2Xhn\nqz2cunksSGo4VUThUy7B3C4clGnz963yFchhX3MZRTexGB1K3EkaDZOqBdAj\nrCxNv/48HNYDp+zSmqci59P4S2Pj5aYsD0O7o+/QMkXSSpOlhr7TGCoFarTk\nT+b54c7BF1IjbCs7lX+HePhVpW+zjaX93B8d8v9oj1fKfWqXi3B4gr79o+FZ\nLemRaIQm8pPGXPHiZL1onIC6byvYQrLedAU0V3a2Dz6rFATzsBnbMnjv3X7S\nBOMfvBFJpf+KcCJrHKzXhSLGMODug8cG3SyNLCvHdWBu0G+aV8nPnRJdJTvZ\ngBzxGwP3rKeEmCY4+t0aDnMZKIOKkH8BpQ6WBtJ4P2V6i3LTq/xGUt1EZL93\nUo1l\r\n=LXbG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4LylPFgjl7nFcPs95Nc8vNeJFaZarLZ0RpI8JI9eVtwIhAO3UqmDgsTFeg88EDHsAzO1dTAOn90Gys5H8pmjki19B"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598521092-55cfff36.0_1598521237401_0.39263131019599795"},"_hasShrinkwrap":false},"2.4.3-next-1598521775-9b75a122.0":{"name":"@xdn/core","version":"2.4.3-next-1598521775-9b75a122.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598521775-9b75a122.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tkR/g+pIqTEyqqQzYSuZI/1qE8yosH4NSCO6skEeFHNBan0Gj1v1asCMhzBc+cSnP5CXUCU4xEWQD3JLaLp4dQ==","shasum":"fc45bf04917cf71544050cb5389422f0bec65cfc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598521775-9b75a122.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR4IDCRA9TVsSAnZWagAA/rsQAIp/vo8yR9KJcxNjPtsi\n+0N7KhDimZbvw9mrmNtE1sPX3cURsU2JxrXOMV7PhMBO8Xa9WbmNoO5orG+3\nt8xYqYawzC5PcLgM+HNgXp4mFeLbWGRB++aBqZbxggmID5Y77UeZLRqjTZtQ\nq+dNB98VP1gFlqSoa2WzQ5BZUq/U2nvT356n30XgaebqNMXH87woLo7TAV+3\n1hiMX+E242LCA2oN1QNCTFuhbUtdKqhRNt3nRpSMSe9g9DMf9hH8UdB1wU8h\n2xXX3RV9Im0dAqHSX8MVaCh4TCQJyfTElmwgeWydczaXeDurIAFrQ1jcGzQw\nBAJ5H/rHU9wnrPURPayajCAQqy/HJy9irMbYii/mzArB4Jow8F7sFCGtxg8S\nPgXYgTTF9Tz0vV+fZDghjvyI6TAcU+Ll7xmQ0Z0yguraKpkWR9LloYsXNv7d\nYgnuMrvf9joR7nTGlRHpOrZ9RGMRCUyMwbEH8POyNM1+dK9Y8jPyoE5m1jAT\n0ldsNasuRqanHy3mBsosaIjSSZMnfW1nZFIbdMEom5Gb2UOS7FCPH8IDRCik\neAysEmBaY9+Y79BsDpf9XaE2kcXyoTOx6h5vQA3qJ3bTIKwWiADqem0Y62Ft\nu713wv8Jzx9lAm7QRsXUIQLA2cT99bPy0Ea4w7ZBi43FTV79BiYcm9luDJPO\n52Kx\r\n=Jj+m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEdV4MvfTpaGEgTmPyIWDw3AK4d1DhTlhqevpynG3nnhAiEAr1rIXuGND1AANME0O5ktVf4vqIlAIRmr0O7dnqcZft8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598521775-9b75a122.0_1598521859151_0.10843612371529066"},"_hasShrinkwrap":false},"2.4.3-next-1598522979-044d0629.0":{"name":"@xdn/core","version":"2.4.3-next-1598522979-044d0629.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598522979-044d0629.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zaEWOMK9QnrgJ3nHTkOi3/zUS1WdS3EGJ+NwueCxUGaAYf2NzKfmzXzc3+GOHi7nkVh2GwQayOaRUqPIYxrj1g==","shasum":"0e265401d8d48ec063e56e367023b09f69a7b3ab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598522979-044d0629.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR4auCRA9TVsSAnZWagAAbBEQAIpzylvJB5hO6FcePTI/\nDpraJmKXEspsi1hwOkbkolBqaafItz7mX4eIrSuLcR30Ta88DMsVa9L5ndUm\nPik7dP0i0cLg8hzU0P8vFss6ycZXx2eFkWe2zbfQRgX+qNAkBBLarkri3Tiw\nIfj2m2Z6NzskP/N3HHA53vpvsJh+9PWLIVD6mSgqbjCrFu/IQXrT+97fIt3p\nQd9TKyi1zPOQ8OkAEDBf7lIO0l9j+Blk6vTYc7TF7ViU+Bwhxzdf98GHN+2p\nCcCgTwKxfNoMDwxcD7S1XOKEhhlZHokWpS7+TD5H/w98c50UqgUoqkDq/Cn+\n2l1P+0cng1Jp/hl8cTTwQeRag1Pa7TbQP6OFtXJWeibbg4FaDd6GrWDpkKUD\nB8XauqrifcaKjwpk5ziAmbc5kKZ8FGVqUVXr/XtSAxVb8WYQF7l3lu/okVta\nOcLOP3t5hAvqL4EYDiAS+3wWgR038TWYv5wu+Qc6joAC8dNHoACB8mjLgCDq\nijoOUMUFeD1FKwvWil5bU5tvMXXwwCCtKPUTpN4S4j2fDsGvdIB3iiZxGtCv\npfbUEo61lsFoiAgRj2fnmkoIiUdSd0IGYA+h+wJvnwRwRL0NvBp0UmnPdxGd\n3ueH80JXeWKo7gD/tWjv8ZAabOBmw7yNNTLjlATcEyACIO0BuJN0UHOXZXdX\nXhqu\r\n=glWy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgJMhuwTuvQbVnyFm7VqIlV4hhTppbAOhpTUa48AzaewIgFGEFQ0qJAZ+87pMWTNDlAziS5H2hnjUAnRaTQ5rB+7M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598522979-044d0629.0_1598523053494_0.23467737028014257"},"_hasShrinkwrap":false},"2.4.3-next-1598523658-d16826a7.0":{"name":"@xdn/core","version":"2.4.3-next-1598523658-d16826a7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598523658-d16826a7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-QyBPWzLZ8pPidymBH1OqBskrF/BVutqdQr3nU9uPI4Jj0Z28I9Q+3sIpwhljEEqdSy/Ryu2IRwMYDikwCWCZdw==","shasum":"cc9a321e3aca0bc2b6ab55d305f84283aa2af7bf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598523658-d16826a7.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR4liCRA9TVsSAnZWagAA+tMP/0orcCBS+NOT099peywP\nFy9I2H4JcnxTJFa5WfkwWFLIfPepDQ/5de2x2pBOUC9qzyCcCH9Pept8bIWo\nQidinRUraa94ftO9HLoFrXiNbFKskxvLQQkeplT90yUEuADj0ITpLfoJB+53\ny9EjQPu70iUhu3GFlsNVPl0ee3xo/vL0GCPAyRixNfxl1l6YCsBbAEvT/mmy\nuZZlDenY2NNLOAs/yeaaO8xHflB3pSPlWpx/NdiT6FtbQItB7Ass+UPX7Qrp\n5PR/xhZh4tfT1E71XBdkTacimxbw2E6C1oFF8JNK0gVVVsCCl3li01+xB7ug\nu29tCRI2qzHZyWPdde9kHyYxQnzFZeAcdjbRNVkc3ZWd/PsFV17pH8DpX00Z\nNThQTyZwVqWC+Z3a7V3L/8MjK/xpdVU2PFM68Sib5HKfGPEl2N6sRVq/zcxl\n85ygeSykEEL6auhwOk84gVU49lbyKMXYSOhiHn3nhHPAcna3ZAeaLrdMmvi/\nx3WNWrttzZTFwGo+APU9XTycAVgEJMEbiGm/ReiPVhFQFr9Soa3UpDWZsmfc\nnxX2gdy4WjsHMANTWnZ3HXNZrOpNagc9FmAWB79NhHKJPOUt1S3Sh7Q+Lo7R\neusE1bRdJr0vR8Tk3S7d+QZdfZB9jHjBOiQ3LkOsPsAg9D7Shv3IK0kuIoC3\nmaju\r\n=n+Ah\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSx4v4JZI7SJNrdWIPNsJCdJcaEkTdxPwxlEiWnShS+AIhAMjwhz0/XK1xGUmGS3e34OhXGLAbHyVwAK1bhT8RHNoW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598523658-d16826a7.0_1598523746151_0.5274092527681369"},"_hasShrinkwrap":false},"2.4.3-next-1598528582-b8920e19.0":{"name":"@xdn/core","version":"2.4.3-next-1598528582-b8920e19.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598528582-b8920e19.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wWvKTWPb8gMGj2TD4XexsAkIdcVpOs+AdPrn2+q6yoJGQkd4AmavXorLMxlcLogh3qdWmVR9bCfSdbXMDPNJoA==","shasum":"ddbe7ca089c3cdbe2c34634ea2b654d0a228814c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598528582-b8920e19.0.tgz","fileCount":135,"unpackedSize":567442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR5zKCRA9TVsSAnZWagAAnKcP/0DtEWgRphohg8jIjlXU\nrzANUTLzwVPX/GIaRSmkTv1f2Sj6a/MHYP8KOb2MY/K3esOzZmQbpsM9RSl3\nt0kn9kBcKwOUlAeuz8kJrfexiSBIVvUo7jw8zBdVQY5IgpyR/WW3dW3H08pX\nXhOsHK210uzX1DAPczFyhmksvSUPm9LZ7rKaqQ+HX8WbLTG6X4fP7bRr/LSg\nH89HNz86uX7DvUhUwSu99/QcVukf8ILvGf7T3AZHbS0WE+tR+YGlvuDRdqhE\nl3rzLpOB58Ckt53XZ4Mj1SCsADzTINPuyE020kDDSI2WvRXJMA6or7q22esi\nsVvIXvt/F6dzs3EHIG/him8zwClUkYBGcErIQGIxr729iHGETPKJBJDk9O3/\n1WnXAF4/JbjVNH8VCsP/h/hdt7ApDvpMKRYSc6M6FK5r6XHhtnKR2/r2gm0r\np2OxhYsxHpJWitLY3rzjMo+SPhPja8sT3bPqPuPSz+F4Ym3aIlZjs0Uf58dW\nRcLAGcebkTJ7YjclwjZRZ4hiIP26IpF/vYEZtNm+b+sGJ3QedgwmxvXGYwxF\npRPmqIkD7jzjmdtDs5ir+da/v7f9YZa8i0XtJ3trQ7EB6uSiBDut2w6PWiMH\n18Dgtcltz/Y2zr+VVyjH9jpHjJona0EOLh3j7SQJeXXAy1QSsztAKqyHGcMr\nnBWX\r\n=yc+S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF1hVQ/uft3yImgaYbBocPfZeAT7rDWClQpoah49H2VtAiAe89s4RsdoDD/V8OQCZvOUPZPDL54oMSZj4AM7tzh0Vw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598528582-b8920e19.0_1598528714313_0.4229474352800675"},"_hasShrinkwrap":false},"2.4.3-next-1598534513-ac4dcf53.0":{"name":"@xdn/core","version":"2.4.3-next-1598534513-ac4dcf53.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598534513-ac4dcf53.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7m/UU9AFwcRHCP4iEHgHdgpxV2xZIMI+aUCkQAq8kX4Y7rv4QnygSGsyaZY04KUlnJKGkQUMIQgbsUpq/28IuQ==","shasum":"2727d299624c42c6fad00fd5cc75e583fb1a5e8c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598534513-ac4dcf53.0.tgz","fileCount":135,"unpackedSize":601493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR7PuCRA9TVsSAnZWagAAR88P/A9JKuzEXuU3GkJnFayB\nK1hDlKN50pq3wmxNgsxtIsj2klB3i9MPj18qqWW2VihEoismSRYcecIjvv2/\n9IXFT3t+rnGEQs4Y3a0gyn6a6jEtsk/CeyRW/u6MNFkSPsxIBiVX2m8j1Lpb\nO2Qq+VvfkzekfZdXhil4Nync3hH8qnIyKoYWsDTiKhDwgM2Z0kvQNnTIt2bO\nFG6b++I72blULwQQdM7BEZ82UQcfOOw6i9I7G0Hj+yJdyoV2mq1PP01F+Ra0\n0DORFH/4IJtPaTsi0lLbiUwqPcGUcG7nLAxXaTHQhq9lpFoUEMbwY8UchZII\n3ArbVNbSuc7WejgsaciUzmMRkHjl1RGWmb1MF0BV7hR6TRZybPwGYaxfDUW4\n/ZFc8cIDGYI11b6S5CJdQhdgU/7Be5nXCh8etya/8H07GRpB7uweLFzYgkip\nVDZC6rLlc0Jsog0XfZ+ropzdTCltqQM6VfdGBPkeMC6fzsc6cDcgsf3LNWhu\n+ekqJlypP61Gv1HjH/pgsg12Zj7MXtM9dHNWIFUb6c7Lo8uHJJd1tNydM3wV\nL9/sXinJwTjEjjRFXWzvzRubBS+If/zpnAGw3ocvBJP5wNuYEiymp9GlK01n\n/VYS/ctkd1X2Cx0y1QqcLpUnXVT8SavyZoOD+Wf4U5z0TYjaQc1UveI+0KyG\n/2az\r\n=/365\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZJ4lLhA9tEX4oiNN6UW8PZ8APUWe9aoQV1KmAyDWIGAiEAjhprvSfsmaX4JKYmjRQTSY2JJQMhMyllJNd+OqfvCP8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598534513-ac4dcf53.0_1598534637954_0.023745015069205122"},"_hasShrinkwrap":false},"2.4.3-next-1598535744-ac4dcf53.0":{"name":"@xdn/core","version":"2.4.3-next-1598535744-ac4dcf53.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598535744-ac4dcf53.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-gd2r8Gb0U4HkNYeecHgAMAk8ylOLB5Aul0XYrvOoDxwTbqmrccZIcbL8P3gAyZ+FfuMHrWYgkacHrtrnjIzg3A==","shasum":"f508eb3c78c4f29f7439ea1f1727b65ab03d06cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598535744-ac4dcf53.0.tgz","fileCount":135,"unpackedSize":601493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR7i+CRA9TVsSAnZWagAAuwAP/Rwo8diUW+Bk5VOUH1QW\nf+/E2iNM5RsAiuZBhtrUqJL1VGWrLsBUsxIWGELRUZyHqdbDn5RP/+Wg5VRD\n8tobjzgYjUZt6gYPpTRuAzJNVBSVKQuYkMxztIMsJuRaxBk88Ik5gWlA+F5P\n+3aD6Ske3TDW+MjiuGGhddQvUVv1w2yI4zTWT1nVuolcyDoPva1iFnyaJgoF\nJhdA3leFnp/r0q7SkJWCovG0LoACrxKNNHl+MHM/wDPbUDx9ef1J6Sz8e7L8\n1ZGVSETqFr1e4lTQZA+ESX6HCuuOOBJaNslt0fiowlpHof2ZIxddciBp82h5\nv9JmTt/mnUF+JetMhr5XvCbq6eLYF0M1PeHlC67jsyrj++FzYGyC1l7ZTlNE\nmryeU9jbsIZ7gCLz0ejU7C4UX1vlLhr+UHAEfRO0pt5HZYKzCUMwpKGGQSsx\nUvX65h6BOHo8QzNGQRoys5J5SgZ/4Mtoj9qOkaAAGnaReJsLOHfiAVrx4O3s\n4KD2ocAi3GrvWOU/wcu0y5ElqxwfTKo1K8+L69IblPn+c6SXFN6wJr9q+Ayd\nVA9gJ9S+JTpcc/Yy7cSabsot7FIixoIaWnBeXCuXBaji34nQNBOwlMiD3KnR\nf5nXnGjVuXbj0JKLBs4ZLDSS94nIglpbKOkZjta/qga9d1QrrkxXCSQpBbQr\nZUCg\r\n=DeKN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDD864xbAHDSLHvQazduVdfyQtZv0tQI4bgnXkSevfORQIgHZFuiWVBT/MOvx9GPH6QrBtGtDP/Km4zViLkkCB1whc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598535744-ac4dcf53.0_1598535869818_0.6441247066289826"},"_hasShrinkwrap":false},"2.4.3-next-1598537527-601d3a6a.0":{"name":"@xdn/core","version":"2.4.3-next-1598537527-601d3a6a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598537527-601d3a6a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/XhvXd1QSZvyyIeGdVdM06ZrePtFBAIz3kzMVxhF0Aa+9fVIE6T6Ca6+gyayxYD3qipiO44QGUsVQLdywCyxFg==","shasum":"749627bbab8fa3eafbaba5b74bf844fe21ca8b1b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598537527-601d3a6a.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR7/GCRA9TVsSAnZWagAArcMP/0eqLyWeG4wung0Z7kSU\nW+EMWSDiWndEDxtjr6Z0/ryLOrJ/cg60ZGhbLJEBrmVlGRfeKAVPgpK/+ZS1\nDwT+YovlVrRsoBYCJO1PM66xTxwliJk7EBtYDdZ2bmDX7xZV6xasGbAr5vMT\n/kOx/IgcSp7G6DHGkXIhhexx9jVIMlHP9SmtxDWLLFid/e5WLnKqemjOpqvX\nn74LDbwRHzr+RbB+7D2eUw9fColv/hw+KnDbVBnygKLAbZn1jnFgnVt6fD9/\niyliq2J5nvceHKSWsRe4/3EAuI2V2gb8ady6rUEIz3i5E1xHiN92gA/GEsmN\nli+pvYflb5zYow248DVS76WrN5po/RD4vO+CQE0mPjjkczv66ZTAaaoi3hUP\nEcfOeEp7Ymv+cqFE37fXYFmfNARIihqikVTVAGNtFU4lzLqqaI12ADk1/tnI\nkd3g9sFaaubEnWIzy8fGCi1lhSBanqJSM7WxeULumFiRG6d+zHHiSxC91ozr\nvjWxftue44vVhb7BuOZJHO53Q3tC8kjtbYgCgOMTEDB4mZR5lZUfNdnbCjWe\ncR6Dg7wqewWruLZc0bNZYJ3FcbMFkW92B7MRn7hBJ5MUugwJc/zfGlK7oZZS\nTfp3Pjc7kC45h2IBCJbSRYSCJLCRXrGHtJ2ZYqATzculNRirN48UyTYVTvSV\nxDNe\r\n=itBV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcgh3PpXTl751muH9JHczubiABxzt+Bz52OeWkSQmPwgIhAJ2G+ZFyV8W5BbMyjsuoiJpAxm0A05Q2X5fdp2GcN4Ne"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598537527-601d3a6a.0_1598537669397_0.4421625076094602"},"_hasShrinkwrap":false},"2.4.3-next-1598540824-ca543081.0":{"name":"@xdn/core","version":"2.4.3-next-1598540824-ca543081.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598540824-ca543081.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-QAY2z5KIo+294RR0IeB7vfiUiXC2NBWqugVyvPEp8JmNzTuSKj3oUhrKYxsS9CGTXiY9r0U1ag4HSdo0Sbd5RA==","shasum":"9155a4234c58cb462c40c8b8219e3ca28781d5af","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598540824-ca543081.0.tgz","fileCount":135,"unpackedSize":601493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR8ytCRA9TVsSAnZWagAAd80P/2SlNTZXpk7D3nEAFmFr\nvGz0LV2rLzmgKD3kdjPheA9hslA3NY8/Yr9LGuzT8SECWDqjue60SpWb97KL\nLqQf+nFCBr7D8OZ0U9qOVB5scn04siqKAh8YeLVKjUnw0UwEgPXp9A6HF+Hr\nDRdslYtKxTbFWanQ4wPepowSHZEwB1DjCTzwGp2ewVyxngE+9Vivh2lc+gFC\nKKL+Xq4dubC2OiRQwEpSSo3fXAN6jcNceLbBxX59jY9i1eUiH3WFGVGM2Fdf\nEOOkz3+bPuyhnjVq6A+vi8omtIKYqQxw2uY9Jf67QB8JRONEJAcX8hqTO3Rr\nqR+SDOnudNaW3ffCpEvNs3pWQywrG35x+gm16mhQvOdnl6iAg4BgZJe9TaOI\nxUp8nRACQmWlWlMuqrQ1ioDH3kNW8ZJYZpJYplp/wCT4mS24hM5p1B0tx5KC\nm4ZY+VJGP2QmWQGysA0Y3OEKS20KKTuieBYfYWMmNqO6ggxq6QSPrL80b33I\nE2X92OQupMU9X/ImyTjSFmt26Kh2CooK7nLG7QU3Tyva1hVpZxzOPeAW+ZMw\nz4gQfX1jlOb12hHvCOyZLSfXUvw6mGxPlXGMj69jh8nw5VyFAE4snXPkU/kx\n3FfDlqTZ0YC847SQjDrO6PoEzdZJUA9XyXV+o6swPUvUri4FV3g6bsaWb1tn\n3rB2\r\n=ckY8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXxHGMbKjrYMrpXOwWHh9g7XdOOAgXOd0dSJ9IIiZt5wIhAIeyIeXbL1LsspOk1Dt+LC2fBSkzHB4wiYLfjhbHD10Y"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598540824-ca543081.0_1598540972717_0.812247003195371"},"_hasShrinkwrap":false},"2.4.3-next-1598543671-a3ef15d9.0":{"name":"@xdn/core","version":"2.4.3-next-1598543671-a3ef15d9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598543671-a3ef15d9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jjdMwyXl+N/JGts8RC++QcPT2U29X12EPySBQVICV2cLRb0zRo7UflITYC5+eO9ViVXvR/8T2OLFDhyMFYzloQ==","shasum":"db379036a2b11030cf4f34fef3ef1ef4f2b32904","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598543671-a3ef15d9.0.tgz","fileCount":135,"unpackedSize":604916,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR9fBCRA9TVsSAnZWagAAGQgQAKKijRT+PP0yM10wG+tf\nkrj/a70DMBaTxuBH9CrfPk/TEBs1u3qGqlFE0Hj+6VVS/tBsD884LnGzsvBm\ngvdXtRF/V9CAPEHlfGbUfPH0mMPhm9ozLRBiDH7adFymf2fYiiFNcXge/Wso\n5D2NwudnLbwkPWOb9Ajv1A17vOReAN1i6TtF7cO+ldY4BMuvypwbk+u8LOM/\nIhSO2bJg1cJylF4y9ZW8Thgy1C66Hj6ZLcIUculBD8cVmZ5QzWmvTrTO4GQO\nXOs8Lld0klPaBvdvj26xV0o42JHXwMLfs62v1ZTXAyPcWQuL3PXDZ+FMjD31\nrhVcejfSkmMjVh+tLZ8th5/QePackPKeQmUcjyjE3P7NMQWquEX0wUgmT7Sv\nGULInm6XFUkcYwFFl//T1jM+Zb+gio3zHCsoCSyxemjkhA/wCAGViESvylg7\nu5I/1quMisudBJ9vXwS/OzdW7UXaoNt+eUnjVo3PPhV7yz9At7fII5tS8Spv\nIcT0dbvG0gdwnGK6JYYB1Rk+CO4hfr83kkpyKCyhF1zgN3EVSREi/L32NpsI\nALSascn0JWPpMC+xBCFc4mYgxa228m2zMMdSw2Lx8uf22hYKPJpSyMo+whWt\n0NuEoAJBlbT+ZyCW1GgZpNqHKdNNo4+75du4+iy0JP50WFO6f8ws8nvF5kyh\nPP2T\r\n=0Qb0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBvgTin9ab/3lvnFGZJ3DmtzUbl8ubdHhK92Nd7MdYm5AiEA2TFixOQVVdcI92hD/HZb7BAAVgQtltRNXXH3md5/2aQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598543671-a3ef15d9.0_1598543808920_0.8875205765831324"},"_hasShrinkwrap":false},"2.4.3-next-1598544100-a2029533.0":{"name":"@xdn/core","version":"2.4.3-next-1598544100-a2029533.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598544100-a2029533.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/PcyD2xEDripLCKPLZgNAxlUJ2iQfbTh3TXHszHxBhgtc+kyMSpgE04dak07WQss7fd2jiBnflIRc5vbEF8C1Q==","shasum":"7f3be4ea682130ecbc18219b46bf39629070c0be","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598544100-a2029533.0.tgz","fileCount":135,"unpackedSize":604729,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR9l0CRA9TVsSAnZWagAA33sP/RlzSFwq6dT3nkkI7NY/\nbHItv6BisIKlrPLmpYZWAei4pX47Zrc2s6VbEw2l8AI0kAk+Vc9GNa/LcJHG\n01Qixt4wNrKMGc7WD5lwI2uDoQk6F9qaBQ6y8IhqV9cGHKSGUrwOvrNZsuZZ\nzzz6sGzgLbPjLbovTVu3lxl0rzG4bTYWX09gBc6ZBzxW/b/114oOzY8lpUjs\nb3diCIA8AErTQqevMIS/TpmnxbLojMQL43IG20kuUGLTsN5S5f11ZYnYpUO8\neaY7x/uxwBO/zsGvEitFWxWub6mQqsjUCAw9oHLUFFB3cpVqrL0eQWUTw357\na/LRiTHkSyPHo2pG27LJM8QFRdOt5qJ5+Mg7hKWR6R90x45H1TVP6F1/s7y1\nbEWrhAzZF28WpfiBLxIFIzQbkZtXAyVuFkQqEs3AAHoXEM45Tr+n/j9gPa75\n9xtrzZ0RqggQm01WV0jGyNQoNUKo5h8fatou7wE3u6xSvKLozW8VgSVam4nY\nx+mtEuv0zZNyGwqemzvh/ry+YOFWPR3pvyTUwg3TBnAWRxD0x87+fKh+K3KW\nAZHaUi755cLZy64sTVwS2P7OXCAP1MXS97MfbM0emye6x0yc6V5Qxf6MLJLq\nf0N+Crjx+ZT4KyTgO3PeFBi9POu8jxEu5IgapWjoTjPtfL4z0mYyyl6RuTSP\nYpb2\r\n=4OZX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIESTOJdKT6n8Znf/gi9fs+gNAvaX0/jBEt0a0bZD7QOuAiEAjJH0h+BotnFEiPBybRtgNnasjvqmFNETR9ONzQsScas="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598544100-a2029533.0_1598544243962_0.9309139536520239"},"_hasShrinkwrap":false},"2.4.3-next-1598545650-3b025dd7.0":{"name":"@xdn/core","version":"2.4.3-next-1598545650-3b025dd7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598545650-3b025dd7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SI2OoiQqiBEnK2LIr4fKivlgo99kWBk8oWXC8GBGY7I8ZT0H9tvpKhN8sXInVz5lCazpy83BbWCMTfAyN9/q1g==","shasum":"05c3b271b79662e9f094e322c69bac368ee62beb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598545650-3b025dd7.0.tgz","fileCount":135,"unpackedSize":604740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR99+CRA9TVsSAnZWagAA1nUQAID4zLLDAjNw/lUL4Y88\nNITQbeWoJ8df+uqb7lkhE6Ky0PnzNHH9eJFSb/ApAqae41NCLZonIHCzdqal\nQkoO1OpswZ8vobYW3B9ih1/jfje5gcSFhdgymhq/+wH+mSwkO7fAG43YY7le\nAsoyut/0RN/DTgKn4oPFOsskLxLRKASQEKHNwY9LsRq1UcmCNjnGRt/vN7gm\n0o6jSJOGwkgjt/CWYwydigA2fy1LEjhkqhcy4RWsOewjGJYukLkyp/vZiV97\n/B04gBYG8Lubcin1VhUN2RG8+cwAFSTjaIK1wIwywvEQ6fI+ZtRiGsAjs1FA\n/70VdpXZ7I9lEpVGS5mIyi7NQzaS/3/UWtKz5YruXgNxE+ahDvMcOhv7u36f\n96VidL8dxcy6+lpmj/sOLuxmwvZMrxRPIJDDj88g23RbJcXzW6fewsApv3UL\n/FI1cQQFidFyu5xJ7waVLB8DqOm/eA6ObD37OuLAm34M+VMhiGsrIrXJ23gN\n3V5/zrN6ltHlBBqSPCQ0K2VF1Pihf7Ju29yjJRFMyhl12LqOjNEbkpkMEFDQ\nEjdXUcc2Ws8vg2bY9Dd47pzMiy0yvNlCGlv9aa2qRhjRGOuT5LRmL0XJmZLJ\nNGTelNWSOnkjvK7xc/UOqdNefAzZJGDLzk71CRGs68ZJEOGrE857+3dx6uVC\n7Qlp\r\n=OiZh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAFj+SZgOYoiQWh4dXOVEZ9XysNXYfHZJ4dINqEOOjMnAiAp0fZJyKy9qpyVxX8t1b6iz+C3qL27SlFQyTD284ILrA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598545650-3b025dd7.0_1598545789889_0.15006643356262206"},"_hasShrinkwrap":false},"2.4.3-next-1598546155-46ac3d6b.0":{"name":"@xdn/core","version":"2.4.3-next-1598546155-46ac3d6b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598546155-46ac3d6b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pgsdGJQmwTHCNq5B/Tp1UeTRIHjN91r1iRNc1vUV4dVzW+lhdpyvoJg07F9ThfdICoBMRoXbvblJ34STP1HPrw==","shasum":"a573f55ed8c6737a6dc3d391cde5b1bdbeb7f56c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598546155-46ac3d6b.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR+FvCRA9TVsSAnZWagAAVDsP/i6fjQ75u1vyj0U7fhH/\nUXf1PXs00I6E+Cy+CqbkejO1XFRTjTufDkKonuWtoY/AlEdKvcooz3H2Xf7k\ngRYwUqEeOCrJRta0G+TshSb+fkUNIjHX5GFsWSwuhQ3ohNAtVOv5+Vvw2W8t\nSxtZ4i+3nu0gPaUf6grS4g3KmvXy9dhfNZ9Rl/Fj4L4QHC3fAu1dvdiLmM6y\nozqkCpgzbGhncNuqlG9EsFevvYqdLigMKUtlkYHOfvnJznTnxah/9JLF4YC5\nCiP7WZioIAEaiAm4AQ+Mh6Lg/9+vwVA7Qzwa04vw9cFm5fzlgO+MaHb8/Zlr\nzl0s01JqLlzeskXjuqJjKLz39toJiuGM5koSp6PSai3zQmz6Yae1kMXx9rNF\nmGnwLpRntaC3ustFiROELkBv1od9b3SvR9zjO9E6rRh2K/7skasRxc6PQZ2L\nG6753mmcEzeMknfLNlrR+r+X3O1o4Hh5AzAUzuGBeBQzeLvDPTTB8XdwvDkO\nScsKRRmaUAF/QfuBCWZLNUapKE0gQ5NqGE3EohztuRHRXfGP6tO67vDQNtpD\npEMUOW+MESItGoxU3oIpfIq6g9qxhA0Y/UzJwvNHWlpalH+aESA/2NvEOGsJ\nKqT9Ts5XwyD/n1R3y08vYVp2HtMM1vCmEyhXTchM564GQx7Ou9DIxMZbMzrF\n1OzD\r\n=N9i/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH6kVcEoCaZQwKujuSmnxheqx62xtIk21+HylGxQpF/fAiBTbjqzvD3FT7BNQfl6+LWe5ZMR43Xz0NdZvOWqLQlYIQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598546155-46ac3d6b.0_1598546286657_0.22829149704553164"},"_hasShrinkwrap":false},"2.4.3-next-1598546250-8b41ec87.0":{"name":"@xdn/core","version":"2.4.3-next-1598546250-8b41ec87.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598546250-8b41ec87.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Z+XoBrEi0Vjpnh71FIO88TQHsTq4i57cQELWbZgfzB5RqN/FReVIPsP3fW8IAtefg/7bYHq3cP6Up6EDJhYUnw==","shasum":"2a53a25b1af02fc0a8f2fa4c90b9a23b82188d7e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598546250-8b41ec87.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR+GcCRA9TVsSAnZWagAAGogP/jJ0Vad/0uqjuwnvIvVq\nGwz6jS0NG5tthOsx3rCZbVIgvHY5qXer6qzOxvrsvfyHnaqQ/m+rb8eSm40F\nzQvmGjFpta1nJaQo8a83HytRiXpfGgKe4XTUIXULzh4328SmF31dCg4hFhdZ\nP1DpsMpE/2grPvgYnYStEX1RKJOg1iXkGOG/bGTlOz77O9TktmSEG5fYfVvA\ntRA8evRow+bTa4MlI/udfewoFy3Cs10nzk5gNAnpoayxgsa2z+WMh4ZPjpZH\nlSz+9NJ4uS3UqnDcjg/fiKpozcRbaHSvE/e/7RmdLqmUqpglljX/m0ubpOW8\nYTpOciASZo03Yoy3lvvjFdVgR6U5BYyZ/XLclws4uCkSw55hafNPhoRPc1kM\nj9h87bgfBFwKIDOyKGR3Ca3C0aROJg97hlDx8JUYypkNQbIo4e+Ga3C8a4lY\ngoajEKuUJmmyAllvXuRCJip1Z/o30FAHAhAZvt9AP4UExF/wp6+Rk5k/6BYZ\nwUZ92fIi1t45skDXomjtO8f+4+RUZtgGXKZxZkJ7W8gpm/yemM+4zfwZP45I\n9Kps0rUgCQ165Fo1VE6Lt/clG7LIsiYaIqkUBDE893a34hAyc3nJjajtQwA4\nnsCV4CueCU9AbZt7OMEW9sP1V6UvR/NKEb7nMzpp7UiXlE79oDM83RF4GdBH\nGydc\r\n=Ziud\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCU7mTZUv4isL5lgo7OOSp1MWc/P7u/6W5Iu8Sv2SSZ7QIgeCrJ6hp65jSnnFOv9ozgdX04PnMCyZgtR4F5XpZKGvQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598546250-8b41ec87.0_1598546331477_0.2525081469592845"},"_hasShrinkwrap":false},"2.4.3-next-1598546215-7c2469c5.0":{"name":"@xdn/core","version":"2.4.3-next-1598546215-7c2469c5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598546215-7c2469c5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0OFD/ic9+3xLHInc89vPXjNME2/dozhsi0y8OL66OL3HuAabp8Un8m4PaIq57ah/fAeRfjuYNOjCrZyZfWm/Lw==","shasum":"9da6aae950b7923f12dc9a2eb2c7a7f973ab7b3c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598546215-7c2469c5.0.tgz","fileCount":135,"unpackedSize":602097,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR+GwCRA9TVsSAnZWagAAW5oP/RK/z1CkTYpgpnakyoMk\nVmewM01AydWezGZSekvUxqIAxbw5kEJp62sASk3ZGDpId7QLHFkwyK1Eznbh\n64J2tYg8Jdh8UKfhsp8FMIF5AJNzKXa385Od7096HYmL2LXwwQowrRtkY3La\nPHQhMFz+wu5ZgDRr8CnSlGtLlb4d7ZU9sdCl72o7U3Rg8vu7CYS+dXbKCuyy\nBbcShtLWOvZBNae7HfVBsC0gFecWEk0cX6TIXUJjfoTwYGmb0bi9vgQ6Uii6\nd2XLbHPQhBcIjy7XuQTSh8nNSfJdp8TBnqOJE5kI3DQogNZ2gSHvJOjev+XJ\nuWXdWbd1BEbxstzp7IaiqtlK1Wb2a7BPbVVmvsQXTRaxZyLPJUheec61DsYQ\n3BLUcWXmmAZnV0rRiuU7USsT+Uhg0TG4GztMPgHM6xLoUpE/6w1KHtmdxoVz\ngvI5SHrd7NPYfVUUou4R7MUvOU23eA/K56bQs9fLp8IuK6LfagyLNPgCrftn\nBgcuyCG9TqZl8MW+7WuK7eHNZTbM1i12E1XsrTuHeXIcAzqDTF9JuaW9zm+R\nRGMTHdkKyABO1zertgjhutS25hLN4uiBcOKGzQEqpDrRNeJAeyEwb/f3BsrT\nj3YYycYrd8Acqihr34wRjGMbyBssXvIvTxQVfQDioovUr23Y1w27aRNdK24C\nHuRN\r\n=O96B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDQl8X/U4KBd0A3mbf4YbZdwpXBkDEAVXWqyUdRZxUNsAiEA4TMcUSai0mZSfRRsuH8sKOQ3ltw1STmpFwkpvow/LUQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598546215-7c2469c5.0_1598546351600_0.907146334239336"},"_hasShrinkwrap":false},"2.4.3-next-1598548037-33a36284.0":{"name":"@xdn/core","version":"2.4.3-next-1598548037-33a36284.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598548037-33a36284.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-76JUL8k3M1GmoR60BOKKddUT30Sl1Z9KvmsNEJZG2HUZFQP0rJp3aVhP1Kgr8056u+Qhbw2AN9v4EmobybSB+A==","shasum":"1cea0df4868a1aaabe666529a1c136723d3f9e64","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598548037-33a36284.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR+ibCRA9TVsSAnZWagAANnkP/RQ3sasL7ApeJa/PLfFu\nR2YJYYQ7tdKGbA/v+bs87xI+6DbMLIdLOR3NimI21oGE4fpN3NlcbXUDNuy2\ndTTJ6J6WVvYZ0T8lQKzMxFjhexFc1ixa7Zdn0P9rmX/21jEC2jsuwS6WH0zS\n97w6Nf63QXhYkWQwyXL/J8RMHUhAmZm8D4WkVnckT+3vn54IHv20gOUyabjG\nRYxgBGETxYENd+AdJ6li4fB95fP8/cTQxNcpzR1g5T4Wir0kQR9+CgQo1RkQ\nVQqCdbvHJMoepjhMonIOeMU83kehcLbnO8vdpavJo5QqXftSKxbkr9ZniY1a\nRHracUK6sdt3RR4Kocoisp98QJGziui6P4UXmBzXce0Gad361WY6l1pH9687\ntMUv1ghwiTyvYRHA6U+vVz5voOoxPEdLKywfQdHtXKJQaMnYhdIlXPhGbIGd\nNcRgwl7acCHatSNYXNs+1m7c7fZgYLYQBK5kQf7RK840GWIwKsQns8IdDO4x\nbbRQZ5KlvG/2cJUvM9pdISKtXT1YwRA+qk9SMQw26ho9iGp1gzr7RuwEDFEV\nAmiMYUvfIAyNHzBJPxCrYFQL1ULqr+u2QOnsIAWauxb5bllfHD3ZZtro/uA/\nFa0HQxjRtV7rl+ztQvlurOypoalAtms7WcJQsYtsdkWdxPxHhrOlRsJEUigd\nU2Lf\r\n=6Dw1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwyardVlOJhcACSBdnC5DreRh8741PiRKJiwodsCpdOAIgZFJ+0G2jqKpzs8c8j5fBY4bGyjIZ656jmObW9AEJi+k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598548037-33a36284.0_1598548122598_0.695400097085443"},"_hasShrinkwrap":false},"2.4.3-next-1598548814-33a36284.0":{"name":"@xdn/core","version":"2.4.3-next-1598548814-33a36284.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598548814-33a36284.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-sZNqJHpFD8q8jme/rONDOWubvtg63q7pODSWvQK+0XanOEJzMBsxKDvbuRcJFA7pTHMXuBQkzwtY4sDos9Xr6Q==","shasum":"de1878477ba66617d022ff5a3ff015711e551153","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598548814-33a36284.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR+uhCRA9TVsSAnZWagAApDUP/AmfuFHXTreGpLwQu7gN\nM8Mn+ZieeRLo4ghFu6SbJl3xgQWipMdYMHCwHprgpjx0OKo9MPZhKnz32YgI\nMqdDoqTYnHHeojNva80/uPSJoozEdK3ZuKUKjdVbC9fcDKUXEwGVa6EBa11d\nxHcD0H0akmMZOT2i0VSZ6nvaMC+fGDlkuJijhmntrpP7SJLEnYFV8ykABN9T\nlTSvYqvJTupTJ4DRXEXOTH5H3KRCL+U/2MtwZmWlDi30gS388kOnUDiki6GC\nl/JQe06p9zsOFcu/qYINwE2ByE6wmbtZFTtLsSmFiZuNWJoBkHZY6UDPWPON\n8nIFiA/cRdrGyxtnFJRl/tHUqxzs4cilROdQmysj5EPK6IQOacoB/nfwFm3F\nB7YsK1lUmrFqidy+e5qkMPLVCpGp10ix6HttG4Z3PYPomNCrO3kCKCy6huzp\nxnDNajCGNv+r+mkK07ILoXas00e1szd4U2sp8EBfif/Q3FVafSmDdBwpvqiN\nZpDj8LbtqqntepdT1GbEXomISaoR8NBWQJWFAfLveqbc6FHKZxaTh9cmooD6\nE1D0MM25Sqqe3fL8fs+n9PkCCU7+a0kQUhWtXtOQWhQD+PqRPYadDCY9M26V\nHKA7L7NA/PLFfI6c08E2jmSACUiLk+8o5WR/xXdBhoiNqETbkIRuaAfFRnp3\ntmn3\r\n=jFDV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbU0uxThK5shvQaJThEO5VbeWf9ExzkqyJ6svx1iZx9gIhAI+9dXaql466c++xZXWaMOt9VUR32dMEZlqUN/ObGkho"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598548814-33a36284.0_1598548897317_0.23727852519283998"},"_hasShrinkwrap":false},"2.4.3-next-1598548795-f0b8b5cb.0":{"name":"@xdn/core","version":"2.4.3-next-1598548795-f0b8b5cb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598548795-f0b8b5cb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8YeRGS+Gdqy6PoVUYEULJyC5d4Tox+zLbJiA1Ap6H3pxSjzmlB8qPq/fdTO9fF4YODhMXg+ZTq77HIMmpIKGzQ==","shasum":"f8d854a43ed06bce9f254dcb3de500f6924ad4cb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598548795-f0b8b5cb.0.tgz","fileCount":135,"unpackedSize":602416,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR+u9CRA9TVsSAnZWagAAe0MQAIHevp8J4LQey84FKhl+\nVrv1CT+xTfYIq8eWfqeulCkgrBExX7YvspQjsPMtp3s8IcuxGzOJtMytAi0T\nOO9eDcGakZCH0A3hOo4a2jIurGujb6alVXTJxAlJAR95EohSEFUD4ArOOQ5R\nxJ94UJJPycZHG48NSygWyE+pmQ1Q0LlTC8BnyYRBnWoLHYkVFW9nu/EfBoAe\nuPIOWXKeiRZlg/n0lIW4QyV3Lo6vcjBNtDU/NTUuPCJLuWYq32yfcHu9XGYu\nhCl54Hra2DBFB+4KjE886P6VfeP1CwpMTimhLrD6NLvsX0sgTVIkVl31sWYi\n4bAscCapWBO5SPcReXHkjRg5f+E+RiPcbMB6rL5Xxs8JnCa2r/Rh1HUgszYi\n14DDiXvQDek1N5HaakKbKxftMENinP56QZhLJueraL9XX76SWBt+IdTL/D1Y\ngvIZ2kkRIZ/xdlu/SG4sAPei4iy/caVc2eDstLLoNw2S1FLmCxucPg2e0Buu\nQ3/CuEWvKvdlnL+1j5s2oT7zw2MYsBJhZxxceI9QBb5QRb0fYPRwcXUnNCEX\nq5hMNzPgDU7GuGkNeFEpjbPTOGkMOjZyNp/eipLTI06k11eXcG1uHtEe8WnT\n1E3aBPPEYV4nYcvstMikKJuAxhakXy8K5hCnsjHRZfFVlLtjZVEgGq+Wp8sK\nWLfn\r\n=oIln\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx7FLG7GWiSbV7lMlbMYd3gxkdJ2RapfaoAmTrHMyctAIgBiGL7qFtwEoDU3u2LpK+/dRQUouF62p2UCHLrmA7IA0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598548795-f0b8b5cb.0_1598548925414_0.9308835036320426"},"_hasShrinkwrap":false},"2.4.3-next-1598549515-f0558f9e.0":{"name":"@xdn/core","version":"2.4.3-next-1598549515-f0558f9e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598549515-f0558f9e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fDpyI5t53Y4RhW4H5do2cyCbL1hU44iMea6TFbGeEuSAPaR2pV38RYnMPq4BxL9q+Sh0Q+tMqplolImVW9Aq+Q==","shasum":"574c8871279a1282b3881ea5978f578e1d8c1875","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598549515-f0558f9e.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR+5fCRA9TVsSAnZWagAAUjIP+wWJTvEKCLuRqLXVVjwO\nzL4nkySPblgvEgcyLRgETv2MQcK42gZQEDRIxG7yvy1rg6elYtVwNLfJmwWP\nUCYSSBFfaetuVtP127GvX1bQ7hH+QTDsW9J7pr7qCyDRvAu7xgK83JFQ6ePw\nqQ1zDQpJt8BpLrb/Ndhy705dNBWhcsW85xpN8laRJAsi5mQkenj41XH+AQ95\n1bOvj1Qc++mx8wMk/RKBPrRLddKsJZe7PxP6FJu3Hkcm8mARoWEH1rJO0jQv\n3vhMwx+KOX2Ui6w3FybuiL5TlLsfjYAKdlU/RjdbbdeuAXVUj/ZOaRuWO2de\nfD3HKaC5u+6C+VvaxhWB59SmyE34egj9+PiqjQYnGx41i0le2i3rhviCRann\nJgOcvyAx2mXswEngu02Cextjj9J57SgPGRT+jx9U+GsJ/SMIBVCL+jqXQRYa\n//3WwWu+v75Z9/sCNhORIGA9ymLJHY7mJe4Hk0TcJoAQLXeh5Bs9a6grxiwQ\nw/iru/To79Pxea+JVjRF7eP8Ns/erT02q0R3BhaPCmf72yjnv/e9iSNFid+q\n9f8bcyomjnAuSOQdrMPAMEuf6bWKVmlOInJ2AgeuV5Xfwe+Uw91oyauR9/O3\nLqJ86Wx8xpC5sddcXyvTgTOhDLVo8jLspenL8g/I1IGNlBi03ls0wacPeqvl\nvVbH\r\n=7oNA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAPWIyK70dzMo3FE+JMbYxRLmBLcjP4juVh8eeSZPKd1AiEAwC3j5kK2dLKlRVt9QnJ2m4Y6x6H9DcyfA6PaFQGUKeo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598549515-f0558f9e.0_1598549599499_0.5595884923091352"},"_hasShrinkwrap":false},"2.4.3-next-1598554585-2ac2a31e.0":{"name":"@xdn/core","version":"2.4.3-next-1598554585-2ac2a31e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598554585-2ac2a31e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Pc67ldEDoHSoujLlHg28bOSZQv2G+bm4dzbwM5AI4LeQNi8NcsgSiTQXmca+MaRFQassSMrz+gLnUr+58Zih/Q==","shasum":"29bcc5379d50fd4f12eb8d0672c72b83e5627404","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598554585-2ac2a31e.0.tgz","fileCount":135,"unpackedSize":601493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSAJ0CRA9TVsSAnZWagAA7gQP/2t//yJgZnZ0m+/5dZC8\n8UuQxhSKyPqWIzoAUbQpFUw7GHme5pIkSFNjt/XnGGkcTObLKN+bLpbphkBZ\nSAlcJAChiv7T5rsOweikCgT6IERoO75GGtW/yOW6l0JFdV2JBcKMcfem0kBd\n4gFvUnepts3HOIYqag9RBkYk9barrWEvmnYj8tFF5FHD44tPS+dW+3XwTslI\nL0AE7P1chFxjR1iLj0KzCkUe38QpwKCStmLuh9+dAC09+ybpfWDb0oAGirAC\nR9T8e9SUDIYAn2cF2+1pmzEVoggoaV+4T89i5WxohwLXadbb4S5Fi53NuJ1B\n9o/dlTbXVbZVaFQNpf9iNyukQDNzI+MsgQrqoZS/YaGxBV64snyHSIF0MEhJ\nAckRcJIPEImLwvndwgPT3NqtT19NWyjAZgoIfR8uleQlBc+lOki/jykOmc7N\nNVZZSFLfwAreEpEv0jAgs1EqAWai+v/H/NQldo4fgMz6FQGy9tBIEnI4tdAv\njoHF3/aDnZl7OkPImJzuINKWvhs+34jNJVG7PoukRguaXv+5lQ1xVo5tWBd6\n7q/qjv/1WbmIkmxQ/sr+KsoS/W8SomVZoEb3Qie/VKWtR70nL+6BYKWMkpja\nD06+0v9WHEjJgSzvQeMk3f0F/ADYz98e4HAqdyjLms6yQ5Hz//S51GKSuhXL\noqrk\r\n=fDeF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ3roO+vf3pRGLOKB/TyzgS5AnGegaQYQEO4Gi1dbOyAIgIhJtsEybkq5zgt3kX45Nhxz+FtMx6njhPSZPRsSUumI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598554585-2ac2a31e.0_1598554739962_0.38790686759994175"},"_hasShrinkwrap":false},"2.4.3-next-1598554932-b511dd3c.0":{"name":"@xdn/core","version":"2.4.3-next-1598554932-b511dd3c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598554932-b511dd3c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0nwZ22Ed1aEj1KxR5yFhGn+LpPSVWjJfJ6kaFH7bQ69mPSVE14/p7Nw4HWsOdk6c035G5eY5AEaR8lf/+HvWSA==","shasum":"76f20df5b10108a83be404ec57a779d27cc738da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598554932-b511dd3c.0.tgz","fileCount":137,"unpackedSize":602091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSAPACRA9TVsSAnZWagAALlgP/R65dlYJ+d6e4xBkPvR+\nihyJrTPKjR+BfXDtvi6zOmEhf+dvJP7soDvo85wu5Cvk3vQlu21hkfK7U6dg\n6/koRBUc+t42ln1z9tBFF4/4XUZn58xZzDWrZML60tKs8RAB+uYoL91S/21X\nrqjYrNaIMElCLSRQkH47EQP4bYHg9BDRMIiPtT7GfH+B+xz1IImJOMvTnfvo\nvwz9UK+7HIySk3kBb6IHFY5nwY2vz2P1jt2NG8ioKQj7jfN3YEZa8TNHf91s\nBKlX3ntmGArpfIkO3YLN7zgmnjijm6z6Xvtl+GSMI9G4RhE/vdLAW7bNohEQ\nbHcSJitRSg04sUmytaLnHB0DoK2YTuv9gme9hA0synSEX3rq0Mr7OSothSMo\nuQWM9lJGAWG4IY5sbpTNqg6iXL3r8Nh53U38m94/5pDZUaf9qGhLkE8wPboD\nM4Cc1Z6qXDi1qzHGKtwS6mgDPRrmmhzBuvVZ6egbJZAbGFUQbpZVxps0J581\nw9VizoKKxi3lsVU9Pe06xq6/YRQx8WwF1Sf7UIKpX/3e9hEZUEJag5t0r8H5\nxeazid/P/4WVBfK1PhOHEA9spJdT/ssn2Dx0upMOMsbK1m6RpN4VW1UQeY6Y\n9ggElkDMR8pdZWr7RUr7fA5hYaGX8OaT0Fwm6LE4LbFb8TcR5JrI11MEsBQm\nKuTL\r\n=2PuN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDN8bL6jbmWr9Hn58KCY6ZLS2y4QKXmdDA4WRMW23U3pwIgHNqZXzqm6Xge9p6uwfv6IJm4S6VZ5PKDTkkJaosxnuc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598554932-b511dd3c.0_1598555072441_0.4204677403744155"},"_hasShrinkwrap":false},"2.4.3-next-1598555067-6558e1a7.0":{"name":"@xdn/core","version":"2.4.3-next-1598555067-6558e1a7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598555067-6558e1a7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+9patzvox3eIuoYf4zFEbNExChAInZsPzkqSRZznM+v4kZsE0CDf+A9/q7lfDu20F0SR3FF3o5H7yrbCxW1qcg==","shasum":"c2fb02f69d35001be5d1dd2e6ee92829b16a8a02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598555067-6558e1a7.0.tgz","fileCount":135,"unpackedSize":603116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSARNCRA9TVsSAnZWagAA8yEP/AhN/GfcoXD9/bdSblof\nJSImkMsrz6ztTpTIwv2luUfA4fo4Jyo6S6T4MFql4B11FAnrqGYmnumn/M1N\nMNBPMYDTkAhIU6tFH0YHjNDBnafZ4bpppz7lKxySA5uNvw9GgX4lmiFdc4IF\n6jpQPX5PpZt1nLy/zMTclIjwagSKX3oizZ1vvl5EJRo8sqpilQr+AxAOMUav\n5f1YzHZ1ORuhzxoM+SXGLIXZGT4eIY6Kfwq/YIBXrKcFRTC+ENUASsoWiVyF\nOZM/C1oqllTPPk5Bdbeogg3TvmS1j7r/TU+caONVP+QmDv9tvzmg4OcT3OQP\nrvwObixnS2sHbVCqde4eHs/rEBUAHQL+QjLaQJwlMkZPe0YUPPgBMfFHDs9n\nCD8LqESaFKMo/F1a1uTUHekSMJEIHM9Nw7+Iqjpmtl56vbCYz9foA00yIjiw\nBF3/pRKOaYPFj4CQpb0AYNuk3fIdxoPAE5JmG2TqY318tPKQZ/1MQdu0nF4e\n8CgvxcxWr/azZzM0d5UVeJYpy3yI557nEszi8mQLZc9WetgTf++C971nL9P5\noi6mKb+DvvXDhW9fwFUcSJLVWCSufoYARiL+GWAB0dm+AIyajXkbpjIcHtTq\nteE2+3aWcaeNfhG58t5CqmgDyjwnZlcBOKmpVK1iaITLAbi40NkCODwFBb7D\nsz89\r\n=ECTG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJS7+/DOSqWcYuFni6N0CTRHykKPzKTNVZgrzN70qgQwIhAIX+RFTCqOVuqLGalUGAPX87tNynX8+Yd2KZ4CTXgEH9"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598555067-6558e1a7.0_1598555212986_0.7866624923231476"},"_hasShrinkwrap":false},"2.4.3-next-1598555146-4da9acd2.0":{"name":"@xdn/core","version":"2.4.3-next-1598555146-4da9acd2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598555146-4da9acd2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-kesKl3gcVKJv1QGD7pBT4KpZxfiO/RpMnqSaSyWQ1aDN+Po5U6132wVZzuGhvKhZu8mkH0d/cWxRLr07a1c9ew==","shasum":"704b5336ef7a13916370bb2cf6a53a55590f21e8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598555146-4da9acd2.0.tgz","fileCount":135,"unpackedSize":604736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSASfCRA9TVsSAnZWagAAibYQAJVibPXiXb1b18lZNCrX\nsbSi3PQCb9ACvUz1YoQdszI8gqR5E9c8/FG4LJBM5TADstCX2S+LVQRIaiPA\nLtT2YLUZXbOoIk0jyPiU5YWSuVL547qdgDJLP8MH0Smj+3xs+Dn9EhEhg5bj\n0EiZQpG6h2ZiUCh0N5KgIX+/J9pidBayFBOHKAtNneJKbZ99yhqIiPyBfi7Y\n5Bq+3ijvUS+sPH3tFvtARb0DYsoIng6cGnrdqORaw1El4fhBy3v9nqXQGFSQ\nv+m+XJwtvIhVWaBJUdDOrEU4N2hC1/6BQFEPnxIZ1bnZ2th13p5MuMHmxUeu\nHVrdPWun7ra1MyxmRktdgLzTspsJjmtg88JSnvZEiCWTCS6g1ofQGUWaLSdz\nYyc5BypguszMszwGUstFQx1l+Lwl+ecXMzSiqPBxv1dVaVQEVEjc8rF+bYOI\nTehbAleXJKAzE4RH8NLiSrKcen2jXwVR9uWZWwHTzR6rSbbQO1PKpslgqN+M\n6deRewlYHAHNyiKvYZlVxSyxZW6+UtUMWpO6j1G19zIbxARMXlpmNE7SiBaT\n9lj+ThEndyr6F4/jn2oaNI6UgxUR7yu9WvDHpGapnQivnw+oYvqNwCb0Myk+\ncp1AiwPuBVihhbx3OsedTql8ohL9zT+esdMeWGw4gTjtsozc1nztHXXWW+j9\n0FvS\r\n=MoAX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6gy8kkLnI4bJrBd26RaYeHguwSgoo5EyBl+e0oP+zlQIhAPFZcNeqMtbrwqo6wDX/IqB7T/wNYRpjHRc/uxqihXSM"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598555146-4da9acd2.0_1598555294494_0.5916572654972241"},"_hasShrinkwrap":false},"2.4.3-next-1598556966-058c93a6.0":{"name":"@xdn/core","version":"2.4.3-next-1598556966-058c93a6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598556966-058c93a6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hC0O8kbLvFdEmDey2l+A0O//BxEeURGiBQqB8lfOir1NDDbjnOsJcP38OzfQpde8zHE4u+C6hRV/GSF6JsH4Uw==","shasum":"a4876678b3a7d91a2b1b4b95368e6d82b5876e38","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598556966-058c93a6.0.tgz","fileCount":135,"unpackedSize":601493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSAu9CRA9TVsSAnZWagAAhX0P/jJaFl0Tz6t2z+yVOtVq\nlG8B9aSOonpWHxnbmusCd2x7U/uY8vjsn4Korj8lJBty1cLtcSwWSwTsNv/T\n4Bqb3Ud7l1oeD+CQeZI46YkxBD3gXg4MOcAYVS7DGgUSspCiN+kDO/S/81JI\n/wqy4pl74xLyQIwP+szqnAWirVxmCwrsLwp7xmsquoYRfA17tYuSnv2FSOcO\nf+t+ILW5PIgdh4W9og/+46QEOK5KJKudS7HUJtwt4kx4zAgIE3hCSjSqsBn9\n1LvLD4RPG0F2KPf0hDt/IX1qO80Va9ZGuvoffomhqsHv65m3w78HUHcP7Vjv\n9UUYpVDmZL1uus7RSGa8lTV/FS/MN+c2KPKFgCuR5XRxNFEGIprmzab7w3R2\ny2Dkhece4Z9f99b641ueOHBiiIspV7K3o8HmKcySRvG0O0sYS1uy03um4g3U\nIAs+2hq/eHKUx9d3mnG/aQBbh98VJlr6VxaDlj71Ar0tnQDAOPH7x3mQUGZz\nn2N4l+K6vjNFy7XqZsjUzpQqFLovHdZFgzL+/ldfJnev/rLnlSDjx5pM7m43\nzW9qbwiw2BvNXYyGJO/3zzCm6PMls9tjehlvY1qUAIvtvVoTJVqsxiON/vTN\ngGKXVpff21DLLXOg2Fr1em1SGbOdGJPEgcuhfRo3YfQKGlDDKzftG8A1SxoU\njrDZ\r\n=nobc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVjqdPbg08KzRfROkZpoB54qdiUpaxrCDkoeoq3VHV8gIge2Cc7h2Oi4mu8eaAtdJdlG1AQ8KCyJg2coosn9ZRaoQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598556966-058c93a6.0_1598557116975_0.993862648960556"},"_hasShrinkwrap":false},"2.4.3-next-1598558125-f6830a3a.0":{"name":"@xdn/core","version":"2.4.3-next-1598558125-f6830a3a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598558125-f6830a3a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Wl2GMkNaELN0ThK0QNA/DHQDsKiFftNYRPvydWf7mIQ5pfogRyPtZOOvlRNwRQYCUtVo6+fMN6DIbQb+WDkd+Q==","shasum":"a14217171b41d20b81b35427c2a17c4695aee543","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598558125-f6830a3a.0.tgz","fileCount":135,"unpackedSize":601493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSBArCRA9TVsSAnZWagAAORYP/iAp5+vvQ4WKXUYqaepM\nRPSwmEkMTKz0D+2/2dGvJb+arJ7cGLkXUjS97P6O+7s9oIK6DItleRIGB+oG\n6feP7a0iuKHQtKzgQbFIwZHGPQsBXitj4vdkdCj9b4e+8s6nTcAFtopPUr3t\nL1lj1uP+bp/f4prvw25yHBSi3tOD3HZ9oBn5bMkpUClNC7N48paZOKQstoDv\nk43Uia1iyehhNIx8/YNFgXEagH6H3TguAt/gqiKvi6QJTKHzh9vffdVhGbsp\nTwD/4vRfEYO89gq84uv6wlhI+pR0ZaEQXNvVZHzwo0g7DKpIZrbkIqVbL19D\ndAukBpE/gBC23eBDCDkBHKWJOZYGZGO/04ab0HBvRJy8pPNQh4rvHdYbEB+u\nxY0/R2SOj4I3FwJo8VzAIEcSZKBsmczpj+NRnugT2sP1hy2jKLTkypC9iTnn\nU/hRAC/C2Qn6Y3AUJsvIspCG2hriwyoPuOQOh+Tk06enQu+fnD+/tDfH3TEo\nSFcOrauwjvTcf/E8Nu5dv/FfwNNLDNmOnmq7frV4wRJQaRhb2cGAKtr7az/e\n6CXb9UFqlJo4yO9DkLYpSqqAnNvR2qS+/KiquoWh1NK3tCq/ij7IZaftgLXQ\nrCe1mjIGibkqZb1lmuFc2R7Y9C9Jb3kjp66T+LFkT/MTbZY4Lh+ROMQ+UROb\nzr+D\r\n=6Sh8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE3gjApb6+xQQmh1pRkfWrZe0EqlrqiAe8LTpNwk2J44AiEA0eW3I/nmKgJV5YziYt/ArPNoxsqMlGy2Bz7MaOG+bPk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598558125-f6830a3a.0_1598558251335_0.061310618155207"},"_hasShrinkwrap":false},"2.4.3-next-1598560387-9fcd2760.0":{"name":"@xdn/core","version":"2.4.3-next-1598560387-9fcd2760.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598560387-9fcd2760.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Z/N5NOJg8E2lOMxTl62YiodmdDCKSyJHdqkfVK/wLNE2Z2hkdxOrkNqm/MChZ648t0C9hC8i6Imoutc3CoJd2Q==","shasum":"e8970d4e14667b5311a8cf2a6cf47e7cfc8b9786","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598560387-9fcd2760.0.tgz","fileCount":135,"unpackedSize":603087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSBkFCRA9TVsSAnZWagAA45EQAI/FLyPHoQYCY8NMjQry\noFw4HvgNAs2hd6pzPxA/Df39qvCuULr5//Qqp5z1TA0rLV76yWpjMOFjLIDI\nHMfE4yA3gyJrNJzzVXsXtq0DB3fCILQatc3yF9+wRm8T0nCusSq6L5V/XGXg\nu1YpYCim2iJHWnpYmkZCaxT7iakFRBtwxS1a9Caq68MivssyQ7HfDtwf+Z8x\nQPP0xW/Fihx96HxdH6HI4cnkAZUCkwGC6EPpJj+FCo2C6qipqxNm859szA9q\nFQHBJbFEwbky6N7kIu9skMVpvTVX+qz0xrQoAEhTZMHmyhGkZsrO5HwxCuMb\nCrKlUavxGDO59w3RdsvMbwInoV4HmqjvXICkMoqiKjn7sN/Obf5Y4hP5+FbC\nlkkivsKaeWU/qNI2bWlsM2TcEPdnlpEjtXb6MlKT77fl7OYXQGVYhX8n8Lia\nBCw1AZ6afX6VK6gmFfPypdcI9TNoZ6RdGDRNr4DMJ9DOCQ/gnMFAmru/pFbQ\nZ8/L6tN2NRrfaxyHuwiyBQC5DxJM5xnOZ80QicioNowPbpdaxKjkSEvFHbSb\n394YImh1l9P7fXMBBA+GAjdeIiBHBd3qeZN413haLR4VJztVl3stlOhnkWv8\n994UaufFn4fcuMS9zKW4GaXmWNHrcdy3NfE6lxcLxibOmkEaaenXHB1Yvw4Y\nY3pE\r\n=ui8h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDe8Op+GYnxOkCbghoRYh1n4NX2CU6oPVfzUjduy5UyqQIgGu+it6rfZ513OhL01rsAjqJnAMv8fBWsI2wqK3zEL7g="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598560387-9fcd2760.0_1598560517409_0.8108221733675958"},"_hasShrinkwrap":false},"2.4.3-next-1598561912-3e1360c7.0":{"name":"@xdn/core","version":"2.4.3-next-1598561912-3e1360c7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598561912-3e1360c7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-kLWUXfi3x1s3p1N1cF0oTjwvlHKiDO8XtvzfxMQahZmeOkHX7w/gf+pg5Vz/LBzj5zL1f3WEq0ZaW4qKrCZ5Vg==","shasum":"ba8342764c5ecbbad2379f272ec792767e776bdc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598561912-3e1360c7.0.tgz","fileCount":135,"unpackedSize":601493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSB8GCRA9TVsSAnZWagAAkHEP/13emZy9AkTnQKDA8x0F\nmNyufn6EPrB5LmnHy9W1XIxcLooM/3k370VeVUzLKbI024U8Lvj7eNOQnegU\nZylB1jbbOTfub7LZ0bWGMJcYKl8mX2Nfd6lKK1Ra6E6nEYq/xVHJQESFv66u\nFghpV2C7eCLqWJ1MezlRY1BWnqS+Q32AW4LUB3r4Cl6RnXTr8CkWzz209j0g\nYM7IimFZLcVYUqAG/1ibp+edp1Dx5BBfuGWaIc+SLMUYh8iYmWU/JKdEYDqj\nTnNPC1jl15/cHp3A095rNWdd3OSZGElm719BI2eMLPvD6G77neLNTz3FCUIK\nve2BkRN94NicjlijFLeRDx1di4VpW8B3bhNUjIEiiuL5HHkhSAniM/e9F2PC\nkgt3xqRvf6yU73o9pwc8n+SnWHWTqiBaSuRNl119PGdqEI8VeL7f/xCvhVU2\nDDc8SPlqQXx47RLhkdeurLovev8mbpzvrLr7BJyYZISPHb8b/lROUl8WRx9t\nAtMzHJedtC8bUVe+0PD9aujnimOVpZCnnJvlyPmiKODfYeVWvqHH0iIsG07L\noORR1NP4sO4UR9pocmXy6PB7hjj78cxhUtnwG+1UJG8LFy3PrHX3kBf7tPTh\ndZekafxSyvMT6ouRZH33weJnWWglgTaXtCYhqwtgKfM8P49vzqtdrdy9S0bL\n2KNI\r\n=Uleh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHS9X75d/TggMzZIjBcBaNugLyO2fz2C4CCMI0CAeVLAIgKlxP1E+ziOxPuICA++YaWvPegG94NWDdpQ7CESsCvew="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598561912-3e1360c7.0_1598562053881_0.7218933031721089"},"_hasShrinkwrap":false},"2.4.3-next-1598566293-3e1360c7.0":{"name":"@xdn/core","version":"2.4.3-next-1598566293-3e1360c7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598566293-3e1360c7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-iO0bbqWO4zj9F9la9ALPIbD9OkSkbLTu14XMxyy62kLYNbPoqUFThDN605DWbxvhmSUrmm4tZMe0rO8wwk0AnA==","shasum":"52ca7c3be47688a13bd43e2e96f99e9f80dfb4d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598566293-3e1360c7.0.tgz","fileCount":135,"unpackedSize":601493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSDAxCRA9TVsSAnZWagAAR6oP/RI31g5YQp7iK8A3oJv8\ntGO+JrEoGBUKEq++8YcJwWVat08f1gCLoHZ0r/n1HWlgyJJLZmGXELXLF91l\nKC2WM7Kj31kGvAxY/rGcKYlbrrnm8VSHG+x91Rn+lmfaDPo27PjjgZioO2gD\nmilrDyRlvUbahhyshQMBs8tHTtM70yoBXgJkkqeggM5ujvKrp+L8SIVLWinq\nDU6jceLebFgqFb2VjNCOU7w65MD5SSoYU6ZoYS7eT3IDfoqm8tTs8pjKfAf/\n2tysprSke55vtA7ARJp5aWu01MBmpg3Xca5xwsMz/zqS2qMZq0v6ogfy5XAk\nn+ekgTVw89nCVreNj7m2n9186eHliNg1noiTXEbvqqtQ5oZgc1COSY5U7v02\nsb4gDhYNM4V1hsGdaS7mMzK+PFpvYP2wd0PQsyvJgxsUsFNTKJFCOsKom8Bn\nI7jNLXJjlgor0cqhT6F6WmWai08kIpKNNjRtXhb3IkuStShTeRG5jV0vhGRf\n4+97pKd9W0SbZO5QtDVSuZaMkB2YUXSSN9i9vjJY71poxaFKe9iUhhogRckF\noUVmnnl6C36kC/LW42l1jaQk+27a/Idh4yvrx4OUe9aY2ubfOfH+psrOa+mf\nJKsx7EojZaWSGTzgIJ2avlYn3mcLF60S4ctWH5vMRBRl/5fKIB6qJIjf6eY4\nRZVA\r\n=h4SQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCri30z1qz39miXO245Wf5aHhJ/M+E+dJBSMnuKKmayqgIhAKDwUq3/D5XdTT0VGc2YGEPOmW3ThOq1KlNUe8P/nSRS"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598566293-3e1360c7.0_1598566449211_0.905197304415742"},"_hasShrinkwrap":false},"2.4.3-next-1598567697-222031c7.0":{"name":"@xdn/core","version":"2.4.3-next-1598567697-222031c7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598567697-222031c7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dmzpQSh3t8Jy3IDbqJfDAUmbNq7nwKq7vq1iK2ISJ4rcczoHVLl+HXV+6zbViV13sy+zUHwSxNf8tt+avQtahA==","shasum":"d22af7bbb9af1138267486fc9590f471118513e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598567697-222031c7.0.tgz","fileCount":135,"unpackedSize":604736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSDWjCRA9TVsSAnZWagAArcAQAIkUnKaOu8HDjDM3mLVN\nSOtByZ2fBLtsC91y97racwdLrdaoQ9q2+PCvcMPYnGwuzyJRKXCxPN9dZBr0\naXkdjta31uEv3LuB0QGM10Y3Nk1mH8ByqH5qCIMXq/RjTgDlm3hIJlb7xwC4\nFjVu5QvcKnchW1o6bm0Z3j8C9FyuqlfkW5L/QcWKbjiiEPHOqQ9quXCSwl7u\n26TGA75e7NuBrkleK+MQUXFaBaJ1BIOR67eRHsM1QiWpxnQEPIgXyf+gGMvS\nlIzn42T5rJ7/8vRoS4FchFnzIVizZFTdxrK4fP/p1ouWbc1aMFtgXv8HmLBs\nfHT7NGLofmv6qqucAb8Uyvd686AAk52LzQPSiHVFkzvBEDbl/M6M2DM+VVW5\nI01/lKm3T9z/wzstL88NhWNokE5UI8SffvJSGAQQgGXRm+vYGTnS0AAyoVDK\nzCM0RplxFW6i/2T+Kci1nuUXZ0/CuE6ZQ0QVsoQ2jbwj30sfxjheVqKoG8qe\n5AGh2W/dDFRqD9dKQdJdg1taJs/WUbDCHQqDkOMp2S87wwbHyO3msdYFovkb\njf563sYU/uSGG3mTiKjokWIMvrabJ1HPlv4rVUQ059igP3Hur1FsFLNleJM/\ng7RzK0+qFTHJirasWPSOf7YAdrTW2TqOgRQyEpdtXQyADay4M57wMfBKn1Y7\n+z3A\r\n=dawC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCk2znCTOmVXilApwIF9PtaBX6UkJmMRH03rF7ZiLO7PgIhAJyqf1XKSWh+4h7eH4wQ/o7055fYs6xdfLZzkCM1y/XH"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598567697-222031c7.0_1598567842840_0.9499750545478596"},"_hasShrinkwrap":false},"2.4.3-next-1598568575-f3b0eb02.0":{"name":"@xdn/core","version":"2.4.3-next-1598568575-f3b0eb02.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598568575-f3b0eb02.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WZx/nVeKBq1Ym10AUjYqyfMWwbPx17N/NOEMbNZuMssm86WQwul5mjo3GzpMNqP3h1tl4U2odNodw5mioq5fBw==","shasum":"e4f15f2f25e926395c33191f3eddec4bbadc9aec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598568575-f3b0eb02.0.tgz","fileCount":137,"unpackedSize":602091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSDkKCRA9TVsSAnZWagAAXNMP/12QeAjnTycAPVuK6dlo\nsoQzZI6e8l3ncIE3/ysre7Dz4ewl94nw2crSGZxP68G5wfstH9PiUBHNNOUh\nM4xANoKvT+omErHH1eX7SsTBJ1zCB+wGR3Cgj62FkEOp2NwB1LvpE+w3H15N\nkCYTB6X0qR7fKU9Dfd/+p9eX9Mh9kNiNLM00OJfvuigKFypoCDsgP41qcje4\nw0IaFxm8rg5G7eisMhpIfuWR9Bq7S+CdLN1UkGNfHv18cJwV5JpO/lkyJATU\nuZYoaIAYUN6/qFtUE8HuQoAaXmEbTa0sTruVj3aLZAl7VsWbtQdiq0yNyh/v\ntaP28aLeDnRSGiRujSxIBgCpCEBtp5xfZP1B/ObhU86QG+v7dPDGiduJ1oeE\nm0Ydnb3XAwXTz1jfQUkun2kTkpJ/gg0AQN6FnHE/u+L2AjZBeWFLm53rqu3t\naaGg/Wz8yrq1hFr0wUliGWk8cznLnJkq437AmPukEyz3PMv2ErRLs5v+TR73\nHCDy7Ek62vw6E81LEEJQmURddN/p0VqlSqO5PrNOVN29acFqYGE+vQOZf+5f\nucY3IqHVSIJCE743c/4NsuSQVoR4d3X7vDjuEM7F2ZRYA+dDMMccQIDggu8t\nXNAIO+auhpiucU8zKVNZc+fIpL3yrABdAPHDr5QcHN03/jelIMCc/J8rFtPR\nRYcT\r\n=nC4n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDzh/Knj5noM2nwO2178yx4d9FVH/S456KpWDVfbAxu2AiEAkrAblELDgrnSAlq1xoyU3u3kUPDTv+Vu7zlIbzyFPZY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598568575-f3b0eb02.0_1598568714092_0.6083533297028945"},"_hasShrinkwrap":false},"2.4.3-next-1598572600-a22d3ddc.0":{"name":"@xdn/core","version":"2.4.3-next-1598572600-a22d3ddc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598572600-a22d3ddc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-N3wb9J+kU5O8IGL4DVVSt+Hr7/Y0xwYdVMl3YCXRzIxVsqmHwA8CWd+BCAIU+DkBA6nwFRRYW/X3SUDehakzXQ==","shasum":"3bf9c604912a8e387a0eb6f3f92b3f08b5d8c335","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598572600-a22d3ddc.0.tgz","fileCount":135,"unpackedSize":601882,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSEiuCRA9TVsSAnZWagAApSsP/RYIyS5VmVKK4gevLTNT\ns+tScTz09ajhf3fiJkW+PJ3Zg2gDfTKm/57hUVBRIDFKTNESbmY/BnYpq+j+\n2FsDhtJzC7hYrykkWHtlqJuZIUjWsj0CvpNvfbuGCSFwNaLAoiIUpvLc02mW\nfgQcJKSOE2YDzyZYvuQcFlx6cF+QjYn6cmPrWdz3mdutHOU1e5cWmQm4rqt5\naXCcp2qWsQuHprOe5X5TDMY3usgSGEpaReUmiU20j6/3wd7ALkayiQXVnp3q\nTw+VNV3UqtuX8Qe5CpYNdCt8y3OSeQaYLFobc9gw4crBrjXXI6M49cJa02OX\nnLMy014j2HU4GVNkfsYxSJuBFFUGtEd1BxQNVnVUxiGuZUpCTdmKU/X/+/LO\nn05opILIaGL+pb4I8+dR2JGZxnlAeNVRP1hjbrsrSYnHXDsr17qJfRbhapba\nbiwSn8aBPSHatDoZG0cKZzieghPjfovDwx+ZBiBb1UtR1bs0a7VwpDdp4KDo\n0MJkhexP2XVbnZWlELMEY+9SNBnaKsvN9EZqEBtlkXuVenPcZZmPRyglPRH4\nYLC86E5U6wNbQ0tmC7XzrAgdvrA4a3VI0AjZrT3J85XyuuW37bd2Trdrrhko\nI7PTolVAgFpAufK6f3uJC0qqS2iEjYuR2Aj7N66wfvdjPO3lfC39fSBp/8y4\nPTRc\r\n=s8xo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/UYFuGCGGALNhxCQXfauZPiRgQQYmguauojz9lAhPJgIgDpfisVvHGIItOTDRZEfGiOoM5JuPiAh50ggY62kIKd8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598572600-a22d3ddc.0_1598572718261_0.6623259378576192"},"_hasShrinkwrap":false},"2.4.3-next-1598573430-42f9a86c.0":{"name":"@xdn/core","version":"2.4.3-next-1598573430-42f9a86c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598573430-42f9a86c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MS8NvZXyilmkxRW0KDJaarUkxdcgtRXDiaovWhps5IjxtaNc7qgOZaLH1WK7xJapIEwfbzmRN+F+9Gap8RzWZA==","shasum":"639257960e3c9fa75002126a74bb67d151d980c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598573430-42f9a86c.0.tgz","fileCount":135,"unpackedSize":610050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSEwMCRA9TVsSAnZWagAA0PgP/0PMo1H1adRj4Qi2mZ2r\nrfFWabjBCuN4KuGSUaqxkkVZmCVC4vYftEDhaZ6SPNsIy1YjHzLoN3XN3+JA\nJnkR6tZsGh66RFA/uuE1AYI7/YUNZiATZkTwWEiLrR/iIvTptl3nukkAxRV0\nEXEXNDF1zQ8URaz8UwFLzlVvqfIBXDZCjLz8fbl+Nr52ToJvF61W+sJ/jJaC\nzMaTfD96A/vSTkkHd+9zakief9jCKJwSg2h4UYoDiczZtKXL+wwq5JX6omcK\nGSN4s9JVLBB89rDCACx+do8tDEF78HxgGSgi2mY6/76qCeddnLHmvrD6A2Gw\nBjgwrlNO/6PHgNlhUyWH6htv5/bTQf9Vio2iQL4c9x3ACDCe2K6WitY2c2zI\n8lvbRJwaWTGJ45rTRyAvQe+dWt/xrFt/C0REXpqDPLmTuNPVTANVybSFtOjh\nPP10Alzq3woTtSNlnAgqTbYS1F/7fXqQ3zOgA6xtcgA4G6thKibVHCTUwihi\nnGpxQ3tFfWRgLa2oDxzyuI09CkhmKyDI5QfnIE5u6cY/JGMNNprIXbnPx208\n7s+XpnlysC/ouxdEjn5CaWGrcfhHLrvyt0KWXWOqgJMGA5NZuEn8IS7MV/vD\nvLFplu/ezEBPwcxSDHte8E5LV4kvd11RGGzSXSGSxn3GsdMuqR5ZZe7NpbWg\n6cT7\r\n=ohBd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDHYfSggZ0tH8m/vLO44CJKCgoRTAlX1oKDi6vKu6Zw8AiEAo1XrGLAhtLuzfybeeTLWgiKmWeiQkZxY0C36b0tIFis="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598573430-42f9a86c.0_1598573579972_0.7055684353186253"},"_hasShrinkwrap":false},"2.4.3-next-1598573779-0fa5c842.0":{"name":"@xdn/core","version":"2.4.3-next-1598573779-0fa5c842.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598573779-0fa5c842.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9X/nYTRLKWUnWW6pBhtQ3rIPmd9yyUMXghBYL5jZo56HbuHy01Mk375GoSgD8PddPnt7/QPP85moQFysZnbv9w==","shasum":"8242b1d742d42676400651514522fa2dc0977767","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598573779-0fa5c842.0.tgz","fileCount":135,"unpackedSize":601906,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSE1aCRA9TVsSAnZWagAAwjIP/3ddRXPxnR3PrASujr9O\np388kABCHK/ZC8Ysjxt/C2wMJ0wcLqspibIMjlwfus+u4HqMOeEEk72ngrDW\nklhm020maQvKyMUQKtPCxHF7bGPXwKrGqXJaJxwGh9WSUPiAjYv/fWsf9gge\nQGoIUoHmhcRZ0NdM+ilZldnnN3DyqUJwduvl1n0UOM1pzJHMDWfteVsciGEN\nqC4ZjfQjnnmsdy1Dbib7HRkWwxP7yt4BrAmNLHvRYEh3VGgqtHap89iwGtUJ\ndw+dxrMFPYlJt3246fnf8U6P4s3SC20Z4VACrDcHDrtDr/Vthk6JbCA5DwFr\nE2YfLunz6k/QMmARX5tXs2mh3vkh6TbFjsrkUgTMfAkNdwR10DiNqCIqY8BJ\nEMFEE1UEmiHk8UcD6X3JVupeV6D1D1zYokzYu1K8jSxagj4eF7UESJH86y2K\nVyVRxUYZeZCD6oevFt+BRAnOTC86i6IO322JpUktHzaneuJxVmff9aFVcHwn\nQhB8rY+L9i+nnF6FUCEjbZGBF0TtbJiQYF18ioOIolfS2V/yET7Fng0ZHNnC\nCxDiRJtJmsaeDVpIbV8dzNDD0l91ba/Y4ghMhDV3C/z/iQi2QMDN7VmFg81a\n4V990stL44TS0hHJl1BGGObAVv/DJK4XeQ5bH3/+bt8kQrtmrFUxiVDPab71\nNR3X\r\n=/KR8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTj1qpQ/RBS30gScbKyRKZu2SojMuZSMxYNsYNAQWmggIhAPiq9RMt3NhCGG/whbWvcja4E0NW1LScI1tzZolyUlbQ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598573779-0fa5c842.0_1598573913632_0.011784949172740866"},"_hasShrinkwrap":false},"2.4.3-next-1598608146-7b73d029.0":{"name":"@xdn/core","version":"2.4.3-next-1598608146-7b73d029.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598608146-7b73d029.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YOmm8Rwe/s4/Ebkp+ikHVJCSrcNHn9TibFfMrNDygvRJFejkfHcXHraFAwpD949fEZFvre7a5nzTiLZWLkiWhw==","shasum":"b8bdbc26cbf058371d77201a1f98368b14a1102c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598608146-7b73d029.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSNNhCRA9TVsSAnZWagAAgaAP/i6sJRp1Qvkx2zxYgYYu\n/Dtf0TzA+Rfu3WP9ukaPw06okzD0i8eL19eZt5j8IJYMGTO6oyNGCVMIYHSc\n6vffDo6V4/qw5FJ5NS7ynIfQKL3j0ZfAz2AVyso83pGJQQAbYcSJCkadnhDz\nDoxTm7WcOuHkpuNtvw0LaYPheKzEs0BVRw79SARm8qBwYvG2VZGhPfs5Gpv6\nTxc0JOoN3lBauMAAhCohcuOQDFMSuoe+nWUc8L/fxPtRcovWQ3LF12c05vEO\nLnXDIKFtcltRwhP5mC60xM49Vjq4tzHoDfzDvtjlAPOa/c0ykVP1B1dYKIKX\nnwkewVtrrxydQGRZd/zXFLQADNgRTAfYPTPodOXUXFsEJEKffRZEWR68KS+B\nbdQG1DY5ihahP4ATjO3McYFeFXu7vJXmTECW7OCmyPUR5mw7/wS99cYlwwgF\nRsLyvmXm8DvAORjfE0U4G3nEe2OGeckJIPZGe6t2PUsQIRe/druYtjTAlFmM\nIlOuoqo7X+H98KkVV3iT2uaue7dqTUJAgEyp+csEa8+HKkVclt6TW1sE5QtI\n4JoJQBB/L+i63jCJ8KgmpZ8QNcQlvJFUW1PN1c3Qwn/In2uut6+t5RHGMBkv\nB+dVRVlxd2OKdzMP9UvjNl6HxZp/CSbdVJpYWTv+Y5xGs3l5WFV8GalIdOEW\n/syJ\r\n=Pz2o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsJa8VNEodCutAZs728IQo9SoHT7AOL5zl8vB13y3h5AIhAMJ8e2NjRLjzeA4f/LUJeCFf0TrDCB0AitkbbvFdBoTF"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598608146-7b73d029.0_1598608225283_0.27494671793758685"},"_hasShrinkwrap":false},"2.4.3-next-1598608868-551f063b.0":{"name":"@xdn/core","version":"2.4.3-next-1598608868-551f063b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598608868-551f063b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-E8qcHUXB01D6SrUsV1uGM5KVNk8Rt8c6Hosp25Yp4Uc50K7uNuQyOqnVk6N4+1ScV+sqXpehsTdhLOivxpNl2g==","shasum":"0ff80faf21418294d14623f1a95f5e5e2cfa02d4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598608868-551f063b.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSNYwCRA9TVsSAnZWagAA0fgP/R8yQ7VlRhqPqYFaPIPu\nvCssAzsd8kJeqyHpEOsjElrXNsz7jmytyny8npoWT+CyEnkcvCENwKUlbi7z\n4lG88NWzF+U8AOq3/Cw63wF55JCYpOO3AGA9ahD1fWqr/Im1InGEMAYThJxl\n5Wr4LGdX+k+1gEyPq6kkjBGVWARzB8MM98vLfhqcJfUl9h9rWVuHdGA7xz0u\nO2QDpVpFX2sl4PmwXuX1R/Okr4cT7S80K+9Yo7M4Y4ibsHvhqQKhyE/xs/uE\n0MNTxOaCasIKfjk3Z58LM+N7klpcdjtbknckpm/NVQKtqV/c8YsDLPR8uIRx\n4a2/cVpW8iD4IyaNG2wT/qlEl+OxJQRYJBxycHXykZdX6sr1acc9OEoozn7k\noYCEIFThCHRnTSRovzbpO1rtbcpUXbogw8CKDqBwDH/sN5BOrT7oC90kkmbE\nIjMCmrHtaZBcfd2QrUFvMml8mQzQuhkxF/jM6+u4sjeBHwX3XCxE1+3jLSDZ\naxNp3vMMABh3beEFZ797tGvk+dykiAABHZ2t9CJ5U2kfJWNWjcp3bmqEpGet\nwlFjpgF1uM0T4t+QcCic8urlNCujpA7IXK2hF4n+sGHfcuhwNS0C+KsWBgOv\naXxXflmfwTs7Y2yE5h0zJA3r6nPODItiK4xz3UZ4MBB3cQXwrqvE46F0MRTv\n6Dc9\r\n=h6QB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBY5IWnUF9vaI1U26MGRZrO+uSeu6rJbpghL1snNCyThAiEAgP3TnWz1NOY06JqAQLayaSFjg2meSvMtl7/4HHMmM4Q="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598608868-551f063b.0_1598608944053_0.3343750106397285"},"_hasShrinkwrap":false},"2.4.3-next-1598609981-9fcd2760.0":{"name":"@xdn/core","version":"2.4.3-next-1598609981-9fcd2760.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598609981-9fcd2760.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4lnT6B2jhGabxNY3/uEmG5+LuqRw0z0/DcxP4qIBWu9LZcWHrGw1uaPQi4xey7Unoptd3SyuhwksJ1qInlUOBQ==","shasum":"daa2deb760cbb26a8be2c03a3229ac2e2d2b7dc2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598609981-9fcd2760.0.tgz","fileCount":135,"unpackedSize":603087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSNrMCRA9TVsSAnZWagAAe7oP/i6ZWs2HjpFCUhNWVuYI\nIDEzfU9TKv2om6cILoKj7SGwEMGgzyWgzht+5fb98ytn9gSXLiFTZ2FTgKVS\nHWcC9u9sHavVuKJ8AvLXZuCFudiOnx4D7S0C6ojSVvsS9OhPny16gEYZGrMP\nsHTwI3zpt/cljLWOaO+3enls8R+TdCq5INWCgHRCgigWoynuR19NyfGu23o1\nacvUwhWKg17uw/o08q+IggPbP0HZ+J/9ysXkvmhrSbQUZuoaatlNwgCk/YWV\nfnpBBtYPPpzfh2/LHoBoSSaWCWOlEOGLyan0+fWCG8spHhONLKYIDhi39wvM\nWCUVPoSaErJo6kGACJixb7p/HoaML3/O/AofFsaWp+4o+42A435IjLmqUpfm\nDtG1RyCfGcRD23Asv+qtQW047HwPUolddjicP+MxhNOcc7zNL4832VA5pBo2\niEbU+Ea/j3nHOHhMv7K4GE0kJLRaooPba90zWup7eDnS/K3dov7guNmN2yzI\nn0sMmWvfvDUudYUHbrT1WfsDprOgt3ODv4EJTlS2jyt3KMRv01a2ydadaKF4\nallcvKwO744yU6Jb38kOPf6edcYCuFZgctv5bgE3k6R7QvJ+yvF2kIRzOz50\nmQMQ4ck5RHYkDr9B1iMiBCvjx1Dp1uqzbOKT069r7zt0uxO+ZKkYhvX9L6MK\n94Bv\r\n=ZA/u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8v5Zlmd49F+ZDIu2GfJTpOvxjjzu4boVdWbk987FMowIgAsfsqZaEfAWO949guDFg1C6AjfZKROf8cgibVz1gD24="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598609981-9fcd2760.0_1598610124256_0.18103009636472667"},"_hasShrinkwrap":false},"2.4.3-next-1598612606-c7898967.0":{"name":"@xdn/core","version":"2.4.3-next-1598612606-c7898967.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598612606-c7898967.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-s/jtMJ2E1/iBqgJhDy7ZP6da5BBX87dEQ41dSTQSeeIEp17vZvfO6hvQznobgrL2ryPMEu0pYvubBPMxiaO0Hw==","shasum":"f7e7c70102a8b19e13291a11713c4f81ce8c9184","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598612606-c7898967.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSOTTCRA9TVsSAnZWagAAJNQP/RPNrvaDonBm2wFuhzWk\nGssVHMZpjF3MmHbR1vuHHWjWp13gIKK4HXlB58Epub2yWIaOZVBG/PCsQ5gU\n7qQl7OILG47AcipkFG7R6hc/OfoFLcl8rMf2oY9tb/0OdBL0FszTTAOWiwbT\nRf3B7aC91AvaIZPZFg2SPwaomde1Im3l5qUNNU8yBws1e08iVbZOZu4bzkAV\no+jQEAtFhp5VCk4M24Hpf71WHqgiHg+TMUpqfZSHT00ftOwYCeUZrdLE8NMP\nM3dE1jmyX6QM6TDWAEsjwjzbx42apxgkyzE0lO8lo5Wxn2oJixHsCir+pwm0\nRsxhNpGC5A4549w/kxySIqViTKg8f7avYAYvL6Uog5rK+sUOrdF7CYPdNV90\nj3h0V7zxcRhHNL2jXitk9h3yPb4R9DBGiFE68/LPpFD3LMjKOwEEiW88hPio\n/HvYXCfCvPVZ65S4acE6PHqzVWn7idPyRvTb0ua9+s4cSGigFFhrLQjrGi28\nYm99mNHHt2pwXF1LtYvkcL13xGgbtysdjbvfcDZ2CgHDZXHa9Ry39IoaVDkQ\nZgC63v84iwzxsC4y9w5OwBitSwjeor6D40PseCy/hL13irV9CxrACSrK/3it\nALhdwZgCYY/cLaV5NrKVGRQ030qJ8E41kEHvyvWs5gP86BmL2pTdKr1yp3zl\niySe\r\n=XWS9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHWZoD8LnyDu6QPoo4nBTeRWjgHVBsrPx249rOWPeV1WAiEAp841AvREGUE9UUZB3iUXzZpEw/CLX2aWtuFOjzjTzd4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598612606-c7898967.0_1598612691251_0.5257726257922783"},"_hasShrinkwrap":false},"2.4.3-next-1598613220-91315f00.0":{"name":"@xdn/core","version":"2.4.3-next-1598613220-91315f00.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598613220-91315f00.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-AuT+N5S2xRqbpLhYYzGyd7WqJ9PaqbZQKXtBMgA6ddugJlHhr0cv0BdewtHbKRwdFiqVQtXEqTuPVqtzhI7fzQ==","shasum":"26b92ae8be8a682eabd7bc0bac193e4aaf32b400","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598613220-91315f00.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSOczCRA9TVsSAnZWagAAJHAP/0/AMZKDEniUA6da+Epo\npbcWkQyTLxx1ySN53vXxTjZJBWEom8g/siV9VFJxVDK4bLigsmznaPDDPOnw\nvj6cw/j9B/jwpdh0e41cv15DLMe5z01eGCHkt6n0Mi8GeGSzk7HMRVVuRN/O\n/3S/NwSk2KSeWCAqAgJnqOl0TG3p/N+Cwac8KtgtLDYHkEGtXUAzbH6rLVtE\n1szJUWGPtbVBQ/3CZu9EYTTEoyWMENk5vbAxmjumI7Yd//FPYL4D8TYhLy0Y\nH7zYK1jieBCTd83KmdC8FU63ookwCnk+t5eSMCn28ImxeZeQ4vU34/x00AlJ\nanrUdcxJspEe/gJJuv9Ak6sgtb8SdzxbYtXzQXsLb0QQDixtBzmjhbqdqI1Q\n0H2PhRntPLh1hyoI0j+GJ0kWqz1PiFWOYi37hzKkFDjoKe3tIi3zZmn80+XN\nCb+VdveJdxTNiUocXMPwRebuPc2Lixx/MSMJQICIQVfBb8jn33b1iHO/fVC0\natdrM6wD9Mn9GCq2HuRSaNeiVk9slQU8JEuyvtPp/pwkwFTVpQbRzwcYeafM\n4Kub1LDc895OZ7597Nc649slmj+h1tdcs+thgH67b5bZ0dh8aYk6e7xekMgU\nPMRNqoNwpHOnmeHOwvdy5XlhOqpqoEtk/3PSjgk6R8F588yH9+lM77n4am5q\nrRKj\r\n=mao9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG3GblUjmWf7EpOjkpPhYMmhB9iG2GsC7kgBe4nOdR0yAiAitZTKM51+6lg78xVsljkgzvdhMS51MbaUI2fegP7sSg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598613220-91315f00.0_1598613299194_0.9631342588476992"},"_hasShrinkwrap":false},"2.4.3-next-1598614099-09d72ec1.0":{"name":"@xdn/core","version":"2.4.3-next-1598614099-09d72ec1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598614099-09d72ec1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-klO7HjpAzF2JlkPnzlXacQmCuJmFmLoHDeXVjZW0a5yzYlTm62wTdo3nnYleOEJWZ2lX0y7JvwbGjjrcR44pmg==","shasum":"eefe5e8072db13735404efddd0ceaa767a30537a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598614099-09d72ec1.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSOqiCRA9TVsSAnZWagAA+8YQAI8e9EPphRC0P4TY5MZ1\nxCep7ysk46BBZHM/Gtx5Ht7te2sVL0cPSrE9kZnsT46JmwOLRx7jXVFKlEz6\nMndK0vXewJ6a3Pf0Xc9tRN1fOFExSeanUlDv1fzSKGrathMxFxxeloR4U9V9\nhw0pli8qC5QMDQNi/Zl6Mp7u+sElOLTIN3EHNXVhXj6/qFFpsJIKAA/bdsr2\nfDgrzEg7oHOkD+e4rEvbd49q3MulEXSdnEZBDnvgEHDJngrhJcLYaJCSH6Nv\n9Z6cdSKrAH2kmcKm/qZt7gsbUVxximSYSjI/FMf2jgz+DwbqQ6etMuLF4zAA\nwngi2ZCZmEVo5AJVK9sHix8u4BZbFMKU1gz55UzISYkk8wvXxLd6Un0p2mZx\nHdmhucMpAjHWVvPXT+5Rj8ZPnrK1AR0OJiOuiYR7bkOZZULhUkLODZTVVdsM\n7ZCURjpRCYS2zuHn3uhEa3Cw5reKoHkF3oqEfqop0/EInwpwM08Ii9uugNU7\nvB81KMS9eZChIjeAA0xTqvFkXxGD3wVbHuDtgGFKnBq8NFZGhmYTlLq9LZ1j\nvB+fpYKkmEdFqfxn5xo1zFwzfoNGMLGMEspzfuQhquKY0MpB6bP9lSLwzDlL\nc+IXoVXhye1n1CazZhZu/u/Cp8dJQ1D+2tZoHY4FDqOPDTSL4yCNohPKPMFH\nZhHo\r\n=Ixqu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrrBGM+bMEAp8EaB0jPLZprg68NxuHzizU/M5cBdMDZwIgH90f3JAkUz8SOavAkh9BW+wk+u7GI6dc5yZ8Q7ra4PQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598614099-09d72ec1.0_1598614177644_0.6389740019497403"},"_hasShrinkwrap":false},"2.4.3-next-1598615169-b6ec5841.0":{"name":"@xdn/core","version":"2.4.3-next-1598615169-b6ec5841.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598615169-b6ec5841.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YBNWkEIbhkGjKPI9C+qUwt7Us4MuG8y7p4YuQf0NkPZiq5o7DYqnVGDXJyPLIPFkyhOlsLYP2JplKvZwwmaJpw==","shasum":"09fe50cfd0850d64eac45702f96b0a0e1908cf93","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598615169-b6ec5841.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSO7SCRA9TVsSAnZWagAABIkP+gMZo8hkvn3jHjErDgUf\nfdRLlqI+TkzFEIu/semtDE3i8nSZ6iwqaqMCDmAs0ICdSCn6yqhIqW6kcopq\nkdbyKvcG0AYc1+SY5N6AblCKsqFc0DN5gMY8gn0+47dLwdga3L65f6ATRhPK\nDynyNg9KFXqKtKmyboMQX5tMSq9IcFiKjdG/Qbjtz5HhmhZqG4I8WRjxPXos\nYNfgTlnQTJrV0VDNoBppxNiEnNe5VbOzh0oBqhTVGusIBqTK3VzzCu5pW4BT\nN3Cb0ZzAPS2f5CuDg408jVDgVU8/XIRsDZSmqrMDsyQpP9Zx0/mt+i7RuR8q\nVqnYG494xSYFnovY6J+iSJ0hYqOJ+U5T4TGNmW+plUjWiMPGX6EDCXHs/BeY\nz3A6oCEmXf1KYcIm5rnrxC4/lACipA1suTakQ4uU/EDZzLYo4shz+LacZnQt\nfvQz17GtvNzXcbj7yioKYUDcXPGtb0m04DU8biiowGrHi6evTf39HZYf8EnK\ncjKS91nxMegd89yWOvcTSwt+ll7zfq1e+takENq1lT6o0uX8L4CO2ke01G3f\n0VoBfysmYxE6zZE7MsgfynWKbUkAlaD3LcrLi2KAL9C9ZA1K4xcbOBzoIC+D\n56veq3wPpo4WOwugAn9Yn0GW+ZyF2ydR0RSpDq1S3+u99gn2qhJt5nuLq6uf\nGzmG\r\n=fWFr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH5woocf7bf6DBGSDhKROAW8DTsbVxB5EqXUAMpG3qt3AiAerjZNMLP96m1frGNB2FWqz7Ve/F9zBzGHanJeNhg6ww=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598615169-b6ec5841.0_1598615249524_0.8543277435532295"},"_hasShrinkwrap":false},"2.4.3-next-1598615532-3a82be52.0":{"name":"@xdn/core","version":"2.4.3-next-1598615532-3a82be52.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598615532-3a82be52.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-D63uz1rslSjrYcCNK5a9N7CUv7/XDTIy4Y4b8BhEio1ap0k2nxAg83KETQoM390PW1AUb/EHTF2Tm1Q45XzDPQ==","shasum":"3df6d2d91b7ac41ff4df01451793b2c224d8ae81","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598615532-3a82be52.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSPA4CRA9TVsSAnZWagAAXa8QAI2U1sitCQQrJvg6MDUo\nkh4WxCGJvzeyyvIHqkAddDWC4KGiBX0lTvYZJPiYRUI6Qrf2rNY97ygMr/Yp\nfEI9YYN4h9jz1K3sWX7Htnmj6X3ANLpB/E0yC36hS8MYwbgja60BwdB9+QV8\nDdHhFdQrAzIKCeGgfKz+tuaQYKwnAghvrtxUUibd7ZIwHN6KNruRA0zd4nl0\naVmKoOrE/3RPOIzjnjO1y+MCeUzo4hafbeHJoyvG5mZ8HAplUKfbGzUp7EWw\nLlW33i5SzLhuZ508oO71DoGBhCRIxWSliAsqs45ml47TdAsZ2p12TZiBDy0S\nTUbD+Op9dQukPSYs9V5yS2NjsCAUreIyFv3H21MGSxr1iUYUNobFoMEDKv+B\nD3hoyXSDyOSq8XwkIn+oOXm+RJ7CauKV2xNH+xkgPF9fw2Syyq92i7ex+5e4\ncWTQZAsUdF9Fd54uACIwTCASZwjzvuNl3jS/GK3IrRR4a0iEf80xGJECG92R\naDjqXwwj1iVcAloKtCykLWtXygIacxTJEzVMeBvLPuKnkat48LHI9I3FUzwa\nrZjlkSayCVJmf3hkyuOIoiSus9A1HZCqjAHEdvNj/nCjHU8QjZmCUbELSZaS\nvqWR0WEuhGhm+ih2sDAq1W7HDz5H4uoYT1W0U8+BfSSe8Eoi0d1IH6agS1kl\nbIaS\r\n=bJ+o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICdBWbVrTpSjzZXiBo43VxQm5nGVjh+1gHQVHH2iZNBoAiBKIqnAca0UD0NDBG+mGPczyTHQHQU2AieCyNg84M0Ivw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598615532-3a82be52.0_1598615607978_0.22654406011282968"},"_hasShrinkwrap":false},"2.4.3-next-1598616568-3a82be52.0":{"name":"@xdn/core","version":"2.4.3-next-1598616568-3a82be52.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598616568-3a82be52.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ao/ppK0N78RgSzjS34RovFxdels6+E7q8D+CC+kO7gdp7umy4wxlZX56ihuEipuNdmyB3rOj4nH4tWI2JTrluQ==","shasum":"bd6406dbc29f13cec0c4dd5468c84ec6f1af0344","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598616568-3a82be52.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSPRECRA9TVsSAnZWagAAkNkQAJE2UZWliYeuTNDlzfh/\nWFltzSfF4fhJv5Cm8+airWFJihVoKXJsAvErPCNIi4eEPFPAc4RzTx9XZpUt\nYUagRd7JwllKn62IQM8I+XEi08BYWq2GPnxdrMrO6vm45I0aXsvd39CU5fyv\nPpFVjsXxOunXBp7ytC9pNapdbR/LWz2OZ05CyzRAbSvfEdXzAMgYyUkQ6OGA\nSPTeRy+FCngC38MQ8k9+huvYFU9zrIgmv0zfl6QP4c6lxp92Ko78yRVLqppm\nrklpf03Fu52slncGzn6FrEGnAzgL0t7c2Qdq0NKUhUEkhhBAIwuxsO8wCbX5\nwRhLlW//8irUQilYfYPg7JitnHPqJGRfKWQ/ztjpW8/St24aJlhO2Pp0h72Q\nLOWsMTYzgcOrUrJ/QGCCeXZ+W4ZLwKJrUqJ7AB77Xpf74U5GtA+petIgM7O8\nEKZsOt4EEWGGWMp0rD9maGpCSLqlVvBqXcQM9Rps3RGxXikpDWAcVVbwGll7\nqRopAFjacl5gz3W+0JWCYCRpExS/mo3gaPRvH3L2zm3G7ULU2WR0CccxSFmr\nEGbaZsuirbUCu95CtSryjaZxrtGRTxeDq1jJGSaVkZFZHwjeds8z2fniSxlK\npCUDYafaEPhWuRCU/B2+5rkXLsWuQnfbmriJXd7ilK5126nxgCxQqko+SEjh\n2dt4\r\n=Gec+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPnXhszf8IIJ0HB9HBZphbXnyMg6D3+t4+oEz3+ElNrQIhAJO6rEsKCf82uvV41zBPAdPXxKaMyK4CqQmTxuLXTsKg"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598616568-3a82be52.0_1598616643457_0.12246042118617062"},"_hasShrinkwrap":false},"2.4.3-next-1598617177-66fd3be5.0":{"name":"@xdn/core","version":"2.4.3-next-1598617177-66fd3be5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598617177-66fd3be5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-F+jjQ+cOcfJou7k203l8ckLna3KVC+S+ynkReAD05a/MZ2x4a8/U/p7XkgNWlSXLgUmXxPSq6uLpqnXxhPITdQ==","shasum":"5c064355bf05d5e9836cb41b95c1e12d39e39cf2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598617177-66fd3be5.0.tgz","fileCount":135,"unpackedSize":603043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSPb1CRA9TVsSAnZWagAAZmkP/22MV3QQKrOO8HXsIxCU\nEYml25YBU2Qt4UfHkCh5L7GJNVLF7I9y+5xk6iGKJjtymViJ29rboHmw3GhE\npC/Z9cfywWSuBy2XlwB0Y3i54xSizMQcXIiEFZubTBE6m7YqwScDRxZBfLk8\nfQRxg1YLpBAaEOflnua8HZOd/9olRZ4bDuIbibc0iqz1p/BBG5KpfTgN5akj\nXqMeVWWst5WqFxsrRnAJYrRMQPc8ZZF2WjWV3zOH8KXUBJkYSOXyFOWv3kCF\nANCwBZxqiNra97r3zpkBe06gCQ5g8d8WqLx26+O+/CxcG0dngLvYU5waRrcA\n4oMc7gpOw4SjQDEtgBSOduJvCbMMwRYqTUH7oUcfxgqMTlD3xg+YYtobCsjA\nH32mjQ9Yma4IdbWfVdqOJyxEcju7AawHCJKIjJI+2CDZ83VpfuYud/yfYO9L\nO+Z99iIeRkgVg7ZD5jLbdMTeYqiRG9HeNShRA0IlW1XfgoqAJ/lkJk76E9Z1\nUIMODtyVlqTfJG1B//7jOvhsdOOEieufoO9IjRHiKce/6ANBgdWeLKxp8Tj8\nvu0IS1JgXZbWZ/8m2qGlpmkHzEbCDM4IfcUo5awsj3mn465r+PMERanb7tu2\nuRdPn5f3bjE4SgZCRYU8Ym9dtyySbG5r9L/mN1gVKN/hPECXwbYYN1P5h6NM\nd5p9\r\n=drw4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICFyt4+wQd8VXbGo/cZ3/irxrVU9eN+GtFgcnUuDly9pAiB27GyoDvHJ1cwchRSEgu38HZ7ylZruJq6h2QM9tvBX4Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598617177-66fd3be5.0_1598617333037_0.8378829778742587"},"_hasShrinkwrap":false},"2.4.3-next-1598621638-67ab13eb.0":{"name":"@xdn/core","version":"2.4.3-next-1598621638-67ab13eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598621638-67ab13eb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xxeejdO4MizNjqSmUHkpRq71epCZsXNuw6/aOTuI3o4Q03twqkv3slWuZhw+eaVlwuvsS4HlGCjmuLDIHdfbDw==","shasum":"a2ad39e727c2827c11aac70ac0303cac397d1ea0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598621638-67ab13eb.0.tgz","fileCount":135,"unpackedSize":603701,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSQhACRA9TVsSAnZWagAAP6YP/RXgcrrvSvnPA9/NP4yG\nJnHmL6wpaKnpAfV6xDyz8f7LV1B9R9XKBfS69aKSL0YdUx4WcOga+LR3eD3s\nbUbsmSPcEi5/AsXEVtAOvy6h0GcpSsM4lqL40DAC1G8lv1ITvCdi9qVYIC7Z\n+3Vvip7N2qfzf7/YeIkM+bobG5rNXARSH9Gu08E1xIT5vTRhAVZ/tQoyllGq\nT3m21pomPZHHhGES2aFqbX4JjtJAlcyc62aCnPpVLeVZS9OMli63gwePu5jx\nyfv4eMKDcdZz9MpGfRgT7E08y7FR5sID96hWkLBpl3/BhOMJH9Zqw6aWLRUh\nSxekgh8hxovkfdTFATI69CTwSLf2W+edive2CCg/bFvjdfqKyMYc+YHVtJMs\ntIXq6e4bLOMAQomQ01D9E8UmChy2anTxTpV3XW/7e9gLjcDK+nj4zYNVsD1P\ndNpFC8IYlij1+aR6vJFXjyiSzwjegc9VktOL1yjcCZied8ZS1xp47GRq8b4I\nOeoU+Vj/4BQy/jjHYSx8GGVWd1AsB7v0XQOX4ovjI0PDsExJF4z/QMLTHCko\nZhLojS2OPLuccSpQ6UKCuG0pALRqSzcTY6twNJpjSbtHPyTWkmhG/HfSYJsx\nwmCyhRvA5QcCZ37b7s1Nz6ZYfHydnFWD4GGITmFRnpuG1niNY0SwLkMTt7Qk\nIrRb\r\n=afnL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAT0t9Mg1m6nu32+qPYudD7bUrvnzpN8cDnykOT7KTXpAiBOeMHHXPzFNOxylyabnRvx7VBmyR/aRF8iyxzWfJmwAQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598621638-67ab13eb.0_1598621759857_0.775805885284359"},"_hasShrinkwrap":false},"2.4.3-next-1598622549-bb0a29ec.0":{"name":"@xdn/core","version":"2.4.3-next-1598622549-bb0a29ec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598622549-bb0a29ec.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7n+DsoukU1Nv04eosLoDm7Y+JXlGuJbxaabsirqpxwsRRFRSntLRcdJO4arOJSRcLvsh5CAhVCEdvPKmM2yqIA==","shasum":"a08a7ef2d084e1f49b91797732c3b040ab9aa002","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598622549-bb0a29ec.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSQulCRA9TVsSAnZWagAA/nwP/1XfdyE+BHeidKh0U+0O\nubbfkhTGTX3tk8m0gqD7hdaRgsOWk6yxBSjCe/sIfFRwtM7J5iunqZRzhzlk\nb0nEUI/a/QNiF35nozWnc0z9xDMNJFUoB5Jxxj0PWKDv2yNW7pVnkDH8xmaw\ntiu1Fot60YSLHs3vlwksdwPambzqGigE2gaK7TjPX370Qy/bLHMpHUFoTlBZ\nBggT52UAg/BZUCZGk7Q+XSjmRWSwKgQ9CPCvzT6YVTQajttHfz2OoILiC2DR\nAFYys65t4q4c5xdkBzguewPXFoq37iC1vWX218aRGnC51DHLF2i/JFLPVKFt\nfftDq41dmWud8iBFu68l4LdF/EYQJNT6qx/GsvgrwBiyx8EOZAir1gHTO2qx\npWR/aL+CiECrxlhAET02+pYVMgzZkTvKITaPW2LdqywHWsHXjpJcmT6Hj4Bo\n+8a7Nh6BvP6QIwNtr4bCeAKkU1fdbzZJiq+UYHliHfy3JTmdnbBX5UlXVtE9\n2rAH+dyY5WeCBTO6U42wkv4j58nA0nSjZVKTCeskpN/vjj7fz3xeATgC9WJT\nkcYxWuHoW6Sc55I+TXrB53izQh9ELw73sbM4REyuJ6uSd8zDZPCW+6SipQIC\nbnsBvt63QN8ZP20KKWrHJi4VyrXmcqAnC678gbionqHFbfKUv4Ve8FkJn4Pv\nRj9N\r\n=LT8G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCh6ck6BuRMtqa4Juk/fDxxn06FG8YgbS25hSkrMZIZhAIhAOsgBOdnI34XcvSMTiogbDbnhR6pFtSq8aPlwTeCfuGb"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598622549-bb0a29ec.0_1598622629406_0.716873917781313"},"_hasShrinkwrap":false},"2.4.3-next-1598623112-93ff9d41.0":{"name":"@xdn/core","version":"2.4.3-next-1598623112-93ff9d41.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598623112-93ff9d41.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Etmnjddxr0gfS0wdA5DH9sfmeGMtyUftZlwouc/LvRmMHyB3PCiBABKK8Rp9Yte4KcLA72P2ckb8HH2bOUzSoA==","shasum":"7931d1833ee0f60e38a495f92a0d938424de1578","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598623112-93ff9d41.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSQ3fCRA9TVsSAnZWagAAtGwQAJReoNN02AmjsIvGzoYj\nShbpedm/4WCw601AhzwqEXr3+tVpYGVBqOlushAQcgwJ785z+scOAZ5FCWG9\nktSMCI5V0oCVQYdzSOiB0NyWWMqOh3UplkarYB+QzTA2fmMpwlJW9kKSz7kY\n8xMGEM6orr+VY4ipCaC9nA2IrvERx40j8dtCNCAlu8UHMS9v2Se5GIKXsdEk\nL4B0t40KrxMCYQeQgcqHnROuMxYuhmKydav3U3X7LEqVfoN+BPGtrLSjaqUY\nbeG9IcKqDWqw9bI5DSxmDjE7gPPHG+mSI3qnCgc5de7l2bQ5TNvgkuLaB2zb\nP2Wq/jYLG8j2H+PPnP6m1D/RAPgNmd+9hV/Dwn2jHqp2GEm7fJcm2pdInk7i\n1o0fkw1m8IPwlJowbSmAVBxahNbbHHHtQbPsMMck/QGlzriUlmJdg4EBq+oo\naQYRVbIOBaV4EMu+AFa5tk1EdMwKQsD6FCfu9JafpANFBLOmwVnNU57vzRau\nwOZs/NJEZIZmMad16TDHImCps4dAeAikZu7BDdAfuBAPnv3pFi7TUAwwbeVN\nWSiMIui08UQ/IzkUDiOTeHZHEOJGUvCBC68DhIoaFX/fLdzQq4bqgmBQpxpA\n9YN1hvjKvu1lwzbqd6UVzIbWS2R+CezlVNeFWeGtcPjAfroEZ5e+SSx1qH1Q\nBgp9\r\n=xPDc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWawHYWxLNKxLOp/NN5vBZWVC7oA8wDSqDFu30vBKNHQIhAPbCmkKlEJjJmuubtlpERbx2iJaMuAkN9Umf0VpmZPSS"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598623112-93ff9d41.0_1598623199297_0.6654782827613315"},"_hasShrinkwrap":false},"2.4.3-next-1598623893-93ff9d41.0":{"name":"@xdn/core","version":"2.4.3-next-1598623893-93ff9d41.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598623893-93ff9d41.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-gyz6T6s8Hg/7IZIvM/Guo/O5F5kXqceyO0QQjdba4OGkidYmfbsFr50u4SMWqN6h1p1QCPnTVruBfSDpd2zGJw==","shasum":"a1897f3c62635dca6af1e041b843c888155c769b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598623893-93ff9d41.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSRDaCRA9TVsSAnZWagAAiV0P/0yICcgDqIglx6zX89ZN\nuVE/IrUhp/jXtA3jJRnYh2E1yEhYwYMJ2dRqd8VQMyTp2sCV5XgY8RfZDBFE\nEAWmK/+KoUvmpDRXmDwOMRQvGwv4Q4T7UPuACMm+PprfjBu1oQkrWTbxWXa8\niM+QCmBriu0cx6jeJaa5AU9UVSsfeO5yYqNhERCq8UipRXHtXEqeasSWBtMv\nYo7m/mFm41ft8Pw1fCp/JwjnsAu20T+PFH/DZuxzlhiQoz1Sqdi5sI3t49ek\nMRn+QtgY36XJdlyWk92mWFNhMHKS/5hJIhgTir57zXPma9zphqqPtMMpCTPy\ny5yQoRXIqqFCnHuTo0IO9rviCBsXCHppG6oFysZpbPF27YbIIewmMU1Nwpwi\nUbZgQ08fOh1S6YxvrYWVAOiytAoaKBjb9WHqyZnHKm8fEUl1HqpNfwfjtqQz\n97eEJHwPvcrACpAyI9v09qPTKVSAXASaapwOJawpg6smUQl9Vya2669QFYwc\nwwu8//MOIIYQZJuG71yFTPHaEWj/07V/rSxcSa9EmCPgmfVSx81q5TVpLBtt\nZKmwrJdAlbMhITxE9IpLyfmUt/pQ1orwjgPkpcBIPgDtbhRxf67WkqleP1Ru\nLfBld/r1yVDUwEF93pi2irmCEgvbt/LNDCSxYzJoPKlWjnOX9q2E01vMc5/c\n7dt1\r\n=qe2F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCj+KErT0fLUcVgq81ceTIrnayCjBzod1iuspTKImf9rQIhANXzkKIcL9k9A5VXbKkuySVB3DhpayqrxLLDiCPGHWku"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598623893-93ff9d41.0_1598623961938_0.45863167280245043"},"_hasShrinkwrap":false},"2.4.3-next-1598624769-69f53a58.0":{"name":"@xdn/core","version":"2.4.3-next-1598624769-69f53a58.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598624769-69f53a58.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Erz8wzxvdzqdNBTqHkljER9s0jVUtm/ZyBf/hJ+KWJ/5lu7ThMX+GgwgY5RVVhcZCaH7kGmSmPJtDD2LeABpxA==","shasum":"b8abb10ca1f103f32b0d05e0a6cd392ac68d04c0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598624769-69f53a58.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSRRSCRA9TVsSAnZWagAAWdIP/0uvnQF8Xj14n4K5oBwm\nA90hZ6s9xh/0Py3YUaZu8l7034LBVbWON/DbsM7uGQjPppfJdd9DQCK/lqqi\nHZRVyLIOcX4DDyCJ90Mlm1y9wB+RaR9hpqs3QhC9AzS4pKa90/ELYZ0GMGs3\nO3Oc003OYfePVz2CEfGuQrCjQVM4Zcx/K32QQYaJxvbGZ7DfVXZxFjgE4WEM\nPTMKx0K0MoZNRYBibJ4apiCnlSgUS3Hn5JoPFYwALs2PKCnSdM/uvLw0E0uM\n05rVH7IrQvdPiCCG4Ib1Eqgfc3V51kG0uusAoj/E9+Ka2RQmBdqavuVuTjRq\n+pppO97ul/vRKZ1FF24+c2aR2hV97egjqnqES2fBw2Srnp/fec6cxyBc7hFi\nKte0UFq+pnWT9w2wz3/QhcpXQgD9h2LP+o8+05TxUhxyiFCNJtHXKwtjAtz5\nIyO+Li6Gjrvefibz4R9Y5vb/XFJDjEim0GAOxtfaf5yoFxyrvwF9de3kfgus\nd17baBEsql4JdqreDBNsu/Ba0ovrvuUr527kP+2L44UVFBzPD6q1J3jek5Ev\ndWAYs67qGOTnIJhcT/mUs1FQQCeE1arZV1RtUCNfOtmAVQD0/crOJ4UadoXO\n7hAmldkV8QoxI8xayacqWfJ+W3kABlK4uIVqQ23eP5LHXlauFiE1VM6+CEDK\n0izX\r\n=TUQL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7NTpjeKnG5Woid6Zpt6yQ2w44z2KhtpWA6Edhel6V4gIhAPIvhOtbTWXoLJBdYRbj5cCA+MJUI5x5dnnPA73UbTja"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598624769-69f53a58.0_1598624850354_0.30829552388365644"},"_hasShrinkwrap":false},"2.4.3-next-1598625267-41a57fd0.0":{"name":"@xdn/core","version":"2.4.3-next-1598625267-41a57fd0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598625267-41a57fd0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-V/LT4ihe+OPpehI5au+rFvuYGMLGqT5nicp0lpt6R3waTXZmUive++B3HHZOl93E/3WjXthSTJ0T5nSUvme84w==","shasum":"e1d25e278bd22cfecb0a7c0f4b865fe658f554d7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598625267-41a57fd0.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSRY7CRA9TVsSAnZWagAAdJ0P/3qJLdPBUgHoHXNRikBQ\ncfe/Me99wO3Vx5xkhd87G1hmbz2Gj4e0fhKI3uIcawXl9thDoIqlOYc/m2Gr\n2H+cEQJAQgNJ1JpXUgo9RqP7VlS1DaOJU/Zfc/WeuctV6URLLbpfTtT+s4na\naNGXJXmD2Xdf1/03HSAte4d6B/JRyuHV6CxjIuTx/ppslX35TTVg8vKktRML\n0hiAqGReWYRuVWA8rJVZU3l4b1b5eA8R/KNhcdtUiask5tFs1EuBD4W+dH0Z\n+Wt5ULe/NmCkAfwi7FBrJrZA4WaOtyKCinmJbNxsknRd2soVK9h8a4oM/Ood\n3SiO1ErtnYT2QgESolJDPOnEn+cHlw2rzLTHB9bG5Yic/r2Hk9MfjKOcu+Sr\nz0uWjwOuYedkvU+ft1j+0KvOPlYyBj3t2NzUemisjzXgAsfi8dMuxCdw8FlM\ndk62VxzUR7goulD6CpcqNLk+jSa0OFnA6ED9hFaLb8mSUKCiBNwDEPuc2oPb\nyUZqOm4ZpN2RN+/nwbnsGrZfq8AJfjPhK8cd5gCElESQiA6kfe10i0n200h2\nvjUhP9zC9TDxPrhTtxkZ8M5FZmpCs65Mn0AjSHZgssvZajFzMxfriBhNU6am\nbUUSUsGfcluEBl+VcsPNKJji4IPI8z8Fa9M6jRawSAJi4g6/OBrq9+1ndUtt\nftkJ\r\n=F/2I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIExnPyCqB+dRXdrgzHCb8MAn54POfbao6tgF0qaRSq67AiEArt+ld5Ovib4qmBFtR+iD50JYzVtvF7NkEpNux6rGmaQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598625267-41a57fd0.0_1598625339347_0.5567001592290532"},"_hasShrinkwrap":false},"2.4.3-next-1598625809-41a57fd0.0":{"name":"@xdn/core","version":"2.4.3-next-1598625809-41a57fd0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598625809-41a57fd0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ZE79qQE3IweskAfcAFL4HJ0SOHvX+NnXgwjj+4nnU0AfIRsUVA2AioDGl1mspp/D7bN0l7/h4C+QHONsi1QMfA==","shasum":"fc2101a19fbd3e8d90854bde4bd507c65593704b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598625809-41a57fd0.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSRhfCRA9TVsSAnZWagAAT/MP+QC5YKNbmb4Fd8UM0Con\nF56pkXJkAfGBS+IrayqzxGTjnHFeo9Xp4wU1qOu7wGuv4LDO1ULj/Cl1qNcJ\nsdsnYV8ko/kb4BAEtvmUhYJMecdhJ8z4INsxtlc72RZOGOBzEt1fcvHSUrME\n7sPWkTF7VzZ4u4RX1zc18FffLAuzJh8dO9RLn0B1cVFLU4ratHRHu22bB8MS\nQyFbkH/UToX6zo8qSODys84VeWzhnxrL6AWRyOrwhrcfv9W7ybonR9o1VHtF\n17Mbl19DTFCXao8Z/gFWQgNEr+3egm2sil8py8B9sllwGzX4h+jb44VhNrZj\n2PeH8s7F9QR/34Th2D5LZA44r4wAElEtrAp4PRhkDT6+6NucbyHYFgpFnnK6\nOATuitIbvJOaYpVxFHU3GJrKXMja3+0bl9cm3rKS5C4yJ2OASLBvndcy86wS\np0cfsaYXCcpqAyhO4tRGpRohqd8GJZJLKUJqyZJdyQDnjY8d7CxKhJmvhRL3\nC8B4FVg/xyTNh24mY/Y4uvt2SVFq2JYEDFsbcdWcCOGU8imryErxsqyUI5Nx\nOAMfk8rNT6Yik+tg2GhajfR5aAuYCgG2cpB4QY1GJcXr6gx6OfK1as37eUsz\nJD9NF0UYn6eiRPk1HdW2Vl/SxwIc9ZvelJ6OsAYX54KEABv0ecKYIpm3yfVj\nKS1p\r\n=c4vV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERIQmSQwwT5o8IeSdbKjGm3iAIrLvxj2BF517ldb8RsAiB5oB8z38QEt/FNCvqfzZIQkY88NAWra+Um2v/UKIbmZA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598625809-41a57fd0.0_1598625887479_0.13245319116059973"},"_hasShrinkwrap":false},"2.4.3-next-1598628127-ce2842a1.0":{"name":"@xdn/core","version":"2.4.3-next-1598628127-ce2842a1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598628127-ce2842a1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mUYvoqlcyDhY3oDdc19YskxE0KFT3XJn7L3f3JqRmlu+F51DmykK7y01a2U6+UzuKr1VPwvBxVLzZmbqI1WMRw==","shasum":"f17291585a8cc994196b2d898ad38c2e75da0119","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598628127-ce2842a1.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSSF0CRA9TVsSAnZWagAAXTQP/0e6dpMiLMxcVdYYEmXo\nNxHiASaLxPyIGyFJ3sT1mq7wYn/M0SHZsjxH3JH/T2j3lLgKsO7t984/FJEi\nefG2umP+advfwDkgIkY01CuDjmRweeFTLauV73eZsm/NuGXTg8aiVmPcVcDa\n1AdxQyADIxsZjQsM7QRHJyXHusOWVUH9VduqhbTn5hrQyIrU/nLamSIO3/bk\nU0hVZ5B/vMURDK771/VTpiboj0farahux2nSvpLCHrdZsNs0Xr7+vJD79nL/\nQ6D2FvEy24l1gpQ38R99FUyU66c8Ah5GRI/OPS+7VtSFsy63hgcz7ZKbRNEd\n8ocmJ0jOHTC2KYVsp7q5PA9/lffxSKxc1FzO2tODgnYgtIQqHJQBBlrAJ0Ko\nexA0taRMik40M8iTqk09Dg2oWaROuRxxZrYQYTx1R6q78W6RTf7pjywUckmA\ni8p0lLliZlMVZY7aGfPPrI5KOgMzNOjoEgwDnijqcJecrmw5lSwtOdRNiVsN\nJsxhUZFuZIDCrLuLvGbRu04J3W9ugKnwUI4FjN1sBNUDaC9jw6HftQ57Aj39\nAD6WJfHGBozqD7oIVQQBov+68iB4WmV+5YpfmuZ1gMV9bIreZT/znJWe27HO\njnmgm/d9sXY0V8B5q3jCrt7JptevKJL1SBjyINSSFsJ+fNmvlu19h+tleJU5\nG+0R\r\n=Z9/z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBAIeyeF5D9kq21jOFdHHi+1Ous2fppBxyWImtftnQuRAiEAqts/4a669sWP0chU3P+wlKreREy1hjulyAYkYQb4D4s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598628127-ce2842a1.0_1598628212351_0.3078374480956263"},"_hasShrinkwrap":false},"2.4.3-next-1598628978-7016e66e.0":{"name":"@xdn/core","version":"2.4.3-next-1598628978-7016e66e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598628978-7016e66e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Zyl2afgQSZleIBnI0tLQM8oryulCcgw3fnCzijAQlgJ4zF2yc+7GF0ro4XJx+btM50cSrKbzpBPPrN/oLwbkIg==","shasum":"706139675e7cacd8315fda1e16d69f132bbc97bf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598628978-7016e66e.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSSTUCRA9TVsSAnZWagAAS1wP/11qorAIdpR3oGV1DGto\nFU6U41KR/9bvc9ggYeSIxT+pMpg0SLdyOil4PYfuXNAp4lMwxjkiGfTgpRZP\nGd3X335nlzJ0jyWv+OKImcOnG7VUTyF3BVZAkVO9Y9AeFZOLe/ZrkhDpIIy6\nChscl2kM7JTWhtBmj+LMv4gImP+2MTejinfqtqDwyeuB5EOUH0bFJ56DrGvw\nOPD0+9qjdj09STVl7PAbaLhYUCG7GWN69lrB7HQZhRNwnpLTw2cOh6H1vuov\nVi0361dzJ4zfP+JqGObxqBNjIuEu9XtHC3uTFVJ8SDSv76SK00v303EP4W0V\nUVf7P9s7hFcumn22WjPjnMIc3xIbLDOsK8wQzQSIxaythWd3SfNHze3cO5Xm\n20oeY3E8jFRe5Hi8bR9v7Gw5qUDKb0ocJdNt3dqRMT2VwzNckbmI2Xmsuxq2\nH/4lubfThsG7DxKGufO2YcaJr/eTuTex3gf80oCgB3aQ5Wy00S2Za1UGDP/d\naMTRLfCLiVRJvgkLQtNRUNLe8LsGO6SPuS78LlL7nL2EFcitTQjoCUhPTlG+\ne8FBDcWhrYnzboHiE0oGfXDiFGZgNwxKr7lQ5FuzpDAEnDCJojhaiJ8SRXrY\nq4k+su7/UNvnQ6SmJ+MNiRy7XCcIUBPwH0wciKvLgFu6ZDqjkp+9+17QiSFB\nA81c\r\n=YsX1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIESfdtZ+14istGl24pgTgsEab9ft7sBAYVFltzUQjvxMAiEAz7cz3huM5AZBjnDw+sDqvrSWtPTfAZL5snF4/Q9nVUA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598628978-7016e66e.0_1598629076149_0.02671210007499747"},"_hasShrinkwrap":false},"2.4.3-next-1598629607-afd4c9d2.0":{"name":"@xdn/core","version":"2.4.3-next-1598629607-afd4c9d2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598629607-afd4c9d2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hLsTnVQOsuXv1ams9g5wxaClsViiuJUUENeenR4SXIMS/DiOSMQS8Jf/NmrphYM3l0TzXPbwnXQx6izePg5Fng==","shasum":"8e5fc655056b86a15a847fc6a4d20b5058bcbb12","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598629607-afd4c9d2.0.tgz","fileCount":135,"unpackedSize":601543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSSc+CRA9TVsSAnZWagAAO/QP/1InGAacQ/AoIYcllc1w\naPBFx9t+6hx4Ch6KORrBFW3yysgDIohiEsjG0olnqmziDA/l4x+TokQNAjc6\nlTelQo7iduti6iuS2eajbo/NgLsRec7mrRjhp14xTk3jMtBSAZ33oVfHAXUA\nKJYf75CAHxP+/J7ksSy/x3t6f/fuUJwujRrpQ4rshIP/OvHacS1zFQzvt8Uq\nRUQDDq9GGgUyNhBY075MUzltbL+eexqdDTYWfIfiM8DBNKc/iB1SgvK9PwbC\n5Sm1PGJ0RMh+plm2eciNHKFf+JNtHf85qlley41xP0Q32aFbxYykKvdiOfIo\nrGKXeeLnNMRHlb/bkC0FvZCTyPVxj3qvbMc2eqMVmq2wJ6sVUhu+7R/T4fs8\njZPag6RWivZXO7aOn1Wk5aHy5hvYF5Px+YmnUQH0h85RjbhB7yuoQBXg4LwP\nL6hFjpzT+CuAUaMNaMlxmvs/dmDt6MFIKts9oupwBvGXbsGt1Rf7iAoNsZrj\nllq9VR0U1UQmi7oFb0sDt7I1rFr+lS+v/dbCnkcA6vh7VKLwRKlGmO5U/7g+\nv875/OLUSJ37DLOeOai/0Mdwbtak9BheEITns+ulOs8loJNH2fScZ8oQMqEr\nZC8xbc+u2J4LPklZfC4/s3AIvey6kl+ia2urN7Un6aqtRdutl5Ub8PDrX7ED\ntMCV\r\n=Fbr9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICRviPepLgEtM/hIuKvjBaDGW2fcxRfxqPyYOWDl95kYAiEAwjYOUx5nnuo5Xo/Q9zGyWuUAsiU5RrV44QnsruOcLIg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598629607-afd4c9d2.0_1598629693927_0.38178268219716816"},"_hasShrinkwrap":false},"2.4.3-next-1598630170-eabf81ed.0":{"name":"@xdn/core","version":"2.4.3-next-1598630170-eabf81ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598630170-eabf81ed.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dyt+gKe+vCCsEFOV6zO33K2yMucmXhPbbQdri75Z2NfuL7Hrf3uEr73+q4GhXjBD/xg/DjvDOM78/ctiYZ++Tw==","shasum":"73f11f1d03cc3b2b651b64e32a70f0d337d0fe28","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598630170-eabf81ed.0.tgz","fileCount":137,"unpackedSize":603635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSSmgCRA9TVsSAnZWagAATBYP/0xVnKWb+xsj8ewApqFj\ndnDIDTs1f2IJxo+LSaHMv7TtlAgaSWpC3A+QFgOJ82Jj9TegPH5pMy+dEH2N\nef0gGZbYuu3zlH/396l/ylWkYYmMCe2wQwGiC1SCUXJL6Y+JvVfrExekn4Gx\nhABlTcudAb3KBcB1L/+tt5heDIxVOxs7jm+jIjzhJ546idC/6o+Mpk4eCcR6\n4Ak3Rn5Rag7BS2daOtULvLd4PI3ShLhkxmdn1dWq/zZtt+V79AS7DNrxQOKd\nw1ZZ/zKHa5AF4BKYhJ8aJR5RybTw161QN7T08v+dx8eHIgyG30PVyBh9UWnh\nNr4PhDVe9fGRUxTFWK9crL0os+u8nwViWVqLXeWxEXwb9oo5TIUU9AoL56vE\ncsgyqEA/rJz/n8vpHlGeMc3NpeEax1NtI0gUaF/GHyLdoQ0AzIXLUFA86cFC\n5LyGhFEOyqQCmZEvZonSCSjCwPsGNqKzNZYl4jzWZk0LHskK886muoieqRhW\nobZOvHHVIgPAQUqlNYgX5f7uBcBF4Ms99zev3H7B4sdPjZrD5L50PJOWyUCR\n1RxnTbIlroY3i9KKGA4/4CqRxI7GqwLIW0alI0hTEciofT+afnKeMrY9Zo2I\nu/iXdkF69VNJoQQnrpLgXnoHNzoKn09IgmDZyOid82sy5vzG2Ei4NFzNbTqN\nnf2D\r\n=KCTq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyaFdaSXulIKFM5dbmDdhakeIFMOaOdCk2mHU1CouZegIhAIP58EI90iWRGmC4fF0tkOBv7ns5DwcdL+FXd0PcFVB4"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598630170-eabf81ed.0_1598630304171_0.5026736192854175"},"_hasShrinkwrap":false},"2.4.3-next-1598630167-3ff6aa2e.0":{"name":"@xdn/core","version":"2.4.3-next-1598630167-3ff6aa2e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598630167-3ff6aa2e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-D5hJQZePq3Odd1+IVsBSbIFzHWdmWXX8C09JuvrvgUaxG7X/cqb2Adj5FmL4WPv4wxP0RX/ybhcQfHcfC2e6+w==","shasum":"f15d78ef0f9055c4dd9b7826e0a969f03dc03fe1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598630167-3ff6aa2e.0.tgz","fileCount":135,"unpackedSize":603087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSSmrCRA9TVsSAnZWagAALBIP/2orM4aXUHoUgJP7RFdU\nZ99TidBCzrliJig1c/ldzXNuDimWO28We2qsomKjeNt0xa8MigjkdDe2q4B1\nnRkQ1+0aveGBKFIAOFSgT3d/l3snzvQyzeb1LctM6oCKl9AzTECHLHI9Bvt6\nLIW+RQCQHgxVpBui74LRhDDUP8j3swi4vTTqT5KHoLjS3XzNEwLw7ZqwpMbe\nDQ1n6LlWc975X9+vVmh2v56cLove944TxAZyaOYkwwpdtBZIpEu0WzvHNKpZ\n/tJHJUJ+U92qIvGvPkm8F2xG2jGBOvcOnTXN33KR6QEK3j3LeOVOGrXwXPYL\nsjNpNC7pnb1d0oaWUSEoBm/TLTmNp5dIw4S9MnFXuyKWbF2/TvpaHOAmPjiH\niic+eGdhEP1MHAeJl/wfYnff/oQXQjRFLlUM9z4N7EzFBstsN8sWik/qRqyI\nZ8257XPeayQYoBftkp2C27rGsZ+79nXUteUvUC7X9Sf7cQjpCuv14DQK4txJ\n72jphnQUdkUhKgMsDr3I9KdAbIAEijOFnjSPoBK4YSNMOnp4M5Cgkr2R0aQP\n1HaDjcsRONHCnYq/MLPDL4CL5RCvZ+SaagJPyFuQPJtOpzAxBbRaX7GSBxR7\ntH7DunBHlJmrkpjc142slKeAK6MKu70x8LhRcH5MxpGnm1hDojDWD9VvKVIe\nMAGy\r\n=AhHX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHsRg06xz/qrq3moT1wgBbaUfOP71F6em2xFFvsgiJybAiEAmSi5pdtM0sUaN7uwVQyH3NM/Vk6KTPzhc8HoX8Xp9fM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598630167-3ff6aa2e.0_1598630314643_0.9333656635224046"},"_hasShrinkwrap":false},"2.4.3-next-1598630198-92c3de02.0":{"name":"@xdn/core","version":"2.4.3-next-1598630198-92c3de02.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598630198-92c3de02.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wUBMSuY3ySHHgtMfhvHTn6Y9V2zuhM8SvkOwHyxY5BqYWh7BNIkFcggYQfcZyp49wXPD0xrOKJyFWte3+kbIcA==","shasum":"77ab7477b354264692a34948c799e0b8e60347d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598630198-92c3de02.0.tgz","fileCount":137,"unpackedSize":603635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSSm+CRA9TVsSAnZWagAAxFMP/jr/eCIf/4yzfbi2bkGK\nX6yV38EbwCRE8wFd6GeX95dX/bHRkmy0iCtzdLEUCJDBxqH2lqyJBbA+4Hi5\n51TS90RN1NU7+BmOxB/s75SN2TTtGLhZyc7j479cZlOLcDXBlz1K/Ulu+is4\nRBn6PiPT5GpT0JBRDd4+tJUzrozzpUTcPDm5lcJO/K58NGIu3HEmmS+bj3Mh\n0TgL/ivnZNksl1fJMB8FGHzb38RixvbLgaeP8cgHqZdMIW8+RKGK0KXYK02C\nycSZ2Tfdubh1XSGbsBjmlHLOgABGVYvCGeITdfuh5w7SbXTXHQJDO+6TtpjQ\nh7WZwczh/oVL6Ardxqbw7L+grknoIrfyw24D/lO85ua0oKjGkWxDszrm3a4J\nKQPdp3p8Rhzgx/E++5ez48D03Q6iJzJNTg+sUkkHwdskTPUiGStoX562SzKp\nRxLEhpkMDGKlKX7vrciiE+0WDtPF0yrjHekHtI2MUqelFvCYjny62ajSr1bt\n48vt+zHsEwveQPjRvWDuxBffUHdVXWJbnjKjMaMfxZeL9mD8Y72x+egtLsG6\nwhpdhzJvHdxZ21+c5vvAGhqjjjpvU/bbDCv7HzLRbyXjhtE5i/9kqaDxdKPC\nWw6ajPNtWIP+Z86WK24RPQcLRKYYjJYva1FJWgPuRFYBQJtoatxXdnrtxOVq\nEo4w\r\n=FP7P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBd2au0/Q7JJT1yFrh4mMhTYNFGE3Mv8DyTakM/3AUo2AiEAx5BJOF3IptXgLPQcxmZ8HWjHEBEIQrp22qRJtTpiykg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598630198-92c3de02.0_1598630333535_0.17171715081255434"},"_hasShrinkwrap":false},"2.4.3-next-1598630496-5dbeaccd.0":{"name":"@xdn/core","version":"2.4.3-next-1598630496-5dbeaccd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598630496-5dbeaccd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vGR+TtqNEFy8jOBEEDmXY9Dy20X4ms8Aatw8q88sHd8ztqjZgfWKLotyGlMZRuQc8SousiFIg/ITcDJ8P5N0qg==","shasum":"3913b3e8a859bf5764b6b4c7d4d87b59348da0b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598630496-5dbeaccd.0.tgz","fileCount":137,"unpackedSize":610598,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSSryCRA9TVsSAnZWagAAAiUQAJofgH3BhsrylwP7fdQb\nHbm7Zp6aL63drATzgy0fBjYq+cGQZhx6iAtbQEQhN2O+JI/rdiPSQfS40E0S\nGWbtARfLinR6TpgBE3BXxRo8QiE6HoLPPE7IICGvyW7Bloxzv5uTIYigulkQ\nCacLuXmbYQ1thy/yFtyYIcO0uHItH8Upqi5TbcZLSs+340Ydn/fQmrMoP6GY\nEc/Jek8KIqA8PfR0JzmxfqVBPHM8dHfGAh2IEHOLojaZKSjAFAo5lCqhdxic\np0DuOrsOeTGbxE360EbG5ZAF7flYueoBYqIimRcKdEas3ZlzR4UENY/6L0GC\n+tNUw5h96YLquaUnILfiHhzR3vi7Q1+ff0zSMQwsrIzhTgMI3a3aBzcy8g8m\nthBFXHGC6ho9FHLCqRlv7StGEfwn2OLThu+cCjeorFo5kF1phNcgK8ZN6fZK\nieK9pYDM5eEiuc6xUx7FFnKZ4VroWwzaScs29b5Lw1KZIMWJS8e0aFlWPJ/W\n0xpyWrYiB2wD6ScWXV5mL9sD+ve2pY4ApA1HwajFXEjEQ5aS3e28Rb5VWbwt\ni/95my8TsDQt60nYEPeubgKQrIqWHTBE1zWWPKQUr0xSkE0a92oCHx4sakeJ\nu1JXLI5gdszmmd3MfoRLKmKo7HLCCbpaWvHvdOWtpp+QUTVFmvoQ5HWNosn8\nkU+Y\r\n=eExB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjzh3+h/+tdbhDqRRl/L8Gum0Wqkqz1SrDTEDCOo26OgIhALv3wZTwB68+WSixANdUxl99POa2LT9aXj9PXpkFj7lw"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598630496-5dbeaccd.0_1598630641519_0.813744344024113"},"_hasShrinkwrap":false},"2.4.3-next-1598630804-5f79c07a.0":{"name":"@xdn/core","version":"2.4.3-next-1598630804-5f79c07a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598630804-5f79c07a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aDUGpmqI+aFv40sY8cYLtAf5tFFCB526zU3E36npwNdpjijFudsh2hJMrkK1E/yJaUm1RbcLRtBuCcKIqitoXQ==","shasum":"b285c1021e62751e31ce3854afdac0407ac4a2de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598630804-5f79c07a.0.tgz","fileCount":137,"unpackedSize":603635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSSvlCRA9TVsSAnZWagAAtlQP/0XxIyqT6L91Bh6v0GI7\nb7fHgUHhhHmoE83HWJgbxKLYfxQ6ePE5en56W8csAcPSjXJgbWLulB6RVErZ\n66MhMCHTjwjDjW9XH6ppo5UYZMt+1iqqfYpGGUDw25OyrWcieS63N1eIFFF6\n7VIMMnmy0w4QJRHpaB++ToqQOIAhz1EuQ3Rf6nn6acQpvd5CbxS4Cg87iYFe\nHb6dUZjlPcG1CVn8EHr1g+bpVPi8hyy3E/Bx2haxAiPFaN94ZrfcJwJC6T8s\nkBRJdTwlVoZNAupVJnflUayjajfvkAiSnqrBXzQBz9RnjbqPUnKcUW3sQJpS\nmBPxQZuyWLhfcKwX9OASEOkCeGEgp3IWXpo/vexVzqtz2M7tSvf9LmEKp2r+\nbjQOv9/Uz3xhflq81cAso1wcClPJsK0KqPOpREDCmdhf4dIFUiPyX65xGYHC\nj98MgiiiXXNENIArVZSmPwe4+76xqenkyBqvvpNEWK+dalWohnn9LuO2ZmWr\nnFeDlFt+xd9jJ/xh8eP+lORM1nzLlZEzdlQOatViQjwy/egqVC7tQ5sGYDMM\nKrlRoLFmBZ5UKUorZxXnBVBedClQPyC2ESEFOkuidU/IbqvIlbTFtmBncXIv\nHXjdrzcBgXRhcpLLf2j8C0Tqs0rgfsUVt/IwhyNH+UMx063Wgd/tFgjtHDkk\nsq+y\r\n=Eb06\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA9mR4ZnWZYxRyvoLzynM2dNH3wQ7w1Mab+NoKozeKWdAiEAw7JQbw2BwTeSQMDWBfkWyYYt3VhDOuoq+86O2Yi8bd8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598630804-5f79c07a.0_1598630885232_0.4473125028431326"},"_hasShrinkwrap":false},"2.4.3-next-1598631930-737631d5.0":{"name":"@xdn/core","version":"2.4.3-next-1598631930-737631d5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598631930-737631d5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PTuWhCCVM7SngdFi3nqs3czVQN3NA6yqkBC7Zvryk6b2hMDZO6RTH0TmRYocjji98B29jxu5JqlUZAvNXBsf8A==","shasum":"2e88faecf879e505ede0cab9fa78e96aa5c17b09","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598631930-737631d5.0.tgz","fileCount":137,"unpackedSize":603635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSTBSCRA9TVsSAnZWagAAM4QQAJik4e83AJrEiFwWHlr5\nH4M5UY0CObcvjvyoJrxKp1YKyt/9vX6ADKed/bT0FZY3M9jW/INppR3TqsAt\npNv2h9uzMPHmg+LTDnmWkpJTMpR1QIDd79xNdWM4c0JLMY5KyYOwZ91yPMhs\nJaYTxpviG21O8hZkN5qfPsTJ2ifMiB/u6mMG737mHC50mDonwgtSJqX5KXTr\nNCZ4Uf1mO+yq8ciKLGn0laO8dtK7zL/4aBVRrbRJbMUZ46lvdoE9JKw0tYgh\nMh4zwLgLHhrF/6GdMxbWBjjNqHqfGgYdjdBknX61cKvP3hBmJ3zXrLIvo4Bz\nbu/zfgoINpTQCmEwbyWK4jUUYNZaFgK9i4qouz+Kglf/xZqMyFihbteo7HF+\ndMe8qNJnxVL65laiWJUSRa1AOz1q82+Ntl9UtSBmEv8NhcCo1HjAvASEfznq\nluBTJw7ABqOp63cOr/3xUigKUiMBCrqupgqvHEggIdiUhevLQHGxMom+27Sp\naJd4IcZLfW0gpzYtQihechN2rasT0xublXiaZlDR/oU6rLU+PtFvU/E3FPWA\n73FZbGazu2wBFwbLnCy2i/ZehgLSLzN1G2YOTbWEcrzvj1H6uPYzygRty3PU\nyMJ+CUJLGZI5agGe3Oj8ey6TFrsgpf0HW3ghnflhrgLOJFnkXx1rNK27ASTh\n4PqR\r\n=xV0D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXLCmLNPw5K0GJJLyMZ14ojdQ6VXVEApSBTsj4ncYlzQIger1c8lc/U0ImGQMwSIqbnqg5bXq/ywP0hLomSCRa7ZY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598631930-737631d5.0_1598632018374_0.42948820773872876"},"_hasShrinkwrap":false},"2.4.3-next-1598632731-737631d5.0":{"name":"@xdn/core","version":"2.4.3-next-1598632731-737631d5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598632731-737631d5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eKCpQZ/e3Hdn4M4yAb1i50+0dhc8H92q8vvBDlSzKH07PprkWdO06MIye0sHzRMwu5dBTngOezHj51CM+xKbLQ==","shasum":"843fdf501a83e61f2173fb864aacef2eba17ff90","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598632731-737631d5.0.tgz","fileCount":137,"unpackedSize":603635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSTNfCRA9TVsSAnZWagAAMbwP/0TgO7/lhmcO5zjN8b+f\n274yC7tA6HE4HX3OhP+JyDEQWFHHTbXIxgzrKtz14URQ7QQToWYozMvusD9t\nCvdQe9MyIOl/JvHTJSN5b0l/1C7jcq4FxryNesxl8W+sQSwcmzTnjiViE+Vh\nF1kW42HDrdMSS4bnX1ubXikkGL6OBnzvOo9dT9HMDHG9ZtujRWZwBEK/NsQG\nLyIHNwOONQE5Z3HE2PCMBzjEXXnZrWCF5Q/e06ieK6x3R9fLRheJwy4VfQ4P\n04a7pGWtoYHDKjd70kEZ4dw6GACmIY6Msy6lazcZHuAP/Wxbr3mYIrteeg/0\nfeH+qErmBg7pB+w+ceZlJypmF0jEoYw9Ten44bFSFzmjgfKR2LzqWgZ+UbLa\nRPTpNmK+2PETN9bSrPCcFTcWjHsCZqaOztf1XVgFf6vlEk+6GfnCdhFfrG5s\nKhtzLiqpp+0xax71YjMkC60TJld9WgUQnR9o34RBFGEy9rarQojN5ZSFvsBY\nA8kza1M5I51A9031V5p/uMFSCNPt7//42d2s/y5b+MwI5GXM0wrXo0qPUawa\nPuisot1Seq5g5Jy3kzPJVhboT8ST9DL54/QzKwnZ3ivsFNmU20wlwmqTlm1I\neLV+u0OP1AhtVe+e76o6ClxfqeaoHxLvH0aM1UJ9CB+iR7DDpDXA5pRnwqdT\nTcUk\r\n=z5BM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGw8pz09dnTleJA1La6+THUJhKZfNYDSdUYXilKfajjCAiEAiPaliPf6t0pqIxTcevey+1m9IPpUxGGsUksBzwSD4cU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598632731-737631d5.0_1598632798842_0.4865949820873827"},"_hasShrinkwrap":false},"2.4.3-next-1598633438-68eb42a4.0":{"name":"@xdn/core","version":"2.4.3-next-1598633438-68eb42a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598633438-68eb42a4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-18qjbgSA2SPhWR4yHdtKsI2kc5H0afrfSVZ9B4LHyNy/EcUP3zum9IZkRS8tYKsZg1meFpSmtjEQApqty5MHbA==","shasum":"8c5764faaf6014f00fdd404d7fa7be79f225d2d5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598633438-68eb42a4.0.tgz","fileCount":137,"unpackedSize":603635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSTYxCRA9TVsSAnZWagAA5nkQAIbsaiRDT7wWEcuhpaEM\n9A1fAzs1CTtN6dKfEPgS7GjEzUxJw/ZnuaN0a9cOqWTH5H9G5KGVEPf0NtWy\nU1tcLA64aY3c33jR10I6/yVo/ygeFNVIVBZ8N8/65xSGjBN8A5ySPJ7qtMW1\np1mUyoYVVftYsp0neTszqfihkmTXT7MKPFM01pg0bT3FXIBTkC/fblkYcPo+\nLxviw6V8dVuMeTFZVvM9a5NZ/9jXjP7THZt1v4xc9vvYJEBkqU1KpxAuv6DV\nqBCauCzTEJ0lK8lIGPNvSb2BCU/i8iQTbyfz+pgglcDPeo4LOFCdTjVgoNWM\nmUztYxYikgJl5d3doGC074UpRoKRo8czQL9yfuqPrjIAjXQQi3YA/4VSjyx+\nBJb47EOnTrMCwW4uKxnojw5iSN9Df3F80BeWTfCSS+wr+pVw3m589qU+13FD\nIcHR2y5vjMHmaKRmkJDHSiSmK2hScB8m3hqhhGT4BEyizQVkTSMVopVOSTZq\n5grMYOLA0SjnKwOhtLaGh5PgIJPU657GioMdVPU5/JjCGJJ84NLOu/g2ie/o\nOAvREd+Pa5TzUHmEcHbRWFSWERHpkpiaOwufuKXjrT+ECcwQuwGi+KPYTk/O\nhGLO9UWYIOqxx8wd5LOBpQM32fnIoMy66hIGwgO5OyaH1Mvd3AOEIpxbk4xv\nfQ0o\r\n=JPwu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjEc/rW2G3SlF1QCQWggQK9MycZJDhvgn2cfZukmyzggIhALRwXhSMGLs76HcS28knFRgDPJMbd0CRE8VIlBere/aW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598633438-68eb42a4.0_1598633520890_0.854618280533838"},"_hasShrinkwrap":false},"2.4.3-next-1598634043-16ed1897.0":{"name":"@xdn/core","version":"2.4.3-next-1598634043-16ed1897.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598634043-16ed1897.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1hm5CkFzpKqPeuwTWmrH3fLSWSwDV7J/dn3u66gHuvjL+D69PesjTvc8tuyNnjRpCQhIxL0FDRurJ11uoMSEdA==","shasum":"ab808b8a2603c8bcb2d1fe0d14770852f4ebedf2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598634043-16ed1897.0.tgz","fileCount":137,"unpackedSize":603635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSTiHCRA9TVsSAnZWagAA2wEP/AkZYLAVSwf8BpZ61Shf\nJW0WAkNiHnRp1QR0FDGTZIe4TafB6S9tTwAqBneUIvs0hb4oHY2n2GzlofSk\nCjr4SLkcvxjNJehJQYpUVdAn0KmMIhpp6396Ay+OBErY7HepP5fAzHvj9c/p\nN1wC7iVxOi3ibVxTobXF/LPLgPYCO7hG/EqOLrrUnBynhxO8/AEwSBggnz+/\nakmlgpcXJeO/bc7A3u+I8usJdRvEBOMXnIOrLHMh1l6sN7m8tudXdAjOsTC5\nv4NNDPttxNvgkqxBIPv054SP6uNpBiM0kJNP8LNUwX5wKivHv8ZLw5u/Vbi3\nfzuofzL3tg82P/PQljg/+DQP+qY6ojvR3gOk+ZrMxPGsZByVA1gUd0OFh5I0\nHzUJ4G/Ust0oAX3WmwZxuqytP7wAUtkoz5XVNPdf0yPTZpk32zL/noEvznvG\nj5IzjEhhZoaipgKL4DJTVFEb+lHfxccFSCcIWGA92lPoadSIzhivoCgpuEOL\njqWhknJAvE7xlEhwQlFKjgKNK3wEyJZkFpsF9aNKL4eburR7Iq0onnsPyrfd\nLbpLPyezRf0MBaRlyM4YowQUMXvw86+8D2jvikeFFu6rqCnKNXTlB63sZzB0\n4ojTWRw6nAdaprtEXWN4izN40xs8M6heV5PA9g52Xx6xj1IsMYQR9pQIF7Ao\ncuF1\r\n=+3tV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDmCsVeNBeHeJ1EYuNClERmzCRs+/fDPVnRtD6tlYqazAiEAknjTFxc++7qwF0nFgcwWPvTjv+yiNzqccB8m5nNtohE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598634043-16ed1897.0_1598634118986_0.5642339554009201"},"_hasShrinkwrap":false},"2.4.3-next-1598634910-9fc2e963.0":{"name":"@xdn/core","version":"2.4.3-next-1598634910-9fc2e963.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598634910-9fc2e963.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3XO2N5+1gNl1SArlJahWVzlBhN45UtNBZgBcMpoYtlOH7eJaIcniKIWhhh9NsNPkxbnrSxVEN/eVlKw8mQd7+g==","shasum":"33ea90ebffeaa5c5c217e96bd51cef8d212d0aab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598634910-9fc2e963.0.tgz","fileCount":137,"unpackedSize":603635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSTvrCRA9TVsSAnZWagAAfsIP/iHlcpqyEfzsqylOpwAF\njJFRELId98awK92OR2hilgKdIaF7gM4kx9TGInmfHBlPG0mqLcodXIa9+eiV\nJ5jm3sFHy+0sZLJ6vn2/AApZTBG2vdYVD62EaLU75R883C+eWSo2v1O2MaTa\nqJacj1bcS+3pPOTVSk27CtawKB70eOdI11yVubm+tJlL0Kl5pogUdzh8stYy\n1Qx5zW0S1HIGOsXnYcxK+CvL6dZDfie/8pB065sLdRFHIefc+Ms5jfxJmbcp\n7xof0swbV8rH8T/TdBi5oc5aKOMSbZUC6OFuad6rkP1uXy7pAGwurUbDualg\naO2NBKxFNd9n0bUmIBDiCevDLefQg2D/V8Z0dJXgy+IHS8H/gNbBKWbl+2of\np+b/r3pIgYWV77hu9XcBiniaOi2zG/yLAhn+fOxEAspF0XlJc53b7h6u2tHX\nbV9xWOk3OWEXfasTB96rgcJWmrCq8WJadkivRtWc3nhfiEm9DxUmxmLD6N/u\nlTL2YFWbHMdNT8qtdW8AYHfWYGw+jc4lrY4nVOUsq7rh0G1xcBbV78l1EMXT\nPPuq/QgzUcmo44cUCQH5EBMiJHI73uSVCkTExblFQT88Ja1FZCzP1IRkwi72\nqgjb0c6zh6Y68E/fHxuqJgjFuHGDsz3Q8UEa33on55RzM6GYboKbKkPCjIEC\nbT2y\r\n=8Zfm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFcuZgB3u82xqboFr2EVVqDodqfvRR60CHgGUHsdT2pdAiBvgDg9z4NFhGjjLzAfEna2T2lPhrN+ugyNM6GbKf4t3g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598634910-9fc2e963.0_1598634986521_0.014734291410652745"},"_hasShrinkwrap":false},"2.4.3-next-1598635598-5f7e5783.0":{"name":"@xdn/core","version":"2.4.3-next-1598635598-5f7e5783.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598635598-5f7e5783.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-DvqSbVGl1ZNHpIiYIHqzUSM4vN0ghNmnxZDTbEM07m0Q8umOZI6OuGPLPBoD79RLB1wQVf+sQxQHYBn+sQ3HiA==","shasum":"df2c01557bc737748d0cfcf0c7287fd0c5414b4c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598635598-5f7e5783.0.tgz","fileCount":137,"unpackedSize":603635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfST6iCRA9TVsSAnZWagAAQrEP/1DwhUi4rHIrXehNZiv3\ndC733X2q1QAh6oEaf+L1QZBvbbqENpVe3ZjdyGvlpifi1ntzWxfb7G9+CBiT\nLhZmgojrz4NDgfbNPIm196Xxj+1hPIkMBmzG8h93u/40qwJoQbWVFZR7NNtp\nKYfy7Gob3XJKc9Vez817BO7LoyYgPiBul8/WnXa+3DtsyRBdaM+HzftiVz+0\nn4rVXt4W7tfWQmZ5QM4A4TBZkchzRaC35ENgXqKLp0qQdvXZfQqRDIIWU8fx\ntG+qDmteQ8Cqas++he1Eev9yoCcIrBRcL7BhicdRN/B8nTiEv//bJonhltto\nL1tPwGMfogVYTxWsy5614GQRNYKJ67p1QOaaQVuVMU+d/6bxXcQqEvemaaLs\nxWpFeCCZRNHrlFalkgEVu0SUo+ggRnQAV4n4+aSBAAoW+EWVgjT2SAet6fQS\neQFn4w4bwMGIUnLh0YfVh8xD9mgx71VRUhF0U675wSgbjx0O3ZZzPzwOgyi7\nVw2EmClmPp9+cuJTi76IIohIzhidtTnft/x5/ifl1J8w4ulvgI1xc7zcUKpI\nctgOMAu5mDoO3pklRbjO1ggxbFx9pzLdorlrt0sFQpMw9R2wZrBBhBVZ9BcV\ns5gPIpKpNp6X+iEkFOqW48vW4vBu8WvbIaHFv6F2biWwoUGFp8YY1Q9VaEB2\nfyij\r\n=ep9D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAk84mqvTfrMzrqPN+2FBkPlewdVG9dkNgE3kkGUFnOBAiEAwKN3kSih+BNhxxQo5531Bci6QVRH4JSgzv8Tm3N4CaQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598635598-5f7e5783.0_1598635682258_0.591662474697521"},"_hasShrinkwrap":false},"2.4.3-next-1598636475-cfc463bc.0":{"name":"@xdn/core","version":"2.4.3-next-1598636475-cfc463bc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598636475-cfc463bc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vAiB56RbAYDsssJKnGlfgsAXy39gVXzEb9NrsyR4qkBLB38dam4UxQrfnPX38cIUwko/AP45i7VR8aJcdBPAqw==","shasum":"d743111d96d5b96d5a2faeac1b2bd16f6137c128","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598636475-cfc463bc.0.tgz","fileCount":137,"unpackedSize":603635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSUIQCRA9TVsSAnZWagAA7lIP/A471QxCGP7JFbn6q7X3\n7ks8AEKMT1Ch+8a60gw81tjSoIMskLULkm1XqizskKz+rOSvUhw0KLrVj3jU\nihCrmClEXsFcYdsOCnzyTBariYauTXPmst9ceI447seaLS5X+eG0jOJsbLM5\nVYHCjQaoU0a/j6qC50xiEvd8p0EcHQh1dyBaQ8hCCqcJ0yw+xh651Iww/ivQ\nKz4uTNc5x7v0pmfXUWGlctt7wDW8cTo3L1DDG6qxdoMagZSv6+vaTxVeIYY8\n0lpXp5AOg3LVfp5GD0U5QQc4KmdVqx9k81FXA3/LvFdmt3LIlTmNr3NaL8BC\nL9e6ooxYj6pUyAhfC+lm/xvN3+FGMVoVq8hSKkxFWTSAPHGsxFiIA2utAUrn\nFt1dZsxJTeRfYbodq/rt5Pg8Ar9tHi7A1ZzHhM2WTmqBL7+6Ij9vTT47Km0t\n+aegDCbJ/opV0RWHbY/nvCCELqbfMKzq64aCLCeVYSdOdWfsdkTs4liWJ7+v\np4gZG/Prh566dvlB035YQPsyOH0my+8fFi6OBFkQotvzColQ9jGtx/6PEXlc\nbxI3qqnOIGKGS+/StOxKx4fLJMcUttNC0hAXK5VGkELZP8BqfnZG0Tq9ZyFq\nRSWH56FlNe5gEAjCDuX214DKFnSf6FiVZN/uDe7T0Z2FpEZyJSQuRzhmTxbM\nOdAp\r\n=K87L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0jhE/OTqlDb/oSbJ8mgHxMMJ12qmGI+5sOYCqDC+lwwIgLnjwLon57J+5NWsLus9G75fKc/f7lMYXFZYnyLOGdPQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598636475-cfc463bc.0_1598636559826_0.6548660859268174"},"_hasShrinkwrap":false},"2.4.3-next-1598637698-a0aa8736.0":{"name":"@xdn/core","version":"2.4.3-next-1598637698-a0aa8736.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598637698-a0aa8736.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HgWKisPllexvWLtB3TWdyzigILEY9R445DWWUZ3XU3mRl9jl+l+IbBuAtyREWrkYqz5jvfM2tHYK2gVq4S9/FA==","shasum":"6eff22918981c479e126c602b68100e2df91976e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598637698-a0aa8736.0.tgz","fileCount":137,"unpackedSize":574227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSUcOCRA9TVsSAnZWagAAxbIQAI5XX6aD77mftWLoVtrp\nmpzIyv2lJX/FJzP8+NueZ+q3w3VkRKaSA5rSmCuTU5OkhzKV7zqFtPsFzzoJ\nZ5VTJuDaM5cP1a5sqHre8Gu44isMr5lZL2DlEpxB5ryNqgDnur2Sg7y+subc\nu053dj1AS1zo5qJnJNCBkqppcXuyRQVuhlf4hpUC+RXF3+z8MNXbrDaYabB7\ni8AWut1B5dCrQ5HsC0aZ+jk73sB8xruE85S22fqdej2DwZFVQBPc31kqZT0g\nVE0OjMOGjXVj/BGVZXejOLzzzUQtso3HjHq9PkeJcbRmUz3auV9fXJo9RnlZ\nRsgjGTCYsSnVFtUb+yAJcgF1MBXrIYJMe10NDQmIgo573H0MPDvY/98agex/\nJDwFl2ENjZp6Ub7B0VePnP14ZhsdHne5xI8a22iVGpbs1KC7rT6xiqG6svc4\nRigtuyDJTml77zgk35OJLJf2pCYfvGogQu1FYwQr2VQHRhfl/YKg/K0jX7yt\niCiFJknJpOO5frFDAto8EWANJK68QRWy6n6p/rkkyQZhFNRbPTcfVkyJAkCh\nKT9bB2Pulg+hwPpenBcd5frWztX0vsV8hpg3U/omnGHnrrDiwTKuzfqmuYoh\nNABRmxQLYEs6mquChnmJ2bdB2B1vKtEXLqVseCEsi7BIklfwYsF1HCAmCByw\n3b+z\r\n=zL3t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCI8eeKeLbQtiDVZeSp4pBv738QovcStputbBscu9C14QIhAJREz7GbRhE5xeFLYvF1L5MS7rY5xtfpVH6ruMtGH3m0"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598637698-a0aa8736.0_1598637838327_0.6340775986000737"},"_hasShrinkwrap":false},"2.4.3-next-1598637947-ec14d0d8.0":{"name":"@xdn/core","version":"2.4.3-next-1598637947-ec14d0d8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598637947-ec14d0d8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vX1ZX8YF7LLwaQCzMfwO5ILcywsvtSStJAXflFXEBhUqezT1mDOsISqQtFNrWln6FspgBzMoGiVnrntN06oyaw==","shasum":"7be505bd45777bede3f840709992a3322f0bd4d4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598637947-ec14d0d8.0.tgz","fileCount":137,"unpackedSize":605135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSUfLCRA9TVsSAnZWagAAQMQP/0t7HXoUAbnl9FH4U4/8\n+x1i9OZediFsxE5nIClOLLhqCbEC9rJLrGiJEHyCAbUSXnDr8qN31y/E3W4t\nusp5BmuA/Dn2yBnn6pTWRfNysXo8TWJFXtkOGPgwXc8lNHUN3i3RxFlmmBnH\nYb59muWDWa3sdoV+S6Rm08W1gcfR7G/9odPQfz3q/duYR7IxmRPfz1SW6e/e\nFLHcVUISkForKYX/bdv6lGKisx83w5iQgMq4MaZBTm4vPnZcUqyBtwe9gM4s\ncnLwqVQfcNtgtzLWwjfYHHwxizwf5uyOdZV0ImixnnxRXNZPXo0ACG29IVQD\nIiV8EK8cZ1NVXdIygLBYZ36doZD42kFmvkZCNaytE+J7au79y+jPFhxBI1cV\nfpnh6HODX7J05Hdzxwfq8ig8CSjxPGy/g42hR0AmY/ndOe+bMQmn54IlQMLM\nYdKFbFyNGHZUj7+0Sk+PPa/9xu8+QgEfaP3f+l6g8IXmKJOFFZVEaR+8qIJ0\nxUT6he+k3OExETCtBW3MxbWwLUScO7giw4GbGB40w/nsR0N9YMxvVWWHIsC4\ngkGreNCgGh0JGRsXfNS8kMMR4x5+Vp+vJ0ouTK+b2G2N7hKh65ieykDaSzd3\nLpQc3td+BbDzcEvs5c8uSp0ul3uWDm4RETz/F2DOPD2B5ZoECBY/iS/VZpXw\nY+ND\r\n=9H+I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICTcMgZ4ynd7xXzCwt7wytf8j4Au/KendTPQ9Uq1bJtIAiEAjJfJmzWsudRJcV6WMD1ncE1aMbe5u5jrsaRRhp3KQl0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598637947-ec14d0d8.0_1598638026555_0.24614497781090083"},"_hasShrinkwrap":false},"2.4.3-next-1598639595-5c6e7b6d.0":{"name":"@xdn/core","version":"2.4.3-next-1598639595-5c6e7b6d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598639595-5c6e7b6d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7S7VqLR78QgZic3LmG5dOJslP8wM03VGFakfPKH8W52NcNJ8uc7/XMRIffL5vJ65yUihhjzi9EjBVCktm7fblQ==","shasum":"fc465d2323f6740384ba61186ffaae2925781ad6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598639595-5c6e7b6d.0.tgz","fileCount":137,"unpackedSize":574227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSU4+CRA9TVsSAnZWagAAKSgP/RgiZaug2pslXhbAYlDo\naCW2jHYiL83cEE7p1LpzeXDr1b8UABqHXpoPp1EtaW7oXzHqLTUMygHjkTsL\nPyCFSTO3UVC/4m9fjy+m2/ABjASddH7xcnPYW/bbBMlGJ5D2bcyQw+EZm0hY\neiDlj5jwMhyb6wPEnji+EeJgvogVOeUV+wqcjB8SzhkVAlJyu71Vjic4LS/Z\nwLd/bJHd6PLroLn0XCObsDOh3WzGNn+s0l1NYNfvO18xrGKIywd15wfouJwu\ntZoFU8iIaSF8LiIgWjXwMGmNBDDrIAwW/dJkQOz6G+mvrOYvsBPeBAuQnZWK\n4bvy4UD05rfmaZ0YtNpWuJg7wd80XpDYN52N6TI9/+wTOWF+BEhNk2x5dpGm\n/njeUJSkaNnkegJKF+f1FWPJtRpTpUPM4gsU5R2ULW303JEiyvBkvRGy6fCP\nRFo620enGAXnL96qaSwz7TFqRZf+SNIG6pb+TuOkUkSYekwXdBEyYQA/CRDE\nx8RC+OgCa9nfKomu17DYaw/VZEG/KApiSkxSq+80wXDR4kkfwgYfepC7vXyt\n+u/EX11MUpINjlaAqdlt/5a2DDAY46xsfAized13GhudhDrj6lK+WMnWiMgf\nA2B5wavZZ69eMW79A4eaUusvECUgX4MmC33VRUPDe18r31e/bs213s+8zeIp\ns47b\r\n=5RDP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdEkpULBwodF81yIqbu3sab9SnITWlHckZDAwF+0PkQQIgJyhaOpERYhggJtes3/+gmmatH6eX4h/wRbY7Ceiasqw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598639595-5c6e7b6d.0_1598639677599_0.11622263818818501"},"_hasShrinkwrap":false},"2.4.3-next-1598640501-5c6e7b6d.0":{"name":"@xdn/core","version":"2.4.3-next-1598640501-5c6e7b6d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598640501-5c6e7b6d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ihsh2py6ChUxZU2hqmgWCNdHQgG2aGCCvvtg0KJq8Ew3Tw4H6rN3OEFsgD7GhZaLuWpCJs9CNmRXecz2hDXDuQ==","shasum":"9717d974e69dbbf101f4d58abe172203a8703c05","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598640501-5c6e7b6d.0.tgz","fileCount":137,"unpackedSize":574227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSVHDCRA9TVsSAnZWagAAR4sP/Rqqhj8o6JfheKYg0OOZ\n+QcQLNdEA6xCAPKI0gYk5lxiJ1hUyGrcii7FWdK0I5NFoLimFPQSbmp4ZftN\nBm8SFrDuGfijkPJgu4sB3/fqZGL1+mRXjgfUuK0omrjc5W1t7CghTyrs65is\nn44bHTK2yOVYSlA6U5tEtfd5rYVHBFSNiRV1AY+t3vdmCaJ79yNqTy587KTd\nSyVOfVFSQPZGjOOsiH/Eb2ju7SrvSiADGesFBOczaRltjbPfAh/O+z/rRKIC\n+w56cvCnNUjE1P+MXWz9mLLWqTNWmZBhOcbK/pSFZCP+eZc/ZUcsf1lDOJDy\nH1L0xYTXe8XKKQ6kiFbV1QqNL0qlFF2p08HvPPKSx/6yacsc/yFmJkDuv2ee\nkFQR8+o61inhiQhRiU/+jKcIO2mrmXJ2SfLMzu7vBSgnr4ZOl9RxX3G90RXA\nxWoZaNj6GMwkKiKcn5TZbsC0eyvX8FlwSyMIVoxmUBE119rN7GW8hGu5+GmI\ncw0iq5NsThbs/uxjxlxKp1Gre4lclHWExCubluZmVKmT+fDTW1H0teMxsEdL\nXfzT1ObZUhrVS/caKPJCeePlPR5KKfbY/4uPbFUh2BoRGt6C0lwCrgig8z3c\no7LFogrkc1sKrY8zEHRRuu4EqCQOZVjHQixTSND8nTAI+2HTp+ScgSO/ORbZ\nNTHe\r\n=EK+Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxpJ74wIl4R+5rx9QQ0O0HO3YSadSbbsgmSXE4rnKAUgIhAKpW6Rk5PG3eUqVOJLdzYH25OBy3KP1BQvHsjU7EPRI4"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598640501-5c6e7b6d.0_1598640579180_0.9034883064261423"},"_hasShrinkwrap":false},"2.4.3-next-1598644967-a0aa8736.0":{"name":"@xdn/core","version":"2.4.3-next-1598644967-a0aa8736.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.3-next-1598644967-a0aa8736.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-COS3C2/235Z4Rz5dmYriCBr3rb5VWg9vU7kDpzN5w3utQ7KNbB7hPWdCwZYETRw6cTZA5tqTgX443FvbD1qDCQ==","shasum":"49a3ffd75ceba46bc4bebbf459c4b337af5cd924","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.3-next-1598644967-a0aa8736.0.tgz","fileCount":137,"unpackedSize":574227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSWOCCRA9TVsSAnZWagAAaTUP/2rmmaCuUaXLonxmHfZY\n544yZzhKxMiSGKbYPkbDlkBAvdBLm6cAxPBNmTriCSiJznsMMf2wWVqYy2jQ\nzC3ftuV/VtGmFURBsh/67aPTxkVjXQSbDtc/oIgMUIAXxDjea6OSNW842ce1\nAwe+xGOa2NYpJpUphBd25tVwwq3ROEEVsCqWEhrpLF0pAMilZDCLI4vLP9rS\nMnQiWZJp7Q5JW3SVmpX/5Gjft3ZDRLKrvJXx5pxS1JTCzfr+tYVqK+lOv3vb\nU8ci65bOT5iWllOFVkKKRxejyVMF83PnUZ20DhU/dPHeNzBJ9Gx60xGBqJOq\nM/A2cjsypjpmtkllBxS3vHe3A7lUXiMRf4+ggakK0a9Q7L4F0htuBg4Mi+bG\ns2QpBaVE1RmBByw5TAmqyzGM+yP3xOTtsRtHORkPp+Fhuv8TCyHWMdx12L6m\npDZWS+MCs4RB1YaaD0NXoBf2b3Mu7pfCEHwNhx38xed64olzYTiW8gME1nBC\nJvjLYQAs+G50D4O5bB5foiS5sp4K0LNW48bBzYiaNKHeqhK7AUWyBATkxfn+\nmFuYwoARj8WMsZF6WAx3iHTbHbDCm+FmNG+C7a3yWOzQ+ph6DXIhwbDsBxjE\nBr9EvC2xf/p61Spg7V/dnZoHQOLx0U5ntUq16yg0U+xUTfO3aQl/94mFyzvf\nSmgV\r\n=fxlC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrsHl4X06z2uOZmhKfvxJbAnzv5v/V468ie6qA/vMpgwIgfCA1WE+zuKXOCPPmXLfOcuiq0d+tDfW2unIN2lcA/nQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.3-next-1598644967-a0aa8736.0_1598645121797_0.8423219285824635"},"_hasShrinkwrap":false},"2.5.0":{"name":"@xdn/core","version":"2.5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-is3Zfb1MfSwz2hMDHuD71bHHjYmAQ8VbVYii829QT3qdTtawgYrrgAgfGjiPuGEq3iAuYlfYULv72IQyBB4qLQ==","shasum":"d95f28337319ea36c801272d0fe28293f141cabe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.0.tgz","fileCount":137,"unpackedSize":574173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSWibCRA9TVsSAnZWagAAcAgP/RRiFB3hEhNPZMocpJ5L\n5hH1THaRjpd5hAywCL3oobYoOAirfFxpUVJiCFd41uOJbuGfGXRgtVSSyYyk\nmXfGloepJxn1IFAC7xsHrACIFEpsofO+CNz+ENzZHqDhOROg67xRcQE8lVaQ\nmsw3yNsuegO3xsyH9xXFZXlqvL+yM0ieawkqIAUeZI6ga8qCFtOFcSW8qET+\nf7Pdb9AQsKFJCF1IHpaxPUfb3JAwxnGrF0VVUdJRjSdUC3alpsqaZ2/BmXnu\nd/LhaHAQj4vSFUZBOWjiVi4YrtLYrcU9FAdsQ3j+TPq45bMTmTSN23cF/mfI\nKacE/Esze6dyeCDOQpp6wMzm33m5JRt4IudoLiirX4PYdkD3rsgzRB7hXKYd\ngi6ZOr2JXBu0EsNaRHDF1nTeNbylbYrPJw2f4/8utezHWuBIEN/48j5Hmk2G\nlwOD7TyhP7Xew/uB1VZ8u9xQnL/w3KxpJWGDiqPdVBq560uCmLq+oRrh1+gQ\nwEUECs8LD95l/xJqpgjLXto/UjSQO0dtMmjTRSD/UdT1BK7c/XoeLspjc7iP\nPr4p/W5YwqoHfHrZPWSmZs3btIXP7Y39JUX/hy9FAE5rwOqAyp7sKHDRXXa6\nhpxThC5T8jEZDWUr/OQetzIqO9ANWlUNd1lZx9d86wvzog8PxMYeKDErGxAs\nQG1e\r\n=4QAt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCumRB6xtYRrdfDFtorShkuc1xXN4YT3ill/kCZLCwz/gIgWTFT8VQH3ybHLo+NRfQMACIM+t+mHSbqV0ilOO34ac4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.0_1598646427449_0.30135055146080014"},"_hasShrinkwrap":false},"2.5.1-next-1598646333-1a9d6b6a.0":{"name":"@xdn/core","version":"2.5.1-next-1598646333-1a9d6b6a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598646333-1a9d6b6a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+iaiFFQqyiAVbRpPd+Ab1xxmlOjKXn1Q9PRfV6mfFyITmfIirvUqZe/f6Yf1k/lh9JlO85md8fkFDucazIrY8Q==","shasum":"4dda43f0702b6b59ee38cde72af7bc7581ea5d82","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598646333-1a9d6b6a.0.tgz","fileCount":137,"unpackedSize":574227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSWi/CRA9TVsSAnZWagAAcgMP/0HzNt+ht/Eu8gv0FqC1\nuU/GJdfAgBoDCdbC6jkKTBgm4diiyzypZCcFHeMWJHrNBrC9WomiVp3E2ynw\nX0eE9dO5geknBEbpqxJCaPV4Htgo1Ol7WUmGKmaMlwvQcve4O5O7wLChYG1k\n1mBMl7AFmWBq8t953TajCkiz/eUAEsiCBrCdm17grUBCYfb4yK79NvRaIUMs\nDy9nAq9YhzaYQLs3LbmhdqK14fvwKMVbDr4TLuwZLokkfAKW62j23fwKuCjO\nbG6AQ12u87bvN8aq9DkYzA1y64iff3zd2PsghNiKa+BmVhgeJkQJovuVgEkq\nU7KQCjvf3kD36sN2EtVHZYDEMJqCWnedV+DmP1ELyCZzrr3shrXdbCgzk2XE\ng7ssVGkeT1ohs7X/x33I3P7P+W/QCg11KE/Nmu+O9t4LP+O+WNI3JRGlr1SC\nS83FjhIbnkBFv3dXjpN10ZuwiM57Y/BFRQtnpkkAVFmdcqTOmWwIupeyMm1v\n1Z56EvV/h3FQiPXCL2XQypTtpmUk3p0agC4ef+x8VHohYJ+iq0sEQKJ0x+VG\ndecACM4zFoUQOkULF54BXxySHOUehtsHB45MDgYya3y2/ptJKjjuv2PUUIAQ\nBM83M5abev2FAtJVuOI07qfb0eS9jkiwNI7tqkHjHbd3wBXJXWw2ugKwLl3D\nHAbo\r\n=aDdO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgyAkDZ9jWnT03yHFMMB6plp5oVvceRFA2EZzSrdNw5AiEA9hHMU93seap5lbWjyoYoAXrJkuGnWUIi3iyI+azJmug="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598646333-1a9d6b6a.0_1598646462466_0.36907589883753555"},"_hasShrinkwrap":false},"2.5.1-next-1598866946-6fff5e1d.0":{"name":"@xdn/core","version":"2.5.1-next-1598866946-6fff5e1d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598866946-6fff5e1d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-T4zzQ5v+usDyjHKFScyKclZpO1ebY8tPkxPR6c6hy9DQx+aN7IOsLyczvDMznlLpG8wom/wufzXeOouQB4czVw==","shasum":"09733d0a2b93a3276b0eaf1e903e796fad3bfe7f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598866946-6fff5e1d.0.tgz","fileCount":137,"unpackedSize":574227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTMZeCRA9TVsSAnZWagAA99wQAJqu6rUCfOD4adxEjJrS\n9c3bloQZgnwrkBBA1sW4sIhNg+Euky3Wx3pCs4wIF3QXr7AEKEYf9JThcT6/\nJiPjTgmm4IPBxYyFdEmlzrqLH9OVvUHpFiPPnGogYLEWUYSGTh0BiHmr/ovS\nvhKVXi8mV328HK/673msgnj81Zaco4L9jHooAIOFV5iZPImH3vVQebzAQhNL\n5iiEM0TXDS9ABx9397lHFeI2WnYjxyfMx/0lzo68RFJ/IMIHlxXd9k0sdoFk\n3AbMpOYVtzwd30rjclYY3YUCNYuB8AaGV6t9P8gj17mgwu+8ZEsRMTw2XT6b\nTLnMk60+iwmEZNgHybh5TqHjRH0byobGmo1Goks5rhVsWLG9WrEj2oY/oh/Z\nGQLDfUzx1DyC7AaAZnri33d9E3lPtFFU4TCDkobMDgsC59dNMUf9Tyd6ghU+\ncKKD7ljzNxHWwmOSK6SPh2kDZojix+Lj8B1QItmxuKZ3uxC1xyU5N7PKPZ2r\n7F1XntZtsOg/rUKfZKkjvgAo36VOMJ3AgvTIabM3txeKGcIjdkW/RrnksyGI\nngXq9Qd9BZSPvjNXoEcH2mzFxe0V4skj8z4C0Dac84wh/TRA7+4FSWu44sJc\nnwbf0bdOIpczaLyngVTRkTflQsczT2j2oWwNGoRCF6vJahLtCLVTvragJWQ5\ncAH0\r\n=KAU1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAp0slXbFYl3VMhiw/VV6DZJVZLVRk6cEdWlbXhpAavoAiEA2vxsRPyxElU0tc1hcFB5yM3qBI/zlSNafNiFIR6L6m8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598866946-6fff5e1d.0_1598867038435_0.6717387711284979"},"_hasShrinkwrap":false},"2.5.1-next-1598879987-1e0d4f4b.0":{"name":"@xdn/core","version":"2.5.1-next-1598879987-1e0d4f4b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598879987-1e0d4f4b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EB17H2CNGUjOmsG2byyH8hm/Z5oUC0+JmvPmyTOCM3iFa7lhl1mm18ydXTBTb85WI0xK02D62COI2nivoHa1Og==","shasum":"099c1acf8f1f2338a76544f9f44ef38f492357f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598879987-1e0d4f4b.0.tgz","fileCount":137,"unpackedSize":575133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTPl+CRA9TVsSAnZWagAAt08QAJDjoY3YJ2CO775sS3GN\nAnD2ym75W649jWJLHvowq5MQ9JNUbuGSgm5x7kjwzKrvIGWE9Grcr8extIeW\nFQbBhpxwsD6Oq8pkjWwpkKyWGE5NQIt9SnOMhsuB/qPnBTeXQ6oNK6IUhyIh\nQmwjbHtGr3e/VFR8K4pgdPMwLEHiCrRLBdpZn/gmqyyIZJFewrHvXWc0hYyJ\nU3PHaagkgKGQCIOPLAtuZgL2Nu0xzONLLZ7P0YII3OrYSrehW5dBzBPajTah\nr/O7PXTOXx8BU7zfKZDhjalbYuERBtuRYnvP8IuZ+BWmKFOTlGmJ+H4Y0BFj\nwvHukN4n4jQFtWd6D9Wi/8kyj1PjAb13tCQb70bRA9zVYo+I2JUZVOlGc1Bu\nt/BNY9Hxi7SgFJ6/yfzn5/DcPCg7/r0FdtJmVmC2AWORzANmyew6Bi9p9E2d\nt71cjKUC1frDfxkg1z3kyFq6FmInzPTx5NB7gw/5xGw0260FjQPu1Bj0yEVH\ngpKc6yEfi9vu34S8dOdDpQVkCbDcaFZ0W7JpxG1A3tNg7pM5tJqEzqv+fwAD\ndaVZaRKOILLn66k+KsVXAfN6G8Ptx4H1hD/uxJkVP0BF/yGdYJkgS4sRQFhh\nUr9nD/7ubaGR9uXgJzEzilKIT6L/m4xMUpDCbtnKhJ8mQe0z6NIg2NtqWPxf\ngnQr\r\n=LEKa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwRzNVeubc5m1nwqZ1XZ3tQSNqRwf4f0vpor7N2NyIgwIgU9aLOaqDWIGaRQZXmDxYPbuGx5DiWNZeSueJhtq9D4c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598879987-1e0d4f4b.0_1598880125744_0.4321268235988891"},"_hasShrinkwrap":false},"2.5.1-next-1598880323-b5e6fd78.0":{"name":"@xdn/core","version":"2.5.1-next-1598880323-b5e6fd78.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598880323-b5e6fd78.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pDd44vDAHbCxCERyq9ZxYzcGOYjWoowhLyamEWkuxs/BejSAsJpVI8cRQHKzSl3okoVi0ArCzeUcv8Ip7d6qEA==","shasum":"b5304ec7af8d090fdb50b6f87feb5f86ef42674a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598880323-b5e6fd78.0.tgz","fileCount":137,"unpackedSize":575133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTPrRCRA9TVsSAnZWagAAMT8P/RHK7G6HPeB09qsYopC4\n5o1lPU9cs057LRntUlpfIzmw4rwGarin9xjRccgMCWeafNJja2b+YT973PaL\nlxqWwvEBMYUlrtQxNZxBITvcdIV/e0jDEd5IQfTJj7kcvj9lPwzql9B8h2A9\nH8aV+tcWuv6CTq9BqVYwaj57mOFmyUhKmLiMCwr9ZDQ5RA80t2+1y2U3k+TC\n2DS9tmfjHDUsrz2eeEYMvw4RkeJELVbxtntWWpuLMg9g21paawgUfPHb4QRp\nSPpZ56Csl2rKHAYJ6waz+aUAnZNmYtX0KKj4T+oNtB3V+nVJHCls1q+ZbyKJ\nvSNcqmvnIj+UDKBatUqmBCHjs4Fs8br4uFnGdLp3xlc7eVR9gIR49rN2wWkA\nJMoOHcF5gboyCOYtyBGUJS7yaT7EFWixxDXbkKWp6ArvXmlXZQ08ur/dDeaW\nYRLFucD5GBPuR2/TcnAwbCc0B/e7kVoKhbeA7udLlTBJ/VY8ouU+jeAqIUcE\nwgt91zP+zxCyF+tuntuQPyScrg79INHlSn/Xly8J6nrVAuf6N5K5bOHIcX0H\n6+ubtxkpV+khJWZaSdWusrHrwYiNwIiWPbxuSIFFgw2iobsHITAGCs8M0OFj\nBwMUDgHyUDPtjqp+3Ii0TDNhmMfE8mQSyaDe/WDyFR7Q9eiHdKfd5j2zJD02\n4jeF\r\n=wKmw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeLc55Xrnp+5+OfRMNUKDI9J0gtxobTdHkCBR9sCPZgwIhAJS2iJscvkdbqzcM2lggllb8a4l3t+cUo6Upn+aQUxx2"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598880323-b5e6fd78.0_1598880464929_0.5089315672843797"},"_hasShrinkwrap":false},"2.5.1-next-1598880768-caa27f5f.0":{"name":"@xdn/core","version":"2.5.1-next-1598880768-caa27f5f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598880768-caa27f5f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-k4iBK2Fyl4aMX4eNFjRReQqAVc2KOJjJEZAfeJ05CzuY/QgeT9ou+k7DgASh4ES20CnE9SYsyAFZDDStrozM6w==","shasum":"c0cfeb3128fcd8d6aa99a416e1e98cb08c1721dd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598880768-caa27f5f.0.tgz","fileCount":137,"unpackedSize":581190,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTPyWCRA9TVsSAnZWagAA0GIP/1aITQjbyExtkDaatr6c\n/VFKBGbBDN90/3MaXpzD/DMN/NPQ+Bo0yU8jHOhG46M88n7x9ADKpw0p+198\nW/duR7QZJxzx1NZRySCAd/M5B90kb37g7v8xHeeM/0NN7IgiPeGIimyRALmu\n+wQtBYCeYTXR2JKF7bSAM/2rPN7gfb9CQKZAdohifWixaeawKRlDIBafUNuA\nP/HoLMviPsbQc09K5+iJfdqqmFVsD7mjP2YAiYH7e6vDdZyYne2AT7wcEp5Z\n8OAA9ljDBr9wAxDwmcUu/J3WgGmXKGEivtZlP8YnyJl4qIOLwsnksIAvuIeu\n1Y20T+SXDliogLIczocJZgL8gMoJul7kkhe/X7BoLpywWZXM9co3jGdqaT0N\nb2tsmzMaeLJzuVJqwTZT6vJuyFTBwunO+m3r+C7tr/WlqqClmd8+8ULt8L0N\nS3xpK7ysaUZKvJyiOXzxTth86J9YLvG/SMe6FDnmUl++j+w7LlxFRciS1VLM\na5hDfVvPkDYBEfq4nT4kaYIrQjxaNAoc6hP+qIL6BRCn++yWFZt3UnpvVzOu\nvq0hYogFAz0wej1qXL0WJyQsE/rixKlJS2tYldkQ6wDXFsFsU/Gd5NWgQwhU\nNV4xOh0LPNmmis9t+PQNmIFiUIO8T2esnRFCFYY4Mjx4B7LUNJnxssACACjf\n2/Zv\r\n=OZLn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCS/Guinu6EI8A643AmHZCCwyBiof+S5OG6NyJVjtusGwIhANzJvtbnRVrF/LcqPqoQ48Wm831yQ23kJikscAL7Mebd"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598880768-caa27f5f.0_1598880918039_0.359594836353583"},"_hasShrinkwrap":false},"2.5.1-next-1598880865-c8738529.0":{"name":"@xdn/core","version":"2.5.1-next-1598880865-c8738529.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598880865-c8738529.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0onPwWtucYeA/oxQuFl+ggvyXfdf/2lEatE776TgZNAom2Ln9JyPGJSj/sUlfzEciJzyHBGIh7rMhw2Tj8jRpA==","shasum":"748c9e43b893541863bc818442a74568bf0d9c46","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598880865-c8738529.0.tgz","fileCount":137,"unpackedSize":582947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTPz4CRA9TVsSAnZWagAA3O8P/19YRSfyNxTDltV4e28o\nGrsuoNcy91un6Pc+CES147lyTFzLpRWx8niZvVP7G59eevYRwLJkI/rusSiz\n164ZDr11z5up4XSFVByRT/AoRRjJj/QzUdgdMW+x4gF5BRAuvtDNA0JIDAlJ\nzVep4nmmesRVSGFOh6XX4PqbOS79VDPrGPtLHeGGTy/Z3E0QpXbO95zWda7c\njC4g3RKtFkbOIdkuMtnTRClepQt0mlbThBuvE7quErnPVPehrCDBZr7P3mc3\nsMbUfrKLW0T1Pk6Kk7mGltEtIM0230EU9CewyIsCt5UzxrHgEXwt9Z7GQ2z8\nFpwkshG+oT2AOcJ3Q1RFUeXNJ46TPXlciD/BtUNcuyW6SdtrPPizvZOLylSl\nctu0HD3Z61vlTFEUS+H7S50Y9xtfFVaWczZc7EB39L9MoravIuUW1Hqy1ZUa\nCETKFIP9LfQgkHtLFl094vGPWA4B2Khjnmup6Cv+lGMEwucJgRqLhlRw7zuU\nz67nyclEvEg2aFI/S2ePGKk5ShqJSN2fhRSJpbXU43QMfP5j/T2oZkfYW3Gm\nPz+3HeOuXeE+xgtAeieGnBA9DZZ7AfBFHK1O5j8t+vy9FMieZ970+0f5lkbr\nGQfjRtDGHu0+UjPYvc7Z16ERzfktYTZWuhHUYAPBPyTbW9LSskhLA67JguQT\n85Uc\r\n=EyrZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDiCbrTRQFLr96oSxJ7ZZYT+bI6Tp6x6qFLtkzJ+UaFrwIhAIdRKnnmJ2lBLK+b5DlApTDbJtJ+qOK3ff+JOu1erUgf"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598880865-c8738529.0_1598881015921_0.4915232413035575"},"_hasShrinkwrap":false},"2.5.1-next-1598881901-48308422.0":{"name":"@xdn/core","version":"2.5.1-next-1598881901-48308422.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598881901-48308422.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xsgrpe0YRwWchbj3tL6x7w7P/yK7SWs7D4MnNi9vP6oZy0FlcgYgqLPom1ZweOCbSjzwK5ra1JOfLMxsnzFVlg==","shasum":"ec8093c9c9f26cd52ebe714b8b6c69b2eeccaf5e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598881901-48308422.0.tgz","fileCount":137,"unpackedSize":587690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTQD8CRA9TVsSAnZWagAADfMQAKTayLweUsGTKKva8jlk\nxpaJJXxWP/PY2xkGT6CJxVp9pEbwzm4Vw62KHy0BCE+OtQJeJjuVT+sme3Y0\nCzqKK3a+q6udkLtgdAe7nX9mbTm0knIzzdjbKDUnRVO8BXAYPEqq3wP4C5L3\nP+JWXIQii3Y+BZMEkNTpca4wME/BcoDsR42u6vo2rx4Q55sl1I/ga8esFr6b\nGf6ku6/3daLqyP6WmR9dyIBTjiW50ErbjspHwmSa79ZUL1rOZA4AIY9MssHU\n1bHyHPFcvN+/RjRJiyBawCIzZARr0kf49idrwPN80D2X0hMjskXFoxx5fjGh\nYVwl/zfXEFZSdhyc45XXWDOVKnhhyZN5SPy7Wmxc8EOWpR46rOHbAB4F4xQe\nnxanJ8EW77Y7yL6Vru/YxZBIhhlfnqYa2jBllkmd60GBZFsemyJhGil7DZtU\nSMoSKLZ/itsa2O15D3ar58vKXle416wL2moznhgefMeDYm83PXwp9Ps4gkRW\ncuUrgYFlTDaQNivKydpd5GFvNf9/4A1Qn+2EZerfN0IVyb1E1xzx+tK5Xuxn\nk/uK39ed0f3S0Cc0y2yPYbTgmyRWaIOnUJLDExC+lhBFxp94+iNxVgD3d/f6\nRhJ74DfURrfvZccXZ0hwdFYjcckfqQIC9Lh+NPQu/DhPNCnfhuW3qWLwPZGl\nE2eB\r\n=6+Js\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA0En0Pn6HmDe75UDyQcFRIHw6LLn11f+1fOUE/QmGe4AiB0vZfZphYeudvsuAZYQzjV4y/oRlQlLe8NDgfA8+AImg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598881901-48308422.0_1598882043636_0.19072615998351372"},"_hasShrinkwrap":false},"2.5.1-next-1598882524-efeb276b.0":{"name":"@xdn/core","version":"2.5.1-next-1598882524-efeb276b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598882524-efeb276b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-OpP20QhFG4SnprPCj2unOs9eERRDLUi/fkOTtesMb8I2MCtVpg4XfnWq383idSz1IhihQ8lnZbPBTzTKAVhhGA==","shasum":"8b185c81f2012a501c3e11d1a68f9ed6ac8d39a3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598882524-efeb276b.0.tgz","fileCount":137,"unpackedSize":587690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTQNYCRA9TVsSAnZWagAADNMP+wdWr9Z9bgcChsC49APk\nbd+U6m80QHW6IV2/vvXNnP7AjDGuslU/MTc4Bfu4IUKyplCDEF7Xb9pp37jO\nPXPfBn/3vbAq5atE8Nz1W0GrQUIVsImuw2/Usnt0a2lakUiHxNlibUFY6uSP\nCCEh+3qEShta28P4ecYdnOmjOUmNEzMVA24gPe8WcpB0FpZGp2vu41bSdNuR\noFfOFyVEUa1nKTFjtqXjnPwdnMStvOLR1YXSodxEhhkmhEf27l4hmfETIDzm\nS6MmUlevfEJUhbzwhMEN79gH9EGfYpHiGIV29dHQenvBv9+FOIyCU1Zltvc7\nlNw0Uv4y1Lkn5D39H/o0yTu1NQOLtCoFwBx+Vss3c9hTNgCl22DXpQ40LpT8\nkVAU7Pv7zNNMBwtooscPRJmTMQmympuumeR7Ar84FLWZSf5OfsR9ZPh0v/fL\nZxdDZV8MxO7lwok3zlTMIEHS58KA6P/Pr8Z+DgMNd80uJNGNMusYN2JHIou2\nWu890BSXUTYk8zjgHBy18ItBUWSGWi5gCoOFndrZLJxlZ0dtsNYuQKvlwZYB\n5xAVcxuCG39wY6c6F5qGPlx0TvP3GlQQwP65w7y7W7IWk9vW/XWzcCLvPlJF\nCvsYEOSxFUZPyDex82IsBOmgV8WH5AhEEOg9N34J0kZbKZ2k2C25N4IIaai5\nBYbQ\r\n=5+f8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGVonOVnrKtBJ+bWchtbU2nIL8o5KjeUg9OcGcV9hSEwIhAK4l6PyfjSj25eCHuRtrs3uY1UqmM8HKEXFw1deL8H42"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598882524-efeb276b.0_1598882647827_0.2682629241178489"},"_hasShrinkwrap":false},"2.5.1-next-1598883665-efeb276b.0":{"name":"@xdn/core","version":"2.5.1-next-1598883665-efeb276b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598883665-efeb276b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-k6ldXIqQ12a41oXyiXzzVCXFqWybvcSdKxX/VQDSvbNNtwoVXsVAQBCgirOyN+CLQphH9JsZfXj1aRo1k30sJA==","shasum":"3628b3be2bb96541cccd9869193b6df4ca8ec6ba","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598883665-efeb276b.0.tgz","fileCount":137,"unpackedSize":587690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTQfdCRA9TVsSAnZWagAABBgQAJP68f1vA65I0t3c/sAe\niKtiXbpeRwyd9unGwgGJ0UkUMRMrR84ftPET9YEgIzELTD4DEd7qZ6b6ksrZ\nalOXrwBucY010xqf5sdTD7CDOC/M30kYhxGoj+UdlAPKXv8TYsC+fpTJBXtR\nPdsIAenIRtY8MomCTx5dL72TwOLdJ0ArfmdsQjCSMWmVyuyQMDfoa3V752UD\nqqptwy5VH9eUG2MeHeEAMQ5DYwln9X0JnCR8lYiidyHnp+UH1BLp4Og5CGUS\ngg4FxsEN0Kb+zUS4MqIBQlAyAFj905V5657/nnDFQ8UMSXxU5nJfoFzlKb4f\njELrZu9BaM1U5/TmMzmjUzcyMjvHX8NQ9EuWZXwHIgpauxzF5xwsZMY3n8KP\nx5nJ0ghmmWqxxHKGl0ZK0wDR7VO0R0URH2idk6+BYOLpuBScHfNE/tLozY5f\nQDjjchpKncdl/eCOCtrtNMRB+cHbDk3xZ1+nj5C6TBtikEkWkvMBropJKSU6\nHGYlE68ErQQSai9keDR3Au4iF8aVhj38E4ImIayCYp8SVLGGPQ7269Po+UpA\nxj/KTSqNYdTQOe1ueNbTh7/mXr5zuVO+uWaViGefDiy40jPU0EpYr//mVxO3\ni4fK3oC6ppMnyiSzs8MgVWu58PLTHbtYArl/0hxLr8WkJ7ZHGXIb5mTs6Gvb\nJiqX\r\n=RcNB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCG/0AQP6FmqoTyMKYsyhuX3PK7tSziOJo3GatGrduhHQIgY4iaj73kgKUPZ/MU65FmA+CuyBQrkkFi3668MLi+j0o="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598883665-efeb276b.0_1598883805398_0.3730913902075428"},"_hasShrinkwrap":false},"2.5.1-next-1598889853-8cef67d2.0":{"name":"@xdn/core","version":"2.5.1-next-1598889853-8cef67d2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598889853-8cef67d2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-x7XF54YBZL261zn9mQifWcdp3iWsCmAWAogP0ThPVoMHCW2cta9VWi6r4lPk/dMEJOkg2wa29U/AsKZZ0FuJfQ==","shasum":"e45e79472da812f4f4490f15ec951ba60a30869c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598889853-8cef67d2.0.tgz","fileCount":137,"unpackedSize":582947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTSACCRA9TVsSAnZWagAAEbwP/2t1dj32dv1sdceKGcD+\nmyXVwWUi1Em2WBhalEoWPZgwQUlTxHY9EY/BdOgZw1B2vwHqyvVnBUoHI4vy\nhKwOdMuBxiChbSmsOReyMa8ykFT/hVrVWj2De/2rww2RCvlcZIcqp71ud29e\nVcJ6iUl+2BrN/nB+VVUR6HXyPsseGZwM4+l6t5PAygik8DJtV/psW6Tq5EaI\ngY7fqx1bzSd6c1AWSX1py96FRsw5h6uEoC02lcfsLFzk7bNhZhcdyQIf87/8\ngqXTTfuq/kwxIaVVTeISkIH4NtgGt6GXj41Kg9S8RcVmJKrYJrV8/+Bsi+xX\nZNYQhozNDtKm+Du9h2T6qsmvxR7x7mNBbwt0zxOCljSmE5MWQdpowExrrfpa\nwsP7XmY9r58pENRU6LPfqjD4MQ8fn0D1IMWp0jyndjXjMXCKtnTynjy5bDt7\n+PyeJudCROBy11a/T7Vo2gSggbdmwJi7Oc6RZpjEsX7m6JoGKP1LWNvnPR8v\nLAP/0uphtXpq84Wtab6FFlJkciNzZti51vAb+6WjaNevozOxQ7xo+rvDKq4p\nVPPCVmnC8mD0qy1hO7LjK0q1fee5yeDTq4HXMr0i/uGTMNG+ztl1L9aCEfAu\nzecaeHkuT1ZjydASF2ilqyiUMxVJqFYORY4EkryrO+7sXOmIMCEVPgs4p5yx\nC5r7\r\n=Uqgh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAYR4UMWnydkCfG+IknvwVVFZ57Nr+sINKs5egt9z7WuAiEAkoxqyKqqGi91fbAQSStnzQv7aNlKjT5+OhXzLEHEB1U="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598889853-8cef67d2.0_1598889985861_0.02550736258252284"},"_hasShrinkwrap":false},"2.5.1-next-1598896929-74dbe2f1.0":{"name":"@xdn/core","version":"2.5.1-next-1598896929-74dbe2f1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598896929-74dbe2f1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VdHe5tQVRy9x5H4OVyLQHyrVQjiXYDEeETWEcZai/m3VoZzokjazvfl3RjM5+agDqNjnNXICWTBNJdaMtVJS7w==","shasum":"d35abbae730339ddb9f0dd83861e3201dd82e4bc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598896929-74dbe2f1.0.tgz","fileCount":139,"unpackedSize":629425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTTvWCRA9TVsSAnZWagAAbwUP/0gaJ1Ov/VFcLmoNv4FP\nH4Aj2CEM6PnKJEkOhe2X+eyM/cWBlXF1vPEvIB4ovCFxIIPAoMHJb+v2HruG\nNuFDWztdAadsvarETDhpVtaYjZeWmOPgprCqt/PcjL5kCWNbRK9o8A8NrHaU\nFtTwY3PqmLsOk4FRUDsx8swf1wGB07Fmw4qpo8yndZS8q630jkoho45NCFda\n9u9Y6ISkc8G9rwdkivELiUjEs8KKbFZ6LmjDIRxaymu57ErjgbIryeAd3w/n\n1Xrm+lHlBUtJ/pbc2NMCPe7E0gYrUdybQBU8j4CYCdFN00XFRy0SaMLBtm/Q\nQlonJfiJ6vHC7DnCuSBGjyWXhQNY5Ogtesy5EIOBe7obzu/+hRvUqP9TjbTQ\n0wyfiaERjHcEPrBbQWiuu39iNkqcN8dAMLcMztn1tkkWXjkUZsWs2DxsE+Pl\nHFjJoQzb7YWLwAeS9o7Os2mpvNzA5/XoCHKfZH5fs4CxsoXLJaHd/Mo5+ttG\nddAClz00s15N+dp/x98Jl8SOeyiMXYU7Co//3JfN7fuV7Wxu+1BfIpA0UPaq\npy9/l9+AtIVl7ZeoOvy3+BDZAr6mPfaOkTcpyi+WIi1MyJfwrU5v/0jzvFoS\nevy6qG8RWLIfD+bp8XyhuVkwQrCjzbrTmP4M6AVR8rOGd7UFgCtmx55AuHki\nEqYA\r\n=itgo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICeqQr7fFIW10r6smRp2XkNsqQW4OZumG1twjYKEqtukAiBfvs7h+BCAKe8EZOpwGK4EXA6y3CjGi7k/hkaIFfHKyA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598896929-74dbe2f1.0_1598897110238_0.0008819471347518704"},"_hasShrinkwrap":false},"2.5.1-next-1598925757-dbe26300.0":{"name":"@xdn/core","version":"2.5.1-next-1598925757-dbe26300.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598925757-dbe26300.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zzzj9kRNpXSpOgMqkH4jmquPLmQSg3658aCjonN1wb3aKBCfFv/qWYrSz0URQusU2Z4FFgruf5plFrdHHirSiw==","shasum":"9b34cbbdba070f7b67932f2f188ba07e2212bb8f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598925757-dbe26300.0.tgz","fileCount":137,"unpackedSize":582947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTawQCRA9TVsSAnZWagAAraoP/111LSAL9XepUbru9WL3\nlSZZHWyRCMzthYCSwNaO8rxpNNNAoB4pJV837nPUbdNxcFSotKMYEA0qSsrP\n9wDkMISndRuWCKjC4q97XkEaFqwZNnkVIgkMGLRUVoe8QzsicC/kqLUlgsRt\nQVRCc8HzzZWMZieVJ1gjn28QM5YC7LsBXPID+lnW6IOPDlMxfpodJPdei5Xp\nbZcFsEaa5Zes4EWjDadAFevddGOo+1Wow9Uc+5EKIhwTpCKFDlbfNvXedsab\nP9GTLHoCISXdfIFOxHTMcO24j3rPAoyMqh0t1+6dAgF/Xdt3VprJNbwmxiZ8\nuB9ZFLkpvjS1qXE36D5mWuPat4JqJXes7nSFlHfcJ9zfaGjGFjd0vY7oerl3\nzohfl16wQD0NBd3aCrY+LY06YcnQ8umiypSisd1fArKzEF93E+NhWiEEbfht\nJvpAlJzXiMfcmFlgU4PC9IAVHJl/5FDaEHOww+iebGmwiHJTfKojV7Fe4r8n\n4dnO+Rsx2lippRT37QMIts3VE/8Itf3shzDGnoE44JsQ9APXxsTVvVHYZBYK\nFppNHQzZ5lJU217ZwiTH3qmybykO2iwW3jYSl7MtZ3iUfMPNP94s9yLkZp+q\nOrWPeeUud/mtdG4rstBNXZzlMq/4xE69HZJnVfoYE0u5+WSHT+3iKUKxWDkh\nh7xj\r\n=X88U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZ30mj5iAOC86HR5xlNJp3wxhtaAZgs9H+aV+/yBX2PwIhAPLDyCbprwcV0vBYGVlOAJNLkH09c58qQNIWB5WYasvs"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598925757-dbe26300.0_1598925839901_0.5320635529527831"},"_hasShrinkwrap":false},"2.5.1-next-1598926910-7875ca78.0":{"name":"@xdn/core","version":"2.5.1-next-1598926910-7875ca78.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598926910-7875ca78.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7bFcjKVVCxSWYF1gbT8neeE0SBB3jy53Tj6xcHyhQ/P8nX1sWOWTQG2yKhES8D2Zos61WbmTjjR+0yVX7ZOOSA==","shasum":"1d26544bf1658d4bed1311334fbce84741e0e8e2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598926910-7875ca78.0.tgz","fileCount":137,"unpackedSize":582947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTbCSCRA9TVsSAnZWagAATowQAJE2RirHCR0QBIQC+aQt\nkyg47nrsmuwBbHrVmuyE8sc3wwkpdztFUyLTyS8YljK2pJRdxnPrWnaEwt5U\nE2/Z/h5Ga/r+IT16r2HHn90s1TrY735zGFDtOMVB0Z5tdssQXCdYP9myZAxy\nt9fVrTALHujoOhWAX0HL0XhdZL0jP+8cDZ6R0xBBzq4ucPdde2enNx8jxOyh\nYy0wUE2ZS771kjQc0JUdTh1yVZfSV/Du8WhIJHV0wsih/SUShEZAJs6IgiDA\n4jvKNpBAz99XhshOgPTpNC0x3j7p24PEw9UFaIP+p3fr8rm0TeCFiu1zcK98\nfOflSWPrcL6ge8Aj00JqfO1bePdvazat6itRYlMqUS8ZaCLDNsdfE7bv2T8K\nzGiC8vaT/kkKU+OuE7o0XWTj5JHqMEQpfFspVPqB4AzCK9r2Fjf8/ZURJ0Jp\nM34X4wfbX/w3XXKOs0jYQPaX8obyGfdEkm8qqKBS78iPzyb0yY3l/kjmsKPm\n2FexFneapL/l5ulHYeTH6sX9ix9yu1aFZM3zplAEvQbkzcqFW+a5xeXBHFAm\ngeBOtlakwRvS/D095P9LwXOyWIhXc64bZnapHXA1amfQjo82f6X5qfDcb6NU\nyLnfh7eTWAlRQyjRU1b1GnKwM1Wt8Hly4HwmMjgoYBO5io7+sZZf2s6/UV9c\nIKSU\r\n=ZxW6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3fvsOkDTpqQ0Wh9TmFggLf4P2yYGi981jFKgbc/cyqwIgF36lPUtSJZ2i15WJFdk8+JFcPfAx2TCpJnRjOPNq4uM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598926910-7875ca78.0_1598926993606_0.8703720372865755"},"_hasShrinkwrap":false},"2.5.1-next-1598927667-ecd72f4d.0":{"name":"@xdn/core","version":"2.5.1-next-1598927667-ecd72f4d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598927667-ecd72f4d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-d5g4FOqOlFZ/S9JCHBqKNVS/5/51k4Bq/KHAncLtfwX3SPeV3iTflRmJObj43aOhhqklkUEiJscRG11+X5bhfA==","shasum":"339d6effa091ac1347bbfaae91d777ee9ff356c6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598927667-ecd72f4d.0.tgz","fileCount":137,"unpackedSize":582947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTbOCCRA9TVsSAnZWagAA8kYP/2dIfUx4DF/5FldhyhwP\n7j0nvH3Kd/3K+UAvKvA5PfkFvoGjGtRR1EfSDYMMpDJyVEkMd6rqRWLsjc7q\nqKFcrlPrr+U9118hac3YadenaRkv6oY4LnfxfDuIMDJ6x7X4Zw6MLouMnB56\nw7aIfyUBNEP4gFMN7HfiFvuVfyewxDXa33dlJURzP0bLTC8vsQky7xLrlStw\n+5XRBZk34zBnsiabEmgQWnxl4oPUKoDPY9jNT16TwYrskU/xXm0aoVOK6PmF\nfMXwTQGIDRQDZP8if1UwNu5ih35kz4ks8lac320BndaKtxTlzF6eLTiQ7wKg\npeOH8bi3ZUx5x0j9GKu561Xa4i0sL47veOt/HrpFQVBhMENQgUoO1Mddmzud\ny78baHl/fbaBd1T7VJw5i8yTI8BiQ30rsxf1sZtEkHucNhfII9lbunR5NiAa\n05undm7OUx1I3oCeIGXfJSYnQbSrIkKqqVKSufxtqKBpbzV07OJHRy+luv11\nHJFgYtLEDTB5RvFF+21yJ1faV0TlmEpEDK69PvtDyJXgG1YueRDUgRnUyF/B\nyeiWizV0ktp+xaC8bQnjuXk/SqaMwSiE2GfxwhFuqnyB1GTsNjdWZYkJkWFi\nYyaDlxkzmn47m+UplZlXMys5Dsy3Tgjl+hVM/nx1GLDGa89CMPysxG6nEWkf\nFXzB\r\n=Iv/C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5EpGyRuPLh+dKQLlr73PDJBCVNas5WvCshHqpcGQv2QIhANOWbkjzbrFVcNc4jDfv67xeBtymUphxOvAckY2dAIs+"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598927667-ecd72f4d.0_1598927746027_0.37728863168050264"},"_hasShrinkwrap":false},"2.5.1-next-1598947834-ece2b92e.0":{"name":"@xdn/core","version":"2.5.1-next-1598947834-ece2b92e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598947834-ece2b92e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mT9KpUazfzieiVHQVvV4IsKZmn7niW6+SzLWJWP83kp8MtxBf5FAiC2RhXAKSRAZcEFFhBWYmjUqIhgj/HrHRA==","shasum":"f2abd27b950d01c67420a80cf8329982c66c595c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598947834-ece2b92e.0.tgz","fileCount":137,"unpackedSize":582947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTgJBCRA9TVsSAnZWagAA+nQQAJte8dMRkcjfFanJOdpd\nutsd+FDkKNheLzS0itI4mdmeGu4U335h6nhYPw41bno/a6fpvL3cFYsELXZI\ns5HDTz4vJGQ0WDqXaUrUISyAdl70sxVPGzm63o1k1spQLiFFhddoBKVqFRyy\nR16YUUFm0a7vX08VUQyWK3GwBoT/50p4TK5FkLdnxL/J6f5AfCKCotLtHNKf\nNIZ/zIfDcmWod476PbjFjxOnjNvMOyIyyG9XwS9zguPmV+9m0f9tUs5xU8Yn\nDLYkcUvZMTWtgLljhEEp9SgoXXLoQtVuV7/4uXAhgjEJNbqqpFfLc8entTaw\nZOuWuu8dsfOWn6KK77eqHlq+q/frabYgeKXj0eDivU4oHwqzR4/uB6d4FnI9\n/lBp8Ro01MUqA+3VZ/wiIf9G8Lf8GCIK4UN9bv8uOSZLgS/wIEqqEl+QYDKZ\nrXbf1ZxAcan2FEqNGIE0bpO+No3A7djbD65MvDTo+xGBskGNweBFwjTPPbq0\nLT3QbY+rr9rh7XM0b4qMFZxb2bhD5lvVAZiqfmiCeN/E16KI5DFnLZqh79Yi\n3FO9JWEn6uc4ARqvTgZUM/njro9HcmSd/0e768tLYgAGbYh4kMe7weUR5+m+\nEZQcycO9s660RqUHEhk/8yRAe6g4Y+NOCELLrwLyjfv35j9unWSOpkkEIZOO\nUHR2\r\n=yFNx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIY3Mf4S8xynnG6ipXl7pMXMWLURN2kgijChB6bNzm/gIgBybeAwUobiJ1ieHjjNq/ZgWoOdzkz83YzR5vEfbI5LY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598947834-ece2b92e.0_1598947904985_0.4868366823606005"},"_hasShrinkwrap":false},"2.5.1-next-1598948014-8a30f003.0":{"name":"@xdn/core","version":"2.5.1-next-1598948014-8a30f003.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598948014-8a30f003.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KrJH6smyFbgWEnWJmM3uRNUet/u1Zwp5bbhlpTJl8txMUSiDj7kgcX3VXktChRX/OhLtsdoyn2vzaafpglsdaQ==","shasum":"216fee08b45d751037d5eb263f1d65a8bc4cf295","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598948014-8a30f003.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTgL6CRA9TVsSAnZWagAAIBAP/3eLINNAVXmqmc1ZZZD9\nX92KqH6TCWwtQtouvRDnUFtBfVJwFn1j97bC2fxPVxHWtKzSsoMsprF00EYC\niqyS2u0S/A50gXLJ7q5a9lTtDalcisHTdCtHCDKLuIE7wuw3xA4xnW6Xbrvx\nG326mzw3mgBVFx0IDIbwKuXjmHCs+gh9Sr/5QQpbOqD+V05TH2q0ffkIl29h\nf8MGKEWfJof2dqnGp3FZ1ngXtLj/Cs0ur4AoNt9SNlZt2XQoGLhzzZ8uMtes\n6uHgUAeLuNA8XLkKncLxId/Kv/Gebr6lnTJTDXR1TzoQjrI0wYdaaQHTeIIw\n73uQ+pqaunc0/vFoHW7TVfTc+H6AcA+uqgipYONihFjb49a9E+vG2PPQJyfK\nnBc4MPZZms95eBdr0EU4sTJBCXEOgpSi9SEI7QlONwMqonsMqTYMFzepM9/D\nWAGt4drRkFoV8CcrE0Y7WVFwyXcXe98Mq7viNxbi1KJcLWvD8SbcKI8Gs77K\nxfxUNthgK2DDSRRVh8ho7wDm7IpIL+LM4cHBgaZ589Cmtw95Ih7S4EXtG2o9\ny+3yAPNLLtGB9vM1Vc7c02VS9rxOu0MyIQPcNQ5tpqJlEWTs1GP5619r5Vrk\nxyUidWKNyBh9kgHlOUj/q0F8SgkzrOhgmlwgSFjwik2CcgGBA4t9fc6f8RlZ\nbmX0\r\n=p70P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+HCrmuwkklE17sdWtGsXaF7oI/79lvUoLI6mjSZ+I5QIhAP0kP4Pnn2C7Jy7yByJ11FYr37XuH/TiEt5d+/WP6US1"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598948014-8a30f003.0_1598948089947_0.16850524709123382"},"_hasShrinkwrap":false},"2.5.1-next-1598948189-00887b7e.0":{"name":"@xdn/core","version":"2.5.1-next-1598948189-00887b7e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598948189-00887b7e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-W5YwOwf4hVBZTiTS1NrglQcfqSfS2GAA5r0G9iZhYTx8uebEP7rGtVvOdylsnfh0Hmlt9XY+WZ5PUrxzdQURyA==","shasum":"28f21ba5cc052ee6b61e54731db1f743586f3409","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598948189-00887b7e.0.tgz","fileCount":139,"unpackedSize":629425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTgPBCRA9TVsSAnZWagAADvUP/RoOlQDL13fqA7J69kMi\n1CajR5e6T9c1R+gHHNqeYyGFxRJGwyzeRfO08m52EAHX1s8kNaD0+lDJ//bI\nPPTK/vqPaAavRHXRYHOqL8/TVhbXP8brKki5RXLalr/3MLkzMBC24Xf6svZu\nlVeCiSzjB2t16RzARMwXqTvVFcO9bqEq0HVklMZZSoyY8cIkD94CLzXK5APs\nNV8HCyzVkuiFzwtBe3O+OUUDgZr33JfSQm0ajKNPBZBR8kZ7AUcch8zTWn+N\nSGwAVTuK+623dvUNi1AZsIGmq6Q37/7cg3CUwTteLEHwA63PB9ID3wwT90xa\nvBzK1GmqS6QJrCDzxsvSgrNO4vT3BRFP6phfChi4go2MJF1twZiFaDAsHOkC\nCaIAF2w4j/ribrklSAVgddeQPGJ4ZOvpgcpoMeZwG3yky9nWp6BRE04r7PoW\ngS49w+TnFiZP9OTMkxryuDO8UrKIXSOfk99x7UuWognuxkaE8gtZX0TwTKK4\njwMK79Cn+L33FBc7ha0/Dl7zeKaOamP2uLweS6Fhzl6fG6ddHgJkyf1bw5c1\n6yydWtCehcW7FtWiKXf2ZGbzyxH9H1DIXoz+1w5ELokC073JTr7uH5L/tVLH\n1PSRTxcnWH2z89wEeR7PWNAxTcwB6e6i6WIoGV5AI4DL4LlJd1v/djxf2Z4S\nje93\r\n=5ySP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuIXzSLqXOU61xw4647Av6R4wCBa+dH7IEHoSXXtM/tQIgDbsZDb/MNawhUzL8Hiyx3tvF6qA+yRsBbye5OVSPobM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598948189-00887b7e.0_1598948288985_0.17934260798917268"},"_hasShrinkwrap":false},"2.4.1-next-1598954387-16c3d796.0":{"name":"@xdn/core","version":"2.4.1-next-1598954387-16c3d796.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^5.17.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.4.1-next-1598954387-16c3d796.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/risd04zMT5E2LKy9fCGPtM5tGMM5fmNmueDEQ6UBkNp8wNk2mtV8qe2Qqd4bgnoD1egTU2XPe61NxIG+D4f9A==","shasum":"5af993eb996a610c357a930ed2fcd45cfe5a7417","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.4.1-next-1598954387-16c3d796.0.tgz","fileCount":135,"unpackedSize":602780,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfThwZCRA9TVsSAnZWagAAk7kP/iTE7KPLiJkBv+D5QL4o\nPheHFPp1m/O3RZtpGyemD+vEC5a/5CznMu8+akPS02ViKPyTp41ycHx50XLs\nbQ9ljzU4kqPemMJu+UWY6p6VtU8iGPkGNzua4nl5Bk+Zjy95SykvJDQaUKdQ\nKTM4sxZmIciCFPPqvpHRtay6cc6fOeTaUYiIWMy2ZvCeqkhQLxq53iViwpaM\ncAnPbBcqTQDduLUd7gWaGXaR3PxLK1VYFy7MM6HLRjobMp16qz3dDsPuDMEG\nJlMrRqJ/QyyPc0dxem3E2pV6VozN57bhDCr+Q4SHgEoAjeca2cBwNUUw3Rdd\nRWZNdTOjIlZG4IFXZUAM2CCNWLKcHbrsbTBhL3GZYHrfHO3XNoA1wQtnYDai\nfNxCGQXpTR4GI4XwDVgCRTInPZL3pq296O7Cvs739wA3lYYCxGWUBHKPF0Uw\nIKHzY4s7JP/yx69KEgpys96eIxBU8EVljIV1yb/bXUmvb0C1oKXIAX/rB4/t\nRhrHm5jWGoNEsPxcsIqQcZtW9LV9PNPPMCCDjaHn9ufB4nc7M2OOBYlyDmNO\n0P35IuXowbhBXel3veGp8q3jslZRqADePCaPA3o9ztSR7LvWI4KTbU2Wk2zo\nIVoO/T80zZrqr3usyyQlI7SZu25G1nPZJr1LlsV69RcEt0A3e/LFCeCA2N4j\n3D32\r\n=B6Lh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDflPQeyZrUTj6AnmB6n6iECkS/kEqC1+DsdAqqixejOQIhAKZ6EsRRfCiJpIxZquI5QzWAP7X2TU/+oNGBRGl+H4oL"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.4.1-next-1598954387-16c3d796.0_1598954520832_0.19678573604124927"},"_hasShrinkwrap":false},"2.5.1-next-1598955562-394267bd.0":{"name":"@xdn/core","version":"2.5.1-next-1598955562-394267bd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598955562-394267bd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+zrhKlJxe/zOoGL8h6fyGWvqU84optjRtn40VM4yQKUTdkB+KpAVBAAQiidnbGmU+K2JV478NPw/bjtYzFpCFQ==","shasum":"41dda9b6ee460f2693f8ba37686bc04f12dcfd4a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598955562-394267bd.0.tgz","fileCount":137,"unpackedSize":590684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTiB5CRA9TVsSAnZWagAA+p0P/2bYENP5gUJzdRjpTZXD\nr7vOcOqWMJAwWNlg3pUdM65ORC+01n2+i35Bog/S/rOje56QouuCxXfP3U+H\npP4PhALWkyKkoe95AiQAAPf9hKyUVmf8lOyXd/IOhj/8gD2A1zIGo+UiEaCK\nNcE62HaBAMo8tieAns/0O/9oKx1zcwPmAdXbnBiF5CKS6nTvjSKTx1Tw9qkh\nKiv//cIZstF5ye7tE8/WWBmLQJIolyr9vFosL1nvR2W+MEkR6LCjcJ89Rv6J\nsESPeur3scvZ/Gnh5KhEP0yiqoib12qrOffJQxNt+CFO6k1/7nH+F6d6YKAo\nGYsUFZNuw09Z2AZHCa2jkFijObF1PpJhc8V9IkmzAA3BM79MtQJzcOTkQcAp\nlQcq6qpGtZqbdKrT9D7qmGuJF26IOh+ZNPnkFOL2e2SESqwnSpqLg9Lyk//j\nqvBFxhbsqzhefwEYa2pgTF5yor+KsMKkRKLbc81rUa9BGh38LHqcqFTFfHgt\njWu0a56+TQRHTHow30iYfbamfV/idxl3rIcrn7MRLfjUfI0vOB0Yuehub21B\nGPUH4B+uq1WW0KL9pvdO0hw9DW8g4ttewlGd7nycy97oRNkAUO8e8W0+4kye\n2/eo24IPTsuu7xzkADADgeWzmrsshoQs/+48WzL6gRMytu/BTPwcpq8IY7wI\nQEfZ\r\n=eJsr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCE5yeqYfzxvrFHWPLRusHSw+Z1viozrgkn/4Znupw72gIgGYcE51peZJK6c0x+aZYhtnz8ehpQQeyKNvtOyRsyHng="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598955562-394267bd.0_1598955641151_0.7793656436062362"},"_hasShrinkwrap":false},"2.5.1-next-1598956014-af1e10cf.0":{"name":"@xdn/core","version":"2.5.1-next-1598956014-af1e10cf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.5.1-next-1598956014-af1e10cf.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ksrkpxGZQOcC/wur5EAJTPZJl1qQii0wxTYG63p0/C1aPXklxW/CuiZOjBc5Gf0NsTtsDXcv1gR4ucIXdiZyAw==","shasum":"c771606d5e09b42f5c570f67a699ae1ab7d332db","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.5.1-next-1598956014-af1e10cf.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTiI8CRA9TVsSAnZWagAAdUgP/iIvmS/a5PnNJORUg+04\nQoi+KC4rTYqKrK09JQwBebcFrKnE/ymoMjmZSpczWrjWJzkVrUnfRvdQpJXu\nfaKtfjrRsZperbWki1UxC5ms6Bc1VnnM31Gf2K+czix7gUeDlxRlo8aUY3BQ\n2aB/FKIK9gVQqpLs3DBlAP9NmFBLVWvQ+yYPurLog1Me8cLVedXr2Vg6i/by\n4TTfNysWtwq6UzePsvkAlWpHCohT47bsEdFDOG/WxoMWC6pui7pDGeaKzfB1\nwK61UFIOaTE/RgZqFZSgYwQNq9b0ajPal18lAThDrEYUVRzSSg/psPK2CBAm\n3/Gb8TiS19ALzW3eVVd+33IwXMRoeQZk7LxiTgJdoz83AKRoCwnfWUyQoH8s\nnlFBTiLBHBZL6Ym6Edsh9UPL+6CIjiyLu64hGKTFGTpDV5LyQrnPHgJ+PHCo\nVG88ZvQZqwmRELdPol5ewjEVtaqYkOxFNBYOkd3FMkBpsS5KcTE5IuTfA0En\nrEvGuUyBWZZ6LxwB0F+fXeIjQ0ifSUxNcLrmN+a3aS0OsJT8Ku+gvm5rA7pB\nOk0DtNG7en7f9FRGFrZGAK5KO/6tvWkXdqhJ3hYmbO6X3rJ2ZxUVOu1g/uZ9\nCN15zjQGL6OnwLVWi+o6anwfs7xO/sRzWO36kw7vXQB9YifQpvoT2KcOPcKB\nWjLC\r\n=g0+f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGdiYnAjAwTD6Y/9fimxY55HJLX42BB4mwl+Tw3QpmCiAiEAjED1IB3uz8nBal0PQUKN8zXsXK09D77Ue9TdMYUTepg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.5.1-next-1598956014-af1e10cf.0_1598956091896_0.3353830002452003"},"_hasShrinkwrap":false},"2.6.1-next-1598956099-2a9135fb.0":{"name":"@xdn/core","version":"2.6.1-next-1598956099-2a9135fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598956099-2a9135fb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1ogzdK78ybi5ktkMaV2OIFrr/rNXsSdefGJR4pSw0XRV9hE/Fj5useIiokZFReNQK6210Z6LVkz5ZvtbSW9oYw==","shasum":"26a6e49b8a277fc5fefa97c07e453caa07956d35","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598956099-2a9135fb.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTiKcCRA9TVsSAnZWagAAVncP/iYtdoSXW2/hNAsZ7RP2\npAih8Y7rXOWP62vIFs5qbwiemSxUvct3QW47nj4jenZUvQ4BZTS2rxhDP1EQ\nynZPv1NqNgTtd+5U0a9y+SDBBSpws/3mH25sQQPjkdF9TEOD/0LTVjHhhdaS\n2u+2O4I1YCy91P+15XsFtZTkXbX8MqaIYm3SmQTgZjnrZmlJbmmCYWaZdHtj\nawRlmBmk4mG9OajN3wFrHX7zQlWRzTJicE5xeD4HbxocNBE+8iOMYXSLoBy7\nj99Je4nXCEGOtIZcsup6wqyzGVWL7+zM0DP38l5bKo1LCIV6/f5RLgpwjJxE\nEa+RPH8TTfvOOJF/nZ3TrPRa6tPFnsITarbg763sUQ6YBZumcqe8CNJrmC/7\naLtVb9QC7z1OTBKYqaIBqjzD7uExBcqdQff481xQxUUr+36X06fCF1Wt7SQJ\nPsBvppt6wcInnTXZv21DYzI1+e3ibOxxkxa+46Cx6KBNyXyi3s4/UEVNNvim\nwjIpPA27dw3hzILDZs6mMLLKMhWGFEnBPJfFvECZA8q9jWtIo0IZMdrtVrq5\ncDpzfbS3uDD+5Yme16NxxgKQDRl/SFabVKTVLYSpHrftLYHnOstd3aCw/dse\nHVigw/UWyjYPTsPpOYLgu1D5UMMoE07Ww6TG4wSnsWk6bomy9JKx7EC5Z7jR\nBzAr\r\n=np2S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAPqccqonrD82tsEWWEWTYBlbuC72nRDfLGHAz0teNV7AiAW7I0D8/EoXm4VzmRXITHpPdKZyvp+v+dF7K2HFFhdFw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598956099-2a9135fb.0_1598956187642_0.681785484628173"},"_hasShrinkwrap":false},"2.6.1-next-1598956178-76cd98dc.0":{"name":"@xdn/core","version":"2.6.1-next-1598956178-76cd98dc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598956178-76cd98dc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2aw0B/oDp3lPZByEydKaQZLTWv/cx3ZY3U/fb7gknznF32QwVvzPnYjv7LIPkSEmp907q4iWKjyqpieGr36Hfw==","shasum":"6312b7c91316366030e8d7236b1df5c232f63bdd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598956178-76cd98dc.0.tgz","fileCount":137,"unpackedSize":590684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTiLoCRA9TVsSAnZWagAAggYP/2EOV8tapZZp77tqil4+\n7hGnwhP2PzFtP4OxBI906DkhugWGyNFOf+CbwRCIPUvLGfj8kNOY2dP5ltri\n8IEqmAhHALTij51B/wyeIujsOWZcrnL8ji7HLRM+CWSswlCGT1btIZ3ER0mx\nrzlexK774E6H8sXrooLjN+/mEuMtGkcTgpsJ6IKOs7fEmFx9JNwT4VR8EsmS\npwXtKopDOhyhHIJ4s82khGIYhg4jEEaZG05DxDF8a4bBR2GMHDz0hU03DmaN\nhvncPvNmcGocnVPRjiIjyY4n+Nv0m8jj3cCyM0hGnd+P5LUtr0cN1XCLfu0w\nKLWnUK4Qfe26gkrIG5IWTS3x7rwVR+zQu/kBUYuAVk4JROrgQKA3yqp69omD\nZqG5I3+b2PExadfLUJrpe/ik48mOlTopIfVkcAOs4OYy1rbALdCq0JBz2Jj2\nLRi9q9j3pPUmI9/GZLTO2T5Rg+LNtHf91RtcOTdE7Q5JAEidx/C/TbjEL3VI\nSWFpthQJC1UmMV6csh6T/YQ2r7kw5UAJiWmM0jQcr9Qh7tapu4TXvzT8P6os\nQJiezsZ0JkPPo6W5JNnpFYAp30KyI7PysydiV/2irGyPBB9PwCwr/Mt2fZfh\nSRgSc0XTFlgk9EWDRDaVZCgzaBK68gLiyCl5bj582Iwy3BEpJDcazNUZupjl\nFwKh\r\n=Xp+w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFFG+NWEklcJThubZj6mGhbvmaYiysYTyoRFaPJgcXo9AiEA8hwBnXrLEg6RJhdLq5nLsct/9/bc0RI5JP1NW7jSCv4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598956178-76cd98dc.0_1598956263823_0.4832777879723229"},"_hasShrinkwrap":false},"2.6.1-next-1598956609-2a9135fb.0":{"name":"@xdn/core","version":"2.6.1-next-1598956609-2a9135fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598956609-2a9135fb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XraI/sTAiwixigvuIhjsg+NNwo8BHKf4wuUS9a9IK8pz8y5DI6dkY6YQpypiIY4UyRMeuTQD09ufe7k91wm0gA==","shasum":"1090fc94d709264bfa336ef96a4e927699e720e8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598956609-2a9135fb.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTiSLCRA9TVsSAnZWagAAMWMP/j2EK0cbyeK2GtbhM/Ud\n53CGi1shYtYrwLzrHxmKpKYxrOBSWBf/x7hWziW6GQN0gaq0K8uWEmxMrBc+\ntMfFJBI+AXjtwBv0dFlf/mibXtQp6xfKpapdvnpoJW0f9ICB+ZbBmP3MXnoL\n+/Qpxl2zhlBz3AOXzLjGNGLAJC8WOeUpd2XdJjxSa+zhgBTq7dnH7pvTdXTE\nKsc8cCSMii6yZve9POjVOQoXSPfHnutPdbe3NcoyREgDB4Z9kK5Nq+Q6bJRO\nRHjZ1mc3vuzbSWRlLbKUpqtyuNt26j3Z3XBsVs2tGDYs23qycAxmL+cJh3TQ\n6Af7gvwkrq1IxI/EJWzv+pOQfh3HuF2aUeXqYOnQwrxcMxBtG9PzN4I+vOU6\nOJdY3if99EeJyojIStLOZeblBPyf5caTjp78RI+LPVTYrpLn7Wp4x1dlNPN/\nAgmPPKvrAUdDZ10wpagMPLVYdS4km6ZnXXv4yP984gNdx0vJ+5r35VApPOMG\nFuQPQG5AJu3zfgDHiZxUn4rgsF5KjBYH50FzUCEPPFkUs92R7lVT09vOsiNP\n3iPgzup7tQKKFklcNw2YOs0bLqD7pDwGo0OF+AL9FP9RkqwUud87+vZBOS2R\nIWATLbKRuufNB3jjlzAJqBnzHeXPX5AmSNVQ1dHcgRoGQRGtYvnvKu3UXm4r\nSx1W\r\n=LVN0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGprDPqTKebfqNYiBa8/U74lqLBFzAqtG8nF0EFNuZL0AiA9BF44A0l9jsAUH74YbTO3UpbDPVys+hpA7HQgKZ4ErA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598956609-2a9135fb.0_1598956682970_0.03188273698792754"},"_hasShrinkwrap":false},"2.6.1-next-1598957852-da6125e5.0":{"name":"@xdn/core","version":"2.6.1-next-1598957852-da6125e5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598957852-da6125e5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aaUQAF1qiS0XiZ5lgUf9oxYNb2ZqCx6DoBQVKKCiK8oSqwCYpFaGIFgRJ2np5cYEorMNSLERtMpbl0u2HejCUg==","shasum":"c3beab5ff7c27165cb7c170f621c6c324046d761","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598957852-da6125e5.0.tgz","fileCount":137,"unpackedSize":590684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTilzCRA9TVsSAnZWagAAtQ8P/1NzWEGA9cyJRVTEIcvM\nZPN4AMQDwtY5U8Rb6pGxCWfWxbdG/S+qoAywdAd2NRXFmHEZBHjIoPd8dznJ\nOrtD11LMY8VBqx7JB03ko9opPDG+4tzMmhbsfl5YYqTjIZLDfjOmmsHmolxB\nU8h10uBtPAvSPYAWGuk4weCAwNBhK/tFAULB9jg9TpJXNYTfvBPdM8UtDEnM\ndZHOx4kU5KJF241AplnJNdXpU1eZQ6fLZXoIAx3MXfAqQrRUOydd7US8Y0F9\nwh0w3YPwoeK6pjkSobVsnWNvkamZcblhfd4bjQsLoWNhs+VfwUfEqAS3q5mz\ng2JEUXihZVdpo3HXIGXkpv4IgRLt5pqv4mabQzs8PWLlSKM+AgtECJC53eAI\n5YI/twsyRtMSTnBj3bjVoK6ys18HvQ5/9Lx5zOcSeXuliFnCUztKMNwGlLGt\nBV+A6jkq7eSQqrOHuGX4I7IZjGo//EMkNwUakbs8qQGhHaTtLh93aOOJoy1M\noOceOGRH30C1QGNOGsQXvnvDqmXuVPH/smgpk1S1dfWldWZ6LB7y77qgkSEF\n4ihpSDZodBPZWYFFtXBvMx/uQVOsjROuA/zyFSEEOk//ZJtP947r7F4PG5IU\nUby9BHzqNOb3K7Zp+Mlk8RvCZOMsyv6OoqNvodFnv4aXc0/JQjeT7JqyTDHs\niYPr\r\n=iElt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/P9TuABNKtFr/2R8TUQ/qJIQvHUYjlf5xwv8YbBXRNAIgAk/qHoZdg9cy+h8qXBx81fIkV90Z1/ZvEwkIM3v6JtE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598957852-da6125e5.0_1598957938900_0.30033704819793416"},"_hasShrinkwrap":false},"2.6.1-next-1598958794-c027c825.0":{"name":"@xdn/core","version":"2.6.1-next-1598958794-c027c825.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598958794-c027c825.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-a9Ym2jkBP44K8iW9GnbeDBHyS2NjlJ7ZiVdUvDFoxrTG8AT2dms3tkb2XB9nyLOqoF70wHKPfzR1kk/Esfv0sw==","shasum":"4137f7163a30fc097c469935c635c5073feb8c87","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598958794-c027c825.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTi0aCRA9TVsSAnZWagAAoK8P/RdBwEIhglwHcUgBq5TY\nhAjqIhaim7EMoN3hpxhQGlykQrMM1IE1spfsMn3wODnmRSYtLIiJ/Xy8AjaQ\nFXkk6hpMZM7+wxdmH+cXJncxtBz7Xu+8eJUqAljJdFcPOoM3kZW3KjUazMD7\n8+WxCt72UiJc8TweidEY+1KymCZfykiLLKciE7hb1h/fqWDSp9vsYhzRNXjn\nJK4pInvJEl0oKqmKbEknRcZtAhDvfaMs0DolaLe6A00Gbp4p8rvCcHK5Jte3\nT6aewyXOzuGNN5Iz7NhwK6APfKePdBIVNEZWrzPVOmqvHj78cR0EEeLQ44P/\nZXCjqQbX/p5X8ErsmxRCWd8Z3NXSf6P/GCMvREEMP6JB/tVRsWqVBmhhmBu2\nYDH+7RLS0Cyr6ZFEiGk0MV9O9tKwiov061zgT4RsIjkEClKZtZ5yu3YWEFpZ\nDnckZkgk50hLAZag42Y2HBLIRBwry1+EG7SywpXCP6kGIRqo7Uew7hRJN8Zl\nlaopknzs9MXog4OaYB5ZF6S0rrqcneW7EA/dWiRXKSbyvEILiZU56u85w/z0\nBUYD75zhGcRJex4G4dHk8MpXdy0tlphxlfF/8e6UumX4um3jF75Vg9dqIEUK\nwUFR9UleBiOGMIt9WlM8bIUMG9OPNrxktrXOEcG/GviivxgHfXO1/PbQm0h7\nFm1J\r\n=GlFH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCL709CSJbBlcigqHo0Vc08xnPmNuP82Uoi+mMG4txCxAIhALRxIi8sLhsKG8fbyvxZ8gVHZzyF3FHDVkScEG3KW1Xz"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598958794-c027c825.0_1598958873735_0.8613379552580898"},"_hasShrinkwrap":false},"2.6.1-next-1598959835-75dd94c2.0":{"name":"@xdn/core","version":"2.6.1-next-1598959835-75dd94c2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598959835-75dd94c2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-msUEnyjYDOhluJUELep0TNAvwOj0xmTTyGqxgDenr9cTgfgPeVj0ketEpT+DvT2cuh5tRfoJclE0/wKBt0vZrg==","shasum":"6e02acf799178c76afe4a05b022d203bf4ff804b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598959835-75dd94c2.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTjEqCRA9TVsSAnZWagAAlr4P/2tiCokHDTI2wQBx/41E\nI1nyiMWqwy5+4l+wj1PtpyfIeNywvG8sf+C62yhRp3zIBpOu35u7Z+h1o80q\njfugFY/Oka/h8thQAat6s06tM/ujXLpe/8xOEdkwFP+JC9rTzxHSGJYBTXhN\neVK+7F119iQbqLYxorGETQOD+tlS85A0oyRROSyM0iElQ75Xfsly8A0CGeub\ncgl1AaiOH2hOQ8RNueiJAN+dZuI1o46xX3iYiH9aGw+/4SiZ52FiX2oervUW\nFAMfnrykXC+G6q/fpxQJlpEMtpMODhjrHYgWpHQZo3hgb0CpzaBCgWTzJKJ5\nLYokRHNlM3kU+INCGdauilc5x7Yzvmadm+tXQ4N2TW4KSpQQpFDSFvhUioWz\njrbbcrusXD9X61FiKw9OaSJbt+c5DT01Ab0WKKFyeTrOU/bpfeHihH+5gpWj\nemgUsYuGS2jW/sH32KQeJMbwZrngZdZflJMGp9QiNbp39tPRI7rUwjsRpIgn\nBPJc2qLqSWJd2/tzeQJNiph84h42MpTFEgMbynxTAK14JvePURGhTAzoRQC3\nj0Q27eAOlpktnvEB9msjtT1/ipXSB13nY23FXwHYAEdoh7an+dn5rg6gJCZc\n0TpNwBknGS7GTnVbOr187ghL9GtvFD7N7gK9xMMLVvp5xUtDKjPJtJ7qZge2\nAzTL\r\n=cm5z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEdRY2DDtVGA8I97QIz0OYpo6LYDhINaaX3G1aXrwInFAiEAmriUYOkcYitGJ9M1fY+x9WwtEo/A+lmo37JFRk+O0nI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598959835-75dd94c2.0_1598959913695_0.11595306000234018"},"_hasShrinkwrap":false},"2.6.0":{"name":"@xdn/core","version":"2.6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-uzP5DcOpB9WzzzQLqGzHHQdKgDd2rKi7xj8EagF5+WZF0xYjSpNhhTIbR9yDtvKEU924IlJteFOn+g1Bafk/8w==","shasum":"4e4913656f826b30dc971ff7c147847a7b21e244","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.0.tgz","fileCount":137,"unpackedSize":589393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTjfPCRA9TVsSAnZWagAAJ24QAIwaC3VAQuiiSUiX2N5H\nB35u8ZuWiM/uPXyW2fjavMUML/D+utpPSjbPkQIxCbkD7rBVehJn0pUx2fO9\nB3w0yrHwj+3DTpYuKE+mLlPcB79yWSZRSKxCX4ImZ8SlSWe9o59EgEMGffaG\nykA9KszWv5fNYByhV6gRslRgsB6InG3G0yLjQ1p0CXFXOkyuFlQHluWq6KbN\nH5XowYzPR7ajzq3bKpYmio+TRWooPL6I25QvAdWGdjzPPNKFuFPTs7oGMhbV\n6r3s/F0D/pkasMafOni4Ih1Fhvucy4R7tKXJ6J4//807QPl1WkABVk64O8AJ\nxUvt4iH4l+ga4EcKQjlPCKR0Xl9tt1FV1+aAKJYi5RuDkQwmFPpYTXQT6aTL\nsoegzvT+iU6mhbXoFxmr9cn48quqoBqhyInGLxv4y2cMuKu0N3PZKY0iIzbN\nUjgxD1sNNTN9Ddc4OIO+JdTPeyE+FKdGP83EapQZDkkrFIKCiUJ4j9wK4ZSD\nODmpLNgTOSvSrcHjWsi6x2AFUpTyM3Vz2TD1nNJB17PC3Za0+3e5TaAUpj7P\nAjgpz2cgmtUnbtgA9Dr773ae4OqesK2Q+sI1yXc8fsIzq0y6CX84aPedPIuL\nklHBWblB6fhCco1JZFPbZmyrq9slOyfWvDNhoCZ4fOSOTDcfFVap0AHTxGAp\n0KL0\r\n=dXn0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzaeQobmuQOGfUfESVk2x1B/Ib7aWs4UXYQMBu/wDqIAiAqwUmhxP6Q3q5DJ63QZ+d9sEHsFjhbTSdizCAG7osAuQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.0_1598961614934_0.4630126653819304"},"_hasShrinkwrap":false},"2.6.1-next-1598962053-f36361e6.0":{"name":"@xdn/core","version":"2.6.1-next-1598962053-f36361e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598962053-f36361e6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rQPPCM/UYWExv3rt1c00cYovm2Y/ktXUo4+UlN0a6dE+jSvYMaO39emQzSeI1ftlZVMzXohVcxeMU4qToQzH7Q==","shasum":"a1c219e05d53e1465566be5cf4cee1ef1c25657c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598962053-f36361e6.0.tgz","fileCount":137,"unpackedSize":596575,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTjnRCRA9TVsSAnZWagAATOMQAJcAPRMVh/Kj4O0i302A\nlE9WYmA5dZkfixNQbr14SrSComA/zgapxY5Qm6sFyrNH7AFzgE1uXY2N3xdW\nzIpwGl+ICh/oiOmg6haBvXir2iuLY0yrKD2YUY7614IbG2CdYIrmIanALPkJ\nAeWv9slroJjw1BAqEyK/469tHMMEL5T4CU7DlfuTWgR6RsmgPCTrlmknfrXs\nS9iE0/0FBIe1IGeeOh59CIuFHUoEKejS7dWUIF1+mTOy1dPYX0F3qMvWbfBt\n7SeY5K/Iz9oQmBK4qjxk5eufx/ZAtr0zaJnlAr9cbd5jAGJlSXCb6hJ7VCRd\nZMld//z4Uanh+Kj0DjGVqfu+hH1U7hapV0Oncf2v2pbNr045OamBkuUp6158\nBM0JX37QX8qA4By2LFVS2VbOpPdm/n7VUxSysL9kAg3HR5nSKThJ3O/OWeJ9\n4jVqFsGQ0VJB3utZX4OpMWVN5gIX5ikojdbKnn+UtF1zeQmMNlRZXai90Fxy\ninBKm9F/Bq57dWXQeC6VXhxgHRLS3DKnn/3VHREF4K32VuCQv/zPpPfee8ig\nvh6bcZy4NKHHKmrycsUi1MDywaU6tjAUtpNkCt6aupWaphQI7v8DWuYtwcRi\nRUrnDXkOiIcbf3/gfBO2dNaiaASvxEorAqrnIF71yQyN0X96LD5KfEhacD0W\n1nM3\r\n=tJSo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHSDtD6iNFZQjgd+ePRjkSytY3Ysnb/YKueMlL6OCbAzAiEAvqks1yPUOza0ANtqG7OQr43MUtvChFfCnxFPxOWo90w="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598962053-f36361e6.0_1598962128905_0.9390942556512631"},"_hasShrinkwrap":false},"2.6.1-next-1598963255-18e69564.0":{"name":"@xdn/core","version":"2.6.1-next-1598963255-18e69564.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598963255-18e69564.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-L0GBDTMULoXemg9ZXXBRgNVCoSodChDg+rHt3GLD1KtP0Td9Lfi1AKC8h1d78uCMkwPMZthzm1bnmpDIvyaSlA==","shasum":"a0da37f2737f21e16a2aa16010a08b9636bd852d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598963255-18e69564.0.tgz","fileCount":137,"unpackedSize":590684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTj6KCRA9TVsSAnZWagAAY7UP/iczIiWkSSfXgyk7cvuG\nVE6RPswhQ3sgzmKTR2IjRBiGC6htJhc3HtXlnZ/2PCIsU7IbMp07v+kzXU96\nxrFE1yYgVKyJwRMbqtlzaNl486+WztrU4c08GVEE4vJVisQCzaFfpodB77sq\nwfVmxfBkoxRbpOPkDZBbqCbow1TjKIvNNnJw1rMAHLIixpto+uu39bVmv2gl\nsvPSFy31kytrSrHkN86xHUNDwzFsygp5aw91HW4tUVSpJSTvdre0uMNyec8D\ni+ssLjylBaomyQPJqT4f9uijObGP6p1+41VUtEg3dI/x3Birti/CiwW7V04T\nEfz4ulS98K2c77I8+s4dD3AkIOq0Za/Rg0A83viMUI7TGkPOUYyW6RgKiNS+\n4dbxKZLyLuj60051Lk49atRjDI6eTegV8vigoHydV8DvbQIDZbjPEcN/rrhn\nv3+nIhVpImAiLXvrXlP2adEvtxT//yEvSGAzMcN1vZcYR4LJOfmOBYaMDXsg\nhQ0c0p2KEccyHYfpe/X5Vd6ZOx0maPD7hI2x4LITTgLb4+CYEcKTGT9VYcg/\nOJdkNfIQX31EUh1XSHQlo6g9U70eZLamebHtsf1qfuqxURnMqU1pUcVVObdy\nErUVeXP7WIt+4LO6hWGvml7qFv8pfyltWnL0a0N6LD1/ovryF/vYOTL9NDNe\nhj31\r\n=+Wev\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIHweMmtAn46IA9h5SZLOr3C+9tvSdMK4q3pZPTfzn3QIgA3EQLWKd+qMt8EZj6sbPvDpn2lR08qMnWm63+4IQRUQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598963255-18e69564.0_1598963337792_0.6554247675363731"},"_hasShrinkwrap":false},"2.6.1-next-1598965142-7f2f4f80.0":{"name":"@xdn/core","version":"2.6.1-next-1598965142-7f2f4f80.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598965142-7f2f4f80.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0PqQnyQ1NFOKoTF3QQ8e3jsjt3rIDKNK3ny8E9c1QrKFANJ6PLBQMSCTRBmw3/ErlRFqV9dqQw2z4yp6TB979g==","shasum":"79b239ad4288daa9778b5183d0a4b87df4b60525","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598965142-7f2f4f80.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTkXkCRA9TVsSAnZWagAAYBsQAJ78p/sXAglVT/k7twBg\nQ+Nf1HmSs4HSwAzSDFRob+8qtz5QJIqxFB6RM45EeybVp7aI46m5h/6a5e77\nVgUTfRnWnQ+rUaN1WQxC0x7zzCQWpURrop7XxFGbciL9Xn+ZB1YIirwf4ZHC\nkq70d/+T8H9ChO28NWgzdf+Vqo4FYTknQqFPfFblopgHojze7/NmMrThCbpf\n9an5BrB8DZwLefBROVodmDHlN8WOGrGeBk4f4V0IUEx1XZBFhlD6uS/pGT6w\nnC+gTi4O0Iti7ktX1U8dGStDVuOeExMAo2WrGiAjq+p5JyILCydnH7t/iS9k\nwJNX/ivV6nTSskFf80c5SnVWrEJN4zJGShA3ia9K5mM9daCtth9xcMfar6/P\nix6E4R3li7o9tPDBLyH0CNlL6XgmIYCsUO6Dz5xlfHg6IO/cyMOEavZ97ip5\nT5vd6EFEJa0pBLuqEFXv7Cj/l9kwQqMaMUABvcJO2GQKwH4kWtyEdqgav1GX\nHAoVy0qyXuFIMGi6Fp40KoOGKDRuYV3sT6wLmwLUzqUwbcpYfPLLPB/wovnr\nPODZTa9SieJIFY3snosbslWS+F4X1sEWPQU/1x7YD7pCPTYKdmNVNA6b1EO0\n/zsxh2qlbINFLVhPZN9c/z5zcEOJk2dlQiW/3U+ajvgsYFQ522pBlOCYDG9L\nmxs0\r\n=UgGa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjjFAIJ6sR6q4mwDswRmjMNNHjJopw6xQl/gAQiIK3dQIgFtQkbUgCmh4bIst9lohVu0ZqJoBmUoBjTl4dePDrlXQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598965142-7f2f4f80.0_1598965219377_0.4267776169328865"},"_hasShrinkwrap":false},"2.6.1-next-1598966571-b77eba58.0":{"name":"@xdn/core","version":"2.6.1-next-1598966571-b77eba58.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598966571-b77eba58.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FNCr8r3Q7/R5H7cuO+EQz3qUSb0leGGFFz7ekxO52k4kabvmvZ7TBDsBPWIRnaXuSR9rXwPacXKjAnIJUzG0xg==","shasum":"6d84cdb456aa64caf79658f11c7d517a8a557bf9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598966571-b77eba58.0.tgz","fileCount":137,"unpackedSize":596535,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTkt4CRA9TVsSAnZWagAAnigP/1MGKf9SahV24K76V2f2\nD6Tvee7m8PFeFPMoLXE2vl8uPPjpiU5Kbz+rGDStKfZ4jDS9K3YT51Hgvk6n\nUUXmgTGudE2KslWpcL+qcQe+7Zc4Ed3Dzy6eEbB9AC3Rj7+r67nT8kUSTxAh\nuLxIzpgP2eC0ipB2XNG7ZT0nwj8UQJI0S5Kkg+RAAXFfe2a8MGk8jBcsc5no\nQnxz+QVE6d6Q3LrgbqWPsiDQZx3JCFWGANWgVIWmUmonU0MeVjwPjaZ8uoT/\nqt1TuhqSngOOwRAcaMFc1YOHXb1bPJUr50s6WvNH4FTNU5oyIkzufbh7n9Ut\nU9oIVLv+QoyIE7FygXcmif7fJ/3A6/mUC9hbsWRk+7KuS8LE2qzrEATWsZeP\n3TFBl1rxzuUqp3INOVST0a0fAwUsuyygyMpEuBvQ6IL6H97/seQB+PBALiWi\nK9k77bb+QU66GNbMhOdgUcJvQ+OslLoc/LvfjMDESPX/T27sH3ffgbotS7cv\nj1GrzqXgd/pCVuN2g94UT7BN+qbnzYPLZtgp5WxpAu2QMvVWcQ+Ri/53d3Ok\nhTfjY+hTt8HwAgy9pn174d3+cDFC3lZ2wRZeGeRYjc+l4JCb9OXmCzcQBrFe\nd0vgl2RN4uiQoEA9wh2Am+DJU8GKqVdBZ6vzbC2VR71OjzREKTT7SpZ37DhY\nnCKf\r\n=PnIc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPmy8P/u4oByTghQxUW66/68oTXztwVuEJlb81qLqlpwIgdelwYvdzNKQeTmtJuRYfLcnJZQT2XK4Rgltfb6VAdao="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598966571-b77eba58.0_1598966648289_0.05658461306109608"},"_hasShrinkwrap":false},"2.6.1-next-1598971739-3e3910fe.0":{"name":"@xdn/core","version":"2.6.1-next-1598971739-3e3910fe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598971739-3e3910fe.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Vu3xtgUIvYmIuf6L0P6CNx7h/vu9tMUgzVl81UEYh4+xOtQ+mkd1V1XKXTQa1pFwddN5a49xJ0/36f7HR5Rydg==","shasum":"811a89265f4c96090afcb1bfa0b2f9e3c6bf98fe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598971739-3e3910fe.0.tgz","fileCount":137,"unpackedSize":590863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTl+uCRA9TVsSAnZWagAAJhsQAKFt4vkxE3UrvqKWPsiu\n9O6WMFD12TAWO1od8Gb2X1hAlw6uAp9V0snMfaAVQmoEHs71EC1kfMOfW646\neTKjt4eUQ0utvqetf/+JPA7smOE21dvC1vSYK0SZW+1fWJa/E2h0bvmq7nXj\nHUDXAhikfa+iqv2VGnxgYeAjD6g1aCNQWzK+jyNBiW/IlIdniBCJL77GokhB\nzfSr2JWEcktYwsWOhKu2uPufgEAUEjSf21W1OYGAFzvI62/2maOQh8Aixw3o\nC8AcCKeM2ne2w3pZ5TFiF8shSpH02BwgTfV706X7RH6Z9CrUF/Jr88CDV2oQ\nwXJ+pTQsgcJz1oyRY+Zl7zKdY/IXfQqMBL44yrYlbIB2If4+f5L217Mi3bed\n6R+1GBi6j+5sHDfF9G8PaR1RZz/aMcFFVyh/NrVFHxB+bqN8QA1TeOrXvYkN\nzabLlGt4aiuPvXa+Tdn6MR1M1NqWT9Ho0uggqOpn9KDalfZwJBh9fAZNHfQk\nAFdK3KwG69raJmjj08fksqpCXL6q/NDziyJovuu73N1+iTjZKZmB66GFRtLg\n0g6dmxsTd/swKQ5eKtCYFPOgoBbKbvVlBzcALRFVz1hRmuFXcY7DPY0pwxKm\ndarVV6jkzdVqG33OHAlwWL3QAcpeo82mRc8e0wjaJh5EKvogcSuXsqulLFJs\ncwXS\r\n=h3Df\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYremTXwY0PvJ8Y1RJ1BaXgmT67mGMNQe79rjHy8mp5QIhAIeS0IYSCWeAAdxrEbh8Tck0Gqljl3gWnqSXbWqsz14B"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598971739-3e3910fe.0_1598971821654_0.6487399970268479"},"_hasShrinkwrap":false},"2.6.1-next-1598975124-88e50e25.0":{"name":"@xdn/core","version":"2.6.1-next-1598975124-88e50e25.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598975124-88e50e25.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5O7hs8qBkNGAEtkS/BFrfArLcPKjZY5Bb72bwpdZRzqrnLUoflp5wYBJENZToV2xT6Z82EGpfC+pz4L7K1ggCw==","shasum":"da2475e51dfdad341c35b11028f1e64cc943b7bd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598975124-88e50e25.0.tgz","fileCount":137,"unpackedSize":590434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTmztCRA9TVsSAnZWagAAMEMQAKDpmGG9yDk59lPr/oP6\nVKPfd6dnP2B5HigD1ycOnx+tKMgpnUcATEahlPzEyCFlbzgWlqMvfgy9D+1D\n3i8nworwH3qHMyRE6QzV3Llmri/MjwC1cgkHAeO/VUqHIs5xkR0XjJwkKf+J\nkcFvV+ng6/FEOVd/9cWuCdLLZ2cHhhUsZw/aNa3DzCwPYznk/lsuO+JLJ25F\nSBChTl6H9mGFQJLcSGhPdlfWILsKcQ2Vc6V/AlOAGCi5VnvtH0otHnMAYCeu\nsEGhWwuqruWynDpxNP8K7/7kAFBDnaDY3OHnS0P1yWxyngBc098otH/0NrFG\nGjNYO4Guu5GYH9o/Ob44MC+SsoJdZgDwB1zOMuNi1wALLK2+SHtBp9cZPLtB\nhxqroVHBCftECiWkUQbQgxmGRNwsZ8qhsQvD8M/m6FkFUB4TC/F/4iOzuwOs\n/lloGEgnUTWU4XDJHBG6wI+5Ls6AH18ND4hq70jTB3iYOfBX5BL0BtYu5n/f\nTSfftt0fv1emgQblZirydB/MqioPwR7ksea1oXOrR04K8ydDzLLC7F1NSg0Y\nCVPC6P8uq/LkMU7CDK0SRC6U7Pu0YIaKtKcz1D6EZ1ebuQgh7oS8MUXCsiyt\nvuuBsOAOoEDy36e+7B2wgkyNb7nq1oRWoPKsbNlrXzVZHI+CwjcktZ/aIWT9\nmIzC\r\n=iu+V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLrrcgt6NWORaUj8O9/evbF9iHzJ80s92oUw0/T/Gq2gIgNm2rphvIQw21qiWYy+TjprKrUT9kDdR7MuwRnZHlNiI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598975124-88e50e25.0_1598975212671_0.8533664371459353"},"_hasShrinkwrap":false},"2.6.1-next-1598978302-e688ecd3.0":{"name":"@xdn/core","version":"2.6.1-next-1598978302-e688ecd3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598978302-e688ecd3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eCpjZHBQPIvqgJiNikxRkfJ+41OkkG+FTU6kSQe6ckt1XHwvS7/oSuEu8+KNMtmOtF9iz9aPX7JNN7g7wOoczQ==","shasum":"39e38fa0a235419a3996177bd4166cac9eceb117","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598978302-e688ecd3.0.tgz","fileCount":139,"unpackedSize":594833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTnlUCRA9TVsSAnZWagAAYtMQAIZ3K7kKMbbKsbtFpRp4\n0Azh1kM+y0AQyO4jV1nvhv4p+Qo4Qv/epN/NU/95nC2c9QjBu4MkKTpLOPr6\nStxtV8sOYOcqCgmdv0HHWKSUpKoL5kiH4CGzcDdXiOrhV8U2/jDoOnMXxaY3\ngB417G7HWnm/vOqFaDkHWzg2vRZ1QDXlQdmSqzn87KEZOMeEB9VlXjsHQzoL\nilj9z/+xeICazqKf1r+gqEyAq67EEgwCNXZSSeI8cee//F+0AUCzp4plhvjE\nfjs1y5olSeYSaMDLZ4/MJ0qiu239g5K7qKUkda+ChF1p5aFq7w2AZJKRkyYY\nbkpNjUUPowIifw/3tnhp7SkebjKrVitgHq2PEteiotMi03L8Sqi94QDOXXHW\n1nw0xn1w4V7AI/aazZ2l6xJ7DKUPMcx1+6WpUUmew4eO4+pnCVmQttHhbqw4\nyjhBiiaZyqUWjNSzuYNhfoy5jbjkqVotA+Mm/JNGs+H/rTgzJEBYzYE2C0Nt\nWvcFyKCNY22/V79J0uPdTch7RGFfTA0LrFcHT7T+dlSxGbrQoAfszOa2yjPs\n2A0apXh+7rXAgrqOzMqxytfEWfi4bwlIHTEBfob+qBW9yILnFRzsKtJvh2jv\nPDYCSsjz3BrgHMoinzU+05Gstv4QL3fUiaUbAQ0RJ64VBMdab1RAzP0UNnZk\nay8d\r\n=9oiG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDPnV9DGoIJTh3uSkP6UnYUuR9fjZTLhhJZbCLVGdxSGAiATEoSJwEcJ35Z4h3oJ+5GZAQ0Z7G5rKo0QQ0F7W0uW1Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598978302-e688ecd3.0_1598978388095_0.7321600565826243"},"_hasShrinkwrap":false},"2.6.1-next-1598979218-c12859e8.0":{"name":"@xdn/core","version":"2.6.1-next-1598979218-c12859e8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598979218-c12859e8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-apf3ZkP84UtGc5+6SlT29h/3m2wzKS12roBehACNfLGJtMCJdN9t83aHXAfJvDTnroLs3wY4rdQQlKvMfayTwQ==","shasum":"2ccc7c6e9c9b140a9f7b0bd0af03234a4c4c0984","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598979218-c12859e8.0.tgz","fileCount":137,"unpackedSize":590434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTnzuCRA9TVsSAnZWagAAqGYP/16ynGuu4PqlAToBhGhr\nKhGouJ670rcC36+GFt/bzs2EB7ze9uFBxcVDFg6aWmUitnEoL4bz3/ts7LQE\nz81/0qGq4D20O/2UORXREBefGo64W08pMrLpL3HpFr0dcEY1i3uZwz26v49p\ng48GoQ172de5llxPYa3z5lvkrtDjhvBDFHOicnSEg/R3Tjj/LZmesVVRnVcT\nSF9ypvTD1bNgymxggFKWyzOGXMWyVCUPfZTRnuQtSzgnnXJWtKsFq2wUxGw5\n9M6G7NcMLjFcL5pC5abI8ZwIzUn5j/PhO/xqwfHXH1oXzsPzKMMmh5E+qfsZ\n4F/5D2gMk1rPWRWIcLCXWq0P8T8L4DkWbeHsToCgoPcYyPQn3vLIqJfp3RTd\njdUzvPz/dre14zRx3qFJX40PGo6fp0e4hMaxkpArCscTcx/tuIjKEExfHb3Q\ngPoiBt1LJ6QuT9wOXH+7OAiD2SfTf41T6oETFpL/gDx3rtkYOPL7DiNmxyRW\nMGq8iBYC8OkgudLqx1HODQlUDb16hXbBt9q0lrTPyXvkywZYOJ2K1Vx6ENMC\naxf0YZj41Ys8O7RgfYXzc1dW6qkbV635g7BSJ0pgsv5fQeOBp4XspzikUUGf\nhH8ydVtL8G2spwLSYcjlV8Hie5aUQoycXQ0OUI2Ui3Z5B+9ar/4sb3+FiXJU\nlTyK\r\n=5jzS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAvPxCKFQ23KPMfe7/zuPQh/GKeFaInUuLKEl8YEX+6PAiEArgHLvuyxcMQzxC5dvQ9Y8wsoWHjlL9V28FlIUnjbHIY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598979218-c12859e8.0_1598979306794_0.784686510265568"},"_hasShrinkwrap":false},"2.6.1-next-1598979574-da2c3632.0":{"name":"@xdn/core","version":"2.6.1-next-1598979574-da2c3632.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598979574-da2c3632.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+uysGXGmURtTpHmzl1gHl+6YHPEZ18zfjAgKZDGfzGPB3NfG000m5A1HniE7G/elHFa1CBr38f9t/YdJxrpoWQ==","shasum":"abf7ae7c58c0bbc75e15386a7b28e8cfb2c2678f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598979574-da2c3632.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTn5GCRA9TVsSAnZWagAAl2UP/2T07f/2KUlLXVlSaMkv\nZJ7gQ9U4NLvQF4uY7bJAe3rFAx513hN5xi32o6JrzUa59SVnupooGySyztay\n51PTElUI92SEFpN94+TcAXmwpZZIl4e+lLOOGwqwQFYZfMgoTMpkQeribzOy\nnq6O0szXsj7cCdHDRfCDrMV5v+1orfZHBbw6jjt6rFAvdo/wzMFi48o+vQCf\nx9KsFFPE7LsrK9l69Kujtiq2b77Tg6M1AX9/437Lwox4GLD9DFOScJcoT8eZ\nkn3PKFrGtvRsRTUbIuFXk2MHlANopqRsiaAb2uycvwuE/6cvUkgUKeDGQHAY\njuS0PDRf4J25BhAHPohi+o4gjt1LFx8ITm7oWN7cmHJLvadzLt0zPCO/6YGb\ngQIHcSnnohghvqWAjoU+/5/p6m5RQTRusDx58NeUf2aOxQnu4rQpx48eK9sf\nWGd9Krj127A7dBo7dVxcRKEXxb5R2h4rH+USlXpFkEfrfebFXdey6Xc+Q3Ra\n95O+6WsoY/vE9Qhf2rSJcmkTcPcIRxfZeyqIrBHFVDE2FNN2uXADq/v+ulfN\nWr3QCNc6mjpqdYaJh+gPJFv42YTQe7HsO+kOGlcycOgbqUV/1rsGqBLv49Wl\nSora/O05PDgPtojqLzdJ69K2xG5JpXcnr+eKkppDopnmxfjzpzAIAWUPpp9Z\nItBA\r\n=+AAe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+PFrdMm0Bm1UDedeSDFxqP3BocQipfiHC7HUgY/yEvwIgVU/TDa1iS30OoYNUAo+WIZieZfMuOKfUvOafotqoNJE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598979574-da2c3632.0_1598979653435_0.5890294339715456"},"_hasShrinkwrap":false},"2.6.1-next-1598981075-3b382d17.0":{"name":"@xdn/core","version":"2.6.1-next-1598981075-3b382d17.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598981075-3b382d17.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Z1XQd6C6o5tx0x77SdaD7OdL63BI8vhG67KidUw2lN3CbwnQT+SYdcmGd2xRkzPGZ8dXOEpWQGinI1LKA9UKNg==","shasum":"666553ea23b0eeb7134947b78b3d81cf315ac4ee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598981075-3b382d17.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfToQkCRA9TVsSAnZWagAAY/sP/RLr5bHjBx54ssTm5+na\n8nNIYXQqMkGJ4C6Iilk21SFIJzm/qxFyxWrT65X0qp6cdAltyDsV081x2sdq\nqIohyrYjDVdsJEM4f6TJ/dVgx9pUyCnw+fa8QwXrlR+2h9NXqNDhvD5/YkDE\nIwvHvxQQChtnikGH40zlHyuwYgAj1pcrlnYtYF5Ei6ZRwmcN0cKiHbQfe9EG\ni7VC0RZniiKllVFyqSU0XpBdvdX4IXHmHOAOJ86zv9Y1x1z0+Ks14Wt9aw19\nd/bLEOF0U92IlGel2GURtxP+pNlqe37EQPVuQ4ipkMkn+Lzi+r7T2v27hp/j\njJKdVj+gndRL1oQ2NkOS4ihgAOagRzEOIrhzZbwDAeqcswA/1/QDVss/TYkT\nntd0nx3N+Q/RJ2nEAUYw2KsBU5ioeFjtKWQW+I4peWg0x2iS7VLcuBWLU7WS\n68cAcIF2xzmuGAVTA6mE7RejWkwGvh/DNi9z7Eshg8LpmCrXdXoFi9e8QVQ/\npUbPMgYPE1zzdGbocVim1cb1+sQDxGpKTR/HUsGGxXR8yVL0ebBniESwD/Ne\nKLa77GXvs1nPA+08c8Uwu0KaXrEH/dyNGpN9j3iJJCoupSDWWu5zEoGsxRvO\nCg4eQoNYZSPnRPBjNOdme2JfRZV6kR7/UcQnEgHOGcIJbuQPdxYSnlQ7qkQm\nQLN3\r\n=A9eQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQNG74BFul8lMNamHOPJrgWzlk/Nn+59VFoR+VH0U+HwIhAPL0Xm4ok3vq6RL3LYP/y7tZLSiQoife+sUvuzmmMkuk"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598981075-3b382d17.0_1598981155848_0.16749955443631936"},"_hasShrinkwrap":false},"2.6.1-next-1598995425-104e2d5b.0":{"name":"@xdn/core","version":"2.6.1-next-1598995425-104e2d5b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598995425-104e2d5b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mIwNBTSs5ygEqRPf9eXUwbBbJGbtV2QZyI0eXW+/yy6eFaoGtbgMyjpVvc5xrHoP4tkAXnzfc+AszeKpFfsuSA==","shasum":"719b3215a060298823b127a248dc314092a90657","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598995425-104e2d5b.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTrwjCRA9TVsSAnZWagAAwSkP/1cerWQRgrVldcJ1CSB4\nTIntajC4Ayy4oM2av9jtGk/Z0kyI5o9p4/LXkfmxn7JXsgFU5/uM40nUxMCc\nxOmKpUUDAKoeCL0OMAPRFjljtOmvZvBmNoU6vCmTvcKG9Lc3PK2PdNvUWwxO\nrnXJeRnjYSXqwp7TcCg5MYg1m19tNgg+tqhSjTWrJUumO4ZnJYnEV1sxexRF\n0CC0dKiYF8Z8jwU+liFm5bZPuco+I2Fncepd/ZVykJeKfx3sHUcSRDdauo5D\nVdf37GOAl2rx9yyhYztmL+Hfd5JaMFrVEWyJVP8Qp4YTSOx0rVnVh82uN/jY\nSF/Busal0UWFelOxGm4BlQJwQhhmKm4iYUmKAFk6wEDvsRTgbocZtqFKXXYv\nOy2HfsOrrmTxu+RvbEdJf9fWIQSNs7OsK2ZRvFoohpGf0dBzLoarYTUUm6Ys\nl8E8mBYBwp86kL4sID9ljeYqKo0y7PtS/XOQC39C29FGr72h1oBvZrG15Bgc\nzBlBJyLhnGCwwaatShs13EjPN/OFp6z60sN3vt2XEWmwgmRTxJ4izDb5mGKb\nKss5pQbxqvsofCB8VgfDrldwcKAFH4JWzifyvB/1WDCp3iSvRo/P1z8VFyfP\nJ1+beUO5b0gs9FnHyPps0t7xUSx/YJ0RN0s03fqLq8bDhKY8qMB6DFBrFl4C\nAKV4\r\n=kP1y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZ7P5icJWtnTfLb6So9Cf6v+loqUw5efDZvai2cMINQQIgb7SXOvmmt2MVQrUsQjngu0X2zGSzj049OBjlazn+9SU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598995425-104e2d5b.0_1598995487857_0.6586739121659042"},"_hasShrinkwrap":false},"2.6.1-next-1598996938-4e9cb076.0":{"name":"@xdn/core","version":"2.6.1-next-1598996938-4e9cb076.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1598996938-4e9cb076.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nJA1ewjsD0N8R/4Viq3jpniH9lNi0diZNzeH0gHDYwWF5NBk1e7zlnT4hhYKxhgmoZgcAvqOGOEfu1OPB1LnIA==","shasum":"fbc64894631ced289e8ed75a33255491c490f92b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1598996938-4e9cb076.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTsIbCRA9TVsSAnZWagAAPscP/3aO0Qo9HXm08gULnbFf\n+75WKEz0f7iR5lsc+5kASHxWoX+pF4560KJ985e41aIGvuZANxAKsOxS8a1l\nT9fOHLQ9/IkvBal2TkFGjB2VPyKFeD5ZiMQiPSa3p/vGUXBViPDKjFiz1vry\nUcBx1AKJSREgWz5w94N5CG5xeWyciN4NPEueVtzibojYdp7iWbLpO9yqGd2y\nOPOVOB5vtolpzruDyv9UqKhNVMcaWuCg2WuM1U5NxtDDuHm3znN3R7j1v6Yl\ndlixy5BHkIrO+T0Qh4/4mJ460TolnSGiRwZstSI9qNXapIY9fUdepT9Thmoy\nFLt0w9/pZpqC6LZls+1F2fRbb4/8HILf0ESndYGsKqkYIJbj6F3t1pst+kl6\n3O49o1G53ZzJcnc5GxqOn0KO1dp3JZXPGUs8Ec6e/abfL88gd7E8PCxDJQmD\niZeRWh2wpp2Hpu24DIAaEAA0F0fI9hkwejDDDzYvkwK/3VqmkqKBni34xTMq\nieDqP/+RrHDE1L+svS3CUV7fr5zSZel2QeOVs5PWLu/lFUVJppkmQU96GvFX\nPtpuGgW+usUvt7YFtolJF00cJEAoJbkOhagkz0YLYVQhWsd/0ogRiPW1SpU2\nHXHdxq8mDBpaN0V/8um5j6f0amDNCJ8mMolO+bgCieZZi8NEkdbcHohATSrE\nv7UE\r\n=nhT6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHizRuKTh0fjACkxG2RIJhKOQG02cvyA+AWxXfeR8EMAAiBArMUEhdidppTAPXgsLXfGQLfqr+zwStqmGk8Ay/4Jvw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1598996938-4e9cb076.0_1598997018688_0.29616654892373173"},"_hasShrinkwrap":false},"2.6.1-next-1599010181-da8543e6.0":{"name":"@xdn/core","version":"2.6.1-next-1599010181-da8543e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1-next-1599010181-da8543e6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0dd59Ne/FIGM7OBzQsAxfyJUxUm6NlT7VH4PQN79i7EL+DKu00AjI0ZUx+TPBxIKatUEOUrGeOyUBTgKQV2cnA==","shasum":"b7cd8e06de847e489168d947cf57246869b6bb0f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1-next-1599010181-da8543e6.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTvXVCRA9TVsSAnZWagAA7FwQAIMos+MqfjKDT/PyiG4i\nrYCzyTdbXRZ+GQo6AGlXwK60E0QAu3491V5P5ajL1xjsOAGCxPQMmfV4bM+M\nNatnjDcKNr40siaqa3bqLer3cDp5ku75zmlVVUTvt0TroH/SSwb/LCgDRYZp\n/0TfXs0KNw851zyiCCZ4unJ3Ee8n6+VdZOSb4QCIRryRyE091NozlZL5Iy9d\n29aZFa7HKxvTmK1rGOHOfgdONyNQ1KagrhAV3hur3pir8AwBUKqOyF0JBBg3\nKTjT1AJiNB9XeZjH6wHSohFj8jdjIxnDPPy6v7qifyj2tWvx+9rS+AQ1OcFM\nS7uUK94pktsnbE700TSrRoFTQ1oFwrk945q9cNBo9M2zjbri5PARd7FTO3M7\nOumaFKTojtktnMMMEWCHQzGJs4Y6kfzuzx1mxBhBcEYkZyJazIdct07huWnz\nieSSf5NuJtNvCS3qeseCKPYMYKmuAL9HoD+DYtHh3dN6Zlv6sqO8pQLwTTEH\nv8+ebmkllfnYklqdNYoh4h+JhCTAdTHNlIY75SwBwi+NlSVNXS5fAdN5XM87\noPxj/t2Tv7BNyRrOVCQVNIteJaLgttlVBRDS/D8wHdiQAutnzmdAZQxV+i20\nzA33PHp67U/TQ/SoQ9/w3Kh64VhHA5FvI6iHups+DeipxYuI4DmX/Vh+g3Mi\nO7Sw\r\n=+/ux\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE+oZDyBGGGVpDYT6/uZg4WgshOUWp6mge+YzBdM5r5uAiB3bKc2uADIYTReIjle4sfq0XbfyuuPAlHCwzlP+qKPgQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1-next-1599010181-da8543e6.0_1599010261373_0.8770605904998157"},"_hasShrinkwrap":false},"2.6.2-next-1599010382-097b999c.0":{"name":"@xdn/core","version":"2.6.2-next-1599010382-097b999c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599010382-097b999c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jZTdcen5POhap7kmsfBks/hggl3scY7XHAU4YROg81kCQS2v45Jj1zbBJZUGVWLeiS2WTvQFZ4V+tvI3h6o1aw==","shasum":"a4deecdc734a5815e8a8e89337c1fc38f10f1043","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599010382-097b999c.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTvajCRA9TVsSAnZWagAAeNUQAJ0T/A2+4bcMEEXLNk7t\nGCPqSbR0PiTBknwrltpAovA9isAqBohO6CqmGEnT7RWIzxbhloRDxnjDJ7cC\nkTMDUdzRrfTv1us7SOHTBPC27SBGIuxKKhhYcngRR866QbjVKp2vWiXdUZbb\n2z6OFNIEENiHzFvhlbVnsuhynUyELnJ9gqo/nasiL6z63hIi9TU4AXNObW2g\n+svSqWZ95WKUQS0w+cinFv99IlO4WzLhHpgpCBkV6LJIv/IfzSFQsEqQ7ACJ\nJ28/H5x+9bsncFh8hmMFQgR3EKjDsA2l/IuCc5DJ6ZgAgBdbaZaN4nZISx4t\nDcwjah8FRdbDRqGBah+fvamhRKLT/ghgvf2vaN+ccsAGZ15gT6OEFRq4VC/1\nHwtpsWgMJMEj6nbBGJjYk2JdWEhxkjrbTMlZwIPy4hZRRZmmyTA70+ASOKvn\n9Q6vlcNobMOW8Fzrh+qRnKC9NKl4CnREeNWgj9OzMgW+pXs6FGU8L8rrHNBF\nRFPGXpiSX+eYGXfjJH4roNTEqFAe4up/PDPo2kZUz6UpgaBswz8ZS40cEQT9\nidlZnzysEnrvL7TeJz6vtmvNib2xJmf+ORKhu+C2s2UwmwyTKE3gPcKzjBCd\nRu2+Tb8BOEx+1TmZRcrQUhwqTGC2AQiX8p4Wa8/qSgQPD2FesApJEyGCYfkM\nV9+i\r\n=uRPf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDI2JgP2vmQxWdesSXCC24cEzrAR+SjH1apW0rcTHV0RAIhAPsbBduno0k47dI8GdGFxRB2UJ4JwRvSF6HIBIz8iJrx"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599010382-097b999c.0_1599010467325_0.47325615414463873"},"_hasShrinkwrap":false},"2.6.1":{"name":"@xdn/core","version":"2.6.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0A+eLhKh5qzUzpz0vdyK/AnSXZhgae8QrXt/fEdL/QBZMLip6H+IWx/osfnmVWH+rQkV/XM5RG3AoNjTUpNsaA==","shasum":"d9fc3c3e33af3d68355682950cee6c28c0be28b4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.1.tgz","fileCount":137,"unpackedSize":589393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTvyXCRA9TVsSAnZWagAAB6oP/RO9xFIS+7x5wQ8ETzav\nQADaMpf9W4E4FrBlK+yupmSROtRa0JY/EFu8wHLTy6eV4xed1aNYUPLB8sxJ\nvrXkR3uvALPHAKslk0i60SC2kOucbvSnsuMmFf9FCLQOHWxfzZOjQTZGfQjl\n+Yj8IbnfZzEuWBtkbjB2Z2DbGDLGEItsWZFV/cB+c/CZVnJGDQIXR3oWpmCf\nJt+9SzCJuodGYIPMaRgkV2hlPi4T5/cRvC4iyKlL3s1S0UhWNsuvSXxPpbE9\n5EEAlQg/yXHT+HhljvyeWOkulowYRVjMZxMzXBbnPULFx/B7LH6PdFFIdKfQ\nue4H67meDGhfzv4xVioLuYcfmFCLwoFRtrKGZyTgXIKSTRHG6ke9/leUD7sB\nI0UTOgWUGd8U0PaQ9rgKXlty7+fnuH3sWYn1V7/TaGl06UWIKDf85K11T4GF\n5Dk3WYIl3ns247uds2AGBX1ILddiWlnK/nogQhV9m6w33t0iQV+JEpMOgw+X\nILylOlCkv/2nG+vtRyTU4dqhzxLcWJ1yG9CaoOqP/F+Mg2YoM2iJhrMb8fgo\nUG/6uUDWYn5kCSaWALU/Aeni0dONgCuyRsIZOCn2GR9Fpi1KmjrK5DSQddGt\ngiME1xdVpnqDwAHXwUDNvxaOnR64IoHY9Zg9Tjf2J+t7kYFFbWqIxFBA0y4b\njvgv\r\n=6nwN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgisMTLnEVg56M3C//CJ2FL9e5nIuRl96h7Gjm1epvdgIhALNSQGdDFi7hK00hhKXWDCSd8wAkR+9JKyTwFWDe9ZZP"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.1_1599011990536_0.28412836331362445"},"_hasShrinkwrap":false},"2.6.2-next-1599032623-9fb16d53.0":{"name":"@xdn/core","version":"2.6.2-next-1599032623-9fb16d53.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599032623-9fb16d53.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0167DzCsA8bmIIm5WEUG2McKMWgbMbwUf8fdQQbzJaupRwr6DtgTxyw1pPiu2Xq+hgqxH8V7uRz35igOFCjLrA==","shasum":"be9d7f43ccee9f8834e8a128cdd725cc2e633a00","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599032623-9fb16d53.0.tgz","fileCount":137,"unpackedSize":590084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfT02CCRA9TVsSAnZWagAAF8gP/0TzLhkKI7uYqPY7DeWX\nl4X8kH2E6OHn6aqhwSclIDJf+KM8xcOqTIT5thrCavRPzwiI7ksDGN7yP/2k\nB+vp4Isw/vkdLcQesNQdmebTV+VgyGaf9MTkCdZrkaUWtcJ6XHkFuiLhUvWw\n9UC5wnTz/CGncdfcTDikLqcmZ/O65bmUMXkDpa7KbDrkxWhv6XxGi841zYyL\n8iFDQRaFpsLkfm8BLjtxbrRzQWVJY2GqLdw2FWqpLQDnUzcPfTUzMkR6/4mn\n3DgcUjRWiEPA180eS0HYiiosOB7LE7Mu9MC+cmg0iKEQNdcjguL5N2aMB8DJ\nbx1f4rrn2NkWqda9ySSelcvCRlC2cIb7D0vXeb0oQpCPu8hQK903St6KQX/u\n8SwfdqM/9ybawylgoGJWVBT9XhFaWXrES10fR5RbhGnAi7HEJ61aptGZdSG2\n7gt5+9GjkSV0n6zuGDK3bxiEqJXlqVHw7uMUILamZcT5hIJwom6BaLqK2EMU\nfrOJFQYL7zPUHJttug0Yy7VnxUOjblqhS9SsK/iuZQRgjraeu5XZOCNEcejC\nIyFQqH3Adg3Ma0xK4D/RA/FZEHyxlZqYZlL9rRQTRoVBRLPi3POS2iAb0plq\n2tiwYVPK+biE8dFqId2xD9eGwlh/dHD5509CkECyISd8hkUJrFBhFd6/lVeL\nDwMy\r\n=6JNH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFVpc4W018MC4LZJ5cbY28nGuG8F+5ZG20MjJb49yU3/AiEA49atncywwivu2XtrLkqzoPQYbsV5weyAgDDM9bCJjlQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599032623-9fb16d53.0_1599032705484_0.16398819168215462"},"_hasShrinkwrap":false},"2.6.2-next-1599035817-2e06d6d1.0":{"name":"@xdn/core","version":"2.6.2-next-1599035817-2e06d6d1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599035817-2e06d6d1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5p0Prha+kKY7kT+FWBDt/hVsecTtt5fz7WbnJqJGWMtAs2uxMorWTLm83W6YC0+k9J8sFwo12f92ftIIyg5a7g==","shasum":"5aa1bb5f06e4e1fd73c177d308f747a1ac48dc9e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599035817-2e06d6d1.0.tgz","fileCount":137,"unpackedSize":591426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfT1n+CRA9TVsSAnZWagAAQUoQAJUG88Z6fVDY7pFUuL5T\n4lYSNckHoYe9M+ZdAitMLBTLpoWw65itRgsudybN3PO0E0N08Y/n/Xw2GEn4\nJqhAbmCZB7VXhejhZQ6lnOcPAKR8bgR4GpgPq4Ki6iYf5Jx1edJimna3Nqwj\nCXdSL5KwIwFNrqT68Zp7cFUZyF8SSArxBf2zg6Iaq8rJpN3Pfo0jsxk6gjVY\nstZ9J8NeS4FIsTvAuaGntgOfQVBGStutPp7imSmgM6WEEtJqesfXWrWiSps6\nbR4zfxw80asBN0aAa4C3GeX+U522iEjNnZtl/qYvvs7YWvuXOaoXO86jOYha\n8JThwgHnqfqAaq/CNgGg7q+XBDihYyf+9VIxiCBHrlIDJ44MTTPQZUn7yjnq\nJqkBP0z2XX+faj4uGbLl9DwT/NGEU1mI7sQ19u38IY71HuAOUR/dLRJsBCUe\nbYHBKSI+676fzxMaBLbOyqriNDHjbnmkz+ev0hB1CTpv57fFdIiMoYnGijTh\n+rNDLqd9DLw1oWeqwfe1rwUzrQQ69wHwJzj7HYjTa1vHtuPgR4HBlJ4YjKaW\nrQqe9wrlHZasZU1Soho9oKjOgHLTaTwk679D7toShmExjKKAzi7wkx7XKKx5\nYhsc8eLdN2VzAmzhBX9nLcuVLZbDIt9jDmjpzp48UdW4MMQ3zUaj3S2Axpg2\n/1m/\r\n=0zm5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDBqOd8gWqx+r1x0Fo2YFucHxSh1br8kGfSFlSgmmEQWAiEA4n9gE9ghmKabqzocfNtyiytEK9dHywRc/SZQxjjDR/g="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599035817-2e06d6d1.0_1599035902429_0.7340128334382074"},"_hasShrinkwrap":false},"2.6.2-next-1599040744-bf04fd8c.0":{"name":"@xdn/core","version":"2.6.2-next-1599040744-bf04fd8c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599040744-bf04fd8c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YBEhz0fdTJRhwDw+HqeZTci6IkS209eO/ZP5iREBR7+HzQFn1tTijkNhpzK8hT14YIOhCInTwYPOyd9jZM+lzA==","shasum":"4ddac467003fd3da6804ce64e9018da976e62515","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599040744-bf04fd8c.0.tgz","fileCount":137,"unpackedSize":591426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfT204CRA9TVsSAnZWagAA4lsQAJUnWHKpgjJ9VnI+dzAu\nPn9PfUR/Nat3wxdm1TNtjB+W6DjE7uZDVSixHzILgpCMw4DSMnG5B8VCBGbw\ntxq9mewsTWjvHJgxG5vxWENIjsI5Bm9VQ0WRSzj/9prL8CXs3vEd5NophByJ\n4HPgCbIqE3B0BVakdtJ4TcLyPU6EF3Rv1CLa7Gyi8zwNcnUVg+OxbdXqy+TX\ngpWLBtv3I2wg1HQpq3VZUIHRldpyBVzT3OL0QKGXsuO4cEiuHjE9S7gyVFKE\nHBvwizh8DXcg7mxRg3Z75ZTlXNscEFpcTUpT0CdM5PNfw7JAWKluD7KY51S1\n6HAW+2mG4QOGsOpVoETVQTd1bHtsekL5LxklerUV51hbLBOAF28Iycn+38tt\n3XTB4feDZgNsopzu+045scSHG1RoZc0E1EMEP9hu0/XcN2mPsGs3WDFd8B1B\nDYDhkoa8GfKc6pjajyPiaMudfnRkn95MnsYoTikQkctuq3MrDkAsn2FIWtwH\nyWHevQZ6mTIUJxnNPRBIbLxER6EBw8D84d2rtfI+jx8NyNMvhgwRpZ/deGul\nrK2WM9v4YJncNNkRjPDki5mXeM1Cq+7HLzZW4W1ciD1jN/LMswxkdYVFZFPz\n7QQQrJFo21LoBxNCI10HmoqyX6RLFAWhw7Q6WQWsObixoD+hzWkXRQWPToc2\nKfNX\r\n=hzij\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8xLAYv3a0H8FL79GrzXleQhIAZ47AIG1PM54ae82+7wIhANSY6CJuk8zuvtEpuvHWScN5O3a88jiHaP/ptcLwnsef"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599040744-bf04fd8c.0_1599040824047_0.9488339650266064"},"_hasShrinkwrap":false},"2.6.2-next-1599041396-1f5e1c71.0":{"name":"@xdn/core","version":"2.6.2-next-1599041396-1f5e1c71.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599041396-1f5e1c71.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-g993WXKKzv3DN2R/tf95wdmoMxowju7lv3VUUhGqZk7osIuiUzl8mjzZOeTL5OsLPMweJOGeq3woCv0G8QbOSA==","shasum":"0f4e0e72d9bc27942a20e7deb25a8020353cf9f6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599041396-1f5e1c71.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfT2+/CRA9TVsSAnZWagAA8KMP/3UqLtXYUS5eLWmPGqOe\n21y5fEqqXsHWinb1kHwhV5IomuIilI/nCwOP0H4dcyWr1QgpJIROsgnP4fXd\n6xzDEDq9g7nMWYsoazwsb0UMLY9ciadC9+oFJqh5R42Yz1ckYkDUfTmb/a7e\nLStarEUBM8rAPIP/Qj9cDY4Bq0TvKNTYvXdPggWdWjWlkAuUryUqcUeb0XeA\nJ9bHX37nI7i9o+5gV7ZDS8zde26Iq5HybyKk3QfX5ZZWerOqM3xilFAu3ss7\n5351MslxyJSDXFRTOtafhxi4JdVCQ6QtYux2qGwnsNCA9hzfUKJbfFCiveuL\nb+w3cwJtdfT9cZ/fAB3qCzQKPjn3ihrj6K+CshrFPheDqV5eSrqaXoQAR4zh\nBECDGfKrZ2QTy6iKq04D5ALc0cID/etxjyWmFmKyODRYUCkbDe2Nzwu2hPvA\ndwdzkkxgvzwc0iU4OY17H21bGzN2T5cJkQH3GgtPdRZ9sE3mPOY9DK+G8TJI\nFe1E7pIpguUez6WMlXbTWOKiW0Z9MuBHBCH76PhN6Li/wRen2N4OU3qBeWGp\nRhqF6pronjRcNa3k6p+N3J3pJo5+Nbp0Tm07acy4hwFd+wAXHAeMW6pobdb4\nbwypHaTfWYJuDlYamjllYcKg46jc0JOq8PRReXS0vr50MouZRXihowIdDGIV\nd59I\r\n=6y51\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGJl8mgzbZ+jdblHb+WSn0u/x9NCN5qHQHKIeLXo/JdGAiAQEr1W/1i892+Nf21kM/ZC4xRALX36rYX6GIUIrFIgvQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599041396-1f5e1c71.0_1599041471026_0.588476009522588"},"_hasShrinkwrap":false},"2.6.2-next-1599057186-728dc0f0.0":{"name":"@xdn/core","version":"2.6.2-next-1599057186-728dc0f0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599057186-728dc0f0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-BMAuFP+AL8nN6/hMiUVn2Qs83UFYeAVw+ICpfRLEptV6sJa3IZ5IsC0kyZ77rAQt5K3JV8xlN2uXIBA1IeRb8w==","shasum":"d4057059f641c30b7a68f5a68db1131e0ad5188f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599057186-728dc0f0.0.tgz","fileCount":137,"unpackedSize":590434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfT62CCRA9TVsSAnZWagAAIAYP/0QrI3crbQ5Rzg4IX0fx\nTYzV0zqJg9gWNwK4jWm2FJi97lQ3anFVFaJySw7A5+N7WF7mL4pnyYQToXZv\nWJ13u06actpjdyJN/HGeskYrYz+0DJhYnYg/ZNrFRBQrUjpNaEZvNUS5gBKu\nWmaUJaYcBikHnhl1YTT7fzEYXlYGOLCM3v+Fz2/WjorPV+5YHcDu1NV/bkpG\nFqffNbKzeb21j1qLUxZ7ZHz3vv7XUZCK6jBgzz+8sqNY21IGJhHkjJTzCFUK\nDx2EJCC+/pNnV0C5JC4kMRHThiK109PKMX1MrSa9MkcrnFoX5j5aLsTaUJ3N\nzCXJzG8Lx3mTHFys7KGKs2z9cM8ti2Aiy+UNhiSOEfwiXxa45t7nrpbILK1g\nSqPZzbqL4MjhChXuBISgoJNMYeighpCB7YfzuzF/CFgqmc9LAjk+L0Da7RoO\nb+8B1vDsdyZeoGYVoFTcaQA9cYsa4kvdQYTRlQCl7vF9GH24K87ogo2qOWcv\n1gem5OkhBQNASCSaJHFbSALrM1bssLq4xmQpFdjG76vJ3aPVB+jDC06a+yww\nCoOj+ptIVItaK1YDMc5iM0TNZTW63Cn2wLY5DgORMUh1f2Qx53IjzOmOuGQH\n3ByLmO8unmKk+7yFsAidWnwu0mVXXz/Q1B6bm0B7t8NcdKap3FjIrNBeppTF\nQ6iE\r\n=t7J9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFMyOorBmJyTRfdMS+sCTi6tJfV1Ja5DL16vScJP2Uy/AiA6tr9iFFaHDBOuxsFsNRGfHKT0aLlkhnDD2oH3hcErng=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599057186-728dc0f0.0_1599057282383_0.17066137996372865"},"_hasShrinkwrap":false},"2.6.2-next-1599077045-93c1ea14.0":{"name":"@xdn/core","version":"2.6.2-next-1599077045-93c1ea14.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599077045-93c1ea14.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pnJCs3Um3AaI4RtNyLbL3EnyOtaTx4YhZp106ZtlkkFppwDMvWpPh579OZVmOvbzRwcdqlcfS/x+KWHZxS7GxQ==","shasum":"9dc12acd4d45da81c4139c1d4d534c0413894262","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599077045-93c1ea14.0.tgz","fileCount":137,"unpackedSize":589397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfT/sNCRA9TVsSAnZWagAAwWsP/0wvB1rrV5t/YfNWPbCC\nuTJbX6xxRxgRD9AcSgCUxC3AQvCLfOkot4pihTbtbFFT0Ud+ckw5E29dDRN9\n+QqTudZLGMNgIbQ/QG9T4B4BP7pkWj2Nn1P89eVb6/z+cLUHxePrb2KfqVNH\noxDO0xtQuC6SiBgiPzf0R77AYYz1EFdIPtCv4UW2Xt4vJk+npSxjBw9ZbToN\nvHozdP/wTEBnuPucAwOE8fvSRw9z6eNLX8vf6nvExPKOl1ZR4kw3AR8Qbq3x\nql0drRH5BYcyvA0EERtoYLeCInDKtdZWpO1VDFptfloazbY3FSyxT/9k3TqR\nPEBAeYVrb2OYtzn3BS5NeGobp/TTijh5UpgqQk1RVrwY1h62PuD8csOFh93N\nfI+OUaLs3NsKtpnf31gzOoAhQj9GdYT7cTQoljiTu9mjKxdBTkymPn2n9byT\nV/5lj1EQh397eqcZFl9vvA6KRCvp9h/2cutzbFM3sCY0AcWAsRZSaco0DusZ\nT66QfMU7Bgw1by06Na4V94TJ1b52QSER3xJcCPvu43+AUlGjG5oqY1Zxo+XY\nmCo/wDdIbXr/TyeR1MfOBZxgb1uVN9EOsXjETfrzKGHWZcnwS2SSy9Qam2O/\nAqmSB2WAaCoKDhiWq/MLkC+r1I+MNVw00cFBfr6WYPHvnC0SXQHrz2WRnlvL\ngOHx\r\n=oHOU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnaWYslAwd9Rj9ZYQws85DbOBcmunasU14ISV+S/XOYgIgBKyC5Cpdgh0DpiT1E6dMttfpGbiRxd3wy/xJs7AxU34="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599077045-93c1ea14.0_1599077132955_0.8761862429575387"},"_hasShrinkwrap":false},"2.6.2-next-1599079072-3819ddce.0":{"name":"@xdn/core","version":"2.6.2-next-1599079072-3819ddce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599079072-3819ddce.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bTlzap30TJ3psKN60p7BtBOwhUpjnG3Lw6YpQsveYykoivwyZtAPtQM7ErmyWnfFZ5oJA993XTjf0JN9dsvaRw==","shasum":"b8bed51f4d04f33da2a21cf40450fa4cdea4894c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599079072-3819ddce.0.tgz","fileCount":139,"unpackedSize":629425,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUAL6CRA9TVsSAnZWagAAtZoP/At62G2s/o/+RpABgM+W\n5eQ5Itic2aiV2GGBXm6NmQ9bZ++udtn6pBBIWk+Zzl//2Guav0hQ3R0NubEU\nqgjnE6XnPDNC2obLe8uoW3x0uZ6n+7wA1U647IOGFonmwZs2YXtFodhGzfLF\n5CkJeDmWg516URq12kDM2Bxt9RKd+yI63pmPz5aoNnEsylnOFCf54UpqSpqH\n+haoMfgp1uLhHDr317KI2LcI1zax1ePI4rV/LDGhJ40xVCdDCxSJ7VlgW3IO\nJx3FIQDvHAhGRqrABX3HH2qM20V+tuQ5SbAPVvb7ZZC0qvJyPJG0h/XVp4GX\nXQB2gm/av9IkGuQqIOFGDK3sRIB2XMuh/uSjhUgDVraeaFVIZDJmN4rhERzZ\nzDJWM3AawkVpABM033UBxbd7i2Otn2O4L6VT9sFOsPmr93+MKkdzfbmCS0Oz\nQJrvi4WJTZlcRNCY9kMDqNaDLu6o1nPYYtjenLwwg4YS9EfKcwRyPefasUxW\nEf7NwElcWM6iZGQF8/G8REDfY/FXaty4Hvkj0i/EuToMLdluMhobOwEM+3AN\niH/CXqGZHpDTKgcdVZ0an6s5BJMRHdLdP+8P65QOSgf0bl7Jp0NKu/3aD4nt\nPEU3h0l/QrlQ3AVtrlit+tu/Zd01Y68FwSlQMY/JgJpugzjMl5FqaO++UG9n\nt0Ra\r\n=3rda\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGOXRB+DgR9pHn/UWPx3tRzomnKcApvJfZXwyrCd9O1sAiEA/PRuuRq0vSk49Zu7Vy0K8vZghtT+fVgsCzJNVdLbwLY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599079072-3819ddce.0_1599079161791_0.24267098826163647"},"_hasShrinkwrap":false},"2.6.2-next-1599079153-25b0a795.0":{"name":"@xdn/core","version":"2.6.2-next-1599079153-25b0a795.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599079153-25b0a795.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-gPRfBVxuYVlz1TgXFxPl2HuNo8+LpOD/9OF9k2hbMbg3ZW52bjH9fRB7+xjItVQfSYWdCwAKPcjUgnxdB7eoJA==","shasum":"f1201588e92afff976cc0b9ab7bd5abab45f5979","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599079153-25b0a795.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUANDCRA9TVsSAnZWagAAPMoP/0CKOW0j+o9JtF/D8ZRD\n/6eYWCfeMx0zX6Stvppeh+1jK6Ym9+D9Vj5WUvW/GuFldoBWNxYDf7M+axh4\nX0a6iSKVTTiRXfyPrG4flY0cVjvLFHc/NrEW/aN+iJTWSxzJgDJy4ZdG5sNH\n5ehp/VKCZaradNrSNfO1Bm+BF8mZafo+n8ufL5EkNgSFytX8qwq9KzNDdWW1\nDrgJIuQ2N328zz4EsCwu3iQPtviSzcVrF+V1Iu8uCUx9BGkHH3P829VEChx+\n3OoL2FVGUKJSUQNNmleM4yzbCLS+1tqPjaz0MWWZb4T0VfhVZgqw6hLdzL3+\noFINu+rcjRf2yfrHeexN3zG+63g51LDJ4p3MDmUcKwSsfVX8njhEvqLy/lo8\nr+gogs+V+aVkcdmyPm3wMimhs1UbPCaG8SLc7CsPujnlKCrMCb5AUbBpNLng\nsEIwrZz+S4rLDrD7L8HbBz+sVSdLhr2ofJ2qDq6oGlDINiPRm2COg8q89yrX\nEaxJ2q/8vrJgiuy9Z4w1gpsOlXVgFjs54gOMsMAIgIp01wqkKfLZCJNoK067\n5BBeB+3Sg3SGuNa8Xv/z1/H1tv3rSgoOni5clS0gGSH2ncHNKVIh+hNIgoZD\nTYlsbcd5QN8HymbCScIRLmjrGo/X0oQhQKVTp5HZErLY5hcR3+0LOLUvwVk1\nqNgv\r\n=daz8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEYLXoxD9ziuE5qu2rbhDtLvobpGCW/bjhFzOmC/mgNYAiBOhcIvAB/mU1rcIhlowZrdAmCJOkZfKQ6f07L9aqTPjQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599079153-25b0a795.0_1599079235054_0.6334972808546937"},"_hasShrinkwrap":false},"2.6.2-next-1599082228-6d80027c.0":{"name":"@xdn/core","version":"2.6.2-next-1599082228-6d80027c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599082228-6d80027c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-W/ca5BTy50c4huOddMSOtNw7gZS9O9ByLAi+HXh9nypIhKPEsjJ2WQZUEDxGg/LUxOUbvDTIK6hdrwLhhoEuGg==","shasum":"939d292b8d5d99f79e575439af4c109ff6ff04d8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599082228-6d80027c.0.tgz","fileCount":137,"unpackedSize":589397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUA9DCRA9TVsSAnZWagAAzbcP/jWOaxohsTpo8ejDJTfj\n8rpU/oSuclonNhxO/h1yL/hiXVOCiRQWK9RyjxHZt/uMrJ3jsWRkNJXtIaJo\n5XTXbwHCgrprhuN/wDNvKoB13rSTqewnNP1YVb57O7R8wS82jI3p4DZK2VLm\nruUKSVCip954dwY8GYJl23sNZkkjAOLLNyEO2JIzUfYBSgBsItGffplyYUf1\n8oO9o5Tu1KQb73GdE4FzAVdfQTJNBIlFGTlVSw1Hj+O65Q84Le0/FtpNZ8tA\n4NvX4iCqQlyArMxZLpqYzY77BSDs6Igy9tkY3Zxqcn89MikPknKUQVWfI5mE\npgSRNugoZVmFRvmo7mloO4fh3CkIMlQsPb0LUudgZEw2BqQnFhQK2paQU8mi\nB8Jh+O/ui1KzM7BeaxCLTt44YRGC4L59bnv+RGwYW4osToSv0WEWCv3jxdft\nLKfS6P8L4l6jj+EW7NGZ3foCQYBuq+AXrTq97syq8uu8eCxME5VGbf4uQp3x\nTzoo8dSBsWbyuJUWTcfufkHGka19crRcoTDkqdDv/Lj+JQ7MQn2Ghpc29COb\nV3sBTSc8pYat6Vf+ZG9ySRYq/p2iGvzQ8e96P6qi558fcTJcmS5xgdMWv1OT\nz5XmVX2S3haBNhpFnFIwIQsl76LpeUeTvqTKcZpXCVh0SZ85ED2klPVciXsF\nYcFZ\r\n=fg8J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWYgiYa1Av2XgCPbp35eDEF3vuOGC85eE+xDBuAoPJdgIgVFPyKY8W61A/9kUFyfdHXdK9vAqMk/x7+Bxpolgo6bo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599082228-6d80027c.0_1599082306402_0.7108479031364896"},"_hasShrinkwrap":false},"2.6.2-next-1599083111-80b1bff9.0":{"name":"@xdn/core","version":"2.6.2-next-1599083111-80b1bff9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599083111-80b1bff9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-oDuC6VjjHrMwanhN2Mc0l51IpkzuRfMPqLQ5i1bIjO2YoYxZDpawl89Mf55HOZcekeh4/vMmrxqY+C0Scgk1jA==","shasum":"3c6e6e831b229981d36e5bdad7721179ae967184","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599083111-80b1bff9.0.tgz","fileCount":137,"unpackedSize":589397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUBK4CRA9TVsSAnZWagAAxGIP/0RhX3KBS/LGdrSAGUEE\ntaIpyEB9u1uxsurNicjGbSlIPPOAv7vRa87Et0H+CEBltJJa2YrGDXGrzX07\naXTaakJf3AgcJ1vO1CdZJA3iUnIq/UtwCdH7JcHkLdjyTpgQunOE/Lk2lPQS\ne4bAJYqY8SSLy0FpSG6F1+8hJWRt329cRN/lEtOaXGfomTk7YWz3CJ1L/MOI\nsDyJzoE4fGZU5m70XTAlH5+LUOlibi0MRLwWur+OB/y0+py6HQVkvx7C1INm\nujk4US8kTB2VhYnp3io5LUiZ7SQHhKWEFscC8fEz2KZ6uPAvPmPleX6WZU+I\nFAERgm4TBIO/Yv6Q7FUWeW1FIOTNTdfVar7vHokalLfrtKxYezvSpc8X11GG\ntKc5xTgMa6DRkbEdvCaE6IQdYfXWERjijUbCHaGdBs9LWIeJGxcbkylGuznc\nhYde9xtMMtAORl7M3VoAr3XfCOk4ckiAsj3pjtV0RV5lHt3xGEBHstMHilBh\nSTCFNSRDUDPbAGDV6gOZkeFFGhIa22uzEyBWY7vWoGt0Au9C9mZGLis0ZnJJ\nk6Znp5r7+LujbGEp+f32HleLrkRpHfZxMQHQYENZnQJOQuCOxwd88IyHeVd8\npJIXylwIGNZuFad7ljmbbLVpv9RgPy6rC6H58qZX1LFIocQEq+AV3/7DAGuA\nHYvT\r\n=ByEp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF0m/hUTlaV09oRtn2Nf91kEW9Tsa8yQBPkvbYdM3Ao4AiBJNHUvVweZfdyeQsNAayOYid237MuUnOBlewGT/PPvLg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599083111-80b1bff9.0_1599083192385_0.5799472876362739"},"_hasShrinkwrap":false},"2.6.2-next-1599083972-6813d45f.0":{"name":"@xdn/core","version":"2.6.2-next-1599083972-6813d45f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599083972-6813d45f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-GE6Kj1x1pbu17/PGVl9g0kV0KlWXi6G1oT2k4rVkGDCqc7AN6FyVv4CMaI3DSknY0z6rDs0eWQWY7kuwnhPPeQ==","shasum":"5776f41656d089abe4c7d6ed3db2461cc2de7a29","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599083972-6813d45f.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUBYVCRA9TVsSAnZWagAAkKAP/31oevXboYo9nrBqcsmq\n3S5akcLyYw3yazsa2OeSVwYteOI7lHeftPROxoRUY6GQUB8Xw9ePggIxGAcZ\nr7LPK7oKGug0go2h1duAsxMkd0TdmlbcbpPiw3L0vnc5jcMaUcDOoUkRujej\ni3ycrjcLR3KmxhKaZ+kKzjQ3EGRZ8kKLLyNs0ZQQuvgHtCF0uS3ZfYuWu+SX\nXkxo8RH/jDyfa1TQS3aZBf18K5fDs1H5TRM+sUo40j1thqtATkVjijr4lqov\nH28Gk5J6wgZbULqCqj4SOwL1VbvJWtp17WAWEcEiZ2dYIIj1PvKr0iJ2viC0\nYSWrDwNh1kGlVGTXGEwr66FWH7vNzuN9ultaqXlVYM/qH574Kgt4eZUtK40M\nCsyHoWRgBtQPOwUP8Wv7VL3nQ2HiJuYpa3gnSD5++227cP1OSTjTTZvUe7my\nEj2ZCWqhriNsHLtQ0wxA2IYNIggwkMIf0YxZFStytDqjE4oJRUTFk92ZWlt7\nFMKHBT/SWUj50eww/ZZc/gR9yjBiNE41CEt44obMaLEL41oxxUKB5Ce/h8jT\nA0zO/pZA1RF0kSDDna3gJh0+eDLgTxBhhYOhshGKsW4ArO4CnYIxEcCTxiiQ\neh5tHHdfGwZwlGACeUs40NHKe8dzA6E0k9/jTrdptLvoXv5Woyp89l2QL1NR\nuLFx\r\n=Ji+J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG2GwMoU751p1b6e8jWtZrUfGEGuQNU7B58Y1ouk1p/sAiEA4IaFzGTeJPYrXkBm4alJMxr8pvL9eIjy/eJZHy6N4A8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599083972-6813d45f.0_1599084052699_0.6614341393482004"},"_hasShrinkwrap":false},"2.6.2-next-1599084114-e806677c.0":{"name":"@xdn/core","version":"2.6.2-next-1599084114-e806677c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599084114-e806677c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PX6v4qqbXgYpTlpYP/sLXf8UW1SfjWvyTGuILubmYxJPPznFmBQUVd15S2q/1rQdU34ct517S5p4f/2IKnPZqA==","shasum":"36dd229630cacffb318da59fd2db0ec32b9d09b7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599084114-e806677c.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUBahCRA9TVsSAnZWagAAkbkQAIqT4ZMauPx4C2rNJJGD\nqzp8H0V48K0icMD1YwYE7BPmeOssSUuU60EO+FLkksVvKir5iCFIDApnAygL\nbqo1l9sXskV6sdV04OSYFhttCixPqGiO/q1T4DAwrg574U6/96LrMQfUf0Wu\nEYoWAiu7VeD4vWs6sWWUawpQonhfB+civQ+GB8ukX0KJH0OLw6PSzcxmJOsm\nRilpAgQKDdhBMHvlV09xIwAnFMNb+yZuVXVwBOUOg4XhxW/n3bFMQVLaszYD\ntSXydfaMKGlSMPvOzKzrlcsuRv4BtqCdDWxWbMZraj9gum2sABzKW2IR4wxU\n0TAt8zSuS/1wLsFrW5gigJ3fyS9fMW+Y0Xq/S7jStwYjFyM3vsk8LC3yA4NF\nMC3geAS/VfouqJ9tBeQRmNqxw3bL+z8ntRo8ArQdzdrD+BqWEIP3c12vSRI/\ncGW6fr8awaHP5RpHLrdtocs1STpxb4+zuL0OUzNDN8oBIvprMgAVcu1Dd/8a\nR8sRyap/JeNXrKJOQ3Xzjj4i/5CUG42z4YSSoPoCLmePcsUIQbxkQJAEYSww\nz7TfycCBH01qBww32nkpSgtiP3aFcmP/IuMW+quPB0/ZzZMyLtq0jqfzpdt9\nG9590TLd8F6Tzc87Tk0MX5/QfzLkq8m3S3dwbzjrxhNuQtSpprV0u2wGIQaC\nyUJq\r\n=ttE+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYTNNksNEZrsuWlLhnZIfz0hZfHwJ/R91gkEkbMA+MkwIhAPEUiKEz1lC0GGfgHLf/WoCseSvENQlhRs81+UEcwDx5"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599084114-e806677c.0_1599084192970_0.24465177304161356"},"_hasShrinkwrap":false},"2.6.2-next-1599084155-b4667752.0":{"name":"@xdn/core","version":"2.6.2-next-1599084155-b4667752.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599084155-b4667752.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PIcUT/C7mNv8IwHxj77GrIdWn/AJlG+eWJwpeURjrcaTJwj91t4DE7MZqEKHiVPN17PYC91gnxZUSstE/EN/4w==","shasum":"8e73c9ffdd20bfbd12b2440666c21d132c33089e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599084155-b4667752.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUBbSCRA9TVsSAnZWagAAqPkP/RHlBjlrHld5in8nk6UH\nmJr7rohY5e+lVSAgwI8DtmOcb0qBAS7s1DOzimq2zaNKgpKWw3gOiZ7lpKgo\n2hE8OSCDpSO8xTBTMShi7Xg3BDRd6LXQXEgXzYN0NHbJCEsvZEIVNDeuTPcG\nU82OIg3aq67PxC8gZzvQR92TES801y8bZRXTAnSGoizk/dsTv46MOd8CRfGv\nOOdE818lcWp1gZQiq5r/QlmWO+8WNT4u+k2+KSpQ0E6HuUKN89UwHBsvNyAR\nWYFoYloHXoHKDDG//FS1wxBlbhlKpSjc7+41u6w4nodISwGApm5FRwl/oCZi\nsiDgHVhu/fu9PsChNqhd4kAJ9sy9R1aopgcDZIqArqveieUOAqljUypEC0vT\nKatvz12b1yQESNzXYyPPHR79SBOnd3bjarCWKSjuw52NiAQis//vtQeMKagt\ndTSj+QSJ765a49/cpCKg+DZEFwlNldfwj2j10+xg7r15vAlfF8+e1tvlV2hN\nMlURHnC+RjvRrLjkQ/3WzGAQ90fNb5BqqtK7Z+fPu+grCo000xT8XxJgZm15\nudrLIsBPi8ayOzx4HF6TLpsOnjgqnXjmKXJfcYTxiOKysujkCraG/gVGeVGJ\n+LuumDu2bbWDfka7tjMWoW8gzju6SwDc4pQW3M8Abwu0fV1BasVhGbk1kP43\n9XYk\r\n=z/wy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3qtkZQnPImw7o9+o0UCXqKSmpYXdQtqmnT13mqP3uKAIgTvG4lkETNXEo/M+wTAtK+YrdaAzFelEHXeoWkzLLq3M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599084155-b4667752.0_1599084242510_0.1403077229048868"},"_hasShrinkwrap":false},"2.6.2-next-1599084319-a3b77f10.0":{"name":"@xdn/core","version":"2.6.2-next-1599084319-a3b77f10.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2-next-1599084319-a3b77f10.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WXsN6eJFAQw5zranqILObQp5VV2ruphxE9ES1y1Gqh/y3rLUA23PbJzZ0eC1Ege2SbPNfUXC1Ub8Mla8yY78xQ==","shasum":"1359aba6857f2f9d2737459e4505f7d51ffa0da5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2-next-1599084319-a3b77f10.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUBd4CRA9TVsSAnZWagAAVjwP/3uyJc4IwBevivVvkzas\nFNa+fw08t2GwsNSvZ5r66WScJYFK+PaGEgTKH77uWHg5Y4SiJnygeHrx888T\nYUjWfU2IUat75pDVqf6bGP0y4e8Wfjr/WWFSwzrRS6xeRcEdVJ/45b7e98Ca\neTMix90lI6pgJ2qeV9BXURyBl/Xi1Gkaw1ee+7/Lil81Jl4/lsAptI9HNFen\nhY2pTY+GZ1Hyv4yQEcJorUSYJz4Q4BGkkJ0NOrOfYrZpKlSnHBe3BLGihtCu\nkM0h04CVn+s+XtuAOGLz7cqTpBoLAWhKMe9wdzyFelvQrZBhyX9w0kAKxjNh\noDn1t4kiSE5WRS5yLA6yJN01U3JSuawuhB3oO/n3rB/uIxw6QGknhL7cj/3Y\ncuQiOaigs4QrfDDES1vyAahmTd8HRrkyICMhELNNdJnETviFlPd0xwmYrA3N\nz7I4+W2p2sN1zLW11d8AlVU/5y138M0rGYINtXiKYxIHyRsHKKWwKV7vlGbM\nYLQUrtjjjJ+mehkqimVpqpRrxmAeOqNA4llDjsvu7KkTNnRyns8I7ePHu1DT\n3r5+jYdcdY1LN5OAgfxFl9TRxaFQ+v7G5rOAifkEVRER8y5Ha6Oc1JeiDnxh\n7MAyU5hCdvctEiS3ps6Ib5bJbJmDnIoMr7uYt9tojLRt5f1lsW166mPtdndf\nIMS+\r\n=nNrj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdSpaocm3ecprJSgJa8zlA4qFSjkUM/Sw7fl3XtEPz8gIgfYOjyRUejxvXTZpHaWpk91/kr3o2MnsjOSAljDGOv+0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2-next-1599084319-a3b77f10.0_1599084407969_0.5876240587373922"},"_hasShrinkwrap":false},"2.6.3-next-1599084411-bdc1c3c8.0":{"name":"@xdn/core","version":"2.6.3-next-1599084411-bdc1c3c8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599084411-bdc1c3c8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ny6h5Ry70FnG4/iACfohvtifWg9GHhCm0oXD9m6nj9ZNCYn7KS6dwJuhlsjzDYPD3cc9/9v3DTEi+kbRc2fvyQ==","shasum":"d011b5b25b146cb4fa9961cc80a110126a4d0653","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599084411-bdc1c3c8.0.tgz","fileCount":137,"unpackedSize":589447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUBfNCRA9TVsSAnZWagAARPQQAJH77SUhJ1HRRTc8x+ND\nCOTcHaKcsZf3zBzQAM/yEgpURWMA0DlsmZwqIghorf/THEfm9mInpNolvbiO\nhRQ43Mf3wrlxF2aam8+JqCIFxYJX1SpeL7cNM45+5bOfoX/itu534k33jiTE\n3yxsder80bpgtzrh0bjNWNFSEP42Z9rSeAWavf2kT/02ycZSUkMvbynJLTP8\n5xD+ctRUvSS6n0X0wi9QLZ7FVaJ/AV+5F+tGbr8XsmrS+FdpWlXmLVWvlolf\nbc3uJ63w8p3EILzEOs8JLaUzE6JEIk0YtRyS+gPUOuWGf5xsD6J5bR19YXr1\n+tEg0tluQi+bPNgXnEwWkGRo2lMM+D0WkAyWBIYzoApYCWpea6eHuZSp2FoJ\nTu6/57wBvWT0AZ97L1nTJ0KrZzC5fqHn4WjapD28RzWR+Ub7srVowOgQecDH\n2BHVJAbetPEAtdcb0Rb9LLjXuvx+7YwZaqdvNSbu+laSFwGCzzprA3kOvO8N\np4xl/pRDER5xFyeaPJ9lDS/HDHCT7Z663bZwX4e/aWBn1YBHmACpLqQgfz63\nko0zlf6ReGSenxkciC6ag8L+9azd1H4oddCuSPkaKKYmGCCsQ9twNmgJTrwA\n/fcbimdNkZNfWk7Vt4lMdHme8Kdzr74JBLrOBHg+vDik2PlMgeEXUlKaf80v\nvhOR\r\n=0Lwh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBxKtXzLD/Ogggvgh+TxSbfN/GVBCvmz9ZPswq6wUf+NAiB0HnYkAfOF5sb8NnDAqv6qDtGsWPnYlAc4JGrmCg0klQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599084411-bdc1c3c8.0_1599084492982_0.5434960827675939"},"_hasShrinkwrap":false},"2.6.2":{"name":"@xdn/core","version":"2.6.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.2","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fXYVR17X7NwjfsP0/8jCVkLGk6bNnYk5ff3Jko7MlVR8RPnIJNcm/6pNcImIGKOY5buQTYsoKierNWUH+a4cVQ==","shasum":"7f6cf53eb15044d206803bae8989e53c3ad99ea3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.2.tgz","fileCount":137,"unpackedSize":589393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUBgUCRA9TVsSAnZWagAAMq8P/3rVqZ76BUJZQLqomiA3\nzqgPEiNykAVX/k/HMewwGiDFRB+22w3ndMjHhX15glP/sOGun133eeEwKOqO\ntxPrZwWAwjVHDKdA46Dk6Q7jVRoRmg2//QFtew7qIPQdKZ2Wa7a12Is0CaDd\nNLWBdp1zdqJTj7Y4Qr1NGaDYMGv87qzYTPmMG8Drs7xTZanjt5VLV38WTVNB\nWEy5zbWACh/7T+umIFY4MOp4Ztt8UXs91s3GQnPhHAA4Ww5SzcaQUqZFGGcP\nNnHSm8C57mLpWmPAZq7nyc2XA23mrOhtECFCEcNl1XNgnEoZe8rQNQsnunmr\nkv/q8AgtkpDyNKgzGLJLodbDt/f/I7inGCR3m3w7hZOPxIhqhcQ3vu1H46Ud\nO1OkP7wonDeqqnQzQ/Xk95Do19tw6ZeHweLrZZAFhTFL1nQRWQYzVSQ2ogWW\nchYL5TJlJ2qn04Qlh88rYOJhMpg5r+p8y1PFbghs+SZXQP4fO4l5OmLGUmWb\nKeRBpWD0ESvhgOWFErLtzBWFNJa+pbW2ga1GQdg3ZOgSe9Urvie2wfdGeOo1\nzPGYeN4IV8xu49l71QHA2npafZNC4Ey3QAQZ2F/dmaM0BICi1noHk4fp/AGA\nynHkgu0VgBP221OkWKJKIKLT0ze9hYGO/P5iMo3V1y23SN57wGCoFyJZulWr\ny1Az\r\n=zIt0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID2cHpOb0PIqpOlqvGHI+CikPETIwWqY/s+7eaD0Z7/xAiEAmIEoGx/7tXqaVNXrhbBKMdSVACu1NAHotCVn9/lgOAA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.2_1599084564430_0.20106107694077302"},"_hasShrinkwrap":false},"2.6.3-next-1599085061-a84d77ab.0":{"name":"@xdn/core","version":"2.6.3-next-1599085061-a84d77ab.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599085061-a84d77ab.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nH249WM1zE8ND/Aw/u6DhLuNKgf7+WF2SiE7QDdUHGSwvsyMaidZAlewfikkp8Ru15gesBD6NfkkJ+8Hhurchw==","shasum":"f756d9d1da63b88b9504a3ae7501ac33a74c1c6c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599085061-a84d77ab.0.tgz","fileCount":137,"unpackedSize":589397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUBpOCRA9TVsSAnZWagAAIjgQAJie1w7TGmGFKDsAVVmc\nIprJWd51HyiIEnhUs/8kqR2TIrx2VLV/DEO4qbuspqYQXj242syG3rle2JUF\nXs0pgxr0GZP/jGNYSh2M9OnDne6X4cmbmO0N1O+mOgk4eKvotRHw53Q4wMIz\nuSj3qimp9gLQVwbZDz1c2B8GibfpkmEQVdJYTYCxjvpoty9g3mlLwwBXQZCD\niR40Akp4ou9xqVGzBdM6EN1R+wqao8G0w5b5y6Chl0I+mOd8jmCW/d/242dZ\n7eGzfg6F8PuFPg54gA/wUlNjfXYtOqTD87pYDMaihqkagzt8WCqzyZtC/yYB\n/Y93hFL7UdoPRSw5X9ve4EfMjw85n4dcSkXt7jBeruAvxFlY5uYXCsVr5jFP\ntwbfzZyKG30E48lhnB0QpGk0OGbple/3sD9jWgv9j8uA5+UCLX1/nsfndnVE\nneTfM3T+ZBlQIXQOXjyTNYQhIzTi3TFi0vWcB6Pkd55nApheHNCz1KA0KjfM\nmzeOHl8pCBJb2o1rnSbBhAajhZH4Z1HtLrKcgcShgEDQ0keS/tBnvpXMRTrD\nQDz2t6FbQe341eAVDvJo5I63OKm7hLED9fvWijORUgr6pxmI1IFEsdpNd31L\nLdiOhUvh3l8Kats4kifP1W1qObMNatybL/vE5iDXOwD2dey06WExe2A0SV5X\nS4E4\r\n=9zaO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEPQugY8sw4I4PVn9Cj5ZN0PRDZpJAgNiFn5riz0RDC0AiEAi1EWMMDsvDDTfwZL/fvhd4LPNZTM9HlPXWEURl7hUMg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599085061-a84d77ab.0_1599085134072_0.8701825895094091"},"_hasShrinkwrap":false},"2.6.3-next-1599127595-9d8b47b4.0":{"name":"@xdn/core","version":"2.6.3-next-1599127595-9d8b47b4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599127595-9d8b47b4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KYpYjjtIppJaKObM9zV8GvHEdk5BBIZX8d77nZEcEe/4Th5WfitYiIQyS2POaRIQZPVZt3BOQSIhZV1CSlIU0Q==","shasum":"8a8bbd0c6a3b40fa0eb146e8d3f173a5ccd6dba7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599127595-9d8b47b4.0.tgz","fileCount":137,"unpackedSize":591426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUMB6CRA9TVsSAnZWagAAfxAP/38dZPgSi6zlETSzOtKa\ntCiEcAg0qBjNBmu/tpuhZBz7PZ0PIgqS16y8SeHjGTbREO4owgdhyaCGSN+x\njNVbRbCeln4/N4l8CtkxubgJ0mvQjGv4+U5s3o+RUIyZHMO6NsTgQpoMrAci\nHQ8ItAzKxLevtD5F8fVGLMcw9cNDJz9XETRxfH4Df26yQ4qIojKABCM2bYda\nM9C2ZvDGRVRU6BL1hNRkXR3FnnhQy3t4r39SFVYL7d5Kz1jHI890wFOli0u3\nI1vHlKEbkwQ80IEsjVq7eD38/4oTf4NMkmU78Xa6Bi7BDSo/Y2iB5tLwsRn/\n4NxRbmETp0/DahVvmNmEwkrpjr/sf4JkyHHGWtxRLOLqsrLkPwtKNFKIGi2V\n+QmZYnvXI4/T7DZVD7jfoZ+jowNITZ5DEbioFwkY4EX8HHWBJHHeFc+3aUcV\n3G+FuXtJCB0KHLG5yPrK77sAtJw1yFGjsXWksXP4Y9IIDVvCJULxzlz2nGZ/\nt8E8LsrsyXDHrT6oMXeYYl5uYyJprsrjSLEWhTm9QkDc46fvNbZnA5yR86IU\nkPS2TLlILWe23HRnXUroMjEUucE9raZIDhzfzpGlLQwtn8bal4S1EWT0SGwj\ndnoG1sE81AfB9hqGn6a5pcevINwOZgSvKK6QHWP7wiNFX8D6xlRq6Yzl9fvd\nNoAh\r\n=w95o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHQDVfiRF4npxpOMZXFlQMEfls1+2BVKuC/RowoON+FQAiBzxfDMRfaPi779Owd2GVMJ4y6r7RLs3dy0ezmVsXMCqA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599127595-9d8b47b4.0_1599127674313_0.5950434610027"},"_hasShrinkwrap":false},"2.6.3-next-1599131915-3000f686.0":{"name":"@xdn/core","version":"2.6.3-next-1599131915-3000f686.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599131915-3000f686.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-y7QIGTlmsbdjHCfnQ3dS/FD4dcHTdrJF4uLdb/bY7c2tZpk7o3KYO7VCuu7Z3j8ZU17dXtOpeIVxUpbLJGaUMw==","shasum":"76f8992e806009a2d28f947ac7afaa2cbeaaa04d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599131915-3000f686.0.tgz","fileCount":137,"unpackedSize":590854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUNFfCRA9TVsSAnZWagAAFtoP/iKerWt//UuYpSXkKpjy\nYJVSux1Ej471Tk2KIuldHm6rbvGqrWjU++JptH+jhbPpMH3EGWhMvIPlHWs5\nvrbAQMf+4tno5smJ9R185BtYGMgayAZj2KVXdOI7R69GN2hZacISjHyGCFx1\n7ezEHXj3g5ZKT0WrmPkKPKrOPd5ypk5IJ43O9eK6BJcTCWnVMt5MkaRwFjYf\nuzIkXvjT4g92IhUrhPTFDWv/Iw7h1D8OhNaxRY8bqhNmESRNkEPG1U08b5xJ\nKN0LBf1VT5+9Mp2O/iWGGW4lTmBPkXJdBYA9Gwo3O65DNMqgFYIXewgOkxbF\nxEK+RmhPEA1VpkFfeOvarZX4Gfgsnbt5U98IdMQAgbNndL2YSoyEVlCwCcbB\nyQJPuTPLzTOl88QaDHAsW3Gt4z7tX+F14fjbTn0XrSF/q9yifvBgQEo1GFkn\nt9R4ieijtJcs+SfJ0xBikNT4YkcBFBQccw/cuOnr6TRSAYZ59tAtIGirAsVb\n1u8iQzgn9pdrU2y09IFJi5Ki2k4otUT76pjG/spLYUrChYRUQAJXSgTc12To\n50pDjZVDHp4fOK7KWOfwtBpNoiCgRn1oKFJJeaEyE3+4wIbsqNM1wwUP3ozV\neLuiG0D33BCM5k2ExtIdsQOhlTqwJ7sq3AMTCmH1NmhIE1AtgD1bfzroXd/a\n80Tc\r\n=a8DF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCL6u8CXSDxp2d4lYNVOE8xOz9wUTdlqbUh192AbB2tJQIgAevU1t3eUaEQAkz26uD67GfzRHIYfL868MUwG1BncnE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599131915-3000f686.0_1599131997811_0.1979277475588812"},"_hasShrinkwrap":false},"2.6.3-next-1599132181-85aa4e60.0":{"name":"@xdn/core","version":"2.6.3-next-1599132181-85aa4e60.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599132181-85aa4e60.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8FKkGG4oMA3enCoNTM6JHOgGqm+k6VHM212C08h/pK2j7sYStqlC6Y1TXrIQKtucZR7LTUiiQLiRrF43Z2KfpA==","shasum":"9cdb99c8f634f1dda980722f57f66cbff56494aa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599132181-85aa4e60.0.tgz","fileCount":139,"unpackedSize":633405,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUNJaCRA9TVsSAnZWagAAwHsP/37M8RxWnIIfgcxLhZK5\nmZfuOvHxu3p/+QE6+DsOzGTNOoxDUkxiS+zMaUhSk+r52PhdpoQmMj0rcRde\n9GsLb7043yTB2fHhKdRT30dfjcn9uib1oq8v9XaWuZfb5Dy7JwHn/L6dnrVo\nd8Ggv6x2VX0RU3CDGWQKBY3y7Sp6xwMstkBbAfKi9ACAL5/fWjF9qbryQpu+\nohpLE145BXQkA1mNFbV8OtL5U/u/GJDVSeDFeEa6ZzruE4eLTwpRv9PTkC1t\noEo41J821heSX2rI0GQkS0aK05Jrd85ZFtWcc4pXhJX86+mDdEs3KjFzH9DD\nDHtdanE2gZhF/5Ocy9eSYmJAFmQthOWoFXwSW0R21iaJl2M3TvP1ar8rq4Wg\n3O8pi8KY/eWxvWUAtTidDeDNNtFb9t3pXQdi4/fz1qdXwhtaQP7xfGvmNFOl\nkD81ssnJx99E2KShb4ii6M6kiiYFfD1na7UGSfM559lScsDOyG9LIiyWyBHo\nhxqJ5uPuKhCqVHYUkBR+3l0aAcWJWdprGM+tGyW8POiI3N/VApicuRR2PjZv\noOBNx10hO5q5+hylnGeHAfZDOMJGq+pQOUuUpGiLiJREMRWrF86tdm92V30h\nKoc7wdzW5PwEAWDubRG47Kt3ivzPNgAPeMqTAYEYJ5Kq6SvZ8RK4I1ttdIrw\nItUH\r\n=X/+4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXuV7a/DEHOdiZZAnYQqwxX4VCTq9qKd1TVR9EjMPujAIhAJq+u3YkemzQE/nqFATfaKPCZxJuutQAdbs+UqOsGneo"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599132181-85aa4e60.0_1599132249411_0.05308361554274632"},"_hasShrinkwrap":false},"2.6.3-next-1599132204-ebe46836.0":{"name":"@xdn/core","version":"2.6.3-next-1599132204-ebe46836.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599132204-ebe46836.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HrlAZZ/74qUgLKVRu/RvCx3THkcqKi0TMm8B5AbBT/fUIM1VTaW8rmc+gWicPk9NUT++Blux1VL4NDPMFzUbUQ==","shasum":"f9dba8d5a4d93017bdf93dc80c7ca797b6ea7983","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599132204-ebe46836.0.tgz","fileCount":137,"unpackedSize":596541,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUNJwCRA9TVsSAnZWagAAegsP/1vwKk6HS8iweOhz+O2C\nunaMFtjXUJefZgxQs5Hr6NF1niCksfVbAUXY5OvaAi9Vj6qBj2pybsePFvqi\n9tpFrQUXr4jpmV1wQ6CsTj4OvDybEEOrdPBeb4SjdFGLphw17Rvrr7UsZf4W\nm99Anb8RcSnKm4yfTScgfw9cWVg1GX0c3R8bxQNvJ1mI4qkD0WbCNCCfkrYm\n5YSLxAjxqjcCNA96N3vTUpJ3FPBMzQUjQ0VyrSRwLcEQmM566GsU1gdt0RNG\nnb0VrWj2n+PLCOPdgpPqUHhEWQplQW9R9Q9sDPiPhQcsFsMdCpHyxxiqAgPM\nz4M0k/17+elaSYxMmTZjKcyi5TV7q5xXkJm3saSh+oBBPmbvdAjt9GX7F5li\n4v2irZatd5apCh4P6X6m4ScN+J+RA/MnCE69VTDhhpvmfrfn3LLYqABnfar+\n8RoFPFzzCtLNQ500P4vplaJZhrRvDs5HTOeQROKgU0pw/26NqidMtjFkeIHg\nLqpGhcXudM6Pqs3s7YkZfzCR7cTFj7FThnb3bmX3yjPP8IA56njs/+Mpdh5s\nApRpoMrA0cbRBaOaxV93W1/5NRuOde74O6LRV3Warsm1pN/LDsPe4Uhz/pEg\nJ57cPPfJqHMQJ8R7SgAMldW1GO3GPk3BxP91jQN6yl+eJQDAL64iooXekG8S\nzzDc\r\n=aUQ6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbiqoH+BdcHhnoq+qXtbaOLqigzC3rSUYiDLinEmdpuAIhALWpbjHk1mKe9S0aBKfQ4QoUa+KlvHUHyqBVPKopAowx"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599132204-ebe46836.0_1599132272369_0.948080955042101"},"_hasShrinkwrap":false},"2.6.3-next-1599132332-cb518e91.0":{"name":"@xdn/core","version":"2.6.3-next-1599132332-cb518e91.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599132332-cb518e91.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/NtNq0LypD4tsk/fgjxj3MlQKePRNiOmXY//dX/A7+uxaV9r6SgZTFuEZEWK1YsQmEt8NIulJm4MaacAJ8r/FA==","shasum":"c6bd5e94864b91dee456218bfc2ce9df758c631d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599132332-cb518e91.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUNLxCRA9TVsSAnZWagAAVeEP/2OhP/rkVWS5Vf2c1hiE\nhyZoMNwfkoSUfIKPfjBoG5vbF/POcThCC+genuxJfisGfQKm/hw3yqFHAsrW\nykktgY+YCLjzJl3G2NCJf5kBtHFv/ZzdadkXbJeQRYsuiysAwy11+TJupkET\nwUDkHUvVocHS/d8mIeCA3BMPKJ2p1H/kvWUAZ6zO1Sl2tvzjRCwDj9TzSAF8\nkyH4GhoHH+bJ/gwhDnIunJYvdSWpSQ7riQasHPgOUf6SCpRABzupbRx/vT37\nBC47toy4LGHeQcgIkWGOVzCzkB9RREx/hU9qnN67PaccUuxhDNV7zQ0oJ8h+\nHwIzTWvzBPThKjlwTv7L6jr6MwI2XBzHGx6diAZFNi/dUltlpJhLXgjocXls\nS1wC+Gl9jthbpQp3cHF2k439pFyA9N+3c59TlKjq7JbLLGK6gfaSAfKRpsm/\n1G0deZ+HkOewdMzFjPlW3jTfexV8BFuecdSK1vcCB3/S9a1B8yTtMEUDqOIU\nrSLoMFJZRhf2GYBug8TmPr4bOCoSxHcY5x8jjlOpLXAtmrdgVdyxVMA1fO4D\n13UbU+R64JFp/yUQ45cx79Wv4T+e3muBpP5Lhde3baf7D/jTFuJ5fHCP76lB\nClZzfIMymrMEBivhyBUVxric8+WgBJzR2T6BHIeyoL7AnvptVqDWMbK5h1EF\nQN/B\r\n=3X7G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICHMgtAI03aF0LhOjKgMtH+ILCavz7hRU+xY1eFKAo/hAiBvM4m9aIM7SQCkkXvMQrVJeldS7w4BWv+DcrzxKaUXyA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599132332-cb518e91.0_1599132401158_0.18265187373447467"},"_hasShrinkwrap":false},"2.6.3-next-1599132504-184e263a.0":{"name":"@xdn/core","version":"2.6.3-next-1599132504-184e263a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599132504-184e263a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cin2W55NcdyTay6zLwXEjXK+xL0fXyEkId9RLJLzmdNl9PVjmNeSAug+lK6j8GdPdKLoEMeeWU37HiV7wS8uEA==","shasum":"43b57af2c91654e3635506fe9041f039f079a58d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599132504-184e263a.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUNOsCRA9TVsSAnZWagAATeEP/3VswZjFvH230bGGVgXf\nA5uiur/A6Qnrd8VYXM83CNvIKl+EBsZo41PDAiLIdtfNNY+bpdqPnz2mwnEZ\nq2PO3zqZaOb76qhtvb7f7ILrADAOwc3waV4CuwwAo7E59IDE65bpJ4seRYBb\nw1KTwV6pBkXZSToomKdK4rn8PaQ858sxayNQLuvxN5UgfHnJerMQ+DEQ9uoG\noLEulDpiRT435f7roVFhSH57P2MNd7+gzEabRs+y57xnW7OWZ4bJ3Xm02MM5\nX5TH0gmlp2CSHcjsJU0+PQURrSgfWizf+MuwmsC2Dc/Gx2S0wt0pv6zl81CG\nKIAn3cZT95LyKmfX4TtaI7kBUwokOdxKH4cWQuQaQ5CqXn+LExTwoyrxmbxq\nCiIkfb9+LofADaaMJDL+dy5prYTUhxe7LmBOCE/4XOrrWUd+9tMtLscZu2Eg\nNPGdjsa6aWyZPSrWaBJWRwQivcd2oMn+Yj8fxJhhvbvePpz7mwaDC7MkX6eM\nO86kzgDSE5velV0fW2Je3jTdFWpw7YjAo91/hZ5mG5nMauywyp3Cc9UR6GaB\nFpMkraKE/iLRX0bLa0e0gApG9S1vWZwDqKmTjtrpzhdeqMz+NzDC5Iygc08W\np2bFhoiov9hpB09dmcUiIRQHf+v78lWR1hSEUJRW8pSEgzJdTuXiCe3o+Una\nKotT\r\n=0qpR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBaDSZpLaKZO7deYX8ZcSp5FkctJjnA8318luiiNcOWgIhAImIqMDMt0pp5knYcoIDkmFRWLvT7fVJdaFpRxCEEbq4"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599132504-184e263a.0_1599132587669_0.8464430160305358"},"_hasShrinkwrap":false},"2.6.3-next-1599133491-eff9adfb.0":{"name":"@xdn/core","version":"2.6.3-next-1599133491-eff9adfb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599133491-eff9adfb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-d2/kDDC47iOpIznMe3u5Y5b1yhN+sBfUU+Kk3/jsFhS32eWu5EC/U3A1uL3CqINLIf3iIPx2OUUvVXtqKrwVww==","shasum":"fb9bd943e854dbb4624b9fca50fa1c8de9f55313","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599133491-eff9adfb.0.tgz","fileCount":137,"unpackedSize":597968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUNd9CRA9TVsSAnZWagAAOPAP/jnaCmtrPPUAzs8qQVqm\nrm61wYX9bGPsgN2lr9KGx+WNa6uiReOVLRkR+tgmSw1Y8LLmqZ7X09x5G/Dp\nrx7SHsUQHFYHWlabOjhlDudlIlxIeS7nCEpVj31s0PvsAXZV6/1k8VcmvEfh\nzGgViBGbHa1SLt3dXmeASKcyWZN22fk4drG7nDtISG1Mf7KjM71TgCSnzVm5\n8ry926eaNI2H4c7q3mHdAH3Ae94hSqC1OuQuhDpdFoddPUUn0qs53NNTyyIm\nBQLLkXwdF/35iTEv6MHDTNzx1oY0xZNztQKRHXQeN3qpsqT0QcKZUPnPhAxb\nM/Gn/rWAkoTMmPVfZzUY3kTZonEpfaFcm+K3T5jQnXrGf5Y9CsDj1n2JU4Us\nq+vQ26oc+gXRoN1RK5dDifmg9YB75BMRMwDXBs6LpDQJreMOvL6rXYJnXbOM\nUXqJ6+Sj2CwWvUV36ME68e49kdEueGqcXl3qTHpNZvaBjbE2rz8D0s9iV3jz\nIDrRPDYieFnROncn5O9MRFvUh0LkxUZIdAqcPCKBIs4q1yeVj2+shpLIsOw9\nXmHqdxHwk3B/NkQArfb/EhUUshRyGzgqZvIxbU6v1TcorOjIp5E1hvay6pKG\nj/gtUzbM6S8sKC/wmOiNN+OzkvLdBG5XMydkcS8oeFjO371PGISc5LMw7Mc4\nlWoT\r\n=ut34\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0TPrMO7W7lfqykSaowwD9b/M/o5LwC3YtQRxYB7ruMQIgC1bdeRpB96R43lQnRLWfuP2UdcWyWaByeeW1JvXEvLE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599133491-eff9adfb.0_1599133564909_0.64626034318365"},"_hasShrinkwrap":false},"2.6.3-next-1599133837-f62fcc9a.0":{"name":"@xdn/core","version":"2.6.3-next-1599133837-f62fcc9a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599133837-f62fcc9a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-OTkJkn9AH0l7ADh9UxpgPPNDTV7kwPu7Kq0cKRdmgLsHne1CaieVXtgwVMoJHTv+b5IEIda1QZpB1xrwfoWLhQ==","shasum":"05119f463da1a424c54836335b730f2ea514e8c1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599133837-f62fcc9a.0.tgz","fileCount":137,"unpackedSize":596658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUNjXCRA9TVsSAnZWagAAPUEP/3jIO88lz3uSkvELr5zK\nuCckDrx/RTN1ivKDQ1REUe9PkNc2dSYriTzwu0cRgbLD/SF3owvCFr54/mpr\nRmPPchHMrQW4ZXdFTvNAi3gEax5eqPibAQM9WB2K6tTAXqgGsGlpK+6w5pwE\nwpjrccaxc/16n+uzJW7OhzYINWWXdIodbBPi7KlE47ynfcnFymCO27QI/U+L\n0K6AaAfnu473dH4/QWqkhrDnr14qfyqtvjgItZ2z3N9hKenVSnUWtlCMDl1i\n8Ld4mb5SoMyWUgC9tuiUzHjBEhhPwKY+p4TK4bJ9BpXBN/SFmiWX2cvbANmM\nu3qx55u+s0ZOmkl10R41NAhB3M7Y1JMR2kH23r/Mz/B+5rn5OLr+TmgE1mAY\nLA7fQg4kmsag5BsotWutVnaMoHe/rLIZAxfpZtiZ1yS/7Op83He5O+DzQdzg\nzhLpDiyaiew/WdWc77H3gWHI04aLleB4qj9uuPpSvc1KhXNYuTbPTbNINli/\nsbHkfFuVlsg4bJIqv40xQVH0YO4q/FX2RSaKwjANsQUiDZvzS9GRtmFl/3+/\nYGeq07qRhW30RdFCVZiFtPUxGE7MXsc30u6TWH8GdXHYdOyD+dE2omitcj2e\nUv2zVRe7RcQKBJgXLfNNJX35ERnh6+yH/2mKrAPKVfi6ywUu50kFbytKaNVN\nxTEL\r\n=r99B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICF+7qvNZlXiE5Q4rDCZBsCKTxDiLU2+3/w3kPTUsIqGAiAYOrfRFOEZ36pc9PL2Oh9TrCBi3zgiGV1lI22TQqDk+w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599133837-f62fcc9a.0_1599133910463_0.4275593385429348"},"_hasShrinkwrap":false},"2.6.3-next-1599135144-7f86ca5f.0":{"name":"@xdn/core","version":"2.6.3-next-1599135144-7f86ca5f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599135144-7f86ca5f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cRTgFgyuWmH6j2eHOFNBkJfCjg0rK3JrgjiulZp8grpi4rxo15c0lE1dK/PWGF+/+0aO2bQ1LKjwpQVsLajX5Q==","shasum":"d2d9ee9e41a38d18fb138923c769ba75e4a9f181","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599135144-7f86ca5f.0.tgz","fileCount":139,"unpackedSize":641006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUN3/CRA9TVsSAnZWagAAPb0QAKG84u/iPGRfc6XRA1i9\nP8MolcVpDJ2+dIpun1zfrKeHoSVZkEF8V3KwApP9KP19IKEzInuxRyQQQ13c\nAkdIxpLE6AKiv0XmaB6V/MTtiPBEjhlT/mLjtMN4NnDhWNxscDmENrjSrfsN\nhD/mQkOGXwXtedzKfmAVI7cYTp45KvWbUlAS6CV5EeD4wmDeCgeEUt8IRaZi\nfq6vMuPE+MFF3H4hTxEmZlZFlOs35HZkjcXqXhyYfw0b4pfarxXY/KHK3HB0\n2ppFLOqjIi3yZwd/O/YzEOa0hkUwYv9AJAORzhorp9iZphALdqIR7lH/jCaA\nPePh7Zdpvy3nyLOg4aQfX9BBDxwe2Vv8XbpVVhhK4WJGzEWJsFTH5EikIlqp\nA0JQ+j1vTr98i+PIc1jCIUa5N9dZS8yvfc39TMYo1o9FX9f+e6E6CLlysxNN\nIpHzNgH1ofvOAwwel1CwCOl9j3TPO29Z6wC0tSVQqWQUzcmNJtrxuEI+7Tkg\n8g0DOxMt53htlrVkOb6QAjYjV2/Qep+s3Iu+zM+RhS7O1pkGNK+a/O1SLbze\nS//laAcLm6r78Pe1O+SM9SeMQLFpYRqR914S2CA0W1eRkKeG2tCypz+AcuWz\nQof4zjn6uQfWhuxRWxH94VHJz8EInyI9OoRD2wbBE/+r1DAfmUDd0wrjl6rI\ni1wK\r\n=ATIZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBw2yOkuaz4zt5Mq1m+5LeluJX1saHns75klg6aoJ4R7AiEA/moRaH3ET/nzz44CZDChp4J8jXcjASXv1OLXuluEAJk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599135144-7f86ca5f.0_1599135231308_0.5228634810048429"},"_hasShrinkwrap":false},"2.6.3-next-1599135218-50d7a180.0":{"name":"@xdn/core","version":"2.6.3-next-1599135218-50d7a180.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599135218-50d7a180.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wSQZx+55IFNEoxtBg8d+SXW5drcMnmQi6lA4hD58ZjJWIG6a0/swOeyhNdVB7PxhZHPxYC4iQUZNJFBTFpxWJQ==","shasum":"6ea9648d6c42ec52883a862c218d2ca69793163b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599135218-50d7a180.0.tgz","fileCount":137,"unpackedSize":597968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUN5ICRA9TVsSAnZWagAAE0cQAJttQ8fTEyUeURiH5dD/\n2tKmo4sMyxdawcT+ps0Mn5Hb0l64rwjVGysMwWWq4nthwLzuhrna65T7Q11K\njhLPDRP5FGvYTtIptCj/Q4YbMYiuaqN3M+3Mv7khebGV7aImL2Ora672FZn2\njUebS1zSH7s8Bn+TOd3Ap7I/A8RJ7V1yS4eZWEqeeW7rci4lUv4uq0MCqLHM\nPjw2e1FOe3vbzLU9eTqbJHMDOR0VfE2+JFcwMn32clIqNe/V06l6SLKh4EOb\nGr05qqcI8VG1VVbeCOfCS5wLYiS7uIEQpPNFkjmyLXiLEt7dyOqpJXb01C2Q\nd4TZqniWn4Fnb1SYONIVdtqBlDyrS5gnbuqEQLjmFcnSFjkwWTTKmeKj5Rtf\nuBn32AEI2KEZyAbXR+6hI8M91ADGTANU8mJcp+RZP+QFhT1w7pu4HN1y6LiO\nxLnjwsHw8Nv6CQ1qHqJ7gmFbviiqeCkRVVuFLrHBe46C3DA6OLr8K9wd+A5E\nfwd88JEItgr8A4KP57gA8CYmKtn8cAw3FOMd22Iqvu/N2F/OUu2BSYuinuPv\naZKurG7gQHk9/XJJ/XmHkrMStAbdnRdsPlxAZcxSZ0iJ+TdlNbf7378lgGSA\njePvO56113MFF9SYszwVg+V7urKkGpuQ2X+1R2N19ythU+ydxS4NRMktU7Bu\nmAVN\r\n=bcsG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmyI1tc1zLynnF1fsMjogsc8WhbyqEjDEBG7vIQV7PaQIhAKjdyAFYrEljw4Glj0HYHFOqiFk2xCm+RHHCdzI8PlY2"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599135218-50d7a180.0_1599135304101_0.8264230053421102"},"_hasShrinkwrap":false},"2.6.3-next-1599138733-90d3a7b8.0":{"name":"@xdn/core","version":"2.6.3-next-1599138733-90d3a7b8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3-next-1599138733-90d3a7b8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-JunJaKczvjOSxt9Z13fR7MHEzQtNk2WJnN0Dyl6GlU3xNkXY5i9ATbOr1Cbvvfm2DxlOcmtpZNg4l85WBQIdCw==","shasum":"3312c52383dcb9ed04073093cf94cc60fd4440f5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3-next-1599138733-90d3a7b8.0.tgz","fileCount":137,"unpackedSize":597976,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUOwECRA9TVsSAnZWagAAI28P/AnZrZ8R2QVPDqtPhdni\nWbuEK+HV8SCJ3huS4rmt3xPe7s4V8LtKdpbTijTKZ248wxAcurQehyBFrc2b\ncQDu4XCySbDPHXdyJEQBapZCp4o/qpDRhOCXvuPsbCcCRHSLOasNDxMMu/xm\nv2MV5+iety9FydXdsHzUdM0N3o7OdpzhzI0fX15ZypX0NVoqwHdRIFcs5s7v\n7RUfctrTzUV5yBOaMiQh8b4EyKudoRynZodzX8pHmEGpLbDOFTA9nqQtv3mj\n1x1bFwUku3Hf34p5dMTnZsix4Wt5rqzJJGT8CPnu30GroA1/iqrKnuUDAvLd\nqTW7wJ58FxByFVFZ+alfj0ltqGqEQyyCo38PIubKunNF/F8NjYF9prK0N6Om\nlmiU/yPYF6+wN0tE0pPfi6SMa6m7pZ/9PNxQBHEPSggF8LYIk/Kh8u88vUrH\nUEI8uHtHjufmtbsfL8G3O8vBsxB35+1Bv1lEv6pNxZlY9SWOx+tnBV3IKxZq\nnO1Hm3PAwtYJLgJfzl8dpWl9yt+yWtr3YNqk58mXt/Pd4XgR3q9ZZBktFnk7\nmbAaoDhzyS5NRidF0MzQnQ4XUwQQUHQxqv/B6J1ndqK+QE2OVnnVmq5cmUNh\nt4REbM8rNjuKM34Ank4rz3VG98C3jLLMpH3gR3z9i5TUny2TtkFwuqr/oYTO\nwHlI\r\n=qE0P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE4VKtkbygyKTerMaLePy7P3zueqR6X++G0kriBwIaz+AiAe93ELi9InWNGsJFidUUvOYqEqwYrzNST+YThez5TflQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3-next-1599138733-90d3a7b8.0_1599138819694_0.4072642621423197"},"_hasShrinkwrap":false},"2.6.4-next-1599139174-7d549962.0":{"name":"@xdn/core","version":"2.6.4-next-1599139174-7d549962.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599139174-7d549962.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MAikbjYWND3GhQmkd3VLNxC83aBFMqkGfExIG6FG0CW8fiua+YmY8VKEiGZ4iPIGJildlLQi9TSf+yOJFxnLhg==","shasum":"eb39daeefc62c9f060c8f17e5d4e72a8b8322c5b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599139174-7d549962.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUO21CRA9TVsSAnZWagAAAfEQAJ4eSxgllgAIeWRCuR2j\nz5pKvUc4i94QqhM5pQH6fTYPUY7o4mEEHIXuKbFG0E2h52+5dNzT8OnLDYtL\nkqJ+huyn7KwtfPHh0yskJV0SKEJjm3a/ztV4oooLxwt+2qimPnuZlxC3hJQN\nNEmk/1YGSfPgPwzz9DpUb8cJEfcxgDALA5bjUXYrHJb79sI0gw/U3jQpwJyG\nk479zRv2qB9NQIreHHsczK8EcUZc967IEbNzuYGhw99hzEeL9JSD9BfPSalx\nbSaIEfIOKUkGRxbuk4M0SLm2F6t9Q4SpUgXv5SMskHPIaGGwE4JJ2uHPo8VA\naNy9hYDB/BB8mZNvSgunFzAxnL7ORJ4UXrABAu6v/8VpOUEmwcyBPoFPPT6V\nHSnZjcZqN2lrKrQhxGfyDjL9HCqD1vn2eR51EMdaXd8O5cj7NNUiZCwv9gkS\n1321HsWVTyfmfmIJIYSesG9YCAuidmGNF76B217wj/WNRTGgPIk/XKKXkg31\nBaJs3A/twOallkRydMmu3MZeXryOGPSSngVHT6a0jln/6vT7+qWZ+G5BgL5x\nKYGMThKWvnodhErcFJshAuvMsI7+79ugvvddzrwRUcZNrfNS62wzK70fZK9P\nI2j7tcNddJBIkbjBdfhgHzbGvjm3pKoozKPjhCZdfWQBuCzJc4l2ZFV9IvWt\nFtHt\r\n=MoZf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDo4Wq2yXIs+skkssTYmKeYNYAEU6Ct46XxSAA6MtjOPAIhAI19s3XBaGf+jIjCIBav8qmblCQ1hL5sHMC/KkH0MWjE"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599139174-7d549962.0_1599139252950_0.025832578259970207"},"_hasShrinkwrap":false},"2.6.4-next-1599139273-d01ff34b.0":{"name":"@xdn/core","version":"2.6.4-next-1599139273-d01ff34b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599139273-d01ff34b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-RnEFjOKogv40NDsVY12WprgtpkG7WnyIhnUbBbxPi0aTnqanf8lSz6vTQrLfj5QSl5ee6aXJQyGc4o0hE/VTVw==","shasum":"abc39c258f8c7b2f5c3682edad01c43ed282dd70","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599139273-d01ff34b.0.tgz","fileCount":137,"unpackedSize":596658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUO4bCRA9TVsSAnZWagAACR0QAIxyK+bQx37TJTmMG9cZ\nPZHZOosSau67qZ0HGqfU18YdTxUgDEH9IqcFIOprY7QZX7y7Hov/NzJ6VXtf\nzkcMkChTdrHjmrn2JGQLoLic3/94P0MLYyQNEdKRp3FBhTTPqtVt3b6YIXWl\nUf1/DBIlIBJrCphXaRCFJTjmjWiswpolyOiRI5ddbyN+qCpkekitEXuV+U0x\nsEhZ/AbyYhGx0a8ql4n/3ZsQ21pZjINNDPEeTxTQnx7ugvQlIzmMwZRD5qQl\nH+8m5cX6AQUQGhmyRgDxWxZC3c366iiQeoHLBpw8HNXJmNHEFCEmfFev0XMH\nvRxcWuhWVePKaj8PbBIL6DipGwla8kKCPoz01r1dQ0U8CYNhca+I4FaBCDCX\nEqrmF8FVLbd9AmgseaHWV0gCkCiQFjQMU0q4uCSL8OMXhln62BZAXYKFaara\nABnzmm6auOO6U5De4BiTNBEfarDRD5tXdpNEq2hBxj4F7vdTpPZO4wnoQFne\nbznKpO6sk/Q8vLRrGl2DEAy/XutUU9QGRnRR6OjZq0Wc+t1KV8cyan4dISYI\n5TkxPcexR53ao9gxPd0NM3sAUgT6VQ2xOBlK3FJeq3SEGIifqRiGVTSmBVYK\nfrl5VFR1hqaAu/7RizO0PwxwstWhAj6X4rKauqcjcxQD+FfWhah0YEBstTIJ\nwR8c\r\n=luLI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfaC1Cv4bXbKk1rgeiblkDLSuQXg3Cl1tqNP0N00xsWgIhAKeUvCIR8pYzWsfkTzuezVx9jbn5Av9OtarNIY+zPbe5"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599139273-d01ff34b.0_1599139354957_0.23169828511532975"},"_hasShrinkwrap":false},"2.6.3":{"name":"@xdn/core","version":"2.6.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.3","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-iuf6KRlS1HmlNEFLYYcniN1zpD82Wv34DJ6zmhUkPZlNachHNwf0CCwyq/zkRuVz01L2YHHVGL9dpSUSLU9zzg==","shasum":"153a8e090440617750a1d051f2c6d073e6a7146b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.3.tgz","fileCount":137,"unpackedSize":596507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUO5WCRA9TVsSAnZWagAAjhEP/isPoLxCDNY4zwq4YiHG\n0zTYw8HuQv+jYzKIf8oLv6qheUyRakOeZg9ZAkNDr6md0QOPMO/S6n7s6FT/\nQFKa4sysQXs1KDoU4DiJC1LHCoGfvDfUyAUQLTBIR8o0bz1IRBkAD0SwWvrz\nrLKGnPHg8H1OhPGRu4UdLRBmkZgYBKIbMcEFNROJhtnl/xHsR2/ObR/q8fTk\n1h5vErf7j+Lzz419nqJyYiAvzw0JpwEHp+XQ1siunf6+flPyN16eUwlc0QkP\nW9HhnlFRj/Bldl8NJnXMMVxaW92HBV8c6fF+L1hO+vdJFKFEy7XyMAMB+yhl\nw58M8gM5wIPuRvojHS1CRa6cL9C9p35WkrkZ9U8wrdyWfeHykDJ/sCLhgVtf\nOOdlMk8HIxtY8tdMzrlTJZykau79PaxKHJwhgankyWwidG70xoJH5j+xdiyY\n1uUrAE86z/3HGQL4H583UnP3AiJigG03qsDrxwQ0S9sE6Ss5A9Q5l4G7xiLq\nc/xgPjFMlHwkEEXpojIaAy5Uo0KStD0fFD1UWwb5GpUSKYgQCfLHGMKhWFWo\nQ/A7C3Xc5G9R4iThkr1Ff1EmYkizMLZXVZSPydwGleAIxVjoXKZqoXhJMLV/\nluKnP9HwaPtvHv+yXogNRgf1zFeqLg5WyM66jTESZ+Po49QI8iv9vfvK/2d9\n5bNp\r\n=abHd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2GfBGYDMrSBMzv2Ghk9BkJVkZFGBknWyi7T3s9eZ4mQIgSYxBdmWEfgll1r3HmlKSy4KZzQ3FmsYhPXW3yAlPClM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.3_1599139414154_0.1391094893017475"},"_hasShrinkwrap":false},"2.6.4-next-1599149468-786b16bc.0":{"name":"@xdn/core","version":"2.6.4-next-1599149468-786b16bc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599149468-786b16bc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ksb9vb4ZPGPEnw0jGWfD0XSx6aupvF6zVnwH32PCM2N6EPh0Tr2RQKoSCa/l7xGkgb4W+yYaPdTra/Mr39qU2g==","shasum":"dedf50a83a49acd0fe3b0dd51357c11078781c73","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599149468-786b16bc.0.tgz","fileCount":137,"unpackedSize":599220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfURXxCRA9TVsSAnZWagAAdhUP/0SosnhG6f3JVkqRjH0m\nSlPi9wfi4Fg+zgnMyuzn0EL+V+Cr7z/7xfN4kDTboAIeEi6xkaI7anDvVmeN\ny73SQNQmNmX2TqxuO42Fo7xZFUWavK17ueH+eAkhRbO6R/bNNz8CEpyVmeGg\n5d9xYx7R/kFfPCYvnrFTPgFIC4q26OQ5YdqV3n0jlM+Q7uxRaNDrteZPsIXx\ncfOf88kldj1OQwYbwzLT815j4tzvPtEm4HV1pzUtOgnMkcmsQPmTf86GtFjU\n6mTEnY78YOKulj3CsBSGlJVwLVrX2L/PxrvAbt7vervnC1axKCBR1Or8v8h1\ndHXHgTDO0FVTx2mq6Wvvfec+nAAISe1KnrSBBVjMWErn3ArbnhWRE35h/htf\nlps3pU6WeZh8fOpzH4jdDciULwEbVqg84ufZsi9kpdQOrDtjgOVKNXbtDbW8\nLzFgtL9Dpv11Nc2yuKBk34AUewsXoXNyygGRS6O6xyO6RkdYhcTjt5oPhWAi\n/YUFOlEfiNp770BROqpS6qTjaCWAWqNJpvalZo2FzHyNxy92ss5IMcI+ruzf\n10MSEzpaxRq+5DihseYNERhv93lic1dXdWAAHvRLdzbqHue1hDH6MR94fpSd\nBzoTKOAXJdqNKwOf4sbk+Wv3ML4StcvzwGXLVEbqcM0Y/ibIHq9AoQtG5nY4\nmJsB\r\n=09Zu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDHCOkmQV2u09cbjTnJ7NuccYdQdwNWfoNEOGT6PJ5mGAiEA+YM4gmpohLKYIWg+eOWUVT0BHtABmA5wzJJHFpN9xo8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599149468-786b16bc.0_1599149553200_0.5903079584930979"},"_hasShrinkwrap":false},"2.6.4-next-1599153988-9a02d408.0":{"name":"@xdn/core","version":"2.6.4-next-1599153988-9a02d408.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599153988-9a02d408.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dHwC9/N+MWeSfKzxgDOIhbklKhn/ZNuFqYqnwJtAslcgjRRBle9IrQ3XFGTpoq+4ffma1hF+G7SXFBfgsiQf1Q==","shasum":"301f9a0cc8ed768d9244c41e81ed1f950e362ce6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599153988-9a02d408.0.tgz","fileCount":137,"unpackedSize":597548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUSeeCRA9TVsSAnZWagAA16QQAJ6/y2KRTLfhgnrVnAHQ\nJyGtvJ6bWPjAUCv6dWzACzqTDnNTGzOsAFlqdQHLFnk+oH05D0+4DuP7BrPy\nJPXggLLXKAcp7rk7zByuCML/Euw0TzpN+RGKRBWVPWDEY4Ox9sPsAihl1p9n\nWVU0BdxN61Io52m+SYT/ZabhwLqBNT2jdRfWmhfQXlEnEOMutM8sBX8yPSM2\neHlmihfDAOenJi5RHZh2DVVN9KISAkyktJU6YAzuUWR3df5df/7ZUtmQ0MSQ\n3AQwcaCOVwu6mkw/PNwqqkba1n7y4MNXzosjvRYUSqWkFe+Fw6jeMVSj9cJj\nnFrtdh6W5/Jd2pOp2zP6von73/n0RHl11yX4eraZkZEaS7FrO2PvHJa6qMWM\n+O7Q1chmACebzCigpPaABUlknFYZnzbPoX1sBRdKwOhToFp+0Qin4Fpzg/Gl\nrDN2JMUs2rQVi2XCpYPgvg+Quqqs+crFeBvrAg3WBg5qsKUwTtiVL/aDNzC7\n5Tafxxl6UhnIYBmlknh382ntIoWf+s8BaHaPGXOQyF50ZAkK4YyEfrMCNjtx\nTgzyEA3LRZpUFZXVHRgREr5KuJBJAMB4ODwIZbFk/pSgthD/cSXedqOy5efm\nhyQ1hdk6SuYfHC7fsrQKm/y2ooIxmUZx6d9Y4TktctkQjG0GU4weHaMmKERM\nGxlg\r\n=UIV0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKbGtiMwPm1cOggNjRzlFIBFmg7Ys8J64fQn1SdOTPcAIgXM1DT3uCIUGTSAnK4Or0EAbXJJGLpMevPAtZIdYNzVw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599153988-9a02d408.0_1599154078081_0.9969484287398731"},"_hasShrinkwrap":false},"2.6.4-next-1599154085-5f50f7ce.0":{"name":"@xdn/core","version":"2.6.4-next-1599154085-5f50f7ce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599154085-5f50f7ce.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qvVOTRkM/PALiMo/jHSwRiS9w/LZgagHAGfJPo3KOVT3lyc7i7PyvUw+prhJk/7w+kYni1OKurf+GcggpRsFEw==","shasum":"066373f8c16dc78cce11a1b28e8aac209f8bf69e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599154085-5f50f7ce.0.tgz","fileCount":139,"unpackedSize":601945,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUSf0CRA9TVsSAnZWagAAJMkQAIQrZBsdqUlmDYZzIF8S\n7SmZP7DY1AHE7WKIwWMIjiKvVw9p8QDqvN6pxzUwTb7GVixrWUHRGnqMlkNx\nz2eD12EfRXoCBrcO7KZrMnLSbuQ/16AraQgDpBvSDtjfILsgpAtB1c8NcZCP\n858sonwDYEExBeDi59mUtxXz7unVlDBbh92TRwQ8Wew2iuSpeNxkkhESET7b\no2kqTRIgn+kIvaPc/UFKa27fEGthhEWb93ykNQHRMP5z3qh1ub8ImHMbyzmL\nY0nNLO1fFafjzyfx+HL7hGDpvtQV0TWIFs0hh2xLL1r7S51+5A57VDFEe7lR\nXo62XPuE+h2UII/S2Jj/OpV9xAOv+W582KCVwlVwhT0J2yqJG/afIRpgL2Kk\nMXpAllAxd9x03bfbov25rjJFIdIaETwzdngRGAy2259t/w01V7Jz+JvHjPpw\nWiDi97LHH2juZ9JBZHsbphGnmD9wF/RwcsPOfm3AhFEVTG+IQnIZ/eIcFKxJ\nPKGNKmLLcaAPhLKjHN+qHWsBJNgy55tW3GZHBbuL7VakaFtG2ZC2BatuvF0b\nC0FwqGdyWu+tf1qHcD/chKc4AY63irboT18HOuJDZdukf9CBsB+aSqZzbQyH\nIMRICMZLRG/iVyR03jS6MzRRooa38zVLixWu8Q9jyeBdoFMgaQMgoxrfJdho\nwGRz\r\n=VyQt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDA6yGjG1enPWz0V0+woX4EdgrK0/nExjLMkWHITzCAQgIge2o7uAChWwfPyglmiINbSwLzyMyqiqFFNpuXx5HI/0E="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599154085-5f50f7ce.0_1599154163977_0.12953721973866794"},"_hasShrinkwrap":false},"2.6.4-next-1599154088-5f50f7ce.0":{"name":"@xdn/core","version":"2.6.4-next-1599154088-5f50f7ce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599154088-5f50f7ce.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7Ewq2Ogo1Vi+LSNFvLCcmluZdcGcs1ftRFnELs3JwBKNLKFI5/GY8e/huAGEXbbqs6bIKl7YFEoN3HeIHmHxnw==","shasum":"660c8065b9979bf97ff78869f144030143ddff11","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599154088-5f50f7ce.0.tgz","fileCount":139,"unpackedSize":601945,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUSgHCRA9TVsSAnZWagAAIUkQAI4ilK+qiKSuSVJlqk+B\n0yf4itZ70e8BeB9fFQF8tPKXkdiEjV8a+Sbu3UD7pH96wHlKHwYUKFMSTXe8\nQux+B2PDmGdzFQwLi+c/PwtWZkPcCsj6qa1k1WZrSH0slnkxDxBq89p1DbLg\n84T1qvq/VtGV0PdnKSwRHcigabIa1BeDBRUpmWDhxbv/EJ2d838PlDi0cF97\nJhvPQh6qHL7wle/BnG1k1q/fXilt7jdCvdvsDIOWHE73B02ymrZ7+xyxsRpl\n+CHDDEGFURFnmenVulOvAXFCQJBz60Q/0DjplQDRNl44sgKhPac6cZSWYsFC\nwzLeooICnMvWSC9zAZYswR5sw9CkTO2VaJWsWY7REYY1xJgn3exWq53pUTpq\n/ZvY8rxwVA3QvaMJbVguBqlESq3zeWvDOJLx1aHuxREqL9rPEX+W3qe0hDMv\nqRUyDw4xG/Bkli+0BzSjg0EyG4+qGoEiS/pU47+MG2+jefZ/zRGM7n1v5r6c\nrHw0razCYizA+ueGRaNdqXo3+G7us1BQChesIqyn6kYHAdEbs5l2aRgs5TGQ\nw4ABEqAp0QmO7q8Rvv4xS+P7ceLnydU8Sx/lbrq5hO2ft60CwNkmARSoTCbj\nzGmdrAuSFWOJ1pJUhNkl9vsTwjVNZDGKl+juIsWzHjv0yTzGTNC3c/A70q6x\nMj3o\r\n=li3h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnbo5ZH0Rivff28lLc+RYjk2+tBeZMBezVd5F6V265/wIhALkdG12SduF3lXGMUVabG6DfLpYp0lXcdHlppGajv+yI"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599154088-5f50f7ce.0_1599154182712_0.44463123859031817"},"_hasShrinkwrap":false},"2.6.4-next-1599154082-c09234b0.0":{"name":"@xdn/core","version":"2.6.4-next-1599154082-c09234b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599154082-c09234b0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mk6xK9RZ3gc2GXD5iMEvk09405fjnbovrdAX7SmAyzOKOSJdKodmWxfhtMPcI0eL4QJoszhdvvbUsIR1uD2YoQ==","shasum":"6f4e115b985e6e7defba6347cad9008595811d2c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599154082-c09234b0.0.tgz","fileCount":139,"unpackedSize":601945,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUShNCRA9TVsSAnZWagAAkyYQAJw6YQoFBfke5eUniNYR\n2MJBA/ZZCk8R7RYeAfx+2haaC0uECgnvP98nohnU5ujYGl7/OE/bzWu7eDmd\naI31kaell8O6GfwppFGdQ0nEOjLvXAfIp5LWf13m8em4vNhZRdcelN1uGtrr\nZgmMxXiUHUN9AEGx1jRVAMg/UQZ1WKdOSZWbuEKnMfKLqi7Fm/r6sZrxvYJe\nKdZ7aZ6q3q21wMcpDc673H5uaIrEP4i5QQmnVGdwHLVswB9FUU7zmjJbWPaq\nYxVCPsjyA8LLXmdGrR6tmdNZ497tw8j7tJpNitZeJtfyn7hhU2bsgCN+OOgG\nYgnM7PeD9A0SdSJt61qUbajmtLwAot+/jTXd6pmtJ/5jbYtU/LOWcO/yK0fh\nXPOGzou89P5ZlZ3O7LRPtCGbZ+oZzBlQ/AfaDQHuXKZEmIl375vIEbixvAJK\n0FbTqtYOL70U4XCNwa/x1J3dCKqmH5Gv6lo8lEunhb99DuUJ+Rc/qFV38EhG\nifyVdfzQqKH+BzBfrCBHeE3EV97E8+qXAvvy5O5g1TTwWEi474wBvXFcpujJ\nAxq++tX0kzMTdNtbowrVEL7Gxlaz60T1WtBPmXHY9i0K7BQMQLP4UTeqZPPN\nOiCLBW7A6HsQsGty7/hcIAC5oRf4oKfWjhfrRX/d/lBcu5fQ+ku3zRB4d2tR\nz2IA\r\n=0Cha\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVBJEJBd4KLhzXB2LIfSGcTF3jgp25FEmE5H5VVSutxAIgAS+8fUUIe+DGIP3WZX+ievOcIrR9+7E9frmJNoW/GOM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599154082-c09234b0.0_1599154253235_0.5741717446415207"},"_hasShrinkwrap":false},"2.6.4-next-1599156300-d9a65406.0":{"name":"@xdn/core","version":"2.6.4-next-1599156300-d9a65406.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599156300-d9a65406.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-o3UoiYs0t7rOm3nDJcAPqlsmeXBQivfjNwXp3s0Gmara3Gsx2IqavtxEN/v/DHWHoyC98hM0YUXCeXE0P2c56A==","shasum":"c698e3dc4f4e4bb2b06710bca54f51f92683cc42","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599156300-d9a65406.0.tgz","fileCount":137,"unpackedSize":597548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUTCwCRA9TVsSAnZWagAAFRYP/3gBPnDYAzCz2YQC38bd\nYXgFELBc3REXFC+yUWECOJQ3h1CgMArJUZXt85DkCOJ8pkvZ3EzfIxl9QTzy\ntnMOPZp5535+K4f+gbhPylEdUqUcmYnKjA1w//s4CJLneSN5rAcFs5kOCgPh\nGM1ZP9Aff8cZA8aM6y6xkbMoqscG666JSSF7JD0MBOm8Ww4sMFnsU3jLEECF\nS1s44WPmU/PATsnRDleLIO6aE+A0nVXkbU/WkU8YBhxJcn6vmvt8DgfDYm+m\nCQD0BBgjbe6M0G2X5OTOuqPUuoJ3vWqCbxo6w/vbGH2foqR/q5wA1qonxX2s\nVWlblLgc8VGTYuy56onuXJ+qAaKM63sc0OifGnGodaWUGZ46wEXCDPLYwqxP\noF3UktupiN3rX86nohkyLNJs6NvsJgRdIfutWPUZftPuEeQFnrFvTcDtGClo\nbs9yY9+TXgyeotQt5dCQoJqGtvjSeicIpunmZaAOI/XxW0S55cJsBbVGZEPa\nV5MlGihNSeYFquEVWJ6sTZnnkHDcu9qeqowUxmzSIrTro+fP9WsKp6YAp9QH\ncjz4g2kDoUJcooGEeYJstc6piByT8YWkcu9TYwpIrHzLmGRiTaKB2SrgIqeR\nEAFKeDnO2rILlhvzkQWLCM3dNrbSX7X4Vbyx8umv+q6mXMfodkGyjZuHnNon\nsOWd\r\n=dd+B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDhORux4cRfVsAxbyPh1QH2/U914nFi7UtWjZ0x68EhwIgXF1Tf/ZnQuBWh+feLIXSW1O8nZjzU6ZkZ3OFyafWqTg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599156300-d9a65406.0_1599156399879_0.5920999884565326"},"_hasShrinkwrap":false},"2.6.4-next-1599157276-786b16bc.0":{"name":"@xdn/core","version":"2.6.4-next-1599157276-786b16bc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599157276-786b16bc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FvZ+TDX7wEL1j9Ly1eLArVsTVh7KCAMnB22cjScWXw+Ui41Bh7C/fihRcG6PtEHDhTlRh3KpkcKZJYvgm3GQsg==","shasum":"30537edf7071ca342a8691da56a0e7957da05d97","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599157276-786b16bc.0.tgz","fileCount":137,"unpackedSize":599220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUTR3CRA9TVsSAnZWagAAHUEP/R5ebhIEw1HHNHRzrBAA\nHW/8anrMo9mNXsUKobJOi65kSzuuffAzoqYVt+MOvon7NM/SOwlvtPK22DfK\n1Z9iblCUt9jo6R89FYY7j94LYRvnesBHtdXkEq5qLo2me8H4dkUy36jAEnuL\nqGfkpEg5KyCG5968Up492nf7q3cbtnayF4J98qFrx1N1MNFi87wbAjF1uiUV\nZNoQdQIRCAgNrWVjQXkfu4PR/dEmPh9hHVGglUEiq6uhypZ6SqJxjUzrTjhr\n+iPdWOl4z4EDADYDG8Byac1TYeq8/0QVRyrff9YZlZQEvtBlFdmmNdhvTiw8\n1aBX3vyZ2SOUVc4fitl5JKlHAlvGPVcKvMCTYEAADgrzEcHbT9oCaWGEyQ8x\nQqKES9MzKj4ASQ4TZd5pJbdBwWqQ/ItOKBQWUfjmsTJlcWJ/vfiTcDfV1WRu\nF/lTCLjG6Z6xl+Bs7wmKOWX541W0j71GkCXQf5mTYW70ZM3CU5lhzFDkKozW\nBIYO4T08309D48NSbsr55rL+zlAbsprwVQ3M0GXYL6vMUsMrMUitG0xucJnX\nxOF/Tug9P8qMZVDwLOvRq+WH6pobq+nYoT80yLIsNE9+hpFjBUYXOhRncl+f\nGAXFsGFN4453H8b8HOSG/RCxmAfqLvT0g48SWxtizigQjzfNYKj5ilgSZI+W\ntUs9\r\n=AUR4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDetawwpANncktzK1A5CwTxQwn/azY66VvmcAkIIQ9DAQIgbf/j0J8uOSstyOVje2QD3Sh+BAnSXJqzCULjpxbNO4E="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599157276-786b16bc.0_1599157366662_0.7267608062031263"},"_hasShrinkwrap":false},"2.6.4-next-1599157823-bfc603a7.0":{"name":"@xdn/core","version":"2.6.4-next-1599157823-bfc603a7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599157823-bfc603a7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vqm3r7hfsImeSQXz1LKZmALBffkaK+QdtFKUgksqVHUJu4ZxdRCvDO9PhnCIEDoVynTLP2A5P5N2sIZ+SulsYg==","shasum":"1a5fa1b49c01cd0c468c6c5166a1841cb5a1eabb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599157823-bfc603a7.0.tgz","fileCount":137,"unpackedSize":597548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUTaTCRA9TVsSAnZWagAA9HMQAJXU9EPssQ1Ak914bGd8\nl2LlcjLjbGzogLV/2qmg2F0IDqiVl7gsqoK0CAIN/RFS7PZEq+nGzMmPI/31\n5LlQqMC2i+IQiF8fOzdAbB350OFgactqJKV0yUnf8m3oPuHiSp7xFoFa+T3q\nS8kbqoj/KIZuTIrvx07tJl7Ra1ugDNjlV8UHqC1uf8np7kTRQGB4X5WFC/ma\n+LgmUCHLAZlEaQu6NDxq2YxHsNq/Py6eLIcaRijHnV/0G04pjHnS+IBD9aa8\ncd8qqc2Rb5OXtDk1YMt+GcMnw7ihg6WL+UOyewnS8U4P3M0EmSnfKO8k179q\n/5AYStPqz9BakD+We+TuZ5533l0+Kb6vWfpSGfnU+KeyuHhJUy23JgoSezxM\nq0gcPDqBqcIhPPYhd2jF4riPq9Kttx3UcRIl5diGm66+4BopEVrZNYM688Tu\nPsaeGqTEPT7cS/3sRaO1J2Lbynvs24yI/niyD8wpXa8PUy747Ab7NXs3sU6F\nKAyKcAmZ2RmjyoFxcX9Sg2EkhuuWohTDhcuLjU7aDUvG5ljXXItXKSUMolbW\nYQtGdDgNXVkWiXDPKlnxm44PIdGceSN+gDMZ+qMqsiwlG2JOTphwFgOBSQxk\nF0atOXnJks8wki3Afz/FxjfsAP6X2A74uPQ7E1nNYsmh9jyknc8ig7MGXQQ/\naEIo\r\n=Zs8f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCe604ZDkuJT2chD4xZHYnjLea0Moq2CFKDV34hkCWtbAIhAJT1JcBvfjyu0GZCmfswK1ULXpn8fiunceA5YFqztOSy"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599157823-bfc603a7.0_1599157906840_0.9823779072432761"},"_hasShrinkwrap":false},"2.6.4-next-1599158958-d6044d99.0":{"name":"@xdn/core","version":"2.6.4-next-1599158958-d6044d99.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599158958-d6044d99.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8HdBxpCl8hjyiSGf+8km7os7cACZYmOchocN78WTEnPAgbBDXaAvPopgiZqGlZUQ8mCkznSXmMxWVGUGq/9d9w==","shasum":"03854cefde394a60c78bfa06b6b1644975fa90a9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599158958-d6044d99.0.tgz","fileCount":137,"unpackedSize":597548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUTsCCRA9TVsSAnZWagAAORoQAIwpT9DDCYVx5CCUXQef\njycXpj4W1ElDmb7gOOUH6BREPotuOvvYX9R2pViAvVZxp6x2W4t6bF9x/5An\n6nM4d6y6zKhfTyxfELHmz1mndGbc3vvupX5qighioh5gANayIw6akLwNHRev\nkPxN1wN5eTw1I17m92CPJMv4t5OmKu8oKna5a4R+w9fdQfXJp7Huhcye3Nc2\ndsdyEvN8Wx9/l0zcWaDbV+W69UVc4+p7oXo72zVn3P0GQ3Kk4Ip4e2CX4uhR\n0ctlNvtm3BmRf66YQ35+hw1k5mSSE5JnpMuVCaJPzVgiKbHsXv8UDCm4zVHL\nfQlr+qT9Nk1ewPbolvJltfddApeIqCtJmPu9T1IpqRrS4oK64/R+W60t1c1W\nHN3dxK1AMJo2jN/YDyFLp+IZ2/6GW9UDeah19xYhdbDNHrHvDw2FIigQXhJ0\nOVBTFHmrG9Cw2V8OJv6r2F/QejBWhHhRp5rtmtOaAukNfa2llzOV5Ov2dfMX\nV2/YXwxCEr4zrJjOkqxIawUYLzl8Ivl4Zic4LUq/ez5XxEGCd01Nc8rmy+m6\nPl+kuuKU9K5sq8ydK1USxh0lB9VkzgwFr9vibA5mV1nwPdaZRC64ldQWzD3R\nReca/1iwpT87Nv444DctW34YJhRI1vk7KgHM8N51UJ54RTg7vcAzmVZVhd1L\np1zc\r\n=loBH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG0kRIzQEMZIx125eyx7ffwHhr3p95UOgu4FitG3Yjp3AiB42Kq9W/xq5Yvcvx2JFGoJ6un5x0rHQU4SCOA8XISdcw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599158958-d6044d99.0_1599159041433_0.6133111925293522"},"_hasShrinkwrap":false},"2.6.4-next-1599161692-29d66b19.0":{"name":"@xdn/core","version":"2.6.4-next-1599161692-29d66b19.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599161692-29d66b19.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-6Mvg7Br8l/+pLNoYUZFUfg+6Ig7hNWI3XoI2kwjR5Rmiox4FnhtMbgsXGZXKBHkB/kcLhwzkj1qZutjSpxit6g==","shasum":"98c8e904439f6f293d1571c3acd87f9157e09a69","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599161692-29d66b19.0.tgz","fileCount":137,"unpackedSize":597548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUUW4CRA9TVsSAnZWagAA12IP/iGz/L+jC5GvfyLqfZoG\nIYr88+HzmzdQ0C1nHO+olOTj1ZgtwW8nU4C0sGDn/Cxh06yBq+HsJvkUtM5S\niMQjnK//V5D1rsEsPxc3ZBFO/6mjwKOk8r81tS7C6MOXWaFlBmpV5/TXRhpo\nCNgIasTkIrcXy7+kJjOc6ZbwUJXIiISvSQqSAGonSYPxtfH/9en27CBP7OWD\nn5L2nZZvefTuSVVpxQkbrWOa0rV9MRmuKmvp1iZuRdIQelK9CJ8p23+XnVP5\nc+TyhReYUS3B4hcPOiZdbypDmsPRRf3fCSRPzyFML4A7B91ATk9GWueiUfGK\nQ28NH3o/eoptoGUsU3737/OfBIg9WsxN1lL8c82gr1V65L9+SIHEXKc6lO5s\nW0gf8LeHjyWrD6y4vOHTue2e5locVonhV+PGneo+DvXwILwGuMLym2YLL8tZ\nrEKVvbh2VpVU861FXRKB4GZGfE8PTPdPJ6Vmytgb0oX3Yi7j0i1pkBl35A0J\nC8u3dVa/BikQbpYYWp3VCGjaevQFlob2hiFTsStZgGM3BKM99z9schZNuciM\ntcMjdGDrYq2WFO8Ju9yu6go/tC3LcfW1fY+E7kFxnidNeGgzWRAJjVY8aKT5\nQ1FG9bo58t3DnONw/4ItUBT2/9NPHU+nvL6/SVNMgNN0uuEa3ZuT0ci1XVhz\n09b7\r\n=rgrK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHeCLx+zWVVmKcfcxdHJtfMZFE1NUpwmF4+jp8ELYiEBAiEAokv46TCEvtHqFjXe+GE0cTZiNxqp7KUnNPU865UbutA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599161692-29d66b19.0_1599161784085_0.825268731690807"},"_hasShrinkwrap":false},"2.6.4-next-1599162124-569bb7df.0":{"name":"@xdn/core","version":"2.6.4-next-1599162124-569bb7df.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599162124-569bb7df.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SK7Ob+mCeCSiE9Tk6Ystq3SHNGrLi6/fTEue41k2ZIbkSZRLIuqVj/HH8OX5UvAhEn/DfrZ1u1islPQfz3poEg==","shasum":"6afb9f724f6c4dc187e9aa82af787d5d58b85b22","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599162124-569bb7df.0.tgz","fileCount":139,"unpackedSize":636768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUUd0CRA9TVsSAnZWagAAMBUQAJT6vFtoEegIXdelezdV\nf2IYPCUrKatwzVhs/PH2M6ZNNQK+FQe2wEyn2WWxoF/MEZ/LTeJ4ST302TR+\n48Frj0WHGZqMzSCjzOJxgJkme7m1RbTEek1WZhge9tT2Uty8ILrpfjkQZMnB\nJwWld6h2xwzhbMxYrQJ33yJld/rOFd/JL2XSCh0KHz89yHDzR0AtcgDjAcWK\n1lMekid4mLzw1+CuyUyjEu5nyqPVD8A0lkkWLLKlsr1RizzRfDAQVhRE9GIz\n95FEVNiQu4RknAamNtrjQFGoYU+BLXcKOH2g+RNNd/M0nXotsCrlHz2uW5vM\nLRgCBPGetjtLq3a+or0yMiWxBNP+GH1T5iEBzgLmC2AvjtwOSNFAJl4jepjb\ng7rUainf8FY1RWoTVt6ys743s8ETsF57Qdl/GXnHYcf3Vx+hG5ZBbpjCAYos\nge9JNfOw5QwDeVh2eEKS0Z6ZdAyEp8pJGTUDwUfU4rbcvEa9DizbIUcfokDz\nDZpp1z18vex6f3COnx7atfzKkRV5DyqoeIB+6Ouwy43XFBWfwgdRnxSl5eie\newb3Zs4wTHYP6YClfCImxhyFm5BjnHaQDRIyFkliWay5xMTg6TT4xjcLjx9i\nKp9YI//5mHUbEEazgybyxBuTufMi2/Y1N2g8FyOQ8MuNFVb8GeB/ir6IwGeo\nhIHF\r\n=aLMQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcw/dePgOuRsm0Y3h/k/IaVqdG7OySVL7yX0qaT2NL7AIhAP1klItCBYoXVOpi9sji1b9GZVHja3tlRCPbYPyulUHl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599162124-569bb7df.0_1599162228177_0.20553668541946735"},"_hasShrinkwrap":false},"2.6.4-next-1599162938-d11940f9.0":{"name":"@xdn/core","version":"2.6.4-next-1599162938-d11940f9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599162938-d11940f9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ZSBXhmVbdWnB/v06e0+xwzC0Zix7IJG/Vm1vwmrq6wQn6INljAW7DGCL3u4xRl3Qx/GVAcQaKpzXjxvt4tH48A==","shasum":"f32aff8450b79e544f84bef7ed0ce54f79131060","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599162938-d11940f9.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUUqOCRA9TVsSAnZWagAAshoP/AtVfrUfWRmlM8vg33Me\nubdqmcOiqrQlLK0HtnrkaSAmS5RpulCNvscUp5OpW2CiUMptlHnfthM/aGnT\ng7c+kQLVkB4A/MSGI/S+utYDzO+p81BtmktjTnyosEn7f0U9O0b/rF1cwKXv\ncuAsSGckGlhS61fgiV41dKa4kRpirBEsl1XuP2cxf585GX1KfCbqX7T8lyhU\nWJWRM3e00fou9ZB3ZmKvLcr1wsEaZJZlIhvVAJawNhDG2ioObM/aU/MYiTcv\n2owalJgedRePtWViwlJpQHY25yg4aSSGj4JDhs0QJ9/w/vl4wLLrI9waaR/c\nP5VqbKWSRLnOor2Xo9P0iFBW4AUDAgM6pIaDJUB+L/urtOvwA/3qcFJcz8Mh\nlM8l2gXIDr6db2BXFhr7dO8aXPwaZKk5i367r+6Q0i8Oj7nEAGqeitRonPrs\neFgNm1ISJLwqkGS5Kt1ISFYy07ssYyH5je6Y1N+Y59Hmy1az37NPoJkQAwk/\n9+Ivi+iyM9Vhq8B2QUyZsGLO2NRMsZYIpU7fWzLt1YbgT0fOeBgoFuiupOTD\nN2PeximyB1D0vD6dSpEe8QtoLKZ0X2mDI2yjVntInrxhevuhNs2xl7polKRK\nOqCnVRDsG+coP67xjBH0WjhfPt+Al/iFZ7A9kHse8rnefDNIXOCGjsusMWQ/\n+K/Z\r\n=8qdV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfEIIClGJtgATFw88UeJwys/9DwueMu+ue7DRWgCOVUAIhAKQMcoyxoo9szcYwqUAalZIZXpB8p4u3V9OSaq/uDgsC"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599162938-d11940f9.0_1599163022302_0.7542500062123472"},"_hasShrinkwrap":false},"2.6.4-next-1599167216-29d66b19.0":{"name":"@xdn/core","version":"2.6.4-next-1599167216-29d66b19.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599167216-29d66b19.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qB+yXUJWufIN4bPAU5QbJ+QjnZsfl9uLW+7x39SP7LlceJVn1qeEQKlMv3vFgKOmy6HWvHVPdZePtGBDQrCw4g==","shasum":"249cca1414bc44947aec45fda1069ed3d72c3f58","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599167216-29d66b19.0.tgz","fileCount":137,"unpackedSize":597548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUVs/CRA9TVsSAnZWagAAeMkP/AnKXpqd/gBgvR4ECBch\nCHEj0UR5lXdEMfvk9R8NOIdSLrZedWd46FT+ul+SoPaB6NZoG4qRF0Tt2jv5\nUtr6mvvkvr8KmZ7/H1k0uW5S1dYCgTcV5snYW0xh3XstANGhJvmh/Mp/0CF7\n1JWsK/v4lK1NNAZYdiDrHDWE40OhregvARG00BloXhALmuUPxfYHlVYjmdzJ\ngsUq2YodGoRuDSSW3HnhsVM92vBDuN35fh4cta3vOg1i1mxq8HYtpZFBnfQT\n4cK5x1aTXxcpwVCWyou45gifLAMGz64lVN0qSFnthoiDXazCWnyqu4V5bNvv\nqd03yYDbzlEvILLf76hM8HWdVHDBKLccXfWlvbnAv0XMjVgmyr6y49bBdfnP\nheAdqKNVCf64usc013y163dbc5yNTxBYboZ54/zDZMy2DdTArF8n8ExP+meb\nPj1cMNU+IglBzEmIA16EbVOwMuLDE6ZeULrerlQNLs65NL5G04SBYLEPPX7M\nfrY1aDx6/n9aVqUnTdVFXprziTU6TLxO6dT8ltz6JIttIUOD5/RlcH1wo2uT\nBlBwbdu8m+Tm0OLOm79q2g5nQSaRnTtjMJo4lSrLGfo8uOBNxstOLWRUkJXR\ny465Yp+rtz9PflPzY8zam8/ZVRiloqDndV4za5rAkxzgouNNMZh2XPMqW9MB\nMhQ9\r\n=f7k1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFLhAt2XkrQxWxo5Ngw2wlrnHPYsfBl/phbgK9jwIGQTAiAkD2g36Ui1UMjB7JQJRjmdH6U4l83Zh+w+tntdoQIsgA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599167216-29d66b19.0_1599167294856_0.6731024087024502"},"_hasShrinkwrap":false},"2.6.4-next-1599170503-810a4a06.0":{"name":"@xdn/core","version":"2.6.4-next-1599170503-810a4a06.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599170503-810a4a06.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3skG/zPVB8iZsp6Q2EOm2EYHi4lPOAxAV+/pUdrSinbPqqq0Nd5Y+i2MxwhjKWYz02D20E22uy7ebGOkJPMVzw==","shasum":"10392064d62ce6cf5e6351a8771b10fda7125664","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599170503-810a4a06.0.tgz","fileCount":137,"unpackedSize":599220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUWgXCRA9TVsSAnZWagAAwYEP/0ff730BJSZj/1D/8bFg\nC1k/2g4HG1W4jfeJjKizyPC47XUscGDMSrJW0eMz+3CNQcfQZxyIz7dhhhMi\nCqLVeARLkfahEIwRNhaPe32jfFgzs9Iix+pi5aBllxWK1LEBceRYEnxSkz7J\nmulaVcufinAW08frkrmS3Dod44Aw/6keHALYlSWHQnF3WYgb5FkhZ2/b308y\nVRZJq0miZSzlvQ4gBohLu5KaaZLpC0c0vqNL84h6SdjIFOx+RercwtXP7mJA\nVg93iKUI8vQ8DT0Z+ZA/q3rgCGJqS+mytR1jNUD7X9jOmLQXZi+nsu/tGw0k\nzIiodH93SxC3EstpLpJ3RnsVDk0a+xtdqPIs0EwlT/VGCVQ+hXHiSU+hlXU/\nQqRJzFCEMEPIrQljeaSlmcmLaAsUZ8/nz1xeutinOL0u5M84e/gqwgXDDf4P\nmVKeX45+WE5JvVhgRA11FYV2fHoAJxA/C6TW/vrbsCkV5aky7ZYRh5HEhIcB\nvb9QBuSmvZFe/fUROPNTm6OYTKd+XodFagQ3A6aPFG7pzojgbE5v5lq5iP40\n8M7jAHzBJJBpqmXSLfjpaqKkeZCkjFJyGUU5fE0GPAoytD4ncdc/dPSzgtyz\nh8K1B0RJxGMDg9qAeiq9/qSo7sEu7PtcQZGdkNqi+KobrPClWbQ8oYpWqfw3\n5JkM\r\n=4zme\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRpwW8yNtcqKF2tFHydh1rjQsLCZiL/bdShPQiI2h9XQIgEPsljAMxwIwROTmD1jSvJSPCL4VSfC/aS7/tcse3C8M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599170503-810a4a06.0_1599170583286_0.1896946986190402"},"_hasShrinkwrap":false},"2.6.4-next-1599171872-7a66299e.0":{"name":"@xdn/core","version":"2.6.4-next-1599171872-7a66299e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599171872-7a66299e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XKP79o1+ZJe3A+wh/JntpK1pUdVqz7rGoKuUozWD3w89RSAEoWj7FoI9akEFmQ5vytIT1VIT4D108v0BvDLuxQ==","shasum":"cfa8d4a181c2913ffda0f9557a0d5899bf9f4829","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599171872-7a66299e.0.tgz","fileCount":137,"unpackedSize":597548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUW1tCRA9TVsSAnZWagAAcOIP/0sfMZ8Ockopq95fAwUk\n3WKDIWDOyz80XoXNy9B4PB12R8R6LVov6UnPbC7NHV25dnCSv7rbTPZ51h8/\nPzjB/Fk/CNYFXQGaKLIIW7G582YI1HwMx4goi1lHPFTtLW2x6P8WGlDIlkg4\nS0jWU9mQlV2uwvT7+aAyuN1Dtq1rF7tILzwlH3OPqNAXdRp/S/MSlroJ3Kl1\nHsA8WlH3WRmF+kfBRSlvfipMCqS4h2kR0l+n3Q7YLpaqAgI6mAWYdLe2o5Lf\nHhWcHyliitI9XtTU5uJN/Pk5Yvk0vgsgFSW29CoabqqsDNqLZCmVym0i/S6n\nZHgCLABQMzN0l5KPzM1Ko5aE1jfkdZjT8Al4F1kWG7qwKr3RVtzOzMnQOG9i\nCKJEnqWsdAlm/b6yEqNPFLV7oXKOc5bl7dwltfnBpXDfouyfef0N50ehm8fr\njgtp2dLd6hRXwlrmkzjQZ1T39b5ZkwjzHsnm14KrFUc8wFHXB1bCt5uxNDku\nwfCHxTfMm0XuhgYsZ1JbUIi2H0RqCDjD96SJq/VymL3LQX9tB2Raqgi2MJjw\nwp7ErsyDDe3ALdoonMtOLDmtjpP7vCIYCBmYYFW9rewqF3ua0+XsDiiNWZbM\nS2t5Lm157VEhx6fliGKAi9wxwUeabFCFPJlCAMTWRCtLygh5CwVGjW348T6D\nguvP\r\n=Hqgf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPsLZm00xM3Tm5ZkhhUswecGLYAfOGrOanqotx3Nsq7wIhAOODvBUQyr99ow2MMsMwyuBSDLJ/8/diMbcl6AMTS7ks"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599171872-7a66299e.0_1599171948801_0.8281077087916555"},"_hasShrinkwrap":false},"2.6.4-next-1599172236-a7e264c6.0":{"name":"@xdn/core","version":"2.6.4-next-1599172236-a7e264c6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599172236-a7e264c6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FNQBWngItZB7DnpBKmRU2Lz6E63DIosPgb8pnrlvjZqXjL4GYEp8kHrcSQRpDjxlqp26cdhz5Dy0Q4DnxyesRw==","shasum":"af8fa90de1953cf24b17031c76abb83a0024f237","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599172236-a7e264c6.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUW7jCRA9TVsSAnZWagAAiBMP/1YeuXzTxTBNlMi+bQf5\nxU4UoEIwEm41yTB55cSAy/e/LORn3YR1YiPJlcnmXNuRaNXWE8Qje+uUjlim\nbdfPwmLoqKN90abyZgVJcvnOigVtKxAADMV7vTg/qTcem8EhAaC9yJK76pcP\nZ6Dmfb26OSAQ4X6oq3/wSKJanRM9MbqER9KBq+3qoHq7pw1atP/uSUvVzrRe\niLeNjICbdjZGA92ipAJld/saK71YCfvYcrM+Ps2RqwBjPBcXXiy/dnMMO6Ol\nPGtSVBFvxfYWCJ2oMH8AaiI8cp+1UHXpP6blAdgurzX7bbfFYtRnIeATZk7y\nBQI23pnzLSedyDbtMwYt0KCLBgSKhPtXV808R8iO4ni7Sk69OTveTJpub1JB\n+26yULBFGGGAmOzxrGMtTrbfWstU4598zissMoeOxI88AdkkMFjrlqZNvf7n\nsBKHEedPPvCuXml65aiP74fVFYqy8TbMPDHeoIGGTJVB8jXtB1x+pc3BTgvI\n67HKysYUwJuiw5MUYPJD3gl+3Xq5OHcitZFMLu/UpfJSSKahTeVUsZHI6i0p\nzqeTOG0RM7V0wVsTjds5DyewnnW+vid0lOiXqGJ0kqTIhNULByNxpJmMxm8n\nv3RlgjiAamT2c43y/YVeLa85+An4E7H9bhPAPWk2OmBCsMS/k/iu0wRvrZ5W\nXRjd\r\n=/6nJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMLqjEBKhjfuUC7JPuYk/qpySQt8vKpU45uNEU58KbmAIgKfaGdZV+19VaenC49enggE8ZMvFiinesC2kzHK4OgQ0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599172236-a7e264c6.0_1599172322658_0.14779804196435165"},"_hasShrinkwrap":false},"2.6.4-next-1599172942-bcef090d.0":{"name":"@xdn/core","version":"2.6.4-next-1599172942-bcef090d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599172942-bcef090d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XIjaCnJeO2ASW6acqxWzn3CwD/hlycL4jHBVXI0ZEtCyU3Q/yryXoGXXCm3YjaOYNAcVNiSsDUbLFHiFLSSEUg==","shasum":"e9666eea9ce8ff5f834b090e651027c6d3dbdf28","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599172942-bcef090d.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUXGeCRA9TVsSAnZWagAAXA4P/Rzcrl6sNWyKDrn/jFbx\nTPA/MyDfhuV/cFAK5M5FR85dP3b4nVh9RPdy+TZf0BJdeZCfLXeM4PJmbJCu\nfZfAE5Szj0AMex1zGvRayhm/wZwTXQ7ezX0CVL6eZbT8cfxaMYaCKlHdSeVp\n2OFaEaYkFoVlGjgb4mW73q+CSNDqU8HsKyh4NoXI3wNxgHFWb3iRlTa5xCm9\njGU6xnGvuQOPNt0A17seknQo7yP2xIqcWz2NSdo/mmHWYIrVWTNzRUR7Zp4p\nAh9nj+pAM51hrsw42HmIzexvdzF3z8CGCtuFE73Kcnal8fy5vKT5XVkBr9lA\nrd2bqXkcFsy0fMtXdA2AcqqXYBd0QFddfgo9f2VbokqzDe1d6tbM9oaWp0El\ngDyGW+WM/KlwZKLtntNEzPS+X+9tbaw6hocD06zCZovCGWQflHMcqbcsB2vR\nOnfHr6S9F8RY9pM8aaipJiXQ9qZEtLaYBdvEObXFzq57TL2+QxAikCkBoSmN\nKk4koghHIK80SBqWNPLYWqbjR3RvBQnKn+D2sLB0bwEkAhEdHCZDC4+QNL6J\nl9TSS359c4YD6Ln9fXq0rHXLe/knNvq9iC1rwTZyaDbGJWUDTqBN3WcitUwe\npY7kRyeqxaAQK8j0RtMXEl8+zxW36+oq4sacuIscptle3sKyfVFXv34cdkAY\nhAS6\r\n=xNYw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAogkyOIKoy1bma3qA0Uwl+ZRYoBXNF4V0FNYeTS0Y1DAiBIXJtOJjjQzmBwl9AjrxpsciutUo+MKe0AGoYCbhlSDw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599172942-bcef090d.0_1599173021870_0.7474183447960301"},"_hasShrinkwrap":false},"2.6.4-next-1599173355-64f73b10.0":{"name":"@xdn/core","version":"2.6.4-next-1599173355-64f73b10.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599173355-64f73b10.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Oqj39jirxjwci08aDAf9q+t+pA5cjElQOT0Y1jzrB/sB63Fg0+wreE5n7gSmOvrZGDTPiOqS27q/S/BfdAE8rA==","shasum":"493105f3dfa3e689a58e5cce40cd629e0a41ffc5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599173355-64f73b10.0.tgz","fileCount":137,"unpackedSize":599220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUXM3CRA9TVsSAnZWagAAZXgP/Au+W7csKo5oDiUOXwTx\noez7U7gY5x/F9kl1rQe9kmFjtLjgb24r5+t5twI/OltmnJap2oDx32QhyMl4\n0eib8JSNnklpEFVnUaW/iwJC+B86kgs8wygf/eLXz/DoaruHjSHhSGPUhrr2\nl0vzlH+HqMJPK3+5Znq+fphWsffvQW5AomYAFT0w9/QxR8zY0fDgbkKIjx9g\nFtvM2VG97XLhhPoLgKMxN0DfGXCIL9bnk+nwaXhpSyQW/VyY7yj0rTSP6q+1\nlBNhOVV3+D9eY4iT73ebVM1WLUz2g12QA8k0fHhx5XqN7jp1b8Ecy5tIwypf\nmvDPRDLwopz4aqYm/2fic1GqCTA42IO7wdHo0G0I+QxDCFhZljcauev2+3Sj\nz5oHh9WYGOlYxUhm2rJJx7T4MTGfIfqmy21ACNb0b6aBnp3Z+TZ+RbmRIgKg\nctDuaCqMOlwVb4NSu/mI6KvtSYIna8DaclpyhGhNDvSZg8J7gCpLu/5ex0vg\nAygyRpsKkCkYXQviNL0dYS6to3fCtwLX8RmPZbqpZFV3enAUAGeBYK0WCp03\nArYGuH3xfdCmQQRGvun8YL8fh/oqZCRhxY2P4fpAnT0xWNqnhTssG5rRXy7q\n7zMCF/fxSQ8/1NmryxD0eHVHS6qNXITeqHeA7eWOmjBWDhagtriawsWY+Uc+\nTASx\r\n=H3zT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1kz6AO9eqanFJa9VJytUtPnKQalVhjnZrcfekshxRrAiB8u37EpGcokldgSgNo2+8pcrM0hxY9CDSvrqHC9RIW7Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599173355-64f73b10.0_1599173431168_0.09967270437631259"},"_hasShrinkwrap":false},"2.6.4-next-1599173847-294da3eb.0":{"name":"@xdn/core","version":"2.6.4-next-1599173847-294da3eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599173847-294da3eb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pziPB6vUiwCAU19lb9Eer8oY7jtDhG11qfb85Hx6jet7aFzn83hHXNeidXVyin+iyS+B+wVsart5lrNhofd41w==","shasum":"67d6751064730e8f13fbb9e0d7b8cd1fc56e1d26","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599173847-294da3eb.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUXUlCRA9TVsSAnZWagAAggQP/RwrGu329thNgMu74PPw\nkPPMITjBckpGmY8Eua8wC9cxJ6XSiULSdf70ZIJgduXHL3hgBRWg4CU90GmA\nidT3QjQUfX2SEMtswOSswh3x4fCHsWlvodCw23hz3wxUwcgvk3yDhgvkamei\nCKCYw24NkpnCJSn9JF+pXAaJOIou/5bZ72HFwUHdqKGxBBEsVX1/JUEbQI2a\nMdX5Ra5gYkJPEINw+Q4S9lsmFPykZ+N2NYwK/iAnJj4mKkIOSdu+PVB92DS3\negUWgvK1hb9w5rk1yonfNFFFAAfTmBF6T8up16/cd7xQAh2KLk0FqHMrGq6C\nOi5ZVlNz0Nhz+5FBJleWp01gbXFG8R1WT49ltLIZ7KgqgMXtt95PEyUaCV2J\n7EJRhaw+s9mIB1O+FBopJ8cJyazxFWEBF9BSknXs7GaCRh1jNlVy9TnuxgZq\nY3wShUpNCJZGPVSrK+tZpNVq1obj1gyKNOven8mgd7UceMqz1M0zm+0XwE7d\nbWIbk3/9SmAv20+fJ/q8D7gAE1u8EbgwZJP0lWQ7JnLGbtroxzJf62U218sZ\nvViKjteZaCHA5dxCkmujbaGgALpD9BXtoLNph9FAjdM27BuykYGc37PvA+mq\nCoUWNaM82+U3FOl06UvYVItsUUSmqgBV8g7yqlUwy8Blmrln2j8yx+QOwyNq\ng3VM\r\n=rKCf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHrw7+/Led80mxCLjat98mZ0T2whRBFJ+TaSnr58qzBwIgD1xba1oUYS2+cr5o/PrzfJ9CCaD0YyBxPKJ9MAunIdQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599173847-294da3eb.0_1599173924669_0.38767654450964684"},"_hasShrinkwrap":false},"2.6.4-next-1599210627-5f98cb36.0":{"name":"@xdn/core","version":"2.6.4-next-1599210627-5f98cb36.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599210627-5f98cb36.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xHQPZ3V8JMdSWYCoi4pRbCoYO9GKjSwhBVQinTmP0viAYloeVyNJb27BOpBlYyJmL3TJp9k9C3wRhCOoLB62OA==","shasum":"3ab355d636a510284e17beb5159d2ca6ca0535cb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599210627-5f98cb36.0.tgz","fileCount":139,"unpackedSize":636549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUgTmCRA9TVsSAnZWagAA6JAP/R/CD6CIRBSaoV2HS+7o\nz4hDucIcPm0HdXFu/mMRQba5fvAsc4+NhfSeAUhnuuySdIC3Y8bgCDkRk3O4\nTnrFbjJggbjegca80vPJq5X+bU4dxoSPgD2kMEx0acufhspBCFE/QIwGj01j\nsnBSwpowjhnEq/lsmMP/c8eDNAnVfPaIOvOk/Y6zKM1zbnAih8L2f+DTa5og\n5TZAQ19tf2GYZnpEtx+mI0nqNGh67jVqZkQh8dlfkpj2tanO9OcySEMAoM8E\n92NgRhrkHdpH2WEXbRsM7hOmCBZ0oL0ujoIHeNlpLqdU5qhF9S9ZkbVNbW27\nsXPe6A22EJ5mZXUxBNsS0GlMiFNs3YtrN6o4rmilXQcW2Qpp3dw0h91dpJSe\nXBMga8An16lsgFx4RxxhU214guOSW4rdggxZKDJr62GLvJQTBrOYgFuB6tLj\nmMClUnJhW6q5QchsSW7dcQhn/Jkx5G7ocIQ/XGv1iKTZFbqH09w+/QxkfL70\n/WZoqhLGPQ5kst/XYfHt2zAi0lY5ZZraD8DvR/gcK6NHvj1tx/0i8wqc8hQu\nHIMkX7rCgEJSnzScUL3gJAkj6vqzYUEZO+MjEmDqS+YwHZ9RqZclVSzdIkgO\nm1gW9BPbo39ySHL4ykhSjAKf0yMzPQlnS26HAWyq/YpZtH12OiPGIWuG8vpM\nlW+k\r\n=r429\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHff8vO2eevGR1oHzcKCTpro5wrZE3qjzm4TgQN8TD9NAiEAjLm73Bfo0kfVEHpzN309y1lNMdg727n/FI+aadRKw8k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599210627-5f98cb36.0_1599210726434_0.6675085349569059"},"_hasShrinkwrap":false},"2.6.4-next-1599213496-eaaded84.0":{"name":"@xdn/core","version":"2.6.4-next-1599213496-eaaded84.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599213496-eaaded84.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7jLCh7bt6H0+LQ6al6XehoFvA8wN0101YXebNfqGg72LvQJv2kB7QWyBjRoawJ0hcNDyIX7fuu/w6NIJq1V/GA==","shasum":"e25427035482c84d0fab6d77cb4e19f9e7bda18b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599213496-eaaded84.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUhAOCRA9TVsSAnZWagAAZkwP/2E8vAmklaTR9/8SiPMj\nXeufCcTPy+qTCHRDXIhumZlQLaOQ4Hk4R5snP2f0u9iN5LBMQRwzkFZlloj9\n1R1w+43j5M30fp7HhxuHhC1N+8YrMGnlnN84JsVHIvps1q7sKkCMj8G7Rzx4\nv7mesvRVgQEmvbjimLNldvkUTPRNAPMHlTfaHr63f3iev6BnGjsEr0Zm3c8V\ngSqwwTkr1R0MLnyEj0yG8Hsgnm8OOIkTuZMuCduI/5adNaRAw/AJGiKWjQfd\nBNpytpEu/sxL8GmNY1ZyUja0gUzBwbypFifpSjtnR7z5DjcSaZ6m0RR2Z8Om\nZEEKxTYIGSedFZuhrUiK+JBecqOVIk+5KzxwGRjLRCg9LUU9astcR/cp4d0j\nyDIe3XisaYDsT1xE8vKvtYjXuF7THqugkk3eZ37dZJGLuel2QVbGwnwyPBHK\ncDVp3mc0c5EMDoDPQXBMbtGZukjbWGcArDILGXogQSUgf1SLiuX7g7Ao12/N\nwL6lGsiCvQx8P4AM8FU/thBd7zpvHwGgufLWXyTpSkCvAZ+Eklx14MG2UIBm\ndcczNzaPH3DxzpBsVWhryQkbYfUFtu7EQVR5Z8GQZWlkWymlKRUMzS0wjgaj\n5jO51STSySvS6kjhtN/LMesZdPJ3oyBa58p595FKg0BMo1rZ/gdPQIY0eIck\nwOS3\r\n=OpFT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9tUQF+xkMPbm03HTOJzQFppxeYtoqIvieJtvTvs3ISwIhALigG9QDEQELUHtrauVGf7CRoj3WX+pG7Ll2c9FEm13p"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599213496-eaaded84.0_1599213582342_0.20431321084858944"},"_hasShrinkwrap":false},"2.6.4-next-1599214118-c6126407.0":{"name":"@xdn/core","version":"2.6.4-next-1599214118-c6126407.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599214118-c6126407.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vf5hRrxMD7VKEhTvD/kSWMK1Off/iHqa06GuKQMZ1ml/c5dG0m20zQedFM+nHV13Nzyy7hPa/DFuNWR3Cmsgzw==","shasum":"d1a367a246f7536a66f99b4033d9da45a697f75f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599214118-c6126407.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUhJyCRA9TVsSAnZWagAAjQQQAIubnAcbDYGeJQmev/F6\nlLQhXdC1IsmsCccc5HO92sHIqeDT7YnSKsrOHNwX0Vcq8P/BH5LLCvDqq5p6\nFYCTgZzje37fVP8FE3mF+nzTdVdKIb8R2d5FZ8zGOnx6nic5W1WLfzR3GAvL\nT51sXZoDuFeNC+jq17cSxyRsBBpnSE2m/BqOljgySKIaL7j7rQv+vFScPYDG\ni1sCLmgmcltavOjr2LId3Dw0eu7SXD6n/7BtAZnhsBhh3oLzfJpJ8+gYF5Pe\nTlHC8GTSdUsjVYw4seTU1dz04TziC1cM7J/pX1XjL5ksZ2nOoehzPGvduvbR\nPtyKyxtnliK7AYeUaXloY2RNk8xS7tbgSU5X5p7fJbSo+MwZ0IzYO2N8c4Lw\n4KsTJG+SSdxcX92i8VCni9xMxwGdIci/EKnrAAAoWxiL5xuhVLGR331XELZ1\nj08p1lBqRls1iqxgmU03ATVzqR1xmW7iWMEqTUwq07US2z1a6RAZurOYBkQS\nVfoyF5ha17SeInIvMBVgOWx8EXYE4I5aoeyAdv9Vuj6pya8f6xO59XO7mXEG\nU0srbLKK829NMJGq6wiqEyPZ7ohwgQ7oRrX6MWNnqSpkA7OEkZ4gk/TWU264\ne/VoQty+3VkNWDaPwzhPUI5oMNYrs53Vk0Q6hyxwa3ucux05jrQ13++KsG20\n5Why\r\n=1uEX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGCitSvw8MVoBp7Cdyg6P8CazyJ9p30OkMkbE76TFhLEAiEAj1N6v41xYP3PuK6g9f3JqGMYO1RNh4KxRDG/eoZXSAc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599214118-c6126407.0_1599214194057_0.8853498786340435"},"_hasShrinkwrap":false},"2.6.4-next-1599215641-38283c2b.0":{"name":"@xdn/core","version":"2.6.4-next-1599215641-38283c2b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4-next-1599215641-38283c2b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fGLs7dwMIRSYKhG9AVjPk6dYXnqsA3yBNk7cb+YOGJQTtTg+4Bs22Y4MtyPOn4nYowIye92yPnrLQHx+IzGy1g==","shasum":"a53a847f17f3ba34ce21b0d73ee1aecc016fedd2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4-next-1599215641-38283c2b.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUhhjCRA9TVsSAnZWagAAbhsP/j6SkU4C+zf2IF2gk3JE\na4AnGxyO/F0ImchM+V0AyDK5YvM70uuJ9qzW4/TAQy68Ni63cIenXgjAn0LL\npFOdvydsJA26GIJU3rncA77e3qTzn1Vmr/RwSCBL3OQk1vFwSsOXPbJuGeLw\n94EVT8khK3hdru/XdlAGxVecqfrFhAeX+QvOlpck0J126Cb/hALe2CRAnVGb\ntPOdnBGeCtLERkDybBEtkT7+vbqYiXXM91Dtokav4hqLG/gxT0DGEe9vTzOh\n0rTmKWfR5bYShaT6Mm8S60QlMfKRAoMF9/W3xZNw0Q+hIuBa6Z2YKixav0ST\nl5CuLbLO6nATDfBN0LjlYH6xFJ9YGNKOJqw6ZeNI6u0Wf/0QgGpeUOXp1R94\nzKoFNO2BWSabNnH+vp9bU7KkwuN/AVxVwXoUElo025mhLwmhZQcrIiFyoXwN\nmhwjFCEb4HECnjjv0kkSTsQkR/o/5YJXmod+RAB4YwD9yyLLQRrmpbw4X5z8\n2rOSDiCjFO1k6SrE7cm23HpJ31Sc+Zq6zkBAwdoWJoewpzwo3IYiilXU7ST+\nVaJmmRk7eT0KsAbvQBOrzON6KlXStgLQaviuyj/B0AOxfpPKjXheYkbvFZZF\nsVH+m9FQmg4bo0NhKkRbclU+Ud4BJnmS1vU7ekzR4amZ9GE2klK2eVdOPcry\nXDH2\r\n=lJBl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEDZODp+NLUmdTxbiNW9ppDx7EYWO9guDlGce3uPqUwmAiEAsM0eTFSVQqzOODEPmn9yVMNR2L3HMH9ACnigHnh/Lrs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4-next-1599215641-38283c2b.0_1599215714959_0.31109944948794754"},"_hasShrinkwrap":false},"2.6.5-next-1599215918-0ab97d84.0":{"name":"@xdn/core","version":"2.6.5-next-1599215918-0ab97d84.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599215918-0ab97d84.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8+hXf7loGrWiUUQCPCexphyvo4yQBEMAzJRZYz+saPjI5ghzgdgdQNkrK74YuOlsrDG14+8tU9OnWmksJFn0jQ==","shasum":"4a2109b56e9f870edf819f8bd27a6cfd492badb9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599215918-0ab97d84.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUhl9CRA9TVsSAnZWagAAEKkP/1PcqiTgOfLH3ojcjphF\nyQaep8z9zahmDP9fvjB73MCeSZBCAU15c6ESyCqIZ3HqBLAa2ghX/b6Do41v\n4EWyf5VcExfzW7sz6sLYdudjLe2BVXcBekKpPG+XbG4a1Ul6UdcJHkomJGg7\n7xjiHMtWshcAnV6Rbd4lZ3pTjE2kBUMkJE3iQpI4HgVZhy3QWBqG/fKIapXG\nuZYocE4VRhzH3QuvbbRPppUhYNpqXQcv1NXRmD7T2aUMkJJiV3nFnAyhvKT8\nLaLHxIdFLHSAcmAcmFPRjC3XcRo25CPbv1MYi3NEnQJnl5QEAlNR1gDn8uxX\nif/aJOYiAw/w/qCerhmLwvCNbXjIAds1Uv2ystv9xS8eWY9rb8cAJ8t51ria\nqCzeJ9AlyQUswjoGfDGZiFGF1TFGo79ONpdFGdG7IbRLGLqdlkToR5naDnS3\nu3+1fmHHN6qFz976GjLj/zwCSZM97dC0iKyqOrw4E/eeFK0VFOF9qNae71jB\nPGTvA0+Z1vSX0XSUpeJC52+NIlWL5mJSGoPuRVJTLXCd26eam78PDobZ6pkh\n2Gm5V5wTL1Go0Te7ubOWOthwyxIEk+8rB3oBgC2hM0GpYQ1oMQFt8R+7rVwc\nVsVHJRzIBhSZihZYHP5q42YQT7Sm7EGG0hqN7A5nB7rXJe5ZM/b/UBJMAhZ5\n4v3V\r\n=qSBD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzJ3lKhlQe+wMhoG7RNN7H7jFUHsGIH2SgXv9cbtrNrwIgaqOX8Tg0vJtMT5ToEYu4gxHvftUbGw5/+DPFTQOr46Y="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599215918-0ab97d84.0_1599215996814_0.2931131094749173"},"_hasShrinkwrap":false},"2.6.4":{"name":"@xdn/core","version":"2.6.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.4","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Gf2Gwd0YXfw8+Yb05i5L13A1SIGCjxGWaXTU5ECK9DWa3fBRvTqxNpTmMwZuIZUVxn0sIt8rStF2iEK2lIpXdw==","shasum":"37d00c25b8afa4197e37560df9d2691f90c093cc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.4.tgz","fileCount":137,"unpackedSize":596507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUh2hCRA9TVsSAnZWagAAvq8P/0Np8rY1364E9dI961ni\n1SMas1z1WKKO4uZvRZh9JN8ORGmtGxeO4Ki+7q5tD2+q2Z/ySNVz6z6jzQpZ\n89W13F2Gvrf6zYZil0eVOU0CbHpId4QwdfzsCTGaM3+rlRFSuYEz0fmPM6oP\nK2WhiG1TDBBxHAk4qpykrPgcZxxQxMHcasgNohSQ3R+4n7/32tA/XLNYVGT/\nyNorCLDN1rCwdS8hg1eGZ/4rHtTMtZWVwWbSCYOKiW44XfOVQXavsoI2xsZC\nZd3jq880y9LNAmNoU1B1harvXGVMJ1rj9IORACtGaYZ4bhwvjSUwJzr/2ZUX\nB9BdYuKaIrWAzea0OxESbxEwPg+nF4bzOv8z/ZP6G1gkQUwr1xBELEb0Gyw8\n8+uVARBrxZiAqmqBIGsM1ondHjkHNaObgJwESCaeTuMpd9fAMNctPN07A5Wi\nE4SGYSJe9ufR5Kwos7eINptP4gIxzoOFgkItqq6+yBYII+q7Th/ad7t0nlem\ndLj7bZEqMIDfTwtCiUudnejRF/SbEIWKEVjydOW6UfdEcDp/qRIfZrJmcnb8\nicxLxp6+phCZtHd3nwyihoWkMouvSmCo/KQX9h4+bUUu+b2rcWI9jyex/M4l\nBUB9aNhbCI4jRwf5IYQkoHLVK2JhXD1UEHR2vo3pi+n7rPLNg/je37wGaKuT\n1w8t\r\n=TCTU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB1+sbVy0h82TlUQk2s/2h18eqSEKxatMvLUmzqVB/E8AiEA0w/8HN01hUufESzhdjoSmTR+37sHpGWRJ9BEutmCsnY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.4_1599217057448_0.5381837323211056"},"_hasShrinkwrap":false},"2.6.5-next-1599223222-bf684521.0":{"name":"@xdn/core","version":"2.6.5-next-1599223222-bf684521.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599223222-bf684521.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FTM7jYM1IYL/p6I0i3li6cw8cRaxJm0zyCnt0BUZkoANStKJjbcsdvP/Edq9eLaY52Yrf4nQOtUNpjUxSlHFWQ==","shasum":"c2182b4edb58fd2ff5f14dad99a780e2b3aa75a9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599223222-bf684521.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUjYTCRA9TVsSAnZWagAAUk8P/RqQUeQqg21+4IyyfwGB\nAawMPkZB+IDMCG0q4ctvsFGgIK7XS9YxsKOwcgH/sjLAGearfzu8oWCczS8M\nH+UVRL/eg0oQN5ehYgDfFK8NIXRctnvaBcj677ULZo7i0h9lnvyjF8V3uLEl\n4dhG6zp12izkKr9oU8G3CloquTG1sw9RqwyXzUp8X9LRmcXhNLs8//58rgIi\neK6m1rg5Tgb27yX3j+YDhGxHXZDpcCrG9xvWHF84o7pEo5CuKCWoAhVt3Vms\nHnIptxq4f4Gvm2wjVXSwXTU59XfNhjTVPFJh6gnF0d3WEOkmir6bQBYqRb8z\n5rlAAfxx/uHRTnynQeIh2laaTGUUk2OQzw7LG2ywFpFD8siCsofcZipwyv2x\n3akzPAGVifV4cvFx+RdHU+1yhm8VDuZ0oX9JJRihQ1mmxiL1U+2I3x6iOE4U\nPWk09VUvtDMsQjmeYUbJ1Oc+fNJOMdXBOEHi4r/QkR+651bABPyXOxMLGchp\n3E8T+UTzdjId94k6QA454w/Ma6xsD1o2Dw2iNnDzVmaG187HtS2EerYp+9qW\nBg5HbS5G3uBuXCi2f0trl3quF5EBwadhMrfw7e/lfb4SnLC4yjVHPXQw+Dv5\nJ0WZK3zy0hUJozdfBLF8FGZRgIAbRylcO0cMgc6FpMcBieJoE74EdzBXKf0H\nWURe\r\n=vww3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEnJT87gdRC87V1H9HQo5QMVrkrse33LKJbzXSkhZLbEAiA7Z9ZjvVJsmaK39B8y/p/ZvZg9pVkumV4fkWBYyznPDA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599223222-bf684521.0_1599223314696_0.47342263078630076"},"_hasShrinkwrap":false},"2.6.5-next-1599223545-e76ec169.0":{"name":"@xdn/core","version":"2.6.5-next-1599223545-e76ec169.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599223545-e76ec169.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4UJgGO57LpY3pKWVuk5H6jv7AEHSTtzXTOcqxlhD2DGe7hWF6xpgshLve1Tn7nC9d+8p5Mvau8KnmmZId5JykQ==","shasum":"02e808bbbeccf237946e0656cdb0db1e41194cf9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599223545-e76ec169.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUjdTCRA9TVsSAnZWagAANwoP/2byc531cxBDizeazSAt\ng501YSxYcwLGUKT6SDi6X0D5I771qUbNXzhMCIHIZQOH3pCW5xgMo+5VWRLd\nGZkQVLwpW1to649pgW4x7bs34rmTwauvwupa1S+jw6Bx2bpwFUrmURqQjkh9\nSVpypXeJAHHEz/uyvNTW7y4aoBwGeU5p7xWDUed//5GC+gUtHBks1DL8l1bV\nrPQLHdN403kWjzfmsrhDF4MXD2bm9NGlI6r4f6fpvKTc+wM+4V/joJsD7m4/\nIr3Y2H1hLAY/11L9GrEDtR0EgGoYD/p12/qLcGvl1uEKwVNVDy/PJKTbmD5o\n9zT2lydksVLj+0a4CgmBqb4H01SqKAQlVX1h/sTD++WqZblvXddY8i0+OxAg\nRt13cdCdquK0GlYQOIMg7d64C6Mq4GHW65TgK78rCVwUQnnK8kUdZRgQn+7K\nvEAueArD2MesfWxhVIWObkYW3ldoA4VEdYhvixZF/7QE/osayxWwVEPvilMn\nPh3giqoz8RFWFQooT+Q1hRV2cqDbL2hQ8W4Cd2/nP8550HKzOnBZTvFJGorP\nkdnaIPsUt30Ey5csE30ktVXrSFJdiPE4czqKPu80LCRRsqa819f1w+bu2OZG\nL7fZ9STnBuSUWqfJe0Wh/3/32m+jv11udAc+FVPVAHDrk6UvHAtwym3NGVwj\ndUqE\r\n=fV8z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHcPEAvFnlKopDe95n3YHeCB2AqC72qaCls8m02WOgfgIgMa1Cv+GUs6qd+Dpu1yLgbvy0QuutBQ5K+1vKZwMHHfw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599223545-e76ec169.0_1599223635411_0.1364796761117757"},"_hasShrinkwrap":false},"2.6.5-next-1599225516-738ebf35.0":{"name":"@xdn/core","version":"2.6.5-next-1599225516-738ebf35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599225516-738ebf35.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-f4HrlhZmx4icRzsBbQaF+oHtvRmMNW76WTnQ0aHTwJdW6ecGaKpyzIC4IAWdiVpWeS1TPaEKMC7AthN+G3YuVw==","shasum":"1e7c2cf2ae525edcc786a1a0e265c05c9bef2b13","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599225516-738ebf35.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUj8GCRA9TVsSAnZWagAA5A8P/iSStRrOoNgQAe2/JuHc\nfyW8qHwN0+bRQJ3FMqofV/b+AEYg3mZZDcfNeftGO7hjKMO4uRKUA2DwvDRU\nAne1DU9raAVPY+355Qqv0WL8pVr5MeEYEOEt0DYbGNBbdpvui7oIqEe+fwGM\ndmXi/gz2HHAL1pxSXhoe28q9Y4iCEPNTnxEwtByLY+NVK4NF+cwGTO2bmdez\nn4WgHVFLA3KwUAtr2GLgitjAO5WRQ9FH5VJQ+XJAHgBg6ntjOiqoJMiM7FNA\n37XlzhZpKHrs4+nMQtLkw3rX+ubfGsGA/mfBbUnKESkeIYSppgHOWPPCdGCs\np0twYIPbL4CyVLsKFEkmuYZt8CbDdBkY7AN1eqTgtD4Rhh0JBfmIDEjCF6x2\nXeSswCzER01esrVshwkN5DTDX6jP8k5yH2KmXzgZY+RZRf2ezloksa7IKY0n\ny7mFnw/hBOhKYUHF/+bZ+EaHWB7FXKO6zIwdQEgVCQKbjrfYhTiwEiaeiPVt\noHo5dpgMaVyQrlguGSKINJTenPjvR99wmoWQDRbVcoAwcFBSK9F+gaZ7YM2y\nXnUyeErFshBS9mVJsfpDf3SU2NjlwrkLSkQ7lkLa1JnnmXCrGAa9TjhveL6e\nPrMcO0UkHproyA/GI5A72qsNUwimYiWWf0MXLJvzFK0at9KVaLN4p7ccu9+b\n/VGS\r\n=vBL7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHwLmJ9rhhHnE0E7cAwacN+S/dDAuU1nYf1zfscwcXTXAiAZH8C18yek9X4wKJiLeokhQKbiZup52pA9Z9ufT8Crbw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599225516-738ebf35.0_1599225606052_0.46200719680853664"},"_hasShrinkwrap":false},"2.6.5-next-1599225518-b5c68e83.0":{"name":"@xdn/core","version":"2.6.5-next-1599225518-b5c68e83.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599225518-b5c68e83.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-t0WvEvoAtrKHd3NSDstOJo+WNkJiqiPDCblvHSvOMDpZOMlWvJ0UqYdyO3NdXVYif/125oY9+Vx21FCcBpplew==","shasum":"14bb102dd17415ff67b41b67203d177c299c9203","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599225518-b5c68e83.0.tgz","fileCount":137,"unpackedSize":597912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUj8ZCRA9TVsSAnZWagAAX50P/iu+GDwmjAwm/C0SiDu5\nucKlBkZV5l4Fv1Vrczd2Pmeu8A+2uXhSnKMc3U6rGIMznRfap0epzHnGnojh\n6adn77+r591VbtfAbTKFZEHQtCCN1hDxsgklRNbq3O5EIvAM33Ab4fF6P72m\nKrswEPMl9Nw85iF7MCrHDATU9U3k+vMH8e/WOPZveAvzDe3H7xFT3yDGKf3y\nL/aB5LcxFtFqyzCFSMfdxiDEYfdSgoHLsbtsjLU7+NLHY+bMpZiaK9ZalsMk\n4XYSmCWefIlbaGkmh8AzorIg1VIuDKN7FH9fjIqcAI3tRVQIUZwYWxEH5cM3\nRgZJVw6IoMpU/qq4GU/5ODYkx9BMavLVaXLrBtli6Ae9RRrEfx0ZPCA5uoRv\njlhn5LwPqLtKRmrPjW8hd/4UzTmbqS0YwcdFMa25lS3z7Cs2fE5IDHiGlUM9\nAQLiezxyWXTA/Pw3CIcxjNpLe7HiAyaP12cwavk2urDZspxJr1d1fR3iO45K\np89ZFLW0HyuRpAJ2wuBBRjzgzCiyjNdM+AMHs6KDJSDv84BZxWlERl3uOUT/\nwSJ3VxtPhEQfOVBhjf3aWUP4YygcqIdKHQabncSz+bKF6sVn9FA3bsys9uLc\nHx/ia+z3c3cDUhUIEWXb4HhFeLJMRD3/XIFGEFxqmLUULqgExfdKwffFK0Gn\nLFJQ\r\n=SD6t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICuVSCn7OT4HhtFtjwXgLJpfYXGWJe2kOaS97SKNyMVbAiB+UsQOT9Knq/XpEr91ihBOPHycV7hsbnjgwI9HJAOY7g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599225518-b5c68e83.0_1599225625255_0.9716730900603296"},"_hasShrinkwrap":false},"2.6.5-next-1599226323-763d53ce.0":{"name":"@xdn/core","version":"2.6.5-next-1599226323-763d53ce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599226323-763d53ce.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-byE3fDv+l8vsYQ8ALmzJ5qBaNz8Bb61U+fS6B8OywHmj4dLTL1cwId7UMyAlBnaM1xnRyGpcvgVE8IOekB5ILQ==","shasum":"ad07a73e953839e281c25e6b98b3eef810d8e4dc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599226323-763d53ce.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUkIjCRA9TVsSAnZWagAA2KoP/0zJxgMr2QwaAd5XiuEq\n84C7KB0QUFBXciDkzrADzYRnWsRObRPbkqRaPe6VweL7RnCZ6qyQeIQtTP6p\nSVx60soqRrgrlRBkiIq7ogOCNnYgFYJeP1FkP4Pl1kRXehNnrvh2NgE4O8Wj\nSqHEuIHw0oGAzDjl7/FFY6StH2FDjfRvjtKeKsXIr5HueobE+OSVzY5j4Tth\nBRJa9dFW/KnQVuEa2ukiNJDbaqmD6lSNI49/b6q8pf1AlUYzSYYnZhiKkbT1\n86v7fp5Akvz5P5HsEraALSFOJHOH8/9MojQ2X8BjxdjRuMflmUVq1JesKQi7\n0ql6qJEMckR4BbTQTNEGLzblNMn1FrhIUMtUDYZtgZJhHG5JKtJHCCFyTPvB\napBnqoL99QpI5/vt8+QkFSV/k0tpNGpX87v5BdVEGTBwZZf6K78PfhE52Rlt\nuEQMaLFhRyo7iXia+C7N/Ovrv2rX5xR7vkF5oWTh1/q4LnXHfDr8YMw+wieH\nCz+XWpUffNdSpQQtzE0UW7DFb4jdVjaMTm7T2reb77sFPDpkqbx6hvMj0bBQ\nNdphEIZpRB/ZnNIK6XToyZW5tfTV1lDKSV88k5AX65+QBZwnLlE5I9lPPIfw\ngPUVnVgILlGqbnanUjR2OYTdtVaJTx7+5QdNY8YyNIV6dD4GFc8mKVyq8z9r\nMmD9\r\n=RqLU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCI3cjyU9ogiq39QujJP0sNs+pBur+/l/nM2wiZ5nq5JwIgV3Lm/MZw25mohAzt4dj1BbqRZOpqMxJWZ7tPbpBVVP0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599226323-763d53ce.0_1599226402666_0.5297388314830953"},"_hasShrinkwrap":false},"2.6.5-next-1599227097-48c01851.0":{"name":"@xdn/core","version":"2.6.5-next-1599227097-48c01851.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599227097-48c01851.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+Z/6Iv+xdEAndUBtyagH8ST5Z27Qpxeay7lQapVp/61Gdf3DI/Nm7Fs4Jcgpp2A2m/R6fm4uhhpjrP2DzYFUOQ==","shasum":"ecfa5c8daffee4388f7a4016bd9298c719b15e57","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599227097-48c01851.0.tgz","fileCount":137,"unpackedSize":597949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUkUjCRA9TVsSAnZWagAAv4MQAJL1GSVSbo2JpTv3OUpf\nUWfcqLWGkbVnLrzQjd+MH7g3tiDL7NerlvDR8F1xiGbt4S+AkRDJy13YExr7\nJZMh6zuvCnCrQZJiOkq4b8owDY0pB81tSoyY8DqT5SbJ7/iIWvWPAXXw7uSZ\n7Yb2VdH1YBJ2jaD3k/TfbYlQ26zBejvJyDTObMtMY8xf2oaXlzBgggnXP4Ov\nscvColJXQiitHv1/Kd3qVcAKbSFaUMu0GyDqFPx3N+eeMykTtYHrzE2zRVzP\nKH6HL7lQGKPFDxAxdq1eHDr+LmM1yTOjqplcm5tv5HwaWZTzlY7Gm3K6B6fD\nNJiyqRHMH4mxgSu19H6rxP3gNxzJcg1AGDDdWkARJzypLkFqpLPqVktPVaIZ\nw0uCNY3CF3y/Ttl1T/r5OmZY0msdth0vHllRQGQlB5py0JVZheiRzd7Xmu9W\n/f5vvPD/yFvcMJJc4HBuu4Vw7eOCiUOi67YAoUWyztWXBNahov8PmnxKWQeV\nM+BlPEZaEkxdbO/0ADz09Mb3ra63WLEHv7SZWXK36d5uBUmUkN6gAch2ZbPv\nz9aFWShTT/RnpIPojAsuGtljB72k5CAsibxIiT5qN6Wi7TcIAWp/jt5PqDcL\n6A3HbMXjsYkFjo6G51ou2qihv7fSBXB3neUH1a4EMo2XjqoLqVRrYp5EJBga\nb8F2\r\n=o+fp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9KuRGQ/UV7gRo94ovlQ5dSDhvjHKODaXVp4eeTrnxsQIgcAGJCTMUxDDlSrALqu+oleZzU5gQk711cr2qcHr51Ws="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599227097-48c01851.0_1599227171516_0.45230906522490977"},"_hasShrinkwrap":false},"2.6.5-next-1599227690-ea53a6f4.0":{"name":"@xdn/core","version":"2.6.5-next-1599227690-ea53a6f4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599227690-ea53a6f4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-g+Nr+SQlBMmkOHujMPdT7yQ2E6zK3TkSZNcNT60URJlNpjIzvBU1TWo8GQwqBi1DVVsd1xIjV8pjaufM5hNsew==","shasum":"1439c7468a5674ae802eae050c92989a86946bb8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599227690-ea53a6f4.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUkdvCRA9TVsSAnZWagAA2w8QAJGZmTakmDfuKCFTfKqZ\nc/Pbb2r1LMrrcp0SL419nh3Ct/BOdhbeUFghu8PHv/gOF4WlyB8SscO4WsGo\nVlUUsTDwBamq6GrVilvfFc6JqHfXf84dewAuLed3uflpItpVck+SHMk48vVW\nwASiUT/jiPJ1aOjop+bWj+aNjLCdEnzbf7N0nJK5Rizf13ldhCWzpEgOnkMU\ngppWqZdcQ6+24GicRNE4xvplVy9MGCFUtAMMA0QldoKiyR1tC+H/KQ1ape35\ndaEjNFQGVvnOJO7sPWFAPaO7JgjjM072AMet3MFpGE2ajDALyqX/CHXz3hFo\n4N4Sn19Cq3w6Ca4crv6uLO0fuNZzf9VVncnnFtj2iBvKJX24JaiKd7eg2OFD\nukphWIo0NxEwX9tYEkLPHQDCqF2CXgnk26oTBLL11bm8qbu4zd7JSDSnneRL\nLiyBL/bgOkSqL3R2CJf5xhttYsiZjSK/wI3Io5nFwRzh2BW3NYSkgNfWWtRI\nGdynXthYrqV/0+k1kFVu6yzhmutXA5zv0vLR6wsovwGI2nV4G2jBrVjwq201\nvZ3LOTFyimzDHrvwW08ZyoqOJ9RX7ub3NCOtSPtLh02ZYWEKilDOp2jJGJ1h\n5Fc3oJdmu3e4lC0gGCL0jRJB76gHQ68mpR+g7HGfJDu3Bf1PYr6voBCmnr9T\nWffo\r\n=QaLG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKb8od3HyakAHdwcDkERpcrl/AgwpxxNXTbMuM/CvNMQIgUsr8wXNhj8uAlpaqaIUUaVu5f7GUXBzVK5R/1LVeAm0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599227690-ea53a6f4.0_1599227759046_0.44081382310036643"},"_hasShrinkwrap":false},"2.6.5-next-1599227891-168af27b.0":{"name":"@xdn/core","version":"2.6.5-next-1599227891-168af27b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599227891-168af27b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-G+R8MZ75zUxlfw7ozqVs1X8LuMH//jcW5AC12xW8iWCHM3yYcMYh7Ip1jHofVsDcDo6oVohquDMmkG1EwlWIaw==","shasum":"d594ce192a5376cce9ad4b81439aee5278998a28","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599227891-168af27b.0.tgz","fileCount":137,"unpackedSize":597949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUkg7CRA9TVsSAnZWagAAJVgQAIdfSdjbClnkhEY/Cpjk\nXGZbcUn17RkUPF6ICmIUnofr4A0qPA9PRHnP1kGvJ9AfSAawqT6T12+LvCrO\nX7uX5PpcNYsFq/0r11t5v6OPi5bPRHA9OLyIHkv1yjDZTV+t7Sqx47K0Z7l5\nXCRD21Kd1lC+c/HdsR45/+/Ldg92KhRTYKGKcb25aeVvWMT8yWLw+VQ25AHw\nBDpAe1MqWB9EFH7/0bLg6H1NEA+JsUhz3iRv8OMBiM70Ru1vI/inHX5EdxTw\nIybuzXGOCgTlu4p6DQNLZm0K22zVFvTH4vzEJ5kFlXtapl/TroCdQi+0pBcl\ncMeG4aKdUfRM3N5VQ7riADLuxmIAqggBcTmtQ8MK8YhuEvQbSUi6/ZbGpDcF\nFHgvx+Y7OHZzPZ1qFVkBJLKvzAH1d0EBfvyRUWtBKu/vlYQZLdS+YqQySES0\ntM4V+LvmgFpGjw6MK0UMR8ZQrZPE3bLKNFzt60S8WtEIeEQ9e+IcGnuDeMFa\n5Q0z0JbNRgSjwuydBt8+drgKFMbJS/ajAP6JgAGN5DB/A7LX9PrUF9IG0iU3\n7KGPlegM/sN0kREQqxJ66bTonicstF72bhX1FJy3vXlgT7baMwjWAR7fi3gA\ncfpA9urzpGA3+fBz5RJJat4dXth6Caz89yCWCYvYQTYeWr9lktU7DNk+TtPC\niw4R\r\n=fCfC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiuR/DyqpASGZI486nkDVL4NJQdsEHy6JSrbXTNG7f2QIgVsmBMR2R6is9PRQx72xhCkY6aLqt1uICmR+eejQS8NI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599227891-168af27b.0_1599227963343_0.6465634962130251"},"_hasShrinkwrap":false},"2.6.5-next-1599233467-5d7a71c8.0":{"name":"@xdn/core","version":"2.6.5-next-1599233467-5d7a71c8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599233467-5d7a71c8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MoLTyO0s3JhfoCvwuZbMMiuBpIWXHsav9sgjPd7IjgIQiXmuvqZPHs+EOy3ROX5OQkQFht0SrFitGZ/vJGV+Gw==","shasum":"40cc9e02ba24fd0a1b509ff72c6d92f80c807a0b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599233467-5d7a71c8.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUl4RCRA9TVsSAnZWagAATmsQAJFbUWnMq+zg1yLB+5Hv\nb0qtzxLB2eCxPJJb9GNAZKYcpchugeXvvsHFcOIdgmp0P2OUDZj+2P9/IY9h\ntleFcyNC/pHbV16oyaUwClWhUQyOqtjGNmjzwdqpVf+CNrMqKrOTDbTTB9nm\ntRYfx7VwA1+JLx6xqoCYRx07tgK6ZOa31Jq+BCaaArfOdI9Y+KHdsRCi0Phn\n4KcMQqsYZa5eQqF+4KUinxNUQSz1WXmgjWbQvILjY8FJcBWJKuAxx63crPcH\n0VkcJjGjfWMp5O4xt0Y/0nswh626K5GqNJmuziYTQQlHhEIwC45W/DtNvWq1\n8d0HIChhw/9qb6uPv34IE30g5fNjaqkccNux2KJTi4riMiE56rtoFG10gi/y\n6fj3LsjYrC/vFpqlzOZBlP4e0DjFaY9yF1I1Xz5oWjHUKyImA7OAS3SUISBW\n+TzWkoQwcoUOJB2LokG/rbe/3bEEyuPqr0crMWPcprn0DP//Mi9WfOMKLXA7\n0aEy19Fyyfz50qj41tAfyT5aTAppCmN90vR9mUqLFjhLUkBEhNQIXGrFNS2r\nb6omFnxIEdmw2szKzkbYklydiRBholXNN0TLUVyXdCYIUiSU5KK4U5Qhs0q7\nM2iSZiKDSaYwL29Dvf/4roRcZm52LfbNYZL8jiZOzawZLZXv/8Me5ClfyU35\nqCzH\r\n=XYi4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaUjtCQ9I2HVQVI2WSUDew3pqI0SjcMWr/Jwn+cuXZ0AIhAInAFm1HGQ9eQ10ipB1sqHr2r5lnwB0awt3+N41pDhEv"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599233467-5d7a71c8.0_1599233552630_0.08479064330829678"},"_hasShrinkwrap":false},"2.6.5-next-1599234290-37f52736.0":{"name":"@xdn/core","version":"2.6.5-next-1599234290-37f52736.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599234290-37f52736.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ix0Aia4m51PBUnNer4qtdpTRfcKpV5+y4SetE0V22ELgImWy9QYzenSr2PXLeJ47OLBmVvlzmOIG8OAbLjtiAQ==","shasum":"223782ab8f4d64dfb23636f0e9c5b0cf3d015462","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599234290-37f52736.0.tgz","fileCount":137,"unpackedSize":597912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUmFFCRA9TVsSAnZWagAA0mcP/A8GIC/n7GtOrFAl/20t\nnmlrCbl+nQKKzwHhD3eaFTrS+7qP5WWPzdKAVDIpp1dKF8PI3XfOpySbmyy9\nHvj2+gQCWorc2m39o/P2UPtlfYQgMRNkXYgfIZwt5NSdWrMHKHnfmFCA9TFw\nuAKOen8JMAQjC6qmZ+Y3d9egL1YjDnUaN6X6QuVOSQFnU8Xl5l+oEFcuqBGP\nMgsIEupyrSVJHBY+P8NlJYiVxKPsf8hQh9N4VBpk5QL4sot1OdKAx5ZEeuLh\nB8q1uUSeQkIWt/sArVN+AFINCt1XbUc/hPbJsTW1HU1SAwJksD+TvyocILMG\nEXm80mSifK3zIZN1DFR+PwU37ScG+Rbd4s8DpYPjeXe/43Kcu0y4e4oHJKds\nt4engvvJ3/HdtXJyPC+CKKRiAa6S13gQYnSB7bx0ubEdo3kvjFQYpSV44xUL\nzDRUH8+Y9nnfFoMkrTEpmG76oBA9wklzjrkmFEeDwsMM+6Cfa95I+pVUA1Vm\nwZ2Ahq1/i/Is0XxhB02ITGvLSmB4D1xV12y6xaRzuTOQ9GBtPYcDwmUOUT6n\nNYBFWrka628C+B1bvsTrZ0aePe8dTCaiPJmS35rzRMEfsH6KSnHn0MwDXR3w\nSZ/9jkAuDuUon2+R31ybgFcMkasgRILxTPgXFnCwQJUqjOXZnhrKoAWELDce\nZCAv\r\n=RCTl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwihtDx500ilS1qFwc5PmPqxKwYxTBr8bwIV+f5o25vwIgA2N8hPHPWaNfnZjBKAWyERzOLOM7bSwM+d6KW/f9SfM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599234290-37f52736.0_1599234372605_0.19419235945479585"},"_hasShrinkwrap":false},"2.6.5-next-1599234706-640d6db7.0":{"name":"@xdn/core","version":"2.6.5-next-1599234706-640d6db7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599234706-640d6db7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-57wcjidpZdFuvYH6pQ1fPa7mMNS4CAOsDUIx9bpe1AYIu1DMoU0EEnhOxF2czCYgsiEgGYxt+KgKCI43t6slAQ==","shasum":"878a848e33b7b7d241d92150b1fc7fa489a7e2c9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599234706-640d6db7.0.tgz","fileCount":137,"unpackedSize":597912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUmLkCRA9TVsSAnZWagAAvkYP/iUULTqnieKMH0xefVBD\n00qrfRGq75SnmPPuUmbTbBlgs33QdyIQdjH5DCVGs+H4eJ1u7XsUi+20pxsP\nrHdmKv1qrdbY3QIFDtLwvfyvq13PPTM1Zl0kpGyTV5ml2haeFeQSOoH3LyID\nmKxd5g5Bzj9ujb05dKud3aUSotVPgHeMtQ0mdv5H9fAaueOJjW55djRhEGwX\nkcI1g9D/jMU3P1h555LjGAQdlfurXBDo68+O7sKYlkNNrROmeLdhcuXR6oOf\nJXWfzHX628/Miay2a5t45+rJms3XtmBRzCniP7vmgvNh7kAQQtWd3q5HJFWT\njAcUAoWykVFtXHoBoK19UcjRsp1RIIyGMMyl3XCi1y/BQAa1UBokxOwlRrN2\nH0M3zhSHW0VRjmMF8bfkcezyL7seXPDjWBDoTL8bTYyohnYbm922j3pRK993\npWpkTCx2zN00I+FgqcWrOh5+NRGfTt+gGtmLtSdSW9m4B/NphHtMMRKWIMqz\n3K4PFGKfGJNb9X8qFrnoF8Pri4um5gd41PSBp9P9YowJgygXi/nH6AGjXl5d\nftI+oXtgnP0KGRxGX7mHhZrMoCEBnnTKVpona5kx4PaZpIyboxaRItrXQWSM\no5G1Udghe2fSqvl1Z76rqJjsqn+0PgBPzEnPKpuWDyND9htj6bSOPSqsJmgv\nZZFJ\r\n=ZSj3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzL8rKF6ZCryWOtRsNve1WCOdDCe0fY975WYm54owkCAiAXTa10+5sin149Dm0fh+4jg/hrQlY3KxlHOgxF2nMZ6w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599234706-640d6db7.0_1599234787794_0.4070937717968339"},"_hasShrinkwrap":false},"2.6.5-next-1599234966-843376bf.0":{"name":"@xdn/core","version":"2.6.5-next-1599234966-843376bf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599234966-843376bf.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-L24EKmpFWgpZxk2XtVuMqKKUKqz6DGfSJg+V4kpriipXrMSmPx5KnfP7lku2pgTVKEFdwergIoHd7xcAp0W5AQ==","shasum":"48c3cc7354c7209bb246cbf35fc2f7ef9b998112","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599234966-843376bf.0.tgz","fileCount":139,"unpackedSize":601945,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUmPlCRA9TVsSAnZWagAAXr0P/1yC56X6OxR5uG0rX7xC\ngOPcpAqRpbwtb0gbotoVOavr0g+D05jVZCJR6Aow1wSskXc7MZ8z3ekj7+59\ndYT8fDOthAe6w7QnhoAc/hVHZ2RDFOb5MWcS9L4llHKtoqgfBgzq0iLMegn1\nggilKlUQv523mLDARwOdCsBUO8miXR0b8qv7l3sKwKEha/pAYQFNVoPaq5md\n170jX25y9iVfQmdKJvNBbeKW5ZJVmWA99yBEzbf9A8ArgJa6L5yvOsreQtDg\n4lX6IL9InCQ3xLEbcyJL0m01dKFa3FeWTZbkW9rsFqOAx0hBy0PJ+OW3y+NH\n3PQoU4vHZvV/Y6QBJfFsHS774O5+VV4vwqe/2P4+mPmXwkZFKi8UqwDNvcWo\n/YavfCPugsr3P03oxxdpEJXQKNA/2uRt8C03GPiLav5UmE+yYlCdwkp1q4T4\n8LiKYErs0fNVgJQjP8rxrouKithHd5ZwBW4CR9yeCxS1wIty14/213RY+ou7\nqqVLZeT9EFYmTNH/dKJJsVgj5N0mM0DsHat4aH/28ZsL/arlEc8bLtD/qe+j\n4Fp5O7NpAsGEwV67sQVBFcg/6cAp83oq7WfMsfdHyNWprz9zY/TbzkbMGlVF\npfWXa5nsna9NLUCLrYib2LJVUbpoC7Z8Pc9bP+Dg7VWU/egZJL6ddpt8jl6Y\nehhk\r\n=4lgp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAqaHozfX2KtjDlwFQGEi6fQ2LIJ5JJ76rtiQQps+9L8AiAO11ps5jupxOpZ3UTGO+TAret2w+QsinPWjfDo+mGoIA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599234966-843376bf.0_1599235044732_0.3257700921119493"},"_hasShrinkwrap":false},"2.6.5-next-1599242871-d295efc1.0":{"name":"@xdn/core","version":"2.6.5-next-1599242871-d295efc1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599242871-d295efc1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2Pa746QgBS7UAnjlVwrAzVjjt+IuvevRVI4hhciSXWBhsfkb6gksoRzmb8ukr87D3Qtfg6kGp9pvN+0hptGv7Q==","shasum":"3a60019a588ef16148fc685c691ab42c845558c9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599242871-d295efc1.0.tgz","fileCount":137,"unpackedSize":597912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUoLWCRA9TVsSAnZWagAAgP8QAIUglUeVPkaWvWZzhxkR\noCmTFmYuaKTOrYSdQzQhWP2T25fpP2T3iZetoBoTVNIkclsC4alqCuR2ZVQD\nEWqurIZkePgZwtKwMgkSDcnpEBog09Yu9S1ZF/UvjyfV82/QUQo13cR1HOC3\noOba8800QduBlttw6exdiYrZ5XWgYA208rEsTRZuRr2DLyKX802t8PpkH6hk\nxtGFJjDBgmfdV/+gbJ4n1vaQ+H04rhoks/5N/S6+vqu6AYDCLk1DAIs8Nep0\nGJ8V1F9s/S1oF47Zx9pFEkW5uyLSZk0QMLX8xfUW3/GD5Vnr4Js43K97cXLf\nan0qC/x6E9yD1rFgOgNPZNAAVly2MEVubfXtdeRVOJz2p+EzcuM4FJHcBReY\n12gUdld6bRAVrbwstCj8xJ2WpSNrGGpAP8SrJ4ZmAMrzbog1/OIj8Ag+NsdM\nECYRN4loPFQbrSUTlp9VAzT1dGkJX2201UjLzvmR3l5BC3FCxTQEuSJk3/uO\nfXugIt/1jTayJ+kEgLn9G3Pul5cyiPd91y1X9KrL+RsdJ4joj34neh9a+ju1\nsiKpI84r6P6O2gaoyicoSKUAw9dlMj9dceWU4y2p5gyVmTxgu/FncuaMQQao\nSk1pRqhSToo3BWAHpxrwB6emTGv4MEj94G/dPQkmx7QXG5Mn2ebc+h5IGi77\nVPo/\r\n=Jh6i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDOSSUnmNWz2ot/DNdxOLSy7fuLrB9QUl52uDajDqH50AiEAg2A4HA8ji6Vsk0/PjHhEAcsGd7KB4bKlqHqK84sL13k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599242871-d295efc1.0_1599242966106_0.46856675999686126"},"_hasShrinkwrap":false},"2.6.5-next-1599243514-7b250b81.0":{"name":"@xdn/core","version":"2.6.5-next-1599243514-7b250b81.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599243514-7b250b81.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ldb8x+4izKAD529zn5h5SBtdzENz69KIZRS0sshPMvZwyOA1gzQZPSGs/N3ahksKlxGx2MVAA/o5hOG8b7FPbw==","shasum":"c511208ae65227eac0404666c3646cba33c01487","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599243514-7b250b81.0.tgz","fileCount":137,"unpackedSize":597912,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUoVMCRA9TVsSAnZWagAAn8UP/RD2MDi5IQJEx5T31164\nA23vyb8fHlKwju+H4/41VZYST3UdpUSdW3M0nMEyMbURMnPTMjWrP7Fgah/M\nmEPUNpOKoZSYgD5sq9Gmq8GyMsKRuM4+ZL2JPDfXKcH1JvC+RZphQ/g/ircB\n89Q1Q6Ml+xHQxuGTNHwNgMHZWN7uHwE5Kzpia84SP31z9vW1G0C5SwKjoN1H\nIqmLosIpdzYSaXLNXfRP5Kz7z2xYrwQ/hd+XsoDJlJA7wiQOMG4D6NsvUI/8\nhEWMT5w3Mc5iZpI5KE6fv6wUh7KWU2UdLaBzePDly/m4mRW8rxOyGX7dQpMD\n++RbZn6S9uckGTqk4i6KeOecLBMB2IBQALH+PKDK8RSAwTYWCVIJaqDgO3Vi\n9Rzk6/DHZ4BcgAPIiMHtbw6UvROwC5c1H6hCG3+KV4txKTj2PXC9AcACbcbS\nf1vuRm9rKfZvOssXfvzT8ThiUJzq03CObFiQp+tAOl/wQtLUzRN/08G8IOXV\n4UTk3eUWl8VXsnzLYNZPy6H4e1KelZl27P54Vc3wxbJPQa01lCDyGBEYs66x\nt3SJwt7iwcKA/tXrGYJw9IA/PIqGyEyKSm+zCb+y/WyxxMCbrv1bfHxWuxjO\n3n9hv6AI5NIDLFBMP9aegLxF2iCecsXyU8IiUYULkjbN0yH3DWQZ69SJKQhf\nf39L\r\n=3Ekf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDT/tBozxH8I+RD7Je/c8yRhUcAGyTaW5ySqam5rIbMFwIhALPdcII0t/yxzhQWtz8TnRgwgH9aBQzIeZ/oLh3/hv3c"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599243514-7b250b81.0_1599243595889_0.10237064375139915"},"_hasShrinkwrap":false},"2.6.5-next-1599286424-ea0ff094.0":{"name":"@xdn/core","version":"2.6.5-next-1599286424-ea0ff094.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599286424-ea0ff094.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Dlkd0Ahq3ZcGU4tOuXZFbxOlA8N3zHgE6xElHLBKq/R5XEwo3smUD1UDQ3xEjQkSdGhtYD3qYpNulIOvzAvPBw==","shasum":"115b02c02c2844c18d1fafc8529452a30c90afa7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599286424-ea0ff094.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUyzrCRA9TVsSAnZWagAACAwQAJTw/2921VxEHOAJK8VD\neWyrjlhNVk/3VwzsR3K0Uv72luEByVl3OCmwUqa1TX7ug/GBCn29iE7srE5W\nbkHy6A54cWx5w9DUnpXHFJBAK9JeDNW50VdLULsrMQVsw1eRL/ilMzKpTuJ5\nwu/X4hYox/RMRtiXfEfATX9SDj3l1bo8guPpwSxOi25fZvuMfbpHYlwgBAPA\nB1vG9VKjmiYM9mzmcdCEdIvUXXFXsk/WU+KDtN7KOweLhj73OimmXHlG7LTU\ncM+J+Pj/TtHy1Z4FIs2CRIbNUqYqDDceY4mFj8337Y9I1AQUyKZcHEWPbSzr\nLWaduHlbcmO9EC2HFKjhZ5fiVU42LRxfrH0lsgDhZIiFFwHnefhRHvTsNWDm\nLaAK3IPlfNqCr+81vwQA4hkCIa/DCjx+lBX42D2TCjCBT/IJra4qZ8vmRKhw\n2g+hAraa2MKJLZSUYYjYFYl0kiqJxsNFlzBY/UGIQtaSFMQAMuazKdKV4rDH\nXLerb4FllzzxjNvpqcLpIqUsfq9b1qv10wNvAiw0rEX9XKaEQBZpG7zaFMDr\nWxHvIuMsoLuCoJv4gd3WTXAscRMZNVfMDVX/5Rats4lKhJYzD9hdFPEz6dnm\n3rEWQR+BXn/FTNVs2tiM+wfNjpNx+JlDwhg7gnHYrGmgdcoMZ6E/xwtA1lvz\nXELA\r\n=Hyog\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFaIM8CjRtbsbjMhW8o2ZSlvNUCpKyN3T+4SaEG40g/GAiAiKEPZdaI66t1zrLJKDthk6qE6zaJsBjoEEumyKXPjkw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599286424-ea0ff094.0_1599286507082_0.6150283998971893"},"_hasShrinkwrap":false},"2.6.5-next-1599288099-2797b89b.0":{"name":"@xdn/core","version":"2.6.5-next-1599288099-2797b89b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599288099-2797b89b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-DtomK3KJma+x677bneb33DY4XPwo+mM3b5q7WsMBpHOvpDxoSlSm59xH1StmNsdi0bzLx75hCftXue/7fXNQHA==","shasum":"f2b36a429723dc2ebf927823600fe59d1b9a0dce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599288099-2797b89b.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUzNoCRA9TVsSAnZWagAAUNUP/3sDO5WXAPdn7GRkSEAP\n96KDQUxJef5FyH+3FYY93hXfWi6dsw6yRwnU1e3R1+U8hurVxI56ssBbEQza\n2AjldHwBqehS6C2aqU8aAzWeiZLNNqMnbPF1YymiGvmTbDFTi9lMsJdTsqVb\n44dtZO2KsHpoo2VdxVtZKCqlAFTukkhPF2zeWP/RhItRhaq698fqPU3dLKxZ\nxyL5qZHxl5aR5rtzgzNpYV6XLxy7MCybx929TRVxyhdLtzBHCYhwCfZadH10\nOvTeHTH8yF8xmCI7GxSk8ssrniEG89bOa+PdszVGzsr3P7BE+YvratPOwRAk\nrKImI9zhGFXvG+DOIzAjtW1bxVk39wcMgCNciV32l7yuRFE5YEEKT8Miir6c\nn3bQq2dD2WQ1p0ZSoFiLGQ5nyZuUGelzAxFzPjXfwop735dLdWD2UuXzk0cC\nKN2fa6na4MT4AGX/AtrYQR4GxgIP8NQAIvYEiEZdwl4WdkbGo+R4/vs8Auak\n/7InrJ0+ymxCbnm0bWkg2kmJOgkboCh0WeWG+V3SDxWxUPeJqeWDXQnlgW8G\nWy8ZZzB5V1QIQdPTSsWMS2O4YsmLL3YJmawT31/xlsqT/IVsPnIeP8B13I79\nwBAY51Bt9kj0sKxSjzwrrttcFnAn6HZsI2Bw9iZ7VXKa+E91UaFQxfAke6vr\nGrAq\r\n=/Ayk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB3IbLzSW+W8IYFQ4L7WOGN3iPyfM0rbRuvbpzf3zN6dAiEA1kwNYNS5WVlUFfvaTzKRtN8pL6xBXIrcJcigni6WfWM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599288099-2797b89b.0_1599288167944_0.5422306300509376"},"_hasShrinkwrap":false},"2.6.5-next-1599289186-f13ba232.0":{"name":"@xdn/core","version":"2.6.5-next-1599289186-f13ba232.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599289186-f13ba232.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-U3ucbjoi8Rb8U0kb5Q96h891YJbEQ3Q1egerY55S9wkkMaI86j3tbSYTYgYE4eW2J+X9neUhuHPfiLch5ojezw==","shasum":"864a5a501455d2411d8953c8dda7b241894a5c3e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599289186-f13ba232.0.tgz","fileCount":137,"unpackedSize":596561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUzexCRA9TVsSAnZWagAACaIP/1bAdPWbkIhRcJzMcm7R\nKZjnDfSFD5UhI5YcfvhIdpXklZZxrmF6mrcp7CPb+XiKaFH6GLtqIu/WaDO9\nzq1BalrC9sI7yT62JFk5mUlmXyti/x17LbyAaCK2r4DdtqhlM7KU/ZTJQmo5\nv8GuNq7ExuBY52LGVQM54l2+6YuNPvVLMLD1yYe0SRl4MWOTnzo8LR+HVT7Y\nHuGzoo5bF4Zwim3BYWZ/OuoWSLn9Vf2ztBv6TrCS1HbODns12AuHELfapzLT\nbTvPCywVNLYfWCMITp8Jo67/M/vg7xNY4hwwK3XBxAEtqEnNpRZbhBoWiWse\nyrgsZcAO3m7cZUkwXtkZZweD2ZfosoBbsBJPuVMIgxYVePj6ZhnKpXh45Olq\nIHeg2/pbSfplb402HxZGdM2CKEBbPiLcHtOMB8SlqzQsgVK4j3MsCdqeaL5k\nSGSyd4jSSYFktAkuc72zjJbwLZtHkh5BfHB0RJS92a6DBzhbqM96JfD0jbz0\nZh4j8Tuu611Yv1Uv4ni9uUCMFQ5bARNnJXdSTjr3uEZ/hhCxhQVB9cQGUfUo\nNuJ38RlQYohPdTYCU++tJA+RvCQ2JYHofU6w38CFUv0oPV0N0JeKsUiwR/xn\ny0yNdcVl+3wzD8aB3wdWiKumUHWLNVWbF0vYYVLLSPakRlr4+r9M3esSJT8I\nNW7X\r\n=NoWe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLIaIGg7kfghu7ceQrWvJ+wjLCqDnHf3LzfEHu0zAJxgIhAIoOUOftVct38wWCZtfK/TJ6ri4zOS24CI6YsSvMX6z7"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599289186-f13ba232.0_1599289265308_0.5419771802544455"},"_hasShrinkwrap":false},"2.6.5-next-1599312826-edfff426.0":{"name":"@xdn/core","version":"2.6.5-next-1599312826-edfff426.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599312826-edfff426.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Xd6jPz0TsDzBxNhCQ3lCiZ4Q7KwaOcoSY4M87P2TXlYQwqEIYA5XQsEKPp2uI6Xqr96viUH8cmPWxrirJguo9w==","shasum":"3e5e57589b65fa23c2d685901eabe08fd6194a31","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599312826-edfff426.0.tgz","fileCount":137,"unpackedSize":596627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfU5QACRA9TVsSAnZWagAAkHgP/1xcCra1diQs2nUsufqJ\n0WdLdpfy3ppTG7nyNPqRAbZEqgWhTs8tjPp1EmWql/fngXTIegzcS7NKRGWW\nwHpCKfKyLnkk0T71rYPC965ZxzZO9HsotaYqrVxrySvo9SdphFzMqryCGnIr\nm8cB7nx95LtfxAu5/yjhPm5I3pdxInHF8+741m8nETFBaZyUNGV8r41uVuEc\nH1hum7iu8ajQl7hho6ehrV/XlQ7J9e39+KGWC24ssh0L9o1aBdQtS4FmAyRr\nmal5/T15stsUf/jBzdXE6iBxRk6ssHCqWV4q8KXymwm/TYUt5bq8uFGDQmWm\nNu0XPbBUrkKM4yQNcePyYqWB/Vtc5QYF04/YgWCHux6rDsyrgC1TSVyzTi3l\nrMjx7k/E3LGDsJIrZyVApg6KlPmK6XQ470s6fUjuIA3t5cNcpDu1Sxgljx4V\nhLZArvSJahnmgVJgE+q1Q3vvDgf3qfTQ+APXEboy/8tvEyt/aB9Nk6xpPHob\n/1UBuLZFOmfsEUG1MeCA/MdA+ZrZqUHvHwFkJhO2egwfIIVCgiBch4UVKY3m\n7H+lRSXmillYuV85HeutiHt9Bg73xdyPVJEe1MSdXfzgHAZsjSijXDkDS/Kz\nn5Gwjz9UDRHUcZX1rQbK+Xyn7zPmOiw6kVZj89Q0Ma36acPjYTpTHYwId4qR\n5dDK\r\n=Fl8j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLiE8MeeN1eendD7lCUPEka8I1x12DHTOWd5rIsCxnmwIgYyqnf3nkjW/L5EZP2jSC5Ryc2/th3j9CzaR5Ujo4HJo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599312826-edfff426.0_1599312896141_0.5346374977787984"},"_hasShrinkwrap":false},"2.6.5-next-1599317533-b71812bf.0":{"name":"@xdn/core","version":"2.6.5-next-1599317533-b71812bf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599317533-b71812bf.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YUaI93KgK23CkqjYgCbfpyr/l8uxGK5Nh0PMjb9J+SdvKzkMis9wkT/S8us6FZIZiK5cY+XYGdCN9fR1iZdS1w==","shasum":"04af72987767ce5e12b79128eb669613bdc0bd75","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599317533-b71812bf.0.tgz","fileCount":137,"unpackedSize":596627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfU6ZlCRA9TVsSAnZWagAA3NoP/07t2Lm6I/Hvr/tP1IsR\nR1Q1V+4OXRR6VpMYnCZfRr15lJIlmuKXx9ER2kb3Dt6/GWK/qPu6UQZMiE2p\nqRlsub+PcnMwEQ93JSL219IyZHLExa+f74xFvtD4LRJpbSGE397n1vjOLGy8\nIT/bFnqlfC6U0oNFaqFrJlx2YAkSqp3TuqaClTAjoY+w7S6ne3ZFlES8T3Uo\nMPQlveQDQiMOYJUSg+S6q+WElDQmwKdSEBhDrJA/iXCk7DtrYz/q2w2006Lm\n6swAqEBxqoL6gpZ068HaMe1qbGBphYwY7dLe3iYmZSjxFo9h/17jTcYuKsqV\n2XbEak6O6HExavjP1cEkM7PZGfA2rmGVSYXQTeJjxMcl2uwOM8vgUmKCL1VD\nkgY5JdJY/2gGWUde8Xrw7U3MmC0L1vmG/QsL1OiC9EWxAjfo759Vn9VFzZa1\n1e7hyakERDTNrYvRoM/JHmLaL1RatRxWlACeINX2NGz0FLiktUhHix+B+QLu\nJQw6hua36x/6CJ2nw936F4vSS//Ce/EGiJY+LQQmqkebds+O4oLtZaj/3gRD\noEonUHHhWbfNN/SM5hj97nreI6gf1B13I72ufYOBuPNfR+nnl0+pdbRjBYdT\ntK2RY/GYuXiq4cuj5EoKkTc4HoDMG1QtXEFEuhsNuNeLr3edAsvHUdkk9oAk\nvSn4\r\n=/s6o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGHdi6cSXtg72wyliiYrvVRd/SZY88Ga0I4Sm7Ffjv/pAiAPeSrYv4lCFjhxjWRWwEy5W8b/bfsC2pCj8qmEO6e6IA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599317533-b71812bf.0_1599317604796_0.5729090485700772"},"_hasShrinkwrap":false},"2.6.5-next-1599469495-90406ff3.0":{"name":"@xdn/core","version":"2.6.5-next-1599469495-90406ff3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599469495-90406ff3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-h/AbwGiqpo04ZEtXuGBZLpAnS52Vu1nJ9Rs2iy+VIb90XcysyKDTan5RuHrZnhei9BA7cIp+pMpfYmeBaNHilw==","shasum":"1f1d9ebaf33210c2e024f2c5a25d11de3246a725","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599469495-90406ff3.0.tgz","fileCount":137,"unpackedSize":597949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVfgFCRA9TVsSAnZWagAAxcUP/jn3u8zsAa0mBGdL+V+f\nIgTH0945lCn1Bw2zATbXt1HoRCU6wjz+6jd1o3ymhPeVFNbmNf5JDLARm7Ad\n+xC7vyyqGNnVqq91uVeWgxd1wfTkSoFCyhrwE6qDz0Q5y5gIwV3aPX9r0UmR\nhwLosJxolS4mLGms8DnT2v9Q40UuPNphQfoe/YX3Behzp+QdzxDHN/Va6Sf3\n2qYP4+CIPaUTjp08pYa0sZXsldIilxs7AHHkxsgJSWv7hxjn3lMYfNlSCdVK\nH+kE6sHz/6rFNiuY34Uaff3zAMJRVHbYtUgm+mrMSPPzRE082hUBH6oj2AUh\nHRvlz9aJmBsjJAOATgp+YjgOs0PqOGybopc/4JjFlGUJOZsnY1XmcjdLk8lZ\n1DQpAi6Z3nNe1tG7basokJ2bt+Gw5REV05oDZ2Cb2hkbh0j0F4FZEqdxN2G+\nAtCpqNjbNpY75vC9y9f/5IzK/KOFYxnMue4snQUU5y+5VInIsetn5f4WeDKh\n8+sN6WYXApGlTH2rMlxaE9xCjt50nMTWCjZSEMkdSBcRFEWcQOtImQkcV5LE\nHA4CDW3adGyeewiluetxdiD7e0acLe1WyJeCK9UHCTK+TKkimh+6jRYxB76b\nmAgREXSCAeRAh2Wi5y2ydnFbXKgx5grjAIplBgyGam8fMV6N1wkGeiZCwxv0\naAUb\r\n=/1b0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfmEmpWX0qnetFpfg1Xcy88e26DrZV8Hp+ngtCJgd17QIgCvOYZDJJSR/njBJYnzDEp7aCewjJGPIR7IMYdzLK3D8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599469495-90406ff3.0_1599469573273_0.7921242530379042"},"_hasShrinkwrap":false},"2.6.5-next-1599469586-56835928.0":{"name":"@xdn/core","version":"2.6.5-next-1599469586-56835928.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599469586-56835928.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Q7n2N+6OSx7TWG4b/gz1ElDGcqTua8QTSoGpIZN78F9waZGI3iJisj29VXnVpvBNVlS2A13rXgQEk1c73SGF1w==","shasum":"cf604785dde2170b3664df2cfad499c50cfe16c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599469586-56835928.0.tgz","fileCount":137,"unpackedSize":597949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVfhnCRA9TVsSAnZWagAAGy0P/1GnvfYHpE9PP6dJcTz8\nw8nutsya+2cgapUEUrHGuS2uuWzwLgXnVp8A5NRPlhC/0RJRynwA7jRHNYEI\noq7PN4S8PTgPfBfsoZD0I+uxqarbdbR1GTkZD7QipN5NG4DBFujh34QQ6bcx\nStouodVa6ifxFMgUD/fxdbuelBbZRLDNJXMYZ1PB1L+h+y+qTnc3A2AnUBZq\npT852+HWogoFs8PR4AXwV/XQRyp4DUykfRmGg6y3ySqb2VHRXh0/A5EYoJa8\ngjDGVgK/JziVS+iUf3SVVAZV/9z+mEe+FxhFq8Scz6bsNQi+82SLshYTJ/Io\nVrqrrxXjpZj624hJ9KenPPpGQJWcG1ii5qct/4EdUbGgkz2m8FqxXRYbJKwk\ntUkHYLbItgAX8VTWoErdi3zP8CjK7ufHAe55aHFgYldSB8nfGmv3WrspFbmJ\n134cKiHnFDpKhsOfak/3q9Nb5RGet5mAlMocRmhVCUDW3P/oA3M0mTsghLef\nMZbsObs2kwDK10KrLxSx0uGmsyfTicoafu6N6N7Rls+dQh0vuuq5R5F7M1lh\nYjENQ6pdX2JoBd1C0W8n+1sMcq3gRya8VAAUouNGVljGaR4/6YFjbiQBjXLQ\nIoUl2VxsVqDltSdQtGBUKOthT0CB8Xq/5qoy18pjcTkuyU3Gk1Obdv5Mp9/i\nIqsE\r\n=Ibf2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBp2DlRbqNyBEjRGvPi01qRX+UO2FOUnFFg+XakAegeBAiB2MBO9W5iFQHNfI1IEntuB9UzUttUGIr62clJYCET10Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599469586-56835928.0_1599469670906_0.18896951795774597"},"_hasShrinkwrap":false},"2.6.5-next-1599472221-90406ff3.0":{"name":"@xdn/core","version":"2.6.5-next-1599472221-90406ff3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599472221-90406ff3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-QbEvp171ZteFk3LAYDt+Z7ilw5i/mGnMY9caVTEQTdI+FivVGpEMJM03fgsyUrA6/daFAgWRnIMQ+ADA5DMLEg==","shasum":"190e7f91af9ebee9388b2602a98ea1b2a3678b3c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599472221-90406ff3.0.tgz","fileCount":137,"unpackedSize":597949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVgKoCRA9TVsSAnZWagAAXgoP/3aOZh1bn2wDiDpITLLh\nilXs5ghOz/7iyKC5UHMRPPhhkVonhBkTN4uXWdOIUk5R8ImVY+m4AqJ/h59M\n0ug1rPATkUp7P5MiyZ4WW/H1e5VCf8++ftJCBAv9AvGxwIAPOxaYqrxVXoD4\nxDgcJuXX+AkqLwQbeyqZYlbpY6Tda7L9xR8MVlqYd5Waqy+F594zeoFvhGbc\nwqHM/sAhENr/woWTtw2lJvWE0EHcojr5aIOs6YXJgZV+ytehrD74/gLNwG6n\n/JiGudizMVfPe0z1PIN+gA32iWRGegbMz81QhdMfsBN2Q30vaXxM2jSpHhDG\nsh/zPm0DoUMjhVlbXkh0EGXrE58iYCY6Al2UsLIgyQcH6ZgyxLuTthQwNd8D\nIf1EBEJMhNN5Lnv/XUIsq3ATpv4+qwwZ8+yAXyFo2EXgMBTaGTAxzk5AxVcQ\nn8Fd4II3ctB0SRuxO87nEjK+ubF97kcgV1Z33q3/myQl1J9pOjjFZTvt2cxU\nA0m1LU4U9GzPcK2W6PbeUZyZyIRKfzrFwLxKmbNS6y0IC9OBqrne8f/6CjhK\nQkNpIORTc8TaZInDCsi65uNtXXiDa0KNhfTRA8kjF/aW6aNHEQA8vUouPDv7\nRTK/6cuDZedC/qV/apJS+EsUXAdCe5X+lBDFSQHhPV7OfnPkBoyVcLnsT/1H\ngRrA\r\n=Cjeo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF3WoxWrrt8OzN5CLBan4kodz9j4RoZrVdS2qO6aJ5+1AiEAr03IR7mTkXUifVv2ToK3nBT79F+PcKBJfvo1tAgbdHU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599472221-90406ff3.0_1599472295532_0.32825957069496026"},"_hasShrinkwrap":false},"2.6.5-next-1599473037-f966c51d.0":{"name":"@xdn/core","version":"2.6.5-next-1599473037-f966c51d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599473037-f966c51d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-J2y60STjXw3oExR+FbwLv42eABfwH1vb8/i20sZxydH6B+twcykdEreriNB9FPoRgrn/CgzRogSTUa358+CCsQ==","shasum":"50f52cbf69d713513f56ce3170715cafc8e9bc05","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599473037-f966c51d.0.tgz","fileCount":137,"unpackedSize":599364,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVgXeCRA9TVsSAnZWagAAqaMP/3H6loUNJODfNnzDNM8G\nKzTTSGQrU+5WFRihBbyNslx/otsS4uAkVXHgOwCDkgajU3d/Wazc9c3Ra43v\nTnrl3CrcbGAeWolcXaTMQQGUzDLofLYf83sjOIAuYL7EdjiYSmq1MpiC7/gs\n8Sw3E93VXamldedI1iseWodEo0hlpg0vx5hJ6m4CCMeIcQsoEo/s6c3zqlxD\neXn60EZCZLpF8EEFZinRwDEjliruJ6D1PXDd5jp3iNedp6jU7t/IuKVZLOF3\nfuTpz/+iauNaLEYrq9BtLIDUo23nBoyJOm5Pe4oLhEtySUNc4eujrXE5ifeC\nq5d+XrvmggDQjtIiE5aibrB13i+U2yqq6iCPa604nwnhU73mZO9s9+zPy/V2\nUg6dl2dIN79dXLFR1O/rdvIhwIxu5g+yQ7ppIrkiSqeH6/xE9BX0AqmqDN1A\n+P1rd+nNCOdPhXEibdlG0eBfAPtj2rQqUn7pt/0ZkV25bfvcegaq4EqXNcDv\nIyZtD9mhZ7yh2LeUD6kkowaAFJ1H84UdIoeT25AOGrjgbn+nmcQA1vWm1Eou\nGQKDNFZojQdMu/lAZf/+TpD1yoGoxeyN+A9MbUUBWmvqLdoHdZK0oy9cYnaN\nsbm04+uoOnWFDezXw4f4Kip3trkctT3/WslUSpuGK7efBwA2eXVV2fUMyVy5\nSJpy\r\n=BoVd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgDcsoXI10aUygl9MSJP7mwKimTV0UPGXVWwQvnLZqxQIgfswAL4Y4X5wV+L3A3RwvSDPGXWEweBg5mbN2M1ye0ew="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599473037-f966c51d.0_1599473117838_0.4863106238827479"},"_hasShrinkwrap":false},"2.6.5-next-1599473340-7c69e6c8.0":{"name":"@xdn/core","version":"2.6.5-next-1599473340-7c69e6c8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599473340-7c69e6c8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dDpd4ZQ0XEsafZzhLEG9UtIl7OZ3ON8BvSMjKRBA/SLjci6avrSs7FNU4oPK2IXBZbtsgZzDpYkGHLgrr7I99A==","shasum":"cd8c65a2ad894b54bb1b060db113e59fddd5ea9b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599473340-7c69e6c8.0.tgz","fileCount":137,"unpackedSize":599094,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVgcVCRA9TVsSAnZWagAAyQQQAJsbdc4Lw1/xyTR4ri+b\nhkigcEzIl63fC8M0kEz/IuBt2L+nnC0fMXTBdvkPyZem4E+U2rQ8rnJqJWv8\ns5ekEZxxvGAmHDD9Ez8GTIVik4dBUNhc5EcKTUcyL/+X9I5GRogeH1Jer3QD\nodLidu4aBK44vBJPZ6LGIJSx6Io50T6wt7NYy5YymNiDgm228lANbGCglRoG\ntCKoKSXK8kuJ/EI422butEDUyI0A/g9FetgoIBoBpB/Upl/JS7mM8th9GrOJ\nDgTibSAWgtzUDATL5LRfzzhtBkO0QIF6CLwdO+AkpPy99bjBwMFMsQRcVr/P\nFtceyonArKRsES1DlqiQjP/Ww91nEvVp5z89TRKd+Nm0NN+iF3nlxdrKpOrH\nIGeKG8Knn0Qz3Kz1HzLCP3DVsAb3Awzi4lOQ/G+t+S7fHQbzEq6ncbXwH1wi\nYNSq6C5c7adcnOFh7NL706GUl5QVmexVFuTLhdcV5QPoq6/ud1kZSmPqyVlc\nZOxq3S+RD0Kr/ydkFbJ92AWxurX27OwpJE+FjwLSDm9vTgNZHu1lx3i1E0kW\n+6cyFEqJaO01qDBGKO5QBjjlVioPT3EIFPO9DLypT/zGi6Fnh54GUyhxeo1r\nfOxC09KiANhFm7taas/slfYtTGtLDxQsPVS1n7wZAZcFDPrlYFSdbHi5ZtoZ\nrkwn\r\n=18Nm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrpFIsqHHKhmUxsh4mL6KWOwyFmVHdVQiNziMahi6hOgIhAOqmVVum+qEbRizhpO+YnVaAewcSV8/hjdoTuvgsdszr"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599473340-7c69e6c8.0_1599473428829_0.990329836638091"},"_hasShrinkwrap":false},"2.6.5-next-1599474040-ca9791ea.0":{"name":"@xdn/core","version":"2.6.5-next-1599474040-ca9791ea.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599474040-ca9791ea.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-GbbGJg4lx/Bzi5tLrJw1DMU6FF9azz5z4d9Zunp2uPeErV13ryjNM6C5xBp6150R84px6ii3Tk8LIC0WqUn3pg==","shasum":"4ba6bd7087f5a316546ccabf76c89088364888b1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599474040-ca9791ea.0.tgz","fileCount":137,"unpackedSize":599120,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVgnDCRA9TVsSAnZWagAAFcwP/0d+uSMbnc9j88E2JhCJ\nRo4xUTFdutd9Y48CR5BSQb2H0q6ZkgKswKvWYvpi+2OjqaGb2BvlFGiC7yv2\ntHeTqsMTuuWXhen0UuOeNIj7OzY6Wy+2BYOWkb4RRW1CLwOb32yT08qdeldK\n+vfV+tQ9J3nfKJdBJ/YRTcVw/qGHxaXFf+E61qOEmsaxBn6gNqsTWUSSrEaf\nDr2bmY33PdXQyP7xRIyoELVVXYCZPjDJE8oJVICpf++5cGWkIt6eBwvduIxZ\nD9ZYv4JZvIqBy4RJRND+Z7zIrCobIOSC7YPN+8GObqXFjFLiYlCvYn3QSsj2\nLuvDZF8qd33+40vHVYaD8KhYQHE+ZX+mz469nIkwJ19DihPlzxrJP9fK7CVo\nzMFEaejfKg0itT5/b8LRKx5A7Pf69PmPimnj9Vq/5waV9Kjo07gLWwLS8eW4\nReR0rubf6GZ2JZ2Slr5Fbo3vZpY9rW0WihZB9SJ/NefNWIawRoeKYafHUjOM\nqo7C3s0ubZD+NIAiY/0yRzLd33tC9MdMEUV5GoG0AcrXPquXbAPqFrzB7cIv\nVAJ0M9hf+gB/jXqYHoanjnTcXbIaLOsww+jB5E+OpzXx7q8G/EJ5PLMlhSLd\nudFe22qKrxSWia0DAsucK+Mjc5GgEGt1vmrPcwjIc6oQDqcDP9Elkux5ArnI\nyhlj\r\n=A8t8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFupoYTXv+UqnU++vRcjkjGpy3i0GntlJCvZ0SvEMTN5AiEA6Ti7woy8DHjZWa5+B9u3Vdme2ehQBSjq2O00cMugMkI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599474040-ca9791ea.0_1599474114872_0.16090257594104918"},"_hasShrinkwrap":false},"2.6.5-next-1599480676-3acc3469.0":{"name":"@xdn/core","version":"2.6.5-next-1599480676-3acc3469.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599480676-3acc3469.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-oh5liY6/io7T4vE6MdsUnBiO4V0v+UdHzJKg4V+R6Ep54ZzRbM4LsWJOx9zFRkwlCQwHEWBtRLeq2WD4reGviA==","shasum":"000e4d79a73025ed1de1cb5ec4eef108c2b6a74d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599480676-3acc3469.0.tgz","fileCount":139,"unpackedSize":642394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfViO3CRA9TVsSAnZWagAAD1AP/AoujYXuTP86JC0yHG/5\nTaHjoSt4JU6bqPKajKchOSaA0mLXBEjVC4GsI+DCMPWJ8XGq8nEnTmcMbEuu\nW75aEcypPZfxIe/VJwq5oHWK0cfG+Pu8trQ2+qX0WodysbFOabyIejw8eY0e\nz3Xf3iFwEEkvTl3JyCQe6dnp+Q/eNmyRt0Wy7atDw56y0cQIjRKTVUpgKc8m\n2YKHNmdxeUD7oMLOveTV+20X6fTfgh2GK5FjuIE33Z0XcNVJJUhKszfMEnKq\nJ7j2IB6LIZU3dwCIPZM1x6b2PZlnhjM2GuxpznwiymUQAVkdCoMiuZGg1Dcm\ntnkRy8XwcgIIzJpUPoCqb9F5Q3pmNJ/bj3W7pMk/szzFPnQCmJVY0BVACIus\njKUTDMzbomplPRx/Wy+Z0ha8dtv3FikYDgl6gxBgF5BsA0tw2AHwPPtICYsm\nHrCwW+LHdthb6OroqZZ293/xupEVdG0uMZX/HvdSqbaNQPFstVsdyjpah2/o\nZzKJfzoVMrBoWMphSa10A6eu8sWVYKFbxeViAMq11gVy5oKd+aksFJF1rsgz\ntaW9uot/ZQE59ui3qXStKRpNUJ0/PUzlspVdtwWnDBnBSHYlAxqD0YiWxQQ8\nEMfqSTSRFv8XarEqluWOKZc4VIN1rIhZvasHdAATEuxZgXFu3c10yK8KUUlf\n5I3u\r\n=2rmh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAzz/RI4k/rKhnFSvK4OvP0L6v+Z++felAgrTcPZRHx+AiEA2v7cWJr9L0QLPPt51PBiLGOcY4Hr2AYA9dy9xTHJicA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599480676-3acc3469.0_1599480758779_0.08905541040925935"},"_hasShrinkwrap":false},"2.6.5-next-1599485337-5c7ce214.0":{"name":"@xdn/core","version":"2.6.5-next-1599485337-5c7ce214.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@babel/parser":"^7.11.5","@babel/traverse":"^7.11.5","ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/node":"^14.6.4","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599485337-5c7ce214.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hdIZkiX45cLd97TvUgJq8Cm9ozAaZC0Gfm5R/2c4PRR5KMsec8eWL4IOVq57MTLdt8LRLEaMnAZCPbLYW/cr2Q==","shasum":"762d562945fc761b5ab87169cc4ec850040f4f92","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599485337-5c7ce214.0.tgz","fileCount":139,"unpackedSize":601065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVjXcCRA9TVsSAnZWagAATBwP/A9ax3EeaWpT0xvmAytR\nnG5eyzaskYgWYF77d16ui0/kkcMwOszpY31+yqv/h1ZDXsdtv4dPvfAxYyDD\nvDig/4if2++bbnCOCged15f7/IbIOFZkRPJGQdmt2iNR4R4gnRCVAQv7Zy3Q\ne0nfv+un3U6HXquPi9utG/R/3PJR9xpg644R/J3kcT3yFfhZaXmwCuSE71yB\nQEBGBJPU+yP16uSLJkJgSsOLrc1BERETOqiAjsjCWaWdi9SiJWzkGU9NGL+Q\nmQrviCuEiZOFt1xeNt3CqpA2ItkPH6nSv8C2lUcg7vZedPhkRMc0/TdA0szG\naq7psNGa7PFUswZem4e9vJrYWjt+bhT7qnoUW2YUnLYUbv0LT+dmJEDIf6TU\nhE05aIgTSZ3gRQjc5bBum3i4GOdjRYfG9az+YWMFn5w0t9E0bjygycC2PSBX\n0WNQkV8YgMA90gmTvn37/MEzuIwaB4UuReQiySZ3raXy+oMq5fwZKWILZeAj\nB0lVfW3ccrHX8bS7MmixZpYDJG4hxZqMBp6qTlyzdqDBirRTd/nIX0D5VSVs\ntERjknIcS8LUOBnNWwB0wCRvP62KujhwdNHIUv3EfwCxK/+gakseTgDAlw9s\nW2rv302fJz4y6HSERnG4ggUsc3BJstVYryTOxlDwESggvRYO0a6i/NF5hfXe\njoQ5\r\n=4pXK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGeawnGD2Oulli18iIxmmTQQXSTsIwxmXauCZJ2ARuroAiAnUTw4e6Qv5Zr5uIiW3ZtgXBOYYaHLtVnTHG/215HpSA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599485337-5c7ce214.0_1599485404398_0.6105528633265165"},"_hasShrinkwrap":false},"2.6.5-next-1599487957-0204c3a1.0":{"name":"@xdn/core","version":"2.6.5-next-1599487957-0204c3a1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599487957-0204c3a1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-T/8obxpJoPa1Y+bcF5QnCuN3pVkuohFHfDKXJ3bQxHs9h2+yTBeJFPSP3QTyg9V89Ykzx4DCi9j2RRELoxKYhw==","shasum":"697945d3da249e90f73dc84419060497f5227a86","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599487957-0204c3a1.0.tgz","fileCount":139,"unpackedSize":642394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVkAmCRA9TVsSAnZWagAAT6cP/1QbAaHwZZyp6MJ/0OwD\np51AeoZWULv+cjQRv3rFCjCrlWRCsPYt+WL/eO8GCKMXA8xmw8mNyVBd51mH\ndsN0/pao0eQZ0yW73nWgqAOOhTEEdglTasInHf019mG0unf9PcEhm3BiqZ4c\n89w70CqJfIrucvSVwTHCQCaYNkR03ZD16H4LN5I6r80CGzwwFz4Id+dMRBlZ\nIiiymgfsslYoS0fjw/UwnquXvhm2QEm5HLmlaUrTwiq2tx5EQ++EH/SXHzll\nehuf4LuVOwHEOfNW1V6nSY0hu986So+tiMC3ZW3rqqIIZcAU3oriNmH2LNaA\nrgkl1/t9MdfLj1B7kCbAGr4NuMG+Bwe/+27zdo8lOH8G5SGndkWr2boX1Rf0\nZrbR+2S7RuT5ge2g584a4FoWxQXo8+yKzWhwmODxO1+6c7rFCqgTqswjvt9O\nfRGQRu6WAabP/NXBQcHw7r5dmPMnE/aBode5PVSWR3VTXbjgeUNgh2xy7+Ft\nabtTpEDrjb7pOTyM0N/C4HrydZ7nRlNZ4Ouy6hnhBpHMWz9zfmfttHffk6ZX\nxLzlTn6oft/YsfKi4E+JW/11L84MPuGnBX3kQVJhrZ65kcxw3gYjpdxV3/+T\n9/7vKQ8F89NokuwOUpstEFbO/8XdAo6+ryn2gzO044C7T5Lou+8ep8Wriljg\n8ngU\r\n=mJdT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbetw/tNioy3R2x5tZBbXYWMq0ktNHmPU++VSolxNqTwIgVcTTxwg5KuGu2yaQxb389HjEu0yxKDHU20cauaQU+mA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599487957-0204c3a1.0_1599488038419_0.2757110734172985"},"_hasShrinkwrap":false},"2.6.5-next-1599488258-d146c84b.0":{"name":"@xdn/core","version":"2.6.5-next-1599488258-d146c84b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.6.5-next-1599488258-d146c84b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-IqNFoyY61I5Mo1EXWCsIohzBO8DrCrV3Gnu8AqpkdMHseSOhjz5qaUtO9OrwLDFIIMeJ9s76sg1PbCMz+3g0Qw==","shasum":"4054f3180e9e0b60c95af1b11c0ab35fda490fa0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.6.5-next-1599488258-d146c84b.0.tgz","fileCount":139,"unpackedSize":643631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVkFUCRA9TVsSAnZWagAAwwwQAJA28E4OpcqM/J4dNLu8\noBPkmMlwSeSH+9fDgRqaTM3VpWoe+A7il8LrzgktqzyDru4RQ8+0fHUdQ6Eg\nqd/e/MGf7fLGR9i/mRBrS9cY263rCGyt1UjcVYOQvB0dNmOpwiH4l30QgyZr\n7y0t2GQzFAaZBOEf9QvPAIkqfcoAETDjIlfSM3v7fw/xPfRiGTIQQctFw3W2\nSeGfgeg4AexGIDMK93GLigGIhVMpueaMOO+A68Q5psH3Q9t/wB5z58PlHoI7\n1O0MXGG37zCNng0D3e0ze3kIWY7raG5Rqt13j6hk8R5Dh6Kl4Ni4Q1q+EkAp\nytFR+1PzNQt7npmQlQQ3tU2mO5otl54tkcoGhtBbMjIgD63JsHSS5ANPUpxy\nxpkupkfHRWoDarsNl04tQHzM8NL41E7s/qvlAxwuvm7rNleXwazqJqPdw4qG\nPHgjFoSGguT9UL9kqhqEmEW9OQ5cHmSQJI30QHwbfBsTolG8lizQtiCcNDlL\nFlei2BUL3nhnn6HekgGXlRd4+5jAsP6jki1i8H5i/yVjgOc3ymTTZBjdpsWK\nJ3covA4BPzj7R/83eIhXRSda4HQcVZ+bJhYMCwzhdDrbGyG3Qwfkxy26/1tI\npMPT0k6JIIQ0m0sFw9aPAno6U90LC93ksA25MfGEZWdHk/w1S5jgI30JErKS\nF2tP\r\n=/WC1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDn03Zb7oCtf1qwSxdb6frxVrKq/QWtNwQ9QO2UVgrL9gIgCUGz/HmT38KJnt4GFXDWm7Go6Gr9i3a/994zmkAssLI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.6.5-next-1599488258-d146c84b.0_1599488339692_0.9441726376887707"},"_hasShrinkwrap":false},"2.7.1-next-1599489124-32ecd24a.0":{"name":"@xdn/core","version":"2.7.1-next-1599489124-32ecd24a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599489124-32ecd24a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ZFAxGdlpnrfrnX0/6jG2MyG4uLaNSiZ/WUF41pjrQwLOQZllxj2p7Qs10MO5xwnkid2UHut9Hq5FitJyoTR2Tw==","shasum":"62a90fe39a556eedbf824f6d1e84e77a5761c609","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599489124-32ecd24a.0.tgz","fileCount":139,"unpackedSize":643631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVkS8CRA9TVsSAnZWagAA7/MQAIW5Bogt/IaIKDFk9sK3\nvmNVKsTCmanfYywbEncUG9jxvDz0Gl+1uv01WPy0HQFg/Z0xaiXifsw5PlAw\nNd+F2zgovMe1pIHKWACIN/rCaRlHp3GBAKRkj1vLZXnZZ0Kx6Oo1klhortJ8\nCHsv0JAvqDPFnZ6DMlEk6vpzzgqeBoJQKUfqMJLBqP0GXhUV0LSpUYGNxhB1\nYw80STin7E/IMBNGkdt5PTQ9NINDgzuN01bzY2Tn9DowNm19Ijap76geQGVJ\nzWbstapdL9Jg9kCVU4if8PpuhSfE/eCgktjhXtjDB+W5qbcGu31Zh/YJQmZ6\n1UyK9/PgSil/8LzRXYO4RMvIyrYw6jAJEVcz222x8YIukO95LrmOw90laPVx\nweqWNUoQDJjdtrc0gnbhCpRg/t8bSov56XCmEvBoAK8DJ5+MQKDADuIY7Uoy\nw+GlSr+m4OFXCZF3YnJApJCeXV3lqcsm2gcx2lbTfjqDU0iaepBP0VTHs3mP\nEHZ1Hc4qDJ6kxZSzVrRWpMgHV9mPvBUxRU3A15hckCPo7/Mn7XLFsUxVRk6l\n3kaBiHG7yROqLLpQNgPsFA5FZe8Z4ih4eSeOTHUYXc90taHQyTG7S1cUsrYO\nypq0nFUbGCLQOSESUhBk4X5KZ/PJ4Ra3XpPFufalbI3lHd8pvIQ6UTqIK3mD\n+LjL\r\n=QiD0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+HltTs5kx0JRLMFBb/QwJdPY2vJ+ZTxmebqd+iokEmQIhALKgnIBl+s/I+LtKaxFHF203jPVDocmw+t0kwjzPVCit"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599489124-32ecd24a.0_1599489212446_0.38711868604724486"},"_hasShrinkwrap":false},"2.7.0":{"name":"@xdn/core","version":"2.7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cf8JduUNo9KYl9dm0TxGVTU3sWE+IXpsy9K/0Cc9p7lZqrfLLzhJNBQripKEjMKBt7Fg6HeUEu+V+7Xlc1iWfg==","shasum":"8b83dff8e18389f55394daf2e7ac086b3dc21fcd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.0.tgz","fileCount":139,"unpackedSize":643577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVkjoCRA9TVsSAnZWagAA5kwQAJtUGgJi1qC6RwISV4nw\nRff+7PAsGx0v+SDtOgyjuVpAWDihnA8MW7+guy+D2sQIYAYEaMB4Cqo6fIlK\nqO4zYSRaVOV2M4YAQcVyqtHhvLOFcANWs8JcbOjRz4DarBR7gdAkTB32TRdT\nx4YOZMTl5C09wv9/SsX9csz3i2pHddILHw3cfeY7NOENMwI3mvAXOkg7KH7p\ntIdFAFZe+3NWnkW+6wcPr2FoFFV3XqyI7Bm8bgxmL/NbQAlrP+E4JteB2rRF\nLHLCFJHonhGdPy5avyjNiP+/HwveQWbaResEUZ5rQ8580NzWMAKHRbqAOByh\np2unMuq5UoYMVRwyaUBisVoaz80tYO6Cbs4lpjokZCiSRQkAGfks9jLzy5Hc\nGhl/UxsKRssJYQCMz/NC3BcJEqGOvpVT+F+IgqeFz+mf5ca5danbjSwFxyFx\n6B11DlhLxlrJhzDRBsDUGcZBwNmKP+fTm//LYsW9cbBJmTT5MY3Ch6ty2wWd\nBbK1XEWBypmZv/ja9P8WPTMEJkZ+XIBRJ1TtyiD1ABF0y61pHmjlubI1GeNv\nDKGpl29uWp7ipMMDLrNVm7BnmDqNmimjlUEMBsCIWPmO2dG/g+xB6vc1Db/n\nfAYO3Rlqp772ULCx8ITHYpggJJj13/L0kTTnxBGjYijMuWP7ZXyMjd77bcXt\nYABj\r\n=iSgv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8jvTvqCJ4fXGkNF8NX/8CccM7lQ9j+tneGrV/effmaAiArfBu5t+8mC7uPKyHKFa8MidHL+cRifTHKaWmgzLlOTQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.0_1599490280347_0.7804908897695584"},"_hasShrinkwrap":false},"2.7.1-next-1599490635-c6d5c370.0":{"name":"@xdn/core","version":"2.7.1-next-1599490635-c6d5c370.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599490635-c6d5c370.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-AmZ3MIL/hK5TA5RKfPcuiku5vTqcr3pjKk4opWKMBKOLlRtk2Tjp/jDOkmm+XXsqj112LBYdn4WwmFz4RlC/rg==","shasum":"8bd9b0aeca56eb115beaf6bdaa6998c5dad49560","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599490635-c6d5c370.0.tgz","fileCount":141,"unpackedSize":683593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVkq1CRA9TVsSAnZWagAAb1IQAJ8uCOfA02MT7nTeXza9\nEnbbUqqKcVq0TUhWCkchomRVCfehw++BJ5TlMZOdErTF76KONBb8wC9wKJ5/\nyR02fJwmfl6Ud6DlBm5J2F+4SEf9pj/SJGt7dXDpN4JY1zjyLClPX5NGx+pt\nLl1eG7G0S7p63TBgHaWjHXg+EgYgCfqv3kB+EO6QNk6IesdULfGxEsrRpby8\nwqrHm0BFnQxeyVnk52yYvag6UKVWqSL1iVwtwc4jo+CDBtMWqruW8BkO6rQC\nirtp6Qu2Kj6ppoMX7BLeE6iuPLjIwdLA56k+wMYD+K4E5ldREND103xICLsk\niz9EVm+iMUSFA3BgSKgz4fOSTdPhR37ZfcL9jf/hPcXEewJiW6s64C8YKm0n\nMLByd2/PJ+e83QSLwCA4GmmIyarL0/lQs4uKstDLH/0hrPkbP/bQC8cFBHrE\nS7m0PiXwE3U4u1UsvkjmNaNf2GxzHTK6633wAvT7NSocrGP+xS18Vrd3klKv\nyZYBQGiX/HEqNr6HWPA9Hxs4QkUEBGua3ODflGHi6c8dpGVOoAuPNtwTPsI4\ntGQCzjVNdx6mWdoytVYQOqnP4HII0VALlufuJE+qfZGFTMw6ns3gVRo1nc7O\nanAkJEZiKtWRvBzmj3LGk0tvFb/ZG+bBq6AQrxTnJfmtz0a5WzSH8KIeULYS\n/z4h\r\n=Q0M7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcJ3d9qLslmCga7g/6fNK0Vxgr5jwmkSFXFfWDK197TQIhAMt9zc7z3+21c4V+n0FTNDuPjxRZgCGxODv0eAp1Y7Aa"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599490635-c6d5c370.0_1599490740644_0.36253564293217355"},"_hasShrinkwrap":false},"2.7.1-next-1599493824-5a123140.0":{"name":"@xdn/core","version":"2.7.1-next-1599493824-5a123140.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599493824-5a123140.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-L5obIeeRILM0YgUFJddFEownUNoNZ77StnuUonWY/bAIx9JxsO77y8xVBiaSnG0vXMSghpRn+dQUWSkNv+ni3Q==","shasum":"3214c0b78018767fa95142a8767e9a2f3b77fa9b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599493824-5a123140.0.tgz","fileCount":141,"unpackedSize":683593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVlcdCRA9TVsSAnZWagAASJMP/iveir50flaaYbN/3LYo\nCAsn/w6mOTr8XfRaD+XoJY4+icD15BWTs5esHs2OXiYgCtPKkL56z9sBZ05j\nJkgxm8PPw4/GCFYIOI4RHLz7esiotYUbhXpR8GxHHuxzaKTurn5DxVUyvKsp\nwrWFBR4e5+k8EA5hQm2/Xs7gpZrvwtHUUSGAqGlW4P6eEb8Pt4FbXe2+acGU\nayfP2AtjsNwAXj0cNMAlqUA/kkvecL/8S/wvKGq3wBdssP9JJOUAx8R1tHVu\novC19uvDi2Yu2TbrLwa6kdxTMaKizGe+evJRJ41sllc1AMxQ2K0ajb5xN+A1\nGqMWUD6ChUrDhsirL+5kxm88ky5Lt94S0jD4aZyD86lUkZIQ2+Jf6T/qP66K\n1gXNx/hLrkqDvi0VhLERztOAFxiPIR5PzCNeTPS05iU31PQj1XQuP8y9t0jt\nIgjPUGpGfsDdj373OfM68f1LJxo/iK+xAmpeZoGWch3tA3IgsmYzxgTqOdpY\nnqAwV/lPyWn14OoMTEplm7hNZd0jQRGkgFy6LprujqU0ERLjev3DKGPQe7+Y\nnWHODjKLyppRUczqxEbLAmTuRRfzzgxsO0RkXaVv9PnNYUagUOiq5qmvtCkL\nc5IrCAjHzmikjyMfSYzoRgmUy+W++CD0cWzrpNHlMEY2/dqMPaqyt41m6kOT\ntCE6\r\n=yWh3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFscdu01hLdZTuXlhGDnB6/g84KeKkYXMbe0l7GunGZZAiEAj+YHjGdGygShaROKI5aXF1AfI95MYiJWYNzjC4IeN3c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599493824-5a123140.0_1599493917290_0.29212797324738604"},"_hasShrinkwrap":false},"2.7.1-next-1599494785-4955142a.0":{"name":"@xdn/core","version":"2.7.1-next-1599494785-4955142a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599494785-4955142a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zxUrPhET4+Sxd4nX3RJVcn55Y8mShuOE2AXN4YtkZupwkYhaDKCPyMmAkwTm5EIJLCMiTKZ3gCYHZHLqq2oHuQ==","shasum":"2c3976f28fb3de23162cd4b24d5baf63c0687c29","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599494785-4955142a.0.tgz","fileCount":139,"unpackedSize":643843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVlrUCRA9TVsSAnZWagAA4qoP+QF0azrjZHVPkquDh6Nm\nfQpMGuE8vDlhlq3OOvWSmWYgc7u7Bk4zQZBa9HSUiDnmn78TTS6ISvp7DRGJ\nKpxYsDn+iahKKqUVDXMUZzy8RpoxyQyeXStaDoQ9TjmcyOVIZja69rH+KLEk\n0jaZmuOdDHkbSf8rJeFmE92LXPKugSQAupun59eGcVFjgb4aT+5MHnm3sfOF\nh8nSsYwXV0+VPuX+LlaaIiIER14so6BwGtvT2QVAdLtq/jJEilcv+8zMWGE8\nfGbazn8prTwpZv20vqcQPDs3UzuNom3FZ95l3Zi5ZssLXAXNMoD4gw+3wj5j\nhQ0ldSD8IqVC3OJn7EHKj3jEtkK+p13MMh16Ca6Qacke8wqmnvDdaw4rzEe6\nyP4jwAPzYvIqkPu/pIKHaSrx5KlJRZtXLgs40072AvFJ9r69ubIgGFYplUE+\nSo5p32lsGX5/DvLefM6JzZTCy3/hMUp0wqlqi5XiwrFj4sZZ91Nq37AJ+B+N\nEm3MQsnFgA0y2xrZ5Mk1ZCPVd/pq9YNllK+6Oeecu2u0+2qBMDP/oBxyNp1Y\nMpu1cxMkimJdgHCdgdfqDeC2WX4+QdL8kw8ELXRUXeM6tjKvyto0f5fAVGCC\nCSV4hhgs1fWMtjovmra39IGOI840SYCVaVXtCt4yhSkGV9NZKo8F5xaC+mNu\n9eW/\r\n=Otxu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3nKMbwyQ3Eq6ZGHI0t4Y56Af4O1mxFWoH/DOc4lFnpAIgK1Af5dc1FRnUQX/PH7KZJw+cfg1M5TkDaInTsnfnP3I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599494785-4955142a.0_1599494867406_0.4678432564362156"},"_hasShrinkwrap":false},"2.7.1-next-1599495893-75949ce8.0":{"name":"@xdn/core","version":"2.7.1-next-1599495893-75949ce8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599495893-75949ce8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mbuwHaihqTyua1PtUSVL9NeHXO8LVmh4QQdJbtm3odMTOH/MJgy03rmdanlB8yREnnyAHvyv/cn3Ofsxh5zhpw==","shasum":"e4567cae3faf6a930334f6f979a37c5ea0734ff9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599495893-75949ce8.0.tgz","fileCount":139,"unpackedSize":643843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVl8cCRA9TVsSAnZWagAALHgP/1akXB5m/Xvy8Mt1xz86\n4nkDETXGc3MLFlH3j1h5/x3AKt6Q9pm1Ozu7d+XMsBeCNWLyED9yHw24BrFs\nnrra7+JemrQL8WsMaGEc9XudBeze93qzvA47fAVso+sMAupkiIO0KaoWLWoD\ncp5ObJa0/2pDEyGbKr8WF+t0hY5Xvz/7aS0CipzqW8x5QyyQG8bNyxbqti2J\nUqxHrJzow6xIA16+PgJGDR0oNH1K0Y0aoE+A61z5vjOyvQx6DzY6qPAhu5o+\nPDWSpn/UAeRHmTmP+ZkyM3IpUkI505ozh+F3vTDrY4eYEAo6uKkZQFc8Ibe3\nvUh4cpmxqveXCvNCvui9JnKg7BaloAG/qp9+1mVbEb6wA4ejVWlVzQr8Bj8U\n3C/oGz+qr+ecRbhhn2Bjix3XvaL0n/sjkSKE4rzTrnGNpDHxAPnOQc/CmRXO\neeTC30dLBIhitcVo0tlLUPnoSZ01SurvY09vcil8BtEL4whspdp869aExeII\nLqbZXum0ZIxWaaA6AZsrl++dZNzQxNwon512o6CXhdsbQ+VdMLtYv/lNEbsk\nEygPynArGfPKvbTBoa5QWgKTraA4erQnhiQ7tqPpL+o7nvRIaieInvVTALSy\n6f2qtttIaWhJkNuDk9hESdMLGc78yzvReDdMc6K2EzhLsL4RepcAW7W8zHKX\nsB+P\r\n=F3K+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCC/f4iYvmBghgpgNV9HVLBItnrdSJ79YtQMNUSZ3H/ewIhAKHSqarskvZG9+stH6NeLOUOKgG9hIVke7cuW+UISaiA"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599495893-75949ce8.0_1599495963474_0.378338651874218"},"_hasShrinkwrap":false},"2.7.1-next-1599509252-dd0ca2a5.0":{"name":"@xdn/core","version":"2.7.1-next-1599509252-dd0ca2a5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599509252-dd0ca2a5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YrdbUmhW5cS8rxxz7lo4RKFBLUgvLpFnKeojXZzqLCoeqznYeeoEQLp0dy3i2lI4+eKYRFsBZdyKY4x5VXG1aA==","shasum":"7c19063f13c6b92792de391d66230c763596f093","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599509252-dd0ca2a5.0.tgz","fileCount":141,"unpackedSize":651167,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVpNRCRA9TVsSAnZWagAADZ4P/Alam2tDzO0i8t7xjuYd\nN9gatpc+kxC3rM+lpMCoB8ilTAWkRuTT7vB9INgPyZP6WIKTaOv/8cJmD/d+\n1CS6zg0cqzfHAAvKkofEKaKXSAHurcSKbbgz++kI7RDkmm9K4TARcoJYQ6jS\nNnuUabVqWyRvemVkRoWzm7MToNxm//hLHkx/kLeh/60JA6M0V0/cuO4KFrDI\niwk3NPda0hoDtYBxB82+9bQA9T11gbfQNZmW+EmtpSlDuYdRPEW5ewGZVhAb\nYO69xIenm/D/OFhag9KCcxMogvQJqo4JNX7koSfyXDjmJwgDL7wSftajJrND\nNjAlw0/dlT67kw7kbKktDAweHFPSb9tiI/6pIhxM+icVTNSr1bfPzAHVFpF2\nW8TaO6Tz/m+dDlVd5rxFmZgczPW+ExRaQKrApRgkvWrvLgzgZcKWbAFAySVE\nqxsBKsw6P8fdEUesE5r9G8KJ4F/NH4QlgFq7fYel4ILY7ghdZPWWK5UCpgdI\nBzQjEy1uGDS0rekVSySHgYNiBWh/GZeRBjALq+TgzpEj0SDfSaCzUnU5Jk6j\nIccbKcl5sEMQ0eO/DwbxXdY6ZPTg2WULCsSz1V7C2Hgjvoj5m4BGjt2tLGJD\nV33IvAB3CXAg7y6kkYklHOzyqhcpiY8IRj5H1NNES8Oa9lZp7Oj9U4wxsZvh\nDLmJ\r\n=j5ZZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCShm9/QkNokX6fAOD4QANSmd89B4Ul5M9w9EC0ZbuMWwIgZ58qW8Q1HATXTklNGfrEOd5EATFN4k+3ZwpYsE+mURU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599509252-dd0ca2a5.0_1599509328410_0.007695692711545465"},"_hasShrinkwrap":false},"2.7.1-next-1599550548-fa8e9415.0":{"name":"@xdn/core","version":"2.7.1-next-1599550548-fa8e9415.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@babel/parser":"^7.11.5","@babel/traverse":"^7.11.5","ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/node":"^14.6.4","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599550548-fa8e9415.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-OPbcFoWBS2NOHYYWHLLqaRZDhl4PzPTzLnZanF0t3mx93g4cpLmL4PusH4+GFYjsxqFAjN4PxkEObh2ipAnNvA==","shasum":"2d82699993ff6cf5d440098c486a5162f75f1a46","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599550548-fa8e9415.0.tgz","fileCount":141,"unpackedSize":646747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVzSoCRA9TVsSAnZWagAA1AQP/1NHcZv+j1Cno23iirYE\nTJ6h5aAkI5sA5bZsyr7ExE/8ToIqXBa/oPr+8RduvHUqCRaiN9IzJWUXCty5\nem9GLo6aKNBs6n3/QWMcfS5rrnrXDN77ANE0wqBVq2aEYglVD+4eXT0jWNKB\nASvczH5k5FJ35bhyT4Smbyzz7+UcpaFSBqgqB8vrilgcG+/tBF+vwYw3XR82\nPhIXsS5qCn9qzuD3i7sTipbhH6cPssnQ6C3ZNrHOdkQE7x46vS+y4CUNgDiG\ncZAY2RhxAIPLTXMQEW9htXxqGqNMWxV/eK/ZqukhN+B4IHN9Njag79YN5J7t\ndE77pSaJ4r98Kf3KKI6pcgE5HdPJa7uzskQ26s5Ux0nTbINDHTCYbAKxneBp\nRH74IpfoItU/yZkdFhjlhYFPMBsArL6+dDhWIo+v0VZSFCNcvnp+6bHx/qAt\npf/2VJN0eQ7zSvqoyH1gIivx2K91U4Kvt8Zw4A1WfpMwYGZm/EOA/JEXc20W\n76PDjWfrDtD+ILeg8/vPz+RcsedQ8bKwIrNn0xaI8dHK21ZMZmdGWNcELHNB\n8/Jnvr3AfuL4shd3ausc/L+qtrj2Mx4xbXNm8GmDmWabCv5FpqFExO0h8QgY\n6XxkuT32YObpFixPufAaOAeRnogrc5xYGFUZHoOGCDj+2i6tmLJxNRA7Mbfl\nA6qU\r\n=fQI7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8B/SCUSfIZdrNrNNkeXQI5/F6EYEAXCImF881x9s6kwIhANL6wltuff6GV1OwcL1zkSC25qTCQMlhdl+U8/c7iI7b"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599550548-fa8e9415.0_1599550632014_0.08655752771870273"},"_hasShrinkwrap":false},"2.7.1-next-1599553515-252cdea3.0":{"name":"@xdn/core","version":"2.7.1-next-1599553515-252cdea3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599553515-252cdea3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FZxxj6kZX7lYsr3w/5lxsMnPr88H5ySSGkjwRkpjmabATsu58/BpZ9AHUjCTVofRnUQpoPwrmFNSyTfSEKL9qQ==","shasum":"3e2dfb924b28076978df5325e4617eb67f5f1fff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599553515-252cdea3.0.tgz","fileCount":139,"unpackedSize":643954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV0AyCRA9TVsSAnZWagAAQ40QAJbCYVYNq+yL2S+u5240\nMXFiKGOnZALFceABhirJgfzWCNqZq3HMeSIQsWeY2eL5d/Ib65GKSgqm+5EM\nn/90cepxO64cOxKf5ojsvGMII5F9s6ey0XVeCGxDlkOdulW5cGdTPiUPvwVl\n5JIgcOp0GrDs4psIW1ZMUQiBmzBb4tG275snjzMfF/ZtYXbKIM3odmM8/taq\nUGidsUgOkBdpDfERcz+gYEOAyrdTgvU9L03ngEq8RPA4L5cTQKAi6uqJ+fTV\n9n4eaSQebYoSw8SEL7zY4cmXoWjUNDUD4K5rYWQb7XdnQejVEOt5f9610ldn\npdHDkVwXTs/2nNqXCeOt4nPs95P3LfIdoaFPQhFObF6lx+apek5FPMex4Z9s\n0euFyhGfcPHLDIGT9a9xPojL1oOX1FIsVCf5axzq9074XJpNLqNKtsJFMCji\nBKbFVKaZh6m7THRZ9CR07fYX7fYS4QHdYWzbHzvH+1iVvqNRZ3YIkWj1GoR7\nOakOpUhM0S2LLLVb3V36wJURXXbX/lPYQeNI1IEMaiZXd1D5oNmWbqoX+IrV\nrMyB5oHKqDRPoassBLF1Dn1pn31U3NPvV4nvScd9urBlmTYHVcTrAwZJcqpt\nDH15vcZaANQOEwWnE7vsP24FE0B1bka93QHAz45QBI/OsDA7ciLl0CbLfr9a\nc4bL\r\n=9aUj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0qmQNz0lgvEBRIjKdLutZuDcW6QDQi+yxBpXF/JQixwIgRHEdB+zS5crE7lWRyGxrjdpuvvUerVdFAzGXJlR4RbU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599553515-252cdea3.0_1599553585651_0.10837793728113598"},"_hasShrinkwrap":false},"2.7.1-next-1599555777-9debbb1d.0":{"name":"@xdn/core","version":"2.7.1-next-1599555777-9debbb1d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599555777-9debbb1d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FhOZM79mBzIhx4X4+nEZxi0Hm4P8pn/DSDb5UuQC40pJHx0l4MNhIH46qGNUU/W/u9WrduTfh7ntks8pHbNd+A==","shasum":"8e0789d8089882abb33d292c80f95b8d3e2f7f1e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599555777-9debbb1d.0.tgz","fileCount":139,"unpackedSize":643954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV0kaCRA9TVsSAnZWagAAdIwP/RHkXk9dOBqv45JXd/Y2\nusUukjftlwnG2zOAqCSmyHNx11YQpgcKTYs49HC+nP7TAzx+IUNuYQpndtDX\nAeryzD/8OtJFuEXctow5J3uNtUmnBPkpELjRM6B915YwjhzcUaI8AA524tzW\nSkCnuRz+9oKoh+JYB4j9pFckcohzhezchRHgetpbWKDwyGMzLoPMAC6bhKy+\nAkz3jGbNJls+0r4JLdY7crR/U8lhbdVIiq2qp5x+WtoE76q2rNz/08Igw3iJ\nHZPgt/+X+8O8kK9X+xNXyNiZsYdQpiRjnP8NVBp8Y6TKbQ4on8lGXdqGr0lk\nZzOgeZ5t7leYvMV/+8nMT8NSWeA5g6bh9k7RQ08AI/VBUdUQPqh3ZacNWm3h\nqeuUzlnSb5Iwmm+k8yzH/QSgQafXIoT6Oj6FKJodXLk4ZU/FbHMkFRy1pmO+\nWkPyktwn9Cwh1fWrvGj7Ziboxo1hc2VWxZefpSpE1LnQ0N5WgX3HWeo2KRqC\nV0pnp0v4tWQ3+07A0La1iA4RTEwMmViaBt+GNQ83ry3D75N01oFKYRf7BHJz\nBwtsz1taThedfQDEr7Hj2MXAzZ+rmYtgzKboYqQvcnfg8as/IcOxIns3Lg6l\nQWRSrFR1GP0C5/Ibae31FsdMBHoynT2yWYCZB3d4uhe0kZQxdT2zlN7QR5aZ\nVBJ7\r\n=GXsg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGdlyZmSv6sFak65Ua8woQh+dcff+9JlgvHCOI4YJ6krAiEA+2vywUCbzvSqClNfVcH47w3eUXQYOXJKZ2jZtUkoKUY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599555777-9debbb1d.0_1599555866058_0.1790482443221928"},"_hasShrinkwrap":false},"2.7.1-next-1599560077-14c948c4.0":{"name":"@xdn/core","version":"2.7.1-next-1599560077-14c948c4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599560077-14c948c4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pqyLhyqFk7+jdtK+Ap8qE0bIGXDIPXuXEBLIPX6DYMBY83XdhuO53pKGkYRUgssB2DV1BS+snr+o7dvi819s+g==","shasum":"43c9f03cc7ea2aeb4bdb22900c69f6bd0983504a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599560077-14c948c4.0.tgz","fileCount":141,"unpackedSize":685155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV1nwCRA9TVsSAnZWagAAdg8P/0WG5JjpB83TrNNyGcjz\nLN6ObViU+keCdnEwS8mDymyTfKnMTpx0HIvy6ptsvkPXs2jwYjRh+XboD8Sc\nhxZB1UYwhR3NZk4keWhaHo0tal6G+y7jhlkWWQXaoh7QL0cut6CokMF8kOc+\nVCnPUQL3gBpKuPd35EumgkvZb8xwlpTwSsjX5neUZP5hSnZ7ZiLEEFY9p+ZW\nMIk5rrSGUj5UbawtNWnP+ecqvxyTlmNhB7t+kOmSgyOOvX4ZWvNX76ubgQNh\njHibnyBYkhJ5AvWlJSontYiseSWch6X8SYbBmGev/V2dVoJsYlqTftgz+kVh\n7Fxu0kWY8mdGYEZMszrjyiRe2QFOUcKJUYBHMMJU3v/s0WDf03AYUC+J1OaR\nzg9c0UtfYxrSm4HHW3h5zuNp/b6sWaOsIfIQzzyhkMnSf5oCcs8fkkTjqwvr\ng/mZJTdRhTCHX0X7Eccl5SodF4/jh9u3nb0JECKslTmfFd2sYW5hVMfXIsmF\n+prsgTvkN/rUN7mWETPZM1Jva5ctuF2d+asMt1pGRFmyIj49wiGpUYQ1pGX9\nQ3e1wRSJCPoTCY/Hmtj19DucM+UYycvuuyBxwa7lbrwNAfsa5jaCLAhqZMK8\nI4zLJnhrjOU2BIwr51wwuRuOZK11IL/N88nlg6+P9cEdkzue/MO9u5z5BkY/\n0n1s\r\n=lraK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4XWX1x3iHL2mnOUdQS1Qi3GglWqCB+bDy3buYsXaB2wIgKoIx2oFriFdm11vka3gELcy7pIoCedi2uhghetxNtDo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599560077-14c948c4.0_1599560175591_0.871939989655838"},"_hasShrinkwrap":false},"2.7.1-next-1599562443-837c44cf.0":{"name":"@xdn/core","version":"2.7.1-next-1599562443-837c44cf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599562443-837c44cf.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HQMHJnh5QeWv9OUYs6EUmv5+S0Q93t/TayaO1Q40M6r/fUAqUXkWCt+nGLBaoY+IyLABTLDSU7GCkKgNlxlM9Q==","shasum":"914c4002cee130bbfb43aafdcebd817a34bf0847","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599562443-837c44cf.0.tgz","fileCount":139,"unpackedSize":643631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV2MiCRA9TVsSAnZWagAAvPMP/RlL//bG8tBVw7IUR85O\nP2NZnPrX18Qw1JrurmmlqiOaFCEvShBvkf42tmMMtvozNCWClGDe2kJ9HLtO\nhJnM26Bvc8phhroVQBcJCcNeud4OoA0gXq/hxjWFjvdAnJH3cySSijbcXoof\nGSL66b3asE6g2VD3Nj+PMFLRWlsxhMiT8Bg5ICdsdUMKTEnf/nr5IIhUdRqK\nDMLJ/0BHyQVfMtNwx1fBUJJ9qvXlL5lug6Uzsj9oFe3TA/Ecx4IqxP4XEs9M\nPfJ7SFbiBWvWx5KfE7+Kv0cFBSri9/2eaKZ4YH4kAQkiWlRqgNeValRKXTEd\njkTs/F8sciGCnu5+8bRNDHRbR9xrc6Iim1+HVuqn9ooaBlYpJG4fA8S6c9z1\nHwY/+U3WOYQZUcgyUqswp6nm3rU07FpFNRb4SBQAOR1Zbkbzst7pNLbKjBfz\n1NrnJeRPCZOk1rL3OEGQvEDajQbGj8AdGv2wI9+3IhDIB+ljrZLsThhaJjFk\nf2Ego+K5Cfy3UxmyWy4x1fDM/vQJroCnuEqq3uJoch+rkOJWYzsGeH8H/fBy\nXUT49YjUyP5mnRhRL82tx4BBvaPnDNXsqk1jqrmDWhqYJavraYc0jxVbPa5t\n2DCuGNYbhdq2+NO9zcQfcBAqlRPr8EQKUCGZjIUauhcV+oNULvuSKDANfZV9\nKpYm\r\n=7/L5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQpY6TC+knLjyc0N+Mi4rR3QlvgSWMA61ENcvrq9eQXAiASd1CIpmcWGWO9ruS37IMaX2OE81SX1Nh2GRs3p+JBbA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599562443-837c44cf.0_1599562530170_0.06674179306385364"},"_hasShrinkwrap":false},"2.7.1-next-1599562946-6ff82613.0":{"name":"@xdn/core","version":"2.7.1-next-1599562946-6ff82613.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599562946-6ff82613.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-E1PxR2Fda1gYhRqbo8zTUK4gAOPTVenQ5W5dR/DA/nqOoj6Qos9yxirY7/UuIRA4GBVAXH5Dm59N5Sl/vGJD/w==","shasum":"c47e4bd68f145bcb33361c438f87b48e7220d89f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599562946-6ff82613.0.tgz","fileCount":139,"unpackedSize":643954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV2UcCRA9TVsSAnZWagAAxuYQAICaNdbZydISA6iLXz1B\nAFN58KqZzkR8hU5IkdtgAHJGadboHfDu/yc8AiN8qKnrw8Cloco0d88nMWXK\nVRA3aLPhpDTQHuY8BX/ZmA7uFcNVvNgR31kp2eOqZrI1kjUPLGrCpD6+vqi9\nCwWsDx1CNPq6ghM6gnB2WMzrvKmcEVtBmJnGjJnNp8/VGWNAg9TwpCLEEyuy\nYDCA6vQieve2GchowwmWZwVNdeYMcY0xSzmdJ0DH6zTFmSwT5lEnicMBA2AD\nE0JnaDuZgKtUWAcBHD0nGES4KIIgDxvUWn0POnaLpTmnU24BItuJvpw+N1vY\nSaySb9ik7D4XwHAVa0G9ST+rUOZ3Hz3hN949Xub+PRlF1RUY4Dp4cKq7bRsj\nfl0B8994xlrsMqWmvoPHIEl8S1GrSpJApvyV/szTLFygfWiBsu/AHzWJ4+wO\nNUI2K/uB35+0GwGZzARWX3J7JpcIXOaGb/GKR4/p9q/f3SQmUiO0n5szzrN3\njnQfI0d2UcTcjHTF3Nq0GjpU2uWGra9ju6CYRHx1SNOr4TLRPx6IVu2JWLbX\niOhS1M2xm4KGRetLGWdiECAXQVMtI1ZwOx4rN+x5LzFv4iHpPMG2tCzrTU+Y\nbuJHqLrvLyLp4dyhQYQWvfts5w8gxoZIsRYhrxHsHRvNqjXzuZRnGkVkBIVG\nSztr\r\n=sjxp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/bquSV84J1kNDxdp7fqHR4SqlFohswAlotYswnVbdbgIhAPuFzGyyvsSrOhcY0H9V4nq192TvzPH1S/7n/MtcmcTR"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599562946-6ff82613.0_1599563035499_0.7913485179374229"},"_hasShrinkwrap":false},"2.7.1-next-1599563902-8d964c81.0":{"name":"@xdn/core","version":"2.7.1-next-1599563902-8d964c81.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599563902-8d964c81.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yL63RQU1LsiM0hl1wwJteG6VOCftZAmnnqEuPMwNI4D6hh24+SDSiN8kPe91Gstzo3fVDElYRL3w7Y0qj2qnmg==","shasum":"82417ecacc6b9af6a63c5641313f61b12458f89a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599563902-8d964c81.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV2jlCRA9TVsSAnZWagAASC4P/jnKC2CCVNAZm+UeG/0S\nu/9Br7bllWwzFpHp9cuTeBn1xwDqUXDJg+AfOi+6BuE84D30ejpS3oXU8aFh\nB6RI1Ioy9eoW3ZBtWYhtdpgopc4+Hi1r4RXvY50xFgiVUdNjAv8PMN77biHj\nDOKYXqkuTNrQfqxu3uD0RxuqdgF3RuanteilDWJ5u5FwDYTxZc4o2TSssAgM\nIE7oNp79mUlDzFqpVjqBUVJGyXbCSQP/I7s9DSgqhWvtyQGh65cCrNdKNCub\nqjAbCH1ik8vX+KUnL0BbQyoxYhE5C7pBDGnq3DPhk3bqMJzHy7w66hKxuolT\n4VY1PAQ5owt9MiDEvf2Xoe05aDXtSSPaysie14xsobuZ03BrwVCZW07in/cm\nVDxB+eSaGAZk79nHQtNFk2/LKW4Q/1obruDO2IIMWiv3cZTdVCKCplncWqzA\nV5OKxPiIi42jv8D2TtiWBy7rUaRqsJjS6lT2H8Fce6MUH3FDcyJjotMX5tVG\nAB0ztxZQeCLMJQ77+ci92QjX//sRZO5JkSgrVhIdD4Sl/OuljjTQc1kgTdkQ\nZWcixz74zZoqvaaIbuEf7t3SXebHO+ehjcwKuqnAZuQVML/VbpNnOrNNRtpr\n5n/030P8wQG4i1kQH+wcW8eNFMM2bmmcwjWBN+C0PfCTUhWhet3WOhEjP8d8\nLmtp\r\n=PM3J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClwniS9raq0nX/oJWzdNOBVlCJv9agUzG+tSYgFnS+VgIhALOu0+dWDPard3FHoktd42fbLI6eFDqLWMyLUw4toLNp"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599563902-8d964c81.0_1599564005232_0.2713856339062466"},"_hasShrinkwrap":false},"2.7.1-next-1599563991-2a11886f.0":{"name":"@xdn/core","version":"2.7.1-next-1599563991-2a11886f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599563991-2a11886f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mdB4/0YBhR34MPp6AvwI6Qmbo/5MkTb+/5niE0+eLboSgEzeSELrLXXW6j1EL1Ezni6hf3TbkZSrrG4HlPPrsw==","shasum":"89149a03f997010d0193d2ecce668fa62644d504","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599563991-2a11886f.0.tgz","fileCount":139,"unpackedSize":643954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV2kpCRA9TVsSAnZWagAAeQEP/2+ixZPdBFbdVesfMjIr\nb1F/+OZulKg5n5aS88fMmbSQSXBS8HkzH4/lRpIF0HvTc6mCj6GBUIWEwm59\nnr7yqcfP1Xx25m7cLXq2MMIsOtHfndlqIBeCfMY7lNszffWqyHFCuTW28OGs\nDAenQaM0SDRsQlIzXwCTvCllgu4bAKuWmBuwyV5V5chF2PwgjbI9sKd9/Qhj\nO3Q+rmgN5SmSTR+lCJjz6eL12t3R1AHFKP1SZVkM+ZbCO3/1hb5rpCCXroU7\n3yLwhV4/tr/TDstWHjEMHJVzIJGSZi62OOdRzuVNef+ioIQCHAnEDNm5a5bH\n3Rv7NMYQOrq9xrh/e7nXGLX8EPn9E+mY7CUTvSVtIgjgxdBik5AwYB/7R4UG\nh+hALWrVRn5NXX1t3SM8aFUdFYfS+MXI/assHG/2B4wlWSy/nhWkAvVHCkgk\n6ro+2RsxwdwBO/19/ZarOuDDfGQBEtg5ccbgLRtPZm8u5YBuiSUqUmrhjsx0\nMsV3jPeQoZX2VGSZpU/22JmsY34b9dL6wuH3DsAdNzqHtD6EViXRCstshHqL\nMmPL3DzSXK1XB2WqWtRJ+MKmRfJq70XxqqwJ/+HjhHhTU05xFX9GgTNVY2k9\nZH+Aq9NJeDompJDjMg36qQwE2t0h9EcxaN1oxHtx9fnikM0WC10/p1c2jaTM\nCGI2\r\n=b1C8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBCbWJPRmIHp98PcIhILVLjeB7zZDXUwOc/UQ9ny7yoZAiEA8fa+U9XmlEIaEf2HGQ/Hn1E+qdslGw9/VnfbpaHrhYY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599563991-2a11886f.0_1599564072709_0.8655762390036017"},"_hasShrinkwrap":false},"2.7.1-next-1599564840-8d964c81.0":{"name":"@xdn/core","version":"2.7.1-next-1599564840-8d964c81.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599564840-8d964c81.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-39xRFSN84JyQziFFGNIkrULVbfYFGKtWDSMij72CtCJOR82+9vMLzCbbxIYh3AObffsLm47cuX8EXDFLs+OVbQ==","shasum":"d8bf9f51e1369da99df68bd4c0cd5c6caeb78180","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599564840-8d964c81.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV2yICRA9TVsSAnZWagAA9HEP/0ZKgssz3N3sLc2uBjl8\nOlhrliuPZTET1+4t4j1K5dUqyVL2g1XHkCOgIVChiSv2ZqmpufaiEA0FNoa7\nDsrL4EExYYY4cmxXQAB5Ddf9DFMtWmbN1uvJoKSivektcGO+MsfQUBn4O7jZ\nNkpjeejabReUpfJ7aSMByXtrPspWUmvH/ipsuRYAzcsZ79U0XYpxKiVlc07R\n/hFrtL1tx4WcR9Wgi4ZDNRw1wQv3CqepIFk4Y+oLd6qJ1axoc1SURxP5vFpK\nTcLzRgpDNr8aELE7n9OATDVJXCLkT66H5yuqnZ5kdaDlRXqxIe59mVim8mla\nfhCzNHvjbX+uuzr4RxCAH+tG+JVIPLOx3cQmnMEqAFLOCkEWCLRtG5cAALE6\nTLvHui5w60PuYAadw5f/KyIx3uEzwBZ8ysl9W4JrDLMWz9XkaG0MQzGyxaps\nQI7Y2vsThhToPz3Pjn7Mibu472o8iy/4tMbpi7Gz0hyA2Biw6La/YoBNbSrm\nSAHlu0qdfUZyARUNN7VnZz+m3GqMXs+jr40czB1SBcUd9likc0kAWGmgz4rZ\nnCoe/jV9hp+V7l30O8Nma2JBNb63jfvGkPWbc/Xv8UMIjOttCPFnvuMkoS74\nJRG68YOsXshs1x5AW8C+pd9CdHjLFKcWXzPr/3Cu+MebYTG+ZGK55TfBwI+J\nZfMn\r\n=zPE7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAYI4RF4a/zmkUKe8fPgqD5WAHhLvTn49VquqdLyjWoaAiBve7j+PfwYaPvUlqGMe9PrqnmwJd870nbU9c/0IY9P4g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599564840-8d964c81.0_1599564936249_0.8419061560872323"},"_hasShrinkwrap":false},"2.7.1-next-1599564998-0a8dadb7.0":{"name":"@xdn/core","version":"2.7.1-next-1599564998-0a8dadb7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599564998-0a8dadb7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xBBgzC1LUuzP7Y7OKDN7jxX5n8hKy0cw+yrfxMMC7tw/Y4V4Pwl8LNkdlirRuXeb8VQ0gA/1pcpew6aY2EQwng==","shasum":"acc3a51c6ac2c4647e0f204e8c3656641ae76328","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599564998-0a8dadb7.0.tgz","fileCount":139,"unpackedSize":643631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV20VCRA9TVsSAnZWagAA+uIP/jI2BSIwDQAV/hD7ozo2\nsIWEEFneNAmR/sh08lq+4GlNJCC90OpD6Ylff6Eoxn3uKTi8y14wofKyrjoU\ntq0IlltShBGdO97zzSW/Au5If6/YkYCh3GvgiSruBUlyOIJpCKvA4s8vdAwy\nenB93/NlUp2MvtLjOczfzf9cgFH6NA+5tO+EymKatJUshMI3GBck+Fo5hkp1\nlHgWoOn1D4Pj0egGWtsUYHoBu9W/ZVeuTPswf3AD5undd4ebvQM9bMmmb52k\nongrFs+wHYMhibWLWnUmcQ8ClP+k3PKVNOeu0epNYT/1G3hNBSmQfsrponsS\ncfaiC2V5WT0bu7665xV+FEnq/AETA9JQ4RDGgXMv7IH8mVDaKjY/AvCTanbJ\nSgv38H+PKgUWUqtFuP1T2EqWgVaKs4Ulq9rN1d4rCAEereyOGa/i6FIO0EJf\n2oKePaFJkSYgf9af6h5Urho9oJl6g1mbVmbbGzcjIJPatMl0dciQEXB1e3b3\n0QW5NZ2U++8Mv7oO/pboAxUzclZItU4yQ5EDQXo3+kxNrLcSIcHddDR2LTya\nGJwTk52yCa9sOzinXQj9v+cNHWN4DThEdPywmSAd/9SnbsvWB8tcnNY7BAY1\nwquYu10QUM1wzEPqCPLSjBhL581xajFE8AurtUg1+Z7EJcmCD4j/GlucHBrq\nQRsA\r\n=se2b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuInSRpBqwC/ZqSRFgNi9AsG1MNvWSIS8ksu+fYmEjpAIhAPaTdbRzpuLayq+xJvINYAlnQ/v+xSYl7y/vtiOD9uPw"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599564998-0a8dadb7.0_1599565077268_0.12112647104048513"},"_hasShrinkwrap":false},"2.7.1-next-1599567460-8d964c81.0":{"name":"@xdn/core","version":"2.7.1-next-1599567460-8d964c81.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599567460-8d964c81.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zSEPcybxyuGpdRzavqvYIb2RTq9M9lIEd7rBTNJg8Sk1j0wMjl42236u124Zemo3wxm0cp//vhL7U3TjcfEEHQ==","shasum":"34313826cf12df4cc91d91bf604e89987a8f03e2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599567460-8d964c81.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV3a5CRA9TVsSAnZWagAAfsAP/Rhbyfy7ZpiFNr1BRt/V\nBh4mpBlLxrJKg/acfGSWIuhxyzct5699M2RtlAKoe6sjDXq7lYMsgy2rfcrI\nsWk870+c+B2U83Z5f8BerCSzD35IhdKQUcjTIk0pfa1PWjL9rUC4TNu6LH9W\n4J6UldqB85CDvA+gU5vzaRK057L8zHYyEH8RAHnbNx9rwevXSr0V1GQAvuCg\nFaiN4TdEJozYiK2eYAI1o5EdfjI3XTw9VUAmCK/rgOgH6dBwMVwhk+aWxJTW\nfCjcZ+8CAGDdKu09UvO1K8Qj2KC7XrMU7T2bNPkxyhTQc+Nyuzbw+Yvwqnit\nhmF8KrCAvncOytpDyayLLtObJ1o2+IqsScxa2mKKL1kVInmgFhieJNR7MDue\nZ2mZ00gZxbTlmEU9s3eySifjgEE9ac0svQHWJ8ybysJgA1qHCeN9r+MXqD7j\nrBjnFVSFUM4c9X2evNU2ztLTnuOsi6rvEIkoJBk5hZIn48PXM7ffG7GNanww\nILrtXkB74LoCFEdAGmJwMY0QE9UknQtJDz/Uyij0vUIT3bvYWENnu08YB/XJ\nChb15KnTFin0JKl0BzTvzyf0x6iBw+X4kQg1t8CkY5hcjrPUAifzzWhqXhzV\nQC/peBZvHbiA9JX3txI//FLpidM/zzIKqHVGcUuTLV8e87xL0xCyzIpq8W85\ndPLh\r\n=4oPY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxhwHqeYkOiJVHbs70di44NsLgqr1zMqEJjIzyB4mwRwIhAMBZHVe2wQxIlRe0YzNsRnkdjRMWr6PahSFjJ4Gdex9K"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599567460-8d964c81.0_1599567544599_0.7568147219643153"},"_hasShrinkwrap":false},"2.7.1-next-1599567484-1eb03d35.0":{"name":"@xdn/core","version":"2.7.1-next-1599567484-1eb03d35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599567484-1eb03d35.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/6UvavqKmniHEsNgTvA8ldg6HBAGdy5FAkF080KXqxqZuWS6CMh8gclOUXHHSUo8ZnA88k3f3fKBh5AniVLntQ==","shasum":"b7745226a7345e555da8c53bfd1e6328233edfa8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599567484-1eb03d35.0.tgz","fileCount":139,"unpackedSize":643631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV3bMCRA9TVsSAnZWagAA6LMP/itD4yMFpdc3TzhLiuMW\nLYrT4R85eCvnqQj8s5L20Ro5k9VIITIpNmbufRiPG8v933VM58Mqv9e7DhVU\nK0II1v0Bl5zZWdkuw2eeVXRAzGT5NHiPgzWJuS75H8Tp1jmuW3xAUn2ZLlET\nrQf1iR0ez9+nCvX6u6sswGA8c8X011fqiiI8SzAFAO2l5xMHjSah+1ArpIZx\nPq/Amhpfler33ZAXqoHX1giSx+yzHSkEdpmKvYukyIbP2bVjlduDK9OpHM5H\nNw5aj8VBOXjzrNjXVmjopuW7c3Oc14wEM1y53DzMCX5fTNVWscz6b9lUAXNk\nTxFds2txK/Mbs6sxwOMQpm43H9AexsoQ3/Y+qHzNNbjaM2AHzMr0kJUH8pmY\nxj/d1y8ag11NzdLQCkqVTv3j45tVsS1Lmq13tLey+d+O/5v7KNs4e7DgyBfl\nD7GZFWP+xkfrujW1wxkIjcSllUcDuTYHVFzCjwXpdQdvsxTQ01gKxqjHJcz5\n+JUVxSwC8ITwWjsZuclQlnuZZAZU9FBKsqBjJ1YwrhAx7hW322BYfwkk1hpx\nQmFMdXW3aNQ3rw9oMfGILF7EQbZ4PoOP+qxL2uKYt5dWFYIdHKBMOl+dq9Mf\nJO7QmpVVyT2cQzHcWJH8vW31p2tpRtPb82DlSmr2/XgxoxwdFLO58fk3WTpb\nwE9o\r\n=iZx8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPwjalC3/wRY8TDRqxhE8sWcnJvOKd/gC986YNjz3kOgIhANK+HZ+qs8VmSEP8q6y9RdFC3RQvlmIaNAzlAyhwxaLl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599567484-1eb03d35.0_1599567564515_0.4586085689038446"},"_hasShrinkwrap":false},"2.7.1-next-1599569283-8d964c81.0":{"name":"@xdn/core","version":"2.7.1-next-1599569283-8d964c81.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599569283-8d964c81.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XwUEB54TIwPLtx244GVwQyitV/9jzie5mI9MSYDuDhys7Qo5K+VND3GP9FbNbw3QHIP0niABx1yJD3Eqz7WF5A==","shasum":"ea39220689fa88a3cfbbb65a4e0cb6319a7718bd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599569283-8d964c81.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV33jCRA9TVsSAnZWagAAHBYQAIVwda+pqarp7227fXRu\nl41xBameYhMLwE+/l1j5QC3hIzVRAD+5XsFWWuYkL6PA3+xyn7QPE0hydipw\nz+s9WHf2bW+64zBBPgyjTwz+hVhqVoaLhH/dCyYyO7Q0jwHoaumbpylw5wgM\nfh4j86+STa6da+mXiP1CEulPKrDK95D5CcChkalI6trpGTo11kpgpqvwwdNT\nVozxEjmB+zddagK+ueZlDAb6i9W/MehExquMUQZqDicqZKHcMn+dN/yWyRTn\nm0/Tc8Rx0UvUcTARWoKg/Bo+eIjwWwrmbXxyn2ihZ48n1sO5fDJ1+VZaHavO\nQM98t6tRbvDitNu2YA1dbzOp2sZue1wh5puDZMNqa/N1/7BF8xQjPDOZimsq\nNVRZi1XjBeTg3jNeIaHeZ6RZf3XKnnxvAb17A6emctN4k2bVcKofg7rRWkGV\nTY4mijFjIuSMdOM1l4gXEqB4ZsdtpjDYLFPvqxm0Mkp9KCmcOWbTJ+S7dGax\n57Wx2pvovBxwxWkZRi8nwVjfh02fU4rY/2J1//WGTg3c3x/3dfoYXTR4i8fR\n1KbaDX+F/xurHj9frCiZ+cGm9XaPORlZQ6NimUWD/vLP/kY5uKIEk+SCUfAh\nRHRRr8mWdJ83xa1KikA0171o66Da+iRfsWy/fbnJk3dPZQ6E9qLX0oANt6Pu\nbip1\r\n=sdaE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICW7uBUxM0llz5m80zFRZnwNW/QE1+9yXMwuimLy6nSOAiBMtYosz5EGmy9doZwQMJoUBcrHdHB5hVSZ5Xzhm0J0Lg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599569283-8d964c81.0_1599569378627_0.004903593445787502"},"_hasShrinkwrap":false},"2.7.1-next-1599570496-c0bb9a8e.0":{"name":"@xdn/core","version":"2.7.1-next-1599570496-c0bb9a8e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599570496-c0bb9a8e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8/5oCq8FOjWKuyGH7bIU54lf9W1TcrkM1yWbfO0mMvnzYmAsnyeahrw6ixv9yreBCq+OvEAfLfqP/cprDMqczA==","shasum":"af20a13dbbda8cde0f43db32a3ac5a4adb23dcfb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599570496-c0bb9a8e.0.tgz","fileCount":139,"unpackedSize":643581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV4KPCRA9TVsSAnZWagAAS5MP/jvD/armELd6wMO4qlp/\n8ConBk2sM3OSzkXOze3S7i7S0GvFb1zq85Jfv70YyT08hSDcBj4LMtHSldSf\nCVNc4bT04gDoNGnOK+mvSWXPT/LL4j6HaiufBk9XlOEc4Kbnu1D/fv61/98l\n1cfyrnf1Q40KCGtzLZEz9hyvb/kLrjuWHvNWbAEt49HXe8h+ZG+aAO0+8Dp5\nK4b/Ai8RLbsuEQHlOL3V4ZRjSf7Fanp1sNV+qbaDz6sk9fy5RJSl1K+5nVR2\noPCgJDM3b+6LSkMYCzv8GQRHwZSDB3+uINnIcMqjNw3ZtsMsxgK/v5CBtyKN\nmx8yr+ETUP8diKjpcLnyyb2Stk+sDRLZChHCqeePqdZfIvL0V4HbA2mk1hGL\nEHsPklSh7wgwVub616Tjr5/4Rret3H4ADDBxxfrTQ0gXt+ZKyB2nw3nJV2+8\nRfsRNUg2kxjp7dkwVyG9trqE0W9mW1bMz46ig4jrRBAiVvjtQH9eluyk3Vg/\nMPTm2g6Q+ldKHTztjzlG1sa29STaRZLoLFfVkHYaPbThHXjNeHf76TwSYcER\nDlog9hAeIW6yeWtbjlFlkGR9pEe7seN2lDc5rJled5AJH+0FIKnaO9uXNxnt\nAx9RkScLmD5OajofE1MYYgseS1wRNeCXeaYKxHSZw/Vo3JNF8SthPT+bZD2q\nI3UQ\r\n=wdLg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFUkwoQXXLV7RCWkbbWoet27+IoeclcwDDXYKpBxFyJQAiEAw3BL56aKOMnemGchAQNZ9n5urAHtENcIYQ5c1huxiL8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599570496-c0bb9a8e.0_1599570575403_0.37806630758821447"},"_hasShrinkwrap":false},"2.7.1-next-1599570875-42544f1f.0":{"name":"@xdn/core","version":"2.7.1-next-1599570875-42544f1f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.7.1-next-1599570875-42544f1f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7Pe66xxU/Rr6kKg3MvbKaTypfFVbrpklZl57ILGcHjseHVoekhbBN3iD/d/K7lc0+2sGvEGVlGx51eswrcnj9g==","shasum":"916113d520f8dfcad8ef218ff276474cca5b3fab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.7.1-next-1599570875-42544f1f.0.tgz","fileCount":139,"unpackedSize":643954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV4QSCRA9TVsSAnZWagAAAFgP/ArvLZZpVnF3SA89ZI3L\njpyq/YXGZTz9d0fVokzlMfnnLDhuXZRRko5cSbvO11dxJmczD5if26DOeNuP\nq5o8pAfpyqOjtePVkSBSLkMSBDjaY/uEiJTsTsHB+GcQGDgLNSg8GjaciaUi\neYjFuUpNShOlilp3ZgZpjNf+H5HdQ8fSkomj4O+WsYDpBWkYyUVdmDIG1wMT\nAZmKLyxAKnJtREDHI6yPFuiSovbsc1TBWgvuu6YAbJNacPmFX7qmWJU344KJ\nSdwNfTTDrFR7jLd2mbYOWeIQ14UoKuhn6k4r8zXNJ8WU8t/uYdjF3rN8cE2J\nSpHfqMSI2/XsYhsYxJ12nx5RvlIuDJabAmqko/b449KQ2K8hwNK47bnuChPh\nKcZGExLJiyIwqs2xR4jbAD7dUiXWy57U/27f4NllIit/+5mkf5lUjvVHb8DG\nfrIj+GPfQPyrzyYERlKh2Y5v6hl0Z7oEqZ529LxS8+DGEvJ02vd3enJIZPKS\np+mfKiFCpvv4AZWMkcUnIwFoMr30Tt/W1U8hcX14CyIyCcZwt7MrcOwrg5ET\nn4LLEnSJZP14xdd3tAAEqEJACJBKt5+VEsO38U1aV8tfQ9NUXWlYIn9/v4Dc\nBeUIjMy+kSQJ8VgluU7MphkpqKZXSswLHFLLwcrVWcOKtJ52VsU3X5f93E7G\nYdOa\r\n=C9OX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBZpUr7lBfpggWJ6ol2gAGJHYCyVV+fn5Szc/ZIthjGXAiBE1g9k5USKfiqKuq1VgCH0E6ppTh8cE+Yix0ZjFdN68w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.7.1-next-1599570875-42544f1f.0_1599570962384_0.6103493277558927"},"_hasShrinkwrap":false},"2.8.1-next-1599571314-828e2006.0":{"name":"@xdn/core","version":"2.8.1-next-1599571314-828e2006.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599571314-828e2006.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hsPOCiu8GnERsJddITMpHGxbDzW2t3DZLxZ/Qr3sYRCx8462KfiIPzAq2rUV3h58GRUTSfNFi0MGry8s9aQDzA==","shasum":"48e8f2b6f73b64ff33e327cc27fa15889a1a78c1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599571314-828e2006.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV4XOCRA9TVsSAnZWagAAjRYP/0nz+RuJSVydXiXIxb+d\n3bCDm2+IMqU/8nGJ61j37AP9zFC1NCdI1uY7nlOFYxLZzp4C4Gnzn18Gmlmy\n2yn0NNAAxFgGOQdVS6Fpd4Ta8h7tlN658TNXoSjXwi+oPhcFYmrRuOgFP4Rp\nfP0Ap9G34yKjb9OjWPrXKTbgHcKZ4bzbQs0HYtUYJGnmqnIUhZ6ZzZMacn1L\n2SepKPiba4pfK6lGn2rhgGLYT0nNSsZArANx5bn9Rzjaw1nXssna7uA529c+\n6FxG6flymHcYPkQO9cujZ5xWIOhnH41lxTWrCd16dxxC10/D8c0srQ/gzu9d\ngaNYpqN5vVSeAFvYOcW1zQeZqSxssOfSeV5b1e51o/mLdNGPo9LqwcSheK6Z\nhmLsu/w4NUCzAOqVC4BMPp4F9A+JqN7BvWVPewWauRVxwGSOIA2BgokWR1mS\nC8XRmUTFpdWtx2I0t2eaT2aYqbTjwYdhDjlmbBuZk74pwDeM/b92MS0DXRyC\n35YbMUqxD9pQbePjAr1tWIW9tWEzRhZfButC25NlzXS7l4HBdm7skAgsH0ua\n5JVX0FRpZILdoaZIQ+pYXSxNCWm+AH/gK5lsnlQJiklsFLMeQQViepEFDmXo\n3Uc6v6bdUdhbgJ2TI01jGK0xxo1cBjiYMeluP6TXx9cicuiwVck0gcqlVj78\nq0R9\r\n=HSpG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0/2tQDmgKsu1f/kmd2pFCEQDgjFi/wT+HSMBmSFLawgIhAMa6FX/CtmyDsas9KDyvnCXgku3BPx0AFdVF9TeDBksE"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599571314-828e2006.0_1599571406089_0.083139432186907"},"_hasShrinkwrap":false},"2.8.1-next-1599572150-828e2006.0":{"name":"@xdn/core","version":"2.8.1-next-1599572150-828e2006.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599572150-828e2006.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MjVtIJfERqMV6bS7gq9oUFwY77o8tDMTNlHTvcoTCwqyfTBXRFpc5w7GtIaFapeNF29sdxib3t7jVXsKUlrsog==","shasum":"afda6d2cd8aaa2ccd79e8908eb4c8cd616a1d15a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599572150-828e2006.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV4kbCRA9TVsSAnZWagAApXYP/0NxjYui61ZDvt84huoM\n12NulTJRP7Z4yIjvHyMbq7f72AFFxOq5kUybTke5J4z5HSKSmzt3E3gFD384\n/QDZDlmMR3suWPERUpSQogPvqg+JlV1UrVowW1nC8fPUTSFPOm5QjN6s5IqU\nJjE70qDYR2COiZrrFg1pXY0CvBIECA2UHAwxirP2NQANOwh8choZVoggk+lG\nEbb/9uDpcMIqYqr158G2Tu7A6wEoRoPn+GSJjdsqh/6mVQhnVAkf0FGxjsFB\nygEUl+xwsG+BT4Nw7MezeVuqWrYENNTP0+l0H0YwvSF/24zBrttbmPbrErHM\n/+JOA0Z1xEDeyVE5ygasn468ByHSmxp+ljtyQuddUdXXs2e9OzqfF1X0MMkr\njRriF85jr0vOyYVeWOxZe/7/rjFz69l3xExhXnCxeMbQARrb1nbhdBvdITra\nHktZ60kzaPTR/yKT/JBxBq6zY1QH6vdEsw4EO64DrviqXHmSur6aCLWKZPvs\nwNSho9HGaRm6lQnGeViKbY70gU+GUdhYqoltQCn0znhCt7BXOLQ9PnqwgKNg\nAZneg/tcDtScJle5E57IkE1Y5JrjiBPmAO9FBSYCCQOcICNtyPo5YycynAY0\nZcEjTkxIHnpYzKjJmcM7SWNhcXWxZYe2od8V37eJ9AY7oITQmyjk8G3JgScU\nk91u\r\n=aqku\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXmgUCMX/9/YnRbxPoFbv7dBhAnCKrN+hHHaMhT+Jc+gIhAOZPfegcTmRd5Jp6OrcjQRR3xbX6zjRuJBk3KpG4+k0v"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599572150-828e2006.0_1599572250879_0.985775459379802"},"_hasShrinkwrap":false},"2.8.1-next-1599572715-6f9587e2.0":{"name":"@xdn/core","version":"2.8.1-next-1599572715-6f9587e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599572715-6f9587e2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-kCCNUMMg7uE6okebZblNwe2d63OUwxp1I9Evw9Z1W65EPM8K3r/C/W3oemMfLYcIs+Dkbw+vN/g6GyCoiSeKAA==","shasum":"07af24671baa79a440dbe6451e098ce64f0b0082","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599572715-6f9587e2.0.tgz","fileCount":143,"unpackedSize":692681,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV4tKCRA9TVsSAnZWagAAIREP/0PuaSG2J88m+bS8CCZ2\nqS9IKX+pIW5eDJUaeJ9yvhB57wvWwORtIhz4JcjHFHubYYiCMy8QMX6r1P8b\npggwXHhTbHvwrBa/hXYOT1Hevw8yjnjXiLJbEmfU+slQSvNe6z131FIuta4T\n99epeAnjJ6dIYkit6FIDZg+1nuex79EJ78kH1BYlRBxAh//3S3baCpbK8Tdh\n8zFNuweCu4Y6Tihop+X8WljPUDVENAcZkmihNZqb/3492pPz2VwvilpvFxUY\naeAwqUzkfEkS3dirfyZ33PEkPzxOiluttbvA6CHKbFVzOPGOnju64gz9qwLZ\nlFqjnDUf4yIzuSxPwO/XpQ0yYJxeb9gmfhz/7b+8S+m8RKiZKVFnJAfb57KK\nAnIcKXvzHrt0h85h/6RBW7gkw5ZyklxnlZkzuTftVPtP3dVEjjPsfczT6R3X\n4NDA4bFVnanJaORZVvRZZKEtR0Mtl/jJPYZNwdAQ7yGkVBrlmxiqHIXjE+Gt\nvC0zQr3XyYlOhPd8IL72CD/y2Ah80z7yBS/fcdqwuG9p8R4XKxPYweXp2vSi\nQ5Y6cCISpt+zt8sarPTAqGpA7K9yBut7vrGuoiGlD51yD51Mmvupb/T5gZF1\niylN2MYO7VC4vgjqVq2IvxNW+3LJ5gbHIxgLfnLLy9TuobvBoQBkdgCMiVQb\nhQG3\r\n=9H1C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJCRKctRieApN0gHtL09MDcb/MRKZPpVR1MPMGGKnoEQIgXRLYk9N96ZZbbqFivcweJTEUBICWcxqiAS2cccjniuk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599572715-6f9587e2.0_1599572810219_0.06562189748038372"},"_hasShrinkwrap":false},"2.8.0":{"name":"@xdn/core","version":"2.8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2+Pb7uvQ4t1XbbUP/CpuBISk+4m+YehUsE57iqDTUsD1OFpLdM3L0I5yd6MsXKD9tStlQrKJ4W5UGWOym3Lq9A==","shasum":"cb8010cc2793daf5040624997544bd8fb762f09c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.0.tgz","fileCount":141,"unpackedSize":685091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV40pCRA9TVsSAnZWagAAexUP+QHjR6UsG3rTIBWzH+Yy\nNxdut2ZsqAlVwdm1fVzLBmpv7vXFhCyO+CPADtTuzFJrCh8BauZbuygxZDgC\ny0Hh+KBVMCoiC/6riqx6ZT1J1U2jWXngkA+f5ryFYtmDmAQHpW6PStGbaWkz\niS7DcD/s5Eg3WCvb6+5BrXDAcpzt4NSXm+lvSHshpDdJvjukXWLPe/MHuWef\nNqiYaMGvUu0QMHRdEz3c/xjHMW6NvhXeNYhNgKywyZgeeUl07rJ0wuJezX8h\ny+N3RipSOQLeCTPCcpDUH8Ca0s6kbC2B2wc5ASg/D9YFYxcjdiF2bvK1RGrT\ncGTw3f6L/6UoysHMuHkrKkfWCfgMaU/IiqXPK7je9U05vbtxcn8B5rxlt4kd\n2qoemKY1RNwb6kxiiZASPZ39kkhytRt/uVdBiAmtCsB5H5EAKMF/z9dVuVcy\nrUZGDcMyul13LmGLxi6o8HxXtho6Kpy8A0KUSCh/34LG9TksM0B6UIanSjyM\nFm/yU/WdcC/IKgLeIKFalzkzQLt9v67PHoglGsALO/U+lJOxRgJ3p517C+Uf\nAfKvHPV67K1QNGpnxod9vury67qmaHXCagHXmO0BCRFh/kA4seSkVk7B0irl\nWEkbxeGBK3gUOGxrWC/Pd6Iip1e1uxFaU/jr9IsV3BRv57iS5rQXcY98uy1m\nhMF0\r\n=4D6V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA/6CurXlOSFH4dkbhaHWuX5Lo8JvAntuZixZ8Dr/34xAiEAuH7CudxYSX7K7Q8PEgVsLmHW644y1AUvYqvBVYo4Z9o="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.0_1599573288860_0.24709380655239443"},"_hasShrinkwrap":false},"2.8.1-next-1599573991-0aa0566f.0":{"name":"@xdn/core","version":"2.8.1-next-1599573991-0aa0566f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599573991-0aa0566f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lc/tO3IzCw5Af3tyIk+89zalGC6jm4ju8i2ZxkqfcHDJclx6EE+kDO8E2uGKn9k7VABOs8/vuuUO21I7t3HaJA==","shasum":"74b9dde86b897909e6b0226ee96ba1fb58cc695d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599573991-0aa0566f.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV5BOCRA9TVsSAnZWagAA6lcP/jIsYqAWZVxzCw6je9bo\naE4EtKRDZ5aPmHr4c4D3avSvLuqYUo52C1iOP99coVbmsZmRNGPJUTztXov/\nAjT33xpC5uvi0cq61+wo8pvQeh//0s8F/+zFeURQaBqChQYhkD/A+LCHKWbq\njIDHUxN9Z2XsS4B9bdByFUqvD6JlJzMWZVA+2HxN0Kj6+zneYUnesKAJ+BVM\naf7hXKJlef4fzlefa+D17FrX8nL9hoG6P5AHU5ZQh/B0jjBLxcicvKoj6YlL\nOejZ1IDJeXAnkn+nWkdr4ilEC+xVgFC5alixdvUFLAMpNs5e5hvBTaO29Wml\nOUznUoXD+nnov1m38aiDayLhQt8LQ8XN4xRHZpY9Oani2bV+aH9ZBGjbOrte\nQkXIvXYknFt/mYDmRz/tj/3ytJHM9QXfVn0/MGprpEVFzS/VuqeTBtT6xBAO\nY7H15WLhzMX8BtiLxWqAuB9+ZvjThPuR3o9KknCu0EIr7CM4Bgdwm596WLZk\nfb75JHtjN3mHy8uHF0iD3000gT9Q8Y1n9uTEhcoUG+Rkai6Q1t6q9bytqGzO\nlYyKI08rKJMeesUizPTkqxGUv0dfFPMv17418UOuqqIHj9PH690j6+s8Qwme\nQnZ3/gqclO7swWrn2+SUK3HTYPUBXIsnfUSoc9n1aGUypYUz67UN2s9rS5rq\n5lcO\r\n=Oaar\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDC+fiLCJ5hLsjOcECJpeiBVuIhViMkmvuiX9RqSwb4CAIhANwsWi2pDdCnWkhHen/rudG6OWQGnJR1t7cBhC6Ux/ag"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599573991-0aa0566f.0_1599574094517_0.6704185704109396"},"_hasShrinkwrap":false},"2.8.1-next-1599574925-1f9b3cfd.0":{"name":"@xdn/core","version":"2.8.1-next-1599574925-1f9b3cfd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599574925-1f9b3cfd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7utP1dby9IxiSh7q+Ebv7bUAAoZTLv+NuGMkk6a88mABtxRj1HO7l9EUtZT6Lujr2XQQHNasZqHrO4G12pNFsw==","shasum":"8ad5e2f3c4e3c5c6680e439fac78be6c501f0c79","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599574925-1f9b3cfd.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV5PrCRA9TVsSAnZWagAAZ/oP+wbJxSbORLgTTkf6/Kiz\nhItzel9kdHRUdl0ZxOxVGxSyfJf+34iaexaRohjuOd+VtZKAN2o03CYTXdCM\nVn7EajzDd2Hu586UZcG7T2+GMfMHwah2E6mnN6FWLywN1m+NK/1YWCMFCrBh\nedus5EVzOpX90iDzGciTnvhnMUEI2jlXhyAjhbgqF7tjHpOmK/TZgMDI+E4g\n+DZJcdScYqxAdapcVLOsBHuOktwJ/5p1JBPFGra1+gEJ/vrH2vVDEj8yjif8\ndtlT7XuiRzULD5a8rySjmx2ZnpY+9SqJtkgQAoPv7eknqSWXOpi8Ujhs8e2U\nSwx7PUlRALcIhriUZOD8Qdj9PBXlfy1fVf8IjwEtizc/zzAm0qgnRY13/l7f\nqfAkfPIqtjw9MAKdkByqXVy6mVOM48/CPI/d3mrb5NiPzroR9c/q+NyL0ECH\nqJJLRLyk0MzqpzxA79IGLtb97v4bXK8ZCtRVfGpFdvPsSSYt+2lfz8zKbKvw\npr4ZC30qwUyS2tzxPbqzFOLVYKvlQE9G62ZQqHtRuOv7xMMyZvTtvnoBAnhD\nPGfieu8uLl3BJRZ0i4BSvozdk9HX/8IWIzHQiCBswbRtDRGTDWPUu+XY4Vxj\nYy04KXJlznhj8tKCX8nMIDmiGswbfY7f8RNxkXw5EAEaxUWdYzw3OHpFj/Mf\n7g1o\r\n=f0oE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGyyIFkWbsjS5k1A9hdbn1B0XopNnD6N3WmUHhPAOB7wAiEA/xXpu869AFZZnbedwewn4v+dP/53T4sQ/RjvJNzQtvs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599574925-1f9b3cfd.0_1599575018802_0.702697935153709"},"_hasShrinkwrap":false},"2.8.1-next-1599579377-76f91452.0":{"name":"@xdn/core","version":"2.8.1-next-1599579377-76f91452.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599579377-76f91452.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+hAHsw3B2AwvjPYhEnzqeAY8hrwz+OMRhM8E7AAfNv0K+VFBmpsOLY1d9TSp9Su53srsWd02UGLE+G73/RLsyw==","shasum":"6a0d790066a22619fce9dc28eec473b229339c35","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599579377-76f91452.0.tgz","fileCount":141,"unpackedSize":685936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV6VXCRA9TVsSAnZWagAAocAP/Asmqip/g8qm6ZvRi7Du\npy/NyFSOig+9a9V+30Rdn7B3DExILky3+q4fV/dmaLN3rxW57xHwwxZOLbeX\nPNbrvbI6gUJmBoJS2tsy5pTOBABjGR3n4IYvjwNysHoRbTqbBcfavDRAn/x7\nT2AAL23d7FbWRDnj/yVqTRUjbXMj47pWGQ8iaHH1JhC2dy3Lz/AhKc7j+oIy\nQG/IerwO2fu+VcGXmTwtOjay0M7CuLAZaIyCwhRfgYfqsojcv43i6K9UFoXy\nUqM4eroSXugXCWo68HvJ4dgGewI2G9GojpFPxaWTgJGZjHkVLxLN82/l2Rx+\nLtXLjfD+YPaJBgM7HWNGb1af9MoJdl+B4/0caufVZdcF24KICJ/RXiAnBmK6\nQ1ocpWK10TMmIFhyaL4HXqV1XKTzQvbiIVcR9wxzQYUrzVdWrGHR1UQTNqAj\nnUORrH5Mrl9PDGTWXiemF+hSb6SPyEUmEhVr6t1ugh+rd1oLJUefxUKB8WE+\nNk2FQYsuukwJXh1ROy946dtpWnXNWasUa1T9hEkBmRGr76Hixxh38xJevlJz\n54CdMyymvsEnnpmN8JHVRQBcAcBSL/s0FTbaEifq7qDanUsHx1uIUBbnjooQ\nHDiuwo2wW8M6q0tvR85mrWqJXxfb5ecCH7/3qNUCFpkDki2apsfbzI8TBp5V\n1NK0\r\n=3ExM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIELO9kW9tYOVpsdBRnh0UbiZI4nQfafWQrR3PtEM52i/AiEA/6mC4vAgB6pt/bmCSH1jnJvFVgBANujpXP7YR2Td+yQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599579377-76f91452.0_1599579479295_0.14646792148940802"},"_hasShrinkwrap":false},"2.8.1-next-1599583796-e0f26fdb.0":{"name":"@xdn/core","version":"2.8.1-next-1599583796-e0f26fdb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599583796-e0f26fdb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qnByq4oC5ggHbzfwH/hP7G9zdx19oZ/nIgNzfEWyt5du8jTZi95/BzxSs/cuXkB6jbwjQ9l74UZKwkA5r6JB1Q==","shasum":"da251bba7ee7367529e1975407602cdcc2957a8c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599583796-e0f26fdb.0.tgz","fileCount":143,"unpackedSize":694340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV7aPCRA9TVsSAnZWagAAZ6YP/jRdq8UF4DNgNiDbHAJU\ncg6mVVrKqZ3b74mTZns69jmU6fPSMnuUPVp4x1DXfn6JJ4oyE5uBRWhxgEH1\nu7YHctxmpLB+Y3s7bjoVjmKS2CXWU0bXkzjkKLTg1tHC8/ARyj+bYwYYQda0\n5JjU3XtMZ1AOOxCsg2IhL/6fEHPfAprbUKPWRMd0ikj51PlfipGtCa3MVorb\n65pkk+c857YSLlhbrLQ66wFc4iea8mVz4Wp14jGf/1RQSQksFzQXHBz0Q51G\nFeb4dtAKixHNQQNkf4peSD5pZWtMak+iR65F6xipAZbyDcohApwTKSXBZNdb\nA7bJY2cfN2to5jmi1RJsxg9na9OJMcxVClrxrgP0VFp6AFpKueY63aGMVU5l\n/LX90FAC6ODvTrCTyXScfr4yyV3+3dkhbmsj1yTTkwmMOTfypj6nwYjsTYeZ\n/en9quH7lxkTtcwaOgnuPzP5ybooSmDE9aZJiVOq5kots7wCsB9uYrkQWROU\nHW2wfK/wXCgxpofaSBJlDSrkNd6muPkvb1nOLAWJTMs4Jt7Mw3GyKcSvP1AK\n6mCqVSSd60yG5kuzAUAvqeLsjxh0KscuxfyDOews8Nkcj+nOEGHFWaPTyfVP\nJ8z4wieh5peAKP4POnHNn6kMm+WyC4lHwZHyIHP3B9kpv3vkKZ6/6azRT47J\neQ3w\r\n=SeNe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICQVbADS5dB9vwGkWhGmmYG+42m6Lq4/qSw0gAHWN6GiAiEAtgThd0ZorEdGloOa1hv35lGlV/+3Fhx+kzdgTQHl0yk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599583796-e0f26fdb.0_1599583887404_0.7716078845425032"},"_hasShrinkwrap":false},"2.8.1-next-1599583958-bb12166e.0":{"name":"@xdn/core","version":"2.8.1-next-1599583958-bb12166e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599583958-bb12166e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dOxcGT24LsZfdPsrHsFe73nPlu5q1xLrMrnnzuzXEUyKOsQYoWz4H56dw+exknuzUZQRiZMdhTUMl4jrEJ5bMQ==","shasum":"4143063825f0bf922b496628d716f66b66c1f081","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599583958-bb12166e.0.tgz","fileCount":143,"unpackedSize":694340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV7dBCRA9TVsSAnZWagAAG9gQAJTCGBbxsws5MF25QLnR\n5O2B4efr65miD+LeQK52H80bWlTvMsl/lfFL5etUFidInrOPWLbfGhNSRzd5\nDnJ/j/VOEemIqCgmYwPtgMMpd/Go8apF6KfbFFuorGKjhexmj4KnO//KYFw5\nSGzTAasyUwimcUP+XtcISpwC0ngi5CtbeomAvdnqGU1dY52kRYheXJoLtRDB\nLkF1B3OY2/VQocvxjyYONDBk5olDZA2AkAfc8Egd3MJlU1X49ew7/95FQq+b\nKNHsKmtokiqK0lZ35t0htxNkE8pHIpdsxPsgnVYslH0SPLZpL1pzF5FGg6fX\nD6gcYLOIXRBfXn9e4ihVtpCLs9b/j5sk5ZXIynHimDbgofckhyUwObebvgji\njjxGzmXbZdndh4XPwC9jVMEporSm/WnviymxtahYIp3oJNqx0oLtGkc6pwrM\niblmsyl7n9usMBbqjiyGhBEY5OLX+/i3jZJJ35+wJ8Hk1ho8BZT1KpoOJdFP\nXhRGzw0RFcmNpQdsFNQGK7dSBXj3uOIIl2ToQNgSkgA+zVYHgDLRAh+U0HiT\n3ShFKQZ65CYhEbYX4UVM22MrUYUv+t8geYiP3hoIVpN0Y43sXTD3yHyVSC8g\nyD7HTbEiyQPVhE48Ozmw+5RbmGq+HuCjxvyre0tSBLxvXg2vSefaPdRMT2P+\nKj19\r\n=zP4C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUCuGvMZJZhcRAnUlIDbgnn2Mv++b4D78LRvGAHwTRhQIhAKPVJha72mfBHZ6HkBaXfOtte/hXKUNk1VXRQ7MKbk6J"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599583958-bb12166e.0_1599584058367_0.01571379179761223"},"_hasShrinkwrap":false},"2.8.1-next-1599585714-bb12166e.0":{"name":"@xdn/core","version":"2.8.1-next-1599585714-bb12166e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599585714-bb12166e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-L7pG9tVINgPO3sx5ZbVU2Lms49DImYFe8ELqWkDFmyISw317KDIupuWiljE9TvaWuaqjE/5T27AgBkW4IY0tiA==","shasum":"d66ecfbec1dd0a008bb70616baef4d6d5293d171","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599585714-bb12166e.0.tgz","fileCount":143,"unpackedSize":694340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV74MCRA9TVsSAnZWagAAnS0P/3PVi5JEDIcrjJTV1+P5\nWfnPnYq/tSUE41iY4/yUobKbst4sCKVgC4cExNkDZEKUoh4DFX1adkph+P2w\n8A04kwJJbrAAJSUFP5iIMOxaWKMPF6kT77UDyGg1f3FxbRrQ5azdaBJsaKRZ\ngS5LMtHrZe6fmRsiRKHp0VrG+vPZP+wWed6+E626G4l+eZheUJzZjzl4A4Vj\n1FvHM3b+HCYZKI3Ts7DQ6VoSEPflBOsGlKQTq49oh7jqiiksCe1mswiij+ez\nA1LnPR5eB/nnMmRL8ZDRQTOC1wpwuuUtF5zIgh1yX27QWnfNiaIW400tZUDa\n6CtswhgzxH78FnSljMAs215fKfHXhzrhM0g2tiRqAEnWmXSy18g5g9gSEwvt\nafSC2Ae5BZc4iEIAmI0PdUQa2GUTCMvKinmvrQvDZYFx6OhGBQbAvRe1OuW7\n5wSG01w+15ZeYnnjIld2ELunlE4kyhTlMDxYu3FSMoUhAA8hveAfyOIuxecC\nmz3Ge8B4M3QCZuoSwqsbo+DWX0wYJOgYu44t90m3HmImB+ETQDqitCqbOJOg\nk1igwKSC1/2aJi5y7W6Ttscsk499UjTxJTtNKdrxCjBXHDkYJIz/+XI1ElKw\nQ2XzSvzvJ1tkFh/Q5iRRmIXSV6G+dDerwIXFMYCobgVkApB1dzB2GJCZ75x9\nzJ7K\r\n=0OvJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA0k/PQTA4SccdVI6+hzlQvwoY972JVS9Pj7+mm4/pMrAiEA6l41jYMjk8VNbP6lF8h10jUfDO3KyAmekYk3iQyTn48="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599585714-bb12166e.0_1599585802958_0.7432254191288461"},"_hasShrinkwrap":false},"2.8.1-next-1599586431-11d14d03.0":{"name":"@xdn/core","version":"2.8.1-next-1599586431-11d14d03.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599586431-11d14d03.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ElBDQHIfCL2P+q0cDhTEispU7/lpnMp7QuFNAWQRrXHbiEivE8AJsF/a2KfsSdbbnE49yq7y4FkUyWkEABeCtQ==","shasum":"51e2b67e40e8470d9e0026780ddacc9b99a07953","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599586431-11d14d03.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV8DmCRA9TVsSAnZWagAANkQQAIK8ssElQB/ix0tTHwxo\nY4FtW80Rblsq5KYGhJf4/QEEsoI0xLR9Yz41JZleGemogie7oo8DnLTLlKKm\n+TVRvhz/69hOqoh5p6yame+SGNO9DTZWaX/0l4CImSQhRBpz/leKFC6i1PkK\n2Xc910o6pw3OsUKqQeTQYfrLUp/b9PrTi0D3dwAIRCdf0aXhcfwfRxbybEwu\nA9xl0C4owTpYmjPedOq/ELfMtITBjMh7mfEq1sB3m4a8Q0/tL6TEMp/W8TJq\nmcfo1K5XWYBsOn78k5iMi6QFrbcDR+6Lkfb89JPFqrvElJVebyqaqtQLmrab\nRnpxRjbgWbFJdpNF8dTn9yPVy5LRQrutIS3/7re6aQ9MohHtMf0zvjlJL5hB\nOEHQrk/ZW/vMbwlzXmxwDjxonzi9HyA7zyL7Ys0MrDwnfXA9jWQqEmtKpq8e\nYR1ZVuKhVVgdDR2fq4sAxIA6XIlS5/pvV8ixlwtWQ4HGFWg0v0B5q1Dxg+P+\n0n1uE7fx0B/tgObFA2qj9Ip2VKipgA7XxFF5Yv4Cdg0kz3FB4OZI5ucdEJsy\nqQUmoPOmufHrgdnyd/YqUsKGRUAbxUrz02sdqi4GnFX2F/bEat30x9SEiJD/\nqrYIYpRC2bjaTH53oolrm749hyesQ7BqOESEuWu3iW/j2NkPfrZEFXTd6pCn\nkcbl\r\n=cY/L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHmoBvW/tFWj3IFhXTcR0X+Al+vLT4hN6p3F53etbuhiAiBFUHxMd4KgdbWdpohuxciK/U+oX+afWJMuJ3SukE+ASA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599586431-11d14d03.0_1599586533749_0.9780537216400433"},"_hasShrinkwrap":false},"2.8.1-next-1599589991-9d6a1b49.0":{"name":"@xdn/core","version":"2.8.1-next-1599589991-9d6a1b49.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599589991-9d6a1b49.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YCm5be7gnGqp50x573HeezYslVfBBa5pQOaPNuucFIPlwC8ifeDijS7o2d4WXxq2Ux9o4goBy/FdmxL1nrdDpg==","shasum":"a57874cf164ce4990ba6947b8dec7a331dd49ad9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599589991-9d6a1b49.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV87NCRA9TVsSAnZWagAAt+8P/RFk/MwTNL5vUO2nwSgX\nmPGyc8EtTlYUkboD/1oRM9aaldyvNxkbeqlpon5BmD5UN73YJAaj1xPAmqdD\nXrZULo+lb4DxIW0VzKj9NRLcujyusfQ9Ph5zG4yMRBKK9ycU4yvuDgW8HViB\nI5ZydgDjB/3G0B0yg4u6KQtoD/eqnyg206IzXdFPFknTYOimhH/4+dGvxvCR\nFmpzg6ctq48z1U54QqgSzCYq0SjVpl9AUsOSzsNn7PP1zLBf7bjIvS88oQoP\nvsxlWOdSMODap5oR2/KTebKG/OW9aWgTOhuL6h8F46o+/BlHAD0qQ7Zs3hbo\n543l30FwWwG8rQKgUQUQjQY/gTfpLQrtItfcaWSI3gQdkEKXsCy7qX6uLXU5\n2AFh7fixfzbC1BCsYSNiH/RMw8rxskNjH5SSdaTYzckzQH1O1ZNpSAUfdBs7\nS5gJmcimczKXtvyWEY3UQl/q7oQk2TnKtEG1LGqSiu6mqXmGudyn+n/tD9ro\nhlw44jrx8qYERtTbXBr/mJ9EclhzzDPk+Hqmy0kLQbrrga3/nHeDAeXQ4h52\nC4qqCIa+4qAsAh5Sg5SpaHAxXqOyvL6jAjvAEloDNKaG/8Ic9K3YSWOx8ezd\nliJf06+bYbmVuy1/fCNx0et/d0d0hBOJWBicClbWMcafTCq2uYuunEKE7IFr\nvl4u\r\n=2VLT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuE9udagHs1ZZsac9arkKKaebRzIcJQDKP6xPJ99HctQIgfG0P4P0Rbo2N7iQt7PBCZMTtLTCwlkvSh/d/Lb5Uj0I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599589991-9d6a1b49.0_1599590092959_0.7784044273726831"},"_hasShrinkwrap":false},"2.8.1-next-1599594538-34381c35.0":{"name":"@xdn/core","version":"2.8.1-next-1599594538-34381c35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599594538-34381c35.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-24Y0fo7J2j3ancaAuj3qvufhhiuGB2bwu0R2g1L8hUkkIFCPyyOEQzcus0tZ8DgoRL+8WGIY7h6VHdwgxZrxZA==","shasum":"a05deb47635f4aea07dd6e38f03a32157d595171","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599594538-34381c35.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV+CPCRA9TVsSAnZWagAAyRIQAIVxD4oJuOmgck8KnbAe\nM/RdLU94BAcrGX2M7sTj6rsJp0/qsOeYxy3fuoEQAI5c3mcdy9X4D6eUkaAa\n1ZNVQwCRidWgdg5wtv1YSgLDxgcE/DuRI6xY4eetwGAMeT1+4ZZRfAL5KKrX\nO4t2xN8DJr2oasZxmhk6RQqZTv6M9cxoplzPs13ik56u4ABtX1zdyh1U1dvd\npGJ3HYU9gkPzJwFDIhO1IJ+tbVWEu6mjTpomYBNXauJgS4OViBwjHJ1Vs6eR\nXdz3VxMisoJbrSx/F/5AzEWr5ecEbtcl4vPmTBHhgu9J5DJoOfat9cP1dLc9\nhnRFWdRtZgXsMPaRL2mLAJBUUCvmiAf2SdGH+uxWMa1CgYAfUI9Ut+5ho3kQ\nH0hr2w7zV8W11aO/F1eR2MmM6IE4gkThd+I6irEzIMo8vqfhcTA8nq3eg/FA\nXlCSnkZ063H4KPNRkW/4Jop2U1aROkg1NGIO7dJ0XGRU8klTWJhmYYreR2ye\ny80+j6oQx0qdXiugMG16sKnoeOGsgvgfbyHRu6j/r0uFcRJq46PvaRptJeFW\nnmKnIFYqm5TolOQnL0wGqcgwwO32ZMY1huQqfhHCDB0kkTv+z4S8T0oGiB3R\nV1BKOl8Drzx22CC0Kbmln/FGkbCk/NIb0k0bhnKvf0D4lBI+Kr+Ui/lT0y6o\ngpAU\r\n=hCJD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAHm7dt/2LkZ8Sm8syK49FwqTQ1s2+A/xr4F3h+FVp6YAiAWDxeYLvlRECo1Y7jRyykO3vGf/J1Z4aHxJYLKgrV9DA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599594538-34381c35.0_1599594639253_0.6329968649059006"},"_hasShrinkwrap":false},"2.8.1-next-1599598701-c31613a6.0":{"name":"@xdn/core","version":"2.8.1-next-1599598701-c31613a6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599598701-c31613a6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-61VBxPWARDySUaPKA48wEnoBSOI2Tm5lnA6EKWIWrk6Y4dEwnGWtrAdF2VQY9V/2GQUIKQ5WMGYz5Jsswcnyog==","shasum":"63c17780a5a0b459e5ed645f0a68223214bd0fdf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599598701-c31613a6.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV/DJCRA9TVsSAnZWagAA1TsP/24w9Ig9JHWEYX93BFqG\n2BDskaiHnNhlPiR63S6+ssN20SaJ+bo8Ta6DX/HGKxCMMO/VWpq5sFsrZ++w\n7bl3+gl0sFAxGrR7/9lm+8rxapxTbAnIYDOfnIRAEfkEmq55bPneU7+UuGOj\nSZ2BmzVajuE4J/yicOyL2mRRIYeWSVcI7I6c+hPcXlE0WL5aRFazg07pQc8S\nrBuUvScnz2U9JgtgoS2Mo71n3E5dIwJ0t79vCE1rFW600EwxYKCiMMQenIxc\nd0X8Ijn3uf4LGYAVm+ufcxKDOc//FEShtEghmPmnbmPr+FnmKuuKhfn8z+9j\n+HcNMsrc/00+K5eRAYfVwRCbRzBJd2C4RUNFWR+20WRRvVWlPzxw+9he+sN0\nMh3hbFc78MZxRMXV6oSR9vRodml0MdDz0jPKB8NOFW9sBXjsi1IrzINP+uQy\nmDLElNigMv16UEqdm2/PB7Zj1jPgpwO7yynwZuY+eie9T/wTGJGGXO2Mu6T+\n8D0vCeHCpKDs5h6eq1zpyfESBq50VBGDGYZ3dCiZLhpDHViHtiDTXCdho/0d\nYzxNAp/GvjUYnlIA9H91WdgjdHN1awGT2RfjrmEgt3y9cbqqp+T+QzAHCN5s\n+RaRW7Cf45Gt/ARj1IjzIfYGGcmc4SUtl2PJ3rQYEIL3vnfn41/889IfHFki\nkWzC\r\n=ThIf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICsukrfqeUEyxxfX+iSXi4UIFbMOAo5q/zbOL1UxzwQmAiBuQvQ5tOVXHBeh3rkPyz36PGiBTr8TJ8WlNBq1tiBisQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599598701-c31613a6.0_1599598792615_0.6724124557566158"},"_hasShrinkwrap":false},"2.8.1-next-1599600008-85b43a11.0":{"name":"@xdn/core","version":"2.8.1-next-1599600008-85b43a11.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599600008-85b43a11.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WJ7S8NFrByB/JVlVm1jMxZ/46ene+BJsxbsIcm7rcMn+lUCSsyZQSL8f8AlXCiqF6bzK/J7IkBlKgIYOlf+IRQ==","shasum":"b49077b9655c56d5cd0ccf172683ebba3a43fe56","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599600008-85b43a11.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV/XoCRA9TVsSAnZWagAAkcwQAKNTfhdHSSY831uJP5wM\nINFUNJ2EB8eVtrKtV6y4IbS7q/JRlUkU15INA/1ptoFPetfsWaxnqxT409gK\n1uwSV9P5pxgMkoHRRvqbZvJDlEEavcA1WtHNK+FoMpuWk05Y2abY32dgY0fR\nGEuJLsBwrVBrQPpSn3mksEBrth5dSF1oiNALptu61RmXcdhPMFTLAJhBEBCe\nWo+mgwWVm2yGI0BG4M6cy5TwVdyUzZ+H5dCT2etW5kVIf+g+ga8CCg2LN7Ka\n1QfVKZ485NOiXQXXU5I2z1i3IF26A0qaHIoL3KcfQQC9XUEZN/bd201gZ7tz\njrzo2NnGdPhDt2n2fVUXnAl8V+M1TyaNQvMUcXEoPHHf3rdEMi34fJqO/HsC\nToxt3Y735IaxqpaR9h0jl2EXJJmDm4LJ51Y7YXuCaMtDTZyXzMOI2n3MCx+f\nvn4QRtHifPlei7o72sOgXZzds6szKcYqGsuxB7ry0c1X3LcFIpVsWcbE2cKx\n1naZDTBVFESvWlMsT4piLPSszLBk6f5avkYhir5z1Huw0+xdart98udYD2xU\nQxlHdMtLKwJ3AqrZHE7gbLMmCINDAXEGlctqBRNcI1kLCpnuVI7ZOU4NENz4\nG4RM+eQp7DN8eWB9TPdbXdS7y/tdbW6OV8p4Eb7YAbCejFtW1RA1PRegyOyW\nZABl\r\n=nLRn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZ/XR4fQYR3iXlWl/JwQe9hwUqDTzKH00tEEQVYtiGqAIhANtl27gk4AIDJ3vqi00q3aEWTwj5nbxQeC7bfBYS0Ozt"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599600008-85b43a11.0_1599600104228_0.044022567814765434"},"_hasShrinkwrap":false},"2.8.1-next-1599601377-a988e7aa.0":{"name":"@xdn/core","version":"2.8.1-next-1599601377-a988e7aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599601377-a988e7aa.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-p5tSWYNE73qIxDDdnLnw2VkNGy1+970F+SPvYgrvwZuu6NW/jO7JnUhTdJhpzL/+ak5RB/j0VyKtcuKjQOeTRw==","shasum":"bf2ad898e8589ef2fcf4ac368807ef903cc0d744","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599601377-a988e7aa.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV/tCCRA9TVsSAnZWagAAqK4P/iBClOVpzu54e12x1yeY\ncJsMrFY+bVCfLmoylPMdId8SlGNs6lfbgwaUseeGJqgwAH4foZjkUo94rJtn\nhkPpar+t4l2q4TDkBd2cZFonnRsc4XRWVPjlV0sckK5DwFrPhqIN9EmSfXuC\nshODvxU+rFTAgKA5TVAEIMSMpPZvrgdrFM/I3tzIP/MI2t47HxKzdU0cv1l6\nkRlDyByaLO/jsDd7sxJIC2xKlYPapceNM9wST8qEALatxTISNdekIIUplZ17\noZZljHaCz6LQ0Te/G72ZMaDMTxeOIqiPwl6EFY0D8HNrEkESqik6L0TFlBT1\ns6yqHI7iBARVOl+scjGtnOoBEquIFPtPzpBo9ZC4NC73ZTguMgDQQbZ0VaeF\n0CKbTf8eVWfcgHh0NIS31t3DEoanuQqVKrKWu5eli5FI7YDUStkIzQJ6qg+x\nPDM49KKBCNbHtVIPIMA6/ChRnrWAckyRpvCp0JBwVH9gKLClhBU+yAzTrXSh\nj8LJN35mvvRamZ7tvknNwWQ7aBVGr0jvIlT853CtBU8Ea4WYeja89E3wpIIU\nLCpGAXIbup6R+12FEoyF4yIIfzRUQJPjDxVkJmZjz2BrBbhX5OKppxyzUfwb\noRVd6miUPWD6xbro/tUJFIUEldpDya1jZYQUZBGt9ktTqhXakb5fHX4iqNAd\np1/1\r\n=btvl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBI2Fwwuq4Dmyt6I5Q3JtuoOnyvcfN4EA61W0XBcYFU/AiEAl/IcS8F5VCekYd+Y4xeiXvgu/rxI5TIRa/1/Jig4bE8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599601377-a988e7aa.0_1599601473767_0.42326853722880187"},"_hasShrinkwrap":false},"2.8.1-next-1599602262-b263a8ed.0":{"name":"@xdn/core","version":"2.8.1-next-1599602262-b263a8ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599602262-b263a8ed.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-IdDDI6lKrIyt1hxxYNWccYAqZYPSlqQRvrs5TkHzqzdGe+Hp9VsZEla2zT8C8EEReyOI3nM4lvLOkJMrpAAhpw==","shasum":"7ecc3191c6033ff37f9d185f95ec28295671d206","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599602262-b263a8ed.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV/66CRA9TVsSAnZWagAA75sP/Ai/Jz6X8dpGptUC5BjU\n7tOGobHwBzy4TwWaHGqSu7ttaM51pIINTpIItH0SLMvGwWrPFeWNbsnR/DYq\nQcjTPdX2uewQUoZtEG3FktlbAxVgI3fSg43ttWMEGN/of/isHFxPgiTxb+4w\nBOZ65WV/LjNeW4n3L0y6tF3XegJ2BFTiSfBG+H8vZsRB0KwzujiApZM0OF/U\nx2KsISWGGdSasu5vffklrjbv+huxJfl7Drjtr2AeWYMI3jK/Aqz3a6n4zVwd\nfq7CygmKhQE/m93xIGcVCQRqzo/bkWvZCDMDb8vaSF7WKOO+otB23UZMzy7m\nl8UfVYuBValuCjnfg6fLutjzJCpmjwrSA83fiHYMh9dRo9qiOcNJtrGXxZ+q\n11+LfcfFgo+wfu0krs+uU3opotOjgZuivmqcqX3qQYr8/4a6UmnMjG7VVCId\nkHs89t96td9P/Qx3Eq4SrXgyhryZFUveuE3DJIZcwIuz9wsJ8rl98Riy6mGT\nfhsi0z+FQL4rnnCkhAqWdLTM72TdAh4hMSZt1OWmVe0YNiblZq1PNq2EjQTr\nfMqybZVVVxFyaMru4A0syrcrskG/4NyiAuqOvokTE0M0FeQxpHI9KkVVFcaI\nrVa4nWKD9dcsWwPc/xs7JvUDPUoMF9XLiMc/PoArLOYJdn0q6zmoCsGHGbmW\nrGpZ\r\n=xcIx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICvutRAR+QlrSycCj0avcquFj7v6rY2/pdcipnD82CD5AiEAtjzCmYUVtQcCNvOxsnlHuND7fgj00GM2OdZ12nGWynI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599602262-b263a8ed.0_1599602362169_0.4983361960940953"},"_hasShrinkwrap":false},"2.8.1-next-1599648414-09ddff50.0":{"name":"@xdn/core","version":"2.8.1-next-1599648414-09ddff50.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599648414-09ddff50.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-TCtw5lmS7wTcUd2VoEfES8M9Qh55oIoaDNEuM1JT0Ce4OXFZfTT9KD/vMgeyv/aC4bJ23LSaLbW2bYcCKGGkwg==","shasum":"36f79dbdf2e20ccc600692817e7f96dddd6dbcea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599648414-09ddff50.0.tgz","fileCount":141,"unpackedSize":685145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWLL5CRA9TVsSAnZWagAAS/0P/iSrm+17kGOJgHuX7sAF\n+IeWplJJ6+3SVwbhaGH/nLbHVW+pOTP+67g3KCv6aLrGSk9KD5QpJcmyTIB7\ngRKihhNR2f9jTZa2KWSL5Mht0o/M7QQDJGMK7wmrysj/mtlIIV1VH/pBQCzf\nQ3Ek0WAKX6HEgw6R/9++w+IPMdOP3hV6UkTfXSjgSLE0Vqd0zUlJcF4f3dcO\nEd6J7qqPEqir77Z5Zmf4iXTxW+67oaDn1gFt+RV5kNJ4iXBkCwTmRpTBcXdT\nxjYv6Owy15mBxxJPs0v0doNQJr9KZHiVGVgcflKohLYKZIzDvLiexTFOOXeY\nJ+nLhqs2qAarx3Kgd5xk/3sMnI/V+QUHtw+F0PqH2Qu6dlPHuE6D+1G2V1Vu\n4AcgwLiodXcKrIM4B6CvWcrGiD6WXuJCPz9DZETyK88jj/tsHTSoMChc0YCN\nlj/Wwl5gfi1VlF4zSuwXKCX+wkeYcKiAWMaoxuZuI6Lst2/25dY9XtcPDD8R\nevGDE3zsVM4lhngWC1ntm2Dr9+bUwH5c0D5i/iPgGXQtWeBGwkNIL+3NlEK/\nmH3Bly3ZAdEbcjssdWF28AF9i5KOsFtMOLFLs+5ZUBbTalqonWc5ikt2008z\n8nzzkvC+oaOxhxL8xDtxs786lfytxrhUnpMnzel+sQ/qtYjy2N12uNqDG0+i\n1h5K\r\n=ZJUf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDB/P7zcsoO/Fr3AxSfe5DvS+dAJQ//a3DiWH18yrvu9QIgTBhyOZY5E8ldj4wJiZWARqwfDhIXUz0hRMxRhK8ny9I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599648414-09ddff50.0_1599648505056_0.06337711455068851"},"_hasShrinkwrap":false},"2.8.1-next-1599649332-3d79f674.0":{"name":"@xdn/core","version":"2.8.1-next-1599649332-3d79f674.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599649332-3d79f674.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zNTZpsXh4tYaEpdRwYXKz1qOcPueyRuw/cP+M0pX8+HNXb4munSOb2Mr/+5c9AaYgmZgF2L4DY3B96KMu7bn2A==","shasum":"e4b00bd195087bdee76edf4128219e89986c7d4b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599649332-3d79f674.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWLaSCRA9TVsSAnZWagAALFEQAKAWWeSZFfIPtY9JC1jO\nPNGiPsg09bx4tLODAsQey8V0BaaP/m/YCMMDX/0A26B6KZb9EJZdP5RUJHOv\n8Rfq1cbaJxLY5nPK3GkzNubMDsQbZF8TlKA4xGlf4HPUSve298vkiHg79+go\neRp7dNO0r0Xw7WaQN2TsjSOeDH3qr7J5P3Ecg+SJ1zMdyCyhDg+7jIFgNzyb\nOQJZx0LBwLcB2Y/cj4P4vtkQskkh2FfANw4Tr6jyBZbr+wU4LYNhtfPiBdMD\ngbfP39YjW+5MUZpRqdS3/pBLuDk91kcGfHgszibkstpwwaIrqGpzCakv5NWH\neHOoUpoCrKVcGErfvVZQBjw5+PZifjWwFULAjHvPmTjNahRro58qAOd47dvr\nru0Chnfgr2rW6n/TUd+J5BTANq1aykQyQ/lqjlArBP/mBAROqirA2bHSkqoh\nURRhk0yVvhBpslzvcyrmZp4RwKhVmxKYzay13t10B9YGtoi+LOL1I/x2htsN\n6Kuj1f2FQICax7mZE96JerIPlghdN3XweNau5/qum5eUb7LJIIjypqvLydrQ\nnNkd+QMCsTN8KTYVYGXMoOckS6Nz3qV+B+eC8IM9N/U9DKVGq0Fex2TtTeTD\nJ3fRF0wtQODL1tV+jOqemzMkn0d40cShp759wBhF/3SKNi//nUc9xKe7I2bN\n4VTs\r\n=ZSFR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFvEZSZWef6jlc+FrAlRtZzXvC9GE5Ba89CS1J1MbIDsAiEAl2KQLPrlduWcacQWbdQvh4e09WNejSltdUr8H/FUOlA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599649332-3d79f674.0_1599649426241_0.7126752745149159"},"_hasShrinkwrap":false},"2.8.1-next-1599651272-34bbaf73.0":{"name":"@xdn/core","version":"2.8.1-next-1599651272-34bbaf73.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599651272-34bbaf73.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ARFjdShrTKKYUnOzZYnsZx8LEwEi/XjpMtLWYegMtGx97VlHeibIgS1b7slMfsGo44Ndyt2+c2sZogC4rZbtOA==","shasum":"3fec9140b3b745fe2a230a47a64caf36f54251e4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599651272-34bbaf73.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWL4gCRA9TVsSAnZWagAAVHcQAIq9Zx/adnz25cyJOK7t\nXpeEKfTinMlCEf1jju67Mjf8q1gq0YZiVI+vLONMA1z9el58St3iNa4/I6oJ\njEtqyNf6lPCzXWldqAjbLx4v8/pnktp/oX9msUKN9WDHcgJp3s4fdJTVjaSV\nOWLtZrY9Ja5DNJhGpbCPRmj7+TKkQCdV0lE8egLQFsgRbJ6jXBEJtV3eAlpH\nySRZN3hyRZmpuwu+31pIG7dh0yHQWFf+Ol5z/cq2nza8X6urShGqipUqj9Zh\nS9A3B579dmnrSAUpvX/r5kZe0803bp+tRHuhVrWRCv4b2oo8UUUfgURv7l8e\nx9ICx6K3tkKSsNN6Att6fOW7dqAJbKFGWuAn1XoNibxjBoA9OjF9nz9BEnf7\nfnwajme4L4ADFeA6u7Hueuptr/t6Xs7YDuxa2oxLzeIxqFLcuOlLxQFcwpa9\nuXesgUelRDkVXcJAuHe+FkUcgSePy5PPu8+vZ74PZj4x4PnuzgT4hvZDu5t0\nKCmormEjCf3LsRTH4E9MGaiTdJdZwl+mnP5/uCLZM4QE9YFDOtQhKIFRQ2gm\nQDPfP2zBD9a6y23Wa5o2m904e0XmslY/VNn4tIdEBq92zqKfxKFw1TrUrs9g\nRc8o5Z3N26BevDVQQWMhu4LudZbtPMAzRrvcR7iW1nYVHxAj32BDDLoEjAu8\n17rk\r\n=J0rg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIACdzISpJT2ZFPUuJ6DRsflp5Dv5TSiym+4mczzyCYi7AiASj+sU+dda8Yk8mr7PFeb8SeQaQOZRZrSoeimKw6ZkDw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599651272-34bbaf73.0_1599651359854_0.20932902898253247"},"_hasShrinkwrap":false},"2.8.1-next-1599651663-97b41d07.0":{"name":"@xdn/core","version":"2.8.1-next-1599651663-97b41d07.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599651663-97b41d07.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7X1ppVmj7wo3rwnZ5eKDGx1p0LRoJmk12Jj1VFuBj0l3F3JFQnemPRNrHRpxqSQPfadCJ35rAM+9eL6zu2+4Cw==","shasum":"0d2bc8df8cbd46f2682cd298128b23f25dfe1946","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599651663-97b41d07.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWL+1CRA9TVsSAnZWagAAmVAP/0ZH5z1GJFyoCJ83ZB9w\nQ6RJ5B08msydMR9aSDdJ0jfHGw4jJtIC8pY3XDhfpenEK5odwk25x6/OoJt2\nVZ/L7ADovBcRPo3bVj3uCOs1/AP8bpvwhPwtzKY8Yr5WoU4AtXnATFotxejs\n84nyrzrIsjeO7Lh7HuPvCNFtvKcjWqUeAXjk2RKQSxqWx70JqgoeOpQWCCel\nyLUMl0bdb8VrWvkoNfZql3yJhOGUTGlRGflmAsFosLW8Va73EFnFePJJFZPr\nxVxUanByMsi/cK3YjMHAGBaDHkK78SqVEIqxqWjncgcPOQgwHZ4sg+pKulWI\nIDG+Eha2XI/Wqs3c4cBXpkWJv6tBObg8JmhM2it0m5kUztWiBVVx4XGZVG8O\nms5h0d0d55IryTH7twhooQiOzGhUQBowH6Fy/aOGWTT892aF+gP8rSL0pbWe\nbVInmwqaTyKsq1x8bELuN3STSbWLIWTTNg0wqzdAtWqF4r8xnorI5L/PtHTO\nWVCQXL3OrRvTpHafB7UwRIWA068Y9o2fGcp7j3H69v6TPNhYKi6HR58rxZCY\nOf8R45Fi0vvQZLw2FRtw9sBmrGtXhknAfXdT1Ro5RGllJFriOMBGVYyYhxt3\nLnOpvLxKVXDfoGR6ppJ34FejeEaeKINSMOg6+qUsdaB5MAUQ/VeD1WMKiZIl\nFP+C\r\n=l4gF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcuufR8SitR+SFRCxZEcdHqlarESZLmalamcXWeht3yQIhAJFb5FY1uxL571m718z+MiBFiGdTColX5+/RJpniUaXv"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599651663-97b41d07.0_1599651764618_0.37228139137559113"},"_hasShrinkwrap":false},"2.8.1-next-1599653218-de5d0620.0":{"name":"@xdn/core","version":"2.8.1-next-1599653218-de5d0620.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.8.1-next-1599653218-de5d0620.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ef1YgTp8RI77ez/JvLd/6djNi+Bws/dsbT090j1hfOTEIxMtvj73Dwx8oRK7ktBkt440ySPSnCz0PO1JiN6WEw==","shasum":"b251c638520afc3ac42e685c20388ae2490fc162","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.8.1-next-1599653218-de5d0620.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWMXACRA9TVsSAnZWagAAjRIP/1ZtkwcLGOcI1/Nc3K4L\ns61+MMtI5BVKK/qyrm4KvVkJ5THATqWw6UHG3eFgymTfh9fhRfjlq2bIc1F5\nPL5n9oMq2civ2eG3rVFQnp1gJHi+L7p2qmlFwTw2yqkiWihzqqimYl/7D2VD\ntMEGAodSz4QfsDfYGe55stwbKIj2fIgtzOi9FZgznJIbyjZM1+05Y2v39HhS\nqBmhS1A/2skxqT8RAx8n4iHjcwSXRfzYnerGttO9G3Loka+bFxlW3fwB2sSg\nRR566uh88cMpKkLul4d2wIt3S+n89LDRZjOw2HBKdZjjmcP8m8s6+tZElkpm\nG4LViCQN3ARW78IywD0KDdZrpzXBfX2eUVGKVd2dz1LuQkKXOW/0ySB3AUB/\nM2BHprsem+guKbQUt2VEzdLE2eG5JVXupq1i5Y+VgZ6mEAMNK/dcPdBbqHxU\nQC9gBkZ0XSMwrn1UZTAjJX/dOGyrGyRLTZw6uRsJSeYcSfF/myefc3JXQXKA\nTco/NqdeR3tMlnJjK0gR1XBkxtvsj+8dr04MLvQb46rCnwKRDc1XSKBru0As\nlVR1/DwFhAxz1rFJPk43GO+KMqyQXt+negjaiBHfEO2+Qf/sgb8o1D2F5fuW\npmho3nUWwjU/HubFFde4WWEip13MJYSPggTY94t6hpeEtK2A9O1kHswXlYtf\nKPKz\r\n=/4jH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG/VFxoJxBirWYUnONKuHkQFVCwB9U06h+YEKfTp4u/gAiB0Nhys43Bzp+2D9R9/94utz9/DrnPGchi3YGXPHXrDwQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.8.1-next-1599653218-de5d0620.0_1599653311934_0.06156110537649906"},"_hasShrinkwrap":false},"2.9.1-next-1599653312-5f5ef398.0":{"name":"@xdn/core","version":"2.9.1-next-1599653312-5f5ef398.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599653312-5f5ef398.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7faaPKDdUU+Fl2+fS/YvAqyTmv4qkTfWchvswFUpfSdTnngD9UpWDQDI4AjUvCbjY4BIjad5LB7mepVZWrG+8w==","shasum":"b4e2d5e685f9b1c039a31ac3a577dd3e902eabf6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599653312-5f5ef398.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWMYmCRA9TVsSAnZWagAAwYMP/0LppxXO3WFlbvrfdNbC\n6d2Uj7tvLIlKCyjWOmIk5LGQuUbHHc9RHkVwT+9a+468ZTtVvtAeSN3ydDxW\nd1x/39LEbNQXXUKysLkQYzmkP4RulnOxqcdrseV3HARfTUdbEqhqobqJkndQ\nRSamQJDzjamr6Ux3dOyBtMGtPAk874swUP+FYGt/ks5oR1VD8HmoEUF7De84\nQZBice/j0sQIZEP7jaec1LwyjDkmiw9zH8TioEw49U+AKVafcYzAZJn4qeT4\nqdEP0xhDfhPAal5s7dGyg8MaRbb6Z6zCFl/TZP7YeZ/29uB0nmnKIAfP6ZGx\nGqDokbN7s5lNydElNoqWyk6xBvRgLd19qZCNnZZw9YX24F9fNBJvd9G1wKT3\nww6UGeh+86Q6qNaajZIyUht5iWi/T8HW4FusTwKKMYrIkaMFL4BWspDALMeH\nuC4/gdgfkOktBI616teazidDV9gbbnzA6SZXGCaD3689Uyz7K5ahl7TDTlx3\nXrxlK2I5BoD2nNW2pxTL/+bJ2wal5JE1ebvgIlwZa0lsaaC9jePiwLdjySrd\n8eFF33aNyY01dQ3zxIdITDq0Ba5WnqhG1tieMoN46AugkO/MDfqHRyJfY3RF\nSEtRGGn+dPJjaNjigIesd6fJEi2d8MoXMGQ8ynmypbdABNwvF/x7tkbCEr79\nezqk\r\n=tfHv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC18xy6JX9r9dFSHoo7a6XZdJ2kmXUQZsRjIR+HcQsjxAIhANDnBtv6L/z/DkCOqdwhPQ7sQdR44MTrNsZThlex19vW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599653312-5f5ef398.0_1599653414418_0.9500902916350864"},"_hasShrinkwrap":false},"2.9.1-next-1599654614-b98a36b3.0":{"name":"@xdn/core","version":"2.9.1-next-1599654614-b98a36b3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599654614-b98a36b3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ntWchIcOnDnUx2Jy+418EqWwWE6GolOT2bhTyrz/5lsz3e2iqY2WO+FVs5SWbbGtyxBlyBgldieN4YWILAAJuQ==","shasum":"77c11aa58749cf0b979267d0b6a5c3f2b5bbfcd2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599654614-b98a36b3.0.tgz","fileCount":145,"unpackedSize":692602,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWMs+CRA9TVsSAnZWagAARSIQAIsrgzr/jNAq3zKN1VmF\nv4u2xPqzZ7+2wUkIOocLjeaJL+ZbffpkOAMEc7uNHMnvihAFadMYyxGsnLeZ\nMPN0dW+wlfvt+AF9zQ5U3O3AWG30Dlxmyk7W1s9r5D4k5Wq2FQPDzUSNnFZQ\n4gwQp65EiKRcoUhbCk2b/XqlYBfWUi2S53dIEBd+wHUiqvVBL8zIiFy/H0uZ\nfVWVTjpWY702EvC2GTAQytEhd5bR2nxcV18QUOawLloi2Y4RG+lGZujMJ6gd\nYvPu4JRaBVCtrU2rTsqEQiRH4/ctRC+A51d/bL9clyYGiGrWvONlCbXzb1Om\nMtfmGtI2St8act36Ly9laKfDrZC912AGlAkN3WIBnfR8LWXtUVXnOHVwq8xA\ngaz73tGtLd2Sfoc3HmbWssQ32UeaLHVt3f0D9d/HCHO46f7Alcy0YZzgkT8l\ns/P/WitAhz9XS2qqplReWB+hYieN7M2TGE+RzikNH2SRMa5fNImO3q6mVThM\n3WyV1k/AVcfzqMF8SSYjSW71TmPBEqhuEFPjMu9dyAlX0g/zNYOQNJ8vXbOC\nT843okEwWAIckahIdCQZ2qC9QJpCNIqiHj1FUpxi/J4M4pLn6FglooKXK5Oq\nZJKte33zabct4VqFA6csQL56mfj5Z1/rKRQczkg/X4eSeoebDnztl+7HNLmU\nrr7m\r\n=Ha+8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzZMr+6PfRKj7PkW4fOM2+K/NSR1UgUJDlLXXvWs5rJwIhAMhyDohew4JmUzcBN3kb07xd5hfQn4nfM4fI2YHOrusd"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599654614-b98a36b3.0_1599654718157_0.4162039229656367"},"_hasShrinkwrap":false},"2.9.1-next-1599654914-ad3757e8.0":{"name":"@xdn/core","version":"2.9.1-next-1599654914-ad3757e8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599654914-ad3757e8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5gCbHk7qu9H53Km0C7knF1N3awlinoopoZYWVQet+gl657iSF0KFuSu0GKUaJdPyfBnwbl4YjSbohuIO/lQc6g==","shasum":"d04833b7d73fdfdfbf3d2f6a98f449aac6e189c2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599654914-ad3757e8.0.tgz","fileCount":145,"unpackedSize":692602,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWMxpCRA9TVsSAnZWagAAaBgQAJG7KrHKBiStvSWPDJaI\n1+sjliq4Pzo0+OQcx2GWwUJ8JlaIsgrATufpr//KaitRYC9qZL6XUsf25dqm\nKd8UIoHHlNpqnPS6Dl6cmvo/z24WfKWSsT928ho4gU3TKgApv5G2NTFxCazZ\nxl1dIj+PU4RnnTB+sndvW72YNLZKU4WvQOFaEPYvxae96iTTeWB+8DximSWr\nZzfA6czDvP5SN/8DupiIk0R9D0WMlDFEtvwquncEM+Kgc1/dZ+jTZf5J5ntb\nzRFW90zQhIrPdZHbeJ+jiNuh+H9d9CDik3AJ2U9emKJLwXDULTrIo2fyVaFL\n/BHC6teoagl2aOTf0Qt42Mmz/awqUHqsjLCkbYKtJTC9Eb+ENhKd2cedvo3g\n4nm90JQ++NjdQaWJqimPUkFhcpqNiABaomsRC8mGzJ4aVdXBPGc02LJ0p4aL\n/qrOy6CDi9nAUqHIf5z4uHuH8kVWMq53uQNwo8l4EqAdIKLQL6JuCFMhCnuo\nrx+CJ1XYBF322x3CRElDe2m+eOb0lFwEesGQk31AqRHIL+Ib5tuaYerR1Caz\nUEzG2vajhKSqVeR3uN0qTOAPZudy+PfK/mZJQJQxMmE86wOlTpjOkdeX9V2K\nROvBVxf4GQXdeXNzy3LwcVHGBXJfZWLQM2x8fBu/9ol5qwOZwRqxok278PNN\nVF20\r\n=l8Kr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFZKhzNX8+8SmzA42P5Zdq2GIQ8nAqx7jXwp9EKODEiyAiEA+PkKcysbSsiqE4a7KG+OALnvCQvslAzGQKR95eroNe8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599654914-ad3757e8.0_1599655016615_0.8549684720435089"},"_hasShrinkwrap":false},"2.9.1-next-1599655283-33092613.0":{"name":"@xdn/core","version":"2.9.1-next-1599655283-33092613.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599655283-33092613.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HD8G0gG1m4kczDu6fdHnsnoF56R3spzyQXmaFGxsnZoZAoadgNxzliMqXss68iHA1f26GG1k4dXInqqYQvcXyA==","shasum":"07a92b7b8603aac4c0f418aad60509861032d258","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599655283-33092613.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWM3VCRA9TVsSAnZWagAAWPMP/ibkcj7s4hchCMujhWeL\n1yYqD3EBi3mzY+zaQ3UJ4Cb4lnsbEeNGxFs9/u5/IwayCvqc1sOrHzExYEOS\nynW2UPKF/ocW1YCjakPFejuGGHxsjIR4B8mrtk57vlEhx25Ih860gpFNNJGO\nQOYS5ZBShZmAtBnEsGcrgP/U6+qqZkPFajTUJMRSkB3E05N+oum+iS+E3tIy\nP2ds4d1lf1A4KnG2M1gbarJNGwmPGjZCretfyhPYpEupVpjuVTsJdrl0F0ig\nfLRcW3kQp2+ZgDOjMflrQj5tvmHE2cdkAIyWcHE2avV1MWhr+HGciHVUbRDx\n8kPEMdXd/vlQhTSMJd9lpx5F2RI+gRjCCQVmb1xziYR72EeHeZWfwf3M//Tj\nK5OoNfB4J+wAlvCcfush4NFx0uljLY1yQO7ngyyiwwNcSWrO4OHPlR0mQZMF\n7HltFhzkYdULQ+e1k4FWgxlp6c0BDc5X6h1veZNllIShigJwABCu5/yR51/i\n1UBEFLNNOOoVg18JYN3xD+kEApNAGQ/4qCiNKu9n5kSwCBOxF/cuHNVEzfHv\n0du46jLc8yT5wAS5B4HTjw4SKWe4etwLNgQOTCKLIJ+LPnPnnzY5ppQlvaWj\nacqmZhStgvI8adv1E1wjY8WafloHKwIr95WJtkawGDCN2/vFewqeUGCxWBJE\n2doP\r\n=o3Kv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdxjK0wxse8E5WPjSunEjaZdtA7dgWFBk+nFnOol46HgIgJ+ExvQ4FSQGyV2+33GlhTON9Yht3/X/NESh/gPkRUe8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599655283-33092613.0_1599655380434_0.3867306319517152"},"_hasShrinkwrap":false},"2.9.0":{"name":"@xdn/core","version":"2.9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-O2iO/15d/dyo8hW1Sshe2qlVs3EFK1lpjwwoIBq/J+yzwQ1RYVBTbRKNF7DjrFYINXMI1PV7VYUcEakPgXZISg==","shasum":"b216e1a27915ce8a22569ef6962012f716977ded","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.0.tgz","fileCount":141,"unpackedSize":685041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWM4/CRA9TVsSAnZWagAA8p4P/jjJuSZ0llZ/yCY+s4h6\nj40qBoeYUIIFKmQmalnETyCH2ay8TpV64bgDm094sMCAZWVOH/kxjuOoxSWK\nF9g4K9kvFMkmIeHKIJG2mYNn6I8xLG7i/x1d9OdShygmrYYOLBm2LWvnMe40\nqdY9kJ3JDYf2LpOrLX3CY7Gr8dWaeMPRS/fzqS7VWOihyr7xnMmQfneD+iI8\ngdbsBZ0dbVOBeuIc8iJEnc1AN82WSULBrgwcNN9aj8OtKFQKhpZRpq4kup2d\nwADW5EJpOLOT5S8JlReVKZtxwxCyucHOEWad9tp38H0ug5EclGNCVLbGtYkB\nmQYgJ16uyla5QQdIKpxTzHhB7ZiqidBU4lXglDEoUp9ZyfXW9dlxcBpkSJCv\nH8HpfKMI8+qM10lL+/b5zs1RSXBz5HjJ8PmRwO49ZhNyHbUm+A58zsfyDxKE\napW37w9xbwYeyOB3Lu+f72fEXl70wSN08NPO6Ky7IKOTzVl9tk564a+d6/CJ\nLwPHzyUXmS/WWo9HaB+z9SiBGbvbFAYnSabwRNJzqRGIBuajlkcqrk1d6WKq\noaX3162wmkSaHGITJU8uWIlOqqbDXZ3lIkyC8OajeaKJMp35im2+q+WJpYpS\nNxLzIcPAnELzck6KGOYsS62iMgs7Iqb23/O0UNQQCrMTeH53iCuVi5SftoaM\nEtd8\r\n=2XkJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwohrueg0j1dyKpOMMzHhuTWOHRaOgXkmm2f2oVkszsQIgLK4BEz90gQqCs2w72Xczkn1LxIZvuumsEmA9mLWm0iY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.0_1599655486942_0.8296044582870779"},"_hasShrinkwrap":false},"2.9.1-next-1599655436-11d4ee6a.0":{"name":"@xdn/core","version":"2.9.1-next-1599655436-11d4ee6a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599655436-11d4ee6a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Mvt6L9AmAilivHwxGxSJSuJJl8V/KGm6PCkb7Z351FKtBCvW0FXIaabG60MTNFpeoxPpngMTnINZUiA+m0bCRg==","shasum":"0f8f014920c71488edfdce854cffaff3f18697d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599655436-11d4ee6a.0.tgz","fileCount":143,"unpackedSize":694290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWM5oCRA9TVsSAnZWagAAKBMP/3qWNmsAl27VlnUftkKJ\nwf2K9KstmBVahTvx3Gob/olvrG4l/bnXWWLI6llA6Hx5zcqjEB64EdV7oPrU\n9AjJ60/pVAH2rKqgKZ91oehtsZMVxbYtUKZ2UyBgBjWT8IzPqI9YHXENm2pg\n+TAR9L5bWMM2ImEHWzlCpmcL356k/VmSbFZHLYDzai0oBU6Qd2HeF1jTbquZ\nTLvthPNC00Cnpr5oIjS59buMTAypyq9hJv87evqCpJG93qLdCnNirK8bVVdd\nAsEGkGdnBYSHxBTKtrMDDa0Y1HVEKp3goDB8h8W0u9gLat+DZWJRvKTX9AZS\ngwce9Q3gkRxMfRX4QXPyREyJp0W9iDtqtFUAH9ZWNVidXy0f1R0DuxMR+Zhi\nWTVlGXMCrNjpxmIYRgtacxToXNca1b4gJ3xLyNy8TmsE11ZK1/4hv44kcr0H\n35VAH6oZzOvIvdNpJVB58RAxZwtr/E9tcx/P48snK5r/QCHqgc1tgGaU1l3a\n1dXeOl+0fLSxuLmeAKHeJ/fU3nmwbLxXNLIXrU6ls+/nOiWq+d6aqyzGb1ME\nyKy5jk2WiIO1HQ8BEoI1GWML/VsEYCB20qHh2znfXGh1wbIoTuJ8WD7irxxO\n9lGzKRwNzCCQwPpx9XZCVO6W61o0lcVUxwLjvK/ed+0cCzDLcsJm2mWiHXpR\n6OKl\r\n=zyZT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEmybnmBDW/WdoTwwVCBrtfu8wRmGYzvJ6dkmD0Se0m4AiBOLSA4HFm04E2u2wsy2gBJB4bEdIew7piaZbSmaI1cEQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599655436-11d4ee6a.0_1599655528196_0.06638795974820133"},"_hasShrinkwrap":false},"2.9.1-next-1599656513-4a7dacca.0":{"name":"@xdn/core","version":"2.9.1-next-1599656513-4a7dacca.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599656513-4a7dacca.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-LsJKxKRd+q0sDqSYRMPY0RiPrIPXc4kJEg63OvNPR3ex59Kwm1QulIjxpxSTP+haf6zsI/TQXn/AvoPWGgyycA==","shasum":"0a9dbbde12088f98b772d5db4d7e72fd41da9e26","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599656513-4a7dacca.0.tgz","fileCount":143,"unpackedSize":694290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWNKZCRA9TVsSAnZWagAATLUP/2/6AEj0I4Gw6oghwilN\n2VqTrk3/GKoxPAaove7SBo/Cb4vSbYViF/rrnlLOZVKndNIFAY3XKNrKFlWW\nXRDLHq7535uiX0h4uBQ2faOnvOOLOfYaTYq/1FNbjjgA95mbxj44p/jI/7vE\nFjFO7fva26mO9ievEizQB5m+WH5ENvgZL3k1vPYH4X9J5DVACRHF3yZb7idh\n8DMCvgn5wsBPGTWdpMhqPZLodvwZqA/9JNmtUFAN2gvJdpYSJTMIF3LJbrYV\nj69rIpj+DvPNKGAGz9YMmao9b6u3ujaHJaf7j4w3sXluuMJ6yy3XRRR6tUnt\n+n0OiqsOGfrUYBm67W9UhXpLhJ1sgEt2ePRtk3BuRcshAfgimlrq9YekXymf\n6ev7pnMP/jMX39IVMbMY19qbOheZf8sKXw4Cvf6AAdrwZv9lIIa9D0UM1GxV\nomqEubXv7nrIP7aTvOIsZJ90LxbA3PLD4ZSNpWxdGU4rli4tZsmuNATLkJqc\n6jNkDLKF1GqVBL4wZT7CCObSvdZw4tRb+V1ejdN2fCsoLNB7FvRYqMVcvQiV\nwY5Sd9lTNCHM7K7T13LU6H2Aqf4YB+/bsca/saqAvbTVXXVuBO/YeY0/h6X3\nl2HjwHYQf9VLthyqM6Z0JjtRqToe9DaV1tDbXgdVvzzZXq/MMujo88AG+biJ\nHXgH\r\n=q4Ap\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFaKY6BsbEmdYDX1vi/f2W5xnuqpFjR7s+yAbiJxnFbqAiEAgt5hNCdCEZkBXeoNC46kd3J2Hr1/4rm++WuRO8k/Zvc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599656513-4a7dacca.0_1599656601349_0.8378291708095558"},"_hasShrinkwrap":false},"2.9.1-next-1599658987-9a38884f.0":{"name":"@xdn/core","version":"2.9.1-next-1599658987-9a38884f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599658987-9a38884f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-annuYc/y6mNWcj29swL+b8ax2xNRzmjgMH08jqs0z+bwLpVmacTQtJaTvkq+n3O7G9KhPWu0P1WfpWXO6ULOVg==","shasum":"bdc68d6910135ca322c61e60476d8629af3b7fc9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599658987-9a38884f.0.tgz","fileCount":141,"unpackedSize":692241,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWNxaCRA9TVsSAnZWagAAJ38P/i1aTsIOzxeZJmKWD8FM\nB2COwyT9aSn7L54hJU7V0/0aPOMwxDO+hL0TlTnSlElTDpSmgtzJM4IeekcH\nBkRY9geG3FbgUytqGC+A1bii3SHO8EqN7LTzz8qmXy6G51GVpQ2sl6W+5Dk9\n5sPHqBvrlFeL9iypCPJs2MO5mJEp5WMQjdUxIHfopD1mvDIQoiHQzdeqV08F\noYpDsozdFIi7z3BgZEwhvxATFyjsuFiisrSkO88hzEHMzibNcSv36pdBfTyY\nYmsO0ucwFajvsfWv6rE8I7cWbZ/DNd0jevYWyMDi05f+Hezyx+adz6s3Ezjz\nlUHEdDInTPXnkzc4g/OqCTAFTaE05KIYt0RDk+FWiS2NPiX2eCNjbCSil/4P\nMOn4EoGDoi3fdibrI8jj8nn/mbZc/LmFS1P+Vt5r+/Nk52ZU/JbQJD+Q5xa9\nvAvJE156qUMrjwiY/98esfKabLtB1i/96ecLaS4pH3hHT1BN2K3zrczHpXeV\n9U2i7vrcNBZ7PEmgRK7/fxneAbo1tGiFkZCyzMfl7Hw1FaiYFUpUzXqvEiIC\ny118iE2Om2/PF7sXYuxIAqOrFmTXjhtP1FSC2Z+HdQaRGinMMYadnTJcYnG5\n2mcM4EZe9u4V2GCsto2XPWQDV/zGzT+DCTW5LHIKaeu65ZDKMie1vLvF9q0v\no/zF\r\n=XghD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBm8GKMMjLJxQor54seFtDlpqgoEO9pflpZVghJlwK6AAiBGexhvJb9IYOQ57zuzQIlWssgZbBL8E/mJVb5SLE53jg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599658987-9a38884f.0_1599659098001_0.6287608915394056"},"_hasShrinkwrap":false},"2.9.1-next-1599662897-0a4fd79a.0":{"name":"@xdn/core","version":"2.9.1-next-1599662897-0a4fd79a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599662897-0a4fd79a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MHZ8XMPbACBA5LX8IxoKU9aFQGG018OvfiPSL5QpWO2ywBPXzrh6pAttNvJOAIUARoJGDNA7apBVKaAqbqW3/Q==","shasum":"05e015daf2b798df58c3d842e02cd4c27a48953b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599662897-0a4fd79a.0.tgz","fileCount":141,"unpackedSize":685714,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWOuaCRA9TVsSAnZWagAAFMgP/RyKd6b6PXSCJ1RhLDmQ\nntjWG0e/RiqQVIyWdrbQOiOdgWXqj7S26t39p0aBwxpSL5TxLvNM6+Xk7/dn\nWpk0esfGUF2dUTn6aeW5J0fKBEqoj/7SJxEdA200j/yCL0dvPNyAwcjN1cQF\nCB/2eP8pOkMSW0VZBvogAiVtnPDgLRr+4ZREvCN/CEEiXJDDsLt9DeQKB9N5\nLF3rq09mYOsqW5wANwhACi36WLXxojb0XE+/e4H5saotZkWfxHhSC2D9w/kp\n/p17cGQ/qsYm6WCKRdq2RNWPPZ6Gw950bb2XUzZsRkBumCRrQPcVG/iJ7ulc\nva/Y8DAqxvkeGrpcBM6GlMAGGN3+hWpx3FHkZbyN77VX1RvmSnqf76gbSILm\nXeJv6E3wH1GJo/zekkSHyrwTk0B/uY4FG8rojmNwh2YxGpSO7yU8JZdqMgxy\nRUaEkNiCQwZ4mEEODYGnxik9qfsa58Eg8va6mSUPLlh4pjDRIjemeT4WurP+\nTPmXr96Gld6N05obDfLW+cXK7Uh0BEUnWUSobMNDsMiH7qVFSofcS12xv38l\nWk00RjC2YtFbyt1gqN7s6Y6l44puW79dM9z0nIQXgkktllycLTLSWikA5ipC\nxOrgBZSbZgPcHL4hV4eDSZJBkPetvO2Kz3+4Uzb7pO7wjdUfNvqAy6Nf9pnb\nnB/h\r\n=bEyE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvYrxATZqKNj93gOD1muNpDnb7AKFuV4uoRY53bBZZDAIhAKp3JfDgdaoumRCz7YLkKpGY6yY4g24G/dDcPAsLt35m"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599662897-0a4fd79a.0_1599663001580_0.23877603085909205"},"_hasShrinkwrap":false},"2.9.1-next-1599664957-33cc07c0.0":{"name":"@xdn/core","version":"2.9.1-next-1599664957-33cc07c0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599664957-33cc07c0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-skk0z9mok7fA5M5YXIOmhReoRPzWjKoqjc8g3oVian9qi4iGYstf25RsToG8Y8CI5e1iFAipUBz4ApdHtRvr8Q==","shasum":"e961d625b62d071a6159688a4c10a68f81401e27","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599664957-33cc07c0.0.tgz","fileCount":141,"unpackedSize":692734,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWPOsCRA9TVsSAnZWagAAhEUP+QDNK7TLghBLyoewqygg\nj8Bof/j9rz0jbyzd0X2WPSfe5dfIOJ/Cqxbo99a1O++duYy53fg3iEXmY9MA\nn0ECaX9d6UDOt2D5nAzjzabVQSnJ4UB43Ee/xsMWtxP4VuxBeqr3KMhR+2o4\nKBHlEAS2m1pojCUdf+aD6GD7oI8nSV3zxT8hp6VsByCTNHMbrMPG3rYYwrVY\nSqHpXyUtBtgUUMR4JDB6n3wl0/3+KVyplHwQTScQJBkpji2D25W1GV/JguDt\n/FPJLymfAIz0cXures5a3/kH6Gp/pkGos8527/VT0egBYx166TjWXsOQmqxo\nuimyUVwdWkQ4auHnn3BP+G/pr+QBm2L+w/8M0pv1bDN54KU8IsQZZuKqPQH1\n6LNSgAno8fMDhCqnxhyoZ8CB5VWJ1e+SwcYQkLjI6w0EiMCWskATYGlqskeV\nps8pHEUp0HKIbmbFciAjYm2ZOZaV1gV/rg7XgeXXIyglhZJuRzmsv58aapLw\nINAlRVRpRB9PLPnC3qPL/SW5Z8C4X4J3ilLrk+2dlHx+gU0PEd6Vufdk2mxB\nv4uhtyhgplzGYCZdh1vw39ycTcZhcMAeeLfwXXD4THyLcW13tuE5waFF1tGL\nzzCRaXr2WosnkAWMXFs2LBy0ed8yes88WBdWd5Kt1zENJrHoJfKsJ8auqJ7b\nBzZx\r\n=WNzQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG4CnWwkHpoCnEAYnXiAi7Acco5lQ3bNoj8T5QbrF2tmAiBYXRjRJa7EwYBGf2DUg4iwwvWf6XMoeq2BxHD0UlDE+g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599664957-33cc07c0.0_1599665068029_0.6361296277809152"},"_hasShrinkwrap":false},"2.9.1-next-1599668222-3cddf85e.0":{"name":"@xdn/core","version":"2.9.1-next-1599668222-3cddf85e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599668222-3cddf85e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1Qc+Mq9I9AXdJLH+S/UymG7HbwTnsmE/+azxWw+f5aLf/dKONH3EvTYQYWngaWMgLZ3Mi1IbeMgTJuUopq8FMw==","shasum":"ac45048b08429d9b0eb5f7cdedc14f05fd80c8de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599668222-3cddf85e.0.tgz","fileCount":141,"unpackedSize":692734,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWQBWCRA9TVsSAnZWagAA/y8P/jY3zRAkoGAYPxosmMI+\nH8K5m2ixnwTgb4m7nMbE/UC6zv8J5oLEFtzRYAuIy9hShYN4xqYxSu0BPxXC\nxY6cujJYQ3/8EWz/anxHFZHjU0nZZbU9MfXux81vphpnfHflIS/gwU5fP58Z\nvD3TbTLaUfHVTHqPBbOLVMNNIwb6LTMwIw78R5KPfMymdzH2LbCLKxr5vDYY\nzCnlnBlYQit/IdbPBTOFkat9EnI/9QscCXQM4CH+G4FgMjL1QIBDeW1em9sn\nX969S4mqt4992QXPzokE8hywN3HA7418qJ5NsYfajU0zl/EBQuAkTNhXMaMt\nHgcCHvBPnyl+OeqQPTKZm1JfvMF6h1F2HVIb4WOLigVh7CXW7FrJInVYyQwm\nxnJixA9gkFkZmidGcCHfiG+wA4Su2QLQPPfLXxkNDT80LmvnlOUG3kxOsmY2\nXBpoo81wvqYi+GJyvQjBkk2hyoK0CDa3h+D9uF+a8IV9B/F/l5boeIQCkfaV\npiy2ysNFld5ttRKipSW6/WVMLODKgOAWUE55vrL6qg4Q1aoPXyI+KvnMJymd\naX4EPAyY7LMKECjZkE1ILBCBhrhgMjO/m6SqDs3L2Skt3nw6gzQy+tpa/7cr\nLwPQKj7+RXGcnijOtj3jdgQazorYROrmn7QChzavIh+91PMsnH99lX4pzfGq\nwXnF\r\n=/LGT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzeEp3L5tnJDzBMHuKVhC44+iLkLgKTi1G0KPPlPaPCgIhAKiJzepBZT14cRPv6xLyeagMMhJ58p+hChH/2H58hDYo"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599668222-3cddf85e.0_1599668310012_0.5734708742594519"},"_hasShrinkwrap":false},"2.9.1-next-1599669161-30af407a.0":{"name":"@xdn/core","version":"2.9.1-next-1599669161-30af407a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599669161-30af407a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-BR/KW654e+OeBRoqDjNJI5B6ZZfQINr409tUUadQZR9URJ23jzJFnjVq/Wzh7AZ+BEK1lxVzmw96lbuDGyE84g==","shasum":"793c5dae5bb1d3a99b36a133f86c5d23cd989f03","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599669161-30af407a.0.tgz","fileCount":141,"unpackedSize":693024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWQQXCRA9TVsSAnZWagAARg8P/jyXRituPpdfE9rWrEbX\n0QoDxFHq+p1/v67irntRlJ8WwoQNJofCCz/bnz/xI7KqFI6yI8utqET3GMlm\nKcu9fnH0RbwafCoqUPeBlVTRn1wOwbPtYPtmf7yE11rkNi77GShD06u/T+Zy\n8O13VcdwrH6Ey0eOJG8WWrKmhSX85tvTo6B0ossd7NJOp1ie3mnXGvFpYpSr\nNyrOcp6HGhsKhELmpkuQBPXtFuax2kPbMGQZkb8vvco2xxT2ztsZQjHCiqU9\nW/vLCVG0HeRijgTWHkWMfpXcb030jdGhjgrETuYkhCv9OR3MDfE8iBeWQTJX\nWyqAsPacBhvwjX2NLXxT29ISYn84Xu3gp5Q5MMcGdbAkdvhvBtzwErueMTc9\nh8/wfdKfk3F9WXCQC3OgT0OrtdK6g+jTtXYJRJ43XBNM9b+GZOxfIptTzqnn\n0uBjxAMYOGVCZza4xsS2dPWF3/+KXAclEi6LxvvnDex3grMC1fd8dE1g1EpQ\nyFpL9jW6kRGFdD99L7rIcHKWZuyPxsoh+dcnAqeXd6klxBTRGGVxqhAi1xEi\nwJ9KXFEbvufo7ZQFcRrGb1NNPWfl4qPq7d3enAUJZseFC6DTMk1oIKg+zJKe\n6uaPpgjAhMaJfOXwQ6fnFlPP9XPyPyNZU1QP+zBgFee4z310BY1y7J9o5fQg\nvq+K\r\n=moGb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICpRQPlQTEv/ye4s1zhOyUzYjyoqKMCOdiUo+kYRVZGrAiArGcCrlGz7btK8Z/sw2wk2VhVAgXVZlj+5Cj92xyp/NQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599669161-30af407a.0_1599669271098_0.17686180131359897"},"_hasShrinkwrap":false},"2.9.1-next-1599669599-6ebda3ab.0":{"name":"@xdn/core","version":"2.9.1-next-1599669599-6ebda3ab.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599669599-6ebda3ab.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8+k4AA6L9oixZW757f8nu140T6GkDfb/rGEKbC5G+VrxrwJu6Rz6mQSgDXP34RTjPHUprTmen/UpSZ5CHebYUA==","shasum":"01416b6d67a1fe631d93c4e0235b7755ec35508a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599669599-6ebda3ab.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWQW8CRA9TVsSAnZWagAAU1wP/irbolDwwP0LDoY/2Dof\niPgovdKCAykZf0LRTRkE/oNrRenJ+mAZzLTJkwVt8Bw3ncEzN+KW09ypfoZV\n8sRSuHclA/+HHsrMHZM+Lj4hL0JDJQ6zL76gWD1kzU+0X0BeRfN3/gjMAjJR\nt81MFzWFBYgNwUEISZi9FASFLVrKAnHYdmKCVJQ3z09fpC1O+glJ2oT2nLIk\nXvRjmjFO6XMGKQhHRuGXl6BhbRadkrVlCu9LH0aCowOsNBl+vngj5vIb86qv\nPbU8f+4A8nOygC7G+2JpVDgrZKAJgqBtwsKjG2p/l8HZp8U246z3gr9QzYb4\nT0DOuICjBkRwpDYXnxA0SPSqoZTK2MgCM1cnm0AInfNg/aoOq4z0UhWvI08i\nx1RmEyBOSIRg4qH17i4E+JGu0FywlKduZAWf8fnww6RV35LBCM4KsBCI0iPO\nllc0xWd4H3QsDiLdcvzsoYo3V31qOB4A00P4E7rwTTyH8WUkrUJ24/A1muwQ\nHVkWCICyfUERKunAcK8xdXrRFXiUoIVUKVZb4MjFNc2DgAqEPVmN2yqUVgni\nKm867LA8hIjPEzAK7aae0JthLDlYVvQRng84J3/AjETa3UEi3QHNcZL760X3\nqs3wAgkkMDEYUSGPT2LLLy5mQ0XP5R6HjVAlub6igSBFvWHD+EC9sj6mjK9Q\n5vdq\r\n=iqMp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCg0r+cOcogAsqkbSZI3iX90dPe1dNuQtAeAv4KSN+tAIgfys+G6hEmr4NBl9BO1Bo3i9phVbtAd3aIuxjqCYUuKM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599669599-6ebda3ab.0_1599669692409_0.7823867698309532"},"_hasShrinkwrap":false},"2.9.1-next-1599669727-df087a7f.0":{"name":"@xdn/core","version":"2.9.1-next-1599669727-df087a7f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599669727-df087a7f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-sw0I7TMCJpEB8hA4bcGv8NZ8/3hdiBpW8WdP55hFAIKVWxuSGu+tXLIYIqih5ZdsnYrbUYNST+Pv+mn/Z2Prkw==","shasum":"42d4c5fd64fcd4fbe0eeeb0ca1816dc8eadfba5d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599669727-df087a7f.0.tgz","fileCount":141,"unpackedSize":693024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWQZBCRA9TVsSAnZWagAAra0P/iUFI4oYvSL7v4pGlRvJ\nWAAZAXuD/uEv7Ss87IYWRUDTdxlCx2iCTQm/U3R2A9Ud3UogAqdJdFlUNXp3\nrqej+xUvampUs2Poixe3qndEqKKT3MpvzwXOWfU09WKzcbAg/BJ4xTfs8SMW\nHClJdRVkW2P9AhgnkYhapAZQulhKLnPf/DK+hI3geFeipAHjHgCtSnxKDF/N\nttAHRPjiSxXjCdh/wU7O3I0SfafYS9MJrc3+TLsBCjVgVshvsMXD+0IjSt3g\nSqKwObotQaTRFDTdwkIXsCv0zh5+kNhhVrO95a5ntlq8KczR9LpCl0g93fPi\ntqz8aCS6B+RJP6nId/5Ioj7al6feNM0I5miIbkz+nZVdkVLkJsPiS6pbZsb5\nokzod/EsYHMGzcscsdoJJDEsjDXywcygKfAeR9TwV9jQ3tEQBhdDfmoSsMp9\nEy9QERyX4uUVeSBTPrH24SZeggqJIHEIMWDF/OLFzSjyv5t2G2ZDNSqHQUCj\nOwy6A84L5SiyBFcze9+MHo8s+5PNatg/WyOH32OweHpJcjUwlDq5NaDYdnOJ\n77pJRXl7k13V+u2V83kIFJn3WY3U+xEU4dQmUINRsFHELk1tmgvfxUHvxmho\ndsZLHRJjaRCphhdoF1N5gVzakM8CzY4PScb4GP3Pmu280kupXBIpVvPDUEWx\n/sf1\r\n=EwBA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBWKG6FBabi+pBF+bK9M0+WX1OahmKUKobdeZ0A13lhlAiAIr10/mN8f1w0BTqwcIBNndt0WPu4UH50L/78ePiGe+w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599669727-df087a7f.0_1599669824464_0.24639000744668538"},"_hasShrinkwrap":false},"2.9.1-next-1599674592-c5a3870c.0":{"name":"@xdn/core","version":"2.9.1-next-1599674592-c5a3870c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599674592-c5a3870c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-O/i5dNinUGv2Vi7rJDZTZQKJvkIhG1dn9ymOA6xZYY3d5y9SNQCFajOWECDrVjl1aFQPx0NzmsyXqQFIGhpmXw==","shasum":"abbe70e5515e800583b2f9b59a9a072a436302fe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599674592-c5a3870c.0.tgz","fileCount":145,"unpackedSize":692808,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWRlFCRA9TVsSAnZWagAAwa4P+wUFlh29lyo+sANaQA5w\nuUCwYrvSZoSjd9AfFiLcrhwiyhQUKWcHaL9aD3AHzcB4SJ0PwoIl3LaTXdBV\n3PEEOLa0AbmkL0AeYLiaInjyH2xo5H57Dc5uQqzJd7tL9t1tGvMX5g7mFvLp\nolpiAS1TaPQISnZ9GRVQ4SxogQMj5zeztH2SM5Bjy+c4yBteBqnQTN3PxWcd\n1wQ/3AmbsSPDqDqt4ghw5FZ7MyTlS78uf6sWMUTsdZSqDLLcsfaZ6CUdzR3a\nQNiGq0iiTVC6FUpxwQjLGrJT+QEjtp/Eh5GaRkr2RVp/gSM3aG2OoPH7dtGO\nN5XyCZkIRikCCiYLZ5iVwTccGk4pqslueFOhWKgwkoO35V2nov/wCuIO4+44\nyxxQ3iBxbQ5xxcKTR/TJoHcFm5PWihA2hiC26eSqMfCWjAHo4FbpI7+Yl8EV\npg4F7COY7xYukI+ppxlQTbFTkRNHKw3ezVAV/b5O09Tc/2JT0V6KxLYR8PJL\nTdxJ+lQy26qivvl6NlZO6pBg6cBtEMxp+CGVMBU0pZAC+Ksld1YBQJfOKEp9\nG23WggOfSh6LJOEz/Wx1TMP1WPyNnQivbF2D6xuEgkYwkYg4c1dIVNXAavrS\n/Ng90oGg9vm0sgLN7GcYzS8spC+4e0IjXv1K4HvUyfGIRtHRBRbSuLMS35k8\ncDDi\r\n=AJC/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQidjb3F5gKeeUsGqxbJwMU+R3q47UlooFvEdo6GMsZgIgZhATwvgWzEmw0KJNerfAkeg6CDN3TPOhMSRygiDPUhk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599674592-c5a3870c.0_1599674692807_0.16975310775732"},"_hasShrinkwrap":false},"2.9.1-next-1599674981-f8546866.0":{"name":"@xdn/core","version":"2.9.1-next-1599674981-f8546866.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599674981-f8546866.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-17soKN6Y8rawloGiIjE7LUxvVy4mHY7SbPO+OzL9Xm/fueGjpKO60bDfVp+0hfSVQrgOoRta8Sjo6acYtOtfUA==","shasum":"0fc628a8cdc90c25f2c2bf86ccd4edc2aaac92ee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599674981-f8546866.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWRrMCRA9TVsSAnZWagAAvCsP/Ahc5TR9yQ8iez4x4j3b\nShI2xKeKF12zT3ezirDEz+4+LkkcdYR4MziUiTAvDdKKGq29PAGwLlaVBw5V\nSt/ui+FZXHZgKJsRE6lDsnXY1T2fOvQqE1IyNJDnjQrLVVvVykm+pp50fR3y\n99DUhKQQ0zBbzgpS36b61nZS0mArhbnAGL4htKmMJOwPvNqeeGc4Lw34aacp\nNYneDZCdshxGeyt5sfp6mQ+RqAbiFBZN3A7EpgE84GrfKWRV3s5kYmGV62L1\nVDfqBbm2RpXfvF1PPuC0frGPI5TtDTLk4YFf3UfPFHAeGsdIojjeTNDyl6Mv\n19ldIgcL6qLb5pcePHaLmRRJVdPSLjbB4toFWXocn9OZjrNcVOwrDAL0ynn+\nWPoFq7EXs9KiHQvgDM/a4csmV84HPNe4QqTCSqWVNRuoHeU53HbM98CQ3rdp\nkUOk1hPo9XDUIEnGTzu9LA4EQwJusD7g6jp2V2GVl+UhNu/Tmn148Y8JubZu\nqVgqE6w5er9wwu8C0YrqVP3CoI8tJPWVHz+MJ36dcxuEXfpKF+A5bA94XsyE\nX5kZOwv4awkK9inDlWqjCKOJFi0a3/yf5FfTOBMz6pE/c8kynhiCEHRuksM0\neSu6OqLHO9Tfz6NmeG4NCdH2XBeA+XRqjz0bFD9s+vFVNLvIytkwfUCnRNfX\n5MB7\r\n=bni6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/dlb0vJMI+tw35zfzEAtLLZ84hqQ2Y50McO1jyPay2gIgZakJGbq9y/DDZNl3+f1b6IRW5spn5j1r/dqnqzuTMT8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599674981-f8546866.0_1599675084471_0.3917745201989402"},"_hasShrinkwrap":false},"2.9.1-next-1599730094-e41c980c.0":{"name":"@xdn/core","version":"2.9.1-next-1599730094-e41c980c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599730094-e41c980c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mLBJfTjEf6qKI8Ao4OqL9KvHVEDfSPBNUcOTfb9a6veqkUOM4RmltjA1pI6km24h4AuHmAbpdqBnTscRRgzDXg==","shasum":"3ed81616b9985c1011a8eb3f720782cc306fdc4a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599730094-e41c980c.0.tgz","fileCount":141,"unpackedSize":693025,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWfIUCRA9TVsSAnZWagAA0zAP/RoYWRcmct2vKVunkUPR\nAeYrkRr3ZxP1fdXengzM2yPQh824qBygj1zyhXbFZrYu0z7ewk8CPzBuveMv\nFhSWl0EJTkcLLLn9L9LHD82ujTl2KvhJKiesV7eoRWlbdmHCa7ZKuPVX5eXa\nTs3N4qNEYfE37BTFQdBX+nMPdTW4C3Ifbb/zx/d+F3afHZge+AOA+ixdDgcK\nUx3ay5ggIB4Oe/Y4D9uupDRv5saTyzCaHOqu3HpNCJpS6s4IarlaNUcEDZvv\nPofjYE7obfHyD1d630H6xrHYpSwv1kY2T6RuZsxRe/uiNCUB6BtYfO8n42iB\nQy1i/WPT2w2qKi7BTeO8LAtbiX+7n4ulJtdEmuWH2Fv4ZE36WgmwcdNkM7P4\n41ZopWgK9LYrSHegrzKs36QrKfoL+7MhCRUvdcDCKJh7GAJ/IRG0tpoT9XcT\nXgziNHEXasy7w1hv/fjnqKfwCK6V0kIqEWMpzXZ6AQ7yFkLPaR8M53xCd4V/\ngr+vOcN3q2k81TBPDD/2v0clc6ib8CaA6L/d7pYXXe5BZl72nGYi9vKELDdc\n/djv0t7g8LBgDJtF4PURC7Evi0GiFags97MLLuZbjm2nC3iPomQkJifXiPxb\nq91/g7/rXr2GeIeX/fww0RXvnh4Y5DrbHioAVBJty1IhroVZdRiB+m5Tde84\n3Mhh\r\n=vIvJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCW1wzmVvYnfhnfd+/gGHey5SUAWBvhQO8+jeKDEa+z2QIhAKkxpJgu9uvEeigALAC/olTeg2LaxgRJfQzm0i5MtZyz"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599730094-e41c980c.0_1599730195908_0.3220517387934907"},"_hasShrinkwrap":false},"2.9.1-next-1599741182-4ed8514c.0":{"name":"@xdn/core","version":"2.9.1-next-1599741182-4ed8514c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599741182-4ed8514c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-woRLmOgtqcYh59Ehc5NVP9Z5skpEvriT4OGZRzhBvuG4ngs8TB2NCFAVP6nKVYqf2jr8LtM/gn4cd7Y/pTkjAw==","shasum":"96a8abe09d20306d3d61ec40877e84f77379c59b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599741182-4ed8514c.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWh1YCRA9TVsSAnZWagAAPf0P/3DnlxPx+c/JBqjij7w1\ntUGnS/DD9HpSABP0RivE2ZbTAwHzVPoo+DrxszoVVsJfYiJ/I5jp/YaAwbGO\n9isJyV1Bbxrk6pEEYEB9qBXTRwYeE4EvC6QgP1VNZnx+RFIgL7YQ0KvsptX2\nHmpXYkxscvQIZeyQFabljcf6DfkJCSly5lYnRJ4K7aaddWOMCOi7sOfVHbiq\n2QnnRhiPHJYaH84VRCfEreXPFKP+P6objImHBx0beHfzuJ5uP8Stdmum/ndg\nBni1r6gXqq3xijN8jqyQOcKlWZyulq46LNTKnXgEt8QsNvlMNrJEF4bQJU+M\n97dLqdCT+CGlYGpEtf1r8+hibJS3O+rHujJfhwKxS6sS2/0bhYApYC+obWZ9\nW9eluUSU/1Ozr7m2s185wHBSQhCsVcIwHeUxcRkNcEFrXs4HyIcZ0xCpvPNt\nYbG7PjY6LnSHjQi+u7wgArnVdjJE5CcUxZlWXoIRRpvuwqPP8HGV0bqAa2uS\nyf9lQRPtF/wz9iCZnqLt21T9oyVQCjVCkteJKM0cB0Knmm+WeMBAgsdu8bHF\nzW23K0UQet39RHrleD6OW+PcHyDn1SDKhaVR9ywZJglVh4OMXQnmeoe2Jtbb\n3GfvzbdxdP36Qai614r6n4E9N9M8F64Ctj5/usRKvNG/RHUhV+deaRN0SdNx\nQOcJ\r\n=hCu/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB9OTTiE0eOcKO1LnDTW6RsWHJ3hTRbzpXLLDmWzNCesAiBQujhhdKR7hfakpW9avNGBJpO99GyJl9HR5BPt75Cr2Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599741182-4ed8514c.0_1599741272084_0.04484025548932258"},"_hasShrinkwrap":false},"2.9.1-next-1599741852-3675eeeb.0":{"name":"@xdn/core","version":"2.9.1-next-1599741852-3675eeeb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599741852-3675eeeb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-6JHJP+W4UzWUjOJ9ZAgWlfhOQ7HehO+41jydavMDbDTay8wwFkNCDdtuWkYVsE2TiKSRzp/+QmCaYDyZEtCStQ==","shasum":"87497db9a3c2ced8c135ca89c2a13538f4a6069c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599741852-3675eeeb.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWh/2CRA9TVsSAnZWagAAgEUP/AznuCjot//yLDcG639h\n5xFgE0vexlEMXYbD9xwFGOqftWJ1TIcD+VrPVBCnMK8Scu/SaojFdu0gWipf\nuSmkVvnY4XnrUDQ/y8qPfcmsm8RjcMTcaWJ3dVmE62qjxkdbeq3WLq+NpcFV\nyYEbnXHEQPalqaJlW2Yp0pUJoLpczXS65EaNvZElQO6WyjSt6uwht39zHR2v\n1wnRV3raOPIgu0l1nEEUgX+3YxYRk4vRdUzKG3HkrM/1GIwZDVcqNbt8ldLV\nm0ada1/HMcUCQ9mAywzNJCTm865nHV3GbgCcdEbQCU3L1HmT1rrEIPIC59N5\nkAU7ip4/oh4jYC0F2tVF+G79clxZWcZ05WBq6EJRxbkaPxcosehdHgVQzSei\n3m8Y8if/aQC6MbhAoVyaZ8EKE3WIn5UNSTRgpeFhnKI2bOkTdOs8X5G8chPJ\ny5Nd1L/8/gtuGi4a4Tr6dgFBu8XX7fN/xW8Jqrxv/WR6NuuGOXqSiy6mYX21\ng9NHKNyyxzu79TG04ZFpPtlQhh+uoiYpK87KvBrjumlgJKHSx49O/sv6+img\ngA2juVCLTN/9lUaJguK5WV5FBRY5mTbhgEMseMjsrpvbeEydr513yUKDQ+Wj\nvEaVhyy9xJijg1gEotqM5VYWZsR/olQJLsNiUsTSd6lF5qnruJYLa3ShBKVD\nse3g\r\n=jENb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEJNHFXyr+dHu4Lu9OeghdtqN2uiwWRz3lgrZNcFzbt9AiEAy8VN/qEzBO7HD6fK4NXR/s9umk5l602Xqzq4b5GPJ4Y="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599741852-3675eeeb.0_1599741941597_0.0360522976929023"},"_hasShrinkwrap":false},"2.9.1-next-1599741887-6d1e4700.0":{"name":"@xdn/core","version":"2.9.1-next-1599741887-6d1e4700.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599741887-6d1e4700.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HMeSYMKAPgphflHS4n0gGawDp3UYeLwsFB7/iioP9k6DfXRkUGzFBNbt3RlGg7QAZz07jr4JV24tfaUnRBESpw==","shasum":"a7092d26bd84d53668289296de1811e46d72aa9b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599741887-6d1e4700.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWiAlCRA9TVsSAnZWagAAob4P/3X6S3FrW82bWlnsBJKW\n3Qc28Ccdu9CoySfd/YEofxbxKs3eZc5lIQTTzG2Fyi8AxEkaXO4pHSNeJwgX\nDNrsh2sUxadGtGfs1RlWOu2IJxrm2Xo9tqfs/0uDjAhQUloLStCj157NlGB0\n9v4YFtY2qjchZPt6kBy09uBKsfZxq5Y9PCij0vSesusJSPzsukpy7wwDUUZy\npRL1xGOqhId4ykeOuT1uHJP9/Au5iD1/0xGRmsxwSLLGux3CY4tIy0eeFF+7\nRu4Iw/fH+N0ZaIpxqoTj3RwCXtmkpfuObaTb/rzcrVDyWOXcu4PaNXUsa221\nS4MZe/OdWxiXNFVmuXrsaaMDJllWa2YufgvFqhjaFV+xzgbbfvUe+bHbgujd\nJILYsf7t8FaHg0BUJgrFZBqC+H8/rIJgUJiTXPLO6aQLvGa4JGvtN8LDbovT\nf9ewJZB4bjz2i7xNxxN0VavJQS6JqNJ9OynfBfrThUBF025U4AHZajyqMXAd\n4SiFeHmCR9eHakWlKIchHukA8ZhKwqzfttkjGAfUvA70KudCuXaV+CUp0ycF\nHBWWSy1IOz/FfV/kKav/JegqLUwRg7PFMwRVj6S1UlU6Rkzrf5JwixJBy0+b\nhysxA86D4YmtDqpdiUDK1WgN/TSGkX7SPL3NZUwwMoigzd178ZfLEvV2wBfk\ny0NF\r\n=pWZh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHnH1mxGIG/p3R+7zYTMgx1AwBK4TecjCF+bdu6GmnkRAiA4GtO9pYehpMzX9R47wkuB6J7UR4Jnp9Hk1SmGuNs15Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599741887-6d1e4700.0_1599741989315_0.9949133741775813"},"_hasShrinkwrap":false},"2.9.1-next-1599743914-66698bd0.0":{"name":"@xdn/core","version":"2.9.1-next-1599743914-66698bd0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599743914-66698bd0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aXA5fX9DD4kyS4W6brDllpfqSXtrXzca8hRrJ5TfOAlshe17E11iI3YXWYWQDa4pRERKzSnQ3NBuzxz/bElwDw==","shasum":"8e38a18b6938c65b26099469e24d5e1df4710ffc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599743914-66698bd0.0.tgz","fileCount":141,"unpackedSize":685424,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWigOCRA9TVsSAnZWagAATlcP/RD9ozF10MYGyH50QjTF\nwmTIhYi+Bhtv/JIQUBe2qJKE03ueJ5pCTHGYVU/npzXZn81syDpf9esTKBEx\nHUw7L2FUbLprouDDTTbGEYpXX43FVGJ2wDnSElvUL3ceu/j2nlIhtzbQhbcy\nQPNIy9p3ERAQv4XeWj4URHxNBaT+H/fGJTMh2a7DHf9vPJiBUQ8UGO5JnwzG\n9fb6fmunYsjkDbQohA0qeLGmLngj0cAaF46zy//rnm6TuSivvGFFZu6qi1lE\n6VIy3tiF6gIeG4NtwtULZ1CRPCbtfOv80KAktJkq71dzkWYew+sgFYNpUzcZ\n3AXEoGzgWGmANihLLopMYnJmT+9vRtiogro8uX8n+0w8jwT0hwgjyVUCe1Qa\nxUOyteU9lrnSlgNTOEreFLDXc/YZLdr+RNr6BTUYwC75LwxxDHMZCMmndX4b\nF+Yu1FcAdscGe3aeOJevUf+ztFxIMt+jJP/B4G6EVWEwgwxc+K4mfUlNjhJu\nEmG2OAb+wwKnht8zPkWkJd3gGYY/q5/mAijQhJlnQToI1UZ2biJGpb9uvMS8\nsL1FNhaQD6J4IzZ1AXltXCv/twLfdv3Gyke5N2t3uIWq+I4fGxuGkm++9z29\nk0F0u0WnwuQgc9nookkHKm05kK9PTSmuq04MZk0cz/57nd3yO0fgHDrioNrW\nxgkc\r\n=n5or\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBx5F0nFCDOA33aRUo9M0UyDS4TYZblAAOfoyWCDiKibAiEAvF9MQWHyyGb7wKvrhRsS9+tcWdX8X+mdgipm/PPbK/Y="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599743914-66698bd0.0_1599744014344_0.9583427102445978"},"_hasShrinkwrap":false},"2.9.1-next-1599744079-e5c57189.0":{"name":"@xdn/core","version":"2.9.1-next-1599744079-e5c57189.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599744079-e5c57189.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+RzXEpLb/saQjjJV2fEHLrVNewWAI7DyTLGe1+fio7qgL/lm3+akjHkgjBPhHnkxZrKvdGCZuH5AR2Snp3wZ5A==","shasum":"2bc856c7d4c054bc9a126e55a29bc14cf87c1cee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599744079-e5c57189.0.tgz","fileCount":141,"unpackedSize":685406,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWiirCRA9TVsSAnZWagAA8PoQAIdpPgAkiii+EJj7UUKh\n0go1l6sV0pjqUIbtutyS6xJfn9wNxUUpYzcvQYNoAdDD7XhTW242QSdu/3k5\nKLVEaO8hWrQ40bYhxadDdmCxut1sGLbH5pvNS9ehQ5zemu5dIEDhso2fuNjx\ncxCcS9hnAugFwgB5PaX5KWzLI3MG9tXtFICSZtydSPwPiNwTl8xI7+SHdAIk\n5wMZ4Lsf0wIuyy7jHQk9tUyZiA+RENZD1G/GM3OYnUWFrgxYwvk0U5M6Hl9s\npCBXaOkkM+hp3X8SX8AE0FHDPxoTEQMceYxc1yTBZPCkh3RRjrH6vISymD2J\nWo/YpomdMSvQILB0YF5b402s69PJfk4DtwDl5emc32tAy3WC1aii/VkE9SzG\nZ/jgElCyP+smU7MxSCZjgpgz7kxH0IXEDE3OUPxLVEaJqnEDCr4mTZR9x7/m\nvI5S4Z00QfnlOHUvHG0ypQEU0+p+3ZkMWcubOR/Ypslh/9ojAKO68T2PRGZH\nCwKTIAQPOAqlob2wA4nDfWdKm8FNAvzllBzXS+lVFz0n5XnlAvYOtl95HDeC\nN47xoYOWNoJS0gzPNMetsf19gl0flBP60Gd3wMUgSibuz1Dh9dGuDqX6JQaL\nQkUn22rcXjunrGyKgOEqLDDmutFhYtWdIjNJHO3rkpDHyX38El2qTR6WOw99\nSXWb\r\n=6MMV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGacI1Z8cKbOo2OgtX9aKEQUZQTjiD7vzDgAhChLvh/AIgLZ825QdDUm+SkX/Lj1m8bTHTFjkViHo9QBUWDLl56TY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599744079-e5c57189.0_1599744170606_0.08587012865554233"},"_hasShrinkwrap":false},"2.9.1-next-1599745763-ae769e0a.0":{"name":"@xdn/core","version":"2.9.1-next-1599745763-ae769e0a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599745763-ae769e0a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Yjzg1Aj67AdRyDpw/yICBrMJF7wjdb5RzYzftgzv2Aeh9kbFZT3bss2YtkBjii6Fig96ylDhSops9mVveCHpeA==","shasum":"46f1e5590441b177ee8c480084d2bd62344fd078","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599745763-ae769e0a.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWi86CRA9TVsSAnZWagAAaCMP/1Ngz+pEwJp2gyW48pgB\n4KnCUK8uwhvwKl6r+N1zVqcKbtY09ekG+4khlJ3uMA0V1N+b2XTcEcmMeh3p\nWiYSl2TY/egY/ExFGMh0bEC+EuiQbgyO/dtePsOKO57U2JrFDFZL2Gi4zxa6\nqZEHhYzt86+8EwZSUwPVo0g8s5/0FX1Ss7904M8tAW0o3em0JH8KJVpQAMoj\n+s9rgUW1ggMyfhCH64OGn/espjDHMyKgeM719XK6B9h3LI8iy6pBOzP6AsVk\n0DCabTJUIDckSguzFc7iwQt35hDPmWWUDpRyN+00Ht6rb0KnZknstPHpTYkJ\ng9nSygaU8NHTDZY+7609GNaDYtmU9uuj2Tc9gouOb6oc5iNujIQ9VexOW8Lk\nAU7c/LBMR6OU44KF98AEtCLdEmwbIKnhc8FLC3yhkKKs3gPBbcMSDbZIM8Hf\nwRmUBCnQqL+7CeL1xlrtAbcCtrWA49h8Mxvrk9zKFhEqKAm7c6olhhexNASU\nP0dKoO9zywo3sKYqXCI78nBlk14yG9Db0RFiWAq3SEwLH2CUJSoaWy2tWtEA\nE9RfbE5rGAEcTRzQiKm610SAKg7VDAwT0GEYOk9REZh+a8I05Ke0yop5ty5U\nczKv6F9UzqRZ8yCnHfxFRLfpcoFwltD2F3bhvzCeitsmdl/IuLgZNUQja7xl\nPIEI\r\n=zaED\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCX21hBJs71ug3+xRJZy4C3VG192W+pYH0kwmIAoiKHTgIgGVfSba+a/3mZBwuDuh8odXrywqdTofnlX2Fx6B2+n84="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599745763-ae769e0a.0_1599745850270_0.5184904784296982"},"_hasShrinkwrap":false},"2.9.1-next-1599748944-618d50b4.0":{"name":"@xdn/core","version":"2.9.1-next-1599748944-618d50b4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599748944-618d50b4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-91iU0gIn1jGM099BH8ky2JN4+xE8Y0ld6UKC0CIcHFlC8vUC8qH5KD7lXFn1rZkIJX1TNlFo8u/gnIFduyiplg==","shasum":"bb07c5cc9b22c523cf691c91d8cc6d686ce0c5ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599748944-618d50b4.0.tgz","fileCount":141,"unpackedSize":693612,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWjvGCRA9TVsSAnZWagAAAHkQAJRS0ROrFA4gWczawflJ\nTFtbWrqAcGHI2+Q+ie/kkguXFuUAfr+vIwPCOOklLxcIdL6b0lNrgjZCT1dH\nujmzezIH4tjJtq57j3aofuPml4f4JKmWuSeVmNVV5E4kp7xaG9X7uJ7y7qxQ\ndPB2+joHef35QXjxxC+4NL37I5ebZdSIdzu/mndJpBKKXGodQsNVbxb5dNSN\n6eMENNPEHXvxcs6BSrEJgsaKShkgvbfNzGTDPNUd+vu6jizR98WyqCb2vN0v\nRJtU51cZ3CflAJixQvywqVYOxJ8ViMzgNmE3hIbanhLs8rotaF8y4HfEZMsm\n5t7nvARPkcldH9ppgKb3Ns4+XRQZMYatZMdxehC6ns6dIGEseRwiAKwXa6lT\nDd7rKe95ihFE0j2Bs0j2cgZi+NwG62zWPOh3mF/XMjPVbSl0JS4R/GEWpYum\n98hDtfQuM/N60wsQ8dBNRzXhBk0T0P1ojVjoha3GNEPGBRZBLRlu4KfMxU0v\nm+3EGhtOb1icThaVEkep8bFVSFxBEKW78WLzB9NM6GpDGAtIHMvlOATufVH3\n9QOR0HqKlm+sVYLVMExRKqnJKt6POczTQjJ0Q1UBrb0chPguqRtgWR02njOq\neY8MOqzQF4VQIQ4WEvQUbdSFtQN2O6QhuFy11yW5L3qy6+TkjikooybpAJjO\nGrxZ\r\n=yoqR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGRbi3uW5of3Z0RyOtu7RCnHveGYtCvOuaQAVnZeqmiAAiEA5rBY9DkhlcUO3DG5WCm3Ge9gLYNag+Y+e9RjNarL3B8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599748944-618d50b4.0_1599749062368_0.7442641442122873"},"_hasShrinkwrap":false},"2.9.1-next-1599815550-52437bd9.0":{"name":"@xdn/core","version":"2.9.1-next-1599815550-52437bd9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599815550-52437bd9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FRkYf0irCNJxJtnkUsKMtVJEkZEwtATXpvdp7pn8FtoFuuf4V4si6vaIt73MneoLErdgJnSjrkYpmHwpwuGjCw==","shasum":"ca06e2bfa7af183ca3ddd01e3ab3bd6c9e316206","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599815550-52437bd9.0.tgz","fileCount":141,"unpackedSize":685452,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWz/WCRA9TVsSAnZWagAAQLgP/2iYHQeK9WRlNYoglNIl\n3M2FV3qT5fKvHyENLZufVKDdPPIC8pnAeomyy0rLFuNFEkXmrJ19WPWvrDOY\nYbcQaREGp4v3yVFuY6HqPW8d89YTjf1mBBqEie+iDHGKy+mqqaLHy7Ehvm70\n2evgMdFp+yUyq53Hk7G98jMh2YjE7YtYlJfo/vjygYQMCiN6J9sZpfa8kmp4\nYjoLxz4kbUzREY6NcENrK6qc1gqdPApwXg6VOGZL4S4JZ9lZkEEBmrA5cX7S\n4DVSNB+62w4dLFQ8IUwDYSQr9hsvEy3Npp/xpSjkNG4ZQbhrrwpJeG219YVF\n+G4QNwO9sNzcOmE/3LC0y4GNcDcXjRZCuCluiDICt7QN6aA8fdgWhiuyMsOf\nbSxXBn0VjFl4N57yNAuRsz6+6CSJszj5UMaifB2K/T4crFfacCxbHrxZjH0n\nYyA12IYO2tOdDWtiV7p25aahcg+pgbyzjprJM5N06X0XiN9VVoRwh1aly98k\nzKDGvxZH+upuuE2a/zyWUXouBE6uDm2VRRKAzo2iDYo6QLGj8X8Co8MVmJce\n2G6J9Om44Fd3bl2ujG9CnA8cI2616R0L80wWtzvWkBA+WXPr/rg7xsSHwBO4\nAxg3ss05fvsFvpNLJxr7c6DepYctdgvRreBaGmAcAcngczuyxqp3aMeXs0cg\nIgo9\r\n=62Ok\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEqJ4MgRdjuAEKhh4IguhsN2CBBIM8uCE+CZeUp7VTEWAiB/mVC/R3HaBH802Uxf6WHNao7pl2JZ/FjZxvZrb4AScQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599815550-52437bd9.0_1599815637957_0.5529994910319689"},"_hasShrinkwrap":false},"2.9.1-next-1599816206-01cc0acc.0":{"name":"@xdn/core","version":"2.9.1-next-1599816206-01cc0acc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599816206-01cc0acc.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7FrRUBOGGbjyrSEB8W8zdl7RW1zKnxdC1ReHgnW+iU+dEA2EEzK6gI5YlbtZkrm5lLe+frEmdKgzicht6y3Qbw==","shasum":"731b6f53889b663dccd3aa0248345449d37aa344","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599816206-01cc0acc.0.tgz","fileCount":141,"unpackedSize":685750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW0JwCRA9TVsSAnZWagAAOb4QAIIH5fJcJpv3fftXZ5Ye\niSw/6OFJrDKPlXcVILW5MtBlVX1bIzndIYWyxADVj4m3A7ndasjHTDm2OUU1\nXayuQRFJT5dBvhNj+vdlftkEzWsJhmKLnyykv6xtyk/hBFCEurRiBGeyTWBr\nhwxcU9l8t7xxVOsWTBi0HLAe54zzHB+RH5x++ReqI+mPNS6pdIQz8vRt5DSX\nzTs8U6PS3blpRouRViIFTyVL2uo1sU73TS7+O+s8AC+T4isugeYGiJKs2URq\nGiAUgSauzGk0+Q1VK2h4iMBa60EUYp4pH2/4U+pKY/B2NjHtOrGUOGZhSMUW\nuVWWCf8dDZo28tFw3mKkkcRoW6eAJRAZQeYvgCb2O6rGoWJGTLPkAv5XPUKI\nvS2gtOz1XXLMGTDUnjf7TFPKwwd1E7gnA59fvUm6jb5zymJZEAKlf+VvtQNV\nEWMlaV4Cr6uSzjyuoAr2Aw0Kilf4+JNQqIcmtQlo/TjbF/wQh/5Kr1z7M/7/\n68GqcIggZBNv8rsdSjNgVZahU8KncRHbPq652c6Ech25/VgAHOolqH2HZuPP\nfh98hQl6LVkfQhgn2E9EGQ9weGYlHSePRCyPpKpWOc3KsaICsLVZcMZnQQOV\nD1KmaL6ZtQcSbasAsqnCcszkG1lTG5AU4edTmOAhUp24oGAFIarhsYS+ktW/\n1Nta\r\n=UVxo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDt3PG8VVgD5VQ6chKVzCgWRQynEZPL0H2MvTNapyNGEAIhAI/FLunQFglVeN0Ub8XT90ZttZ5zBEc4Yxln80YhA/7G"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599816206-01cc0acc.0_1599816303915_0.813323417331504"},"_hasShrinkwrap":false},"2.9.1-next-1599816807-0ba017f1.0":{"name":"@xdn/core","version":"2.9.1-next-1599816807-0ba017f1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599816807-0ba017f1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5F5y/3WKu1CPUZ/p0FwlKOT8cQUxb048+xkrGUIo3vLDSDuGEnsJEtoBCcqDfPYz2lq2pUKEUSrA2qGB/aOsSw==","shasum":"ff4ec77938bcb430cba8f6879c8fcc1b3153d6d8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599816807-0ba017f1.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW0TMCRA9TVsSAnZWagAAK+UP/2INyviptBCHrJIdTEAc\nqZEJacHhhmurHl1zOiP7nIaeSAj+vxHoDIJpbPrIXL5UHNmuTAqhJE00ptUD\nOFY9NaPZj0ealZxc9EsVfefW/By/ujIvUclO5DFkNNENpkeNU3q6hj2ebrBD\nv4jGCS3RDGOn759xQWr+bR44OXzJ5Kf7cuiaXaPryxpIkra5GhMMhBVsaAee\n5x13BhA0+1BzjP3yqc9+looNxJxn8l4rHIz0763Yq2SGqJVhjZrN3gDUtASm\nwq4wHv7M4u13BBW7/12Js6RVOhjShp+uvzZ2YnLb1EJvxg06c8CWHLQekD/Z\nhUuXoYdd7alVBu39os5qBwUNrWC7/zBxY3yQzAgi3uhdYcxqehqQ83uQn/Lx\nxgbWSHD7/4SaRvy1Z0LY9p/bnpQDDD0gJST16M+8wH19fUZ5XuEfBOph50YI\nXDXE4h6EldcLXmzvDDL8Pqrra4IcofzihTPPpPiEL8yI+xYKyrATmvZ2adRL\n8YNZ9FrzhOzDa+wrIj559nAwejN/nTrgaiKT/GFizLyo9eUXbRr/aLLZoBUq\nKOvodGJH6JW2CX2CgdJu//bEnE2PMx/YrVY7fMDXsRBEOd2c52KIdbcm5St5\n3PjfklS4N2DJDVZqJJ5FjKXDrPYLHqXgZPGZ7JtEiTToLi0Nk+Uph98e88Qg\n7XHX\r\n=TAlZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsEGw6dFbfBycSYExeOjw/G3Ioq1IwTv6MPwuVppYUvwIhANebgnYADFTXjGCVVf9YHxci5AMrGuCnvxb76roh9Tgf"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599816807-0ba017f1.0_1599816908162_0.3789604068416259"},"_hasShrinkwrap":false},"2.9.1-next-1599817774-60d05f04.0":{"name":"@xdn/core","version":"2.9.1-next-1599817774-60d05f04.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599817774-60d05f04.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EMyVBaUhh1zbrn7uoOfhA4v0WoVa9M08NfpWxXFbIfHlPRNKLfy6S5ss64bXqzBZ8wAs7w2bAjUcWI+2AD040g==","shasum":"868015ca59d019d5e97246464fdc806d5775254a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599817774-60d05f04.0.tgz","fileCount":141,"unpackedSize":693612,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW0iRCRA9TVsSAnZWagAAcP0P/R8S+RwDfyn23MpDjf1e\njQ7JgSod9RxELY5iYNpc1dzed15hQLKp/QfzyZFCY1f2IjuQU1padJ7nF5sB\nsIF8W07K9oTMzNKdeWUJFA+kBjXzhq4ErfCkpXJQOMqzun+XHz/QR5IGojoM\ntRCaGqT4rfApk1uY3bSraf1ZUJY3dCkjmhiDFbeuX6+D8oSdJ5vL8qVDKgov\nQCy6BUm7TVe1pbKZCmK8AERx0SiMO1Z0ivyTxaL4E4G62Cdd4jaDQjWRD6VC\nMf5oN3x6W9XnqW7/lwUMUN0+1cmNX2wBLfCe7olZVc5jXh7Q3f3La7kkwgbD\nXiSfplAJ7OLfdtkosdWfZftOMyDMdIQ6TNWT4G/nD9qJ8nYlZzftS5Yq013v\nDcIyRoNDl+Berm7j4uaqUeH91SOO5XlozigK6/wNo3m/2D6XafgnrXA+hS7E\nk6ggn0j1NBTKsTYZKEKlg7diVWeK4MMbxsNIXyWIrEZn+2RV0Z3QNr2nZOT5\nwWLflV9M8vh5fWfyvgsjMKQj5g3kLVQ9lp595IKD5S5kjfxCBOcqmYRqnJst\nTFFaW7gRY5QNkcjZ/M4oinK7/uv6M151rwGIzha+IlyZoZN+irl5LTZb3ryY\nqjcxCHz9MdKtknI1nr2zyVFGssLB6VQ+HcbXG0nNnvU5q1WbmW0X1F6zi71J\nFpXX\r\n=w04x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1WjZawuUGjpm8LjLvvmopCymGutcQcpMPdUhI5KnCJAIgJwD38vquOqsEbMTMToBq+g1Bd64+++4YI7Fqb5r4lWY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599817774-60d05f04.0_1599817873086_0.6972143963940247"},"_hasShrinkwrap":false},"2.9.1-next-1599826000-3b0831b3.0":{"name":"@xdn/core","version":"2.9.1-next-1599826000-3b0831b3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599826000-3b0831b3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pYvGT/5w8k62ktombE/PCRUa3RBNjUO7ArR1RzrxzZK8EQUOzdG/ZqHa+7QPsSXzUoKbi/pW/y5i/HSYDkMXAQ==","shasum":"da64642ba9e16a7f668f0161b4812b48cebe1091","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599826000-3b0831b3.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW2i5CRA9TVsSAnZWagAAjvwP/jQ97oQX/0iCraNJ8SEB\nruzHhV4YpKWL71775AFsh4GKNSYvdK8aq/zi2+GYCXLsbMs7nbcBXObzAsQT\nxbBaWDSk58XaUxiIDP2mrXLAWOieI8Y4kV0MMzPY564MJ/m8YSqCXxiBgjhf\n9ssPXWpBnzmXYIM5KRaREtx1fCmO6P3IBhbKkXBltxon8j/9S0Rv650WkqYA\n2ml7wJVzjUdzAjVqojuX82XkdjEZu7E0UCdB341DK8sx6dHEWlw0FRhbWTvT\nOYB8Tjd8Vpdt+n0U6YfbKYHJUEyPMgkxU+ZFvHu08Z70rqlEgzDEM6pfq4+U\n1dCyhjxyicXkZQNHgeM8vZ4RnMpu5kx+UsfnudG82zpESlBQ4tEM6YdyWdX7\nU9jyJFQBWFbR2aZ9yc8eSW+T1wqgJrPn/xXUST82pgiauwxp0efWmfvQICvh\ncWTbtB3IHAN5iKKSgRVSdq/TGcIif073jGH1GlmpvC53JmoTrndD9+KdNFqJ\nojy0h8WqCZZfqf62y7EQEryp/G5AhQ9hJ5UkuO9dMSVQpS4h618s0+aLzmqj\nQ1a6VFop7LIb7TxvLmeULCO1m/HA9kHFQh7TA1Ql6jzOHV7A1sNI52KPkCUm\nN87A/+5c3tHl5rMbwgS980nb20CMHCJZPm+vVSvLqLWHF7aAfPA3vKsDt+m9\nLUuv\r\n=tbPO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHVL8Yvqgs6XIAVX1JnTZ23bKft5FMtbk/++e6EEfynTAiEA4VXov4gW8tjHCOVv/em8Pc5swpa2P76wMg36ZdOI5NM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599826000-3b0831b3.0_1599826104491_0.017810478894232373"},"_hasShrinkwrap":false},"2.9.1-next-1599836388-604a2bea.0":{"name":"@xdn/core","version":"2.9.1-next-1599836388-604a2bea.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599836388-604a2bea.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cz6by/K68oKpdPv4SLScYpaX4Rsx4G0NhpKCx7mxJ9yZV/BdqPmw8f55XKoNn+az0pSxzKsmOGmuBYMcJ+7mkg==","shasum":"84f58efffcb51eaedc0ac581a7e129108352200b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599836388-604a2bea.0.tgz","fileCount":145,"unpackedSize":694620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW5FNCRA9TVsSAnZWagAA5x0P/01P2c42M5xrrsXUnGxN\nEiOdi5EtorYpNDpwxAblAlhqBqqSlinxMkwHBBmjEdyKjMLK5C76egzo31p+\nOFx7tH8+/WrgnwCJJTrKXXmVtWhpKcXhPFno36TBiDfWX6e6WW5adHNn8n/2\n4yByQPJONhzunpiupisKHHnQsGV3iWUpTo67Q86YyQhEbKjCQkY0qMCpZe6O\naxKTBBr7T7m4qk/i40KAsv/OrfUUEhymh3z4COaLEsL3VbgcfgREE7MnC53H\nAFMdQl+G7yycKLzXW4Cks/c9RIK3KZ9yQRNMbMmms62VFRRGOYOrDoi/VFIJ\nSTNgLFD0dErVtLAZG9t/dvmg6zyLNB2kMe83XsWzqUq4AFty979nQkWiI+Ty\nVJxxf4ZSu4SdkKlwx/hMaXlAyjmZpPq8sW4aXcFYXFzoP0V0jBf8y0T45fik\n9JWDdq0pl7/lOlFWoWHx0l6/pyw8APmJjCTOR1vOqUYo9SvZbVYjYusYH2tD\nFfGifGPJa/zyMckrmDhj7h5LyqLLb5mjkffWaEvCe2br3XhZPBE1ELaRcXOp\n60nCRFeYR2Q/5ceOK9Pnw13DsH8d7APbCGe4BtUL6rnaGv9Kw16CnWHLvQot\nCDlaxO7wdnFxOboKT4K2dWuUxsZqB44DqdkIdCEkmQoW7g59R1Xf3UqRtjUp\nHOD0\r\n=RB2b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXKvHBXltrqt/r4CPCj2v+td3REl9eT0RgVdHuU9/6yAIgd3eL75Hc0avXM3JZPln83C2WyNHvV8YPSCn57q7URm8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599836388-604a2bea.0_1599836492865_0.1598445184183841"},"_hasShrinkwrap":false},"2.9.1-next-1599847353-a249efd1.0":{"name":"@xdn/core","version":"2.9.1-next-1599847353-a249efd1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599847353-a249efd1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-85pdWHSlLdq5FRw61vOeCPrjfr9agvNVsTOjj54WIUhoR/Ip41koJ1EGKPcR6wDG0OEbki9yhAA1WkUFc/u8Aw==","shasum":"b9170f0dd14df77cede31fb5bc8b77066d4b0c77","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599847353-a249efd1.0.tgz","fileCount":141,"unpackedSize":685732,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW7wMCRA9TVsSAnZWagAAO6kP/1S6UG868Xcx0+IY6COh\n6o+6nbU9IagJIJ/Xm6q1vgaEYFnUIH5/fAMlBMBvFMH5N+P1GDC/Spu36jD9\nSXah8xEjwmSpy2kDZ/vEDj+AYfUma7rdgRPmwb8ZtY+rVlBesogodvvzlhef\n91y/gsShgLxq9FGHEAbqz7R1lfemU2JbVlVxELADDdC10jHzoNZ2gYDe0SYn\nscXU/E7AH/OWYZDEC4EGDK5H2Reu7krFcAO3IOUNLtrNPSY/W2Xkl++JA4RS\nCEuqJ9ylQ/L1LQchuoxp0lVsJS1AQU9RraXUuhUQAD4TbniZScefTfq/pzCz\nWDbpWCJvtyHW1sgGSOmpvvkQIBmdQ23rAxedWcWgj2d7st1YTMgFzOy5BrsC\nwy2pSZyhBlhQGDJ4uS+EkEzoa2S4736rxTM8nkpGapcbTEYvgfuroATURR/A\nusE/fwK+TPWFIPG4hrxFmAtfDtapCyFhUKvQJp5zzOHsjo0bPpZiH7DB24/d\nxm7SFcLc2d5lSBfRFLN5BcJw5VLfHz2E8hmczWpHGFHxjLZlvXsBUQIT6gpr\n/EKH1BZRJbtEWxb0QJ92MHHkwXvH+7rmHdd+1l9Q4Rct4tFZjLLoxiWSgBha\ncUMlhQI3PVUqN7TeUscXhxsBfmncxlN9mbxVoulpX2PdP2vXWjRBXipjujIK\nFi1f\r\n=i5wk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDe8aTldYByH4jDC+TPFlLVZM24CHqgwmjZaqw6i2fAnwIhANHAvHXyr6qxZWtbHQQA9UoviLMAiiy4GnVcwoHBEYHA"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599847353-a249efd1.0_1599847435951_0.05113132218688898"},"_hasShrinkwrap":false},"2.9.1-next-1599847387-d90a61c7.0":{"name":"@xdn/core","version":"2.9.1-next-1599847387-d90a61c7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599847387-d90a61c7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mENrdo4/DuYcAnf/zRbf0AQJY5DrWjUAOohUn+B6rgBLVPwxmuGgxXYYtFWeB7lxkdSgXRHKISEfCzZaXYTZCA==","shasum":"4c89ce6934b6b11c61bb3bd5a20ec29a33bf1e17","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599847387-d90a61c7.0.tgz","fileCount":141,"unpackedSize":685687,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW7w1CRA9TVsSAnZWagAA/JAP/iUEyDYCL0AVIMSvuFXV\nQgQVuB4D8eKPdSpEPbJTtUG5yUhB5muBcREY468NFd6/wKpp3kUHXX65Vl4u\nr6l1569KpYU8/6+9lu3V7hHaQSZ3CznaGaT4H07RBNl0aUYVratgOMXg+uVW\nRH9zkITsy+CHEOHNvEXmO5zRYm+LQXu9XeKQ/d0XcjnEKZqLcvjofWjvvHLz\nFJfRbKy5CyF2oSwMgRhCtlJOOz+HAWgBe5Y12uMLBdxwjUkqJtw0xlCUBahE\nUUzoAZ3w/u56skQ/N5iI/VTuAxnPeQwvsWnGGiJMO/GwytWcyKx8IdZt/x8j\njsxOZrU1Gc7w1LZqMwvjnUpAq+0y5381SW5xa4/7QGOM7hkpWQVOh98MFGh7\nXBGjhPswux55RYxtDJkTmjcgNLlAykuZuoe6sPZRe6lSZcbA2ybLwuPqJOUM\n9Fg2Cd7FQypmJAXPDk8REKEV9Vv1watJx5AfE/peQ9/5FJMhIHGkUGOA1slg\nrUDIdphkJPt7p7ZbeBr4+WoSeH6kKZj0cyuNUSWK470TRqb57TAskkU4CDGK\nqpgmy1r/4zzIcWcXPwP+C8k5wth99N5oGKHAkg3VB9+WN3TWAo+fUJRA6Pgu\no81874JXx/qV8rOpoAbQ2GKtlnPEz90Fq6W5SQ9PY9lR5FfoCGk12A3rYvGQ\n7+oA\r\n=CNK4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLdomerSzWnvvO9q2Qz++AcoJ5fuH1PwoYyVUXcHLVHQIgAdD+xcNWhzMywMZ62gUJLwGvoDuR6ed3fUEKPR/rqQA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599847387-d90a61c7.0_1599847477075_0.6037288943283934"},"_hasShrinkwrap":false},"2.9.1-next-1599849737-1eb6a3f0.0":{"name":"@xdn/core","version":"2.9.1-next-1599849737-1eb6a3f0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599849737-1eb6a3f0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-NKA1SS1nVULSfGv/CWQrE5otMZ9t7JYapZMQSovJc50s9kF2l1jIP3wTReX3x1236CS1oLe6IOCPyerpMkOxLg==","shasum":"9538b89d35cca9acf1983e75021bc0f9174cad4f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599849737-1eb6a3f0.0.tgz","fileCount":141,"unpackedSize":687760,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW8VrCRA9TVsSAnZWagAAD0cP/3mj0zYgsLpmWX9OGart\niIyZqkUyts13kbhkqoK+R51ZC374M4nPzcybc+LFH2mQsBQaPbRO1ZosvMFy\nasyViNr0VZJ3AuUrZJaT0nSgkAing8ktlr5hVb8GHaF8LIbJYg7VlvwbqzG/\nLkV3MUmJ8c6pR8o4G9AC4Im2vUdfE7+3t0RU8FUahyh7mQuriY8TYeK4VY7M\nQISLRdlQFYzDWBe+hTLQMQJ+dfTUrYOqaM+mYiPywjzgGDX7CH6tbLx4qYaw\nNHOcu4V3U7j5S/SRpqNZYD/61jehamwS7G/dnm/Ywfs7MeQW/VcaNuHNrqz1\nJUCHjeKLcDk9H7LM96kR9T/u7kDSXgijmvERYfezHtH36xYcTTSSGFBIKigO\nmwekFJ/ma/gE0ZkY+lL3AFGkdt/s0vOzXmreCEcxUpsfmyPEzknCnBGjfhp7\nzxjNu64JkeO6G68QwFUUac5VB6sh4amVwS7JFlsiWTQpHB+YOba2XuDMnLxK\nXqJQO9RFPFQ7CS6tKp0rNSoQOvmpoEm3DLtX75V3dy/Of3wA3+qu797K9KNC\nbE+q69+g+uDBT4nESMnWicoledeUtP/E7CTLTIw1IdYG1qUH5WlfIbjOWXWi\npe6RxxyYW3Gqah09bbxfJ/zoGvKOIM3fWOfnV/RE7EgiuSCDF4jroJKLqvMA\n6Y8w\r\n=46Ic\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFMsQdjI7dnBCYA/r9/iayb2u2AVwiN2HZJo7dlwgfWTAiAlBmc2taMMc05q8fR7HMdsfzMN8xVYKnX1BRpCV7AItA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599849737-1eb6a3f0.0_1599849834878_0.46965356354265464"},"_hasShrinkwrap":false},"2.9.1-next-1599850085-86d7f300.0":{"name":"@xdn/core","version":"2.9.1-next-1599850085-86d7f300.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599850085-86d7f300.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-47zt3qc6Fxyqw3JIX4v8yt2M3HKAyC6uDqK5O6iIDWuPzrt6FgX8HgtApXS5w5urtv9LfwwXwKqpTqzVBnfD9Q==","shasum":"ae755e16b5e527f009e6963f10c46aa1d2b4278b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599850085-86d7f300.0.tgz","fileCount":141,"unpackedSize":688246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW8bLCRA9TVsSAnZWagAAEmsQAIYqarKoLABgl4Njd3rK\n3nRx60hi7LqnBUUrFWKniGHwBkfZLDBiTiVg6HSYKYLGo1r9SbsPyzTFTHbr\nbZ5qdW/Be/Sw+ZYESQ+q+ZMd+35a+KxS02nRjEVplustr9XTG5mIFbE2NtPi\ncuJrxQiS/dCXVX56qmDaimIHyycOjlnaMpoOZTTHSqClbt+46YN7qjhWEAZ+\nZyF/4CrIp9C5TDVPbewwW8WMXSC+lX+G7XhM7jnMndYZp7MllYH8msW1tlC3\n9q6tnB3gvLhmX3UamX0eSYx9Au8UdovH/0E8IzMyn/KX2n9A3W1WDr4D6+WY\n6wUYuIo1Tt9yLRdGu+4qkHpj2aSrUBX9sKiKHCt4+0iMkgPaBV6lZvAq774Y\n6ECi9cGLEfcCzNtL76/ToARcyTe8P1pPqtvrvgC9qQ911FEeH4k7YfBOvrxX\nIZfRiGNXBdb6pRjzhzs+lMbWB1b8YrJlt0mx55RWZrxTlixlUZ1H+cK7ExGG\nV6Of1AjzyR99hJYNnnT13R5QtaLM21o4yjn6ZbQe/3YkvsY+SSHNxRdjLTn4\nYtIMA5Nelx9q7YuEvRwoRgg8Cl4juT5j5qivDOkuD+SchwG50f1XmpwqwOWl\n/AAy4xVM8aJSTe7J3bnzMtNFbSkmFiAbpFvvU3727kHq79Ecudep28mAehlI\nxLf5\r\n=f+gI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqW/QtRl5sahBo/NG9D4BKuofvTbOzX8Y2rSgQtllZmgIgaqG0X2+hHx8419O7lgIQevdBCHXrCrv/cyPY+b+HlKo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599850085-86d7f300.0_1599850187061_0.1534036025662917"},"_hasShrinkwrap":false},"2.9.1-next-1599850506-e93ad9f4.0":{"name":"@xdn/core","version":"2.9.1-next-1599850506-e93ad9f4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599850506-e93ad9f4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-s7Jeed1C7+RpiAiLkNxXIMX4/dRRj/kOpZYEyex+KS1gm5+W6oh9JL0xmz1UCxgt0Tw1dT7T3x10ybS4iVzvrw==","shasum":"bd245dac8d24661b5aa2ce70a53968c0d5764f79","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599850506-e93ad9f4.0.tgz","fileCount":141,"unpackedSize":690293,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW8hoCRA9TVsSAnZWagAAGg8P/2lqwpwr+kDAbfbgYqbO\nJG6jW+b1sp6mdi8V8JKzpkmAOs3sqwPwn6T4DTwbrPaFDHodiue8ZwkzdYaZ\nHmlcOj9TKZ59WvBdhECBYwxvHLlc/q27VpzOqT76zRSncuavGx6w7zRddS51\nKGiOJtcUuQ/007xWSm36AM3ANyrNyJzMWc2Ozs28KTSzZAJ0EPEGzCwnlNHU\nHDYONZEKfukBG7fMmP5gyBBD+bGxFpBgiTlNnre5LjUiCSluWo2M2SfMXWqY\nh7eLoNmEgSclNQ+/1J1W1i6XVuZL9LqkkKtIcnm8pkTt/aJajeRumiZbtGQW\nLBr8ewNKMz5Q2B7tzh/bVDElI+XaN8pGL2X9U3tXPSlP0BwXOnaLJct1GPVL\nqPoVbvB9nVRq+6de+B22AqoQEPMVr8uIWFM+b+aGnPj3w62FzAmtn1ZMmgZg\nx06q+M6gStMW+1xBQxVnHMXc1pofiP6nVPkYsHv6AEvOjndgdWV4+gsvUQUM\nK4Rf/veBrtjODjZCYkne0z4Hz1nxiWebqsuolTf6eU6Ixcodo0ZmX9QVdBwn\nbQ2ZO4xCAta6TIdG7NSa43/9tduEn18uGOqLhxGW99wxtdqtz9G3iXRor2r2\n6Aoieb+9ZBW1SR9C3EUNUP3Q3bOjUQjM0qBfB/YXZcCCQ7Hjz0DdEcUYNiER\nk9LW\r\n=2FBl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFwybMjnU/kDMO3b8vXlRQMi6F0j3QKiG5VWbKCXvbyeAiAUMQw6R+o86vmeF6gHG120p/5S+hYqJtI2E8VAdTfepA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599850506-e93ad9f4.0_1599850599605_0.8996948575213721"},"_hasShrinkwrap":false},"2.9.1-next-1599850677-5cea23db.0":{"name":"@xdn/core","version":"2.9.1-next-1599850677-5cea23db.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599850677-5cea23db.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XUH6SrwLRyghUVhP+psW4ij4XfTZbfzoFUG6hcSqBLqy9VtT0qteh2CS2p+lp9plAYHH3o1Wz9mLXPyzh08rBg==","shasum":"163b1043477ce0d36957ae63b7460df23005c29b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599850677-5cea23db.0.tgz","fileCount":141,"unpackedSize":690206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW8kVCRA9TVsSAnZWagAAPQ0P/jf4h7UYiaHNMohi0Ghi\nSxqBkL8KCnhWGtdbbCZ2tT9chC3N5CEw5pqJTl+3lcOBcaUxio7leiFqbC4a\nt3JKqNUSpj7ic8ewMtUIQi0tjqhCu57eCnzA6TAQ6+QST3cKIsvFA6D5lQGD\nqHQ+Q1hiOz1DhLs0blsnCmo2T+AQ1ypU5QKvaMNzfLH7xJ/cVXBEuwJ6GNol\nYm1DrfnweQWyq7pNHs7Hje4yExj0Hpc0raQs/S7fo/J0XW4sG4nVNL6wiT1M\nHHJNLtrQoJnTKW599svkYcYaBFmfNVxPFwzc2OR8dlsqCmDA7UgB95OBTZJx\npQt4guHiYBF8B6tYK4Q9qYiBpyI8zE5vzwgSjgFA/EPMdS2IrX/6BH/Gw4M8\n065eFw8aDzKEWVcR9q+QeMd3fLi1NGZbcyqZDqRWG3C5zkpbp06PgXS+vfTP\nsFZunFZgZTtLgBNAMVixAKP3Jc1VDHrSd97n12lbSuXT8JqU0+fY63S1eVGH\nrD7So5mj1IXBFUAVvsjgrWPMoLNlq+Kz5x0IC+GG9ZY7ulfIpe6r+Qj8FCXT\n8M4WyWBX77r4Cby2wweVPwm9K6lbW2b7cJ5FiUTpVUXveeEotJ4jmNWElNpA\nQUiQvk4P/Xod0kbcFgkU5vMrBbnvqB82IprWxKcO+7WNvVHIYhlYO6lkJLZA\nUGkE\r\n=Q3yV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6WKeKPXgDq450lWPu24PA2nizBeL+uTPyzJLHg4XPJQIhAKfujKxY20jkpCTxjru+rzQEPV26UFp28DcHdtGb0SI4"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599850677-5cea23db.0_1599850773410_0.1811023301243504"},"_hasShrinkwrap":false},"2.9.1-next-1599856041-fd977716.0":{"name":"@xdn/core","version":"2.9.1-next-1599856041-fd977716.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599856041-fd977716.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7Vf7V4uGEbrgpaRPqglPfSCwnxope4/77u0RaFwUUkebZHijiJvZ84m2ljw8X7WFQ8GpxGnplrcaZNg2zuw80A==","shasum":"049d034cad6c17913b5b8c0936c862b165e62389","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599856041-fd977716.0.tgz","fileCount":141,"unpackedSize":690318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW94JCRA9TVsSAnZWagAA5sUP/RjkMAEvE2VjxlQcMWp4\n3UMqZszNBSsdYdUEblZsrAgFBopIu2UE7RyUV5x/Z+NKaR99F4/1xuXNb2on\ndfv10Qw1ocB8/9/h+x0OTWQDZKpKwofquthHdO7m+nE00+EQUf0eBj1MaRaM\nbJZMNx3YBuIUV2H8YL1VYxkww8TgBn0CwfK6R1ucScQC65TAuggyW0SdmDt+\nGgO1xnK3RsVdroCaz6jqgeyjbwgDuH5FXD4LrachhyLXTTAL+3VGR6RoAs5f\nR8X5BuFWOTDDpcqk8L3rb3ZBkFtnboBwCMt9mq8Fm3oMCTI9hpIMu8jpaRtB\nLBd2iY+dJBOuClUaqkkhjEEvhb0hu0jdMFhpx9G+q6dLQtkX8Vj1/PWErIXK\nBN7vHy/cfEW6N8IENihSb1C9pcsb+mXeNWA71/uFb/TvagcFvfaDmLx8Sy03\nyJRNxo+Utu2m0WXhvgKIEUtPHjBzS5m+eK/CRbzxZrsHCc6IWWd2gyzalOrR\nWUCTQ3UcF7z1RTIVL1SW+uEPR5gp7tlbCa8vvTzjmjEDOzD7GC1utCneQJ9I\n8aKtM3hURV2DLc6dZPj/+LLRFb8bC9S0eMh1cTRh+G29YiNaC2FSQx2P5TqI\n8xDw+BAbAKS8VJnxn+sJpBzgDeHawjEB9+PPx6J7d980Zgj8Hh/nW8TYzZ7b\n/cWF\r\n=kM5n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8z2YX9czjJuo5EVdshQahZnyKf+CzUdbGENjOrxa8HwIgaRDiJwmLoDxJVani8CacpG3vCf+ImjyQbLx75Ykm23w="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599856041-fd977716.0_1599856136813_0.867989720745235"},"_hasShrinkwrap":false},"2.9.1-next-1599856337-3759161c.0":{"name":"@xdn/core","version":"2.9.1-next-1599856337-3759161c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599856337-3759161c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Z1Ouv/Ifmc39qacxSDzK/ojQx1LsQS3l1FAfxyKqxrOCLMHcfOtInnPt6k2Z2ctmeKip+x8PUGi2RDKvJXYe/A==","shasum":"b3e48d48b3c7dd6e05529a9706295db75becb2c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599856337-3759161c.0.tgz","fileCount":141,"unpackedSize":685960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW980CRA9TVsSAnZWagAAxSsP/AgptkNxxxzw5NTmVwvL\nFXPMnDzgD7Gw7BhqylfzYbwln8R29BBBU4ODlK/TlwDkT+NNIakLZLtnEE+0\nHKL/U1hKd+cRD4m/xasW/6nAeLeffWGd5WjOTjuKRyuq9kR79r9QEzDl2+Je\nRcFVuEFRh6r01rIEwGYEdJYcgoghAxwqTb2bLmAcqMH+MvBi8q7UH6WI4qP9\n8qqW0LfZER9rIi2HljbZd78Xl4NHlFJaeyiN3fCL30ONBGXUXI1ESMVJCgj6\n6fOmSDZVUWXUt2slPIACe3WKlRTiNy662ixiwBNijoKKWftSsP0eqW60gVdw\nX7iwHuI/2gmfcCXfsypGwLqYzcgMPteqtaQ8yY4iTu0SwZtx3DfGi5PH/EDi\npWiSNelJwEcld8XpBrNb9eae5Up4xFJaVTDJM8sTlGi46SiA3Hdqu8BoGtu6\nFDAArdV/lJEzdBXcUKudqEnY7zvnSVymXGnE33gsspzIjhX/+8gwte8UtTF8\nSikE1g5x+kLySJ/Dn5ZnswU/y/Genu7wmpo+csX03pvaNyQivD9xDcn/rYw4\nDEj98bHsWFiiT5ezvM1Il21H4urhG1luKAZM+5R5+4S2/LFYd7TUVUdQYslm\njf0nMOSXDRRm1TA1uAWtlegzV49Sq/EoIg/iVaJaMOLuxs/EUA1ZJ44YHujW\n300I\r\n=9Un0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCn/sRN9DppsDT9kCNHjHBwTEjgcnYwVL4x1QzdIhQYCQIhAMVuMs8O495TStE384v+esUdBd/ANex0wj5yYlxw/IXn"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599856337-3759161c.0_1599856436089_0.056930017893708884"},"_hasShrinkwrap":false},"2.9.1-next-1599857932-8037b565.0":{"name":"@xdn/core","version":"2.9.1-next-1599857932-8037b565.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599857932-8037b565.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aPO4r7ID+lIdihmjGn3eTf71x7X1h0QmWv6l1D5qztW2lgCvl5S5VJuQFbJ7YejAwjUJbCWtz6e18gxXKtuuNg==","shasum":"7ad0ade212b516b13770a80aeeb2b59275ac00ee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599857932-8037b565.0.tgz","fileCount":141,"unpackedSize":685960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW+VvCRA9TVsSAnZWagAAL1oP/3XV2/9tzQqNkbNPv1B1\nqEkr47Kl0X/PLViqSDA2a7dp0IGunMVAw+HGvFf/iNmjVoGYC5NfWlt7ckhO\nxrl1FHjrXqAUlNhxCTbUaiBb1MXjFHnKOJS6tbeL3IXrGS56MrVOZlXZyxW4\nQmkUHwttNeqabF8ntgOLFIJP6WQQfkI17Qpt9/fxcmDWLvGPpTYcXNYkuHjf\ndgemZmhjOqr8Q3z9zp9KpxC6n+9WhwtjN9ObRP2TZbDCE5GQrgUQjm82HZ4X\nq4wNKahYlQKgBG+HlV7C8GrSIwWYxE1Oa/OAfCe1J2eq/OJxDjl1Bp90IIvq\nLGl7IOxnBvteB4OQimLdQ5q+dV9JuoqbpaTbcMnQiOEv/K87YlSNA5QGzBsA\nsIULAydPSVoA7i9konIpsONKvNjtQXLvhlPfizc4Hinr+pNFUJoHpnq7uAaJ\nvKVjJdH2DzE9yx4Zs7YkfE2sF/ejv9JSspTVcLxLQdLpB0ZR6EGgMMY3QTzL\ng7aBOTe2wazUugG2rdjXMvp87Xq9AmiR+oVwqCwzsGALFLZ4lQKKtZsmIPuY\n7cJ85zqAY+498ZpSg8IAS71OIIqLHYwLSR8RcwP+LfWhbeBGgAfkgIgpA1ra\njCiNruo+PkOgvw230ckZ1g0zimfdPssqnlbxia6Q29sBviIYvN1XYO33Qb39\ngmiY\r\n=olXD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHNvJCPYxDPq5lZAOGtUXDsReQJyhoyQ2WxrkpjwsfybAiEA93x24n6A4kDFCLmK4L+F8oeMX1w+a6b7xw94AKZ24HA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599857932-8037b565.0_1599858031049_0.8129339936654656"},"_hasShrinkwrap":false},"2.9.1-next-1599858843-4449b454.0":{"name":"@xdn/core","version":"2.9.1-next-1599858843-4449b454.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599858843-4449b454.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eny2ieXCH/cP0j8rB5zck0tbzATs2McbCmsQSnpyhrfE6tX+DX6dqN7re028cjq5OY0zBcXZRXhpdBqEyLb8Hw==","shasum":"64caf790bc1e482ed9f58e53d9740a68034c1abb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599858843-4449b454.0.tgz","fileCount":141,"unpackedSize":685960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW+kBCRA9TVsSAnZWagAA1T8P/AiDqGO3lcweyExb3FSw\nHr1uojLsRB7R2+auQmfwwIFxMmj63IF/PWEblEcKc+3T1fPxJ9eN60OGyLRV\nEq28s6+rnpulPsDFPbrf1Ot+zfxwCLTD8bm1FEP87v/JjMxql3Evi6cjO1gQ\npdfkmG44UBynySJ2xYNSg7tFmmzCbjL5N/W8Q78IHf9B0OE6unUejNdXSASO\nMdhL0eb3shSUOmgxlA5RRQmHgtDbhQJLrfVFhfuFIpReqxaemfaEH8UpbzFJ\naxQEvdMEuw+gn4PsRNLjrO/tMkMDbbX/AIlJ92bQE/DdPcZkQfyRNKJCHUHs\nPpsIp6z4m5ZPFSItMP5uN6Sg5qUmRLwckwTdvpSOSOfqGl4pmovhtQQfvlEZ\nzSyKHvnnr3V0Wqtx4EP52Ngwr2KGgDra/HH7OUWf+4jssCnmtq3lJToraxX9\nWpBkS5UDxN7oUh5bGUKcbg3emKOANULHqCDLG/TuvYg0LmFBzVrA5CKqxj0H\nYdpInN6THJI7PZc57YFhhE1OSs2xzSNOnGG3wvhIsw4xw/YN4zoTjWP2vQAF\ncPUDZWbCjTM+w2P5quPclmuUJklmaxCbgIki6jxJCes1QRV3movmidycI5zl\n8M7nIPpX7YG8498DI3DNU3J1Dzzlga7YlKsd7hxRDFaSbmjzsnFYfxd4DHjj\ndUBL\r\n=5H9U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5zx39b4dq+o10bU36CZO3XTPHbG49uJJo6huZMPWmgwIhAKy+0JCzZ282Lsy3rlmB/h6ymXLSiSh+NG9jL+zEbf2e"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599858843-4449b454.0_1599858945099_0.014990341139750063"},"_hasShrinkwrap":false},"2.9.1-next-1599928650-70e34b66.0":{"name":"@xdn/core","version":"2.9.1-next-1599928650-70e34b66.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599928650-70e34b66.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7dUyXmh/sGHwnrX0oQbh3EOlEfRJKBp9g+Hr5GTEPTOgmaShdZkmUtxKjlccIelSb8DeLfYbYv3ZVjvWNppJ7A==","shasum":"6164c3618974d9f0f518c4163545da4de3ebd28e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599928650-70e34b66.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXPmoCRA9TVsSAnZWagAAk9YP/jbyosQArMQ7RbgFIsiS\nF4+5MHcEux6bOhxXw6frEpLI2TlrGW5bbJznT8mWMh75lmCBIeg3ODvJbgDf\n2yfn9Ey/5I0t9n0nwqdPm88ldBeywayAut7pv7wCZ62AYiDGImu6i6FX7Ybr\nRjvruUJOSmcBvglnhQopgMu11Zi1q/LHPX0zwePlj18WzSI5HyFyVuuMW0St\ngP2UqbEhKUvPJNcazgg9gL9WodNqCSOOnLwJevRBWght6s0UzqipVXTDmCS0\nBmCWzyp4tmdVbiS8cqmOp9TN+FqHlJ+Oakd4Cd30Y3w0x3Max0O0rTe2oZPt\naHT0CAlO7EMo9AewNaON5fgok+2WS7HI+Ub30CIFlbhxZbiSxxSGMmwTgtf3\n8bTouO5jodHzRXTEqvZGlRsJRNPvmsKqxGqv/xfzmsqfUnadiv5w0/2XPe9v\nQpAoj/tgp+azH7Qe6xU86k7PPLQZLJlaUUXYAPsjIjYPv4uHmW5XJC4EV8TB\n8rtZTDFa76M33ynMbSZc+dCjLuBXWTmZzr0wgJ1Nv5de1I1ndKqghVfKXMNY\nuuMiKJObzlez2V8JRvmWVAY1veyURtFz6QOSx2ayRc3Qnmg8HJNVQVly9qXe\nJgkOfXhJprwzYzF7fQBBdpG9NNGjQhZpCVieAdbmY/6UEsI13db+p3wELM+6\nGDSp\r\n=UZWy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMpNMwVld5y+pv32h/p2Q5eNklWxttEGn5H8AB8Z+1YQIhAKOeaOlTbyG9/1mO8rLzUvMvi9v7YWBqekcHJbGWg/0N"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599928650-70e34b66.0_1599928744392_0.1661859644611705"},"_hasShrinkwrap":false},"2.9.1-next-1599931291-eb521ddd.0":{"name":"@xdn/core","version":"2.9.1-next-1599931291-eb521ddd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599931291-eb521ddd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nBoKQ/KBbpN0gNyiDU9zzZ9RlX9InROuZ2YZ3/bEdnjXN6dMl2XOJpDSPXEaGA6gdLzERCA9CEyKHzrRdRBkOg==","shasum":"86b76ec96c31300d97d175ebf2ca8b49e951e56e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599931291-eb521ddd.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXQQFCRA9TVsSAnZWagAAxDwP/2qvH5OZBCVwXwU90SsJ\n9K3TGzIe86GQNShcadrsP0pRR1K4yMUCNbeTMGifcXM7cYN2IF4KNUxlOEQ7\nVAsLlfF5ACMifLZhzV73S2ydeoBkBTivi+IyDuQd58y9VSuRxYWEm6Yi1KfP\nbX88qeeJJ6RUa7qoH4cMlePDEyfk0tvPOSESUlqwV0Tu2t1g/8oBUTiWbvlr\nR2jZ3VjeZreVNaJwRG7NMiUbJuV165DEtb6WFP56rl3Hw6v7AOzjgWbWJuZd\nU6NpITCNYCddUtA9alg4aBx105B2iPKGpsQduOd5T/mXPK+EyO2Lb9FcqEAy\n1Sz/yTYdnlC+VpY3r+U8S95YA1/SlJU7Hi5hz6DWoEDdNxocBsDaT7Ra3kAU\n6hhiGgO1edLDg9n6WfYWkeYnSIIPZYIN4740T0GZgiq+FQfxScTRSbWuUjWM\nDH8GOUq5wZTKt+V/CNboKzC3UhP9nBjBSqra2jZqYFMraOYmXNS8hYTyimkG\nj+VwzXiFNUSbeqKkCE0dBsU58Vnt8C/9nPStngVBUXIrryeYxw5txVOfPM8a\nUYx1fXFN3gaJu3tyQAMrvu4hBlzjuW5iObzPzBzaY/PLi3K2wAqjOJbwoGXV\nVNcb7zM578w/XGSK6EGblOWChDrjR8OBpXOFOPPnzsLVLiz01KdttVUxQ8Mw\nMHiy\r\n=ogui\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAk3ISlnOhG6klmqUSq5U+bQiYPSLOkUhgjBhhwvIXmvAiEAlwurjng59eoOB16ZPrkLO/VMMkl6iEOKKeduzEva6Xo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599931291-eb521ddd.0_1599931397191_0.20150263643552502"},"_hasShrinkwrap":false},"2.9.1-next-1599971596-3de2b5ee.0":{"name":"@xdn/core","version":"2.9.1-next-1599971596-3de2b5ee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1599971596-3de2b5ee.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xGNUrG9z+qoEEvA67lIuuoh6vVAL7FcCqIX6PCa9PMGlw8EDQwgkiL7B9kBuQIONFDID3qzJE/RtHUbPnexydQ==","shasum":"34dfe2a50bd24973004b2155b593a8afb1505386","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1599971596-3de2b5ee.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXaFeCRA9TVsSAnZWagAArCIP/Ru6EvwntBx68jDBpu+3\nH1j8wtuviJgOc9+4mfvgHl6L+GbrvX/s+EwA/Gf+895J1W8M3lAEHrCdSR9X\nGNVjXxYElghtnO/KPcJzQa7vqtJxrqIeQ2I4ONF92lKiwAhDFzF7VF4LEY+Z\nBLAaDyCWvMFs/rzmf1h+p5iAS7hx8HYXTjlj4dvuvZA8B+30wXlmNhMse/S2\n3IzXXdDlyapwjxP1IFWMMUXO6jKPtt4jpRdF5LQCEIwKXCZVWfkt1WeBvezi\nDN+pISefAvjXsDqT8wpgO0OZbuaE6wrYcULb/fSzs9M1vJqPRtKWDLwxq5E8\nLjrboDTYOvXNjUVFEYoXKSx61pD6M+2vATLrg3GM+SsU/6ZV51RW66FNMJxX\n9ObmA6PEI4t7tBjGEAAqrxdfdOXTKcB3zu9Wz6vh73Ggmee8jMw0K0kNC4a5\nt4bisydD761jnQFIvadSuV3dcHJSMQUIPAnmhl/Dw1dDZf2B0xCHizeUuq1g\naA/SnqaVYdOOY0yVu6DM9uqQcezWp+OBYszrHb4k+bNCDODfULK+ImEtGK1o\nR9CzJ4wXMsenJxIt0C8s+cspcZ9UV/zPoiMv8cXZQU6qfcFVMEozcuMewevD\nrlbuxewrD+RR/4D7XmDdj3UquPqbSLbC3R8JkmjzsrGBC8mQisP9WSqO/PNQ\nD9g2\r\n=QLYU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDhPnkE/MqOcqrkFME3RWk/v6u1pTv3OT5AmeGztnscdAiAsXvHu+vxjNAlSAn2IrOkfmVO+6LfrphRvqT6VllXHWA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1599971596-3de2b5ee.0_1599971677883_0.6215500862478027"},"_hasShrinkwrap":false},"2.9.1-next-1600073223-ffa596bd.0":{"name":"@xdn/core","version":"2.9.1-next-1600073223-ffa596bd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600073223-ffa596bd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-TnF4tsB2GU43pIfRXJJ8t6FQaytF0vgw457YRhzgVl1ZrPcOG99Qj86VgDxJ6jGMAtpCRVotcLLANcStBv9NAw==","shasum":"5455f5c20527178439451a9d88609a608d7a5fce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600073223-ffa596bd.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXy5jCRA9TVsSAnZWagAAQW8P/2Up4DRnNsUvhwUMMhYR\nI8mpFb2blZgLluUNqjA4XicGipH+n0C1jFBCW0t2+xSb+trUgrJ2/nxKmaVB\njNFgiim8EFrbK21a12Jh5C8nu4sMyaeEDU2VIkyPrIM6l24UWOc3eI4eCQVE\nh/7VGWQLmtQ2+bzDr+22e253aiVvnsWYOVZ5fxU2UHuH/B7tyzWsYQzPDKbM\nSUYIgKkw4xpySb1ieSRsROAqNFK79OqSO4D0YY7b9suF59HxNLXr1XkRjKDj\nFH9n5RetmwltRnuIBW6oJAOAuuDnIGkdUzTnWU5glZpvNiJAqIr03/E13wG8\nApGeMXCki2Eln5IamVjxUgbFhKsPS0qxJHkG7fT+hl/CcQaPpvEyTuhvv6eB\nSapeY5+NzYbKy1vBhHIhn7eYPnySFQHydA9mb/a2AZ18obWI/XD8/ELgUKPA\nrr7EnGogX8fAP241us4KIRm98o9ZvRja8IbTWcSypG//BgtVV/nshvSkbgjT\nipugmzu+1ZqPEAi9efwx+IujiDTrxzmM/d0i0+dm0UpyVrNnSERRQcj5HzTp\n9SCbn8NKqUT9fwXlr2WO/GQoS4dflo+3ROprnWF704MZO5ha38h0XQtc5Arg\nsIKWVeBhYNj19UTKHJPkTWkqzsNid82eWwyfXNaOIJ4eYUrJSnQnC9f4TSaB\nM8jM\r\n=KV7i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClKeySbMoxzA27WjPY0pB/BxmsA+anbUpTagWm7Gls8QIgbFyCbI1y1Ldq15uPKZrgmsfq72UQo+Vz2V6LqIaLjHE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600073223-ffa596bd.0_1600073315055_0.273540882263283"},"_hasShrinkwrap":false},"2.9.1-next-1600073265-0bcf7629.0":{"name":"@xdn/core","version":"2.9.1-next-1600073265-0bcf7629.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600073265-0bcf7629.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-O1eZZSDGsYnlram0U4VLUTTrXlTyM0Akf6RI2VCKtNmTDOB6gjwgcOxPuVkjlQNsf+v+5P7aKs4D2+qwrICppA==","shasum":"5e36d647bab883eeedb75902bc944a22b4913720","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600073265-0bcf7629.0.tgz","fileCount":141,"unpackedSize":685095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXy6fCRA9TVsSAnZWagAAgIQP/jgeY6Dqr5rxYIBW1QB5\nUEU/vohXAndMNrJGH0bunpZXIKHxLNQu4HbJepLCqWABddEwi80BvP6qMsQ1\noB6RrV6B2yvkmTLi4f3pj/i6Aps7C/cAaLJW5wI2QTHClwWsT6YE2KI4N/jx\nYj9e5zbFZhx4Ly6qRwx4conms/6+5vNMpBN8+SzNMll5KCl72SOFrpb+6BAL\nAHmT/mk2KlQoYXwddC3L22QDl8rfWUgdElrwEF1WDV/ODgGcfjOuJ8fDDGoi\nKuPAlvTU7GUAnSoYiKLgqJuKML9mIFeO57cUEYYdlwQnuL7nKuKyrvZb7xV5\nJ4TrIIRikEhPb+VIEuLZkUs14NPQB/Pcr0snoKRMXj6Eo2SXgEwwYzYu4Ft9\nsm4Wo5pwHflpF+5wDHZ9pOFfekfq5bMgDJUxhvjtHNjNpnEU5kiPdlzijcK1\n7wDp2PuFAQmlFDilm2Wzsuq89ggTO0LxCvvKhCg6m88WvDnFUCqWJlraOZYk\nzWE3Ze5oEznENk9hYE/kjtrDdR8NEoOWgJOKwyUv1S7k5X/g0+ihtQ+D+aVp\nVOKGpdG+DJmtSr62SXdqsvG1XxD8hi8v0FklrJbA3y0PqCY1HvlguO4cW39J\n4dSGkmvvibTUde/RUJ/yBblFtZISBRTeWEppkgojHT/YyvtOQPABgB84CUaT\nP3Jc\r\n=8ROv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFuBmMvAbBUsAP6VyIb8kd9k/s3wEvDyfMejYWZIiYulAiEA6n1oyAaCbucIGm0Y3Fanepus7ID1F+2wU7uksq38bAg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600073265-0bcf7629.0_1600073375319_0.23003919311569843"},"_hasShrinkwrap":false},"2.9.1-next-1600073373-483dee3f.0":{"name":"@xdn/core","version":"2.9.1-next-1600073373-483dee3f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600073373-483dee3f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-970wX82A4zO5eLSn67758gKVK1VDW024Zpwllx98l8d/XqgeRxLL/CWthSy8Nk0IKW0Sbqb6dLk8PA8JzwFBJA==","shasum":"4c103b6a044024c8b268407ad965e7f10c90648d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600073373-483dee3f.0.tgz","fileCount":141,"unpackedSize":685960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXy78CRA9TVsSAnZWagAA8igP/31QBLxm6O7PNWVUKlqf\nF0BXTA3/8IJPD2fBztk3ey6wj6DxMEuW6Mk39tTKQUFQIDpL+OuX8s/lUe4o\nnRq29jNuzV2dYYcY2SGjz4fqFyh2OuaD1sSReqFvrEMj/YxGuc431mqBVd7s\nd3ZtukZdqflPlepdYC0COUyY9zggBibcN8dFxQEJC8P5SemprP6AtWgl+WBC\nuaNuU8DAA+in4T5SWGfjqXzAraQ3t6+4X6AckEU8ign8jsxLD+L5Zz0SOQq+\nr3KqqPd0DtS3nBx/ze7djfY5ipSpauh04mIOuJJOZzaBsWQW4Wwf7kDPPh07\nzoQOPF4F6vJwCqxtwnNQ84u0b5QA+BmXO4yvjL5MUhxDkMdRBReRd9Giaw+V\nxeZhpbgzHl1r1udIGtzw/PcdaMVISjZFNSSAwANVwfGAFiexoukypfailwa+\n6piapAtfiiWXLOBsAUmiYsXWRxN/fBIfzeNOJRTJ4A/xDapuJPm7B3K2PUpC\nXEhf6BdXcAds/6MCb2HskHQjeP6sNCvHbzpRAq0lecBg5HtFCwRHIRdPG2Ze\nHO8EiC8ZnB+JovEAqWFOKIJTRCPOuBElXLTG3MVr9p7N1//fTFvjYB2eQFLB\nfrXfk7lvXi+3UnxWABqI9qvug2g5bNihgs28u+dKGpJKEg18Y8ngl5ZWPv9r\nZ38D\r\n=eJnB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChUvUolDeXNOU2xXJkWbT14SssM0PQ58+w41iNoqVjogIgI7IiyVkCGAA2GXcx9ZmWfH/+3lu0xmMJE7FdpJUbYTk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600073373-483dee3f.0_1600073468218_0.5442138121086788"},"_hasShrinkwrap":false},"2.9.1-next-1600073579-4853ee2b.0":{"name":"@xdn/core","version":"2.9.1-next-1600073579-4853ee2b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600073579-4853ee2b.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-gZ0+dUPm3be9ycQPnmf+ngp4J8FuamUUCPloiZ2AxqKL5sf35b47VBULZNYCricy7zkKtDz5L/JkvixHf5N2/A==","shasum":"fa191869baf968598915be977d05bb7dee96ace4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600073579-4853ee2b.0.tgz","fileCount":145,"unpackedSize":695485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXy/SCRA9TVsSAnZWagAAr3YP+QGIPCBiyQXepxRJU014\nbEz2zFC8JQCUBoYI1U9bJLjja7bQUwkeoIqFLbz4Td5IeQDk+tRD6VkLVdcQ\nPPSLH6zmEeJwN+NfYopsJXZeE8Dw6Og6MgQTj0GxjCzbzB5PP9A6qoK2FRla\n1XyzrS34BHL/eZPsaivFwLR+RVeCJNEIApebNQpnj3sd8Ylgsqt31PFz8Z8h\n7wcaZvaWI7jdpHunO/u5Tp2oYGbG4EHC8ShljSVyf/xHPkTATZVkbmJdz1Sf\nuNLNETSHsFPv3Mt0eBZ9XJl6ir+ppgwZbj9YvYo5q8tL7sVESOOJ2fxhPVtF\nlAlWnFoJV/WHeCAR4ctVHIRd9iF0VEHPVX7cuDj1dLpHjbflBdIYp1rcTnGb\ni7N7x1vlcVnAmX+gZtfmB4apB8P8Z478i9HqCmjmK7VVH1dXOn6lJYs2ovhu\nOaoJoIyFocYvAUmLjaI+N7jgm1DotWaxkXcptbRgw6d7pz3KL7xjKbZ2XF25\nxfP26qlR5MyD/VfGM/A7UABqtX0GxTZ8YmrnbFnjGPNJLvOPmMaW1J96AJP/\ntr2R/ufufAgjfPtV8NJKQmlbRvPjKpbD2uZ9M5p7PkNTuaajTn+DqnDIN0W5\nW5wDtGUyq18dT15zV5fj++n744mypGJgRcba7xTejMhv8jDTAgT1N2g0dMJo\nLlmf\r\n=0tS/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIApJKdUI0vKC1K2BeMhtQjrTyxVDhvS9ya3Yuz8HqfMHAiEA4dFnZFpRLlxk5EbIncUarQscWkyPVHiwOWSxaRXlCik="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600073579-4853ee2b.0_1600073681976_0.4286975789949574"},"_hasShrinkwrap":false},"2.9.1-next-1600074265-b02ca882.0":{"name":"@xdn/core","version":"2.9.1-next-1600074265-b02ca882.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600074265-b02ca882.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-DfO4LwIE1lXRSGUwGgRE7psd031unLJIYqHEBrdYc84ofmK6zpHVBiPHGjqsoKh7XUgWjPfwjSLQua+vHeMWMA==","shasum":"00a8742e8d3ca1ca594c2d276c7035ed858d6320","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600074265-b02ca882.0.tgz","fileCount":141,"unpackedSize":685960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXzJ0CRA9TVsSAnZWagAApQMP/i7z0OAsw+XEDEStnGLl\nBUNeyTZqQE9TaUonActwLzICwCMmpkaCsF9oFfa4hUO1H8zeWR4WiY2u7Viw\n7fOygey27qp49b/ID8HQYvd6f7+iHCaFYtmvLzXKcKwIzDvSbeY5WA1AOtSv\nfSfsLybQZ5fPDtYWvRlEeyyWE/l65H6PY3Geu6lLO+/9p9hd9/0E6AnzP3fv\na2AFTmoKCVfZzoBW2t/Fx35Pf8AcfI3Pf6RCqprOw4hh0siwSZwQsa8CypkC\ny5sNKHdSphyCXUC3v2TCkiWnyVvWLsgMlJP/h6r3AdsEXBnano+4A8yOG3Jz\n8SET2WmQbNZBZsd980yoQqbdEW14ilftrFknGOyA3/GjMYGPMbQ17kaCf4Dn\nKVjpDbWVenfn4pD9Fd+DActtR6cOLh8egYi2Ra9iQb7YNx/JYe6KtQLKOotO\njTKd8vRZHJXiGWsdu3V0MPZ36SvK+kg5K0vXdSaW7dwO+/AOFVdUzkiwLn5J\n5zWSofQwwtjX/6QxzlaDv+IRqOTIzkrfk1G3iXMseG4tIW0nitD3+v0j7hce\nDIAJtOQn/cK94iDBm1cyxE5oYTP9Gc0nt+cVPoUGTfmGCMDa57Mpf1ROSG8r\nkUxGd3eLtxg2KaROJ8di3SzM7Fp1F83KluaiFHIdHHXv8x9eiOW30jEz8MT9\ngTpS\r\n=t39w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNYNJq2/uEWa8FjzirOV2OqnX9IpjCabLqrzh7YBv/jwIhAIHEbgXYRtQMsHen2OlmUbjw+53UYYUmy36QghOuJ69c"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600074265-b02ca882.0_1600074355940_0.7847218638726927"},"_hasShrinkwrap":false},"2.9.1-next-1600075391-b8b3edb4.0":{"name":"@xdn/core","version":"2.9.1-next-1600075391-b8b3edb4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600075391-b8b3edb4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WKyfiulDU0k2tIgrLHhZkensUiJOc9eqUPgXivGOCEB3y+yjEWfvX6nCk2NamKy/UB/lRHK5mcyoKmN4DgDi7Q==","shasum":"881e75512c24c825be47e81929ec4e8eb1d31f12","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600075391-b8b3edb4.0.tgz","fileCount":141,"unpackedSize":686607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXzbqCRA9TVsSAnZWagAAkuEP/0MFQlnEunfU4IUFiwYw\n6zN1G82x3ltyzNSHuA5E7oswr0AvWN+K1yAryvKNq+pdHYr9zSN4tXeQLrhL\nn3Fxmbyx0aCwK72uDtw245KDAyn4KZs2mDWpVVir1KlTGz7iZD75HEENHpQq\nGViXBJ0t3zTwE6YXq+csACAl9TB2/Hndt7X0/PJwwp5Y1IHTUgwGAn9rCgRQ\nOE+oEs0wZYqaUPUx2ZM6QU3KiPnWja1xotJNWN7+IXIpqPRpFX0ar3TiNuiu\nOEHUtnz49ylKsOSZGifxkK0P/eJFCLP2/u5U+vqeGMyShFYzxioBmOzcsnjy\nq9qiCVw9Vf35s2TqId0xes/9WBNIRo7KEaM/2HXd0AKtYP0hdHhLHL4pNbj2\nIAFPEh8jYsAufrbpS5UViOqbBngKADjAfbQPXBS5GM21NJyAVxKutLIEW3at\nLje7eS6V/HwsP/byQiiReSadum1m8YpnBxOoVLKp90+fY1XNDU+hapXZTDwn\nj3YlDABbpG757/OVpSGsZWuNTFZaIwo2ZeBHYB41lCSHz1+DbiHUZg2Hfqyd\n4Spt0Yufc8Idgbfg7Czn8YJ7vbZbsuanHfVlvgjSyJtKFQeUHzvPMPhz7zB9\nmi97gR4C21Pcqey4uSNzrzm7eX4udKVweTdJZDvKcaSeS7ymjzgwKM+xB1ku\nl3kX\r\n=Feu9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDQTCiFkjkT8GMTLgoEPLfbEhKPEpcfKlh+fkW4Mh+gpAiEA5PJmsSKXAm77082vbyub7VGRcH+YnrGLCD5ugyrTubo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600075391-b8b3edb4.0_1600075497714_0.028115032678611707"},"_hasShrinkwrap":false},"2.9.1-next-1600076233-5a75e0f5.0":{"name":"@xdn/core","version":"2.9.1-next-1600076233-5a75e0f5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600076233-5a75e0f5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-gciHNO+dkvkUlbtNvgWssYAp3tBd/QTcavuiXfuUEVfeApOsEUiLhj2/0GPbPDut3x2Za7vgYWG7b0MJxIQw6w==","shasum":"cb19dffe9ae47fdee14d02e6ba4fa06b053c1611","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600076233-5a75e0f5.0.tgz","fileCount":141,"unpackedSize":686847,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXzoiCRA9TVsSAnZWagAAko8QAJhRcS0XecTn4d5QJSvP\nRZNc03ngZmKyx7rr9EFGue//GIvSRuVR4QD3VNla9zy53HDKfe7/0US7Gb5A\nVrwly7IP97knRge8ci6tvftx2nxcO/PxOgoc89Z7SkTDqXA/2xMggtdeYsn6\niJ2oU7Lf5RqibBzWaC7hEJBA3Vya9M0kj62f197+7lXcYSOV8pGnWoaEyAho\ni/qAWNIOX8cpw+11K66q6wS6ia38POk2mluXwS71/s7LUFfr62weRqY9FQxG\nM7daIu2K5KexRwcCp1wSJcbC927Fd42V5TuiJ/Zj4EWl+o8/ZF4InPtEVO6u\nHR5DrIYfn/xeJn4rQGXgWzJsQSM1y2zU97WhJQqX/r34AwJljKTleD9DwY7q\nP41xan+NP9F5hvo57+I9W4YIGnjO2xE1wsABxBWWZAnqIa8g3/toRbJaY4e8\nMEJmNhj2weGFKUTGhBk4uUcGmURWXc94+6hYFWbSetj/gkdYkF+kk3ishJtI\nv8b6fOAb3P31KA7zKj2YQ605PtSGtXYcyJUKse7wGBLUXCV5O7J/fpZve2QV\nwtW7ljgM+qgRX0n63CZ7LKbKitmL8glf7d59v3OUyip7pGOEHC8eTLIQDwKY\n/+WuXEbUZjDIrBTYBlkc1/deVzuCZyQNyR1BCj0g5xHMiehcu1LIP1L9Uwn6\nADNj\r\n=5IBx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAMmBIdmjyixIOAzxxpVkznyNYykKyOZ3KPddWed+IPLAiARTNyp3M1+ZUPpQEz5kGbimo8rIsw0XrkQeikLzbbhIA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600076233-5a75e0f5.0_1600076321796_0.7635536277585013"},"_hasShrinkwrap":false},"2.9.1-next-1600076275-9a99c13e.0":{"name":"@xdn/core","version":"2.9.1-next-1600076275-9a99c13e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600076275-9a99c13e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nmNEYJKBlXpjkLgqcNrAyOaPbV/UDstOpWhfJS1mhgadmc7WOdqOkKWHqJDyEvrT5Vmn7FeLE/4vgdB5Ym6vWQ==","shasum":"6c8147c8bab04329dbe161aee3340788a4938d7d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600076275-9a99c13e.0.tgz","fileCount":145,"unpackedSize":695485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXzpRCRA9TVsSAnZWagAAvlAP/ihJCEWyYYpkx7m7+iuI\nh8kVl83lq2F12LUS8eobyGtRGW5Ya0aqd8ShxoTgWO12kR4hq/jxic05x28f\nCB9skl+yB2Rjp5hoMZPhCby9kzrlQ39CdJLedVsSKlwxvViHdcXHfQaANSda\nNB11Z3uYW+e1zx0NiKWjHl6G8LOcjdXzaT2Khve1MWabtGB6vVRQml2meMGC\nFW5qpitZ3AWhX1QlcUuKHsQRTCbEcJC1G5z+Q67lS5zwbMbAM+ARfCe0qBMe\n0iA3dp98UOYHCKxCY3g3D6bE5H/O0Tvy7BrGZNR88CQ0WtO6YAKH1gFbTOA6\nJL2YCkhWiNFH34ZLbW6OL4q3fnUsWEYH8QCHetsQtCsUywWur5jVzDCLDpzE\nnx6YyOgJ65snzRtc7TGRSS0q3WGbfr7r/3JAtFxZejJoqulr52w4SOOWSGGN\nQudRrVYLONamjn+qdvu8HBx+jCgfRFXFjCQpqM5MD64xnINQBefYunlwRguF\nKxQjl1uJvB5d2ez9V/XWLsRlttHeyzM2IFRv35rXSMc1GHQw+BcAnqwBEluX\n0nw2hEaOdyJ5DSVUctnXMtH0PH6EQ77femVgpQdiwTlQcFhDCFgf4fj0/7B5\nzwEjCbHzQDy9f2dY7dM7YehqJkCn3lDgSTIE1IbERSF65D2OR0T4u+AgX1EZ\ngt1r\r\n=7woY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDPvhXpAN2pMDaoONFy9bz0qG85eF0U/d3qIJ1F+y+5wIgGcmn+TIIF4sbyKB1zk51DxagBT33SgR6XRG/tsb6F+c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600076275-9a99c13e.0_1600076368468_0.21528660333848304"},"_hasShrinkwrap":false},"2.9.1-next-1600078156-5a75e0f5.0":{"name":"@xdn/core","version":"2.9.1-next-1600078156-5a75e0f5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600078156-5a75e0f5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-RSfA2ievJ1ak5U0Sy6jgEHNIIFQ88RHGGjev2R0WPgXU9Dkc9QoklWLOb678O9MeVsC3QobeQ8fJeMXGXaJKyg==","shasum":"6e56adce90f82d7f62ea03354dd4ef363bd8bcdb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600078156-5a75e0f5.0.tgz","fileCount":141,"unpackedSize":686847,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX0GqCRA9TVsSAnZWagAArNQP/0C7MSKSXKoTStgqm7+c\ngZ/HYn4vBYh21+7c0QmFSaJumGopNvLdqujS+4BA5QFe7RUfIkRo7U5EGQ0J\nUOcapomT2WjQiiK8gQvVkpxfWFGvYGAUpWY7JNdnl3R4zDqBptKwPtYg94gM\nX268Jve3X7QYPW7KHO+3vtbsIiT4BfyXc6Gb4K0dqcvDUBE+COy4dR80EO+s\nmTdWFmg0xM7MfGHxG5fiMmZZGVDC/rbiR24otRPA4hPVcYaZgFNQuJpymN9b\na9meIO91EgDb08aezR58jUpG6JQkLa1A6DdK1z0v83CMERtIv+Ip23aTbjvX\nzyNxq1VW3dvw4tJvDnNgaVM1JCtzieLpJhzJzhZTXIlKVUp9WvSg4iGc0bR2\nYcVd8gcFMdHldTpZLiR0AH0N78i8LJiqqBhTse7wJfGeZqkzj4051hyCSxH9\n9+1f6ibvVQXJAtG4m4Hh1oK5QSnrsvgCeckLbVgB2vCo8MhEazM6/rL2ED44\nE4caDcmyFkUFXdM8QIJ+nKXR68gjja7tueVG1BgL/T6DaxLYwC4BvzL/2DzO\n8N9jqidqyQ/ReQ51K4yZewwfqgjYenLZST06/kmPJFtBlATnz/fh0urhq4MH\n6y85jj9HDHx1jhLUJGcIVZqz/CeTXO17M0t9Ff2bY6dWsiJayiU6JCOZq4G+\nPTfn\r\n=yV1F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7d46s4qmCdpgWrLcccYkKcL98BU5KopugIWRKuqlNDAIhAOrZZvLtjpMyZUY/Rn6MeYjOmW8jImwwStFLNcCFVWo9"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600078156-5a75e0f5.0_1600078249471_0.8240112630802929"},"_hasShrinkwrap":false},"2.9.1-next-1600080315-975ae28e.0":{"name":"@xdn/core","version":"2.9.1-next-1600080315-975ae28e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600080315-975ae28e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8oRyL4ewolxmM/OhJyOCh2ORQeFKKXSOmX6LyfZlAGuTMXLMNtqHKeuxVeLyIWwLnPst8Pu1p2JbkylNATGO3w==","shasum":"0fceed11e22ec757a90943b5a2c06bf0f6755ed5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600080315-975ae28e.0.tgz","fileCount":141,"unpackedSize":685960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX0oYCRA9TVsSAnZWagAAIYAP/2SJDogweV0lPVWttFxA\nuU6qDsKIUTgantbq+JHoDGOpNd3OOPbztJBM/98FuJ5e72LlkbYEGmbzf+gH\nyj33wm1hXezksGigM38x7GEPHK+qIIZ8yu1h0/4Y79fP9TSTZTjWVRFrz4Af\nD9bPLBh2g4CJOZboH03m58ZyTmOYXBAk1GurpbxY0hK+Y83gmKWVQdCTAhD5\nVY5mMjuyT/0EGxYr6SngLgpppJ0W8gU4azJy0rz1XZFOeAnfBWD8+DSkkb9n\nzOLdVkeU35TyboDt9dgp5lpXyRa1QWh2SEd9bT0N/lyfNmsHGNydFXO9y9r8\nFmTAFCrCl+XUoB+ZHsaRDzFmno3i0pC8SM3/lMP1dazf0AG7XBpODGUy6DtT\n6BQOuWXsLA80U/8mb/OWc70tYiPt7hewMTRA4Il+9OrBGnqW3QJlrECHtKo3\ni0a+hvnw6tQ0jnZ6Bnm5pNn4s02D9JgALByKSzXHOu8D3rEr+1i8mX+DTP01\nmaRqxAOyYhYJwaOVQ9Ul2+BZLcDB7gyF2Hynr2NHQMpKd6MWnwwjFH0teKpE\nVGW+D+qYn+/v6d9F/6cQU6WSpcfZtqAUQuM5r2tK4i3Lqwy7E0p7Bv+L8sX7\nOJvvt1ueWT29se0f8OnTELfu/G3Ai2Lwt+Ro8yMoRfjf7IUrb4F4m6c9fmAK\nebml\r\n=vz6E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAnn8/1Y20O3S6J/Z1Ank4xyACbMJ9sdfTTILEEiqWaQIhAKPxDQJzoouaIz9MtH4OCo4/j8H9B4z+bbSZXNEXb8FT"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600080315-975ae28e.0_1600080407774_0.5759662467234048"},"_hasShrinkwrap":false},"2.9.1-next-1600080385-e996c20f.0":{"name":"@xdn/core","version":"2.9.1-next-1600080385-e996c20f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600080385-e996c20f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Qa/hNLNUC+zK9eJjRMs8+gtJR+JvuU3DCeecGoiVeAZBVveO37UE2vTtkKGiXYZLIgTbqi2z76uOqUgDaSMTbg==","shasum":"8f70676a864a01c00022e6e3dd60c01071bc1222","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600080385-e996c20f.0.tgz","fileCount":145,"unpackedSize":692404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX0pdCRA9TVsSAnZWagAAKPcP/jJeP8upIpI661xNrWr9\nwe2fd4H/QWi0/sQsD/u7+ljtnbdpvxzlHZgbSDbMpyU8kAHoj5XSk6JRlCIC\nxU7b4m/wtHEOSKU0vU8z8riez1gFFeu13m4HIlUb9l/9Z84NWin6Cl5My9eF\n69MQLO+JhyQX4WKFyLrgEEjCBFihEWQqDhRTPAR/Ka0jBAkpSJTVmfc/Krl/\nFeCQuaFlCSLtbe7nSu6tzTy8Yim2t9hDEmT5dRvrp2oqJVb6vCAdeWY+f9Qs\nNiartOuXTgnKZWSC2UaWRlo9ztbjcPSkP6Pbsr9I0YADz+0EyBqb/SzKCHzJ\nBdZGb5LP9RHQI973cHfNSKyn8wwunsgrDIJnxgtUsDF/7YQm+q2856c81lvX\nf964v3GwF3rdCEN2SBL4wcou2Rn3G6ZaMd2hbpyegPWUBB8sfVeqZ51RFNot\nAA1YBTfvliyrgBjhngSrxkRNMxuvX2d6VMN6m55GQ8Q12ndIL7DeSxdx2yZT\nCv1oJm3vK3Pe6jn6oVM6BXLjDxoifVWOahh/I/vZwONygVKdSTROH/RHynRV\nROfk3wkT572x91sN5Ky5e6/4lV5MlolFuHF+34nwSkMdriVsL7bAzMuXEpAL\nhuryRQVbCHmfqhO90azCqJcro9c8ypgMzGrAqloKXX1LpKZFCMKCatX8aeUC\nJVZ8\r\n=wjnL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIECo7gsRFvx2MMcsKqF0Gc6O7WfGtOb0ZEXWWKlPZuLdAiEAxIoIhpkNn41WKKekIb1L1/lh+pdBq3m9w6IySyvuaAo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600080385-e996c20f.0_1600080476597_0.27437264629385827"},"_hasShrinkwrap":false},"2.9.1-next-1600080519-95eeca29.0":{"name":"@xdn/core","version":"2.9.1-next-1600080519-95eeca29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600080519-95eeca29.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-BTF9KJSsEb2F8vFgSQxFULjlRWHE7VmxK5JIVbwnYX/Tec2bSgb1UmZyHFlM6HBjw6Xz2vEqWpwBcdDILm2kFA==","shasum":"f40237bb819b3f98c2413b32a0b9ce87fb5928de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600080519-95eeca29.0.tgz","fileCount":145,"unpackedSize":695485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX0r0CRA9TVsSAnZWagAAq38P/11qCGN5A9MFzSYQCrqo\noPE6+DlWnY7nrZilLA6nBR/b0+QZk9WiMSsVwwrMqv9xVhWdIBDoB1fTlVLz\nQzoLnkK6jxtW/myY0QJBuQswYN8v8vSAgWb7xsFe/aAU+MUG0pJV7jAbi9ZY\nbeuKb3ddsTALt0o7mPWP7qcVObm6f+oCQ5MkJWuiDr/D04wKWbqPMGuiiR+m\nHBxeZ9vOAhv9INGXavXuW67s1CDoKEUnELpkVWMbnEr06iBYxOuV02wxE3GS\nMwGAidQlh2IXrzj2k9UGrNsVPvPi3ddcQ3Esktcm0Sl9KvjrIJZxUbojjSzF\nECiXArnME1fJksrUC+/xNQiJYM0bI40aWm4smuAnxHwrgyCuZQJI9e/kSLnr\nTmruDkei4nZXFAbgv41+iNaznv8tY6fN9O+cAQM+P8MipPu/TjfIxQzCY+1p\nS6itQigIKHAnV5MpApVklRazl0Twzc1GuVAkqBQJjVdm5NreCVuDMJdx7I7g\nnezp4dst2V8kTrWE93dqYKtEYAOUStI0TjODZ0arocB2Udsm0+Hu//VpursA\nKOucOp5wzeigaMdZIyZibI3SyPxycVv0pLqcca/SDe5ZmrQe86UgHJIu+3Dc\nABwkOa6KAtIlHYFocwhJSO8YB7wGgkMlxOJDDW0IY/7J/fyUjbBI5GQ38IvZ\nNRYj\r\n=5Fx8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCY43PGBUVozkgSamQVAQqZQWolGwSJHceKWelTnYgqrwIhAKv9nAHyWaJ0nVRWU2vkLXGNbJIkukp9p7sEXFk3Xcrv"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600080519-95eeca29.0_1600080628487_0.2543987482054171"},"_hasShrinkwrap":false},"2.9.1-next-1600080580-46209834.0":{"name":"@xdn/core","version":"2.9.1-next-1600080580-46209834.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600080580-46209834.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-RYcdxSj+EpaMUp1BsQHZfmBAKR4hvlZJlyXD8xjG9aw3K0i53g7M96kYv+HB4FTX1uYNyNniIE137j/Sy5Q00Q==","shasum":"34acabddbf6022e0064879d9b6e757109eacdd18","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600080580-46209834.0.tgz","fileCount":145,"unpackedSize":700708,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX0s6CRA9TVsSAnZWagAA5FwQAJN8Gxcwx+GWZXAUdlGY\nj4eqm1wfhd2M6JH8cCEUfGqjjUqoXIgxGQF5qc9B2U1NmTH7WnxXIlsb27aX\nTy04jVQuOjO0M0Yomstp9OLE6DqbWXpLOnuv3DhNS6P66ajrcTw9+7B6bVbS\nGIKN8+HM6iTXLA74MB3KFQiRO76jvwJeAz9SFDLXrNUlDLLAu55j/FIicHwd\nkrccX85VzbCCjSwFg4h7XOZ5wbjk1ufqqQV3FyvHbPYeHfJzqb9neTFGEtrR\nIV/yLsDU7IP+U253aEL6VRl+Dhc5fd7W1rcJguPpk4lBlQ7V8rub6qend8QN\n80PgrmyzMJWF/lXsuYI0DJh48WDwpVXmZIJqrjBghhRym536k9L/1s5ZGEWU\nMzpP5q7bYXANMWku0q2sBJVLb1Cjky8IZc8kXbNJ8gxznQ6J7V5T91qZMWdz\nL4T7IH1LkEAA1KKowpa9HoKuCmV2pDKPDg0MXs7KBYLoNLEGP524SboK1uWi\nYKClI4N0ERLRRsMHD7sYzyz0fr3gVpGlVpJb8nkPzNtI9R/ANAmSHecmsjWS\nawFNSHKwyC4OVq4ehne1mOE4z1NkwNuUhjzCd3bCr0HBPBazg6DAis0sVXXN\nF+Yp5KuV6G1/DjAjOKPv6q7anuSgQBOf8HBb/DrdLcYZ78GX1wp40QrfhexH\n/xXA\r\n=i85B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDphbHOVsJzt6k8fgOWEx2PnvlPgwYGekUdZrg3JbDEJgIhAP2pdEYhuIPv2wiMa/s2LitwrUZ3NdbSjAPfSpKanri4"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600080580-46209834.0_1600080697514_0.21960745924920633"},"_hasShrinkwrap":false},"2.9.1-next-1600080607-f7546fb5.0":{"name":"@xdn/core","version":"2.9.1-next-1600080607-f7546fb5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600080607-f7546fb5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-i4CQNkwcDIPvmLYAQH5QJvO3WA35ANL/X6GbdDFc6JyEl0+Q7jZ0NuPt+NfwARFWwAobpLv453QGuoV9rtEGTg==","shasum":"86b9bdf4f7cf29bc65e2f1d2687904a1b6bdcc07","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600080607-f7546fb5.0.tgz","fileCount":145,"unpackedSize":701300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX0tFCRA9TVsSAnZWagAAg3oP/39IN2zde8rkMfKl+Pkj\nDeyHmOkEUqV/uNybqW/tzXrtxk86QamlWanF/+wIq/z2pzIRt7qpcopkFUWI\n6ZLbgBC6h6CMSQzpyceZQQb4UjfKWvCk39RYnhJLdPG719R2QBzu3iWtQaic\n7rF2FgDzX1ifXf0sFH/MCI9CZPStm1S3rLJ1e9z+NPY2HL60uLQB8QUEYdso\nhsc86KGiUv0eIFf2UXVHrEt//xVHP2liz0tndpu+BELRIWzFqiWoAAHpnx1X\nYco3eycxUOYp+jc2ELojNAZVf3ydLURWVE2UoF0EuR15qmTzDUzIeTporlfs\nKXdY+0M8b6xV4+rG/J21/aSUFTfUnX6t7b8F1rByra8t1pjJKtupm29JXan8\nlO5Jusz5aw8/vhxncd8N9TRwnntk8xETCitDmNt9F7HXaunX9gtUU3n3uF5C\naZtk1Q4LIS49xtSlYH44ZwK8RtlhdTTD9W/WCSuBv9rPym52FDQzf/brkG5P\nOGEyX+UZ8FZcId6vZNPMjHo01t7zTZxXynZqxnkIVb2crA+xTv8OQGiu4f7V\nRg2YtsbGhhlrPnImHdt1oDeDTHCSY6HHeVLZQTkax0DrfzB0BaI4TJA0hcfp\nHmeHWUSEPdwvuKb65oFuGCgm9nQImv6bEnRMagY6F2rJLpOafJFOXIv+8hWb\nGWYz\r\n=XGzb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfVk7eDOAy/V5A7cH++sYjuJkII+rp9RtEbhL7rOvqgAIhAI933kIsNLc9DBtGuR88QMa0JEIJdChTDuSLC4fZoNEU"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600080607-f7546fb5.0_1600080709295_0.9197725811146973"},"_hasShrinkwrap":false},"2.9.1-next-1600080929-1f640129.0":{"name":"@xdn/core","version":"2.9.1-next-1600080929-1f640129.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600080929-1f640129.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qQsWKfKnt3TSPMAzVMcMdlpjADw5remtBE6huQwu1ZQ/t4sK9vdM4XOPAoYCtVZIRAENRFRb63lmiehyypOhFw==","shasum":"5a455119ea0711584b85e0827a6ced5f1e353fd2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600080929-1f640129.0.tgz","fileCount":145,"unpackedSize":701300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX0yCCRA9TVsSAnZWagAATmkP/R5n3yoR4i6MSPzumcCy\nybO4g1iGTCic3FlyPlglA6J6XQtaX0PrGmX7QJMwOqr58uQSTq14tVD7jl6h\nv7xlH87r+CFO13leQUUecmiE4Cu+tl5GymW8hQlFFgvr1wJ7zT+NkfTlP8lQ\nm3Tezitp1LtHdKR5mAJHi2SayrlLy1KOYM56vDwVp7ZEfVq4DOghQ2fAk/DM\n+FEy2tLUj/kNZGjCb4PZu90H6e4kI/lfoYgK6YuPU1bYLoeIw6Dm0Hxx8FBf\nzIQ6kd+V0PiB7amtolxah+kwe6xnzgS7RdoyWSsR9KoONQqrNdiBr5v5+1P2\n4Uq2X6uYK05YRadXuLhMx5p1PMjqRjpDTz7lTKMol34tiU5no0OdHJMR451r\n8wBDV0Aw9oYgQVolG+wraZuTa/2OZji7PVFD8x6GolQH69ZJnY5vFz9rpn1y\nR0sDUDpvRje8oPLANJw7oZ/DUtzCCmjXCvXZyRTgBptxFmu1xfL7FzdXiEpX\ndQxH6VpZyKyzEGjDdFqNhfYLflkHX7zOS9w4kTBEHXuzCmQAGtdoutJBwQm4\n0JLKeLe9ISxQ6HgHz8OTnDcPKV9cBjn35Jhn2aRCHJubjLU/ywrXIT7MF7FZ\nygjaHpktPpIKu1nmp3nEbGpIaa9pLs0z11bpQNmwccOV/4rObHPyZz9lXqtg\n33bl\r\n=OmFV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICC0GUCUDsABv84dN99p2S51Vzx+yQXxgb937J4WJL74AiEAxnUHIAYih9jd3wd1Rd/taztU0/pP2lzzECo6Dc3uWb0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600080929-1f640129.0_1600081026472_0.07118825964108666"},"_hasShrinkwrap":false},"2.9.1-next-1600081620-0e9c6d2d.0":{"name":"@xdn/core","version":"2.9.1-next-1600081620-0e9c6d2d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600081620-0e9c6d2d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jEClwRsmDXCV+6A/t1LSRssvfTdHhtb/IVRC7URJUeXdXHHtIVcwn/rPwIU/106laUbKNmw+9OjQHm+eaTVPOA==","shasum":"727de2a7667cd064c7772182c4f3bacbf3d6df62","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600081620-0e9c6d2d.0.tgz","fileCount":145,"unpackedSize":701300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX084CRA9TVsSAnZWagAAvygP/RX0xYYmYg0EqmXMDRm9\nDmoy1Nt8Bc1TG1Uygy3IS3n88l/WTlsiaGhxlqaJv/vGDo/90j99sKK7GHc5\noxWxtyhu8/VNk6ZwAOdAYjyXcGIT572rDcCfk1UsoPycLrO+c7lKUq9MLaTe\nGzBnAoL9exIgybqKjF2jPL20YWALoPwqrkyS6EsFk+Xue6N5ktCO0qx0pDNL\ntBidMtzXC/PAzel9PdQ/XLzsq6b4i5m22siy1JyuAkg1kagPTE39pqLEPjA3\n8yLRmlfzPc+Nu8GrYM4aX4DXrKNLABKEtsh3yQAdSdUQt+wmWOe6FQ+TEuhO\np99uZwd/5lm6tisVLEJQxdV/Hg5w2yv6loifJrqjr/jYwsRFov/CmTlcKnGg\ndo2GKYhxLfdwbRTkxIC4wEMj5+6ScGjM5yySkWhfQG/iEcAM6pg4l6h/cMyG\n37+6T0WWgTZv+CYNX5rO1nDkTG5Bpw7iBaDNMc3XY2LOLC0ab7OpKqrUaelF\ntfdCZYPOxLLovwP776Zd25k8oeA/gams7MQLjVLrG8QnhR7hfjTNRClX6Gnd\nR2romuem08UDde/fumiqf6WiNFRayOmBWk87J6U/KDz8Yp01E2ZnJ2cM9uuO\nzcg5NilQJruJkOUQAGZvXNfyXVkRNgW4Er67O9fodGtMulktLvp4UMArpFJO\nOOfx\r\n=Dyl9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXaFvu0gT4Oy316BELb57vNc70zkb4W/nfedGa7GNXiwIgINx0OGt2geIbNQ8W3kafmfPOltsADg8vhdENhCuUQCw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600081620-0e9c6d2d.0_1600081719635_0.7973501439551729"},"_hasShrinkwrap":false},"2.9.1-next-1600081932-21814d75.0":{"name":"@xdn/core","version":"2.9.1-next-1600081932-21814d75.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600081932-21814d75.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-E5GzbehzXBLg46OBcni+Udl44yDtp0U3Kcf9U0i1/hPAorYnQEP9BrgXOnOHga6NyytEsKzh4V3D7XKElQKaOw==","shasum":"f5beeff176169dd32b6e7c8e267a0bb819658814","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600081932-21814d75.0.tgz","fileCount":145,"unpackedSize":702187,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX1B+CRA9TVsSAnZWagAAnKcP/2k04jbaqV0G5iejXnW0\nVYMLmO8d2TkSbbmnq0t5+yblgc/+NOwtRyOg7FbwI/33IIDIz2AqRyNZ5Dr1\nB0uYrKupd2S+MZNpbxuKlKeW+8771ggNTftgAHNXxYocb6U/RhoYMtczx8Gk\nhQ9aHmlmpznr4WNfnb6oMfhg3woIiuxfwfPAfkJu7uJOva8fEVgEMqMg2yRB\nELCvsyd4NzBu9jz9LXqexEA0jIccoII5NjKew3rGkTK/8r5IFIIMYyiujGht\n3DSy3uJGcluRDW9kTSHQSWzGE6Qnen3gT5tFYcDDpSsPjL/NIO0UVtLVbnrl\nRfm6WZpdZdv4uW5wx8FXQEBSjzZIcXRs1noyeH+3gm8Pnyb/f3r9phAKbQCj\nWDiQSZmJoMl3hOVcEUW0vkcB7dUFUGskcERM3Cm3kOmBfElGhmWMu7y/cymL\nuHT8aNoy967HjPCbpovNdQ2M6GtIBWrw4IVXLIsdi+rb6FqzZOqNrtHYHP1I\nCPHAr1m0xId0MjEia5n2ytYK8NJ32d4CDg2rBEJ5ksCjlXroMhaKRvNVlyf3\nQwI1C8hUltmw0KKoOoqXULH1hi7JQMD5bpvYCBRK0g0DY9LgSl2BAt+zrANt\nBeVMcW8L9vWzY/3Lzqcn5DCcqgQUXLb6hehCW7lASvzr4BZU5SBU32vCck16\nkrgS\r\n=07zD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDwke31TIWWe92hfEJ3v854qYwd34WHZIwLxBVn28KUFAiAIAXO7PaysLE1daTKEvZ3rn8ab8I2P9wlrlX4wJq2yqw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600081932-21814d75.0_1600082045891_0.059982335526663766"},"_hasShrinkwrap":false},"2.9.1-next-1600082194-3d9e7931.0":{"name":"@xdn/core","version":"2.9.1-next-1600082194-3d9e7931.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600082194-3d9e7931.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cGEK5GUl6B6JJBb9m4YZAkOA4YRCVSLlk7bvFWn/4q5FadUbY3kz5md8c+6BJjz2mA6/DvS+u/ABQAuHUJLHaA==","shasum":"5af0d9ea60b1df882fe9ff0c81c3047eb38ead84","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600082194-3d9e7931.0.tgz","fileCount":145,"unpackedSize":709225,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX1GRCRA9TVsSAnZWagAAzycP/1SfEdHcTj0OdS96y3uC\n5+F8sXkGRqJukxpNPZR0swjgtWdOpFXg9l9oiJtqExaoP/U70/OJPzjUNpxm\nPAoGos5m34+6YnblLTq0jLMWQiabDqBInqmSWuf/Xmeb7vri0oxhnalwCTtQ\nqD3KYqItE3bPAI7cEBnzhcJGTMtJi84qkTgXoF7KI7/AP03BIk9ZMk9MLgn/\nTisoMqP1OO6etf7nEIupI2akP07sbepbZBck0pRvuGKKPqgz/zewYWncHJ3+\nj7WIu1tA0maUwINPsNKX0+GO0PqiSV9+Hyx5aP6FJGm1rpmd2eU8WtsTCDnE\nMC9eitsdKfcWH9kjvF6XETbgsu1oWwfN/lF+/qlHftaRgFUPV0u3e7p+99hq\njk0oEGfvgFTudBEIVlPmL+ECkG9CzWTU7ghq5AIDGwWDDTqnyNGxRA5rvrPs\nDXyNOj0daU9LcNb8pVQjut1HwYPped+RS0PQZyufqtn9RV42YILO8obX66To\nyTswtAXbQGC67tqUo7wEchUS8malSSwwyfO2qfrER4N7S++e7XNQODmaMjlT\ngxCF/MTabdyQRb0a81WILWQRAjRVaOD1nSER9CbDC49CLOwT4EllTKUKumBl\n1EExIlILB+WjzvqD2/erThmHjn0ydbp/zmB4okT/uzmVPHJ3ZI5DRv1YDJTv\ncbC5\r\n=pG2M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICBtKEuzYSLtjR74G/3EMA5b3dSoN1plwATwtYJObaL9AiEA2nbJn2w599XjBoBTbH/jGrieyIbB6wtn+xuE6beJkII="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600082194-3d9e7931.0_1600082320695_0.1552839621448161"},"_hasShrinkwrap":false},"2.9.1-next-1600083156-0e9c6d2d.0":{"name":"@xdn/core","version":"2.9.1-next-1600083156-0e9c6d2d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600083156-0e9c6d2d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-br7tg2KOu51dLLAA9QikhaZS3zVhiHaHubgs9PP7CNzEy2Mq+cT6dL/R3vLkuAo5q32lIahMkBar2L1mNxf4cA==","shasum":"db89d0e93c9e760a16d9067bf48a73636665b5e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600083156-0e9c6d2d.0.tgz","fileCount":145,"unpackedSize":701300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX1VFCRA9TVsSAnZWagAA7mUQAIuFyJn9wrNfUsSRD4dp\n2QpeCcfDSmAwkVWIxV+tNsJQiXuAiPceQMug0jZMwKhYEGBzTTKfg45sgxpm\nmIJwaG5DmLHSncCogKrnrgcBWUJ5DXXfwpFT3sCjfyT3HoSPkrQw+zFq4TzK\nxuyQwSBj+YR1p4lhx13d/+k6GcgSstrWyKsOZ7M+R0HmfJr46Gmk3CZDKunF\nGOGcbRUeNjnglapRoBxWOndHO0qO4vWdzB2ax4TGxCx0r8uBJNmOcg9a3cYI\nN9ZEL+WmJ9SNg7qkTNqxkamDfL+FfWlebZat9tmD8YF9c1lKB5tYWu7WADvW\nXLhmGNdfRPvTe3gKpUXnIgKF1LvT93elbyQIOZERgycLxAsr+O+pxm6McNbR\nbuoQt/eGHz1Xe+eca4JQT+c27sBdWk6xtHpu2kFTcRzXiO8yyKKe0LtRu3YH\ncL9fG0/QQDdod0qBM7kB4X1i+1StTuu1GN8HOdGPZwgNd2hi+QS0M6kvM/Ma\n4eC2OHFbztVjMevgzgZ+Wpo0jhz6Hh2c//JpBETiy6W1ExSc6LyOqxGTH9iQ\ni3peAiGc5xakN8UdnfnSr9V03xDaQanvTdOZDpH8xLLXsPpLshBC5fGnD2DV\nLVNoiGmUk3ewV7olTlw/JnQ0uQH2H7Pdj+X50g05zlfTZAdaPNENWDPPecT7\nLvxR\r\n=OrNa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvoiQgkemu82mY34aRDHuAVNM1U++HIvQ2h7QHnxc6DwIgCELVlWOYtI0ET2f6/0TN762BsjiINJlPftbTlueKTcg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600083156-0e9c6d2d.0_1600083268704_0.8703453045976752"},"_hasShrinkwrap":false},"2.10.1-next-1600084438-449e7fa0.0":{"name":"@xdn/core","version":"2.10.1-next-1600084438-449e7fa0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.1-next-1600084438-449e7fa0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HVwzkWeMIbo/q6LyMGYcdn/FtRT2yFEd2WsLFNzy2dQ385r9RyEY8hvVZ8bbzFESvQLd+8HqkcjyxO0f8+rPIw==","shasum":"9d336f4c73177f88b947e6b8e9d7b240eaf60102","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.1-next-1600084438-449e7fa0.0.tgz","fileCount":145,"unpackedSize":701302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX1o/CRA9TVsSAnZWagAAY+0P/07v4VoeQRzaU4zV4bAY\nBqjUEvKqX/4nQqKSzdkqJIhbWIqZVRJtzm0g74Jbt6oQzHL9UVlnISTewk0H\nxsQAlDiiRSV1QNKmtvc0a+xsUg+1ag6HysM2Jh2SyApL5t+PZv9hTB0O0r1f\nWcAlUUok0qqE2oixhCOz2xcG3qfXosxB31fy2Yr9BjwuQyol8Oq2cJoRYqM3\nnNVrej0IMS/z03Mf86gQDH7OsrPl11MijVpPMuIJSLzgNDBexogpK2dcWFo6\nnaT+AJg7rtH07TwbteBp4vqyYBVNK1x/qm1bmRyleV1XDcejQlvEw1e31rUR\nmUpHqYcklEWjT3ZMgqydxAQ8NAn7uY/c+QGwHHnbV2KkxVtMPvthDhxYuYz6\nkS/aeLpqi5D4S/PaJHnTlqeRHKf7XSWj4+X5BjE7WI4Fk7/Ke5gBMMcA1GJn\nhEdosNj2PrK4YLxuhN8YGmWVooL5q9moPyvTtIwl231s02Y4GOfdA6SGYYIR\nmxJTEqRKjOQKtFqLpAKwIaoCVCLqgOcAy07KBWcrj3vuouHgXU1ykqso4I5Z\nGtYggio9EDegd6m/7aMHrH8/Ky41urD97GdSZht2cJkzYsuNiUd+uGVXycU1\n2hGgIhPoksPQp4xhI1JpXQimHpMRmtFBQTQ9uHf6m/IofS7B25kpUWxIG2Gl\nYJgI\r\n=GG1Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBnmktAig+5lXUXF+QQGq+YOASyFsx9/Gmaas2gD2NWZAiAXwBF9zqRnAmF1SLFaQOBcI6rwtyWjSicuJfY4LPWm2A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.1-next-1600084438-449e7fa0.0_1600084543078_0.15984924334411743"},"_hasShrinkwrap":false},"2.10.0":{"name":"@xdn/core","version":"2.10.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3F+fLWQ+/KNHT0LKqQGklfselUIC7OiVU5BxxYSOoktkilRa3CRS/BFiBWYOu+PRtV9TFFVphaNEw6u4ki2ZiA==","shasum":"2666633b99631066b3b2dd590883ddc63515c531","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.0.tgz","fileCount":145,"unpackedSize":701248,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX1qiCRA9TVsSAnZWagAAThQQAIc3zOCgRCZtmJcCRsTm\nfTWqCfR8Kji/Ytcehz3nIATILsFJBaRV6oaiOuOmd7501tYKkFw4RYudpkgP\nRzCEjP20fjgg1AhwRZgGoYmVTeAGvY0mFf+BVm3ZMRfDg/dmH2KTbdHjhikL\nx0w8S4JgfbFxsLmqfmGzEv/rw8zUGzDV2nuOdVw8bHnZh4yL8D4V5P63kT7s\n6e9nmwhPTUanSX5ZguMImbfO2PCafOgmuS/jLQMEr4XlhbYa0WETr/iXcB6T\nUP2LqVw6cxxkyeGl0DsHkSGKwAgX7zqjMo4e3THAHlNtcw3u2YsQ8/z3F9C3\n0OJe6fkTFDS+NoXh8juRuR/HMhtKX9nUps3AhSDDPHRIbKXGm7sCPLsDBM1f\nfWXSJZV4S0RlEPdomlwqFksAvkV+XDhOqJUAIuA0V0cZgcSaNkklhiGzX4E5\nI+8JJt0IrsTN9txiAEfEvjvH3Ji/l/NesJzVNx8rKjA37EbaUhyUQrKjM+Yw\n5YpyaaMLS8dzHwa0qq3fHbLqnq/pMP8uJPs9knBkLwlXzzYwf1oVK5sVt21r\nTZctR0Ubr6U47FaVWHDxppZOXtdjjIbSN4iGNc3lZXj9OW6ruhrhmVo6hDO7\nZK0G3iqPhrVFRueQmjYfIgDuI1ccXq0CnViAlf/mXrgY+6d/llF8HrIgBKcn\ns/H+\r\n=8U6n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWJLzXkbDMbkxK9+5EMLShYHj1I1aJ65acQM9rUm5KygIhAOKMS6oM7LVpbm+u0bOEyygEsmt6iPzljVTw2kRHh2EA"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.0_1600084641552_0.6176521969347544"},"_hasShrinkwrap":false},"2.10.1-next-1600087699-9ec9c534.0":{"name":"@xdn/core","version":"2.10.1-next-1600087699-9ec9c534.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.1-next-1600087699-9ec9c534.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5/v6gpC8mhYmXh69GOaMXBJ3HO6+fGek8UzNYybCGC7yJvgQam0BOZXkSnfSLnHY/IvEWLFmOuwiijketlxzAA==","shasum":"382d008676645f9e70e9353998dbb809fd5d81bb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.1-next-1600087699-9ec9c534.0.tgz","fileCount":145,"unpackedSize":701302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX2b5CRA9TVsSAnZWagAAzQ4P/RcuUXFeWxpVOYCuHk8j\naQXbKSfypM+fdUM9nhYUB6h3NApuw5hph3YpPlBj+SQrMmiwAY9kasEA23VN\n6S1NLASgxcutK98eQvt1+qZL5DhORAVkBjkSBOiPHe3F5UXzOkEkqihNQ3TI\npHVk3tth/WRGApSpQo5qoyRVs/Gb9l/XuYJIOdR0z1SLilF+rYS6ipr65UuS\n8s5D3OdsXLWH5xR4RaSGDfF/GXcCKQ7rmJOFG8TqLi1+a/NBSiZb101m1NDg\nB+zBfF6KpWXNj2Qv8/bRkMlVTUD2byOPZyMOGQkZfKP/end1rXmUHyCWSKde\n6nIJzP3J+NNSJWKKfb94uOUkxRcV1uduIjX2a0QDP462xa3NxxHsbtV2Rz9w\nBa+vR9hv8zJGSg5uX8Qk2t11rgOtHC6+94apVjeDqQaHPD+CBbaMVJHXYs2F\nrWXBl353wHWLqpmn2RcoaZ/lOiQT7vm3yw/Rg+Q6+1RerBPMpUP9O2nOWsgf\nU6yyIkak8sz6Cq+3UwTQIsl474kYU2Im7307X9qFXxsp0MaMR/ajFPrAIabX\nSPQp1jiY+rLhICOxX2sUX2XXDHoSNOiznxH/Wzh29P1Vhlv7wtV7vzcRM3y0\nu5GkJdLytPxLBZwzQppxI5xn9Oae6usOvaLFkL1GbwO9hBuiJcTMSKwhKzja\nu7R+\r\n=CVi9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFtki0NzXtWzFnqQ6S62dB1rO5iIxa/2pSEmXdvPPtuAIgVglGIjqf0KgOWBlD7tYkej3B21dPMlF9R/Mj6tycVTc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.1-next-1600087699-9ec9c534.0_1600087801143_0.17131913713473912"},"_hasShrinkwrap":false},"2.10.1-next-1600088600-9ec9c534.0":{"name":"@xdn/core","version":"2.10.1-next-1600088600-9ec9c534.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.1-next-1600088600-9ec9c534.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dOIB2XTrB5U3cp2KzO0mH/lQq9lrbWx/7WsBidwopuNrphga3j3wA6VZKUFDBp2Q0HIniWrZwiDKjZPA/6fJag==","shasum":"179b281bfdf969d964645c695d387aad8fd99db5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.1-next-1600088600-9ec9c534.0.tgz","fileCount":145,"unpackedSize":701302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX2qACRA9TVsSAnZWagAAZSkP/2tfpBHACKLQz8V3qGPX\nWgEL0RtGU966VzhXIbgJwNatrTf2zZpmQF0hWzdnrKQeX8BFScXNzZy4vmZf\nq8S9lYN6ldrbOnkV9q0lknfZheC3gMCe+eIqE950tlv97bArka/yPXs3ptZ4\naxdHIG+ci4kTvvhNW66LF82R532jHhcK909ML4jTxU1xf+qBJQJLz2NYnTLe\npZKav9rYFj+4FBwEq3a93kKyCujl8a3kg6d4n3cAId7Z9rpGeQsB2TAS5Xy9\nR78jlm/VsC7UAPjd+JxcZ7+wz0Dx2p0hTEoNp8P/a2UCZH5QTFQEWpzxwQE2\nLTM+WViuqduO4uzk7+7IhVXaIKiYBdFeFLrsNNitTMT2zXw7fMHbPcdiBjdz\nv4+rIlAgkyFXhXVTJBnFN0UX4m/lvNt2LEBHg06G/RBa5gX6CESwESFejyMx\nzW39QX8slJxJ+mbH9zC2JBfYXoSndgSWpsmy33FcADtd0OOfIcqDOUbRa7wO\nudwK6LJ5QNOaelgLobW57RC//TuioM2Rd2+cz9OyThk2WABh6c5ZdZ0WVMps\nUPRiTchnUzLMNzKAn3va0SytkkadDlGcd4zZDkNjEjCu5YjSdF/W8aIdrpA/\nIrGzhtjSfWgZMjygFrPC4IDyE7OIBlWOKTzI+KBNgwPdPgrBx/hmNsvre3YD\nrrdY\r\n=0kt2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBhtH+4AI8H7auf8H9GXh2fj0lv/TCKkz1haJ0PA2YxQAiEAwkwd3ipjIJeD8gHa46yfp1V8ZuTuc7+BDmitz8A7UoU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.1-next-1600088600-9ec9c534.0_1600088703454_0.8727355421663918"},"_hasShrinkwrap":false},"2.10.2-next-1600089639-baa26ec7.0":{"name":"@xdn/core","version":"2.10.2-next-1600089639-baa26ec7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600089639-baa26ec7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vBxq6f5AF0LVeGSCpEmHlauDjaWk+G3z+uqHr0kMntALaecSX0lnHXqfGq/Kg5PO/vHCZr9tG2gniLWHfo0jhQ==","shasum":"e27e7269cba478ec940b23d5cb527241dcc94a88","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600089639-baa26ec7.0.tgz","fileCount":145,"unpackedSize":701302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX26PCRA9TVsSAnZWagAAG1UP/iFx2zPKuhSrkB3CcwGH\n61u1Qv+cWneaHcEA1sAFgQnsobkPaXwDmV3523G9w7U0yyt22cyd2P4QTsFN\nmvM4JT29p4nDgwPV3ObAeusUdiNetYu8u4F6cMoOeZp5nofp3FKLKMBAP/Li\njApfNzsR7msndpAl5exFpojeAYWQt1UpNrEpZQgL4OV4aiJBzDduIH0178nx\n3d5NiRkiyldj1LgPFEd0KMs5B8izPplokBzidgmQpaQegSe3I7eDjV4nf+Qm\n7gw1XLjoq0emd44mtz8HrLhVs9tVy2FXV/aVDqn8ciw0Dkl6K7oo3JjRoRAv\nFXtWhcBCdHDU09NqmZgoeKWbIkEpYaltlQXiQNNnbk8erlE9VOkGRu5XvYQo\nT1JMjXGtFO4Ma3quMAqunvBN+fUvVJats9XrHbZQ8bMjMgzs+bnIQTKFNwDe\nup2E5leDJwAJG3SFj6DCLxobBBgAxQ24okuD9M9G22VQpoo06V7wDg7GSlcf\nzZzqLrgGmmua6Gz8t9l2OdVqFLT1N2MvYadAF1q2Z9k+9U8kTca7O0EN2VTT\neOTWc2VTyZ3gYiz+0fVTxOT16zXOFfcrDH5wfH8da2x9+5Jy1ECbGzxUHe4j\nUh8HKC3/EVi2T5OcZFODlQkvhrqQZyxQ6vgTTIMkDNUq/wjb2ktW3FsHFMil\nxcvo\r\n=Ag1S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFFBkvOv6dPL0OfKQXhjXRqceT194yBNOFEOuXkTNEd8AiBkR9szAStcFPqQRymwBwZPF+r1h+jlDv/QhtOQdcNNdw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600089639-baa26ec7.0_1600089742654_0.8077393045616084"},"_hasShrinkwrap":false},"2.10.1":{"name":"@xdn/core","version":"2.10.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pLXPRMFMPpMstGmTfDIlQfv7em18XcjKfiKuPL0JX6ofqgG4cdf4magA9WjXNysrEUT3mr07bz/gBrlF2N4LBA==","shasum":"59ec6734f2ef028b45b6b9d9df76d0462af22663","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.1.tgz","fileCount":145,"unpackedSize":701248,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX27jCRA9TVsSAnZWagAAnQEP/05IcYcUw6PPo1iQB4QW\ncj8c3kTY5zWS96mIqMS57+mJVY+pQ1xLaZucGl9X52OB26C8cW9WAS1+lk0c\nbSwR2QGFB1qI/Kep2azLRVqb8ob/NI6d36SFt+VXyOw7YYeJrEmA76GiDzZU\npfVQOuX/HD4AWlw3Lt1REi+NCBd6/enSFa2ZZZ2m97USdGfDxsjSBymEsk6z\nebQarT2W5cvcYvFpYhpPflqoNXN19Iz2YWviLiw7PDDTkvVaeqFOP2zXb7BA\nyYv7FNAzAOry6+L9K7gPDRgTBj6kPLBrl5mXUrv7ilMosLU5BMtAI19R3ymH\nkF8K13Ys4+RpaObI5bg6ov7ffLJxawJYtgjyc0iHMOSZ15nKjvIf9Tws31k/\nKd4J20d/m4VYJ2RMQfp5PSpjPygx5JjmOlPjL70a1UUr6dcVNzXKeC5p9v0O\nR72a7zCQXQW4pzoxUXcDkLyyZZcSSRVEjkD5d3RWiU+Fz/CCvQDducB6UX+W\nsm0BkvVJ9PILG/ZATLEKpuo4TanS8COlCjgIHB8qHf5OB0837W7Sh/Ho5kzh\nMzkpfczj9GIlZI4+2ywwNB/3YwcdwhvEgxFZEivpdBVFlNx5psBqAWzeAGuh\najXUGPaIaA6jQ9cWSGSIOtgn5FtIeBLAPKaaQQ8NuwN66zLCVpaLsdLjzZOX\nPVuh\r\n=C1A5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwmw7NtTAWvZHkiZy0nXCOjxf4j5K59GlF6xnOncq/PAiEAiXBT8jU3v0In4Z+X6fsM0YE0wKebQmWWIUX37QvMkRU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.1_1600089827032_0.612725858380649"},"_hasShrinkwrap":false},"2.10.2-next-1600094004-a6cb5ea0.0":{"name":"@xdn/core","version":"2.10.2-next-1600094004-a6cb5ea0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600094004-a6cb5ea0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WgVKRtjfuaIWai5qn5Y3VhnevC/JULmRSQGj0RBhDPmCHYvDPWmVHA/gNC4KBwhJvHlJhoKruzOtJFyorEGDoA==","shasum":"5e33691ee97d2361a92f9141c4ecf552e203d626","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600094004-a6cb5ea0.0.tgz","fileCount":147,"unpackedSize":704477,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX3+5CRA9TVsSAnZWagAAeX4P/A1wY9k2Q3wyyVyxffiO\ntlL+WuArli/Hd43T9AbDU7h+YB2787cmlXDYCdSqCsLXQFIljUx6j1QefwVZ\nu/2Mdt4Ok45B4v5gw6edB6m+ZrBaDHhX9cMrNa4k5PnTRkLIk6FIU/g2fhoB\n5Idm/skCQ+ZjbcQPoeVbdEj6r2FfOSI71BCajy2J9FHoWKep8/2vuTSN5J6c\nqZ8054aElr7JBqLyNQMsBSoXTdd6vRuMWTmSfCTj7d3OycBFmYeRc75n5OXJ\n4lCgRFvV9YcFsgzB6ru8OzkzB5vWOk3odS8S0vdbu/S9bMsQH07efQLEg4+R\noX+oY89BjCNJPKYBF890DCS1noNFrBK4hKTeufaCs9wJM/x3Ava/GmxQq60w\nH7uEPHmgQR4hqIMi8mXMBWnjKONILECyxWfqeSbytdorldDA2Ln5H/2faueu\nRDeMsMXcjR3n+/o2xRauzmBvYJ1etUIZiBRgpFtrTZDmrPf19n3K7D+MXUh4\nRyVk2uX/ePtPQaQxu7D8IUkpsKAzOYp1+nCVHK47c85pWMDRXFnj1/0qTlC8\neA0GOd9xld6x8cJ5TteVndAltNzXHDrPUBIBhJ6DJMvC6cAEskHiBs+CY+IP\nMxc85+4fLS9E2g1yeVvbv1Z2gnRKM4NH5lizXxHx2DC23WvZ6CAIZHX1W110\nCHMd\r\n=+r7I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLOii01nqkzMEKtvfTbFPsb4MGLfXvGhDUerlbIjNFpgIhAILUbje+niE6Yf/hinPCRdoPIDT6P5iac6oNNiIRTt1Z"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600094004-a6cb5ea0.0_1600094136825_0.088930805930173"},"_hasShrinkwrap":false},"2.10.2-next-1600102746-b1ab38ee.0":{"name":"@xdn/core","version":"2.10.2-next-1600102746-b1ab38ee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600102746-b1ab38ee.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yTWKyqIwHZn6gLOu6fMEa9FMuEWUZUQTiA37zUtOcwhPZJQg/e6dnmCPE9l+aVI5zPKqGK0buLpusEyKAjE0Uw==","shasum":"5bef7ed544b90b7878137986ec65ae50bbc6fe7c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600102746-b1ab38ee.0.tgz","fileCount":147,"unpackedSize":710497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX6HDCRA9TVsSAnZWagAAG+QQAJylYQkNtyEUsUAaqdIa\n/C4v9MAdn9DEQ6sFH2n17GkjTMCFWNclT/CLqfxHdU4SiCm9ixB+6GQvYfBj\nPSTn5eNgF+E1MhdLCNUsWZiOLseLVisePdipd1GKIt0Pp2g9AOzO1JJKH5K5\nQNM4g/geG0Nt896nDwPETp1uWD6o2/oRLi2sl9NE8gy0Z80uN5vX6hRlz93n\nYmKRGIBZfYiyoOowDLbOAXiH4TJYPalpU5DhhqLgKaZjZC4QaxqpYbpVjaIq\nNGvkWYwrMUIWC9fGlOJ3vsA9+a4oeIDDuXPTn4wGPUABB1NUMlAwgltyVudY\nnAfuEP2jrFuOFz/CfpIeQLi28gaznatPmv3p1QdDOLkq1kPusEGrBdDcrQB8\nOmg4QDV8JxhbHXeBDMlEwbqAooHOmm2mmaiB4v+xtaGvkvVFG+eNKUDUC/VY\nsIy6cz7t+BXbEicoLZne+GIT/P87XfIFN5dF2FxScV+a+J/uaa7mxyVRwYKU\n9xU5x9si4J0jTNu3wLtrhawfExmYemCzHtbeoao6dGgUOQsz4CKZ2KjSHmV4\n+xwzZmJLuN1mQdgi808M9fspRmGWHB4jB6YLz06OUORXRz47S7EZ0sLbubKY\nz4Amb3VGuS2ZMBvfPvTagBfJS8fvkn67pFfPkTC51CqWFrQ61+h1UQFyoNZr\nCb3N\r\n=cjRe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICR7XSR0z72MmETzpVFaRak15cXys9aa8kojQydEODw2AiAwQrcIFwES66iCq9TMBhFflZ0K05wCJzEUJ4NNMAHkeA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600102746-b1ab38ee.0_1600102851324_0.28060186514039764"},"_hasShrinkwrap":false},"2.10.2-next-1600107614-9cd3b3c4.0":{"name":"@xdn/core","version":"2.10.2-next-1600107614-9cd3b3c4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600107614-9cd3b3c4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+SZ2yuJoSEownEjeDIiSIkDXmHnKg2v5LTs9WnmANcmD0wJA/eCirfvZwPa1YhUxGJCiVRpzybfww0TSFERzjQ==","shasum":"164abf0acac0a7241d4ec1a56e84b80c887bc047","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600107614-9cd3b3c4.0.tgz","fileCount":147,"unpackedSize":710581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX7TQCRA9TVsSAnZWagAAi3QP/159a0dsuxGqlG9TEIj+\niHL0G6uEzUxHUvZzvT7oWmv8zM5BA5LDG73Eiuix81EViw6PPGm9kbXpTwPe\nNemad24YfIWJ4xMfy4JJowMh+iYJya/0/Z6R9oHswHQDoITU80sRKmT7hR0l\nGr5SahShcecoLkjDswEmoBkEA+S5LYhqZ0/uMYNJgK+43R6Sr7a1Egez5Jth\n58M9C/oKjXj3MErcqTex7b8/y6J+rOxV8ILUkxau4I2NMtbzt2Xh+MlThWOw\nPAvLUwvxDC7t0BpWb1McXc4sDDiC2tpDLr9A5+dcBdzOgRfZhg0b5/ZuvqvW\nW6BcnBxX/zvDZTuAxlgV14AuDBj66nIewb8V9hlBvxgh23bY/VZeTlqZo9Zy\nDDgn1t5xlxLGk3xT8bOo53ZlCJmpGL0q9yDOvBZj21555YNH5LwRPaG0HXr3\nMeC3OoMDuaZXd6Ac2vnWxTzFwSuWOW2jHlR6krt35cbO1w6DW3G4HsydLtoh\n7hp0VzHOeUttSZm7REDuH70v4d5G9fIsZ79UyTTOyH7pqpqW9rRWYN1rktJs\nxYrAC6PYC/FPRrjYhaqYV4aUO6JGKPViDjZw9iSEy9boG1Wh0g4Rk0+x7H1E\nD8WeUsaBPFPOov5o9lowmJkDA6eIUQK3XaRsKKjmyCle6qplRvf+uTwgikos\n2ewG\r\n=Nuov\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFZSxJsKoAE+a2BP3BkTJ5B66ZFGzRW9WIzSoJFaeYKxAiAJOmcpQKjheu1pqwF3yiOOdSIcJBJ2LOrg9wK+AQeYWw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600107614-9cd3b3c4.0_1600107727749_0.7040355663667703"},"_hasShrinkwrap":false},"2.10.2-next-1600157946-d342b075.0":{"name":"@xdn/core","version":"2.10.2-next-1600157946-d342b075.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600157946-d342b075.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7HUnKjZV48QHbk53PysmhZ+XPgp2y/umf2jx5keFCsEFfirD0dvfr8WYuJUkKBL8vAZXLu0D+uATnAzVleqaow==","shasum":"3fa177a46da38bd3621f30abb066c97f9fdc26f9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600157946-d342b075.0.tgz","fileCount":145,"unpackedSize":701302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYHlaCRA9TVsSAnZWagAAB1YP/2PNWeG3TBiitodN+iKQ\n44/rYNbUbXPjb/nLy13UHHKPnhFh1JJB3aXRuWj1UjRCbNQYCcEy1lqfmt5t\neFBAetftSvx0KixGfSu1NjySig4bdDKv9Mjhz0dmj0vsYv3m4cudePSkRuCV\ncBS7CbJdBrSBidPsWvP7XkX5vSmvvWVEELXuF+R8q70fbvd1VIUIC54q83Zh\nXh/Q32YwXppc7eGpnh2fYmylNRGlHZn1uCFfu30zsuOBqJ82FigFGY3AaSCT\nadRHri0cAkyErHKyf9kfKUYxGSeaHJmzC2nNWsNhINaZ+P53DK7mFeZKE22n\nC8lE5YWCPFL8B4yCIkCk+CtyPclf+kx1UMyBQlx19ZVDhWyylIGUq+8vYwlp\n4m96yFe0a7lHWrNjnetzTPeX65+gCcVf+DqQQPLJO3OiKXDkk9Taoi3xYEwm\nVtY2mncvdE/+DsgA+D3xYEVfZFiEkkGQX3d+9SbiHZxzyLnD9GQHmRW4xFr1\nKMBvfB5SYWGMgxnwtJmKPS/4opvb8ZL+Rvhjld3ClEZRXvXCxf7qsJmg8aYY\nzgSeA8SxJEMNBl3/ymeKbM5F1QettRn9xYbv+5pup+RcKbigQAcEmmfTfiSK\njax10CmgRxYtIIWYIqPkszKOqhBr2mNgqUcocNTC3TVN2noCfPlCsXRQlS55\ntX1W\r\n=C4MZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0dzO5xjh+Edjpk6qt0l55N8BCHYs8FzLC5/3ptvLHYwIgL3fS61FHOhghNOPjtHO9K0knYoOxJWACJz8UaQys+w4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600157946-d342b075.0_1600158041493_0.5261239776028599"},"_hasShrinkwrap":false},"2.10.2-next-1600157983-b221159f.0":{"name":"@xdn/core","version":"2.10.2-next-1600157983-b221159f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600157983-b221159f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7tw6cLFVv/GXpm0pv0ZEAQ+kP5Y8a6+Z8xDspe/+Q3vAw1i4uJMa3R1ziukfWHy6RNfpsqh/6OthY0SSX+XSnA==","shasum":"4c9b244ac69097734299202ce19b8d1a9f7356c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600157983-b221159f.0.tgz","fileCount":145,"unpackedSize":701302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYHl4CRA9TVsSAnZWagAAjAMP/2BRW2LEG325ZUmyttcJ\njcbp6fYlS2jnKGIn6fvNVZtaWDIesLemtgiLhyM9QbkV5IY9H+7GNSE76Mbi\nalJU5xI7rWWFcIUa++EhcdBQUv4/NMjPHIKMwUiFz/oITjegJhyt4a6Cj0DZ\n+KV70MoCH29UWeuHP0pOFz9YzYhynUU22DpkW/YnqteGlwlEulF/Kn+IC8aa\n9nd3pUJHIwPU3MpBiRz0PQq2E42papBvRtwLr3JxLcgBBvQd06WqOyL1SwX6\ncyib6u15uiohWjO8jMPh0Op84E2bBnOnx7BdaVu9jxXromIIvJ/bMxmnMl74\n7w1CPojDhQcnW7PVUMWUW3BJ0VgGyKyf5xSGdEsTvgyCTNJZVksdNlxsPJ/G\nIkjRyPd/ONKOKtGczVuSn38baIWxDour/BgUIPbh8r/Pdx1fWOvahH504BfF\nsWHQu94hsiOF3WSJIYh8gt3xqjM2llK/+6CmFeJD7RWsA3ZmuaRetgqmU8JH\nFJ9vZQmlK9WdDVd9M0d7eutXOv4Y4IE9e9+LUYlAeH5jn4r7uGnT8TsJADBw\nS6+tsZaAOUB5o3QwjGrqI2DpWrLVWY5xz0wiovcJBy5zl+KsO5auz4Mx3e4/\nob2EXdaZY2iWR8bNxADWGRluu//Bmb3B1pl3GvlTBuRKUsklpMkcLi6J98Qi\n9qBp\r\n=AEv7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA7BnngX8KPQvpIYhiK9/SXKd+Bh+qHzAJ8y8HA3/9i/AiAMXNGo8ITMbbOU3Gq9dyJdvzXaBrNG72aPo83ZFbcCvw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600157983-b221159f.0_1600158071788_0.6143000085142145"},"_hasShrinkwrap":false},"2.10.2-next-1600160933-3c3444d2.0":{"name":"@xdn/core","version":"2.10.2-next-1600160933-3c3444d2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600160933-3c3444d2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-JVkn0ktwqSMmcu+O1X6YPPk6s+rl9VzGAvjimDtm+wxGWOmL/Fr3AFI75Uo169ZwRI3dObdT7QCT1iB3UdNgxg==","shasum":"0df5e8c9ceb485e335cfdb9461bdb8c24ba0a5b4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600160933-3c3444d2.0.tgz","fileCount":145,"unpackedSize":701613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYIUNCRA9TVsSAnZWagAAvq4P/AzF/XZKIkE09SadxILv\nNxmp3Ml6TTzeKurdd7Xr6MOmneVTgvMx/DtRD/dzjtgGt/ZR1C03LIx7HkZI\nMZLA91brG2oNlGtfeWQOjLQBczPWx/bXLZihv9HTnyK6Hib/8R5oLdiUGkKZ\nON+ThcAhY9TKf7epMphZHXtS2uc2OlAuKkoeTgXJWmlIUkVo6u9hQZBE5Npg\nEyhbvVw1Y0hTjuERq8jRuGnibLGuSHxmu5qjXbBeLKn17/+y584nv5fydsZw\nSakLySz6CeREOedEk1XsL04uff/ILZcxMyjQtDdSHC/KgwKWPmhRrct3TV6N\nBCiOqpAiR0vB/dqIdTbMZQO20G8E595vjMGxMqUO78l5pf2F1uxNIaT9IDhw\nRNjA/gRsfSWnUWV3ktCzsuWwy+V40D/g18Fsy/viIoxkfa4ihDce1M4jXXCr\nOhm583zqrSqZSmzYRK6JAl17x6wAqDyrtNj6J0hKqrBRTi8G5vOHXATm+bjl\nAZWC79SHkIuSC/iywLK2Kt2xomBjmCbtOjzVJVh5pCYdFs9vPuvIfHBBMkpp\n+B+vupr3ejY3WaK2/Fl4k90+vZKBsqMW+OlmzcKYA+pz5x+7tx4m6Ft1Nly8\npDeq2QTCLHVg3tlw7NwqSInHiLmHKkrDBKOIeDkvJapspC+J+tVrCY8/REd+\npM1i\r\n=6agG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCElsp1faM4aBiEXqnVrqNoETbLuL8f5XJHGYWoltInAwIhAOmwBVG3/+JzsHhQjOwApF0tbcx8DV29K0AHEDoWnwvM"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600160933-3c3444d2.0_1600161037316_0.5968964881816148"},"_hasShrinkwrap":false},"2.10.2-next-1600163724-46defc31.0":{"name":"@xdn/core","version":"2.10.2-next-1600163724-46defc31.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600163724-46defc31.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3xq8iO1iiGmzkyg1N9XV0uKsjSMI8ll/gBuN/HhdQ6hWE9YWckwD95KQMZ0yjAnLjQR6ZfXaxZxLAQCN3IRS5w==","shasum":"1355f1d32f83dbfbb78121c7c86a54be0b210c5a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600163724-46defc31.0.tgz","fileCount":145,"unpackedSize":709231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYI/1CRA9TVsSAnZWagAAFNAQAJsukM/j79ZgXqOmJFtc\nTVk4vnTbZbp6bhmtB1wkg6GH1b+8cLl2rtBI0NiUEv/1LMAFNcbzuJhUzTPQ\nPDLHqo0/r0AnWDGmnm/8LuX4sOo3+zZXImtwE6gCPKVEyk+uJRL4rq9+GTUc\ne79ixoCZn/NVS7CWtANTmKwvPutRZMWmnzWeZzB9fpGMawr4lHCjh0prHc+f\nD+kONlW4BBmJkv+tjs6VKWDMLLaMfrbMNf3tdhwEHotWetJ85Pk55m/PXyiP\nfTMoeER9ysj/m+NV7PNXgJnDZJ1DGsvHi9QzG1CqjG2Yu4g0mgQr7MMKZ4Qx\n612QqiXUovSfXAnuXL/GN0ZAVHi1ytkqfYWTEanAd530Lw34tVfKxqyGC+Ws\nfTkoJBRynudAFuHYiad0SyD83Vt+ftLsClnWabmMhPiVmckqkE9qWm6s1F+U\nV6k30749oOwFtUf2HjkiSbyn0MQcaNh+No0MuJU8JAQWOigXAaPXLNTrj5gw\neDPyfEVjt9Hy58LbrddCEz6TVeWYh86vkFqzX6dhbZ3RcVbnQRV7n1+11P5/\nrIlmcllBEUaG0KFZKh/84OfsGXGmVePZuDwKSHEKJG/NQx0VVV/ZlkoGI5KP\nw8hvyxorO/H+Or78vC3kuA+JVAfvl0QbXPLDnEl1dWOTcQL1HDn7Hf6Hqxbq\nIaEN\r\n=NQNL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHb/umhaLdghYcfXLrdhGaxdhJDQ/Rk69Vi9r06138yzAiEAocvDcemEChbsPL4PauhJhV1f6zmZ4mfk+gOcFQYQzBE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600163724-46defc31.0_1600163828718_0.9452626517237108"},"_hasShrinkwrap":false},"2.10.2-next-1600165323-9b11b3d7.0":{"name":"@xdn/core","version":"2.10.2-next-1600165323-9b11b3d7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600165323-9b11b3d7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-NgEMNvc4CMCB7jcaNj3F13hxoLJUtcWTD+IUT2MBuQdVgyDKEKS7VfdP/f3XzkHTv1IhkpQb7XrJA9B8mY1LeQ==","shasum":"46894b8b93613a148558d929efd11428fd05a3f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600165323-9b11b3d7.0.tgz","fileCount":145,"unpackedSize":709231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYJY8CRA9TVsSAnZWagAA728QAIkibOrf6UpGo0yWpEQ0\ng5njxuiCP2UjytxJR+roiKf2CMN2k8MVSUQdhoIIhD//KeQqSGfWeAG9r2Hq\nupNaX2q+RW+5PhAVnEz6IRwS+beZUwUk8I6S2CV4FhhRYBdEb8ZF7D+jRR7/\nv6zlTYs/XFlU0aveZQw76ULaPPo7XpKWb6FwI9Bi0I5U7xQyuBpxRTYyul3P\nx+adQP5vRuB68IBviKKqrG2HnS/rohI0+5C888wreU8L0+uuVboWn+o7OnlN\nEttfpvqFpBALSwyS4p7l6y+H+/j6dU/5eCKgNIKR7koWhwjjfkRQeD/pMIhM\nUKx23IuMOxKdoym3QqT+vwUoaFAFPxro4lXLWx2hc0ilM0c3xiTC+br9Yply\nhQDJU5rrCSTftbUHMrtakn5Wu23Ud1zN96I8qMXW8rpFqYlRQrmAiSzsblWp\nQwLo0WTdOcVuKiQdOSfka74762qMKVFBjTfLWNFFtHlnc6IZPs2hbDJ4+F1Z\nsBeVjFa/fCcnfWS2KBMIHmuFsmkE7rrlKbpkMf43BUKt/p/scZFQ+lJti3VL\nB+kiYL0IsFlTUAmHW+zlCemHUWDRNdPJ9ypA2yhZ8zwOhjsMKbHLaVT5EDO6\nzgf5NPUna3ZFlDN9lR+J6UVjvAIH4W54Ox23f46VZ5LJWI3ytEdqOTAICBqg\nitHV\r\n=MOop\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE4joGR9/bN61ikjzNUQM8x7U+I9WNYHaMtxMiMz3YqjAiEAojsmcZ5WoPUoGxT3hK8p5Be05oKoJBOuy4u0ii8Zmro="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600165323-9b11b3d7.0_1600165435669_0.6983835832630032"},"_hasShrinkwrap":false},"2.10.2-next-1600169926-1ee6c708.0":{"name":"@xdn/core","version":"2.10.2-next-1600169926-1ee6c708.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600169926-1ee6c708.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SksNbx6475V7CS2jnTtc2uI/r2YMRbcAMcJMIq/39wFfzSoHRG30yQZCFp3aNf8xW2ZEYVVz6lGe4pG8QyciEg==","shasum":"f8a1dfca8b4cfc77b1fe70c307782dfb766cc3a8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600169926-1ee6c708.0.tgz","fileCount":145,"unpackedSize":701613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYKgtCRA9TVsSAnZWagAAMZsP+QEVmdhaCtHDr/0CZEG5\nrOLORxg+dc6EUFm/3c+mWkwDE9FUDk9DDUaM0h/FKuyhwZPmcoodCXuYKfgP\nJLxb0uaZ+xDnSTr2WCKdHKUQXs1Q72+O/HKI20IdaSSavLp9wbacrvi+dvAQ\n0Bts+twfy4bYAE+9DCeVbRLvIyVr/OgROtBGyueWMU8I5mIrmVWmVC+YRqOZ\n1TWPOnD93dm/UIpebeLWrXIEk7r+98AZs357ghCfRmLxBbfzcB9dsB+VcCMM\nZfKFQmInL/OtWhlphZm7WAvAUt8CVk6/da/ZexA45JH9R19cTIFWIbVGHEhU\nwhfC7BMN7C9vKnKkFJGR4yhQSGqGTGGpXbqbBB4EKJ8CYtjKIc0bMhnq4XaC\npNIbJ8fXoxnLz5aVWc6mncgxVl9axH251LlA0jgY+Fha1GoUJS4K1Qulu/sP\nvulJzEHy8io+Vn3ONGjCrAqVEIPh5Ktew7raz2g+GOWYnliYvedkrRqJIOOs\nfaYAD6re2uELhdMuPZQtI8oT4cHZCYA7HQphLpJJrf8O9fvSMCcn/fg9MsGt\nfn5sC8hDpDCFMgF9R2M8AKhxXmgRP8YoxIeWTe7c5qh3Id2A6Lue+20JTWXE\ntDT7ar1qxx2pq7jEj7F4oTDu1DfdARA7oYq6+rcpvz0M7WWoNccbgeRpRWzS\nho92\r\n=Dbih\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXd5Y0Vn83schmumR8T1PoAprXzW3oqta2Psiuo4u8TQIgYN5jSouJJJiZDaDrBGI8p8L39YRFhELBqCIXjhv39p0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600169926-1ee6c708.0_1600170028702_0.1926331069740277"},"_hasShrinkwrap":false},"2.10.2-next-1600169974-baf756f0.0":{"name":"@xdn/core","version":"2.10.2-next-1600169974-baf756f0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600169974-baf756f0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wQJHkI9Ck87wJpFAcBJKo8L0y1+nRdRG43F+wSrndrrw8okonYbWduLxRMVuM1AwnK8j6Bjfk7leXbsOnxi6/A==","shasum":"70d5c0630709ecf118fc5dbae957aecc22fd64f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600169974-baf756f0.0.tgz","fileCount":145,"unpackedSize":709542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYKhrCRA9TVsSAnZWagAAviMQAJdYvUH8RcE5+/BO32ar\nZ6ksMJ6lrBfQalTazZQTd+CQ3WdbQvfwgDLDAbPO2UKR+8Stw9nxrJRZQ5of\ndLt36Uj+GLqdaebtCkcDZT2EH6kEmoSV6ZRulexafQSnn1kKbveNdBNcCC99\n702t6m85VPVihmcij9hodYaZTV2VbikIYzHIqMr9wsEeXe3NUoWb78Gf6GcQ\nqRjajDqgk9+VWianv0LvTWtq0VmSg3FgOPsm11wGvZg+g4IShKga4DZjVSkd\nSvnFag5uyUQWHmIEZq4AzYkX/litD/UQWAaRj/oNi97hRHLit10NUcuQua/q\n0CvVqExzRgGkc5SI64Ljb/3GOGqVxBfcNq2bXxXGTZ8rNfFx80NMHpj8N48T\n5Tbs+OGWABDJ2BWpj877rk81N9w3gtmDE/92/vSjeQNekSrJ8ULyRW0iMWIR\nA7KXZsgFadHPQvMkshWcLmUrXV35OacbtxV5v4bsi/zCqJ+ijC4eq1llt+K8\nkI0GDJpG6qoEWHB0sNdDrkmT3MpXwvycYGUnbbCmTLd9cujRWZhyW9yUXwnK\nd3qmmV032YPpUVk5TmChIDi8Y5kirERtCf/+FfVNM+1IZTOYmEQOtgQMsjiE\nr/oj3VrajtWuOnmUJVjt4Bj3guN5F2aWN4l6VIlW2LEwB4aS7cHORsCKFX/j\nxlJq\r\n=sYsF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDL+hzzDchtNGRlQLmAyC5RAQH3Vl5JdrUupCfv805b8wIhAKHTISm/beYFHWsMoraon8iJg3R6cl6TsdN+V3mfamGr"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600169974-baf756f0.0_1600170090639_0.9077300547694835"},"_hasShrinkwrap":false},"2.10.2-next-1600174602-c58e66b9.0":{"name":"@xdn/core","version":"2.10.2-next-1600174602-c58e66b9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600174602-c58e66b9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dVcsykAbQ56EkyiBJGKBP2k6q2YcBDtaMbdGRK/TBS8uu9nvPZZnhUA/f9GzroPrz5MUeFVlnyQc6ycwvmNlHw==","shasum":"8e851a2c04e125716d5403b5ab94f1fef716b22d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600174602-c58e66b9.0.tgz","fileCount":145,"unpackedSize":709542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYLp7CRA9TVsSAnZWagAAy4kP/Az+3ONhJUhE8K5VeFBi\nEZjHnhcdkBKp8p7ZXSPPRxrMsIbESdN1nmpYEu307WVvkCM3/yzZTWjlnqdG\nqjC3KTlWJWYrvQNrRe3lAktn/+RZdAKPjIJQWAgVCux3V5tMcz11w8DS30wg\nSPmHQbEInLrjg4a/57Ev1wWxgXWEe8OuFSgZDIeL3We2fGMm9KB6ov3FRpLY\nnbZzitL10bK7V4If5nVibigQYo/e/yMOIQX42NHVlipNwqvHkYhP4VmkD8n1\nFHeXNjFYke8oV9736ObkusH4/7PfyfaOc/aJj2Ut6mDugBb/Tt/eDFUrFkJS\nHvFKx+P9uW5fxK2l8TZMMJz4JDaeQ+fOWPHuuDWj0k6ggtkaP9EPqrvHyqcA\ngSilcVEpQSkn8O5UFuNZkqrsGF8whaC3mp805EJf3xImCWHOhQvx5C6fX5SD\nhcQ7LCiwyuMLPQwChBwv3uExVU0LC0aJonzxJV+QbDCpk0cUmjXmRB+4oUyu\ngHFULVsIzoecGhnc1UrdlafGN/xt2odQaeemeLOjuv1p6xpToLbjYQaiJCRG\n8f2yyj78ot/7clDp3L5ca7IxS6lCbOEbga12pFrHo2Wg+JP4UYMXps/5yDFR\nUIRXGcvk9Mk8ExT9zCVTGA9nv3WE/+sfrL4TzTPJq1XJrirdCKisnIp40g7I\nWWup\r\n=TtHZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE+uf5oNnMAlVrN6gMiqhUip/fetlSVrQcbzIbFbC4RoAiEA66Sao5DtK1bdL609tta0F0FnNr5k7Mlxlh97DMd5esg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600174602-c58e66b9.0_1600174714756_0.27148575703202993"},"_hasShrinkwrap":false},"2.10.2-next-1600175634-c58e66b9.0":{"name":"@xdn/core","version":"2.10.2-next-1600175634-c58e66b9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600175634-c58e66b9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rhSyi+TGQegThyb5vntqfuICK1f1OnUnDtf7jj7Co8xEm6Pf8n0iCwFCJgArT9UWPmNT1HcBh2King5njV2+Tg==","shasum":"3778b759296ee7ad003acd01253a168ec8e50355","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600175634-c58e66b9.0.tgz","fileCount":145,"unpackedSize":709542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYL58CRA9TVsSAnZWagAA7YsQAIouSgOMRbT30KV+VosF\nDnBGjZBrP+6oJWxxU28E1QlUe3O1cFSYVRMQx+UGiMoqYaJGF0FES2Xs6vmI\nBrj3njMeMcK8eL7ke6JtJmhMhEiju/3NYZYSbvoQF/We1GyMtf/g6w15U6bh\ndeG4B6GrhWu81neLBtbrJbLKqBlRiLsQksdL1N7qj49LdBoEvksMgpTRfes4\n8vHEnMuEYGkgrEDcUlCzhgdv2VPZUoIxR/v/TLjykfwm7RG2PR8CqMinRW3K\n3Hg9gmQLbkfU4DQDxxhtaKDqlZkiOTiOoSn/mqtZiQDHk+b6kQ7VGqmon8b7\n8yO5oe4Yz005LGImPSPtf3y6JCHdPTL9E7Hep+JdkI6HAwJeJK8qL84eACZI\nv7W7sGSOWNx1+pCzXl6Vdp/PpQB3Qgok3eefF+fJQkZH51YRg06wDaMinqYN\nTTCG0+sENnA9Zc+4w/v92JAYmmCRzeK9GOg2ZUXSRuU1epoIf5KDm3HcOysv\nmL6ud+Rwl3yaK1PT/12D3XQ9fSEbwsED8veEkKCmGVmZvotsl1uPcNbrHZqx\niGk8GEJEPQzR7uU5Z6wZc7MIBgbSSpbzLlWbQByxkVpFxk1ZchCivJlwRRsH\nh3zNM6TqmvskCUZ24m1bPTu//hGuyDTOXoUQ63zd84J3kcZORr7C5EOEBTqG\nLfOZ\r\n=3V+u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCE4cRRUq+mTDtBIyqTp/aNdkDT+6iEZ3XdIeIUA7yS/gIhAPf1VGO6k7qylk2sbMnNwqHSYnmYxRw0Q2h1p3jgFmjT"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600175634-c58e66b9.0_1600175740403_0.48027326863998376"},"_hasShrinkwrap":false},"2.10.2-next-1600176932-f11d6186.0":{"name":"@xdn/core","version":"2.10.2-next-1600176932-f11d6186.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600176932-f11d6186.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ZeuqwHpUvwXpubwt3YOONf5/fNuhAEE3f8r3Mh78OTphzeI8af5WAVJXnKcurE7ipQEdtaxS/ZOXIAK/K+av8w==","shasum":"8923294082ba2cdc032633955679b2b0926733b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600176932-f11d6186.0.tgz","fileCount":145,"unpackedSize":709542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYMOeCRA9TVsSAnZWagAALXcP/2TPtsuUv00j2EhPs/sW\npDJU1MGYSEGLkN0pNRXmmHHHspUX6lQFDTtXsQLYJoQUKoLQJo2T3+hO1D1K\n/wcGU/gXvJcBW00sLRD0kQY1OQtWYyF2NaQSKLUyHqPyjQdfBr6zsiZNxEJx\n1wD3L3qIE7Ism28aCzvESRuDL3yW7UpU4oDtWb2WhcWamznOGrgLl/Qv7LDM\nzw2qXmQzbMgsXgmfuv/OHRa6ZLI3A1iMFeKQ9EOK+rk+uJ9PqJJJ7IZAV3C2\ndvWaFZixCjxfQxO6TjFwZKksVg2lcl9mq8DrqhqAIst5lpfwhAzDKQGVMaXx\n/GPZRapnrOqHiS0ruenqV15rNzMqSHWfcK7PJJwArxWtXlnFUej9KnBBnXQI\nvcr6gYELvJZnUrYm2rw/Lvr/dUgQ8Ww3JBTUIeFt7hUqk5mTxRDSoVEr4lHk\nPCSyPEp8Ijt9Gh2w9/FWmQkN0y9Wm6IoF1QwG16dXz9W361eepIegqzIGy2f\naXZq//2ivOvNGARweYxKYnCwNIIOMqJegj9JvYQ6nLjxaOKCq9nBySckSjSv\nB7Zh2oSNYfwN1/qL+b7ycuVT3eanqOM2kxIqTXv64j1fIM4bYPi80cXMEBm3\n+yfmTmcl24gyynM+6KdUXjR+8on93YwQQa4qs+cPn3pxFvlBTTfDbnX6blhy\njJv0\r\n=TkH3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5LhNAsjbJa6o9PyRJH8qfVcWKxg2wwrfGdorCDvvXowIgQxD6lzR19yhQNYYLpMZUxL9XOEOldFBEPqLt8cxc31Q="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600176932-f11d6186.0_1600177053961_0.9636155927351415"},"_hasShrinkwrap":false},"2.10.2-next-1600180055-890969e4.0":{"name":"@xdn/core","version":"2.10.2-next-1600180055-890969e4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600180055-890969e4.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-C1JWkRa1K12ZmcksyyezztuvAtArlpogF/g25+7YfSJGdbqcSx7S6xkRhjPUKZt+Op+lkpSjJ1TMb9Vt4vK5Ew==","shasum":"182dbcd7d89207dc83d046d821570ddc5d9d417d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600180055-890969e4.0.tgz","fileCount":145,"unpackedSize":709542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYM/QCRA9TVsSAnZWagAAiagQAJzkECI0gyXALXFoZlrM\nQN8oiR8uLSbabus01yHz2xMeCzx7AVa6Dx4TsmVdx3Z3mg+kGDmy6ZAURNGc\nPH/zGrfuDIrwjNZBpk66s9suz+3LJUkqGoIt040v51FJs0woUs+GpJzAgwbG\n8N1TZDVM+M+D1IK6zmTJYUaoN7/qR5YR68dfskw/Au6/LD7NPiWO3j2xste9\nd5Pp7snWQWTJfh86zdNrNL9W7X2KHHyomQdA6Zs+kipbJFkLpaC9X9bSNsQ3\nnJegvRwaAnUeLNTMwWtmyexgvN8e0KSrpsTwWfl/uQg/5st7AFLobVzrhitV\ngKjs83S1TNluQSRPV5IG+tCvs0xFl1qlmHc/oCtQkmvsq3aXoZ3YpH71gMFY\nGZamEJO3qSsAQac25GeCNF/rtyT2IiqHBgnjHfqwZIAleOulrs7Fufl/PRNl\n3IA82bfbUSs6lHv5cNf9rxn8oLk4hGadLR3iBhMyUTmU9IAi8Nm4C4ZVxZXb\n2RXEwOJWjjPdr1ioVgBp9WEOVhlbml1jKt2itqPhkUO44zd7LKO0dUQlY4/r\nPFdWaSS+B6IdfgyHU6DTA1dJJAqBtyBp1M32gYIx/nEHJgAyFRhm/eSmfLd5\nwX2pucXLpoN9mq84Df4fAQuXo1zVDfjmPSZYzlg4RiuvqeKdgkJEUJ0KOo7O\nH3OQ\r\n=yYdR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1D995x4gV88TRvqoFpWYdlSEp8oAdLHCIhdONKc7heAiBvbjN6saPoMn/EWdipRQhBE/kaibDcRXJT4lI95g/JLw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600180055-890969e4.0_1600180176346_0.45921648619773214"},"_hasShrinkwrap":false},"2.10.2-next-1600189214-8162bc0a.0":{"name":"@xdn/core","version":"2.10.2-next-1600189214-8162bc0a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2-next-1600189214-8162bc0a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WQSC4ZPokvFE8FC41aDsW2W51oXph5wHtzqG8QJ0gK5W2+tQON4nHBr+5N0gM4W0lszC7E7QPy8RNM2zOUkIYw==","shasum":"9415b9397478040341c7387c64930e8a8b71797a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2-next-1600189214-8162bc0a.0.tgz","fileCount":145,"unpackedSize":702500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYPOCCRA9TVsSAnZWagAAw/cP/i+DZO74GMNKsNUR//jW\naEvKw5/JFEPHzYYV1gq7Hir1qY+zVf1RDSN8YgRCBqGVdX6bYsJWutEhR1j9\nghj64DiyztkP8/rKeWZvNnyWwYdafWzt2GqoSUe6mz3SCS26Rc0DnhrvEqz4\nST5qBnGpXiUL0qOaK5ZTF2sLf5DByOcPExyfD4vZBsor8lVVmS6OmXoF+jGo\njsCmfMg4VjA7gIpUS1SqGdEN7vXJ2HpmWuqOLPmr9vkdPpgqd6TjaebFSFaC\nbj3cNWieVc846JhPau7xs4Ohx1ubT64i7WpQM5Cq/dECgdPJyHFiN9vpkecp\nxYp6TyGu/LBFGtbi4pFhnyWISNEF5yYMT3N9tBNLbB17i/AfY02KXoOGd+TT\nQyuvfFvPwh3RmH09ZvtyZJjZD2o7PTHcKwvPZ5XvzlnZVTumNbb/yDyir8Z9\nLbGOL7/Ey9kiT7j9ADss4B8LJ6ot7L/rpAv1CUN9C/S3jK57eT0xtUE18THd\nWE6a/c24bOPKJYuQCfpRuEmHz2tz9J+jf64psta+RkMJdWmILrGhrAJm+qbf\nT0uV3NBxQKhIe9Ly2Twq876YD0hKmoF163gUX0M6cP8FGJD2NHb2HkRJSkKM\nMEvC2bweuPZpeNy6JBfOk5ryTO4T/q3wpkfzLm3jKk+PHlYLpRRcRQ6sweJT\nEFnf\r\n=VYGl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIrwIFIs9kG+DTvRrqRK1EseTpVFCGdDK2pIhZajI24QIhAMSNVG+pQ1CrtrouqY4uHYbxNDTAT1WrBNkh4p7mEgtG"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2-next-1600189214-8162bc0a.0_1600189314439_0.22548603612163487"},"_hasShrinkwrap":false},"2.10.3-next-1600208976-0bfe4d9d.0":{"name":"@xdn/core","version":"2.10.3-next-1600208976-0bfe4d9d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.3-next-1600208976-0bfe4d9d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ZNdYrIrbtqVe4HyqPHe9qCC3wyMDvqgPU1BZlqdUehk07NVlSpUpcvRjbCAnMewW8TWZ67UICA5tYhyhgTJZWA==","shasum":"3bd61aeac4c92985ca4278bb84956723b96b43de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.3-next-1600208976-0bfe4d9d.0.tgz","fileCount":145,"unpackedSize":702500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYUCsCRA9TVsSAnZWagAAUyAP/00XoBsalIk98BMj84f5\nJy6b70jJlg82wXr+f3zvZRA7L3LCJ/snVAay2Y4sb6tG4WJ8zp/Qi6Htdi0r\nP8Irl+UAqaSvBAl1IzIy/dBN7GtAkscoN8TCqTEs4AKl+e0CGhxKhoG0GrjJ\nRSp4LyuTysFqiPNvJ2G92XvdhIZXGQqnYh1eoTJcXUFu3xEpYHeZUhD8K33h\ndf+Z66QxlS5w5AnOWmuYd9N715osMFRpE2ZeoZGTA5BysIP/oWl2618jaeAK\nrwZD9I0WmleMlxDWSgjrEpQNNrIo4/h5b6Iiciz+7a8SJPfPEvwvjWO4TBMM\nmaBbKM4Cm6Rg0uImnE/VcKaUsZqq9URMCPT9mv0kPHKXSS37bTY+k8Js9u0/\nBDzz2Z9Z6TEPJy652uD13rQWrRm1hxmLs9JP4qVrGWRdMfhOkykHcAFOyWsX\nWUn7fhsSFRfgC+vQerbMksp9p5xayA0Ivd2ItD/vpj9f/59lRBCyGrL9TMRi\neXQfZSpb9QdzmDP177LedPnC/AuXLQVeebhUCQuYnJnQjjlIbxFfWlgLndfA\neFJ4vnoyCKKSE7bm4gMoRLxnqoW/Krat0dg/A9RbEFdLqpLdP+bg5k4TfyWV\ns19VLn8+D6PalE++HJotk+YAm//+sjFfWMqodU/YTzVylDWFGYWKnctVEMiy\nZ0us\r\n=nfbb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8Tl/bo2ytoftl4mHBjBUU5FaSKYhMb3A6K0RO/Oy5jwIhAJoZ/hLvsQdxK6rbmU6sVHvaM3fa6mKAya6ZTUrtlCkC"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.3-next-1600208976-0bfe4d9d.0_1600209068056_0.3448289790415142"},"_hasShrinkwrap":false},"2.10.2":{"name":"@xdn/core","version":"2.10.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.2","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-D2Aw71Ml8rlAFpy4oXmLVSaLjqSRWimpv/iaOqpXSOAKo0z+JEMElk4DGspF8jhomLdMuaquuzQ/Xc3Kav/V1A==","shasum":"aa46ba7ec625e2cb55e785c19a2cf536d34687b8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.2.tgz","fileCount":145,"unpackedSize":702446,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYUGxCRA9TVsSAnZWagAATIYP/1RXhLBNvEYVF9bejMzs\ntMTz6ycJh+mvgXkMY1q/s06BPl+clXE25v3V7o3Z+0qk8u5juwUys8MyW3ws\nIBQ6jJU3R7HxHCHQ2mmncycdmS6rGQ4dFlWyQPsKYuD7E9QV0hpSa5vVOCCQ\nix7yRXpad08tpaExL9nkuRgZx80RBe0TyJ0ztCQcuidlO6D/T01lBSlFQvmA\n0nGWvzQ0pLvWqo1lXDB0Hj1mPUTyDHTyQcdWVExZOgK00ALpnqHlmI4VziTd\nga3ibrswREW3420aVhcJsgZHkzNrmH9eFocKIBXVrghiV34tYBHNgqYWZP6B\nUbYz0OUJG9w5ve71YC8NeSIZo7xGmr2nJeX9TReoBpe42tEWRCoc8h2kcDhD\nhLOXQw60bFul61nc5z9kDuJex3Eagjod0KXoBdsRV0XumOuuMPPqtQYekzcr\n7IUYeNj5v5M1jInjPN96b6ODSVAyXtkaixBKK70ilHX+GSzDSRA9CbxTausa\nZPqiCA8U4t0aP0A5ME8bBE37gYtKZpR7O7czTgwxBJfcdP0KFoIwUqWfhOfu\nziMKi9VJ5IynRH40HOwaleKZI+EIO2sbbndR/aBufxTVKF8GkNYKXOnfPGhd\ncfu62aJC6TD95V9DJcxmIopZENKXXPZTH7Bn8ZmlanUizfaf34W27jaHQf9Y\nTKFw\r\n=xl9Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsyCre1RclfLenAKg1lTAWWsuPJH1HbiTVYkVOTVN1kgIhAIh9HTryNXX5ryCNoUx6lOyx7WYpN+9Yi757C5lEFurJ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.2_1600209329083_0.7182887413946715"},"_hasShrinkwrap":false},"2.10.3-next-1600209409-1fddd2b0.0":{"name":"@xdn/core","version":"2.10.3-next-1600209409-1fddd2b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.3-next-1600209409-1fddd2b0.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-sx3sXOcMIuXSJJvUZgNaO6bm5laIpc0MJQZ7/lJKwbzxsWZZF2KFiN/ABF30RpMIqMuGACbfiVDvOI1F0rPnMQ==","shasum":"4cd164e6f095439dea56986412a9b57975322593","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.3-next-1600209409-1fddd2b0.0.tgz","fileCount":145,"unpackedSize":702500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYUJpCRA9TVsSAnZWagAAyf4QAIHih3AjOYj52QmTzYCT\nmWVWeiflhCZJuUoc+pBWuojbZ0j40vlWH/pyg/p5FbXGvcl+aT7WyYek6lkR\nafzSJGD//dZmd9Vk9wMUetDD2Yq/ARU/mqa+bC5qrBh/jaFV+DHyInSeev9c\nM7dTp/Iw5KJ8nKsgLpDK0SsPtc5j19+4hpQdn5EWbO1iFnh7Ky77FoHEiPp6\n8qIDZroK2gRULq5ksGBb5Rz3j9QZD4ZC9typDIp4nEvH7xG/26tk+veg5xWS\nR/eXJymYVA8yKMq9dlvPRrcCrNavzNqKdWrpV6XzglkOfayq2waIMKbjeOQZ\nnnRS4wZOVNfMqKd4kf+Q7QyIGWOSXRmDSIV02lKftPbekEZEJS0vRIJVFpFS\nnFy2EyWRL5xn+yUVEpXUt0v8aEoInmR+GnQPQmeucabhlaENDoB0XFlkqGLh\naeou0XL2wqlr+InyEwVIQotwBBOyY2fqMleno2Dy4VbrvVG3s7K3q++AePTo\nt8gvYFkzyzNzxJePWwLz5pRAwpQ50ueOXhZNHCeF/QdFc7SyWBf9VLm7I2J2\nyNgXnYQUT6YK+viECNpHQp7mqPSyMoIbvEGg0kR7en1YRSs5s5BeBDnL0R0u\nMU66KyeVuTw9n9PwSskggG4RVAaHWki7NHERBa8/N6YO4hV4oswOr6E40rHZ\nP0wr\r\n=Jith\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICV+EWrH51Bu5vjHoXVQbGnxUp/C3p/sOqfxb9eFbh5YAiEAycRPGL6FM+bmg5WIovM1PNxC6q5Xj7iedtEaPsAgTFU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.3-next-1600209409-1fddd2b0.0_1600209513011_0.10974422886751567"},"_hasShrinkwrap":false},"2.10.3-next-1600209430-58538973.0":{"name":"@xdn/core","version":"2.10.3-next-1600209430-58538973.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.3-next-1600209430-58538973.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lQfOkQEk0GyLjKekwvypS6yh0j2FKSqgPp+vFq4rI829QzFRyAAdLiHaeXakfnVZ2wNQC1w0E/xxtHWmo9hxaQ==","shasum":"800c3bad4de4fb5ae1f2e731a76ac32ac9fde1b1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.3-next-1600209430-58538973.0.tgz","fileCount":145,"unpackedSize":702500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYUJ/CRA9TVsSAnZWagAAPaAP/jlr7+e/v5ScU9cHKe73\n+Evdmv+ZAhNxo4tOlYJMfXhzdpvJNDaDuCJoX9AHci67CmhhLtL9sCpWb83D\nwYemIeJrQhGiRjmn82wE1dIH5cwvF08ipR4UleiGG+JgmUf59ojvspCPyQ9J\nHZ5LZI6cqkVkMEa0xNe8+I90PiHkknais/I3QopZdr4YiChk6Uls2jb3qNab\nj8Bi3kVDW3v4R9fst6voQ9rI9yc/g3PoTUtVXbQ+h0x31Dm4CG7y0aT1b7MH\nB8XXmapai9VWWmdzCBZFkEI/3bgKCzCSwbpUtv7JfXeAbLFir1jPyiPaf88E\nsR1uRT/uf2KYMKY8EH5N0+pRXMbxjOWOkIcAcVOWbzJUFp7TZVsmFiuQDHaN\nvKjwgaesBNJb/57/cZ1OlRePmkmLplM6iYv1XX9ezGdtowSY4xz9ZSOgJhoA\n5t4XRtmThndW6MBAHuOnIydlI/tHwmw6Rq699z0C35ERlQQBDDK32Yk1QOEB\nS1Au3J7GUogSNCGNYXdcsgiou29DlZOsJU6pY18x7lED4VItrSC5dVA7qMbR\ncvBqr2Y1NgjPdZfLtHqgkvjjasynA74KH0f0UcngqHPdqUoz6OjOZb9dIjAb\ncPdMQ8pA7r3KlkVFVVV/z4EgdTJvuhCr7y06xoWXmKWWAE0QbZug+sEpCdQD\nn6Wh\r\n=XK9v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEBOprexv7R8JdZCksj+kiDd72XjIaX7Hj61/lqJ9iQ8AiEAg8KNge9EewQ3jTxhoZve9qNxsDcO1NE/FakvLSiQDi8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.3-next-1600209430-58538973.0_1600209535160_0.5486454762310977"},"_hasShrinkwrap":false},"2.10.4-next-1600209476-13b92983.0":{"name":"@xdn/core","version":"2.10.4-next-1600209476-13b92983.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.4-next-1600209476-13b92983.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VaVAr1TMaYhmCqgoGvJue8jR78tBzJx5pHq5yNHom/znj4EBBU4uQCFfXd8sYXQraPTjOsA5G0/KbTEBxeoO8Q==","shasum":"828dc9835daedbe40bdbbf7f9065a0c9c16d4f91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.4-next-1600209476-13b92983.0.tgz","fileCount":145,"unpackedSize":702500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYUKpCRA9TVsSAnZWagAA2VEP/A+m/5JadwCyA3CyRpFg\n2ojBxBzTZbxXR0f+7x5tLNWI1cHNJhM9yFw2KUdT3iw+idFGr7b9/85uYtNS\nBtZ7upEkiZmNA1+DBPQShsGaehW5amMWQYbt2Sk36PrFE3fNLezU3wBRvd7O\nrJzktg/LhE2umPsGiC8nmIrgCYIo5D/QOQJf0nZp/K2KR5R7FGpM/piljGS8\njOfIKvnSUyVGc8CVJuHEIGmQEwwr6o4s0JKyNn2zE3IuFdgVwZbeROET20A0\nURZ8/xpZIvHoDrP3AfaqKWI0h4sQ/kAJmSq+D4JwT3TlzLupdScGmS9RcxBi\nbJWkcFlPIlyunXoVTuXkt7unCyYJXaBxLw5rR7WFXhQBLjJsdUCgJm3Z8eGb\nap7OvyQ+GJvRMkiwIjiBZPUelmG/M7oLrCvz3rvj72U6HGysC05aLFcvXECD\nd9QvLCeVXTJliQ8X8ify2VbO9q2vC3nhwoffhLS88E4UYTIFStkaqcLuDLUt\ncbxhflQYT+BABcF6f7h8ctgK1ZqGEZvrQ/+MMCKoD55fGY5xqS4w1eBBgwSA\nw2m+UXxJTZQhekAN+sKixAEwDvZ8wmMrt/i4esHYrI+fIM7H3zbwU8ZdCLfY\nggK8LKpbsXOvgP2+Tkox7lpL+ims3GshjOEHqRwvWAD/qrfMOojQGI2Gn5eW\nA1Uv\r\n=2JqA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICHqGxJwi5qomDFsFfGB1vvcpZ3QnvwZoDrSYLcMtgSdAiEA7xevKFIXAohLq7IxgjJ4dGHdQHyBrwQ+Z4KBzQ7JVlQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.4-next-1600209476-13b92983.0_1600209576906_0.4998212566727802"},"_hasShrinkwrap":false},"2.10.3":{"name":"@xdn/core","version":"2.10.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.3","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+V6qlkdhQDopWaPOP5+jI7+4WiKnKxOcAAvylyt5qIT0Kplsz++w2N4FK+iFDItMrOqx3NtS4fJKU7q+mdVPqg==","shasum":"a4202567a59e4d9ad3a309fd34175d3068ea1764","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.3.tgz","fileCount":145,"unpackedSize":702446,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYUMzCRA9TVsSAnZWagAAULMP/2g5FnmFVp/oAX3sC+0t\ndpD9bsEdNTBkNkcE8UDfNY+yU59tHffltaV22SuQ0UuouNs16X141zEtsKyW\nhIaswBSTFfPc1CJS3M+XE4ClpM117r+hCGahE5egTbKLkUAJZsqRBhuzxETz\ndRe6Vj8dIx3MxCglMFfQcEdvVKG+253ZwA06AU0k1qkXvXNTj0mNzNN5iXN0\ntxTvyW3686+MnqbWgkke5uf2f6gpS4BlDA8ESKoSGDcbjXgtzYFctJ4ZkIWd\noAYqOM6o2jXbZYkruNLMAfLj71108bcDXLnwmGMJldJK4T5WPyCGG2OfJlhk\ndxug9jmfsyO1ISliCyvJKXEbMkuh4ZQdQBQuH03bZ+1ZDjLh9dxig9zRrKpN\n6rSg1DjIskFdjJ8CrEEwpUToCGN9KY9xbwGYIAKoxrAH4fRXFAc75TU/G0SK\nmHlsN9AcvbK1Zs//4273p4AfyCPnKAx61AORhyRFAUSCs0lGmid5fHn4GmVb\nruAaIjOMMVxmpMSIW5yY0in00fd3Q93h+psQoODI35GzP+TgRdtExl2tOP5J\nSNkMDv1i9RCrBigvR7CjSHDzddfDd2mZlAcU2w+nQy0D/MkdvZhWTinC0YGE\nG2hPcIQh4VUT1Ddu46x/jvqAkZYbleT5BvhUa8376cgVTrSj+eftufUfQkpt\nPPi/\r\n=IWCC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBW6EBQ8gSDuMzAVPjL3h5WhKxJQ0yDtoGtU2uTsY+IqAiAxNUfF/MTdpSZpNKAL/TjRpj569lelmB59Yx0TdaJJkA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.3_1600209714529_0.07414528540371212"},"_hasShrinkwrap":false},"2.10.4-next-1600247712-5c135ac9.0":{"name":"@xdn/core","version":"2.10.4-next-1600247712-5c135ac9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.10.4-next-1600247712-5c135ac9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-TFKYJkt+FGRXBOT2TiXHRlTMpuJgPVr1nmNiNfmcTuQ0COzhPEvq6uLHcHPRRuKNcjKW4l81bNmfSfM8EcHnNA==","shasum":"1d26f4e8f163bc64e3605ec93ddecc81f7c62533","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.10.4-next-1600247712-5c135ac9.0.tgz","fileCount":145,"unpackedSize":710429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYdgOCRA9TVsSAnZWagAANeIP/iElsuvfu/Ea14dthHY/\nh7q68m8D5Zz3DwbzhOjoHbMT/V7fk14l7lBel/II9txj5kzXCWM6/D8jIBeq\nHjuRDFnv0GDgdQR60eSA9WM7c4PPiS4Z2rwcezuZdgZ8VGA0xXcMbr/Z/zTl\nkY4hNJOqF9Im475y1wYmqY7zpvbh0NbuwyPcMBaTkVJWu80D2UbAd81CPI1d\nyNPlo6PHthwRRWDM4g5jlDCQzWjHmK7sCsfnA3Z+8ADEkrRSXDZR5goIT9yb\nNMCERiUOHCD75f2uuz1VmA4KQbLPdJ+WJqLB5ovi7ackNKOvhlU1Bvx9Z04a\nUKpWTEEI+O0AQVPkeyG8yTqdS5bl4+q7hHciLZ3Q8H4cpUZUyMdsOkcThR79\n666zSF7fjaOM2aFxkE1kX1UzpED+5vZC9qlvbJe+k/DNQT4jCsjJH4Q6+xX3\nsAD7fPeLOhcabv21ShPj4xnPdyFYnrUoXNTrcsmn9a5XQyhLFLgqqDy7wUw8\noBcYXummDt9+5dJMOr/TxTedoPcIwHgFZ2ZRGnnRoijCdVF/t7p7hxhofHeg\nDyNjzQXq9kwkCQwcOP2nim25VAdokGLaEC7Zh5MClXjXrEtd1e9qmSygsdP6\n4j+zYh5vix9n9TGBgjizsw/syxfDFqYLMGGlwg0jErm42mfhha66rtOp9Q0j\n13qd\r\n=A+UQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEI/fbdAe0pzdoIu9psl7w7u5xgzdrnXT5aHTSMfMV/nAiBav7a0wtg1lqhwVJYumrhsNRXrXnV2eA47LKJJ6uooaA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.10.4-next-1600247712-5c135ac9.0_1600247822355_0.49385188494944776"},"_hasShrinkwrap":false},"2.11.1-next-1600247788-35fe5a41.0":{"name":"@xdn/core","version":"2.11.1-next-1600247788-35fe5a41.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1-next-1600247788-35fe5a41.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-gXK1M0XFKPQRKzOw9lRm6igjGR3eTwljlXnMjkHnVyyG5078q0kiLIeKPN5zTfmGW8MKBpHZzsGeB5J7aujcFQ==","shasum":"30e3676a67586e916657124ca2f56ba27143688c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1-next-1600247788-35fe5a41.0.tgz","fileCount":145,"unpackedSize":710429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYdhbCRA9TVsSAnZWagAAtxYP/09t+SyjC0kHHqJbAUBl\nsYnHHPvtXsGwysfUxlrUFBhP4Mpe3sF28/alG2taeznMJ3fpsLOUKg/Sl+Pk\nCejxQRmJ1/MlfUShULJ0czNQqswIlI6dDvIFqxJcaUF+Uu7p/2a0FOuP6yca\n0KJKUXyONiuxpp7GFUsnvfjxO9qijNcjJhABjb7xYPBSQkJo1C4HMK/gIQj9\nFBuz53kgV4MRIdpz/zEbv06RZDkENbiZTkngpYB5EliBwUQR9WJagpD3Ap2c\nDX/07jfNMVJ+rcP/0CpomZW4Q214D9BCTw0yIzOJ0dDeeBW4rV4wKB0mA5cF\nEkjqY7MHbpjvn18lS5V6EtdE2Mmcel3i0T0wMQT6faeXnQ0fjLWGHkrKXhLO\nwW8fREPCHbrZAgzPVlOmA36bGGSNR5/uoDYBe/gtSKVnfV7dsQoMBCgsG9Pc\n/71rx4pJLL8vbRXNabcQpG1E4WXYHoPoC0rfPZ96W2EwepSlNoMB2btTAQ3P\n7TKcu2xSOvvMrdHFvkzfhFXps6J5xARsLOoN2h5zQnx5BHRhuVVVpwWJbfaT\nbf3+s9aZ+6bjxWw77BTyBRwGdw/8XOAft9rAFviSq++/ZYre+gmLtREVNryq\nHOTuoHdehBkCYZ5beVIjodHWLXdvHyBEYil2wfDSQy/65U6fm8yU+LWZfTc+\nCf0n\r\n=JOjd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFsnpUzGSBoaHDVge9+35AzoZ+tdu/AFH3h1bM4dv6UQIhAK2Wbic7r8Usi86Rzk44SMcD/bns1WQ/7NeWrB0V1rqo"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1-next-1600247788-35fe5a41.0_1600247898608_0.43514153310263226"},"_hasShrinkwrap":false},"2.11.0":{"name":"@xdn/core","version":"2.11.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FXiGSYMqXDn8QSiJX9U/ux70gOO3yQSUgugxOeOraii59YLmAw4hiAL2LebXUvn+7zTYACeBEUla8E5eJqx3BA==","shasum":"d7d0fc9f20ede07492833bff5ad6520fc9b217b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.0.tgz","fileCount":145,"unpackedSize":710375,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYdjhCRA9TVsSAnZWagAArI4P/iiLvaHkjgNyMR2fCjQh\noHg1NWZnN4B0TAeppjzY5lelkYG5xTLl7DHN7au6pusm9PkHBmIjr5Xcfoa5\n2faAn+mb+80J3ni5gF/ZRerzDDwERCNRTScyfIeXGWM3bNeL7qbTJZt7cfsN\nACHSrXpgp/Rg9yK8JGp6K/X3g7IiiZxaqO7BWvZBo10ZudO2TVZOxrLi2lV3\nuPQ6Rhumd7Vm/RpZFpM7iQy18lXE8umpby36IFFz8bDwcgJgiuWvYMAO8BUM\nvfAg5B+dzhJGD/mqjGS5HVIzaW+vUPVyqLUkL0Z/TiuU6Kj0Ro2FYEy5uykQ\n1BtArFlqtlIjDlQGl+DR5/qFF1u0Ge2ZACxIltW7y/Antj2xxoh6w+f//cOv\nzr75JciZZRP+5HuWIYmfL0nWJIudXG2FFh1NgSAH8bIvdVBl8FxScvAGM8ZQ\nsuzfn3BVlm37hBxR6m6ufE8FDsaN+pdiAMT5QAlEU4nt05Ak/POv1yMFQQxj\nrFw8FhUyXDU/wzdEdjJNR8JDviHCZF7dt5VS9srZWwIroL3x8AsoDwxvhUuE\nd2mcOKXjOQjx8MPcpf5O45GX7tzzXWBsoKYs7Xldzl6ISx67dZik4AX3LL7V\nyrAZJ5Qtc/lsFk0C4YrCMiR1+xG4hxbz8Afxr/b46Pzv77XcDaPLTSJLcFI/\npbs2\r\n=GnvR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAILjf3HoTQYUmIPamG7sXzTQSX8Rc7+m59aifMhz2geAiBFRoc7JSfUDRh304QILhX5PBc16bhyTWvgDdjbeM3Uvg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.0_1600248032681_0.18677196580426703"},"_hasShrinkwrap":false},"2.11.1-next-1600258759-784c8c55.0":{"name":"@xdn/core","version":"2.11.1-next-1600258759-784c8c55.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1-next-1600258759-784c8c55.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pT+KlZjGmmATPSnWz7sArH8n2QrcicqimN4F6rqKDZanD5Sokm3NZcrI2jbfMs8M98zNmbKz8Zjdb9k2lJc0Tg==","shasum":"e2536a0d921f33b3a9a59eb72e88edf64f5787fd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1-next-1600258759-784c8c55.0.tgz","fileCount":145,"unpackedSize":710429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYgM2CRA9TVsSAnZWagAAcDIP/R+5pnxzmydJhQPCQnuq\ni4oDTHTNvvOfevThSxp667ZVlmsMnjloDxW983J7HW7WGqs7thZrmzXtliIz\nkyoPyUikPX4sgpatQK5EgHYTARFAMUD1LdNrBLIPuX+dNMG8Y5+SJDqqXDGZ\nmj8nMwcbQDXh1TVRFheiApaCFtEBipTH6DrE6bzJcP7a1FinBdwYHNBVte2i\ncgfCdHGo0auwGqtcO72XaySc82lDl9DQDxMUJyfRwAzPOdGDGUp1XNZKIumT\n4U+TkTks/F5fDsNvU91uoZtMDwIBQzSitWnQmMCsR8FQLT8DKl+2eJmRWifN\n6EcUgOEQyWgxq98KidiirwICJzlRQsQRG8ycUP5bkIurbgAQjKUIUKl7aeKH\nbSSjUZxs4YqfB9467uprEkIHh18t2v5nDh20yVVX78bxLOckFgUqlufcBiDF\ny3fv27z7oFv44rxKH1eB6CBJMk5WFSUBOJQtLl9wAFojWvLGcuzOUTgpghVf\n2F+iFuI0h462FaLPt79Kk2dNIX7SPYrXJEzJHODp/jeOlJ8sOXzKgqYTU9Oi\nkBoj4l2+Lkr9cBCeqbpQdkajE+ti/LNmvdlpNbZUY+BbngY+K85x/d/lqXKA\nKNJg7AghP/U/PdSPsyKODMmMb3OkJsXWRI33cmCH/TON9wYdSfS0mmqKXm+S\niLx0\r\n=bmcZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHph3fIv2UKD7PzRhsYiPZAqUwJvI/m7bcCiXDRY9zWwIhAJChTFBThmpu9MOqDYkSx0oBNYL4QqtDPDkgLTsxBx33"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1-next-1600258759-784c8c55.0_1600258869937_0.08954589536636992"},"_hasShrinkwrap":false},"2.11.1-next-1600262867-fab9c480.0":{"name":"@xdn/core","version":"2.11.1-next-1600262867-fab9c480.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1-next-1600262867-fab9c480.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+zcoRHYksDk+0w7pC2t2wO1MzutdWdoQgI8hY67qzuHGPRI+7rM+v7muP63xck3AXLQrZXAVX5ZYU14XZkhV7g==","shasum":"1c0ec99d23736a448f36942964ba1831d4d26306","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1-next-1600262867-fab9c480.0.tgz","fileCount":145,"unpackedSize":710429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYhM8CRA9TVsSAnZWagAAEqgP/2bKR0XPyKziKuP3d/ik\nEKpDf28sIMQa8GzOYAmWmEJxV7DPekixeATUChsXf9W58ouYzgX4T377rlP5\nNtLbxdWURvYRD0vdMa/i1tsExpSOBcI+IPM5Z2AdmlihuYlQYLqCKOXNo/ai\nit69zQQGpgxbuJ4cmD17X5ADKuJzs52bQyiQPPog9fedQV8WermLU8PZ4Rlj\nu8myThZOuqzSTLcFaSEY+haMT12TRbCqJH0qyHHa2+uZjUxhalaX9clzftpO\ntiaG7cocjRGCCAckgguhZvgXarbEnKB2XZKBAcSlUNOOcblPGyc1UlKuX0dp\n0vZUYh8y4fGbhG8wAuHIxxbZV7rYG7Wmlsj2JwaHzToZfwmSTGWxp6IRuhBP\nDV5oLYg9VX7wmeexHUL0ulWRxTeGBNMhGpX9FnQzAhm/zMYmetbOPIERUr49\ni3B1lXvrsWsdl1/T9HeOL/PpDN0pDgv5ibgWjeSyjcPiSdR4DgbsRz7PP87g\nRYRXZQ72SnP5eRaCghQNEj0ViS+YotoAeJY6noo82l3RYPMuQUPEQQL7duwT\ndlXuJUaOcW3FlzU3cWI1AYosERoHBUQnZD7wD1j7m4+F15pZOTgioCHbXCef\ns4m4QKDsJVseu8qSRU5xjfyADBlxDHCCY3MSKilyLekmj4OAKM0oa/4alhqG\noVJl\r\n=nryB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBoODZPCnxRuLPmgflIm38RCFYO+uUAHIOWWpXAIOTgmAiEAvFqODbb/jALYnFft/lYropQZ/HZOQpjtZAnrYyqzgEg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1-next-1600262867-fab9c480.0_1600262971645_0.4428918391731105"},"_hasShrinkwrap":false},"2.11.1-next-1600262916-71fe3bbb.0":{"name":"@xdn/core","version":"2.11.1-next-1600262916-71fe3bbb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1-next-1600262916-71fe3bbb.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KfXo4yFIP/7APqVHjZuKV//RXytPaTemaJHyHVk3S4P6ZzjM4A751EOgN0AcZaW1gXPfEY4E8RvjJ3iQYzRXZA==","shasum":"dd70df6d9a0486bfaf220f163f08302cbf1da736","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1-next-1600262916-71fe3bbb.0.tgz","fileCount":145,"unpackedSize":710429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYhNxCRA9TVsSAnZWagAA0ScP+wdammpNWgEg9bBFQi3/\ngpj5xhvJ0whoJ/1LH+tHckZf1phrFWHEGi7xa49Ipbih/hjJNPpLenri+MNy\nPlZniztbn25D8+Ll9/NA/fQV7zSBtW4x/0c4yTT+yc2qcCVCo+aVjlSOn3ru\ngpunOIGYec373l0IiLUfKa4kQlb16PvobBIrErseVnKHO7Ik8FYrFY/jAHH+\ntesUurauRT5gXa8bpadxScMlN96pfKRdAxS+ZDD8Wn/sp/6jRLi006HIGrpk\nVFtwqTQ5+zzdvHdaul+fp3qEO3yzeJCRHn5F8RStMHMW8d7SOUG9n3rrDUzh\nqVhYmnVi6AwhweGClX6GEFc0CZ1WxOS/CpZA3A10DY2fjuj7q3wIhpB3pt9Y\nBNuzAHIyA596zPh8jGrEFuoVz+4Jcbj8nssF/SEaU4ZT5moAaOdHejPZNQ8g\nE2pU1YDbt8jn6whG02y2tEP69XRXkObjElV+B2Y3Wfq4RR+wVDPm/r7p4y4r\nLWaq+6MAghzme2dGmzu5YjGgWysvoZcyuckPIkM51tom47XF1QiKIKg19EHO\nix6go3x19d7+ERd/YNliCmpR3kP1CHVkdsiMNQjRoTdjEFtTU66l5kdK/pHf\nCYYe8h+o1uzBx/wRwNpWElxXJEPPJyZrkw3ofj7ZNFsB7mjLmcxAuqvgmi4n\nAGUZ\r\n=ufS5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBk9h/knq83mIuyXQp6ua4EFKfeX+PZEL+S8UqojGctYAiAaCaLav5R5RTV6QGmTaAYU8objqhH9GxLRB66PanomlQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1-next-1600262916-71fe3bbb.0_1600263024494_0.7536218376922468"},"_hasShrinkwrap":false},"2.11.1-next-1600263055-487c5991.0":{"name":"@xdn/core","version":"2.11.1-next-1600263055-487c5991.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1-next-1600263055-487c5991.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SXAXQAo/mi6Utu5tePd8pOOO0RGOn71pIPkayukNZTYbVVJ6YIV8qBwgAXuncZORfNNj+xhdAir/ow1C5O1flQ==","shasum":"7d6de10c692376dd36445ae4ed72d907174213fa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1-next-1600263055-487c5991.0.tgz","fileCount":145,"unpackedSize":710429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYhP3CRA9TVsSAnZWagAAY2sQAIq/8ClF0gRvXSPJzVlj\nlMx7Kp2RqU8WaO0Hi2RbztfN2siKFktHXh/moW8gKLIa3KwE3aM+ndeFWOtE\nBn41eDbESge7AQtVG88C4ykXrG25GVnaC+NL8Aebw66IwR2jyJYuqjVFbkh9\ngqdzUpN1YbtWjzE6eOnz/bSTpDi1DgwL0uexKfis/llLydM9313+NdeJwbWa\n6DzScGbQalurbJcRiEDI/kqWzMZxCnR61Ywse/dWdnlE0BWZ2fP+gRVtdcl7\nH5lKkD+xEGE/4nZy+0Q42OGI7jMpvNtDkOWvKnZE2wH6xTnyP491MFpkqVOc\ns+K59nm7Gr7UnFmTOEA0NwE4dIJH/OFGGadHq5eqEd+DSWZGGetc/RdKhuy9\nOvG042IeUXTMllqMKL/7LmVFmk0cbA4r9mD/zbS+rc2b72kxyjvegUvCQ3FP\nRpFs0PMBH8eKF5wZ0IhpL2DEKtlYl5oVDYhHgc7q5Hfb9cglAQYVtwjfm44v\nPZBceH/3w47JoJ4fzCs/55p+6p/FkjlTh7lUdiNshfe7XYIG36M07+xln5fJ\nmKBGfQ61cazEMLF51PaJw50M1D+b5/JVGe0iv6qeFvqxd0XvtJ/UzuLLBQuG\nwEfrE/tAVPKLXGXGRKQ2TdIcNCXYSgS5/P85yw262DwLrfO2lQxCFN7W+s1D\nloql\r\n=sfh9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiqyNllHp8+GlthF0DCFXaP63g00BgSH3vlqI8Q1UolwIhAKelickR1pqYeTup+bxQ6Hp3PC/iGf7Cn72zVs1seooj"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1-next-1600263055-487c5991.0_1600263159066_0.07283344804164704"},"_hasShrinkwrap":false},"2.11.1-next-1600269607-1a964b90.0":{"name":"@xdn/core","version":"2.11.1-next-1600269607-1a964b90.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1-next-1600269607-1a964b90.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rUXpsKNPI/WNHOribuBArZHdBzIqF1eCKbjackz4W1qn9qKqg8gJEMIk04xdjGCbFWM4RE5AxZK13qzWlNKO0A==","shasum":"c54efaef7811395d9442067c5288eb603f61d57a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1-next-1600269607-1a964b90.0.tgz","fileCount":145,"unpackedSize":710429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYi2cCRA9TVsSAnZWagAA5GYP/iwVgSmow6i7SHQulkHQ\nxgNZI9hdqzr4/i9oOSwXuIEOVsJlnF/YnENR6CvY5sfXj884JokZQuXcU3Ln\nsvvl2TNTMtPoP8acM/a/eiPEWJ2B1FSaBS0I2qOYa6+NAlL16hKeTT4cdz9t\nRXPhvDMsoMYHOX1fVnjHDRTW7rz/B2tGeMIV6UwFdnXolUJX9S9dZxYCgL0A\nxu0yeyCBih/UAKrGwxQCGqyuHJZBaIQDiXQDgcEMbIrqETV5d/FXixox2pb2\nkLQVppvH77d0c8LeC7/iGEHpBON9DmQzHwFZRiR0YKBeis5bIjppq7EvW2te\nSLmTnHhwzT86rt4ruPEDnUdjxrvR/cGHcsyml5YcWWV5APrR/3ICsHtziJZT\nWSVXosEaBAuLYDU6GUcjO5IlIJqmnW5twysQseK61p8pNBK5WPF7LSRJjPKC\n2WXl3pHszr3sBDew3rPtlnvWOOmvvN7CZv8dBn4vwtA21pEiH4JC6+edh8sT\n6wb4qE5qIrePu3e74KmROuAiKjVJS+S/fw6mSXZuJmEhpWncfohT/Wm6zN4k\nGFVomwDHKCl6aNTpRNQgamFqFQCRFjY90geVZq59cDulDT/XAcX4S+JDYprS\nAAxgzzbt6oSAqGV+bjlLZyQLJ9i0uFegDAH7b803a+BtRcJntC5NVmUEs9j1\nsn3u\r\n=WblB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGyuq9ck48xSfG3R2EvX+Mcv9EKd0X9ry15IyWI2TdJAIhAMcs2RinFQjY2RJ2qgBj9fixNC9T85bu9JNjg2njCvQJ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1-next-1600269607-1a964b90.0_1600269724298_0.34003795002305703"},"_hasShrinkwrap":false},"2.11.1-next-1600272491-08b82d6a.0":{"name":"@xdn/core","version":"2.11.1-next-1600272491-08b82d6a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1-next-1600272491-08b82d6a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nelgmbkkr9fUg3SK1HwysfCTPdQwMCAlN1Kyh+44RDAPcBX3BPPox2V6tLls4gpFSECug2agE5ANForB3pzALA==","shasum":"bf3f0903c199ae1bad48d3fef950e79502249a30","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1-next-1600272491-08b82d6a.0.tgz","fileCount":145,"unpackedSize":710429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYjjfCRA9TVsSAnZWagAAq2UP/j7JT5LTAwFP+/27XLH6\n+jz/hqICLDlwA/5NZyF3j9pt4e1lpsQwrdGD6Ce/B4nkgxr8UP3twYD6dyAd\nfma5D9LwBCfEnoZLb9HHj1+/uK2V4IWxMs5e1Hgrp/OKQHoNFJcPcLmaD+h0\nt6kk4iIrNvTWB98Qwx+ArXILsdgueyMqfJSN1ClhK6T7Ng8gmgUI0Zpiwbs3\n/6+y6b3wux6mPf197VtZ4BCmnLkSczy2wh0Cb/6Xo4p3CR+SEOp0A0fn0Z0U\nIoVF+p/L3e6pRzpNmN+d8K3/GjrST/QQ/7R1fzwGM5g7OuXW2TcslJNzHbOf\naMJ7jzGf4WLMNuy31Umu/yDgzsZizc8R+Qtvlyxkft6osJ+OR0Olno0EuyMn\niiHPqY0aVvOFk+8xOnUt1kMLnDcwTYWrUVqLUk7Yx16RRAbx8SU4Dyhlgne+\nmQ7zzY+QwhWdkDt4DojBrDaQ8u2xVEOotz4PCcpO0BX1O1JewliLeMhERmLv\nJRlo7BKLqGe0SbgIkBlLgRnK8+5RHzaT6a0qRMmSN7RkcUF9XF1ibfD8HCL1\nls6Iyb4AkqR3eAmCSvw1jbunYe8/4y8ierLMmpiCXln/7rVcuhuCun2rwKVc\neNCm2GeBDqejPjJE3rvchL9PFeyvdU62eef//SMAWKB70V16xFjjHTMSDXRr\nZpRO\r\n=5VDD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCW5yzgYSGWkGGbGASZJuG8/txsQKfQjUVnrD7lCpg7UQIgQfbT5fETnKH64di//zZFFHzi2zYRdwlJ0qcTrhEdJdw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1-next-1600272491-08b82d6a.0_1600272607358_0.2579349910832167"},"_hasShrinkwrap":false},"2.11.1-next-1600283671-16febc25.0":{"name":"@xdn/core","version":"2.11.1-next-1600283671-16febc25.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1-next-1600283671-16febc25.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-i01wiBlbtIysWZJ73S1eMJ9YNMWI4O5yNKgMLzFVc7iWe198onykJloA72gYAu+aHQJFrizDRXjG2uqoPHvxAQ==","shasum":"5dde96fdfa8560f965b879700d545074589c7ade","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1-next-1600283671-16febc25.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYmSPCRA9TVsSAnZWagAAOoIP/RRTImMcZBZH1vbb3g+y\npKgTTfDKWRVA+FCLCBIdOOF3TTFdF4nT7kJ5cbw/XMPvwZP8/zThQak+1I+/\nRPJcPrT/aQ/oVJ4RbqM8iMdzdy3FeSf6Whr+hStxTYZGWIynQ1jNiiuvpwPM\nRirRE5gXj39NmmakajefyxpsxNY0a/s7ock3sIwcXdLEciYkDMDX5t0ntFKO\nlYSp6pcpXciONFD1o4T4tTLQw0LmTu+nryTourtQOvPQ2aI3O61IC4F/mlTh\nqIZVsIQy5gnN2ViTeMc49V2WdXB7lwcRsVQr/GxEOW6dVam/OeqXbq3gTeVL\n7dxPnwLPJ+Ux566gNUFHVAa7tiMI04EEXMlzvAFSKOljxaOL09ZcukF3q8W8\nmUEE65Ah3F34onepjSXVB6xHTMdjI4PTLNJ1GrQrX7g8Gjp6BpANhDsKeXQU\ny+NAaX2+CVez+AEN4ZZ+DjPQKXw+JaMv54PDr/Andtj8bpxJkqqLA0IJWVIs\ngaOSBcpxPEkWefXjRmAQqVaKc0MXtjDqybeQMfqCUlCrsez/fMT6BKWIIbEf\nt4KVWQaD998e0l/Mct8VSHsWJ0SO0Ow6niMhiZw5YSvti+2tuWzyz18Ikod2\nW+i6SPDxE+4JifYpe3wLDmPYZu5Sf3L1tQVMEPNLniL1TcuvExqGg4uFE1WH\nIK0W\r\n=VCth\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBnQ21/cxwWzCBKtM6WXlCydCmZc8BZ+BxCHfnFQmIkCAiEA7M1Qh74D1qqw+2OMp+Ej2ahrBiBOe6Akfqwsz/+VYdo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1-next-1600283671-16febc25.0_1600283790317_0.3143639500444739"},"_hasShrinkwrap":false},"2.11.1-next-1600292073-b603bc0d.0":{"name":"@xdn/core","version":"2.11.1-next-1600292073-b603bc0d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1-next-1600292073-b603bc0d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VqRis4fTk0AOXb5xgpAN+SofMBghMk28xUKfzQxAUXCE6/hAuLB53GNvk+A6aqoGulSpxxidzKGEz+CBUsq+Dw==","shasum":"54ff05c81090370ac2f469ee6c544852bbc0910f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1-next-1600292073-b603bc0d.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYoVaCRA9TVsSAnZWagAAzj8QAJdt/zxeO7Eg6Ui0W0ub\n60uZfSKStMlDgeZvrQzudIkljmIEiz7n053PvvksMGTcxkgRYJCqrSsvfWrW\n1egFKU72PEhSq7jz86uVEKBywxM7Cd8oGkuKA8QGEzdnkco1RdFyKmnuqWYn\n5ynqQfd+ySuYge/MxtjCrmgACKAjzNOPQ/ONK4kwK5EP1FISkB0WlhPMn82T\njqiQxkAWqxqNK5M42lBOGtLdeAzv0Cv2jjwdf06E8fYG+ow0UJYAtRJLPcKn\nML9KHaAH2nJz6QrduyWzUhVzxUr0fZOay/8nymheifXpnFZgJWDaAG5IF+mP\nvOiwwJ9HaDs7XXNuqX5oh4hJNcWqPAQHRh+3RGwuQmA1L175flRRa08OAPmB\ndMF9/CB/vOU3JNpfRk17rJ55uGACH5LM3tNka0RGrOc9hwVJv/U+sPAh7qiq\nbFe6lkVaTs24MzftP1+2ObCi1XJYowEcRnS6R1XMXn4nGiDhgTieL8jj2OJF\nk/trJLEizE/YI0V00mWNfQaHpWlg7SbNWvM4vDNl9cJafvpNQPzrSXj1uU1q\nnVLzYay55dMVYoK0yN7k65HhcvfGBWRVMDR7ZLyqr3JaOQ0yuO1ti1c5hJfw\n56Zx/saDmDi2C/MTmnV4pOYKtZGUKzLNLwU2i2mrR2DoMLEefdxX1DrZ1RsY\nZk5Y\r\n=lzLn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCw+K5FBjc2F2XxG6MpFPVHnLJ+Tu2ou9t6GjQWZVWg/AIhAK38hOUly//de/ONQIc7o7qdTou9qCCXvCV7m9+8PQco"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1-next-1600292073-b603bc0d.0_1600292186119_0.026493739575593978"},"_hasShrinkwrap":false},"2.11.1-next-1600292107-18896506.0":{"name":"@xdn/core","version":"2.11.1-next-1600292107-18896506.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1-next-1600292107-18896506.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-UuQT+ZOdqFZA7xWwjABSd10Q47RT7CI8j6uF4Sv0XFYT/BQ73Yz+BeNGNQSR4xy7nbiFG1U4oDCBRPlmwrZFxg==","shasum":"b3cfee85f897fe8a8646ccae77c7fe77b10069f5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1-next-1600292107-18896506.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYoWMCRA9TVsSAnZWagAArUEP/07lWD0jTktAUkMmLK9r\nXAdXiOwOjKDXMNRbsmdhqQ8P/pYgEKjHvR5SUNwwBoy0FgV/TZyeMbE2rGXJ\nalLsI4iA0nbfMBhG8M7tsfb9I3wyPbv8Uyy7/oG30nbWGVOEyH+VUmiOpH5U\nRbJEnhhyF+uIY9SImCaVjit2aHrx7OYILtvmmy0xVMZDq0jyhl6xZp1RvuyK\nWhpq5UeLQ1R4IJtFfnVHZ1rqou3+SPLyVokMyeykwyipm064hXof4hv23hRT\n9TNLdHIhOeto4Ma9mGKWeYr2theViST7wRtUMq+kjAGqxrzBaafkfElBzijf\n0/B+adUKtArHrOvsMCOOpjymzPjwTvQqTm+5IHqIFtO9u7TwquRhELThXdKB\ne+DSVRhdMmj7nNZEY34FsUGNka5fBc6SdM0Bc19oysT6GK/JDyDk93IqECt2\nFxpnHvAmNClqqYsYY7RMWYpLs3HNISYaqEjF1wFJux8ACb88kG/mcXutX/Ee\nXDn8rlpo+pT+3H0cwJn0WulTU5bcxfnPKl/Cx8cvoNSGp9onAT4UN298gedj\nqxNozFwVsho/A9qQ0ECPM1H/mn+Ll14T0lHJ1M9JAt7CGqVKpiuA4NZgcQ1d\nrxbLxSF98ItckOJ7fkSeTfS/41TbogOTgL0N1Z4qeNrxv4fTExX1r3m+RjNE\nUJxP\r\n=LF6b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTh0arYvZ/TIh1r8+qODYHhwZtl5vj4NQn43ZkfHM0+wIhAN/SHHTiRRuMNdAZvij5p+OmpvdZSgnfGyPBYaTuBUGg"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1-next-1600292107-18896506.0_1600292235663_0.4955794346676454"},"_hasShrinkwrap":false},"2.11.2-next-1600292151-49224502.0":{"name":"@xdn/core","version":"2.11.2-next-1600292151-49224502.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600292151-49224502.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-X9XnNbPJsvX2VB5pqJWRQnl2nTx4lEWYcUrgkDCnorlLqMnaobjk6v1ywNTnbofu6UYcAEKiSyOUqAqm+N6yzw==","shasum":"aab56c81a0b44072f308aef9eaedebeafdda9a42","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600292151-49224502.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYoWmCRA9TVsSAnZWagAAxM8QAIFebGUYKUpGrgWn89oO\n5FK+kxuPyezibGHNRruMREihoJE5KUdMazMDkoXvxqlGogZQBs98yw0RsZrP\nHwNz3HavokWslLHfXOZvrXKirEd5ZqtTBx6g7I+6FwJGUMktuQCtYVuJh0rg\nHUGSYJ0ObTs9aLo1J/MQ+AgeUWKLbnZSGPj2dWkGvFj8imrijrp1d/Ad2Jtl\nySgq0HMTQCMkiBaATJ2F+A4uYtc6/SnlcoQzoI2lLVhdQK0NioKVNP/8KHUZ\nYtrZLloVs2P61qgNLo5ub6ak7snpWmg/EwXr6jMGZ0BMOZNQSucYYeqBqEhX\naHYsXF/I1HppO6+KtNfhfrZjm2HY6QYaA2TgDfEIblzd/9dR4gdLlzOvacgw\nyralFFA6kgYnXj331Ksn4ZrEbut4wPwnreQZ8IYkCi4x5jKrcaKSlZITrjN2\n2azlBTTvASDd/pSm1qhwD/+0KmQdINuob5QwFdzY1g9sDigAi3MdHofrWEhu\nxwPcNrVB7ButrmudgmmrvYV6nY9RSt3dd4AOi+GAv8yBW8octfoSjlpHboAT\n9Hudd449YSTrOhS71Woe33tAHt9KtRHablz/QHHm/VVsFT7+e7esffTc0vIr\nANu/Qc4cRW1zUSZrzK4ODFSnMvR6MpHP87PG+ujgHYRyZbGhV9hYC/7n6Vus\nZ3G6\r\n=pkM3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCw9drwZho28+TTFAhp/mqV02rUtjoaXJ1nSwJ2PK9lmQIfbZQMXYW+1TZ/hnMRFW6HQ9qiHhJqf6yuQbpUAzT9FQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600292151-49224502.0_1600292262263_0.20489054922052174"},"_hasShrinkwrap":false},"2.11.1":{"name":"@xdn/core","version":"2.11.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-RLP+I3ajMINohnM+2qNk0A1nRc0+IlF4vQiMC6Lrq37LIIA36Tz0riomn5m3Vm722stBZdyK+YQBKDQXiUZDEA==","shasum":"f86dba3a49146b7c62276a94c13effa4ecfc36da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.1.tgz","fileCount":147,"unpackedSize":711222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYoX8CRA9TVsSAnZWagAAugUP/1eSQfrSxkweSB8unHQV\n9DxEknvNVoBn+W/3rI+5bCn2XhkyP5TxHxwPMUxbUMorDY0BYAV6YfrTBQcE\n30mgtVqVKbnV/0Nsicda6+I1uHiJjwPD5iVR7HDiFoXiRegj4vr4P77XRI4Z\nOKtehufBgzO6SzQqlXLr0wxb1Y1zNDBU98BJmmCkVG8FHVcJ6JIUrRQ3SR/4\nbpgSUOYrnGg4L8kOL+eYA3m6+mqXKwK+YVrv7x3Vcn+K8Uu+ieurMKly+ZYv\nuScSuCaSv1uWjjfHC9/Rt3qjoZZsKNdrIEWyVOBM8N5/jg6gaVLaz0e9A69d\nlflluuzMZR3Jz8C+fjpL2Vm3Yvj7Ksi2bAW/wDAOvGC4yCx3ZVfsyF4+aid9\nsOP8g2+OP2Th7ETOO+5XyO2V63jw51uwK9xZoTStmKcNPD9Vg2LQYb8/ZP0s\ny21tOBdAPoK0xSXySq9xAnlX9BwhmifKdpRz1RLNMkwM8mcn12FkJ9HqFhMa\nZvVWxD940zlPOW458iNT7yi/1eGZQA42llzmTCNDSsSUkQ/qTIf2hpfFzr2c\ng6+MXhW3IHlQf8t7vJwmvhS6BHH3G7uKGmjgoZMIHYocKtu1b+i4JAJYGBnD\nOeBJXa4rrVSkR7D0tH1tMKY9DILwBehdDLzcgd4snjE3gDFDMU8EMX+KWHsb\nI08C\r\n=YJzT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGFW1z1c8Q/5ZDuZ9nvlv4TOk7ipVGo8PrTfO20MPvcgIhANjb3DsO2SoHXlp24eyAP4DWV66gTDq6wWU2BEqZthKs"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.1_1600292347857_0.6443610414715344"},"_hasShrinkwrap":false},"2.11.2-next-1600337990-e919519f.0":{"name":"@xdn/core","version":"2.11.2-next-1600337990-e919519f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600337990-e919519f.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aJmBCfDKsMLdpCftDRUYRV7XwHlC3vQngO7gNy231mFfJ/hbTY8ShglC6A5fp1LL+rKpX0Y+dSK1hYHY3t7KvA==","shasum":"bd11b60c58546c96c1421b5ef69adc30e5c1eef4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600337990-e919519f.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYziuCRA9TVsSAnZWagAA/+AP/3b25hWhg7fYym4EGx4x\n847uDrLwc593P75o8UnmrWenLVQzGnbQEOrufsus/yuMdWk5yah/GJ1HUWxH\nczUTyZw7W+FsTJT6d4x9QsGvVe+RwtbT5ZQMpvrfsxIJMKBJ8mtNLsFYFiLF\nYKRrF/tKUNMJXaiKrrqCaDY99V/HiF4Pjn5c76Ibcv3dlXbdqy8Jd87RZvNo\nRWCC76SvGr8UJ3sOvN7bb7Bx3MXk1vTV2E/V8eil4b1Qh/PMhZgbbfrjhDo9\nhwYG4kUGk4OLE2ihngjAa7aHlLTjWmEJeJY/NROQqhg25ZURJVWrecCI6sSq\naAZl3m9NcCADAPnZ33K0hsyTpg7NckO4Hrow4oX2AGItFYjUZUMR7KSGX8Jd\ndI10O/ydEXtW9Gf/3Yzxh6mU5Fi5AzSUVlG1NWNHqb2NWsUArsEtXTyiEVi0\n/ZnltLvn0AZItwoGto3z01fc4gTDmvyJNvAHI7Xwo4fYVCQZ4sUHxW6PMnOQ\nWr6e7w3Hapa+WxoEqdEHo20hXag9l5xG2QgrGKjuU1kar6ZtLT9J6/f45Kul\nCVpcMHjmmcCiwDiVPwUkdfQ6AvMKpZ3r9yB0rf3k+yx6dKfMuTYHLcG+Y2vT\nu6q3w91ZqXyIe3twFevdxhU45egrP9ckIraH1RFcWFbCC74ZBrgTIEAZ6g57\nPW2n\r\n=U8MK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHceTnurpv4C2p0GOY4VlnTVYs0F0ygURFcH3FZVGG4CAiEA1TrS/AFfE0HgzSvMQH+JWmcD7DgJn6oSFbY4jbgIEWg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600337990-e919519f.0_1600338094077_0.6596180531458726"},"_hasShrinkwrap":false},"2.11.2-next-1600344712-82bda3d8.0":{"name":"@xdn/core","version":"2.11.2-next-1600344712-82bda3d8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600344712-82bda3d8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-F4owCCsNeFsKt/Fevw1JnyGCP8iWNcOY/1tlnWrbOLvEyI0kmUq5DuJTqNYuO303pPhxFASg8AH0zm9Ivwtr5A==","shasum":"a28673a2087cde0f583e0bc231893dd9ef0f6c31","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600344712-82bda3d8.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfY1L4CRA9TVsSAnZWagAAOa4P/3jUPpMV35R+X73i63iY\nc+hAsk5XhRfbGg8G1ariTEJhTkuL73OvVDWsZ1Afv1TVdQd16lFI4KqIzNQK\nQ3LnWcjX8S/5SDOToA/5aNTDisJhxetzhSu2rlnl9UGWStbRyyrXFv/2y7Tr\nHoNF1oqgw8eqP3eyMK+Vu6S2g17aUuDb2yDBvdEU7DBIUHGiiZSZeNuk6P8Q\nztQvVMEtkWReib1f8IH2/+sHyqPMfVUfdxabVGyOaJFuoFezEMRTCrJisDix\nsGDDAvSSjFwly/0KOPGEK/lqLFv27IhgtxMBvIkDRr5n7EzDoxznDSNDSxIm\nnoYdL8FC5+BSCF0oYf9yFAq8MBV5irt9zqXddYXWLkYEKClC3RS0bON/wg0r\n0/1xGI2xBZnPccmGTkAsUFEEijpbsM9l0x1Io8QOJsJEdMqTHO/4Ra+yLaaF\nnHxtljaVJ1PDf0sbEhRX2LbJ8msvSBGGGTjWg0cUpL2m+5+6eSMLSbQQJ415\nO1qBCm/4aMbZlK3C6L9WNwO/1U914tv63fgMk87iWNRu3OB6G5tiQlkgrDdj\nRghgszI80qaCT7A6wpu1zSk8jf7xXvFODNwNtLketBELuCX6H3W6Ocy40tk5\nrKkuliRaRcDyQUEi9qvVDFpE22lLtjlooXX4OMIHFX3oAc2lGX0yfIltkozi\nTGZV\r\n=SRbh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD80OkkRWJd057lK2Z2e8ESbhhpfsutVEoracczJRzobQIgeVurCQ2dhtnwQcc66g19wlIxn2fOsreqMup9a1A/9rA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600344712-82bda3d8.0_1600344823343_0.14363811048766517"},"_hasShrinkwrap":false},"2.11.2-next-1600348988-8e9ad979.0":{"name":"@xdn/core","version":"2.11.2-next-1600348988-8e9ad979.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600348988-8e9ad979.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Kz+SZTJztIv1Gpifby1QIysVSwgRfE1f1C+Bz5qwxlwi4cmFtUYOGs8X2TFHKw8bAdTNHK724BoHCazsUYCXSg==","shasum":"c2155a37cb5b9610538187b5698ff3a5ba287104","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600348988-8e9ad979.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfY2OyCRA9TVsSAnZWagAAnVsP/3+aH9HOvyyoCzeFb4Az\nVKLjVrdP8x87V9N8fRgRoOuvRqaW4kH9ZEPyV5G86yajaguQaDR2bFm9ox4G\ncgoY5jYganeqUFFZqg0kNO6LIi2VPYmUjrntXs1v5kZmzTPTpmsRpr3eMLxB\nHNC6vwZRuJCECUQGGeoZ5i8NxilXATE8lDNobEgGS3TeKXTsWouv354PyPav\nCf7ZUFSTikZjcN8ZfPunLFlkteJYiLk25MMcX75iHx+mVHhBU5QJUnf6Smg3\nqz0fqW0yQiO9LN1paZS1MPCTw2P8+2JvpP+KSKlK9T5iLszmSwuYakyPC6ZN\naIdEiJtJ1Yqeim9iLicGDkcSM2XMHvqVGpV3xUMQYdVnJ29BDJDQxajM4pE/\nwh5hP+UuJheH8vxC2Ov5SEbloqztkw3EQ0eq3k1IqdnKuvriKCLpyK6OLBaH\n9fI1IsnL1WeVVJHbm4PzXtemZirwzDZ/WN6goQ15K4/u/enz8tqVxcT0jTTQ\nvrt9ELXYIbHHyeS2cthbpIcZtnoZnNxl+FnsH2mbTnc6dOGxYh291byez9/N\n/zqvWI7vWdxgShLTjI5X1RDw9afyZrmBf9Mf7wmushpcqhsI0EWYWlfPAQKE\nY4x5ciMri3akI1PZrNX6UMGlCuJslM8HNQyZP7/TAC08iIvMDlvdhdEYTTl0\nk4si\r\n=zGx3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHTsuDBJjhkvWO3lNYuDtw1t1vmk72XXX49LTP7iPnF6AiEAwfz2XmPeWKj6gZ332q0tuooFjmCCA44cpUVQ84Ysdhk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600348988-8e9ad979.0_1600349105693_0.10861582031219341"},"_hasShrinkwrap":false},"2.11.2-next-1600373979-a8abfc1d.0":{"name":"@xdn/core","version":"2.11.2-next-1600373979-a8abfc1d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600373979-a8abfc1d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bdhWjzY5qH2LKpL/OwrCjVwLSIraR4q2/LMXE2JpZcEf0g27du/TL3M5EY5BWmddpULuRU950IVW1ZQccUODvw==","shasum":"6d00b99ccab90a6eb35cc07954092f30f5f90a5f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600373979-a8abfc1d.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfY8VSCRA9TVsSAnZWagAAIJYQAJlXbAbOXcU3cLrjM1q/\n469EipG4/M6vJo4Xeyp6swBFuGirrFeoIBswYmPT3QjijJqM5J9p7PZg2tw8\nwYfKXy9+5nryhezHjiRNMDX+UYimP18ERc+5yh2YHuky4MLangZRdJKEwuf5\ni4CwoyNr4LeTJfIhjqAf6uYW6q7AgDyBy965HL9l02JNQ3Ky0RNF/akQpWTk\nL3SMquqcab9sZz1VWK0BJnhX0ygDK5GSihI7ZbSauXXFrnspTaHIZGIL3EHh\nbAsROe9zper+k6IKqoOjQDkI2OFDpt/3Ni6dkhQz/0HPbGScyO1v98CqEjS0\neP1W7hyh8OIcmrJULfKFjgH0VXifTnPl+sNMJFdNenPneSGSg4bf0y4dtWim\nV8MfOvIdhasACqHtXmXUa90DqG5IXjyWYDwxNoxywt4yzZkEwRQLPET7YsN4\n5nN4rWIva/nv1K93Yf9G1Z7loljmT6vTAqhez2SRqA8K0j0IZDehZJW8F2yA\nA7HHSejfgEhe1CXrAj/9RmjWMzEhLN0kXQcX2iZeq6LFcqIX6rgd6/o5gfDC\nvnwoGCrI0OtBbjpa5QZ76JBNfNxwuR63AbkIir27w8kuSb7durtrE/A5KEyo\nYBaXJagCfNNYEBDVD3WjnlbZOttQq8NGxoNbOJj1E9fKB7krelRi1wTclSxl\nt5os\r\n=mTmx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDyNLARp7ihgf+fkbhoJA+8R+8Kxni755ukpXXRlTDiHAiBaPEw6eE7NFIJideXoDAM0Mw1U7zhlrmceLQnv4c1W9Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600373979-a8abfc1d.0_1600374097128_0.05400946256529582"},"_hasShrinkwrap":false},"2.11.2-next-1600374709-225ededa.0":{"name":"@xdn/core","version":"2.11.2-next-1600374709-225ededa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600374709-225ededa.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-O6hLg+DfBBUSdZRhXhAuzSHYuoO92iD056DFLzSRUOWTMcWd93Pqh0kp1az9l7CzJnISqjWARI7jcQnSuu9T3A==","shasum":"154d76f0ce386aadfee9b07055a3db042f3a7367","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600374709-225ededa.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfY8ghCRA9TVsSAnZWagAA1HsQAJR40YxGNUa5PgtDWqfi\nxkJvBvZToMDNkOgEdZgPyzHpS9GDHwOqiw8OCG/BB6rZljw0ipoNc75WbANK\nbV44F4TBwQqgZYnC7nmsuDrCAPmq5V2sqYK3uEsSoxcnhFv39NBxRDJw3w52\nDl8p2K5SnzjAva98rHRJAM0IRTdTNq8Pl+KT5dTtdrHLqaBWUZFZc3SeFR6Q\nHQa1rC/SpnrI5x0ZLpSMAHBD6/q88ZKqQ8uFFXQJMaFfYNjKIHw1dRXyHs5M\nqFBnQJwCBCI5TOyhGXzGZowgayiXqm24oUR3pf1uZjA0nvrdMYCB9XVLyy4s\nD+GmZEQSCl/NOR26x0cfRojIb34o3LfjZO8KxUKHQ5yTCl7iM5o0IcVDhbhR\nFdRzjAoR3661o7iqsjn0yxEJQzZ0fNRLZibu5BVHZVBMD1TNeSpYsnQvvaaX\nZgAQR7T8OKxnHoUVpbEwU6kUG9MmpKyJx0NaHVMhKuLbJ54KYr3ayI1ksHan\nmYZpDQN5oLgdgABLF83MifdIWvurI5bW6WJQAGhofn93YMMTOeRvgsT0n4qv\nXUvm11zquhVHYYtSSKjlOERnKrvrfS1kmj9Uqe4WzsI0T3Yl+pQ7dCwt5b9j\nz05kmY4zkccswd3vRtaqw6ULt7Xq2+5yZzEbInoXbEacHTgGt2SKy95TT1Yq\ntmkO\r\n=Ur6x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHt4M4AEXjmfbzVMGQhH3XfXDsGMw/H8goLQOkRUrJDlAiEA0gX4SsbdzuurwizEhrDNdvss99CnA6jKvYNxiWbLhDQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600374709-225ededa.0_1600374815979_0.594644594690676"},"_hasShrinkwrap":false},"2.11.2-next-1600376939-c4adfb37.0":{"name":"@xdn/core","version":"2.11.2-next-1600376939-c4adfb37.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600376939-c4adfb37.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/HpCZrwPWLBd7kycxXqaHDu5ZV1K+L7Djy90UCSpJVwctaW9F4x76JmsYLNyGg16WIvjHY5mWN/NwH9l5m6JQg==","shasum":"a095591361400088a3ced3a784a52d9423892c2f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600376939-c4adfb37.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfY9DXCRA9TVsSAnZWagAARz0QAI3RebPGGZjBWzrgexsi\nqP1k85PV0bc++FkKsVxx6GkcjElEl7tIL0fbi5y9bxwq7eHZIfuBNIYptd2s\nH8LNRP1Yq/VyCmF5NmjAVe8pq0kNZKzRoXP8O3ByVexEz2+Bpay9iCcb5Tbr\nRfLM0VxLvxE8nInJVH/c9Spmxdl9xWn6d3SAOxIxb3+M42IIBdxpAbBn2NQk\nt0aUwVyZPcrJDJi49UDrCMxXstt12M35SR+BX/Hv7ZAfxkHwMVJEWG6UIoyQ\nedfHxCQqKvXhk8kDVe3IxRDlT9g9wTjbfnwSwgqdV7XqopOUKuySXsEjCPC9\nDrk1uBBqRx4Q52Z3ZNVaJ9NNzJPP4xXqL1DZWHDNB20IVaYGC9WU6XY0SOi8\nB33kqCUmMlrRvwebHWDbxqIVIb/c2scRvt89qZ7oUMhcfjSlZC2YwAEpWlFV\ncsep27fglYq/PJ3S2E2t6dJ/CTjq40/34/3+XkB1GwS41SAcI9LKYmoIb8KJ\nN6EjTLEq5lr5vuuLw86tfXKmsd35s9Qy82w46nLHHeJ1NZWpr2BJXheu9de+\nBFLdHjqC96VaylUia+tpL55kUMwFZRy7qutBK+EbDLSnGhiF8aZ6qD/XoCwZ\nq2265uiCkil1UjptAJQMr4IFx+K/DntutFd0f0+gurhOMQPA20Kztuy0TM+6\nw2sM\r\n=dMFT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpNOTKJygaLLhfV3tXoQ0OFH+m8mZqcYn7RPJ+ZMVTzQIhAJmrqE5T8QOkVCtL5Mpj2b7wIZSLuTfySSOA729CQsMo"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600376939-c4adfb37.0_1600377046478_0.32230046456396155"},"_hasShrinkwrap":false},"2.11.2-next-1600422799-a01a39bd.0":{"name":"@xdn/core","version":"2.11.2-next-1600422799-a01a39bd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600422799-a01a39bd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-brdObPIzSZnjL5Glm2LJKkPWgLFX99Qrh9xiTlUDup9b/qXKhFegorXXihBHcdhE5Gf0y5FfOWSvhenR22gZGQ==","shasum":"5d7875aced97b8a77e52abc354568391a20af225","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600422799-a01a39bd.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfZIQFCRA9TVsSAnZWagAAmHgP/0z3ADk4Jv+TMkHziykl\n8tRX5bnoPnZcp7o7sEQcIALA7XVVPhxa9MMhNgxPpsYfJt/VoKKWmXBR1Mic\nnFA8q4XtHUyCfIruvqzkpLeLKuvzp2vCzjy6RMlSIK+sf+w8ii9UckXlRTta\nPfSw6OAAx30XmtdnTPvkJHJEex0QKvrjuFey9+Njy+6hN8GDsI9MbURmQuYk\nbaruD6pt0ktC6YV7lDM2qu4XsKr/C0NhaV0p5dkUFl830NF/QvvtPDhiLWEp\nmhtWNZqo9eMdoVY+KNZwaoP+lGwrIxZMId8DlP/RqQG/6B93Yj8wK0QVp6ow\noanOPHuIfg5aTR/vn1IoOhzmAKq+f0Dcs4CEJWLGmYLBJwpX2VIEhliUPoMB\ns9Rtq354YVGzqruBOa+jZqBCmORNdKClwF0IG2s7SQ2VnwskX+il9NOpoUHi\nPw3Kxr16jTsatGZYM/9ke30ynfQqWH3NlhC1Z5D6W0mqTMv59wCfiJODLAgU\nf3/svyfo95w4iEKONg4oNUvpnJQrjKko3VVu3RBpOafYWmWsMjZQwQBDgdur\nmC8G0ZXe0VYFBCCSRVPcraQrnWbKQN6v7KnOFLweds7yVyBfSz9whai53iQU\nNrXRidbbelb4RwrfNIka2M4g7qursQC5ewdmL1eFv2xan6Wzb1aN4zS5HFvU\n/i6Z\r\n=G7e6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH9u8olwuHMbt3pvI31qmKqeOMpPo4Jlz84ZbG6rQKpVAiEAzngcIz3JBZt/EtivWnL10PBunILQnDhuArS22PUYe2k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600422799-a01a39bd.0_1600422917176_0.24708219484187977"},"_hasShrinkwrap":false},"2.11.2-next-1600589817-07052234.0":{"name":"@xdn/core","version":"2.11.2-next-1600589817-07052234.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600589817-07052234.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tarszovULElrAMnlHB7teBuxInLE9JrWpQ43TahpMXvidnoxBXTya3mhOkFA20orzdPGe+2tR3YlG/z3bEIuHQ==","shasum":"68f99ac2282e53807670fe900ee8f7a08f9106e5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600589817-07052234.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfZxBtCRA9TVsSAnZWagAAOx0P/RWuMT+IcG0sNkUun7Kq\nCmzhagmNnSszesQ8uxp7qyiHtQwyc3GP045DiBhJ0i71bI0dFjGm+Ml0mQ4Y\nNdYmvLxfWB4o/qWzuP4PKDfNTu19cXoNoF69fBNQVbiFJwzW3RyEXNBmL9+7\nq33cEboUjcznoQ7FVi+GBTYiqzsNGl8+BKhmaS19fBtmo5KVzsZxkS/FGZGS\nMeyPWzEnsl3+YzGhZbppRglfzEGdMfJmBXd/NVNCoZjulHmEjAVKTqzGTOiS\nA9xQDR8FzMWBr/TtaZxir82mVxrpfKzxbo/JEYyOzh21TRuZQK9zEISc0wUF\ncKoUfKkBvsIl5XwjCRJF27M0dvjM2Kw98AEkOfvrCDD01ssyp9AygOWmp1tO\nolZ6jnPD7QYlLjHvhGXAG4+BjGihOa2e0qgAJReIHcdE58GgoZUTR42OD/JZ\nVE1XhN6D4oz0RDdZr8TiLIOyTd2qjGT1F2G1OtPCVzcEdtEDhPzMMHd5dWf+\nqekWbri+rYZYpUv29fS6SXbCnLu23veXgzw3xakw7tpIKkJwX8FgES1d42Hz\nC/kAPVTzxh19/7sGOA3tJainfa2yMezAblcMrnhMbVoIdIDyJZw265TFmT+4\n7PvFczNhWdeZK9okfyqUYCXdqWeFogO16Ilbr2TxybyYw6QmgVZA/Qiw8Fuj\nab2C\r\n=Bnk6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDf/3cgrloE1O1czN+pbp0mOLV8j0hFLlQXN5QzI3QPpAiAfPyBHVGXPFtBKfoSnKmP8C7dCBqkWF39T4QB+k8FIaQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600589817-07052234.0_1600589932901_0.11979055409221151"},"_hasShrinkwrap":false},"2.11.2-next-1600672312-197f97ea.0":{"name":"@xdn/core","version":"2.11.2-next-1600672312-197f97ea.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600672312-197f97ea.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MG+tVMtiEAQGJPSKRREnWkYlBWS8ECqmjgWaTZrOJHzzX9lV79Cx/5f4k8YjVuXD1eyVcp9r0T3XzBRV/QfMng==","shasum":"e42b2d1fb2f3d9cb22852c4a579840becb442332","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600672312-197f97ea.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaFKmCRA9TVsSAnZWagAA8ucP/3/ax259u3nsfJtyrRQq\nMWVPFdXCmda28QvLA2iA+wepcL/Py+lW6zQRwATD2GqEkZdyBEfmxIjpwWKT\nnpF8ZlOxonvg/l96f5v8CZYqsnrxM081bAFzDRTDQkVioRD+4w0c8vhRftst\nL7a0qIlQck0DKP48cGywCy1mZmk7fM8lRBOG8qzBHgpaWcZS4IleOJEvkwEb\n2t4xjRqI2T1Lkha1a0aj0UbCvT8LYI9Ap04EfPDwF8lXOLRrK3IdwBxSlbV2\nybmwbtuNn+Ewy92/ikFIHhQ04B+ftq/uXqN3TTasXwp8D71aP6re27E5iYPC\nm6krnY4koaKjGS5nhAM0QkjnQf1wXTrKn1BDrURUxUa9KMMxtsGVaNEg6f3w\nAxRmyBAGx1YsuON7fnNFgP/wOQhsPt2ycALyRRIOAJTeE8bAPotp5J+OgHyl\nnfteKJ23e1CpIbT9lbOgb/OqF201JeP3/9sYKgapstE73Ab5vVOji1XSyo/g\nwMRYIof8XpR2zTDB4PzgD5xEM3++hM4FW7WQiEGLtMvakNFrbxfAo+8P8bH6\nU0HiCFCgGg52k4dUJxgfTXfRq6zGX7yqHaE6oX6/Czeugg4K3ySwjsyOR381\n/cjkg3S+sdE9+25SyXDt3J1pBM8hM0CWSFHriVUxSunpCTfkUN8fLI7fn1s5\nQQ2e\r\n=2yVr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOfABuMsVr6gmUPpBddrRSqjbLI91R2O9EDKCDup8j6AiA7+5xuHIukfHVFx8IPgB3aEevYT2Hzj6cE3oR9BHHzBQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600672312-197f97ea.0_1600672421579_0.9205835584085331"},"_hasShrinkwrap":false},"2.11.2-next-1600672424-b3695674.0":{"name":"@xdn/core","version":"2.11.2-next-1600672424-b3695674.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600672424-b3695674.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-p0YQYU037eDVsu5JqLpyB/jbfFwb5hj8kNR6AfeKTYNnDAF04VzWCy5tN579GT4vAUxKCmfOb1XpOoApBLPrIQ==","shasum":"8196fe7427253838c40c53c0db547a6c36376c05","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600672424-b3695674.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaFMdCRA9TVsSAnZWagAAHcIP/10qdiMrfjKX0TB559i/\nVQ28r9Cg4gvSu+dv1GTssjW3TXmzqUfgFOcf1BYYvng6lQueefu6KmsEHnwU\nm/b7kwhTsbmZHWqiAzPIseGbbrYbVnsW2V67Dw4uyfgYhft3hnh+iOgf68An\nGEyYYmtLPc2tA0wJQqTSdWQ4pod+1qGnIZFB5b8TlfbZZhVd192joqpNBfB0\nfDeXbyTY1eFMGLwYz6CCuUkCjw5cLyOGrIGf/Il0YOdIeploo2x1vqFpZWoa\npzr6MfsBXC0CIkojf8RHxIS2frPAIWnGZkAQ6S3D6dW1p7JyjDDyYHm5vKAI\nqzRQY9gY0p3Xpmp9J87YExhrTk8nHdjZAzHpdWUgepkNxTHifHePeUD3MwQ4\neg4IXBWo4ZYNiveSxjzG8E83i/zEx4t6P7LyCf/F9ql1nNAG8SyP9/j4oR91\ntL9C8PHFDkoDwFTLM5egkgoRwSL5O7Z84fgvQ69VnhQLWaETX4fEKrxLV/Kg\nR5Fc+dlEf7j8EIeCYZJl9ZvBsxDcZ48K6VK0eI+Se3IsVbbgWE2Kqjiot1J/\nkV8McJrGf9+teP3rlpCvOekfA+KxmPxYm43ZSl+QfCk8OgSta8A6pGPV0Olt\n/+ubIvo8mgZLnXEfDK+25g/TR/FkYPdZYNGfk7JJ1mnhdDQMGl1i+qpt4bY4\nROKC\r\n=w5Ll\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF6U0Rco2E6RooJ1XF9ZUmGCF0Is/PxNguFAqAKzATg1AiAe7oEwxYTwH2A7c4ZXgVojjbGM2Bn0jL5HY9lp2GRRzg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600672424-b3695674.0_1600672541004_0.7585728014931978"},"_hasShrinkwrap":false},"2.11.2-next-1600672463-3c7996fd.0":{"name":"@xdn/core","version":"2.11.2-next-1600672463-3c7996fd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600672463-3c7996fd.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-DnCc5niWYbk3BPX1MDuVQrOqycOVPuJQT61NvO2w3gGklw+nosPYZJmodqOGmNJVMjSBxuVfdF0X2MYCiQG+JQ==","shasum":"6b6853dd40d84020f6ea0bab255f8fc156f266d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600672463-3c7996fd.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaFM8CRA9TVsSAnZWagAAM7UP/0otTBe4821cXRCAAVf1\nOK98tmVsOTrXvBoQGQzTEozSgVUpziblVwQl3KkacwHrwm5+L+6vpE1DZGsj\npWOl9Vsf/Ns7inaPV3VMJyJdnoWxrbdAVxvuiShq18RlhVBDw2RS2oL+gJLn\nJ3+yjeheLNiUXYcupSYZNFLMLG1Bgvur24jPUrs9lno0JrHkaHjFzYmaRKqb\n4jVbzt37zY4j0AvoPI7KQYobvYzAfqE6d3rbh5LFkmaKbmLGyfmmn+VrZbp5\ntcRAcvMsrhD2o4BpkVsVC6kO+83ny0yaciaf2wyZIORQgx0HkrouWbkixCVr\nVOfy19qoE6fzncs+HFC9TR8Rs76jtlBRjJcT+Nqk0AYwq6WzWxYxWZQiPsba\nMjh+G2A5D6dqfaVts1ApDUbGLgTrT+Cs0Qf5drv+0PlfG8m8oXMB6jRMISiA\n0qp5riFfZb+twOGNLwF00CpJnkqx5JcnF2BubEbCk8hXcGzRIu+7viTa6Uio\n5QYEfRzUsIL9zlckBdEUCmSzWWRwzv5yRD+rN4xh/QJYifJ4EE2o60UuJOqn\nJ9KfkiWtcGVImcRknZaVJiGjppRtkdwjhb80nk3fHJmpagCS71pzaPjEVQg0\nNhsBlb6ir4d57M5YhdZJPm0CGriUIgSZ4P3VqBAv1hGeV5k3+UDtcbvCwLO4\nK3a6\r\n=8M93\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH/0H2RjwOMb/JXo9kD4dhVaczJsOOIbL8zuohiXIkuEAiBpkjBTdBxGMaRiNtGMK94vfqNO5flnDxafjPFfmryYUA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600672463-3c7996fd.0_1600672571811_0.36403665896615833"},"_hasShrinkwrap":false},"2.11.2-next-1600672512-c5ddf166.0":{"name":"@xdn/core","version":"2.11.2-next-1600672512-c5ddf166.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2-next-1600672512-c5ddf166.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WLe694pxyDBVAqo/HY3sYG25QdMWZozrWeqlFn56BJxmIgomMiUB4jLJ1Tj8cQXbGgZBXe0Nq64LT3sHNHXdbg==","shasum":"ad3a853f180797c726eda16020f4370e9e9f48ac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2-next-1600672512-c5ddf166.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaFN2CRA9TVsSAnZWagAASYcP/2f+bg1kYSTrmpJ4uLO6\n23gaORlZM0u+Ff2s77173vl8mCvNeVWBCMilOrAjoRXc/1R24Z3/SRuUn8vh\n5648rJ1rSc/blu1a7Bf/ZES+++HdAYNorcaDHetX+6/9qwazfvG4shoW513t\nRtUImYlP6Efqhazt024YMifVDe6gl4LxxRqNOdmcPHA9raRKqo/NM4QDKfqs\nszsCjUnkB83rm42Cy+d53fcZwHhn8sOdfbQqD/rqDzxhtelXgn0EOGmEFQRE\nkGY125tjRfz7pyK2cm/O3M+tZnpmZe7VUA/qsspHjcCJNpQjNV8MWoAjzv4X\nwpXdh6Gf80a+wA6nI4mxW3Lv+4oW3vjh3ZQWEbZ76J0qyLKPRbgnn1ADzXwT\nhZW3+E7GloEbjtYzKwOczmKYr4yBSftngfykZqU5olImpqlWfBgxGZAOxR7I\nqAHUFHJhIrMKOwFPCrW6hNUlhEpzRMJe/3EbEzx2fvtbC3hCNt9fX49RlwU0\n/088dwrjyshypUwdw6UAuzTJo+h4lHg1+F6pOmgSOejOcJKxFPzONY4GPgqf\ndeNGuObAZp9MgF6OEZBmOB/SHLVqw36uiet3yjjQI9PQV/bZMVHYAArLfb8B\nXc96qOGuZ34+8GCNxk4wTRJjUvb5AIRThRawPwuFfrWN0Rk4mblH1gtCW29G\nlrvD\r\n=G1mb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDD8U8h2iaOjkWeKKhZ8XlkmV1yV1C/V1a2hdAaGIP98gIgQIbWBQjV4bcdUAs27GTXVFotnQmect06kdEaD58MYRY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2-next-1600672512-c5ddf166.0_1600672629705_0.9983896240519201"},"_hasShrinkwrap":false},"2.11.3-next-1600673543-79069b0a.0":{"name":"@xdn/core","version":"2.11.3-next-1600673543-79069b0a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600673543-79069b0a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2pw/mVeMhv6C3UoA4tbnGzwTh5PtCTZ6uOCZggG2zSBhFoKWrZpXASXxi4+8T8GZgJ6kbVlQofz/Lq/GIMVOLg==","shasum":"cada27638d549183200758158b0e277fa1c7ef60","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600673543-79069b0a.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaFd8CRA9TVsSAnZWagAARlgP/0UwGHTjovsEj4+G8a8d\naB36LmEKSBBXcSjUW8lz3lUXCwC8nBwpZaiwFjnlj/j+6qCFYR+x6kH1YV20\nAQhnXDT+RCzsSxtVe6/oB7AmIrETDjp/IiqvehDUPPO+nmwwIZirPyIJPqSy\nrhO3/1n6Xfu2jdiOtkWztdfmTbqqeixzyMkNQTlXTnON4iODoBjofe1DUgPE\np3kUsM8jw/qUR6972mZBm0UUNeqyMgGqGZ3p/d32Sav8hwXqB2wYZYPfQcDM\nGL6RZqYB5XLpQoiQHYj9/+Z4Tbv+yOwpTDYlJ/QN08Gzm0RiZcNNWtsE5pUE\ndFKZWCzYvwNUjHPEfiUlD1SN8Wo1BO4dZAYGryFVi5n++YkuvfVVMjuCRg4t\n2BSHAHxMm+byfjhxaSU1fTNSyK/q5yRWvrIGdAQqFArscg0wTuy/iKXq2MUk\nwtu4DCYtNMoi36mwjC2uG28NHAymBimTfJldqhLj6jA8SWMWjkmCd0M9eCTx\nLeSwLpfR6e288WMHwcnfLNwZEQBl6MA3V4aGwtQNXq34p3V02QiDj9dFgU5K\noa9YWhryfYNMU6AToHVCVeEcYu8UnDJkUznRePk4qFxviWr552eFaxAnhGHJ\ndVB/4Yg4R/Fd7lBmfK5Er/Ub+m8JpfrC/Ae/EgRA2xAsXE+ZMhywglVtYKcf\nY1fd\r\n=TmIZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICT8OquATnOlxdY1XW3TQv7LwOth7haZz64b/gLJLDD/AiEA7b4K92qXFG1JMhfYbasCg86wgw+RU51pAbHy1zpCjvg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600673543-79069b0a.0_1600673660183_0.6915297600280976"},"_hasShrinkwrap":false},"2.11.2":{"name":"@xdn/core","version":"2.11.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.2","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PP5xj05HObxZFmBTssvPGZ9zIswT7J8aK7l/tCIbdAFyb5qNeqaIbgtdMfHDdHniUPe8Mdq+tc3RlgZBEuPivw==","shasum":"8a8e36842e4a7765b9816b515777745e9f05d334","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.2.tgz","fileCount":147,"unpackedSize":711222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaFfBCRA9TVsSAnZWagAAe8YP/3wHF0PMqtrAxIn3xODh\nExZgooqw4qCWbcxlmBciGFQrVhdbzJKyaSr2zsX6dfu9XJtd/4OeeutJY1kE\njlc7W69tlQiSbYvnFy7pPzsQT4nZsnMFiSnoINMPAtLzPIyhnCq/I0m/fXKK\nflXgIuzz+LVpULW3jLP3gO/kUM6aHcemYEacH9r7h1xXchW2DSrflV69yT1Q\nVE/wuJQUlxBJN+lPRwbh+xI2BOC1CUqKD5+HD+1KBA0VfzbLexN6fBWd+D0/\n7//ucLn9gagCON2Rl3l3vTFGkgnY6O4U3qtUkLzfDh6Dw2Whmh+3UzzC0ghB\nQ/yvVcefJIzaY0CcIP7+hkaKWW5yEoGkWGDJMPbFS+2Lsc1944gQVXguTTSs\nO6/qrmpNC79oJ/cyMK8KM/UNS/EXhVH3oL0VhKquy8NAEc6cNHbl+OAKkNpb\nXhryIcmnVKaMDgJbIp58JipHnIYvsWfDcfx2mnLtqyq3bWpR1EuNHVdiX4s+\nY0cDG2w6O768s1+xnNCKVhFwguupwQH8fUyAspFyt0J8IXMc3xmJraEkBAXC\nmZnSMZ2bqlGAEyvU806MHgV8+0tktpRZbEsKM7wMLX01vKJc0rNhLMYtCL7l\nlM+sqUzzNMVYZBBvwuapypZanesbbQnvGW0v3z4CWnI/+rXnHwJbI9IxxQhy\nlvIw\r\n=FKe+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEKpcGSNUD9mQgbMpeRA8+XQZuU3LLaG9C/3hCVyBxLsAiAIdzg7/dUjy/+2hOapdx2eQM4Xm4Lu4bMBWNahteiGJw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.2_1600673728860_0.3165213278982584"},"_hasShrinkwrap":false},"2.11.3-next-1600688580-b5e4301c.0":{"name":"@xdn/core","version":"2.11.3-next-1600688580-b5e4301c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600688580-b5e4301c.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Po3GF5AF33hrwvSmaJLlRQYmvp5SyLizPFRvRsKnp7unHMfRFanSiC68D2n5fgaoNMhC1YMLWmEzO7itY1Xunw==","shasum":"d4979d300b449c8b5a50a3f7c68510b383350fe9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600688580-b5e4301c.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaJIxCRA9TVsSAnZWagAACh8P+gPUg/BLacBouDEuBrVJ\nqeTkxPSinJ76WYkPFtj+ElSTviGPGX55T1Vc8kjNPyxiaIPAgBasmjIXbPg4\n+lRWiJNWk9e5Au3WX5Z4QJD/IF46gQQ4xQt3pm0pPx32/1SlKEVA1I8+eOBx\nicmtAAZCIQRE01TVepCnWfdKVFUKy+y7BNI2UXLaYwe7a2/LO4dv3SHyiTNm\njVI4RM7cGZTJ8WArrGhZdVoVhkvQEW5AsaGte5btMNFoq6HCiqU2K4v/8dYK\ncUFvWcf/bStctiWu5LjZXJjqJiYmFv2M6ma8iKRZ1F1Ws8sS9Z5NvFcWHIgK\nUtiWURIiVWmaSsqT/lQhYDSoA00cT7KByWfDv7Rp9+20uZ7Xy/RClfT4/adE\nAxOZmoxYGOJa/wcLayFaO4BwLaIcBqqQ8KbZUaxBKLh8E3iSNnVWlcRCQz63\n2H7adfjhdy2FBOse/a1Q5usJDHEFwdQ1+Aja35PwA9tLz1GFG/S30JxOihVj\nrwfozywPkY1FtrfT9ryb4VX5tE2RzoFJLflKsVMH0Q55RAJ8Si5KKTTDp+pd\nKr5NbWJnjbpq4+1r7vDukexlSlxYNOU8GQQKdxuCoz4PocmjagD+nopsuitU\nElSBnx/1EF/UAAaiUdAYvgjQuKtdg91EgM3MgUKjuPbxCLFr5ldyb5F2IbG6\nRn7/\r\n=88vB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoyoREQ4v1PRXHtduKPpl1rt+zCGNKX6CxEUgryGHDtgIhAPMO1LakW4McI97AM34N0hN4EKhSHft02BsadUuDFSOG"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600688580-b5e4301c.0_1600688689212_0.49104590602114406"},"_hasShrinkwrap":false},"2.11.3-next-1600688934-94453ef7.0":{"name":"@xdn/core","version":"2.11.3-next-1600688934-94453ef7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600688934-94453ef7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zQyXt5UT2Fm8cq8s7bdzXtNMxnuLQtvqSotNsMsINLiiFKSBwHav9Nmuv5wx8DClmDRNnmyw/O1/doc37BLmjg==","shasum":"e3d16acd5496e68cdf3116bbe93297ea3ae2fa73","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600688934-94453ef7.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaJOWCRA9TVsSAnZWagAABDEQAJZRLTcHwVo7wm2fO/NJ\n+5jhFxCopN/svcvdIz2vTu6mClzhulD8he494UUov0QhM5LGCAk3VY4KRRib\nkHffE+27VgMrDsFX6rF2V+9Olm5YceJr1iiBO/X/aXaTtX4HwE8K7KRNqgSN\nld49np5cu57Aqi+cU6tUOyh2+ehbJCl1nRUtOHfF07mnYh4rJzhyblQFqKg2\nrJ7aqX96evDH9FgdayRm1GX8txCKoT0rK8JfBb/xgoVEsKX20va9EjbIq++r\neusMKQCcdBvwKBngGyZvTseDrEQ5IsIFgKDKA0+UwfDJs5XtguSazcp2nGAo\n6DvPaZodO+v01GK/dFsQXgqyQOPitFjB+vycLgq2uhmLVw/6wgAK6sCiEz75\naJ/OoT182vdRqmq3kW6PDXXooSF6nn/dLuE89aeONNyQ1romQyKXfrzkF9UC\ncuoNTOlI74Ve1lRqo6EW7Q6TW67sLJo56hDZ7h8XpoRraVXEyAOuk+eEcVbR\nRcSxme8/ucTKit1OK6N4oV+TXdGp0mdHTmFZ2LdLVoYYn9mZqexlx6kDh0IF\nQfmF9EO23q/oWrskCcGfuPpvE0h/Ch9+8RocCxPoRRXeAWI0LXGGUCKJzbg+\n/vHx6kkYiSiX+G7uWDQe8//oJa9ijBxRssFkwulBu6As9/VB45ujyuAsJmY0\nYvvx\r\n=z7je\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB9SK+p+2aGWNGFTJEhL+qIRAjDjVFu1zGcmrGCL9wfrAiApnJLeCJ4LQ9mGKQ+snK0uBAKkIAHORZSy1thFuGFxPQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600688934-94453ef7.0_1600689046358_0.3828590346188998"},"_hasShrinkwrap":false},"2.11.3-next-1600688977-427157e3.0":{"name":"@xdn/core","version":"2.11.3-next-1600688977-427157e3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600688977-427157e3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-H8WI3nZ3tqRneDkrD93XHX5Yp8cuJu7/J1kGOzqSpOY7Jyj8mbWZpLSMH+QuKAg3Xf4piBTkL5Cox6xKU0UUgA==","shasum":"e64892eae11608365972cd95e30dcdfb21ebd007","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600688977-427157e3.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaJPJCRA9TVsSAnZWagAAZwgP/RDwpEDzxYVF9DNtpSy1\nX8HMQ0eBNBvjeOlZ2GNI/KusK43FvWHZdg4rVRg3kZJUl30HV8MpyS5O6KdH\neKmfBFFiJZXY4EAT60Ckq+iQnWco+wKVLGEeWFdBQp9ITinXG05Z/qluJhQj\ni7KpX+XtWwBR+TAHYXEujze8QGM1ULhFYxsCp+ngJj/SVmZkzD15K97hUBM1\n1diLZWv4exGfvOVbI2nDNCoJAybFOAzhg0krozpKncssU3jb1Xs/4DHHMlwF\nBW3EavpsgdYcsxko5kHKLba/YzJQL/FAwR6Fz3gKYEp6PdT24OEVPgMWJ4PP\n2GDGcxiCyrWOUhgEqr1xFukR0gi0TntvqZGU3cyc/d2hawLUIYlhdVJQKvp9\nCfGl4TOVIhTasQ+vdcoHjNkjt3vFP6SrCUUMHIeQB94kuoMlkrZQeN4bhLkl\nXbQ5YLJGxnobejS34cItYzSV62SyL9t8YDXQ1Fff7bTNvbd2VrRBvSwB1XC6\ndfBHw9JBKO7YRuCyIMlnl4bHY6xhG5IrRvUbNkbO7l78Ay77PkvPYvDQoVLU\nROEE/yBdsW9sATKNJ5+9HjTyCcLKyjTRqDgHREesY2NtXcC0X0bwXOuliQpZ\nv2hIzplIEEsoRGBHy2+qV6G6DZ3pKOyMIZJFkHCcyYaOOqZ3ofmtMpqRKku4\nOrXw\r\n=2f24\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3MkDprUcgbajpyr5gkBLtTbS2SEo4lqpushWvUnrt0AiA9YbIsbbIwoM1x9cv/9vIKzYyA0EImmCDfO1CtnIeIsA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600688977-427157e3.0_1600689097147_0.8027818301245335"},"_hasShrinkwrap":false},"2.11.3-next-1600688988-9bb8935d.0":{"name":"@xdn/core","version":"2.11.3-next-1600688988-9bb8935d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600688988-9bb8935d.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-CUIyVOPTkgUox8fhS6H3R57ernM9dInkEaYofigB15bjr86v2Z/78EqF0B1YdnmolinjAf17HtP394Yat/v/Ag==","shasum":"20c0590d44c87d606655ef9d503da905182fce6d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600688988-9bb8935d.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaJPXCRA9TVsSAnZWagAAGZQP/39QqeCD7ECnlid7JECD\ncpGljz1PJ5UjS0m9hZojaVfWsjozM2SgPwBOgqP/rBfPCo3xp2Ddkcb/UNS0\nzqEE75Uk5iO514Teia5HLq3IoRnVRseMaNz2LKQooIZLS7js/fqZjD15BzLY\npeY9lF+bIvlW1kA4SM7AQ2a9s9QqNA4NbMsIrzGLOmTWXtSm0vpXRtlCGNr+\nEZF3NwQUF2DH+NkyWoJJfaAYuHFMrAEAVa6WGFJN7tYjV27tKbepuyEbxL4M\nO2c4m3LGkF/+dFY0hRzP8TrU7d+vY9sLQ0oSAJJYjlUvcY/ayXe4kWcVeuLj\nJtFsV8e0+4AcNII3M6OuR7obfe8KT9i7I7UTbirwDgr/sFiBBrqUAnfhbe5b\nF3PieIOJMIUEGcq2lfCEY2XiNcBYCCOuCwlhlBu+gL2NwuCeO9+r+jtbCQUg\njVvdpXQfMVN62RbkQE16TRXdTIRKhp7ksXs08YjOIq2NkqmJza2ZsFkdvAon\ntfTHy8ry8VREo1gNXAFWj+X0vkA7NUBTdQK74IWofNRxia9K2xcN+xD5bn1u\nOuF7XdTRRDdaoDmFBOqrZfeuuDC44Rk7ZKGfYG4ilbJkQs97eAxh2xKYaX8Z\nBxxvcw2CUmNpJCL1rY8ypgmhzlJ41coc+8+iwgYCika/1FohLBO8HzKgfJWh\nSrkX\r\n=UApG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFaMB6Akn+J2UzKi4JOkkC43zHuTCR3ni7yj5NReCVipAiEA/vGECG0YuBGlOzNWgZTr5Smfr8fG4lZXx26lzdi9kK8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600688988-9bb8935d.0_1600689111331_0.4472194988926228"},"_hasShrinkwrap":false},"2.11.3-next-1600689217-2f191909.0":{"name":"@xdn/core","version":"2.11.3-next-1600689217-2f191909.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600689217-2f191909.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jnac7ivWLPAIChKDJGVJBMsiSUoSvmIrObdj9wKBNzLU5Y4wL6SEIhcwjj59nEU9sKjMtCj8ljANV8lUNlJg2Q==","shasum":"deaaf1f7934729ff19e917565dbbfa0b263ca6c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600689217-2f191909.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaJS1CRA9TVsSAnZWagAAu2IP/1ZrMvcpjoYfZteaRpw4\nDe13dfjATcLzWCJlP4R86U3xKIaeXHZfPZyGUGionUtgx4uYhjpevG1h4nQT\nx10TBRpqnrLS/J+qFujBcVHC+F6loFtbjd0dYB+ASQhyG+e+6kwQh34E1jva\nNgSvptiRsMJt6jXeaA7BpsLv86FUBVo2BkvaC/PYbdlQ4+OyzN9m5eel4I6T\n6FpTOeoJVv1KBrvanjleu4wa/P94A+EqqhMSG6EqGnke1Yhv9tPFpwTZ9t61\n8BTCZUmLX+XhcBEtTls/JxHA5/IcMUTWBhWzunyRzO8aqjrAJdUJqkQHFNjD\nM0bhLG5S9DXbMOWiw97LFHB10XJ40xnWHv1dxSEAwGtW7ZGkEqyUwES7793u\nySY81hIvTQG47s8jwGYvjQo7LAqY9WYXiJyxadQJFwsuJSGI2GZCHDoFiuJ3\nPzKBLg2DL0pN/fpdcgJwiignXZ58IrmtzSlqG3XbtMGYIvCpZYIg4XA/TuHB\n3ygb8/eeGMwS2SQ9cmN5nJ2roVHHAEQRhyhWrceQvEREc3P1ABNQU25suxNe\nq/kDjiIvoRfZocQ6LzRfyo8VvQjUyUmLt+F4U0iZljvjgbd+M8UAwWEWGCFo\n0JaPdt5AxKLqXDXCBOwqynl9nUYize9tnHrpwsTKJY6fgnXT4yUxX7tgLJos\nVChB\r\n=Bhtp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7bSBnY25E4nj8wQojy+1mrszG+9Xxh+43Hlm4/MYkewIhAObH6XlO4BUlMcprxljOP37KvMbj/HRAvXHXLAdfflGC"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600689217-2f191909.0_1600689333064_0.5317134167232569"},"_hasShrinkwrap":false},"2.11.3-next-1600690048-9e581636.0":{"name":"@xdn/core","version":"2.11.3-next-1600690048-9e581636.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600690048-9e581636.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7uIr90dc7/z+8tQdMAAyDm/bZ0sqcHbvQ4wKMxuQSbLb+3OHWJ4h7VjKA+PEjjlDq2B1tAakMFNvZF3zvTBohQ==","shasum":"b083999cfb47b717e4f67a71b7024c14da816f4f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600690048-9e581636.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaJf4CRA9TVsSAnZWagAAlrIP/2Naq4ALobqjf5xXmrHz\n2Cp1IlarY/MceauHDDPV4L6COVBnSUX2CZwhqyxnitnffSJyRFNLb32m7ttA\nHcQd5Ikm0Aj++n+SLAJtbi7SAKPheGyOK+vW24Azn1SjAfyRJO8htSDfSy1X\ni5uuuG0GaAY1OuZ9oxiVWydVA8yBXd/wwskuVjD6v00OQYUI4R+qOUeGY6qm\nm4yUiHzLRSpCt5IaRcmrThY8wTtLHGtIq87L0vwdM6+z3yTmc+B1MjZy16Gb\nhHM+xQNcFCYJbBzl1tcP8MIJeZitSqDUBJhRUy95bLMyartXCMRgzhoJ3h2D\nzKRexL7/ObBGzfMEhpo5fnwCFbPXFk06ruxxAjiZhe/a12oOx60gh02nFBoz\nvvl6CLBAInvIm2H0Wbt31hVEs72P7sQiZzhS9+8QvnZ8APQaOH6icZfGOMzO\nZFWz4+Wt8rAc4XjXLl1P9oh3ysz8l4862Zh3TMm7HhH+2Ccn6shjh6xKIjHm\nbQhCXtI7JN9U9ZrcKqGYchmx5xPlU0aTel71q7I8YrMpzupd6Nl6/9lqwcZQ\nOkzUMsB/DZDwfNrtCz1wnRoMUu0O85klOx9Flk1iT4UikBp+VfH2FIcAYvxG\nAb9BmIWqJVGBY8Z3/d11K9FhsYAmiJ6lXdZ5RyS/cAIP4xhnBsNZT1GR37Pr\niH4k\r\n=bY6l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH4gl2veZGUB1FHHVhKkIzFB0TiyB/7NJ6HFX5QPLmpcAiEA+VxJXAf4RV5mPBQQnUl/aZa5/SI/+52q/wlCx0kBjDo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600690048-9e581636.0_1600690168062_0.5277796504390646"},"_hasShrinkwrap":false},"2.11.3-next-1600690159-1fc0197a.0":{"name":"@xdn/core","version":"2.11.3-next-1600690159-1fc0197a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600690159-1fc0197a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YlJaCp/cjcONr7Yzl1Q1e5qgfGBn8C5SeNYAbO2/Vh9kyckVz0Rq40DIpwZr5tIJ37UJmOglHOkTgb/jxS2ilQ==","shasum":"00a390ce4517137344a33b4911bcbee2703beb7a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600690159-1fc0197a.0.tgz","fileCount":147,"unpackedSize":711276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaJhkCRA9TVsSAnZWagAAr7MP/0Qto+rcEGOqf1Ckq6wx\n5lN/iFMjE6vO5+UHG85GLu/YGxpbMlSzZRfDMUgEfwQ87oBn5b8peU6YX9vm\n8sQP2OMRCh97z4DBCeh8WMRYELKrJ7dQ0uGBf+eqHRDqStCjB0ppOLQpMnyn\nEijAlHM3TVM7HqKrkjSs6h5O9UZ71nSmUJZV50mKws8MvT/2dcCxyC098sIO\nHjVjfu31K8Rtmsqt2DUv4UCmWWsL4I0Gfh2XQjSj/DfkYD7xyqtUTpDmeExM\nXpT4GFydmi+LgHHRvKwWxm8x1PNMqrSpXpq7Hg+YqeLqatKrkDZ7MRjp5IQU\nPfDPEaqmLdK7X36kiGy9nTMzBzeYfdrpj3slZtB+zg/4Uih736MVccjcSLJR\nkxZnozhNF3OrGBgagARYF3Fmq/SBtbtYTYzsGJDDfTq+Bv2SQR0cGgk5jXWf\n4V7rgYsoSIRxPg7KThjYNpfNhsPxErv2AnOFD/MuLlI6clusHuaCtq1hNFaq\nQp03XPyDAMjKLi5WsWfp78FTTPh37UC0ZFAA5P8KwWgVoRNDHA1enwefqigZ\nE/9aFDcxYIlb1kWa3dwE+csHAsL+9T4oX01IBjNxJrsIskRNmAiojO91A5U9\nIAwJOJ4f7FvrkD4EAfhKviTYUcKX1o4PyWhtuVMflkxhvIOD4WgpawiyU+YR\nqNS/\r\n=47uX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBRsu8o35t/wG/JS5dX2fy8Z4UgizhVXMgD2/jOiwpgcAiEAtNDquhAZ1ht0ohLB3xg1jX9NV3OzDsNtEbdMDbVzOXo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600690159-1fc0197a.0_1600690276157_0.2910709737503341"},"_hasShrinkwrap":false},"2.9.1-next-1600691261-be75aaac.0":{"name":"@xdn/core","version":"2.9.1-next-1600691261-be75aaac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600691261-be75aaac.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4EWnngG8ifDc4Y0hmsjqCaonoja0FBUN8Vezs+6y/M9LNKR9nNpyiPtWIBS6PLrhaRoPJMrx1Z7ZjE17WW5K1w==","shasum":"e5cdcb40e92e18050349d6c205d7e36da7bab1f9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600691261-be75aaac.0.tgz","fileCount":147,"unpackedSize":699936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaJydCRA9TVsSAnZWagAAdt0P/At1644+E6rDbvmE1z4U\nh5kE9z7VA5BJ92NpWNiaXELL5aqFb+kCVKG05y2YdczQ8VrX5EWFYbztLHi0\nLFVB2cpIqW01LDodxWmtfL9mImmxKGhwqHfixUNeXBdETDPp6WbH5WtGJkAr\nx8OUBwhl7FTILUvWqfoHlOTjA1wC42oqsjPDwAZeBofP88uaxsCX7a5Feavv\n4ZpM9Qt+ILBVRazJnkIOsxFAKl4qxHFyumTEDJxDf8Ts3dM+u99cxw0/KXIV\npavo4vwYTBYfnnj5oGjuVNzGAMZl4lMQTVle+dQBYONi+Evxqx22Ukje1yjC\nGRltBUEBfnFkuNSdffAO7ymnOYjpeM23lrdXK5jfkFXps8b7mQ+NknV4tCgd\nB1hOGZWT2x9j8aKRveCUJKiNS3QFL8afla6jowajp68rU9S+T9MbmPysN1xT\nyCxJUQhFXvKabJS6+Hm0mcvUY1OE94UqGypBc9ZkHlUQv4DF59GyDOX/WFzo\na7Grjd0ZnUhsNMPUbt2llWt3M4pyi0DrP/3LUUXjNQ+gV/i05zl5AUIUd+wt\n3//VFmU7gWrO25qDun/BDZdnH8FS9hMFFzk/GHDqOhGdJ+LF8frEzuY2fXHF\n9tTccQJVAzRpRVFkKZf20JrJhWDtFYmwWaOXVF0/MnEbM0JrM2LVok/HNOd8\nuTPz\r\n=rU/t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMk6bZltqrIiKdepuXofatPhFn29cDa4KSfVrZSTJUhAIgUHf+SiKqoBKN/Y5R4OwaqCSO3uNrJavKU9KEQPXIAiA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600691261-be75aaac.0_1600691357042_0.50052579783102"},"_hasShrinkwrap":false},"2.11.3-next-1600693352-b865aa9a.0":{"name":"@xdn/core","version":"2.11.3-next-1600693352-b865aa9a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600693352-b865aa9a.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-S54E2igCzL6ym2NGKcEbWVfLvL4AHfzBE+RXlmrV/BYCqnlJmDu61orcAwnLFTzUYTjzEKxZEsPw/TKChqGOrQ==","shasum":"76339c69ba1822124c3bbb519e9ca2269cce612e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600693352-b865aa9a.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaKTdCRA9TVsSAnZWagAAQeEQAJ8nwrrhINPK8qWrxUuQ\n0e1Y4K14i0a0atQ8iw2rp7+ov7FU2cfSyzW4zfWUAqJ4IFIRIolRlo/mGbDu\n5/mFjoY+n4vez+0c+peyNdC7zffM+TUosDhPaN8NNqAeRvqf/Hf1oHCnQqof\ng1UicJ5eDYmoRolxhzMbE8uKM5raeKsmKFELlCXwdrf60rLkc8HS2NijpWaI\nRCHrFke5iK0/XcE+x+7U6Q7I9b9AjqeuH9jqOFi7F49pkgPsIG+CsBDGa2N7\n4gy5v0OeJPEDtoEhVUMyn/eGEIcKUumQxDjBTWenaQ0u/yOIkAeIEuQrRiAf\nZHwPTMUFfjt4FmXvd61da5deYC9l4m2SXomUkbowxQCmgwTisWrf8G2q8HWN\nwuUGnSfmLbwhrS5TTjO/ais4N4Tbya0DSnM8BoooWxt/fVKnwaAHNSiGXbrm\nkdImBJjFlvkjjaBHyekeA+XXZToP4YdqWiVQPNRt+lb4cUj3gXWXr7CGXENs\nGulIEl5HZJls27+/xPAJeeik1qkBaVRhkuCJ9gXZRz4tLrq1uu7lHRBehnHz\nWJLDpjKtX4xU132K77mJ5Z28CpypdctoIYf2su8bewW1Msns0GRG2EPHEmxt\nBVqr+HQa5WiIR3zrF3wbBxL44oU4gs0ojv5leWq3M1hbQETDSZd0x8JCkWbw\nvRkx\r\n=5SUC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBV1KaIk/pNpDNQqaw++RsFERPlzkyfRNB0cIr8U4WEaAiEA0MqseYocKVx7+9bs2/9Hj+3xRs7pjGg3RMtfSM/l9pI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600693352-b865aa9a.0_1600693468677_0.11400846661395514"},"_hasShrinkwrap":false},"2.11.3-next-1600695386-2ae53215.0":{"name":"@xdn/core","version":"2.11.3-next-1600695386-2ae53215.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600695386-2ae53215.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ruN+fIfamL0/bI7n19s1XGSQtlVv4aT5fXuTYkDzPY3ef05BVfDbu2DN96Dw/r56Gy1TqEa0rpINi3yrjvFRBQ==","shasum":"9cac9852f62d7c7723865d42830eb132c96bb539","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600695386-2ae53215.0.tgz","fileCount":147,"unpackedSize":714197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaKzJCRA9TVsSAnZWagAAFD8QAI8HpzkpNem4tcu01Qqm\nko8IdFrx2iR0FDC5rTZiRdC86pmKwGivtcPLeIzVN1T2uxhWv+1v6TmGJh31\nrUvw9H2wpBvchhpvUHs/3Go58xG1q4gBsMUqDnAa33gNuxelhZ5lFqCOkNQV\nEacYRPkteUHBt9N8wixYuuhVjisTecW2hHw3piafJm0pEujqI61+txkq5lFl\n65lbK10PpNpuhbZ9CoqOvFqONDrFkFDWx4fg4bL7wamd5Mv6KmvsvMonJE4p\n+sZhOedu9TlmKkyq/sx38RT2rS6KkYuW2OXjKvHwqBC67tZEkXM8KbnpAHxW\nNOoGBiOKrn4f1RMToE4nRUtU9zN8zB1xg7S8pHu8XL6mki9lgWSGKBMVdT0u\nGpdadPCgy04ig+99OujDKCkq7QZe/dw1bXeOutIt8uEsWsHTo4IbhLEHoK+8\noKHQ06gn6JuillowficFnH+6g7SfZFtAcfy1F3iILsM93ZzgXLgwsosf3+nx\nWhXovCcR2/9UgHpZHxMrIP445fu90/YGZvxo7dNmN+QZ3nAHhiNDAgY/moTC\nK7YYuOGz5u9VoH16z/eM46/FB07+93RpkUq/1XeP4POR9S/UNrD3J2n7dWzG\n06S93j0AV0Um5DWbdsQYWbt86NR/u7hXCJj9vvikZ+ndmEox2ka+HQ8+FFHJ\nYtA0\r\n=eF0G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDG6VB2eqFZMJG/OvOvMtckg0RgR7jB+bCrpwJoFNwsOgIgDI19RlnMqOoOf7ditb48tYSs87UDHVSTg3QQUGIoYIc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600695386-2ae53215.0_1600695497297_0.7297736435074615"},"_hasShrinkwrap":false},"2.11.3-next-1600698599-77ea5694.0":{"name":"@xdn/core","version":"2.11.3-next-1600698599-77ea5694.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600698599-77ea5694.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-oZJVkLu+DvTmSP4+BkcgrRD7KH7SUhQ/U7X2ueP8z+r2dgsiocjT3d14mDCOHW/YmYK8ZNmCpWrWnR8p475k3g==","shasum":"79c158f331ebdd95c034ee9bf1160b4034d6de98","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600698599-77ea5694.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaLlnCRA9TVsSAnZWagAAFz4P/2JKD68BzOHrea7x5ZM5\nD6dMSmv5cGA+RrgfVoZDGk2vBNIPQwmEtRVzLEHmiDwBVo1CyEf/pM5hXGRn\nwbUFN8yYELga5JW+pkkuBzAZWiG7c7WDSb2NnPK1mc5J9GN/CioJtBjojUUV\nykhdHfTF9gAVabPQCN+jK+WptRax8SULbovrTvAbariDW3MEqKDJASScGmnA\nyTtuyv9Q+9jCfJ9L24/UvhDhmyVjcdKLq4/224uU1/KVl0H5Y9uVlRIQeqhX\nsDi/by+kedX67lmKnxyBsZBBA6Qwj4tYpei5mHdAHCnr+uiB8Wcxe+GKkcvm\nvl4+43YPLaHQTYEYLxv2cEWoYGTDNpkj8OT5WUx2WEeu9kWYBEK5CcbqF3UA\ncwn+/2xey0q/rQe502+IPT3VLousWeEaRDIIT7Zm++BgKVe1FiFdGevvFCbp\nV4qzG0inlK+E4e3xoBQATCDNhc88oINdpPaVNe2Asw7R9p2NqU/Lv7l+tI+W\nVsHyCEAVw7NU6G7fNsP37RWzFhgHkTNNy07fTvtLHBILSkyt1x2dQA0OLnTk\nEKfg8bAjRVH+TW/2Mno4LqmGyzxUaqKdvJLSzKU6MXmFXNrsaAuaunscN5mn\n50en7VvtQpK3mbMcReq6ladLf1sBZkYq9VQGLWq6Y7LKlWNAC7OHPQexvJyU\nYr5b\r\n=W7SV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaVPqPNtoMDzBi8F1DJ3O0Ta52NqSzQ6sssHhWlmX4wwIgXuUZYneKEPD5XySXP7+YQEFGTUOZU8DM4nxEEBTPyGQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600698599-77ea5694.0_1600698726408_0.18503673003354848"},"_hasShrinkwrap":false},"2.11.3-next-1600702842-4bc1b0de.0":{"name":"@xdn/core","version":"2.11.3-next-1600702842-4bc1b0de.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.11.3-next-1600702842-4bc1b0de.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-AZR4vc4lBkWvf2GPOuZ6ZAUvLaWLfS7163fq+4sQLnD59p6vPwCdlLFeww8cfIFwW0hu1bMMz+DmVvt0W/Yjhg==","shasum":"0b049c5e676cb8e9ecd4dd65c43969bffbae6ca4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.11.3-next-1600702842-4bc1b0de.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaMnrCRA9TVsSAnZWagAA/9MP/ivxSwkzMeZyDtwxyStW\nd/kp3cdlXvN+PacXeBp0pFG94uR1bQOPvjXVpHKDjNTcU3YJkp+O1OHo0Vzf\nkSGc2WwIt1/W8jtvdmGxMeJhzAVhVAYdaPS3W+AwGYBc9cu8yrHpWF3Iva94\nWOD39LY8WWMQGHaIWqbaIm5bOJfMaAOpQnvfFSbHU7c7XH83estJ0JNRubkD\n0iP9/wmp1A9UWkFmiToplzFk+ihLJAq7MpgVYj94rQBq9ba3mCLe9lB7H5Ny\nIXEcznBzEgquKKwJcBJ+NtsMLrSRRWb1L+XLFm4PgiWb/cLWxot6CnBUgmhw\nt/U2O+5XO1RLrYPzbgzs+JEFOB4yhu7oFTdlFCptE0M3z7WZ9s2KOltiUUqH\n7sgdIYp9OE0klQWWvYlu68UcxVrmiAEbrjQVj7qVPsOm4g6G8WkLkVVJmaV7\nURKp6gM4+Oe4BJo1UHYPM33aE4UuNrCPXi5cuMoQVqJTS+7SBpsCUjSfpUN2\nn+zAwBg1iatnr5rbuZpzvo3F66NQU1FymGWyzfAD95g427GDTAMRKKWKKzlG\nHflCiLo3Ixn0jx6EBavHHfaTw7tjjZUly18l+x00nvh/NQNdn4kcpkkMAEfy\n/u/DLDl1VA/g3m/ZmKNcOTu5KxadVBE1MrXr1M7V2mLEpgkkYLDGc6iaxu/0\nRLVI\r\n=nKyh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCis4X90sYH105Q//6+MGIxJaDntThGIzkuBiKJv40PYQIhAOr+rDoNwBVYnRoyF/iVveaHiLSXNLlyNijzZooDwQrE"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.11.3-next-1600702842-4bc1b0de.0_1600702955354_0.9922387721070483"},"_hasShrinkwrap":false},"2.12.1-next-1600705560-907c88c9.0":{"name":"@xdn/core","version":"2.12.1-next-1600705560-907c88c9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.1-next-1600705560-907c88c9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3cMDkoZjCiEN8qhbv50Yg/huqbII75qZbTCHX11WDysztJrMj9q598cV1gt4P/VnS3STb6vU/63oEXauoTBoPA==","shasum":"f396aa0a01b2a82b192aa630bd1907d66a556a89","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.1-next-1600705560-907c88c9.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaNSJCRA9TVsSAnZWagAAojUP/11zcfP753tIr6DOhqcT\nQdUdbBCFI9apeAxk/KXu3+MaDr7IiUFVi/jG/zGsK4/USbgPS81aQchZS41i\nza+BIiFovz8L85geQoikWUeQ/ipuVMx8t0JsNyXSTxqCnWllWuvpoP/o7twx\ngmMIwCLq16ykRB9KRsdVkQ5VHdoBMMvl1YLyU/WhXGnV9hW/DABHv+jSo2Md\ne25/jbFxL5jedKgLv+vchunWIrww8yWUbA6eMw9Q0XiX5KsQadRg9ccVFOJw\nvLXt9QLjhuIxQ5nBANmTMYa+TLSatseKFNi3cBfuOqMRnXgambgBGfFI07FW\ny5OnzN500GEReoBGCtlhxyygtk6QlsKrqvRvcpAaU5SMj9Lx/8Bs/JjHqWOe\n+fFCT0UVywI46pt2f37KJz7I+SlSURE1OrKojdL0gu2XfSC8xhTSvei6rdJc\nYqs2vLwbP14K2Ouq/tNQJ4fmhswp3aA4WlEpbr6M2OtTwea4bvVv1pcWAUsj\nOm04QLVQHbTOy8hK0NJ+Nur//odRJvgNCxCJNiI9iPR94tdmkbuL5p5AsyBV\nX4snxTZEJPGd4yNAaOKz/bmqM+vAFvxTBrFlbHe2He0XqkSg+9q2Owo/sDYZ\nF8cvdVr9bgd7JSYKIuxjq5QGsQPiKyMikWQJQ/gVM6E9VTNzDhxmUL8JLa4r\n10Mi\r\n=Cg/F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtGYhCwk/xGhVWjlR0tzM95Smn13HOKTaHp51TnzY2egIhALcmprtBGs6Wqa9rs4p/a+Hmh0t3ZeAgMFTro7tlKkT2"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.1-next-1600705560-907c88c9.0_1600705672708_0.5496163193249135"},"_hasShrinkwrap":false},"2.12.0":{"name":"@xdn/core","version":"2.12.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-djYreGipOZhRLqDG79XqTiETRkctIIJl3d9XAhiJ9nIHboPxYDGfUyE7Vw/hUQG6kd1pak5bJGp8GlqrFrNK4Q==","shasum":"2b44850929e5e573b9af6bb414bf89ab39d76d4c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.0.tgz","fileCount":147,"unpackedSize":712342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaNS4CRA9TVsSAnZWagAAB3EQAIpaSvPYgrT/YltVUnCl\n2IHLOTPy9WAJ17rNh7TrkulU9C/jvwglr88LcrqC5rEv0uYKfIkZFPNvJ4rw\nr79EQNi/fWbjQ/jawLBZ2YObuAK21Gy8jxXB02OQxD15lNIPzGya6Jynpo5M\nFacOEEaAliHtvz6LFMbcvhtUVTwIcsPfJqCTrAjY7r1QYtd9dTcYW2mt7uQu\n3UcQKpD6WJqdnnCIsdoKyg2EdyAaRpA0UWyQnYpmMx8F6+fHoneYXdU2iRtg\nd1jHODczJ+HnDRqskFc1IkjHFhHdyRLZT+I1beoFCxND5smNMso3MXvbukjO\nNKJt+XxE0AJ2qVgEMtIpzoH6kiwwfR5f2KE9t/k+cMTakozxC+tmF9YKp94o\n3VzGdRtNRp/FMzfXhsHCKwvCES12NaNoDHupP99bMAHOF6LTCjsHcWDN+ZQE\nS8eEt9XFvHwyAmJVvp7DIEjdhbZzGyzJuwhTBVoElouRLmyMZnHLdPivcMbz\nXrzFzSlps1OuSVyXzT9aLmxlk5WtE82cJmHGxVlY8lWK6GytwUaKZXHqvwr5\nZoW02IxDc/02opX20Uqk4eygms28PXs7fgi3EgEJc5Vf5UjhgqcV++Gp8uEi\nmnPm4o88cw2Vv5JYwFYFPYDYBcEr0t20BRTqXkL+QzVJenDQvaYxXiqCQhrC\nQwug\r\n=iZ5T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+eaC8VBsQYar50WaqkrwO2gRUduEU1ugCq1TgT/34CAIhAJyUofOgXnRETqPbvFmLgxWA6eaoZvOuNqD03zRx1cKr"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.0_1600705720176_0.16705630807623262"},"_hasShrinkwrap":false},"2.12.1-next-1600722094-08d43063.0":{"name":"@xdn/core","version":"2.12.1-next-1600722094-08d43063.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.1-next-1600722094-08d43063.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YVmLT6cWqP+lhP6OwQkA/a0B+g4KSY4GwBkDPCiZaOHCeO6Wz2GzpZnuoQS7N08HqIhFwwVbHv+deuDNhT8HRg==","shasum":"b8e7f6a433a00465617d2f14ba2b526acd36ab2d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.1-next-1600722094-08d43063.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaRUxCRA9TVsSAnZWagAA6MgP/0fYhI/brVIZquA6iXCY\nznxX18xQ84PwbbRasddr3WiWR4ruKKLlBtrwjvpXJOt1+lADG9g68vVRBnJa\nSlACngOL7KqeK2U79xou1Rnawdp6pLbuo96yLr+R/QefZO249dKOWhZL13gE\nCc/pfMHiGTHTh2lgupBNNOLKcRi4Z6xorRgL0RPqwaff937vmXhSPgZyTKv2\nlY+yq+6FLkOlc6/S50olSO6yDMrH3pizxNdXN68C9HK4HBZIqK2SJgCq3MIh\naelJvgcetiaCQunWfpkYlapaapXuPREsHJmAaTdpeZESLQwRjGsRXVyMKrAV\ndfbpIseH+1lV2WlLIO/PhYe8n01/av9Z77T696V/CkmCSIwkfqxFa34scwvn\nnlfHF8HyM4wSQdl/vkVgbn2s5Tb0ZO/ZKJajxNRo73NBFUMaLmyj7A2QJUWp\nCT7zKMXoICUGPMcPb7YPLxVpZr1KvgjIwjB2QH1YrqmFcsXvoahKRdfyjx0C\nuBfP+NhBb16+VbmEE54fQDfyGC6o/0eCEPx0SlPp4qBBJsLQfsUG+QAGGWwX\nnfFIFSK0F+cN8d5lKx5mWU2WhhZUXdfdWpvD8iv+LxZOQPVhonDUbjS229t4\nHL/jufIjoTTH7kDe5I72TEjZLjnOLYNzgR/d/XDSdULfn3z2wuEXYjbi8ClR\nHkUz\r\n=De7r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlmtpCi7S9HJXIY4r6eDGqmj7sqByjMdm43AMAJmXyGgIgaWiF719SdSXxNZ0JtmLuGjDgvgsynv5O3QHGB/9Nae0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.1-next-1600722094-08d43063.0_1600722224607_0.3752056055559023"},"_hasShrinkwrap":false},"2.12.1-next-1600723587-ceb25f8e.0":{"name":"@xdn/core","version":"2.12.1-next-1600723587-ceb25f8e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.1-next-1600723587-ceb25f8e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-u1NFA13D0iaXMHe/bFfGUDFpXSAySqfVUzJHmZm1L06m7F80myr0Bnp2+dXUl3PSLhDR+4bZmZaMQ3s5gBu4LQ==","shasum":"b0f70ee9987fc38be2316d90757ebb7a1a9e4502","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.1-next-1600723587-ceb25f8e.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaRsECRA9TVsSAnZWagAAFbwP/iGUZCcxKbweJ7PXxoZv\nXYogiMvaRMknjkBtoc+TiO7qAvV+MVdaqB1hy122OwMblcBoyE0woQgapquX\nOmKFJ0zyHsVY17XRPr8FOiSXIbeLiT5zbTbjtZTMIgmDgd4maQJkSp2hW6M+\naY+bjrDWvDhtcoy6TP35uqVynh6drYYoDCyWt+8aPT75c573RA48//7/hs9s\nlWPL7nUK9Z+O78yzK4Hgs2/bZb2vsguK9ng++Cuyd+uEaEjXRKrz1WDrpskl\nQ+F7LGGu/biDvxahhb33ePlcjVb7k5RlzbHOv2I6Eflf/E5bOB8QmcfLUD2j\n9RPpiAQaDz8gk0fnnxRhOX9+/zsVgV0ODjUlvD/xcqx/tr+Oom5Av5vsrIdj\nJBWToEI11I5uE/wGbcgEw5m9/cPmb0FT8Kz6RLq0dmQdUY7MJ4351rq3fhrx\nCQ4NF9ABaqFYaa7/huIaqa67ad70z1cahZjJLpo8epsnfj+GWef6M90rF9V+\nkcVsAkuJCI35IR1X7osv1VyGkBEu1tCmWjmqDh2INZBDkCs0sRUPJ2vF4XPw\nK4WuCL9srfW7ONhvRzDos/nFIoH+S0GczC1WIDM1Xf1/2tPPsykcF18hY+Iy\n45XLUtzCog1ffXKKHbbXKabkIXevQv9s1iAcjPHrrMsmnwvSOMJWuPBNaUwB\nJcvV\r\n=WqRu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIExaEu6zKYxJfe+DDhGJzJmPejhRD5aXzXsLnawuk+4JAiAQDSJYW7xeMMIWxq0HIRRO1ZctxacBi/ElB3BHbZFVsA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.1-next-1600723587-ceb25f8e.0_1600723715683_0.49827712213099584"},"_hasShrinkwrap":false},"2.12.1-next-1600764529-80f5fed8.0":{"name":"@xdn/core","version":"2.12.1-next-1600764529-80f5fed8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.1-next-1600764529-80f5fed8.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-M9L6dmvafzbO8Gi55maJIoDuqHhcw/M1gfTZ8kQBcbkNHQBmY+uANKV1OItNrILdeFXn+fvHtLrCMxL2v8tGZg==","shasum":"3468fcab5ef24c9f9b5d4607070b18dbf9801bc0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.1-next-1600764529-80f5fed8.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfabrzCRA9TVsSAnZWagAAAF4P/3IaCc4b5fWCDqLo6swZ\nfAWD736AGTOsvzn8tkXjm8Ydh3Ed1gtUFKVwPUsOGV+7g5FX8u8P8sZY/US+\nc82FzKfDv6h0BVMTQGrNQ46f/6GyJqcnjP/e/bPKGldqTwutwNErhc/bngHa\nZGco5YJWC6ZPqLTPY3oEMvqL0DdZJNOEA5AegklYlY1xOLVguFI17wc6VYyU\n7DTE0Q7d8jaGVaou18CMJiV9z6tuQTBtpGU34iD7TPLACU0lpYVfRjXDM9Mn\nOSus9yNMzaf2pgDwhdwa4hodoKnzBDPR82i035bb3T8qH98wiBxDqxzUmrjV\nr7og2dIjuN51wF+zwIcatEEbS/Ly87wdVWQQHfy7k/LGDR4eQHkNbEkkiR+t\nHG9BtW1zeICXZygD3qIcUfCgUPshE5cWWAtVqUGE/jLoGyL1J9i67/WvbnQr\n/i2hesdf3UIWboPVb1i1aYQfhWOPLtBsaX6mqiwsKBWNJtGZBAL99YtNCSoq\nZPNlig5b8HHQtnZ+gUfjmPz1AxmwpWCODByd2se0JkpmKF1KR6RQyAp92sK6\nsKmbETVwQ3qMY7+K1/FQTuUx2xaUCv6pwVAAhqIl+zIyWyI2GPARJbU6CmaY\nVsupHDPa1Od0OI5e6RkZwXCM+NZJerzdPpV7GglYp7dgR5O1gOhZ1Z1KuXRR\nGkJp\r\n=UXp8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBAkjmFxFc0jE0sMBUFlKvHEFP+6MS2Vr1GcjHrgWNg7AiEA/mn1xnFjaC9GBmA95hG2mX58rKZDu6WQvcEJMUGObUI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.1-next-1600764529-80f5fed8.0_1600764659254_0.6357951173820167"},"_hasShrinkwrap":false},"2.12.1-next-1600764642-12849b1e.0":{"name":"@xdn/core","version":"2.12.1-next-1600764642-12849b1e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.1-next-1600764642-12849b1e.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Pys40yslE5BzRBjwFO0D3lYSiSrQopHu3wGwJ1YM3uoWliiCfcbM6aECmgJs/58SbIqVaZcJuKVXzxP7CCVGpA==","shasum":"976642ca5c7b0ab91131056efbcfe6d84f94ee3e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.1-next-1600764642-12849b1e.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfabtFCRA9TVsSAnZWagAAhGEP/1Z6zEw6qTM0kJMZeKJ0\nr1sZca75HNvT8lqkBeXKOIyVFb/OiLGl76P9pLZrk/8jcWETib2B8vzsiSPQ\nM+/gYesaGAD/PNMmgv2M4gRwLnCO62FXJQzkstZHEcly141HqJ8fu3JOMP1t\n/BDRAgARA75P8wnAWbyYuUTEj11dl13YVJm9wblSBumYjuQI6+vwAyKyWNWw\nDvjbyAY5A7EZTLVX/ZpDGYFXz1+9DZk04MQFfgsFXgRyEnpUBFMlaNzRMp4j\nROTUEnu9dz3nLXG5/js3WSke0xyyME1ZsMXrq+aEmChb6HL+Mfv5a9T2Gv/I\nXthqr0UGo8KuFTRVKyf8YWhF4vp8F00xR341x3E9AJzbv8JC556liyM01ltN\nxqtyLODPYEgJ1MCsJM6C6XYh+gnvPHnx7gJv9VJFq08tvyofBu/2aDRxz3Ki\nvs0QFYXqZXfAMXBh1TOD6ixDx9dO4yuiTXwT5aqeoDBQ8y4q6tOonXh3u8cj\n+ycnWETA3Z6logowlRyrmqKkl42gQr/WeNe8ePVAURzN+vYzNVQ2Xvy+Z9U0\nhm8zIa3yMbDQNCEFYkYhDTcAzxUs1z8bUqjvcxTXR0ivGXAFKIc+Lebump09\nEyhRDzAW6tkruaxCJOMIq7qNiftGK/naKRRf6JAMJI5r8iRmOF+4/Hn3XnY2\nu/H8\r\n=m5bo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBmmmAhq7P/s/U6lzYrhbKCSuNrSR7QhAQXLo8J+Qi94AiEAiYqM5bJAEl8vF/0R/g3wctBROGp5w3vB2VbYra6CA+g="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.1-next-1600764642-12849b1e.0_1600764740900_0.04742397186774716"},"_hasShrinkwrap":false},"2.12.1-next-1600772189-208e9dce.0":{"name":"@xdn/core","version":"2.12.1-next-1600772189-208e9dce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.1-next-1600772189-208e9dce.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/vFo/hLOi73OIfBjidoNW9DMlY0HpComH7VRytNb3EJBThyymw/WV5Hl+Mu2zArhqMmzW049a6j0gJRYwBxXbg==","shasum":"72498077dc9002650e6b075106e1d97aa5b044ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.1-next-1600772189-208e9dce.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfadjVCRA9TVsSAnZWagAA/9AP/j7NGS387THQ4iHbV5iy\na5ggCFvW7PLKkdLOzNn6CX1lhBAQjqEmr5cPzvma0ZY4OlMXF6kn/v6iIsrf\nfDKS1v3YOGpuMS2/7gUflAe+rj9dMxCVj6YFRUlRdQGeiB+u2XAy+SQlDPAf\n1CA5Akfnm3t7ImA+UH2sZLKHTLB6f6cLyKjEZTXRN9AxeWv/+Q0rigT0p5MR\noPlLjMxtpYOCa4HYce94bW0QibsiD6kkIcwdiqCQdkesAnEppwjEHZD+PZpF\nIX2kyNMevKxvN5fWilpQJ6GoavjOncof0wefsLPOaDd4D+YJBdQliXiK7iMB\npr5Kcz2cB5SX6jLZbXXNkG8T6Ul/cYkdKbw5PvXFJtP99BreUAtEfEHZ6g+3\noFGtvZY9zMpUKWsS3I+uphbbCj7D/Lzq66Fka+XUh2WP1OR17HGEzh4+feZk\neVLeaSTbgSgSClT7WRUbP+0R2lOjD3iGO6r2UWKE3cEdTv5x/JtlP9JI3n3i\nBjKAk54+lj2hKX+DzKSEbLahoXN5y6bn8F6l+n51/pz0x4py1GcWZh6rOS2o\nym/jvm8NPJs0Xinvv6zAaJYiVwov1xzdYFqn9xIfjctGhD0miJEzQNbOylZr\nxV/id4J3ksP94tkcB8Y5fPOohNjPgUEkTQCh8T1Tx4rVYEuUx+sYMsA7SgXW\n9p+L\r\n=TZ9h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcvwBctMs2RwF6vK5i+nb1+MJRMx/uiWmWG/ROeg54oQIhANTpTcRhQWiWCFYy/JVyPb815QFgvw8C1XlJuCNdhWRd"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.1-next-1600772189-208e9dce.0_1600772309164_0.5614306814451049"},"_hasShrinkwrap":false},"2.12.1-next-1600772439-1f72ffc2.0":{"name":"@xdn/core","version":"2.12.1-next-1600772439-1f72ffc2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.1-next-1600772439-1f72ffc2.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-H3IYV2oHBfA2zbokTLklPnpM87w73CQIUM55YYk/o87kxZ7tm1OfqNM/bkcYYGe67FU5xs+Lf2oCkGsoZ+aPlA==","shasum":"c7d89a73b36ce463758395531625119e63981f1a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.1-next-1600772439-1f72ffc2.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfadm/CRA9TVsSAnZWagAApMcQAKMV7NIGqrZ9EXPGyzbL\nzV00sNWKoSrWY/2x56GfBMP5E32Jcdbptg09C1MM5SBqM0fvSy0Zst2YjsMx\nQFMS5Pgzdk0xjtRkCZLztPaQb5tjWY3n9bwUHjRkodZA10EytTQl3PsnUuZz\n9SruSdNv802vmXmAA/h7Pvbjk5qCoC8zF9EhKdl9rCbYaKKOm8nUI35NJZbB\nKy+loziKI1P7UkHnX7IwP253ItpFvzrGKnOh4D1Ed7VuuFBhWZlcgmpVbgK3\nGnbxtqnWA/SEZDAyIX3SdnsaW50Yux79IPAYlf6HlwLE/geJb97HpOhv1oQy\nqCI31ymFjlCRi2Rc9WrvxSKXt/S6Pq+Pvu1D0pXqAiVB9OPK8EizIj3kduIN\nc7GRxCVcZM+kXpFSaXQjONkMFJzq1uBzceII07gDZ7tuZ7i5ymFiHvi6esPx\nsVN67jU8+Gy/bWeMzaG7pOEwCwsKQPiR2NHXUkYA3iOAsl9xroryVz+FCaGv\n/BXDv70WpzT05sXjoS/gyju25JH6b7g1h4Kig5m5vB+GFtYTxm/FhiN6CDve\nnS02fCkhiSiQMPZvSvnBXRNmcEicTuJIbb+6XFkPV9mmjJIOegdPtOUrzOS9\n1pj4NJbk6EtR3/LGF4pKZZUTxEgTDswJpfAOgZgGHJjTaABOxZ75oeWt4xTT\n4025\r\n=38TT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAg81ZGw3++irOQA2DfwALnl2AAwqE/RrvKhUXPSHVSPAiAmucuz7+fhvmHhV2EVW2+zchgjC/Op3oNM+F7vBE63Uw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.1-next-1600772439-1f72ffc2.0_1600772542619_0.21389915561206174"},"_hasShrinkwrap":false},"2.12.2-next-1600772740-3c7e77b7.0":{"name":"@xdn/core","version":"2.12.2-next-1600772740-3c7e77b7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.2-next-1600772740-3c7e77b7.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dNfMNiQYcBYfATSADB2/4UijyL7HAKZJRql2wW5Lp1EVgEZyAOyTVoiSIvPfhgzRsDqM3JPb5B+WsYu6KryPUw==","shasum":"39e316701ec7d2b9a74df728d952b982acb45841","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.2-next-1600772740-3c7e77b7.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfadsACRA9TVsSAnZWagAAvXkP/jKxqDL/PDAKb236urvn\nDlbwRiQ1xwI9QHVBasiApZdfjELqTAlJsoENTyteNs4UkkHFr1uQVofZL4g4\nS5Pp/+ix/pWW9iDddXcY6OmCr1lmqX+Pz3x40C2uGvy5ucwixJm9LXpnaEgf\nWwwetHYVQqqnGe0K6bN4Qv0eVJVOAma3JvCiYMKs88DolWAIgBoHMbe1tVDE\n5kkU6/Ev/OGhWkwHmRKlQF6kfQwTFKFo9O87Q6hvjPYUJdPodDA28fv3xq22\nbQuYsvoDIT0wUH7YJquULjQl3X7g4IxUHQWewUQJhUe9Pg3O2urpkIh83S10\nhEF2ZPYRpkS65uFdglXvbS229VymXMkYGdKyg3ELYPAW/P0hx9Htxvh2vktM\nCkSgR+8cgZ13v+boZju1sjQniKKgOjD2DURhGkom9UGuqoqEn+v4B4Lv6j9K\n6ah+yXYa+OqlmTePrd0m7UHDxS9fSKPzq3Bsx6Pnwqsnx8CTcPlFORCtgSAn\nsvx4lAfvaSooeVSBKAka0TsGTuJgFCaYRjiKfOTsyGnyH34MUu9n7jkqhW+B\nAi8QRPuT5f5/HB+a4UUFvoFI/bGtcxVi1pwIn5UZ7++3/ZqeTCKKWeI/Tp72\npS98dJqaIdU5FO4przTJfOwTZfqi0mHMsMyc9+0VsRGRFuq7bs+/6IG6AHBT\nFaLN\r\n=kSI7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGX9xtRS1LDqq5dSvimq8z2KvwGxCNDv2dA/LJpM0W17AiBI693mfWOAaV8C3KxvASGnOPgqqQGqUSLmHeYvyqvWyQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.2-next-1600772740-3c7e77b7.0_1600772863691_0.5427407823460366"},"_hasShrinkwrap":false},"2.12.2-next-1600773266-44c5cea9.0":{"name":"@xdn/core","version":"2.12.2-next-1600773266-44c5cea9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.2-next-1600773266-44c5cea9.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cfp3OI/e9oTk/Iar0aqCyoQZ2CyGbA/xLlKsT0wLqNTuFgc7JNwpuEK0EFsgrakNadVvqc3gTw8OK6hDl2F68A==","shasum":"342223f8bef53a4f1c77a0ff7fbd02ebe316f7be","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.2-next-1600773266-44c5cea9.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfad0ACRA9TVsSAnZWagAAjl4P/A6/JzslFwUBBOcQ4Gzn\nlgpzUYPlownzTZvvvpP+Y4WPD+N+PSQzovy/KElu/vG5m8+fTCdbM3zN82/7\nW3yIma6fCJIwiXkoq+Yxg/g3MTxqPI+b5WFNiu3vyE9anKEgj5GYEvlVKt7G\nYnVa+dI2seku2Z3PTe695O/iqFzVZpmAX13mxuk8+cqRZqAJoMsX4Z10++GV\nqpdILY4MSEEPgdSYDaAw0eW40rWDgx2wljQ0wRgBCPU03J4bYbcuEiiphgAi\nPa307jlS5npc1sjk3MPbqpuwRADkJxy2OPpgr2DtKmBmn95ZOyHfKgpRxEL1\nnFVrzNxin72MjklqzSIJh503iI/QUNLPQwMFUgqKdeM8gQ4BgiQJFdw1aXFy\npZZCk0iG2Pr0pbLuUwVmTrKx4O5sSyJbUt9FLeRyzxpuRN02/njFLkui0faI\nIbAyQasFqDGFQIzTFC3cgcrTYPx7UE/f08WE5KVB9FVo7UK86TzLW3kqfIhN\nfgJXxbjL12SztCteNeijxxRC7/F3OpTD/y0LIB/TkD1ZVXhb5S7iHIwmVDXt\nS8cnhP/ynK16X5ucmGYRKWxdDqmbnZbTrEzNoCgPiZfEHUfLXDIyXqOo7+uf\nkDk/ufOBaGwF22s/EHpuMTuuP0fcsbCxQ6YBZgujtDrg4oYLQDM1X5+xzYJy\nPPOh\r\n=2fyL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDX0EOo4iJxIQRKIM6kJ9fXcI4/cVhCNdYRj8A7uqQINAiEA1yEZJcrpX+oWeKEXf4/zyRipsRS/Ou48T52UIcKNTIo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.2-next-1600773266-44c5cea9.0_1600773375863_0.2725893915898423"},"_hasShrinkwrap":false},"2.12.2-next-1600773338-d65c7a20.0":{"name":"@xdn/core","version":"2.12.2-next-1600773338-d65c7a20.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.2-next-1600773338-d65c7a20.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hmXcdBaPOx9QztrEldBtPI9udGjBrf2ZjfjLKRyERmgiR+J0Ly1Vr8/SsRNj3bwR8oIqCLIWdRkhdOR5Rhu8Ng==","shasum":"776aba0d037d23cb9321596524cd0e6511dc3a59","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.2-next-1600773338-d65c7a20.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfad1KCRA9TVsSAnZWagAAPsQP/3DiSbEP2pLsLwbB3zt1\n4c/Pg/sVIYwaXvRd/hslsoZ0R/MVcLZGQn4GTqAw6W8+RL5l5AQyatqduUQ4\nq/RWg1+/jKSoAuEjt+wd9iRv9cmPa36xO9ct8nc5ZJMeXr76zPsbvtLNKm0b\nxwldRAiGkF1s0blDixipy/idV9DeqzSpwJm8mTWbgtXbcsQkgUdUg8Tm14gb\nmkp4bPI53qnhne6Ka1pTTf5NiaLCC68x5K8sLIXQUDA0V0D8E3kJ8pPSMoB0\nIY286TF9nqFSTeAtS2+lKtRkGxdLgUU9sBtioxmdtFysRYLFpRwJMvUWuOlq\nfrhrh56A1uCZUx4aSoDQb4ni8e9Ux/K01jkvD2Eu6wwBVc+zKIcnBisJOSQt\nRadJft3aIp/mPO0MX0fIfdXauG0rSlG3gDs1F7tDkb2QsDUF4RjgKwviADmU\neJJ4bS4JglZtyuLC0qXPE65Te8q5sJDdOVyM5bO+VL6gT6OnC4DW4cUMJ7Yf\nDDzbiRb4b2uuslFYNpl4CUPNqcCpz0XDibbwButbEArZiLrSXko/R6294hKX\nIN2TskIS8i2WlN0uFrIDy8IO0bg/FlOoc8Jz8yTHUyTEJ250CyGUYr9hizK1\nyHyqaXGtDUmmrJb7+aCU7qyGaTJFIn9oekHseAjyaonJdAdU9QMMQ4vfCkFI\nqIOC\r\n=5Bp3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDs4XOvlkWYF0e0RsiHx8L7doxTcP6kMyuPRF54GxaehQIhAOr9vpFnRcYmV/hLoC1C3tFfIT+NyWvXHfkwuQ7DBBGI"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.2-next-1600773338-d65c7a20.0_1600773450000_0.01855739081408858"},"_hasShrinkwrap":false},"2.12.2-next-1600775957-d63a6d49.0":{"name":"@xdn/core","version":"2.12.2-next-1600775957-d63a6d49.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.2-next-1600775957-d63a6d49.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3HnLRwuAUk3mVN6JQbOiR0hGGEkBvLrmc6R5rh6CYW/nGdOdkDD88vQNQL/ZGz/uNEqccWBTNuLQbWTyG2LgRQ==","shasum":"043b3182dfd61d43860c206a82ef836156b982c6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.2-next-1600775957-d63a6d49.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaeeCCRA9TVsSAnZWagAANvMP/1GlA2FM5kqp8D32Pize\nCEEPUN8odNDwN01YlifXETbnFiSORY08klfFKhl7SUE5ok6E50o6mSoVZJ5Y\nZP5lAH4VvyXF16TYdJfucqu0i0ZJZQsz8RP69T9oLOIR6OVJR6l4D1gP/i25\nDaeXEQTjT1HWmHWFDWeqTH+h8s+YpWsN/gDZLrhN1svh1avWLfCn8yxGdbH9\nCl9ZRSmg4xFYQimUyTLKQ+RIbbZsck959Kke4NBLNZJxuhmHtBuo6DHFgRFY\nK9osnGdr6qc/0kbAqpd6qFCE/8XluNrVzWQDRlEA4FEAJODXupaTgeVTt3u+\nevWwIXTHCWtN/8iPhc2xZ/SOrotI8dBqZg/lrSAR90rXkJZ5eruQPxAmWZ4X\naBsn8Iok6OF84mZFbz4PChsOUXk5asGNIvtOFfplytV+UUI0XIvGk4QucQir\nWBryoA6bPyAkusAlwwM1to077wV95H3MMMCokaedEjxCwgoA25kX4+a/fUmA\n4J/ysHy3XqhX4h6GIAOSM+mlqsMW37OLrgAJxBs28I1EWn5xY4wEvgvctANs\nkZIjetQa/4Mw1Xs4BAuDK5R3n6NzpLAFQK48Aq53QyE4bdAzeQo9FD+daQDd\nGREpF+qkiXSxlbYz62Ysr4CC3bbAImLzgk4+2f5P3uOSdqAdjCW2a58BpHpR\nVlKS\r\n=c7Zf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBzfA++jYYwqWC+ngKzOw7V/dn90TyQ+m9bn9pT6XyJwIhAJIozubGgFmaIdGJnbZUJkmQMtxufi+/IckSPprPhpv6"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.2-next-1600775957-d63a6d49.0_1600776065842_0.6625543011370256"},"_hasShrinkwrap":false},"2.12.2-next-1600776181-14c33f55.0":{"name":"@xdn/core","version":"2.12.2-next-1600776181-14c33f55.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.2-next-1600776181-14c33f55.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VowLXnlTVDGoN1rEvhDcOyCKq0y5xWCst8AiZ84qfje88LU/6p5Y6VFfmugQj2AbaajJ6DZxabzVykhO9qnqNA==","shasum":"f40c1be9ac166f322635185a05f73c73f7c62694","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.2-next-1600776181-14c33f55.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaehxCRA9TVsSAnZWagAAF0wQAJ1qTNbP9ZaTemXAFmrT\n2TR4HLBFybxNgP+T4G+4UN8fl4HnNiJn+A186t/XeF3IHuYAI+weoSl4QM3x\nsBiufIOIzcL2hDdp8LlvX5QY7Pu3Oqx/0wXzNQBtrWv9qdyOEhkoxNOMxoEr\n8GN7jNgsCcpwrwbvDix0cIUSm6xX5Dy+Ci55Te0G6JhTglmJlwUSetGboWTK\nT/ZdCD3lenlXI1K9aXuQuuFwKCwChtACW7k//7SvMQ77wOs3IkXM6ylgLoIR\nmnyUbDyFip+1p3hMeUkac+K6wlvXLa7MldDP94a6KeVBbqd0PqPuWHl42g5o\nbznjn5jUbtx0FkiYYqiTWKggBA2xIFGvKJKGwaLnd+jlAh2B6tgSWqTQxJ8j\nm+23EFou9xlIfbASqFMUmDXeoX0Oe30OT4gAVt2BnQefkPFEJhv+Fpk8o+SZ\nDgezLgX07pNepOTGrN3E/XVm6BIDxclL/kMhqmbosuXNNi+4nX7EqTx2RPGF\nj5XR0SIkM2lXIaBSDZoAph/R1REcWumwW/jDzC1uzXvlo/jgIKCGf5CFQeTB\nb+HR0dbzRknavOfNV5lU6ft0ss1HWPbXU/VQKzXhQmqfQRXHc9r+8xVcXKFl\nVy26/O7hc8oHZJ2a1LmH1u31zMQDTM9RPPiwXmdf7Zv43Z/+lb2GnvRCQJdG\nryfo\r\n=gtlo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFC3m0Pc+CtqJ1Ly1XlkJc5yEEN0RcP8ImqMVPzb9GnXAiEAvRXxPLCPvttA8Y/1zVC3kknDxNZR5XcME9A04ExWqCs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.2-next-1600776181-14c33f55.0_1600776304626_0.7192271076148213"},"_hasShrinkwrap":false},"2.12.1":{"name":"@xdn/core","version":"2.12.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ksCsAM7Y7wXm1ZJmyV/IYD3lglNAZg5z/FeEdbCLPHtlxwuhG3i4RvCHs6fOl67VHkps19A8Xsb6or1xv0bl7A==","shasum":"9fb9fd656f7c3ffc6fabd8171a2ee4d100013b3b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.1.tgz","fileCount":147,"unpackedSize":712342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaepmCRA9TVsSAnZWagAAvBkP+gKVbZL98D51YZRi1s0x\n4jept3Al6cdBA9G7sQ3GjZvF/YpXH15WwsA22eqM/jLQhPiBi0PXj1pf/bZ0\nphrEpsSv+ubxvrUrcr10MDJtA0HKi78zXCvSNHL2MSYx6YfogwrKVAbf0jF2\nsrFayXl2md2bNP4YiCb9NdrpZWIrhTtDjcSTBzHehiET61h1yEa2AsyemLPH\nvRu2bpHFPvcqDT24h5Qgx7/wb11Qw0toImEFLjFxpmGyz05X0dBqbs5WLVHA\nhrj4AToOatKmUA/D2tvmm1qPOafkQeitkO4IOYnkAzihm6/w5rsFbkIqFTv6\nquUj5Em+kc34y0E1eIGIIQ2i93IP/mOJHijNPkd1lTmTy1gRACy25MBF4p1Y\nnT/BaQpH6QbLM9AiRSAEhptqup7WYEOR/wZ+LegTeT8hDFd4uaTZ0d2LV6Ox\nUtRiDUce35HwY5HtamGqPv2pN0kEroqBlqw7gOzK+LmEm4bicpT80cEuQwkp\nVSqGke1fKkAwQnANNmOUE4ZhPJiGC4DpWKapOxwZPw8JCcxcrWj57VywMeLa\n+Hp6bwUyQlOr+WOEDC3XYcld+cLRbbufqtO5ezwAMAYad7iDbMH74CX1Cuj+\neAsYU+ZHsirxhQ233ZRzFPFkDGMFxJaUURjVJw33dABVCtVvrWAGcgPD0cUx\nCSSs\r\n=8bHy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDM/s6Nbj1YiFw9lquoG4JhrOsK/ejyC0V0usA8oGGX9AiAqSXWSzZSmQjLWoMOZPuy209cEj1jWCnKhGpaWUIdO/A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.1_1600776805734_0.7267518274570459"},"_hasShrinkwrap":false},"2.12.2-next-1600779089-3eeb0aff.0":{"name":"@xdn/core","version":"2.12.2-next-1600779089-3eeb0aff.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.2-next-1600779089-3eeb0aff.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KsZ4rfwZWOj3V4f4SJA0En646D7mWsg+q9lg0cFpuP+0SX3694ioG7q1YOWCcMPiRI/klofXa3y1ycdvAL3mIQ==","shasum":"dc2abafa073416d73513be5c6068149acfac85ea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.2-next-1600779089-3eeb0aff.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfafOyCRA9TVsSAnZWagAAIh4P/RCTygsC58FjRRWHlSR1\nF5YPDnaLrCUPGDWFFxOsb8e/fWFLimA6e26Jfx+e6ZnINX6Yp0R+u3GEf0Sn\nitb1Gy2yXIEriat96NHzHkLPs0ms1Fm8VAsfMlockMIqCr1aUoKrOUP4W62C\nNrlUel0c2sFG/eHjFoHA5nOrLYjwmMCIiPbG/pRm4tO7z/GU0feCmdl4ZBDE\nKZvEHoni5Nbllv4Wg4EM9aSZ0/qdVgAbSDjtL7J0OX9f+MSlpHYT1cHPUL/k\nF9BMmRYTx3MQBYvmJN22ZReLuXCXx415t4242KAZ/l59FI4JPMVD1mWWPCgC\nkAgCgKWvoY74Jfq/gYj9VJJK/1a2uk8d/H3OI5VwlukfrFS6V4TH7N/W88TV\ncnvYlKsNYrSan0MtzFNtclHx/ztZQqoUq94iCQjh/ChwB9JlrolNlEeD4gxW\nntA/z4l+jzHNk+mKkJB56jqqcaAByRlfPeCR2etYFHNEfB+s212tbE0j5Obl\n5Jk+YpFR1JXI0bG+yem0UzKzLjINxqYuubTxkiHG6It/vJX7c0RdRNWSI+ev\nxbfrnq2UrsCVeIj1T0JgJ/Z7bDGI3Ps5679ozAnZG0Mk0AQI0xnXRu6YZIp2\n3+VDOiM8PbtoU6HICH24mQSWa2Kzy5q0EuGiVmAMJyR/KLcq65f/5bu562Gj\nGOO2\r\n=IXOE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnOyUhlL+e4rtzkhdI8jMSk6ne375Pp+F9/qTCxws2wAIgXH0uE/YM80cEwu3CGs+oEN7ZJl/CagRiZPHOVdPwmJ4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.2-next-1600779089-3eeb0aff.0_1600779185466_0.5466869782661523"},"_hasShrinkwrap":false},"2.12.2-next-1600779534-3f3d8664.0":{"name":"@xdn/core","version":"2.12.2-next-1600779534-3f3d8664.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.2-next-1600779534-3f3d8664.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xhK9fo4/Nju7Mfu2LyAzooMxtxOObMb/RTofvh+2IKL04GVKqw9Dr/xWDw4w1HL2A2fyN6DhXNrrKDo/MDHI4g==","shasum":"9a38dfe9034d72ced617b7ce57dd681b5abe3780","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.2-next-1600779534-3f3d8664.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfafWGCRA9TVsSAnZWagAAIEMP/0imUr6/mZiTSpJ+QLyV\n01/J+TydUNTiBlfUEZNWHmLiagYiCcbalDIoSrkWggf9D4yxL7R26CCXF4Eh\nW3smQYTebXif8lS4AwZbhIumYI0T8f1moaY7DFSV3lm1aPM9VBVxKKaeRzWT\ntEzjKjx7X695xIYH2gBqtaDeGFfIGzs5ON25vo1yDNc0XloORygdHhQxNNRe\nTGV75CYGx7/mYlMmjv5fIRt0woXaCAiRJP4iP5bNpKUHyy8L7FcntKePpoja\nTEJTARmh1YfjvLY8/vSeNayYLH0SN/4uBZG8qzm4jG54IFlVLZn6J7JXzkKA\nagrM9cs/n3SR6P73k2wl8Ep0SnXCuSO6K3xiQug3BteIoqUdlIQTF2zWsRl4\nR78wZbVHWEhG6OTX6knUbACmc1YCzFhHVrfv99hfdO5O1VscNSojSNbif/8r\n2nEzL9uCCG9vTD5e4McTqrmxODp32N0HY6VzHygb2O0qEBn5+vrU5JQWR3u+\n3Zm2A7TQL1HwdKzAikGfhC6J9R0GJ8B7RnKoA1H+31+QGbV8p0SxPIre2EnY\nHQdXc4lxNkeO2sAZwIrXz/jDZM1kD7GLMrDvvHTxp6vs9ApKrlA7BcefFsIk\nriLLxfHij8uHubjlhpMReljXTLcGrApvYQLhPCJkT3wunkfCOwkvnrBTYCQD\nnBFy\r\n=yKb3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2ToHCqldueQFxO4uLEk1hSTiG/oVn4C3HvseZQySu1QIhALfGH89sUWIOuyLSdlOpkfX/394PmNYTsGSFLmMLXMbq"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.2-next-1600779534-3f3d8664.0_1600779653873_0.8053862863337629"},"_hasShrinkwrap":false},"2.12.2-next-1600785337-561a4382.0":{"name":"@xdn/core","version":"2.12.2-next-1600785337-561a4382.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.2-next-1600785337-561a4382.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KXvYENmfFOjVGD2Ed78P0Yb5Ba2SbtNYsdy0AsXfx5SWJPGZJednD09l/cLEY774ObPmwrGJDKdzD6mMGMaygQ==","shasum":"36c0c5a8251db008d904566044fc04b9a0061ecc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.2-next-1600785337-561a4382.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfagwrCRA9TVsSAnZWagAAB4wP/12d3TmW1W+hl+AvuzJ9\n5fgLh6ewzzk8unHx0VNcx4tRfVjOlcTJjGtFtJk5zUa+jVVSNYop7y1nGtsQ\nzxpFklOATE5EbKVmUFhbQHoUen52vlWLZOD80WKfWX49rH5vJO693BPOB/bv\nmNX0N5cOFsF1jLIRsmZqENys1ZMEMOwnsZEkOxXz1a2gXOb/okhlTEFhOrbV\n1Wab76jogd69brW8gR6DNaeOZCa3Agj5JVTbrsQzbkC9QXMFHHvmHQjbh0ZH\nvG2X7RW1/uIRIbxbIoZBKTITlTV4HLuDadp0nPLgl2v5SmsQOFGx490qOHvf\n8pda2b87uFCSVLK7Wj3hVMxbksYk1vvrWZ/0D7kPMzBr1uTz2IkQsySLWEUV\nw8Ruvt4IeOGuIxrlPgB/FVtPViRtCPKhiLoiPY+r52hDp+rqYP8cywLyn72g\ns1eObQY9PDeVz2m3yvfw7TY71UoZKj1q79e7+bBjlIelBqFnRhYmMCqVt1DQ\nwyvNSCbas3MrNHmSqYC3GZsowYJws8y7TUBJiFGICSTaLst6Q47d6g9MAFMt\njWieNDm9t9rPQNCFQT1YwTxbhlDc2vzG3qYbSKE3zunHRXKof97sjLRtn8aw\nhnl2BVoxR2p8EUcxS1NXY1aJwhAwQ3rfU9jZlZnmkczml78hohxfbJNDpMWQ\nygRe\r\n=EpFy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHIp7ZTxuqzlY8gNjl3/9y6qJzIx+NR5DEj6nsxuJEXmAiAOhKl7iIYsvF6mNi7mZKMz5JJalb7LVNBn0IkOJQwFuw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.2-next-1600785337-561a4382.0_1600785450578_0.7089971940032576"},"_hasShrinkwrap":false},"2.12.2-next-1600802405-90d21ea6.0":{"name":"@xdn/core","version":"2.12.2-next-1600802405-90d21ea6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.2-next-1600802405-90d21ea6.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-I+SLIwinSbzw3KHB3aUVqWZf8uomby34jXClcWbJDboBg0Vvg8OknYsI7dcWk0Bh65KNe0waeKsBUD1dqgNpgQ==","shasum":"b8f01e2e493ac6ce8d10228aa11f54d770fd9799","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.2-next-1600802405-90d21ea6.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfak7ZCRA9TVsSAnZWagAAg14P/jIalbtvTmc89pwnbSDS\n2EgPnfA2ktP5Hp73WiQ614Hlw0KxxxSyc7dxYxG8oujgbDxLq2zwrwrCStgl\n7gSv9PJSLngQfskFcYjjH66UeFE1awf4/l13rLRD+BHeMaivtm2Bk+Q2tGVb\n6vAgqZoY0v+pKbA5GTGdl6bte/U+8I7pmXEue23No3uEgZfcoUiVT8/+vUQA\nQXxBnnG7aCVpIqSKhSEkSGyV9UQXc8lwLseUSvioWRkQ124Ybh3KtldpsReb\nz1VNSp1zOGYSukehMl6OWkbI1QWdcMX9PbIsKCsXC+z1M01jijdqZzn5Jder\nX2P0ryC//+5cte2dgc2XTuNN/gNEe9deM3v1bfReJs5qIGjfDT93UwLkWxHS\nRl/FPA2pInhU7TJVUHRCGIFJmwoTMi8FEuqBONt5rheJpKDoxh1vqxTfDWBo\nfD21bIAe+4tHqAPyMVHTuIyo3ooJF1rkhVIGzerPUq290M4HpRALoaSYjbH9\n2nXuA5GCkxRed5zizQKOQhBAEiVtQyHbQVJFd/9btD37iDVCH98YyNYp4yjJ\nnI70In3DdGnf8SUureq4+/b994c7xqH5Bhtw3KwNi4A/65zq4Se6HYIpZB0g\n7LTMQtPnjCCCqN4seWnO2OK7pFN0u1p5y947FcXl9Q/J8SNWphH4/GSEqlWS\n1y/q\r\n=3AQH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH0zbobYVioNmGUqdPDCtkM59SGUCsaxLrUwhUn2nwBUAiEA4JjyocRBFGRQjL0MXSQ+/4HYPsNn1ghr7bI8c0yXvxw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.2-next-1600802405-90d21ea6.0_1600802521319_0.44654611128521826"},"_hasShrinkwrap":false},"2.12.2-next-1600802452-11d4f1a5.0":{"name":"@xdn/core","version":"2.12.2-next-1600802452-11d4f1a5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.12.2-next-1600802452-11d4f1a5.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-sW9WkQcz0JikHit3RRNZzZxcSZnO0MQE5i5iyb1mg9wGSmre9TCSBcos0hT6rwbGOyjyd92S5AVcYar7/5hEIA==","shasum":"de839d8b49d9b0706525664574e81704e4fa9beb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.12.2-next-1600802452-11d4f1a5.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfak8CCRA9TVsSAnZWagAAvOkQAKJ4kYiyVq4O/Ga+B8IQ\nDo25vRkFHbjwpWdCT9lihTNkfKoZmMR8GWRRd9V+6v0QB+kh8OZdqsFPN89g\nEeLeUokGoipqmypDp5adRavx40lLcsklQ0VUPkTE1vlpMZnsBqFws5/Q5OXY\nVb1QvP2M1dlOAx1xTR9Fc2zlp5MLkejBCHRsSHZtI3xQD7/xNIHI9tPsa3HZ\nsUU7uAiK06nlUQCIwFIyeAFc6UvT1j+s6cq7QKuZu2034zzvw6pJRUmhP12f\n2w2t9sa09WJSMkZzfeVr3li+w/H38WRiqujajeA7nMG7pRNkyZR09riNpICY\nVXjg+Xs/KzPjSDpumUOc9BXWoUlQ1Mmf7E0/+gbcL8aYtGh0aHo+ZYItNziI\ndBGoQXplDHC9BOKY5W8vtfedOGLfqNeerb9aZmumcwbD0a5BqFhc7/hdNYAm\nsEV5LdyfnbP08nOXJX3XqfMMidLy3+e0PruLCdsQAr8N8UsSHiAxsZLzVBSJ\nDjd5y00WETPFSVoSX3+1kq4dTBDAW6QL98/qlY7HlQ0epC0jlc7aWCWXfTib\nyyMXJ/c5LrcyGNNQj8LY0KdELIZimFoX1jAOM4GIDWtcWwEbx6/pvlrcPCAr\newAxKWwbkEfQHEfuU+fLOKJH4XfWsFPhLzRRIu06aMFJ2OzBU7mibQs5f2zD\n5Xeg\r\n=EX/N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDZBk3+E8Wamrt1sj3Uaqxz6Tqk+yVUZk6jE1ahNh4EJAiBRTS2PAFClrL9OIwncYNvpb/ooZu3sjvnSjIZ5THihpQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.12.2-next-1600802452-11d4f1a5.0_1600802562022_0.5875699206070666"},"_hasShrinkwrap":false},"2.13.1-next-1600802664-a680cdf3.0":{"name":"@xdn/core","version":"2.13.1-next-1600802664-a680cdf3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.1-next-1600802664-a680cdf3.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bzZPcRAPfZDbuffBErY+4UuLKOuz24wpuV3mblrzHIbUer/XUcWVrKR9VsNCTUFMrZXu5QGkcOaUD/LZHewUGw==","shasum":"398928537231cc0ca02bc6c77aa0b66b80464357","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.1-next-1600802664-a680cdf3.0.tgz","fileCount":147,"unpackedSize":712396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfak/ZCRA9TVsSAnZWagAAGUcP/3dlNMIFY+LWveZFuYdF\nSZmtJp3cQH75WgnP82AXMBEhFHBbuqPWcmtXYxBv8i0Lmq+LD4xbqlmk5ZX7\niJRCTNoQpYit4BizN1DCDPep1j36UJkahEtm9zglSYXhg7e7uvQ820ZJcLJC\nisL71oj/5A/ut4uTjmFGiTdQZCY2ixvkLmzj5tbWCFaRZJnBP0mGvt1A+AQZ\n51MLvBoro65hAMMex3LHOkAEAoafdBlt4B0NOrWOmpm73FwGZFi19FimNPXt\nlTQPrMXneL8n4cd1JXNjZ/tVXIghSdJlwUDkSmyQ358WoRsKOX4+WOa3VaPC\nvhYzl5Sodn0eGqI1/SJnyItWtzI4Qi+pfVf/IVDbckq8YFUNbRrEGVMTzyuX\new0i7VODACjCkJhsfdhFNdtQEhLYud5YlexXVz4lmA8q3AvxVOiRRu8tw9Oj\nbX7GxnzUX3lofT5pRU+2shyjUtQWETtrwa+fyWawXKmynlZOrqfaLa3jXgyR\n6KeTSHkKBN7nSLPB9PHXN3fE7iGkcu3x8Vrys+k6YSmCTlyzeqycGcNRD4y8\nQTxw9W9n0IWElCCsgu79Y9/mImK3o6ZKUOzWiCcrhHKwAV2vStmVCWVuLSo/\nByXEZAWsUF8N1blOQAc0r7zpNom9HJprCEtzYB8WXghi3jJUAUuGLvVO9KYb\nIu8n\r\n=Y+8E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDeo0NnChyScrRerS9Z+eLhx0RWe3WuDVu1+QsCqgQnpAiEA+Yz2QJcs36ESXPY74ToooAkje3pENdGNtZCkj3+rK98="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.1-next-1600802664-a680cdf3.0_1600802776992_0.0952398126229661"},"_hasShrinkwrap":false},"2.13.0":{"name":"@xdn/core","version":"2.13.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-DDxFfMHcT7/jTrML74JEYi+SQuAO78IpOu7NRXZ4mXDCVtme5eeYY9V+QwLpFO50VGJZbqHkodYMfBjM+EojNQ==","shasum":"88a5e13f821785eb390bc8f0a0c94725f9cd9fc1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.0.tgz","fileCount":147,"unpackedSize":712342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfalAbCRA9TVsSAnZWagAAZigP/0DpP8iso01DtAhZeMam\nneb4n3njCwh+OxtWU3ICt7NOhuYae11umIq9lNl/i/NEhtuEZmyWxQtR4vv3\n1QPKZgZ2IONRur+QNQPRslZ7DNQtR8sQq1Zx50qPqHQhaPo4Y0/HnLEUcf5K\nZ+ZIK1U3URlKYy+ip+2W5xpUPH0s9Ryg3YwiSwyvVOZtcYwtG7qLqq2bzmr6\n/VBqS6qxBT2s1d77X/1oZWJXrgigeUWdVaiJvJmv/v5FT22L/47VDPH5YHqb\nlx78WQ+mk5PFPI1Q/SbOS5IgZiP3akhFhGQ1QbFZm3XUedpdwfS0bElmigAx\neBE1YDf/H7+W56+zFOOkhsGhC+K735PUA2X5c5/XuBmPlmTd+Ox1bserSA3H\nF5Tukug1Vx2nzW54XDL48rA9DIW6YgCj5wyaym1t9nLgFILBMmsgjNoGUNYe\nhjitGvbMQ2sF187jpqP+T2XXAxJ4QY2Y255AHbXbMTBmMlk8gcJl84mgQESo\n5Uua/JO9M2mgu0mGhmOPrVHAVTTL9DwoK8yCEXnqQJQlnHwg6+MmR1y3AJV1\nXQ7Yb3F+g+kX4Y3rbERwN1LLNtk60yzOT6pc7b+2kZAMto+fGTCz8n0C4i3L\nEsRG588+Bi8DD3rN/e0P2OnU1M5kunWwJvkvD07gldy/DLKFRnMmEi3jCEH6\nqwBv\r\n=DYw5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEZB1qpy5J9AI+MpjNnc+rKxRcVguEPypby3jhCsG3b4AiAjolM2p6HMNEx6SWsufDjgOK1QFu4beFBGe2xUEzsTCA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.0_1600802842977_0.14555915324958635"},"_hasShrinkwrap":false},"2.13.1-next-1600866013-2f2a3c23.0":{"name":"@xdn/core","version":"2.13.1-next-1600866013-2f2a3c23.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.1-next-1600866013-2f2a3c23.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Lf1+6vlj/8lomniYmTUsEOgaNqLNViSLNG6bnkKGfqdgwCmYFjBlH3SZQzpchN0edX9bBNbbhZYtXi7GQXI0lg==","shasum":"8099f02b5cd5133a28fd17b29cf455d262ee7295","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.1-next-1600866013-2f2a3c23.0.tgz","fileCount":147,"unpackedSize":712657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa0dXCRA9TVsSAnZWagAAst8P/0Imok6dpiRKaM8vStSZ\noAIL1vZUpIPtpbaz5WGIYHIEsfgacH0H3d0FPw9f5g1QKF4VjanRY2QL1qM1\nbLiXyVQ0ccWg0dASi+fRkErhCjx+iffjs/ycKVMEnLWvj1zhdnpjCwcubqHR\nJ9rhoeGOfAcutEkYKEb1m2AA9FMWvL5QbmZP2ICsk8jy+LydZDteIZjmKV0f\nSobQC3TcWiOE+aveyV48ivn0/mLdpWAUL1UGpyo08Kc3F7cBlWvDRp7B5ve7\nQPV8iLOpIAFptJR157x0AFTMKsF9E1Awn951ccOWX34uIIs9oBB1K/T//7aI\nBQ6suHI5FjGJFxn+Xmk/S8ksuPNgthhvVaB2MEEsorwuH+vpZojRJyBNCvbd\n/5Km9jX+9ZO9Ebit17m6ivpaIa5iBj1CIVqx9fsI6us6OAElXs2zXycs97XY\nE4TNgq+/wnyF18bom4D+60HNeaewh5ku7znFjVR6JGdIE+yRSc9jtUF1Qpgg\nO9WrnvKIUqZe/hHorawGFXCI9PDplMEoGfNS7xxYtNYCv/wKqjOFrpAmprQW\nG8IG5jA39rRr5RYdmBKax2J/pLFLCkG6ast1RyAkUsDtwuunBKQ8e2p9rz5T\noRw18ftjA4bT4Ixcx5Gsj56au3P4KvA6GDc2OovS8V7nHAFLDRbPHu7S36Qp\nufM1\r\n=P6DP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHuv0yIGRyeweoBMXvJFTUwxyzsauRNuqfrcV1OnbCLfAiEAuUMiaACc/WLiGuPu92zsUX/p2DfSgiYGtTcS0nYSTd4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.1-next-1600866013-2f2a3c23.0_1600866135403_0.2996551197560915"},"_hasShrinkwrap":false},"2.13.1-next-1600872468-af254091.0":{"name":"@xdn/core","version":"2.13.1-next-1600872468-af254091.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.1-next-1600872468-af254091.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-CndsXMEQBYAYA11pxnRxmj3+v3Mkos0gzj4yqGGMe+XCGiPyHA8fDzJA+S85q7ZSluScKxj0bcTwJlZIq24acA==","shasum":"6438f605ca4cd099c0b1d0314d348712b9b78c8e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.1-next-1600872468-af254091.0.tgz","fileCount":147,"unpackedSize":712657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa2CMCRA9TVsSAnZWagAAIMwQAI+YMt3Xo1AjpsZCgorW\nx1KiEDTBue3ct6quthXJZgyNqAj8R1U7kX7XAPNxx7XAUs2C7FnoLVe8lqob\nIJ03hj2GNRv8+Fuu2WQgKFkuxvBtCFNcxlMIYV/T1+gy2VmVNlWLhJEoqBu/\nCQ7VX3y6NQd04Bmk8jvx3og6RD5Z3TgAIKgjyA6bLRT7rh+l4FGe6p27YsUd\njXK59YxdEdXR7WrcpgRb1rBGA/XaC1qksaKbyhU38/WFGY8ZHE2Wc3Q3FIpT\n/u1XcCCHS8hmK0e9WQDeOZZfqcC4i5KswqEpsr7/XIP2Afe27jwtAebBtc6/\nnYidotkMf4GSIH4B3l5sN2masVFr0t0yCStqz511zw1rmw1G0Y0hAtpRRiSO\nUPuZRA1kBVUmKueucUcmARCS/lD5aFMAfofYX796aWNJISqh8SrhMc+UKC1/\nkwwnZgqiSBai/5QRrh95O7B5havnaQ2VgkoKLYVyTaBa1pJhVTMqC1WjxuzD\nZgKeLrwDlTBAxWG36YAFP6iiNw84nYQxOzULUo9tOEMTvVAfrDLgsyGiEshM\n6wMtwlr/T2gM9Ft4Y4dym0tDWv+yNVJvK7gggi87RuFRboS3UBQaAMvRVIPG\n1+VUNwKuq67Emp+TpU1UkNTdPYju8tPOqLGbQdF+2BMtkPE0H9CrtuaPm5jy\n9yBo\r\n=vwMj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3BwEovPG3K8W8bANTysqXSZ4ZFxdlnAwrF5Jxy4IZmwIgN2tmQfMoIelnksS2y8LMDLTwLkS6fHNO1ul2mN7utiE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.1-next-1600872468-af254091.0_1600872588181_0.5976221926708793"},"_hasShrinkwrap":false},"2.13.2-next-1600872827-7d5f227d.0":{"name":"@xdn/core","version":"2.13.2-next-1600872827-7d5f227d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.2-next-1600872827-7d5f227d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-pOuiuI7/+vVnhgXIo/7rzBg/N3TXoUGAie85rfZxDEgvjO2ZJ4SnR1uVn75MU4Ui2IztNPzHoSmsgJICCxy2CQ==","shasum":"7b5fe8b4e3535a0ddede00dd0ce62be84bd42ead","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.2-next-1600872827-7d5f227d.0.tgz","fileCount":147,"unpackedSize":712657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa2HyCRA9TVsSAnZWagAAbd0QAKG5IdSkR56DmsNeMolz\nkfEK3s9RAR90J2QsGiovnoqyEG13hwNs2IAedYDvgcnig8kyIzzknmHK4vjC\nw35Ml4VDVgKHwacGo5Efnh6y63+H/+zeuI/9zak3e8/9+uchamiGCp0fA85m\niuqh0w4iQkpRhSh/aXmtludYLqofzTT8xFA0ix42TPo/iiBUwe86s7oVsab9\nnsMHQczPUCLzwOaTLVTwFVJK+zRMeWXlh/fOkFIahqz2z2KcOdnIXUTGGnJg\nBu7bAXHMg4wZD0FM2DW0rBNECkX3nLDvaw1QStNrrkkn/Ckp2b+J15+KQHV6\nsMIwLbBCwfnAd+13dMaHdAlwWG8q+q83dc3ZLH64aI5zXAU2AkNYmB30ezvV\nsUivx2t5zddGDjs3RnHzQLX7yjr59mEN1EcK/5Guat5ZW29yKMTMh1Okp94F\noxcRfFQTrd4YsOX836S1zWypArch2HBcmMyt0y0h01zUDHcyWB7YL5NPetx4\nKe08YtG3zlDUYVxPQwPvkWImsyTM7TQ3y2lylOfhHn8Z5/g4pugUjd+PBroj\nKbVu1tNJhbmhDV24XinHAg7kXOhSakicHKuM4I36WajvqFZyxYQqG8CSxVj0\nmD2rLOZv5rzUNnVUp4PeiKpSOVGGvhpj16aNMuFmj65HWN8L/BRMe2aN8R4I\nk905\r\n=hcSn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWkM0kItW2t8OAYE6SBtXxMP9F+iqgohA7o4vlbJRYtQIhALNzMpT0EsfCx5e+iRiMIIaCCF0HNCg1Ldn+tbt7F39T"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.2-next-1600872827-7d5f227d.0_1600872945568_0.7213594706283499"},"_hasShrinkwrap":false},"2.13.1":{"name":"@xdn/core","version":"2.13.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.1","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-sk6uBjLVJzvXum0QUrlFrFOUTAIv5OinJzH0bPOGb82X69qeZDRVXIA6fNGAFb4blleg6hzUytToMhhFslx0FA==","shasum":"dacd12ea88960a25122f30182eee487afcf124b5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.1.tgz","fileCount":147,"unpackedSize":712603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa2J+CRA9TVsSAnZWagAAXo0P/3PqzyJsql2BOOEWAO5a\nKc+Cmj8VfFtEVc4WHrSTKSyQKamFgm04Cg2nBv2fGx+f5AtdMYHhsRA2nH47\nybOs/RAi61umsKvBSs61hWQC7U6zSH+Izj9UO2Pa/VSYS6auKl7uQ3f1bNUZ\n+8vHlMbtHe9kfVqu1S1FtNZReF8QgLcP51LRl5JPW/JEe86a/Akt5z8n8jvF\nTGsM10/6INL81gVtKGkSNs/PtzuFIqCY3wThgzUEzNOApqoTyja8dU6bTqfA\nUyQ4VoxRfszDhdE2biHhFwu+Rc/ufwmyC+u/3GqHdODPAJVbqSVjOGT4K65S\n5BaNWitzyoJUJpSHf9cLGOoXDHJUXA7jLKPztAVojAHV/EjrGU3Q6datTuei\ny+SwHdg4yPntW/LW/94u8nCsm2y8lspBuVID2C2oh2jN/+syTJrJPpDrtmcC\nhGAG7l2u/N1Wr3pI01Xg6WnxGkc0UXmaqQpmxJIAxVnu/3w76OpNtxLXERCy\nrbwwIsXhHW67AtxbzQIrLN0Wsj0QEXyMtnr2IepE16YBj49dizHd2CcRNjr6\nHqBuDx5/AMvsGkE0deYX87vC7oSe2nMoHxgXww2/lV1R2Kd2tHRia3qdU6nb\nOxdtMSISQ36ovSyZ5xmFcjq5t/u8ve81r7yr8WFfUODPMRNdehGaJ4xu75Tv\nnX7x\r\n=14b8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxd7FxG5HMk7QGLlAK1HnWPOB86yi5aqEZmyhYPeqtzwIgLWrL2YOTPCDHNqZM9gCtSBPYqfRhq3uUdrHwM9ZAEqs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.1_1600873086106_0.022118863831665614"},"_hasShrinkwrap":false},"2.13.2-next-1600884005-4378587d.0":{"name":"@xdn/core","version":"2.13.2-next-1600884005-4378587d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.2-next-1600884005-4378587d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-l6Lq5Ivjv19xE27Ocz4Fx629MixAdBH2rfZEpVamqfmlr4vn3ic7jBq8S+MEyapMW7tEwpkmU4jvTE6sjO06Og==","shasum":"001e5c4f1071e917145cae10fadf69e7ead19e82","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.2-next-1600884005-4378587d.0.tgz","fileCount":147,"unpackedSize":712657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa42hCRA9TVsSAnZWagAAmYkP/jERmmWLm/HlpzSjBqtZ\nDrfox7D5/lS8LriU87DRcPLM81SdNn5/aNXD+n78GxJr1/bDxoBKAqw9bKPs\nuxUc/k9gbmRoFe+qsu1bZ8hdR/yWh8/SMo7+kKfGDIgqHfDMW9jN6O0m+q6I\nDqa65dKyvpU7fYATzZeH6sQEOmoBZhAPnofQNHM1//5ptGGYZyT2yjA5q7yx\nTyx2NiOrASHZjqmtwuK/pLMyqSnec4wt6Bvh0iqH+2SODQ5a8nUUAR/ymK7C\n9BWeeI1FLwZPj5Me49v0f1WwqOtcvhRyehGmntDHEfw2sVMSEQFF6ZGmeDso\nE8j2cjs2dat2kxNMx7E2q7ie/5OLZXI0S6qb3AqtrDQ42MIWfv4zMQilAdC2\nd+dj8DsJHfY/q4CIx/pRG/Tbd7mtsghPXQVAhyjaxINcAtSeUh9mspOXrOIP\nLF8Qi3Y6llG+BJ3VGbuBRkFauZ2eflI7N0uxonY18Fl6vfxOLoriZkvrfm6u\n0kQAoCsk/X60CBtAzoFp71YZ1Jv33fQJ85L7lC3+jyaYaA8uPLsyr2ly74qu\nEiqjlct1TlfPYbbJC0QpWP1J5vvYuLxc9OSshPL5dNrSuTdJaq1HI8lx9RrL\nyonWEAqZSfexUbW4+XdM/DN1QdJ0WSnEkj5wGdwqwHOBncs7WhqPBf6BOBS2\nwu5T\r\n=XRV2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGqLu3j2lz1M6FGfz7E8vWsM+ST3g6I1EP35f9Ftm6UdAiAUfGPv06pfeBSEzl7BATG4oi7v/Uhzmf7Ic1RkA9OJrQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.2-next-1600884005-4378587d.0_1600884128878_0.0325368245090798"},"_hasShrinkwrap":false},"2.13.3-next-1600884046-27399383.0":{"name":"@xdn/core","version":"2.13.3-next-1600884046-27399383.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3-next-1600884046-27399383.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jQ/YBrrJ0ZGw4/nuIrQ5to7n2Wt8DAYBwI3Uy8qrIntQW3S0U0GswhIJ2I7qSdN0FGuQvYfNEhKFbL80mAfTQQ==","shasum":"5df0215f4c010ab0d82fb830946e952b86f3e3ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3-next-1600884046-27399383.0.tgz","fileCount":147,"unpackedSize":712657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa422CRA9TVsSAnZWagAAYIIQAIbONl+P+j/2bS0BjWhA\n3MBFJUI0LYEyF4r/WcpNxoMH0ewXWPevkalStf1pddL+DMjU+FZ2lWhgKoWo\nBeeVYCP9NvOkqJ/ZLi+qfAwDWW+gHO4SBaF/RudMZ6RerjLZcLXjjF5WjbOa\nT/78SctgbW+i8PVPFIxKxBlxXxOyI9g8ARoqVQ+alvkG60VfMgXs28r3n7bF\nkwprQuyODwY3O35KkkGPAsmQ2kqlUz8goXfsmTIuCW26xAc6ixft3+xPvyuA\nngbZjPz5NwvIt8qsGYMYQ2tvb6vhtvPT3DOPcOaOWkqgBsjK2NoxMCZAixbE\nDeFJ2wSJdxJ5B07UlPEK64d7TvTEwCkT7zuFV4Wlq1bnOCtSzRzsrpEG9Tq+\nyBABMdpB2B5dh8Wg5TQFAPuSeAjnr+ElZBT/6evh17mO1PxvAKBbRGZYGzB6\nHU6SjJirxs7mP/TsTDg9N6NfvbLe6G1tQ5Y41uIXPCLTLRq4E82IAWXBoWmt\nKrRBk2GUMJacm/k7Ay3hmmsnh1PuQhe744Lfoo7XRePz69igju6iteeVE7dD\nHiIj+jdfi5a7cfNm48cB0NdkYJMIJ/HIt7yPC+18UCEw6BCtMQ+3tu33bIzb\nky83HVtxTtsCgSmlDrAT9WmVWq9FFxHAmMpoDR+MeP12UamjJ0O1xKie9buj\nbV8P\r\n=7pQ4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPN6XX9RmtUIfUsl4z/66UpZiAYzxv2Lw7/sBhFSr4pwIhAKI/OzCsydHwoojAB2JY1nBiVDduBMSIvmNP1ksAM9wq"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3-next-1600884046-27399383.0_1600884149791_0.5132310265803688"},"_hasShrinkwrap":false},"2.13.2":{"name":"@xdn/core","version":"2.13.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.2","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FJS6meGZSp/dhqNX693UaEPK9ho++iToprUT4vbAkCbBPtJWZOz8+a8ShJy+uDnNarYjq14H0F21gjuDfCSbXw==","shasum":"a55e11cdc830ed8d9d0a1fc321e16a5aca2968f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.2.tgz","fileCount":147,"unpackedSize":712603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa45GCRA9TVsSAnZWagAAj3kP/0tultPZKk2sldcG5Qty\nmh+iiljIF9ut66DP52OxKGxCvFCXMXPcD0OIgTdKYeh9jWmAHkE9QYuGRmTU\nR7fyr0ThoPopSwChgeaLU9n/N7WIXx+inXQSufxU9OkZug+c0RtIGRrZI11t\nGq7hFvq85J7Nd4bf9Yq6F9SB8T18hoR4FxHJpGaOETyB8vg3673Q31rZ4vlE\n2o/nGPGPnYiGtStdpDoCPbJSBzW3c8nXYy3PEF4z7FW2Dh5YX45ncEFDZnuv\nUp4TzXYdK/YyJ8FG3dOVgACnkO2SNzBxu2zQVqky+Xv7RIddviHTxNOkKF9E\naVW6zBS+Pk8sH2KQUQyXwCkP/lfWR00YvQSC8dtsnu/j71eK/x1JO6W8e634\nxWPB4jPB7BzUunjR4LzOL0tzTTIxXFt82qjybm0TdxzYQVwIbmKOGO7PI3JN\n/kf7LYvKHruXr/Ud8W8lm/0qhooVoB9W6Ygz1GDr47ZaDeTHXOS4T9opt99u\nDN/ArQHr+MSElrdEyxBf6IQNRY1kLAaPygMK7xLO4V/CvvHkSNKqaB0lXnu4\nALGpT3SX3dt6r7+9mDVlbe7dEyilWXhxuL76tx900Xc+sDu64CQSaawObmrP\nZM+RFtAYQer+wpMFByCSvrgNoOaeC9vWnGRRNQFvcRyzO8bQtA2DZru8IjfV\nc8Ft\r\n=mJyw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICy6ySkmrQqDph+v+uOrLOtOczq9Y7Od0156MMA44nFCAiEA2DkGYZRlY3H3yhlkNVLU1j+M7TwKnoQ/vm7p/FoRiwo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.2_1600884293605_0.9533188911873309"},"_hasShrinkwrap":false},"2.13.3-next-1600892210-68bdee53.0":{"name":"@xdn/core","version":"2.13.3-next-1600892210-68bdee53.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3-next-1600892210-68bdee53.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-DSCmUVyPAMf/o+tUogBSkE6RQHwuIn+v5PWJerPruoTKc81pUR3iIcheUH2XhVIwE+7GM9K2wg1d5rPZTz2SyA==","shasum":"bfd3c99a07103adcac14158ba3f6a9128041c43b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3-next-1600892210-68bdee53.0.tgz","fileCount":147,"unpackedSize":712657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa62qCRA9TVsSAnZWagAAdM8P/R0Jg4OHgCt7QQlkZFMw\nTsoANnqtRxRJtn6seevrXJ8ooWfEJ83WZ/ChTcXXJ4voIJFqWZ69TlQHfk2o\ni1zI3W7vyEvYUjHocjLoX/oHYmOydJ3Q/22ZIa7MAO9f2bq1s6kfAsFWMAzk\nEMfpvaEzIued6NDOBQQOKDdy/tJYGvmTU/Mp2nwZuEoLLmy2M61e9BBkpTfw\nxTgTUDX2ZuuWYGFtaEt0qITKshI1J6Q8dKGYfxh0WnFPFBaeP9cEFmYQnylI\n//wPOxCJ+Nww43fAJbgbuirdheBYAnRoUNyfpMtpkD7hAp5jOLYO96l/u/xy\nuHLMf+WQR1e1V6gC/aIkPZmeL7+CQ2+HSnYKG26htTRKJWIh8lgO1T0OiwHA\nTaumtdTZhZbhqr+3xGCgQjwIMburrYWgf33mRBQZ51HaucrBfluu4rn5H1MN\n2xovCLDyiKkmam5W4FBmxbwSopZwHYDdKDJueh5nyUXUoISzkceD1/pxSG4D\nXMl01hYqYN3r8z9yhDhW+yQxSghVtU983k1bn2SqH1HiIg3c0TA24cDkgJy/\n78voo1jtqpCUlI2JsX3e0ChIXxMCouwoUu7rqfm+dsn7WidIjfRuLkx5r3cv\ndx0DrcPcsJi3nU3K2IesKFfPvbdGDYvWZRUEvy3zwPTVftbDs7mRT5YD8UdD\nB5A4\r\n=1gG7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+wqHcT/BtSnCRfRFLA8rSyFqGFcYdm1KP09lDL5clpAIhAOd5A68BcRTfTh2eUe6BHFOCTRubjJCJ83mph5aKNd/K"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3-next-1600892210-68bdee53.0_1600892330321_0.30336700484076795"},"_hasShrinkwrap":false},"2.13.3-next-1600899972-8e088c74.0":{"name":"@xdn/core","version":"2.13.3-next-1600899972-8e088c74.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3-next-1600899972-8e088c74.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4FXR33Igz/NGV9YQAB44vN7eAOrNNAImbtn9rBCxlF9ihk5KydbMiRt0CSHQB3kBWQQiivfzXwFeS1aJikjagA==","shasum":"b8958821357c0a634e957dfb89ee123656310a8a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3-next-1600899972-8e088c74.0.tgz","fileCount":147,"unpackedSize":712657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa8vqCRA9TVsSAnZWagAApSIP/A2YYVmO/H0SZkV2TPlq\niroeAgIMf/d1b2qM6rJLw6jwi7snJ38SbYsSq4f0nno4e43HPKTfFb4dAcmz\nPcPc3L5sR3ceO6HBHu4mc+/7ojPL+FsSzBHzflbv8YTMKrRKre2drkNDRMJr\nxPrvmM1TsCfaonBi37quXXU/rdz4twZA0Suxbd0wZBWZ7xKucpA7yT3j/ekn\ngi3sFB4yqKk4l6RJ8YGDo6dxGNVq1JeQWR7qluXMTflgWrdtJ6wljQyAw1cS\nZQ0e3Plu7zUeDGCB8bHRhRumeXpYYsRI5jAiZMjCjqMbndNX2P65q+ZFqJao\nQKBtZWPu5DiaU7uM8B50BNk/zmHdI57TSqLMznlaOyxZ705ejPhRGKTeFvic\nPHx8SdscU4PbpRNM98xwi2SM8j+uaM6bnQCPL0EGNKCBkKX9j3zmuU2CZ8Wx\ndB6Dqnc/pSuJbfZCQGxbrxbX341dGAOzilV7YGa0xoIa2OMF4fKzQNpNr3WH\ngNyNkhbyKMLAeLPlc8rkcJk0YGYOivRuaKKK/ezA8KMrTl7tym6yEPOzPbF/\nrXsotNtvohMCK3Zw4QGMdYEJ8/tTgbXVIMclTtRN10fsfp5MGIHeVjraZrOm\ny8oN6Dg2OVfFbY43Igp67blFhwgNBZ1Qh9tbVH2hzz+vfPqdmIEixzX1q3yL\nLxUQ\r\n=0znr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA45IjdzrS3ebPImoEw5IpB4WgDAwP2jILDWZn2rUuUnAiEAsNdvFcoIqZi+s1FYcDkYFExI13sucOskjYitWNPk2Tc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3-next-1600899972-8e088c74.0_1600900073901_0.41092210001618934"},"_hasShrinkwrap":false},"2.9.1-next-1600937982-be75aaac.0":{"name":"@xdn/core","version":"2.9.1-next-1600937982-be75aaac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600937982-be75aaac.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eYu1hsrl4zLAAEJRKXj/4ZvHAeyCzKZejyP0E0x9aS49W0Sj8YLEKyUs4B1Ir/hGsJjOnYYCR50oRSiTagcJiA==","shasum":"3dba31b2747bd2fb40fe46dfe921dea7f49b62f7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600937982-be75aaac.0.tgz","fileCount":147,"unpackedSize":699936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbGBkCRA9TVsSAnZWagAA/RkP/1UVYsRXDiZSqYvVSltc\nXT2lbjarto3GPVLepGX2wvk5li0xRVsHc7qm8ZT0t8OERPwwY/9gabTJIftX\nC3A3XXPbmvAg8fYlYH2uVc4CKnPAzZD2mfnLrSIbj7CEUVqh3XbLFYSuW3Ww\n/IgL4buXwhpUgPXcTe3S0/naN2CM5gQz9GydTGZ7NX964kHYIHHfdGD958mT\nvhxfg8+2q/Zx4/u151qrw4RMKnpH+1/UeZshp0DoA5X/nt/MNYULGx2pE52b\nwTdzE+rT5bsDe8SSSYIT9dvE9I1uRxOIuY4V3mIsH8ko0WXN3H1vcQEILo4j\naV0HxdkZK81iUxSyiRlDNFsFGq9yEsexXidDqVoKUAcbZfM356oo0Fq5vQTP\nM2yA2PqHSe+Z8hfcIrYVyNSs6RsK6B1M/NgBWbqw4iQObKoHZ71J55RiRWSM\nIVKymaorr+I1vhrHK9MkP2UN324xdKnT7ym9T4lTh8S5NAdbQsSwbhq5LOZN\ndtTJZ1TIOyfNTZk3t0ezEHp9tszuBEDfOz0JDvtfIiCxPgE4k0B6VkKQ6JCQ\nptT+MyIEJc7MSI2O1rcSQT+1m3Emv8bVwvfRrNdhhDhsFamsq1t/YNW00M83\nM7JBZ4xQ1oJgeDfgmTvDZo7w0nl6wY4XS97EAeMoV4ZziLkTBXHFRrVdEvvS\n6M8W\r\n=yGhV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtZ5I8f0vKitOfagx9INBVAWH3+CwH3QVChqXpRtlwiAIhAM3E/3SavhfS+3rb6FTxWUVWSH7usI4tBOSyrHH6M5KX"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600937982-be75aaac.0_1600938083234_0.8394805429175949"},"_hasShrinkwrap":false},"2.9.1-next-1600938754-2c26ef13.0":{"name":"@xdn/core","version":"2.9.1-next-1600938754-2c26ef13.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600938754-2c26ef13.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Xo6tdVOTe9kLlNFwDYlF+SAEggPRSGUM/saZ1jAot2pM4Q5Ly8E+gYC6UpdOCylyWg6BNjPW1PT5dM6tobZszA==","shasum":"b882df2598cc1e9664da2855299b7a8c222acce0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600938754-2c26ef13.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbGNmCRA9TVsSAnZWagAAhsMP/1el1ErohwYbuyfBdoUC\nKqHIg3SdiDeGTB0COaw3jH4sEmLL1bKs4IDP28v8Zc86Ji0DNO+iUd0Mtdzj\nPKqoN60ZkV8YTpXBgDxLQZ2hF2slKp94dFq0v9C+v0x2ws3NrVR00yfNxlDE\nGIcBXy3lBnkt/QbooAZOIYYmc3xUl/QAQwkED7sg7Oypwn33GihMk7iXkU3X\nIvojso7ZsUHpLX3qzy2FTepLT/WaeYVpw2+EVQyvdJ6xzE8hBX1q8P8javqD\niG5hj1iW42S6TKw6Am3fNqxWg+7i1gkfO0/nWutHAH3RrLgw/RYyeCi+sWPO\nNsbvdvydRdcY+SYxaWprqQnWoulUuZhQnomRlguTBKupPSHdPJ0N2mQtc0KC\nvsQIYKWjUccO+nIQG65bDoTxOjSaAJf9v8ky8tDWgBNi7JGLJ4fQaXiqual6\nGOUc8hDdM1NerxQuLLgqCjulucaiG2URXu+r52QDjP76bK4OmVibWskbCOym\nkmXPblL9RfNLuvEwSCmBX6GaXfW66YJbq3SB+vvof9Zcf9dMfGOLdkDtHPw9\n1B+MqrUEZIzz3eZ7GooyHiMneDhNpc9yjgkjszdpctoo4nnHbDrJPNwP5dhl\nXAqw7WGkP+lxmsRNPX6w6tg/Kw2zX3r0J8uAHX38/awXhWCX2h3GBpv5lI0M\nYU2/\r\n=nXRT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFuKyxh1hlL/uapaBhGkGN0mjtJS1X3wdh6k6tgkYRanAiAqBFQ37ckXd4lssTpnqe8N2nXkiMn3NsORqDjSFAl6zg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600938754-2c26ef13.0_1600938854265_0.2165352148801618"},"_hasShrinkwrap":false},"2.9.1-next-1600942081-39fc795f.0":{"name":"@xdn/core","version":"2.9.1-next-1600942081-39fc795f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1600942081-39fc795f.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Q7r0W55dHoUdbwUpx+mMN/yqQRMPIV3KW9evdIuWVX3CmcMHUMWQATSl/yxn9s8/2TDegBuX/Q6yzbn+0nJLsA==","shasum":"7b8fe767c5d476e251a0c1ed98c4616f6a097141","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1600942081-39fc795f.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbHBnCRA9TVsSAnZWagAAuJQQAJI3HbCvr2SnKPU3yAtl\npF360875LhcXP+Agb4gRqrGHg8L8m7bMtI6LNtuuw7hOGbVHMFnNTASWI3mJ\nobwFWmC6ybTjmgyOhaI+fcbDB0RlqxAfU17sO399NLdXVdPUQuTosruFp2oM\ntslFgUqCY6qM4T6//O3GFk1D9syFrvlAM5XQE8ahHwFLDhCDpSk+6nal6vkP\nTw6JSpSJQKBD+dwmd0S3WoixuJ1E0vYKX7pbJecce/GROgBILvOXfzClUYZL\nsjoOsTFPuQvK6g0VGinvu7Duqpm6Npz2fa4omum2r0brk/UBhtB0wwBlLyFs\nOq2oX8J/xAb2lOsherK4sqAcpC5xlnV3QFlo0rz1ZlF6i9nmyZUErNgnjfma\n8aM4iEDZC/swHcBDdzpFNjSEoKbHejmEyT8tXJFZkDf0HtbK44wiWFsO14s/\nsk8HvEFP0xpARdzBOxljFbyU0Dp/JQ3gIyNRTPZqr4s0oetceHRvJcBYuva1\nGAaQkYPOgaUbKws5kvCp5IX4XrCN4oDHlFEEgAe50uO3y/4Tauccgngbx5Tu\nOne7FteNo8K0Acqw7nxvwZWuZuFUizEC5fOMw5ZdUOe6rse3E0lIEIaoDCF8\namvvu+8poiJeNAH+DmgVXbYJ+/QVOONHniQ/UbZ1eJKgcSp6VhKkTYc+1qru\nQLcp\r\n=sfP0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDk8fwoIakRUvF7PnUAUNpDEZGfnq/ymO3XrglbVUOjwAIgGpaoIaIundgUp2XgdYo4QPneffv6PbXCriILtWQEl+U="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1600942081-39fc795f.0_1600942182894_0.3089296697030639"},"_hasShrinkwrap":false},"2.13.3-next-1600945825-a78f1716.0":{"name":"@xdn/core","version":"2.13.3-next-1600945825-a78f1716.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3-next-1600945825-a78f1716.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-L2fCnjn+2BVFODl06EUPWcehwF+gk0Kf2Z865VBcF+fPV+dVC9zbeJFlY6br1l1oMWlxqpcFnrpVFZhdTq1OfQ==","shasum":"bcf45cbfaa5e6968512082d473b7fae000f4ba5e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3-next-1600945825-a78f1716.0.tgz","fileCount":147,"unpackedSize":714458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbH8OCRA9TVsSAnZWagAABrcP/jikS2bPpANxfKrT5sX0\nQTC37YpDmEc6+9SFkeEirPyzN2IAhLz01qZqQ2k1xK9vmL+0tPt/uxO/alC6\nVeknofFXr52MkREDtVCDm8UwDi78iOkW4gTZmjB1ZrnVxx/TKQY0TvyAReHJ\nyRBk2WRWYpTjpSofQuPILaGIybPPUPujwgPvHfLrIdHFMTc0KEIst+CUltkQ\nnlr0dlWnIwtLOXtI7Cd2UZqQWbPn/L/9jAcaus8Z282Wm2EyJ+800KJYiwHr\nST/wH85bN/H9x5KwOTHkF28rdwbx1WGFuF5hMe/d2gMyAnrWBFL+VV43ew8+\nWd1bKLuVoxXHNnve4kbzRD+1hMecDiz9WPeVk9fRrp1jUgCB+hUSEskNwc+/\nLVqlGzgeBPj8wT8R0GhGXJOpTHhPE8jMiHxqgLZV2vwlb2dg13ABxEHjQx+7\ndxre/Fw5nXylZHS28ms3o2DXFqSQBvbrztexsp32rY2rKG1bUI1JShFJ7+v/\nTCiZGl2uflpyEA8O1gju+DTGIL3ymM22HtN1KiF6lhDCTHdDh4sL9OMSs66g\nkyWIzPHnqv3mxl2ae9KuRJio8RqT0+o7Fu20FsiZ3tbbB2vXw1Dz5s39elur\n814z7ThRQXZBTW37gk2ri15XDX8WCmEgWAY7ym0vkU1BJWXnVTEI325P5KQL\nPONj\r\n=FT+C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIARfUSvybxUPCK/UL2qRNC1QGnrX6GnGux2wlKxu2CgyAiEAto+kILGOGdyTpFn0PtS4iPrsem6tz3dCEqfl/pvIMYQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3-next-1600945825-a78f1716.0_1600945933556_0.3247858313456087"},"_hasShrinkwrap":false},"2.13.3-next-1600946214-8c76821c.0":{"name":"@xdn/core","version":"2.13.3-next-1600946214-8c76821c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3-next-1600946214-8c76821c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XDyYmATr44KklkddIHIcT/jf/CO+Yebj1/eOdNa2Czf2pOCQ5m8mppg5HHnyzvvpcofApMa0veX+PwziuZHTrg==","shasum":"d80e84e8324d52961b2fae632decbdd8b90ed83f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3-next-1600946214-8c76821c.0.tgz","fileCount":149,"unpackedSize":715295,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbICXCRA9TVsSAnZWagAA3YcQAIbqysl0hfrqihvuOZlx\noNALR5THdjiyGfXU2tM6eCpI9pMYKsW2crqLl/F3lwkVG50zXszIwli7OkCg\nJR9VKXTOa729VxM4rb5PL3PEL1efdSdnGfzRWlh6ePp7G5Zuu9j+XLwN2lPa\nplQwmbCLBquBuFQIemwnbqtGuS7azoikx8nPwK03ig8xR0/lPL4WYBb+yNRO\n1k9KFQUyswmfWFDBOksuEAgGWNYSdFAvrmWCtj6LKWNjMUeZCkA6N4rPqwj/\ndgYTWVacG5L1oj7o4Vzjkdu1xYyLq+c6gz7xBYEUfLFM7ewKUJOMHYU9PSFE\nbJ6Ar8hrqs4ySvCrK+PrlaUGI+uuWFfEeKr4l3CLhILmx87Pwh7hXIZOPsls\nt5W5EQjTUkD2+pxXH7Z/WCFZVt+S6M2xXvz6jgQwPCUm11LjCaBWsRCFoSd6\nmHB3BzrfOMtRzaY1V85Kzf4i/hJ0Yl27r+3wsQFD1y8+O+3+gGJOIhkMbPCZ\nFwwTPmxIGpYRFfR2+HY8hXdQk9J/HsfDtcHhoqew4RQOh8vgPHKar/XOEYLJ\no9IRg31HzL6GdOvuXQyOOIcDzdn2+ot+SxxmvrDDZDLkr4gWelU4mY0t2fn5\nuX7XKqLyhArOxoaQ5UKv7L9neR0nED86IncIcfwVcC1g1UGUmpZ5gIif//Gn\n5kLJ\r\n=uzZl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBhjNYIDsMAezhxU8WpuYrnKdOwjTxPH/ZCoUCQ4k/CJAiEA7HjwpK6AwRxrk3G/BlTuMpSqFvcfealQwHogh22s0T8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3-next-1600946214-8c76821c.0_1600946327309_0.49348467863511436"},"_hasShrinkwrap":false},"2.13.3-next-1600946441-611e0d35.0":{"name":"@xdn/core","version":"2.13.3-next-1600946441-611e0d35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3-next-1600946441-611e0d35.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-GnoiEp9k9EDaIA2cdTlCIgHl9+a0nkC1DcIXZNKkmXhCwD1jkl9K9DtQhNU6S8p8U8dZEqwrbVONhvnTLYHIWw==","shasum":"f7b60e60a604ed5feb513597f79c681711768250","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3-next-1600946441-611e0d35.0.tgz","fileCount":149,"unpackedSize":715295,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbIF8CRA9TVsSAnZWagAAxMIP/iBB5wVRkpazfYMZR4Ij\nPOCTKiDKb3RBJXQBZwER1c0gQBzilEMvivV1MtkDj054XS4IY/fEFxUdUOq3\ntaSJXHze0OTSA3rvBAnkDxo/Y5tDYlAJ1PL/UqUdS9GgPTz234PbYCg6aoRw\nxWKEkGdr0MSjVWeyhcaR9PAeo5pF0JgIiyfrpO88A0XLDMTjW29xfGEbKy1T\nSBbKp5l3d1llqdunOq10WUtX72GGHi9kSM7dIQ8kBmcwgym0MYZUtLHdLuEM\nSZOGz9B8DKq5ujjdtacNihL/XNdcIW3sG06kbo5DzjCgCR+xZI8DNFwrLa02\nXhh9REk5TZj9O/WkmWWP4KtpTL9OnMPYNvtaZkch/nqRlFkKA+67YD1glXsn\nTHCknCkstzWZKpgcAqXVGMwKzvy919tx19OirsC7ISpgevHhaXmMCnk8KVBx\nfR9QqzYu+qokDD+/OsMF7Ih6apcZeS6Hz6xXJYv1Fes7qzCUgphx3nkQd61Y\nAITNr3/J3aX2bOiLcHfok7SSXD0O1lgE7LjAao9pPDXTprdiUaHQ8LezpfDt\nH88JR97VyDiGy1SzoNKLO2SoXIqVDhrr8HN2RTFy95TY9P49KYRD76iyzGMt\nEYC0OzP0msWTihPyBFTDplb+lwPCiDRB8uHv/hl2YdzUwt7hFCczLS/b8sLX\nP4NK\r\n=UbRf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEqe2wH57agO6uaT9ypIS5APJSij8EgZGoSQth6Tm1/XAiA0hLj6uP7vh/nULRKCcWzYkcVPYZf74oVzS0UxNgpKBQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3-next-1600946441-611e0d35.0_1600946555670_0.6074060579367975"},"_hasShrinkwrap":false},"2.13.3-next-1600947693-fdfdca35.0":{"name":"@xdn/core","version":"2.13.3-next-1600947693-fdfdca35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3-next-1600947693-fdfdca35.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-TfbSia+vucraR5MFIbgXHuuNr01oGggYATi6oUJKFmAL5sRVkIYKu7K/Gk0mmKKj1Q/O/bf0zLioboO5XNaOlA==","shasum":"c74963d3ae49b824d6ad640436939f8adf40e369","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3-next-1600947693-fdfdca35.0.tgz","fileCount":149,"unpackedSize":716137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbIZiCRA9TVsSAnZWagAABjYP/RAAE3hSMySKixQVeJoL\nwYqWKZNYnKqeVJgWzNV7gbYaMFE/aSywwMWozOnUN096cbIdMZ6P28mLpwPy\nP05xTBw0CyhJh3O/z+H2lRrmIbCAZFA4Zz7YYwXMht+IAc+zUc7lHsjyosmZ\nWAsyhsDn58LGnVsIMaXEttyIWH9BDu5l3HITzDz1LQqunS4ms41rr1e5xSFN\ng1eAhu4ySnx7BeHfAoKZ3u4a18l/D/hBMebO8jqc92x0B0yidLSPVkczJ0qF\nvOGkb7LEQG7JrBBDFsv/+4wBu4jVCzObMVeP63cp16UGBX0rE2UjhOm6Bqhb\nCreiOoQcuut/vmgfIwWc0P0byDO/HhDfys7CWp6T9/SbGGray/ND/lezT2CY\n0s7G/aUFBFQ/9E12oP8YYw1s+AxSHMF0o5fEvCIwhYxCF1ZBLfb9vJMJfKdC\n2+fZYAGfkaCVtwSfVrlyR+WZXU/KOTGoEcIgKypijUW4TLoogaLxsPA/tsrR\nVHpT1v6CYbA+FBji7PrKDDDGvjxOzAfwRhna+BmpCujG0Avr2RYDWTPpQHQQ\nfQWmD51d2ZAGQNRWKWx+yOquTJ5PTtaCyFOV8sLhZR0TsV4wl9al2OT198SY\nTxMv4ysPtF7GMZNeJenjvEIrJB5N8GBhTHSnXAwJo6WRGnNb9xM5nQaGaP32\nIzoB\r\n=pE+4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+TgkpXNqBODyRLPaEb3M7cYvlRCOfVBkZz13Y4JvEcwIhAIPdKjQqb6WYtvnoXu1p6i5nk2LFbyIPwrndxo0UnUCx"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3-next-1600947693-fdfdca35.0_1600947809733_0.43471571778173423"},"_hasShrinkwrap":false},"2.13.3-next-1600949680-d345363d.0":{"name":"@xdn/core","version":"2.13.3-next-1600949680-d345363d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3-next-1600949680-d345363d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WpgufObf5rR7B+O7FMXQZxf5mSOsR+YSzVHW2VpXZA9p+N+22AReKccvKyAwNzxwF9qCvrQiMOKMMKTtqR29eA==","shasum":"c603920b500a3599657d2eabaae06e2e4799c181","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3-next-1600949680-d345363d.0.tgz","fileCount":147,"unpackedSize":715109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbI4kCRA9TVsSAnZWagAAJzQQAIEy+BvfkhETJqseLCFu\nvWVMPpbwn530KfZeD0M8xAOAcaXSsAWyiWw3md5cxpf7RLYwUeN4jDcMAGeK\nHgTBSFVbUq/Z3yyIr1EusLZ3SiQfYYCJVdd/KklV2G3uKU2Xkae9avSXCfoY\nlQQWH9vOCxeb9JU15bvQvVvRFNU2rJ36wqK6WLKRQTBNjB0A3Fqu9ad7WD1G\nGK8mxXpRJwa0fy9gEjWnV3gDYjz+NbFOvezeeXBhvkEfCp/NaahMLjxdpGRS\nQNL5AQAGWhV3/2cCSdvtrxm6WxiLZjC4r05U4tDe/MAJ83IqRNRJHc4yOv0i\nxdSU35LrOyjD0N4U0m3sAvYTpYIO0FRs9hf1wePZzetDSHGmE8PMQD9GtRBR\nwr6eZ9TJjjcTM488uOAS0fduMrzEnV1qWvoaB2KWcz8pg/LEhMnwm4bqlYn3\nZP0Thnd1Z8AraL3s1v5RVe1SAoRfJvfo3DlL99jm9Yv27YpGqv+c2RiVVONN\nozxImL5xfZm8zuBThJMNKEXygYGQk2foqCHFTavMh8xU9HRQFQS3ckWZmCt8\nCIPCxq0hbd9nU3OBsdWU+VTJL/2xXIQX+NpKeQqPlkMYehD7IitE5DxtHT68\n+TFJTCR6El8dQnFvPaAVkjXXmYCQI/SRFAFZSSwDz/4I20as3kSYjAVRn8/6\n+jf/\r\n=MLMi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuDk2Ubq9OaZead2vAQkzUAVDe7HCD+dJ2WKHnJu66WAIhALn9zkrdY4/foZHwhuSTIVjbg8Jp6Jhi7bf3L00RUQIw"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3-next-1600949680-d345363d.0_1600949796104_0.5847894283008346"},"_hasShrinkwrap":false},"2.13.3-next-1600950896-36cbff30.0":{"name":"@xdn/core","version":"2.13.3-next-1600950896-36cbff30.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3-next-1600950896-36cbff30.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-e2h9OYHWP3MkfXhMvH28+++KoSL0JL/oS6bJJFfM3K9y3i0a6GBq8Z9R6OuMKzhPk+ASDhopiDzcpsCOShOT1Q==","shasum":"dd90d9317b1fd55a345159e403558ca143226927","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3-next-1600950896-36cbff30.0.tgz","fileCount":149,"unpackedSize":716137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbJLXCRA9TVsSAnZWagAA+/0P/R3V4ULmVHYMn73x61x5\ndpIoECc9m7QQTomubfo0ccMsdNXwUNqfWGVdb4xPrYZJfAjELW3sj/qbhxH/\n4cgMYdoU5e09nz/2DW4TrI9LtCM5bRGoT6Nx21cGFPBpTNM/ptGRTe5hdAxd\nK1F4d7DmTJTBUYZMeKDau+RCAWAXvty+OWJs/++TDJh+C2Llin4wzwBybTtM\ns09as1sM7DPtKD2pfs1LQS3LxM2gDV4H8lLDhjiNWo9aHQoRymvAsZgNITzj\n1NipOhpSx94nknCKdOWKEcv6J/wcNgP+DxiecMr7M8vzARRkS3uk3pXhwYjs\ngMOp1UfE2g6Wd5P8icPCOknKxUQY9a3QO1oBl3qqXNFOKj0C8qW6JhxPhcpd\nE2hLdVXohmp6I7uPEPYA6xkafDhPCvZBGmDZa4koumdSB2RHHDFEQqbBcwST\n3X++F7cMHYSA67qzxIvzIybYvyGAhTdiNFbTagtibcBMoGnLRjiwrwSNidhH\nJn/2SOhm4OjFfLpoiigd2eQWw+ncVz7ygmU2GHnF9hBshPfagdz6fp/qzm6t\nwHI8gkVaSvC0Aqw7Bl1GupxBxEIbGRSonJstKxIAgkrv3bZeaw3cTiZKcQpN\nK0qAEAIjpwuy3qHshmQqskGfCCaAKqbxY2h/4kQYUxlfteTVjjFEHHjbWCpF\nQwgF\r\n=pwCn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGMxwQviSXs/w2C60GKvk7+HZDNQKdnaAXxEZ03tXOz0AiEAkCg9Tx/ntjK99AxHbtutLYJfCQ4uREzVYWUKIX7TGE8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3-next-1600950896-36cbff30.0_1600950998643_0.3859920948357476"},"_hasShrinkwrap":false},"2.13.3-next-1600951520-3e87b43d.0":{"name":"@xdn/core","version":"2.13.3-next-1600951520-3e87b43d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3-next-1600951520-3e87b43d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lMMJfgMK9nycLVC+7XqXkcURf23l5YPO2XDrudX/6DihQTMO88FloTRqcC7nDojnEVtCsg8z2METJAPFjU/Nag==","shasum":"8f271db0abd9f47e1ae3e1fd6f7baadd87655944","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3-next-1600951520-3e87b43d.0.tgz","fileCount":149,"unpackedSize":717938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbJU/CRA9TVsSAnZWagAANXwQAKGeJflSZA7NOQnd1ted\nSyFeQCYyXWM0GNwwKRFCUCRST4X13Yh7vi5l2UbDh6Zm0gWT86FswvFzlRxa\nIeu33PG2gicYG7sRaIMOYOVUYr7ptqi/woNUdD4GLShiR8kCYB+lySDtASmi\nuWlRFXHrDijc3zi4t0aC4to3bh3O67XHZB+jb0A0bCBGshXBLADmbVyXrBdD\n/dupaH5+SwyNWGNyCjDd/eIUjE9yj8b9JumLwRHCS+5otyp8aPA8ZIPFvPVo\nam0WDM+dnYfJZ7d7ctfOYj0HYPqW8qchFp2dIDhfxUfFqeCveuSz2O4lmAd1\noWDRkOpYXf6ynSEuanpd3ijD7siJpV2Ackp7TlhNHiT5KSLYCY72gJLYvxaq\nZg7Q4LxuYF4pOS7SdPBiGOXH1KfVnKsfz2PiMy6jz1fsKCr4Wl3NYpSYFTAs\n7zsyHZK0+n06CR4fHWtw5ELpXTkfle7jskA0t67edczcjxPTvxLnfGKEyePE\nqZgd6KoeciOuGoDrSkFtI7pIxh/blmTFTIK+BjUzMRiWBeS3+5TWlHwYv4R1\n4nFH2vcvjvKcYB2iHCXAcol9NbRQ0Q/eNvkAx8/t7QZ0x21PRB6k6e+J9b4s\n5MXCBEhGXxKbwYzX0ehIFFf+qBi+uVt3RiWCiWVTGcKZO4wxQZcUAsoZ4nOI\nj1di\r\n=PJ6B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEgVIS4zTF8/6XRW1Pkae7rkZ5lVw84d0SoODX2b4a6GAiAW2qPgHBXCEtewvJWadXp0k25OkyRO9XE0OMDQ7jL7qQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3-next-1600951520-3e87b43d.0_1600951614853_0.04963806949447935"},"_hasShrinkwrap":false},"2.13.4-next-1600951877-e7573e8b.0":{"name":"@xdn/core","version":"2.13.4-next-1600951877-e7573e8b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.4-next-1600951877-e7573e8b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fMi7vUSYSfeQmvIeePLOwJ+nqXiAdGV++BJ/gv6rau6OHo7L8wqg/MOSbsk5uSojR25VoICR1CjKkzhZgXhA+Q==","shasum":"40884fb17b378e74626bc5f2f0e77759005ebf2e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.4-next-1600951877-e7573e8b.0.tgz","fileCount":149,"unpackedSize":716137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbJbACRA9TVsSAnZWagAAUj0P/iVrSKpni4DzdIQpXjwY\nBjcUcmDluwhGNiIiu70DG1umVjMrZnHZBGOkWBnMzX3Rl/faEGzvh/TUys71\nDfguMYwge3VpAd0ajKV0XYHoTl+SckTXvdox4xrWbY8RsVA1T6FFDe0lC9tQ\ncAFbW1F+jcR0hGNO/Kb0Vh1WhKgxUsbmb8FCuAR2nH8xG6oJ/oAJKJOJ++Pp\nhM0Tja5YnGxf0/pVCSmHXomevWk/r3l9kzH5zW6YCKG9CsJLROGeLqgS4aNm\nkc4DOxySB0EkoZz6i3iB7bL0emjeqDCic7Z38jG8mt4Rm4AVY3B4oA2IYgdU\nAEBpzMDYPr2JFnzZSpGLCcr38E5BUMuKXWxRYhgnQIG0ObFOHbaq1qjLFaEM\n+mdtcPxAXd2OEIPiLJ0gSMg2rUjMlgbxivhh4epuIT1hn1xcoavkVQzbJg1l\nVCLps9dijytrUGaPOpmwYX3TtcAzDqFrDOdngSdY1w3+enk2qpNgIHrR+1OZ\nnC7idW90YdmFC9OmPCmGClvV1GVFpPGXgeEK5gY3pQZIBQJ0iQnmKqwwV0U8\notJgjs8a5aiLsY2JANEyUC/CCdXF4wLvFQO2QyvOBIMzVHuzPjoV5i1KCMxb\nzXlej/oCvPItujMUb/s7Qdk3hQlttqjhXqIurb8ZvgMQYd+uxRnlMUNdFWSW\nQOTp\r\n=6Ip/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFySRONCwSQbN/t1oTSw71//1v71LXVOkQIQz4zIX34MAiBBHvF5I4P6CxLu3St6lshj9xhlrbFCTDYa8wmmPgB6CQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.4-next-1600951877-e7573e8b.0_1600951999688_0.9905613927694341"},"_hasShrinkwrap":false},"2.13.3":{"name":"@xdn/core","version":"2.13.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.3","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dT3qbITEpyOacJ/tFh36+1h15tk1fVgWet4EaUdyJeChdbuQJ5+I0j9VAOlUTfXZmzRnBxVvVyyBpkVTxw2Ivg==","shasum":"67676b5046925c7f2e32587bbfb431b6f43593e6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.3.tgz","fileCount":149,"unpackedSize":716083,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbJciCRA9TVsSAnZWagAAOJwP/1jcZS3k74hzUJkTaf5f\nloNTCwoBlFuHTSFHhRDb+uDgQhi41qzzCkPd9l6YvJvIQzmILeEDFUu6ekx1\nRPU/OSWeak7W3QtHWY1cXzdy4xjUPusesD30qnnCCm01vIbGraraneYkDB62\n7hCHcINXBP0Orx0lEymZyI3ov4sGlMsSmcJoUE84F3qQzqT5Nmgg7stTbZWe\nvHZEF8dqqgvsHa5gLpE924rbsFNqPqaMAmvdZzzw77bpFtKsdOggSOKkiDOV\nfCW5gTyltNmckjosKhTIL92GEZ/BoZ/2CqRq8FWZmaQ78Sgp/U3gNwXDukNC\no+wjHNRhty+y6TIX0oOkrEcQkgXd6bC44fjR4G6cDGTyicfcgP2qJgpY35mf\nsH76O+aWShfLTQ/s8o98l9X/JZpiZVY6P5RzI8jcpQhOiNzHrlHPfR4VWOc4\n3j3v3E8Lsm86QEitjhE49ggbFokQF0wsWKScuFa0lA92UT/erPPm5jgFas3/\ng/48DhiRR4Os7HGycVO23hgsTUDoKV+W1v9GCZrh/g3jHDCJdxndaCyJVqvH\nIGh4BssET0JQ8KjsmMLfV4yabiLA2SJGH8fXkiEY9J0zaelGLX+TkJlfvtKd\nBBwLiMfmsPYunF16qniT70oEv7/Acj6wHDwES0ASCI+6FLM7S1A/HydZkKec\nOpXI\r\n=oVmb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC58evLuuXhoPzoNhyUC7eN00XtafAdvWkk/QxtokFYXAIhAJkSv7GhDDjLhT2R9qjsRQFSeYvyMFst5FcQhHVc3Kmp"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.3_1600952097728_0.0901347798463068"},"_hasShrinkwrap":false},"2.13.4-next-1600955919-ae7ee66f.0":{"name":"@xdn/core","version":"2.13.4-next-1600955919-ae7ee66f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.4-next-1600955919-ae7ee66f.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yVhk8rPSSoUhS1Jvhh5heeJw9h7fh9VOwBC3fWiyvXygB44m5AffijuTW0Bqeq6En5j7jKsuG59238R2n2zolg==","shasum":"3e2627d225653340ba22646ff101d3fe041e0898","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.4-next-1600955919-ae7ee66f.0.tgz","fileCount":149,"unpackedSize":716137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbKaGCRA9TVsSAnZWagAAabIP/Ry18iABgzMDPp6V3fCV\nKgRX8V5Sdye+iPvnJvL9czETXr+1WAu610wAk/U9HvIhDwuvye/wasS0agIW\nBzoUuTFdVjgxErIyzmofqnd/Lt4mHqhrL+1BurXN4bIP87SfFg2wjoGqLnOF\nFC0952apTRG1DZth44tQxEc/N0tPXUrx0+zcaMGNfwfnLa682H5pV6K6R7dh\nuoKk0ctc+noBEg0GAVUoK313OvqQWOflzv1W6foGzpjqVcjf0yH2BpmddYDr\nMq9sm1gGKTZL1DxiESZKjnd1zQKDtIaC8BWG9Yz7ouxjuzhyewRVVIXfv5tU\nc8zLcJEebqYQ0HxmQNGcXJhvLUtt3ptwsgl+b24yASk148c7dvtdMz/iDpVG\n76x97AELhiGEtLFz5fkNGdXAyi6PZ44bYRjtdJiQp1TnpQBgg9g1wk8wDuQF\n98GkhC1DI7jP6Otkf6Ei/dqDNposX/UWDAfQ9uHhjVBqwTY/FNSEICnAxwlu\n9d3LySypq4kmyd0tZB53ERszpxG3UnGtLuYal4h+yzzH0wY8gYUN4VABuNVX\nR02ggJgUnhAzhvHMExP7CBEwLKh5ivfVV6YH/8Rcfu3CEPJ1U1vy9Sq19nZL\nJ0ebeWyoZql0xqYlevbG6TwM/ZfoFdQfIIYGmMho8Le4jqJ5BGoVgCO2bjzV\nXHMS\r\n=Dojy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtIovjD1IoOLgNwvLbJWQNXl3WYIUPTg7WcSM9k+oe3gIgbVF41xdAzK5w3QUhIaWLXJ1Y+5umtlFWS4lNeaC5nAs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.4-next-1600955919-ae7ee66f.0_1600956038152_0.6132885615212831"},"_hasShrinkwrap":false},"2.13.4-next-1600956816-97a7fa5e.0":{"name":"@xdn/core","version":"2.13.4-next-1600956816-97a7fa5e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.4-next-1600956816-97a7fa5e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8loC8Y5css86Vu9GJVYs5sW4P8n54WFF6T2vpVyWnvlkaCgKS6h74BaFapiXPNfFVmsScgvZY/ycbCrVRd73yg==","shasum":"ad1743eb6d4f6eeeb22c47ccfa362582a040071c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.4-next-1600956816-97a7fa5e.0.tgz","fileCount":149,"unpackedSize":716137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbKoICRA9TVsSAnZWagAAAL8P/1dbECIPUVKltRTM+WPy\nWWtiweSVJQhKuOOXKWL7Z9b8yRJMmhYubqOZMgt6rX2pWfke5KFQ4FctDkGe\ns0bL5D9WYTNiFEhCbeMv9TkAmk9eJTlINi5A0aQQg08+mgLRHAORRgEDVs30\nNaeiGWPWlLB00Y/5DsJ0wD7HJQ54lrzTRuCMZstmnDBRiU1jpXkn6R4BHXJY\nGduUqLsiyWZhHSXBQvz2mOOUPOQHLStQnnJ7Mok5HTkEVwtkwVNhFgUOnISz\nHMMcgR4AGmnZa/ummtKxoZ2b+nVX+Eo9pE4RfhK2HuGqNr4wKiJQXQ+EHNe0\nUsx8BL4jHXSmkDxN6ai9QFzrtYuH/oAJdDdNo2HQo0jTUnyinjyZGGjJLFre\nJ7aFC0tNPE7B9tR75ig629SXPRhaqX4xicDr6vaml1HCuDJvlFqOtNX0FJA2\nyGONvHICbHEVOK3/qXxUiZ/jFqpI23kPUV4hF8ikHSbjVkk7Pz9mK6JrGL13\nd85dTMzp7+j30OnutdwB65p1XDsc5FEIdZCxpEHu+98whZxM4AuArPgecjMS\n5HbElC3yf6bCXIhHLyLWG38vQqxstfKq/zs3jJRGM3OQWGNuWESDnyPeR3YE\nLybyeZ+DFLM80+zLcImYQxIgkCNWFad9Eh5HIQ/BiJTcAOk7LTAnt2RGDPUT\n3W9t\r\n=sIOK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGCVAhk6ZCe2YNBhLWuhssV+Su7GWntiMFqXNyZAWOG6AiEAshkI8vB4sxXnUb9dZF6wxRBfxKalZ/PSe+IKCEwnAjc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.4-next-1600956816-97a7fa5e.0_1600956936085_0.49347919947610097"},"_hasShrinkwrap":false},"2.13.4-next-1600956931-7efc3323.0":{"name":"@xdn/core","version":"2.13.4-next-1600956931-7efc3323.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.4-next-1600956931-7efc3323.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zbyxUZMyfxuqQJDsJ4dkwEcLZXLcVteXgM8fvfqTRk0cWM1lUorRJTMQS2YlfME+giBOfPUlY95OOc5QeBdFtA==","shasum":"fc8b1fa6ea0110b4da82a509defcfa37a1a29cbf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.4-next-1600956931-7efc3323.0.tgz","fileCount":149,"unpackedSize":716137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbKqECRA9TVsSAnZWagAAeFYP/iWOuFtG2onnBXiqjjAL\nD1gLmFCm4p7YEtaUH0azeFX/1QYxAGWggXY4dP4E/zbFcu/zk2fgad5QHCmt\nRfMRkiqY7kIkd0FogRubzX2q5lux3SU+V2684nXr7c3SZ7p+iUrjvqD7xyx3\nmRlOHiPiwdUyqkeACbc3q/ojmaSMNfGqQOwdnD4BgbjW5qZZdcG+6gg8HJjm\nKt6Eggn+Fzt+uQd4c3UQQHLMmEvttMRpTXT3S+08ymBVuIgPUWa3PKgmuEXK\ntBuwEBWSH0XRP5cKCPGyfnZEu/QWSaxEqglSPaz6pcgIX9urg5pEXBSlDbyg\n22LARHXDQ5pNC3YgVdr5DYuU30KxtwFGxSvY61yR5aAKPDPgD0k4SGYSXOze\ne0ngsrqNAVva+OVuMfOkwKNEOwfFjb6NRawnW6yOscCpLmKMrw7Gkj/UMLKf\n5CeP3Ps32I9mmzTZFa1Vl2gTCUDX1TG/HUKknMMf8e2sIYXCqwebXoHmPMqf\nK9insA5PnwL+VX1Ic2DBBrqLsvFkwHWVfJMf3dLsPh0mTtx5znwt7bh0yltb\nnUr+tQ3jLRlwSF78D0pkYghRYDGp57RFKgbQeqT5UNO2A2JnmBqn00Cht6mV\new0VkulTjftqYWS3lf32381E/2JdmsBMCQAESZOa+ktRYxwwJOI6GHEBGPeR\nQ2cW\r\n=fsZF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHvKEOODOxSGoW5ETIiSH8pcO4/zMgUnxCTftdw/oaIbAiEA+yhi4anKslHzfx3OXpnFdniWvs2+GH2qaw33PjlHY3s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.4-next-1600956931-7efc3323.0_1600957059711_0.1798680940312083"},"_hasShrinkwrap":false},"2.13.5-next-1600957052-377709b5.0":{"name":"@xdn/core","version":"2.13.5-next-1600957052-377709b5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.5-next-1600957052-377709b5.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VQJw96jlyQpK87Cjn2T4pEgf+b9zrVJq7u+3398YJvItrr1UTCaa+mkrOnnf/CvRuUg2wgGj1BBtuU+BIf8SaQ==","shasum":"c90bef0a02163ba5bb7513db4a201adeb84f65c4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.5-next-1600957052-377709b5.0.tgz","fileCount":149,"unpackedSize":716137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbKroCRA9TVsSAnZWagAAMB0QAJMC+9IIBwNmEMpwpoao\nb4PAsBc3aBWgJ3CBbfbcqPgkTc9ek+A7KVwKeJA451PIEruerK9iCdwZ0r1o\n3gdYT7cnZvEhHtUhJBQjmcQcpCtk7H2mHmNsRXy7jaENfYutto+LBbkBXsZM\nFX/fNoUej1mN+Z1mxiX+yf3gg/8vEuL2Tj3BslWC4Fb3F9ylP11KTZ1NwtCk\nTmUMcgWktET/pOy0dEsb9lPYhN6rXp0zC9+EBu1gxxGtuHT5mpoJWUKjuoWn\nhz163vxV89W2i2EqrLP2Du7u1YsKJPcwOmAmGYdYZ4gUvnVF4ki88z+AzLhJ\nsht6BR6bu6gDB81DOnVaqq30BN7oDInWZM85w9UnpAb6OWbH/fPZWyEH3OT/\nSh6noMflfxjp/gw8cTXDspm4U3q5jpODCt9Ajriwr/zmgGjvhIn6r3B+B6pp\nANDYYIMYNKV1lh5X9Y1GCyOwxYubcs2g4n6Wh8M+BYWRcraAjhBDuV97cLqc\nFIeo1a8EhC5JbS308T4KaWGgycgQIuD0Vgk8gzeP/F/99LZ4p7m7m0Rh5gW2\nTuBAQ4vvv1blLS1+nMkRNn0xzyMFZzdFFlk37vnl1i33xZeecO5qC15MdIwd\nnBau8L+vSJhH7wRRFRvPvCCVn/3NYZfDWSAUOlSTumzL9GOx1QKBJcHu40U/\nkcen\r\n=c4rb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCz4oFUS0SnNXtPsHxUElgLkJf/53+WFLgxv1Sns7mLJQIgck5zsjwtgDJlpLnbKIjBkEi2IzKjFk99HQ64s8DIss8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.5-next-1600957052-377709b5.0_1600957159598_0.6269443927365468"},"_hasShrinkwrap":false},"2.13.4":{"name":"@xdn/core","version":"2.13.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.4","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Eb7glaQ8tzVKtfYZA3P9wUhDTTqm1ea/xndmDxfo/Gb9JlNtLuR2sKHT2AlVa6M+0bGdTKQH8EttkDx23LF7FQ==","shasum":"e48cf8584909d0238f1fbfbde82af0773758a702","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.4.tgz","fileCount":149,"unpackedSize":716083,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbKuICRA9TVsSAnZWagAAVAgP/0qCjuDRB/KDBfj9efGv\nMv/XydVBSqiPB5q9Yedob78Qnfh+ra/7jk5j1poWJPH1NFX7VIj+H7epZUFx\nL9bm6P2dpNSqU3t/srFT885uJMy0SeODVZY4DcGTsCSJ+Lr6/v/Xu8GWdhve\niqevsFWvv9r28m/aT63XncWSbRh+oJDnhVCWUR6NfLERPX+pngPNpTTuLLH/\nTlkIahxOo7wEIvxrr3rC3KrwW6+FM1+9/ODiNx2sFVSM8nBDqaXGE3kK3phZ\nY4CRWDLBs0FDiAioKxop1ZPmrPV1ocJk0AuKfbWGXpZMCpPzSK/MnBjHWEQt\npY/MqPDfNJlg6nZSmT9SyuqNxZUl7A9i1dIacIQezeSatu7mbSuqOCV44jCG\nxw4VxQ9Llj14X+eW86ldUlXYPrBW3weBnsJUuFxTZbpIoSJ9re38zXHpHm3b\nPuJl+3j39KZV/uMdjIfMbdssG3etZnRWCyh4nqtMB7LN59errDPJt9o2EO0Z\neJMDOedfbdhewwlg6OnRVrqFgzbWZhCbetzpGpPNyv+E2ejOTYSfS4Qp9PfY\nybkEDQOwVvDwZ/0NhLKj6OrChztnIaFlfBhkzvnsuoTxUo8tXA2yt0gP5rYH\nuGXt9rKHrNtElgUYvJZPyMCUI60t/ssmsp2IIRWsYsBrGpeyCSVm+LWNpJGr\n+9wP\r\n=zGgg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFjLZbNdZ6kDnDBfmw3Ce9vu+Sx8j3Voyd1GJk69ZKmgAiEA6eMAzISc1MH1ZJ6LWdUr20uBt0rkFsqLxsTGx/Kq3gM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.4_1600957320021_0.6398911930169169"},"_hasShrinkwrap":false},"2.13.5-next-1600959960-6a78967f.0":{"name":"@xdn/core","version":"2.13.5-next-1600959960-6a78967f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.5-next-1600959960-6a78967f.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-53k+kOHllFTRBDDYFOm0hW0oJW86A74fFDGGAMgCLBypQLkPF79EqzkDBfkyzH4mHMDhamczZfC9qoFITgHnTw==","shasum":"93e8cb888c546d16f549a850899a0c4156907d92","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.5-next-1600959960-6a78967f.0.tgz","fileCount":149,"unpackedSize":716137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbLY+CRA9TVsSAnZWagAAWYYP/jSjwECZ+3ksg/pUJcSF\n5dZzaNX89BfIY+WbTjuYWuMFJBJIyFaViXIhJlI1fwbwOQfPE+U1r2K3qJvK\nC8cpplWj9aMGLwBbQbiXLAAY3pQAv2CnClcB2ErtmrUsP4C3NCJCU+Y69v8n\nCHYICH+6maa7Kg8q3z8vPrtcg27b+QwQRZD3B9gJF0CR8jWk2HgpoDE4boKU\npp5buQhwtRYF5n04P5GDYsXPYz/4E8a7jLgd5NzSiNetff5Hin8Hx/DhGqcJ\nQ/ek9Jbv3Qzjq0ySd4yIOiUbzJs9EuRHgSKf87BPUOJiqTY+HZIakkR2zgLM\nuykb3enGdUrl0XdDrNRT2mn59J2SnM/SbM5cgvkDRfnE6NDZlSh7kdtVr40Q\nmoO/yiYYnLHn8BuZ+JJ4bHCLSPhNF4AmWoxKtP5kbKOfc05oZkzzPjpxw3Dr\nk9Yd14rORc1ziq7mNSvGAPquz5QmHdQUOzVdBuekpWasnMVxAQ1K/HSGitVZ\n4gne0Xk+mkmOczk4EAfKUZiAV+pFPgPa708pqxMVDASpT4qmMBKNRxWMWeA8\nbK9QOXMDtZbK+9K84zX80pqBB+Nx6AtNQV1knIyW0D5W8j3CZX8MOpnzrWYd\nIgX8yAes0QnmMVmHGekQltrwdw1FFpcc3uyBv2qZNXWUDtXsfT0AVG/tQE4e\nbaYn\r\n=c0ik\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAmG8wo1uMVaPDmQ9mIW+/9oo3abrHrbzvC0i2eVwg9vAiBM4szpmhafmBr6wJanjRQU7Rbc0UUqynplYtsFxpDFfA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.5-next-1600959960-6a78967f.0_1600960061362_0.729415159347782"},"_hasShrinkwrap":false},"2.13.5-next-1600965833-2c8245de.0":{"name":"@xdn/core","version":"2.13.5-next-1600965833-2c8245de.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.5-next-1600965833-2c8245de.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-6aOgG+WCufYEZFM/GNuaFI1XuJ2+MCK5BTanKHbXw9rkA1n7vE0LZ3X8xp28wjGZPkUfngebfyN2D9qmt5Hbug==","shasum":"cbed6ebf5371a940f5d187b64e2fe4dfaa1a1754","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.5-next-1600965833-2c8245de.0.tgz","fileCount":149,"unpackedSize":717142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbM02CRA9TVsSAnZWagAAUdQP/RTRxaNWBHEpaH+I5YnL\nXwR1pT8G9IkHLZ2j/MZ0i2dT2vweNhyUiL96EORAp4XtTxqQfPPrQFgQghQ1\nPAZ76WmwlzDn1rrV5qLlqY8rPJFuuwZ7V0RtEkWCZmsu16HBLtaRzfzraPcV\nrc/7oC+qP1McmbZPmLnQ/iVimAxPGjRZi5uC3uaG4qsplGs4kh64A7+lWBe3\njp0/AwM5AUcZr2FmeiOALBjANCxtpd986snR1yAycXiNtSPOPdAmZqS1F3vs\nF1tYu5b6DRjNTukp3atSoqBIae4oIn94ChlRiIGsdnXGs9IMOp1ulMPKi6UG\njGqd9QGWlwsPjFsQn27yZmE/tTu8jZQAmcofB8pCbmCLC7oo4Zd/6MGT3uuh\nflEQwOfHIrbxDCZ2xpBwFgE2OfoloGrBFCfg5ayCDtc1Kw/a7DRCA5oV6Wxu\nxKQ2AEpBkwXogoZXZTGudO6sKdgTSDAMDhs7mm22NKbQ82J4TtHw98/d4htX\nfB2S70PtlIFm+LISX2scX4opRK+tXJ5zl/WHe8s1a8GfIJpzfAtrsPFBNgFq\nIsBEIga1x3eAjqC9DWQKgDKrz9f9ltMDUL3fsS/2E9vWkACwrMWtTKjcoZJR\nSmCVpCEYeeY/06YeNbHTGW2Azw6MiXe1PEZ8GnMu7bGasTBIXKIqRJvx4OMn\nxFZf\r\n=ElYp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBtT8nX3V43mNnX3yc5zNWXxid0oTAgo19RfEiae81qvAiEAn0Ik6gZpLkMFgF+9lVnBdwiJ9Nzlp4hVDoNqigXwago="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.5-next-1600965833-2c8245de.0_1600965942182_0.09974207140076552"},"_hasShrinkwrap":false},"2.13.5-next-1600966410-6b1d640e.0":{"name":"@xdn/core","version":"2.13.5-next-1600966410-6b1d640e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.5-next-1600966410-6b1d640e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Asm58MAr2d1tkOi8NxLVMc8ecJ8wKWQUZkVpc9UUm6gQx/6n5SJY3sqoluVgq2kYIFazgW3HcYehX0OhrZNLpA==","shasum":"d9abad0925eefc79febfbe914f2830389cca55c6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.5-next-1600966410-6b1d640e.0.tgz","fileCount":149,"unpackedSize":717745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbM+ECRA9TVsSAnZWagAA0D4P/169mcTc9xgOnifmUhus\nyXIozeg50HN6C8z4rgGLvk7vhK6XHta6ZZma1+1pbmGFDwJjutwVtTK3QzkM\nH2GsmsbYGW6+aV+ypkeyUNYYRxnjlHnKhUWIYSl35faYGkrRcZb4Ljw292VR\nJTOKLqn//aEQWcMWCZQlCpVMIPrZA/nGI5puy7pDiEdOOabxkkKyF3HVfDxc\nhM8IcqHn5pdpVQ11dU/Opzd1l4bQpXImw/z19e0abeFxG8LxSNX9K0PDvah9\nz7VT1i5RRf/IXPISt2PKe3v24B2GPKIVasnPM2bSzuuj0yaDdMSz7+tRFCS1\nlQup5Meu+guPm6WcqMeff8/avB2n602IvYiwLy+AKESkIvCuNOpgLcNaJwcQ\nOyE/J6cNKm4MStrrgJlfAkL1gz3QPhFqlWpRKCK4EqJOvA1RXSMU+Q+jN7mT\nK5Fl+bnTwAXySe2BJut0bKZjqpjP108guO7z6O3fQ0VzldoGRIeiNAdySOd5\nnRoFm7/wyDihbjpMB95BliEqlYRwj7X0xAA+yZaszLyaPWEkmRGHfz2UVnA4\nINAp8rkfqtXlwQWMqz0oxAg0I/4UvLNVpGBXSUvDviZVL+/PpfnNYm8fFf4p\nB1cMyc0Wc173M4Wn09kP+LaV/9JyRHkTjZ7tBBpB7+E8WrGNksAjQogB/snq\nUU2T\r\n=20WD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCID57ifg9U8JgOChU60XRw0A5kVzx8O/zvuJ7o84UmwoLAh9IGX92U9U862EdxfyzMF1REYKYkYgtw1Z85xqz2uyU"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.5-next-1600966410-6b1d640e.0_1600966532137_0.8877525442906322"},"_hasShrinkwrap":false},"2.13.5-next-1600967683-8689a73a.0":{"name":"@xdn/core","version":"2.13.5-next-1600967683-8689a73a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.5-next-1600967683-8689a73a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EK/Eumdwh/G4/roUGT8K2CJL2/vGXiBQX3JcFS6rPOg1CLWPTDimdR/bumdP9W+g49wqf6UuBjROvDqncSsTWw==","shasum":"826eb8df0319bfd575c959a6ccf062ce521c752f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.5-next-1600967683-8689a73a.0.tgz","fileCount":149,"unpackedSize":716301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbNRsCRA9TVsSAnZWagAAr7MP/Rtah6PuMraRmIST9XOv\nf+hprrXLzxSO+EloYxaOQcORkhC0ucYQ1kNvJ/t3jvp+3FuCdiiEh4QEmAWh\nFbShCjXjF4X48+UJ/UXyr5Nczcv/TNhk6tTewNOulhnupFjgG4UERZNkb0Sh\ntVjmDYhwFOVvSEeZqYRyqmYQm8Z68soD6WSm0qC6d5r0+14Y1BoiqE1E4VeF\nTWgmFo4VyfayDJXaLlWCCSit7fOueag9lKgFTnA33CWg/JLdUtI42Sp3X/Ym\nO3owdwus6mmQx4lyujObuxCClhcDbK0VpMF2quVvHJOnnD8A2XBrCZCj12n9\nmoNF2ao0FcIFwqZn8TUaRkb0NsYBdKGj3aFImEI4SF6qJTuvJ//t/TPcTy2H\nQVx9CjS3GWW72jQCedNKE1kFbLvYstxD3KOn13QtFiTP0VMsahyEZOOrUJ+W\nblZZnj+4IHwpssQ9T38PhFeUMTD9Ik5hTGhpXFl048d7EGRIcqhCc2s3Grci\n4+xUiOr4YuPpEG/NzuFTpYlZ83VNMr/1ZKZsO6QojmsxKBf8bM6KqGUjbNJO\nGjEo3JWvatkme1ssZGI6VINrkNpfqStfDqfsBADsQ8VYCVNIE4KadDs9JNmu\nmphreb0GwQEZAw3MAMp6RX2rGeROXl11GhLoTS4lsmEJI+PzdBe34hp1IRej\nY906\r\n=asKA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICvM3+zO/Zvhv7rW+YRzg0K1iqmF9nGqi4GmeLF8k9VyAiEAsAvqWaGv3+cygzl6Re+0GNBRB07ciQvgCyugkcwoKFU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.5-next-1600967683-8689a73a.0_1600967787332_0.03627930392113887"},"_hasShrinkwrap":false},"2.13.5-next-1600972143-797c7dc4.0":{"name":"@xdn/core","version":"2.13.5-next-1600972143-797c7dc4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.5-next-1600972143-797c7dc4.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-OW2Wbi3YRoUepO72ZSxJiV0IW9uZ3YREiPmdgg9QNpoHPeT8Ik1Qr+dfxmHuUdaqUpQD8gTH5MH8qS4hkZIhCA==","shasum":"47d519508fd1f323968aca6f4196c281d601e280","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.5-next-1600972143-797c7dc4.0.tgz","fileCount":149,"unpackedSize":719480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbOXPCRA9TVsSAnZWagAA6CwP/2f7vBr3twyQh/4HP/gG\nufXaFtCZi+vvV4nEEh6tkoNHcyXyk4vqSxzr7c77f0dw0YFnWzelTUoAuNIr\nUuGaCXcjqJpN59xBJMUo+doGZRi3jPRlOLBsybR/oJ0EKADNDnaRIB6dBAc1\nNWW3FvK9bh1v4IXPiAFxTXhi3Nql3+ir056Yz+iHMTPyP9aR6lPC2O51M92I\nNEwJrpnqRnm9OUZ8TJouYk3BsXPPn5z+DWRwz8QlUtE0x8znJEAFUOxmc77d\nOiaji69p290BBui7ewIejOJXBhTdjwUS3BtGl57O2INpfD1TmejR84peJgqa\nlhWd/tK6ci/w2emg5DjDReP7ERbxRyC5dOW1um4M3xr96tWVI0Ron48kI7lf\n8AYrZi9t2YpI3SZTpLRwfBuxnUMY0JHDE4IOq6zZaja1UiaDpkg1RPcmc1Vi\nMpWSLbY2OiyKCRcDgErZz0v6098PxEcCTrqTfeHpiisp80CY0arJtn8bREJF\nDe9/nWV+Jt6ged968AeRqouxOjJA5C8X6ehZN+ZeZ7uK5ehqynPiCv6H+aVo\nMypmoiYJBGFdl7A4YKquWiE+NKRIjP+ceUe1lKzDIXv0zbL70QvMyM2bBtvr\nEhC7ouvBuaIeRytGvbXnXPoqEvbzWYgwbKRpAOekEKif0xbcpvQsJpJVHzOB\nxjNg\r\n=Hcki\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICU3PhzKC49QBvs/hVo3L5iqgGVMEoPDciTo4sfBX2x3AiEApw+bIhf1ZsQVIzaSySm1ICqFPSODttRUphKWZZGgUao="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.5-next-1600972143-797c7dc4.0_1600972238498_0.3017481620832896"},"_hasShrinkwrap":false},"2.13.5-next-1600972738-90373597.0":{"name":"@xdn/core","version":"2.13.5-next-1600972738-90373597.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.5-next-1600972738-90373597.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/08oLSJH0Mw8+GK6VLALBgEYDUfhIwPsJFVNirx6KMrdQTGurkmMGRuJkrBJmiSJAs3JEFcxXf1P9EBm8X91CA==","shasum":"ba6c14ada77ea1d98df88feef3337fd59853c5ac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.5-next-1600972738-90373597.0.tgz","fileCount":149,"unpackedSize":719480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbOg4CRA9TVsSAnZWagAA80cP/ie2A6GR+lWqef8fGQob\nSwaGuJ/RcJGTsNyIUibOzylcUzA3wdhqVagvM1nieHyf4TVXWGHBDjdN4XdS\nVjC4zeTOhaHMDJjErV5eWh0xbGq1W4xHgFPShlCj17qIaa/qiEDi958QIRTu\nRWBi0czpvXuDTp5V95SFJLd5ouWLb7ywdxvkU+Ojcl9SoZKkHGvUrEgP2SlL\nWNCriKjJniHOowBqBCE3QG80ZnFGPpGmvre7cCfJ/r0TLfkyEaMNxw7TUXob\nCV+djM01kWV5uGVnWRE8xjqva8s8D2BF7fGN9akk+0XQnK3k/3f7CeeShmsc\nI1Xze3IrdYA4uYDuHu24lHYRsKZRruv62lO67ijpUisX8NAhU3GPVtgusXO8\nYMEFV2W+6ZDUnkDoOSd5UFUW9m3Wc0Wq+GiO6/DZUjqKs6qIkPZl1W962Bi2\n+DvywHqMSGVkj6PA3TxpDbJrAU/cDdJkTl3rSAHCufbL6aNx5zc/UScaHIoP\nvm3UeWEagpkAFnCB+c8Nu9H0RmTl3XrKYeHcjnH9gUmmR66r0Y0UBnrOeMwD\nfhiV96uWkHju5wJrmpwVQpstFT8x+iFKgwraUNZFT2RkE7wucAfYH7LgxkiU\nm6cOwWnI2533BgSQnBEyfh3Y4fs3qt8d7jTrNdT0uJfWF/jXNTGLiIGdPu3W\n+pTl\r\n=Y5cZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFq+6c8oR0CyDYYcVt5XOO5UtaYhQYIv7NbVN6We7nRPAiBIWh7hWFEldfIHgduvhnEY1eZNB32y67ugA+dKEXQ+FA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.5-next-1600972738-90373597.0_1600972856192_0.46361699630689346"},"_hasShrinkwrap":false},"2.13.5-next-1600973916-7e9ef394.0":{"name":"@xdn/core","version":"2.13.5-next-1600973916-7e9ef394.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.5-next-1600973916-7e9ef394.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bob9iCsfVWoVpe9kHsH8XW+bgL0/iy2wMvUmMmugiMP/IvhcyTLx3AibvPr3PFCO3qom3k+xddPtkFwPhTj4eA==","shasum":"71d475a8418f4b677858f70c907c4331a1982952","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.5-next-1600973916-7e9ef394.0.tgz","fileCount":149,"unpackedSize":719480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbOzPCRA9TVsSAnZWagAANVIP/3pk778FdanNUMGTSaDz\nbr3RmHWtajwpY6wazqxxiQ5deJRlgIXF4tYS4LCI0w+0+BoZhrRzgMN8nowr\nDb7JNWEKuPz/UXsKSTeffxxqNm0HHJkK4Cf4wSDerAzigir/SfxAkm0Uke8s\nC4DKZ5MvW1BZ/DAkQC1CMoHhwooqmRHdidximENRNwu62sCfpGwTUAMG4ZYT\njjuoLApHKFFsmQhCzXWYWk1gG0fXMK2Y4iJRnj/tNTXezzNdmmM7B1Y0mop2\nMAAZ+NIy2M1IYB5g9GmVZU/u9a7QC2e8rSE0utLuVQg80/sHcbbXRsA9domg\nsekc9DZzGEIunZp+TzpLLzRfwuPt9ArQ2b0Fc5DSsTpzXMQxW/OGaYJHlpng\nkCwzWV1OOS69EagKLUvsokZ73rjysH4L3d8dze9Upr/E+G/d8zC3NaRZmrai\nO5cBE1V6awYdHuIwbQhC8mo1O+FhZX3BExRkRYNtCNCOxWjhVgbSXIj9i66b\n4TsVHlhzQcZlvYJAGiyxsXKkdJfdvCvEIGULtTxpXtHEDcU7qS9SLsD+3zKl\nV2e4ApY3RaPwnc3iujQUa5vPALzHRwW7qg8S0ShX83JVEL83ykdwxDMmSvZp\nr0fjunNNn6e+yrhN8X9vFqSDlWVUn5iTFAP7vz0Si9QlLeZGq/10tqyGHGud\n8+WJ\r\n=grg3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDrk7Za2zmhA5kFgaD0NOHnsVakKp8ZdBy2r4QEi5ZH0AiAmXnDOMIPMhE87umBsMrjTmSntOAsQvx6v8RN8V2cdqQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.5-next-1600973916-7e9ef394.0_1600974030567_0.738190290256457"},"_hasShrinkwrap":false},"2.13.5-next-1600977565-3e3b3d8b.0":{"name":"@xdn/core","version":"2.13.5-next-1600977565-3e3b3d8b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.5-next-1600977565-3e3b3d8b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-k29wpbHZVmfcxZV7S0posg0HTVYrspHu0dCHc3XXHQJQH+7L/xlk9H92ONvjL/jZfwGFllBF0l6LVbLSbZ9xjg==","shasum":"1dd92b781f492cf3eb5b3ca14c2bdc5aa9cbf2d0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.5-next-1600977565-3e3b3d8b.0.tgz","fileCount":149,"unpackedSize":719480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbPr+CRA9TVsSAnZWagAAAqwP/RK1Xn13Ou8PjLoekDHi\n06i7Qzxecqrh1iu3ANCMMy4I+FzGQJntKyieOBzQHa8P8J/QlpPg73N2zNYp\nrBdUFqFizEEKaO+UyJt7z7QVuksJ7+9Yta46sSwv6k6XGXX/A9WMM1lJzqnL\n/P9Peh2F8dxT2KFmlOjU4LHSkjZaF9mOPSV5ERBBJxxNfI2f+YyJCp/NQnri\nz2CoZiF65t61eHYD9J89XoMaX7U1O3sX6VbEQPZkEX3lLs+hEOMsXSbuewhL\n52hc2y9vPeWH57H95+xCvPQh7PpSgqpVwMNXPLodKg9v0fFG0CppZka7JRJ0\niRb93/SJsBW+uGYUpnY+lD/TYmd7P4ydh3f2AOp4sUfheU52qfUgS8NL21s+\n6w/OWDOXx6p1Cn2fZtD4K+Bw2jru8s8ouh8WBMDV0UtetXC6Eq624nwaGxVD\n8yYzMadcyPwU54wwkWT2HvDp6nZ16jbahkVGTrQ7ngpfyZfigqOWhex+s1JV\nv86F+up8N4IoWlld5u+3/a5CFL/0PfppZ3ANrhn7Yyhv2GDHtJgc9Pm6kjbb\nrqNY+6194+Q0zs2HhnQQLJh8FD7J/rGOGqG5ZIctXmGL9dzO6tM+UCJqSMJU\nd7kXAR8pl/deaE1x5zxylnNVwjulWWbN3nmdrvOgon3kXHkAAy/idJqBSVQl\nQZ4y\r\n=ZccK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAH0LXxHi7XgkhlmG2dis9swJzrb1XajlzNSg6RtQJGgAiA6w5iFewp1GUpeoXFyKRpJ6axtLd0j51qRE8h8SUuWUw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.5-next-1600977565-3e3b3d8b.0_1600977661689_0.5774279533825772"},"_hasShrinkwrap":false},"2.13.5-next-1600978282-edbfdeb6.0":{"name":"@xdn/core","version":"2.13.5-next-1600978282-edbfdeb6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.13.5-next-1600978282-edbfdeb6.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-k5kSGFM0jpbuFbzpPfmxJwZEBunrKcboO7jXVVTxLuoqoooUYCHG1OX5vXFKXk9mPfLN3tmBWAVnyZaSQZUBcA==","shasum":"4bfb0f9d806bdc54a7216bf25bb1b88c56639842","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.13.5-next-1600978282-edbfdeb6.0.tgz","fileCount":149,"unpackedSize":719480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbP3cCRA9TVsSAnZWagAAAGAQAJjEWBfB5x6TLVJ5yy72\nJsU9JF8haSREFtUegBAwlxfvFTUJHBBZshcU+HuuzGC4uLd8a3HtbUBy+KoS\ndr/Z4al5b1rMcJh9coQvrzDemyFttxt62a2QsDGvQ9vBTFHxvx51FQeCoWL9\nPCLZe3IzWybW2TXGP29OpXnEL2EvwaVkkIlROg73tVbEbpvzuOEuHl5MVjeH\nvwc+2/EhQLbubUk/qFVpOhY6fCjRtERUPSQfebv+i61XRdzyi21mumyK2e9V\nxMMaAXsr2IKQEqd/iBkBfVkjqv5pNyD45hCC7/d3xjRe2H9/OG7TrknFHrGI\nBA9ORbrOHaa8Wf+yt4E1xpcyVoQaKLhdIpSyMwPEJlazktWNOpRpg+ztv3lo\ndocxcSo39dV97Q/l0F3nSbA5ZbwwXhpbYGd0RhFVoseEZgTpotgmCBm2rjpS\nm4d5+3t09bRIcT/dOx6udI1I1f1kMNhfLqwR1b85GcVAzot4p6C4JMsQKSAn\n2PV7u/+XLrFXU6JW7cxXUh72YRWn56nKUSg8HdsQZb51IRj3iMWeYVEaxhpz\nwRhPmjCOlBKllbEabkhW0MJyWjMG4qjGmOWY7DNL9pYCNE3hTJp51IeM5pco\nN8Mppnjj+kICuIGfEACRu9r7Qg7+KhAqR/TcuMdwmKmozkzunY/h2p1ZunVx\nWiKP\r\n=fJME\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICDGQUfxDEpa3ICHLuuQfZfpfr9xr8xOQmvU+2WL2YZFAiA1Hw/GSDnyVkI+AYRgXpmW6UTRYdH+YpKj0atP+VKQ6Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.13.5-next-1600978282-edbfdeb6.0_1600978395673_0.45668153870398664"},"_hasShrinkwrap":false},"2.14.1-next-1600978364-772c8621.0":{"name":"@xdn/core","version":"2.14.1-next-1600978364-772c8621.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1600978364-772c8621.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Dw7PKrj0ohSrxojyIO6rc6QFfNypNnGgZ/FkzKwE0jUVJqPkI5+X16AfLWysa4l831SEC2ue/1MT4F9bKa1ZkA==","shasum":"6f09c64102cbd7ae0bf9ad8d01b8f519f878604c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1600978364-772c8621.0.tgz","fileCount":149,"unpackedSize":719480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbP4yCRA9TVsSAnZWagAAdBEQAKCpbbgPrD7/JXcF2L+x\nZovYa3hYKUCCJuWXeQyli0tDvx77neVkTdSGJb8VAAv8rsYAGwexHDJV3PY5\nOs7hH9sDRB3ZWIEK3a0A0S81RsnBNTZhmRoE00kmCnaibpnuIzSWQkQsmLuy\nOa8PVejrSBB9Q7q/cqMizcMM4/4EfUr+KzdpTZNEUJWxrZQix12ZHLM8jvbV\nn6AGrLkh8WbPqkFdFxW+Pzp7qx19BsjIkfxExMwtFuiI+bnC+9jzNPzsu+cV\nKjKaakLevJDyhY5hUcfJ4R9nLYH7E9Ljstfh8vkZP8zsRtMOU8kYixyVVT6p\nBJAACRnUOSvd5fYv7E05Afj//EqKryqGHaNZjrs+UhZO8coU4cV546vwg0Hr\nSyQaG+/oeFH6WCZ5obItySmoGj9ye8g9LZ1r0hGahp+hpFxbaScPbLebeBIA\noIl3VrjwbB7uWwPG2f3SumRC0haZ6stjQf8bryySqOvKC7vBCf/xzf6ItMtM\nArAbnAozcu6rpF4roCBFv83hMSjz40DG1A3NvZqnDo2kIx4phk3CIkFtEL8C\nDKjmyLzqTnjQrI+dmJfydcxsEcrQbe7MwH0OkNvrwbNT3k1ePwqUbJVN5eNc\ngapP/7m1XCTWPn9zOjphw6chJYsAN8nAPIE3LloNV0vdJBx14/SzdGUmLtSH\nIEQg\r\n=e120\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFjLqQliQ5gGT58aRRTiJftfc/OWr0/bFMaO6iSnOwLTAiEA7zJZAljrS7uQoZSG2KdZq2r9xmhW+mnTvHQpzrqU7E8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1600978364-772c8621.0_1600978481786_0.41672951811522396"},"_hasShrinkwrap":false},"2.14.1-next-1600978429-13563b3d.0":{"name":"@xdn/core","version":"2.14.1-next-1600978429-13563b3d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1600978429-13563b3d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FiG+wFcN5TJD9BvdT/3CcsObStRN/u55rOS8R+VER9hj1nvybSM2YK9ozjdmKsYyc6lY0dwQ7+Cqr8hDRSTmKg==","shasum":"d25c41ce87618193dc944b3fec4bb6df7db40d81","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1600978429-13563b3d.0.tgz","fileCount":149,"unpackedSize":719644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbP5sCRA9TVsSAnZWagAAU2cP/1E9GmCqLpOG6mdGFgeX\nnMD8toBHA2SdJz2qUOzIIquCBuhsylIFUPUVA1rb8GXZolQNfA1x5VlH9u15\nthl+tf80B+gYraka9KmfFksSNg66f+2sw6meD6Gil+r10Gqhmym9yRNYy9uk\nDfkZIMmxwy1AkKuPP9w250kn0dCr/tkj+xoi4FN5PkSPoudqhnFNw20n2RCz\n6QKwZGCyWZkip7jhoP+vHqSctooN5YBM+et+P/V302SY9iE8n2rSpYbZ8sQ3\nqY5MvqYt4BhuUqe8plddXw2N6WXXXGjTvxqpTmBvjFYoEGDngsMkbC9wHVMu\nZnXhNHfPjq8t5EN8GBoWTLOm8AUjkS4xojaa/n2zNG4sa/Me503X0xAAxNWl\nQI2xI/b9sqZdpnNEpqUYh81MfRp02tNBNWR0bSPu03gzUXX3zON1wV8LTDH/\nsGObYAW5gbohPjSK0Xw8xSN8fSo7jCk/eU9Ab4E+mUkmAz7E4+r8W0+jKRWP\n4YR/0NzXhFi68vjrFqRX2RYqEnrB79WjV7EKZJVu2KWduky8iQNr6erZ4cNH\nNNWBDSzp1DyX0OpP7DsfcY8+Fon1gcnvGoIkXkDACQObJvq7NM9wWKX7IjXV\n0LjQBvcicREJSseMqmstf7Y+gAw7b0whcYrn1d3CBY7HJO9Aw5xnpHpVV+4z\nlYKO\r\n=+umA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFPjliThseQVZ9WyV8NTNg2JLQRpeCsFWQVwEP/AaGrXAiBLYjSiK+um7sbw3CSXsOhryfp6BOrGGB/I/95nwADgsg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1600978429-13563b3d.0_1600978539444_0.3114368389024651"},"_hasShrinkwrap":false},"2.14.1-next-1600979121-49210b98.0":{"name":"@xdn/core","version":"2.14.1-next-1600979121-49210b98.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1600979121-49210b98.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tYW8jDBDrwqH1fMOEiv7qUChBomxYx5eWa4bkgRYoxgHKzX0HpJXrUOdHnDD2n08RallcNK2CvPVw9V8UxLWQg==","shasum":"6e631fd0a5c4a1cebdd346349bd1a1bf2bd4c930","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1600979121-49210b98.0.tgz","fileCount":149,"unpackedSize":719761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbQEWCRA9TVsSAnZWagAAcSQP/16hH+ajMOJZ3JtEILRq\nT0FPliRicIOKQW6KQj0k+BQtonO8KrteyAIrufsjIBaZAbNwu7dkXXo8Q8bl\nmli5fFh8Wc1xzy4F99gHDL0os0HmIUAOsYg1/g383xUWLHR61YEIRJmncPsq\nAPCPAWmbzWRiXEBPF6YVSXYF5lB/MQwwfDzPJ3ncYur7gpIWUETVGHQPLPLb\ngiwE38lgM9i4Sbcbo3gCSf7mxv7sG3LiPCTBunPOhkNAkdqkfkjmD9C4zVrZ\nAh+6BagQNBoy0TvtvAukPvLyqrVnOkxVgfaZmdSKlnfySsvf7mBY0pNE8MAu\nQzD3AL7gh7DaZ/hsyMIi13CGJ+uDmoDYcovBFYOhz3O47CEbIWvMBD8bISev\np0S/zzb+HWP4nuNCxBOCQhd8MFafA/PypjPrPhFLxomtuLiBtAUlLc1wogR3\nAqC94PaqPktyAl3bJuqkq9yL1Svtq2WhMe5FEr44OlHgGyHhCi8TzFBFeKld\n0N5DU4o+cf4O/5WerPcsOw1e9FL7Y03Wn5gu7/PGncj9CsbWv3ECNR/TY5W2\n7Ela+lG5O386lxrEr4vl1+v/dJluTkBoASwVkGxhZvFh2qBlkDyY26LzHf/Z\nKs9cszH4pQqeFH+BKhG7pV8yKyxGzPUbvAeZGwwvPLlqWRSriEQwwvwcNiQV\nUXp5\r\n=7wOO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDy1dn3hkJrYV3+XKQwRSwklvf+E0/0HB7TMdXnHYcLrwIhAL6yb1Cm6t8q3KwmT1sVCu55iNcbU9eMaenNM5A3ZAji"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1600979121-49210b98.0_1600979221918_0.9227338449318103"},"_hasShrinkwrap":false},"2.14.0":{"name":"@xdn/core","version":"2.14.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Glg4YoxKKttpl1FRDUMrnESngwgTQnIUdmU1qYbPghQpsu4oA4ScK+zGRBHpEOR8/2g0Mm6VCCJKz0+tMmL8OQ==","shasum":"6e7ddf903b3b1b13c1e35391b4e700babc0ae8bd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.0.tgz","fileCount":149,"unpackedSize":719426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbQHqCRA9TVsSAnZWagAA23AP/2V+4Qn7oJvm+lwl1Yyy\nArm2UohZXvQM+1a8metvmaD2tGs1eAAm3W8u4L5ShYVa7dFIGJ4DqdpA82u9\nEoxnCJqAZWdgepqIFrmzLzAL7qUtaBlFthppx60QEOoVaBIH5rggyWpsOOQy\ngszD2FLsKVpFF5KvQgBRFK+vIkl46mKaMV8ZZYvGQcKOT0YXRB2nSugGsUSk\nkH75mGo954jYbvywN0825ICB2fbPfWJ4pPX1k8wZp51y4A2vn005i6RnnJ3U\nPB8lNHaXus91Zge9bgGlrtYh7jhLXAGRBslz2FtuKfepQ9+7WVxLJDrdFyr/\nBGCSe4cUuwDCRItTPgX52CB89beij7I3Q9SX6x2lLohoohQ2zDdnGe75p2qe\n8X4x83IeAAu+wo8wBtOCHFq1d3KfXWnkztksq1A7OnXTti2ilMcHCX1NcUGQ\n6Sxp5xblmqjgtfT/qgK1MYNCaFqwu7SjGcDZtioQ4g6tJp6W6xXi2K93VHNK\nWIoEo1uUZqDT7t2Fkfod8GmADdhkovrgNWJ4ylpmR5SuNdaev32RunTTZPtU\n/ip51L0H0c0yIyYPrshMIG/xG2t/mLVBDcomaB9rpvnsvgMjgZNEQV600+74\n7jLwPmLlBZJfMW9HZVKdM17/8RRzs9jTSS1qlfUoR9/qOmhl0tHsD/7aL4RY\nE9ZR\r\n=nrTI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEa7SpBlb48Q6+g/Ew9E/Yh+44CHvPzZ9iyk0G818pvjAiEAlnCBJ8KZPgQxzmoIbiLxCj2wg20SX3eeXy2g51xHI1I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.0_1600979434050_0.8827647605718756"},"_hasShrinkwrap":false},"2.14.1-next-1600980161-043ee498.0":{"name":"@xdn/core","version":"2.14.1-next-1600980161-043ee498.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1600980161-043ee498.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FP9AgE27BwCkiQaJu21sHnPNbemvOt9Z19SW2fAHxub7qYrE54KRLnsgwfD1JtXzGmABdosjS9wEo2kyoN0YFg==","shasum":"305b7624d90b85eed581330b109334142091f2f6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1600980161-043ee498.0.tgz","fileCount":149,"unpackedSize":719761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbQU4CRA9TVsSAnZWagAAvNoQAJed0gUkihm6iwRdVflI\nnDkFg8OhCkNpdKdlz1bptObuM3oadYul4L0PDG/RpCwBZP5nWe3Cm/gVUt0M\nABGcThb5k5jyyO7JDqmyG/pmHGXNktz5gr7PRifg4fTd2G3CZjFHJwoLYK8a\n8RHY/5YEUzig6U1815YGPW4yhFNC80RE0w3gkIDuGQGZFJb8BHKh51tZ9Fgj\nuvfcUAJwABsgikkJYBwsIe3Kh6yUW6loKvlbMeGM7aR/8nyOuZ0jSj00qf8/\nzsgtmE2M9qrjm1gQmWU0+CVFCUBgPrsb3JYgn0pqqXNPNy+KB9eAox54vL5/\nwunr8Y5jd3v71MMCIue29rHvoRES1ormHj2dmlA+4BKVsYu7gI1yRM6QKxme\nnkIWLjCwVEPh5M0vVqGLC0LMrAydneSSBiP2etZ7JQLPDKqzbKXZILMZwT62\ndNmlfPzbOkLKV8709x13TzvPDPmAB4JjkFZZhv1rWujmKToP6dSs4ZkreQMs\nMZjZyacAoVlUErBp8aaYGz2vkqFxtnAn009BTkdSvlA3BHsEonE8ChwHj9sm\n+GX3EW6XS4xtH55YdG9oMzcR4VX2Z/wwj+bSCfNBcVnODqmTcCxWS9/mNP5P\nDE3CJMDR13FlcdZcmk6uB4H921C472Vu0sNSYuuvAAyVGILpV1MCKsV5lAHV\nC2CT\r\n=JZJq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAGk7yP/U8aNzXiZjt0UU4RxE2hC3+t4muVxBsyn7AYnAiEAj9TVGQ2Ruqv1OS3wQ3byI9EkrAHk58KXxDWo6CBDAPU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1600980161-043ee498.0_1600980280096_0.48357164828453736"},"_hasShrinkwrap":false},"2.14.1-next-1600981401-bbefde40.0":{"name":"@xdn/core","version":"2.14.1-next-1600981401-bbefde40.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1600981401-bbefde40.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-BbMySp1qjTZLoGSF4B/QmpeR1HJ+DoA6GerE3H+NPqPHzCZlcUFxa9Q2X8dkr7VZOcxlokYOgAuWhr5Nw5GpvA==","shasum":"ac58a1ca4163cfa39c92573423c7c55619a47857","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1600981401-bbefde40.0.tgz","fileCount":149,"unpackedSize":719724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbQnxCRA9TVsSAnZWagAA+sUQAJjdChEZ1PlMp53RI3dQ\nbeI7lcdFIarXzHAlJKc/MfZhbEmDY4dHeKFs4OyRrKT5y/M2Y1Xhi9eIIWqB\n+pnjwreaZ204DVwJw376mvWXCtSDEO+yTRdjf4K6EBRSBV4RcKyQK3T4Cvyf\nfC0a0pEfQamwIaRN+ByOwdQatwRr2AV4SB6SGYVxWS7wvNAjjvWtEdNLxIQK\nPQ8WGms8VAL0cs0nbxH1yicVOLNUW+Z/FZY6lYUyVHm09rrxlVcNsQ/qJ8d8\naNUzLh2WSwNCUc1FX0aHf6fdg2QsyUwmxpD3cEjw1PpArYf/rqc6tXO1hWxp\nmVbbTwYq4UcUPZii9wOWjus5cHGPJuNoMidv/gcC62++QATKghzRd/tGDnMC\ngl8af5F5M14N9tnAfUXW4MrBTUhMkNgx68ffy1mGGgYhyC4dNxAGe2BQgnWJ\ny5BMF2mFL/B/pDk16Xr5Wyiezd/goQW5UqMDtcvqZDVFFdI+mOCGVEYVkEjQ\n8JLhH0XZAM9jSGiqoesHFYJ68UpmSBz7tCm5XicI7TTCLa9P+sHtTq9T04q4\nfQgGSG3EWH6YxOj6yaz8vEzx8YGQ0XGG/KMQJi3rWHzmrUI6jqfVx8Y6Jxm5\nq0DgOtfJUxSPg1/rEGN3OUxlliKONy3Hd+sqeQGxSIRVA/Knu+t4+XzKaC7o\nTRj1\r\n=mkeO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCO1XNNcq+fJDinbOvKbiKqCj7JKp9NHvwoNnM71ZZCyAIgDN6+f9pjxdBfiLdlYv5tx9BQ1VheWiFKcLXtLrPBCJ4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1600981401-bbefde40.0_1600981489190_0.5047365057788695"},"_hasShrinkwrap":false},"2.14.1-next-1601022982-3ceeea47.0":{"name":"@xdn/core","version":"2.14.1-next-1601022982-3ceeea47.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1601022982-3ceeea47.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ytFIg6McCVBmFrN/xfqsRCY6DhIjV7HB6FIeh8mPeumhJADqZ2p4BRPTM7NqQrh+M+PtZBqeUM8KH7a/GoDpyQ==","shasum":"c43a11b8a99d32151cf8293928abc897b69f7898","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1601022982-3ceeea47.0.tgz","fileCount":151,"unpackedSize":720870,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbax3CRA9TVsSAnZWagAAxWsP/2Knm6GAetQlmeIAMJxI\nluCYzauLIiG7PikcSZOOZYhOTR3/sjZJ3l/aB2q54oPK4bIFYEnMDh49ubnS\nrjS1M1Mskk/AgNqb2GKqfyACsu3B52ZFiLaNCN2VkxARuOwPn+u/h30GIws2\ndBAhMvAjtCPAw6cYUF/ikhNxJiznb1X91KfPjiVgOIvaosy7IWDcYVFgoaIF\npl21MDH8mBHmkyAbEe398FsG8s8WQTc2RAsQRHQROpkPDpnY/8/11GApanjT\nylJ12Otx/nJ7LPAAFfZkfqryF7abradGdKPgLfVimlXXur7w84MuyPFqhSlP\nxfjLnb05B61k3aD3KCwotYtaoRx9t2lc93z6IbNSAtnHo5JaCmgqxqIRY3Tx\nmbERqGZS9G6gA1UTnpZFLKtaNkvBy1B7ohO1krkgrXDSqQ1Udr25QzJVLkrq\nWkB7skcygUe+l9h636Tlr0CJTcf9EB7s4fVXFYbKdyw7aGhuhLzrCRn0+FOi\n3n7fzkL4oL/YwiLs745N+TobAU2j692g0DJ6WH3Gkgy2V3CtvEuyogiU/4M1\nsE61ZzLcvYwpW1s4f9jLW1dgneeMaK0EfbSrXdUeqRPYHGIMPQQQEb3jidJs\nSBlWJz4d+SljS/bBF0TltuJpVlXAT8Ldx/tiHPORrMy1xD3OXJzTryWJ4rx4\nUl84\r\n=oJFA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjOK4lxRuLVizNnHQtZN5PrfLBbg7zTTfonkB429Nb3QIga6lbnQ02K5H5+HGRIMIUXzpC4Hkxd+RbKHWm/KpBVaI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1601022982-3ceeea47.0_1601023094818_0.14206093243587925"},"_hasShrinkwrap":false},"2.14.1-next-1601028264-4dbe3bed.0":{"name":"@xdn/core","version":"2.14.1-next-1601028264-4dbe3bed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1601028264-4dbe3bed.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ley1s7B62PLIhg/wAyFkuA3OOhxYJcM8k8u08dWSbI6KFoC9jV14CknQzgVvg2fgoXQ+MuyrhGJhhPIrx5EIDg==","shasum":"ea6e38ad09f552f42a1029f60c709835ebaaf8e3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1601028264-4dbe3bed.0.tgz","fileCount":149,"unpackedSize":722329,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbcEcCRA9TVsSAnZWagAACdQP/j7djx7sHCJIASnWiT09\njIaxP5dpOttdb2vPuQ+6zOkdUuKYaCH2eBmu+KoeNd8LQajVX68EGPxSamb6\n1yK9fdRHSMRGmRzmnuR56gqH2ehW+LsJiZxOJsNs3x3yGXSNuFw8DHF3XEat\n1ugA94PEI5NdeTo94YOhjVbfF3GD4sziYvmr07n2tFJnuONEf9ms979ys2Y7\ncy2IWADoLJTIr1t1jLfPDSVWEQvu6rvMHx1UILD3GrVIl8KrvzPJCnf+uoz/\nyCvWvdTpycsz84Zlnx1CwhX2wP0BNt7NMXndUFyUvMwAgXTwVm3fxw2X3QIc\nakz/nW1X+KJPyM9c5L3Vt9jczATglEUCyFfuy7IxZwe8uuvWXWJHY4asgqXg\nCT9UoDLHrkaEsWL+IWoStMxurmktGrufbDG4sK8rP05UlNLKthOru7l7zVet\nxUf/o1vin6TUI9VW89SD59j0PRCOQAUoomt9FLIEsRDIjrs4NkxdcVrCcgYR\nwaCrZonOqGDCKUukhIr0ooB24aMIcOdpU8gkLkfZkTXY3AdS52fAyrUHz6up\nizgi8PxQ90n7v2Rpw7FvtkEDgxSJ7gPdiNYzSU1H/W/2gg42JZJUjEolBvIa\nufShLQ+HNf8McXti7RMGlwopfgXBi4xoWdQJhEie+JVoSttgDF1sEmttN4KK\nnyPi\r\n=FSoA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBBXRgUPlb2gtHMSOYXpZefjeAmKi2opoUPwRdH3H4pQIgTxqJ2HocrJqM4lyq7MESPcB7ofn/GWw7Ey+IIxXrvLw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1601028264-4dbe3bed.0_1601028379632_0.24163117986458982"},"_hasShrinkwrap":false},"2.14.1-next-1601028494-24fc3cd0.0":{"name":"@xdn/core","version":"2.14.1-next-1601028494-24fc3cd0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1601028494-24fc3cd0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1eueq9KIvlN8h6mV21ynND43Wcnpd8tg5EW9U5Zodws2EO7UkziwvsLaCppDqIBK7UbutZBpywi+VW03zzZZwQ==","shasum":"5130c387bfbe974bc70c8acabf10e568f8f2b9ea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1601028494-24fc3cd0.0.tgz","fileCount":149,"unpackedSize":721275,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbcILCRA9TVsSAnZWagAAwAMP/R+9mdO6jCejZJAmGxzQ\n4i5m35XSMyK43mFhCi6116+eu87p9PL91VzKD4gmEc4BcnOT0S3+CixQW/dA\nvR0ZF1QWw/NOcGymRulGBIFwBaU0QI1B2o3i151/tWv/RgUeqpvA60t144m0\n3XGwxAFXqTmnIYQC3dKPMtkCw/Eu2gq2fobKdi6f+D62G15VCw+0HBoP5LGb\nZf4EPmwUSM635IviiBwl9F4hCqIU/CXihCpeGq9fbrM5I9oCYEKJRUcKWNcR\n3qreXiP2qC/ehOrqBQ+rz96wjxyZbCpPT1CVnZgmuLLNHq0p0gUcY4Jshdiz\naNN7/wPDjbeGEaPFJ3BQKjEb6q1QHct4LHbpG+5A0eHaeamlXNNu0cXjgBsr\ns2ZNggRuW+uEauSNONs6m3IPfA4f/62ZAIJufg97yKyMkIeZE6qx14DXqUq7\nYKCDhJFke5jkCuODvq8zPEBNHwHAsdM6jNZSbySN/O1Jvbst9yoqPKz5qTXd\ngmzQQDVUtQNILqbs8REAl3SXbXUwujW5EHEhwy5hEts8YtPkihGDew3y5xD+\n1AIq3bn8OiC5XiZvp0tqWmp4NSd2hFU+Nv2CrZiQq2nOLUS1GYQpag5Ly5hT\ni1Te1pHPwM0s4h3E1CtMAhWHYy/fQo6GF/NfvDx1O6Kh20RFZlmot1OlwHo1\nE+U/\r\n=AwM0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ4XHhUmx3p0u5M39Tg/Pua0WTMDeIobCf07kB3xsu7gIgZfFRmitdNRXyvSEmgi1MrimQg3dIttOImo9LRxRlwL0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1601028494-24fc3cd0.0_1601028619188_0.9706534805377844"},"_hasShrinkwrap":false},"2.14.1-next-1601029015-13563b3d.0":{"name":"@xdn/core","version":"2.14.1-next-1601029015-13563b3d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1601029015-13563b3d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-BhkvWiR3jhOC9nSD/4ffhJQtAEVXB7Ddy2SpN2h+0sGRHDBrNQCbSJ4d2kOaPK29JpfOfL9Xdug062Z7/7HIJQ==","shasum":"e36e6deb128a6fe0daaffcc8e6c6160a1e23403f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1601029015-13563b3d.0.tgz","fileCount":149,"unpackedSize":719644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbcQDCRA9TVsSAnZWagAAq6gP/2vUdSoIDopMzDYaCTY7\n4H+chvDtt0IZEDZ74i/0jv8zx1OaaOVxv0jI4AUtcLd7EwlF+fi/boXiwj/p\n1VF8ext3AeGFSKT5mnqMlAFYb2KyQ+e9M62PA3Yt//EWOVOm2lhiEAjM9vdf\ncDdSNi4F3FZpX8gCcx0wQGsCX54AEkFOIeQcbpAYNnLhzHjTNbnQJJOsaxlc\nHlTrC0C1XsS5PWy+EXxfwW65shCBtm0k5J0Jc6Unk1zqolS7ty32/NxX3Ndi\naB6DGnbZxvFJdBt11NsBebhGckUYdNUDO86GKn0my0IcUTGYOnf8thECPJaf\n09HSAyOz8IcqPxoY/WMUhJyieTYYexk9Dfsv+913EX8Q9BFLMkFFz/p6B+gd\nn4Bvcz1hGPmIXlpzzRiD/4rNZQ7yOe45evDfguWDJ3f60rxsYxCVc9xqXoWi\nwwTtDv3MZKefTvy1qLt0QOJd2B7Hlo6cCLON0N23/czWuSfFB2YHqNVfJg/v\nBBolzIjk62avuoXxVE8OP/KHSoE5dsbivP9CM0RPbG1OUK4VNoleo5QnFBn+\n1Zx5XquLOfKH0eFiHl/t2npJSxPS4F5FzxNPkxEdLEGm3Rd9L/gjBX4Y9IEe\njRD/2HOHLbEUoQDiK3HPSs9glN9UvsIJePqfRGSwhqNcfTa8V4pEhNX8N+vt\n0wGX\r\n=VRXE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbKvyoP78cRaJ2iJfQPER9MKXBei52nhs2mRiybEE3xAiEAwjUPB0q/N7gAYWY07sbzAvEAvyH2DC2Y7pai8kdQS5o="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1601029015-13563b3d.0_1601029123141_0.6478713722940057"},"_hasShrinkwrap":false},"2.14.1-next-1601034400-769533c8.0":{"name":"@xdn/core","version":"2.14.1-next-1601034400-769533c8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1601034400-769533c8.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tIzZcndQ3agCjeTGbWJ8Ea17vT4TRKkAp4gEh6i0zQVo2AlIl7NsrbYicnGmB17bz5n8DCeQ6d52+P8q2RhN8w==","shasum":"4298807a3aae1cc2fa628488f910c966b2253af8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1601034400-769533c8.0.tgz","fileCount":149,"unpackedSize":722460,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbdkMCRA9TVsSAnZWagAAUjkQAIzA0BNqK9WrIYEw90Ol\nyLAGEvonFriWEwQfbb1yc2cO6e0E+G8aiqsIyUy1PB47XmGbHMlBXgR8Wbor\n6dZGXh1F688+UOnvJXzSYUYeSViSofN/+Id0bQss31Z5dJ5IX9F02PkCueSe\nrUpwxFt/GhpKZZRNhHKDB7pDpdRkdtZfU8gc55REKvTJKq/McqCJI+0jxONk\nON3ZnBAhKJtByTM/TlqvXAsZp3+VS9gLggRC18QojWQPfUM8MuMBoSxWJuTP\nO6hEAROzO3WVhin86QN3ud4ENy5/uHiZ8PdLdFb1Djq5Wc1bvlgvU6FMMO4q\nULtHfI8C0N88+0Ek8ALBxmN6xxQ5Q6BZsQ8Eh9/f7meO4HntGYzBEHQMhYx4\nktfqxrpHV0GCfC8RbgtURcxrb1HKIxWwkBkBq4IyDQ1dCXsdPBpyEc3KmX7n\nCTCPl4SZuoG/hA4IFuWl/2Drn/4o+on7/ClEsSCo/nuNts2Z1iY058En2+dA\npwT8S0ldx8z1I6PqYCiFJfBnfzWoxg17XA2aeyWUqwqJnGqdG12uSbEMwWpm\nSxNdKF5YuBDMiByT82w+aX5jLOVlmHRaMkyoTvGjw0dPgKCcw6/pTu6p44A1\nbrfcq28TexEuun0h5rm6D7u4zQzwlRRWUqXrhX9qgDolif51Ex3nnXcVU7xd\nsH0x\r\n=YfjJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGAk2O+qnGXedb70XZh9UL0CCtMuiyQrAsn3u3FdZvoCAiEA2i3C0huGFmtC4gLlUJNFm43vsALm/3LA6N9sEkG/EcE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1601034400-769533c8.0_1601034507778_0.5829630204397405"},"_hasShrinkwrap":false},"2.14.1-next-1601034822-f746dfa2.0":{"name":"@xdn/core","version":"2.14.1-next-1601034822-f746dfa2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1601034822-f746dfa2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-23zBGCBfM1336QmUSlPONLZI5JM9OHjtidKPdEep1pC3/7Ug0gqV3Hmh5TpnvERr5t3zn1SYjXPMElgHmc2imA==","shasum":"526c47be71c67f6b0e2f5bac4a1388c8abf4806c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1601034822-f746dfa2.0.tgz","fileCount":149,"unpackedSize":722460,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbdq6CRA9TVsSAnZWagAAEEwP/jG7M2yRf9CK45VIrxuh\ngi6tfqJxxeq/24bZUW/qMqm7wfK98/H5d2REaYG3b7ppODSFHGXt9TYk7UkY\n8uGJjsbOBab59OIAcp+9Db23yBMqG9xofdxeCOmDS7uQvDxs9K3uSseo7K3p\nUGfJEyGksBXT0BmLSnwxYDCLtDqJZKsIa6zVMzk3krcthRK7TMRHBH7BDE3R\noR6E/6CADbqOC4jTFeUfF9Y8uIiOUshghOiLbbU5bA4ckRqjUy31bgy4neKT\nZ2EtXnKNcwI2f7ZnkgFPKO0yHs0I72ctFCgPCgy6oPFPGYtc2bX0UZbRZB2t\n634bX3BJV+xXOXRhqnPn7/vFBD2o+yVgllCw0NBStxNV/A+Zjtzbj3E+Pp+W\nJ2+UtFZ9brXjIT6ooF4xe3XTIPu+PWKGpN+zLBOb0vf9qXTq3BISxMTop8td\nbTqGO1Zf3k2OrwGooBfij7gs3UTGxoahXjyz4oOs8YQUJImnTPpMEtNOTk/Z\nVUgGqSZ3XBMbjjpqvcD1/b9twZ71iy1xR+3acBQmHIEhGRdG5yHBj9EGw4HB\nWfibfHlw/ZN9H/UOPg0uagJYmyVTKQxjzO9N9x5PYrb3MB0yLB1f9egmFk0Q\nnH7G3LbRr0fNIyGq8ZHfZk47PNFWtvkdiL+TMiEpjrXWxJwmDGBsUNDkgL8X\nZJli\r\n=lPoR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDf/ZOYnDWWmwjsdy3PltO1di2aYZkdnEbuxnlMyZpvxgIgDkoKrznKWwDI8jDTzo6jSm3iQlREuG5tkoKjh5ZjFIo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1601034822-f746dfa2.0_1601034938109_0.030810975203656943"},"_hasShrinkwrap":false},"2.14.1-next-1601035001-08226901.0":{"name":"@xdn/core","version":"2.14.1-next-1601035001-08226901.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1601035001-08226901.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-T1IC/7X21HCQNl9/IAJg3F1eNAXikIghR2xi9n0ImTpexdf8Y8wblV0/O990+YQmR34Y2LlfmpGn5RryiRxH1Q==","shasum":"d81623cfc32532c1d072911b49b9aa38ab89c05f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1601035001-08226901.0.tgz","fileCount":149,"unpackedSize":722496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbdtiCRA9TVsSAnZWagAAa5sP/RTShnQoiMAi63qVEF7u\ndR85FRUxjKF2OcH8jUprgWY4tFLrlNCFvB6kB+RjXibn4OUcZ4Jj33XzHkYx\nGVTUvz8vveh85BILtwsw7duydrsrxJq61aWp+J4TmZHq72ZGyFuGyUwMFj5E\nsk99x6y2B/SusY0vCHohH2rwyq4RjzUzKO2eC+cMpvZMa6R89Z+v1Gj2zL7p\nGlJOuo7V3iJZHA0wrc1iPUtXRV+L/bLvpNSQsISoVWIEHtz6t1m8RDQ66BCd\nUoLrE8ZybbxAEvoaEHjikZrviGTnTZvjRq0Q8TbINq9XsYEWPURMG81y/FTc\n6VimHkeReIYdG26VjPy6xT4mMAdQjtmKcVvLCND6yYnaLul1bxODxOa5PPbD\n07qqjCusMXOiw6Qqbv/fEjPbwi2DXw8+0XPNp1sJu9XUFXeEn3UQPHfEAVYO\n6IPeh6RQqRx8XkTKlVqEmcBrTAcvzJAqaNziJXVTsryjaejZEshRW1QoAlDD\nnzPKYe8PLStHpCc0K6grxtGR0uptu+9zB/vKHsFmYiw0KXOW3a0jmM9LDkPD\nXB4jqIezob1I8Yqk0qoqVLd615guLp7SsG9FibHpsEdNUN2A6LQXrNw1c4L7\ngmXeov0Mcdm7T+bdw+kCCzNnszJEDQLDmIgwWk8f3LijJBEzv5OG7wroQ+pc\nLNdw\r\n=QE5q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDJPRcweo2+wgOVoNg8iN4idW1peJ1Iu4qRhcNPB3wzDAiBYNLUlnBWO6BMA4JSZ1z66Mp3AMnJGrb598HVls9JfDA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1601035001-08226901.0_1601035105890_0.9781901994908306"},"_hasShrinkwrap":false},"2.14.1-next-1601036211-2319aaaf.0":{"name":"@xdn/core","version":"2.14.1-next-1601036211-2319aaaf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1601036211-2319aaaf.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tvJNsdHoaDQR6W785kphSXlV+VUQ9IntUniI9D3lFa3xZ4yaKQInxrYdzfNXnxeZ21RqzDo3DICflUDPHmNQrQ==","shasum":"5a98358190bfc2b81edd894c1ccc0a058f1fec5d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1601036211-2319aaaf.0.tgz","fileCount":149,"unpackedSize":719724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbeAPCRA9TVsSAnZWagAA2PQP+wfirdbFhpVzpRcRa9k1\nIg3ni9wYIIOgwHTAZe2ZDXE2gAeoVMX8ZYJUrc9T0AY80GSuEzfAVwwE4hCv\nYWC/zSfvVZ7w2bUL1Adyu+CTUT9DVCQILMgCBolvOI+WjFNIASC6DQmU7f69\n7davpzSTgoBKItp+bO5TlyY05liPrpIZupwYSyW2/Gr70JuJPCZ1NOUO34JJ\nXFhLNsw/XbGmixx205Sl6ZUfthIp+0pnk4yC6G5XrmhVWqNGPXQPhdfHgNPC\n6U9YO9Sorcez00/pxvkvAtLI4n5oJjwqLPXvM+efG6pslvWlEAeV/bWaX+AA\nMvKchcZ+yRqMwVabC4nKxTA/VVfTThyTVgtc3ODA5erTBqNw4hTZt+dh48XT\nEqG1nLXmkF6WYDw50mBX8DhJmDAONt4rFNA7ikLgr9B1HEYEzSJmLp+tuJmt\ncWaf8u69KblD9Bz1A36yWaM3UuECGPEUTHgYDM8jW5bAFG6O/CK25ym1nlOo\n/BnHu4hUXZaHc8/0M4pY5MZNRcnIR8rN8iePHsXTmQYP2KpN1QIR7vgzQYf7\nV3klVBtvcy4QFSIGms8t7tvoSyODgrwglDOmyYuEPqohbCaHobSp4IMIg5ME\n1XrJwW2d7sp6n7tygsCbbxzQRF2cxkAPDCD2G/AuXajFy5mpaWQfm2mHu9fy\nGqae\r\n=jGIr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHPHJ6ZRKlMEYbT3r4LNEncxNJbawvTBi+nhxTk2Oe84AiEAriVrrCkKT9KXqryy/I5jlINE+DNLEdx5Iux9hmVIse8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1601036211-2319aaaf.0_1601036303003_0.27697801622122853"},"_hasShrinkwrap":false},"2.14.1-next-1601036247-35a4899e.0":{"name":"@xdn/core","version":"2.14.1-next-1601036247-35a4899e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1601036247-35a4899e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bV2j7iAFZCSWhqjAgWpMP6t5p3MucHkvMDkJQSRtZOWNyzKy93jwowsaGcISVXwvcT1bNbO7Q5yQwUY3ZURS8A==","shasum":"1a101fcbb657082b880235984d6d19ad334e209e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1601036247-35a4899e.0.tgz","fileCount":149,"unpackedSize":722740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbeBJCRA9TVsSAnZWagAAtqgQAKM92uVk2/1/OXxg9CBT\nQysfh9kKZtiY35C0hzWCdfKLJchtTkGtcTysNvbMLTCSCCB7YmMF37yCEpaM\nO0z2U7RxyAEeQgN//5onj+1thBPviuQ81/NRF4ytELu5mZi1Xz4T+hQpMXEt\nfoivZpXdN/CIJpJ+TtLmfggilZ4JIQ95Ny6+MlS00SS0xb0eRQ1+ZF6qDgNw\nAp1VCNhmjyR+uyFXOEHlB7Rh+LSWlfgTIYW7GHKXF1tVBX9JYr6opObbUDJ4\nZyg5xK/I3UZxOII3HcOP/dP87z9s6kHePqZVr6T/jSLYsg0SMxik7sfyF8kT\nATfhmVZnhWTWEiIN8h22Cdw2uevfyeoMdPwDQIqvabfW2md3CeKwMcCztSQg\nFOBRsSAKA5X6p5M+xiYtnmzi6Sbxc4MknnA/LN+5FSAyUYR8fIyOyWPXdwSX\n6cnriYwpeVOEGLOCQ8WFBY71aesPioIVXjitz8H1Bi18Kf2G0Se5rHXb+rVS\nSHqkK7NuyNau9IBbhpxx3m12ZZoEr7iDjt9vDdKa7BfwcfD1wlTTrlbDUvKH\nxTGeFh74YYUHaZGEwEA/5TQnPq8XvxC32pr2E3IAHCKSMjbTg/fxCjIZRfP3\nSckLNcVQBB1V8w8y0EL7ocNEEoLn/VrIgUSuOUSZ2D/uiMlXCG5qieaHIaqZ\nFyx/\r\n=mxmg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAk5zM96vsg6jsFApRGulCwwmWShCt5Log3ZrR/AvcNCAiEA2ntMSNanX35pNPLIRSWjv1aGmQIO4ZbptFt78kBs68g="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1601036247-35a4899e.0_1601036360989_0.558014165822545"},"_hasShrinkwrap":false},"2.14.1-next-1601038002-6bbf5660.0":{"name":"@xdn/core","version":"2.14.1-next-1601038002-6bbf5660.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.14.1-next-1601038002-6bbf5660.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-92KATgzBRoJBZZBXGCwmTlkRaIf/hNZq5g/RFlVbneTPTw7Pu4ho8nhlR61fucdIOFNiL05/bnJjZ9xgTEiLTw==","shasum":"72e0888e87900df73ccd7b3d27ef13d8e3678975","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.14.1-next-1601038002-6bbf5660.0.tgz","fileCount":149,"unpackedSize":723745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbecyCRA9TVsSAnZWagAAWgYP/2dHTKcZvApf8GG30kP3\nwo4P+v8MN7haCPSj/ewGI04oqG6s3OugfBVMxNyJ7icalbJNHj18pgYK7I0X\nOwIg07rhaT5oLVoUDwdSpjoxruBzvxvrjatigjf/uLMS2wfnNd6yvPo7cLHZ\n5wCX8dwEWNSST5FYZ7/LY049jL+89Vfj89+hSSUFOY0yjxAE/fYpBZbqBaJC\nZAJPMplQ/PSWO5qpsocxFbK6ILo7nDsuJGAd4MFFE8IpgORwBxi2rdaPLjEy\nycqm7c8jlwP/7RPxiDKUftQhkKWA6b7OMNQyy31GTG4RSwb4lx/slhelI0oc\nI+WQn/9Zblwgd6ZkeSjeTAj0dnlOr4beB5Az2NFJxkNTIFIX8OX+79beG9Hu\nBtiU7ypvpY0xfS7miRjnnmz8b//q8/zPFLTLyWUfP/6EJwl8Vn1HkXI7NgBP\nrmXKn9Lo/mMxXGqcWTducqDK0ERytTfpdEe8GQysehwjbF4uCyU5wAdKXRBP\nuhUW/iMCxgIgJ7sU76sg8g/qGKpZa1KG5cykMhKUCClSVr2nv9K6LdTikSXx\nUgEV82Oy8f7+CgHSUTaPwzT0Yuvm2L0Eb6X8DolIJmqlGHkB6wdzAUg2fng2\nOZfVE0tj2HxW0KijYDx/isZJkXCrMgBfoZaU3oVTF21NQjBpFHrGCRiD+8cJ\nSj0P\r\n=7Y4g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID2gQ0u/zKLGo0y3zXRDPhmPYytBkJK9pZJngCdnj3UIAiEAwfhcL/Gbiz5hN3+C/sZWyPCZoT0o9ggSSfr60baclmg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.14.1-next-1601038002-6bbf5660.0_1601038129994_0.3261180702765909"},"_hasShrinkwrap":false},"2.15.1-next-1601038027-fde1766c.0":{"name":"@xdn/core","version":"2.15.1-next-1601038027-fde1766c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.1-next-1601038027-fde1766c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7e9pupta+lqTUM9ICPAdURF7qHCjpV6NCXYCq8/MGBi5LhfSgSvsfMcMeO6hS9b4bUKAwtUSqVx5zb3TrFsjxQ==","shasum":"93f8c167f696ef2ea8cdaf1af5cfd0bca91c2c5a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.1-next-1601038027-fde1766c.0.tgz","fileCount":149,"unpackedSize":722740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbedJCRA9TVsSAnZWagAA4pkP/2FaFBkYndrMVqMSnitV\n3MW2XjaTQ2tlyMmqRinkSv4Nw7lAI6anhVIWH1khF3iL19nm6TrhI3JZAkV7\nevmDiDnUL7d2nnsBBC2P2XMtEpXagP4E/B50En0Ld1VUv5KKri9Q+TA2RBPI\naLrijn6tVxnp++5n5bXcAxL7gMRny0h3qhPQe1KvCzvZf21tFECC1N2z1T0v\no+qat58ch/a/2AFQ+RoQnJIyV2/3ZvRYiGMQMsCXUGfkUmvcLP5ezy8E7ihe\nsZouHuqQAahpbOuEfASLDq//9RFYjskimglV2elSkKUu8++xRiO0AqMaWG3m\nLy9TeEDgLxj/pFHRgbhVogXkp/WflmeJnHbem+eg105kvh9hCq/kBwLiZQgi\nZiGT5n+I82eQOuxs5Z2aHdkoKkrO6U8r5AqsvlxKooj9ly1cvqGXR+v7sYgP\nKlJ87Lst3cpw64Ho4aGyBmVvThWS6xc//0/2kVVEIV6KB2OzpGVTGDZnp6zB\n5h4DWcGOCVpU8rCJoWrfhu/0lBORd7GtwqEjmFn35yZCmil7sXQt60HuK8Zb\nun35t184feWBiSNKTnP2y7wNHUpqHnYoxPGqpDZrtPc0WN8tok7hAkEKiwcI\nVkyU3qlSk59YkYTDvBVT+ZlPnx9lTMqXOeRitg3C6SUz0BRgOtB0QQuWJFWz\n6T3C\r\n=LNw6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBeXZMprMp6QpNkLiqeTaD5nznR674VO0v+RzXNhzAN/AiAIj7KqCta797pg/B1Ow1YJBvJ2rSt2FXaCZbf/+tvoSA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.1-next-1601038027-fde1766c.0_1601038153466_0.16521980910034872"},"_hasShrinkwrap":false},"2.15.1-next-1601038956-facc379a.0":{"name":"@xdn/core","version":"2.15.1-next-1601038956-facc379a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.1-next-1601038956-facc379a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-72v6l187Dy/lIDFAwU+itpozTSvfxQpXPoUcyltX9sf4RrEMwUUF34e4dDAa+2FvRBXa6RT9oclgzlWmrzwOlg==","shasum":"f6af0276cbaa55940400e042bf830bc76cf41e69","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.1-next-1601038956-facc379a.0.tgz","fileCount":149,"unpackedSize":722904,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfberKCRA9TVsSAnZWagAAXfsQAIS595NUtdgSKxagNJfS\nF/YZY1/dTSSsJIfkS8OCW9nrl1/xLVmtmsFPLWMHSW96CF1d47dPPDDYubzR\nZvjMhyunt6WBgbS2HDJ4hDaPIjfxu03DKlDGWYKafEibtqLQ4XZc3Q0XIhQc\nLy2Tq44utZbYEjFQSRrGtmWwlumoIQqQLse7ewnMUYovaxggrpLMkJtaea04\nm/5Xn9WL0ZQj95hOqV7q9Ygu2OmyhTbbWo+WJoe9vOlYoUT+YZ0e6ojDWAeC\nsJPIDO56DwGwP3lnBxiWBcIgvVG/aYZHHkSS+opgtBG7jkq/1PqCLLH4w8Qu\nZmcRjkC0k4qts3sK18VvGhwYGaFjzZcDLX0kiwIuB9mpaYuuIufUKn37aACP\nj8jqE2bemgsZRcowIhl0Nm3y79k52rReycbhOXrbxdVgV8WOsCqnaSD5Gqxf\n4xigsU/wMnuL+cNAAcOyS7116bHOrmu+3nwey7p15WyK5NvkZyYWJQjCszn6\n4eC059b3yE3pqxaskdKelmoGVB3GtmQGpQU72ePfJnx4SdnNuTn24hDWFzPX\nJNRFxvC9+vztjLgRjAXkOGVPQWcO8dVmIwWAjilYexZvstv/n/pXFTPc0GJf\nVrRp92q1skr6eLNNSc8/Oh1j10WAi1b1/QB313F223MGwf+Yzf5y92ehE/Ow\nNz9w\r\n=hyLF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLWK/KNxthKPBovSIJ1ZEePKXGfErakwdE9XCSZG5jxwIgSsxYzpY3LB98wOc2toxI7R0FbJIZkXbV+9cFlkFf9uE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.1-next-1601038956-facc379a.0_1601039050322_0.5364267124059683"},"_hasShrinkwrap":false},"2.15.1-next-1601040363-5b27dafa.0":{"name":"@xdn/core","version":"2.15.1-next-1601040363-5b27dafa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.1-next-1601040363-5b27dafa.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PrA8k+GMQfcOjiUaYK9goTRAD0abStNpyY4JxXCyg17m0WfI8OuLsgsqxGZBwq/8Obzuv8plkYlh4TsQQpTOpA==","shasum":"5d9a5bae90951ba6bdbf07840cc02a937ae4f2ab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.1-next-1601040363-5b27dafa.0.tgz","fileCount":149,"unpackedSize":721400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbfBVCRA9TVsSAnZWagAAxZYP/RMgZ+1JGW8yApwkV0Ub\n8HVT33LBr+FO5nJ3puUI7Fqqc7CkrbN7JfLghFJ0z5JqakF5wVIajtenbn/e\nLA0750t3Jbdxj3xwRZtgBmDV9kSYRxJiTot50EcAoeRhMsblkiiETsCJeIpf\n87z7+gw4xbqhW4OZS/cJnYkzOQvcpvopVcHdtUk82dJFPnidqJdQArS8wAcB\nSBNmxVASK5LByIuetNXnMGl90bRx6mQTV8Ximwem9MQ5GsOjF5bBGy6kjBC2\nqmVnfi/+jd09KjcHoLDMF6zB1kjClbyTgB6kBTBKcWQcAzRqna3MaIIB9DDk\nzl6bWMusPJxirT0UCX1oGmW/ntCUBj+r6pFefvAuEyIsoTT2W9psrBsqHlI+\nWQTaSKElbBb4YXg3/VgQOMcJrSHnjauAEUKBiIPbqwwuT2XijovxdVcgTs01\n6u1PeO5xs0ibmNPgNCMJg9Q01xvACPbdqinJOLL8eqD0WKccKThayB3Tru4b\nStIsV3nxg3UHh9Akr2xjeHczn7XCSGIRK91pHfqAyYnZHs3dyNIUpUjWqtKB\ngYBdlCGKr0BkjRm+k+R2bPJ+zmbZ9KDd5TlEA7fJIW912xvtXPmIN7d2HKIM\nDvoVkBGJUzq5LgJMfLYzZ/i97hV2ijlvTSb70VQJoma/WBM54NLsZoBoMFTx\nBL7c\r\n=+Vem\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCN11B8sOUva8pOkphjHJgdmhzqCJHu7BXPfj7/us5OHQIgP/BkAR46NwkJ5vTtnWsmKkoQ9ZAgRd5ApWN0mFEsPRo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.1-next-1601040363-5b27dafa.0_1601040468849_0.10794916370269969"},"_hasShrinkwrap":false},"2.15.0":{"name":"@xdn/core","version":"2.15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-N2tgEvwIF0ERH4JFIm2rwA23mPkeX/PIgijRT3gwN+gh5LrqrHK09UgncMWWCyEDFKi2swQMbr/hbZr1oVBXnA==","shasum":"639053cae57eceee840e37c596a6d48550b34d37","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.0.tgz","fileCount":149,"unpackedSize":722686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbfJDCRA9TVsSAnZWagAAixYP/3ei1H8XAwF0qH3LCAcF\nEXh21qFucY944cVR4ZrdmLv/O6KsjEyIoZFSkl40IVH8bHjbQc/FdiTB6fBk\n74K6KQ9++qFqXYyFCs9zVHG1U2tRNojmnvAJ4v/uhSPB0+ZvfaHKqY2syMQ4\nYI0/CTF1jyidVOpheJMqGaGj8ERMCI1eooiCV1OmyeoDSEsqAsRG3isxGozs\nt91O++icVEDNUR3D4PhMU4IVUuCJdrsN03r2oXhD1UMznTtpKVyYpmAYt1E9\nH6EagRkWLkdLoWawHR4IJtOIT9czMuzEk4VUVS8ZIb0mSgLQww/mlbvKoSYZ\nhhc/4/YWM4BU3/JNnZFOs3QuNBJ+cXqLe7/AjzZ1p5TVEZSCWAXFQmufB49y\nvQoScP8lnTwg68+LdJhkKPgywqCJyA7i+l0V2gdBp9ubQKwqITpchjKB7c71\nzcCwk5GscIBhcgVatM8cxj3xoC0f3iPKfW2nWfp7oF3bBFK8xphaJK1zj7n7\nZcmT/8KUsJtOdIpKKzKgDc9HcwRGeYVi8wcdNBNjtDXaLhWu8gSwc2TaUNAE\nEAJlWRWJ5EsGSO/CY+odJTUXqMKuvOB+KsMmdr/q33ZjYpHhDeDU9zLFc0rP\nlrQVh6kjqEUr4i9DfkiVGwzMnppQ0Q3SfMTCH3IsbGrve13RduEmWVgVG4or\nLU43\r\n=jixy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9aqqgOHv+EB3hPYZ9BiOVGYX7bEJ8ST+vzahnU5kKGQIhAIFDY/CNhMjZEQzr7qqlIi7PVpPepcnCpKmEtavPMPnV"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.0_1601040963020_0.7906557198358086"},"_hasShrinkwrap":false},"2.15.1-next-1601042758-ea5de787.0":{"name":"@xdn/core","version":"2.15.1-next-1601042758-ea5de787.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.1-next-1601042758-ea5de787.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-djGM0swBjozzKnoJc6JQEIntrYUZAEiIZ+c7JLMPFedPFdcLDJSN4z45leu7BgaQXu263sO+TIcdgPdkvs3ZhA==","shasum":"ab8deb284a766c9a330e737bd383df19c5f6906f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.1-next-1601042758-ea5de787.0.tgz","fileCount":151,"unpackedSize":728506,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbfm4CRA9TVsSAnZWagAALzcP/0coUoQs8JDLnmhdaMgH\n2TOCdxutmN5604LGuEABDpKZPHz9edHx6FpWDWyq4bTRpn1/S7n/HUQ44jc7\nHmWFwFBQy/MkMm3+qHnmKymTTPg/UI5YOSrSgZB4YL3BmCKFuRHsXH3DRfUT\n0tNXDJFTmdwGatQknT+f3VHbjVgR5RSAYyyjiPjqilncD6FJH9v3FtpvNXzi\ni8C+WJBcTx/4UNJhR1s0qBH7sAp2ji3MAFg/T5zy/WQTQF/5onTLjCo9QOFv\nrqQPYM8VDnirPyPcU4RSej4SxOVaYddqI7y8zSxqc1SfzR+nuJCoyC0aPq+/\n2cLuZgGeHomJJioOJKw40Ve04zef6ih+puodRxn/aNiNCv/NL7F6Zc1tYmn3\n8jT/eLsOR1j5M7zfVxagc6QpH+kgfFfuKbfofd2SlsMov/jkLPgXe/No+VdP\nRtZhUKueeJd4259u13tx/6tXnfIquz0DOEchUrRFn7ZlP17Y3cUjCg52A8L6\nv5GnwwBVRYggJK2d6LCzXwTI0RZpwT7sFmJOl6Pg9w24feC0ZM3D3j1EJaFE\nC0pPhuX6Odq6L4b4zBwb7JDjk+63qmNFjg3VcTPd9vjSPwDWVfUBM1KHpnX2\ndl36lRxXLy65A/buE4bo/6kH5pD6o4XnCFDbU8uyl9Bl70EpJJ48gNkSP0Jz\nnp7w\r\n=vGNW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEC9c5CWN8QAVwRQgUeWpNxnZfCVpz0SxSTWeFtYQrpSAiBedDQPtgvpKzgOqqh28UXsmzHFm+ktwNsnt1HpRDzt6Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.1-next-1601042758-ea5de787.0_1601042871676_0.9236099217925886"},"_hasShrinkwrap":false},"2.15.1-next-1601042960-372a5048.0":{"name":"@xdn/core","version":"2.15.1-next-1601042960-372a5048.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.1-next-1601042960-372a5048.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-J/qIXmWXEB0tIqLff6/fjAPEl4xr5XIR57Br1gLFL2V4PsXVrU6k+ilik3Bs5BUpIbQJIMIgF95vHzweYEz3RA==","shasum":"0956004a7fe2c2cc14550c1c3fe2ebc9d2fc492f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.1-next-1601042960-372a5048.0.tgz","fileCount":149,"unpackedSize":720895,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbfqKCRA9TVsSAnZWagAAPY4P/35J8f3Xo+r12CQBQTRZ\nVJ2Udb57pqkiv/iU/Z0JZDPKp8QTt3xdiQcCxruN3pFOLZZGBqiX5NnvT9X9\nDkMZSxp8Ncfe95tcF0aDdYO8dfHVBECizhyEFFm/XSf97dhrJOjqrvGzFUWo\ne0wvjBBLyRFk91gtsJ3wN7G4KU378ZuvGCqZjRghqZxWjghxR9Z61dnJVKAP\n75qQzOqObhI06wmRkczfS4BOed122YKyQlROuXm/yAiOkVxvkgAK2huL2MMo\n0WmxZB0npKCD5crb2IuA4U+zKiqvMxQjZhnadktRsstvv53s2qu9JK0wMdgn\nrzfzEnDKCYyaY/0VW4iagJV578UcYMUTg17PbSwtecaYciWb5IT5vuvT8f8i\n81tJsr/U2gwDL6osJ95FCQqK72xkF/ojGUIFBrD7uC0IsQHcRWzahUzmPdS6\npPJSegZMS21WcIE+D+gdbIgivnbqlYAVlS6op3FY6mG3r5aEorGP2X0XTMz1\njPHcZKN23D6Gh/X4sGx01B1Iaj7X5HZb/N4p+FPLB2V9knzo7BtR+zM8FS+b\nU7MWATxS5gVgw+uLKMTW9Lp2xSJgKB2ovZmjN8ycqu8g15uKjni8rtKh+qPc\nl/TKqQOGuZiWmqJcf+jVcQDH1J2+45hM3xNztLQ8IlZ+E1+skmfksX4HqHKj\n6mOd\r\n=wXPA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD67X4EkU/WCbmxiNBAmeKYlrnXBbCLJjPGT1HRlssErAIhAKfbPIaq5b9iQM+BDLRF0VEOVIPzALJVyCVmTDFa2qQK"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.1-next-1601042960-372a5048.0_1601043080905_0.0015395843509558027"},"_hasShrinkwrap":false},"2.15.1-next-1601048377-cab695f8.0":{"name":"@xdn/core","version":"2.15.1-next-1601048377-cab695f8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.1-next-1601048377-cab695f8.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-6Xt4V/rleImMOUpe35xAQRljVl+tO698jnRkvdT46LVBcqWhUdCFmgU1+08TOkx1RW9EHRJsbfe7EA9RiV0dDg==","shasum":"cdc1cf773e30294253b0fab672409d0d8fff55d5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.1-next-1601048377-cab695f8.0.tgz","fileCount":149,"unpackedSize":722904,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbg+wCRA9TVsSAnZWagAAV3AP+gKFGjLuH1h6vZqMoiOw\ne2GyCVab+0CyQbOQOCbs1hIVsMkwpF0jCyKBScAdxI2k824hdZHnsdr+VEMr\njhHWVo4FGY15oyb5O5Gxz8r2khr2AC3YrZR7fEyGkAD0h/WOjt3UHfzoZdUD\nmrdPeOhlRc6PMiIWexV6k2t0epiRRgeB6p2V9Z+GDzEhI7F5m3W8/oJgW0OX\nOpLxoLS/2lIY3tfmam7ZIJV9p2mdTYH199UNArEjhdG6rNWjar4D+iJg/IL3\nMQJg1VIIK26eYy+QGOzP7R+gc7GuAMig0axESyK9QGJo7MbCx+CEu0n96L7I\n0oV38vBs4gh/utzVved2wrQ/v6R431C2tDvaHFA4MLGNQQ1w8rkDc2QoQR8T\nWnsnPqgxyl12wCxgwK0+DvBa3xQNC/e3/SW4USYJ5OxvxxrpZ6APnm2UYdrP\nb3a5Vs4KPGk3mIkvJMTMC2Wju8MXPQ8oswNzQMR8W6loymA25BnYA8IpIw0B\necpz1TYZ47ayiT8J8ceCAV2TsE/x6DS92gs4vghTY09Tb33i9uayjjJgGxiq\nakqtwCbe3no3drgRVo7EuTSw4w35fY0Ouw1sFVNoz/u9A0ablzBGFsWMDhot\nX49noBqCA5N1OX7MvBU8nNMPHii9DTs8GAI4zfCVy6rbvUaZ1ZuPBX95dX80\nNYsa\r\n=wlIW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDi1SvnabJIohPxWTMN3kmw2w7/qn9+3THofLzEO/XcHAiAM+20rLE3d0pr60z8QyJqKBUfi/nEhjWeG4NJfEMg9UQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.1-next-1601048377-cab695f8.0_1601048495837_0.6550204281878667"},"_hasShrinkwrap":false},"2.15.1-next-1601049541-d28deeba.0":{"name":"@xdn/core","version":"2.15.1-next-1601049541-d28deeba.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.1-next-1601049541-d28deeba.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-UME3RgPR/ctJmAKx3gn2556QWrxULf1AnU9g0o1NQ8xiT6xfx2PVNum4plMXrkp2qVILnXhDcttJYkNpqpfDNA==","shasum":"07e56438389c2a7fc70b96f38d3a73557ee83bab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.1-next-1601049541-d28deeba.0.tgz","fileCount":149,"unpackedSize":722904,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbhQoCRA9TVsSAnZWagAALioP/1GCWAgyi4s5GO3b0eb7\nwpYql9CANlk0WmXd864Xva1sVGdK3Jt7A64HIK6rxPTiK/OyF5EjWeuZ2LUd\n9zqUTsLpNi5mdLGcxcMjS3rF2sjanzOmYim9tZFkB28G0yaXKxhqK4WnT2JC\n79Q6UY+hmdv0UlH1OHQN1NovUg8+eqsqvHsyFK6uUkx4+DZW52PN83oXkc3B\n/4gE5Kw32c5NF63yPqv8brxmv7ovSJLws4cGa743HIrNzuCYFk/G+NXOIJ2d\n2UA6Ah1obptHjW5Wl2IkXTZ+VqcAWevTHwMffG9hUiBJy/gCF2aK3XnqWgLi\nvaUzgc8yzuQ4s9kKZLlCsAUE9TU9uopysySg0yuJAe5CVrCjxip8SddrrumP\ncCdfAgQaoXuxZLlx3BFAeZbrecg6y3ARtIZdCuaOtybaf1q6E5ToxiHFMcYR\nSLQ/r7DNDbOD/rfm1AkfgYlZ3BOybtbmgIXLoAHyQnePwsokTkzJWUDpnvZy\n06mX/sWfHsOuSctbedngwHq7cKpc65xRgjTe4pDtkchDZOcBd3KcozZanbcK\n3Tcii1ofeZND7wPmreT9FgKcD/DAfo8ZMC3xuv1ihWMwTibKcLRJCG3tkGbE\nk6N4f2R7udsDmXYeaxDgGAiJQ99OqZ/T6k5c+AuSJLqj6pmTGg3RQnAxf1g5\n4UnY\r\n=MDN7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPVAODV3xpeOgXgoYVBbEANb1Ovqbcvrh4s8AAM/PqMwIgP++gSc4s374zcQn3C34hFOW21Q60idadfYF5AiGa05I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.1-next-1601049541-d28deeba.0_1601049639930_0.20784229601156867"},"_hasShrinkwrap":false},"2.15.2-next-1601057031-bb62fac1.0":{"name":"@xdn/core","version":"2.15.2-next-1601057031-bb62fac1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601057031-bb62fac1.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xwENzjTK8o2x9JMHw0AO4tnqGfB35/aJGiE9ACUiMgY4jd9Pg72IraJRr1xsI5Ib+Ddxs0+qmMibyIhT4SPWBA==","shasum":"c55f8ab47140c58e86a15e75a2e2fb97744d7051","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601057031-bb62fac1.0.tgz","fileCount":149,"unpackedSize":722904,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbjF3CRA9TVsSAnZWagAAZKcP/RULhlb9+N7eniG2z179\nDyp8boBrD25qkmBTammt/Z3pIfjgt/1nZolU/Qm9giHM77gZ9AWKNWdIWpyE\n8fMxVFlvepJIEA41S4qYaLUkITuz2piRPO20CnPLt69cGBJxvvtZlQyW8SY1\nOwOE4tAs+nWoxaTtv3Op/QspldrnehuxgKMETnv6EDSdZF88gCN1O4qslWOE\nKe/P/xQXVWPZS3GxqAw4YBA37dHT63RKm/1u/x3IxeD3egv0NKeD+jcfPBGu\niVtKNagByZVjSCybInBH0hkRR4xWg801lZggZ8kpj+5gVnG00paMRJbT5r4a\n6nzIiFkLyMp8e0cT5lDBHkaNNPnp45YaY0WD7bc98LF1kp32arM+3klsqAj0\n5L0kAjaabde2xi/otauzBSR/bXNrg7BIoZJ7spGdPSGMPyo2I07y4FU1WGM2\nMEPgTHkx/bleqw0fHs5KkpCdmaZmu02tUxFDLX9ibB9s/8O+LHEfMHyTr/PT\n4/VSXjwe2sjUFo3dXWGobLLinc//LijBi6r3JdBs4xVICkcZ9iwGuXx/k4mw\nB2O16X9oOQQBzGvfRD5C/Z4cPi1EkQjoUtw7/EMCBrmRfh9AhiPRIsDJDYq3\nAWE8qzbANA60P9iQ/dr1LYQ8rJWsBhs27r76kJKbucWY6vkQg9qNo8OPg5Jj\niwFF\r\n=yl+V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyNuQSyVTS5amHCboCrvx8eK067Lzb8uff1d790BMtugIhANGpPO8o46Fyl2DMei5rm6rkR/m1YfGsuDCXyvyZ3hEW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601057031-bb62fac1.0_1601057143223_0.9401809734207704"},"_hasShrinkwrap":false},"2.15.2-next-1601061210-08ceaf41.0":{"name":"@xdn/core","version":"2.15.2-next-1601061210-08ceaf41.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601061210-08ceaf41.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-BR+vULQGahQx6VNlgfaMHVHx/yZS5UGCs7YNStF/OsKQTJ5WHfYq4FZWtp3NrDU1YX+Hn2FLm/mzAgDfDOwfNQ==","shasum":"56698dec209d276337ca10d01e00f9fd31b573e3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601061210-08ceaf41.0.tgz","fileCount":151,"unpackedSize":728643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbkHMCRA9TVsSAnZWagAAQ4sQAIx8DOtZK2+CLVfLgVdx\n7Cr27wGJi3t2qRKNGAJHrejVwcnRAWaoTyRzoy+VbTyUeCnS1kwqm6CQvmJ9\njyiM336CGk+mDfou6CFq3w1dZb+kEEI/q282mHf9OUzcr9qtEeQ0n9pbjncj\nyNtvFD9k20aooYoPJ5QCxZM5P6z6FXkUzDSFYzOiYs7M+B7DHTcaa4oa+e8l\nIZucsxlHTUw+jYz54PXU0NcvaaqEEuhATWxJcx/9SJ7jAvSsXKc+oi268k0Q\nzq3gODOdjueV0WY/DHtPmMtMsRxYiGAV0RfNnuKGLQwJzZIoxoyw7TZPHAlg\nsSQcZdn4ogQOUZtpX69i9J7TaPrnSTfZlpVcVzWOtxmqy/GMhujZKHLM0esI\nhxk2ga3gzeXtP4SSgg19Ks5xGsXSCHk54vgZcWBwbg9XBrhpGXT/YVKQAbYg\n5Wm8fIa/Mef+OePMBqhwKr2EpK/vF39kWppIFUZNqYWcR/5G8UQh0mo8Qd9h\n3jBetT/vlLdghS37SSlDaRK//jbg+uCW8uyoDrTHAbBozIOBh60LiK2e3b9q\nGUNcjTLOncT89IRuyg2uK9G408AQ+JPg1PzPjN9MqGZVAcYV1EJyW50f8JD2\nafCrlN94MkkHiTRDHiZexcnBf+Nui38lM6xxycTk+eeGUX8j3caNFyOk7vUr\nDFA3\r\n=kaa8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtfSYnZtoI24FuQjj3P+HPhlgA50zaZTODa7n2OPElRwIhAMmL6GUwuu8pDl1NpiRaOUnEAKoXgSgLJKKBSBSteFPz"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601061210-08ceaf41.0_1601061323863_0.4867404830526749"},"_hasShrinkwrap":false},"2.15.2-next-1601061352-631a92cb.0":{"name":"@xdn/core","version":"2.15.2-next-1601061352-631a92cb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601061352-631a92cb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-C0lf4CHtZ+XCyMYAgnLIlSLuZzVrIQuIfQdW52cX+suAw0zUvNQH4GaCAqcOP9zf431hGA8ss9lAaUf1h8pWNw==","shasum":"0bfd081ce166a4e19b5187eb1baa16e52387613f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601061352-631a92cb.0.tgz","fileCount":151,"unpackedSize":728673,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbkJgCRA9TVsSAnZWagAA/FkQAIDbGuZ7GoTbRyjDueLp\nIAiHEn/xxYpu3HpFpWU3VA2isiXByCHI8K5cucGjVKOlE1llsxoiwffP/j6g\n5Z7PUVOYGvsj1DNuCqGlYP5HLrm5/9X1ra5UydvsuGH/M27Of0sR7C3muGGU\njZU5k7iho3iuZ50ODub1oh9HEnfbYNNJ1yeYV1XsTJkgPTSWoeL6ANyQwWS0\n24BeJLAy2Umo09TSMGU9oix1vmyJcFnlt/zeT8OjJI6X0uTpwtmh4gzhFOlE\n2nNImgndqgOEQRaq86zRKvhTR5XklS250VlyEGxp7Zurk85Xu7+8QUTLOR5r\ncZ8AUnBFoJqioTLSNqzBQYmODrcUVMtc/quX5LUCNKfMsRRMbnNUpHRLGlOF\nXeyCNAh1yjbAWGuySx+DtPRE+elPq69BfBffSspBobZ4Ti5Lr709+OLiuUfP\nQYn63qmhzcLZQiR5bMMEvWua+zVASIhlJl+5lrE9u+TG82X82/Uh5f4/fCps\nlnUAJLFWPJxwnoJsLFdyrf7afFOXAWVVvbsSlyEdamsFSCEqVQG5x72FNaAn\nGZOSZ247hBC+cn6MHBV/knce7qHjWVmj4TBd9EBdowfpN9oLpTd/FJgV0fti\nHL91YGdGED4U94gL8BAt6Mf0CbIqCWbRmLWZ9qQDX/ElN1T3GDTd6V0boTvI\nZqwi\r\n=kTCl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+T4914Yhid/CNE23RVy7DGAYKArQvNnJ8tLly4BACHAIhALyD25b3LHseVWlarGzfJZq+bQypX9uHQj52Tt7GFlIP"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601061352-631a92cb.0_1601061472254_0.6362280212569347"},"_hasShrinkwrap":false},"2.15.2-next-1601062083-82d4e4ce.0":{"name":"@xdn/core","version":"2.15.2-next-1601062083-82d4e4ce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601062083-82d4e4ce.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-afIXAMELqz+M964U6Rb1daaQg8F5aoVPqBCVuay6hr9fz1bqRXGUDrc2oji1TH9+AHLnhVBERRIcsw4/QONFyQ==","shasum":"23bf83e3816c80982da362ec42199c41fc476531","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601062083-82d4e4ce.0.tgz","fileCount":149,"unpackedSize":724699,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbkU4CRA9TVsSAnZWagAAwU0P/R7Rkv8TAWvW/b2BJtmW\nEmO/yGzq+jmmFWSHNdTqfxM31VHGidE6j5KZgqPAa2qilIC2fgJsxEHrhqL8\nILrTYY3kgrNTX1Kuu327momRKjKDNDI2bIrLhWlJq6tQkawiV/j5JWbAeB4k\nDmIXuButvmBxG6DDrCCIWGXckOyGtIKOYNvRmYeuYFb/0X8D9POnodZWpCpd\nr69yfpFQXNNfJK5B0fu7hGjUSBlS008BoYUT7erv0dIl0bqEGQxOBHJ5DBg8\nV1BU2dhX6pk4oPOu64SzIwg+OJOcyXd1Fe9WQc64MCB1AcsZ8fsxhD+4x3v+\nJfyimyqj4T2yvOKw6gJk8+aXdO3ni+956VMxoJuqXldgHpgW914vIsSB+H5q\n2vqBMWLQL+1N9m8AkcTG2n7X8ccPLmLMRnphHy/JZPAcwd+vcvAJOa3XGaP7\ny/0sqcU4hDg2I4mTon7ANMpoY0rRyDvVlgB6MEgniRpt2x9r3PoCr37hQuLI\nQtd/JJkwf1jOl5fqI1pgkc4YHfoKui0NpS+epJgtDCA6yIw2YtS74dBxsIF7\n2xcwE8fxfd+lQmrzqj09tiscA4eEFMJX0jNlZ/zDscDHI9mbuDJqCmZ71YQc\noqgHLArdAWYAYGlxf/20tEmoT7cjlGDiGdstCWQK74tZPArrRAprjITrBWF6\nQwDF\r\n=ypZT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAiPUkyIUGMEbxFkiMDz5lW0V/gIqxSWQZpgY/+cCu/wIgLlr9c30C/5SQhTVp8sT7THCghGSzUxhXIxnrkHj+qKA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601062083-82d4e4ce.0_1601062200298_0.37604227287822023"},"_hasShrinkwrap":false},"2.15.2-next-1601062208-4b550412.0":{"name":"@xdn/core","version":"2.15.2-next-1601062208-4b550412.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601062208-4b550412.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7QfMQ37QpdknTBtCNkTrCZRUC4WFSU/350PjfUn6b68eDJdrdMy3yh3nIilIOdvuMRo2Z4PIUkaUZvXX3k5PuQ==","shasum":"e50e2a56e7fe99f52b2af8a2e33297188e899cf6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601062208-4b550412.0.tgz","fileCount":151,"unpackedSize":726089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbkWfCRA9TVsSAnZWagAA7uIP/3jZxtfKq/sIcsYzkKPa\nlW2m1VITOFuva63dV50OdcrGUxJcG6Ted/uAuct532KwHxv9BEh63WknmrM8\nDUC+404MmRbGEfPMOO/xbRous04cvyHZpsS4HcB0RAxg07ilSN0jfC9AXbNz\nWsnXfl23z06wWxOQB5qzUfpxIf1BQ5FHgLxBzTSxFebQg3fIuzAYbRhC8WSr\nE+xqKnH/kTgSjxOKK3gTYqL00kpT8mDP2bfu/WJARLeoOpqgn6Uhy7bYBWp+\nvecisJzYpqTVruqjYwH3d9Rn9VfYLKnlyFfVn5XMRGK39bCjjw/pq2Flh5fU\n83lQUnQOMc0HmzMMIJKNPaApmVzK+dlXTqa9X4orf4HtYaSHq+i1rwaoVIdd\nB8W6uGYOw9R0oStaGsjPSFH1ADDB53a542HAkX2fXg/egTMUvo3mDReyPGfp\nVQfBIx7lqVWBv+4sBJkJ8qXEsqaxQkDgY69Q9Wc2wvOTxcwifDD+a7yM/+F6\nh2CIxhpG+QcT1kfwyLwUZmYPFw+oF8UMrSzpYtCYDDU3nv58SjGKTM4DITBa\nMqjDWr7ni+VWI0AsLfeVvOMVl+b+N07V4VQHwLwHVajmUUFBBFcagxtEyL1h\npr8iywLRZVENMB979dJRIqb+xKN39QGYU0Z1DyQyjw6pTc0DJ+4RaZSFeZAR\nuwBY\r\n=BgN0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAQpp31ewkEUa+UJJ3DuxryEzLSy+fzzqZftxSLJ9+h1AiAqlKD26riQKMrJYjJMMdqwV+gmFhtfXJpCOc8hFLGYQQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601062208-4b550412.0_1601062303264_0.5401689489621657"},"_hasShrinkwrap":false},"2.15.2-next-1601062477-266ab9a2.0":{"name":"@xdn/core","version":"2.15.2-next-1601062477-266ab9a2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601062477-266ab9a2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wPUMx0jUNcmrUXyU54gFSoWJcmjqGPxs1FlzTAReFIAeoq8W9rvvY9LCBbaWKN3Bgo85dE8BmFF/oK8vAqXDSQ==","shasum":"a0503dae4e51b2a2c16071b16d03a1688b4519c1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601062477-266ab9a2.0.tgz","fileCount":153,"unpackedSize":731858,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbkbCCRA9TVsSAnZWagAAAAUP/RRGx15FJ8rF9ifqS+1C\n5i/0j53VCneHcCY64j5KflOMWmga+504IaVliI2G/3h9Er8zg2VlY3QGbYGj\n7dWgYkCmgps0Cq6+9Ix923Cwxyhn0tEGl+dxNAZ+oz4h0l7C2Yps5edZoSE/\nRerQfe73aZw7W9PRMB2O3CT/fFfQbG+IiPtm+zSr+wRaKm/dABqqq1BY3kZA\nJjkm19Nlk2vOIEehGtV6SQNL/P9LxTvoK98OMbYr4lz+G56PjeCfqoisGUQ1\nPVtVjhYB6Ox62YZ3jJKl2iWiArSO3ZMXEIPqYOxcrJbpJ+zL4Y+JjpSdBIsx\nZ6rLi0MJSjliZ9I0qugID/CD8RXeX+Wr4uBwm/78Epxkz2dym7DM3240bWK0\nAScvFF/VOxdiGtHg1Q3rE1NCekN7cnUzqmN7NocBMML+bAIGm6dnU2WZQgra\nqwz09P8naoxNayOl6lQ1IHQsqghw+bldeLzPkwcuj1eEnG8BZxsUiOKZVjHs\niv9AojRrVpzs57kituyXr3aumomMd8z05WTpWZpid/7EHJIn+zTi+RQCfS1+\n+hRFX2h2oWe5EB9MyIsWP7yVFgzaw2RgzOTHhn8VMbGlm+QVnyY6l9GksqT8\nX8ohsfmQZLXjQ/9RUSwsFfeiVy97NoNYMykr2M/yrhxmNhm2jGNQlpJNk0gC\nfYcO\r\n=B3qH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4xtSTIzTAcDD0selsSwY3any1kv1ZCE0VqPFq6DeZ3AIhANytyG7Yu0WIAnM4Ml0NoTXHvVO9zcMr3CPHYdQtqjHp"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601062477-266ab9a2.0_1601062594397_0.18328545954767606"},"_hasShrinkwrap":false},"2.15.2-next-1601063911-e749cabd.0":{"name":"@xdn/core","version":"2.15.2-next-1601063911-e749cabd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601063911-e749cabd.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Uh7NIEDgIOlJCwFrx+aqCYmByD2TzM6lPmBuNPRRLSCWslXcZlAuaq53r/2V4tcbg1u18Oo1TwApLxUSZEP0Hw==","shasum":"de3e35267d31f3ae27c79f68d0d548f87df2c51a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601063911-e749cabd.0.tgz","fileCount":153,"unpackedSize":731858,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbkxoCRA9TVsSAnZWagAAhjEQAIZJU/HcXmNNhR+8ySeL\njemf7oo28q13YWZr3QmPw7rm6OWoOrpW0eGWj2YtMuE7wBI1ukhh3NrIE+L8\n9AaymNOrF+b4sPVQjexUulsmj08HroZXaohfx7DxyXxPjtcy5ueJFAyRh+j3\nW/9RQqT7cDV3CRrU63Ic+fZpYJcX5/d5R4U0eyVY4D+BBgyakyKIqw+S1mEc\nDdbPXM79yu0D54JRys5FnlGb2rDctauaRCLzdSPeroCNUz8wZ4SLYAtj38sU\np+b1riMUDqhq2G3c3fwORPjdY9A+2yTy8p5NnzMOsFtHtUkkq4xNppqQWk+a\nmoxallIVDf14RQKMjv+nmJnTWqWiGWL2lUVAk6try5IIkO5YFcJ0oZXCvjvA\nZdlplGM7VFVedKfbj/QSqMtXTq4pMubVvnoTTnFYU2a7dqskNsNUUcha30zr\njKNWCR2nPNCvzAlO4JgWWzm2HQtRy3k9KR0/owFYUqxqN01dQ9JxTxTISwZQ\n+kLn9MIJfnjBuQycVcOnz1W51FwKAvYihSj1j41bapltrtj8UlxHHYgv3UY7\nb+gD/BoKNd2iQl++FNFWp79J88d+UbSSNgMo9NaxxNOmrxfABs9k+Cg3KDYW\n6JUBG/wjJBVGVT/gL+Kw9Iv7ATyxaBnCXuRy5z+UG96Y3kHAcjawWMdGC7o2\nGuyW\r\n=au6w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXwiCR3CG+YQMJqJ3+cx5BWvFbSip7YsstPTMUDa6PQAIgLja7S9ewxlUz2zDTfz9wk6pqIYx0Kp1/y9CIf3ffaRQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601063911-e749cabd.0_1601064039452_0.0328653847596978"},"_hasShrinkwrap":false},"2.15.2-next-1601118385-00797597.0":{"name":"@xdn/core","version":"2.15.2-next-1601118385-00797597.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601118385-00797597.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KBOhOnljoga0rh722zdAbmFlEuVtRcKzLqy0Rl+9pKZXB0JdWFGPB35Xz812OiU/VbvshPFRqknsRRebdUn2Lg==","shasum":"af5cfc448594ff4b14fea8651ad12c9287c65895","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601118385-00797597.0.tgz","fileCount":151,"unpackedSize":726089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbyEbCRA9TVsSAnZWagAAj/MQAIrdn22+5VWoEtwxXInf\nNiOma5tha7Ez5ccPwr0moLGI/qWm8rAtGuSyL2PgG6UwqbhxSW6xAvUbwp/u\nGwSZtE2zRhuKedShuyWHBj3K046iuyVLpZM9BV7M1uIe2z4m1FLuDD/69Dyh\nsjptRLxw4QsF3Wzy9cPLQ3gyfcpXUHHtNlpZN2zrL4xS6rzUJC0zcD7OwNRY\n4g+vXDDgqUppIhAMf2QoqQotrE2vjai5SKldK26W7QUwMhYhhD9Zke+zdNIL\nsmST3ADtG05BSndDVtZQSW6oI0W9TCduZpoTzisnLPgNzP5h7hHsbUtiAFDO\nu38OrfKJiu3JZmhzMRxm4+KfVSQ+g4fv7fldaZ4OHOpaTxyOR0KnDb4f8wvO\ngUztxWVmdV079vsMSq9S6sOw14sJ06kE1xbsVWioijeGn8BnrpKOEq/CoqM1\nNelrjsAmP93In8S6bPuP9SJBZyfPjW0NKa6RNw4aq8YrgPILAQMeBum/6gnL\nluuk7+VZioZOZh4G09Gc5BiONYKRcqihTF+aEt2+8Av5iOuJMz4AzMuL6M9V\nWYNGVpvY0caCRmaVSzVbnwbOv5kQnKvyUsa2b/EAyxgVKXKYOn2EwnUI+jmb\nQD+ZVQjoHC31WGDMeRnFT2tqLQvng2vpmkN9RwWAfY6+l/Uaw+VtyYfy1lv/\nOkED\r\n=Z+02\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuNxknVpEUxT8mEl8T1ptWR0Yhp82afUKATlzar1E5UQIhAKGmDoUAJIPk5ykv46Iyy5va0RXCqmHLq1p7BZyOJkJJ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601118385-00797597.0_1601118490923_0.23925050481815147"},"_hasShrinkwrap":false},"2.15.2-next-1601284228-7b83be54.0":{"name":"@xdn/core","version":"2.15.2-next-1601284228-7b83be54.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601284228-7b83be54.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tbus6ezYi0uKVjd6gUI2sw5powZiYNj5KE3vj/vau2AExkKJ5ZmfduA8BiuW26aB6rRKm6rdNFBrdnqa5e6RqA==","shasum":"96a9f03cf10c4bb35c4edb7de50307e6bc411283","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601284228-7b83be54.0.tgz","fileCount":151,"unpackedSize":726089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcajuCRA9TVsSAnZWagAA9TgP/Rfp0qgyQk1rxfVv8sKb\nLzB20lEpdCLPUaY8oxJnF2wn47W+9ZXU8s0YcaI/8Pya7x4mIkyjGBYYvvIX\nnPYMSfs0BN0fAWeFIv5rwsuufdSdheg5NwSaDnO782RlHBq6+Mc9JNbrOFRt\n/5f6znG1V7hHACW9wNwkA8vvCcReYRqSFGJHYQOhmrDXnDOVa5WBMWPUFQ/D\ndZAO+slcYlCn6EOZ2q+9LDB8CIswrluCOBmknit/vJhJHP3b7CFjjSx63FjZ\nyiGJYwQAp7UdBmIynR2qCBm4Jb3Ey712B6gJC2GBylO+HsEsNgyhRupHOouA\nZvpNglmU65vseM+o4FQw+g6cJfnAWiG9eeiqtIz9bGCiIALmRKQp0kMGlKdc\n6FtbiZKJzXjQTsa1jSnASpTLC3AMdLK8ZAdeqctQAXr+xbMQ/SS9mK8qoZMp\nAO8dQ9nxQ3UX7+7T7WcBQ6rpfzyiZcXg5pywYXhPbx4WKktwji/wnrCABfGm\n+otZVEIow78wlm6gfabwPycOYWFiWexTE+jkStW3rnjLY6wj24tkdFn102Bh\nw3hzlCH6FAf+lh5vgwDohYIfoRkiAK0jLiGtMLBNNTDZgnBtrd2StZutge9j\nnwd2W6fw0MyccMArCrwI6mNO4403R/O6NWpPU+NyqRMfcs13Mi9hwlAEw+MM\ncqBn\r\n=b00M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+/4FbKMCMQT+Rcg9Oz4nudTv5qwMhMNwBWU3IzCYgYQIgWThGqNfJMQHfs2bl4FSe7CwM4w8KBD9Dz9cKFaGqmtc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601284228-7b83be54.0_1601284333647_0.7930368881745467"},"_hasShrinkwrap":false},"2.15.2-next-1601293034-38774e59.0":{"name":"@xdn/core","version":"2.15.2-next-1601293034-38774e59.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601293034-38774e59.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-X9ww/fq+FvMnOf6faw8JdG1Q4w6yIQ64pFVIoLGxSOGb3jCQrTnteHbs5BPQJOd26Jlq+yqnwsUMr5+t068KXw==","shasum":"497028fd6a674157d53032f8d1b9ff8c68b00ab2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601293034-38774e59.0.tgz","fileCount":151,"unpackedSize":726089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcctmCRA9TVsSAnZWagAAGlkQAJqql3sDUWa/AI5X5sLO\nifB3EaUEM9u6unrz/UT0JFPV37JlKruyLbn+jRRlgsqwJFvN/tRuLLsqJoLP\nD9zN4r4U9/KvGoxxs2oXr9biwKeE8KK3/Sm8OtNWo8h9VDV21WpSWpihvkLs\nskrq+3qM/IMAhCKUKdFqcdwCOTClWunSocbz1qlIB1auF+hlZPcWzJjU3oPv\naL521USL4mMG2V1ElVNEVjnhGfadl4TJIjEC9DFACTkzpug5HQrlnAXic1VD\nq925ZhAot7C3Tgmc2Bggimpun74GCwSWynfGAtjO69MyGKHHI/LQnqAAWmtX\n4ZE5Z/jRx6cBVtpVg/NgYk/wS9JuuFsJabVSLxgj+rAunWQdR6qgzI5sp3id\nqg3gd3fwLWSjllR8eKbr3I+Jym1/X2U7CRzXg52inWiQSzTIF4m9kIqhwnMl\nbiz4lYeLNmKGwly4KxQ+Y5PF85gdJaMq5ANKuZUWW3vMxcLUJk8+2cX+oQL1\nUTcCI6/A2hFP0t8DOcoeYKhDdd4KAnj7qxp2NWpKN+OrndScZ6bFZUaJWDki\npW5tOxIWjmCgJ41Nfh63UZd71mnoTmsJY94dKxbfCjfueZE+M8xoawCwMjBx\n8uIeEWX9vm1emVJrlhMeZ2BiKbuiy+5bIT0QjqKg31cWxY2T5fRJ3xp0a6nj\nHDyN\r\n=ZD/y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2wDYLW5eDka0yVtK6g9uBmxFzE7Nk/5AXLkQRexNKtAIhAMqijj2g0Ey0/vVEslfe2rn0TEKBPz+mjsNUfHVvv3D5"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601293034-38774e59.0_1601293157703_0.268971122909361"},"_hasShrinkwrap":false},"2.15.2-next-1601293866-bebfd7bd.0":{"name":"@xdn/core","version":"2.15.2-next-1601293866-bebfd7bd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601293866-bebfd7bd.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-O9yaQoAiaMjRpbWzqs+/U7n+uIzm59NUtsO53LiV8lveDZudSTWvNG/x+7bbvEx1BTSvd8PM0t3fd1OpGDo/ag==","shasum":"80eeaa3874cb98765842796a663cc9e631fa309a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601293866-bebfd7bd.0.tgz","fileCount":153,"unpackedSize":731858,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcc6aCRA9TVsSAnZWagAAZaUQAJ8M9WfMw1tFp63f32Ak\nOmwfzYSe+Gej0PaaNNWZ4W6ACLLHpqd99iaUWMfNRQVLTM+ZoOxSgavMmLll\nz4FWrFq3cYTVCY+tX9tR2meOy+ge7FkGwpqZLtPthOR2y+rfOsL72z+EYwjq\nKZTCozlfYcl5TTjtP3OgqhL0L7HVWODYTtD7UgWv5QtlSiacfs3ktLnzn1wE\ncmLulDsUTZa42CwTjHU9BYyX2l1jxHx7v6gunuAJ/US3W02usY5D2GKuMq6N\n3wEQajB41HDI7FwLpmhR34/Eu0XhnJQA3VJkGMT+yuTv9faaRLXfzQewNG7A\nxyTjMAip9WIVaLUpHb0mtf6Ki1m/lqpQGGcrMECfif02dtXEmSaXe5oCkXiT\n5A/jb1IH2QCGZ9IJAQpJRNDkNhQYjw5GeUsB73zQz/avvzeHI/kcfqHvHuku\nBsiDfA1qYMsj5td0zyv3gnvkIK6f9C0rjuWTAG7IahLjF6dnOb6LcZMt802E\nhX8eE/dr8EvEarROkKq6Q+0lPYHFTpKXBOwBc2G8wriuJUCP5BcVz20KQfc3\nr35fs1YPv6AHhODfjh5CtWcJqqvLrK/zVe0PcMQyl+Xo4G2G/droCPruQ0fq\n+I4qsAnWUf9yaJXkm7XDEdKrDHHYW7I8N7tLFE/4OB/lojiTP/p78FjB5dA5\nyvYL\r\n=JNUE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCv0365z0CaAK0NDDe3uIxtnq4Bx98XOLr+iJ5wloDQqQIgMh1MkgekHI16w6K2/x8w/qJ0YYyA6EhA+bKmWRlyMi8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601293866-bebfd7bd.0_1601293978221_0.48855546063503175"},"_hasShrinkwrap":false},"2.15.2-next-1601294455-3908232e.0":{"name":"@xdn/core","version":"2.15.2-next-1601294455-3908232e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.2-next-1601294455-3908232e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-51qqyVhzbqPBfW1m0zoX4G/K5qZ+W9mH9PlNpPgVRsmDro4q6em2LVCUBxAp3gJuJLJ10YJAVYb1WtAJ+ygDGQ==","shasum":"09fba647fa608a28aa169daac9598a41bc8d0bd4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.2-next-1601294455-3908232e.0.tgz","fileCount":151,"unpackedSize":726089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcdDhCRA9TVsSAnZWagAAu+MQAIQbRG4JfBtiPHe5cCAq\nHfiny/Iw/qE+YerVN7GwmNR0xEdADd4Qo0kgxIJYSTVP7Hghw52dGCpPXrgX\nedyqzJrb3gAG3Y8TyFrm73ULhnNj3+Z1J/1ABtn5x6eux1KXPJrrKmp1hHVK\nNb1D9HYOudZ+nf1yQSs7U0tNMyPvTwFxNEVujk5eqQTfGZH/WHkBKW9IuZ6+\n2i51j93wveQsNBDSZfJWuNNHEMJQGyAyBZ6VB7fA9xgvnbqGrEujl7o0QhFL\nBj3jiYMPj3J1x0UWc089VMo+oOypbC8VE9oTgqDSZULIagO2PtJY+YT3/d7d\nWZ9OaCiNs7p8d0Fhx6UK6TUCLAegEizUPsX71v1tc+MMPqwoixobXNmzwQHZ\nAasSGVjgQ1aC2gJEeYfUx2gr8W57EEKB1aO9CEOAPcK/AGw1b0awu449LxlK\n2WJ6K71NRvjZHLqmD3QVFLmgov5w9hfUTGaSaZ7dvu2cyorW4HBJ8Uq9kbN+\nMg2HHp5jibc6uf5mQUczQyfJb/YD7O+KBM8UCgVhfJZkTSfCFCqXukx4PJiV\nqy+pHVGtZmn9sAY/015pvaRnTZZW1nWJ2Uci+OppG8RRLH0thSXCxtccdyk2\n0L3nKOqE4mo3Xii1l138bmRMu2Mr7Y/Nmo3r/qm+vEBcayc3K/nzGoa1MAlK\nTKI0\r\n=Ku9M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFEuAbiFJUKQ9krAztpgEIalTQTBPnHCbA8sUPqTcnNxAiEAwrOtmpkSngzHumAl7Lwzhe6dsX0ZSbGNZDjrhamXtvo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.2-next-1601294455-3908232e.0_1601294561122_0.4112253259541572"},"_hasShrinkwrap":false},"2.15.3-next-1601294661-c4ce5956.0":{"name":"@xdn/core","version":"2.15.3-next-1601294661-c4ce5956.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.3-next-1601294661-c4ce5956.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ExMur2YCe2OvNQm+BTYSSN5N1aVHFWcCm8MQmUfmKmhnZWAmPKu67KHx9z9Knxr/8vlx6EfluO908x6cj2KlDA==","shasum":"d6b9df2e8a2e5f375091abd07456ae2a6ef804cd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.3-next-1601294661-c4ce5956.0.tgz","fileCount":151,"unpackedSize":726089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcdHICRA9TVsSAnZWagAAFwEP/1V6eQnpqRHabh3jsDO1\nic/9eGrUSVfm9c2x4wxWkODacsdTNNKPrAv3oWuIePnNrFPJjgxCwzeij5Jn\nKFo8U3xV6EJegoXGetCnGV0aDsLrl/VdKuHi/SVDlGdm+3h50JAJx7HVcrPT\n0NJ7V++eyOHD/14/LJPchSAtV2RqN5Qh3K6vil73lvkyT2w7zkTkte9fz5Ey\nU2JiSq1/at7l1LhXxM17CYcWPRs8zwPGwj8hS6ZSOuIl41NPVAMYpfE16oLL\ndNUDg8AF9v0ee3yIaXdSWkVM+aENsOwDbkv+pphPnVjQjzUBVDrj+YO9hY52\ned7Yl14FzNqnRGFyI/HLeIE7gN2FS4HBu/80lHqvIXc8rzzxCd9jaLKIHDyM\na33l4lt/lO0MHxBlooNXrtpuxrXH+8D3v6mZh3IA6ORjFS1cmKSTpp3QcYsl\nltnQzxM41/L6ZKWTzGSyMe9omFxT1zWaPcYG4RUc15wq/0ws/qzyoCN4DBXz\nI0vNUAfQ7NAP8EznW60NGM+BK9j+YVNfJJjmuZKPliAxBSf3JHoT8WdqHshK\nbob6a8geik+VDGoPxZ2a0Bf2OpPBgE2RRMS+IG4yHXNwDYJ/RJe8RXp6Qke3\nv09rqXMTR1b7xPq+prE+PlWoliVEDNueTV1gsfKBa6GlYZdsp1RQPLRMhxB8\ntKVn\r\n=b+5M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHtw3rrw+xRStVotKzyYhzi8vfS0nS0X4YnMI9VO6munAiBtHZmavkuE42DyAqtK9ewp/GghA59+4/2h9+xNRpbO+A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.3-next-1601294661-c4ce5956.0_1601294792064_0.9933177998965668"},"_hasShrinkwrap":false},"2.15.3-next-1601294712-c63181ab.0":{"name":"@xdn/core","version":"2.15.3-next-1601294712-c63181ab.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.15.3-next-1601294712-c63181ab.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VYE/ug66oqrScJDUgr5HjNeGxUjEPnCps0IMaemPhNKXm0ZHt+qToxSis/aFOayvB47x+n8Cv7BbOj/8LmdXWg==","shasum":"09755c1ecf461b565ab975d34b85d18116947c1f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.15.3-next-1601294712-c63181ab.0.tgz","fileCount":153,"unpackedSize":731858,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcdHkCRA9TVsSAnZWagAAIc0P/inWLiOLrmpEoKZZKXeK\nLgZlUASUj9XKN2BjEJoNP7X9ZJMQvg1a/GGvyvCjrFz3/9jWtE1KNHs6LiVs\no3P1AX2onJP1wMD6t5fXZFXQ3fsu3HZqlQiplIoW/2YOcD+MenB6M7koaNTO\nQcAhUxTIvBgNN8Ye7pYj/jOJztUQhxteEdchovXfB24hmLRlnWPbEptPw2yV\nZ/4LA9U0PLcfHQwJBaRrQFRv12VN04Wq362SKJsAsjeiLwDMlAW9b5R2gNEw\n6ASL+xn5itkIYhMf7C7oqWMDHyQfe0Kw/g5gpaNJ2AwAg/0DvnAum5Rsiw6w\nrczi96jFS/VCMajV482e2r5uuTPcZWpF+9QxHVW442O+t+bvrBW2mSXzTfD9\ncL8j0WT1bY+HK98BXmF9MopoZwXhsjzmLBfZElez1t8nfTEW1F0J3jYrrlYW\nM4grAH3rMQGI7cHxnkyeZaw9MlhI+UZbEDQc8lXyGULyS9fKAlDck2suMZrA\nbSP4DAppJBqI3H2mpEmN4O9mMPNmms6oKf+yrxcxcXN/hovfyJ48u3cdXQYt\nG8PMyUOcx9bt4TtWQyBAafRC/kBM/HpsIsa2WtXYlB78nkV9IDVI4zhUtWru\n6lAPNdypTT6crg7oppMWrsjFfWYP0xk7hTex768zjZs8TJr5iOJpq1TgrvRp\n5MMH\r\n=Xs8O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDhpzhPymfC8tfrh++8tM8o/witU99n9zrsDrX4R/2uWAiAMkgbZTC0YsU1qwNhisMsONhFHOKGfOWukj11RKL59pQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.15.3-next-1601294712-c63181ab.0_1601294819882_0.6282409598868492"},"_hasShrinkwrap":false},"2.16.1-next-1601294821-998f6094.0":{"name":"@xdn/core","version":"2.16.1-next-1601294821-998f6094.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601294821-998f6094.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-UywRyGm0qO9Ic7rFGVzjOSJbFbjShJZC9htBOQgzfmLgaHC9cMR9+MYHto1AguGmuJPZWlxLVbVL4cksJE1zEQ==","shasum":"163629dc7170a2c7802d345bc50ad7e4ad743749","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601294821-998f6094.0.tgz","fileCount":153,"unpackedSize":731858,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcdJlCRA9TVsSAnZWagAAOosP/2NRCl/DiXAwE6q5LaaK\nFq3Ux8vM/y12fDJozMt5tUQ33F7/PJx8yUPKKgUJf3vSOsdYqvxJ3e1MiRRZ\n3yH3z5E2/jQ3BUdGGh5ajk/z45+mkILSNXlhH623j4dXb3BFirTD+kpl0dmY\nqLA9Ei1ASHorgwPQ7jSEdh469JMwLIlf+J7MD8OcIHSlLNcSHuaNW4nsqE2n\nOAjERN/3Jzpt5kS1CBFDlwHANMSZdpg1FDncqpg4uTB+OutZEU3MgeB2pFwM\nujws8UcES/RGQFfVBCRg/RtJrkrXFwGI2hc21dlmmFIKYkfzjGXEnqj2Wv+q\nQbLcT44pWsrkaEXiFz5j1+ebGv94LnAKqCs8+xChaF+QAR6kKKu5u8lYqk5Z\nscNfEPuw96786dlEI1DAXZGTarX/hjqqZTa/3esKGcgDGas3v/zRXFxrftnV\n8atGehEO+hnzj48N2FZ64skLdIgucLVQEsd3dEIk0N9lXyQq70Z/P5zqSVQ2\nBoqUh/kTeO6u1mkX/Hy73gwaK/PSwH0X6qaW88oNkJpE0u0BAdKr00m36++W\ntQBk1c+T7twrQ3/yHQR10YtcGWFQzXM3l09AE/V930YKRwwGpRwtixhocfxi\nllHwTXiQgWwEBX7aLtFqTWhglxDLvj75O9PAhrSDzk+5QYafJqQ87doA+49s\nejLK\r\n=v4k4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAnKNRNV6evycGRuoNexIj/7Uo8tnAt/iuCzM7flqW/XAiEA35Y72z3d2aRZ55j4cfNiY124njz2/a/3o0O+uq/Ya7U="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601294821-998f6094.0_1601294949299_0.3354361658274061"},"_hasShrinkwrap":false},"2.16.0":{"name":"@xdn/core","version":"2.16.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-IYy7xREieEPtUj4iEKhzscmTSpItINSSesL0EGkp/zDhz+k5olCJk0EcZg+qjXUqbb34z5KNKKBt5c6KpHfu6w==","shasum":"b97dca37c7d3ae432624bb21dea3a4752355b0a5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.0.tgz","fileCount":153,"unpackedSize":731804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcdLJCRA9TVsSAnZWagAAI0AP/175c7LZPoWvhNDW8X3K\nSiRFrbA536weYgLm2EW3RH8vv8645tCdYgJyWYNXAAGb6lvCUl5cmftqoJzM\n/LQota701Zh2yHTbFziQaXbKBUgXh5k4ijQ1/Xg8XrqyudaODOeYX8U3DHOz\n9KJsfrSjUO+rI3PjMAzFDQTE5fm9OpRnRQPzos0d6booUJQoWRRjH4EQeGMl\n+mlcyJ0oHCpYwpXOFjD7cQIvj0kqEf4nFE6nnLAEU/QhjATrmpMRcOCYk5ap\nc679t3qATxNiBygA8QmNq2SddKEZRhNw82lPMzLYJxWkLPc0D8BLYHjnS+iE\nVTwHlbiIQ6ZEm7uHXlp7LsR3GdZk2zHuExhqCy+bRASTw1jwYeA9V07exnc9\ny0zLsTUsND+a0KmKR7A/YQOSMV9wHAijkeas3jWQuaQGu1bl2yWyRq38xLgb\n2cRO4Zpfs7uto/jWwSWvOl3C+hvEs60BZaQp+0WS7BtTtYCRNMkTRM2sd9a3\na6lAp8JBNzDi+vjFueVlhoqYDHyvjQssYIGvMjQfTRpZCTvIqdJqsRqTq3d1\ngEPEM7ZgIUbWWWCzRz0HAG7rYyWAUopxK6NM+baUqUqEps6s8Z6T0kGNOFMS\nidCesmSlsLxHVYwVzoEZgpuC8rejbZBj/X9l28mwpeTr4PFF9U0Ph9kwxNhp\nilL6\r\n=MMyo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDNS3CfHFswDMZmIOTALqHuleCjaisRjrIRifLPe5C3eAiEArklsKo5GJvXQQu5czRPoqn6Ku+cDgySuQxfN8mekfeo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.0_1601295049090_0.34244104411136833"},"_hasShrinkwrap":false},"2.16.1-next-1601308488-517e8c7a.0":{"name":"@xdn/core","version":"2.16.1-next-1601308488-517e8c7a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601308488-517e8c7a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jato0OIuTNRRXo/K+B92SoQgC11QMBGWHEfEQZrfU+Q5LpcNUzotY9hqjwD47oAaUome160vFZ9d+uqriNHmPQ==","shasum":"c25362cdd0fcf2690f0f3fdf81b86b6ca8e9671f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601308488-517e8c7a.0.tgz","fileCount":153,"unpackedSize":731858,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcge8CRA9TVsSAnZWagAA7k4QAJP+FlKHZ1U5dnR8U8TQ\nERW2RH4yQfwGKfJpjzqr9TReBGew15xXjzHaEBZdViKu6S9h/pLqXnVIg+Ex\neHimB8nDi8ODoLbQB1ZNRsQDwuI6L3/mJ4VgkD+RpyQM9peM04SqxQLI5J5m\nL54bGsbdhDrBlyXN0ePQiMIaC50Lx8v9WjrzBRxM9BFDwByl4PTSlMdt7/57\ncFPzQQSDmg3T4wbjQU93ooa8OW9ArG8MhSlSJ0HqVPZwp1UgTa+ew/AwMIp9\nELSfZn9twh/cmX0kVeIwLhMMBveKC45Z57wpejytjEBAaa/YzF0gS4t5dIxo\nHjFyvWNdJ2xMMFOLfFxtEwlI/MCYQmT9HPE7RCGHTfGi/1Dvk2nPSbKTtgrA\nfGw00uHXgto7+0j3bnVs1a4VKR2TdvXB+AjBPayitssg2a0kV9kWuDZtokm1\nLVMz/OUc1VLMBdBOzKVF146S7DdjhsZndJLxtntmnzBW4qlnR7XmsTmVmYmm\nC2HLalJKS1X9vfjQOrJLPKd6nL8R93t1M/oggf/t4kI4SZ8awMf8pCTxGXpZ\nRycvAm/wPBvHAP8uMAar9BrikONrqFxPYq0wd+HladzPmYnlxj/7DpU1Gs+6\nK6rH0q1LI2fVtBo+Ltf4W0hBhr2Aga9VMfVBLGPpAeuIb06bFeGjIXLsG2ZG\nY6Dy\r\n=KLOW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOM040pHefrTynSFY1CHABddkV4JQ67OwvmSUPIsWRSgIhAIrRQ+WSOrS1O58aIMTjLmRw3ZpxXhsabR5QbFwrJYAc"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601308488-517e8c7a.0_1601308604264_0.8742842810506422"},"_hasShrinkwrap":false},"2.16.1-next-1601312859-96023407.0":{"name":"@xdn/core","version":"2.16.1-next-1601312859-96023407.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601312859-96023407.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eh3PoMVaRMi4GJIoEvc1mmcAfhTeFir9EnJ82/xnxc61XYU63mMoqcbNhjY2KilVf4wcdbzqyXujoP9VHjKowQ==","shasum":"8d4b55267e723112f7bb5de31ac48fed594dc684","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601312859-96023407.0.tgz","fileCount":153,"unpackedSize":732863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfchjTCRA9TVsSAnZWagAAFRoP/RdKzh7Su9wU3nd0FGYs\npX8VsD9J+7gGsBiK4eqoh5dAfKF6uazafkWNhXRlmJaNis2JYmhhu/xYqaYP\nRbsf2f3LsP9+qbgMcqrFpX6iM+eSLd6ktHQtjUxRbTPFLvzjuhLrduu6dNtY\nsXaieBfAYuNrTRvoVQ6te5rKPQP9u0Sjkz4bIzmDJSB9wvtw4Rg3fp9Jn456\n2pe5EMWxRydBlVUx0oggLs0MHGuppWLV8eg5/PSDjg3dxCwv6I2e8CGaFOG5\nlNS3+aar42NS8+ClFQdXLggFspyY0pxtAXgqNA19Iu78q68OMUuIkGucYzlx\nh/J3Uwi3kiYmPhtNfFSldovCCAOaVNsPMbLgKkBusJ7jYjge+n682+8P0Piy\ndaTwBHuky/ujbjMer21S/r2hHTYU+/mrQAg441Ntc6ErNsdnvWFVQYP3cXjd\nhQV2/sfVNZXWhbicFOFIAVCkmpO5FfmesGGGL1ce5iLFxdDVtCjiANFVvAAK\nlz6Sjt7gFgsOyKPvOwQKnSLs3RuU6oKQwEU08mYlvYN1QcdlmAmpM6sUJWyG\n4c+pCZ7NzvJv8zuapN+gnM/+kWCyyWJgdSBzFV04pVNmgnCVapU918/jbgzx\nib0/UtYnVP6J46nmW/oU4X9LB3ha2YazmtymSnAn3LedBqOQdZBijnxPBFjw\nx4BJ\r\n=It+J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnrwt3cGut4vR5SrIjyuscQ5d+V7bNgtEirm6wdQrFkQIhAJpaNxmlOOPcOIppEYjHuTSxZi/NU+UCAaE8gLPREuLr"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601312859-96023407.0_1601312979070_0.6642239722017274"},"_hasShrinkwrap":false},"2.16.1-next-1601313093-fb8b7b42.0":{"name":"@xdn/core","version":"2.16.1-next-1601313093-fb8b7b42.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601313093-fb8b7b42.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XQazju6PALymAlg7Lkh9YJaGgevGAK5uVpGVe67DnQpjUYzJmxnGdwRLg3Yi+eDQrsajshuqzXTS5oKWlqVG2Q==","shasum":"9ff39ea5797b0d837493037a74af49eef0b57233","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601313093-fb8b7b42.0.tgz","fileCount":153,"unpackedSize":732863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfchmxCRA9TVsSAnZWagAAvx4P/iimGs+vQpaalqkPXOLx\nXlSZMks6zocYisM26gudnDJmvz5onZhOGzXX2oexaBm5I1xB01vJwEo/zfpV\nNXzgJAwhF93QQVAS0SYh8ldHC063hGX3hMr74QLbLNrPVFc5C8B8tHvqkBBZ\n5Tqrnj+UvB2dK27fisROWUOZsr0+2NxAlbmaDmgpGBuK6DbJow5caYSVNXOr\n+GbLufNIvS3heHXN30Wo7kK9N//kkpZy1VE3w6VWeSavvEvYoDHoOuWLJIfE\nyOGE/qPuy6tziTtwivMohwpxmK1u0i536H3u3isI0DfcAbQvUH6GTkGCvKF/\nMIa1LHStgFEXv9kyab7zAlwrzFlpsEi3irRzg7JYW6eu5CGb5Ighn98fSS9m\n6hLEF16VTEdalWO19GbqQLsBRHlXrhnizajCouYJhuSiaKzxUy78c3D0Zrwk\nOTLjt7PltFjYWqCr1F1vBcAcDvT39Bp0ozAZnCR26Szrg0eOUgnc72v+vAlP\nXxXkjRwleAOGMYI4lIxYCrTxFovTo4A49WYjdAOVQMcew4USEB4WJTAJt1jF\nU+Kt5Cg58m805QhAMVWj3a5ioPSCl63g2tFuhWHvvAT9m67yetsAmJyjm/9K\n3sGUPALBwxEqgsU85OctSmACZcBpRjDyw/JKV6zgyw9Qr2XB5kWZPMxu+B5z\nRL0m\r\n=ZOhB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtwjI9JJMI4flaOeYLMOtEt6Qwmg3A7ogM0Rh5g/gWEAIhAMpnXTNaoVrrVeS4jJ01/cqu//g8O8nB9N3E7hl5E+GQ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601313093-fb8b7b42.0_1601313200395_0.5998853436045768"},"_hasShrinkwrap":false},"2.9.1-next-1601313922-ec8776ac.0":{"name":"@xdn/core","version":"2.9.1-next-1601313922-ec8776ac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601313922-ec8776ac.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-v8NeD8XXitHFUvF8wfXouMEaiFtAauC9NvRMXDQHGY55MmYsLk38JFQpjzFTO+50s7fKw49VQASR/b7pRm8K5A==","shasum":"132e4577d1e73557b3cd40ae8ccc58b24ceb3499","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601313922-ec8776ac.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfchzpCRA9TVsSAnZWagAAlTAP/AjSCrphumN6ypFuZQFy\nsdjiyxgqohpHTVw0sQaSgj7UI2NoLwtrMoayOpt96yESE5qwsPkfT0wU0Hvo\nmKie9XbS7VIMzHe9aRr527GIkIb+OPrCxh7xwPlqN4zcol9DH+VG/Kf7xhQt\nOaKuTNciBW/MR965+KLSK0GtuknpBBV5hoV1232DBBtM6QgHmtPhvzxj6IxH\n/xiySGej8NPIL7Ta1As7GYYzmYWW6hWqd6MTT02LZY0OdAMTQ++byu/KPhFz\nKOFwiKxCb+pZ0wSfTC2rs1tIiGBgMHnTHezs6qOAl3zpyXMI4KUmFiRsW6Bl\nq6GrhtDNDxNEKfB0fP/DxPflphX75yHNsWTD4CYP8I9G3JOE56lv1Ret8k8V\nbJMuFiMENJUlfA+UGQA1ZVRxhyiVu3hJz+OyjjrAJsYjcIgcVyt54gR2dKZo\n1vldBLDUy3LZC9dVj0DP7JGlBhOKNcYkJ242t3SjYpNqh1ZkdkvR3ItqM2nI\nbw5yBK/cUmAC1sNhnq2RX9f9QCGXJhVUOAZnZflWe/7LJxCR75gPPFJ4+d9p\nKFwOyENx6ui8gylCX2H7NHOXh+VA8bogjt1uLFZADMck2hbBX4nXJvKPK0aH\n1fpk487s0h9BjUujrPNxaL37B/i7arSMJAxk6pQNQoGIvEbWRmUopnEL5hYD\nUODj\r\n=QeEA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH+iKXM6EPMInAeWS4vJuMGtI4WGOr4qN9cLJ8SGoE+CAiBmg0HlAUjwM3tTn5IljTLzhn+DhMh6YNqBT6+saAJldA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601313922-ec8776ac.0_1601314025318_0.7927209074602131"},"_hasShrinkwrap":false},"2.9.1-next-1601316133-ac7841a4.0":{"name":"@xdn/core","version":"2.9.1-next-1601316133-ac7841a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601316133-ac7841a4.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WqpWCFV7gFGZO9ta/zj5+li26A6LUFgjRq6GZrpLNI8pQczawvbeD+APIe3hoztZ5S94ZZJJxJHJIxVZo0SEig==","shasum":"ce7f9aa01ae528b8a152ccb1705b44f9ad80ca22","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601316133-ac7841a4.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfciWICRA9TVsSAnZWagAAHCIP/ArGTYJF0+w3CCnr9TmX\nIKxkDt3sCi3T4sc+IZ0+igiS74cbvRAqMq+M1UJD4hTEPLmcmrb+4SPEIrgs\nTTtU26iKHbdaEhju15w9xMenjGHcvE1DHPsxJUsmWYd94ywZiLfIjwq1iQTw\nO7nGznbTQHE8ug3b5yJ2CpG4n7rguiXUMqBU5xlN2efzGaLyAuh50/Hq06AX\nku4dvVGo13Bn7gTIxFFFIJqsg2j91ftWvhI3ebTI98znhypXoi4rmwMXrIqO\nWQKpmXLNbTXtxvD+2oUoZ3b73PV5SvrEit2ukSgbR+h74aK0jQv6S4cUzX6b\nDLnc8xNMF2IMq/57/lgZFXw2OZNw1Ea6p2SsOvOC0X/Rg8ecs3A0WvR4Sh5t\npmJCZJTsWzcPzaI5BrBKIUuMnVZvJq/6E8BtM6tar7yqpNiONnKlP8DVbMAw\n9HuTwYZvgZjDPuGfgxcTarc5D/kAPUJVr6guPxbwkI+yKzSu0OQqY9mX8DQd\nmoNxOn1oWn4CE1AC89+286ioS6+2IQAe2AoPqtGVdCc1qYh6/h491BSmcqNx\nj3zZZStmIVDSUVWRhIisKDfIuj9RvQy0ttEkTJrHPWfH+b8LXqiRuV65IzpH\n7QmdTbcK54/ANdNSUamlWGcXNdtj/fxetzBI2aRuoi5/9lWVsRmp5LUpLyZC\nKGdq\r\n=jwIY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFz1+ReKzUoAVARfErqDAZZVlewyhWwQL6/SfUJpLoC2AiAyleWiTZwgEVNsKOFbI+h9zakpsyfNEcYPbIx4KlkREA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601316133-ac7841a4.0_1601316232072_0.9873081660565661"},"_hasShrinkwrap":false},"2.9.1-next-1601316407-1b786e00.0":{"name":"@xdn/core","version":"2.9.1-next-1601316407-1b786e00.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601316407-1b786e00.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qMDTTzXQnxqY8z0m4ldNKwL2U10kbUGcQ1kA793/O4l80L4f3hoVl08x1DtYlE+6Gv2NjP8GuujsHQ1BKxPAtA==","shasum":"5c65378a68a0e6b318ab4dc808deb2a5e73fa63f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601316407-1b786e00.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfciajCRA9TVsSAnZWagAAKq4QAJ2iyHcru6hte7GdYWke\nYJCLIu2SVAFm8+FsF7/0bBAnM4XxMelUcbygDUXl+xtL5qhQsCecNcUj42ee\ndcxjMyE5GId7Ziufj2Wlsg2clrOUI5NMi9FfgYHr1AmhL2M1EEk+1e8Dpri2\nzvNzJcXZz00f67KCqCTScUG50W4OEyifkA2r9jdEXGtwJKvfe/Bp/OuR8HIT\nafJo06AqJmvIu8eAPej+Y0wY7TJmFNYc22ZMOPItl5f0/XrGggm/02DaiJ4z\nUnfqvKPl75TSkrWeq6hzT/hd0BOeweTvSxBkq4kUEhXkJdE5jeua9Iit2Qlr\n4/iXg8v5a8/RaBuFJxgztdV8aAaku/r5V9lAJAPtHIdRNT35WXegeBAnCqZ0\nOtiS9mui6KYKxid6yhjM8dDS8/4ZCsYU7yKnrWPhxbsLkfcQcg8FPXPZms23\njUHnPFQyuDd1N/O5Ij/L/GwUNQ1ZGrsDdOukHQE31oqF3LeX62+BJ6azH6Hv\nNAl1+E2NQFcoVeNnHqUNNYrEfxfI40k5dP7/KtxV7KaQ1n48OFM5A49StBY+\n0OVjA6G2o86CYOa+mhX2GvgW8Vrxs+t9Yf0lV58sb2XlSqVSvm3+82klFFxD\nLE2ubTb2wPFDy1AXFjyVNzl+kWcgVQAiGRGjMHYNKRyvb+AJIp4UaB64qGY6\nGE2U\r\n=XmZX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAl0d+FhmDAF/cPhzvs6/gp9fDzSoa3CYG5xsv29u/W/AiAamg++FyVXiKexhMmigmamoBGSD11YOqM0pW91LoNE7w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601316407-1b786e00.0_1601316514820_0.8167327904665638"},"_hasShrinkwrap":false},"2.16.1-next-1601316813-fff2bde7.0":{"name":"@xdn/core","version":"2.16.1-next-1601316813-fff2bde7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601316813-fff2bde7.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SAUoF1+UEA+u0TIHk6uCvhRb2Tn0Q+q78Kx1po+8RYVMBijfjU96CdJTQLJ2C7Mr0ePr/6VfGdm9FT2O2OKwww==","shasum":"1358019109a962cb0b68da0f61cba3fb6334941c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601316813-fff2bde7.0.tgz","fileCount":153,"unpackedSize":732863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcihDCRA9TVsSAnZWagAAtgkQAJh5z9yl+s5yeMXMF2uH\n49r65lVAfpTbetloxFsxMY99FwvZMGZALl32zM3+GHs6PQroy8Ap5Dkw+yCn\nc3sxjWNfgwMJ4ObwJWq9/N5iz/oXUq1fYo4/vhnXFvtsE+mw9VzAz/DXAciZ\nm6qt6OjT7Xb8kZYfZ4v+kT6bCZHWf7LXEKJAe9PJQCBc85dIR8tYwNhCwIEA\nFEHLN+uAYn4XGmGg3B/W6mnBzFRpcQXR7DJUFI9V8miPg2zx05wUnL8HHeG+\nPJQul6n6+3rqw/4nVinhAz5h0hoz1WsIqdz4I+iesCiaYDLXD9gXfGRIEmoi\ntcCyGI11BzGPm0b1sW5GU6Kjcb2qCkjmOs6c5dT6/TgY7ZbcI8xg0ZpAWYZn\ns2Dstzv8IzzNO0c57ZLbqkPJM+EuI0YfRO5/40s49ZxIK0fcxxPdnG6SfQ57\nETwFBXenXxiwcDFUuBEFekcBWBVkfpUFdvTMK3k4PwOCyK7jFxTLw75RIZAg\nZyLM0LT3dMh3JHJuS0uq3gJgcl+Ef5yO5jikc6x6nt4fZ3VXtsNIxuw2dTW/\nS80x5gt9t2UN2ie9LuOVOqCVoqYVon/Q1NDgH/aEUCOonAAVShTkBcOKSeAZ\nCkXXTWgzJPK6fzKWHSNGXbX1foXvWTs2ApAvPCUXlmJn1P+hZ1tTVkP61IQH\nq/nb\r\n=L1gS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSxkSO8+qredL+uCC37+6JvB7eVbfm2zPneOnaQCFvyAIhALynEdWy1C2FGxBsd8nRs/DMS3ZB9glbpJB79OjEnYc4"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601316813-fff2bde7.0_1601316930320_0.8423702729112805"},"_hasShrinkwrap":false},"2.9.1-next-1601317779-507e3786.0":{"name":"@xdn/core","version":"2.9.1-next-1601317779-507e3786.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601317779-507e3786.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wIz+vXpvQX0A1UM51T8CdPAS6ILayy7V6mnyL2rtUyhzJ9+U2kZvuMZf7KrG1hYaZ2t2sqqnXCqw+oMd1T5mtg==","shasum":"4b6b5fd182a50016e159ce6b8cc28740d083ff14","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601317779-507e3786.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcivrCRA9TVsSAnZWagAAFd0P/3Xy04aIvP8IEqSseKn/\nezJrl0jts+YZP8MOiC6ZsQGmeooaQwR+ZFGmceCFGKnfrFP8335yF1R78At+\n6xzh7CG01D0VK7JP9SBQkaBevGupn+pTE5P4rC/IPZH1PfjZcFQe6XPZqsn7\nipx7Og7/WZfIOQVnz49Hrwgt3Ql28jhva5wAzF3lvOx/QVpOeghkKmiza5NF\n9AXr74i16UGjy1YdxU5obumgLG1CgqCgF2hZVN8tS6dSbcbkuUTtC591Rvyj\nB/RPbY1D9JEXvSdTgbzV2oiwtj3+OcAJ49Mgq6l4JK1avUQDQhKCBafeYPzk\nVs7o0Wo3rpNr3L/p83cwd+8Nll1S4FAqCHJOEwNWPo7zYRkHOOXRsb7BP7iP\nS4yt4nSCTtAF5btzrkPNaBLxUpOF/37mD81UIHHOZFABzsVzgrFWWPj/R6+z\npTifadwti9XR3aOgxlKEsbPRYBXjDgiEtZ4xBm4SkQ8KqhIfUGlQ/unhUHV9\nIhw7QnNQ9DL8pGwI3tyo4OMkjf9e+ea5BDO4phNnJeUCshqVFinTMGGc7RuK\nBB9GBn+Epq4Iw2eLHCGidsy+iSZ88mOpou5s7gW59rvLjRTzv1Tp7YYTKAHq\nIKl7+MbVku4jVCi7d/yMEota3BM+NDALiZassE6truoZ6uRHhf1Wta0QhVV6\ntauw\r\n=PHcK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwIpEzWks3+9cN+sjkrrjP9FPaUt+wUjeYCYST3tSUAAiEA4AODTpQEBu8echCB2P74EBSQbM3ggR3P2dffpjxZtlE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601317779-507e3786.0_1601317866882_0.7382897888868298"},"_hasShrinkwrap":false},"2.16.1-next-1601380450-e61638f1.0":{"name":"@xdn/core","version":"2.16.1-next-1601380450-e61638f1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601380450-e61638f1.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Z8ySz3zTtiZ55jLyv0eDvtzLcITNWkIiBCT/5cwKqbqDr1iLnp/J1A9tEFFSsEpTwvljWKCdoTNREWkqECflBw==","shasum":"39fa4a3dc86cf6dbf501bab8d81467754f5e7c69","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601380450-e61638f1.0.tgz","fileCount":153,"unpackedSize":733801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcyDKCRA9TVsSAnZWagAAP5kP/RJ9E6319KOFJ0/Q3qCn\nOp4N9TRyShORXpKt5af4N2nC84X4tKrCqLhXU466FAFt4Q3l0DBlRqWGQ6Cf\nx4tUzQXLTSkN+QqLsqP4uKsGJ8nxUcgVfSij8ctqi9Vbh3uyGyXL29cOpD+t\nHQnnGXM29OLjituRS8fbYF5ucVfcqlYq82a4YVNXE6HhfGVzoDA59t65QDzB\n1bjg62AYqjr/a/ZRc8CpzUDBNJx+U7/YeW7HY8untvSEW6I048gDIzWhq0y3\nYN8AjaCYypuPkNOIPUwZtn2D9vGFfob9mxm5EhfbPCgHL93jFmVjhHaUO2vZ\ngX/h703yOqGEQ5JSjNJ3ZUxWZNtKaFg++FVyya/F+pusBLyBBXIIU7lzYH6o\n4/RK3/uXtgvQdq6bNo0bxNLVUohHIqJNdZ+VoarVT4udVIFHXJ6ffQ4w8x1P\nN9scCcwdRT5Emfu6oeOzzs2a3mnbUx+n5qOaVg1zlRsUwBEZlhwsRxvSGcAb\nQaPKNj9gogQFzGZzNby2fwSakxRfFdv7KojhwA4ZEA1LgqEr0cGkSHwJiTV+\n6S3Rig+3E37KyTYpWFECdLy7QKbivHbJXzoOGHDpgNDfNLELMjD6ma7yCgJp\nZMyj1ZvnWd2WoA9QUjDYn0ek8yXdrkuNgjyCBtJQFssu/m9dgGSQc5+oFR/W\nnP8U\r\n=lKmr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEDsLRFzjowfaI5V+Lr8Gssi/VpBV6zvmlwlfN/ZV87lAiEA86hsp5ztJ11Q8Ye0kmH+AWCEmdssZnV+nulY5YvoPwY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601380450-e61638f1.0_1601380554479_0.9630103606401879"},"_hasShrinkwrap":false},"2.16.1-next-1601381873-e61638f1.0":{"name":"@xdn/core","version":"2.16.1-next-1601381873-e61638f1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601381873-e61638f1.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-58FX02c/WuxDCjbMUk/UTsGllLQdcoBYo9XlV7eDvbv02vI2jEcjo5i5VIzzU4RkiBqhWwpL//Z+htPtALpFVA==","shasum":"56989fc09e8690e1ed9dc425e40fbf08224f034d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601381873-e61638f1.0.tgz","fileCount":153,"unpackedSize":733801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcyZhCRA9TVsSAnZWagAAaI8P/1eNqvoy83SdOxJsUzUy\nvZaq3dY45GZIqcnw5HKVs2OUIwPERsVhhqBrbcLkigGZpbX8gCDxLyrhinFJ\novqdmcAMqxKUhKBn42FoY2W1o0cGINLc5iRIXNNfScSPiqsoWtl/5p8UopL4\noyGgw7eEq403zq7p/B82UA6kwg07W7g+XI4iOa4TssY+8Y0cvdMbGZHKRULA\nktAJdfeT1SFRrEoRcTvcQjIpW+goLg/F9bAFcGjMbfOVQ2dWmtAL1HVeYxqj\ntKa0WdQyHQAz9nk4IJCIhvICOPO4ZKYaXXlfh5tgCX7WUwpXNCbSXwVSYgxa\nnrqCbSWDkaes/3vA6cYXy7GOCm3gM55PaDbzO8Rk6tjLfGuScOHTay0OT0Nq\nxywPqMsQ4EmgZ3OBPMcpTFKvfzb4tmP8HF99a8/FHGw8WdM0J3/KzdBbRJNs\nEcU5zj0/c9AMhZlrQ9+eacoETxAlqZnQebFlwr1q8CNKp9stAXPUrGVE7NIK\nHH6grHBuM+FpcphBcvgwh1vvgspFJanxyi+4/SQxjjsBT6UGtVVo+zabSygR\nz0D9PXPIOKXbNN1UZ66yDKqFs/K22Wacyz6LCZwD+EXajFqJInPge+qJvArq\nMB0GHeH38Sbp/z1p27gcqbVIqVee1zI8Pc8vt4uTQvmOb2swwNASKw4cOtBu\nKars\r\n=pfXG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICiEPLPpwMJn30XenZQrSu+i2mzifwx0dbqvzCX2pFD5AiAgMTnpV+3OkwY0hZV4QchWX1ppUT7XK19lPV9/2hyG8g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601381873-e61638f1.0_1601381985247_0.49779503154902227"},"_hasShrinkwrap":false},"2.16.1-next-1601388310-50f56386.0":{"name":"@xdn/core","version":"2.16.1-next-1601388310-50f56386.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601388310-50f56386.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3fnlgQiE5Q5NfLYqH04g73ZoPnshUldLL6AY0elVp5KZhV8lBi+BlWi0hEfKHOI4PTJCiJqRgdIGqmHCjTeSsQ==","shasum":"18256347568fa4aa7b44c2bc069df83d1f17994b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601388310-50f56386.0.tgz","fileCount":153,"unpackedSize":733801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcz+KCRA9TVsSAnZWagAA8N4P/iy+rrHPohMNOWOGEAw5\nLlQSmOY3UpFSNbAvVj49O2W9aMU/beunFABv1wcCcdCuVi9C/AnkFjdCxian\nG7ux61gqEDw5OM0+AhVTNldZele5FLalyaoSbo4ubx8PZSgiN7cIZnQsNoCt\ndQKuMv0tCrffTNTR1XpoWkLIdzrg+BYEQyzhuQ6q6En9XBsp1+mR9eJ2tz0+\nVqOmAfJxsUo/dyJ9A+f289Ti9XoKahZgqGyyEdVvsjbcB5hRhSFdKqWPBrhm\nLBwCuQ6Pixhm7Wf6CkRXqijclQAG2646GuPnXk13xnKReIro9tExRf2C+R5E\n+Roz6sXWJUa1EyA5jF5GBK+feIvVCcq0+MZfWaIF6ezBjIHBL3ZsFvODI0/n\nP82MPrwQJ5DZ451V81QAuuSdRmaFn7YucdagBSAngKz+yWylSYqVJjK+LYNi\nUSf/VAfKaMt3BeDau+lTV+uA0v6j/wIAXRDVzG/p/Ytdr4yBfsEYldt9AC0D\ngplCG85IRRJqO/gazTfP7npQiBEo8gQmVvvF8JhfHQPGDZR6KPUGtLQNTCee\nUNPThJJeUSlTiPtwe0S3gk+N57jsF7cFc3eS8yj+Mt/+22al8UjRfaT0A3W/\nQdy9d+qC2e++ipltYJFEEKrjY1cjkfsCZLFuE3eJDky2G0VSwANzZCAvLjkN\nkDZf\r\n=NcRL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZCXMrjPnMKj7oNCe0Iuqd2Lu5Vi9GvR2E0sy4FU8suAIhAPvNLQL6LxdO5TAVhv9dnSBOtaUhz3C4N9fxMxwvt434"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601388310-50f56386.0_1601388425636_0.0979966358012434"},"_hasShrinkwrap":false},"2.16.1-next-1601389644-391a8974.0":{"name":"@xdn/core","version":"2.16.1-next-1601389644-391a8974.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601389644-391a8974.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7U0VhiTaWx7CNENbBnFflXLw6u1vzOJDoWYuOMpGCVYv2jQGYXsb0/HN1xa+EZ5YV/cLmDeojwiTsrWdoj7sbA==","shasum":"a022f4141710649a0a7853120aa94504bc3af36c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601389644-391a8974.0.tgz","fileCount":153,"unpackedSize":733801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc0S3CRA9TVsSAnZWagAA86QP/1lolEw1S4+GqipzQndq\n+mc6o2U08eGxYbieP8xDcJTzmyBPZeeKdTlR4xOa58ap7kJ0qn8ShYy5Dt6H\n3J8YKQ1HXSx/LP+EhaoY5J/ZfODXbkXigitoYAw1POnkko+hIdnHOWVTwYpw\n54zT8N0iOjoLSxcIaA8dxGjeYiJZR4yn0YqXtkTuG01yjthLjFjRpLp7bF81\nKmRnbi4bDNBt18Cuk9vbSIM+A4d6kNC4uD7Si2PrFRd85+wb000uyftsle8y\nN7gnWka9G9zFJX/NbahmgBepeRSSOx/uKmgffmhfD7hqaug/TsFIB1ORazgP\nt37C3q8yEPK6nwH9nADf4cUKkma5wLFqSlibxVct+Bnhz6lGtO5fAZDELwaD\n9WzauObcM+FKNAlWPvIVP3omOp+7sYvzA8q0ft+pTYf2c6HrLf1nROq+leo4\np66zgXX5Ra4B7eJeuqaMbs5RReRi/NYMlA90yVJDTPbXqG/Yome9MqNRhG2s\nPnDRGWnpkVvX4pRc+nT05N5KLoXnj6xNGO8gXnJ/hsip/n0ylGNYubYXWIPT\nIvSyWzoI6XT05NmqLomV09+LFG5qipLVVmJRZu5hXoXHBCBnMiBl6bVmQ9fV\nFNi6B1246lh2Ck+CFuyLIjqBrNsIzUm3iJq1gmr4AY6CGnyVYAa6sV1q1Tu/\nkSyx\r\n=NDKr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZbeXoR1NarK9jRhf+/Cp3bW38myKCfnpZslFuaD31gQIgBYwMMYn8ndCcUr4Om/88wXkwWFUz46lD17i9vYKN0WA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601389644-391a8974.0_1601389751000_0.7892637766164428"},"_hasShrinkwrap":false},"2.16.1-next-1601389898-234c8dfd.0":{"name":"@xdn/core","version":"2.16.1-next-1601389898-234c8dfd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601389898-234c8dfd.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zmMWyQ+uHgHd/WsaTtzH7YoE77c9qUV3NpjzRdnZJR9sZoL/6NE3L8kYtOGjLkzTUWbbizslxr1KRUMZ1N6xKg==","shasum":"7c75c8bf7a325c695e00432329eea8a3eafb344a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601389898-234c8dfd.0.tgz","fileCount":153,"unpackedSize":731343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc0W/CRA9TVsSAnZWagAAA9wQAJpk5jgu58VHA10945QN\nDx3CVjauHDxeyj8VsFKySWgRgf/4rkpSl96zl+ZCnghSI74hCBhBIwxygTxu\nm5m+VRKx27UzfyX7DY2FJjO6qYNPMCfIIKf3lu1cd2788mwdyQk46EAd1G5Q\nIz+U3zaJxHIzGWwWKriy6Ms1P563Y1XKIdpiIdSz27j7MiZzhrVd41mj2YFx\nfG08U8b+wG+/4JxnziUTc333oDtDIujshFRO26S5ys2D3/sVuc0+hegw6++p\nr1X0hm3yaf6JbGfanQYe0gRObZdEhpFS4X2qsvZtkhgNpjO9tezwm2U6/srK\ncuTjZ2VXudRvhOrXvD1G3GPj11zwOMDx31pSx5jUDWebVdygvcrsWGd2SrXc\noO7cxfyafMr46hAHnC+3Hf/RHlQrqvwXYzHjn9BvJ/Aqbbm6cHOfD6fVySO5\nT6dtX16OoukJ79sg/9QmOJvb1XrSlILJj984gTVfkdq8oylfFWUpVNTO/+JM\nCcYcZ5fzANfC972sqRS8ADp1M+8WAQtyO0/2ymaVkLFG7iH/G132Z/i/cxAR\nLK/gDW5UXoHbcW8BLvdsWzepjsgzrSU/S7lnSobuh2TaajBlWQrbRPTFVnhs\ngJXORG2Q2lFU33EaBt3+lf6igaUSEAcuB9o6y7qnudn+dI/tB5MaVKtqrHjS\nk2BL\r\n=T4fA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4wEKO2tXA00GY534vevtMdYkA+6DDEVX8L2vLbNHEbAIhAJ3WwdFpJFdB/oWgxWYpevqfwgneFFpv54zVGuHBTZu/"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601389898-234c8dfd.0_1601390014621_0.1920003822996672"},"_hasShrinkwrap":false},"2.16.1-next-1601390836-d227e703.0":{"name":"@xdn/core","version":"2.16.1-next-1601390836-d227e703.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601390836-d227e703.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Qv7iYqosxqsTz8Emr0WI+q4Bq6De/WL6U/bVoqVqoQvpP9FqtHiIXRYG2ddEMY6jOVc8v6ZsuOWWelc71Ummzw==","shasum":"fb65a3dd3a8de5fc82d90151039e1dbf7d66e900","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601390836-d227e703.0.tgz","fileCount":153,"unpackedSize":733801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc0lgCRA9TVsSAnZWagAAekUP/j75Vger1OpFJM8I3slb\nVrAgVhx1+KLugvZaS/n3epputbvAMXRVn14tv1K6Aru+v0TWd9UguAhOJOdc\nmfx4UDaQgzeNab8dsHBfRAKI5mcYjQz+8FIefTqzBgtKx3dR1AYBAYl2OWpa\nBZ1bGJ23jFDmI7YQCcOI20d01yG8V7r2v9hRqFJRFcI9xui09CJVNQUdT0z4\nYESFbQh/qIx8+o1Ep+MEQS5ZuZ42m1YnzWik8jt4mwsc6mNW0F+TdBPxTsze\nf4EeNnfXAyesRKieByDYC2r9vn1kXJhxK/dL3RRSnUgDQsKXYPgRxVfX3CmV\nMuYZnGY/X2lsf0AMUEnBP6ZAaDuy9uEmfkFQPfSTo9aZoLmMZTpS7nn3JjA6\ndHJxe81FqksxR672jna+3z9UQcmCCQAKovcQs41HO1W15YecSocaGa2K+0PP\nA+9uuL2TyOM9P5hL90H1imPWH5Rkx0thhS6hnp2rNFZqHOBhWuOHNKLHrn8Y\nszjrtyt/+yGQFQ7J55iFA6AXf8DgT4yim6csLGlV6EujwBJdNXeceTpLrj6l\nRlp72aZtGSTnbS0sOQSGScihWn2WY9FeT8xZPmRLzr4E/9Kjt9/w3n2F4zuL\nCy5A7qc2ggSTWFaQs6ThTZhaRlVDPIIU4tpwM/idNRSVNBhBjmV7Im/dY+Jk\nFQwn\r\n=SLnq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAKvDvr+93XfqboTvP+sfqEDmU0og7bgxNUOJjf4+jrmAiAHrUjzqWsWDkePMlm8fyg8yz6hjq2BZZ/FQ7o3Wj/TxA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601390836-d227e703.0_1601390944043_0.23128729304025586"},"_hasShrinkwrap":false},"2.16.1-next-1601390946-a93e6976.0":{"name":"@xdn/core","version":"2.16.1-next-1601390946-a93e6976.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601390946-a93e6976.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-grHXIbGgufB2qaFMSBtbB8EQKSJBAlXJyhni/f/oZmVU9ia1j94jgBaVmeQQ9payRazIdHIGuJscezsjA8lTHQ==","shasum":"5c4b1fcf287769c219d5366e38c0ca992c52891a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601390946-a93e6976.0.tgz","fileCount":153,"unpackedSize":731343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc0nJCRA9TVsSAnZWagAAcj4P/1yyObSZKQ0LHc6jixsX\nlXyGTrA0s3X5ntTzw/seXp+Zy2rLq8iU4JZKf0N2XYilqEhKLymsmEfdtpdo\nEJR9o4Ah0I6E47r2Ykh95JHCZgr9FOvU4LSal+jx4p/ObhwYTP1nw4Oro/Gd\nj+L+Qp9X7u0j6gOVEkkx2A3ebhmHV/3+tXF/p1Gak/HPn2/w9La9HqidMrrT\nvNuJF0qmGfD0CHDSWqXCwPOCy3nLdAIxWaxIiouO+IMoPZZRtq5fK2AUWOqt\nrEDQi+rZqH2oP9pE6K4LqLdmRRPaMXDgThj5F+ZZHm7vOOCgNuRelkNkidvi\nkD2soapD2FaMmawrukngIZ6s1PHl5vWjspTJJCsyG6Yp9qMO2uXRFegchvak\nm3Uhh7YjcApaIq8DnYVMEDhsi/5Ni83rC3D6PfUkKzEyAJZ5ZuxM3rWqAI9s\nigZwqInfKzST8G0xbK1hMKOU5wl+0SErcdwbbQGMKQUGEgbTSWBpAmFWVkhP\nPc7FhRTg6WfPRlRGsDgdtygL/AJKJ7a6dUbI/WXt/7FC87Fvf1jwrp8fVkRN\nwjIYN0luMi+x3zB/eQfrDLFBVH1NiGNs2xsX3vJl7leJKo2psb5D7Z8xwFoq\nFu+jai9FXHu6ucixxTM0GXmZZMP5yHOsryDoGWMG1DSLOWH6Pg4FLXJkyExW\nSqJc\r\n=bCtK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDx9OVtCyaG9PylZ12b7U53Rd5Wch0EgyrfolmXPJYM2AiEA494m4UY5DuKXwkevfPxg2BmBGrMF3o4VRup5cX46YgU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601390946-a93e6976.0_1601391048858_0.4588077863973852"},"_hasShrinkwrap":false},"2.16.1-next-1601398946-b9c0a712.0":{"name":"@xdn/core","version":"2.16.1-next-1601398946-b9c0a712.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601398946-b9c0a712.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mzOUPpsfX3hVrL8oo7AOLkacH6KEhgfC3t0ASQRoFMdBXQ5q/Nr8o7v1f9RRbnXib3fP9YNDc8XQxBDsYLJzjA==","shasum":"8a8acecfcfd6ec8a3aafe7378929a3403dabcd48","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601398946-b9c0a712.0.tgz","fileCount":153,"unpackedSize":733801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc2kfCRA9TVsSAnZWagAA9FgP/2mdKChkW6qKUXOgc0ey\nL3PlBH36vtVe2qC+wi/zP7fPfgJiwLs0CZLt1kHYHtEk0Gu4V2/vI08+tokE\n33IC5O8ANjQENx0JrDD0oWm2+q/tsxhp9oMk/d8BRCW8YPY0jZABGmYXKQ9f\ncAF4j0EjeES8TDaRX84BSdRIRfr82apAfnGBTVQB11IaFNySt+MNOKvN3MXC\nPF/N7pxVp7lRWrjL4UMp3prKC47NhrRHNlBNacOgEVU+YuoGRSxWRnu0KvTY\npu5lHNlIDKM2IKsAQjkI/bcLvzufuMaAq44Ff2rBjkKQNdRdv+kdzJCncDW7\nBOMOcUflt4q3YAijvb4WwOXkzWDAQ8p3H0bzg0O/Q01qrUautzIgd4XP9ob1\nlVDVbpyB81v/9sPlGGJTLCQ9wZEVXWU6r921Q6XaEbeHPqhq2ffnLbUZDf0J\nu88FWY6vKDx+k3HI8tk8RflRHaY82iWi0fcXPtjVhKgVQrIChk2XJvN/yj4L\nqLaYdo0IxJe/0xFELzVmKzuwGlK72jb5mdmI4wrAt8QW97ZGCoXBG9ci7DYc\n6klTQZcFjXQPZMNY+zBivKo/r2yo74aFeiDtFTLq7M9iwQ9HcYUMHaeyaI3y\nrMevdcyQfaNvEE/sxtHaE1tzci6qadwVqtOhsLWyl7AbWai1kqLMgKIwHAau\nimvs\r\n=5hWR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6WVAsPjoS8GjGeGDBN5tJqjYGxdC2aYq0EWRerYvrywIhAIZ5fbkRsmxFIXN9Vb4qKII5lg8cr3zlEyBGqH3UN8Nu"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601398946-b9c0a712.0_1601399071385_0.9545668038083723"},"_hasShrinkwrap":false},"2.16.1-next-1601398989-d37be773.0":{"name":"@xdn/core","version":"2.16.1-next-1601398989-d37be773.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","isomorphic-git":"^1.7.8","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601398989-d37be773.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-biSEgn3d61PHIICwkGFEZKEPhk5O1ivyQl5YbQIVM9C7apRW0boFugRFi3CheHy1fTMZYBxVMocqzSTGr6uzIg==","shasum":"abf2d13a4018d2d5f6618b1584817d93a5ecc00a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601398989-d37be773.0.tgz","fileCount":155,"unpackedSize":743841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc2k/CRA9TVsSAnZWagAADUMP/AvRAp2xgAcAXFzr6kHv\nTxosTj3s0GGIznyPdEVIwFJM9ZRPglfM4SemjYKq0GHpFjRtB15NAC+OTKIx\nrNqvX9Em29giKL/OPlkLylld3yyTdah/9Zmnks1zo588J//g8eWI707/pXFc\nW6QJxDFvmn8/+CXK+nn9xXnkeBotqDqib57NRLJVAtV2Gu7dvJTH0z3O78C0\nRL3IJ+BiJ6EbyDNXZAp4H2OtCrxIZ9hV0ohCqpsBTdXbd5/ODDHHAuvQ8Y3q\naEpEddpGyrruP93+sHZk1vvYvNrPL8flga7kh8A6i8z9fr3LAMHax06KO6DM\nHm1jP0bcba6l1HWc8CXk25wyCsDhi7ya00lr01L0qyPaXs4ukCLif6No4IN7\naBjZTmu17ta4cyjuqZh8I+e7EYDDi8pYt7MqRlbP2u1SHXm8QR54/6kyMRHm\nMVGSjMfxXo1BeIhIZXIgUFyzPL1XSuwh1AjiaBPP4QPFgfnWDflN68562HK4\nXRikMIdTqGUINKrpGWQFlQnQ05u2Eyrn7CakPtEAOE7CoYcf0Mbb2ItuOVaY\nj0nN9DfQfCI1e90yKFv4F93eNm96GnjMnT2KQoXWsT0tiMEhaF5Gc+zYx7Gf\nvR30/szrP8kI6GsHogBFbiTztBMJ3MMsVeQgZhYvRbd02XIFK9woDVrYoQ04\nN2qB\r\n=CEAC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrr88iCGBpnDa6BJXCl9+Rzhijsz5KlOH/M8UZOxV/ygIhAMu+EbI5tWnE+98F5RRxXyfUE8RbGYyrImNFumqqm++T"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601398989-d37be773.0_1601399102671_0.7131041724263698"},"_hasShrinkwrap":false},"2.16.1-next-1601399009-cf63866d.0":{"name":"@xdn/core","version":"2.16.1-next-1601399009-cf63866d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601399009-cf63866d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-AXJgCUuSKQI4fCMfmPggwGiarqNXyw3gs8iholWgMfTepcGnWr66hO0b7ZcAc19ec1ALYOK9IrvYiyQQnj+o6g==","shasum":"820099574d8dce0319eece22b364c2e4849f2195","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601399009-cf63866d.0.tgz","fileCount":153,"unpackedSize":731343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc2lPCRA9TVsSAnZWagAAMOIP/2tqTA9TRZRe9UifvbQU\niwcf8k/+Gysa1qCrQ4f6iCbJ1AHvb4AEssnKyMej5vdLSBVnUI29/mUz7bGq\nPD2jgcDvu9AU473yNtPZXiOuqG++X34qcqbb81Nswx8z22/KiZgtlDxm+lx9\nzEMWnURDrfcldC0PBkE0ptMG3jk5/FLSafJiuEmL9u1vOMS186Z7MONSCx7c\noeDxASdj6QAp96GKaui7v2t9CqGnqynhRZ35BemG3s31r7e92dCv5M0pJ8YF\nnyDnO2XyYTAjBkGNC/YnlM0fiaGEVZJsDG90rLAiiIAlWUdNKHEAIeyK0TBl\n00tJT+QDENmXq+ECyGKq5LnsiJUay4pRzBvTWu8emofI2S9sKNVm4v8I/6jp\n62yZDIlloBPRdowie7QZIv1+uyflFhwOr6WGjp05Mv2mS83glLV6J4iOnw3M\nunthpUGxFb8CfPNildh46Wav6NOTGigY4KC0TnwnEYCA+uUpodESZI1bNGcl\nKu8eKlY1ZjG4IiUyHn2m5f9C9XYAcU9JvwLNU16uaNZ/mItvFwB8dZiegPy7\nFwvAkA/6JbziKq6dnCfjnJMVFiMvOu6kltnBYuwP+aWmhpHiVkxdHCBUM0FT\nuJvW+L4JbYcby9dVTy7F2R/EwC1H2DR6JbUdZseqRIyVszz3ySupEYxeDDxW\nbJHE\r\n=PQ28\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnPSWiiqweaNb4C0wHbQR/Qnc9JzLC5Cu2NxxOzEDDTwIhALjidk+75AMy1IGn1WhJcmAjaPN9A8BSH3dbeF1ixMcA"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601399009-cf63866d.0_1601399119014_0.33673719023088"},"_hasShrinkwrap":false},"2.16.1-next-1601402231-69ec0d32.0":{"name":"@xdn/core","version":"2.16.1-next-1601402231-69ec0d32.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601402231-69ec0d32.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aFp/3QdvnkiRpup4kAKl3kqGhj/LkYT5IeudEYmcGJO5IkUTKFfc86dTiLp08o2AyaadetZObfBn2yOWBvyT9w==","shasum":"bf09c4eef8c672dbfd4bca0b53739c6bfcaf7a09","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601402231-69ec0d32.0.tgz","fileCount":155,"unpackedSize":743080,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc3XmCRA9TVsSAnZWagAAdxoP/jYkpi4OwPvrpK3EsOKK\nalSiNrM7KTok8WY89DdGuKPhtIYBdPFLDDp1blyNvt19mx6Yi9x1Ualn+Cz9\nqnPHj/O6DtJGe00ZN2uSk3jopB/uuS37YqwGvIL674GkFH3Q02ANfzLuXNoM\nV1LVc1yHK6/PhF/EQ3Out03KybLb0U+MyOb4GCOX3+4Cr6IH6HMoZmuq8vK+\ncqenMAa0gP2j37QlEGlmK3ej7ErlxivGj5yAb5uIusKyuaVWgepCXm1JbJ6g\nz71KsME/9iUOQcDRtjGA01HThP6Znepid65rsr0Q/EF9LNXuOO3wr7DVFgWP\n2Aw+XEslGgAxDW/c/R9TIRjk9FAKy76nmozK4ZCzzB93BenUls7iKAprkROY\nLTL1tArVlIObGqaR9bQ3mvtnLnuf82xD0twAn0kQUk4VtYZWTcevPRg+Mg9a\nOQ3pS6u4SzKN4qM0PZHOrw7dVQ4LFX2POxe20i+xwRcW0x+6cjod2kztxM1e\nbEkHJu3kZZ4hNr9eOisHHgNc/EHzKVHvxsUxBaHYTKfbtCTHu/F2WbdpAchC\nh71PoQL9W+FNGt6hyCCbnFptNL0UpKXZn42OeFv4d3tISZaaihm4wn0v7+/0\n6+bsIKUHg+xKsAj1iNLwz+tiDDdophzVJZEkp0zFi1er4iSoZFAVlKqlD80B\nw4PI\r\n=RzIE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxBPlcPPkuHz4NhlKQlzwmLhKL3YAq3OaDOU+j/Zm0eQIhAKg2/XRJB08UsROKfT7Fm7Xyzvgn+O7hvgYcUMOzbl4P"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601402231-69ec0d32.0_1601402342194_0.8989755235150783"},"_hasShrinkwrap":false},"2.16.1-next-1601403575-d37be773.0":{"name":"@xdn/core","version":"2.16.1-next-1601403575-d37be773.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","isomorphic-git":"^1.7.8","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601403575-d37be773.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Wb99B7mQPakKf1QnOtCDt7jZJeba3qheAS2cHJUEq6SuF+8810fh78J67JTcOXb608+YzyiWhalFJ1ioLg5gLg==","shasum":"aa5feab84ee3bfcc48832063413808d05e719a4f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601403575-d37be773.0.tgz","fileCount":155,"unpackedSize":743841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc3sTCRA9TVsSAnZWagAAVskP+QDPVdzSw90VIjo1qFNL\ncwLoQ8iejZTp1p/0NeGOAtOPDYP4bNzBZb9hALD0vPzfRdJLbjk2CDwRknz0\nFFRSSOasvxk8uTtQfDDtLZ7c3X+mqfU4DaSKUt3w/Upu9qYEbjeO30DrnHLq\ntDWfKpkz3FWbDqYpT725RMNG7YTTN3hbhkSwNcm+biWHtNDGACB9NNjQFf3n\nDh5l/Sr5yq8Scwiqo1TrmGIQFEwg8+9vtOz5VXGLw08rJ1wnKEDfd9/Z1Whi\nGimC9ursw/9JMkLx2TtKm/lI9sjyDz8HjXwmNfdXMiMceJTABZYVMPJO2xih\nLhT02BvaC8H6OrNaNTH0dK+1JlA/OSxWXqaL7sq0/lnc5+dVTETMPNeL+JJ5\nl9/YtdoJ2nkGpkv3grh1M0EnUJ9AHZVFTu+QLIQjbFtm7GvVF+a6eIsAzmjp\n777ScExizTLONVa16BtnKaHr75Q9WoRBVUftX5eXrb0stesEqgGVHgpsgIo8\n6Qs1IkWSfsAQukKj2X8vPovsBKw2wyhwEDBAR8N6qDBs8HsWRrdiR9BDUXhY\nWOv0p5HxCmDpZnZ6PvO8sfW0Q+Qx4vXqrRargv5deGkxflAvZ3nSPGT5vy2X\nmWkdSfu7LbTt+N5B299adbA7bVG/5Vz092scSLr4hNf8JHPHUJyvMW5UPIpp\nx+Ew\r\n=eRu6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+E2rJNwUnGsiIMzU5mzfIuJrsTw6As+PWKZO0wK7QsgIgHkQ1NOf4vvT4YDjNwXb7CskK8Q8Xe1tBtirM+r+8NG0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601403575-d37be773.0_1601403666993_0.06180098835192349"},"_hasShrinkwrap":false},"2.16.1-next-1601404887-4f794537.0":{"name":"@xdn/core","version":"2.16.1-next-1601404887-4f794537.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601404887-4f794537.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-P/o3/XSmZwv7EzWIgrkgr7L0o3ozIhJADx8L2CsBbqsq2CqwUCQJXL4AMjKIrm9bBpysFxm1mIj689Kvq+wA/g==","shasum":"5b75c02459fd0b72c21141eceb9345be6c07a86b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601404887-4f794537.0.tgz","fileCount":153,"unpackedSize":731343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc4BECRA9TVsSAnZWagAAV98P/iO+vUpG/xbjV9LgQbS2\n4dQYseK/9d8ZP/zKJPby4/LzzjvFw6MdhJ2fksvOob9B/lcKpWZlngXxF0fS\nfbKR2JHnnkY5sT5j1RVGvmfS3fojHno8gwOIe7Olh+sqgs5vkFXyaSQ3nMoA\n+xpKTojiEVT480/mvawRFeOzsaOL13ZNms6VmbWuKoNDwiQEhGY5ERrzEYkK\n236NGxzL8NlWJvVv+mdfAoCvi4C7TYlekKjpqi29c9y5YtcRKCgzfkCNr4xJ\n2AIFXCcaFy9FnNFHJj5nHCQvqddoyi+9QyjpPNd+sGl3LY0OXzjav/BrawVL\n03qyrHF1rmjxG7RJuUEMD7LFeLYRQ4jX4zeHjlXYGh4L6R4i8iu5eK0lhxeW\nyFDlR+OV9j+PkwsQDvGo5Z/I+rL12QqKrWIbdr9DQHeLRG5DBkJ8qI6CIZCl\nu7nCh8EfH7PWmpZHjQ8WBTNmuA46Cz7QHeYUmAs9mAr8E5F2lWu2iKhtCrob\noYMNaCIGgwsE85DSkzOZjiDYquj2KqNBeHcEkKli/7dV6dWar0IMvBUYAgqI\nONsHxQ9bTD9HrwXTIUmenSuCzOJvqNou5dUyBcJ+/RKc9tkl+irpo+K5NkBa\nsypg3AWf+uk//mzAP1oZScXJXgItJZBk6ZhNOcky39Gvt149Qj7hWn/mJ6gk\n7y+Q\r\n=b2Dw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9n3/JAhs54uR67JOgIZviMOAH5FmS+h0otdp3wP0xEwIhAMT4FdNmGw4q8LhZzDUs/ecNJ9rPSyXXZranlK97omVG"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601404887-4f794537.0_1601404996157_0.686411188833022"},"_hasShrinkwrap":false},"2.16.1-next-1601427429-cae0c4f5.0":{"name":"@xdn/core","version":"2.16.1-next-1601427429-cae0c4f5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601427429-cae0c4f5.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jSDFWKXCIKODvDe6qlreSSpKNzMy0SpW4OTYu6JuaCIM4EilSoL7vuOlKmTc8quDlbf/C/PAiTyq3tryYshxsg==","shasum":"76295d981c176ad1429d4c34aa11f5cfd87cb656","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601427429-cae0c4f5.0.tgz","fileCount":153,"unpackedSize":733801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc9hTCRA9TVsSAnZWagAA1QUP/13SlGav1E9yxNizihBs\nwozxWA/FXOaBbSYdsOiRSsrT43kyjlkJd/2TTxpzaTUFpMZl45fdVZEG/CcR\n7jGBeKSipsqqBm2Af3xKWwFaynf4r0sKsczC9EMUmAEwefV8V6dR36lARihl\nd34pAZvyJI3TzejE8U5CVI68PL053F5fE4Z+XSP9mfIstUVsOpt4Czys9eQ9\nxRiwXikAdxjvZrBIuYnc8uIQfy72G0mw4N7LfI0W95EjLbV7smVmdb/y7VwR\nJpTna5HnW9F2/DxfWseZiLeU4bHVcgKMHNsZEoV+L5eOVGJSmGkc3fkN1VPu\n7Uz04Wp9kxKb8Ajyi4Ae/9yEWtV5rA7So009/vkr0ac9/tkm4gxQhWQSiWYg\nBaetI2xldI7Mkr/brD8loGsBwvb7enmd657Jz0lUSGqG+6ANUX/E3tgYgCCU\nPLaH4e/d0GDzOLpwrucy0tMwnqI/92FcgLBq2wG5iO2Yb8g+lmbLRQ061Kcg\nYMmFU+3DxRGTujMZPINXKWyCtdcrdP8feATiU5lDPmzS+3FW8rZ8y4u5c7/v\nSOOh/3952VaoUgE/yDVz+XRvGb57dFeAFwZbwZ72D+rzQ7Lm0j5mrD/AwRd1\nRJ//NvBCd5gE0JWpI+4gTzzel5HOFWCK9e48KgFov5UyHX0Lh541ilhTQ5M4\nz1vH\r\n=8EC/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9nSc2gD79WWRJGlHOmCPUil1OIPw13dgk9+9EQkKuKQIhAKKyAPhVwCDoWXJ7NR5ffXNNZfoeXl7ns/T710bMljus"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601427429-cae0c4f5.0_1601427538702_0.46415757476963826"},"_hasShrinkwrap":false},"2.16.1-next-1601427532-e5e45590.0":{"name":"@xdn/core","version":"2.16.1-next-1601427532-e5e45590.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601427532-e5e45590.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tr4jQjBl2yiBkvuYYKjmZRxz321yqmYPy2GuujcBGRsKzSatLk5hQwu8BeZRHq6y8lY6zh+UopVKwqefH1hjnw==","shasum":"afb6ccbd2e039a5ab6df6c254b500bf7f036e30b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601427532-e5e45590.0.tgz","fileCount":153,"unpackedSize":733801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfc9i6CRA9TVsSAnZWagAAWqcP+QHXAdM4sOhu9txqe5QN\n73HdFyI4BeX4YYlYj8s1M454gc0SYSCia7CwjLYNApVyJwAzoIkhgJMunNM/\n1hzr6gzLngUNHEaMx4z3hG/ZTm6wJcu0EMKt8n//PTOna+YJUPxJpbtTEdaM\nZM1g0+g4/dRdumwR3IT3l78VIa9xTtt9KpEs1/a7WhCjotl7BjaI5PwOZ661\nZ2bleh3Cak6bf78HrSJplDkGSGXN/Dyp6w6H3Mmn4JKNNSgzNUmLRgntGzBd\ngOC/FmIOUeS7QbaCkOxns3744x5n9iAaaY8Co6YhyFSMJtdyUt9pWU5AQB8c\nOx8gPHdhGhFOSSamizsjF58MCOz6V4Mu1v+TFNeePWpYj9uWTTl/bSWfrgQ6\n20Zg9qVd8r32dKLA/F/bxPZ9O7jfv9noasmp/R9CIKUgeNPbAgeSk+ewE2vE\ndc/oyDhDM/X81pBbbJjO5H4htKQVsPr2UyvCn/2C6rpQU7v1B8IS11rqZvPW\nmW2XXY895W3XjeQABd4LniHXk0PTGj8s20uLZygNSeVTIuQSLY4JmaPEYm1K\nAjYXtksmLfd/l/Hn0ha5OXUwLywfPeV8D+oi1taUt2+dEUSPrQ4DWG5e+1Sp\nVxeAZ3qWnVK6rvJMFBj1Z8ub4HL3jqTCq3KNVOaUs81ikIcGNrsmeLqpa5IZ\nXI0/\r\n=8nCV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICsX8GLVjjAAWhnW6j/mmXSan27OK7nDW72sI4bODnjYAiEAtVS2iw0cOYfgWGnIZ6Xfhb+Ef5itY0IRkYci7YcACrU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601427532-e5e45590.0_1601427642100_0.1857694385781803"},"_hasShrinkwrap":false},"2.16.1-next-1601453130-4d26bb32.0":{"name":"@xdn/core","version":"2.16.1-next-1601453130-4d26bb32.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601453130-4d26bb32.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-L9rXyAVap/LNBt6QUHDONHVVWvyYNvqLHRusGX1foO19+LYWIGDSreb+ZyI8ejUz2JUCMejgPFhm4w3AkS341A==","shasum":"93ae761b059477d6fddd514fabc3d2d9cdd5497a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601453130-4d26bb32.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdDy3CRA9TVsSAnZWagAAEvIP+wY77wlvntHHolKz6VS/\nGye1PxSBGxTdC5vzY8wS4VXqSnH7b4scDp6NVOD0Dj53bg16c30hOYsQ3waS\nrs/M7pmNtmxyJy2h6u3kBNKrmD7QIio9I1AtaE7b2Pz3umP600JfNge2IHzc\n1x9KDpRcha3snL2EsKCY7BrrX6Ho2Lx9LKy1qxouE6ZkHk+yid5t/uLkbG4n\nK+JjpBbYbZzhHf5eqvc2yNylu1Ein6fXlX8m0AjeNCHfQBaI8k2CLcgEqsv1\nrfVrDasqJn+xwL+Lj+iP9xF1m7Orrxu6LsxDAvwGqjp3x0PSRYDM3K23DrXI\nKwUuuTPrz3VDKbY6+TlCpghbXF9i1LYCXANbTqidjIDs4yNE+LBjJlVvbc6I\nDLr09A0YrP5yP7iylOWZmVV5LFSQjW0d/iUXBEGVzCDesYhC/5JnEjZ5z1uu\nP1PesdqVI9rTxXVH4a4euispKGoXSbQrh2rLN9XIkzFUv2M8pP1nxKY7MhR6\n6x3yvUlLpdW+uFVtewscoC4sJqB/SpkpsNYD8SNHvtNXj6pBx07kW9/0dHxD\nTvikCs01d2XJyIQ8djk+GDj9SyIrrypFWMqgdXbfZlsObZyZ7ZZGSiQDpoFF\nVpvl3i1aX+U1CcC+00UwVyjo+6Uk3CFwmEC5VPic/iJ3ZWUZc2As6m7Gus04\n1gJd\r\n=B+RG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaYs5Qu5bk3m6riQEhS6HWiFnRwTTGg3zoOGiW5Dn5+gIhAJhoUFTxNoAS3bYB3eMvGxBhVGp+wrzrtmyL6DC8SFTy"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601453130-4d26bb32.0_1601453238371_0.2047881377674734"},"_hasShrinkwrap":false},"2.16.1-next-1601453363-51973e5b.0":{"name":"@xdn/core","version":"2.16.1-next-1601453363-51973e5b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601453363-51973e5b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mVahRze3IjE3iy3xoH8yEgGHoObAzvayYHKhSiR+oIz7EnBCKri2v0gxiDnQnJAEiqe4+bNpllvFeCIg2dmKRA==","shasum":"5edfe3a58a39e82ea412bdc79358c3d45bbfcc8c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601453363-51973e5b.0.tgz","fileCount":153,"unpackedSize":733801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdD2rCRA9TVsSAnZWagAAU34P/1fkRHKP5u0yWfzbCZku\nxXpljlV/Oq6TG9v5oU2SSsjksMWk7uGf0xaoqNYR02UEC932wfkWbxXV9cy9\nagqv9/HOQ+6hmHHJVj+PYcVU/Nh/OEU/78DEMHJNPD0WkLZcFA2cRAekKoLJ\nYu9XFrPReqQ41aBhpEUG09judKfSPSm/PaPv++ajGfBp0wl6tsriEmkAo5Sc\nJZYv7cALOaw39jVddG86IErnJdsNxnbQQ+JgDK3nZtYXp3Ij/y7vx/c0/7Mo\nVXtCFIqmwBqoFuIjn6LtED7QoBdmNIzQfcly/NbKjnbmpxTlTcEDqo349iGz\nkQbHs2RtN1SlXwYIHHlYiQWvcUjFXqhcysrrSYaDN+/lgK6wRk68HUjdCmKo\n/+8mEZkaR+R+978cCWR02i3PRZldn3ngkGyR8kShdmy7on+GU/+MjiaPdLW6\nExGPAO3zjz6Fr1MIL8LhgO6u+9CCFtjzrHollY2sPUnb4y0xAP/7GYrOt2BJ\nhdjc11COMx2YajklfY/nV+n/laSJyCrqwxCX6DFvFNoEZyZjIIuZpM/f0o6Q\nrowAATWlIw+Lf4XuSJgMqyUj6AYcWgNsPsvDPthuo4I7dVduS0FOIc0ikx3z\n0crXjEusb19TbjfddajGZTazqxdZXiWhbJY1UKfPLVDE+qFM245x6Ro3c8Qd\npUgE\r\n=2Jrq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEe9mcV8qAqh+LjYcEo3xXTO0XwlicROKr0471sWFhnqAiEAt8PlWEIy5A/imyvaTziTctW6yT+RDE3mr5PKKNTa1yE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601453363-51973e5b.0_1601453482930_0.6769055956375056"},"_hasShrinkwrap":false},"2.16.1-next-1601453604-aa0c86eb.0":{"name":"@xdn/core","version":"2.16.1-next-1601453604-aa0c86eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601453604-aa0c86eb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EE4JcMYV/cPn2SC5szgzpIXjByDLgM2OuasQnV09OCwF9WFIxqBf9xySVvCVCAX1DdJqibSFcBK+IdPr6J1NFQ==","shasum":"d5588bdfcc65503a7440219925353cb7ba88f53c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601453604-aa0c86eb.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdD6VCRA9TVsSAnZWagAAi8sP/0Gna5i5tmZyChptL0p6\nPET6ZqI7VAlL5ZiV/LN6dEZGtkxKdOTzxCFFVyuTxI7fNFimoczCMAHERKKn\npmhMpfDJ2wal/t1AcHwsbmqL9ieopzPNmvAMj5NsH/6nIUl5oXNLxj+XvueV\nvcE5hTmAGOUWSySVJEeEmaNlqCsXvNxxXXGAMQ6FvVShGIS/v8F+z+AHw+DM\nqctASPGrbKK3OGzwbEf7quwgfxpD4DT/rkoFfdVpfSqeQDFVLQ/G0NoVfP63\nKJsCcpu1URXC96aQfgktj2LTu2T3sX8bDmlaT5l0bKTZlrqghb9JH2I675DD\nO1KQ9au6q1to/Lcxwb5MDFN1PDeYUVfFhHLkop69MtIrJ1AggyY7Y7/fJd85\ncFKC0blpZnD/RLDxaHohwiyyChwb7cQVrjE2+3yUOd6st8Wq+R0wkX1BxAaf\nSx3i3xuf7ah3tOPx9nztSPRMfiOTBPxRT+R1ffR2IKa0NVaCkYgQgY1MCrAf\nIOc2NTXqIzEmT0ObuLq8v4u0sM7+RlYd5g40Fw92AeJALjYz5OCsmUlnptkb\nNDUg3u8XxVRv8hIxBspzvZi7XVo8KeYZ7zC7ntn4fTAGPCxxihsjTH09qz+1\nw3XpB79mVaz/VHZrd3CrQt1p+It2SxcL39vkQd+dHfM2EXiXN0a0Oejx2Zlg\nIZNe\r\n=21+D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICFi6e3hNt8+ydIbqY1LWt7ne5IT6qoYXAzSiVX9uCw7AiAobdA3bou2LSWzi2mwuRRzsvXkW0zfGVNRCSj3876Vsw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601453604-aa0c86eb.0_1601453716551_0.8076207391683039"},"_hasShrinkwrap":false},"2.16.1-next-1601463258-f6c34b11.0":{"name":"@xdn/core","version":"2.16.1-next-1601463258-f6c34b11.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601463258-f6c34b11.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-u3zLhQ8CZPEeI3+wEXO440Ial0t7yehIuYbkZc3FYTlekZIvWe5zFplBR0rCwab7z8rOpC9dS8SIKQDail9ROQ==","shasum":"6c1e96bdfe7b75a384e6e94f9b668e9422772d90","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601463258-f6c34b11.0.tgz","fileCount":153,"unpackedSize":733801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdGRDCRA9TVsSAnZWagAA+DsQAJMbyqnaKyvWUV3J6bqI\n/MuwlMb2BM32jO2xPDcxPzstHSxHy9NqfEkyc9KSCTgpyDA+N6Perb8ESena\noilwNaM41KnxTCdxLmZqdRT9jJSm7Z25C2Se0eQa3GvGghAdbhWPlGmt00Yf\norw4RgdRPC5iVnwPDirifw/wpFk9DFRkfWSv68F2kXphRxeDXUh+S+EeNbRc\nnPJXM6bCjlDpPUuIJarjgdDz1Ta0HWrj/t2E4Y6lnmSPFvZR4fPQNKqKofIs\nUJfOYsxIexrWHTl6y587nCyrrYCZlkDPj1I0iIEuYMtblYHLW6mrcpwtQY3s\nesZTnVxxSK/B/LaqAnWvl/TCbcZ3emPahivPYUWg4qLew8pULGxT/pxxJp7J\n5Ed0JQNJA+4Wkn9BLWPhC27oJ9n01Kfh1lhWFUGYQ+OACiibgw5RW6maqJlp\nvc13JOzSQGTjCcvW65HMrQMoaBvS0JrOskKCJN1GSTkBzH3RRrYMJvHdS+cW\n3j/I40+hx4I9q08DafxIxnseFXUwbZzpjo6pysjVxUemH1j1OuaQ08nKvBzK\nA7K9Uf5+ececMKVhRtOxsIfrf4Al7ijI7anacBQtyVNJ877CnNJsqb3bjUtc\nkTOwi35uWUGv+oDOUxRKc+TjzcmGeojAXTQ1Ponilkdcn5iYJ/JRPkG5YI5E\nVl8b\r\n=0BQh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFAH42uup/hyIvJSVkal2d2HiccNJP5vK/PmfQqo+aCTAiB9Sifset9vs/tjl6keU+QpolEBK1reA/OouGWYGFlA5A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601463258-f6c34b11.0_1601463362964_0.03411347562532718"},"_hasShrinkwrap":false},"2.16.1-next-1601463771-413678fb.0":{"name":"@xdn/core","version":"2.16.1-next-1601463771-413678fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601463771-413678fb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eQ7vIZB+X/a5kYkFU28hhGzo2kw7RT+F2n2+WKZU45lbgv7dw5hvhLvqxljZWwUmk8rY2jmvW3dQJoNcdhIYGw==","shasum":"0711ee5e2156d3d0090d95fa5133bd30963d4648","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601463771-413678fb.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdGZKCRA9TVsSAnZWagAAjtoP/3OBrMma+atpZ9wElkAY\nwqQ1KfE7EfuC+DwJPqg0RxZ+poy9/NXwqqnSQS6f+1DWy4b9YwA92rHbjEac\nEgET5r2C5ztlQWYRx65OQ1zPEaiaBVc+1fYO8e4IXPrSi6LEjWkOO3Ym66j6\nJDEqkI/udzhrbKk7FkzntGGZQHjLNYcqsEe9hv61VRhp+JdaLxoARLRLTpOO\nLaKU8uoLXUuEWxSknAj9k0c0hWJpp39xOmn6lwvMNcR8fBSrDUd0uL8MmEbs\nmaoNrKcxvJRt6Ah81yR0hU+JNjEY4WN+Am0ncWyf0EPUXFo1YmNj5M7nbV9a\n7heUnteV6+4lUmGtvxRgWv9kB+C18+istEM1OmVAj+Poju96YTBrefHTZLx8\nQ2BuWJfCR0HrSLX7guyUvVxWHq0PnnQW1XTGs18frfCGjec/InWsamokTc3G\nFN+GKNDN5A+fUI+K1Pan+3sFkclsBWNCZua99j1/eVGsQyEqbzk1EQazJo5e\nDTTjTEXrMsADp6nzVx3MKQRfhifUlzy6AzywrUyZHzfYBKEg1byP9khFjZcG\nn+ls42YrSRaZSZ+VRtf+/VZLZmmgS1JBERcenEf0TosODlkIRKj8A8unyDNc\nPi/eMSx1lMrxWeoP1Bm/w5Z6G3OsOivOxqTkMkHxYuQoDzXTXMVMiS3Isbv3\nLQ6I\r\n=W/Kc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLFJAKz6ao3lZ8bvZJL/EeeI9CxYKIgH37bzXOOIgX6QIhAOblX7Ovj7Meo0jxAuG2xHk4h4vGFzyC0IFdhTIGobBW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601463771-413678fb.0_1601463882194_0.7892453555391714"},"_hasShrinkwrap":false},"2.16.1-next-1601464013-35e42348.0":{"name":"@xdn/core","version":"2.16.1-next-1601464013-35e42348.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601464013-35e42348.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-06MLkfltlCf63BYtJ2TqWGC0zeN5foCkBnICOSsJXcH+x4TIXpB4IqFygV+C3//IxNETgKnC5I+c7unBNw3ZrQ==","shasum":"0a6a3d60a51cf8ca9b1493bad7ed0cc6d6ff1524","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601464013-35e42348.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdGc+CRA9TVsSAnZWagAAczkP/1Z4xKctJofG/qDW5n9l\noKA62Yk5Tp2Z4RdqGpbRFRZVDTF0dSs/TYhZ23I1sDOCRJetaXaR4llHkdXZ\nx60YwkaUe5Yw+25RaTlc+QDDgDzYJYHL8dsxSF86O6Nn+dqzMZCl56E6Cx46\nVQwBpAeromy+G6nHDyyGA7VxXV6OeKnhcX2iN9yuDEtxhVdMGQX73wSqcS8+\nSbnSg/P/NvOvalGQ+uNkCYWNbr7EHXVELxcUbrTcSqOYFbc6jCPSDgirBq5r\nsJQ1+04RIgH17uXPpv0sMcxbOal1PvCHtOHa/7ytjzPLsZyrLJfyppAl1v8t\nv5Wdl/egkOHvLuZIuwoBpo/t95wOWrTc2uqIrkeszTo5L+5fzHhRPVbziqoR\n9T6JOddv/AqmCxR57XvmbQM0o4Ct3/sWj9D0iKWvZjDm6tx4orYHaz3qXfQa\neG3ZhHri00cMHrS1WiAfc1H9wZ096KeNj0Kji4Dc4Nh+kSGpAfI4qS3ONm70\nk+BlQUlOv8CnDky7vNgqdeWarRDFXqZEBpOv9ZWTx1+LE2qx4ZCs9cXJcd+Y\nLuGMLko1JcGUBzWxDdq/qqd2igU8KOlX5T4B0N3W+2Axkjkn8mMp0B1iN0ug\npZG1L66onoQJe044Rj9BwYn0oJ/+uLhVnGLywGEoWLq3tqJ9RqwjrunqM8fS\nKdeq\r\n=KHIY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqdyijgjP+YRXbuCPtoL5VnkLTk61fforDB483DaweIQIhALi21Mo5Fw9WEfWXkJOpcT41hER4qQ6wFEM802OfGCAN"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601464013-35e42348.0_1601464125547_0.7632282780802282"},"_hasShrinkwrap":false},"2.16.1-next-1601467889-5d12799d.0":{"name":"@xdn/core","version":"2.16.1-next-1601467889-5d12799d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601467889-5d12799d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jGyxZ8LLYoG7asfZEt7aGKRkbG2BtKiJQBcBenO9tSiEm0YtimvOvVLgVAn11x+MmizFDkn2Aw8/lDd8LVf8ZQ==","shasum":"617ccc65f03cffdfcb70cf0b144f4d978b7ecd11","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601467889-5d12799d.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdHZXCRA9TVsSAnZWagAAW1YQAJngfveJn9Dt6SJAdc5x\noyBysPiMFS41oTGASWgwRdJPaNVVyZbNd5vjoWz+qQ0cUn6aFd0leR596Bno\nQixpHG6WhK45eU3bvrAbooCY++U0sxFgXmfwnasfZBKOcI8O7qOxooDyQ/kF\ndQq8QIEJL2L4OP/RUImnYFCzzvR2PRIEfsu45i88Ac/b2FckhG8O6/DMzTqf\nVV+wBdpw3KKu9KvKMDN+3PARblMZhhVtwDLHHX2jZLIYDb/tN8zS9mSNNlCB\nwpYWIiS5/FCoTiBb2q2MGu2H5/Wc+Z7syzOpQ5UQHADmDcoR5+7jMEenwRmB\n9mAY74GfhuJoe/FFMxniQsMpqgQgYX8aJHKfQpRJ+LrP+Z+Wk+mkcoo70HX7\nc+ZLwXOs+yRKKCOLKe4PjWaTZt9ciXJ/lYwe4UA6xtUIbVJtFw9M6P4wqfX0\n5iPM9vzGR8ItrKuLKiQbsTJ+YwcYnRs1tEXIuNiKIURUaGPN9QFTrxSRC/Hi\njcKvIqVPzD0eELyZx9Wjx3bWmsacdCtvFXCvvQKiTa8GvfEAWIz3AHJOhQ88\nanGH5sJ3mHH+ScVGYEKHWyiRdgPA6tdsEOYFVLznqzPPLPGrPyuDNA+LW1iE\nH8cNNNpfjMmVfoYPLjQyo9vGuDDnL6pORnoDtvkd6zux6/tbEv/iUm1fxAAE\nIO05\r\n=kNRO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB6aUM762rDOpGZI7ZiUqeme8ZGAKpv6YFq0Vz1+DbXlAiATaX4O8fV6FP3zJ5Htm+txHULs73fOcH5JWySt3PPyUg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601467889-5d12799d.0_1601467991046_0.6327389040118565"},"_hasShrinkwrap":false},"2.16.1-next-1601468686-f6b33d3e.0":{"name":"@xdn/core","version":"2.16.1-next-1601468686-f6b33d3e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1-next-1601468686-f6b33d3e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-LrWWv0DgtsaUrL0NQdq9q7oZJhL3VgxApC9JmiFvcbzWPqLKnwpHoDp84Tb+L7XcXaZrMnSKH3WWy1dTW0tDQg==","shasum":"99b75c29bcdfbc059143c441f34e39c6bf318f83","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1-next-1601468686-f6b33d3e.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdHmPCRA9TVsSAnZWagAA5nEP/R671vYtR/6JD3qHOihE\n2T4aoXbmS+cCGnrKCqggL8o+T2DcAXb8YjI9sSt6AN03zOulv6kdyV1OKyN4\nstdsa9nn32HjtLtCBCwcUzSZjB+13Inyji2YvHI5jxlDHT0mftIzfHVfJj68\nnZ/tvwUS/d53Zb4X83kcmpj1/hUoVBWr2epU5zYCPCwSMg7DXKEJk109dbpT\nFtQ+MEfJYUyiZo/skJPPNHT4Sv//qeJcKivOpsQ8X/lRMVwB83Kr2S5mBqop\nVYdfPtTJ+K9t6OVV5Z3rYiPuCCRd2K4FMvuvbG3xjVITjEeYEYkloj2QyKI5\nAkqOtg9PcPdANLO9HGZXdU/AdrtcbngxL8PKdQgVvrPqRBqg9Cm4TDlrfmeR\nlIhcSkWXuhvT300qDaPs0kP6+XfeTA022JdvN2zPJ9luLy/yoZd8LhPO+YYm\n1TRkQuMQV9H7rVjmSRvgVOfxhGefep1CFBzrs5wQl9bKRL4KjJr+UIXqndw6\nIAkuBQ3QgN9/Imv6lCqRMAScZuwH2a6us6AFtjj29mOd+i7hEhuLEgtk2vdm\njitOcSXG4AhlGf2RGI5Em1f4eTVVur3+HtORm2+BX7+DXYtoa7GNMwoaXAcX\nKjnR1CaZ9nV0t2bu/5viCC0jztgGgiNkr7utrqanm0of2CD9NU27fLmrf7Ex\ndaMV\r\n=F0Q1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEDykDS1DXqeaijcRTqivRijItr3kLuPPjQISFczqqygIhAJD5oumkpqOJd/V4wEqbVDNgWX/2yC9yWvGvh0PVd6kO"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1-next-1601468686-f6b33d3e.0_1601468814778_0.4848214255659804"},"_hasShrinkwrap":false},"2.16.2-next-1601468817-63c2db85.0":{"name":"@xdn/core","version":"2.16.2-next-1601468817-63c2db85.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601468817-63c2db85.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-215k4FDlgboumnkd9IsRDEe0KOA1fpSRGdQg52zlY4NYHQLJm/bl9cQU99S5CzLo+p9Xq70vtEr1Y6h9rD0SFA==","shasum":"62a79deae6f607edcbd850a93bb95b4d01738c7c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601468817-63c2db85.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdHoECRA9TVsSAnZWagAAsIsP/298xzoOTTxiUfelPalp\nesoZbMKg+Oi3gQqottVHM1Z8fk0+wwC6IcduWvlmgCYSThzUYKACggEBVCuk\niqKks4UuMzTSj8MQPjIuDIQgo2KJrTgXGe9f9l+g3J/yxtlw1c4UFCGckt4F\ndxIJlKWpVn+ySggYZMePLZcM3kpoc7LpB59H5sEYTMiJCfRqFv2fkIgQrbEO\n1+HyCaY1gBQT+N0n4hG3K6V7xHHVoP/MUJvH9jIg3yEg5bUyd7d8P1xsteRS\n2KF0LBTEGJuQ8IKLV3N4PjJAswUQCktrhh4B/gx+aB8sx4TRTabp2GH/yHcm\nNwJdbg5iAgnvFx1QxwrGcu8Z9eglpk8/PeaKiVXvku9bLEPEJ1XtXm7ino1A\nFzVxgEHSHNhARMKZCRt8k0inutSXE2TLFaY1oeDldOBjHm5Q0MSI7N1tmBTF\nd0IffvbxFfvPcQzGjGGz89K5RyD1HOV5ssAAzQhZCz/tSZE0bYg/cosnrkB0\nvSI0/few1ucy5CuypyUUN8WGuZSLGiOIvX5QBYojwgR0TBjNxAA9E2r7bqcb\nmBUiu0t0hVE3/S95sYbBKHMWfgYRNkXciFafzTJ9QQEd+ukoaC/k/9r2Ucyr\nOzFtlj3KTNKE2N1DYD7gguRuiKEwA7aaV0g4lh7h4C07snu+hCxrG4GgfwWZ\nAQF7\r\n=TJpz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHAtvxBMItMPBwr7wNHnOfMGOPtIMLLMUjnaBV1luXcdAiBXQu2P3PKoq4bpLUbNM9X3lh5lYg+LP3zFSj67cAsoJg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601468817-63c2db85.0_1601468931652_0.9328398206853605"},"_hasShrinkwrap":false},"2.9.1-next-1601469175-158b08ea.0":{"name":"@xdn/core","version":"2.9.1-next-1601469175-158b08ea.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601469175-158b08ea.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zej8B8XWOM6PDf0ARY0UOCE4d4xyWNJ9tbMn51i47V7fNJ2slyYC3e9pr1vi2tMcMEBoe/R709yxq1NYfv4KYA==","shasum":"d7cf54d85a3c2e2b10e5c223b2ed09f0bf1778a9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601469175-158b08ea.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdHtpCRA9TVsSAnZWagAA11oQAIOa2WoOjtX2FnlaExRH\nc565qT+e5tp0Ctgd6ht1GNN0+GPclgcQ60Uf4EwhZ334CjDq1A/xwj+RGu0m\n0sDlzJX36wRxlfNuXQRltZGShgvvjg7rK8sU4NBEdrmihXJCHNK3nCS8sB3B\nJ3MtBKwHQlV9MT2IS7E5rRCjk33F5jZQdXCgy5yU6BgTbL2UWnMqkzGWeXcC\nEj9L0vxZ6XU+RCnvQzeQYGWw7NOhpnt8LH/5HDZGIlgitwgarSOgXsvvfeI8\nHmJnrid+iC20P1bN5Ws4MX52CCeMznWZiBVju8v9YceXwR6mjvTKxxWxNB7h\nn4gnOczwOE0EdTPon3B1lQupsdEdI2rXDmVmqxEzpPR53Y+7b4qF3ZH+MSqT\n1esBYBGJ4YDzA1QD10LNoEa61Ah3hIUzRsmrph9zSr8NkHUfZ3kB54OVmzdG\nOCD8oSwvlRjHYAYPXdS6aTc1ifiIihUYqthY15CrWgUKyNkF0lDoDjrnMkeC\nJFw7Hj/wEEygUA8vZjTtCjcZowACBRAausdvRMDPbeUM7DDdwMHNKKIkgpv8\no7B1GMlPfa3bP73Btz70LtAEnbWoagHKWNNfjlONURE2cUiZ2KsPrv2foSh1\nyUkWrW6FYDCe1gESHnhKraqpvNJbL4rb6AntS2v5IUNhPbg7PD/6MPZ+yqkU\nCgfg\r\n=zG+v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWawZX1uXeI/iA9LhD8tNC5jdduseSJCgTXp8NCOXC7AIhAJcvi16OWiGr7hOav+6hG2b5UNWqH2dBEjHdc5Y7ikaW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601469175-158b08ea.0_1601469289027_0.2872634815455686"},"_hasShrinkwrap":false},"2.16.2-next-1601471321-ed67b029.0":{"name":"@xdn/core","version":"2.16.2-next-1601471321-ed67b029.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601471321-ed67b029.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-6XJrkZ6vX+1tEaL0oOqlwFiDwxozpnM0K83BXRXJlpNExnd0dJeARn1kNF2BIbfvw8+vs3YuUtCy7CzVKfxEQw==","shasum":"9062759a411c1ddc0dc6129f8d9916a3be7fbe12","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601471321-ed67b029.0.tgz","fileCount":155,"unpackedSize":743005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdIPOCRA9TVsSAnZWagAAf7UP/0yInXfqNuGjIG7IR/wi\n0jo+wUeVmYA2wm2pZIiCranLJG+tDWiLuxxBSzmr3UUD/W4KVJxUTfDV7Fr5\nNj41+JbTIhHXz/dtL/w9pF3n3NXtoh9uywl3eoaTCJM4+0h4ncv0WHRJ/TTb\nbu2d9gqShieG9XgD1Q/lO9hjh6UGlYWuy+0eNUbVCuby1ecd2INNpcn8o2fP\nKjg5casn7p8wT9gaQnAL2Hosjl/qnZf3hdpo/vT6K/L+L3845vLuY5Pxn3Af\n/rxTzsmL+Crm/Rix1PW+kwblB8664BzglRoYng7jyIk8kTPYLCO7ZOStQeGS\n7bEs7ehhkEIdUr0d0Xs1fXFqXnI4RRuAAaytwtO/nUvtjxeU8aTf7KRzp8S/\n5hToeQZB2sY4SbZ+IhJ22f4FBpaLBAbTVN4Xmi8l6PLcYfzsw9iDX4oHYsQ6\nBCqZlvI6tOlGoqcmUGZ2cD25aJQ93FYil4/WGQpaBofu+gmKks0minNnMlap\nOhYvGCkl973USuugsSRXw0IMgdOdcjdAA4uMeVGfU46SPq3rFsNktLcZ1GRR\nlx0qUe4U9fXbSYy0SC9zpyg01atjtKkKBe1zp6EtEJaUdhIyEFyvAC8ab9em\nP81vt2w76n3/JxsqRFU4g3JaH7M8uN244BRrIm8KSHqv3lunEHvEfQmgzHcS\nuDPC\r\n=Slnj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGa0o5URb5t3p2j8e4vdXjXqiiFtxlBvyqM8MqrJiDYgIhAPLRwnpMXvttlzSPLdS9NB/+l9qGR6gKSOYaSfCSTxMx"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601471321-ed67b029.0_1601471437370_0.2378938247360598"},"_hasShrinkwrap":false},"2.16.2-next-1601471394-1c809fcf.0":{"name":"@xdn/core","version":"2.16.2-next-1601471394-1c809fcf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601471394-1c809fcf.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Su2qrZOjKfTxRI/ty6NXegp7T57Nr38rhawUBy+hOk4ea9CSk20eSY7pECKC4m+QyA7RSVq9kQEU+QXslpVHIg==","shasum":"d39dcffadd8e98c601a59921e1c40ac2416af18d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601471394-1c809fcf.0.tgz","fileCount":155,"unpackedSize":743005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdIQZCRA9TVsSAnZWagAAvmwP/0LQ1fvV2jSgpGTHHgRw\nk0MAQGrAky9gXdo8v+nouvcWid5ILSu4Eu9rIKdB8B20sFuwvoieR4OvK7aK\nEOL7DnltOxOUBA/LwyE3cUv73+QlrYchzIEgyXmntkAr2fekx5GXyrUjpwW0\niQxaC0uy3t5LrJZa88zj2u4+oxF9oHfdBHO3Ur3dwc2IgxHBBBy5N1QiH3LH\nJVHX6NWB2KRuACy1wLfvLiOaMVetcpEbWLGyUiYp/oe9tnLxut+J9if1WBvN\n7g0Lg1SBDWTVVT5JOVJSxOrm/Bsi0GAGQ63Jynmw5H/vflaPAX8rxYCrrzW+\np05uRJlNpJ3ZDQ6jMOHChdUs3y1fG3OBBSoks0BFew3473QUoPsGLwuikFaz\n5y1NVAfPADHyxR78PrATmXNyEO4L0peuPaMqreRzGEgbJ8VUvDmVaEmR5wDw\n6NfelBHNO294hROsNI3u5sk5TkmLeFf2ged9KGhI2pSVQkySPSjzpc8gMPny\nNuNSJIT69ZAIrx/4WLy8MdEUNcR+HEgqJKAWe1O0GLqgm4Sal0jRLDPpyLCR\n+eOmFTJxnpYU6uKqSfpOoieoEzPfqFhu2R8/28BhgmZ/0DjaQwmycmadzaIa\ncOMCTwyIh4Kf3S/8p7mSCOf84E1wd5v8pIizc6SoBpSNZlkgC86YtsDvYVHS\nVazT\r\n=rTJO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuBnAcMfXzAv4kCNfWzyVBTqtpCOBqhqrXA0iwrPWypQIgFv6cXRgz2jzZnLAYpFLpiMn/9jYRbQOvJ+WN6uiHhb0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601471394-1c809fcf.0_1601471512570_0.20022990674579688"},"_hasShrinkwrap":false},"2.16.2-next-1601471671-29588c35.0":{"name":"@xdn/core","version":"2.16.2-next-1601471671-29588c35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601471671-29588c35.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/wpfIUlnT/59fs+Pohm/Lk933f5l97cCF7pJm7n44+zTWg8l24UoNXXHq0DrWNXPRpm82UJYEh7a0h2DLnqO2A==","shasum":"353c0b52545ab188889c3607a82c87583d8558ef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601471671-29588c35.0.tgz","fileCount":155,"unpackedSize":743005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdIUjCRA9TVsSAnZWagAA9Z8P/jAetJjPRSQyDHsGyPzQ\n8TndgueUIErfHoFw+j4M+Lyhhchi6DS2ct9ChRjBTN9ghbqvpPfEWYf3Lh6P\nusZ1fG1mC6CQVUy4QTweXq2H/+ur2vVuNIspWNannGxXObBYnqgu4piyQWw/\nCig+lL6hU5kxkPyvn6hDqbyNhGTPLIbtyhK14Pc6JiBjhSr3WODDQHznpyqX\naEdu60ANvGnSutAiGGIQGOXAdyFS/mfMEXP0CAwL+3bzBtHdZErkdnMaci/Y\n8zB5M5ayeRdfTSykHnmURkZp7YE3mIrDAKLRWpz/d0pRHHXOtMSy4Ta/dOJH\nhNy8iVEvOQ61nE1Q2tZP5z6DgMpgyL9AAjkk6Z52Wix3kyRsomHPftMkVeqA\n+rPKAxOJ4OjZH6QFKD/dkywC/PxpyhaoojlvamHEhvT/SXaf9dUjvM83B4+t\na0bPiyigR7EqmgQlBWTPMnIwgL5QfmTbSYF2yl2pc14ULBYueAvGBRGXG/RS\nT4lg1ggUFqPP9H4pwhEARdYh18z0Hzoh8tTEM30BbX0o0JFYeVYRkLOM39f2\n38lvcNMfJZ+OkZoPoRqn3am9BAQaHtQu22TQzD/1OkIwFHLPdszdpXz0hd6x\ndaS449XxStKWwMumPRl+SV8KT8KfPOJHSAjYW2ABCZF/lJi12F7xxhNb9vBF\n1w33\r\n=BqwF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ5WZA+tqSzE+jKGM56QXX3deIGJhzusPHmDd/zFvRpQIgPzJTCHwmw8ZK6FMc91gc3Ro/nGqWOJcBRyLgmUFga7E="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601471671-29588c35.0_1601471779350_0.5508898941666189"},"_hasShrinkwrap":false},"2.16.1":{"name":"@xdn/core","version":"2.16.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.1","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-RlZ0cA9rZ0LOg49PA6rfXzQwiJAOioPsK07znJZHZUNQNKC395LFGnrSoT4SEpz06c8WOoJHrQPCn0KGhL2hZg==","shasum":"cfc9970652ac6d1128287c197ad80e41609eebd7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.1.tgz","fileCount":153,"unpackedSize":733896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdIt/CRA9TVsSAnZWagAAU4cP+wXukoV30wgVOkkkh3nv\nHUNTWeVY6Tv1QEdIPn809dbR9yolQoo+6wXxe5R2s5NzTF+IGBzWnjA3YIvs\nAJBVYxp2/cft1zIAezwF56SC6fre9sT1Qwo0wkO3u8WnM5dXrXc/Ppf9sJUE\nI/ORcKIMjF3nV0HnTBJGhOO7VIAX09SD9d4jf96XFy5SWbfqfri9BGXFNvAa\nUKQ/YIUff1u1Fb0Wf+tIre0812LJkZT71wfhSdG6e2nk2Q8KFG/oIEXzhhkM\nC/s/KFeF5dlPgRxlGbfuA6DIXWmxyleB0F/esuJo5CTXLkYpwXmO38pkXsDo\nssComYSELyp7bX9SRFT9aJ8p3TNA/zi62QOOHQTjrkR9s8YLyrys847d6Nv8\nruCnhh8xeg30WrdtgWYUhNp7jOZWtq5pNP8qqK93w+6pA1JOJUJUbLC7sLlR\n5+vTfWFq4bMxLmuYth56lD3IcYiTzf66rzQrFt+NK+VHGbGbRZCenlwcWhb4\nulvNZm2rPMsbmbAqfOdZz0ar1L4QljQYP0u0MI6NjHhc8SR7PB4l3s3Qvt6k\ni1OFMVLH/VEqiB0btVakAip+N0Qa31U9OFe3s1vfBvR75e1NmthcGN/Mn/2W\nsh3skf5nP0tPtfAeqbOz8PHymum9uHNNzVQl7AOWvhGLVe/+e3sohtXL5c4r\nWgGW\r\n=lQod\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlKg96tULnKsCmzPMR4Hwhdf7EpwSQB0I3eIxYou7fvQIhAJZl3eFLUBunsKMcekKqpbSrUirC8MVKo0pe0s3ogUtX"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.1_1601473406729_0.17295739340235072"},"_hasShrinkwrap":false},"2.16.2-next-1601479195-0ff4124b.0":{"name":"@xdn/core","version":"2.16.2-next-1601479195-0ff4124b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601479195-0ff4124b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-JqTpWe+eqk3+Op+xyeoxtLSCpj9osMylOeaWLGVR1CMDfCC+Vv/beC1h/YqWekS8wXwVjEDBpnlT5i6QpKnlgQ==","shasum":"cc7208169f03baa9308d7e401bc4665781399ae1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601479195-0ff4124b.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdKKsCRA9TVsSAnZWagAATooP/3iSY5gCBpnFjCI34J7p\ncYAgVFdnKe8YJPo8fGgFIYpZzp4gYPVjnO/qRSyn2NDlgZ79W2HVyUXPzYLz\nrMnIJakPViKbsKR8QeAWKuylFMKwBYdaM/Az/QQaKVg2SD/ZHKKpzaRSwJdm\nebeZfGZjpK4Kq8O+qCo2BgsWm79X9Ygk7yMrjn8hPIhI/hSGVameuYTyG+hP\ngf++EUpE65WcV/SMhAwVVEsFr6044HaGrcwoHcdUtW+bezM9k3UhHUUF1x8d\n9Md23ZEK59MteA624yqZQkv85bDs7pUJQJm1bjQWc0jg/a7Ziw5hPvKOdjyx\nt/B+iNWciy6a0Mc9Yi9DqXUCC9ImsjPlmJAJZbxcpLiew+L+YdxRcRo+ruLI\n2Nud6tZGlemGNxPvXgYsyzTRhmXHUaptNSVEEw4SPlhZkfRza6/QNfRgGwxm\nXksGe61bqayFLj9I6SZ+EZRde81jFSvci/tabm6f4MR5ywmt5HOfjqy3aYwj\nI5ISN7o/d+BVoXOXAi0pNq4ri8d8Kv3uD0GUGMPxxNEoucrw7oDnAWQ4hJa9\n0fJxT1T5mZUhNfmW2j2WZXXU++VZ0kkobnmDKKeLQaShVqzp9k7+qHztSy+0\nS4AoNIhJ45j4aCpeZszEv3NAIn3msD2wBjFJUeROCtieEwrpIPBqNmUfQ2qv\nxquj\r\n=+xQ0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBEr1WLg5Qx90clgSSi5OjyHU0+XiQN+OFtKlDZ8RSOaAiBmrIZjt5JfkHfQaUj8rrOzvUTcqGgmEDDLFo8DF5RuWA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601479195-0ff4124b.0_1601479339629_0.922004212588077"},"_hasShrinkwrap":false},"2.16.2-next-1601489696-2b2f2951.0":{"name":"@xdn/core","version":"2.16.2-next-1601489696-2b2f2951.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601489696-2b2f2951.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1397VSGkyzg7yF0JtGFa3/NrlvQxilNmO4xwUyQjUSDzOtp0ufp+yniJDEfD7guJpuU9wy98UvaLx29To9kYhg==","shasum":"0b115b934a4e76c2fc2169b373caa87ad5d69117","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601489696-2b2f2951.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdMuYCRA9TVsSAnZWagAAMzIP/jtWIGlQe+IoFj7qyhsI\neBSMVQkb2RXpRctTtsPFK8UHEuJBMwoHJm6pQ895wR0QvoLXWBmkHI8lhs3g\nrsfpEttE0LOLMwwjEUMgtv/K3k25vfdb1PKIGoQiV2WcT+Xqnf3BnGyPSa7s\ncfdrD3Fzkmh6w5Zvak2hM0s++ivjaz2amJhRkPFBKGmyq5VUvuvizcALKeCa\nBdNEhWot/oYNRT5pt2vLm8H4qDgtGI0wGuHSYdq1EJZ9E3hw+tHMz0+BkKlC\nGO666ABpDVXR76QN6siNGJ8mVKdsAcmWDMDyT1h3Wt6eXJywx7DLKUiNCX3H\npJU0okuKq+6DT1snTDQA2fq/AH0hUiWKODiEPQLNmEzEH9BwffNQYRTPdt/H\n+xzobgEqqNQuzzDIkJCrGPhxBWvOMaVRHSw51ltdA4znYufYXJfeYX6vDaq3\n70EP++/Wq/4gMDwI2VXHGgSY/svkzaTGdFuYShJb17vFwmgH2Mn00YMuKCov\neaJmNROGmuvrOggHlSc+GPWk1Y/zh2u8nrObFpFILD2f55VxBVE46gdfjxAf\nv7W9v42F7L9EM+/JgE2rUuixf/3Y+EqOcMOIDnfOVnJnMjsIhhUhYtU6yopD\nDd6tx2cmWb6waOMa/a2k2u/tkE30vpqbOojDi2+QwaYsy2us+5dIG6RNsHUC\nxiLl\r\n=bIKf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbuP+MR06Nl8l4gtsvBcfTdA0tJMPdVWtVU8YBDeV3hAIhAIE8ZgKLz85jw2Tw45rXzS7uiHKui1c2Bz8UyRwsqLU/"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601489696-2b2f2951.0_1601489815735_0.4727983101566515"},"_hasShrinkwrap":false},"2.16.2-next-1601490286-2434c70a.0":{"name":"@xdn/core","version":"2.16.2-next-1601490286-2434c70a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601490286-2434c70a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-egPyNguccw4ks6MyXakwqM5GRgXS7SaVoR3NAk5WspBjXx/opZ84ogbEGbJGyVvnZEVF4wsT1DtF40OUSfLPtA==","shasum":"e55a9123e0caeae6e17cdf6ee154b42bb68b356a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601490286-2434c70a.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdM3rCRA9TVsSAnZWagAA/dcP/0z+4ZQtPtZlnYfH7cUD\n675en3LATDjBqEsNcnKWfz4bJaUcPimK+LbrHC3ALFEkAnkRj86nVjpipR/7\nHeCGBatfGg64ZhuN5ImPx3QBC5DAMlJhCul8pfEr9vwo159ZLFJoTFalOwnG\nRvDwFyEOti0EQatwRYWprTJa+2MKQIrmhkyFsvrhgNH3tZ5182czqmt2Z1bc\n4PgFZ75dEOwyncMr9ZOpO9Q3yo/I620pM9V66kInQRRSx7xjDkIR9510VbY4\nTY4nQL1dOssyCVgx8wIvkS9L+G+Nsi0IqUjU3/QrtTh6eDjR5YuYNh3zigJ/\n2/rsKAj1Szy3cEF2c0fMy4xOHCTnh/QVVO/NUzZc29Ieb4utswNYoBOedaob\nJu+Eanl2oLXT/OIR++4yIWEvT1JylK6x2h3JhT6DKPr0AM6V3BhWh5QmfXi3\nufCjosFEgYnyq5jYtjjocPZXJZ+r+A8LtJRwflSfjKptGHJ03Ml0bJeucJJO\n6oa7Otcisi+z7aTMsFki5Jlzyafh9zsA41aQKRUT1AVnOGok5kvc0Q1Sv72r\nb9bNc/CTXd7tzwwczJ8VU+7hSdiFAzE5AvphVWoYJLxemETztIN286T8JlOn\n11WS2kMz0IRrfTalYiey8lQDryiT1KtbIi4QpJFlUHXqL3jSb+/HFDvv4NOm\npmfZ\r\n=eYAR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICKZvGudvTAE4z+IbJL604GMY0WhmEx1pOvvSQPHLPrJAiAjXEWoERX6dZ+uLnHzEoH4ep6QBO5OMkiSA2PYaZudxA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601490286-2434c70a.0_1601490411349_0.37336464107674106"},"_hasShrinkwrap":false},"2.16.2-next-1601494314-ba9b1f05.0":{"name":"@xdn/core","version":"2.16.2-next-1601494314-ba9b1f05.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2","webpack-bundle-analyzer":"^3.9.0"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601494314-ba9b1f05.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ez7pc+oAbpqa1ZBtFbEMWWAy3gxc2RmOwwkfLRTbt7fy777K9hGHbu3Ak5SYa65pNxBvXFFMpeEIrkzZR8Pi5g==","shasum":"5782bf3b100a1cb51fc73cc597a70b542993fc7a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601494314-ba9b1f05.0.tgz","fileCount":153,"unpackedSize":562362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdN2XCRA9TVsSAnZWagAAE+IP/0LHj/3xbIwV0UEOKL6f\nCCRknHnzEE2gspEVJxvpgmkeqhQAUN61W7JHUYj1kz53udWD9JVgLuiyNKNe\no0iKfTruGzIvRQYFHIJsKb21OTiBpHcpMaWTinbPj+SXZ9jFotTx8eXUXe0Y\nc5SYB4P2DBFmrApwjjXjeqH3c8AP4MAmtQkDlNeWj/4715cpiFZxMYiFHabQ\nlPFKefJ7URVYuyvb+cw+SvrObEJNtQWzoYnHOVlv2+4g6XL4moDIMs0SsSeq\nS8duig52ov6s5CMdCq+oVqMJlDD4lfDNVdA74FLkVvaSDpmj1r9D25/9KQ8A\niOLoGFR8UwUqH3r78hCL/2Qz0PhksekFx/yz6JiRleHgf/BPjTcpf1Bm5nc1\n5rDrriDTQJ5eXk2xJ2jRuxl4TI2z40D793gXihgXXSeVL/5Pe3+MvA1IOiGz\n/Dul9dUYsdTbz41T+j5OVNj6u8SzrNlWpSJUz0Ir89Kwfw/00YFY6T7ks+gT\nTv4A291yHeMuDHh9J9l480LPCRaSuWK5bwADPrrExPwxmrQWXR2KZdv9msvN\nDaerkJwB0ehuRcCM7GDdWlnGqKvkZOzJXaTojMKJ6KwZ3hP6ugEV/aRv3lDr\nNQ9nGYZXitt3Y7EjVIryG4H9KPZvwvfhxtLHpF3aNkGZSJFILAnAOAlYTpW0\nyUwU\r\n=8/30\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDEFiT46c3peLIT0dyPJ4nVKYjF4j74/qkwvZ6G9co6/AiEA68DJwL463G26wwMeDk411bgYZ8xbGvz1TfcTUFMyh+E="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601494314-ba9b1f05.0_1601494422920_0.9301357564967079"},"_hasShrinkwrap":false},"2.16.2-next-1601503009-4c6f3a64.0":{"name":"@xdn/core","version":"2.16.2-next-1601503009-4c6f3a64.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601503009-4c6f3a64.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fkJAYNQvetSgt5ny7XmYaPug64hxQUNvsz2xCtNuLLSbtiIpMPAPxjvyq9afCRh22i6yZnTvdoiTYKKFzPgSag==","shasum":"38e3439dd655372e7a141c57018114b1751f4a83","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601503009-4c6f3a64.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdP+PCRA9TVsSAnZWagAAFrYP/jd3kJ7WwDqb27peCnIy\nFInvt0BdwTAVbJ+ltpTgylzHWTTc9iJYCSSIwFKxZjvNONiipLAgtRtron/o\nCDBCDIDtFa1a8fik3Pf3/+cePk+QBGi2BfDLvsEDg9derptaoP6L021Ei+MR\nE9kq9nBLRkImP4O6EdZaVcNINxh29gkpC11V0FX+/sZQgrFKVVkkpPQoyPh/\nMRTZqjKJNJN7AurtExwVCcgAf4A5rla37A0vW3jjjsV9Vmbvx3dEBKZfTBKv\nz1viz/NrhKTuvwDEPV+Uu+q37rj0ZWsFOk8f1UEQcnAZJ2aVgcLth1FLTyZ6\nG1EjQGcWG//tQozFgAnBIsV/J/loRDd8NC7Lq7jGSGsWNGajzIVT75dEBiyk\nqKb8EEc1EPnAdqInFOXeEj3ViVQIwj7Hbi1345CFOPhXF5RP0tn9UKK5nzuE\nBegpoPtAlhgm06W1aBD5LI4vE8ivGBLOISHpPUw3QouHpslFeVlNpAb4MNqI\npiqV/EGbyVSKBnDiBxMHN4fwnPrkINGUJc88OIQGaFamoSRXtyMGNQdfPlWE\nhtQ3NHDdhyAWFm1mGlXL7hw/ZogZD+wurawqwTBebV5GX09zO+tC8owrPNJN\nDZM7iLkLXb59rr7ptvN4QQdWbNuHzXysxLnMIDIEBgvf8At+itfhDm1Kj78H\nBKxt\r\n=E3B5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrLinFnZdWRKovHtEltLDhQS50IZj/Hol9Q1SKTkMrCAIhALfC41qnm33FYWhk4e8Z1j9BRNhPcTSlpMzpV5Z1iiV/"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601503009-4c6f3a64.0_1601503119055_0.7752516617419234"},"_hasShrinkwrap":false},"2.16.2-next-1601544381-b52bb042.0":{"name":"@xdn/core","version":"2.16.2-next-1601544381-b52bb042.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601544381-b52bb042.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lHSwDeIC5WP1fT8ogZnSWHKu3n2zpB3sMfpAqX83YiR/6IrCwBszconvEKa8ePIGyB9Ibx1ALIPVvrzygfcdbA==","shasum":"75fe33069311ea7b51ceb49b69d7649f83ff675f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601544381-b52bb042.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdaE2CRA9TVsSAnZWagAAiHwP/j8eVq/vIqwy+r22q9EK\nGVtzsJBDN1mkObub7XsYAXPInyIH7gAxWUK3rtZzPzMCQi+v6P/FCz+M8lNS\niwijNG/IliJDXj7ZgzhA55nVRtnsFBqBVk970fjkOnezNGp74tsjg5GPy3KI\nAQG3pCauMzGR43vdjZNw8liecySbs3dXxP+rPxuKGKbBZiDKGl46BsKLOpDF\nxI0M+7ia6gYfu7VgrQllKgUsdYZB3AgaV7vHrL4yuC76kUnOipd2+bMiuad6\n51tYQC/xk0wv+rK8gRPTaiyeqQ0GS087moTYhN2rEndIyRv0zkaS0rjyg22y\nPj7nRdZ1rkD0Jo0GaRL7HBudHkSIPt4iWgAaFqZg82n7fKK6bZnAifLmPzAc\n+ALCJjkPqb0rHHqWTS1cM5+KDfplPVvHaCFLTDZR9vGAoFQ76LiEBdddH95W\nDQHsm2SvgK3OchyfH96uzaiClTdnYmj+H7tTBqj/DtzFoZMVpFJhIyK+C9C2\nJUvId8fGTIA71JlAxyLbILqV0jNY0zl81xmp2uYIfzpSgQ2h5bfrWJ6bEoNd\nu4wh3rvwIUWJ7dXKFnYd4Y1Jke+TbY97IdcdYrx2yrI5IWi8KR6nNcggiSfQ\nrPYfWjZ3M5hlM+O2s267P4wcd9dvl3cSUbzlzaTnfS5+JagWGtnHME9MlHrW\nyhAy\r\n=3G3x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVFuSHZRqtP3jpz9Jxpt1pz7Z+ND0Zlgu9QHAcotHbaAiAA5PN3v0F22AUXNNMoGa5VQ57oApwNDyQAFXUDujP7XQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601544381-b52bb042.0_1601544502071_0.7873081578889709"},"_hasShrinkwrap":false},"2.16.2-next-1601545212-4c4feb2b.0":{"name":"@xdn/core","version":"2.16.2-next-1601545212-4c4feb2b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2","webpack-bundle-analyzer":"^3.9.0"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601545212-4c4feb2b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7xogAEIL/IjbGqXnqSDLmIrvjE6CnBsGXLV/aQrmZ8K+E9EMiPpAutX0LPtow9Rs0OtOYWg+iqy2N45Mkey9Dg==","shasum":"710eb816806fa06fbc7be83d8dc1f0962e306b32","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601545212-4c4feb2b.0.tgz","fileCount":153,"unpackedSize":562463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdaRxCRA9TVsSAnZWagAAz2EP/1ZDpaL9obBvJXc3tKnd\nD9U/QIjz9sSVczEJHZMFDZMc6nNZKYpoSIEn8Y+aBV8eJeH9exK695FCouTH\nvEtKfP7x77m7ckcrglrrL5a/MihmBuAwEJp5tVIO3G03AhG9SVN5md5401nn\nvsnQbbXvcFK5BdBYsFkCJa/97tfjgEAtlUXS+2ygL6mWKiy0kUNdNp+L57yE\ncKCBPhlFkWaIKh9ZxbGILinpe0eBzScQOL73zcgIhmPU+SG6baasSve/ixcJ\nueAP54r9keI5uknHRj6HsS1YW2L0m2Fh9xtkfhNM8vRqPA2lS8ON2qYNwFQc\no1shvOIfUgwwFTsRONxWy2UG9yrEUWTjedDDKvSLVNFf+HTJVWzIWmHFLT8/\n5xq300zrVKQtSbO6OLsUR5+4rxOsWejL7LRSQFXTkiHvWZk+9RV9GuCRAfvw\nUhI9kwDV6x4BhBSxwDt7awq/mtG3zJsJdyGw1DTp77iiuB7H8QhBOu7ihyJR\n3v7CE/1Vqc+vMAXOivEsUXyK7OQZraP9ZyhLMs4PT/EcwzrrL6ecbdstRqmB\n5cWpZGch6t8Pj/wcwkHK0JWPKdrPso3KnXie23xioqWkvUMTeH5s1rF51RsP\n/CH3YNL81Gdph5qraHdO6y1Xn8E3OFMedPd/Rxuu4ZUDX4f69pMUYWfMrdNt\nr7S9\r\n=294t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF1i8FHXMBE7K2cVNqKlTFzSkaGFjfnd/hSiyclNtz5WAiBrta9tUnrxuf1SqW5u/3XUpHuoIhadw+T+zkLrg5Hp4Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601545212-4c4feb2b.0_1601545328743_0.7917836394631468"},"_hasShrinkwrap":false},"2.16.2-next-1601547521-8d7ede56.0":{"name":"@xdn/core","version":"2.16.2-next-1601547521-8d7ede56.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601547521-8d7ede56.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wpxDQktYHDMWcn+diYpPwNxBtRwqybPmTi1748sahR4o/qWXI6+8o8JLENFYQayj639dPh+wLWEgZ3IrgWi4Ow==","shasum":"15e4816b02d9962aabe5cc83dd6572d0e483ddde","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601547521-8d7ede56.0.tgz","fileCount":155,"unpackedSize":740840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfda15CRA9TVsSAnZWagAAZuMP/3SfHJnDPNLUSPFhGvSE\nSCwEpwpE7CQN9tyROLAshKxCKGMxZCiGGOlMUQb3XqkJ1VLHwNFv6dlZRuIQ\ndqk4be4SVBlwiAXxdfUg11COXLZRV4LViyWpvwEDkaWziqKBx+2IB6h177pa\nP1GhZrbtvlJ/xt1hlNinybONIrOxBzH6EcysHxDtnYpIhUAvTGaRIHzv4k3o\nrR8H59/838OP3FH7W4iMqIzFZ/VymlSrBZQzaQ3PcCJBhy70ASz6ruU3bar+\nL59hvoxlLztFtKfrUO8+cRix1cCEftAX0QbMDOWwfhE6LrBezIMNZIKpQ0QE\nj56J936ZCQti/jLh8IggCqQeRtXctxSYWed/x7kr6mTf8Y9KhwW4t158+94Q\nT6WYU/W49Cswzhgi3ggbfVZ3iJxCbdUNiucpbechG7ldIhkkwDhTo1iqUnPm\nM08tttSQBSwpkWKi5k6IBsXwKy8NE38LfXuF9ux26y8GiLkJsOtPvQJFBZWF\nftdenZ6/eJLsfeJZ2Grn70tVOL8qgSOvUs1OPxhzL6PYaBF6q9GfgOnpCalM\ngLhgan+Pr8cGLXDps8VvE8Tmw363lnp0yRqO6qJ1xFkqrJGnfp35axu9J3BS\nJh+k2aYWzwPAaG1RPXCw3/kVo6ZN/yyRCFzzBNazi2sBfHNkQinfHGqinM3J\nO6lE\r\n=ay3c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIAbsLZTv2fod56CWgH4wwozGZWUzwL9IFcoMwfbw3sgIgQkSXh1fovh5fnIw33icXTci4DOmdRU+Sq2V7P3NqL/M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601547521-8d7ede56.0_1601547640741_0.9362241139388294"},"_hasShrinkwrap":false},"2.16.2-next-1601548524-f707ee2d.0":{"name":"@xdn/core","version":"2.16.2-next-1601548524-f707ee2d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2","webpack-bundle-analyzer":"^3.9.0"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601548524-f707ee2d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qcd7EABMwwNXF1layuaEn0bMFpr39pmd3jEDwv2lfvLIQ9cOCCBTDMEojrYgxt+pLfQH5xvTH2OMqIhQB9EQ9w==","shasum":"26c2004a348cdf807238d69b192902c70704afa7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601548524-f707ee2d.0.tgz","fileCount":153,"unpackedSize":562463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdbFYCRA9TVsSAnZWagAArOcP/ja7EiZX0f6tA3mdQC/6\nBt8+ZUyjlzaP8zSm9JR/yVuk4yCF+kO1kQ+wbT4/6wkTII5y9DIiQFXQGW89\nWDuQyh1hyTwrzZom1ZfSLxc6l+Ijhz8CbGm55RZOsP5fo9UffdGH8QPSWaUo\nDN8SoG4Ny4VJFux4qvm4Kn4iaXl1zrDbTzSq2afQjcyqWq/N/xkssKurVtXa\nATUubL/ENR1OJ9OuWpGz1mGAM5spI4/nFd10RZQFNW3JNZMQM6eTTVIr24AZ\nMnOsFLut8Rvqi4is6R/PRDhTThVGhvVZlxir9uwHYB1F0zS2ydXz1xDtCslD\nsJvK9l/PyWBXbhvCXlxWcFS0G1Pm8SFUsWjVaZ7OdJiT6DMTcLac6TXz/bYo\nN+iI/lycwYOoRfdb8pfukh2lbFQu9GcUUpy9fIi5iMQw3vP/yKZ5MX7+TJqY\nyU1RnH4Jx55mJfb3kGnAaOsn7f+WFAh5u1LaSpsGxRKOvfVmXmalWtSqMLsF\nSRTbvYuQiCTfBDCKVWpmvA19KHsi6LWvzdg+BS8GhfdkNtUJW4e9wsEKh2vo\nLb4/pgrkYTQkCAZVrtF4p/Js3lvyZnMEO4ReNiBvL/4g+OjVizC7OlY3c8ze\nboOea1GrjwMXi5BcYtTB8k+9q5M+qzA8D/nrASYaMv7DYqbm6iStkZjpxff0\nmipF\r\n=k6PC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDx5hEmDkQY3N54tXAGahww87hJpXe9bQR4pwfzhZQm1AiBcN6HOgXDVm0IBp77BRPuj+L1XP4koVR1/wzx9Z9lWFw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601548524-f707ee2d.0_1601548632327_0.6712819963162375"},"_hasShrinkwrap":false},"2.16.2-next-1601548817-4787a41d.0":{"name":"@xdn/core","version":"2.16.2-next-1601548817-4787a41d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601548817-4787a41d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-B8pJBqmiPL0w1ZReJT9ubyEV9Jm60A4utlf5Vso9OYsJve0Z7/Xgjw0DF7FBWLHTYf5ucvbtKZoE3n2DQ37R2w==","shasum":"32a15dd26324c140044cfb60d344814a3a10e586","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601548817-4787a41d.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdbKCCRA9TVsSAnZWagAAiWkQAJBN+J659Mioc8MozHIn\nnLVPvm49RRUFg5TutcvbldjuXX+/vI8lE3Ze2qrWW5pBZgQCGsEMmjbY9w9K\ndspY+5qBv0l14xbLPRl1uajHaFxW9zF2ZTCsDvx+EAl314UlUM27a9wclCNX\nhBgkbXK7n7YGHACyeej66TZTQPeBfAHW2u1PcAjPWPiJiZWBLESqmnDMvEgT\nzXIcK+BwFKI6OEiFPjkuOKw646BTJYz8BS/EprCFkbrkCEbSesafd0/XEpDP\ncvi1myXgMykItI94PhcDItRpiZ0CGkbI9csgT3SuSEjXThNxc0MOk76JGiwC\nkDQ4HhWZ0ysVftoW1LS/9e7TrtvXUsNLGLW/BGTtF5gd+7aywvsiYFUt5acN\nhE5mweN8s6U1KEQEobm8XhO1t2VibP49fP/jlKTTXCDtvaEcr1uF7c9/RFSa\n2yjA9W5OEzX/TsyfLnW40r+Cf9p/dN3z41eN+/VHoK0wUMWqEK3IW2bwOgeE\n7IeQFQYe698nmmnxBoju9swYo0St8SZlJ3PpSrsZn68584OV0iwIvbNgzAXc\nuq3mzAMAnRSGKK6V37hph5PGp6l81n8O3eVf41Kvaj4GXBSCv9yTv1kbRIT1\nHn732UBygyrNDYJPm195MNopmaXb26uiZmF79b5dRuQfVegCw86N0EuhLYZD\nhiFk\r\n=ekTO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxfi0SmMNe8tKDs2Yb/hPblFyQrlrqgvhvD/jrDSPfVwIhAJQQ0k8/4hewSMSg4k4XYMLj/ViFIhdsrnl/klveMI+y"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601548817-4787a41d.0_1601548930244_0.9585844229406486"},"_hasShrinkwrap":false},"2.16.2-next-1601551504-61074577.0":{"name":"@xdn/core","version":"2.16.2-next-1601551504-61074577.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2","webpack-bundle-analyzer":"^3.9.0"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601551504-61074577.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YiaYSzrAH25A8C4kLBELZDNlB1VQTYExCdSMFopb3qfnJH9wfU9EfR7x4RGSLAe7Cg6lgIbQ+0BXL3QFIHUAxw==","shasum":"47fc74c356562bbe5fbda03ccddc7ddfb1444da4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601551504-61074577.0.tgz","fileCount":153,"unpackedSize":562463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdb0WCRA9TVsSAnZWagAAtScP/00jlW3yhm448ZdNniDP\nV4F2S52rB07bmT5976W7EjHDrxDMe7R/tgZ9qMIYgJvgwWW6aAMH/S9jUMPV\n0w28cCQLQRO5YfycgWD/28HHaYv1ipVtUvzklT7YgmQEn7Zdw0bI7vWlHDmE\nxEQdaFG2uX4OKbTE7ifBKZBrkkeCN9yNJ65wep1Tf2N1/x+iizxSB0nMA1T7\n39rtVgzwNBVxgbaC3I26+1EJIO/P2zx2i2aS/Vum9OMEDWlxLFQ6RXd7JzyY\nZnnNMRGOjbun9fKlyQGlqjeimE1qH6dDEnx1P2/QEcAcyt2d6vuZoGq8iQa6\n/VLIm9sjzwTyTJp2PhCz30AcUP7FOQ3UsRGNZlj025F6P59yDXRAL3U9/cih\nWzB+RXRCfrnjE3Ja1sbf4kPp7WdqYiLoJGLmREUNfmapW2O4OviK3XmJvyd1\n2yieS57Ekm5f0fgIkTE/wTbepLdouNRvF93zRwCPocrXB+3hfbXULLd6n7tN\nyLDozHV4jYV8yMckRGbaEgHa1EL1wK/N2UTqa1PKlp2UVHk8D5m8QUx3nIXI\nmRcbCi4riO1LAxwzs8lXSqLy+/7tmq9DnFdmRhngEQW+MyxLviZoQp4YRL5k\nQg6+oh27oDLyCHfLAdVwxwuRjh7/E3kPw5XCe5/i30z/rqdfezGGGy/hmWZo\noCH5\r\n=0j0m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5GGeROYWH93ghC4b0lxVTo+ZbbhlZzdYuPBJvUeCldgIgPNzo961IwMaxus0Tvf2wqX/EuB1c9dQZSZ1GkmnshHE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601551504-61074577.0_1601551638071_0.9924063035494621"},"_hasShrinkwrap":false},"2.16.2-next-1601551522-25f498aa.0":{"name":"@xdn/core","version":"2.16.2-next-1601551522-25f498aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601551522-25f498aa.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-LbmEIP+1G720WMEoQp1AK3bPuYFpTVGWriP0hw31+mT6Ts6uzTNpi0Ilp2+JBtjU1wiQKiuRRyrGYshVcgbYLg==","shasum":"84e965af58ffdcea88cef863ba7dd8ed19d0573c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601551522-25f498aa.0.tgz","fileCount":153,"unpackedSize":733950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdb0kCRA9TVsSAnZWagAAyo4QAIUJddvyAXMv+G59zg06\nHOyKyswTSlLfbsYvCW8pQTDmKUH9Lr2Has1FoLlrphz1/RGk4QealywLmkLX\n+7lGPBDTLSyk/EJxwUQvk1VcMOrNd0NDEwLtdB5+VdQ58mmL+lXFrgyUEJOe\nKuwdpLIG9Cp9nMZHYG0uI015e4wfnF1undU2pJtabe/LUCk2GVAJCjFl5ars\n966g+S/k2wmRkR8FwDVsvUn164V5twRsg9ntKyzAOrgbQR4M5A/OQZJrbfg5\n5Ta6Cf1x8gs67LKumHx0u0+BIrQDLCM2LfXNt0yPPxCCmPpYYnrHue5MPQrF\nDURWOZbFyk4kBxtIlcSpNQbN8foyHcmVr7xQfpZsQkLqR904ytBKedjNU6Af\nq/hdYhJVR6gM43kZwKnPzZF3+/1B89vWzwEXaCGqw4C7UF2hKoNvxi3LvWD4\nR8PlBFIe/BdVObvokKmQFnAkDygMmiu9RaZOAOYmqxjN748As298lmfHQI25\nLMNe7bgUi+sVKbyCHLdVS6xSUJMiMTmpBO8MFYOvGZo1zUyFbepii8TNfYI/\nUKcdCYNqnC73ts0D6l6IfIPme9Brosgpmja0IN+OQLo587OwIbZQrYZ75M+9\nkE47WmP2Ozm/lkh8YcMGYK1j3KqHaZfEQuQOc24IP7YWo/uK8SSOyEWmA2si\nmXIx\r\n=/mHD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZAFXEpB0tmUDdXUEMn+MtC9xp1c37rgDtB7b9r6U6EAIhAP8QkNIUCh7YkyhkKukH0gaFiaFK2DA+px2yi0GlPbbH"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601551522-25f498aa.0_1601551652442_0.1928657533892857"},"_hasShrinkwrap":false},"2.16.2-next-1601553290-ab24846c.0":{"name":"@xdn/core","version":"2.16.2-next-1601553290-ab24846c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601553290-ab24846c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-zQ01e94agRCuVNhSLjIstakaywugNfWgWzRRbue1qGSgznnns9IRihP4mzNkLvaiD2qkdFiyzVvlC5gttvaaXQ==","shasum":"925181ce2ba4f7217fc2e825bc3b800a32521dff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601553290-ab24846c.0.tgz","fileCount":153,"unpackedSize":562463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdcPzCRA9TVsSAnZWagAAM+MP/iTpnb1qfjkULXO3My1Y\nuvcTAj8DaNfvJMIkc3DViHxNDLuzl9cyER4oQugo0xxivKFXljHivJ3+2SNA\nZszFYkIHik7kpapEO9f5bQMi98mOSbqSZJVpz+hvtnL5vtXyMN8zcH7enHsD\nvlITC4CrbANsG+W18LPjUk6jvSatS15LrXGEK7Fs92xOmlTOpyaZzufInX5q\n/O0JzsvfOde2VOxlkDaAzuTHMmos/fKQVOpuVFwCZuG1nDqb5FzV04/5vZ9K\nNteG8FdqMqFKssRGNA409eQ4BWhwmjyAkvfMhb6JwjGF7epwPPOfi9vba0oV\nGBXQ+WmKQydFTeaJTUBXKIJ8To6ArOAX0vtcMus5zY8dLmCDU97wJaVe5WLP\ntaaMdQ5fn39VES8WomPBVU2omshEQ4GVAmKlO6ZOz85dYDBquIBqGfkzZry9\nIDmxIUubDv3ceaRiecNwYgT4GuNmn0MQGqa09BzzEcshxMISIioILaWsVYit\nklvMftiwqnHUDA7/E2Onc+0zFMOGxEojPKY1kuwUs6hQqjE6bWMC+EiEDuiU\n0t2JYqzfCzxDIOPBU2aLK8pMDJz4/b7lPLqcEg1nWQhgaOFx4zC5lYQ7ptCo\nbInAAQ2IivBl7nVM3LmA5h7r5UOpe1szA2CdOee6qzYH2PgNZ2Uar/D7Xc3p\n604p\r\n=sJ9S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCX3Y8YaEDXkKqM3mnlyX0Ze4wmPoaBJDMfwuK54Jex1gIhAOWmFtbUsxmeJjBssgHq661BDQ0jDqkFeGQe7XmxrHyy"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601553290-ab24846c.0_1601553394894_0.8798055595375951"},"_hasShrinkwrap":false},"2.16.2-next-1601556447-10a8393b.0":{"name":"@xdn/core","version":"2.16.2-next-1601556447-10a8393b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601556447-10a8393b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HmaVdW8CVCgemAiNBnbOn31ukCUvK1WaSv9oyKQRzqjYwSIGWiF6BbJNxhHyo0Pj/qPRLmrvryjDXJMbSVfl5w==","shasum":"4bc4529c92ab41424925cc22b113100002fb0499","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601556447-10a8393b.0.tgz","fileCount":153,"unpackedSize":562403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfddBQCRA9TVsSAnZWagAAq8sP/iAudYyoH0VdiHm8eo1s\n2dqjwcvKWOLkZ0LUF0HtpLbSuRS2eVd2DvzMdZA4DicuSyp+Cxe6O0B0eCR8\n7W7aC/7lORe+gnPQe9KFwyo2tdorQafZAIGcRw9ZAH/1KqlNLbcI9ORd0Q1B\nWaAu8wysTYlLKSyQfPuiQeX68jQHJcs6YnlNMwV0elb2XYymNf2+yoFyh10O\nTdnm5c4hiIzvNUweHHHx2957v16Jp+te65jCt93T6FJ3KUBr9rLP2i3XF0Ru\nBMgpQIWg5bbefUajyI/3lQRO/ZAHyZGgt4wZGbj3rxTAYfdkhTt7NxvtuKwC\nNGv2DN+0aP6QoylEluEgVI5HqrFZmMG/Vv4QUfA4SA9C4b2lDfZ8Wq1vwh1m\nC+JcIfQNiY9EzS65Zs6SaCFn4x34AlMt4PRJXZSnrLfpH97W4Kijpqp8WL26\nvGlewO5MrXFpI3+6kdrBzHruhoT8s/nrXtOTQu8zi10KKZr59yaIgY4ad/mo\njlY0lZ6A3KtnlSoW7eDw5qON9Wb/3SpmBu8Hv+8RR04+G7aVyM0LUl0lPDqQ\nMqoXvuIj34kdgzsex8zCuIEr2Y8ApPu8FAquvylxU9KPhf3Trc/R4TQcs8/1\nBKKngfR/U2hFMqQVP3ZrWFWszAvDTvQRkZpYrvAm/Jym5cTDW/MBow7TtOxK\nQi+z\r\n=61V9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIApEE3sMbX/mv2gxklg8d9Fg5PV/KUfGaNCz9kbUyx7lAiEA7wuwU52S4EImdWNqxbEbzX4XLJqmqaB6SZ5SBeDEHyo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601556447-10a8393b.0_1601556559542_0.44231952305239974"},"_hasShrinkwrap":false},"2.16.2-next-1601559888-773b1b88.0":{"name":"@xdn/core","version":"2.16.2-next-1601559888-773b1b88.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601559888-773b1b88.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1xKgf4Wr1xe7YNeUWk03uQsmdji0mekbqkmM886qHRMugwgQBzoHYeQ/RXjzkNcNEJChAvUpZ7PruDqkQrQJtQ==","shasum":"5e212514205080ea34e7f71486e2e73cdc16cfaf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601559888-773b1b88.0.tgz","fileCount":153,"unpackedSize":562403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdd24CRA9TVsSAnZWagAAgnsP/jUokfY81Yw4yMCJdyw3\nEwfeRfZ1kWZzhmfhOzPfLlLWlxFCHW/wWOtYlFyLdilK0NMmlD5inYSAXr+5\nDlxtLp5MaLfNHxnmf8KiJOJJxxWQIiJRCD2xrygHFB0dOGRgPUC+DRbEvKzF\n/A1FbkK2xPY4cSf1mbaIDs13DjDZAt5XOMapXYSNQ30ge9CmSQVQVol7uwRo\nHGrLsk5sjlFjOdDyGMS0OvJhkzz54nKPbJsXkN7FeYzkzQg2bXRTur616ZfQ\ny4yby0MkQyGt9tHqzefwcIcQDu6MzXpziGHMEv1zQe8DxYL/6eo81wNhtH4w\nNy6RJtdgaAzW5GWleIYaWj7UsdMdZQ/ey6fqPCCJJPcFTNq13mqPMgANzsnz\noFY/jFHpNyV0HRiCK/GwQXYBy0oBny7pZXZAPa1Lu/cEiZ6Alh1V+W85u9Bp\n5s59rB/g7Wfr85ZTwOvAsfyDSj7rTYRVLnp+I4O1hYGeuXKaAiZzAXCp58Id\nOo0MH4qwTRlEb2tr7L4c+9bwpgekj98m3CQkys18DARVgP8m7pslysrc769p\nocFfl63fn5XRWGNZOj9GeguVPk/ZuBmziNDreO4tDqqetmdvUuAlxSyrean1\nEv2omgCFI9YlCduLGyTYEnOSfM/ZIg69OiTWxBXUNvFgFgWyXBkb+V3tft8T\n3mjN\r\n=xQLu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuZ9ennHX9/2THgBaDXCZZMpCAjZRplGcKXPWoNZoawQIgALA+k9q3m1rGM+quEisZltlMwe8/rVa47cFG4b32Dxw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601559888-773b1b88.0_1601559991468_0.15027345621040622"},"_hasShrinkwrap":false},"2.16.2-next-1601561015-bbdcf76d.0":{"name":"@xdn/core","version":"2.16.2-next-1601561015-bbdcf76d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601561015-bbdcf76d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-NiwC7hp3vUiQ0sGlTs1SptQ6JfeuIWY2zu9NEZq6UZ73+7ZZvOZSh8xCPHcxd4Qsgf/nG7s//uo5jBeoO0aCkQ==","shasum":"4e7e265b6b5a5cd87b166daaea5837e01f2a85f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601561015-bbdcf76d.0.tgz","fileCount":153,"unpackedSize":562403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdeIsCRA9TVsSAnZWagAABHoQAIv91rBz+9w5OX4N6XJF\n9PIyZrLDA4toKhEUr+4ZSCa1O91GolgaxUWbNh3yzjK8o/x94+A+WsXomSQB\nkHt3ta4PSULvZvUzmK8Bb6hNCQg0JxV3rccUhpOFwyLX5Bw7pD5+MJe5b9e1\nhoiBbx4IzDWyq6kC3roNBBNUY40n4F9Z5pGl9/Emy+QaEyG9d1Puh9LkCB+s\n4dcYFpAInZMJk8zm7rlDVPhQ9wwevtk/kcf/hWL/AxEWQKD/zb1iVvQoNmut\nMeszWsQejyaGTFfcF0ZLUR+iCr/isDGVFkHkx4ZeJ50B+b6oxwbr1fyuzidO\nqxdEhjk8fpajyRYN31vp7w1amQBJI7fFRkBs3WhVCq9jWyCXH56xSt81GSu2\nHVbocAd8opUgfHhuSWBznm39Jg/SwSZJYY60N2/xvN8PD0rE68T5S7ojCbFa\nvF0M0znhA9OgWyvjtfKk5KwPaCl2NCECZa82b1aPFEd21RebeMmxIUD4E6je\nVHpj+lGYcPc9BTybVML55XAfGmdWCTzX6zSnvbXSE1u090FoLfangtSZ84Oh\nQZclFyczcPhqdbOmNVFPxretv6nV0Ptz5dkjrJvhsN2Mel80yqKSA29ujXYa\ndqdwN9+TfCPMleHMdrBYjVRQKy8Wl091+IOS6WxOrY6clzwjSjJrYmTz0lid\nhrOl\r\n=qikA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB8itSM29qs/OHbyKTIujVLcL9PgyESdEC7tPfWkzznkAiAt1lz13pWFJ29cX8aqWjWALfBnJl52+qRBBUwVXI2f9A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601561015-bbdcf76d.0_1601561132089_0.30804961731800873"},"_hasShrinkwrap":false},"2.16.2-next-1601561426-5bb06db8.0":{"name":"@xdn/core","version":"2.16.2-next-1601561426-5bb06db8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.16.2-next-1601561426-5bb06db8.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-654TEdn5NStg1XNlLXP5EzHj+vl1Lnkte1EpeT/7q61lmEjVM0QyxOjdDA5ctqu4ljN+MuZKrADm8sPLvj73AA==","shasum":"5ffceffa22a14a1e0c82904383c9631219c0719c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.16.2-next-1601561426-5bb06db8.0.tgz","fileCount":153,"unpackedSize":562403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdePDCRA9TVsSAnZWagAAYokP/3a3qGh6TPsWTp2/byeK\n45RFQFUy4aBEOtNtHrcEscBP0kpkMCRhAgT7BxRq/9Umb0DQO4w46H1WhIBu\nZQj0or1ZbQBOL4JJaTeTD8bdOdNZo+G5rKXqH/0OElnxLVxhiS6T6pC1OaYa\nTU6n/wWzjyA/Y3SdlUoGvhH7raNXkHFqwfSeARxv6v67YduAsevp8M6GV8IU\nKFQBynwRXiNWdR4MV/FvOqY2B1flfNMEBUUOhG6YLRR0tyCz9C097oN4QBKa\ncJOFHTyrlD1OUZUxY9BMEIfO7EF6eNw7dsNoWSjkI+zmDZnso6koHAkAMABj\nRhggMq7PFtf5AKbmGcsgySE759fEKJKT8pEZ2Z2fvez7DXDsabSCsPzhUbaE\nAG8z2zeCv9ZNu21tXhAdGYsXG+Q9EtOwWEyA7dE3Z+pjrve3gFYD/Uejjjjd\nyfugM4M9iqP4/Ma05mkYGZhD+q18tNHuy9wX2Z0XEJlJ3Qcy/jQyZFy7Jc2m\nJAOapCZcc7/zAmqGdYVzo5ClEURMizE0FagHBvJ/xmGASp0hwJNClrWbLZWf\nMGvziarfOOfAN6I6ME+tsGhCC6W9Y8F3jaslvHUCCYEgaRIG8tqt+lnZpq+j\nRKcEhCFkkDPD+s7UmgPl3FSo//pRD+sq/d/o1NjcYvTwoEAKoajJ2qjGbKRm\n31Bl\r\n=EmSn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZ/dwp6aX8yPUPVIDgnBunMMBsOohPptbwR8KeDt1gYwIhALRCwRVETFcFci0q3phhAAWx9gum6pEkYaVXGc8qJXRk"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.16.2-next-1601561426-5bb06db8.0_1601561539263_0.5542436526030665"},"_hasShrinkwrap":false},"2.17.1-next-1601562480-c2960086.0":{"name":"@xdn/core","version":"2.17.1-next-1601562480-c2960086.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601562480-c2960086.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-TRCoYLrlBIZACsGVn/AF/BJt9jCzXQVCHdMv3QbRmK6JQoKW1LFyeH1k4IHZh5dMjOL0cHCz50vrAor2nrLFmg==","shasum":"2fed0e36d85b2198f929ca72195e331ba62e5286","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601562480-c2960086.0.tgz","fileCount":153,"unpackedSize":562403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdefkCRA9TVsSAnZWagAAkhIP/jM/IJwdmboo+TnpM8Rd\nXnGJy2NvW9wt9Ru31TYuEWeIirUg4BhqnrvjbTKngHEmLH3IxbHoXgE+XLBp\n165pWm1FOE00g/PZT32LaaUHJZbc11cacyv5A76WzUc1S7EUG9l1pPA2lwni\nXB1OHp/4NBPPEe7J/+rb7dYJidIkT215ZHwJmNZYVmfxuRqPjBcuWqcMTUa5\njAdUhuqoR50RPAjcw3Bk/xHMKD+Rm6Mvnj9xFOpz9PyQN9MqeecMOtAyTthx\nEZFzP/X+yrVfW8ZWd0bsBXf7mj4DjpZCw1/2ybkPg0siZ5ezAQOEj5FYICTV\nE6bwoTMdRBK1t+UfYKrtSnQC4txc+lRyTJbsguVsR1Rx/MBErtSjbKZhVyQL\ndYXGZXuizGbAUkNJBr6/tntjfc9iLlVXYG1zBFPDGeAK7HbEB8n9mvORX5vA\nQXnsawo6B3LIAdGFkCT53WvhV44VNW9Hynea0GRwTuAPLHwbmlO1ueqNyw0f\nRBzDcfXA3mXEzonOeEsLY4185gRmYbQ/co0mbsxxnby/jj/pEU1WskFVgI8h\necsocIVNQfxoEcbfc4BKdjaJcou5LIYu/T+1JM5MMI0GA+2KbwiZW5D8JIK8\nevDQ97snbbhY1nnaHSem54Yx7RMeHVICc/3W8Wh/WouLpUDZXfmWG/49Z+Pz\nH2YW\r\n=n12J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEB2fLkTxCgse5HJKNyJ3WlbfstCKj+TWe2gngekRHg/AiEA4XubGNrtDzL97s0woRVYWZohvr+hnvC8tIsQk4aPRXE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601562480-c2960086.0_1601562595495_0.411493941484828"},"_hasShrinkwrap":false},"2.17.0":{"name":"@xdn/core","version":"2.17.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-GKnNaKGSIedxVtAkQWwxNjPDpBaFpTCdsTst7xesY3mN57flL4+AqU7rpMFyE5/8FafNPQheJRQ1/wPVMNo/uA==","shasum":"528ede78bff7b53bd7fc6b77cf2636672c5ce0ae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.0.tgz","fileCount":153,"unpackedSize":562349,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdeg4CRA9TVsSAnZWagAAzaEP/1D/0AEvwAyPlq/UZpVo\nzb1Du0lizEgu0JRwu7tPS6j7eodRvLXdaHKbFNgCQJ7xzO6EwBBMe1R6yoVA\nsRa859jb0W/LI28iq5rOm9GMtlDOEU1rptMynGJ/mXJj8YtvSu0LuJ+/0/SV\naaWG7LUuKqeQnPfJwZUiNIJAGGoDEJgQEVxE1XoQVvF4sVV29gMuDQa2QBLB\nvAT/zCAmb7R2Ny3K+846XK1KrKXRExxCV2OrVUV/iJOQoSLCztieuS/IR/au\n9Ml9Edd13vzWFPuCEROYlD679otOXp/jRIkM1j9eTd7iUchgjSC0mEECdbCE\nJtneZZlOTxjQzU+57jk8JBQIqm6UCDht0l33pfzb2Ii4R0WHAP1729EiTFyK\nsBgI3E2A1D7Ua2YJf/YK0A/5Tn+JdZy5vYxi5Nn90VjsmqhkWnVYr4mB7XWh\n5YZO8N6Q4HMqdvZsLuAJWtvSQA3mMN0wm7dYGYvdNZ32j/ny4rVloc3qst9q\nlMZ3aOoyOR2NwiK9yJudSZzxftkgWZA44F2LGWNMIMxfQvi6zlC0NdOg+l+0\nEwoxeiWVf9fTDW2GPTUSPDoVPReG4RY3lowoW0hz5XpbRPa8L4pvxtQZx+im\n/PzFOPxH1mmMjgBKYa5fwDh+V8IdpAjOjUg59qf/N8Mk73EuPGnLot4qA3sr\nK8II\r\n=TYr/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFl/g27OYGGpJevU/zZhdLujQmvc9PO74L3Fcoxd1jqXAiEAoCNFYM9sqlBbIlinHWQ0e941lgYo0vVmyC79zZk6hoA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.0_1601562679914_0.5774322604525521"},"_hasShrinkwrap":false},"2.17.1-next-1601568621-303af41c.0":{"name":"@xdn/core","version":"2.17.1-next-1601568621-303af41c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601568621-303af41c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ePPwjhheMuY0PK7YiB6zy9LSy/c3Iu0tx2HaNeXXgAdkepF2l5QwieTFM16f+n4UbCyrU+Px4fJPu6/YulJNHg==","shasum":"e69ca23d0008f87356bae8961d6b1d2198e780c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601568621-303af41c.0.tgz","fileCount":153,"unpackedSize":562403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdf/UCRA9TVsSAnZWagAAgH8P/2RRWXjKq/ROf2rTZx8w\n23hYp1BPe/hTtwQgAz/bXT5xNGhkCbRQI8PdTT0XaDn4rLjmUSzFN4TCVHgl\nty0hBlB1sw1BOh/rb7rKtZpBJ61FGhoqc1obKzPF5ISsZCeIE7REVv9MU14w\nZM0+9Bnx6khGcWGixzTQD0jqUnosrq3QvmnCW+gT9Sxf884aOW8Uawo/VJUz\nMRbvzg9iRs56HaQ4C/5r18kc3VCCei8t9aH1O1RUUp2jT2bMiHaoWHFlIkHS\ne2m1bPR8J71NE13BF8G5uDdp3geM2zU6/a28KyrKUyEcriDBecR5LhZf7O3w\naRvUVgkhS5m+WjVjeh2HhHEYpM71JJWIBi5WtIemcoxgaYBOUbCPJzejq73F\nkON2083X68dSu/cP79KggsnDohVhOPTPUKnJmBb4rr8s8fwG8QXhR5B+nsyo\nTQPEMMDjLHGXx48P3glmSful7CUNpi2lDQlZEvtp2Pqhi1jeA7RaglsugC2D\n7KTRhEx/V0DMlLombbWSJwQx/UAduCsevthhPIb+jo6mBxOaQrufhq+1ljTg\nhHCeH1BizqITorNRfEbyas+ZDEDqc6poJEkqQUX0qOQMbMg7MzYrYssKiPVh\nZwC4ALJk2Faa34PKDoKginrRzb+P+Z25YnGivO+3/aumH555WBGcaqAFp8dl\nYCNC\r\n=WbEM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzmInZd5cYDeavrtP0qaRiSyrfWHT2UtA+vhGsFgzItQIhAMSMktijDI51VAFiJlmYmnhEpwiMTIhsr85X+v+YEjDt"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601568621-303af41c.0_1601568723894_0.9375522176539974"},"_hasShrinkwrap":false},"2.17.1-next-1601569930-ad9d35b8.0":{"name":"@xdn/core","version":"2.17.1-next-1601569930-ad9d35b8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601569930-ad9d35b8.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0X9o9g5H2N7msrQcJUxX+Y2Cm9h4qSbA7jS2PLdobJ+pNiafhneFj+SkIs99r9m8oUQK9Pgu9VTKm4D8Z7BHfA==","shasum":"86766f3cfc43f3bb5a7e4973f0623ddc2a776701","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601569930-ad9d35b8.0.tgz","fileCount":153,"unpackedSize":562403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdgT1CRA9TVsSAnZWagAAkQUP/RS9rwVsuAYmIBfaY9Ai\nG8GjDY6eZei2EhFfzzrTijWLlFULkf2zsFAmJHdkwUp9O/diKdhzJqFCH0nT\neA6HRp54HGPwwJDSb7PdxAX3uKYxCJuk8mz9zkebCYg3FKMS5wTG8BP9TqDZ\n15R6FlgitN5r7qAiDc0wLqLpIRAXUtTNBuQicOZqyT/WWYuhEPbp3DrX+7gL\nE2+/73Zhog11eLApz1JcmsbnTfXOppViXzhd8LMCr/FWBsnx4GkJjZ0Swkqy\n2hBoE5Snbe1yuWGYsFjCwsE1DhSh60Snkxm24cpeWywBYnEpMQAMXtGexA4v\nKRl149XjuwCpO176VSBmmqEGSQKalQ/ttBQtl8UOK6TEkes27vbJpPEFM4K8\nrzw4xr3n0V3W7DmVSDll5yuXxBUaL6/UZ0yBuhmKPzmT6V410mrdP7CwTL+M\nvpRG3lznU2LvnbzYZFnMjUEp3CwXaADq+54aIh8zvQIK3WkXQSs0DvLJovIq\nCezFQsML76zz1yppkgfVR6ZlKAu49RXZt2+ZMv7bMex9mHuGeNsR37eFmV/9\nekCCHQHVtDQ5OOgTkih3L81PMk7sjasOpoKptQNUGHpLSvrIvFZrnzpULLlH\nzjC3LuBaB8mZgXMjhJhotgCAcsiPbedIgQrm05QoRusPlBh+uNOvn/2ZeXzP\nSDVe\r\n=CmUE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDZ346TIqXnoeOy2Z2q5FZW5LtIMt+CZ14e3IN6yGSEpAiEAsbTi4n+k4Fl+BP3EHar6J9Pm4gePIZK2qozRceTnAX8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601569930-ad9d35b8.0_1601570037363_0.9862954419392018"},"_hasShrinkwrap":false},"2.17.1-next-1601570971-ccc86704.0":{"name":"@xdn/core","version":"2.17.1-next-1601570971-ccc86704.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601570971-ccc86704.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-uclpnLZbRc1oKcNrx6uQp70925i9/mbvI2bgqQyTzXyyZJBFK3jv7hYhCPrJ/Z+HmzcRwI9sXg7zaky3VFBs9Q==","shasum":"e35d4465130857524e2cadea3dcb9495acf63678","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601570971-ccc86704.0.tgz","fileCount":155,"unpackedSize":569293,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdgkYCRA9TVsSAnZWagAAqwsP/iwNVfbkmXJS883hIaCq\nff5G/1i/brhM0oJxOuMskDpJ5o1bM8VtnNBdh8uVgRMu/mJrPOBpVwb8bb3M\niQ/1qNurywmZSkLhngK5hhd0azn4GBRFdFykZXBQ47m+WC5Cf2zSc3PhifTM\nkokBNXB2XMhRnQv821dmPjhv3H6iBbXNdhPJENZkhvo4jm4IJESBfsS2jb+z\ntO9K0/X4jgSagrAcL0Afew5o0utI0JpHTri1ZIg3LH0Qb+5L4DMCzvdGftlq\n9iL+dKhE8QkZh+C8sqf0zlTDZAWHd71TxRMkYSKDIos8asLx6tl3bzG0bBJr\noiHdTgmWSVk+NypmIJ4h70W7qiYgP3BWBXky3A7bky/nmbBIj9lseqOwtaBd\nqI9JMn7JABzZZl0eYz7MCy0xAiOsgPPCJqli1JGfPDay6OUKb+c96/c8bruQ\n5XCGa2geqsA8N5G8pBgy0WyPpb6AZb9AeO/uLavGigZ0os6bf3l3/rRFaAhX\nS+GYm077ysbtWHEIy9h0ObQWqywK5aCAJ2pcn86Wme7WMpDe/Y5XBgvK83++\nRB3VlX78IJ6GcEnJhXqJKz7LPX7CqIglJHfZfNLkgPYXqsCVpELWVwSDUTBq\nVmchrvaVWtlO3WPyGSeVFlqZIGKYxHepVnb0FOLAqvSD6cORXdMO3vL083uC\ntXqH\r\n=lwMS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEtz4n+9+yhL0G6fm5aPsNkABZxuJY67zxGDUWo1ygivAiAmWm/Mi784fJ16R7cK+7selxKWvYBL+7cKoKhiY9ueUw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601570971-ccc86704.0_1601571096197_0.29131228413285837"},"_hasShrinkwrap":false},"2.17.1-next-1601582318-d05af1d7.0":{"name":"@xdn/core","version":"2.17.1-next-1601582318-d05af1d7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601582318-d05af1d7.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Km3ET8pKyirlNoDEqPixBeaVf7nrLFj0bxXDkf26SMlpjShjNF5pt617C503Ze0voM5clC1T0nYNULV5JUydMw==","shasum":"eb07d06091e4e7c9bed2e47272ef8119b28f6daf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601582318-d05af1d7.0.tgz","fileCount":153,"unpackedSize":562093,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdjVUCRA9TVsSAnZWagAA/ioP+weZVHD/dV6076VOC6Cu\n6pXedoE6x1q+YUduk4ZCAoOvkc+g+jMpYg5vfQuiFRBwoDkUVBCSN2zJKQjn\ngRjqkx2N529Z4J49eLsYkEk1alGPHnXNj1CX5YWCyqew9zKHVm6otHAut7Pk\nH5owv6Pdun72KY78g2azJL+BMsqGBJ2jQeDj9/VO1uSi0NMHbKPgmfQXj/e/\nYjhmkIH0MwsoSzkwtA9MIU1wJOP1K88OWzaqV4819bc0ce7uqcO7CMApBWQ4\nkem+P+rbvenUxXECG90wPfSkMD2yiOKDfZX0ol9xZ4Znq5hwHmdGW5tIdDN2\nePvo8S8JsCrk0XW2IAuXk4RL56GP8h1yfUH3dhNQghRd2oeaUnu67raRHpug\n8HyW+9LraWAERVbncLlWsoy/TDZd9DxgFBs6bda71vn74jz25ZuzNjoU0AvW\n7qAPBGUAAdCkQAJnHdMJqDdPUbpoPlo2lJiCokDkOQLFkddWgpeRJkkL8AAk\nqylQOGraCN7Twh9sMvo+OAlLFoXCudFzGz9wU5G97rqTym8Xjbn2Cqi3CWky\n2gGAdWqmax2yhDzzZa44JDbuHvkLQ59VSNcjxZXk2HvKkzG5aOPXAXqRyCSx\nnwEP66KfrBMjEWWsvjLgV7SELPlQ5/9PFAQSpfTLsjrYNml9OxCc77lAoQSA\n/wRo\r\n=UKXV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCM97moWr5C48vf3bJPRr+LaKxC/Yhq6xHLZFDJyo9J9QIgEEkXoPOxVoxAZXVPGTz1prCXOH48rRsBANfLSxC9XpE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601582318-d05af1d7.0_1601582419517_0.6847638757362184"},"_hasShrinkwrap":false},"2.17.1-next-1601584943-e7c564ef.0":{"name":"@xdn/core","version":"2.17.1-next-1601584943-e7c564ef.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601584943-e7c564ef.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wxBrbJzi9a9eCHEl25UfQmG7z0JDoEuR89BGtzr76kjA+NKTf6qAKqj9UoriXkEa6gEt32g9nK8qD4EdVNdc6Q==","shasum":"b20153e7b6c210d66fd145df707888f6af98bdca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601584943-e7c564ef.0.tgz","fileCount":153,"unpackedSize":562933,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdj+iCRA9TVsSAnZWagAA1I4P/3jpWuU1ScvMeTqj29Ay\nmpedhRCWoF7HvUKXEKHjYQqQDup/UrUBxsreG+NB0+GKdyeLbrxsvDAbaig1\nbQ8whGcJ6XU+DqXE/xrPwZI5PWgNo7YppltoXfkcxtO9+nDbmd7lzueZtTmY\nRX1m+oW0eA61+P4z9YO89fVxypWw/dDt4YrymGgqbrfL6dAmsYWd4Vme7r0s\ndyFJ1ZR88uLKVB9FamRhWHhf0onLaba1V4ZVY8nggxWdQuLQ2EjoW/7CxfDp\neGeWWq3QlEG+chNoST5Zk5KkIealkcy89P8ggjr9zl9e9dCb4CraSjudKsBj\nGqRX6cH9CEp0IdTVy3xeYjU4uGnZ7OVcH7vR8MZ3JFRF6F+IVNazpYLwHAmG\nAL2Bzl5yrexCHu/ESbaIl/5+N3OB5/hje2WVYGJwPcT0U8Qg3CbbGl3+Q7jP\nUP9sQZGDDa2dS7Xy4Cakr6iirvSXrw4e+4mufpKYK5xjNDcs2OFFk5K1aZsz\n9Ac9glSn5AlZ7xupKhwWpH67guYaPWz1kgs1gOYNVFp9wEB2FJ2Ona4qVbDS\ncn4uRAjsqyYRpikARo8PR/SCok+1oT/f8FUukaTro5WA27Wyi1gkt5jKqJ3i\nM/NvkEB1dAQgC2qXlFrM+rKbaPIGD+YLqy3Sv8hrnkqsmQI/LUdbTQiPiqUb\n3ICM\r\n=IRpz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwGE9xEX/MluSdLkuoBen52D2j4kUxDo2io8dS67VMXwIhAJ8arYEmiuqGZ4TG5gvylUqUl4cgc90nF52jcSckpW0F"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601584943-e7c564ef.0_1601585057943_0.7768809651167543"},"_hasShrinkwrap":false},"2.17.1-next-1601593993-8715d591.0":{"name":"@xdn/core","version":"2.17.1-next-1601593993-8715d591.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601593993-8715d591.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fd16LPRLgugDFIjguevg4sz9edgo2B3UNXehBHSDNKtQyG33zzrU93W9nwbRpTescyDo2YhA2mDXu80h+ovWxQ==","shasum":"481b3e8f1a009e2cc75f755b2f25afdaea18b203","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601593993-8715d591.0.tgz","fileCount":153,"unpackedSize":568024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdmLqCRA9TVsSAnZWagAAdi4P/18yGIdc+AL0GfgVOIec\njC/P/AGAEKD/wPlFRI5iBwafQVvlkmYG3aUvujCyAVi98UNDpgZJsxr7bszO\nYLD0L0ZlRnbra4MDyb2T8jhfSEqNequLixYcmUwdpRXbDsJ4QrhB49/osH/k\nXKcDkGG7mv4uc9usDN2x/sen/gmQKIReHsSnX/razit1vwc3HpHJdsRmeVba\nz0KG4LH30iSehx4TjAwFSJwcWYmVzWI6hrUILBcisSIEO4ydngdxBVEbrgH9\nJUBb3rvt/ODLc3Qf+8DAIU7d/2QCM6vhJnJ/ocORBiWqSGBa2j0nezK7cnne\nRTjkynBEa+rvuVxkMaFdZySK+Fnu1hTHZzyyBaxAyj0rJO0fJ2hQ0iTrEUuE\nB1VduJaunu08+0u6cbwR9QInGpSjmfaFyNxa7fjpX5Z/12U33M3ej2M61MYH\nL0MWK6RuW8tmmRpP9Io09sqQUYHyeJ2kbZ6x/Wv5tJVV3pAX/zocmsNpfM0y\nxoeJVanV6JV0+X8mnJjX/Xb7/LloE8hNXbbpannFk6r0Xj6Bd5wepRX44wtl\n4pfFALUdCNcNDX1GtrzZdm9j3+yW/tkFMsWvoLMBnxnjmjBoe1mc2bN8fDbG\n+yF8iSHK3Oj5Hdr35UEw+ldijhmSkYiwA/3B/ajYEPGmyLLIE6946EvqEtV2\n477j\r\n=lZ39\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKnE5WgmsFRs2CgGH0aQ9wlVCxEzM8G1dUCYjnR+dARAIgIEhLrW0c9ZZdgdPpeY22/1Sh5VyDONBkGFRQJbNf7WQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601593993-8715d591.0_1601594090223_0.32915178361141373"},"_hasShrinkwrap":false},"2.17.1-next-1601595126-7ca0f45f.0":{"name":"@xdn/core","version":"2.17.1-next-1601595126-7ca0f45f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601595126-7ca0f45f.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-M7eFBHi/g4/VJBzlRipnx8iUobfy5EBrK5UrtCFMqySSj2aW3Jdd78jxQfStP245jlox1TN+gWnXMngSoYOMuw==","shasum":"f950c71843c9dd4dafc0e91c727d9d0c42009b7b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601595126-7ca0f45f.0.tgz","fileCount":153,"unpackedSize":568039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdmdUCRA9TVsSAnZWagAAYsYP/ij3z54oFU4KJ+oJIBvK\nxZceBTRQ1hz5TzNqK+xRl+FtnaEgO7B4LXa+MYDYps3wirbecz5AreWLkg/q\nuVHlEDn5NqV/tzo7fw3ptbvD5e3ed94vkPce0+RD0fZ1Cjd+7ISWlUQ3G0Gw\nraRMk6Q5qCDZeApcD5/8v+0qv6vEa2S9l1/PM+nTxQI2NgII6GQb1lfbKNHN\nIVnKX5XJywoDe18MyNkXfczZSjNv/y0N8dMblcV0bpZzLvqfHBGB79Khu4VL\nh+4UQu1nk5iWz1xOLtDW+Ss8gHQ+zWPQbybWQ1FkGaI5BbKItyqqLHJ3JedM\nyhQvfuPFfYwxmTCPqNbhyVOlnDZ4PAkLpBnSfDZDnG+x1XUml8rpFVvTwsoB\n4vS3F+cL7S2lzKI7K/8gk6qARspfL/4VLa5MAnoAyf65EROG18TBcoT5iqL5\niNf5xzFgTGLBGWRAZLOcuntXHr+T07tyBR1YQe9Qmk1Yt/W3wqE2CxgsiQwG\ntcnG1JMRuXm9Rz4p8/Rm77+DuUk35OkM8xGbvYF2nBy1S4PE3PfKVnNI9TDS\n+O9E5T0212p8M3+ICZcQKMUeQwAPqCdE9Rcw75g2YByQj6JQW8+0CE6CDk0u\nyPIhySoJdgjPcJeCTh3QA3KyUeYTaNyBhma5hZMkavFjj8SnMv+EARz3QYBE\n8cEt\r\n=4SnI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGyECmjz9AuWnO3wPuviSammhs1pzDz+9dGfVncsmT9XAiEAt/XtJcMsLeeQIsfN70EIEcHIfoCtGMnXBU/ZaCLucv0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601595126-7ca0f45f.0_1601595220098_0.44395560345237195"},"_hasShrinkwrap":false},"2.17.1-next-1601599497-556c15fb.0":{"name":"@xdn/core","version":"2.17.1-next-1601599497-556c15fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601599497-556c15fb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FZdDAR0aGh2jlDLVYkiSBA3KE9T7knAdXIfAkwq99v51aMCT7IhpIYugCfiLlCcB9KQUVygMKYr+MF4R4rr0vQ==","shasum":"81962a7cd590496fb19e14e7a26c0fe03d1e4e5f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601599497-556c15fb.0.tgz","fileCount":153,"unpackedSize":568139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdnhzCRA9TVsSAnZWagAAEVgP/AhkOhYQ9tMV7pO+bljK\nCUh011UPx4VLcItW+RngXq2IbwFkqonIAq1hmgGCODyp0qLzH+X4TM/Plm1n\nk8I9vG0VkL+iDpMnedPJdP5VLnJZg/GHIfHy2JAGdhMdNe7BbewZ6ZrD8e/N\nQGsZ+m6aVVN2Q/ZIGW8O69aqQeOgkaeFXrlrdVnXvBZs3BxDSqjCjbWWfp3G\nipq3ua0taTpTLy15gSpEqp1Eug+GZX7DL0ujdLvddK5i0HxP81VE1mh9c8ZY\nM+T5/yws3zVRELVI9EOvLl2sJrZkRTyI+CmfDhQEtmYVlbVoOLgTghxOciHG\ns+riV3bu2XE7kd03EKicKDM3f2FuS7nlZ1rJOt+kEh0n7I0oyw6qcvdtdQUq\nli60Scm1xMs2em+G3LLVkgC8ZzjmjiJYbmXr9Euxkxw9HnIbIakX5BLJWK0I\nhUW6hd8OKthWot1tdFoEFu+zlwf08O1B+zbI4rNYs9kl1cyYc6sqD2v1ccNQ\na+5/Q2hOwzQYXlY3SumRfU3WaOZwV8T+0grkf+y6xKzRZ+Vxmk6pK99QLLVP\n0L4SMiNDYKNMM1N6XBmJrcycBD3qmb0DmUCihnuGYChIOXuy5tqxQ86p1IgV\nPXES3EFXX0pTE0dXKREGpbQ7Jv6Ar+mXWezwI851HsMbOdl5Z/GgDMTIgS+D\nYTRj\r\n=ixlx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0bf+GnxDPLSUEEoZRhYn4kldLJb6lqM11Q7A/VqK5/gIhAOOJdnVVHQDFbTm85m2PaEoJdEUb37YjKsnbOkLOQVFf"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601599497-556c15fb.0_1601599602948_0.6414893369496237"},"_hasShrinkwrap":false},"2.17.1-next-1601604448-287de422.0":{"name":"@xdn/core","version":"2.17.1-next-1601604448-287de422.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601604448-287de422.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jgkgnxnu/mLO9LqsqGxQiENRfDysgPKjv+57H5UlEtXAalfQI6kORZ407GeUO2kxZGntuDV6Qt5Sg0Yiq4nPjg==","shasum":"4441fd3f7dbf198b260e4893ca78bc4da548c1cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601604448-287de422.0.tgz","fileCount":153,"unpackedSize":568139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdovOCRA9TVsSAnZWagAAQwgQAJvPKgHLzlJpnFub/Btf\nXI9XBoGS6VNUEBLT2t5UpbEnZEZxhLc5CdLG/zl9/frpsdXI++9rsHqKYWSq\n/tifQ/dcHDH1979JwREIfZzGctbmbz/osZbSyrIsBy5F3nCBsm98e2x9t9dB\nmm7qXBP/Vg+1lf1tGYvQq+K0BvlmLwwPA3e1soJcICcOBqtoOku2ncpliJYH\nSYYktwW/LKyyMdv2XP+MtsiNg8rbouPgOWX86kZN3mBOsMNAZocIVYrF52Us\ns7qCwnn8Sd1N0fKJQx9y3EFxmv9e7wQmGYyJRUA5LLFHh/uXqdHE1pcieFEE\nseUOQOfl6mxDvDdjFKxJBSWhWWFsGl336ALM7BnpxOLYLrY7pwNDSw8iTyr5\nWfacpi4Dhm9HlzINkhT9jPRok9miUKXepgcPuE10iN+ny2tRITATcc2TgYWP\n71R3DhP9wlE8JEBvLN7ytNNpO6egBHP8WoRxrZwHl/DHrF6HWytrMIO22vXg\nJOor0pE1gIXyiiesU4JyQM3NwuBGpazGAvZ8/hokIUVZvUkSLfaOsOKAEgMH\nDA8k24eBJJiuqMrw2Ct61ZPNkXlEMwhgnFBPXZ298UNDvz5riJx8+ppVhQUI\n/L71vZiwlUibGp/Z03u59lbWqF++dBlMGfalsuZuZVXeW0UflA9ulovH7b9o\n1h8x\r\n=i5sB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEvtGGqDMS2+/cVoMkrmK7tOcgcxMf9sM4gcsUS7mdCHAiA/fy0TeOSk38Fpo49WTgDxhay3us75buxERXMoCBDPSw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601604448-287de422.0_1601604557903_0.9277507492496102"},"_hasShrinkwrap":false},"2.17.1-next-1601605820-fe5651b4.0":{"name":"@xdn/core","version":"2.17.1-next-1601605820-fe5651b4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601605820-fe5651b4.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eOSJ0+WEWvdz7HmwDQUuByR4kDhLqKWu7mqOxfJxvX+Vved1jSHvMYRY8CjNzQdK2XwuPZfvkDt4dYcGAeGi9Q==","shasum":"f0d6bb7b9f7bf34be512c36fa0467d44fabe8c02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601605820-fe5651b4.0.tgz","fileCount":153,"unpackedSize":568139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdpEoCRA9TVsSAnZWagAAhZUP/A/fxo3hOPobx4rILfsA\n2GACAu2TC2I2g/rBTz9ZihYs5q8Qf1xTot6Y607tZV1yQjXBd3+nCYqkq3gD\ncDnwj2XY8/lWb5Gqpt3+QEUdg5I3oSOr08ZCWj05ghB56I5SyNvbUySJBYT4\nLbNFHjIgb3Bp0OWHq9y6PfdBXTGBH7LZuI86y5srFUKhDURlt5IxRSqh0Yd5\nyGatvLdkt29s4vlhxZGIfy4kcb6lqVpC4qOFCFkIvCtuzXWqDgGrWBghWrI9\njRG7RyZW9xC6axVaI79Q7vT+2GVpsCkkIVbM/W/1K/XoUBNd42SHDBeh9DSS\n35so2fpCP2PC77WRKaZitU+EMehYZ7NuvBHhcRak/4adykSpdRldv5s1IV6p\nnRiA/CZKZe0NebNNl/7pzDwuacRwzjLUDRyFzQXoJfN4pB5ZmFtFmVP5mtyK\njPm8VL+zlXIO9zQh+1ECsSxu5UqaA3uF+yAr9+b0xEbVSI09fowYSFweNjgq\nmwZQB9qecZS0tJ5im46zVyGX8PgkIiBTViRDFFAwUh2aBDA2yq0xCPuiS4CQ\nZHQnzaqwCtZuR29HfRrjroxCPCAAmYLLzgoPiS/oujwcGHExV1jtj4+UwZGl\nJKZwooJO1eSD9uCkAYUZ0gjEn86zjLs4ukNUbmbUcZjzfbDTBFdexdEmAwEJ\nklNw\r\n=cMf+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyivdOuFJu/F0raZvvJ/M22+ntR+NmgCxAuLk8i+9BjwIgW3uPKmcb5RN/Ar5RcXmHKf+AO4NRtZ3yGhjMcbhT5Ls="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601605820-fe5651b4.0_1601605927636_0.4377308912260369"},"_hasShrinkwrap":false},"2.17.1-next-1601605964-4780440d.0":{"name":"@xdn/core","version":"2.17.1-next-1601605964-4780440d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601605964-4780440d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EpkdaWnaYe7ssWZE8EOar7VmAChYjbl5MUY0yGut0e0HQUAnYq5F3PPGyVEi3lJ6bCet89+PXUp/jSIT547qIw==","shasum":"91074a823302c49bcff0a5cbf3df97bbc0a026e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601605964-4780440d.0.tgz","fileCount":153,"unpackedSize":568139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdpHUCRA9TVsSAnZWagAAcDMP+wQoe/3Uo07DVr+nxPdK\nNZiKcbMhV5AdYaWXIWapP6XdTLItPZqYviEGnFF0FZWlP9P9ES3ORl7gabMw\nCpr8y26vZKnvvA5hdIkj26dHh6VR3LytRWu1arPg7KkLcE5Rg2QysX+kGKMn\nL2tv8rZnpXYq1tgyy1XbUQYPExzPWpqR0djl7OVxhTTTja4MSPkSGtRpMh20\nMqMwb+qSz7YCS4OMexsogop39YRQwUdpP7bemmQgu6F9zYq/R4eJo+ZChRLZ\nStOhgeuB4sC3RtnGDiVi2Z3DYn/gQ+BDx4Qq1I1PujWC4sqaXdrnkCj0A92I\nz3cUCMD0jJIx7aW/NBYrrm/kbpUKaNEFOGdKzNy04GuBGLC0EjGJVS9zukRn\nl/2ier0X6ySC9deV29pAskEPM9wnxKPfULOerzjIBZxN+PdwQwNTapRaUVGd\nuGLu6/s052DBQLTH3sk75MQ/CVkLdYdve5PCFW+j996atUSOaE7k+XBH+p8a\n+GM1ANlg+pXe7izzKZD911ApOtK5qKwGPhQDBJz2Z9yP6oZLEqodeUOOXeMy\nulesFQi2LNAheNcL0aIkD3iFh9NT5UjaJ0Pm+SRrgnNEKdo7PeVz7TWmdrMV\ns1MkBxzO0qbTTqCmQ+PyP02mxiXlpO+l0ZPmnICc+Sn7EOmfp37/Y53IX6qD\nXe8J\r\n=tMas\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5GJ4VZsvr9ISTpfKrMIZnWFsJJXltnCSKtDkRnwoQoAIgM4YxRPNgl36l9Ow1en5bPyOqstF7YRK5UBPD1VnfhmE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601605964-4780440d.0_1601606100229_0.8614138127734401"},"_hasShrinkwrap":false},"2.17.1-next-1601629464-e280d7c5.0":{"name":"@xdn/core","version":"2.17.1-next-1601629464-e280d7c5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601629464-e280d7c5.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-6yDsnPxdJM3GdXcdckmoGtcOjH+D8nNLQ3WThvNwPizOr4rPtn0q9UZN5OrsPPmkIkqSFGVKk3rHpaVUSK556g==","shasum":"13c03389805d87631d024357af9be9fe09ec1786","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601629464-e280d7c5.0.tgz","fileCount":153,"unpackedSize":568068,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdu17CRA9TVsSAnZWagAAYYgP/AlVzkKc0gpXnZXKko88\nvmrz9v7OPVLl1DU3aAYzAxeWYdrDnwfpLeK5feSnCZLhNXGSTVTGUoclNfX7\n/FNGGWdfpha/Y7uV3tVD1+5qVbsbgdRaipgG/RogcJTJtDDsGW1jSywq1oIm\nXR+i7ruNzp7S2yCVavU4Q28QxWN2zrskKKSQa5il+z3xLzWI7+ibxWOJYOTF\ndax9Ji3LSnWp2knraGKE7m8P6SY72paTh1QQq3n8/I8W7jFeLg4mg/aTWjAN\nmc0TZPMgTOwR8XiODWpApHy0qnGopdLmdU7zIc110Q0yytT+WvIYENYrbUAa\n5GXa2dd9pZlsZUyhyVXF6pJf1l3LtnYkP6+v0LfrDTG+boCrRLMcR6YQ0Da+\nHOSFLghn6JJM5QfrKTCW6bi6L3UtBBE2ga2GoIMeusAr0I6lkGQhuhjwuJC7\nPLI9xqgjp5WVume0vq9BCIH37hX8nz90aVCpYvihHbe7gWTxRhaN6yw5UluU\nMAZQsDVtAaYp0hpgsTSjbxNVh4HTJw6cAtgtL8aU2tItzTxiWptV8VVlgDW2\nSRFiN/Yp3ERQSGLwA362SS9upHtC0SMBb48cKEhh+AKnTa4En0ErDZDpSmxF\nRaV12BZuvHeJBwoeXCslHcQtaNohOMuTrm4vMwA7pd9bXpTfsVy5pMYrrgGP\nl/0D\r\n=weEV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcXVmL24KkT4FwS5IU8VqwdPtBEtvOcWgYw3lwAaiYnwIhAKEGrd2oyQQmc5u5kOFDept0OppTC76UKTV03F8gtqM6"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601629464-e280d7c5.0_1601629563390_0.18702672332345394"},"_hasShrinkwrap":false},"2.17.1-next-1601630989-4fa52c12.0":{"name":"@xdn/core","version":"2.17.1-next-1601630989-4fa52c12.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601630989-4fa52c12.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5oFuO0kfzTAOnFSbPsj62GqvrvFblyyT7ZvEjBCIjO2seX9PyPvBCcYm/k5n87COSbAfSllSDkA0uV6htAvtxw==","shasum":"7bd5f5c47b13f1d55b08b5a2a52021db00cd4df7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601630989-4fa52c12.0.tgz","fileCount":153,"unpackedSize":562403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdvN5CRA9TVsSAnZWagAAo0gQAKFaWxNWVfrdqssIQ4wW\nq6ATxoKDD9MC/zsLYVnUcN2E2N39TB7KbqzdeGzwFPy53JVGT7dYkhmw3PkW\nj6SaCFyofsofbzBSLQQbcMvqnE6JJh5i5DBkufF6glV5O9B1Sh37UYzKeNYJ\nan13LNhecwNL5sUbMsz+iZoBt9JHzPJijsHpRQR57/d5w2A/K76Y0shx2TGE\nrrEToC0Gd2ptoW2ZLjqLy7lygFmOOhJo7pVenleww3ET0/AuYdsU1TY+kg+i\nmrU9IeUaQYTjMbjNpprzi5Ku9FxhmTw40UTPGonA9Ambbo/w9K/ClnWT0G9s\nIPXTU+O/WxxpxEA/m7PHfbMkYIHzJRw4KyH5LoKbC6HSV9VF6q01FNbF5igJ\nvOjZ3/6O9lgatrGXXUe9ntsURZC4SL+wbcqabCH+qTlyCrPCVBeoRLof7unv\nO+h+jI1qC4hOoNGJRRwIbwAIxXetIpXZImUMzUHs2tSHHYX91cnfOG/Fzstt\ng3XQyK7suAkiE14DSbvDJchHI8C7eey+Z6NVE3tdMkCDScxd1/4927vBCZrC\nx5ZJls+jkwVU9ABGFb/+Vzo0+987VLDMgMZL2n1hcI0tWEdq9AC2KK+d3aTa\nFQiBnbVbEtyY4ksnsOOTb3DTIqThcERsHsnO3JzjTMzIO2mTCyGtUGSntD74\nN08U\r\n=Oi0E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFSW4lGDBhMWjQ3zQmjJSfC6tkuvuaIwPQRVDUIubFTgIhAMQ1I6Z/xJFtNmrjpLc4jbUrid9DmhL9vDxz/CbK/OEs"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601630989-4fa52c12.0_1601631096718_0.3376651021772037"},"_hasShrinkwrap":false},"2.17.1-next-1601631233-7999e51a.0":{"name":"@xdn/core","version":"2.17.1-next-1601631233-7999e51a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601631233-7999e51a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-NYTo559KppWNQIYR7zs2IF7CBLoVnZmNPzPhvNjbRgUYlhy9aB5oWnknWUtu404iZDpen3tlt0nqz9dP1G7bFg==","shasum":"2d47719cb8c1f947599f0c17bf86c3e0f306f2ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601631233-7999e51a.0.tgz","fileCount":153,"unpackedSize":562403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdvRoCRA9TVsSAnZWagAAbW0P/jzs5/FvghuaLJLkbhkn\nXuu6XTfpQtj7gMDz55MuZSUiIzGnz2Q4RnEIoZWlmU2P4Nc7C4eVRX/rxtMJ\nhzcgtuQkEX+WFVvL/Dyckk5sEGsWV0fjlJ8PCKJcINGLtMrVCamToEflyFVY\nvXnAifb/CmZJsQVtxcTTpz+pYC3c/gd2ndlOLu6m6YZSq9lJRC7/l3mKtPTq\nRpNMrgf8irzza7jAFX13vMiRGa2djAkQf7wNYeLlGefUjgtSXSCGXf8vk7pI\nPsNDYcKeXZkUF7i5cYyWHuqNxzVw1NsyKV1mzwS3EVPhOoUlxJdZc004Xh59\nYQNwl/5zWE9C1bJsJIuSRAdDuuvszfHYcsgFJAbOABUef5Hk8EPUKKHJiAbR\nsPNfzvKf388TqAnrCkBwrRagMnaG57yV/HI1qaya9nsSOg50bCm5/w9G2DKQ\n9dpezylsG0crkQ8A9TDvB7gaX2QFgW0AnLSlJhnALUhGPBV+JwTFf3FtCLG7\nRC9mtS4vWdI5CHSTT9B4Fhqkuckl0avSbxRZUjDS1qQpVOCrS11uYIsQo+AA\nR9yKqjHQDME2xd4ndNzZNqHZmLdrSDfiy2PsJXbVx4bYYAlx/2Tu33wGAA0g\nymV1EzY0sKKgAL1AHNTbPgJkjD0BlT39prqH9pCvtNDMhmrskq4NAoiSspoR\nQipn\r\n=bnS/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICU7zPNuk6CZ5zXee8oP9K6ZviMkVANauUxZTo+D+ll9AiAuGOP1Oebn935El8j1UcsOXugIco+F/mwDsdByyLAXow=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601631233-7999e51a.0_1601631335547_0.10675097588551963"},"_hasShrinkwrap":false},"2.17.1-next-1601631827-8a994923.0":{"name":"@xdn/core","version":"2.17.1-next-1601631827-8a994923.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601631827-8a994923.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-15t3vO4WIK9s2yMOULBjihZ2nEboEpRjlDa0E4qZ+8S7TAaROdI8iaNCPsbcBp2cz/BUqSS4hk0+fSf+T/VhQg==","shasum":"6dd82363372eef72886cccd72e0b12bc68a951ba","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601631827-8a994923.0.tgz","fileCount":155,"unpackedSize":568477,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdvbHCRA9TVsSAnZWagAAmDgP/2DpKMkx+x8IrgTJ4GHZ\naDuDl/u9dC2WIFyiZ1/lwb64U7SWkaxIiD5O5c5tnC0JqqbBsVqxU+7kPA/t\nFxaoBB4jAjNavOSTiYh/+UuHtCOsR/jQhIOydbSxw65DRWSIRRaFtWOzPA7T\n+tWU95QhBt/OetuB3Zh4N5jOkJWperaSKMZImb5971rk4gl+VtoWXjkCLaV4\nny7c8aW0+6W/URsQgTr+cmOw97amgqzhY2P49deRUwJz3m1HWEHzFYd0HwH3\n6EBhUdH4V71qoDbOwCAb19NuoLW1RrhuDgcADj+Ho5BtKciadZe7NwInRt7J\nFVTRmRj7sgU9Tu1Abo7S2oZ+EecIWTt7gW3oTNkkJsrVGX0zztI7GRsOKvYD\nlLDUTjbFfN06Se6c4EaVK/8q8ZLxx3/yaf9A7MuXNo3dkW1jna1g/e+L50y+\nRGd8Mjw9UELdQf+QvEXBe+w6/ElM6apiIE7W44SrIUSRecYwulSS8m8ryseD\nzxznHIcyiAXQZgqiA7bTzXjGMYM5aU4m3dnUC6DO559+dsOqy/+JLqKcol2Q\n+9JL0O3gTUCVLW5Bw7qVd4DyeJpwF+dXg5vss+dkXODZem37E6XGV7FOawgm\nVKoC7ZPfMbnaSZ9JX9aLERLF9rdUDaBP8IoG+M1gwIkMI8VfYW/fsU1D1TSl\nQFuE\r\n=Oy0O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzhQSbysCMja4w0bZaLE0t54uFidkP4YylWxeN+s8hbQIgRAbLHv3gVkvbEG6gGEH9YIlLN48geUq/K4moYnuUP3s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601631827-8a994923.0_1601631942873_0.726220749338754"},"_hasShrinkwrap":false},"2.17.1-next-1601632810-4fa52c12.0":{"name":"@xdn/core","version":"2.17.1-next-1601632810-4fa52c12.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601632810-4fa52c12.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-eSTn93FJBfnissc2+B9NAB1QLc/FWDtZICHhPU9fp2m0zp7OVCLycSvOyHhu5HP6uvaPL+wmo47ELEtXYwjDIQ==","shasum":"251887dfd17f80e8689547a0195803ba90f77846","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601632810-4fa52c12.0.tgz","fileCount":153,"unpackedSize":562403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdvqqCRA9TVsSAnZWagAA9WsP/RCVYxRAQ3mgOUyJ6x8S\nbSwWA9s/wJRgEZB1aVoprywH1mJ+xVc1xIr6xXMGcZucJSD7CBacYAz2u0Bx\nP6hCoLECE0P/vgp779LSMSnGQYJyYSCvy0x7MJfnTgqWNFmG43ksm7tb++9o\nshrQcb+0wPnkhzNIVpvS1FQi0wfu3op0oa7d3gPM8TzSmCHuhGnEyGtE0u+l\n4XS9jjWcz+oCxrXykfQEmg2se/aXJ3L4ajD7/Ot6dEswZB85+uouXmaZWncw\nEZTxUekbrMakfmt1pwnoPRbO97m7KQRHlFgNC4QaoYXH8TugBCghuSsj9ypJ\nwtgBptX4LXSvsnA81AunXGsD1nI9whAdiEQPHvjRVy+HZ3tcPDntwd4DMDYf\nVxFThA162ualqkLPPsh/m2W1WM2a0jGz4P4gWzJgq7KAyU32A3gYK9AGqkth\nb621+iItI91zv5t03e45aStt4vBbt/eCmlpDwObwA5Gnf2gz3U0vEasmheFl\nUCs/cwDlkQinWY+FW1W42PosSSg3it3A4KT1p+50twylkc2oDAsJWcJJA5YG\nZsNITxKVnG0sVMpy0owhvhrhIl3+9KQD1H8g9QZeqlv5g0KLPCjnDxcM+ZCZ\nRGeEMcgmmPeBPqSV9JdOF6suI5UV6tFeemmuVieypYMa7frWirDnsM+K92JB\n2wIv\r\n=kpEZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFzOe7T1Lfys2gcbNwrhgnX1I7DhU5yWBPN6hbn5wByXAiArJZh+O9KUv2lZTzYsppYbovQCKmg24P0bXX4fFjWK/A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601632810-4fa52c12.0_1601632937724_0.7835242144821744"},"_hasShrinkwrap":false},"2.17.1-next-1601632853-d9fabe9a.0":{"name":"@xdn/core","version":"2.17.1-next-1601632853-d9fabe9a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601632853-d9fabe9a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-CGARYzp2Js0l9Fb/LVVG5dmPEzgUSSJzE81qsoJsgGMbPR12SR1j5rn1Z/fAJQ4Iv1HueLK0RBX/0dWwD1yyHA==","shasum":"6c9c06ce9b91b05dc3f3a1f5b4cf958ae1a8afdf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601632853-d9fabe9a.0.tgz","fileCount":153,"unpackedSize":562933,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdvrDCRA9TVsSAnZWagAA384QAJFT7MZVJSTdhv8I6fZH\nvwunJVoFSKLdQPhHcU48ZU4qWN4eKgHG07QinpaYr8kXVmuIxKnWGgAUva3M\n6pjacy2YBBHKmbALOwzvZgNsg8QEsi8Lq7JqbN2RuGhmIMk0vk8RpAV70sqw\niapZmir4F0985xyV+nKZvZruGLQHIaGe63nkVm208IenJ2nq0UToFlXswHZD\n5ac6YUBeDJojZdtQ2CurtB03yhxTXQS7045+lKcQ+NjBAc7SF0oC4zQog/He\n1zJyulO2AdFj15fMf8USMt3kIKzbEaU7TFs0ul4s0Iq/OsPMXHVDfD3auWq1\nTyqhM/oZesaXWBWOwSa97DxgoAjm5F2x2qr5BW8Ynbke/76B8s1bCjQv/dpM\nur9fDL6e9FgjEyGLAg49hTewe4/H2b4X2QhVVIupye48NZQtSw1dZjqAvI6I\nBEzGSQeD/lTyg7ymKMQHqk1Zw8E8f8OOI7ZF+zmcvFgObYs476YyFpz4wqWa\nru08dI1pFIUICCxw9lbVPvDt2Prqi1/t+BTZxON0xDMcl65HdsP0xFW36PVL\njCJvXbhIdkPFlMye/gIJWLacV/qwqwgLND//Y0+VfhuvQVUG6ML8rMgNEEcK\nQUzOOaDJUFxm+0qA7NDyznL75GslD8LydC+VRyfqnGL/ra4NPxcscX2vzN7m\nc6sI\r\n=U6W/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEYsmccjIimmIKgn8hxi/h8j121EaJcozibgLXXugaVvAiEA4Wx0JtK9/M6atBshV4Mv/DxCbmJuOSst/aOSnXFCthQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601632853-d9fabe9a.0_1601632962889_0.4788651906465633"},"_hasShrinkwrap":false},"2.17.1-next-1601633715-fcf487a3.0":{"name":"@xdn/core","version":"2.17.1-next-1601633715-fcf487a3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601633715-fcf487a3.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-woZ7qmtxkZn57BnnoU9eTf15d0vvioiNx16a4JSI/IWrGhSqLWl5qUcS2hLIc95DG31yATL5ERDst5YU31JPAw==","shasum":"32d3b1a447ce456941e7c387e7f53a5efb2a5a70","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601633715-fcf487a3.0.tgz","fileCount":155,"unpackedSize":569007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdv4qCRA9TVsSAnZWagAA84sQAJ+OY/DDlOswM5OtjXRa\nHBLgpD0Ey0VQDU60raSpicClJ2wlh+IHVC7reZUaLKXcXz6Irn2n6M7vqDtc\nTFqJIyKpta/R+tKf68mWm4D4VSrdDbdh6ELez78XVzriCL9YwoVZFgTl4PfB\nE2ZpLwVfzwLQm6AKDNYnLvRU8dywT6UIbem+M2DvHWbkZu7Q/Zm5Jp4Y8que\nZARDPXwFztMQyYh94H19xLK9VvltvDicWMeKOY30aNJIajjTj3FN+2XCBh4c\nIDBP94UyriumvlzEuO6m1fV8PPcC73o8hPA1MIjqZMkCZoIBqzT/5J+fuFVT\nlKa3UlBh/bYygpiSmHlbr7NJCrgxR65nnVxXIgSftgK96ngmgv0/e2dPl2YK\n1pjWjkBtA/8ASmn2G+JBF3IPONrz4l9HwEOc5tHjE97qe80DjlhK2tU9zOP3\n3SrYK0aWk5b7Xjq3i1XsJ5uwqAgeM5pic4Yton1tlT4hNM+KJTJqZhQvUSxA\n8WEiSH83b8tb889RzoQkWzdCokfDyvd10mlQ0yuQDXlSK3PVx96J7E7okctn\nce/RIv8XLNrVt/QQnCsbhzlC0yfQyEbijlZyeUl9+BuuvZ84FlIcK21d4fl8\nkWWNnvPcQKJdgURQFd4RHnBAX7RkllQaDzhVxsv/Qog4G7cXjDPq/TWdtLPu\nkFEo\r\n=TAAE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHSGMl8FS6ZPmLpx2qnYva+eILP/NYAU+wt1OuwdtqL+AiEAwUo3b3Wm8qfETDs0VIf0IOyBNXwNlApfGwZQum+Jx9s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601633715-fcf487a3.0_1601633834361_0.8437084767861911"},"_hasShrinkwrap":false},"2.17.1-next-1601634215-d03c78d1.0":{"name":"@xdn/core","version":"2.17.1-next-1601634215-d03c78d1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601634215-d03c78d1.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-JrKoOWurWjXuBNYSG4nJIsvYYCbr095b94sL05dSWcGnf5RhNiWKSzusXxE0oVvg81squmJsUO40Ip2hF98hjw==","shasum":"fa83b606ba013b633d2721897f0e3ab1fad908a8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601634215-d03c78d1.0.tgz","fileCount":153,"unpackedSize":562623,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdwATCRA9TVsSAnZWagAAIUkP/j9WBaV4QkTDE4qS2FDb\no8bK2FXdpwd7ZXwXVBfdXbOMnWzKa8Vb5DQaszYAIRQ5FXeFlJMyHft6gCuZ\n63SLpzODkdgIkwrgUZCNO+zFXrf0C2UytCEgN0nbuVk2nowS+gkpujAOUkE7\ntH4YBTJhDF2wARoUdPIq3WvIDATrqdrgXD2O1D9LUa3YHiAZCsRrY0kOKi8Q\n3pUQtq/KznCWx/10+W7PnVFjR4be/wWWx2Gn3sSHEqAEb5lsEvSCn4hl0apE\nKEcVTIpnktWI8BOnzk3p/Udj/HvJkYSssw96Zp4mlVFlI7k+Em+IzptLxk4v\nSY+Vk1noDDEp9SjIbySQOtDHaI+jVYOvYkeLLhI3GGMNcwdYAurNJgfQ/iR7\nitkyrnLeQvE28nSjd3q32cEHMbuylZFIGfe8etGc8dRVunvBg46N59LQwwkE\nyEFfFjLoKqAdA/JKhQEJM/aNIzCEbWKrCYgimsNBrSo/fDnhdJ/+1OyNKNYq\nOQ7/33ug5ExKaU2/SOAMYhKHNlrjNAvUjMVQKhO7gbhAhV7DOtHSBkWgUaGv\n/8Ggoe8Qptx2qcGAvZ7sa8D8kGv9jD5RtEog/7ZJPGnt4O41tJ9uxCEhnwUl\nRukxHTGEXRCo9peVv/Cz4epsAZmq6inU+fzhFwra8Q5IvOLj00/fFP4+QpWM\nC/+9\r\n=BBUH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE2sV74USPyZBfa7lejVnnJ+/YAkHDx2J/SJpWIPRNhhAiB67cm3N7Zhc/Xj0SYyKGE82LUFAl7WvVu6ZiRFQs/L0g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601634215-d03c78d1.0_1601634321949_0.6770201383408592"},"_hasShrinkwrap":false},"2.17.1-next-1601634250-7dc033b5.0":{"name":"@xdn/core","version":"2.17.1-next-1601634250-7dc033b5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601634250-7dc033b5.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-AVg7kHJvQHpHTfCKFBA0gT7VnaAo9GfkhuG0MSZVeG2SOhpDZCxKzA2AXOLxXyroEzYA+d7SK3fE3SooevsqHg==","shasum":"090a238634eab376e2dcae0bf6e22cc7df61fbb4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601634250-7dc033b5.0.tgz","fileCount":153,"unpackedSize":562623,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdwA6CRA9TVsSAnZWagAA9VYP+QBDz56jLy2LhuwKpRhF\nWht+xc1QQLMpxmcnl+97KfYZeh4jxiYeQQ//LgjlHMCCG+k0hOBtfDHZSVbi\nsaJw8sQmARjyciFs+G98+mSolF8IFPM8L39LX5CxOFwMpbVMT0Z6ukrtwIgT\nSkMuQRY8dvN6/uBkDcZl0uaJM76DReTf+OORppkv563BYco/PRW+UUwsNWkg\n5VGNy/aWhFM7lHoKgoOAONeLa5LcV/v3Xr5VingnMYoCuMmiDdtCwqjQete8\nBYZRV0VyHgV62c+DdLNaAL2MWOZA2iGbrEYTQrDXqcLkBZDfkGhqrsYIQIxS\nw0pw8m64aZ8MhiD25dJ/zxv4TXcxWTaHLwuPp1fYI9TUEBipjSofm/uYMHvV\nqJzX19oMYx4WLYrntt2Sp+237N8DQOLLCj7mtR1mfwaHwNPzcD4QsgNSrLYJ\nnJDYCcqfTyJGqxPJs1Zd0B6nLGOG4LDlQFt5vXfmS6hvQbwVC1zqlg1OsHxD\nd0KHDj8PvJy9rjxUWsWV4OP/Xwk7TG3ceY9NpjEKo3mVsZotX+1v70zHf39d\n/co0pAqxVmi3pk2EAHk5xCJxOq/bOLQnbxlZdJaBjCFHuO106ZqZkL+vZwY7\nG9imP+wWBNEzW54wfnLVcQFi2bMy8YSEmz2T/nI/JBEuQauBQTMYjmSvn5vZ\ndIPx\r\n=BedS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCytjh2yk5crWvLvePwSJOlTuA5WoQ5ZscXRUQ5mud/pAIhANN6L4TgUbDILEATW2iVq/yss9fcdcMi0fny8dHNb5rP"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601634250-7dc033b5.0_1601634361951_0.3558872383920233"},"_hasShrinkwrap":false},"2.17.1-next-1601635923-8c6c7d13.0":{"name":"@xdn/core","version":"2.17.1-next-1601635923-8c6c7d13.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601635923-8c6c7d13.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-F4tUz06lEXjmuw1STFxC6VPKeJJx19nmm2iXztGfNKSlRQMqUsazVUInZpc+QFznRwuqC8J1AjU8KiIRyU6FWw==","shasum":"d93de469a1376f508f2d8b769fe9f81ed3acb747","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601635923-8c6c7d13.0.tgz","fileCount":153,"unpackedSize":562623,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdwbOCRA9TVsSAnZWagAAy1gP/1VOqxKKKIWwbMdL5Fx+\nUjX7B0P7G8SYpURaEiik2tKbVAk6MZvl0P+0Ea5KIJUae5vLU1eSfCL+lZjx\nU2nScKBjjxqh9UVEXvR9aWcI8tNhRia/53P9mYTDD8wcFJAYCdDyljZz9CJx\nman3L6P2XsUF2BB34MOXHL3x9Io5eUs5av+bMnChDptBTi4mR+0U6ALLz9gb\nHg474mYB6WN6I9K8eL0aCplpiasT3YhGTOb8/037jjbXDvnN0inrVeTsiv0M\nF7QJB6psbwLM9hYhPHqu6u+LjS3bGR/wDRcbvVG2++8Hg4sFr6B5RfqnHJoB\nvg0qnCdYiEDeyS9wOhziBuj4RZzrXmzOFaaiwE8/CCLF5HIxw7UNMUtQKB/B\n1GSktBZNha/NT4qThkpjfYExpHfwnEjzXHDnjmyASYFCs99TIB4iYVAxZvb7\nmidY2ZYe/4F+p3t/taZ8VoSbv8yTHuRmf+cStIKGI6mCVJy1cQPmwFEj0ujj\ngtH18pzj4GBYnYFL4ugolq8hjk558nfsgAMnBERIu/yCzeTaUTewWzY7zA2N\nfhCSQM4dO+HbdzOaO82ETi7nHCybTYXj5/WczwGtX4tXSJ54cdt7oMSaTv4+\nFCTD3YWwqpelwAld3S00tZnhq3pywSQ4q1TCUh90m4sYObPKnlxOtOvKUgyw\n3iaR\r\n=j1CH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEicP9yzWJPir9dso7F6sh34QiW5DgFfnBUbdFhL3QbhAiEAvKBpFLZYGk4+eUuZ5cUTggALlQUf1aiVu04VgSzE2DQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601635923-8c6c7d13.0_1601636045693_0.6097781837880323"},"_hasShrinkwrap":false},"2.17.1-next-1601637594-42c1f22b.0":{"name":"@xdn/core","version":"2.17.1-next-1601637594-42c1f22b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601637594-42c1f22b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SyL9lMD6uvjjeKFBRJYDe6gn6CS0z8dIDcAcohyt+gWHcyVkMCrpmqK25jYc8tiA7fQ4TylN4G6wTVS5zJsOdA==","shasum":"44cfef5b7edd8adc60adf1be5bcd2326321b6f53","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601637594-42c1f22b.0.tgz","fileCount":155,"unpackedSize":569228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdw1LCRA9TVsSAnZWagAABcUP+wbXgM9rnQb8MN7IcWhE\n5CooSLxQj7SC4RsmeE9qI/qELkU3Fu91EpF830t232PPl0VtytmxQO2eBVFD\nAlWkfIwQqPDd0dw6BeuxZahrYubmpFKmmO+fVofvOWsAq7SmfXcmMIbmNVqp\n1VeGUBgZCFkbT2SPfZC4mq60KMPcv3Yem4G1EWXJaF46nKtm6hMyeH+EiVRu\ngjzlG8OHmYUW+h5JeBkjw0luBO1Gk2wZtILzxyzptRVXuq14JBqNp1kj9dX/\n3aXCq1MQJ3Q2LxrCW6wUV49MRZ8jm4e68bbxrFo7vvYqVxazwdlaccnhzEZc\nXx71OyruOt9ditpO8w94ht72Xlcu9xHQWIAGenodzLcwjcyl1d9VkP/yqcSe\nhtSenB0587WZO+1kViuCPpcLDmzCHwZsR3n30FzlgXTccwTDr8zAkmREFyV0\nnqQ/r9K6u1CtSgQU1Zol3wePpw2nAgCw3QGurKNZJFBeXmgLUEPGpgmVLP0o\niSIZtY9M5hX+Ui+/HKcW0K5Kd3ZWHEOsPYJVQO3flAlVhuU27TlwMNwIMpqx\n0pRalNBpTxxMhpDhyynZVzS8TEiRSrfAstBSKbQsVvTGQST4tEx6XFV4QBOn\nI8J2+xbAz3Ng98P0BmOuxrlIB6JtMncIyLDWBl8kOaiSnEeJdg0f6/BDpQJL\n78TX\r\n=bCkn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsmz9dL0EOdp3ZDUiZpa5r7Qa1SGqalAScaMH1vvUyCAIgVVIXxEOp2ztAXpZe3ORY+RF9G9+eB6ebCNfF/4i8jvM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601637594-42c1f22b.0_1601637706972_0.5674042137575517"},"_hasShrinkwrap":false},"2.17.1-next-1601638172-bf8156c2.0":{"name":"@xdn/core","version":"2.17.1-next-1601638172-bf8156c2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601638172-bf8156c2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-XJGCskGQAOvIr6AV4+0Mi4HS2/HPBnwJ0mr2aCHSOWwKVTx1ngL+H/H1uLe7GhHq5YzQNixxWb1Bt480IL7DXQ==","shasum":"ab246838b9e0210ca60fdae641732de1193fcd01","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601638172-bf8156c2.0.tgz","fileCount":155,"unpackedSize":569228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdw9+CRA9TVsSAnZWagAAr8cP/3TRKoOg7u5koYNz5gmA\nJ0xjQvqHlJSmRh42ONn5km+UxLhuXYEL/Ch4lJfLMrqzvleKOlaGb1KyAPwd\nWC+Y0zmNgVnFj/1mbpNo3R7i1BCLejqjxr8wHbN3VF3eLrrxTIKFyarkXT70\nJ05j0MNaGil0o3l+bpWrDCYmSoH4F99F9XmLRB9+b+ZcpCDwp1iN4/yk/JOo\nvcg4VO47FUvfVQhNA7r6SFbWYrAMOZ1bJE+Pi5oXcBN+oNYutL0fNOn1ZUFw\nwnu/RRSVhE335XgZ5pvk/RJ1wKGp+sVNHctdAUi/BBFnBTDiuOLTwoHKDkBZ\n3xy45AVde2oLViOEJ0xkEWT7OvgYMoYLcnGIIAema7bI1WKIOZOuxLzHSNFW\nvWOyx6M4B7uJevf0P6apv15V+J9xBHlSlbLCtlxyL47yrRTsQxYIcLVzwwPH\nVEQLOcV8AHtKqaDkSrFRs7QR9XFVu7KLet7YtaHoUJzgdq2iC9+4MuQC2Rxh\n1fPWsBI+IlNJcqeef8ODuwtwKhwFatuw6hyxqyhu9xm9SqCxu9aiFNhkjZ3v\n6YROcYHtN+hd83gWMXDFLXUeAvfj0k995ADrCCYovOoAZaGCKwR27DNnzxD1\nKZqxn7lelHxuV1Q+0LjPQZxxI68qopvCidteLxCLwiZziX3FiX8V0mDRdK0h\nOx1j\r\n=7GKE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF+t7cVwY2iou9r1sWowdrvdxByKDlPA5bltn2NG6kcuAiEAiG7uFzNcqXt4I+53KR5VeleDdf2GG9ZMY7eGqrOCkLQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601638172-bf8156c2.0_1601638269909_0.5466696916667677"},"_hasShrinkwrap":false},"2.17.1-next-1601638332-5a28803d.0":{"name":"@xdn/core","version":"2.17.1-next-1601638332-5a28803d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601638332-5a28803d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4cUCONZLvzrGD9WA/Sq/SeMBmqf7wa43yGhu7qfXQdW3J+JTEySj5qhL/Rc750i9IVzx9Q/KD6Ug8jqSopJ5QQ==","shasum":"23a313fe612de645e31f407b2dee6df12c94038e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601638332-5a28803d.0.tgz","fileCount":155,"unpackedSize":569513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdxAoCRA9TVsSAnZWagAAPrcP/0GSnJDmFH4SqSk7CClU\n8IKIiQxqCEJ0CFolFGfi3vWee9BcMX7LmKM+rmPpQpvBOuQzI3VqFm3NjDdD\nC/7BbHXRkuJlX+Jg1p8Dcifl0EGsKYzo4kLYOU4d/4AdOqxPJJJn+frqdM81\nKb0s7uq71Sy6AWliBXj3ayIaYDot9pw3mTzxMMvEyIaz2/Hhpk1GsuACRyCX\nWOUlrfZ2cnC2Eh/qifukXURrvgSktWiYCaLQFOOlLphBuyk1Rff5wLb2kQE9\nJhdfkGH1bYPmDvI8US/R9IITUUs6kWKfH2fDrQTd0B5UQx1QFO3Ou2/A5CFe\nMTk0T1+Q3LUQFWZ7oIlt50wF9mLaazws6z11DLgtNqvdEOn+wvfDhNoww+mk\nIb2LPcBKGg87wwNtTvrrhOZYlcz5Q0pLIejFlci6mNvp7Yjx69FSE28lO73A\na43CDTdDobgXNYFjTtAhrZxWtomLQrUfDYu9t2w2EmZZsk5b0vmZJBP+iV7k\nVG6d49EefwhMjaF9yI8ByX4A4xCrIHZNBs/Qst6NVh6Eeq0e1Mknc58wP7HM\nqy59ZVQ3+d+mAcnrJp1VhbjF09MPxflb07kSaCTXSCrCa6tVQYPs2erCfV+0\njYXMiHhFmEm9dTtox5o4GHE5kumkT1l0uUhnfn2U/9IH7q6tndl5HGtXYlsf\n4bI6\r\n=MQr8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXtyQFLRwEySR+Fhohv6RfgmEwmGe1w9MHgaDF/uty8gIgEZiADGE6DwRAkljHJrC0hv1hv7UW04zUtKPL+UfMgNo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601638332-5a28803d.0_1601638440464_0.36422681991756867"},"_hasShrinkwrap":false},"2.17.1-next-1601638352-8018c917.0":{"name":"@xdn/core","version":"2.17.1-next-1601638352-8018c917.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601638352-8018c917.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Rx82xYVQpnJpcuDSjRCa00GIwrH84P33XAY9Z31RI5HYI6ylW8Oby+/ZOSc+ZAq0FIht9WLG75mI0q7G4rio4Q==","shasum":"a735e689ec989bb47e98466de038cd0eed8ee630","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601638352-8018c917.0.tgz","fileCount":155,"unpackedSize":569513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdxBJCRA9TVsSAnZWagAAyjIP/A6gg9AEJjcVB1hAGV7N\nrNkNJDW4O1VFlcBB2g6OxgRPeuaCsjiXmFTcdLYYX7SbFey0Q8vU/JgGdHqb\niZA7frREOIu1DnAObFE+0jxGnJ2ckcD6y/FDYsjvo7Mzgn8V7Vym3HeCo8SX\nolOAE444sUrR6KCnrfCzKBigiJqQJHZJ/ZrwebDppe7UOUwvQGsK8Ule3oAw\nnh52tKzVMtvbC8WiUBe0w6elrsEx7xTtW41BJxFHAbhaLMhtUa3chkGxUpCZ\nveuoxk0kiGF98utUM8ZfDAVV54t1H4ERPQiGV3SteosedbMcq1OpZoQ9pCna\nMYQr0+zvFx8L1FXxyE4QLQgX5i96m+XOQ8xOy63L3AD+6z0stRH3cBrfaGjq\nVU9oyzNxGt9XHsX6N7DO/u0AWVZugjOif+s6aOg322IP02wf7C0cKvpc+0Ah\nlCXvCacjFO0b085OCFr1iuQmtcYvD8AZvawDxhmZg8ufkzMoJrr3hjcQNdrb\nUnHBL9l3R+ugVExyI29XdTdb7kTH+SvbbcfPEoaj7+f2XHTFY611BjYof4qp\nMrtm4fJQkyXhYA+6ji9Rqj1sISgclvhzPrcaQrZmnyaEXEYaVdCTAQVu4XF6\nxsETojXEPpDzZdSNQaGAY0zG/6d6/WOHrcKbEkIoa2vF22JnSFbym2b6+pEu\nlDIQ\r\n=2SGt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwC+WmgCOyzH8Y2evlWUa8MGFrrcAu3GTOy4GhCXC+OgIhAPNRDGdfFDryUZw/doMRxOc/Ov+tQyPDsbvRN0eusgC2"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601638352-8018c917.0_1601638472485_0.5167182776755266"},"_hasShrinkwrap":false},"2.17.1-next-1601638685-fcdb2fdc.0":{"name":"@xdn/core","version":"2.17.1-next-1601638685-fcdb2fdc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.17.1-next-1601638685-fcdb2fdc.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EM1PCMgIQ2V1DrBdaR9vYgrCiHtdgg8gImo+Ofz0LEYfjczkGfFUygU/f15woKGHBQbweKwY31YgXBfm6RNpJQ==","shasum":"79fcc470a586240cf353a627e5ffd6b3cedba2ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.17.1-next-1601638685-fcdb2fdc.0.tgz","fileCount":155,"unpackedSize":569513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdxGXCRA9TVsSAnZWagAAobcP/Re57f6bj0MFJyQuAgry\n2sUQ8QAf+oqKKCBAvKG/2vsU2zT5ejQphT2NE4XWtzP1UgMQJXHjBivm9Mkw\nJl6x8suWlggFLO5Pm76zlwlawRYMbAprstu0mQziVjkj8tvvGB0Bcw/ej5LE\nMnkr40Gtf2iBCrVgMc2bkYj8+KM6UFA4yb2vyKvhW73x95mFq9aZ+7CCysfy\nC/RjQqPQ9Tf9lFnBUYZ6L8h1Tz8fWonpB8M1mLPqGpigfKpny1GFj+Z2rvKw\nokIhBfqYOICWbuQRoVYYIo8fslS7MR3LdeBX/A7kvzVa1JAU8yU8yFO9sYcL\nLva8754zI6sLazW2PIW2y6frdEgMsEcOrun/ChNi7ZijSHd8dNOHEypbQPKD\nWlqRj3Lr2WajKalZCUjrrpu+BIv4BmaxlsaLcLHEfcgH4f/E/qe4+q9qny+q\ntmKKM7nyKhbz4RN1JAhS4GN7XXzWtlvwa3cMiYU0jv62LY8zOAwnElt1RoRq\n04Zw9JEH95EFBpZR9dsxsic9EpngUp+i6Crf0zSXsb3VV9TKNpcLFR7xiuqt\nx3P3E9LsQSNRG2/bK70RHwCh3CriWaA0A5LCzNF4oI40vYb0o9vyYnj2L2On\nzg1dfSkxP0KMxbd+wuYVTxJsSKQ2SlqQ2DU4gHSvOLAvLt/9VTO2DMg/iRSC\nrOlH\r\n=h6n3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnh9rUOtPSi3UoXNL1gJSX2taQIm3HKO0PuQ9dbKXo7gIgZpcorlSXAmo3rgl7YdpP9qcySXy9AYVI+R/zR+slDAg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.17.1-next-1601638685-fcdb2fdc.0_1601638806788_0.9993747003830986"},"_hasShrinkwrap":false},"2.18.1-next-1601639054-115a8012.0":{"name":"@xdn/core","version":"2.18.1-next-1601639054-115a8012.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601639054-115a8012.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xO8B3N9T1tDbE1r372qycdATE/t68gpJTFUDVaupPWZ3zshQU9P1XD9hJFyFadPNDILB2M62KDECFPy2VASWQw==","shasum":"e68a3af4722551beb639fa2597d0d6bf241d3b97","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601639054-115a8012.0.tgz","fileCount":155,"unpackedSize":569513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdxLuCRA9TVsSAnZWagAAi9MP/3RGkogroOlgUO47Aw/f\nVvtYXmshshmbBkJBboVjpgHTR+Mfqa7tDaDrLss7bMKSbvagoeb6gz5PuaCQ\nGsTDGu4PSF0dZ+t1hnNqu3xYmKPORwHNP5Z00veR+jJXs9FvtyOrBdIMOjay\nXNygivroPtXK9NxLi+NIzj3xo+S2FrO7+QU/L3jf36uHDMKNdRP71NGSZTY8\n49wraMIsLUiSjLdB8ZjYS8PqnkzOc4xs/yJTShAxmxd56PBV3nlDuwoi+3nT\nRpFA7rF1J8XxKOGeXejfIO/LJBnlDEP5siwjJDvkMQkaXSeVmlZYNz4uI+cG\nOU/IR2jjWLH+FcuxYsAeIvzUpTWnm73W+kMJUlFQh+oErgSR9WioE5cmAkzS\nNOP0nFJOG2TDRlKsEllFd6ZEw4RO1ULe7r8cN+CTQvD+3S8gXGXWmlsaNu4b\nJsXkWxQ4xU75ADfmTk2r/qBDCJYqI2UMafY5UsI2/cIFou865Ujey/ldgLGX\nwsZ+tYCz/bubHkRyhrvypWICVc+WW0gMSwAjvcXaVOY+mgT4U8N0HrPH1KJU\nPF4JQQ41lVLbOezDhlIP+18VDsUzgC7w0Y/y4alYHnbtZyQMNQAVBYkG6Z5W\n89f1k3Bv6yKoPuCriTPLfiSoOOIcbMNYPO/3WGqJ5s0gpEh37n2yZz6Q2LBC\nWodQ\r\n=FyRe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGuJ/4cBfFaDPYpFkUyyEi26+DOeGs7At+h2UpPcKuGYAiEAqX6Ed6WdrJdyGnD0lOv38ESbStCPD7Oxs/MLg8ACAac="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601639054-115a8012.0_1601639149587_0.2500476988212301"},"_hasShrinkwrap":false},"2.18.0":{"name":"@xdn/core","version":"2.18.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-RuPNpab1welyLAPSSgGCBM6kuEyhDHCNJaTMPX0583PSzr5baFfshcWDZbSYPsDdlQ4d9+5+Vpk6uSRjZ+PN/g==","shasum":"9d57fdc41398cab98a2c84912966293550b7cc5a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.0.tgz","fileCount":155,"unpackedSize":569459,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdxN1CRA9TVsSAnZWagAAFgwP/ja2lyavYYQecWLniKl2\nf2z6Kfa5R4yym0cFLL5cwAERWd37goXM614N45IuurqivRJY1zZ5hE6W+Ukk\nLL4ABKVObUP5lO1b2OHMLE0/rq/vWpU91JN6OmFunceEzmV/D106GNo2giHF\nXfVYEgAYUnNQFFy8LoUnj8BUQ5g6rKHfISzAgD1FekalEAMrbPpCoqkbYlS2\ntri9Lt1/c8+u3I6zeOr30jGlyDBV9NYGMeRvjCWYQ5qSLcMiLwMWWNQCmape\n81Uytvmbmpb1I2lvcqLph7axdwhv1IxQY0KgHgimwEcUyf9McsrtHWifkEmh\nVq8yR+5R+FQUjVokitv8Dzj1ypptPSsZSsjY5tOTEHckuAlrEABt1z6+zs5G\ngx/DNjFIDPRQPhLmePHbANUs99vFroK/mZm3J1Lj6Mt+cr6Xzl0z5FCmQEDw\n8hGP87uPRLrlcGD8WWl6S0X/ieEr6YQgk23b82uHjq0XZfDqiqLp35Zq/E9N\ny5mdz8L/VJ4nVW4cF58mujR0Tn2dC0idCawnH114QKFPuCuo3eW3ioTI6QWw\nWhxaxqYx8QUhLP+0WEA8cH79gmWk+muBbAKZfMtSSmoYOsSujn8qTzmMzH2n\nxTQ2Xr+Sn4WqT6aZoU4YRaAwFvTTJUKy1lG6M3uDt3EeBqtExup9kuJ2I4BC\nEUK1\r\n=QvF9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHxfL9uYqiBlNKVgDPZlJavfRsMAWCRM9NpzAXMt2T8PAiEA/Tit2tuvZTYIpH70TpuWGlToBjIavn9y94M6qP6gTOg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.0_1601639285132_0.5844458930618719"},"_hasShrinkwrap":false},"2.18.1-next-1601641375-d459de0e.0":{"name":"@xdn/core","version":"2.18.1-next-1601641375-d459de0e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601641375-d459de0e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5T5aAJ7/88rCFMtY/BjZYYz3hHBFbtmYi1eijui9GY9aV1mSF4hqOQRI6XDQ2M99lRGxRThEepGNDI0D2VIIWg==","shasum":"8be847263e622241211d724b3a55447ca5eface1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601641375-d459de0e.0.tgz","fileCount":155,"unpackedSize":569513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdxwWCRA9TVsSAnZWagAAob8P/jxgpXy2w16aPTzW9zQw\n090xIfmdxmuxfzKLn+MRR+h28vclBomuZTyzybRpFWJAE1vXnTBeN8xKnJ4B\nVCPNMDuDf+pDOLZa8oUZB4iBHrf4TyATCrgg60Df6EvfNARECs6G2xMtMHkt\nfA562Rql0BI1qIaNrpM/avuuKELK9IgWGbMj+QaP0zYc5aN86wxrIY6YZG5G\n4qMgFN0nQX+E/zOiUWwQfhH49qBWfm5xe29i4H7l5FC+3Pirpg04jJuM2ffg\nG1cEABJxDH6PAgn0i/2yJwD3lv69wo8WVNtAY6qhDBQJgxLGyVxmsxjeiJ4Q\naDPOFsrxIwsq/uJQoa/pD/xj4SCV6Itu1ujAfGOOuAx6zvMw4J+j8NF1PE+k\nOpYTeaBmyUXANLH+FaAv/NTpRAx1AeGIGDgcTgkjw2Now4YVP/9pJNOZSipJ\nXatS/i9zceINdvmg+zwRG3d8EUoLIm9xVwDmr1odtgImiuxbD8oqwxqWP1aw\nvtUFAVAVAjVzcG1RbWYcxCdNfC/sVlo7ltZxR8cirkMpLrEcDc5gP8VXcXU3\n+9VKxAkw0DzBVUbCCnUNp4CO15mBtPM3UoUeZvYZxX5fdoGhNAdL+CNoYA3+\nQwC3zQy6P6LfKjhD82Sr22wpd+kF8pbCNo11eTffvNgsCtHIry66jB42T/D6\nrH1q\r\n=TqYO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHSFC9xn+Qkt74iQi1YzMZ1SSDhsMuanHxlXRQgSDzHXAiBXLI8Od/pUzK/QtN5QZAPxF52m/IvicSOB41bsCjlKjQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601641375-d459de0e.0_1601641494089_0.2816423030491726"},"_hasShrinkwrap":false},"2.18.1-next-1601643050-c94f69bf.0":{"name":"@xdn/core","version":"2.18.1-next-1601643050-c94f69bf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601643050-c94f69bf.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ls0NP5VEb1lRe5tgX/+f9zQoNiz+PYfMtB/n9CzugW2Dh5tBA7F4zDKrsP6/KZoFR1Aj/e839wZqvl1uBzyaHQ==","shasum":"e958e039fea31847584ada6a7f0c08ba7b5f2ec5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601643050-c94f69bf.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdyKfCRA9TVsSAnZWagAAA2MQAJVQ4Nz7dj70QlwEXgaN\nRIgF+JRHhDs6ls7NkOhogghs3bkfyGumUM1rwNPIPbl+cdWEFXEduEUYDvx5\naG2MydoqMLQNwJbC3FTHqMHJck/NDH0RUo8KAmJNDQ4MZtV7XHWcW7AB7Mpx\nr1Mq6/ojFcakIXzY9o4KlCJcsib8MiJL5H2seLAQePgpz6CDFSrHX3OKA0XY\nnoPjywx6MuHyngVY2hW86aAvnZy6psZFsIYIfrVh9jH23j9V9j/p2OvTIy6c\nXiYJz2OLhYEFoHd49hIUIYntuVhrOvJEkPJcsBWkWKIjnEPhqXL3wy4A/tGw\n+Hl0my9teyAY7odaVtL8iFeuz1fCBwqQQHMU+GoUkHVJs1s7jO4IdSBndQKf\nlZjMUEmVQqdweUHYQSp9yscwi/NGIqAHRXxRMjdun+vcpIyOO9FwQ4MJjfb+\nvSNWlIoPpO+o0td3ifAnSH/iG2QbrqP/JBR5ffNfCa7hlg22O5ruaxuY3y2o\nn4UZSeybSiu631HNZ8Gp+wPJwcqqg8bXygWjaraGYeO4ZoVnNBC0c7myG69o\nWSvmEGxdiUrcmZvC7+kBuimCqj2l65lewp7QguSC7CR69UhUXI/girbDD5Ej\ncRN0D38/3cOW9aGQnWG6nt/xNvil537ruc9Wbz9StWTS05xWjuuyitoJ880z\nn5qF\r\n=Bwkj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqT1+Xj1OnWfYXuR0Zc8eyu79aMqZo3rbYlX1i4bhnegIgZU0s9r6Qc9gOaUHiH2vcIPsPgjcBje2JHbrXV3wEF+k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601643050-c94f69bf.0_1601643166717_0.2636611687416339"},"_hasShrinkwrap":false},"2.18.1-next-1601645389-ec176b0d.0":{"name":"@xdn/core","version":"2.18.1-next-1601645389-ec176b0d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601645389-ec176b0d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ZsU08PxMHsNSWIpn+SWvDS0nvbSlsiFYcmAr8lQkr1cZrP4reKS3jua9PrEI3o8eDIVs1GXv3eYULIuLBKjhZQ==","shasum":"8bbd78e4d8251ea0d1ce56af575db7d2d4e17d45","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601645389-ec176b0d.0.tgz","fileCount":155,"unpackedSize":569513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdyu/CRA9TVsSAnZWagAAdxoQAKKtuyONZzWpPsAIlV4I\nBiXSxE72BXG7336WEcSoFc5/nUhfcLmUpTfkoPKtZIxqFNNk1QBH85RT9Q29\n/ZRQc5mmjHZn7eOpKBj3DRxIzbY7gGu6mlbQFom7ukmBdcDA/yCOWvhuUsYw\nibhR9+PNWoXGJZsrKsSDNNbAHcwUvG4F6snV9mHaoHtEiqJmgCDLmT8gxnIS\nxcHX/3cERsjMb9WSVlL/4EVxor3Za+g173NHO/thHQIPg5xJtOj/F+yMmf0W\nH7bSxBARS8E++3M1TNpZMkfCiekZ8GT9twPAaM17ZphlPZRjVHmC5ooabUoh\n9DFDUf00vwJ/Bfklq1vcMpJrUk74oEzI8O2k30C1uKjkuM1Ogvh5uN7QX9cV\nUyt3knyYLOX/3REQS2XjPzn08GiTlOao6m63DuzAzyY6EKmph1waJpADQB8C\nNhKQx00mYw33/3VRDS8vXSk231jivdlou0zBRMu45FU+gSiZPsVcu+LiVqGb\nn4yxbhG1vOTlL6jgnyCxX6f+Qw4PxhQ4Fk4MnrYauFl0mgdz4hvdU/K02Xf9\njc0jcdU83NSGoGmTpuDOFOFRWcMpP0rOetvexi+C3HuKLqWFZp0riowPB7OY\n63v+NCx0+WyDoOjvsJ5ODlo6vhCff39jvPif6jAt8TUpKbx4nUiUcvl1yACJ\nfCTq\r\n=oy73\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmh1CEtF6KEt3YJKvS5Fzi8AKr/lt6pDTSibvaAVLlzwIhAMtCe74KzZ4GcZcsw2P9OKm2xi1mvcUkQmnagKrZm4W4"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601645389-ec176b0d.0_1601645503150_0.05672320065005443"},"_hasShrinkwrap":false},"2.18.1-next-1601646017-b1b61b6c.0":{"name":"@xdn/core","version":"2.18.1-next-1601646017-b1b61b6c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601646017-b1b61b6c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-R4qJjcNZNhaPgD7CcVKrkBQz9SkY0nIvxXLIa16bXXf7sVGkDiA5XgMbkfYt4thACAtuGfofbIGDgyVMymy0hQ==","shasum":"b697aeaadc9bc434119678b9337031b766df48ab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601646017-b1b61b6c.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdy4vCRA9TVsSAnZWagAAlEUP/jXeyJErCop7Z+H0lKeH\nviYANd4poIvytoHxsRlRh/7IprxEdYC+peBSZxZL/Gewar3hH2HUmM52EZRs\n7XFQe0M6MH91Jwjb74QUA8Q89KGwvcSVJY4veQyit/em2yohQCbUAlbRz8ju\nL8vCHxt7uGXla1NuM+IWEKSk2em/0gZeWbzyA4trDPFR/wVKm5WtcehQUOlB\notXpWbUI0nHRb/G/2Lt7rcn/Vguph58skQJcH2PnW+shtsXClx0p5bi8V3yl\ntwwmz7NQNa9IockId5t8JHxeSosN2aj7uYzwsTZGv7Wr1m/BlcV7wcdHS683\nhYGCutoMlh2m99XagwXjVdOtlTBtJEg34JXGJcRYAnDy7yQS8yn6avG9mY0Q\nsrwTZWVgaDRkjrs6qbGXcx97SYYkJdwBvbhRu1pnr/TMkoEKVWT21EJ1GyTn\ndkcMljd7gE+63ddygVeq867chsa/8JDm47rC0E8rygFGtbY/KtRmjrNbrf1f\naqkvOL3USWHU9zWxuS9waqr9jGixlrYR+SKRakFAYXAG37eJx/zin3ymG8dl\nUZ5GkOB1Zv0qmfG6zTvRtxfZXfGXmckJixU44QpzTasN++aAtJx7ZFUgmQhR\nP8tWO7/7bJDszp3LeHyjTJnlt0Kuqcwc0NEivNSlLICOeVYW6ZIaSatUrrfc\nQXzS\r\n=atH0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDO+TBqzCH5avs2PhumiBEthuemePDozrwAH50X7ioCJAIgBVO9Z+a8yAlaqHWcnfskgc2r5k+KJwy2+nfGBpVkJys="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601646017-b1b61b6c.0_1601646127053_0.44163093715274004"},"_hasShrinkwrap":false},"2.18.1-next-1601646872-1be968ac.0":{"name":"@xdn/core","version":"2.18.1-next-1601646872-1be968ac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601646872-1be968ac.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Tz8wb0ist50z9AsHlhMv2u4WtcOOwvxmvK3AcfvEtTxuJ3xW/52RFaxXIhBaF5Fb1OBQ+Hi8Mpg8AcAi/u+rpg==","shasum":"80427e0daeca8ab2efbbf4bf9738d72c4d46f878","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601646872-1be968ac.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdzGOCRA9TVsSAnZWagAAOHsP/AwLz1xJAwu6Lp0tyu3c\nvMpF1xjihiIAFhD+laTzH++RJi07oNLiqSZyjdasDDypFiLFAlm7mC/WpEj+\n/9jqBh9oT2eB+7IYkBqig6MjahLSHs0hRBgFTSdGkpagtuZvtVqSzoh5uq/T\nF+ruz0+Nc7uZSJbuqI7tMjIIGODZn6WcMdsLKM5PNlx/BJTFmj5WTRQd36MF\nY45Ul68vWa0i2GpK/QpbhFOsiKw7y5sDQXTz2w0qISyD5HX8hNgLjx9nURBs\nSjbJDkla3I/LjY5fWHt7/tFt8JLFGqgK1K30geTfXAP+r76TtUNCr/QmuWeQ\nnFCJjNLqqnk7UEcnWjdUo+hLXaH9ObVOFz/v+1Ku8N5YJ4++Lrzf76WZdSf4\nLAg10q8zNekzSbkhjDArqWIl756RyC6qP5NeGrYSp/xEDKbQkztJuBxGyLny\n7L/84nFYSs+t0yrPClcKkkOiwvWSyQj3sztrm5V49zkqxWmfSy2uTadrmYCK\nMYeD4aUwMIV6NfyDIvn0bHzOOltbdftvBXmhmGRE7aydlK8yMysnzfD8xtLZ\nkJ3FX0BLAuRCJFwW9rgZoxMmKuatVsVjhnMDRscYLgKMl5d3KWxZIAO8EKvV\nNA74steT1IA7/Fb0LO/UuQcbJAkQEciGwdHwlB/r3RmGJw1ilYJWWf/B5ySL\nAeiS\r\n=9YdL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4Yj8YyJySvKoE7gGCeNF3tAg1NJZkJU38Y1Zo2G7L3AIhALnv1iTPyHJtJsgwP06qu/XP2T/X0f6xE9jGq1/wB4Ie"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601646872-1be968ac.0_1601646990204_0.1780971029265641"},"_hasShrinkwrap":false},"2.18.1-next-1601647582-a1724a97.0":{"name":"@xdn/core","version":"2.18.1-next-1601647582-a1724a97.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601647582-a1724a97.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9RlVzKORqf8pAWzAvXoDgMc2QrlEOoh/otCOls2GG32/mDHVrdHyf7oJQWru/EBlod+I9VLesq+9FlKI8JjJlA==","shasum":"58c12c9f1399b0cb1da5067ab630672176a46f1c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601647582-a1724a97.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdzROCRA9TVsSAnZWagAAohgP/3+RAKve3DkMY+EUrsWM\nVNNEt31v/LK1N8y4cOOuhNVfDBhjZg6IJd+gK/TA3dA/VEGny49PnIkutGpD\n8rMsL57Hpez6KIDkwHzduPPJg0Tk7CysYI0Uybdyk/8r40fH26E5ovpbyWSa\nh1i9si2XQOB1q/fRS8asmFyWjI80qpcw/oxzs28P9BURtG/iRn5aliGQixdt\nn10Yj00iQs1i+HauZS9S5/Hec7Byv9lNNquf9Yb/CDRYLgQqbYs7TGthwCwW\n6GCtHBiH0M/eOIhZNVo2BJEq48lXHNAn7PyvzJ6PFjshBRHC8fGIeUzaNGjH\nqXvGxaoIs6+qnVZrAmg/EweVfSnpDkRr+syrwuYamWCTvvTAvGJjTkboSJhz\nCwvu80JXJSG9+Hn4Qsc30KfsOFfRpcrWsl2SRPXfW0m9GtOXW31ucqBFi1oW\nWrGVTPl9BmCi3Qa8K5rfUk6x2jgnJRD1rfxaz+hvpbD7X37YZ1Q+2Lxx+DL1\nhrCalSVlfnaSLYM260+IbgdwDN4kH6/tMcNhAnrzO7VPdYhTocGRDMSJUARN\nf4Zs/TGF0i2NVXqIRwTDX0qngtbdzts3hEBQVJq/XJ6ZsTnQmjMXopiUoBZD\nRfUonFoc4BKg3ndjjuz/PYq4tIVxdHeJnTtQkoqkbS7zLvAeUZjNlVnTb7Dv\ns7j6\r\n=hM7A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICATiwhgASYO3UcgDjB4qYQ1PTmp8CjPLwm5DlForOqQAiEAsdw0H+KdvAdaXyRIdNGbB6A6qFz7A/4fFqOxS1L8Os4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601647582-a1724a97.0_1601647693687_0.41767493018927904"},"_hasShrinkwrap":false},"2.18.1-next-1601651422-20119658.0":{"name":"@xdn/core","version":"2.18.1-next-1601651422-20119658.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601651422-20119658.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Y/toFM93nNGOun642c/+wRbR2w8lwW4Qqm8VM8RuSCbMuIJt1glSZUad3k3TgbsqOrrWkSusKawhv7MXAtL6uA==","shasum":"e373ecda607087a004a2eb6d42e1dad0965dde1b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601651422-20119658.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd0NRCRA9TVsSAnZWagAAzn0P/jsmm5Ytzy5pyvcKvirR\ntful7uTpF3hYDKqTt8/FjPaDhfpEVGMEoxGaI0/4tq4KldbvtKDQciOD6FuD\nNCs2jSK1A/R+YwYoelgIRfMz07RycEGXMacqDU4PHgtAoEG97YMAA8/Xi8WO\nH9HB8xnIok9l+10TEI8dpdHAdZZdTbmTfz5qvFifJV+yu0JfJ8W6l7kAvifL\n/4Cjfzm4gkg/Wai28ewIogImgDtmEr344WwzN907ym2Jffa4UtiXghIFif6s\njlh0LDBVjGR1OVm73vTbof5wwiJ2K0oFuP6D1ae31FHA3j8Fmi4+3HIGJ5FG\nrCWu6gPvt9CwU45PXzRxLesJ76q+uYcNcRO7C4dfkxznv9g3oXuD+08itnCd\np3A6KKzZJQEeKp7ahpbaZnI1fkH/5xl+sD1z5z5QkJlrPDwXfrzt20Veq8CJ\ndlyrQz4h7Flnfou5NzOpEALJ/B2hJW1DS2CRKSgOlzUIBjhX8lbS8L7ZsM/a\ndogjC/HrYzcvWU0QOK+eqqxrvqFWy0KRUhAoa8rFpV4v2n9UnoWVPElc22Oy\nz8JfOb3qsGv09UvLg9eRRKJmStljGPAKGAabaBNysm2qTFkEF8hKN40XC37V\nWQZnNpbfIO9kiletG2FsQOPfjHi+yiTc5QA4aFEwfIuucq9agsxtSEwa//Bo\nLfFK\r\n=jsBV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDNZMR+sgBs1KM9w+KzJhOZHXIQ754gUlikX3AvbRnrCAiAWBUAZPNqH1Ao95ngJ8K8Fva2LiLLpB5yx5kY1Unhz6g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601651422-20119658.0_1601651537060_0.11016559526168712"},"_hasShrinkwrap":false},"2.18.1-next-1601652297-115a8012.0":{"name":"@xdn/core","version":"2.18.1-next-1601652297-115a8012.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601652297-115a8012.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7MrynMoPnSFf6RFe/qLzr34zPRxPuQme7BoLAAoi0dc8BY7N3FFW+lZkuGT885fF3gCNOwJZilvGG5azqddVKg==","shasum":"b1be78b0e81b1991e191ab4e9d699cade641c637","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601652297-115a8012.0.tgz","fileCount":155,"unpackedSize":569513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd0bBCRA9TVsSAnZWagAANOYP/RqlWSvkDRFpVmg+kE9e\nmg7obg3vU/jEGXPHsVYJvMZSsP6ihqP1gu3FPZ+P9zZvvolrY5HWw36PWLru\nROpiZZ+ixr5Va1Biw2AsnC4I9GS14zU1QNDXUIYz/Q0G2pBtXR+7wVfwfdNP\nicmy1G0VaNBmyOKa8ThQv1WrOlT+pGyGFyjkgB0VrMWnTVK8OqFG8C4BWRw/\nPPZ+cDkHgS/PeaCspplov6MWw+cbI/JaneabAgklQqn21mql8r69FsKgBx7G\noSCVxlq2hAAe4KMKbDO+75/l+gSJFlxOWYNvEAiJnKZp3pNSwAgu3kMDxDxF\nV4GpQxTXc2NxqEXOrJftZMsyS29cY0kkoHol020nzzfOuf2vRs616qbja1In\nTdFBolcKojSIi+r0vVv2UgDk/v3HAMFkkRhZU1DMynnNa5TydmHHEfIvZODP\nX98pinlzIYoCHrHz0FCBDbg7pl+wk3IfllFQUVmIR4Evu08deE1H+VTXqYO+\nR4c1XWcH3egZ1H767sNsTy1P8GYoytNr+a9GkD70iCpYdlw6Ce/8I5SnQULj\n+JwyJcjRsRml6+8ndR9076jgW5XqQdd3yKFyyWm0yY0g2kKh3Ci9RDjc4USn\n4PokvOx1myiWVCK6oYtCSv2mGczs78q705esewTFlOW0ZUkehxYadQ7Q/Wwa\nrIEc\r\n=kmpx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7T1VP++eEczgwApH7bSo9zgylhSeqVWKH14VyOEokYAIhANovPrXz+k5pfz7x8VHfs91ilQBAzw3Asd/erGtyQcMY"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601652297-115a8012.0_1601652417287_0.04939439213137864"},"_hasShrinkwrap":false},"2.18.1-next-1601656824-20119658.0":{"name":"@xdn/core","version":"2.18.1-next-1601656824-20119658.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601656824-20119658.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-QbP4WAIWjgdHf4Lct/8CRpxyiVUuBnghtL/BU06YbSa8VOPIHUw+UVvdZYQTHoS2gzMZWprg93NRqHq4CKJo7A==","shasum":"43e635d45ea0cc75e2e54664610b1b1940a0da6a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601656824-20119658.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd1h0CRA9TVsSAnZWagAAxoYP/2usY10ZmtHkS8FBoG9+\n/UwdmxIiSYOdhd32Wm2aVADY2xUxM+qMWAWuR6BjJ27jCHkqGKHYzJl5+r0q\nvHmE8FYNfngyeNj63V3wpvcmmmQ8yuZG8uH7CwBqRG20vWkynMudcCMgDPL3\nLT09w99gu0pFYku+jaLOzx4LnVxfLdi6RuG2sC1De9OwwTkQX0GRMhLdBKeJ\n56iXYQMESq5S8Bc+PgRO1+lazSC8YaE10C6NuKbuNW2MlPCyeE7G0rGmDJCT\n7dYViWTk22Yw1xPe5h9QFLaxczAITvTqpdr4aPXXbXzA8/wq+egCaF/icMMl\nHMoM8Hen4S0xhpQvYMFFtaly/9jLibVcJqTOwIk+kNKkxzXtGTQ3ynJ84092\nLEAzygBO6jh45bIs7wJSOOp+Bto0Jbvot8mvW87y7nFXKvmShGahSPvfE1Je\nPzHCZGu4QEyutTG9BRy8Kqz615uSt6pCPgFtNyi33MDUsNIHZpJbtKRqmVso\nicRKA62ni+FwjvdaSzAbswU9i9y5o1jFvzhF+OFFi/PLaNefkZfrNBPjrK+L\nn4o45GLWa5HaQFoPRYPggHxtWGtv5nBg3W8VD5aXSZ22JtMrI0xcRvRsi16Z\nDhYeRYXFZ/nMzxf/SeNGnx9kGYtNBMwT/RtodguFsZ8EqYoBCCzFlLSPzb62\nkYe2\r\n=Cmyc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGkYsvtWGUxlzui4EKAzT9wnRBhC54YVwPTLzPGRttTxAiBm+OXr6sljtAWTybLcqBo+zURiyABP13ta38vgROku4g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601656824-20119658.0_1601656947929_0.4899796842740618"},"_hasShrinkwrap":false},"2.18.1-next-1601661116-c3e70925.0":{"name":"@xdn/core","version":"2.18.1-next-1601661116-c3e70925.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601661116-c3e70925.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tq2LrIby5Cy4BbGPSNQK1jsWj3WSmwtB2LaBu0oxOIgWVI9HsS8vwiTvAod3PihRDhzfgBpmSxrmrZL9kgjMpg==","shasum":"83c5d37a6c7c539b43d0c1a3b7e57f20ad64e0c4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601661116-c3e70925.0.tgz","fileCount":155,"unpackedSize":569513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd2kcCRA9TVsSAnZWagAAw8YP/3Dm4xwlf7RdtnN2w8Bb\nhTF0etkQ0FPXHSFmzS+soL3kur4MRSsOJos19Riahq/t76aGPNoiZTbuE0PT\nNJ1PR27MfxFb5UnniQgZwxkXVTNV9LknlDOiY6XaatcQtz91wwMZwZ917+f+\nBrwM7/Ky2805rq8DQYw9YhCGIEdX1X6AAXn1duC/hiXXTNguXwOO98TIGsFo\ny696+9yTYVT5bXTUzCNsV7Dqr9DfruUnxa1/TXMfjqnef3CTg+73k13ePDY+\npCuFqQwOWG+nZVwvaNH5yne8ze+NTip2wMWLV/1D52NSe38knOLUVqo1ReBl\nN0eKxCisrmX5m4Dn/hs3py77jtzXTLgxueikEzlxLEOoXM4cPWFR5WrOt5rf\nfMlF2FK7z6Z6hIbIzBD0QKu47mEzIVtbXeHClhxZ/kAYzv8CAdmFZ0tPBT8P\nXxhc8GlgSJxYH9Ap3HHQSMO5lD5zc0+b75s29B4UvWekqELVr//rZKpYIRW3\n0sCd3HrNLDF1yf3fGAQ6eaCVHiQ+FNn/0BFNfZJECkl7yHe1Hkq/q99PGlxq\np7VkLjF9SNoQSDKCDdiqU8l/Br+l/k4lcrDc4Jj/ECDHyQMAYDcrs5Cp3CXy\npscm95oG6qV0bKMWsGa2u1OKdsJAYlmTOK7jW7LenlCYSNr096hMbfmkC16j\nMEPb\r\n=BNEn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8MNnw2Sf1vDE35btYWjsPVLeIt4nm/E8CGEsHpE8zKwIgPtntWtSiiFz8rcsHPvxY4PVAwFnNFGclws6lrAG0VcQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601661116-c3e70925.0_1601661211851_0.43016893937816847"},"_hasShrinkwrap":false},"2.18.1-next-1601662319-80d99d46.0":{"name":"@xdn/core","version":"2.18.1-next-1601662319-80d99d46.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601662319-80d99d46.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-LhDIcaFtiQIhFSYWz6Fm8pOtqhM55ePyIG6KtrVuNlwEmSjtNwKJnfXUwe2nYpE6Npb/1ZDrSX/EUi5YjCPvNg==","shasum":"1f0bbf460fec43331f64a7d39787f78609f4ed33","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601662319-80d99d46.0.tgz","fileCount":155,"unpackedSize":569513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd23OCRA9TVsSAnZWagAAHLkQAJHrprJgilk4G+p8FW/6\n9xl5U722srjhZ94LWUoEfzYyADZSxAOPjZ1ESi5lpeUXFrzmjZXtNrapk7Wk\nyh5bFcY4YNM5nvhMH4sldb8b9N53L2rrerpE9R58dydlx7OkwsTKlb6zujoq\n5UtAH4k7N1UOqitYLFOyRKrSt1198QwWrlEs7GaDBARCYts71NAmiHy2AGGF\nvVhzwN5foNY5C6mCn36MSe2Crt/iggI+15jHFMMGZk5Bi6XPyuZleOqJvpEG\nhVhqXVplKY76D12kLvQbDNOTCOvlIpPnWGl+ts68eij72L4ZgD041hpPwAf2\nZ4ogqwu+deNDr5ekh0l4u80Q2FIy5Sio5Pi01E7Uc4JlvWrSosllO0VhrGOp\nKhoHPzxZusDU3PF/+V4WaTUuoFTAYNuDwgZmdRhPMxk3gowGJD2TAaCW3vYz\n+Dcle7Cwk0+r55dt62yhNvSmGq7dN+ba/pIIP5Ve/2hjSkR7bamyv2B7CAX7\n1izwxnllFHihjJFyWKZqwwTe478ugxrbpXMtzqDZCyJmLb49+0k5sGME8oUp\nhw1pFZIjVA2dUSJc04ajTAuIGvWH1R7gezPENWTzOb3yB12IKr6m7p3IHHUa\nFeagh8UgnwZom1Jsx9r1s3/Y6+BEfsp6K281lGPWWw2eWwNAjWHMHUmlgy0x\nx8Cs\r\n=aFzk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHd+tQDIkRyS7aveuTLb5VEIc4MA1wlaWUbGFIgW6FwlAiA6f1uZ26q2UEPKoBssUWoW6kFvUl84oj+ghq1gpeWVPg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601662319-80d99d46.0_1601662413515_0.5170313599693863"},"_hasShrinkwrap":false},"2.18.1-next-1601662726-554644f7.0":{"name":"@xdn/core","version":"2.18.1-next-1601662726-554644f7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601662726-554644f7.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EJUCqJTZcRL3DyfxGpsEh+O1JaOu1BjO2Y6CEB01PAth9xoxWjvF9fSl2vXXAR2qZlto2qS4gS/qjW8gJIBxvg==","shasum":"0300cfe712e411f3523d6258ab609de863a9c1af","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601662726-554644f7.0.tgz","fileCount":155,"unpackedSize":569513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd293CRA9TVsSAnZWagAAo7cP/0ae7GJHpps9Dkt9C93a\nPBl1OX4dr3uWLP4T613NcwlfrwjwyEAmSMP0vgk+5voepMjdNKUVSIkfxSHt\n1OGSWlyhSDKW2ShOQl4xirpzuHNqA46p1gvatFYduXFA/Lzc0AJEiArjkyqt\n0SqFW+uHDCiYyyypdmn/O8fquQmUd9aJA0NptpYQ5+TwVhuuab5JoOeNZ3e9\nEhRMpT7NCeFK1+x9/rsxJ+0x2wIoEtzMtR40ji7L0wOJP3D4N0gOcr+ij+I/\nehU1SjWtSHVj2hC1UdDxmtHxGozVmkNQlJWMBh1HzSCDjefsd2zBcpM5w1QW\nDMahVEa5gbjKenz+jC50B9+9V3yebEwRWZ3K1Mrmj83PM0LnfwZefbFffffN\nLGgvW3q6cl0freKyLkHXbDO3YssTKakAruNikBkiffAlPbdQQJCuyBfnRt1C\nUHeAlfXFDG6MTlOlfQ5F/GRgtG9iueTdAVSGnl2QLxzSFO4GNTlKJa0EbAxm\ng8rTwbI8D65pqD9U274IadN6w0mpsAlDVilmN+4K/MksbvYQa07liexLwQiM\nYqO9l8/Jt1Rk/a4qCoJpxIAd8xaW5WT6WYNWJ9tFfVe864OkZ91dJ9Y/KUct\nRojcuY67OWMl9rJjXbjOEgULoyaqELsyTvm7r6WOQKVj+YModPUw2tvuFpO4\nSC2d\r\n=z11f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAue3RGZK4QK8UdcR/Ktek5qH/c/4RpBwl2VUIyBDDRGAiBMtwQp0s7G+hxhb5sQEZcTd+3tpsYpW/rOK1UxYlSYEw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601662726-554644f7.0_1601662838605_0.31878630021668575"},"_hasShrinkwrap":false},"2.18.1-next-1601663326-aca715be.0":{"name":"@xdn/core","version":"2.18.1-next-1601663326-aca715be.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601663326-aca715be.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-5L++E6vi9Tzz4qp5IVtQRGdPskG3y5KcyurztXbNdsQ4JwczOHHuIS48UToLmylkTT2ZpZBkNws1ROwc/2xRww==","shasum":"0500e966cc1f3c4347270d6b157912307b0b0a52","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601663326-aca715be.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd3HNCRA9TVsSAnZWagAABVYP/RsaHDKtRUz+jMzPmptC\ntaTdFsOwHY+PBsDqgl8SI6xMAavL2MbhF9Mw4HdhXw4pYEIOMlXwTioh7+Ab\n56HGSBR1Za8SsG10c8c0WqhUV0k5WrwD86F07RM783fdLaaAjBYCxEHga9n8\n5YDrti16ksESpKV2KBbhF9h5bFKiQcLS79XvSsxHSUGsQYB/go7J15uSVZYZ\n3E9siF5pS2wxdX2Ai/EOZLPS42Kx8ak251YUN/CRwcOVCY1E69H32xQxKkws\nZVhj6RzA5v63Cjgx7YCmLofgqaExvjnIp/gvwrPO0Rzw463z4PT/OoqhnnYd\nyHOr9ZyaxqQ73fAfZgDEVmyTAEvWnhZWHjiFDie+9wt2OFNIoZjmSiMH3n/X\nN3230/BVtxpsRJgyvXRALD4HIp7UzE2GB5jDTCxlgGqY+0zEt0X3dRxmb+cb\n2CCf/oSUvjn/X0+I3IW8BE5s8JonaJ7tNN4M88tuL+jKtX9ABuJwz2gU0AYv\nW3uyQ510LYg9qhmGsCwNRo7uhebVgCLekgb8Zz/Vu25STqvbmiTXyqCJ/22+\nG97k2qlkJgYfczsIbmAoOZM303T9EYGMKxvA7xUpiI/GENqpz85KkpkfLdnm\nSwZQzmDxfHKs/oOOmuM7X0vNN5Hw9nawsqw824ZQ0l77s/Nzku6BCOVeSUua\nXkeT\r\n=DXX2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA81b64CJ30eHtdh0Xs7kF9MPhn7jzdV7uHOhpLPi2xKAiB0TjOOa06wpk+7cWWxzLCxSCg1tODyDcOUYWslX7k8Yg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601663326-aca715be.0_1601663437368_0.8571400565337495"},"_hasShrinkwrap":false},"2.18.1-next-1601663910-72ef8b7e.0":{"name":"@xdn/core","version":"2.18.1-next-1601663910-72ef8b7e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601663910-72ef8b7e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SZGWN0MrNk9yCHdUj4CGXSTWODKmGaVXmr3PRgJ5AuYQGd8Gg4Q6RAgy4vGYNyp0IFs+SFqxYe/KJbIlK/d+8g==","shasum":"3df2d5b25305951b38faffef02e917476a49916b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601663910-72ef8b7e.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd3QaCRA9TVsSAnZWagAAeD0P/2IT6VcoXAdfuImhoffO\nXbTV+jZcen4nCc6pU4w2q+P1KmBs49l4U7aS7Q3dRWdrdxU8hhEFczXO1KlE\nmY6EKDhYPQSdUQW6EAefpok59X728MR42o5XyJN1ceCnRblHKF+Qj9skr0+l\n7D2xzljz8UsTLqw4yBbQsfA122qqgKC1ywoUEXMIlQRxZzxbnuENlztgzZNb\nB9nv7BwsAOog/whi7VYtnP2XiBb9NVHtdT694AQjNEyr50aW8x39McHkXtjx\ngkjkKC2a4Rj/lJvRk7xajMMS4HcqgmB0iMVYyh1LYqISbDixfbE36cGbi7va\n6ILeBdtYggOCjcgeGQv7DMquJttLnS8je+yXIb7HjrGaLK9rT7H+7J/DsSPT\nrTCGpTSX+ZN7Utdam54BDy4A6QQnJpGf06dLRACbilAQtzX998eTf4ckYl5U\nPqapy7D+f/hQ3xW1tvDpqB46TLsuY6acPebceKl7D2XDlfsFD37o2Dh3oP4S\nyuL7X4wv0nChVSbQ5gTHrmagrvQVmOFHUyQUn0iY+C7FRhl5JF7qizPV3qlG\nn2hD+/Ra9OnuMbi4bfmE9H6Fa0xaY+zL07YFCRxeJ2aF1UVj5rNEuqeSjG8L\nxH5Dt+OqchRtFdkkO6j35vY911GAr0U2JbaaJWAU/CvA5MfT46iJ+4ZKSQPC\nOovn\r\n=5v5L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFYovP7XBsvxLX2kjsIoo3LS+DSZZgcQv6MSTTES2IUjAiEA6hPdH78hDrX3NfqWKgxPfrTI0IXETItDuGvqSdIi4G8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601663910-72ef8b7e.0_1601664026102_0.7832811915756559"},"_hasShrinkwrap":false},"2.18.1-next-1601665777-6f7cea47.0":{"name":"@xdn/core","version":"2.18.1-next-1601665777-6f7cea47.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601665777-6f7cea47.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-KvssxFari4ad+UpD51Wl5LPg7VD9mFf92fhrhpTkRBPY4MCCbxYo7aEbG+lCdQZ94M3y5CBPibtTtOkz6OvD/Q==","shasum":"73ff613ec070e70efcbea01250198f778159bd7d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601665777-6f7cea47.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd3tlCRA9TVsSAnZWagAA+CgP/3IehghP7IIZ9GP+epqQ\nBGRNimFfcE3pHx0+ktxOdeBmXLCAPbUvcux6oFYUzWgsxdDj7nkX/PycqCze\ndvEH6n2MgqvkVXVib5azcXYJJol2g3ii0ZQZ3D/Sa20uoJlOo0v3bPAracce\nkkCNdduRS0Yr62vmW38I6vz7WblNm00mb/SgB8bdw0H5m8Ik77mzMvVV6F/5\nS/uNfAmyMEBK3ejF/FFohi+x4t/jBzvgVknU/TZw3mucD6YOoLY0P+JVQczn\nYFUecZb1Y+JqICLRJIHuOLZXMF3AgCrV3otqxzBykqutGiiBESZwXp+mgLy+\nu21JkgdUfJReSp541cfwuefG5745EKdK0TH7YxLVD8AeKZMNZyDlL3huOA51\ng+vo1UKEHZGxdWiRdxWhl/faLU+MXPZRem9zyosvM+q6QBCbn5iTcbUyP097\njVAMjrO/v8G9D9mL4OCdAYzNoNbv9gedyLyMPJSDPV9blWRPa38JqNMQTRjc\nb9xY6VR8pcDCO1uCjolCin3GIcIM5poEiCkl9hbQU7PQt0RzHGm2alRi+tUy\n6KR+uvVCsNCrnIwoUMHVlNJxkiBC1xwNIyhdpFbqiDdN/3K8IOnUed/3k2ct\nVJnfJB/nIkn1V9sPi9CabKjgNEIRa6lcyr/Cop+inbw0loHGp1z73lMrIcxj\nuy6t\r\n=GupI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG1cEbeEc4ZVUNV+yEDs89j1b5hbIOdbh0D27LOA/+ZTAiB4WGTsJtY3RNOnAXokn3fKMQoIJMKUcsTrebFTdl+izA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601665777-6f7cea47.0_1601665892612_0.36632427108646537"},"_hasShrinkwrap":false},"2.18.1-next-1601667162-9f881693.0":{"name":"@xdn/core","version":"2.18.1-next-1601667162-9f881693.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601667162-9f881693.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rwnjaefKiyYHPm/3J6IZvJslClf1y8ggJop/TiPhWc9PpaCdfmWz8Bwj0OCk98mO8eFZCEfaSo4/8l0BQzv5QA==","shasum":"b7f8650e2a5ca4060ed6922a6e81dbeb72a38ef7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601667162-9f881693.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd4C5CRA9TVsSAnZWagAAussP/3E/zd4DnQZ0h8Zey2DT\nSwXiZ469wVGl4WPXvGWRCDHft02QkgNKcL73WW6gjfYdLKTyDfCu/MOnjgSo\np34t2cKlovZwpZ7A/nUYILirmCZ31i06tbnw1r+YjZubdlwG2Ebw3w/xK3YF\nDtzwyIJmzpCJVYSNBvvGRwA27cR5UTnpru/PwhpG63c2B/HVpTa2CTX3zGcB\nEOjNIZ/lPruALze9JrpoqT21I9PAU7N/YeEZqlp+bicq9MwnX0bIEvgGCKw+\n80SrOmahjcVrcqwe1SLsCV1zmJ8V7P9bZtfhmeDwKBh9ScDOUaMzQsu9xAc0\n5Yh0m7WduiRp1og7IUgQFjBSGO3wTMB8UXeqhTD/xAo6kBBDK8hFGI4cRnPk\nSZeoqXt7ftWJuYx1jgXAn8ldFtlbf+VB+7CSqr83TrPA3gbNJ0VNoMK51bNG\nxMimUP/X8q41b6B25TyhXS24g7/rgRhqL3VsO+rbHo9joJxH6LKLyOesGpw9\n4nwUisfalXserN7OfyjlHQCn5XXvNkj8i9FXyZsjHQCZ4wtDIIU3MbPTPGtC\ncFDAKJCdR0A7AoEDHvTgDpAH5tDufWtqJsn9QjpMlKapVZeNoxv3t0r4E3Q7\nVDO2fY954AG0U3e7VlPhTRC0UobqaSTH/uZae+NDqrvrX9FNeSrdu7Gt3LnF\nOMHS\r\n=rPhR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGlkJn0cLwcSzYrpWUcgsbejMxZSsXjw+8JTiLSCEA3gAiEAsL9Odu67IAJnyt7nbs8NZcKdGkfJdiQbEqrAVb5TMoQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601667162-9f881693.0_1601667256991_0.5285092409675691"},"_hasShrinkwrap":false},"2.18.1-next-1601668899-9f881693.0":{"name":"@xdn/core","version":"2.18.1-next-1601668899-9f881693.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601668899-9f881693.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3skT+usFgYgfH63AJYz+1i+ZE+3ji7uNP/zAaA+96cgOCng3Buem4L0oHsk5/J+fRm77q6CfOYAiJa/oNRXpPQ==","shasum":"07aa116303f08113ce58169918833097fc56155f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601668899-9f881693.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd4eKCRA9TVsSAnZWagAAG68P/RH+XiY8dPo9oJUTAYuO\nzjTgwrcaxSfOy9WCBfI4jjG1UTE/wTT8GphHCOsgPKC407wq5YcD/1FuDYnI\nZtum/jmBCD1bWU9PkNutmCGeyhcIlf/3d/trTwDNJ+QC82XwmrcT0+XQvEWu\nxCyE5DGOEaK5d2XfAmpl6e2Cb72dRi1Ax2qbumHvg8WdCh379Nh99IVrEDxw\nN4XGrledp7sRbfjccGOYM/VAAXdmzzzSMTII3Yc+ulQFm9Lmz8EKcKIv9hQY\nyj43tRLgm9Xl/LCjyrmfXnn9bJYDWDnNOMIPmT/9v0QDI0TuLTEie0S6y6WA\nAeSthgSs9mK5XTr9uOL5URbD3dALYKyJqh0jyvTHiOwCuuih/zRyoWRqtUG8\nnA7jt8X9AXI9YfUSx5YkZ5in8Nc5itAdmc8wi9nnd0bMskC/qNSDmuRufHHr\nw4k8zOnANYVKgDWElxOvMxcjKf77Dga0Aj7n0kLTcLfIHbSDX+jYv7dBUwLH\nexHEBI1kDij9v1OhiIfxCwMl90ef/PLuG5/G5PDjYqi39Bqz+KedtemQcFo8\n4dbGA5ntxO2BbXRJe62WlC6dCzFADgN/CqIqjtDmvox82a5pYXgYWyCTGUsu\nWO4/zyS71ZZLkdKub57gapo60Y2wzYMdz/69PPgNun68d664NQRGHwDDZSeR\nYt2s\r\n=zN6s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC8SNkaw/Vz1CwQt5dNRycf4DZ5xIcGRjrFMG3U0y7ROAiEAuDx4ZRU8PIYAWH0U2VitHMWL+gBl2uXXXGY0fQG916c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601668899-9f881693.0_1601669002284_0.31013393653280796"},"_hasShrinkwrap":false},"2.18.1-next-1601669306-48085889.0":{"name":"@xdn/core","version":"2.18.1-next-1601669306-48085889.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601669306-48085889.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PdOuZ5niMZb4QNcyx6VNDBYQYokBLafInyLZ3ufVmwmorH/ZVhvv92SLOVnRSRStCfDe0aDi1jh6buY6fZ6bkw==","shasum":"aec98791fbffdd55e8166153ec517018515480ae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601669306-48085889.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd4k1CRA9TVsSAnZWagAADo0P/jt3q2Q4iQ1lFGje/7BW\nLFTi6FFQiKWHqbVaJF+hNG85l9uUVRZ4NyL9aRG6ghDzQwCiHsKzrx4dVkrA\niLpOzWfzwK01YRfPUltPxYSVF11oLMdIauFuuHkj6LBVJWZVgDIoDQSv3btG\n/28nA2DL8iPvN9t46pQPUyLPCnN00GIDFT/91vL87w8I6TVp1YGAYDGyY+Ih\nBFeBRYBNxPDOR5aeHmDhWtDps9x50RTscWLKWBdsVOxcaCvyYF2udo17J27E\nKp7p4KPxGH2IlZ869xct4gIV/Kj69kkF9epEZ/9Smco9dXvsGHzp+vLYbqX6\nZb6kBt+hOt16Z53Eu7V8B253R8+FfY3hBPxkJGGeY+toarDsVFL6lvMJtdWA\nTlwpPD86E84ui5gNTfUdx7FK/PYh8XnIe1KjVns4D39yDBqmVyBFzhNVnT3A\nPS4lrmYqm38XoDyJIodfGLjZK4kmgOSKWXLELZF/StpYoD31pvzTF43lKFsJ\nP3yF+j1tRIDQBYxEwxzkAmojguHuB29ct8KZTLcOiOXeI21ehf2CGaZobteD\ni4PU8tCFBKii5UCxrrQeZ+etqNHor9Pp5texub3RsEPPpRZzcktUhqB22zFa\ns0wovFp1gQZb9jtCHmh2roCL3n92nZZEChZMl5TSeiMLttWzh4YTFqwRJiLr\nTxSk\r\n=aDxT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5IT39t0neO3mGuAppI06MMFvshh96RJqc8YW7ByW8/gIhAMwKXydfc7xj3SoEQIeJs2gxFdjtCOUYdLxAQX5qXZNX"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601669306-48085889.0_1601669429275_0.14075131027642707"},"_hasShrinkwrap":false},"2.18.1-next-1601670845-55aafffe.0":{"name":"@xdn/core","version":"2.18.1-next-1601670845-55aafffe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601670845-55aafffe.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4cljyfpHf+eogn9qmfDBcvfzT1BzOBD0Ru//D3qpVbRLQiOF2ybwvdcI71qmI9E1lMk3VUaX4zN+6mRoHuQN0w==","shasum":"fcfebb9f82d74e1daa8716cb6be13570095e245b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601670845-55aafffe.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd48oCRA9TVsSAnZWagAAPTsQAIyUN9oJt4pk/NqCNo0S\nrPL6oQWMZOpQ427nCvqQ6oSn0/PGBwSZW7rkY9kVtFxq3uZyD+hFsay1xXF6\nx5j4jaX0g3f0jCJ4labfsrpO8Oc2jtAlFnmyPthlgq8Q/uLiU4cSykhah+NT\nX9NxdUBXlVsUbeesRgaEGWRogMSYieeNktVaWo4eZBq6aMOOuL6U2TqkunO/\nQmLW7aFJ+xwdJaDIkr6Yu+PXbTHtheg7iiz2EFZ1yBU8G2z640SOXLwl1ZE8\nLDl6Lob/+gPPFqTbtfJIJAI/Ot3wgMWTtTRU/5ca7qEOHz3xTAqmejjZHcIM\nL/10sUfAHTdMWf6onX2j6mJ3riKPUP522t6mngIxKHBh8SPcehalBXO3sLrU\nm3cHEsUCghKjnqr4VPPSCogDD+78l2dIeLxBVLigECiPnsaZAo2PjiIi5JmT\n4NhE0wDFSIvqyCjjOwxUgaCQdFd0tAZJTDuuX0iV9BbWlIXNJ6CWw7f59S3D\nq7ajx4RvrTeITR1i19xWDxKj0rANHCjmZf4V8ghqIlHhpiWnGH9Q4fnw6VSa\nxu+163JbfCCFJNlA0EtyR+gPmaboPhW57c0O6tXSiObW1n1jBc9JGcAANnIM\nB0APA17ggGfSeVht6f8i091lPt8aotQtd2BdBlghzZzRZv0T7DcGt/JzJ01z\nUYzi\r\n=c5DN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwvxayuppgHMZk/rNCxdBDTfNvh6ZDTmXknERtRugJ9AiEA4v0gLbs185qMIi3vLmTpqn/rWwef5Hw/FibdCW+Tqg4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601670845-55aafffe.0_1601670952315_0.16443936349739685"},"_hasShrinkwrap":false},"2.18.1-next-1601672502-6f7cea47.0":{"name":"@xdn/core","version":"2.18.1-next-1601672502-6f7cea47.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601672502-6f7cea47.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-uthT9GQJJXHJLfyQNwQQ7zSnh4XWlUiyFP5sNytYcVkGZqya7s5fwEEcu9YQE4EOAjOk/kyAst6/JQ7VYNpSKQ==","shasum":"72cca14fad0e04a114cfa81fd56b7318562552a3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601672502-6f7cea47.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd5WZCRA9TVsSAnZWagAAde4QAJKsW0T6deMmUgmzHwYL\nWqMjWdvDbmjFt4z1sy4g9XDj7Z0HbhxpkRw/2O9N/yimHLCi3VMOPb65HX5A\nmrCxht5ivQOtPztwBi0cEZGklY8ss69L9r4FE9mec3MlzBLQMshtweoTQa2B\nBjAWz/k6uqMgQd9NaZ/NhpYmFzT4Oglx2LTFR8bVLql+rE2GJl1C3SF2o2dc\n/fabCFQSDVmZ49DzK5ppx0bgZR5x0B2olhO+6oCUVHNgfnXyQPV85kDCABfq\nP4uD5x8V0OKOpahUPlLyyej1H9Mwv6XhErC6f8FGAAeR7eZm//Oc9u4C8OB7\n/o2iLWN8e2qixI1Pq5hKr0nRD1eEEaCeA2Qd1XyKJLu6LYEYGKq3zAQbKrxC\n3jQtKRPsHcJgVB7LBlul5m2dw12y4fSXkx7o5XHp7DQyNSurny9bfya7M4xo\nxgo3tbcwUDLTN4cHaHkJ8NjtTN8ixl+l0egnHu5/v2rnXNEneBq0qZVPPELI\nXI8Oo3YixRDZSZ54uv+zPXQ34rgxEr9P4y7vG0e2Y3rKtluO7KBmctL3EYPN\nLbGZn/329E5s3JVjWCSygYtdic24fSXaVLQItk3BEFW+QnOe5MlmBxxt6xnZ\nn1bKQoxIpSU3c15rieuZUD302/pa07Bb+7hs5DyDwgGg2k+vkDSjUW5sjx1s\nIybV\r\n=Hpk8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFvp+6NGW5QqK/F457Mm4cyaM/tEOabwVJ8xVEX+1fXAIgNRHW/fHcnPjZNBt3G29vwRMHWgLaZZWzc3D2SE8+t/0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601672502-6f7cea47.0_1601672600653_0.45641292264288236"},"_hasShrinkwrap":false},"2.18.1-next-1601694360-55aafffe.0":{"name":"@xdn/core","version":"2.18.1-next-1601694360-55aafffe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601694360-55aafffe.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qIRBT6t7xelTPsgXy6C6eZ9snAaa4pGNveJrvc+XQ4lY3gJzDH0qg5Gr2JfQdajoeyEaN0PWxBr0NClVS45MeQ==","shasum":"71570645cf2b48c13602703cbf34f4b268944f4f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601694360-55aafffe.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd+sKCRA9TVsSAnZWagAArz0QAIJoXY6hvkzlRrxZ2Vj/\nbHoUCyu/rl8DBz83ZC4frL+MPbU1s8fCev3Ie5MtMFMUeqWO0j4iTmXukQAU\nK5nQJnU06pPxQHdJEF3b7Jb2fgAC1SHFeWx/PxsHzCg3HVUYn2f3uP8f3lsL\nuW5NbsJBPMgsvgyaEi1mCOJcqwgrM+IA6gnVke4q3qjACct6em/8RXKUuvoz\nvZ5AJ73hRqETRpK5/P3ZCHRWKeCotds/wNVBxgspyRTEkmmTJVQzRisrlpcU\naM0ktj0IgH0IUa53Pz+WV715z6G/OAAGd75lyRTNJf+n4IblpIZbeRBQkVS0\nVbuJGS4sfDda+yoYharJOLKlnvAh2waSreaizk5wSrtVIczZ0ulZy8QrSBec\n+AN4dygzaVDgWiwbJz8RTt3cfSo/a2acVccjX8DPZmydUxQHKBMZOBYe8mlX\n4RzFUagBR3tsHmWGCCDCELH6sMvLF+vk3xAEvP83/ajlujq0PBiXH9aj8u7x\nbAUgksdmEbDFgY7J0BA2zta+BXBYEcxW/ofiTeGRFqTE12haAG2h7c7bgI9+\nOpr9munOJebrP2X8IMetje4/PuoBZ7wF7SBPn/MP1i4C2BfsNURsAwxSVt4I\nR+gK9zyutsAb+clfEWeK59KxQDhcJ5Fw21NLRgUxCmoapYqz+dACe1lnMQc3\nwpOv\r\n=iezv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDBJzyUhisJNJipHnB6zEypIoQIXmtxPLFfe/rmAgOpMAiA+NOJayXW5sCYpvBhT6aA1Y6VnSlFtDOV9t9RmL3htMQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601694360-55aafffe.0_1601694473723_0.5647392138264269"},"_hasShrinkwrap":false},"2.18.1-next-1601696343-6732389b.0":{"name":"@xdn/core","version":"2.18.1-next-1601696343-6732389b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601696343-6732389b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qcFsJoyWo5AAEIZOOhH2jM0dDR/ZXTjPXfa9Se27VzrrXGFVqcWxPqKHmg6na4G0zNZUeqaBjreKKITS6lwcUQ==","shasum":"a29a048df6d13eb982d8f86e2cd272b433604229","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601696343-6732389b.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd/LMCRA9TVsSAnZWagAACDIP/j4/SXgyY897sxtktwVo\ndL+zf3aqZ1+vjfcD0bXVB8n0FDi1yISFB/CF9QERBLbi//xErhn428GBkXYg\nBtRwb30rUzc28I0VzII+heag/Ls3JarUd6uUbYG7YGOjJqQUqhy2tslPY/bD\n6T+8wE5lJGCG84HyIhUR2V/X7sFLhE+XAopCu0GXkLNQoh6lbV0GS6/VywFM\nH0/LoMnbbZIaWanIRsroMwPRE5IWV0Fs8t7dOWp6HoY0no9Kfa3+l57sMHuJ\nfy2/xhlUjAyB2H2ONYHSGs50B2U2uf7TSsK9vG9UKymrHouX+AQWzMwU5dKC\nJUCA2ze5pxteBpbwAnA3Uph4XKjpSuzQf3DE52MjvikJafjlXmCqSwUohtPM\nMw3Opi1Rsvy1AURor+WrNJZz6xO6ylIj6+tto6yhzESUK66L0txB0zolrNNF\nR9jAaphlvdz6D1lfUoK7eVTRkgABVctxKGW6CrNR3au+4sccEdG1FfQT41C3\nOYnC4NehoG3RSKQ2tv7BHpAcx8dYfEo7Y3m/1EokrqWNOXzKTnz1QNxHPWLe\n8BqqubohUecYcO3ls5aiDRW4uyhD4KW79DN7iEQ7qyVsFEy3MzuYK46bPHi5\n149Y7RCVEVSJmPUPLlV80OLRatH5aswxSXo3Ey9ACoeKZIoS4qT2/9Ku+feB\nA1dp\r\n=hGes\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFrk5KxRNVEGbDdbnipb8X/GRyuH9RgxtfnHANBOeun/AiEA4ljB41KYT/bMHUHMJn30LTq7/BZVsdvTSJq7FdQyAlM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601696343-6732389b.0_1601696459506_0.032986187168080994"},"_hasShrinkwrap":false},"2.18.1-next-1601697320-aa0f239b.0":{"name":"@xdn/core","version":"2.18.1-next-1601697320-aa0f239b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601697320-aa0f239b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-e/5r0JT1BOZ7g+myROqwN2emT2ynxm6aJ35LlpaXY9spQIPzcw4RzlSfR6MUzG4IgUobP2Qy+Psz09ClNZpKSA==","shasum":"fff37955f380119ef6838ee6408e2b1159dc1151","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601697320-aa0f239b.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd/aGCRA9TVsSAnZWagAA8YwP/0jM1bnFqr8n5htzcOGk\n0eO8O4ZttrTsY2P20m7lkSLD2hRWa5DoojyCNxXF4o4Vz/CZayKFTQKr07Kz\nDtiSEs7dvEr3bGWHEcK9XcXROw1cUl7oSQkIlUjfT+ZDVlmcjRW+wsvCdDiT\nvAPDM1hae/6+M3OcCk1nz+FYbwwgsZMzJvZ32ekgrjHQN1BViR3POAZ687S7\n7FgjvuVJ1JsSiDdgMeoRpktFycnHDxOvV7Jdz+3wKLUMtgS/QJL8Tq3DzwLz\nKmzEWJz3PhXEW4WVa9W16ukhSRUIWm0cInfXu9K0Obl4wCkvAuhyL2T8C/lN\nMWtVPqwQHkFjCVKAigtDSSXlRY4Py9By8E4w8NgAsaEuLItThanR3CzK0H8z\n97GehaiQ2FAAX8weRHa7icIRFUwqoXaUbirYTw+7poJiITN5ZrWJSQn+ZetD\n7GyQHaCswZbewjRXwfuRMvcwMPhQJGzIDHJSTiapP8QcJLv1+JESQD4DlKOe\nchtCFFVY9j/JIMJS52HrG1Df0nizBMNQHjCmQnfPsL2MFO9cHPaCqWHL+lMo\nHMsb8s0zPNZAz/vgeo91hqedBcxXQPsTDpdC+/SGRurTOOSCr0ddfcIX+oVh\nlz1VYPKm2kzISAGHaW75ffXTV+ycOoIwYjYxYxsNi5jJL7Rx2qRUkULoW6YZ\n4lM/\r\n=yu60\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuFISLfkXQBPneiNrkOLJO2tmsZfQFx3GOsYnwwF51SAIgf/wDMkq3DGnahsdynFKwjGx3/469pCx/rX95DESnjKs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601697320-aa0f239b.0_1601697414357_0.7864165836382813"},"_hasShrinkwrap":false},"2.18.1-next-1601698113-509cbbcd.0":{"name":"@xdn/core","version":"2.18.1-next-1601698113-509cbbcd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601698113-509cbbcd.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PLCzCmIBzEUsIkY0wY26FpxHvfcpwQR70+M06bOmIg04QJxi4LCG+XnkuUZEtglILRTqssw/wjSknMNnknt+rQ==","shasum":"b91fd6df985c7362e0bb07a61c69cbb352482a19","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601698113-509cbbcd.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfd/msCRA9TVsSAnZWagAAEu4P/jltHL0iIpT5Oc84NZoj\nkzrnxhizk7ADC8USv2SHD7JGXKSFb9SF6tmApU1lsLpq6uhNvg95SC/EWtyN\ntpxjPPNOBXKe/RHkW7PCkV1IOfMeKpi0e5OD0jTLREiSMYQymAm+Zn2IISYx\nxPxuwN57Q7/hwBnAy87q8wSbBapShivul/81OHNOF/R4M2aGA0daBRWitzmt\ngTdOqxieKJhPZCRHrtHeFM7YduTVQj2vvg8hUg3qhiBwIJXuo2WYk1cWzmFM\nD+4uWPtXA3p4za52rqvtmQW60+d1OPZX7pTx37KrJYnELLqpIUMzV5pMSajq\ncoc0pUtVB3PBfoN9Zm+nOUT5eRCzQWVau881IFBtax3u1Ch948Lz81r2uKaz\nPrvTBGBMVXg69AAteLCkAk44N2hTRL6AC17/66oQtYXDmtZUGEI3676qCwzC\n339Fd2/k+OyMueyKwLHhcyTGjC8OyfSTZ6XgDqD/ljpmTyxQl10AJXTywToC\nKhHN08FwmHoJnziZ6v4Zlk2jHpV8oubOhl+qvvcgmcPxUY0ggh6s5K3xhc/u\npeC0LfN3WPc98V/4Jgjt83EbhKQXfI7tNqrxBImqfKqV2CIoXVjEsuJPYuq/\nUTbYV/NGZspqn4Cc36mE6hS67PxBfgNSSecDBIJNx/KgvgArX4ZD5sLw02Ly\ng9R2\r\n=2VyT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIES+EXVbKenhnMgDz1x2+EiCiM7u4FBWdLwtfG2gJ2l9AiEAoLK4K/2mjzjK80pFbJRHLwD3ah2L9bJn/yd5KAOS55I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601698113-509cbbcd.0_1601698219440_0.3963887791281935"},"_hasShrinkwrap":false},"2.18.1-next-1601733211-1d8a762c.0":{"name":"@xdn/core","version":"2.18.1-next-1601733211-1d8a762c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601733211-1d8a762c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-IJsOHsypOEBGmIVV+akTa+rrxEJBO1BHXRFwp9+hnyCYRgzeBH2G6MnYE2JIVu6KfFburqnK7V5fF9ZOiG7xqw==","shasum":"bd89e65b1c8a9b3e239d0069cd7b4bb0400e9c7a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601733211-1d8a762c.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfeILJCRA9TVsSAnZWagAA8VIP/0kAlr75xMnztAjXlEr9\nHJxZzBlDOxifc9zzbfQn37LTLLgc29XkuqCGnNUOVVDPrIh7IOED/trwo+rG\nIsn2fgnlOr8j70rpPFlx7LlDo7cfkQmbf7A/q7F2wG8pysgvR3z+LoFh/6pI\ns3IMTgi8ywQzMXsvxp2pEYJ6bR4wLMUMT1HY+4DHNdEkFLGG872qfopeECzU\nxAqJwgCrIiBISyCVy2xLI+hikag+vUvAQVE1rBPCoTKAxlDjJAm5dPYA8ZMT\nCIhN4QTmng7mZX49CVRXKzBGrAvSpc+J30OEEdKwf2HzNfoad55xHuO3trfk\nGgTnvGs7yWE8UShn66b156yOMxSJ5JdLjda+LGq2rBaMcXXNbrk62RdVi33c\nWRIauQXyWWjd0zjFTxUpiConJbxyspNDGqEwRNklBYA2wCGxtQx7o5dfuhbz\nRI/FzicsjOJQe02wBzH18TnI2eQcV7RUQ/aCG/GW8rTVdF7I4gpZ9XweuWaQ\nOixLWhATTUcr40BYDPUEFgSQzjjjMFrO7/PkMFu1Q7h7tUtDfEK16mqPTGvU\nMAAVNMve5fGNhn6OdSd1aCNG7fWxJYJK4GnRyYqj6gDzxzrpfMIvu/QATivD\n63kL+XM8nFLpVr03X6tD561brTO3FfcoxXBKFfaIl918wzBj89u0A5kRG56e\ndFxO\r\n=aLKC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICw9d1mOmxfyGoaLdMhFw7kcVf19mzWofvplWI5hjWLqAiBAVy758zYKUQ+VWrnkZD+Kl0Zjw2JvBvlPgBJScsCKvg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601733211-1d8a762c.0_1601733321247_0.9276278976667567"},"_hasShrinkwrap":false},"2.18.1-next-1601734520-4d6d088a.0":{"name":"@xdn/core","version":"2.18.1-next-1601734520-4d6d088a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601734520-4d6d088a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-uAI4fJYxH/R5ITnqNXONJIAneTKISMlLPFKbkB8URc+stoYDpWNcWwCn5NgzzNKcYmRL43jEIwi9xiRfCc+D4w==","shasum":"4ee11010a251c9b9bdd33326db1a7a85c1556651","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601734520-4d6d088a.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfeIfhCRA9TVsSAnZWagAAT64QAINhg3LhGZoptDpitop3\nnsqpbsvp90oqayxYgRYuwTULKojdMjkazVCpO5BqrRhFj9DnCvv/64BzhCCs\nmBZat2Ca2ZExwC3MmRk48yhZ7a127H51533a+asjZnI/56Ufyl/qbE8IdR6x\niibHZDMLhLgHc6AKQvEekHiFNcbIH3qnSNHBIZYYcmeJmuGmSLGcRmiwBw7M\n4cX1SRQ7Wc4zTei7939gpbHt/PyoDCRuTTN3L1G4ydJEkALKgojMEGVDmf+4\npwYElCJ1f8ZRc0Zf+MqBK5yyfRQvja7FAoBHdFPB2vGNcsGsHY4aELXLW+Wv\nBDP9cIByuA9BNmO9rCQbMbtFoj9fMQYmZl/Nh12TP1Y0NwOuXFlTlwesXUt/\n2cJpOgbOsHc4gfAncplg7uLRpjaMfUzqhfMaIPaIVjIdOiXzextUlUAwywGm\nEsfl25OcnmNNDzhtWqmwHXd7a1Gl12+cb+QbQm3KuJuDDUApettp40OH3PS+\nRNh+2DOFXi2aiUhTir1oiMbCZmDYgjQcAeoFsY9WnMntA94or8J65XZo0V2n\nZcaTdfGMUOJYv8aoDTA3+wAfMRB7Ky4NXHa9eyg7hoHy72perDdVT/ep0ulk\nUFqwoP6y7ri6CnsRFJAfhnkaGpegU38Xzvkv4Hnm2XHBDTNTXBZaoeDXAbCr\n9xzC\r\n=mf0O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH5ok2+mFrkjirOkhkP9RXsOh0LQbq3DxwV9kaZxzU6BAiBfs0WpHG36E6Zer2rqGBKWnxlJ8LwvtiOWswTPVY3U9w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601734520-4d6d088a.0_1601734624454_0.5042135305347697"},"_hasShrinkwrap":false},"2.9.1-next-1601834737-18927b20.0":{"name":"@xdn/core","version":"2.9.1-next-1601834737-18927b20.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601834737-18927b20.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-OYWc3Ex/Ebvq/BffnOyX27Fqx7J/gkKDWSxpKU6wQpanVHb6zYguGB9Oyfmc47z0BRfkKXJAy3r0QLrpwvEIZA==","shasum":"c2d55d7dc37b31e0c420eb725012574fe84f9bff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601834737-18927b20.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfeg9XCRA9TVsSAnZWagAAdjIP/1DmoYGAT2KlSwd20ntO\nujUx5V/xZ9+gtkvwp8Fion4ZG1X3N3nBnH5B7VjfL8uemuikvhBiLvqYgE8N\npOcARr2Jt7THmZ5k4XX6NOtLCsjCpghbSyYn1C6rNvo1dSiATHQ3CNtbVmzp\nSGhAfrQ+3+tjce82RZKc/851GywY8MmYebgpfsxoS/s+B1K7/DY6vldy5E7I\nWI4mpBmOH+72rPECIGSb/kdhjE1iLtaaK48z7Jb7h4nDO4MeNNboSaHX+CPI\n+9l5xWiZ7E8QXSIFnC863OUGsm2D3be8oLOgDnMiagSJGaUVL5LYefG8H19r\nsP5Oax2d19Q2SBBHwMSuQgs2sZPhsIC8BrqVqr/fZihrkXRzew4p4O2Wrz0D\nUofZWVHql9dM1gHPrakSZCAojqrdgS/QkdJdmHijFgrPdLR14Od5yBQS6TpO\nACAvxKImPwm5kzFxpTd6LIRJoAya7KvFR3LR7ciYnyLnRFrb6RU5rfsDU2CU\ngcx6acrIT6zr8MsgW00KWEUQqIotxF4/kS4oiZC+dN8L5tmtziMTWDRsdp8w\n5yVyZl8fwOwGrGdbxuyg9Bf5ZspYKNolZtHadIePcfiHPBdX47jtZQFH5zDM\ng1h3luH9APaeoSaXoa/l7deVsDgWwAHYErflXI67jDJ7OQ13HOl+47PLpcsR\nXrXu\r\n=mmUv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsxJYZMeVzoUcsDXt+5IaP9YpUqbtd1/ETMrnCMd+bjgIgWvbY1ks0wgfy/l/I4J8kqKL6w25JbF2eQLB0yPwJdwk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601834737-18927b20.0_1601834838810_0.983786938608785"},"_hasShrinkwrap":false},"2.9.1-next-1601844261-e859fd2e.0":{"name":"@xdn/core","version":"2.9.1-next-1601844261-e859fd2e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601844261-e859fd2e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-OIUpktcbbh3PW0VjffIV0lwBrGPQZxgVfOazd+4hId5B9BGCHSRQ/DVoSkSAzesIH7Qg1THPBqYDLakxezr8Bg==","shasum":"d62c90c43d24d200375d71cbcadbc9c6dfae6914","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601844261-e859fd2e.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfejSACRA9TVsSAnZWagAA3CsQAJRgWtV7+K1GJrBzw2rR\nfXETnOqhHRYhyvd1wqtI3wfqlKK8FX/D5W5G1INMpgOFJcHf+3TeUGrmUGBN\nLbQ3kx34dMLQLVxNG2VStltjnwUkwQBaitTsUEIQmHS1VWwPLRMoWL4K810/\n5eCtngRcJ8cEoKZ0DjCUzJmK4tNsYx8+C5mpQlMT618++2b/cbu/SRsQ51el\nDGnmjpt27ZBOm+aPM3NQm85RjvkxvyFHpLFvWXZBz1qUOfVLJaMnfCLuyyx1\nSyy/bcDz9g8S299q0S44rjCDJaXqO15zxfq3jMekvdneJBw7Xdy1Bt+WLOUY\njrfPIUrjW7ymu2KtlDxOz5jMCxqsEVNuS0iBy4EZidFBEWD0UUIcPeC55pA4\nKGFsFHDK6DYg1vbvabc0FAJ+L6Gkid5q3N+NXrJy5A4ZpQ8uAcudkABGSo1m\nz6rLU0QUogBVHfX6qBxPSKAq0wPiDM4LYFGkHSL7Dhork5CcU3WVFAJSE0jJ\nbr5ciefp4iwHkecpt4mc7obL2a0NjqxvX3wt13V9K7t0QunTjpMDaTUcw39s\nhYu/PjvSvuSn1A6ipbQwSldEFqbF3btF5FlaciLM9Ez6jfFv9lgzBReBKIgv\nqmpcFkuJ4HzWKUxL9A2QvCIDEVwKj8gp4LJ4NFeDUE0Z/mjhnAYViV71SgCV\nrYil\r\n=q3md\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGVRvuP0CI5tGaRy4cgy03zE9DlWQ+ONAdkgZXVNjE0yAiEAv6PpOrfNpQzajqRLha1sns9O3tPKyScSf3wCaBTTpY8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601844261-e859fd2e.0_1601844351761_0.8539841414609264"},"_hasShrinkwrap":false},"2.9.1-next-1601844921-2a2b8725.0":{"name":"@xdn/core","version":"2.9.1-next-1601844921-2a2b8725.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601844921-2a2b8725.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1pYRlFNUqUustEyQajgcSodjG7vGn8VASWUB/KoMk3Z2rqHJm85taZEaPp5OThykYTL/072BdkAJluelhZy2pQ==","shasum":"efd9c9ef61eadd8af44c09e23cfda513df03d379","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601844921-2a2b8725.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfejc2CRA9TVsSAnZWagAAOgIP/RuG7XCVjCNvGX38PjMH\nWnBuEb2OCZWVmKrq+q/MltSt9vSQCuHj3QluFqPlu9NeFzDvNGliN2mD0mmw\nZcaXLMCJ9ckml9/E3QVtghoWDXp0+dBTbkGZphXuQPzx/XWLjghlJiewF0BR\nsCkFDXnyZM0gxJFDaJt6FOMgKeNJuueXZeqTRZ9QU6H9PVnokWoqVwoY8Dwm\n/Lj4xk9RJef9m1hFzqIlNwKqXDIkF33kT6/vJumE9k6cKdzO/Ie4isHXGYzC\n0n6xnzf2z+cVof/Cof6q2vRMvkwqqinoGqNb3yRHNKohslfRr7XsbhORsMQ5\nmxCn/4ZtRiG0PYEuxAv3EDMwQtBDdYySz8NKb05P8gN6pkIZ3QtempAabTyN\n1dc1IWlu3HOKXh1iZNTOctwYIJqvL/piM5qT4CB32a1zgZwdUqO9/2cGKvWE\nwPX5/ibmXpYBpz/fRgUguTsZI1Aprhdo3vyEX6NLzFcluV2Mt90FL5TFWJmW\nA0SB8IHYS+MHnYqaxad/tKE/BFE1uTqSCKCB7d4e0MchYuhx37ucQpTwthlW\n1QYU4m13ubf9loPRCMKczktkp30IwILJoMy3YpJS5a8hEx7qFBSWKfzXWxN8\nkYgMqzOei8ce5qYjSnYf1kgrYRgNLTRT4maW1NhKZqlqlc3v11/ShU5jBdSF\nuBtt\r\n=50wS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDK+Kvuk+gE6q6pK/p09ZMr5tqyXv4kyFTs6iJ0/fhCawIgX4bJrfhXdgqZqxSNsfm1hrNFad6lBoj2OErFLaVrdEk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601844921-2a2b8725.0_1601845046050_0.10214496428061226"},"_hasShrinkwrap":false},"2.9.1-next-1601847260-f8565755.0":{"name":"@xdn/core","version":"2.9.1-next-1601847260-f8565755.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601847260-f8565755.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-kNOb+HhDk87tfUkob8Uwh4vubf4Xkl6CB+2nw9mLhTmD/3usJNgMhPWKF2vuf9oUtgp3jE4s9v+ui2MyB+EgQQ==","shasum":"f757b1759c50f119e74be99bd08bc6ab827ac799","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601847260-f8565755.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfekA8CRA9TVsSAnZWagAALtgP/iL1x6udrCaRzruTteGP\nd86T7om7Hmm1pNu68xKnfF+pUTeRW+3Eplsrmmesn0bVlO0sOizLPqkX7bL6\n9FzVBVga2rtGsgkX6LE5Zw4kMIvWGR1IAe3bK5/XLTQVAl/aa+/KAdYh3Wqf\nUw657qDEwVZrjF3u7AIjswkkXY0evA75ubREFEXQC/gETJdS25QkuHT0pIk1\nrGbVBzTc3WYpWaQbKUDnKgIpevM1mlEecQwR9+Bcsgbg4uSXk2M2GA+KeQim\ndCVxCDmGXH2HeejTKj8I84rrEO7Dn/mdJwY6zwesIiKcpLUmZtUp7+1zMKmz\nk7a936zqrEvMvbKRxU++izYZFDuKt2gTqPmA4u/Rs8607hfVkW/JVyddiNNg\nw8sqwFYk69eC3wAdvjLvdzD5624Ml2cN1nikTp7oA+Rj9VPROL8e7qd3fj8E\nlUV5ZhZ0NtKJrhuKlurBMf43iHx8H5sQXwqS50SCa/ux8pc4exJzijlC/B1b\nbUOZa+z8YJfTlEAC+1xGsKehdkxZbPzLWdhcsvEpKHM9gVP7VB3PQSr+xpKn\nqX4Qh4+aig4cIjOiDMX4JG3QRt9bvmyxZVSY72pt4YH55BgMJXEV1V0quwll\nhdamJ8MEzSZtgAdhvL6n6MNcsN89CSxMWV4egXbtbUsDUtxTnyIR1zUp4srB\ngEjd\r\n=BqBb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8kvpfE29nyt5JdRh8qykl5JfdH6+DYAopTZ04OGRAMAiEAgjHjak3cHes5/DN2E0nFm2sS5MDKzYet/BIYCeOnveo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601847260-f8565755.0_1601847356035_0.657327830498815"},"_hasShrinkwrap":false},"2.18.1-next-1601873589-5484dbe2.0":{"name":"@xdn/core","version":"2.18.1-next-1601873589-5484dbe2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601873589-5484dbe2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fHiNW60QDMBDjHN/uqcNO3Dzss3qeQqTq7HK4ZXDehazoqKqnZgPg/ZE3mYgd4L3IdWaCm6oltXt/WG4YY5VQw==","shasum":"8211a9f8440ac173bf7c905173a71129f4dff0cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601873589-5484dbe2.0.tgz","fileCount":157,"unpackedSize":576118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfeqclCRA9TVsSAnZWagAAWrgP/1JHMpfgkU7VrVLDCdsO\nETV4Dv/Q7wX5tiUsi8HfS7qE7thLNyehy6ferao2hO6AQELRVTUBThkaaZBc\nIJc95jdObZj+D5KpTlYLdoVvC+qzs/X+1kgsyz1BncWCfbYQBYBIcbo9rf9x\ny1HuhJdKYoiQPA4J52J3fYWXZ23XWrYNnu83YDb91azVOSYtxnQEnYjyZxDf\n8jAgObaW1CegB1VmXPQsIsg3rEM1j9sdDySvivqobEtnnWrseT7TEVcoT4eb\nPEbLd8kFau0ppmFL7EG60LFWbZMdY66erIf9FFH1npQOpaGYdopQBRAAn8rB\nfpNHGI4kdbDfUnzU4cXwnieJRzwL6IoUOq7PugaucZPo9Ng4Yo4P8OEAAB5W\nQPUHkENQXrnIABB4/Zf3WLrq7s7LSvt9RPBoXzr3vs09VJ4ywycZuASdtIXJ\n9WEK8+XYZU9huPnQZ7oxz/ukbRxzX2Ws6ZgY7bBqX01KpUGxKzS9nJsoMCuH\noEIAIRPgVmYAgyXow53AfhjV5uT5WpHr4kZ5lnLjVP5KcVanRWIQoxvPMiHZ\ney9GZ2PV+S4YBaj5R1MA0QwlIXCTO3EIkeqWTflNcBFpvTm4RHgoFHkrI5zp\n6GZwxJOsbfLaaOZkv5+lkT1wUJXVzs2pZAlmzPFPkz/N492XStWq4BGjSWBg\ni+g2\r\n=pRuB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbN8wcMJ3ux/2i3LSV3aZWP0b/+EbNFLwMjfeQEe9qOQIhAMVHQAC4O8bg+i03Jw+9yHhYjNgUPMFuD2O/roNDJgMu"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601873589-5484dbe2.0_1601873700842_0.47681917649129857"},"_hasShrinkwrap":false},"2.18.1-next-1601877390-6fd7cd38.0":{"name":"@xdn/core","version":"2.18.1-next-1601877390-6fd7cd38.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601877390-6fd7cd38.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cZHmTLbGe5SrcFelwBlaqnnqoDTgTnh3858MB1JDoeGiZtsEdCEhHNpfI0AZ4w4Cl7c+b5dLIPiIVT0ap82+Yw==","shasum":"ddbab7e3db135e2c5506e5b7718d2b67dae90ca3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601877390-6fd7cd38.0.tgz","fileCount":157,"unpackedSize":576382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJferYGCRA9TVsSAnZWagAAMZUP/RV8CipJDPecIwjlntxX\njhGO6g1AbZcoL/waTpfsp5zkojSESuKpNzvKWHbNWw3S6rQas4hHR4Ddc+sx\nx6kc0QR+yOWnKHWPZs+mqzqGi8JS8Va3TavpwtaVPZfTKm6KWClKW6Irgr6n\nAUatVyE8IbUt5DVdvcSfYjAJhTckFt7sJk1mOB4onWs0tbo7Cl8bt5z/HJ+A\nvhB16NZhB6shVg5XDUstlsFkROIu5I7MwMdHFf9T+njySN3yUKo5Lxz6OqMF\nXFCN2xcmZVdU+VM4Ie6cCPbmrHJlIxB7ANBPj+0FtzkfhYiSb0UMx4+R16S6\nr6MuJ6Qkvddj10wCXPZeSjPaRp+XcPJH5kkDpsqUCfQ2vtymoJhA9iaYb5vQ\nwaEbZ7LAFffFHwmVw+Qx5goZpBJU+63xwPxtjBInKyjRGhyhInO1urixKt44\n7cVwFBheSRZt0tP864PMCiVeWQ/OG+L/9KgN0hSX3jyxXegjBHeKILACUKBJ\n70hmtgCH1vTvPhnbW0pNBfP9xRICH7NlHKbo5KnbaX3PD7lmHGFLXkkDtdxE\nfrOPH9R/jVdxj25rYqWHC2AiwYPesdYkYDibGofUbdo2SC78AFogWvFAXgCP\n0w4t6YgLF1iORxYjS1S8YY6O8itqfqhKATlUf96LX/oPRwlYn+/+zjDxpuWG\n12X7\r\n=38fs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAQr+3y2kcajHo+iXkpAiC/ve9vClsnio5T3NJyGCIafAiBBnLV1un1m89WfPGpoA6QtIY04SgRUZmU+q/baFBGD2Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601877390-6fd7cd38.0_1601877509723_0.2822851562431592"},"_hasShrinkwrap":false},"2.18.1-next-1601877903-47f7bf1c.0":{"name":"@xdn/core","version":"2.18.1-next-1601877903-47f7bf1c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601877903-47f7bf1c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Y39cub7U9s3dwkaewRKcojIjiyc0qpSLKf5WyFHy7/cfpRcAXcsfVUwQqhJw5S/0/tBh4nYB5Tnz9+crZNaiMQ==","shasum":"252ba0de70c04eefea7b4c0ee063838ccda091c1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601877903-47f7bf1c.0.tgz","fileCount":157,"unpackedSize":576382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJferf/CRA9TVsSAnZWagAADpAP/3iaKZy9NGbrVlf7qr6n\n6sqMz575m/wGqTe3gaVciyUjRyKHJzn1RzS70jFtVePF7NGkiO45bOdHGOzT\nkviaCfzM1gw5JA1sHFSEOae+rBtkGZZZNkNnbKJjrD+CsgVhENzN46txlq7l\ncf2I/03OL/Xo3Ad+CkZjARrMyobg1D0bAPtk6vpTfuZ4CUZMsLiNBWgU/vKU\nkH7Eb6TULMtPCz5AU/xEBYzTYFHZS+9u3/nFcGZFhpxXsLr44NYYEF97yrNm\ntp6HhN5siiFGuviiOgU/pX+/J8biwNEROfC758hAhIy34NqalHFY36DzqzQd\nx2swza/SwTtGkMu5rANiwXZGPTe5g0FjpvyvNTDAOamB3VkabaZAp5I5MXsf\nE0qCv6msiqNXT2bm95xScZE174Kh9kt4aAFnK9lUhj4ZC2k+fvNPQZ8AKolL\nlM7S6EHYYqdS9uBpc0DBqmo8IP1qxoKi6K1qzPSD80WE/GLFfIBx/qz9d76Q\nQky3E8LDN+rx5TeByvsDESsMu+kv8E8CdzaJ2eE/U1+ZoiGhAOIMKPjkvCUr\n8xsDtBn5yexu8UjMAomP/lIgXe5268YpAwVgwo3eP8kRoqbHOwjmQqmwAI5n\nKOYFzGmgEC88t+n++r7QrNFIxnjDh/+ftfm+VARAHyQr87ZRtPAFN5x7gZQg\nKRWP\r\n=sfDj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIET+H/9amgskVWHOlEv6Q4tvYgLyX3on9DWeEuU1x7B6AiBDpGS5lBPiOxcAWSn/owtE0/FIEb3NLPwC0cGA7IiJzQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601877903-47f7bf1c.0_1601878014952_0.4836180875733478"},"_hasShrinkwrap":false},"2.18.1-next-1601878624-d4ab9aff.0":{"name":"@xdn/core","version":"2.18.1-next-1601878624-d4ab9aff.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601878624-d4ab9aff.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7A6eZSUHcUM25mtojTqcNEt9MYfdA2puF844IOLXt4rJKX3LpK2VRJL/GmBpWFAvqueQMTqnr+E/DuqPmBOKhg==","shasum":"2788796d57973c615b3d0f405a2d603cdaacc34e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601878624-d4ab9aff.0.tgz","fileCount":157,"unpackedSize":576382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJferrNCRA9TVsSAnZWagAARasP/jW8v4XpXFrq1kzzX5wf\ndK0k7ytmlOEnx8M1zF38uWJnRDakkonKYi+lZ8nhz95evbGAMdqWE3yTE2Jc\nvCI2E1Jk9NqhB/MZZU4dr3wqFCDj46L4sIRc/+Gth9zX0zB8ym9lSiTPSKxS\nIgXcJgBVZjvuXP+mbrC0wXsgVPw4npf70Cj/4feLpT3OMFxXlbf5RpwgABHK\ntwEviDKb85RU+V776USF/53yFRbadKmU32yfX3MTdxm4Ac4F7fyYNKeFLf8v\nNutTiafvRBd4vweKO386DhZYTvvTihikRw1Rq6nnXTMGtD5Wbpk9RFizZR0+\nrwX5lERNO/mMUWvbzf+8gSn+jnDcvqVKzrLx2V/DXgrJQ4FxhyiHmPk5b4hC\nZZSlbC171C5lF+T0ix8+Cdo/CLhwI/2kmgfOlKrf2J9AQ+pzPT5c6u4a3DV5\nYtEM7hU9LSAIF0L2imGJ5ImKmRstDUdZds3Z90uj3o0d4z577v8/a4mHvTIy\nnMjHjeDYRTGqnxGXinqz8Orw4tSdrb94LiIVrjBOu95MY1Lm97qlAqvpX1cg\nXIDjL7i31Iw3ErLxpnIlJ68Z2Fd7efe7xf1Q3jLk0QbR30TuL9neR9EguiKU\njKyFRIi+kz6Pz09Jww3pxKWpFf9pMii2TcOGhcKXsLjk1pxjQ3cReXopAdXM\njxjd\r\n=oU/V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0n7/PmRcysvMWbF23TfjqX24N9FH6eTNPQVSm4Q/tRgIgIGKWpOrRqhB7UQ8ppDkT/aQLm+cfr0vZEPLgteYsT9k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601878624-d4ab9aff.0_1601878733119_0.32477332824737837"},"_hasShrinkwrap":false},"2.18.1-next-1601880566-61573a29.0":{"name":"@xdn/core","version":"2.18.1-next-1601880566-61573a29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601880566-61573a29.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-I/ZZe73/lbArleR4V28zLeCgqxO+P/qVk3PIk8sxAIfKT/7bkgUKeSjOCyT1iQFYLXweSorZno/LtXveREgAfA==","shasum":"86ac65d4e343959ae23035a8bc63a227af4f6456","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601880566-61573a29.0.tgz","fileCount":157,"unpackedSize":577400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfesJsCRA9TVsSAnZWagAAF2gP/jjrd8URk0Ky/gLZ7up8\n9WZPjfuotVq/VxnY2bKzD7Xr5hnyJUHzM98aXoPhl4cyovvY3euG6PItcNFs\ncgaQ3or4OM6Bf6gFin2k1Ff56R5ttB/42qzY9fpJxa8kRBV57BJ6UD9djc8J\nBydmcJpQowobM0HbWNXXSzMRY+W3g4zDqyV87hHkBBH1vaajMOuJTgwXVKsp\nfOXTVtueaHKLKSNj/vh4qmWVtPUEn0Hx+b4lKpYUGcXoEjAVAWcGcJoEaO91\nYS2eaCQGS4uZxpTSGtj3z5z4ep401T0BYjgZs209m7ZP2ajSAC3Z931BKRYd\nLnuuCoj2HDm83Z/nbkixiRM7Ev+/vjOUDJ6APx/p0oDgSrweT9EphpMXBa+f\n3pDpcGZbo1dVZSodkFSCoVz/V0izVnuahzBuYPQ5jtkeviyggUt1nGDR2KbI\nt6GfztoeGqn7j9vhdZGNB/rewOAGRlrN5u6eqtAevlK7itJusthQaJXE6rFO\nfnF4/926W1wvCsh/YJNma9P6jsjBPsIrerEeYyVmi2lRrPNaqqlE/uwAiI1R\nuUQGrOTSAMlxKpXvK/1AYS3BJpPI3hYxBn1Iwfr4EnxRke6+I8v9uTQVJGzl\nI/rmg1YIwrEscINfhQrJaHQLIC7nHgDcCiQHkmGCiiEqBSmUnLFAa2Y+1VBa\nHT39\r\n=2ZNx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxUe4iCtj5IZYswsRygKeljSIUnw92mEkmvFcyggztmgIhAObDBHH5Tp4JzLEfJfSzzJLuO1bfjOtl7vVwOqy230vy"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601880566-61573a29.0_1601880683742_0.47183098140487445"},"_hasShrinkwrap":false},"2.18.1-next-1601881541-61573a29.0":{"name":"@xdn/core","version":"2.18.1-next-1601881541-61573a29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601881541-61573a29.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9tmuiXJ17oLbXqts74k/fIGF/NYWUMEVSPbrqK4XtRzk9nNl5BGn4IFHOS4rr1qm/dGRB2RTBFUaZ6Lf/tzKRA==","shasum":"8834f2eceae303a960d0eb6ed841555e792d2f34","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601881541-61573a29.0.tgz","fileCount":157,"unpackedSize":577400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfesY7CRA9TVsSAnZWagAA9rEP/irBqdUyvPLmusbjyptc\nM2NJ+pV6ji6ChD9bLTaWFzg0e5nA9vzFQWzFgPhFUktsYlA7BueetY//OagL\nuZ2DtW0C3A3KK8nYK7DB5BGC4e04+ZnKCixIIxiz44te1mTMIjZ/XXJqrUbM\no9q9YuTsXtK3D+DjfDSel0D24mclkspZs0Lw1IW4itdEmM7naJGhr/WUlsc1\nHfGpOLIYuISM3IJR9cLNKhH9GWRlIBCPtngGHiGXKyX7vCLWyFnRTQy9qbvy\nestbI9MSrb6dAyBo+a/IMf5PDBMyEGRoWlkqc47WCBIZuxjoUboMCVcZGefj\nMcdXM8KWXzEiCHUB9HvqPdP+vT7mblG4We0WbSh81I8J+itq0S6ME4bcFDza\nRiJQXsjWt7COgqd1xvgEcxb+4JxuLVrmpyGofzT3MCCjo6coMPUtOsLLxuZr\nXA0y9S3lJjmfCTRby8U4uqtoCBLzUFFJaOIzwSgTEA8UGr/SACXublzQXC1J\nGc8taxR3UCeYhm8IwJr/OhjDXkJ8CmyIOBudTrPGPw36sp+AaSGYvX8lIP/n\nnGnu9lxwj9EVOJkjNaKsJ7+RgPG91/voZf5BhPIHR5DlyFw4fSuv4clXn0C9\nqAQa82CfkUfyjIb0yCUuzP9BGRj9OmGKJ/N7EvLTMjtj9Gi7yVx/+o+F2Qza\n0ZLz\r\n=lYjM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNfefp02qhk0fU0DlCMm8Q3g1jrK+IK/VzVYqi3g7nsAIhAISfCK+xdQNLnu9qo52lZXEOJYEpDaBk0A3Cunah7/yD"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601881541-61573a29.0_1601881659128_0.05824199252304019"},"_hasShrinkwrap":false},"2.18.1-next-1601884057-158ac27d.0":{"name":"@xdn/core","version":"2.18.1-next-1601884057-158ac27d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1-next-1601884057-158ac27d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Gs4zAVZr8fDzdVzC8KRJWdj2Jz1W0QTA25soGYRQOz6FGCT+sfkUcdeD5ZyQ7Wb1Lo8d+6Xjmy5FecsWqb3V/g==","shasum":"fd4e5371d14291d0833f28b92b10e9ecf485efa5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1-next-1601884057-158ac27d.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfetARCRA9TVsSAnZWagAAAmQP/i3W36nZYo0yZuY1Z7DU\nlMilFGkW5MN/CVbKKWg+kx63cifdqrhylmW3tSIBq6FplJBhIJStWUnbgWNW\nBCipmZjJfq9MRHiVog6LDDs2q0JeIfb2V5a9JWzNzoQ/BrcM9ogZS68XuB68\ndkn5FY7j/hK0NmV4SHLK/lwlZrT4v5TcL8j8y6IR5lfpW+W/FDEz/K1qC6hw\nUZp96gCz9bU1kCwE7GHrqsdSzNHac7FELe8k9duRV8M5VkVbpbaWkUmSwHeS\nDt9o76xCiqP5N1LChw11f/ocAMLOk/C0vgduaHkjYbgNpZTvVqW5/KmO4nIL\nr9eNzfxz03Wnp6WuWPPChf4KiGpPd91ZosMRnKYkMpWIK9GcGWene+b7Ezia\nkBBFBlrSqY97DmMcuWVGmBy6AJqo2FWgSxg1fcqEpEr4atG57XJUv3sUtkmh\nblL1G0BUoK4r6MGKFQjjNKj/6qHo3HGh9A3+lRDLcWDdD3nuUC8JRnXJyhGq\nH9Eb7+v8GTHmWCPmst12YAthxNW+z6ysJsdzX1E/tiPMOQnDlXnuC519nBTZ\nbydmB1mEPjW1eUOag5Gxoi3DkJxmc2Tkg6twkkFYSgTLKA+lHBq3cMbpghCS\nXIe8edueBMUKXfgCyrFtqqyqQKDJsnRkK+8zSjBuSDdFlsNKZ+RUaAcmzHzl\nee0j\r\n=z8Y/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH6oL9r0yIXmdFJ+lHg/O25Xpuv73vl9lCIOUXB3hKSMAiEA1DukU8fWjWF9MfBLCs7WAMmZupgnRMYLbOi/MBy6XUo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1-next-1601884057-158ac27d.0_1601884176958_0.1478215890825636"},"_hasShrinkwrap":false},"2.18.2-next-1601884114-f6d1406c.0":{"name":"@xdn/core","version":"2.18.2-next-1601884114-f6d1406c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.2-next-1601884114-f6d1406c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aerYu1M3F0tacglmrNQYRPkW2L9zDha0mszCkGTvyWPxHM37ztu5qSnktFt90KMYtZa7nAlUwo/CWGo5syMseg==","shasum":"6c75182ffcc02d44c7630942c39672d5881a011d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.2-next-1601884114-f6d1406c.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfetBECRA9TVsSAnZWagAAO4IP/39DvaqjyR5DI2zo6dIX\nahyo6PSD3Ld8e9thgThRvWJqB1gdRnwkCirC+h0ml0+nuWlr0CUH4ocuGo4y\ngrB3m5g4HJat3LIBDOUjzhCNBDGUymYjLx2CqVeoyZ6mKdj9GJeq/p91ySNx\n/t1z0zd3h3AXvBmUdQAAMvvs7Gyt83M4WHqZsUb9ck7WGgz+xVnhVc6xN55a\n3/IYtqGQQwD3P/YQZaJkLfTy4uqHGNJauIZXTyvuAye0Okh4M6qW9nnbWTBa\nK6UfhWkSBFdKai3nyZveBku+sMSDQCuM9Yid+1n/gVfGDhtfCrd6bcxvxhJa\nPhcKVd/Wlan5LEqy10JW7ZQWGHS0Pj3miL0h9TSgXVkOCsN73mJmCtalc1k7\neYw3I3X6T5lSheSasdcxubsMes17VSNEtB3X95CsV3XofjvP4w3SOFSAvcOj\nY/DSBsNHybHSa9zfsnPMvy7NdzyLhpstznwSXHjDjRaje5EDexOrcyAy87OA\nvzuZXi5UjHSy3qYN1L7nrbhStfoSFi7uypp37egxAnF9ZkB7tX4U7YgJHxM5\ntvN8aTmBSHp7LLrTaS6BUj8q8WsZ7JELun/XESkadEnv2BAcipFczqiXyfGB\nWlcukjKBmmjkMiRtZ0WCCZMiSeit+uwVH4VpgxGtEwwRFi65gPrRbHLd6VJS\nx6qe\r\n=temx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCv5Hp6D4ifaTS3WgfV0+gRM8RVuH/FIc4oxQEJb1UdSAIhAPpXG/pjORmSmGnCtYHH/4gNoXyimcXlccyiKioOpPt9"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.2-next-1601884114-f6d1406c.0_1601884228108_0.3838877530447866"},"_hasShrinkwrap":false},"2.18.1":{"name":"@xdn/core","version":"2.18.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.1","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-oQxkZUlrdhLx1P9BaUMFpjEuRp+DTCKXasB8hTVUrZlKopiRmHdki+IsyvktDL5quaxiMLJp3AbeSxSHfhOZmA==","shasum":"b8775fde0b90fe0f921a191134f67d36218733b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.1.tgz","fileCount":155,"unpackedSize":569588,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfetB9CRA9TVsSAnZWagAAbckP/RbFJpoWg6RrFlvVeU2D\n5OWUl1KAGEVoAAk8Qj5dd37BEkcRYYIFDcoyUQSzdrVNdSONdMKOQYkTp9JP\n9s2hBAfnOvOUwXOVwQsSCNey0AqfXn7NxPNTHM/XhEPsrtDFloZOE/qb64Zc\nBFrkry/1y82bVPXK3NF51Km/fbvfo0DNRJEGuVtLedIA8OLc7W5+eqLqxgFu\nmb3uUaJGc34HZKAZwHr0/TiJBI3MWabWfW6am7ZSyeV09CaxiO9zmQ3/F/BZ\nP1O3tX9zeA+DIFiSvWWfl7ssuIVtR7Nb+nIp3l+LhZub9zeD2hlgWyx6nOoZ\nojNoKUvvamVJo3VCKv3PSN9lWCtfryCf2BTR/4C+D8ECPrl2f6TckknRwig/\nJQJi3tUnNodocsPkQy6zZMyyQPpycU5RJ8N5qAUspZgrEMx73tdmihIOmduJ\nyLeU8pS9U4NqBMFPxd8gUWInVtPUwcAuvPSsShg48QZNME9G2mlc8ew0+uyD\ncrBw3rY99gtkgKs4baVfThcUzbGL16Rf/xPfzTb5oBYSpo1ZnCRtZISZiAeA\nhgtkZZ01PqVG50Z+n/SkljozRO8rgoy4IZ+3iZ2l97W0jFLf1reDYhiFyjdh\nzaxteCr9CRbs8zDt1eVGXaP7tltaU5a5/xalNEeMncGwpcDNr7jD+vBK2op9\nWnV8\r\n=INTO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIALNGJxT1QiMQRtBtLWiyQ1CacChE2CliQkbkRjHA+IaAiEAuNJXM7ikDhxpHYDOWKuTutU6pvaa3+Jy8i02kb2xSa0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.1_1601884285138_0.32418549256522655"},"_hasShrinkwrap":false},"2.18.2-next-1601884727-4f5634cd.0":{"name":"@xdn/core","version":"2.18.2-next-1601884727-4f5634cd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.2-next-1601884727-4f5634cd.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-z3PWpJhVgpTkGwyvrsVtNQgTcfDuUe/V6g3rcVeaSYIOs940FFMJdAML8vgwV3N8LqsAEJdA+Pa/QWiziJxXdQ==","shasum":"35643a0f595152098c92c749a000cbd88411af58","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.2-next-1601884727-4f5634cd.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfetKnCRA9TVsSAnZWagAA2kwP/1QVGASQ5x8PFWDLu+hc\nTDfSQPJUjtvxTfLWxXVRUchtP9qGRYSDcMFp/DFomgxQqhj4tpDFway+63lr\nZ4AkqhM30Ec5jFQTBV4bTBoAHUeuBqKJGGAkMR/7NCpCkIdDo50alJt/Cwrf\nTz9pH3JZFSPlwnaOW9ouuournTJ8q601B2DBPJ21VqiBMeCrNZV81vyZTNoJ\nHQ9GzWHq08u9BbxJObR8G1iSYUDetXc+x1NvopJS5kndop0ZqBrumxR5Tg1i\ngaVT4aTEmKhScoe9hXDf1nK+DWfecjcpmUTsXkYj2zMhpcRP/0nh/FgjfKNh\nsFqz5EUp/Tt/6/B1uPdcvldZSZRRgurHy1PxP45PmIqAcpqfJyj8f/d5igoL\nwG1pCIVsWxOHe4U65u6+MtwazHEg9YFPXaj68AtoZHUaxmONhILXcvdczW9B\nnZKmMLp7Vibmd3s8L5Y9YkaRNuWKOs4x3lCCeKuGGBtxdHxTBMwN3ZfhcklG\nzoZPZQ3P86wSRLt3K1iNUsMNQ8fGRmNxH49ki1w5ah2JzyMS1oUzKw0jbhkM\nbeLHH/xMe9LjSDW4eUXNTh8f5GSq7Vuf2dsnzCBggOqyhLPA7Rc/ZtdGZMFz\nilMwp6BNuawqQsRKXTdS/5cl6rleBxH+KtiF6B658s+8u/Keiqe4pT+T/68C\nGR4h\r\n=VJ89\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFkV/2U8sk4KpO9qA9t9jFVQU9LjNapvM8j/7jgInBMHAiAwLUjWPLJAalkpMHqKEghkJSYiYZnk7AGj2YaQAw4YxA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.2-next-1601884727-4f5634cd.0_1601884838702_0.9911454559969117"},"_hasShrinkwrap":false},"2.18.2-next-1601884733-4f5634cd.0":{"name":"@xdn/core","version":"2.18.2-next-1601884733-4f5634cd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.2-next-1601884733-4f5634cd.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-A8FCQpRbppgShQh2JxWofpPUaHem1LYk+pS3wPAK/QCh5CFKBCbGDtOzvCh6mlz85M25YPe2+9zKvRdcItUCmA==","shasum":"669f4e63e851697388d80e33e5ec851e93552465","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.2-next-1601884733-4f5634cd.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfetKwCRA9TVsSAnZWagAA1aUP/jcVh0tPQAxd7/nCr87s\nPg3OjAqY4dQmTMD9D4SxpvuFgApgfRZkMAU2pDhBz1pgWtuZ5DqR1IoiAi6l\nCBa3aDGEHbhy5J95/hzcb3xmrkGvQwSz1n0KVE2ca2Hc4Bk7niohCgCwT/ic\nM74pl/gwHqa0rXqs3O3Nd9hGIUpJCIylzg0Wyb5GrpvqaIB0oOpY1PjTUIM7\nWCz3ddXC18E53von82dBqirioNt56OTcga+j6xLR2EBsxtcZDR73wsBGwTov\nmclVefCdGilEobntf/cSC3ow7IhgTr5jIoQubeHI+tBO3jAxG6y8AuxylvSz\nYoUEeJtxi2SxDfwm5aypIfs8dLW9uyFJDxSXzjSJp8UWgl6BDUKaEe7rTCkJ\n3TvhR6aS62ONBHp96c4u7Nc+t6EC/18QNQb5axo+Id6lOSDdhHHgtywuaFKR\n7lOZF7t0zRYGVoW1+23IimqrBSr8c6RYfD1azllrrC1b9pnT4L5tjRXh+YtB\nFbwBozsQwBw3PukI2OErvsM++zENaYraCOEgSw0Oby9IeK30037i3Ejd8QbE\nJNiN9AsYzLnNBsod8SAAqgPoQSHXGr2PNiYDsPTYiCj0DX73PlFy8gMd71h6\nB+088cilGNxI873gJ6SKBAKlT9frdNnFx3UVisSffQDcpLiozQ2DkcS6IfHl\n+8dM\r\n=z/cN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDQ35ocHZmHkRQOUQMfZFQECpUMaSiKj+NGfjKEAnn5ZAiApAcF0mBSc4IzB8PywCw89pINiXP0+VvFaama21MswYQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.2-next-1601884733-4f5634cd.0_1601884848190_0.24121649423473301"},"_hasShrinkwrap":false},"2.9.1-next-1601890789-b0064ea7.0":{"name":"@xdn/core","version":"2.9.1-next-1601890789-b0064ea7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601890789-b0064ea7.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cpePqGWgyiTXkvqqO4IlIyC3USjMZ7/jZNRtOnJ45NUwpwF+TdVDhg0Z+Ph/uiPabMazXkGBum/+h2P1iXSOvw==","shasum":"9cb2ef9f1823ef871890ecbfdb299ed08945172d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601890789-b0064ea7.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfeupKCRA9TVsSAnZWagAArs8P/279zixZPCoSDNlScBRn\n7TBDyaLjMRSjD2QdweQwgr6MZAF9M6m1odACW/96/1zuPHDc/w8RWt6PTcy/\nt3WGqJKmsJYL4z9s0efEgwgHWE8O+AJLWh7HbxTPlqrVUM3fXoSN+Gkz6vgQ\nZtkBAldttxO1h8S8yM9EcAXvDP68cfJPB4cYWu7BF069sEyLLpquw4oCX+nE\nD0fCIVQwomVWxeIziIkV1L0gd4H8o+3CPT5MKTGYBZyNfFZUqqrtK8irN6KQ\nQdiqJEclj5QcUSDQBBuXYaWgeZYFrSfoMvnQghT5vaO3CbCV3XgVvZxF2K9P\nRYbJlv+oR+wNzBu3CUwViMZvF8ODx/rpPbNZ9AG7oVHro60XlNhL781Qxsl4\n6w0/GGwzPUacigKMU7ZxcA9NplsVXL1Wk8mFxy6Bw81dNf+lsX3x7DxS5mR6\nogEDEva/L0spH8t/1r9w1uw6kj2Bky7R3joFkx3AiSBBYIu5t6zK9CHuUQAD\nRJ2Rk6UsMkBHaIvwHt9sW4rEwiT6jW1IrsuQmgWh5y4lV0hmFxH8/A+nel6A\nvyBSFOfeQSnhWl6hGcCxzyUCO5LTQhgG4E5Jx2rwljwRgTwO259YJx4Fw8zS\nXJQWzO81RUIqz6IQ0g0egqHXefjtTtfisJ3slrYb8ZQVDd3ubd3l04HfVbKt\nTr+J\r\n=RC/O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUzwQWSICcBqkoH5dZ1BPZWS/aPaR6jN3DgTEkcoRfQQIgMvVOVukWBu0yfyjdw5zXcqC0xq5migxP8nFOCSW1lkQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601890789-b0064ea7.0_1601890889944_0.6769678948512461"},"_hasShrinkwrap":false},"2.18.2-next-1601891185-c1b20eac.0":{"name":"@xdn/core","version":"2.18.2-next-1601891185-c1b20eac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.2-next-1601891185-c1b20eac.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9tIrhHjnT01fUAgf1HwoPW+1imrnVAMxKYyWpkJ8ZY0AWD/ky4EOJWE/QstVJRisLTAuaqzbz1TAqtGPMQTxvw==","shasum":"48953754409932306cc0f37357fe669f08279ab0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.2-next-1601891185-c1b20eac.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfeuvhCRA9TVsSAnZWagAAPccP/26W7u2zWnVAwjR5cXo7\n+OcOFMpowqssf09PNGuq+9e14TKOUgJX+xjqkRbHbd7kFnTu9jSi6Cj7Hi+g\nird41Cv9ur4v4uZ7o7OOw6MNEFntbBjLxxTrFWh/YmX1dQtZA+Epb2rWLxu1\nq7ch8uHwRuZjZ4gnlqlmVY8khpWd2JTn/iru7XO2uooMgB6SWqiV9/iEUvtC\ny40wj7Ov3PbAG2RDXnH/NtfgnRTElOb4fYDhYDQ3RSla1WnK4Zo2cs4Dcqgv\nkr7i2cUXnfLgrxQiLN20hJYupEhCa4H04Vc9KTSvcZHokgP91t4j5HmaHTtM\nD0xcleTQ0gSRTpXkYOmZn81ekm35yOB0dKuKgYBAx2wP+Z2LcrnTLKJ4zwK6\nVO2CNNnYoCMfHiBH3SMmi1qrXr+U++4nYJWBsMT3nnTAOYxemkYFrCpOC89t\nDYzAx3JaCg9f1dJFndDtfVulnhWMnp4H//bWlps8DxwaIVqqMiuQYY5A9uA/\nXCveo7/F55xjCbcxWJJ3BmMgLeoSGF7pSfdD/QujkSAFP+jNIClCwWKasX9/\nSzduq4Mf7HK7j9d5fAlgIGnrBvi5O1auh5JvJvZwwAxOMe6lwyXi6eTvw5g0\nazohSa8sjY9o4DK41bmw1V6RVxbYmWXac709DeDmkPx/EJC2SGCckbapgwpE\nLdTb\r\n=BqZp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtsQh2NNfjEaT9EiWrvp44kJMhce9X46oJN0wjv6mXZAiBVPIgWEp+hrMG3gHVuLLteQFLPplicJjm2or+jMPN5+A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.2-next-1601891185-c1b20eac.0_1601891297151_0.5925770323903885"},"_hasShrinkwrap":false},"2.18.2-next-1601895844-87ac5ae6.0":{"name":"@xdn/core","version":"2.18.2-next-1601895844-87ac5ae6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.2-next-1601895844-87ac5ae6.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nJIvCVJNY1+gu/aP5WHAnEjbNZOsk72aZK7Hyv2eT2Pn8c6YHqPDidSDP4Mt1IfS+duOV4Y4CxsYnVdgPGS7Fg==","shasum":"4a41a2669ecd33a7ab0538952ae4ec0025b29f0c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.2-next-1601895844-87ac5ae6.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfev4VCRA9TVsSAnZWagAAik8P/3msdJCGkgGjRHmQ8iW4\nL4bBHJnAAEiLopcaPbPyUO1VRqkiQGClojO1pIvNwxtDUjlX7bO5pq92MgK0\nWXqtPGyini4mvUL9LEslNtLCeXTQEyVOknTHiedo5Ox1k3UGDtQZTc1x/Qdc\nUISnr/dCJUK0gGYokgrKAQMGxfGVTb5d1yh4x08ytwcjPWg1v+ZF3xD8uos3\nSy4KsNT9XY32tl1Mus2XNkPy0rrdDBvtXYGg+HPxMqYobYlUr7aa0DyArW6C\nLFrkh6gryZRVP+pz2lJ2vCXnoO3/R03/lvOwu8VQ7MoDjI8r2eaTQBjkhI9N\nNB1NEIaF8U3Nezf0bKY9LMSJECOFz7xI1pHGAl2E2JUepGXnmLEWxzUZeeoh\nE5AhlguWdRA4HbhlnhgkniaiKDE7fO9UHrYggZXmtfMXv3W5Nv5m5GYKlhSA\nYIhStqHWOHUDr2JoHwnQ4JQ3ksaFyfCCZ89RaVNx4F9IorOVbgVYf0Hb993t\nhb44y6wtPRQoFG25UA9VgQj7yg7wMqfSnykS7GWiPq5G6WxuEVu/qNmft8Zm\nidfBCL6QBGezOl2llIZBABgLG5t38394VQBzUx4o1InbN7pAHb/6mWZVujkm\nvpEcTpPK2zx/BQ8zko9KPrsg7LTE6mjVJDYm2kvLUYHfDASh8UHMoeicua3Z\nKBcH\r\n=RHeQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGd5PCBwsDYMOb818R5v0S6utDc0IAyZBJaH8QD0FloxAiA2SY6ay/IqjmquP/MabiBcLO9HwdEGCvL1uftACWbNLA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.2-next-1601895844-87ac5ae6.0_1601895957007_0.5285459652195104"},"_hasShrinkwrap":false},"2.18.2-next-1601896565-c1b20eac.0":{"name":"@xdn/core","version":"2.18.2-next-1601896565-c1b20eac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.2-next-1601896565-c1b20eac.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ZQn9lzQUDeq7Zw8LdiLk7ZvKt9Qrsp6PboymuGyEZsW+OyCIAxMmfzJ6vohmlroC5qAQQC6X/W6cMYkwA4G/Sw==","shasum":"cfce238c7cba936a790fda74c5ab1db7af9f37c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.2-next-1601896565-c1b20eac.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfewDkCRA9TVsSAnZWagAAua0QAJg7Bd3yUxU1MYo0bdDp\nIvP3ORTto3aXhnk7hMDxhgH/aQ6Mkf4pKEVV+copHH7mLTqaM0LnsdiJJUCb\n4KHdWtsf9hs+hgw+ZgYhPp035EZMY+jHTKTT063TNngXs1igRlaGHn7ihLUC\nj5t1S4xTZvSzBuAojwHLV6FhmSYBKcuJcy/Buxb4tAepGkx6i/XZLObEVXci\nshaS6LknwN89wKKCL1nsUJtKeTVbYbJ/zLR8XqNoiB8akxT3GVgEEEOD/qi5\ndf9YrIaFB0kPguwpdSVnyNfb8qy0EcQgMlEClPCXrKShBcouvQzwkxXpmEme\ngkFc5klw3OCGwVx7XlvnAbhUKNyMQGPLalcaAbf4NdjnEMlSCDD8K8krwm0Y\nrdwiStUa7rUS9c1wgkd+cdTcHhEnWWeagGAjf7iqQebzWmXF2588zAPGgXkn\n2NywWPHNIdY4PR1wKqGakuJfzUS/+65iMBk59EAur5Zer3LCFF2TModRmCQQ\nxfTpezK+waSCkmfws6HydANoW8tOzQkZhWPeOl8pT+oBUADhxymEp1wTMZ05\nAccYJVBA8fdKn8QS5Ozm71MLtnIvoMxh0k3UDQn2uooYj4Da7FWcSrLlWZ29\nzsW4stZf9rowPg/HTPZWfdQIO4x776RQ27kL7ohl+fuB2iZpGGwS22QMdA5u\nZb62\r\n=uQuN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHm8MV6bvpn47WL8P4wfyKl3mEbRH2uUmCDcejUpnX0CAiBOkku34E+29eXR8fq5yjznqL2QO6T3zSx0J0o+kWgI+Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.2-next-1601896565-c1b20eac.0_1601896675983_0.5259384350305714"},"_hasShrinkwrap":false},"2.18.2-next-1601897472-9547bfec.0":{"name":"@xdn/core","version":"2.18.2-next-1601897472-9547bfec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.18.2-next-1601897472-9547bfec.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mHMcJ2skaDDTlskN+O3DBdQPZPJWkTa0z07eeD3YOH2baDtMn/3wc1z08sPBej9rAG0FauxfSjH7Y6EsF4hyxw==","shasum":"9ef0caa0b540fca7ad8c18576de3706126949b5a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.18.2-next-1601897472-9547bfec.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfewRyCRA9TVsSAnZWagAAoY4P/jwGq+41rKfijXkcewsK\nDAY0elG6TkcLFziGqT8ZSZCHvKWjr/v4wghRB70UOOD680uE4xeC9EMeuvjU\nxho4U5vg4tkGiARyQv/5o6OcgczSDH+Je7UJcljVAhsDD1KxYOwWapPLU6tN\nsG+LDzEXmBXgJW/0mOvpUru5DyipagrxK7iPm7QL43nASc4u1s8SOHm/9ixR\nV55PJkey1SuvCHmkw0brufoceribozHKgczTPew57CF3OiNENh2ZZLl9rQIZ\nwgzXgYO1cQIMHM4j5oagxZZGIyhm0bmFYm1gCkJGweGTi/q5S3UZ8PvoQEyw\nWvS93kZzbGA/grlsGtQnRECtbTFuY0sHDYasLR5S3AIVHMhvk5/7DnFFfoPR\nVJNXRtJyK0vpK8fPLDuhb+Zs18S0fyUXmjx7GskohfXbIo483YPJ7DCUV+nn\nI86sIvqV+VGpWRZA3Xj/MsWaOqPLCxxuv4KipAHNl0sXq+hYhkKd1aihU45C\nSRkGaiSiaP7RHinx5f495bJCJ76Au/l6jmjFNujKrOZNMhvx/MIpEkwnHVX8\nYORspEqqS09N0ZCQ/xyxanfXY7uten6bt6IB7DjubvVVhcCkC8dy+CyZPh6x\nz/U54NGv3DVl1xorofFFgsDgz4r1lAx9BFCqr8fZ+Pn0dITFQSfBr6UW2UvA\ncMDC\r\n=nX0A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEGe7zsbc13WF7aZMwzAkqSuRsQNOgLtoxKQYTooWyP1AiBrbtAYSYeetZd8HNqG0YsKuNRNTs5k4IAWHtDt44Qc5w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.18.2-next-1601897472-9547bfec.0_1601897585468_0.9772011087114822"},"_hasShrinkwrap":false},"2.19.1-next-1601897561-86b9bf2e.0":{"name":"@xdn/core","version":"2.19.1-next-1601897561-86b9bf2e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601897561-86b9bf2e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-juz6MSp9DsIiaxl+Uwof14+ltB4WVorttWKKZ1iVZ6hYbLIJvJ7H/pKOu5pqNre01P9NS+6YipAWbBGp4Rrt2w==","shasum":"6b0d0e454fd5677b466d6ddf26001be1d11e3e1f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601897561-86b9bf2e.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfewTMCRA9TVsSAnZWagAAYTsQAIdZYDm8jx41hP4qqsI0\ndDHAaVEXCSQ28/Opcbf6clnKy0jjGSqxPV+rz7r+j26z9AZdzcirXC3RPCYj\nLQhMNtApL0sLVxzeB6wKj5cAXSKfzNu3Qu136ylgzFiMysXhJpzmTARZaIEl\ni6Y7vSbUwC1GrEmQWxB72NRb1v6TYAz5QTn0NXHaEPn4f1qIaXVCcXhSdKMU\nqWBI9ABAidk4jnRE1jKYIewHtivnAbJI1qaQsjC9LHmX6z0t/JWZGwoZ4WCg\na2hblu1pn4/cavRyxmjQT0PSjgsCNbiXuSAIh7UiVg2vGcmjRiT1tjGLCwf0\n8Ur8h8OLmPbefyj43yKRs0RTunZ+7/0yjGUSDONHK+QLVStA4UJHVyh52Lh+\nNOAGbX1h+RyaDFxDDQrnjZXxaFO6lY0gx9aZufHeaEDgZHUOQf9M8f6LIus8\ni9XHsTArZ74v8KhiFRaRWyO5VWhCCn0dvaZD4VjoduulExhTpSRMRmz8dRk4\nKtBTqCdXB8alUh5W1cqx5iBAszRp8d/1s+uqcb9sZxPeBKz86kYHCc4WoeHE\nMehDi40GN44jJxvfCITjahkCQa1yRvOQjT1lTjc0ba3Q36+D3nt/BHzjfeQc\n4ur3+BrYlkhsF44DYvGbmETogycowEIPQ5fpER61/nJrFirbmlEG8UNXmBFw\n5+Hf\r\n=OMcr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLNvpgvqlaldJ6aGH//QpxXm/CLC64HKuu7mJoe+IYCwIgB8cLsOZlxWvLDb2Y/QNmIk91pDQ+S7BUQQUU4tIQNaI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601897561-86b9bf2e.0_1601897675985_0.7753974601733284"},"_hasShrinkwrap":false},"2.19.1-next-1601897691-f1491ea2.0":{"name":"@xdn/core","version":"2.19.1-next-1601897691-f1491ea2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601897691-f1491ea2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bjLFBoU70rVjJ8oX4cx+riGcg9Dy322xxzrAtdm+oAQkmsfUE3cTxHgKEv+UiSSL7x1b8/slxDw8u+eqp4xTOQ==","shasum":"7d70733298f7c00d973fa7c973a51dacde2852cc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601897691-f1491ea2.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfewU7CRA9TVsSAnZWagAA+eIP/142SA0x9NblPTDMbgee\nGsZ7T73AfjVNl9Jl+o8H0MCYVb5ofVRcsSHQjvpdcEMR4NOi+gvLFERK8j2w\nZzh1Z/YWSHaqXfkSDZ+lVvw2XkO0HxSyht6HkFg9t/uWjUR5zsTDbyWqrmFN\n5ACyWmHCPvThPl0kUvcwHm4pxUS2whrwZV3d5Jw3l84+6sDyTRd7Y+8Vuu7h\nzxWtjGJnZf6IqeUBhxzeTVuCQnzW+O10fs9953eJe9yEJOQFjOgEgWLd9fji\nX5tAG1999lU9snDdZqENzZidTqhifEvFDPJ3S7WfT0EXqO0X/Mx2TuzUpzT2\nuPcRGQFPYraDRPP6tITTgzBKxHU7Kw8yLr9XMN2ERmg6tUxvuAeXXp/uZSHG\n1rmPC0L0GeVju44QLpnM4k/nghDIJX53+lfJHQMbWM1Ftr4mGWb1GdV8S1yA\nTyozFA95unCJywXmokpFnH4PcQUXY5UOIWkU1TMjgWklzsWymnDPcIl0wgIW\n1uj4DUk/EjRMg7HUfbh5akSn7fxhEG3NgSDVNtFPESZzBlyniJ8Bv6df7S0F\nzHPXMqifvMI/6QP10kM5qdywEx0HaBV523AaaboZDqzh+9YZLqi3jZ72/+cH\nVIdhTMnFCpq7W3x1H1FGashMHfXnktRTq3bYkPc5HS32GouxWgyHGYOk1One\nlwcM\r\n=6IoN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJAaGFavxuu9mh61gANXKDzuKTbIgH21Vn1NtG9KnZpAiEAm6cckCoLioc6MMsJ89RbgPcn0aIq5nmHkPQi/f6azGo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601897691-f1491ea2.0_1601897786517_0.28141179432967633"},"_hasShrinkwrap":false},"2.19.0":{"name":"@xdn/core","version":"2.19.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Fep+2qfSNNmSTtZB3xLi29UeRrjQgPAaY72FnghCXPcd5psh6qUfQ1uk545OkQj18ySk7yDEjqZn9xd2Qdigqw==","shasum":"b1bec3117cda67be1fe4c12da35d859167d64b45","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.0.tgz","fileCount":155,"unpackedSize":569588,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfewV2CRA9TVsSAnZWagAAMPMP+wUNNP8uhlVilAky5CoN\nP89Ey3o64zcO4+T/5FwNib+xlAA1dIY+Q726fFDtzwkCLSDClClzFrViJiBR\n60XdEDLk9JQlmcwLlgjdAoWZsuQZ7GFCTF7GG/DaryaceGUy8FPl2Z3mkwpM\nPZGDkDW/aL0aAk8bPW/ntrWQlUXbXGAZk38gFWZaQGK7iUX3R8H99MsO7Sgs\nv5Qc8UZ7KKxACzCXfah6unSxD/l/XhcDKmtKWWSUUxmlNRRWy2XwnNN3YJ52\njmXxTpAdnrd5/D5nvpnVaapxlEIRYLjUHH9kz9UPM3hvcz4Lmpr3kqbQkGHD\nVL1tQ0lawYUySsqDBiNjUgDdmI86eFSjKF79WoGxFGpDMRe5c/tsbrYhM6iw\nd1DJPI0h1CeSNch3NT0gGlMF4NBcICLLQOlHP0EgL9Pk/bAaX2tKUPhydD27\nBdFxVkPnuWSKqkwrhCxPBhLJE00KFdIkLbpeXKMzpkTMcxIuEOM8+l5GbwQk\n4+GxJ3HEqt7BLxPDtLmyEsBNdjuEUAp47vpcdIz35w8iJ6aL9meNb5/LLWCq\nYXzWu8w6T6j7L8d1Lc4muDRBlAjvEz7729Hoo2GPVAUUm9+sKqTPQvqYGGUB\nLubgGAUra9RW9ItQtTMkcqvS88x6yZyFAa+tqxFo8B4DI2kJWKwbgCrjqN6Y\nXbwH\r\n=u7gL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBym43U6t67OB7CwXV+YnI2dt73kQsLxAuFQCaotQGccAiAmTnpSHmdxfMa8cQwJeXjon10f4q9RdmHdnc8cDmbh+g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.0_1601897845812_0.09392796328501607"},"_hasShrinkwrap":false},"2.9.1-next-1601899240-077b98df.0":{"name":"@xdn/core","version":"2.9.1-next-1601899240-077b98df.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601899240-077b98df.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1SxYj7Zlw63xRCq8d06/KwWb1nMc5SPfMWAwCBjFnevCdYu0+LPLHTY2qSGB6u5JA3Eik0luZzSvFYnFdSdd5w==","shasum":"f9c0e6ee9f8920d202a0c8d46903d3acb5fa1e5e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601899240-077b98df.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfewtQCRA9TVsSAnZWagAAn0IP/19ZxT9sAYcgQkw1QPdE\nCI6rVGVwSE8u+7f9dghJDFyyqe7rOXYQ0Y9CR96oE/mjvdjfQC1y0/Ae1Lln\n7z7EXvSalkyAm0r9APwEdkPfWxbeD8U8lKd3WGZyTISag2yTG5hex3IPARSU\nDvPzADzXKOC4j+JpS1ww1mKrwbNth5BRfXiFBNwCGfBMkkBkAEdRZ8uy9EOl\nuIHFatksMpDXkD64vcl7LOwgW2xDLrAg5GJR//vYGh1ZXPYdGgotXlJxxMpH\n2evXqR3VGhpWjKXgSKYhFgPPY19FTj/ZAZEio69YuiAGeC0xhLrYDPNcS9S1\nloArG2+3CizmKs6poGvT2dPdC5CMitwnQoTJ1ueS/VYOT6FOqKZo2AwPzEJo\n0AlQ9OLKN0bDOYjlbZaTnhKzSGz36AAFdU1qWOdiF0CbRH7GhTwvhpykwRFc\nYvndtQaW5LCivXMaVVsc8hnS1H9OHmJvruGXKOYtrRr0qeWNyYQUriijihjv\nulsDly8MNumcWIwQzeOISKHWzvVo+/pkkvBQJDWwVtfBROZU+UxrENeDTTfX\nF3HJ3c/qQLwdVKIbo35mmRM5oGkhBz6DnMogsrbfR+tOqbtOTsvDYiVduf0/\nYaIO0Tgq/qG63achyFVVLSnQCU4V3pIF0L2Sk+7vF6xDRpMKcb/kWHrQ795i\nLLX0\r\n=qgOx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDE1V0NEEIiOHFamkdOJvf6FCSM9jhHbEwJwwfvbCsDLQIgXD2lm5xY2qHO12z5vSCx426/Iew10rVRCMNCvSV4BCg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601899240-077b98df.0_1601899343982_0.8337304431498365"},"_hasShrinkwrap":false},"2.19.1-next-1601900047-53310c0b.0":{"name":"@xdn/core","version":"2.19.1-next-1601900047-53310c0b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601900047-53310c0b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-m/6eRXyJAt7X4bn/dIet8uwfxjH2wL4t5IriDp1Djd45AOFiVatoYWawhzKgxujx0PQKjj66c4L0XxVURCt60g==","shasum":"bf1213b6b62ec206c73151aaac5aa0c7cc28c909","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601900047-53310c0b.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfew5wCRA9TVsSAnZWagAAAxcP/ilGnX+fZOUXlEJ2OSRb\n01tYj/D700KWyVavZ9JZEQQCHildkDOB2PphllzLsmbzVxvbzWIcciBSk56w\n/zWxhLnuCkgA5ST3gg1YQthHUKJYnYEmotJo9NARxnC1/zMMpqORazr1f0KA\nQmotNPbBbTKTKA/z+NXWBlG5TKI1rfDktMUAxWNdpmRKvXKzmME/uvUciYZ0\n2Dp40SyAPIkKGfb7X4MqmnT3vMuNRTnM2WqPVJ7R84pH+Hc/9Jw3AiR78L03\nkMc00zbLZEMJf2Tnno70Wg/IsOKqeQ7yYM4dHQaekFL5dZxiIsjYrgxweBWX\nxP5xIue9H26s+WPDrVnoDQp2CL9M+qU9SUE8BFQfLfidTG3tsTChRsbdNRad\nK6np0g82uiJ52F0h+wHI7TitHCThWj0iIm6K2rw7PEPsG2VxZgtj3mK/D3SU\ngX5rseFEbJefCOdjBBrjpa2RGEfWmU64NKX0NGM3sXuoGyVPk9HflyH24WRQ\n6c8cWQ1pOtfbJsQuunDtf+VZGPlvqkPoKXCPftseBWBfnSN9N4AH7KZEJKNW\nzp17C0YkOA6yA9X6Umo8ka9P4DBn3+CI7mhjIXWxj/XAZtrAIdqS1WLbjg3c\ndugKBH9eTBAKVSlHSCjUHNm3JyNYk3eO8Ki0sdSmlHJ7oO+FfqBaQ3CdLCKy\nLLtg\r\n=4y0g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBlTWVAGiQDr3CT1dMbBJAN2IQRBm8z+BzDmQZMZKiPeAiA1aVwKXW4xv8nJfkm7B2PqsS5XDB1W66Bk8hb4aueIWA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601900047-53310c0b.0_1601900144294_0.4568696577611928"},"_hasShrinkwrap":false},"2.9.1-next-1601901620-07a3c74e.0":{"name":"@xdn/core","version":"2.9.1-next-1601901620-07a3c74e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601901620-07a3c74e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Rs2gGa/Z7PXlImr276UxZ9NGNCZWIM3XggdZvHBSERW0cI1RaD7HHrE9XRGNtArdVhBgCuN7TFoGnn/lYvOZvA==","shasum":"c40d06c38b9e145d70e8c17f04b2e1b9be32af75","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601901620-07a3c74e.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfexSKCRA9TVsSAnZWagAAbosP/0PLNnmpFt/WGWll7qvv\ncISfk5cfOLHAeXX7iWCnh4qQ5/2FFk1ZdZU5Bw44bwzYVaczpFd7xbBkjL+G\nhPIozDpAZ4TJr4KpSIBKsPuQhZs7Gz0icITGlNzeBd6XJoJfEX5lvJSbEvmE\nFVimf17Rj4xqqKTMk75fuuARDrKMKFOUlO4tTWZAlIFr1kmSaxSJOe85om8U\npS6tMXehbm9rzZcwQKBTNBVxJqwHPfiuIFnwPTZJncrTFSzwdmh+IQeKm/wg\nfVNvVuIpAwXJTSJq6nKxn2CeFKb5AoMFysqPhDOC7wVUffZH02hxBnQI+CGo\nqkkSZBkaHCxvQ4cVowhei929rcg+Hmyb2tRSWH91TzcWwHZdRAPg6+AJDUOo\navS2FlmCrIhIp1Lkx0nGuTBVaKH7FJtd1JU3HhtW1gd1kM7APQWmo4i9L/yp\nevXY8FHiNmrQ4i1eVCk0CPg1HQ8R+Iy86H6Ku5lpZT1y6DOSVd1nTNCj0OpH\nzZV1ZMixOKn12kkBdRl6R2oL/I01rlQfh/ZVvKMm+r/IucxyUe479BbrEH05\nenOuJhz9G5WKn6FTNAGj/aSn9z1h1M7fYg4t2UoJtgCULjnsIlMYCSGfMR0B\nBFFMxt+2zYryeRnE3uqCGCNJm1PIt0yHeOfAWyeAmTl98Qf+X9laxhM3ho1X\ncCBr\r\n=6fp2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFHTUMnmpynEBMGZP5h35nc+HhuggRAyTzYJnOW9aP81AiEAspe9+xE/1TiXkQNy/fX0NRAfRnpxnqKVK41SlwpEM9Q="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601901620-07a3c74e.0_1601901705942_0.6137033725435146"},"_hasShrinkwrap":false},"2.19.1-next-1601902303-35009b18.0":{"name":"@xdn/core","version":"2.19.1-next-1601902303-35009b18.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601902303-35009b18.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-e+AluWULLlxgEdNgL+Gvsxd7z6wOI0+gq1DZegIRYljqev2NzmiXb8O7ASEJf6/1HizUPRnFtBMEkPav+T7EZg==","shasum":"4daedaf775acdc53278718ece1fe39dc0d3f1e2c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601902303-35009b18.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfexdPCRA9TVsSAnZWagAAPCAP/2WCoO8H9pv+SuGiqkYI\nrOoKOhJZ8W69Azze7jB4xoxRCD/9jBbRJDsRXYzsS3bScz9Sd5xGIb0ZNevn\n2uMMB+GzQVDZqxyjEiD3/dMN4Wbti1y9GDcsnO1bB9jsCfOojVivR/R1IMbh\nbCaynvzqitKHkveP7f9RZtKAfdo738JZk/RGZ3QWESkiFS/4HDoOogFs1EEg\n6/0PQ+ot5jgKnDoy1kDThJXyedzQI2CfKGOd72g/v2QZAeqvMkh3QjJrnwRX\n5l8+XUuh7U2kaXmP3pwuRT94FbHXXkn/O2VjVCe9EPuppbjpgczFG8gRkCNw\nb1BW2g9vG/uxsfkln56d4VQmMzZ/04KqbUIzmoydwpUpf53SYx1IuOC798Vc\n5SKiSPLig+W0r6B+KR2LicN6Rs/0zkl9WMglLk/ZtRHwvTP8EPsrJQ46qZ8Q\nY9sCq+WJAx+fYLV2VgS6ngwTu+GKX/gZwArq4QsrWR3hw4o0ALg6uc+32Vna\nShEFNPzSqzYWACQB5DWYrwNJePLLyC3NkVHUpZY9cbswcFdDQtJ+Lya+byK7\nwOXoCb4F5JM4KIE7l9nKmacFvZ54GE7uZjO83A9b51Zg0e+XH8Ir0DJRUWmp\nsMgCN+6N2uybbHTz7lBSNegW0RL5hj88uSZ045lNsc5u45LxheVohhTF6g1O\ns0Cf\r\n=/DHC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpWJfVSOMrsal6fPpNBiRmiex801ipmG2eeRiIFF7DSwIhAN1Dw36epZbCQZWxMMijnYibDTLfpWEBuUBXMd7eZ1bH"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601902303-35009b18.0_1601902414674_0.45402718152538224"},"_hasShrinkwrap":false},"2.19.1-next-1601902621-f7dc6ec5.0":{"name":"@xdn/core","version":"2.19.1-next-1601902621-f7dc6ec5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601902621-f7dc6ec5.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xO8lVQOEK0rxaFGnzHb5ei/v6bVJH17Vr4W/jdI5giULm/d9EmNWBfPpZOtYyjSms5BU8s9DjvL1+dRl9Ff+Pg==","shasum":"1801a5497e00c810d8a06ecc0a5352813ca91d28","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601902621-f7dc6ec5.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfexiZCRA9TVsSAnZWagAAs/MP/1NvJE7vhEcQoqMvlfo1\n2r6NwxrC6N3HIM1+qeg/jFso9cLTK8hn1UsAuxkYh6VGlpYJFQbCzjEshZv8\nCtRPJp50oIBEMQ5d38C1Ghn0bBwsMqxE1LbNuCvdQWiwSNw+VFIIc+/uFKO0\nKQQbTCm23XL9NHAIB9fQBoJUNvPLx3RsMBz4vcjV3H6WIJiMquyVRg1i9yVd\nOpo0p5KGVQPImLNMDqRFFXklUzF/2XN1bO661tT6MktR/uCE4vItoq8Mo7+5\nLYQV2BA25Tbc4VFb6mVW53N/OPLDSWoC1qWjg89x1yUuQPnWI0HBcA9tlMAB\nFcQW/f9/BepWVknjEspF7vw7n8kMHaQf6aZ7S7YkMKQAwiXymUNr9E7I5G5s\nuhWlFMsWWAEa9gsfACmJZaK3WQZgM8OdsM6xOmAR8BDgDh97E5ekIUUnVJP3\npZCpXnJgUpj33uX1vPTU/whC6vM5BBSVkN9/biFnvyb2QBWi4jRy1PoS3/Ud\n/8+gIzLyKZCNHbJJ7uFjq1SBfrOC6kpHloFkdwN2L1r0DHrOSM3uGQUZcyCW\nHycb88c9bodlRiA0EmvCYKh/qYNfdACCYOYaY1oZ4bkUC5XQwbGfT0g7NWr+\nWx2yQq8IpPqYP5Tj/ag3zhlbwMgmvsRA/3XTEo/22ch/IJvHGALN3k15mJR0\nhRsB\r\n=2D07\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGsWQZAd8F6I0dQV5Hv7U2+SV3k01v88ZcDIhi/Gl3mvAiEAoxJQg92BjL3tWOR8KK6abpOT7iDD4X8uG38ssTvDmyA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601902621-f7dc6ec5.0_1601902745055_0.7486801659058051"},"_hasShrinkwrap":false},"2.19.1-next-1601907413-e2c35323.0":{"name":"@xdn/core","version":"2.19.1-next-1601907413-e2c35323.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601907413-e2c35323.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-G1EG39dLVnMcLk6AQmWFJ78/Dj+wQ8Az5U3nVtq/9uibnpuRP+n15R+hztyC+MDJFTAUOyJ/UtbR2Ndqzs8ZOg==","shasum":"ac9273fce6cdeb2fcbc390b0124af1ea73d504f5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601907413-e2c35323.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfeys3CRA9TVsSAnZWagAAAwgP/1IT7PCuB7wtTP5zv+2W\n3qw4CBguoJBvV8wA34gdoxgOdD0vEtMD9j6HmOse/d8P9DivzS5GAiD64Ngl\nDVxEcwiIZ1HpArv/RFBJhu221NFXUpeVoBSo1uPDHuuE8P1fQ1a7xYDs3CS0\n9APzyf+/5kf+xW9E8MHcmG/a/ZnXzwAEIN0+nEaflBL5+Igf0z4xoLbYfaH1\n9yZw5MzdHiXLfuIHw/jbTEmNekbGz06MAEMpFX9tokLEPvytspEX37U3X3Ts\nA49DcFyYEaH8xVGZsHIjJfV89s6ykM9IBFDDYRgvofydFcX09z+7Bpj980pJ\nO0LK85kecFZq9jbALJbk5zL/xpQ9baaOT3+55R0+iFD27UY6GTZcL8fVgvEh\nFc6Q5B/+wscxSafMuRUB+iO1WHotZnl/1QcETZ4UH9Oc/rR+FmEbMJYX6ia1\n5aiVQ0E5LHiRjBIafrkRITTixrWt3XtycYFP63HmxCRCr+jG33GFuykgFg3Y\nj+AyECZo5Z9PeyeWnCbb3s/bnHIesZJ/wRf8m9k2hGqS2pEySmoNC4g2mIhB\nxVV/WtrAn7NCL1j/kiPPDvri9ku8do8xFcFekUETd5IeIq4yLuTCoYI4dWXW\nfTKNLA6F9Ht10oMLqjdTOOisb8CN09932QocltP3n+5jNeU0mpF+nd2VnwbR\nk3e2\r\n=hHf2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEOSfaegxY+aV4dKX6008bJCpCN497R1kkFJ0VSjzO7gIhANM4FiCpAVW1tAqj6BKbLHT4PDtzB5/gS6fEbeFYGmbz"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601907413-e2c35323.0_1601907510668_0.7951132400453511"},"_hasShrinkwrap":false},"2.19.1-next-1601909321-352a72e2.0":{"name":"@xdn/core","version":"2.19.1-next-1601909321-352a72e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601909321-352a72e2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WhU4QtdCRaKYcaNCvRfuR7ZWVaZoX/7bEgS7UOqnd4n7gH4fiTpQHC3p+CwG+0nlnFbZMEOLK6IIXbZ453TI9g==","shasum":"4c30947eb9cb8e90aae9fe73c920b43118a7c157","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601909321-352a72e2.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfezK6CRA9TVsSAnZWagAAllgP/Rp6COPLSOPkBaPrfks+\nEguvm6H5O1cJD5pDh3yOSmt/IHOlK7BQVTNOPN2C1bOtTaYuo/rxDMNWAdw6\nFn2lbMXQ1cNNWj33CioYiCLM4BaqSCd9nNB9L+Ito6FOsCyNTf/fEjdJcgGB\nzlyg8t6xV2J5PgL09bY54h0DhJoiqQzTpJA5KAgiCbv0C1b4JCaSBwW1mLUv\n3jkASUlJDHwEzDemmL/qZKSjV8Q0eKIG2H6RWRcYimK9lgXXiEjIdV7tW2/J\nywc8uYE9zbtrYPiKXfEU/tWYLN1vqR2+gR4Ka22cDBJYhHxQYASNGkB8ba6P\nF5vNis6e9Djkis93F1XSoCoPv+iPMWPN+U37GzmVXRAwSl7BSW1RrRhviLPF\nQzCQW3t/kE50yLVAGbYpnV0MXtus4lAv2Hni1dJ0MlHQgbmfJv5is74l82V0\nBfM0jwlFT6N8hrsFu2GgmLJRXwKg5jcw5kJeDQPpR8VXqQuJWs2jaAwLYDcV\nFoOfPxf+caAsk8UHL0d3JTuzuV8d0EgWMJ53c1jMmrowBF9DU4vU+3wepma0\nX4Xg9h7ifzI2E2fTXulAMtHieHggRyML+7CVtpseTqAFIP/5M30JfyHHZMV1\niWWbiqcrp05PJkCwm0k8IgyWerlIolLfLhEWWWgyI3gBdO8r3oQ5l6E04/Nb\nDNYr\r\n=UPJt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCivuo9r4IoWq9kHHDJ+1n+E4jMLCku7kH06v/QQAmsSwIhALhrZHRWz+2XiurMaDozjNLYo/0uzT5iUlrc3JPWjmMQ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601909321-352a72e2.0_1601909434041_0.892852672749674"},"_hasShrinkwrap":false},"2.19.1-next-1601910519-352a72e2.0":{"name":"@xdn/core","version":"2.19.1-next-1601910519-352a72e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601910519-352a72e2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-AkjpVKBhOqNiE2Ja3iDydBG1E2UJXtxmmfd2Dj4L16c+1C3YpHCuH6XrAV1ozfajT3sh4NXd21n2oQ/UCobDMg==","shasum":"726f073cf8ae8cffab53248239ddf98a5121321e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601910519-352a72e2.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfezdqCRA9TVsSAnZWagAA1IgP/R07AAqyyaGI725QKdpK\nrWWfDPpYC/eBk9jeFDRP6TYKz4YnzS9PauUkZmOJqbSoRw61QaM/pRNqJJIA\nGpAtQXvbypJG2tinc5M4uGeIdtr+XKvTeznRRsTOcPqaUqKxDV+ORXumoPLc\nBSOeFPPdRkGrJ986Axt7RQrgw2pDMVoxktzDmqKaO7804KTGoWZsbEg5dDgO\ncBcVmzC3o9C4SLQoKV6NasbJKtIThzOvpT4dcJH0rbh1UZZMnZim/eqC1+JD\nd8ODuWKQJ68SGZTgDJAGfur3qfcd01ftIo/vIkLNAJ/eClCj+HYDsjOI3YhZ\nBKwr7b//vOWPBu2Ml0RFLrqONQUgvh9HEJIZWBBOGqDIts0G/Lr1P0eBr6fO\nSodRL2hlp0td/MXNNMoyNXvueu6PMbqD6xlZhhxeQ+AbtJBZWCSSKzKt2mTY\nFB7Xm8hRXp9O7w2TwsHvhGrodQjAmCRksaQkxueezRYuXZ7M52hOmtROjKL4\nEUzR+y5K8JutVfQRbkkwwyitgsr/G/0gv4pP/hQyPIMIFWReByC6pgr+WUwj\nTFHLXo88ptLpTU7JqHcfQ6HRlAWpTT9v/up63zBKU7JYDGUKrYVG/2wTMAmM\nl3F9oHcAMrPE0qcHoVE7saaIMTUisrssZxWnB7nKoduuEIbUcV3+5IogK0D9\nf/3I\r\n=8WeJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJBJndl40t+NZvREsrnYcZK1/0s4X6y34ASOpAjh9+2QIgBeIRdWCW9tx2QPwhZR9WyUaqd0tt53vn/rjnDKgRVRY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601910519-352a72e2.0_1601910633434_0.366257737845598"},"_hasShrinkwrap":false},"2.19.1-next-1601912246-f69bf6e6.0":{"name":"@xdn/core","version":"2.19.1-next-1601912246-f69bf6e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601912246-f69bf6e6.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-L8eOv6IP3UG+MeusRlLO8WeB2ZDuXMxRWCO/Eq1Y/BdGggYvkHyXIiJtBbJhev54fzJWQ51prr356KuDvM1QTg==","shasum":"08365a9b7e8a5ac1c407756afe760a5ea28056af","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601912246-f69bf6e6.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfez41CRA9TVsSAnZWagAAMT0P/R52ofbcngHjKc2WnDEl\ne3LYrKXhaI5EGSTgCFNqpCXTe97CPtn1wfPv9/Yw2JQFIFAdC968/HMZ1qJv\nTDO/N4LMvzyLQgatGRf6QaSv1T+EGkhDU6U5UBtfq0zlVdZptLhUQ6T3/Dmh\nv+0+7e1IBjgoLSKaF/wvzYKoN+3WYA+M72gpqhlIyVOUao2V0I9BksbaZAJG\nnOwYF3Bma7ysF+8DUeC3GJkZygh2xpmwA9eP7jQFk7foQZ1zgQOV0mJsEqB+\nWxUChh5BKLnv1JroTRufc0lkrfdsnGTmcoasNpC25zJ2aURBaUYuuTRgKGD/\nQxSTpCTOtflLcemwNRZp9J0CM3zx9dAa1cwzFc+Qboh0QoowanO+sgO7RSsz\no+9LqK055dVIFB4ib9RccmXPtbpOlNC2xgLtjjwhn5Nut6a3Za4xBQLfgDvO\nnRFQQr6AhfM9M+mUxZFZvjTrDB62HFvmh0WOjaYbX2CBhNaC8y/+YtuEtAwd\nDh8D5rMtYHK3FfPoINnzeDO4LRjsKZM911x+W3JyngC3xINabJG2scoadEUc\nWUdY83DEahNjWvsNhWplqLrYXaOPohYBVmpq1CbYVogPt4ZUWIuFK7FE976b\nWvnOVaDSh5D412/nlvEuTMGSjCK3eXF68+KV3CKr0/FBew8RGBJLEFVJWnUp\n00x0\r\n=OHt3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDN3jCYvOeXLo6AWNdIVwkgMoaEJGma/UxhvB2BMS2/kAIgTZ+ourZdherK3YT6in8R06QtLPSkUJrhJj25oeMb7PA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601912246-f69bf6e6.0_1601912372437_0.9883253257049052"},"_hasShrinkwrap":false},"2.19.1-next-1601912793-019d0713.0":{"name":"@xdn/core","version":"2.19.1-next-1601912793-019d0713.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601912793-019d0713.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-J2YpDQhCJj5SgI/kUXNzJdgUc85FCY+la/pgVCTH9Of9RQkB9H0bIYbv5WPcRJ1TtOw8u4q8ch7V2bhcsu5vBA==","shasum":"ef9fd3a72c1b7ede85b7ab13b91efee41cc3a1cb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601912793-019d0713.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe0BLCRA9TVsSAnZWagAAnJ4P/3+c/NzuVs2Uk5AoOslh\nH2NKaCYflnysQAoSg14KaqQM49HiC8hPxBq/oAa2FmwvAVdIQvtyEIPPiN3S\nruP2XurgkVdmVqz8CoEJrB+tu7Umfmod4FA8i7oQMF5CiivMlE7p2ZPxyH3L\ny13RXnPz6eexmf1oA/I63eF3ME/mpezYXJhDPnDxQI9M/jPq62HyIuwRUXPk\nUw0ndQASpvJ7ltKrh8yELkmuScJMBCIZUggs2cYVX0CPBOrz1eBKm12zHaQ5\nZV8tjm3CCcEjWch14VZP/415Q5wU2GW6cpP8OhXcKpU2TZAXR0WCmxxQcMHg\nPYOPa5oc3TeqsK3lblHWBNJE+WkurqJUB0SycfrhGgIfGHh01Q/GzhVwRGiT\nXsiEUtNGIoPQhTTeXOoFyp9UhmemuC223MbvfxEK83cV1Fnfp7JxMLk8yNp8\nFHTD7t3FaN92JCuRweBc8BKxgcaobTbJzUWofsr3Hktnmmqq7FErbshpvwz4\nwbG/3iFSl1U3ZMxeeTmYSasUR1J7Np9+lf6Io1FbakMJIUoy8Bzu0GRRh1i8\nkmwhNP0EdCnsbduHcRjItnixj5ghKpDDGwUx4//8p2QRVBQ4791j7Qxk2jGe\n1my6zTaRM6hbw0cW/6eN5mg8LIEkHPfBvvT2VqCU+EUEKM3rrWCm8i/9/poN\nVVUn\r\n=EVqV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHs8UxXnlBBLDG8RnZyDN0Z8yNM2TW/oeveEda5jxIb2AiEAxSPrxgfb8/p0QgyDfLim79qY8qNwALVnVsVPed1KqOY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601912793-019d0713.0_1601912907358_0.5810544499889501"},"_hasShrinkwrap":false},"2.19.1-next-1601918002-3bbb985b.0":{"name":"@xdn/core","version":"2.19.1-next-1601918002-3bbb985b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601918002-3bbb985b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xWdq3zUVhwcewQKrqbusDNGrkycf11UH4ldANBGlP3KisyhhUVOYl/tKcB46rUthW+phbNQ27wcJoOzl6jlGFA==","shasum":"40fed16c1baeb05c6c1dd7119c49bcd78fb31dfb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601918002-3bbb985b.0.tgz","fileCount":155,"unpackedSize":569642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe1SdCRA9TVsSAnZWagAAO9kP/imC6BbkUIrfJpgW/X23\nZ1hS1/cXiTWQyaiLuA/tKol//SmZwnQWWQUL5nwaZWdCqdPwA6men6/GvHdX\nVm19JzFlyD+hju7JxTulRIquIKCjCkV1TPGUqjWq8Rgy+w5aw78r2lCVkUlE\n3VRSteZDGoRBZKyTGYgSkYlEs5KPLOTOqscYhYKh44mFgHsc0Ck+Q3rwngQi\nBSEseJqe6BU1W0zStZu9OazghiBzS1kXrX5+fjl4tG6+erHsOZMBAlpOR0tH\nxuZKvL4u2rri/boa5fPdyhDDK8vb8AMw4HfH+WIYFlZbTuyGFZZ9PDS2H/fb\nYO1UIBpUedSqby7+jKGpr65R3sbVvH2MaU3KJaPpgleaVrHD6LxQkwQF+Qzq\nA5g1meaSY+m41pKoVEbBaZgIlRDnnif2fkXhnUBqpmel3WDXMRFqWf+pRBk3\nfzlhMIgK+uBEyIGYsdRj+WaDpSa9iml1w12VZG2tc1qbne4qaBcpvOy2YDD5\ngdgLeocLGx0KGNE/9EjsDBojaJ0IiJuhMpUFbmDtjBUh3HAdjxrGkvJMI8nH\nElu5A4q+SQBMkgTyCH8mlFqpd3Sh1Fc76CBpbJkqqHk16YTodwEXWggqhb0U\nFYDMCJX9NR29mlziwqEgKxq9STkmoEWGk+4z7ELkpwAg1sHHK+p9TP2ptwHu\niuMW\r\n=X2yb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG5TS1wwWmJQ9xmqYPkGDvC3s3+dJrNPL4aWyy+EFrlWAiEAkj6unDCWRrxp2Twh6HLcentzLZc2T4b1BXK/cox6A+c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601918002-3bbb985b.0_1601918108605_0.6731279833503925"},"_hasShrinkwrap":false},"2.19.1-next-1601918263-aa071856.0":{"name":"@xdn/core","version":"2.19.1-next-1601918263-aa071856.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601918263-aa071856.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-drx41jlOeGMhOJze5UEdUeHOUK0HHUjbRMqpx0E6o+zIiJf9MBbWH7oSG3mlHQLxojH28vfNlH6+eZ/MNgcNEQ==","shasum":"9b719dd30c9fb50b224476c96a9df80b7e960ace","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601918263-aa071856.0.tgz","fileCount":155,"unpackedSize":570119,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe1WgCRA9TVsSAnZWagAAOOgP/2yl53ec+GB1ars77PXC\nEUPGMAcmldSPrhaOFN6a6IQkxXP0OywctXX6fAReoEf01PYE0z6flLQok+1i\nVZkw3T8Fw3UqD+U3Wpj7V9mDg8NHqF5InMmdHIYzf9gVxvMlcsA6Yzw9Qno/\nShYD+jhNYYSZBcI2yehy9TTLlMaZbjRrmw1UqU5ySLzbkB4j7rPeaIcRCoUe\ngImzs1BIinq5eX3sV/Kd+TJ/nIqaiYB9MHsPQy80m7A5pMb9NHtW7aG4FXzE\ncUlq9/FipCs9R0iPfEvVukKiLTZkNLUxW2LJd8aKhHXzPVPp9UP26a/as1z2\nMHXbfcefp9mIVhb7NzY5fvD3+KVr6S3dXSjJfljd7NjKgszlyTvAs8bULfxm\nSVwn/qwCOpzidOUB8TehAgLdYI+CSz46zOCR4UqZ8Vx78TXKHk1QGSpsPgpU\nUSuoCgYZorem/CNdNwMYfEsSxyPldV1Q8kkCebT+MYXd5M0x7EZsa15u7+Dh\nLbO4f63R2EBCKhaq3APlG6x98d2Z1cOX86wSrsciWMUi9xGxNY4b5B+pEtRj\npoxhHq+j4aB7T/RebF2RRthMP8aWD+SQ654OyqQiTP7WJPr5mcnn7hzl8tEu\nY4qOXJT3TkAXtMyBpCHQKk1URSv01b46GVJlB8GI7ZE7bbQ4FGlea8pU71T3\nJoQd\r\n=ZpBd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDb7H4C9DAy5AVZmJHC1RGhIRZkdhOxgbMl2o5geKWdhwIhAJwXJu1coqqh8XMn0D5mbdawsHNyMWQtJGlGjHhEwtaI"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601918263-aa071856.0_1601918367747_0.17828029023573944"},"_hasShrinkwrap":false},"2.19.1-next-1601921056-2df17476.0":{"name":"@xdn/core","version":"2.19.1-next-1601921056-2df17476.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601921056-2df17476.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EqwrZ/JEuLZkUw7WUcOdDnXEbbKUZ9DpAQMvXIWTFoIxGNOXbQmY0CVFWJ/6JCtDZBPecoZ9g2v2clpV1nOioQ==","shasum":"b623e33db9665fe646796503e3904583b2ccfba8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601921056-2df17476.0.tgz","fileCount":155,"unpackedSize":569643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe2CSCRA9TVsSAnZWagAArA4P/3w4uOtdZO4agOa3+TNr\n4o6cvgjLR9LlINDLLj+S/4vFFZRiybisZQ5zO+nfGDqtKQf31X6uCQalf0qp\nSjL1bkPpyweDis17nhAk7FvJkmpIn0fwuUIwHxbacPi0N94FIdMCV8AK0s+I\niVJlEoOryJko4w+x2TL8IdQCm17kjKEuvjc2XZmSSb72XHXmg1XpeKXYUXOD\nA0rpWRnHPtyyj2aJ86yX98YO+8v1PbO/r1w/L5l64opFMyvRFxtFg7mvf1d6\nIXUZU2a6xAWMZN/sjIm1ZbqN6CExswwpB9xnUxCUwRZX0HJeabupgdUC2jIw\nbaUFok8z17gZUigr8sX4wWOynhGEnPQ77L7DfMqjrhR6+GYxNlEHtkKYlDgq\njoikmIrFdHtAhbVqGWZUllMHq3DPqehgDU02JKDS1zkK1wFYFV37to2J4m79\n5FW2PbpegFyzege23WgvxsuJVpRO1KRcpCA3wE/vuOBZUGq+pJCXI1q9TPNa\nU2zQ1Ou9AAPNjxyb3MrhTcu8Et+FKxhMPFC+cloBsTugNiHMV3m43snTVoTv\nsDXIUjrFVXConXyE/LMdxdMurbIYyP70Ia1nx1shN0xwEKycmgf/Mo6aRuYZ\nF9rYDEiwOmjIjVJHlpLep72ZibkGeiKdKpA0UzeG6n1AFMOK8SC0EPJfaiwD\nIlcb\r\n=0CMQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrF9zzxi36RfggphkYXu+XwLfzvi7Be/3NZn7I+xcsMgIhAPz0hqqcYQ1xbrrBgVvE+YstRl/gJyYmo1fng44RxEfW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601921056-2df17476.0_1601921170078_0.8179735898455245"},"_hasShrinkwrap":false},"2.19.1-next-1601921074-00815d02.0":{"name":"@xdn/core","version":"2.19.1-next-1601921074-00815d02.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601921074-00815d02.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-UZ60rKxRNakFrnjiPoYaQCQpfV8dV+TqumV6h+Nkqy3GEW6ifE+BHmGtIIzJ1XofrlvJQqE091O2YpY+bSK/fQ==","shasum":"76d398156a25aaad55e5edeed43665069a68e10b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601921074-00815d02.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe2CjCRA9TVsSAnZWagAAAmMP/j8VmneJ4RoyAwFjva/c\nOzkbwf2g7FNNvmj9tVKVE6WCOjtp5xiYunMElmcLRWzcHCjro97YzOp2ujQA\n6TYQAJsgDx3keEfOJBX+wEoxGT59ZhFTWrp6VOYEw8OR6zbBnhraL4iiBltZ\n2OFD1TnBzj3+MFPvjrMj/b/57qvScOI+U1QBz/V2qgQ2jeojjm782CxhZnn1\niZBneglN/XwfGc3coRlw0WrSnA9Of6Cm2G8H4hcbzdVfGBM5dm6P7egwWQUN\nkdgCyJeNfcpuPctPjZ7WIr4Ic4dFh82z5U36HKN8gvFeuGXoHSAADtgalXr8\nZUxbe1oejJyLX1wAGJeprE9KxNCtm5oHFER6Mi4Y53Hi//AqQBtfMjfkM3fQ\nsK5WYrM5iwvK0Ksi4rFqQLiI7oOnCAL2HTyfXrr29rffptbSqumoKkUz+KOD\nenaBteMcc1GvJmXrQkglI3gH0qVrHTMiL4CLwuj9dW6O9HkwFZe71na7aCZF\nScES43BRaDZG/lLV9TVg0y4VvYPAIhPNHOiqY5qd4iMlFcVlHfaGFvnrNW+/\nnRyk0LgemwTziUuao3IP1b9faTw/U1EFhYBrwFqz2iJgYpG6ubHlk/EC0lIg\nKHrr1LifxhS5ej/ZH05NqZDE4EfCRgWJoha6VZimcuc0/0VzYWJHCAnKoF9l\nNZp3\r\n=QmuI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDImkAyEDTeTJro7JVFzz2elkQRZ1HVlbaaZ1jioVAG5AiB834d8xS9W5PnYjx8RKtbkDkiYBPlR2Jsl8MWeQWYS6w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601921074-00815d02.0_1601921187279_0.849117716266993"},"_hasShrinkwrap":false},"2.19.1-next-1601921808-ecd88171.0":{"name":"@xdn/core","version":"2.19.1-next-1601921808-ecd88171.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601921808-ecd88171.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-GiGn3HLgT3uzcqRDo/91WvqKFuF+sAfWcws9TDGBFnN+2uuSpHJgE6obn9h3MuCmvRiSavYG9ixISTPkF67nRA==","shasum":"cdffb4eec47f6c07b5ccc751d0dc59e355dea91e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601921808-ecd88171.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe2OJCRA9TVsSAnZWagAAW7QP/1ZGIIVx7Klv+VKHyppn\nM5gSL+UtdR7R1ads1AQ8clJZJ2l0Y8l1mNLoK5mlGvJmMOasmjF3eaWmQbK7\nOInP2VNt9smh/aBkwfAuD1gcJmHjgKwLwym3B1Zt13yQyD9+strrYWQ96Jgl\nm71GTB2BlPGnJl4MF30HR/lPEdoH+dAxyiKi6bv5fmQuoAuueFPYr5UXasV+\nz85S0YTF3pL+d/npwz2Q3VOlqxnMT7jx7Fc71E2HlgcCTUo9gZZlOnQdx4GB\neKulgiS6jHg4Y2rcSZzaBvhhuLUSlalB1nAXR7hcaqeCXRg8ZHwsaiNrK4ZJ\nUDB5O0wlIcgs8WhUy8kNJY8BfUiDWdWnGZRVKYuU/zcoNX83DVuJGzeHFOzR\n7m2klI1suHkLoRNFNbXJJh5TMruRtQMGWVbPeDpwFgLyX/5mgEsPovK+cnfn\n+8X6PaK4hwfry2bwK+4LiC+7UKYVBxyTXB99BU8uAW1BUqlAheu5kV31cgy8\nk4JQ5tbr8T1K0vfmK/z9Qrz2ufCaZPyuV9QBfXRKrTRtvxzdJeI0JXbfNplY\nmaz/eGTgchl0NT1MF3R0ZGR/liePpCXDzcdc1kLyAlJqjlVhta3quRTEOuxK\nm1QgUhbrznDH8lSCjO59CmphI7ulZ57KU7ogmFfjU36JsWC062fVZ4/oQk2N\nG4tr\r\n=nXc3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGIN/+7LTEAtoXsSCv+lSOgBeLMiVaV2wSLK9ch0n17wIhAIrDjxFDIiDWYsucu50yZTr1TtG9WI/1vchxOJVZ4uis"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601921808-ecd88171.0_1601921929155_0.7553513192219214"},"_hasShrinkwrap":false},"2.19.1-next-1601935729-de821597.0":{"name":"@xdn/core","version":"2.19.1-next-1601935729-de821597.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601935729-de821597.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qlf19Fv7PMvibPGcWNA/VFaO46JqWGJUEqBd5Gq6Bmb2Mw6PUTcYWQqPiLt5oODZr9MrRgbbPJSycMx0vk/lIA==","shasum":"4882e83ccb7ea758868493a8833282f4c3a5cf7c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601935729-de821597.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe5nkCRA9TVsSAnZWagAAQTUP/0rw0FPwBUN+VsoZIWFc\nA/71uyrVlm3nWWeflntUR9V3FlY90h4KucV/GkGFC+GiixyQRDpI5QCkl4ls\nrI25msty/ZEboZxAew+D3hPBW31t8hU2u3PSz+qUK1RE51dYpZwzY/1AHfhT\njDmt5nzi+F6MkmugMBZIJf5+oFIr8Hd8MSwc4ARrLgMGcZb6xfJZVHCzLWOK\nYQ8yg8exrJhaZoyf31wbAoMO9HyCD9T/7qLTaVrEfrIwPKjnFIPmeJWQXMzG\nupmfsYxIAYC3gwl/lDr3goaZPs0xcAcc4CRB3kxUvMmqpVQzXDOO+JZlLLPH\nIxtH8s3Wbh6LYvLeCUvwxFJx6lJypkBWMoHRz/L5Em2ew0GGoi4mpc/RJLiL\ntKelCLglMFn7rCgB1KgEDibnQGBG453Kir6/YyTUUMfXhLvXr66VcLqX8Ykb\nJmfXCenRQvFrUQpPvGJFSFmn9gvwKBki+aq8nONs7WHgcHK0iN1mttBM+5oA\nlGN5VTOVNTdO0oe6OLDZ1jKc+i4dgnxshNAB0fzQVIkbZffBnpim2Z71MhQh\nhV3vRvcVSwJLQj3RV/5vgVAUei9wc4qEl5Ftao06lBT1gDnb2+F1rrouNmbb\nrO9ZMkzd7XxtZ5fS0C2a0EWi3TqjVr8pFs2YRlgI3vqTtryzwKquqIObl1nh\n/2ou\r\n=QrP9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGM7zaXTV44KYB3yobNzbDi6YcejeENMKBKwL2B/Qb2EAiEA9PXs1BW338ysEdovVqHgywBEq/aq0WqrOr4MPBq3xdA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601935729-de821597.0_1601935843406_0.00005094057382803996"},"_hasShrinkwrap":false},"2.19.1-next-1601940838-bb5907ac.0":{"name":"@xdn/core","version":"2.19.1-next-1601940838-bb5907ac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601940838-bb5907ac.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-NOYcr6K8pIZ1mVyU8tLg6GV3Aj2m2rIz5dOC3XCZvZqpgYIBByeU1C/RXvv7+8AzqPdsNIVXKpvNS9FyP4JoSQ==","shasum":"7ad1041b4e0fca24137e8d0e434f7279728e4a44","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601940838-bb5907ac.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe63eCRA9TVsSAnZWagAA/FAP/R+BPfp1tu8Ia6fpK9iM\nppOOPDkgX6x4f5w3kkN85lsTDgP9/JuAQmjmCMGDPV64XmAtsKfqPJBUeL1/\nADrKs21CV31Hd957kX8izQI5nBa/ArnU80eBUzU80eptW3inXKng4w0fqZeQ\nSxPKh8ydti399fDZxiRj8vtqpxeR60rpldNYJ/4MHVwuRbncuPiqN0Z21w4i\nvSlwj1tFzwtMzGewX4Q9hXcJO5SkqOe+U4kLwRsENtG9ihYEGL+BnsUGmL3T\nPisO5mQyPBEFwXJc57uavxWXKt4mt4XjpprwN56AhYGF/UxylCCCTyuUMoHs\nHu/N4w8H+Qx3KZCtwe1698+y7NhszvrBpsSrYGkU7Sk2dm37QKPQrJkZkT7P\nw9tixthl9zM2KNkX+1Fy2eA3m3yl8l5tdGUzq9bFgLv2c2l8TubKvmsnnYGY\nWup3bX5FdTJGvjwo/UVdc+VVbqB0dQe9bcaJvAyTGo8BvSVoaozZUuMyfmiV\n+NYG7ZAA65ociz+RxpSX30Gl1B28WRoPzIi0y7o0xD+ymnNcUFkObYd70w8f\n57XsKcrEi6Lvz8FeUpCYNtCVdG3WOhbcYcO3ONmxOHHbUynLJ9KNwMD7a/72\nF3LzxAz3762l3WeM10CZoVm1jqEnZsqBjTqaO73rwR4PmrYz1Ujz1OFneCs/\nImXi\r\n=/E+V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZjXY5NSKPcvx6DzHocivAhJsyY9FbdOvMa0BxulhhhgIgdyDVg+k3OkcId54KPN+3P/mGLqEa5QZrOzlKdhDMRDw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601940838-bb5907ac.0_1601940957929_0.3103802177545447"},"_hasShrinkwrap":false},"2.19.1-next-1601946383-bb5907ac.0":{"name":"@xdn/core","version":"2.19.1-next-1601946383-bb5907ac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601946383-bb5907ac.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-GHp1HQRfYExubWi/iENRjESj3TZeEjsCa2jTvOgdhcSybanDwAFMkHa/JavTXdTr1ly29KCBZ71UK/5XlRWH+w==","shasum":"384963979d0bceeb99603fbf8369969b858cdce8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601946383-bb5907ac.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe8OACRA9TVsSAnZWagAAFGwP/1zaYk/chH9d7Qqv1e3F\nLRtwOAj3NEV4blOqayb7HOr6mxzSJCZsGVumrBCeiLqP6MKkyHBW3fIbNrRo\nhOzhI5SqBfoRb4J3+cxuIDQf5oOt+R0sSAQ+r3+htyWmt5WdeV3L+9OHBCD1\nGziCZMUCNfVBQOZLSsh/vRayq0xfkDXqXa0/AeCMtMMWmqx+P1VvUSG7h6L5\nvenw//tnoO7iqi0f+QBOfQOboQ+xKNoo41PEU+0NxZ9yyeykaRI1z8uOecRh\n1JQzq1NPHEm9Xx7PPhL6WDYdu5/f+AgThEAV0lpb1E/fI7ouVD0Sv//7jr0q\nrctW+/OPsnRxii10DsfwVJdhRqAzpmZZ7y7KFe1qHZ3kjADanaGRsgOVOy7r\nV+6jaqls2PreTD7vo577wfbhgC51TXrgQje7urG1m/hP/vU1XZ/GQKEwk3Su\nG9a30zAPhYrtCodxVQQtwAa38wwKqpNIvVwuC0h0QfguI+9TpF6sw/9RCfwS\neSkrZD3/tCNiTY55ruaF7fO33/xv+NQ5g8cpBqPXt/K+cBCDMvvmvWJhW1XR\nLYy/zo/RL95r5vRQTphz7cuOo7CmBV1uhp4YIiZHIyVdi9iyWi7B8Aij0p0n\no2LzW2slpDCmd5jQ2p4cAy9/IaomNVJPp/RCzJ9BOvjPk0YnRlo/v1x9OGfA\nISt3\r\n=gklJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIByaf0CUOZsJp921xO2g9auSgLvrrGKNLGWVlHrIrKKiAiEAmE/S3V2+4iPWnNaNaeFznX7Bl/ehL9sPAXznE8B9KHQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601946383-bb5907ac.0_1601946495947_0.4793198743462683"},"_hasShrinkwrap":false},"2.19.1-next-1601946950-44b0ca5d.0":{"name":"@xdn/core","version":"2.19.1-next-1601946950-44b0ca5d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601946950-44b0ca5d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-a9J8Ikr0Dj124K6/AKD4RERK0VkzwqFIXa0mj7rewcTTPn6EY+Nshti2ZBJSLiQisgQ3SNdd9m/PH7DiCivKtQ==","shasum":"c945c83d9d9916dfeb9a4667e7bf328a064ef2ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601946950-44b0ca5d.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe8W2CRA9TVsSAnZWagAAQoEP/iJjFfT3KF4AhYQW+5C7\npGZty9GLBERAYEkx97KDgR1GLYzlYcfDpPYt6bUAg+1x8kez5LFbU6zmv27h\nmAwtrN2fPuFQ04OMlg9yzSVbHDa3xVtLHlMFLx6qZjMBTf4RWjBS7tDJn2dj\nCJzR82Kfp6GFikj05HWRoJxUc2uhpfkIwPUS5nsX0DYvaJThIObtYatzliQc\n4saPhi/ow4sjcB2ONAycYIxeafPVCjbsYjzo+QWCBZMoskeVhpEAfsVF/gXS\n3cdnfDZjA+eX5AiByDaBKaWsHiYeCxXc+jNWddcsRUqJ0n6QRX6grJWuK6pI\nJcmK4qmpGNuilQSdidw2WRlDi/EXIbRPvynTVdl8LhV3MnDRsXuet0maK02b\nqSKFmSkywm2EjHVBlHIbQ/6Bua87Ouk4B8J/keozWO+hKoAKqiaOvVWrQv9e\nI37CTkLEv0hFGPqPsr2PLFcw2VqZ6ORMG/JTXAjaIb23u+hBvTCcOAXYAYsH\nQuRVRg1Wq1A72CMd1tdAvvHj3kCbjsNxPgIwGiA3pJ6AG42141+RvK6o033K\nY0lpBY4JEkJnH4+ZIIEw2awyYfKZQkVHvR8+SmzXF9XpDaGPd1l1z9cn462q\n+In7C/rRCbQlxm9ljLEnRM/jzzh1n+wi3Di8V2W0dV8LLJ/A0+6EOxlMLsBB\nAglZ\r\n=s4BF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHULPEuTyW2oDWLYlBxDZN59X0y8iNztjMOwqO2d9VPEAiASH9sI18ZnATNAXXzew5YSpXEnd2SWHub23KuvnrSOwA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601946950-44b0ca5d.0_1601947061561_0.584603588000949"},"_hasShrinkwrap":false},"2.19.1-next-1601948413-44b0ca5d.0":{"name":"@xdn/core","version":"2.19.1-next-1601948413-44b0ca5d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601948413-44b0ca5d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nKw1teIp4oMbDluznWL0S/0bYx0ZJM/rhdJhhx01ovCm2NDB+FqQBLiyYlb5ZVG1QyGr4VJYJ54IdY2G+C8n/A==","shasum":"6744f0363d5ed1933230ec810fc7cdf055ca6f41","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601948413-44b0ca5d.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfe8trCRA9TVsSAnZWagAAidgP/04UwY4s3uuK/lF59XbL\nyM/9jHhVD+7JV0Ec16UYAQsOWU7ezb3ICtjo6A2bT5kQrND5MphBJP1BHadr\nle8r4trLt1cQRJ6eMgkKeZDYHixE0Eoyubjauiu/Xv5MHfTSqkaLsS6wCdAP\nc4NPECCuNIaqLmOiEqLeVDCjXVEtGWlYavuCS5DQG4G1+3lPSlYxDmDp6qeD\ntfDZpYaSY17ITcFpe+TCa9FRpA/o/5rbpk7/0w/AeamIJpdjJumD6QIWxwn+\nZm9ZhIXCISAfnxMhvxQad/EbM4UPPfrrRpa/DswMAughcUFVkjD0dnJWZgr2\npOIzpe17V46KVQrxM+OHtz1g/tHMz7yUiPwPbgtlGg7AhFAvZltaHHCtDOFc\nbg9h73oIQPc+jQZrPHFBUMVcZTKMH9qMh1x3EFHa7gg5hy01++yc8R6lXPvp\nqVhFRy9bMSl/+oDkQoAoE9h03Zni3Jaf2HhqfONers7XcIW5TcXOTe+l7Jq7\nfSgkWPa1BLSk7CY0DEYC6r6nM/umYZLVSEZiAU9ckX3GHsLmUKYNxjjuPAwp\n+QFZyICCSBoGcedzk4/IwYUyIEQO63b+sGinuEsGDH66O/Z1e1pj9PJ4zLrA\nhPuG0Ooq9G1MD+6Yp8Ku8FPUqfgKANtdYe9BcnYQe6sNWYZTDgbI6wkDHEsl\n0/oV\r\n=WxiF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPX64aBFw8uA4hkIJOiPwOHdQpVOL82teuIS8/fqrOJAIhALRVVyMP11OdQf1biXNS7a/RTog+zhe98ssjgrtuazK+"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601948413-44b0ca5d.0_1601948523416_0.7949686407203111"},"_hasShrinkwrap":false},"2.19.1-next-1601982851-4a7f23c0.0":{"name":"@xdn/core","version":"2.19.1-next-1601982851-4a7f23c0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601982851-4a7f23c0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dXhqtY1EmQwcWGs9Ia64W6XusD0nxwkOq14WpMUzeA/0c9Hcyfd1WuxacvakjO/BT/qSWXwmh+J39Ie9dLQeDw==","shasum":"7d7c6113b15e697cbed8b17dbbdbebbadd331a4f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601982851-4a7f23c0.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffFHzCRA9TVsSAnZWagAAse8P/20lZu3/LS30GkuyyYZt\nMt3gv1wKy22LJ22TaJQkpTk/cPcJOp/pPQf/CrHHtwQcvdtVQxbwkd9mirPL\njXkUt9zuL8z4xJpFAj4Q2DtcXa4wTetflhCLzxVrmRDqowcqpfHki+tw477v\ngqP0+TRFuAC5hkSgCOXwB9T9k6wd8USDeEBOAFBST8gTU/g8VjUkAeR6/eVD\nHyhEgqwJbGctNxlKXLVq+uddL+Qo19vxxitkFWv4ew+c84lHolqUMV5wuXTe\n37q0wkPjRQOLWO5lzgEditG6jcnd1J0673IjIlPnKnTA1uKAqFfapgRwkfst\nAJD4rGfH5ktPKXpRJ49pXfRwu61dBFkGOMdKbaUBObfezxJNROwItqV+dTVd\nRR9uIm8Qvkmom0qu/7MlhWByFPjqj43Cm9gSRULQ2Xygu+YR4lVOUFN5PDJo\nq+8eyJheaXhQ1jckH6IkziLE7wub6m4jAGNhgY05vP3annDBVRY8qDd6Iquf\nQoGpQsNbR1zWSChVkAYzlFqTwf73R9YjOJ+nparWoh55fGkX6P7PN7x0Ew5s\nqCb8gHRjbKlYCUUJY8RMp3S79MCUPQM8OYpg8Q6oCD7TWrHsE6FqcD8jL1XY\nMUD4KRqwmhlFz/vIJYJl1B+JPSwHd72vQwGOKFapHoLnRZYffhlbcfC/71KN\n+kL4\r\n=0lCI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJPQmIeNBjQYhcCgJ6Jy+aZs4PNt5C2PYq4YmTICcKygIhAKlA2Wy2KeANf+9GdWFhN5GcGkLJaC5PyiwEutGceooR"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601982851-4a7f23c0.0_1601982963264_0.5096539960911981"},"_hasShrinkwrap":false},"2.19.1-next-1601983459-5507edb4.0":{"name":"@xdn/core","version":"2.19.1-next-1601983459-5507edb4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601983459-5507edb4.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wq8Jokl3lrTCR9EFCFplFbh9Wr+a69kDMiIH609WjrLr/0wb9MvMJVznXL2I5gr9QBcjGAIoFoB8t2HRaRWFiQ==","shasum":"78da01ae0a25dd90b18d75bcfdcb28fd5f07008f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601983459-5507edb4.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffFRvCRA9TVsSAnZWagAAx3oP/0jCA4E5z5POq/q4jyb+\ns/mXL32JBbmf9TnYQPKfldI4LZE7p0RxUEzU1hSXvF/TMKcbfAlncctkDJi8\n2pKMtMJnn0dUIeI5NcxGqv99HVq+C9krvus/L9P27KF+I4XWKbHfW+12IGon\nTxdIEH6TWMBxfo+d2BK4cuXwekSO5YFrXycwM/i2Ck1LOOZPQP3Q7hpbqVAg\nOsxA7SpShKkoIrv95sgmakCn4nl0U3L4V814kfMIrCrbZyd6ibToO8/EFqJi\nbul1Kkby2+Qy+Mdvj81VnwaX6mB7qi+X3nEKTIsR4XdWf05qjGeWaUmZ6fg7\nEzyLeaZzstxTbXgrkYVbWtTAFcEOQoFuWxqrRNRYmqf2IpaHpQhdJpFP5W+Q\nhABIOJEfAxVGqEoYrgcF72ABVV2YAa1GDwD29KaORU7CQMnYzxCvGIIjiu7f\ny3oh7/qT/3C41oQqWmlWfEbcDsiKq2TMSm/x7YtHOcE7PSqTKSBM+elYM3SB\nRIz/Gll8Phy3uJVNynCKZCG54yNyQb4XG3D5PK+Dw5gBEWZEmFVSLhHbklt+\nAg8WT6yGN6dt6efp3StUFzvIsJAQhn9+cnK52h2xiGssVzay3oaETXH5ZMy9\nnU3i1LoNma3WFr3ELxpmc0IAOxiGUa+yqsFXrjAbia/iA6s4XrmW0MlIrmX8\npS/+\r\n=mjS0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDG4hrAoMrJWM42S19ZArIaVpAb1et/gbLTI0HnnLDIYAiEA7BXIYSrAeM2Sj8UBCuzYSUuCuWEYUedv3rXJrkWYIVQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601983459-5507edb4.0_1601983599265_0.04623980458834387"},"_hasShrinkwrap":false},"2.9.1-next-1601983659-55890db0.0":{"name":"@xdn/core","version":"2.9.1-next-1601983659-55890db0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601983659-55890db0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Exyf4LmewSiXao0k4oU03S9q7iFsh9a8KyX0zPP4h0Sk94h3gnRyTvK79jDLtvmD5NlQDKks+TXghSWq+w0zDQ==","shasum":"2af36e449226d9b0fd83f28f845b54e0f3b2295a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601983659-55890db0.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffFUKCRA9TVsSAnZWagAAF+wP/3S30W/OlpOl3C1amWKu\nlGEvr+56ZC76n7YpyqZczNKuwu8Jppq/ldYUIauQ8WY5hcfkoRF/tpkpiUht\nRQmksgRVkkY+XnH/f97e6DdTIz9YpnbFNYUkBAq/fKEPhHlCGfzXT8zXtK5l\nSX6Be0b5U7umYPskiO39AhXHNtK8cE/6wL5Of/SCefrQmGDy0S7tX+cle9SI\nugHMMSh6q6vlCkajWYbM4Czeb6xUnxPLri+ENDcQppU7C1vztP+xdfn3ztXT\n8Aeks8GXjPN1/+XkaU0iBEWO2LFfxol2yeeEdfAfZQg4JWbo+nI0Kk/PsDTJ\neyhgB6eR4M+DhaBoq58MM+MxNLaXYowlIA5j1OYCQoEH8dDexbqd+YdzVR02\nedJA7LBzxnlUORmW2q077l8Iy5x7cnRqv7rH5Jzkb8G1gPhRaLO/zx7L+O8J\n0lxuLBhiYGyJSFfnOx4zEV1YYzsIgw+V76IM84+C5mNcHipmlGSlwcGi1Rsj\nVj6MEZMuVzFsoMja61VN+FOLOsK8p18CBA+PCqVjytkdZSbaoeXSCVzKxMTK\nfGTDTkYfHWiIfU8ukMfWsig8euA8hlozho412ZtwRwIIEAX9iTCWFck52K6V\npIiZDNa4MT0GTfbd1+b5/8CToZS924dL8OSf4dY4uTkCt5YZKy97XmVE4R1q\ncKQd\r\n=9ZgO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGmDrpmFSGW/Bsy9enmry9Y3XeZL0e5miyJ/Qdix7ApIAiBOsrqzZjV4VDbqIJI+QRMMF1FJxp8kSD8GeGpGua84Lw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601983659-55890db0.0_1601983754321_0.4183598346962518"},"_hasShrinkwrap":false},"2.19.1-next-1601985536-06dd7f78.0":{"name":"@xdn/core","version":"2.19.1-next-1601985536-06dd7f78.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601985536-06dd7f78.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WVa9DHrMYU9v90QA+BCR4JgIARmLmU7gAHjQMF6yQpebA3g5rwrqP52nGXAs0IZh9BWTlmdscuFa9UuLcfwtMA==","shasum":"b0264ba34418478395cfaf1ac2094d6fdae9e595","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601985536-06dd7f78.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffFxtCRA9TVsSAnZWagAAJiEP/2DdoN264PC5S9c1p0Se\np/3Rh73gM7LpHs9jq5WzLxCV809dFubhUpxUyk4UJrriNDaYYVrCkgxUWbR+\nBDyoP+IECh63f2mH1yNPaHaR1OH6ebT050qdt/4AvcS+o4JUmh5pa//a4ZDT\ndkDqezlg2X5JTWmXOvvIKesa+R0t1D/MdVxA8KhzJ6s+WGRzrHiigXRvP4H4\nd7cxRbRP5qGByMmk3VDkanLz3GVBJ8AMP7buFZJK2dscc120BClEG/QShAtz\nRpFaI3ogsn0hxYH3Tktem3zDgBUqhvhp1cbm9NCbgR47Jm/pPBUtIHE9mV3Q\nZFJEjyBN3I7WZKfiP92p5nX8OMsHLcMVSqQRv94VGHeU/0mfMVlcoc+edRv6\nSJfbb1XbdO3kTRm6uzQWR1/9ewalxEJnqezwCZ82tZ/fZFplqBoFKLucyWk3\nH94wVGmLKB2fosQWPqjfJv9OWDWO9raFkghvJ1b02n5JqofpBan/gAA8l1zS\nMkuAj4aRwenjUmqLtfD6ISLMG3bOCDr532rlftMpZ+E1xpEZfkLS0N03qLVI\nGvHim5Wir6mo3w6oCd6F+sJudWaprQ2l47Zmz/7Z160S5wFNkY61zVGMhd50\nFcWX5FhoX1RlK1kjx3MRfRG1DZ2RvSVvvqv1D6iOcQVOOW71xuiZOmzTKkJu\n4sFo\r\n=9gaz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbJ0/KOGkGg45iLbgaG/iTDwjwXzVrXyRylCath6crNQIgJXpwxwfZaeQ3/OXUuPgkSOkNkHmO9E8n8psKwFPFwec="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601985536-06dd7f78.0_1601985645169_0.5321032449142864"},"_hasShrinkwrap":false},"2.19.1-next-1601986007-7a705d6d.0":{"name":"@xdn/core","version":"2.19.1-next-1601986007-7a705d6d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601986007-7a705d6d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-kV6CgPIbkiLgnhG9OFRRzu7wd7hzuXGbw3G8QYodZu12EoWo+AOVb1XyCgaN9I+5a6yYHqaBKoGVJGO2ZUOS5w==","shasum":"dbd67ec80a36da357828237222f74dddb44357b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601986007-7a705d6d.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffF5KCRA9TVsSAnZWagAAdSUP/jcFXYfkczO+Jy9T5g+8\nR7ebzb/66uImbJH+yo61WjZ27bBQVCho9rNKed48vc1VvJiXSzk7XTBMrtFg\nSw+JpZXNpvp+OHzgclBa7UIjKCiRfkJ9xlkVVRZ6ek0pH9D6YaePOFEbHY9f\nY1KvX0YZ0m2CXGUPJb0FHQmW9Ltk5iMa0ptbMA0cMkvqoMqsdcfyuP/hrAwG\nSx7K9ins4vjMQz7H9T1fFBFM77FEiISajDxNin70xI1pQqL3WXE4+hsN/NUJ\nVCGHoM+YqV7eVB492PrCLTtVD0FjKGYcsXIIyzeF9t5bRyKjnObxSJoLO/7W\n1m1t+sbZ8/XT2SpAriWWXLkNXW57lGV0khszixyHO+7EkNj0WqB6PEsnNUiJ\n+xSa0DzmE/XLWpZxAs0JSjlO7HUWSmjjzEQKttdxzrTg9TOJoL2t1qd8uSwI\nOFtEboi4MeMXcmdcit+qYR15cGyTftng9obpqyvL73IkEv5Aqgsbfq6DIRVx\neMi/E/fkuQ1miWBQT1K4rpdLjav2uAW6YdOEcKSRIs08TXNNLdWytyT5z6Tu\nDHyPNnBbtRZGeF12bcMN3PqtNQWBcW2QWrN4MEPjNkB3JEupLwZTW51eIo24\n6mYTUAOVFkns5pwh+WtcgvAa3vvGwVqjRitkbkmgPhUNjiJ2OQX8nGZbFwzT\n28zt\r\n=T+Rg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDaOkZZAHISw8qXXKYGGrq9JrFCQt31EMcz+2obH13ekAiA07UOSR+Vydo9NxIwuBSIeammmAQtYcVGOa9ULoDOldg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601986007-7a705d6d.0_1601986122202_0.618383640307226"},"_hasShrinkwrap":false},"2.19.1-next-1601986850-7a705d6d.0":{"name":"@xdn/core","version":"2.19.1-next-1601986850-7a705d6d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601986850-7a705d6d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-2V+FV5seCU//ob8DyasuStNqvqvSs/C4L/2UfE1HSC3HvgqkBKuddS8N3Zvuq2Lb5z3wJcFdgiUuuF775WC8SA==","shasum":"239b5bb2fd6630463738281c5f560f10d148ae6c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601986850-7a705d6d.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffGGcCRA9TVsSAnZWagAA/4gP/1wTzKtVi2aloVjE5aMp\nVX5Dq5x6xl0NC3HDVSJHHuIu/csV2xXlPk/hP3frkkPiEKC0Err0mdtPmIJy\nFoHpJmUEfJuAB10R4QrEkSrJuRXetXkxcYilTF25vWHq7u1tbY+itF5j0C9N\nw/i4vXVvMpQNCGQo2wVNUsNmSI+DNsI4tUHdN1W/Z8OeFtCoGCEZ+dVUSr8z\nmcPCgWhGhjrn4NfxaoS3XpJZK8FWpY7fv+GSEJlRhFPeS0KqDBH2bA46/EEw\nElakNOswSp/oWP4eBoDuZtdiMx8qtPEiuUVao21oZvY3/yuDf/Y3Kjhm4uZC\n500CmynsCZufmxI9np9fS+TjbnQOGuar/fteQbKQpjrH6nbrF1qEvPdf6cjj\nJBc0L9cHlgXgbQf1K53mBsHIPc3jPm0uqrLSRdMLUa912hwac9IPfshBbNyf\nPoatEiiW86/PRShGA09T+v7WLsiThUMp/Oez2xSI+ai+V8dw643Dy2ZrldPy\ntFPdHzTAmBNnX+M8qpMEPbvwv9eNkmk7sjBxiYAZonNyApEE/aLu2Tpkc+XM\nSEBoXhsEH5qXm0kDoF8idkwCKmwFKrPpsoq4ATJ/PkU5oNNSixDPStBW+RZH\n+lfAzX2eWvBRQ4NJCgeMLMy1pnKcDdXQCI/rgCfOEEdhfRmuxqXSwBir+92c\nl28R\r\n=p7nx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDt9EnPCvef93BkyURXKyHZJTTxAJJoVDAnTIaqoUZh2gIgfUpy9dDCp7HFIoq2X4X7AAoaRrwIHhV8JskCDhVyMnQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601986850-7a705d6d.0_1601986972261_0.0009696905164597869"},"_hasShrinkwrap":false},"2.19.1-next-1601988344-7a705d6d.0":{"name":"@xdn/core","version":"2.19.1-next-1601988344-7a705d6d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601988344-7a705d6d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-oxGrhuVXRfBrHJbKH3rDWv3DsKQWx029T/A6hFwREh+X7tNLwkN6eW8CQcMuc+EJsyuDcrXzHJPMDd+uNAFEAA==","shasum":"5478108dd5c1f09fa89312b62d99e867da87a01e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601988344-7a705d6d.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffGdjCRA9TVsSAnZWagAA+cwQAJFzohyOfM83sVCeQ31C\nhic797HHtk64SWLkZ9rISlsfX+knToUxBXlZ1NfPIAvWc7OUP6KAsGrk8uHq\nMeV8iVuOtUZnN2d3beflnhDkFTRX2mbtQKZrqbgCTaGQoGnCq86sk2/fjM7G\nXs5YqbzB/UWZeGdsgG6DA2QaLTrlsf/FSZY06nyGO2Nci3KEg4EMSLivgnjx\nXqEzs7KALrJFOru6ftyRbTOKBC4VuN3fjiiUXCPiux8Epe8PQetYCkwiz6/G\nUo0f8Tv0OHu3AvtMij6zz7r/2jj0VGy/wNtodjXQkMnTs9zrxKvyOSj0JPZV\nXxrbHHB0ZvYQuIk0MJuNE10A5H/Ls38tUql5jY4t6ruGpLr7zMnA3Bnk/iIR\ntbonHnKgTtA8OgwfQ81mZVToeRgDrkRJtaYLaPr0YtbCqc+TFBuSkJE+pbLi\note8i0BMW+QG72zMC/OlAKxJqJh5p/q++XcMYD7R0SWOhHo4c7tCm1wusPgg\n2jgomRIT10mua4Jl/diq7J2V8B3NyLu54fDSUl1U2PyQH78hXihwkl1tIuMT\nN+139KPks7c8sOhaJegGOWDdKtJhHcOv9XlqlSdS9q4dVuZpNKmaArKUCfy3\nUMYGhl0iGZSEFjKpm/ZA9AgYeM6Ky71XEjCfW/YMgJWhvdQDUH8cTrQpmNHq\n6/xR\r\n=dXC1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEbNv7L+Ips4tq93teuWAAkiIuttQ83tnoJfeEhw1KO1AiEAkKSlMsIGIkiBRw8KnNzDrhad80FSUPje8ZXWAS3/u+g="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601988344-7a705d6d.0_1601988451399_0.7446043160580273"},"_hasShrinkwrap":false},"2.19.1-next-1601989075-ffc456b5.0":{"name":"@xdn/core","version":"2.19.1-next-1601989075-ffc456b5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601989075-ffc456b5.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lmzXCH/P4IkD8/aOAEJnqxX8x7mCXK0ZquW7cSEjLniosc7/qL8je+UQA7dxz/r6pvHkL3AHuKpLZiE3XNPPuQ==","shasum":"9ec9f8216e0ca35b73fd0f40016053b624c9d063","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601989075-ffc456b5.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffGpGCRA9TVsSAnZWagAA03IP/jAv4hAow6eOwVva8pdA\nEkA6nJol5DxZ3k6ivibbEgQ/lpvBzwfHd1xD0F54v22Z6ZQDp8WT4TQXDkWP\nMrb0sQwePFi+jd7yG4XEo5AKVrFJtdYk6bdedxRF5a4YhQjLGXE0YFy8kgEh\nfAF54SUarTF1D9bPI27iXmRuE1cv2zoGaqm5hQC36iOfsrDGXjbmsO32UsVn\nYDS8WKzJryWbvtHGRNhUMuVXRGvWXcw6PjXvRWRgdAjLitzOSW4PzIB+8Aip\nxQj5HNt1cKBhYYV3V2Yyc3pWUTQuteVsG6RZG1loImcF1B0OZZx0zmSD1wWA\natR6dJdFCljGRrumFOWBn14R3H/VW2uhDmDfz1Xx0JhYpAuZSG4EEFdpsYHu\n6r/Hi1wh8Xn8sBaDBgLPGAZ2nM3BxjmP/MQzs1VGmjMSNaQjt4nt87EV899i\naCetRUMkzD7PTkKSUiW30TbheubVo/qDrBDJGAWfnyZkE76AJrGx0uGDigZ+\nJ3kltrI4RhpyXforxHxcVoV3lbjXU/F0k1QbhUW0J+y7WzYnW+lFapXhj61X\nMLKT442xT+VpzLkO9NtySJw4HJC2/l2t9zj+kLoBjUfFCRHjyB5xwJk7Ar7A\n/nuksyWJW2ahKsWjpGxQr0q0lD+5xQs8N5dSPl6RwLnzNv9gmLL5kCUZ5Ztj\nnMLl\r\n=aXjd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICNLu8OoQ38P1Aelkr/VlUXJsqmejkf9T1RdrjozJ77RAiEAnz6+Xuk9/J80sMqaoEqFC2HwUBYkan9o5LEKvBcr+ac="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601989075-ffc456b5.0_1601989189288_0.13313111712637404"},"_hasShrinkwrap":false},"2.19.1-next-1601989128-bc4f73e6.0":{"name":"@xdn/core","version":"2.19.1-next-1601989128-bc4f73e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601989128-bc4f73e6.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-o32pCZ7kjaubT8hdVxnd598BHibQ6InwxGq1eE9w152rsDxsYYeDhxni6fJ7i8uZ0YmR7SKt08pON03ynr1UoQ==","shasum":"40749e35a72a417acc62d4cf844124d1b75de439","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601989128-bc4f73e6.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffGpzCRA9TVsSAnZWagAA+9EP/R+4syjLkcpOYb1jMozI\n52dD1EJJ/QwwieBPHn5bfX9VSMbGBI+rTqeYZcp8HyRDIK4eiygXbGM7DqbC\nb02XjEovKlsMmZSQuPi9Cl0d6QqjTkDh0d1MRnpaz4CbUA6Tyt6vyrdzwnmw\nJro1sG7YFVLhVXOJa4xGos/JsxZUfQX9+iDaJqDqUx2bTkDvMtGl4fvZkihL\nq5kkYIkQ1L5wtUwjCiBNAN4440LJyg8+C/s0QyiGb4L3thVedDGs4VXDho+B\n/mQgW87fiZuYGvgCsfGB3gnX73w/UqM1melbYHQXioHbUh6lo6Gr1mzW8wh9\nNeIfH6eGFgBsphyp3YaGnGgNzMlPP9nA4o/XJFTvmmHfnA8hNLLwTojbJ3rM\niodPem2eMmzzxbDZ1Z+IwXEZCzQ/2By26ReTJVu6kEFllVOf8s45swYgVvs8\nyyWu6FKwUh07avvXjXplzDggwrpO7wT9DTAg019/TK3tqEnuHxQYcnEaPTYP\nDk8gjdGuzfeeuS4wlkAeSry9aG/ZwUC4EIlEOEoRxGqLX7CZ2IyrjHNwxy07\nCCXDSvtXOy6FKoaaVka5B9iELgtPU7Buy+WddCp6yYBytYyO/NZ+xohDeHeS\nwIVkB3WwQAW+Xif3jzfHKfKZBJuHuBYD+MKa/FlIbE0axofeW6K+2ASa0vr4\nzwQF\r\n=PhKK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAInyVMhPWnS+iKQkMMUeNVaSnL0rh0fU8Iao4gLOoudAiEA4Ang/9oUI/9DF8CzJqlxKl4lkH6r5Q1cp5oe13idpHM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601989128-bc4f73e6.0_1601989234667_0.7149133670054524"},"_hasShrinkwrap":false},"2.19.1-next-1601989497-57cb079f.0":{"name":"@xdn/core","version":"2.19.1-next-1601989497-57cb079f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601989497-57cb079f.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dln0Jh/lOC+tG2Xc5aNNnX7hLtuNVrGR0MBQ9B/ymzsrhkoi/lOgGu9GVRI8CzI4rp6z7vuSwEn2XrliFAua1w==","shasum":"e84cf641261c3a1ab186017da65cc39e6acbf76f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601989497-57cb079f.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffGvjCRA9TVsSAnZWagAAOFoP/jATRxjfC2FY1ApeatkU\nd2VqiRnyW71KdJ/lnnz/y05C83+IJXcKl94LW0+ZXbhJun921QOJomYho0Zh\nSRclBB0z0p7NmUVuLFXppvvdfL+7O5gxzFxnLhyRqJf9W1du6zn3KHXAN6oS\ncNORXU959vcH34bPi3n1jaklCDDzDFU3VDpDqI/kWHTx4t4JjXX72UOMU6TO\nwifQt0UUylNfmdoCvYMNFD793bAz/K1bDWHy/QHxpKfgk1ZDRpJCYOD8ZJ3a\nqLNBgyuPpaRXrwZYgewHOA1WLSBfKIUgrw99ICxMX6idFzCfWPfqsQEuwmcn\no4rAz8tyUHE8aMbrq988qxm4OEC6ZlMQi3rEweHNZGx6JHVNzT/X9YalNIOt\nUZo3fvQ1G+XUeb7Sau7306ehVDXwngB7yiiEDOcVaCc4VGcsNPfFEwM/ghKk\nUL6YBQ0ZehJOLhvnD3VQPJmINcYUv/tn4UZkUIpTDCGNixshinj4YQKdLRr+\nOX9SnXih5XblAZ9diAaulzNlI+hHQAm1OtPMsNNV4wO7CoeppNUnDegXLBSy\nsLZLuwKlVH+kVWG3nZwkfAnoGzDD+1HD/Z1M2lyOJLh0O9ZZXwjD3ekhY/wo\nNLUrgDfherGDjS7Ih5iZUbmDWve8ej66z2sA0iXz6ci9FljYBKva4ORIR2ct\n9vl1\r\n=FnyL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFv+5Uh6biayqC/8l27LbHaNiqmwm3VWTOcArDPlDQmyAiBmjGtEHqW5Ttf8/Lo98BIFAv26T/7cC2KebXAxIRkfzw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601989497-57cb079f.0_1601989602910_0.7391492854585409"},"_hasShrinkwrap":false},"2.19.1-next-1601989496-46fa8fe0.0":{"name":"@xdn/core","version":"2.19.1-next-1601989496-46fa8fe0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601989496-46fa8fe0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-JqgqZ6N11hELcuw1B7E5Qcf6iIIlesHqMr0/wN4rkdLUAhb+H1yq87NDid1ftOSQegsmMnf27lgXrxM7mh8MJg==","shasum":"8b4b3d1a2ff7e549bebd9aa143fdc0cb8cd16c4d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601989496-46fa8fe0.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffGv7CRA9TVsSAnZWagAA2scP/2IYaC/h7zpxnWy4Wgx5\nUkLwzBnLClQu5jiOdA/4wtQsXYtbjPWJugirWosC/8RFUiM+VLF3Algx5A5n\nMd+Ju5Eb5EFNHvtsxARaJK36xqacqBBSVQ0KmQld6yFWF9+SJBrl+ObTg592\nGCrHerLKRAMoluJcfik8EQBRNgOp/bel4z+w/g9gS/HWcP2KxCwqR+cUGKK3\nczoR2GVZ/ui/MW4tPqgmyqECpfNcvMC0QQfWRyFUeX7Rwxt3KWx6dIe2WEDU\nxFriR71QwVL9dHm53uyVY2lduJ0ZLbPIsxNdhD+Dnku2ll2vW4H6nuZ+Ti94\ne4hW8ge1UqsSU1jTHtiW1EIILrX4+vupplZXelMSTfm/8gPx0rUl6rg4QBLs\nF8xpPnIxSTcnJf8Bsk3DbW+btc3RBsz4oTF0j/kuPbq4f/vIfb4T8/pCJzE1\nH5kyR49D2Z0OFkuje7jpLaAMIf5A1M5TiVMZAtkmZEUKg26yo8uOX5aAQZnB\nyWgjFT79InZmxeuN5ZQqqclbm/aNwzXLhxY5FjiOudo9ZHYXPP6bFWLEoXbL\nfo4iz15PHRaJpuzEfex07N7OVTDcYtEjtqCo7+jaToChuDx+KcWIDo/4G0E/\nFgJ1HnhXKjLT2yqp9uW/OdbAuhdSpnIx3dltFLhHLjKMBcXWR4PumDK3PFKR\nIYE8\r\n=5oO3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDirrIIZJmy0f9q3dQht/SQDZLAmWvJABE9PpzzJCYkegIhAJwwABrGwtRBcibM2DeeiW2gqjrCOqNQuk14eMR+vrrC"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601989496-46fa8fe0.0_1601989626450_0.017225889836048447"},"_hasShrinkwrap":false},"2.19.1-next-1601989899-a77eee75.0":{"name":"@xdn/core","version":"2.19.1-next-1601989899-a77eee75.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601989899-a77eee75.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MZgAPMy8lNRU63/UDSHhY0o6V8qfJy5sd7k0y8qCEqUFk/DChXZpYRsK40Q4w3XUdPKC4o3BPRrYR8Hg+pEQ3w==","shasum":"231956913f0e358a083b17f56c8c3834bdef49aa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601989899-a77eee75.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffG19CRA9TVsSAnZWagAA2tcP/ir3moxGFeWIR6yDRIwZ\nf2a0tj8KZIaApzTgkQIQqgY7stWc8yPc+RUC1kF+9+J8MReTeeFH3lE8FRUI\nYCCKljjcsjtodCKjChr2CpdfoZTpr/SkUutK1EZF7gRWAJsKtBWCuW2llXty\nm83GQxTAp/SdQEAsalPeG9tuQaUpUniGl7EAYrS+tPN75zYSpj3g4cNl0Cxv\nw/eTmq287MKnTc9pwyrsf3lhF0L0X1TWwjurmUv21oo+Tmqh2+2zIi7z0a3o\natjLg64ilK6GrpG/1bFl4aPYjlgQCZ5VxTqybOugFlybUbk/lRyp7Rx3bMgy\nj12w0UJpdDmbe/VnXKHhYL91lJ6pHSPcSSq8DKAbATUixxCs5y+di611Kkfj\n4ayBFjzRterK0L3u/Kj6YTmlzG6AWzPAu5+JF2O4DkHwJCVvpfCxMminjRWP\nvnxuhBzbhY7q2/zr2hHloKjUQnggrTUUs9tPZr6e7WL0Vc1DFDTJsH6ul4IU\nj89MKDa5gMi7846cbfA+1aukC40OEH/hoYleAvMX966LQ5yhMLXMcSbbLy6h\nWbpJxrHw1lrCXhgSq1IB7SNRsOx6BYe5SwY/zUVDni0ROE3XSxN40JeUrEGa\n2tPdvfMPHCFYNlBqXl4ofQXFUfsp+T6/BfdRP/utOFypt7Idn9EqRrER+xxE\nRqzf\r\n=rRqH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF4AOub81QY7bj2Nj9+CyNs6CRFkqiBQv9Wn7PuGzfGKAiArt17e8NKgv6y0NSCP+fBt7lmJ6ZE58cTGSSC/fQffuQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601989899-a77eee75.0_1601990012674_0.8878434339088426"},"_hasShrinkwrap":false},"2.19.1-next-1601990261-c880378f.0":{"name":"@xdn/core","version":"2.19.1-next-1601990261-c880378f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.19.1-next-1601990261-c880378f.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WumLHRMl7ZwVj0hO8G7g9Q5AXCqxLINI8dCcO4BNUrdr3U/+T3DRfjm9Cx94WX8QPRdO90ubyF9URCcissu0rg==","shasum":"9a4ada15bd19c7add8c6bcac435d109f582b0553","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.19.1-next-1601990261-c880378f.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffG7aCRA9TVsSAnZWagAAccIP/ichEkqQ1VnQr1AEhb79\nZWq1i+Q261uZ6G3Zt2fZ676shi3zLcQpKYlwkSnGyYozZd6094tUDqMFi3Lr\njgOL1eJ59o4m0bDfWVfo8jJw7OKiOKGBTVs7rXd9F5DkllRWcLIq7LR+p12G\n4MQT0+fBhMCzbYpyFh26mZSg6U5NDMVF9Dp8A2iwWccfEKRNG47Jc/slYM9d\nNhEp2B5dhKTgjOAHV62T3qaYeVgQQ0zztBTaMyBUSpKH2O0RcSsMexhc9QV8\nSGanOQn5eDVqiXhc+m5ZTJb3YYQ8uDOFocV8YNhRVFXqfb33JunmBL0AkJR5\n4j5Rcwcnm6RSN0FrS0orPVsLe+bv+sdoo4YIUbXl5yYNfH8e1fQJJYIQZ7up\n+Qoqp65bRF+p1xCd1QN1OsSAjS7sXlKYv/XJHMBaMffV0TlprMU1qs+78nGW\nS7J2MMF7hmNEEnw0V4547roczF7avuUBYinpwWoG0qEVx5QX/pWotPJ35QAI\nK14EaNjvTYEPcAywDgag7kfbiMsJ59lYmBEtBv3ecsEyVaCLfGNOQAY55hPc\nxVnb1RtdE/xiT8VknCsB4P+pszwFS0LzoA/lkSgmdm43VhTt5eqV50fSQ5w6\nQugueqrllUuZYET+oSK99SIQXnDhFKSfPn86NYK0XihKMRXCmW3JScKipIHh\ntbKa\r\n=+ZWV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHcZpUtrHUx66nCWqpcR4v7kYWhvwIZjuQu+Vd7cMztiAiEAqf5LCvgmv6NVmLzbVCrKRQpGkY0a9aIStHGtnr0iRdA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.19.1-next-1601990261-c880378f.0_1601990362105_0.15829883054987137"},"_hasShrinkwrap":false},"2.20.1-next-1601992202-a2ad1594.0":{"name":"@xdn/core","version":"2.20.1-next-1601992202-a2ad1594.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.1-next-1601992202-a2ad1594.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VDuMvi+GshrF/lSc/4SLRrFI5x2c9mJGrbgWUkNoEl+S29a70flyEMWUvLzgGZuttOSpr9eOqg+GrFZM/6SaTQ==","shasum":"b0b33c0d4452d58a4a73532eaf5624f96183c436","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.1-next-1601992202-a2ad1594.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffHZsCRA9TVsSAnZWagAAk6oP/3RI7832Iid3ISLAZG7u\nfw+xnAb49j8F0TNRHaKv6cQg9yVNp2NJxesP16eZ2DWLIZff1pcNzE7mA6uT\nR3E92XAG+FvUEpTSLWSYcnTkb0inQqMnR+uIB1IME9OD8MtcCcVH4rXJNgxR\n+oCCl/9aKMnTiyItVw6a+hCCTdR31oy2hd+my+WdwUwfBnhvDq+OPD5N5g+0\nccHvqOSYfLIo9PlWtOBK7ouHxHPDxcT4TryqZvT/UmutKJRWcoFvkIqO42qg\nkmN61CgL/+VM8ClWf1UzNxqtjlrD+j1cgFd9uPo3Bnq+fPyuhLQ/to7b5An3\n+NShYT+HOCSRlYbm0J0pCAeN578b5bzWoWYXGYeX12QJRwOXY1egQr606JR/\nEPtGwjYs9STWLbm+0m3z26jGsMZUIGSqg9GxAnan7gCuPLUxj7+O5cuRpUs0\nAgKVg1cVj7vw65+5VV0Nbq6BUto8M5qXlKt0/p103PV4AqCVzppcwJKwrGvT\noY99mXALHPptNjod74jQkY229xQU97kVgECMzI/VeYTNDIzD+lZZ5IP9BiXZ\n1KHltFMgMJe8t8rjUd6rTK9gjeulyPy1P4F9f3sQ3T/ah/mn0v+14bN4GI3+\nJ8Pka3APd/Nl6CApS45dh0NZls0CTg7C+EGz4nMY+pvVJ568pjnXtOufv+/8\n2XcJ\r\n=0/xV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFM1fh4OEH+N3V0JdwajcWHXFm4fJf3v11qAhloK6h1gIgOTxlAeFZIX0LEwh7dAB1mHjYwmp9x0kKVLxFDNli5AY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.1-next-1601992202-a2ad1594.0_1601992299684_0.5455843562933309"},"_hasShrinkwrap":false},"2.20.1-next-1601992481-0ee48b0f.0":{"name":"@xdn/core","version":"2.20.1-next-1601992481-0ee48b0f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.1-next-1601992481-0ee48b0f.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-oUQ8v+6x1dck+OGtakV06Jdw0uGwdKcpioYn1j1G0kZMJDoKEh/pow8yHF8OXUPcsfCic94gIkmMNaAPb4FyXQ==","shasum":"723cf9000193115e7da9824c997ecbc68153fbf9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.1-next-1601992481-0ee48b0f.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffHeVCRA9TVsSAnZWagAA1M0P/1V4vSheNJ99gGgCGYdH\nT0U/EVjgVOX2uN0yHl/Z5C1MeVsOmM9C0uDXipZ5WW52uw7q19iMvvWCcix3\nNd6NJBb6C0rt9i+KXyO6+Kgn0crGGUiKX3UPvNmkmIGtACBHCh9mwwRVSdqE\n9tkmnmCE2O4dpBvv/akVQ5nj27X1KeeQLNUk00gJPiMFJHwfYCxjoNvwMmql\ndsCKiXKvScI4W1Gno82mCJDxYzLWXSl6XMJfd24VocLALHVoyRM+Q/K136eT\ng3zve5OOigW69welbEeJcclataqgVlKj47dR5Qomn5c8WoNtRTQtU5K6GKNU\nGkUiEiY/4JDdiFnEpWIRa87NK9S0/PLx+JH5A26t8xHGqUlO24HnhR1hqseX\nifoY1N2iCYpsxkO4nM77voT192BZMv/YZQwaLQ1eIuPDxwKK2XzcMcsjp7fQ\nyirieXbSCRtkkcgo9UL9NWCBY4WtVqx5nGUL3Gk4Biz2qGMYN7bWijfDaK/A\nG2Y2xQrX3tmTw20LNrENygFZNjPhBb9knr0HPFUq87P5bE9owFy/LVeiA2Iw\nOGyKNyoRnCXhUfgIu6sIbQcRdNsSVGoWu4e/Qvr6mlBy4ayQ+0oFsfLpN0SZ\nfsXkfn7CghVIpVOuTGjiKuSw8ovZpd2NtCFDP2U8x6PCvGmaB3WpVz6qvpPe\nPNEg\r\n=+B34\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHTwFs5TisQjWmxzvgYjjb/s2IS/DFvn+geJz3XnwdqqAiEAjT+iTF73i48ttNMe575NsgbccuRknA6l6IwmFlLsBfw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.1-next-1601992481-0ee48b0f.0_1601992596759_0.5636318991400355"},"_hasShrinkwrap":false},"2.20.1-next-1601992902-a2ad1594.0":{"name":"@xdn/core","version":"2.20.1-next-1601992902-a2ad1594.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.1-next-1601992902-a2ad1594.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+xH4jJkLRli56pRXlANXxYqxrgFv9QDgmGNDzil2vHlqCpdDLds6DihkwVg/Vf4n+lRkBB5pIZc+CVwvb8IF0w==","shasum":"2eb7400956b39a9327a985187ddf19a0a82d4cbb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.1-next-1601992902-a2ad1594.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffHkqCRA9TVsSAnZWagAAqx4QAIZ6tuonNi7oZXUzVyzo\n7Xxaxtz253tR/BpJjfyuFxfQVI1UGv6USRY8TspDiCA4dhu5XbB8A4hEKayx\nUrSX3EJ7QO8S2n4LREconY0JYIOYla1ClsoC3oYtpagOC0S+bV+vvbZEE/3j\ntcaW4NYVL3r7I0D37gwnVQ4o6pvzPlLmT21ghvJYcLvoym6JwnnfZ6DOBFlr\n4j6g8L+1uLsfT2BOHDzSYL0gou0xMzqLgB849TVa7d+5gTIO1lLqHtWE4l0w\nYxujd8ZdDYolObSsi3q+kp2J0MefSGMDA3J85BN412WtxbKoZQBQEkW/RPn9\nOTW8L4AzCSebsd5RgYnss4Y8a3E1QS43vE3yJEc2Nk7GxNp9TIp/raSwb/jW\nR+YxSHsIpeZqBEyWTzL7pCpCD5P+wNKPhlvTBGGVaAZl+85jt89+f0MU5Fw3\n1sAsa1MCysm24/Yqimao77bqr0zidvra0kw76w2xR7u5gIJlCBKV3/bCA7Sc\n1FMZ06VCXhDZ3h9U+dp+T6broIvGEgnxqBfR4cvTrBnSd+cqYfBtux7H86KM\niVtU9l8ZHaXIrhZo/oSfItkF+WtahdcEX5AeKPKwRZngoi4jAfPybxZVWDih\nX/Zua0uFR6e76IGJP0siaLFnMhF3V6+XeN/0t1oTOzwXJb2tCdfq+mAwUdWL\nul11\r\n=ewPv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBzeK+NNlMJg2oOMAwhfEnRU53T+CLmm2m/FmFT5AncgIgeBNtwYhCUh1YOhfNJPAEcxPRRTDYoTUYuUvtJd0Mamo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.1-next-1601992902-a2ad1594.0_1601993001876_0.21337355865209617"},"_hasShrinkwrap":false},"2.9.1-next-1601993567-76db0ec0.0":{"name":"@xdn/core","version":"2.9.1-next-1601993567-76db0ec0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1601993567-76db0ec0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7hUrt6ZZ82GM1ZDX4W9Ad5t7S9JCOdOLzjArgDcUaF+zxOjt+8I8pnK29RRwggshvBpD6IQnBdXKFa82df8DyA==","shasum":"9059366366b167166bac72a8c9d23fe5d081798e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1601993567-76db0ec0.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffHuyCRA9TVsSAnZWagAAhdsP/2MrcWQHIYHTN2BwMm2J\n6bhwWJMcPB7y1raige2FDUkJOLtvnIk/6KJf8kdhmIC/JMbuTCBFs5cwszI+\nnwVJUx6lPglvx8xSc6fdzeKAEz7rbOXQO3hFYPm3EQl30zp9zAgJSNWi5y+F\nqf5rXu9xhqbaUZiTFgXnJXDq3gksDo1l6AWApNMI/BOOhxQVwL7rzUCajyQF\nc9TnM9my9eufT6s5I02nitcwdYEoqsWB01lViSg6bUBl/QxFyjNEQZD1NSUo\nM1p6EatYtrk6hahO2eQH/K03DkiD0isU+hthwoGXW+4iXc59ZbqpEX8XqwLM\ndZw/nhuiphpes7BabVp9vdRN+ANS5Bmnp1uC73hQZj2Bx1+lcXdZ/9qvsN1B\nOA59ANQ8KmeMxt7+dLTZb0kVDcha0G1hNp2zV1eBXRngSHj/ISu7E+iZFxzc\n7M/79EYfWV4C5WaESYyH24B4ZzF7S1K0YoyIRFV/End13Xngr8VF38ifSfOj\n0oEli7LGcWPfIkYGDIFfpTQbiq4qQ7jOqmKXxU5sFFrgiOUnAFo3ODCapce1\nh2oIkj6UjUwlamcUYZovP6e3E1tJ1N5q0nDV6YRjK/J/6Iq7OCAPl4QbVqJy\nHqzqaGDGyGyP5CiIFIF7KIA0k4ERfpWFSTfzS7chnsSIergc2+iq0pKdLGX0\n0++P\r\n=RLhs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1Ysl7es5bMdUz1zgr7c/JOkmYI+JYbnfiVIVb0BLgHAIgeDq0c/UBiD4PvNXHs6yyJmKGHsUEvCVimQAfURxpPqY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1601993567-76db0ec0.0_1601993649890_0.18798610822355255"},"_hasShrinkwrap":false},"2.20.1-next-1601994267-a2ad1594.0":{"name":"@xdn/core","version":"2.20.1-next-1601994267-a2ad1594.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.1-next-1601994267-a2ad1594.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tbnVhA+Ci1N2GSm+Z/YXiJKV9INWKReeUWn/DOT724GOCEi9XZOHIDfb14g6hAU+VSdYNVXVoXZC2TlIGQUxNQ==","shasum":"40df5213fb3a991f0972a1d92f1cdf67d77cce65","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.1-next-1601994267-a2ad1594.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffH59CRA9TVsSAnZWagAAOjEP/iWjWPzEFUHJkse5hueM\nva7jkW07uzHbmV4f/kfPTXdP3LtjcVDaEYA0IvyxsGOb6slnYHBPVQ1Mg1hk\nCH0P1vtYGDXyCtkNu+TQ/CO8Kn/VpBeRew9ceTzABu5ccwjN4N3gOpOAZfOr\nzU16pjEb3YzMrzj5f6ABt3x1Q4eWhdZyt2Aodh+Z4HODMsZ44zrHUliX+fKC\nl0L8oR8MnhPhMVpA/qyMmWRyLiEqvI5b7MPr3DQOz+Jeqn1kaHL1w9uoBJv3\n4V0y7qEU7/IHQwEZJlw3WXnxSnHHCgzVLWAIVMnQTQpMUACqmEL/cy0HBMHX\ndyuqptIqfhCNqAxAxZPi1GzkXtI9IpVI5ZsB/vLRiiv3AasmdCVx4OY2oDZE\nLJydo5u8dCJZ3btbYa1IOg1R0dDpIVupgoGUn1w+hFr7VVXUBMUx1MfCluLp\nDAFcskTo9SmbpvEkhFPPccn4FOO3UoHuIUPLguGbH0N/e9Uo1KuHKwMudWU9\ndR2KLKIHH2jec/FqI3tNOD6aoXArT2y8Z6QBG+nee8iCpl0njcTAvv3Ox6Yp\nDY/EWlXWB40qLHZLGqYO23x6E6SIdMgO96kNGCs97fnTTIurofu4SBt8jqwS\nVIPPxVMNtbOCzwDWk2KpZklHrjlhYHXJ8w5bB65wdA6DDy19hLvWwbDmdACp\na+XR\r\n=H22c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBLA1mw825XynC1HnS6dD8bubYEGepWx7LURBWJKfbVRAiEAnNkCQFAICt5XH15I795X+ov35zLxbHpHwwm0X8IxOL8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.1-next-1601994267-a2ad1594.0_1601994364892_0.988854013280769"},"_hasShrinkwrap":false},"2.20.1-next-1601995058-a2ad1594.0":{"name":"@xdn/core","version":"2.20.1-next-1601995058-a2ad1594.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.1-next-1601995058-a2ad1594.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VJpCAjq0xJQFOEBwIsFB1bi+WtrFvvSqnLS9aZDj3zQMfly7cUIODSzn8yY/Km6bry/+umLktY81LTqSWV+Ghg==","shasum":"6d2da752d712ef05cd311d99fd5507a799595b6f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.1-next-1601995058-a2ad1594.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffIGdCRA9TVsSAnZWagAAecAP/0VbGBUOh1AcpVQVari5\nMKFvftCKMTSKWdLrrlxBDFFtYxhSAAuq+C95Vkh3ylRG/1TDttn+XPUaMd03\nCYtwJx68pL1voTiHzm/LwI8nW4ZqPUwgkgJv+TQLGiaOsGM4z88T80mTsGW4\nw6AvYIZhiyo4UAjI2elHChJNqhCw3QY10/i8kt79IMUe10jl48A426gssdEk\nLztRFX4ZHDv5hx9TXbdfp+To+KsZLzBRk3izadtrHEo//2+iShFmDSqrL4am\nzTVDI+Q8sycyZ08GJZ2XlBHmaJGP4l9SRa/QVXXOeFDsWBAAs5tJqkKAAUWs\n++jsCUxwdkj24uXqSyxEyYil7HoqKwLeLQAuVgLXZ+ZZsGkvlDr8uCkp80Ki\n5pE0Q1dsj+KwQAFVDRHwZ563lb0HEtvFTaF2xvkjC9yRlq7AemdOFeDwDoAe\nU5l6WevPuYwI4zf3FGR4LDrJwFUODszdiM9OVWrKDNfPbCepd05Ne9tofNdk\n0wECA1vxKy39gvuipwz9i+itz1KekC/jiODMpcm+HMdAJkDDIYIkEJsGUamW\nSNlLkbD6m6ui6u9VMIhvYI+jbEOf7XBUp7FYn/CnX2E4y3xGvI1ZgJXe8UyR\n5ydrJevZbWmBtnSqXvfAzUOmU1sm/WlBHn6ZW9ykmKrqCbgjxrk19Q+qmjvH\nGO+6\r\n=cQbQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOKfj9xm8I2aZkB4YAEUXnXqqXhHYQL+WEsVSHSErfiAiAxv5cdXNA0ABAB2f2cZekoO1UoHSCughVYfMJSTI6VgA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.1-next-1601995058-a2ad1594.0_1601995164943_0.15666565013452072"},"_hasShrinkwrap":false},"2.20.0":{"name":"@xdn/core","version":"2.20.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qm1+zPcfrG2TO3Gy/VRuIWGUAjfDGdywhxOEXtr738DNmyz4BUvrtzoVuyjigToFu+K2dHsVpEZyxrIRm7hmuQ==","shasum":"8eb29e9ab70f43014870ad29834e959067cf46ef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.0.tgz","fileCount":157,"unpackedSize":577475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffIVDCRA9TVsSAnZWagAAt6oP/0vuPBmTkRTYKM0bSWjp\nmR5LiRYRZHnNYI0lKs0mzRDufSCLyw4a2AxnGFsa0gXGCYnHiImhFLZ4qzPW\nqBAt/ZQLnywwWk4J+r1uxQRTdlrWSKEQxX9GVWPXdsCtkY1ILpJEYHfx+lEP\nls66xg0goehZHzLLgo0hlrFQJGpW1p1hJDJYDzW1Bc5BI54tAtoEmqZFx9Xw\n9mXOB4hirAYk9FLW5U/CbxgXXA25XK2qM2+K8kF4RIdnyE9ebdioOLVIcW0/\nYZuzNETNWq1xn9WGaMnxH0pjntV3LtB+cF5n1Iov2PHjNfAbspDGiby5srZE\nOyQeC6fQQiP9ePUAw/0d12DM8H3z+wndl91GTwQ3MdvvcWUMSHpE7pQct5uc\nEbozo+ZsA15fXQBtQwLKAz165WL5MDoj/BveUsR8QoO1XeS6Z8vpczzyMy1o\nO/AoHeDY1F9sX7kRp8bChVGCTS+xJBdeMeGJSjSwM/X359Y866lShuObey+l\nLJqrmijEMOA6cXbza4EsQz4KiNP8/i7xEuO3i/wZQNbRJT0HPRXnZNemRn02\n3hq24G6w+ZSqO+o2/Ky3epkORE0MHuozECMQie6tqAJuI8dY2J+mqY0rKOC7\nR3vSX4gbJNYuLH5WQfpmiV5b/vn8/dlsebVxIoitVJaxDPEYIDjooqX4v6w+\nMkj3\r\n=W5rY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIESVla4nmVENNEfkp21l4DOMp4/YUxabjUesrhZbr245AiBUfSK35FCEymB3/pv5TdsTWU/wLWVnJ7mgUc+ZXPUFBA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.0_1601996098430_0.8585030621991496"},"_hasShrinkwrap":false},"2.20.1-next-1602002623-b8e599de.0":{"name":"@xdn/core","version":"2.20.1-next-1602002623-b8e599de.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.1-next-1602002623-b8e599de.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aAks8G2TlMI/B8lJvoQRj2vKTDZpH4yntj8eOWqVEQ3JyKk9ce0pEE6fT3m0QQLc03nZrRIKJMknKA9nIYR43g==","shasum":"32e2923bd4c5ad535ecc08ede13ae1f0eb82163f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.1-next-1602002623-b8e599de.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffJ8/CRA9TVsSAnZWagAAVTUP/jlsvsL5vRtLZU+mH5Rd\nfHcTKhwEdqfK6IUUCHUlSjzkY9d8NuGpUwzHiCgN85iIpDSKfFQKLU9HEZ/G\nlF9aqxtfBhyERwGjs+UKGQo2NjZq+javnBU3WEODvO1VmidEx5tG/bjrdSKZ\nY7sDv9aDUn15vdOU0FQE9Vo6qv5pOhFGT/SmGVWboEH7jdggTiGH5qa2rvni\n1i9YEMjWr2jlam+SchOXnvgmn/APRXxoTMDz+bLtL7lvkv5vPv5j6oVRmLHc\n82d0aBDkxxqzOotirT1kN4yf4yQLuWJoLkVCsVdc/rDjiLHV8JFQKBoGmwYq\ny6Hz2kN7ZWnWiGYeIXo4gwDUjCLSR6l+e0eotBhj/4evirhscq1zVOrW6Dt2\nC8CWTYa1QD+V8zOHTuYrfsl15qXI+1Ig4Nbma7m7nEwtSD1w/y4dOZnX/eP+\nQsLDIgbxchR95+GEeuJRlCKyWdeks/18vkBtB2m6Vs5xGeEm8+E3PJNRIumr\n7gI0IIWYVe39l76m3IYJCbVvd9U04LcQycm67XBFhBPduQd7HA1neTrhyEJz\n7xamhsDaaBjNtVQ6SYmI4GZSEOtZJZe2nEx+p+m/GgwXSpB3tOmoTu35lDU1\nMMWcm5F7Ds3r9UPpTYZfplSC7QPFuErNfb7/J1uTFYq7y4SKp3AcadTSsAkf\n5aqO\r\n=bJW5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERcElj9KE5vCPtGX+uEqOBrowZFEyrcAhV57VeR8cLaAiAn7qR1CU2WWQrSMy3i4dnnret1QfSoOTZF3UGmDOI4jA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.1-next-1602002623-b8e599de.0_1602002750509_0.13920876935100646"},"_hasShrinkwrap":false},"2.20.1-next-1602006806-5e61f93e.0":{"name":"@xdn/core","version":"2.20.1-next-1602006806-5e61f93e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.1-next-1602006806-5e61f93e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hVvc4kMf6JJc1kmZAqki5uk2QtmkZuWdW4PITDzGcBFWN8RCXvfucElKRG7awAp/DE4qGSfpD7lMBxt7g1xVvg==","shasum":"47e2dfd0075eb6811bcec2d55afaf3862ea5a6a5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.1-next-1602006806-5e61f93e.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffK+ICRA9TVsSAnZWagAAxMwP+gN6BWPcwvti5ppP3YiZ\nFCqydHUB1cIhMLFVhEAuMXPVsw3uqcdKnqYAja1pDlbtJsqm2WUz8QzXvKGs\nc2k5AC0jqizpLgqGswSMbLtWd/0K8sEWFL8cWUG3jazrmvMP2S7DUbfUrOLg\nkIqs3MqRVuAuxQCcVbB+joeWWJWC1XUCCZXkNks0o42+0jp/PFqdLd+2cUr4\nn0ag5eFG9T63lO3XyaLlFg2G5D5/WN5B0WiXmHg4L/I/dgQCUhytspixSGOQ\nWQiHN7uKZNta7bWShsr6/jrXsBd12Acm24f1t6Nu+yVO1G8bCzbXH4q0cnaL\nuaTOBb2eIUQZBMANHRGwHGsMSAO1WzioHlVRZoRC0F0XID19O1XV3HD5u3oS\nZxapMqYW6GmJIfMkdYLZhLt2+Hjk6erVDLZt26z6pgSIFZAs1ZWjVhGKTTFr\nBoxvf6TbO7ohxSXEElJxwSctGqo9IUfB+IHR9SwQAIpTzf2lmymvAF2it1p8\n4N/aBBDytZGMOLsS0O6AvGT7POmrM5xYrQSknCsK9PipHUJEdL1DHtAe91h5\nH8LKp+fK5i50qUPcb9eR1hkgzCKSQfWA0jO1sUGZH0s/T7TSX7kjcAGD5lJW\nsvdY3L59brDbxQ8WSEMHBiuv4xqBPL7sDE98t5nzkvGPW/IX5ei5BJi5bE/H\nPY4G\r\n=fHLS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxWbcA6SaFEjhD7KDl3mL3Wl38Q5Ye7pRDyocMxuretwIhALl7hsMrHaXKb8JUDDRtPCHgOrfJI5tL+vyJZdKRQPAZ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.1-next-1602006806-5e61f93e.0_1602006919656_0.27823452470482946"},"_hasShrinkwrap":false},"2.20.2-next-1602007890-9e39bb0c.0":{"name":"@xdn/core","version":"2.20.2-next-1602007890-9e39bb0c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602007890-9e39bb0c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mTeKeC6IINuDvBmj/DJ79cw8aCiE++PPoXHaQq5ABBPyTVfzgmk73iGbcoUjfdxikIM0PkXLSf8Tv1m75WEqpQ==","shasum":"6b126308941a4fcb28acf4b1db7f90ab3a76bf84","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602007890-9e39bb0c.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffLPJCRA9TVsSAnZWagAA94AP/0IvLMYWT3+f/4GrJHgq\nFP3QTtdsCIUeIt5M/GZ9MJRqHK4qEgIzBo5OGoRuNlrlZjFASjAeqOWXK9Im\nrAV7F/NsXBHdEPTKrJYXVygSaCMgtbud3q+0CymN0SbnoHmoAFOji7xt6bu4\nS1Qp32WMmMaXrE2iPWh2TMDrxxleAwCaTKEBL//HmbPA5aiPgclxDjw1Y6wK\nQO2AVQgN8pGuRNZBzPI0puLEvkI8ZPnftkX4CB1XI5Pi3hhZpz9OmY9H+zRK\nL/wZGa5Al9zJrO2NKxZoRZjKvQI5xr1TIo3s3ke0ZgY3WXU7pZNUdHpuAwCO\nnDUkHKDtan0+vMo83zs4UQCioLnrXgfz52nStVIBA7xx6ghV07vbapLtaWmN\noRD3Zzw7ASbY7HmCRut/dENfLMuaCDHyJmbnwbbDpw9KruVosRYPaeghVtsf\nkAKiZFg7kQrDh4ip4m71WYdNCO3rd2R7DY2g+tSsz4WX/KiVBvzD62PfDbV9\n8vnRlZUEo35Lr4QpFFhrYZXn7HQGT7mpIp4kkVskmEXcL+QEs5NFDNBJVe2H\nnZi9mICfuuX0JfCpzdyQY8A3XOnJq2mvuRzCy4GEjKWK5+5fmuXp7RmDtgV5\nbsxNz6fqBZwGaRWcxGrR9KxsJGWDTI0uw7m3qRgd/0dpZ/2buyRgCVoMxcGj\nZwQc\r\n=e/Bo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgtveldT+KD7DkD/rNBfvf3Lx6PLS39MuSdn3C6uNZEQIgOilHdCgiLcutE/NHcn4VL4HMLoq52rBqrlhfZEFXjTI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602007890-9e39bb0c.0_1602008008828_0.1610299490268643"},"_hasShrinkwrap":false},"2.20.1":{"name":"@xdn/core","version":"2.20.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.1","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-w+/2XKyDcInJY2hrjb7RbiTZmXNHvy55TWx42Wj6Ayp4mA3hwYRBAhoL2RrH7hFPmQOFDVBV3NtN186BvnOeKA==","shasum":"3a2b01443fd3354558bc78947808092735f1ec03","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.1.tgz","fileCount":157,"unpackedSize":577475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffLhFCRA9TVsSAnZWagAAtFYP/0H7YoqyXAt456uRDx11\nWQkMwuXRFivTJH38WDlPQ5oTet/uXDMR3NyHGmURNMtEgRmggjFldfZMJ56F\nn2Jf15evLq9hN3q2v1HDODZ2wONoUIquIb+KuUtpcjgnkd+Xo8LyZM3oaW8u\nQe7dgRgHu4AS83iqxpxQmWmM02Z1//iNuAPPg6rrtkLEC+K1NDjSalAPNHBD\nwuytgzUswHAMnwhe7QIZ7hUE5zwA+WCJSYUabEa9sRERaYRmUYiEUf9AZtqS\n+9FwZvINO6QFy6LD7rWMh1Jlo4+AlAsquCPjIa0LneR2l6mq20RoUf4KCB6d\n7sADn4qhA3isqMqp9oyRYc8d+2+QWQF7hol8EuC0/OgVH+1ybb73r5HJxFdU\nH8HXkqEPcpmHdWusE51sd3HhuEw7kLr/EtvcXOyhG1MSSuAIAW19Rqa0bVF6\nI3iflrK9riHOmM50d+IJZWfM//PfsnSgCSJ6/UInNuJOdJwQBnEhMcE5QXa9\nlgRI6veHJxVXjmp6lKPf6h902XI0wLUX22AhcuWW9ovSpv+lRIF8InnwTBfG\nLQFFn0JHzlzWRvqmUR9Mw6uWaIrldGcSjXfyp8zqA5foSz0m2L4zmOFgVii9\nebHIRy/COaZX7/OebzbZ+i3FLGBWKRg8X8TX+ME/7R5zsIGL4Sw57MLTCV2E\nWHd6\r\n=W0Pj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEc4qF1WWxESYStpSuDxPS+wfS8sBPXosW3iEVGAdl6iAiA4XNIaBiHxcZtLc9eVJQcK6iguQ3yXLI9xRRhFQ/6f/w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.1_1602009156966_0.5608897812208546"},"_hasShrinkwrap":false},"2.20.2-next-1602060391-ea8e21b1.0":{"name":"@xdn/core","version":"2.20.2-next-1602060391-ea8e21b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602060391-ea8e21b1.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-sYgYGnsepvyyOwH99qR7VouTIiCS2Jg4OClb1QuZs7oV4v8CRaXyKnFnLdrUnUpWM/qtvVJgNGkXzUPCPFEIPg==","shasum":"cf68a5591c1680b57861b33611ce4ee1345c3780","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602060391-ea8e21b1.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffYDSCRA9TVsSAnZWagAAtvEQAJcCnwDaVI+Z8wmO/wbf\n1YMBLCjWf7meyMmFehNilR1EHUtlFkPbVI2frNwQrv5r8ifT+qdjlXG2isN+\nvK+tZQqL5r9OFYd0g/ZWb5XXGiUeH7FqYz+uBTsGxVOz/o4xQ1IMxnISRAfn\nZO7EJSgGIw48DByLJDmG+BKBFta7fMmD+VOPtjIAx6mT//P6zvRxJbRG4rwC\nFyekXlpT4Uyuo10ziyxryK4D2cHFeLeFlbQR+g1R7yietHW8SmS95OE/HSIf\nlyM5HhgE5F8wo3FhMGNqj1NcmFbygxFjgfvOpqD84Ono3Thv2GzBcDR6XmE3\nS8+IH4Xx8AoT3PjQ4Y8xR3qS13UCFFlR043hY8nb9Ph/LyuobKQmxnQIT0Wq\neTgtoltmY6B7BKv7gU6lSKXpiWKfBU2IvfXdgEY2zbtIrOZ7Mq8V/D+zIaJ8\nvYlhx+tabEnYhl3NvQ6O+9dxlCST6cTCynU8g01WktNj6bV+j+sWe1la77na\ng5yQzWfnseismgl/hGbWyCdA6t7d9dXdW7O5KNSVDfZ5QW3/g4BXEKQXv1xz\nt26eqQAx4G+VnP4F/vhYMiCuZ+6DPLkt/ZaFhFrn+AxJHDFnz14KMX2y0tUj\nqoCdT6Rpc4tsPXhfjF6uGJGsSJjrPjxJf7Fr2PjRzLjF7vB1hRkz916PCcqD\nU63k\r\n=svkM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG/laGFtdSG7qru7cfmroihXZ3P8DxaASWg/wdPiCIOHAiAFMWvawB2YPTfeu7v5+mFWup3H+sTO5MUR8zjnkpC+5Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602060391-ea8e21b1.0_1602060497873_0.8189778714684752"},"_hasShrinkwrap":false},"2.9.1-next-1602066146-7c0bc041.0":{"name":"@xdn/core","version":"2.9.1-next-1602066146-7c0bc041.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602066146-7c0bc041.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-BdqGG64gcnWhybczDHIjYhM56QvviReFZsyKpL4LqWJTkGd202Bcxkfw7XTljk/FgGSJNu/LEPG94/a0KUxWCQ==","shasum":"1baf55d6cc75ed9cdf9ba07659c18a309df709d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602066146-7c0bc041.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffZdLCRA9TVsSAnZWagAAD44P/iWmXsiutSRSZtDnLY+I\nv7oeiVQNl3P9wMjxtcVRJoBpXKHVUKjdwCYcxCBRrsbijXJkSX++7lbB2FKw\n+b9cLA0//p0L3Lbpyzm2hLDrNqC4309GYOJQvJBPSqs3HbTHXUqV4ns6rR47\nxu72EQqaZCDWISNM7oPx72PeU5r6YbAP/1dnz850aeZBGrU3ngwxJipgbt2B\nEQoHe1Kev7AYLbb5+8mZiNVRzILSaTjzmvdL9oWjXdka5Cx9sCs5gS314+s4\nt/Q5T3H9Mj8S9MOHBFtzOFKpxKqMgWTmwbM0wHXxxTl5MvDJ6j1pSyrVR/VY\nQdEgwtRzORevy5Q9gNsO9h96bB14hOOiuJ/QhhuO2absVJYfy+03IN71iDYf\n2IlH7ghEf7jHjYK1nfQh/JaUTPQKvIt/ir8FsdCc5EA4a4VyM2i9y8eOuxSA\nLyBhPjuCuERQYgv4CD+o2VDBfEW3wIGiaPbjBC3h0RHpAsMoRuZ887IZPkq9\nNw8zMmPciH5Pn3ymN7DKCT/3YQi/qw35GS2P8nTU68OZpGq8ury3g5fgGKXo\ncAniFKX0t7/+I7N/t/RAazMiEYR1oy6e775ithaAk6ek3uI4sYFcQDa5DL/5\nty+q+Az7D1Grt83tFojI5Ow+jlo9G2y9pSf1aAUWldyevcXdGctqno0l27WG\n4G1I\r\n=BZWB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGAgPGPA2bKFlzWwNJei9blW2A3BcQHAJqZ2pxY94GeQIgAtpFMeYM88c1xSuEs7BnLFljyKtH/FEtftN9ubLwQs0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602066146-7c0bc041.0_1602066250229_0.5047185897178859"},"_hasShrinkwrap":false},"2.20.2-next-1602066213-8a7748aa.0":{"name":"@xdn/core","version":"2.20.2-next-1602066213-8a7748aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602066213-8a7748aa.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-WwQ1t3V25XwKed43YK4uY/2IaaGdO/mxPa1GmUW2/SwWbHOiwu8mWatKxWnC88wNLYbj3T+cE+sZKxUWEgZqKg==","shasum":"a233a178230991704816fc8456f93c4a7b1a2f06","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602066213-8a7748aa.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffZebCRA9TVsSAnZWagAAJOsP/R9IsQOC+5I+HfSaeick\niqF9sLaMMhcrvpnkGK35DDTdF/xA/DcCaLRzDoLA8VsclOjdzwRgXR3YX18V\njT/clb8bgoIqhjvhmWiqYjHUnLhndyEH4d1FhUdW7JST/ZUWZPJSreVTPa+9\nuq1dgd/MDBak7Hs9N2pPGwupWIrC5Kx5Qy7CaPW63g55c+rCCCHMge61qbwV\n+pz2503JCRFnkQnufkzJupDTyN29Lotg/fnDKrajxDoSXGv/IXQPwZFkh6/S\nH/kuJXVdKnxYgjdp76i/vm0n6BfsDgjzRtqp7Xx5NWO1tlR+t23BwB7bH6be\nQgj1hJdrLYStlVsecAXKGhCjJKtu3UipdqJGaUZFL7HX15cgZjdAhew71QOP\nRtyb4eo3OOqEchW8iaByFVhaLtpDDAQ6ikzoD/0m+e/IQgFO9sgNFPpUkz8z\neuKB8VikQjYKDxvHQuALZDilCsL4BMSGRT7+blj573ktGvG9ocwlZgFGEKpF\nKnt+f0yQKwhwye/7ZvzlzP/ybKz5v5hPdC30EEH+x3ouDbZSlkuh9gSEkoHD\nGzxcEXTjpzp29nH+ePsJWWYPcnLcCy1ie5quPe6X7UVmMxKyUVk0SAHh1AJi\n8Q2cGV5DYB9VId4vOz/YYmaU0XDVOqBNYyHElQv1qjcsthw6te3Xax7zwR5y\nyYUK\r\n=XXFp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8Ll6zwK/ygfmeYWu41Xgf0SQu9wxIvpwRbi+f3V6z2gIgN4oW6JSH4Mb1RZfG4qP/hp4tJifiXHB9SoSw1iFlO68="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602066213-8a7748aa.0_1602066331061_0.2206342049046799"},"_hasShrinkwrap":false},"2.9.1-next-1602066832-ba1a1477.0":{"name":"@xdn/core","version":"2.9.1-next-1602066832-ba1a1477.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602066832-ba1a1477.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9fRtaXo9IIbHPjD72CUWH2l5ks3VQHZihRGeo297IAECDKltl70GTBD365ChgHpoGEej4cFM+81NhuXpmwYP3Q==","shasum":"6f8b2f519388aff543bec54441f500960244af56","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602066832-ba1a1477.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffZnwCRA9TVsSAnZWagAAt0IP/2Ok5CuFD+OuGsAiCM/6\nU0jHUC20K289U0q0VG6eV7sv1xcjDyvj216CJH19Zqd0EumPXRk++2Xo9Ay5\n/rvETzvusZ2MtlFi4CALzfJ+y0kiiIAgwANVlP/n9+6vX+NWqjhIuUvQNvbS\n5Lfc5MxDE+OD3dqYwsEGugLfHM4V2hBTe1Mzqt31e0/iLRvHlOCVR5ti/uRW\nD9MrVnYH2qnHP3naWQa8WBY92g8jV5z0trpHvL0FbcFzXlBhK75vXbo3zZi1\nXMiBsv9mcdUdamnuQST/XArpVc+snR58ZkiZGt9jn9my93egjIMG/Zq8jGzC\nBz3BRKESRFIPZ+hJBM40XU7LjFleW1Deaq12I9CMcDF1VskeaLLIfnoJGfjF\neX1s07APjeZyQS7ycKZlX9agbFYECMb/GaAA+TQMgm7DUz7QyzAyOMJKd9qZ\n0Tf9hn0whWf69KHyPtDAJb1Uoq9oJYnprr3bRMoyyFZjvXNouQq7iNCpDrQc\nDwc0pVg2AJSdtJWntTZu8hJ+IZ+HylEiH2F3DkuA/hQ+Sy1gNkepa0FEFMXd\n394A3I19nZMvwXE1f3xhXrNfdc3ti+EGYlHXXvSZy/NQTV8XbVXEiTYtE8W1\noeAXYwAsDPPaHqErLeLY0QZ5hDEuCU+wFyAEC3aNmBEKBxni/tQGh5M3JoJA\ndmLz\r\n=2szf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZsWI7pbV4pkZ761miySRosQuH5cPyTB5959terbT2hAiEAq/07W/2Z+80XtZp/CkQOBMImsq2FA407O8nQqZ9RAqA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602066832-ba1a1477.0_1602066928377_0.24388752272487246"},"_hasShrinkwrap":false},"2.20.2-next-1602066979-ee3bf978.0":{"name":"@xdn/core","version":"2.20.2-next-1602066979-ee3bf978.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602066979-ee3bf978.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vHSIST244XzyqaTjG+IN3DFehFaFYNb4mudBiFvKT5JgA/6Js1oQBPFspNT1kpK5G1P9nRTXpk5IiRFwDrxWEQ==","shasum":"7f51a93908928aecdc9d40e2c83eb03d989e381a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602066979-ee3bf978.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffZqXCRA9TVsSAnZWagAA3usP/1dHyg3ACpL2ZtezRJwB\nw8vdMSMneJLdHQgdZ88UYz6qsITOFwK4tZ7Is0WppFMkF6tA9MXPDHeAQ5aM\nIQptZmqk7S+QfaaSjJ6XwFp50TY+aqyVg3KC35rPt9m8lsez+X40/bgZ4vgk\ntsB/8h5BNC8wzAlTMoTQOSHmy/8PROSQKpqg+eiqWuSLycqFv5P1annydylf\nJrYmcj/qC4hR9CnGuSnHeKpmKDiauOL1j0x99qTg0uQOY/8X9rABvVcqattM\nTj9Kepa8kzvGK3VKc1XpyaGCdXjVp+QlP+QPoKrn2LOMSHyEzMMXIxTC7vKW\nsI7EbhkW8aG2EhldujtrOAB7QpSxLwivpBjP1Nk6rmxW79w7gBSMOsYpilaw\n41Qwe0dJP6NgL4VlxOBGBoGDcH36BFbDE7k5oolbE4RfaCMKhtPpKJkxLxX9\neEppHeaQ6ApyP9HEwh1rVDpFjqxZ61kM5IeFqBhqJZLPCYblPWIRQW7l2WVu\nQgjEhGku7YoKqJ0ahhKevzR239JyqVZxX2qsT97boQvpEKP3EOSuyzpI2xa2\nFfQ9S3R8GgKNdqik5NqZ8wfFdiY1I1tqBkordbD49qNpDD4uJQmaLC67v1Ax\nHj3cjEqa4Vp/D3LTM+eVLEMOyoFM5EcF54nFz998XizC+G+I5Wq8M56aoZhg\n8WgA\r\n=XyDx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSMf6qlXh5N21Wob8xL3Rw9DrZ2ZTfdnW/yAZAXqBKDAIhAO8zmmKglvxVmIM0mUXvS2F2Rbwn7udjVDI+dre4tlRZ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602066979-ee3bf978.0_1602067095238_0.8853774455130639"},"_hasShrinkwrap":false},"2.20.2-next-1602067028-37139631.0":{"name":"@xdn/core","version":"2.20.2-next-1602067028-37139631.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602067028-37139631.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/DXG4WNMct/qiCeJ2M5kLipoEGBX4608ATHhVLGNMQm2PLx9AO9ps7Lae3qTGs/FSFUnvYyu2iBWEVh/PTAIug==","shasum":"a02af2061239bcc8e65f128a6017618415ec182e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602067028-37139631.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffZrSCRA9TVsSAnZWagAA+f8P/1ub8lLc1k4tQySNR0ZP\ni+YhPlww0HJK44AbeeVShMpODVknKwVEJAaiowjJBLOTyFvfktgDMT5kBDBh\n85KI04DEWk1e4nkdUmkSqTCpntNnXo+1NqJSonIfU8pUu+t0Gh6qsSUdz0f9\nnxvVJkUyHTQV075stwk9zkV1jA2DpJUl2ls77ww5xGwpk7sm3n2NNbhw8qKT\nL2Qz8f+c6kfum9s2W88lPYcUJg4hqXnk2S+9AGow1D6n2Pyc7P3uyx6n7JqM\nqrTGhq6iQ0jocnVDGeh0wW4OAfteTiCW9c1GfXkNUpEMqWcQD7cP1/G24ifs\nLc94DGSMJGMOwXBb6NFRXTnNBx13pvEOXqV2lCj29zDztoBFub2OYltcsgEi\n4cCK+12VLniEiTd1TjwvZjIyI21yRCwiVFhODi6LjerFO7T9ZmjkPviwbjRh\nrro9TxT+zSJiyJce+MHl0ATvmKQje/Rv2FT0x8n9rYj03WXp71EddQcIDUN5\nlkfqBwhNzJvzcuT0JAydiuAtsbhqkNcz12Q1dsR1xmLpMQjaW6916pBDiLqH\nsd+JNZcI3AbfBAiaXdFjRxUc7VNDI4hkl2YoM/uDN/fXMsCDhZN7R4gghBKJ\nuMzd4y/Sr1XylzA+kDJ+khusBvNDbnHnEaofYz6GpZSMyl+lpC69cLHWjFKH\nIkXO\r\n=yGM5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFc8x8FfQidro6m45Lv92gwstgIDxn4y/iFQy3PavXgEAiEAn/8zRVO/UmvBAVmOx1ZnjluWs05Udxc2G2qhm6lbi1g="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602067028-37139631.0_1602067153937_0.3996144718960124"},"_hasShrinkwrap":false},"2.20.2-next-1602067959-dcda121a.0":{"name":"@xdn/core","version":"2.20.2-next-1602067959-dcda121a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602067959-dcda121a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-o48a69jcWNey2kUsaBL3A/TVdPK0wp0Bb2DyQKffH0R++gKqcKPBPyoa7AMipvrJiZCy5zJFL9sxGpXRaF8UhA==","shasum":"1f9c2f75f01b9fefb269f5007856772b667e6dde","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602067959-dcda121a.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffZ5fCRA9TVsSAnZWagAAa80P/0H+8G6K1Wb4AsDOkVpd\nfRHuvJzkL4n45uIKaKUKMWXYcGPJdcW338o5cpNyR9qArlQ6XLjXFuJn4kwK\n+3MWqXinnBBjbfImFQuFaNK1qAMWnOWHd7CbZg3DNCgXywLPdQXDcDGEeNYG\n9Y7fC49ZPmbeOksOmvpri97zFK5YwA7WU7vblVo6hafJTvLp3EQl7nbwvNiT\nCHw0Izh7UoJnBr190Fg5pTwoE1bn8IMVRsEKhbUMclCzxcJtIjkjlJ417x1h\nHydV+4yHU9FNOGt2toNRiLISweGBFbMXPjiW2/xZQDZaywc6lWz0FZnG+xOe\nN7xntO9rufwY0kndqZbejco92OHw/BzCOKKCOUXFm4COprDBmdPw0e0SR0CV\nhi6k/jLbqa9yhm7TGbC5+HsjXCV3glz85a1rx1I5lCxCepkeGzcpsiNlUywz\ntelO0/f7rUMv1ZNFa750iiPxM8KrWgqL9Yb1t05YEyNpJK0+9xhuo8gxIHHU\ny80UcibASH+fPNVp5Loo/6h/qnNu8rSDIDOmoSGc3u03TI6h1E47Ew1GXZyr\nVCxnx/OLRxnDTPwYaI37Itlvh52Oi5ZOsQWDhMXfy8rvfgJyH/Pq8Tz7T4pW\ndQpY2ygcjq2E5+IdSWwQX9PBg1Lss6L1TSCIDOh4MqKriptREQQNQ8vjYZir\nt/1L\r\n=rdeh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZZF2rYvGzuAJktTdYSYFJWxuAs2+wnse3zaYsklu8ggIhAIocOX9PFozrXJhAQFXstyEK8wbfT5sH3YUUDMtZDLPl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602067959-dcda121a.0_1602068062586_0.4449443266860704"},"_hasShrinkwrap":false},"2.20.2-next-1602069505-f2b2abf9.0":{"name":"@xdn/core","version":"2.20.2-next-1602069505-f2b2abf9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602069505-f2b2abf9.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Stf9LjELlpjy9IYh72E4k/0bBuMWIJEqYRYhgmEeEu1j7DoaK/xZ6T/CgYAXqEtfMxl7hlDinM3AXncUic3FCQ==","shasum":"0f6a613c6ca309fa71127d87ae7899a2c64faf32","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602069505-f2b2abf9.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffaR8CRA9TVsSAnZWagAAIgUQAIOrUoK6YV7qSzXaTvug\n/nNqj+eNnqVscqMVO62HA8g1ayF4z8Q699BuAA5mexJLULsxMo6lOO9dDV7n\n3Sjc1Wx3EA9ExiaQFmxOd7sc3HSU8/7MTGt4/KTr0IJDeA9/1eTq9aImzpPr\n60nYL7OP8rfSAE1hGpqaeVfRilUgGHrcl4C9X2LwKIJO/e92Yt4645qQebuY\ndnLhmAbjzKtDGfj2I9cKjfrzRPRSeozzXawGyPQ02OR9AQruD5FdHewIbAmQ\numfJy5FhNEbWGWA9NPFUfNk46GZSVs826PEw1umOg1T0eG5cjuhzK8wkndnl\nWB6kZQtokl18jwlhEzDDZZmkr9Uk5zwp5b01sMrAn1S2ixDzNEHRAzjZz/L1\n4tLDW4/prUfTvWuUXKCoxNCi+1/lh/ti49aA2j1Ke7nUh6u+40Sq2O7I3JYU\n/o7w1DfhAuds452Hd+IUOTlb80wRAL7e51yslYnaJZKPiQBtnBpYYwY6jIX7\n6El7ypsFzrbdHXq+0QaATclC0/jHyW55az2od+EUq+iLS2cZq1NT7ulIR+18\ny7IpHtYOXighc+JhgWRDog4AKxcTnLx7CiBZjgxWJO6DIpzx2U8tYk305r4/\nPUQVJLpeMZnmkUGC4CZr9/tOPBK+o+C1k8o4+Be+4Tco9CQi7Xa3HiuTHWkB\nM07v\r\n=4ezi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDBn3QBShltpBCBRnZ+ewXsQuhJqa5PjWERfe9i/ahJpAiAofwp2IoQyoRNXP8x0AfjTm3n6QYpXxZEAbjM+J7oIYA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602069505-f2b2abf9.0_1602069627985_0.8115855193268293"},"_hasShrinkwrap":false},"2.20.2-next-1602069545-52021445.0":{"name":"@xdn/core","version":"2.20.2-next-1602069545-52021445.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602069545-52021445.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HlVkjrlAvm1Ud1rOPx+gx30PxvctuOWZuIRfMlUjdvG0/8m2Yejph7VhASXzj/NOpC220saPIomk0mInZ7scRg==","shasum":"32e7092e1059890a7a88f95d380c03e0b1fab40e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602069545-52021445.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffaSqCRA9TVsSAnZWagAAxZsQAJR2XF+IUt62vIhRoHuY\nxV0PsEJA3/0F1sLQTGciQlvvNhQL7yNTINoCIqJCgQKpHQ4YY6hrdN0zAOf2\nLdgst7KwMjYnwTW0MKncbO8/eLYqjdkOsEnS1TiNgGKMpc9kR4E2NccWlTiV\nXY8Hq2ce6I8AWtZ2Onddyz6HUAc/Q5Pt0wUzRBus61h8syUDiLMsIg8g5F/I\nGwCdCIoIquVxyV9mbZ/bUtr3pQqHGavaqleUF8GUTQuYsNbs/aNjSa6Hgcy2\nalcua7imYPNDsu4CsxiwWv236fJUaHlRvdqCbgWf04JIwISeOEsp3CFQy01a\nhqkAZgWo7EQ0V0RQlXZO3d0tpWxaF8Kdth4p0dFlp6qUl9OhJDOu8tDlE1FZ\n+EgpJKF0vQBwexyg6a57FSYV3X7Z1zmnku9bm3p2QNM+dVzOodVYLyL+YQzB\n5p8YWwYhSIwLNnOA9QE7GCXi6ij0N/u4UJ6VavNu0gW0Kg7+9tEto8CH9o0U\nuh7HoHAQMoahTNk4bLk8w5gk6jF3w7wzAnEntw8qrHGRe5mVxz6RGGZPyxXY\na0MPqvptf1jKOGw3ykjaY/cVdMhakK9KOoYzXvb4b71+kZuxIOv8wzIu81ed\n27kddQ9e2SZlfX0u1taBeqmUXDuweIGfiQsbjQmOvjC8horxGBnpk9RSt1le\neZhN\r\n=vV9I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHsb5Nv0G2gXwp/QmPX6tCEOff0xGtXpHgEWy4UfMlLtAiEAuOevT7RbIIV+bSY+tii0k4mKmsnbNPrLAx1lGnFY7OY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602069545-52021445.0_1602069674119_0.48852828668616843"},"_hasShrinkwrap":false},"2.20.2-next-1602069621-dcda121a.0":{"name":"@xdn/core","version":"2.20.2-next-1602069621-dcda121a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602069621-dcda121a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-8A0KkaOlagk6G+6nNBo8ZoJHza8CNG1Jhey/XSAhGlBR6FKwOSDbRMlqgTBIyDe+Flp3e+n9hgkNv/6VmDt2iw==","shasum":"a683b55770e8a9ae91616b69a505d61621e47e65","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602069621-dcda121a.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffaTjCRA9TVsSAnZWagAAoH0P/26cpQnPuoq2muhB8AqM\n82JZjYBgAveD9RArWtBPG7I0PXmiDnr8lODIbdk7poET2B19dRHxooaJpjzD\n9h7rPLtFeLI3wSQ2WO9xpwJyCVUruGvIghP4s9tpKkTVysMe5HXtv5W4PS1B\neUy9xVOSdNOQTp0JEpeK/Bnwyez6m/XvPMdJ/hqHVZGRJjMJMGLJVxtp9ekP\nLkho35oGFCIsmT/oll22WCMlHtlggklTxV3o8e7ySFA4UI35rA4R3jD+O2kx\nrfbhoXmT4kPpmx38dF9JcDlLdQOVECUk6L+8r7aICQD8veoGzEbgm8gbXsOw\nbQjeZu5tBJ7md+3+uTgr72PD+YXcPGwUEylyAt6Q7VFQv5Lubdfa+kPc+cdM\nilj+iQUlbDEreVDZG3fBh30Sfp4WJznToHQd2s5Y8XeZzLwd5m/QtWGcrwCF\nOhRNcip4Wn7x96BOblu8Jb176I8YnMl+0HnT/IHsjnJQ01ryIaLUVWfLvUmU\n54T4G+Gg9clC3yw+aq1AOpSkKWAvivkhAg2SyKBp7etiMd/dkxKAC17WNZCN\n4pirP9w4bGwsRN7q5u0uT8gVvDcipM5NjNtAWI3hXdj41TQthmlFhTYWFfaT\nmVXwUZZ24qqFQmW+gAJiVL6UBulHZHwDquqYIn+cPgyZf3miL2PgFXrnU9Po\n6Vt9\r\n=vjJq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZvjiZQph0TTWKMLS5ZHL1h74c2cMg+HWGg36xEn70kAiEAiW6apQGOS1MDBocYHFwNBQMt1K40vw0/X+UBTQce9GI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602069621-dcda121a.0_1602069730994_0.9463226961967395"},"_hasShrinkwrap":false},"2.20.2-next-1602069864-f453a767.0":{"name":"@xdn/core","version":"2.20.2-next-1602069864-f453a767.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602069864-f453a767.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HMqfxFD8XPHUCuknJu/i1guPLUvVGfwQ1Zdkucgg4usWvlyuS/YV2CpmlYRnSBUpY0QphA01IU8eGdOgQ7ppHQ==","shasum":"2e2e31f2248471207aafccddd0b9e0505d1fc8fc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602069864-f453a767.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffaXkCRA9TVsSAnZWagAAnAIP/RimeBavL6hAF4dC6jPu\nE50mvyDlqS7Q5UfLMWD4t3khUAEs4F5+yGrx3Ikf6oTIp9XTJzLfFC4jyv4J\n+2TqsuWGpEUeVdmXQEbYuqu6imAOva3D/7lM2I4vKPvNdpTYSJYcrICHUAUy\nP3eYoitQuu1RZ/Dr3vBGTv0mg06C1b5UeijYV5s5cc6I3uH3zt7p9ycNZ0v1\nq83jPYGwMpv91G0SnKDmFzY+qpzIiDuidQ5kV/HeVRROQ2t1rFR6FKiEMDZn\nahDf5HRN5b7HW5C6wDfe6UDzEow7wLeE2mj9DXyP94UXgPSe2VzrVscHPz+b\nD7lVMY1QwITdLn9D8hSvH2FF/undxuiXkEvFOKb1dYDWE/OSA/jq3Mws7rqu\ndTgDQsLIhZQZDLmWA7G2nV0jCkeoU+JdoDeHAmAu+9PHxdIT2lpSOjYfJK6K\nGTfqZLYj3W/EGcpPviIQjyYRP0WpgsE7s1N77hxQwRDdYovrvVaHWkmPNADy\nohXWh2d9HQfwpeM4qYBAlzutWhWThk18FlBpzL6i2h8V2f6vaCP89UqDaZcU\nIwW8ieAgta2vNMlHJdrBCVkSmE4bM0djB0yJwSAxluQJCeoOieQp5CpvvPiG\n0l6GqPTgKt/YEaxwBg4Qra9vkKZkm7rgtuJomNuT3Zn3pN7wZuo4ittW2EeG\ndxOQ\r\n=p98k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDigmKGY9ITDJwbcAEq+9/jlNuEH4Rtjf0LH/Jdi0vhEgIgUHAK9L3Fehbxet2msDf/aG+yVMVQ45qY8CxfMCkHsS0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602069864-f453a767.0_1602069987833_0.9366473114449991"},"_hasShrinkwrap":false},"2.20.2-next-1602070157-580e2d65.0":{"name":"@xdn/core","version":"2.20.2-next-1602070157-580e2d65.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602070157-580e2d65.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/NIEBcXAk+/iZMB25j8Qm0XjMtY27nxK2wCIR6+QfUIVM8nzyWpjmxz0oshkQFh0RAcGIZIvfDeuRDb75BEMSA==","shasum":"48b06e94445d7e122c12d5384434b882d39815e5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602070157-580e2d65.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffacNCRA9TVsSAnZWagAATv4QAJJYESTr715Zdvde8Uo6\n603xHliOMjrjgN0NNBvIVV7TWGyNLsExL4YRFsl5+a10F2PokXVmigFPX/TE\n3ETfBmYmtYpvCnog7edx0lzxIyekFDJdnnJXZI4w9cwvd85Gwg99EdB2fIZC\nc9eu4tb1xU1W/hL4T5YjutwEmh8JGnYCsFrIysGT4LMAk/F6C/uHzffKthuL\nfnM4Ugqj2og/EIqueyQtmTFOiAUCinQzW9D1iHdr+JTiECkTzcQwPUsKVheB\n/nW7RDtEXfKLUR0gPImVqFeXRyPqbHv/GJb4WdiKGLwM9CTK4vlreL+44RXs\nxv8hXHxRU7XfaXxX8TymfTTUpAHs9MK8jQQ6WG0zxVHAKRKToB8/K63TIp97\nAdAE1KuoWML8z5nFzmUNfb8MRK2AAZ/vAUQ4rcJOP5shrjRNGf4Ja/kfwcDr\nzwRnb/DBDfQzkC8CptFiBf6c9vBqVFOmALxVqXuwRlYob3HgHK29JV3eb5ZF\nrC1tZknkSMC12QYjvYJxfs0szNAuDBYZercvbxEBiWjPAdQR6hrbhILuwlbx\ns824+5yf98ci0HSj0JNxOadzvD1YjXFji/yPLZlFxyS/667dF3ScG5WaJgHm\nH/r0XD2BIMfWhMSwuwEVx9i/YFWfeH0AFZGaz/2RTb4wkQCkNu2EbOHqwHIQ\n1cfE\r\n=yNL0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHKbELcQJsBLJX1KByJFfIEpgiMSrrNQr1d6VYE35CB3AiBufFF8kHgVfDPBVGWBjru9FHd7ojAw7/QZhZoIeYZHMg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602070157-580e2d65.0_1602070285036_0.22579128491967526"},"_hasShrinkwrap":false},"2.9.1-next-1602071188-1bb77e00.0":{"name":"@xdn/core","version":"2.9.1-next-1602071188-1bb77e00.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602071188-1bb77e00.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-wVVFrlRZ60QBBGmGPigZIx/1v559Zel77dFCm0mvoSflY2Av/hmgz/zleJM509ciUQaKotAuE034NaxnLWvsEQ==","shasum":"b6ae05482678ff67a5982d31e03a1ea37d8e4a0b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602071188-1bb77e00.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffar0CRA9TVsSAnZWagAA66YQAKCh+DwxeJx7zbiirDA5\nmLaRui6RtQ+dgR0e5XfCAE8GELdc/5PT43wlNpv6HiOSbG87oh/mqL9vi7Em\nlLv+xu2PKQ4wQ5neTSdG+CNv0wtTTPU5FpeRkHz8XKVxqjfRVDRvPg7Sz+F8\n+aOl2baEyk2EBE0jdEzFT3baImuF82dfrd3C8K+qHuUT9Y1tjRXpnAYruLqW\nxdbqwYl0m8TmLyO33cGAKZjh+vIQv2B4ElIswUNJNNF+QaY1EIgtqDMlhCWS\nt2e58I1kswoYqHt0KLfUINZA4v9aI8FydII2g6pTUa2s655gUYE52yIGzz86\nGYVt7Sv0MIG19fzuxmMhAggORVxFad3oSkqhynTgIpKafYlP7lO8zyVFy+qI\n6eYSOST8XURlgxb9Fp7vWy2r75HVROpTisaixBKfBu5Ns1IH3nBDh/Vb606U\nl29eLh448JBr+1ewaY2fav9hlMSVRt5xgcrUBYmXWS6jIxVqsPjdac+28fzZ\nPMMNf8Pqr9YHf9Rw87Ek1QuumCHu5OKW1mmKnpnGtLkV5NTh6JCYg81IG6ue\nFUdux8AfO0RtFuWnf3vrS3HX7HcegmweDT9zbax76jrqD+XKxw59kDnlwDrk\nqpqUrgwu5fBCUtZL1tAJT0g59DGLr3yZTeJ/xN09vGSDnzbK8ebC434ze8b/\nrc37\r\n=dpr7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDw8XRZYGxxsxvJQ1NqGrxqEqDbIEOWm3L/l3rTRE3uhQIhALGGAM6bRJcgbuueizhpsjx2twL/FufDssn1kVGSFTEV"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602071188-1bb77e00.0_1602071283669_0.7930654648329107"},"_hasShrinkwrap":false},"2.20.2-next-1602071363-f793fad8.0":{"name":"@xdn/core","version":"2.20.2-next-1602071363-f793fad8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602071363-f793fad8.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/gF/RUxw0JUYCjZmOqX0FoRJdKMZ760bVxt2eUi9kzMCZsjK9QcsdaFI/E6g53eZC9fB3iTptM77PT0Lmm6J9A==","shasum":"0c9c26c9a10702e140c02f43fda1507fe420c2d0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602071363-f793fad8.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffavECRA9TVsSAnZWagAAwiQP+gIGlmA5jM++sG3bKfNn\nOSXm8xJWQ8OMsqPpqTnkRY29MV2PaqY/3TSon6xunizoBhtVdWsiKRmJHZjv\nJNFnJJsJRKLEvcHY+spXvqZvnmMAntAjBaVbMtSGJDOY/eys94K0Z3v0ae+y\ni3PU1VM2Js+rR2YVVCPlVDJ6NauKZLuxCzW1yCZyodFJtQUlieGkN6bMtazp\n6vEPnr0vkQv1YTuqMr20Ku1F6j5uk4QAUzgL3LtkvgA4IxkZrnZgMI33NCKp\nMZT+o/JUsYRc+pSi0RUzC8v9BY998VFpW5zH7Vx66eSis4mLXXZAYWRZrUwN\nLHpwOtRDXc/7gKh5pihyz9sQ+Ou46HA5GDt2fcGcdBd+XAXTKGIAhfRp23eh\nctUj4Ts1OrK/JBX8C+0y/2uo7ShV45Q1B8L00mOAeIyE/KmiI2C2ptw8xtnj\neuKqDxC6Bwwv8UAaabh++QwPp5gb1Ix1oudFrZHZ46dg1iZZXoqFMnjMSV5J\nCGUhItiSOMuwD8GT8qfAUCkgaUjB+vLxgU7TQvzF2dFidZmX3yNA+HbtO2y7\nfSLYseqkG+upPp6gYon6hB+12ljDnWSJytbECCB3GYdHLmLmxk5M3uoAz1X5\ntqtoprxXLUe9U50N3s/MhEVY5r/VTHJWPl9bCkX237puNyJZtD+Ml3uXdH2l\nMHNo\r\n=4OT0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG2i0XJpCXHMnH3kNKHoozrJxUyq6rmH+faZx0fJy6OKAiA8uiEod7RuM+PqLDbuCeCgwXSoGvXOGHVk4I6d07yZtg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602071363-f793fad8.0_1602071491999_0.44993912083652887"},"_hasShrinkwrap":false},"2.20.2-next-1602072578-8321d0cb.0":{"name":"@xdn/core","version":"2.20.2-next-1602072578-8321d0cb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602072578-8321d0cb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MHaZd63wwhYlAKDva2N0q8/OaFwVijDpi7hSKJ6vYqL67fpLILktFSWT+KaUoRKZATBcRJ2tGGP6lDK0e++yyA==","shasum":"5198fbeb46d4b932a7ea29eabb6239e220574131","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602072578-8321d0cb.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbBwCRA9TVsSAnZWagAA+NQP/il9ZEYUo8l8q/MS1YwP\n8GEZa6dRkGP3ugWxBGRJRJ+SpfO64TMt/L2YzgRSH78vNlEYqoEWM1UGouo3\nlzcFCK9Klh3ovHYb2mnmESILxNtf5Be8WXpS1Hyms5INlhSY2iZlavbjggiQ\n7F2CiTg7+EDwIEzhnOcBDd+jMWi68ACdIQ3g56kGN51ZllbjSNpZe0926Ajm\nOV1vItiqWuFRjIqz3R31ypkZR+ux1vtukqNWf4bzp30T5wOyCCdSh1hs+SoQ\nOh6I8WcqopFbHv/a/PsOpqNdpmtPMN89U0jqXz5nFxffxtGA6gP+f00QVuOD\n2Jtu7quJNfRlQdw6/0uURxbpeXgvOnqCbfkC1enZFHLNiV2GGKxycr68CAYI\nXMWDMlMybys7QvggqWJ6mG3+LzWEB3wzNUAYdRcruwpN5wRnuzPu59dhDIR3\nPFhrIIDeKN527Pg87VGI1fkCTxzZhLBEk2S5mqjU4BtKv+zbQ4XN2kWY3tud\noAbBJKvluEspFavCnGr4ZFoEuzHUffh1Ibox7LljQp5K8id2mzDOCu8rAlhd\nZFJx3+FE8JAnVVsCGLoElz/Y+QffBamp7TL5Hz1sJ/RM6t2fef2WWYhWq1or\nnyJa57tC/mI+xxelpHbtvTnus42OJXYhDlgNQgeragR7QMoZd6mNy7RyG4Px\neZ6v\r\n=tHQW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3eyH6I/r1baFYX09O9FlhZ0Oz9dv8bKgqUoQUUB4xMgIgfKICteS/GbiZMXTFyhk2g8FLlG3nDbzYKlsXJEMHmAc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602072578-8321d0cb.0_1602072687378_0.22538118431414111"},"_hasShrinkwrap":false},"2.20.2-next-1602072663-ee8684c1.0":{"name":"@xdn/core","version":"2.20.2-next-1602072663-ee8684c1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602072663-ee8684c1.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-M3rfusgTWwo7TRZfEjygBcOo5ExyrpXoILmM6E/BC2hXmBX84vy3scKii8cFYI6k7nY+QYiRqmf0/M8U6BwF+A==","shasum":"cdc00e1fe0078d559a66fc7e86b43d7906e5d656","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602072663-ee8684c1.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbDNCRA9TVsSAnZWagAADp0QAKIT8RigqLWMJzpHX9u+\nouqnsJFROGjz1lpwY7G9+/FVXI/o7934qYFD4+09o8xssULf+3k2DMPYbBOf\nfxii7aTvnMJS5hz9Z2eF8yad5axq3wJ/wtTgXhfTJr2WI0gCWxTFcmoowKer\ne73H7qaoQhFhv9z5SiHgdQ+NX7RJzYpWABhNKMfa7qpJpcC+Y+zgRLSgFBsO\nMvhVRjQ181yMpMmO04zpB6W8gPU5G+V4Lj4AE1/IXYjiAArMiTMSA9XHa1VP\ntvsPi3uuWm1xr+lDqqsTkC48Kbb45KEYCYwUrZ2q2+wmwfHpZ9Cp7RlXjDlo\nM3tii6ytIQwiUUjLYngugWcU19UNI8+5t+xYq6emo3Rx0lQ7dl410jDBRcNR\ncBRqpGPvm6k4KVbmFwdo6C4RJaQ/qfUCL02hO+5IE38+wtDvxJkd1+pItzx8\nWpvZcs1ZTpJAmsRKrOwO/tEMlDyXDo4cuZH1IicRBiLr++4SHDQRDZU+kqIk\nl6cDLMWKq7PgXbmU3c4cIKy6DpGZQVOOWOpUh9GUPVnf7aHj06gPa9dcIatX\niPjDbJBIZ4GcubSSK1hRpzQj62/mubLc6GVfQj3GWRE3q2GQ9p5Wb5wm/XI/\nQTYmU3PLxRWF/GGwp7hllP5gT0cu2g59Coq14waZg2qfSbrpRkfwjkq41uzI\nt9pO\r\n=sZtO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDw6/1+zAyumHRkh56Bi5h36STAw3Jn2OADptMpb/vF8wIhAM/NyJIzdTm4RhBQFZTPW3WoPP60V7Qmwicg5ph09v5d"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602072663-ee8684c1.0_1602072781216_0.8745578985601208"},"_hasShrinkwrap":false},"2.20.2-next-1602072970-3ee471ee.0":{"name":"@xdn/core","version":"2.20.2-next-1602072970-3ee471ee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602072970-3ee471ee.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mXD3pN3+WcR1fh3HTb7BFYNbbdnxPYFVzR85cK3we21wGJC5CGfhxsSZdqop7xNiuYRzLnD9MhiYGZQP5xVedA==","shasum":"5e841b8526a11023130dbff6eac7f48b47ef3686","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602072970-3ee471ee.0.tgz","fileCount":157,"unpackedSize":577529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbIFCRA9TVsSAnZWagAA4OkQAKE7UL+OdfTZVzp/d0m1\npvmwtbPDo7F54yX8hPgHFtGMyNVU3xvM/6h5cavk0YEPAl3rXtranKIWt9w6\nnFDOFt4pIYyXeLsgkqJBGqrA9nF6cdeCxLL7Nv8NYYq9NJQyvcZebboeUd1O\nNe7Qc1fzs3dfSOYnHGK40vKQSG8ZhovLnqsw9P/j9dICDNeDOSA4gsiBGwzR\nQSAqKK5AW9W5dBiiGaPh5kXeb87KKtE3HRyO73ZP6cXRBLsLyu3Wf/ZviBnx\nFKXAOhrb9lsiXsv+JJUtTC+XhmSxTyonY+g9T5Xy13JafDXDLsk+GA89zNME\nsCkiNp97bbiXgHAhKQ5aoM5cXBzlgPjVUO/GzEWCVh6iW68b4tI+fHPbqum2\nZ5++psXd7axbU2zYrU8FmslWR5ARpUK1qxwApgneGVIF+t2CPdsuuug1AJDI\ny4xbpVoxXbmZRYhOj8bMBNRuP4N/HIf9ujZE5VyGm5BH9pwFhhUKDR5bG/o9\nWdD55g/C/Il7XxXSn70QVQdvdi3QbASNHbLN0l3xqNCafC3hhvdeOy2AqEgI\noVFgfsvlKTwxfd7ZNYms0ANJwL6M2XeZG/kBhlAdkxropKuM2MttaVlr4bnR\n2oqhIXT813Rx1IsmRSkZBUmfW6Hhz2TKf79ZN2CHffWDQZfAhdaJeeGqy29V\nuPEi\r\n=hWAS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGamB5Ie0IciOLrvr7GMc9ZLPyLaGmeqrVdRgeuGGj5uAiEAuzVruCfVLWzUG1GUAqaa71XSFipewGz8Xrn0TTQl/2w="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602072970-3ee471ee.0_1602073093026_0.28515793344113693"},"_hasShrinkwrap":false},"2.9.1-next-1602073190-b2c916cc.0":{"name":"@xdn/core","version":"2.9.1-next-1602073190-b2c916cc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602073190-b2c916cc.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YsAlhOb5Y0oDl7fKSuylQYBK5VU4Kua02zI0NGJKxjwcGMShI1JegHUmlYckIyesy0GP3r57OsI9C+qDUsikXw==","shasum":"1c1790b29b3607327d045f2ee491e1655bc6c543","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602073190-b2c916cc.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbLMCRA9TVsSAnZWagAA3FQP/R0JlWidcEn3d3NCW4J5\n4BsH6iLdLzQhuqYwv+3/YKKxjyBNex0q16hGKkrCp1TL0ThWzgGI1pedUAgk\nQZF2igczoJGRh4UpZ6qE2LCQxjM2PXmn9iZsUTENcX3tFN2L2QOwtGCt2Ozb\n5q3MMp6lwno+1P03HnPso+6S/MaLdARxzl0LyBaRShz7MtnQRUEdh1aRRQOQ\nlTD50ODec74VmvPZ3RjnzdFdQ4EDneEirOAVZZWcjjquc/Uo0ksH7LV4DsIm\ns/xHy8Uw2aRIAnx07QcBL+Kkulrd/qA88VokPUopoS+CAQHBi0IBmVM8KNl6\nhGWjA4tY0csWMQkukg6MgcLLm3wLW2aXbrDr4fqBbaY2w894PofF+5WrqvYN\n6+ehBZvpYblOYO3sQHKue+PTlh5TvDVBirbrrFkHFwb/I6UW7pyKx30q1/xE\na1nT1bcmWmNXu7L4ZbGu2oRV9dmw55HEBBJzoQlolikGKf+h2f+1a3QSnQxp\n1OS540nE/iL/uWLFZxKDph0KUawnUhTiX9GHIFdsacR0yi+nNPl75iYLQ6km\n3ICjAHMSOwSEIax8FL/1dd721OTmA4A4Rj1P7vPO3RiMBmyEbLDzJ3NDOaYh\nNg6qKRWStgeHUzkhHIQcMDSwSkN1Uzng+5CCazieXe4AIQKEyIqXQtMVgida\nw9M4\r\n=eUwE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHmlvMCTyoE45WHghjbI3S0V76Jwok6P5BG15E7+ZcKBAiEA/C+Fy0gvMDJ+ILuoiSTjN3FVgf0OEt9wkcQcT/TBzJ8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602073190-b2c916cc.0_1602073291959_0.5015588325983493"},"_hasShrinkwrap":false},"2.20.2-next-1602073617-9c626442.0":{"name":"@xdn/core","version":"2.20.2-next-1602073617-9c626442.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602073617-9c626442.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VSV+D6sdJTPaVoPkr3Fpf83BKfqdZKt1W+sTOWBTaYUmAvsiFAWyXCRUG/rrAjfcGG7TiCVxGhctpCo76y+nOw==","shasum":"3dffc43d45a680cd46be748d7eba7b1052fa9e03","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602073617-9c626442.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbSFCRA9TVsSAnZWagAAweIQAJfR72BDYGUShwc+eKXX\nFF4W33E06G1fSIDU6qJBl60N7YJQmXyUbALUnb6miO7ClOrR+RgPAmn5QaGs\nDu2UTGVFRwm3Hn37Lnx5Uh0xJlEDwg92YPfve48j2rmhMcFRfgIUv90ljUpx\ne1BaSK9Jen8HVDlLqFLFDNw3ciOiNLq0HtSWkiCSryfLaNNWgBaPKE0g4y+P\nbUQdSfgYR9e9pn5fAtok5PiqfKL0IBU/K4/mUCo34yJU902Ir2S+qCR9OdVV\nHefUGWFZ3lyls5UkIuwuQmZ/uBX/iKxfd0bKKgMt9j4rqahf7TZc2+V12bHF\nj46b5ATdk0ruZQhMBREQ6kcCJb3xj6n2ekSN1u6T8+rucnAQnp4cuMUT+n3T\n4PI9jy57JJWCXRKalOP6f9QOAyIizLWVSA1GTeUvEi27JcbjWBxon1OYAHHD\nlBDL5LzWAytRCkYQNaNXTqaBhBRznvUISyKvd11vr97KBoCap1vDFVQSQmoj\nJVyA7BAYoc878G7l8Jniz9jox1HYOGZg3xc7Jp6DMwHs4sWghmq4ysNejuDs\n+v7zxravvOGrOaaAzrIX9o0RSfxv6tr9u7HcFITzELf9TmlOs9uVx51JriAx\ntO60lbWcyATHWVQ591geLUhoEsu9+iuVtcm5RN8TL2n25HlBKKWNDLgShXoD\nAL3W\r\n=rf+v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCW5LX8F3X+pSY1XRhOzsJfbk9t8vVFQ8Xy1UtffKCKygIgYc/yBtNNKG2TNRs9CBHSPRU4PMHB2m4D/NV+Q+IfLY4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602073617-9c626442.0_1602073733220_0.2721361254944843"},"_hasShrinkwrap":false},"2.20.2-next-1602073656-544de218.0":{"name":"@xdn/core","version":"2.20.2-next-1602073656-544de218.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602073656-544de218.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-m4MMVphxIzfLxHFLRfSRDcdQrUTNlltF7+ovFrcCrsXZ7ugp8A6RXlY1beetBU0Qnkwy9Ys82U5+y7AFuxgPBQ==","shasum":"f1c54ca525296797aedb9fb9a084c8e95fdc0f51","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602073656-544de218.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbSvCRA9TVsSAnZWagAAUoUP/iAlV/1eKI+Yv3/MYuh5\n0ZVXuIs7nWqPfoGy4IFZNBQvR3EPwtOaqlnAZC+ig10e5ZPaGbhO2XQuluRs\n34/sdBliUIwP7FOrLUiMUk5HQatizgwl+fSTWfjLHbUQgIE0eXcD+LN9v4Bj\nkRaDpfEtY51kToH+W+AdR/AJXZCZojb6vpv70t8yR/AXhXbyOIigGAuSNHAY\nztL7xQqRwCbA6hby6cnKwMeVttw5J6HJXzlFcuwdRFfJTX7t9VOENkIAhJor\nBCN5f2wS9T222Hx6z/qauTWNdoQHBdYjTX0R4T7SqMyPQ+ElXumLUkm6IIv9\nl6JF0M0EGLleDjrW91ogI1wi1QuruROYK1ZTAthIGbIn3G6M7P03Yfg7zqXi\n5DINH31ypbBUzGzw+fd7Hk9igu6LoDu7Prh0U/GSb3yPFtNa/2FnvQe7FdVf\n497YsLiJNiWrDCttGrDq8EIGcuFyWCFY7+qKuje43ujbK6N0A48+0UlAW2vE\nLG98XjnfiyID5LfPFIp6gu0+ZYjes9bgSK2o0NrqRzwVnMdBk5i9kwGeAfGX\nSMx3tPyyvuF2hDdxLuP/a3I8+3h2PXobVFe9JxpIYu+tP74+q6EZNxNnHtCo\num3itRYDq9e6utq8dPjMKkJdXxB58UhKhgcqqQw59ER7NkL7KPTaoygqLE5v\n2Yjg\r\n=Gtnb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAdhGG2hmJLB7X/Tx5bi8ZeXNvNjylAKVlix1/AI05DRAiAYUOrWP/e1Tf17zuhK7U/sUifd1T2VuFeIxmTXI0nRGg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602073656-544de218.0_1602073775113_0.5459857333713338"},"_hasShrinkwrap":false},"2.20.2-next-1602073725-6756deaa.0":{"name":"@xdn/core","version":"2.20.2-next-1602073725-6756deaa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602073725-6756deaa.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-3rG6ADynKZcGqQhwMg6FcR+xGjh+QrUEgsuHVAB+8Xe+6OSbGqsSOeQMPIa2GRniMvJfiFh0csrzwXAtcyRskA==","shasum":"de209848bb76c43aca98d7b8fccb17920e55d5e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602073725-6756deaa.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbTwCRA9TVsSAnZWagAA9VIP/3sWdM6dmFQU9UxhxpFk\nRmaXYO9gqBVNwOHG8ySAxz5fOhIgwNTHmvrblFySzjKew4ktowhPX7Xpo+ma\n7uU6PVWjv80rv+4aZ4LiBuJa+UweccUhpIbyDY/cw8L8UKQRumGPqh86cKZB\na8oQxfOWcieuqM04jQhnxgzlDbPfqiMqgUZMZcTrzZp0bvCHeEiM8mABbbhp\nmtM3XwxUNCdiLwrdkUlfxbeuO2pqXmYHjJS8yXev2OuQEJKFhUzVS+6HkZJ+\nBDVmabKRhgy4FvZtzO2bRw0FMnjzrqrKWKIF/COunQ44xKYqfR2HHXx/8obq\nsgtxKr72r5ZOiu6IUT7+gkjQAPAkVSypCKbMQ1iXFBjuCPYz0Id6O9XOylC/\nbJEZFdALRLG+1zno9i52MEmgBhTL1noj3BVBSCCEOYatYYbeugab/CJJhvqw\nOtpVlHPwEe1hLSDm9RBGbXQQmx3ewZdVQUckLjb1JoLc6wpJf4qgC7yr3QfC\nBeB07472tY+v+QunrbpT5SUhuj5xQh1ys7EN5xVTMVY60VR4LC8R5RMxO9h3\nwrEXpYbin/lYY9wLA+/DIP/bENXNQujzcZd6KL9Nh+BzGoeeGJkKyfwe4ixL\nqSkDDORGyCIJRMpUgIcSB5IinQoXUvO3jNuAmTxeg6/nbK63Xa4jfNAcATvz\ngHxV\r\n=eXzU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICEn8MrQi2k7s3SGqiCFuNEcdLutokl5S1VR6/7rQRHpAiEA0wjJ2G5OQqW9FhKy6DSy/jrMIs7NhB/qFEDaTf8Gw4w="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602073725-6756deaa.0_1602073840262_0.9241288944960226"},"_hasShrinkwrap":false},"2.20.2-next-1602074258-40944e56.0":{"name":"@xdn/core","version":"2.20.2-next-1602074258-40944e56.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602074258-40944e56.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rsgW73VycePeBgcnVszkj5XSFtnKGehBmX4TXLJK6ZRh7l2AY+0rGkZIMOU7Ork+GN5Sx3m+syvdLVzgQ8krUA==","shasum":"b4d69cde5a46cded9299c8f3cd06519180886440","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602074258-40944e56.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbcUCRA9TVsSAnZWagAA86YP/RtVwkkQDpfO7yAFFtuk\nyzdoonbyxKjiC6CZ+kWbJKiRNCNcl4sPeVLg2Zt3R74xR57XqgN0JITJUZqp\nyEXN5FC3io7p4jVqJH6wVVTa2bfOSknYlL7cxmurVgVpB61kdOxjMeLNjWJp\n1/3x1Pyi/2G9gz/7ok7ds76v2zMfspj8/nzmvOeYVtmNqeqrB42fyw/tZwnI\naCt41MTrMA7H6uS5qnvQca4cw7whllLbQO8p9fDG90xcWyclZYrCBqoX03xU\njzKrOOHs6hFacWyl2TRLhGyh0p2jFoG1eCSdHz8eNWXsYj96R+i/eKOI5Mge\nC5PaxYvdLDRYgQq0ucokD+U7CWtqMh9TezqXFremha6h9BEgmPxBfs9+RppX\n/A2K5lGA+q55RB7/FGkJ0FGvA0Heo2D/3fXr/IVj/reumAVkCaZmZUc5bVb2\njs83zB8Ue5JuhpoVWORW481iwrS9irznoUxsxQH4gMuDmmZz6DG70KO+ystp\nB/QEmhq3Uoylt6TKIgBGh6zoh897PIAW6EjTbzoBumqweOTteDdkxkoxWZru\nA3sQhss4XO3muMWNSkyS2LQzzpy4yVAbZRFMGh5fbpmxMjid4SOqdnlQDFxK\n8sVJrMIFVR7QFbHw2MLSKm6LR68zMAqsAp0W08ljtu6DPhpv5oJlHjsHbhwt\nbfUp\r\n=4ndb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuVZpiPDkgSv0ws+y6+LZdBmStDYYvi5+acNC5xcO0jQIgEhsLOuK9e+B7rB1VCQvNbfgXKE0ZfEQXHbRXWGnKo+I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602074258-40944e56.0_1602074388327_0.3075306215524427"},"_hasShrinkwrap":false},"2.9.1-next-1602074303-31255479.0":{"name":"@xdn/core","version":"2.9.1-next-1602074303-31255479.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602074303-31255479.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-iBg2EpHFwfUNK8vzF/+rp8WpuzmS8lsov/x6A304KPfBxCmiItbHNt/R7v06b703j2pqAF84SAmJvW0YpTJdHQ==","shasum":"ddd5162f82e40f9eaa9d9f8c649caa698b774561","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602074303-31255479.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbclCRA9TVsSAnZWagAAYDsQAJ79PM6z2hf9z/Nw27Sg\nG22b9Dm/QYshhFmJADVW2WUctJFpTaSp3lbEuNZP0XzO3IQQ6wqytn1oLZvT\nmAdYsJ8/ozR8uE2Q9qx/2I7bWnWtQouOQlY2OjeQ1nxotQBlQ/Vq3M81fDBw\npFoWlipy6RKpnqrKv7503SPigSHFfQxdTljT2cDNYl42q2EPKxfCRo9l8rmQ\nClegVnMwltiRbwag7ZI7LAcVqNtf0EtqKZ+mK/6dl9qCbUUwmto7wZ5Z2Hp+\nswWNvoosOm8JFO8Lb/8rys9akBlbpA67ExPj96ThzDm94QaZMVGhfzDaIXoV\n1eBtbIC8Ba57yowJBavQnM/sf6roSnsPAA6fkTsHkebPpuIhec0+TpoVgkgk\nWKU2s4GXt8Zn69V7k3muVF8ecODg4Ylk/bMFJB1LREvR/jhWzLBK8YgD5JH7\ntxHI3jKKr04cdutyy15ZJO6NcLuqT4Z6tzerqaGzEcqWCJZ7bH5gmh7VvEuQ\niCPkTsdd3WirRsbV+kq1OCs0QQSWTwaBquSMPLcYYn0u6l8dPKbTII2yghXH\nZPsCgBdffRIge3jQbX/WSDVNnYzHElf/q6cbyFxtfKKKCiJOQZ07ZvJ0hm1I\nhf2LAS5xYY2Byv94rAnbELkciOZHkCPAOCalTJlNZihyJEZncP8ZAMb1k4qx\n+o0y\r\n=tmPy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICQ6IAE6gDP1fnwJGSaHNan/hSk6YgkVBy5GQ2KLTc+oAiEA19JYPjN4l/KgI8MlRMkBo5XoFE33+vgrCuRI+fD4GHw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602074303-31255479.0_1602074404910_0.5957758667202726"},"_hasShrinkwrap":false},"2.20.2-next-1602074627-544de218.0":{"name":"@xdn/core","version":"2.20.2-next-1602074627-544de218.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602074627-544de218.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hCx2Kv1UC5s6yZc2TmU87EmzTQdagu3QZe+/1kuynRh59dECjLPqO2az/ziJJc9USbzn6Zk/Y5yT7qsT9vQxGg==","shasum":"efc3d7370b7499eee37363a3341f26ef41fb210d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602074627-544de218.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbh/CRA9TVsSAnZWagAAECEP/3WAYbzHyAIBiltC9DYT\nC6f3CRlFqV6fSe1MOpPTl1S3xT3cl2/Rn5Hy42piL0ztmw7d32H/nAOgGbg1\nAzZ3JY+RPtvhVjH1aFBlpV0eznPrE9697ZGSWCQjWTB5NnBwOjCNa4azDJ/v\nXxoBw60VORLnalxEtRjYdAJHtMFxI2ZGrENxJI5cO8vetppinLX/P4GID0XZ\ny9OxKilKPUUOEhQEGtbRAhc5GzRQF+4Rk2OssRkZVc5zl1NhtCO2Yf2stPo5\ndyiMiT947DQ4pCPJIPjCRSHih7XN2XSvo5qqoruuZBKEQY+rJRF7EEWm7HqZ\nRKHoPbjq8KXN2YlEDPZ4u4NbCU/DsR7ob4Pe/0A5leo33Je95S26RkCCQuyj\n6aJJqDI4ixx8s5EZJa13BygXloBf6TW8Ag72PWT624H/gXV8/JxiJ3dTMMAM\n0eLcluYmH7jmkctheqPhrBeCF0/1U/lDO1JnZuRl0ORamHsMzmeE76gzEMD6\nInCZYzFPaff6IG+qJSyb12MFfJ+vMhkMK6rAa2r3vfTrxp9IixHERn8g6dtS\nsDuBfMzrrxGcC7kVNvmCiheZQxF/O5WTCwB8TQUdPiJjiXntBfBWK5u42gj1\ntMqEp/VfPDzTxkh+NwBBoZW3QpKIZuE4LkXHYDOJQslVH1tjahxM4ixLdz26\nNNPT\r\n=89Xz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCm9CHkaonvEd2xteEhTvcRI9PzUpUcXaYrhTbN+gdqLAIhAK2JdUnBs7wDo1cOhIOHy6Y1SrM3iSy5gU2e5CNXNP6o"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602074627-544de218.0_1602074750871_0.6897451980252578"},"_hasShrinkwrap":false},"2.20.2-next-1602074636-d8e7e752.0":{"name":"@xdn/core","version":"2.20.2-next-1602074636-d8e7e752.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602074636-d8e7e752.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-aXjRaf0xoovEheaL2ljDG+utM7DZQLU8svkrNPq3HnI0ndvVZ09XCg/XUHqy0LK/DKNUxZjXMJ6fHPAuGrt1SQ==","shasum":"53b3238d5cd50c2431903a7be179aac924056763","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602074636-d8e7e752.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbiPCRA9TVsSAnZWagAAc9AQAIwvdO3emqfvdb7lo/cV\nQEC427+Le2h1+zVS2z/IY5e5UTwnIETNtAwLIEeyyANCBnF4NNBSYNYIJUTM\nJdUzjqX5Fw6bTEi+96Y0/ChjAkFhllQfE1e2hEQURSWJxrUN7ZLpMDbrmtPq\nTvDEYlRk5xJZXwOaKPyuV3O9hiJjhDYhcPBOsJvlHYZfVsEmMdk4yEM2s9Ly\n3i4CctK5DFwdLE6atb1RLmUKgS43TKtluUHJ8Cm2jaGHEswKvJsApsA/ZTO3\n8WHMkzX7s+mRUkCGt+SKoc7446a4GuJHAFA+tAGOfl0bxtSgdTOQ9Lv/Ufhd\n+c1iUozavVhd6TPTvn3VpUihvNTLAPGUfegEnjgjqMupa8oBODnbWoAHPl2S\nYcC4QujHbQTeIF+5fhrramNLi81W27v2hiu8TiaePGIzE3hXDLzMn7GpJBM7\n1mkllmdSUFzSwBGsZzz7MbCZbTJJXerYrBTFyanUSk8Ye8S9jpQQSwPVt3bK\nzwqdKZJUidgA2t2JRWI/RJI54gTnLb28Qh5voPHksPCc9eeBZDmLYN1s8+uF\nvzjVlOea7xmYWr/wQmuC7l+q6REksS/ZEuTcVZWmTEqSz9rVL8Kv+wRfjKCk\nLsFXukPpumH4qaek5+vzfwcuYFAq7ObxxBteCrv4SXHXJwowWnda/HqAchQB\nmAUy\r\n=4vJQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6BsDhKRtuLg5eGD7LFenhCPUOAqRQjRFAkxYesA1B2QIhAMc0DoB0y8K/+MNx/6i/mrsNp+Cp33qHPrqJXngvXUg+"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602074636-d8e7e752.0_1602074767251_0.18452146590571616"},"_hasShrinkwrap":false},"2.20.2-next-1602075706-544de218.0":{"name":"@xdn/core","version":"2.20.2-next-1602075706-544de218.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602075706-544de218.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-fCL/MyyQwoWA16SrQfG6WhSUP/JHRHV/se8pFV/XtUyiqYgDlKARzeo1Ubzgsp049rsucDhyybvTvFx/JXT2jA==","shasum":"dbc871e01af19472661d20d48e9d331b0d02937e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602075706-544de218.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffbyrCRA9TVsSAnZWagAA6GkP/R5qs3ALX5y9xw3zMM69\nJa0aQ1jQzlCGCB6Dv7i2cf5NbjrFus1iSBcr0iF1JpNU/UkWxXqUFZ2d1jUs\nMdFSJjh7Cmmm0Zd32q1vNFUi9lJYRcNIDGPw+14kwBjlE+VyEoI2yZUwxNXB\nnzVY7HZbI3BmVuFF6Q/t9NAjf+OvQfh4lec84M8gMF/gypAe8zEPaAxCQqLi\n5HZI4EPqfe8GKP3uwaad2uZ3Ch10CnNVX3OzPCoSEbbAWZd7l6FIUUZ4eXay\nE9RnbYprl+fxveVnsv+dlH8TP49Zo3Ev4iUuAsDe+VnesHulXqYkVWcgfYsK\n1wwZHNLZCP0HyngYOBNkRlyh1upnELVWIfXJID3X0YqC5gJSxY+3ECVc8+E3\nvfTmZh/0mLaCVUA9HyTZgobTVQIKHQOaHxXBEgr9PfbGXjYe0g9/kF5Yr5fL\nqdNJFxP+5Ewtcd6BGX70klSy3pWeGXZcPi1abwrOMjtB22+ipqKloSor6tiL\nHMVAwsUqE2gFHiB3TfTCynGhOUxHWizOcHd8Un8YUESITSsTgIE00YybONSx\nTvj1LClpqjERD2RhMQ6gri8Gea01w3BsaGXQHjZpjFBpXjTEWF0Oc2x4v69C\nRjqDX6c+Dt/h/hx7wsza8zInE3b4oXbbKLMl3GXlIAS22Y4Ft85dEbZPY5GB\nAdc+\r\n=0/ho\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGB0aSRhwO58kcDQfvJ1x9/rpfgU7sEDDNZ1DZHis/J2AiEAiMKqoIvKaDpCxJCvud1G5+GO/P3behQQWyb8ZdPxu0M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602075706-544de218.0_1602075818537_0.9187884875035917"},"_hasShrinkwrap":false},"2.20.2-next-1602076465-e649494b.0":{"name":"@xdn/core","version":"2.20.2-next-1602076465-e649494b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602076465-e649494b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-p0adQFE+q/8V/iL63PxzFcWQBnjk9M/jAM6rAIca9sEooLv1evxid5XA8aTdqwzcUaC8Lyqd2bcgdr3hpZZDRQ==","shasum":"cccae45883375606952665176b55a5d5083f1258","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602076465-e649494b.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffb+NCRA9TVsSAnZWagAAlXAP/jUQWGsGSBpWnUB300+h\n5YIqphyR+SrBstdXdiCjp3xbKbgQOdfoObcGI+aBxb1C/WgmWCMOM7WHYG70\nYtSErT9wPAbaImpCn2mbFG/ohVBR9XF1QfbqudVVHkAbJyKcfgny8R4LVaKB\ncXZuRw6p1bZlW/OlOVDTyZiMsERrjFz2p2t2WHWjf6NYp2QC1EViQ6ZcCUwJ\ntRWdooB+Ohdq0y99hlN+IvGK84sdDnGy5dsXoKETm5573eEywKjEOEJN7Q8s\n1ElRo/QSDa7NX7GHQ7oPGLXG1wLuilIpieMPVMStSfJ+6GgmvMuy9a963f0k\n8XlQKNuSAjt1/r1dgvvGfQP55mRkqVcMYBkDhtqZQ/5Kc1NnNUO7fEXAbvtA\nA5dIgQKSW7BZuTs0nnS6j0XsBLCrPRgvEupwerllvKSJZl1d2W2mqj/rFwPm\nea2S33EopZXE1hecnMhPovLGTPPFd0fMTaAjKAaPZDvpio+wcWAe3IAtz4Nh\ngGa7rHdzTw1OhUuDWATd33Yasld7f8fGI92SgFzOdqFa25kVWBuXAt6g9UVJ\nQP01lzYHLrrOcvOOcFSCdC9DKjCA5nb5OaJp52l17g3riyOxDf71AkSGZiLl\nFGMqjwkOekdSYJ0LsoF/SD5Gp3fbrHaY7kbdypcwv7axFJdxGQYDoT+TAo7j\n/f++\r\n=5VTv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCE2hxKbD8n9EYZ+PyeDylkcXc0fmHBFJvd8hK8ssItlAIhAOYg/h7GDNMoRPrJ4AlkTCtT+OjckNz63H3a705MTB48"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602076465-e649494b.0_1602076557173_0.9396477393000704"},"_hasShrinkwrap":false},"2.20.2-next-1602077083-c7565caf.0":{"name":"@xdn/core","version":"2.20.2-next-1602077083-c7565caf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602077083-c7565caf.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PwSPo7gUNACkIfvEXDwHaVnwMlM6UO628r1LrF6hEylC9dXPlX/lvpE56eWPVlEzG6rc7OFmIS3QH07Hz/kNmg==","shasum":"d0ebca6787d89cf6fff010d7028e7c3b550c3042","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602077083-c7565caf.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffcIXCRA9TVsSAnZWagAADP8P/0ITszSVJ5QG5uHheV0o\nRa1sM4MR3xynIcWStB/o3NY7HJf4/O9+n/J4+9W9sl0A/hm8ILQnARH6FfwB\nBmV41J+JLlTUHnIH2nFU9aEKF807pQ/73X1kx2J3q3914QZ2fpXsbdCHqxYq\nMSQtMy2FWik7Cx60Ofc3Rs2Aa3mgbdDq41OoODk5CPm9QC5fCzl4b/qnezks\napp06Ol8jF3Jj0PhRCGWUWT5+SLXgu8ymW/PS3JTh0b6013KiCgLMb5OVU/7\nG9jT1PA8b0tTieqdbt+2vasz6BK6sHUcK6SgYXJP9TYRQrGcjA06OpjZF7Z7\nZVM3ZKhrv4Gl0nVxGyJDlto7n2afKeWkzhMSr7Umj3521x6CPO5xPY9DKpRM\nY/ujHRta0h0aBYNow1cZSA4MVLt4rL9nPq0MFtwIt63utDs+VSu10vjxQ6RT\n/yPBgiv4zQKFT/vKcczLkUxvA5iXV2xfo5ijHAPYFzq9pPbNSEA49ZE006O0\nqkDMmSwYWtJlTL+hr3WL1ad6P/atJylatNwo3c5yDGNjZJP3hiMPGesCvH64\nm+wGTYQi2OiIcBA2K9OPOyavvmqTvH0pt/OHc8d/ySAiNRNEygtPeEBcRVhV\nL6kROdIk5Y98zK0jTeLvo79ueZNWO4apo0NySdlrwAcnREIHHJD3xEe7TIE9\n/7nQ\r\n=ZKzm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE6eO9c3LGf4KdFk2rMZmQedGufqDfGDa3TO9XV2u/CgAiEA7QW6VGjtTAaVCyoEn650CAou6AnF77JNKzDRPLC5TeE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602077083-c7565caf.0_1602077206806_0.9016086206995306"},"_hasShrinkwrap":false},"2.9.1-next-1602079646-022decfc.0":{"name":"@xdn/core","version":"2.9.1-next-1602079646-022decfc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602079646-022decfc.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-59nRcG81Dlr1pQMK3ErLgs5ukOXDGzgasZ0p2FvKj7MdXa78Glb/5BoodC9MDkUDrGFXbX5+KkQGeWEKh/BIgA==","shasum":"57d0469c0f80681facd6887d4df7bc7a8df86933","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602079646-022decfc.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffcv/CRA9TVsSAnZWagAA9r4P/1pbBGDM3R7L3TNhTSwd\nE8QSeujDJViPdoOoRaWvXyLdPuvJuwDCwjdPWQPsKzvcdQlm0cTFIDUN39xF\nAFfaz2vU29AUL7Lij6G/DQdI3l8uoAgrZ/uddnOmlkpobBf+GF2+8FkyAFHS\nV3WXEDuKqBSZb8OU7L8QPqtgscjVJZZyopTaK6j2Al14mugZeD9i//2oMKD3\nipNRjm6utWztGT/vkRtJUwdWRPEU7CIIactXnGUxYbqgA9cXadu6yKnOGCev\n/nznWsdDLFwMT65UQj0kC+Ce203MOU1HXvNsxzeGkEJ3E2X+/jMsrZXOFkdT\n+fqACG/oqmt3agi5KEA3TF8spzf4l1JrZ25gHtm2RxMThqZUmHr4FO48JkB9\nYavKzERTsFijnzugRZilA5hxHS9zhd5AZYNdihJ8XQf9O3USIdmPpJsY+pfB\nGm9Cndqv27dYD0s+nkZDjvfGgQgAH/WFblYjCBQ0rmQQoP79G9sCyOwtHZMi\nTcQvpzn5yGgSUqDDSZ8dh3C9qJPBSKUT0mey60r2o4SpRKFMhwSdWtSoqlYI\n4y9PFSurHYmiTg4BzqzpxqU3yUFDizagKo5SC+fQ9nxGuR/ylyLXk8/mzxLl\nggbyT5xK2BC2BU8TsiYfnIefoOJksq5nHn+UJYLe0zmwFau/9FTAlW/9jQJN\n3/dz\r\n=NE0e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICgLG4lDmsd0CsIvK1PcwfZCH+FlnDrrBCPngTVOjmplAiEA0PsQkA2egsE78sboEJzZdC6+fNEUw9HEOEZiRoH9d0I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602079646-022decfc.0_1602079742457_0.6128274467037902"},"_hasShrinkwrap":false},"2.20.2-next-1602081730-40da9c55.0":{"name":"@xdn/core","version":"2.20.2-next-1602081730-40da9c55.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602081730-40da9c55.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ZeJuUIuL6BTPCp1aql/ISQwBcNlGhT/usFWpzihXqHWh3sRbKXbTbhxCHDNiTpLXS61i0mQscWrE1J3kypRvxg==","shasum":"91aa73ecc0e3d134d4ff5fdfccf880b125addf4b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602081730-40da9c55.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffdQ6CRA9TVsSAnZWagAAofkP/RyaSvaflf6lKiI6ypo9\npCf+nPz/AMalIYHj2wkfUkA4wgj6DcmxQg4rbc2IAn1evRz+f246R2MymaoK\no5OK5h+6PNQGqHGNRoVcU5Mic4NSiYQqTSvjqpTJM78aq/nWb4S4xzW8Y9vX\nwJXqrBF2u5DnLbj6Uuhm0Mg7sgCu23OejmGRkoj/wqnCobcswbSe8LEK5yzu\nDCSMeeB5VKt06BkC8bVNlGImqeSPWbQLR9wVZN1slv4+gcNXo3vxSQd2YnX9\nDY3TCHBFwy54uUreVxRSqJhK9+ocUb8CHeRRJ7suloikCs4/DzPZz5M0bUYm\nRnZl6PR7UYtiKtp1QkRO3y0kLSpU4Q+vdytTGqdVBE8vDVJ03lI7SBe5i9lu\njZdFfTjq+y32FVpYmbua0sNKkdiyr0329cIpLMhBqpaSZGuaX5iDJqRw2wdR\nQ15GmM5bwypKgL3Vzgw8+tANWpozARhEoE/AjD05pOTY/mcRNNlW/Z491kxt\naxWwNKxeh5PdXA/8D/VWE9QBU0fq/8o6pbdcdnDQjA2f6HcYmeHFw/f5+LwM\nS5mSP+7hc862CQ2q8jQdnAHuKezDFX4ZsCTqovKXylB4I5hj5OFAPH4sDENL\neonpVBWnmdP4DI6VNlYei/iGeR8/2vaIXL++/S6ffqFt1v0RMT/JBaAI3gdY\nUF0K\r\n=Xi6I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDjEgCQ6fNePbxRqsCvosczvS+LlsgNYWVBfW+bH5N5PAiBYBEW1vfRorslA/xgigXaXwWL3XIbTYgzQekY6PKUyZQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602081730-40da9c55.0_1602081850418_0.7842274801334437"},"_hasShrinkwrap":false},"2.20.2-next-1602083221-72b8d339.0":{"name":"@xdn/core","version":"2.20.2-next-1602083221-72b8d339.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602083221-72b8d339.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9rP4fgdrHc+DgMBzcEjAFqkyFwdNBCkUjFhp/s33riJmdutztgznEzAokZlSuXIxKiz0tN6MeVgdoQlruo9M+A==","shasum":"c723afeebaab59500f894a1265adbf102b67725a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602083221-72b8d339.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffdoKCRA9TVsSAnZWagAAoiQP/AzE2zia+MIpBeLNEgre\n/il35JovYXTGFDMSrB8ThQN0pXOrV9xVyrswPVZhUcDBRrTSPScAfRhUjayK\n5nm1CSwSL8CKRElsSdw0g8amfLAnR5mxkwMoW6G+0avcq5jKfo0TXhx3ZKJK\nxO98eqr5Dg4VyfAkrB+qDUQAyhFcqK6UeDdbU/Npu7RuPTk1VD+1t1AE6gsg\noYF3TrACbWE4q4rgQf6Ckks2SFlKgIu0OudjUpp20YvHaXS9pIWHyXmmaD3W\npGlOlklVqQXDJhEuO9RGThwA4HT1+sRzPeGcbPSglmDTffDnkYlymp78THRM\nsW/X/2htN98BguTEx86x09EMVFMhhjWKseed68eVTvUZqSwxZRYB0326Tqjn\ng5ySf9wM+6YjgBtmPJh+J4fVHuaM0u0sSyyKaLv1QMmY2g7GW/cNYcTOUaIL\nvgWgVFjQrQMlQTC9GkhaOGfuKxIChQ5m1BVuv5+RgkMZogSo5Q+53o+QH23b\nOV4HgghgQib53Pu1FCGYM+OuIx+D0EfjT+I++i6NrZya17jOu5wYCMGTIc2M\n+6kW3qcynP5/WhhOGC/waFDEDfpXbQh3Eh5dQOWn8z0+7Qhltp2oolYElGd2\nGWcFRky60t1ix9i8EJPFZwx1O2txcQl8sB/9HV9yzmQGXRGyWbt85qSAJcuO\nltxx\r\n=UsiA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8PVq2tQ9jU3bqVTAl6wBguSoYXQJu9vwpeIb1sg489AIgB8OOPbuKVnmYR5B+3D5/Y8og+QKfkKdeHsnly1QzQ6c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602083221-72b8d339.0_1602083338094_0.1683833591994257"},"_hasShrinkwrap":false},"2.20.2-next-1602087350-7de52fbd.0":{"name":"@xdn/core","version":"2.20.2-next-1602087350-7de52fbd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602087350-7de52fbd.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tOzJke3ntum/26AMnJ7kc1SS9t2m2EVB/rqwR99Rzd6HjQnn8C0sYqTeobc1zBGWzg1CMZn59p63MNv3G6XUSQ==","shasum":"5a00ff2ee422441d037fccb3cba9450f94bd8ce6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602087350-7de52fbd.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffeoeCRA9TVsSAnZWagAAaRYQAIswrnAChHirMhx8fH49\nfxSAWoSbjLtsxyWYXt1Q0hQOBv65IZkJYcxtcmVoWx7YlB8VHJxK0V/ITOa+\ncWHHI/3759Id0P6Mf0ZaoXCKjBS8hKl3c04EYRRskWVlPYM/KtkzP76C3dbs\nP8aZJKsd4JwI1j3M5O6uyReaCkYyoz6FMhcWuvJrYlUUM9BWrYpYuJGDqqDg\no63wm+i6Y8Xb6LUOHdGpwJX+xWT1sW3Ui8rinzlbBdVvYnI6grWEOTbfI5aM\n9MW8ZmtPZ3OuXc7VFSUNJX2xWGx6Akj7y7POVXUABx0QyW6rQU7C9+i6SZiS\nqg/5USo5F2Za5spUVl8nhiKFWcL72x1QnkUNcqRPn2/MnUdOYufhUUBNmMXO\nK8UYfmWVkC7env278hrwsuVN9H/OP8Du3jCKzlbp66qb5WkF4XFyYBc/33tc\n+edgPo1uWqfyIATbqp712hUZvPcpjIOT5HcUrYU5sB9jyWZFRf7L9y6h8osy\n8m5G1ZnTgH6HMtTnlxYjTONy/WVxv9xZW2B38uNTXRjrtHTBMHnhwsK5YwlM\nnCEeOca38O2NNndyklNMcuTysOjFTqh3CUR1xyCaUd28fgUMmmuxgFfRnWuV\ngiNnohzJUcvCpuddWxA+BmJ4pC+8qoqOw1tufgDjgqV+5+o2CienOvMPVmWx\nZxwn\r\n=jL0x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEwNZRrgS46SRck1hwytD4tXWtN07kZ8WpE8pIGt+oP4AiEAiW9q6AH9pql2Mn8WB9Uh9iqQF0BspHa9/pDr8WPRNWY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602087350-7de52fbd.0_1602087453644_0.3643481689973169"},"_hasShrinkwrap":false},"2.20.2-next-1602087719-04c7fc3a.0":{"name":"@xdn/core","version":"2.20.2-next-1602087719-04c7fc3a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602087719-04c7fc3a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jgujtUWVGfXK0WAjHeIHL18X0wGPuomTI8WXscr0TBB1g3ix+cNLcDG9+Jf3N8/dU3Awgv+HxgnKThMhcmj+gw==","shasum":"d11afb07e16503e7987e14eef5482b549f63ca7a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602087719-04c7fc3a.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffeufCRA9TVsSAnZWagAALBYP/RANktg/1pZDAEDp72cc\nVZt4uVbZay+VoNcrXuwumI2yDxGU7j86m2iXiQDdqZpM9x9DXPjLRchEtJA8\nQ4CRg7a/gr84QwH2RCVvMLO6zXDJfB5DGfKN4iPNGFRQlrWCEnErn9KoiTd7\n/FGu37xnCgjsEsXxh/Ui/Lh7bMgcpnACkvcnueoUJ6sio0zOng+KIzRD5C+2\newGVsAYjUdAPD42GFN3hjsBnVRuW0K1kjdhd3ePG8B43BPbZbio5cORHOPrT\nUcgt4z6damH1QUkBModl0G50urjq6R93sohlQ60hySmHgoKDDQtBciiVBfMd\n+1sQdLNpGyMjJZBFKMhidhDEAeXVl/1/qRFHETR+aotQiNHbHUf5YK9/lTmf\nDbobcQS+AAHa2zDjH4dosepr+0RGbQPJd2spg8GRd7TyTw+Kq0Jxiu4CxqzQ\nrw4/22VESLPCgQsIVHKy/owbaQBXER+ALzwbhxvGkfBjY98Qk+nBUW7UMrU4\ncm2BqmsbuzRt0ba30m+iiWYFR9lVvEz0WyyOS+Bo628HdsmMpiH2P254BF4D\nAJ3biL38qwclkO8foAwUCFwc4cTcT/L5WYSaIECMYfVkZGqvAo+oPJVlhv+t\nNLHhPctnIsaf3AInH694f1A1O5X3kaoEBJ8bzIbd8H88Y/ZO7tPgTaLnw2Pi\noDUj\r\n=jJBm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEgCnLOiuFPUrc8SD0AHuWlhS9I/pVM8bWvMD0vVuPgfAiEAxFWgvJZBXQDQuXfFZJ7bdPWEUMTxD1JpR7nk/coYhBw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602087719-04c7fc3a.0_1602087839277_0.16467316394493614"},"_hasShrinkwrap":false},"2.20.2-next-1602087805-d745c793.0":{"name":"@xdn/core","version":"2.20.2-next-1602087805-d745c793.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602087805-d745c793.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-MtihY4ncnrPJ6w8EnS1Y5LlttnRceIpO9swpoYpQg64AQ/CJj5eEvXl+HmUdn7Afp0NL0eLQBwjbnvRBCXk7dQ==","shasum":"cc8a1f225734b05f4a5c5e91f275290537e9814f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602087805-d745c793.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffev1CRA9TVsSAnZWagAA+r0P/1LjDRx+ayErv3zaO9Ay\n/IZDdmHbPb07pe0EMundXKNh1ZCnG0/FeenEgy0Hc21vp86Jk4ej41hMwedq\nVowZOQEOWfRcS9Wx6V+qGktMDzT0+ObE9zrve1idAr9AVHarIZPkb/4ppyYx\nZq7r8IuS1ou8hNvnRbslFZbV2bkPTdY6yIqA7x8LwNa+/gRqHnuAxAXFaUEj\n3jWRym8pr6B8aFGJHSVi5BZr+XJqAEkuyiZu/ajQ+7MpeULVfvpc83MYOcNL\ns+ZFEMnURgoxV3kJSPySWWYfNM1rVw3nUBaXAs813UjAAp1Mc2NIM8pH1cmc\nMPMEjQNE8WKNKXOhiVFh+mQMMIhOSmGhWERyXKUUvKaVrcEXYbdEtxIVuUOO\nfnxqGSaH5MxOeRMN7tAH3/bEZF9cmO4EIAv6xdaaElL+PDTWO/6zGZErx1O4\nyeyro9lsi9Kv9zD8NWEFUhJIx3Xmm/6VI0E6j65IxXip6dpF5MApJKsmpWlI\nZwKhMYdvuigb+2DJZ3RuMOHw0tkhR4/tECxzuX4Htlc/JdTo2ziPoSWASulk\ndeES2VXbvbjmL3akOE7XL6U2CUaKYvUtGIfXUrtUT7iK1vyCBd/pgS9KjZOs\nq2sbo3tAfFyKjAm/Z+/fh4It66xf0jfoZ2jLLXx1GvhxgRIrLtZDbyOm1jfu\nwwjU\r\n=WQ0R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCBToR1puerJLMfrhkOn64fwRUg0qyCK0CIw2DICnZiAIhANWt6gfT3kIrD0TAkLfs4G/akMfyTDGXOqakx+wWaCLQ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602087805-d745c793.0_1602087925397_0.34194572297222914"},"_hasShrinkwrap":false},"2.20.2-next-1602089423-d745c793.0":{"name":"@xdn/core","version":"2.20.2-next-1602089423-d745c793.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602089423-d745c793.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Eo46aJkCvCx1p75PJMYsP7tJiqNbiCQa7GMFV66+qfz2S1U9zdvkmoi2s2vHymmk1P6U08zD/T/H5mVy2zwttQ==","shasum":"e0cfb0cb5ac44f7188cb7b1c98f278161c45cd63","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602089423-d745c793.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfffIuCRA9TVsSAnZWagAAxJEP/iFPUNB23tjH2BkNX9Hr\nxkyTxGSZyI4dgzbIL38+OQRl5m539EsgcPtCSDmwthPYvW6NnGc6YSjCs45N\nrdw3nKuTx/gWEEbteiAWRW+9HDCusBoQ5J5hWboQMz2q4ln0S1dNr+gQpEAD\nCGUD7jclEnr/gmX0miGOBSjhHkNqO6ZVcyo7iG7cEd31QSpCk5YkuFnNaTCT\npEYcZJZTc4oOilwbZl3p11GLSmxhc5e7p6f9J9QZTtQAchOJiSsxQZbZA94A\nl59C+EhPDBHKWWjX0FKs75PE1PE/P9iDPHkfc8Cn8lkDvO8f0OrpRX09XtXD\n3I1HyadB8xbILN00i37VynkGova+eistj3Nx4dghh1atav1EDuJ9uu/+GHd5\nZlgErVzqwVbl92oKlTDUEDP4XqiEsXELZuMRZ7LNM9ATEaqiiLiEccH2tin1\nzbVZyNogNHMQHw2TUWgKwqZ87kLlVTazoDIZkoDjeMb0TnQfo2ZOW5r1QzG0\nzQSvaXwqk3mqPv7Wv8omvz6iIwep/PwLQrP4zM4tdO1zB0U+46SM+Q2qNm6U\nlksLzPYBwRNtByKobah7b8k36n2ZuIhjvNNO4zIX70C1pNXTxaxruLZlb2nG\nBTD8aBwFkQKxapdN+u28Nxy2SGgdlHTVt2jdAx/d6bPuRgHvz7maa0munDCn\npMEm\r\n=48VV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDF7DXqTqNX1+fQZXEO7tmqZ8AjOKv35rYi7tD+2RLejAiAUQSzUq95ofQo0x+L9nCwEaqS+gTo+7L3XxBznpGOw/w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602089423-d745c793.0_1602089518116_0.051836979213975454"},"_hasShrinkwrap":false},"2.20.2-next-1602090428-d745c793.0":{"name":"@xdn/core","version":"2.20.2-next-1602090428-d745c793.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602090428-d745c793.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VnxzRTs6DAWyuz1PGriqrfLf1liUxqcYt2XHUht8goyeLQ6mUCOL7scxr+r7O4lUqCRBIqBVtud4ahyFTyVK3w==","shasum":"1add69d3d5c00dd72ef3bc043b02971f9a60ed3d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602090428-d745c793.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfffYcCRA9TVsSAnZWagAAwQYP/jj5zHppRMfunGqLMGaD\njTitfUjPXBCFXSdL7URgGzDDK/CTi6V8pCUdjVH9n8E9Wy2bXYRAcbhKvQAc\n4LT0mmjhsvVqg+cXbpjrKSoJeytNQF3LTvpoXUMjhz5KFRk0g/2kPPry1xVT\nk1yv1pNlvr+MAH/H667JJSIDBxGYEb8dbypsutwlAZyCmpWA5FiSOup2sRnW\nM+2BnStoXevdJ5oaPND0niuvEnDjTMHvG7SMyS3VwAxqlR7Y8t297qrYbnhF\n3m5nvJFyWc56mr/WQ/pdevTipRCJ7OUZzDYh+6yqO5WCdhP/m62CvM2sfiea\nx1Wu+spC+yFyzBwis1SK9Es2/pFhdhsuq8YDaVma1BaKZ0DDb0SGj2tCl7uP\nbdGT5Nm+l2nueWu+NAV2R7y0whdq5yVmVv1KcQjm4coH9VIF4FZrYaH+95gR\nQvMNk0wqRAEc24mcNZoiYxIbjraYi6Tx/gGa07LnyPIdvGy2KjS1O8fcGdwK\nJp4TWt1jaUqgiwZZyzo49CEUNjDLerQmkOttiGpljzkrMawNf9Cd+eJBqFOh\n8oYm04frg1YgAtunAfH/mT+EJqJC3N5o0eFGnrGlaXk7dN/iwXy0SpN5480O\nyNUm4cEwB4W37BSvjTcJ6wNWvmNpblWW31p7pDLRuGoFvLexldbWbgarz/Gr\n9I4k\r\n=LsHN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEIervPzG1DJvxh/rBl8ovJ7D8i77o1kRaHugbEMJ9gjAiAQhBkB2gkmqa3SBnpOtKoPc7cAfSg8lz/ymWqqQ8NAoQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602090428-d745c793.0_1602090523573_0.4646941669667708"},"_hasShrinkwrap":false},"2.20.2-next-1602090603-496b9260.0":{"name":"@xdn/core","version":"2.20.2-next-1602090603-496b9260.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602090603-496b9260.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/oBAyCbhDssjgJzPpsbXfPaZzI20DNO6Gwey+9aFqR4atRrHejXRKVgYKnqHPNQ0nT/lvvuHwFHLHQTJHyXFwQ==","shasum":"a36ec3dddadd9bd0bc2dee33ebf6f64a026d137b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602090603-496b9260.0.tgz","fileCount":157,"unpackedSize":577530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfffbyCRA9TVsSAnZWagAAqGcQAJodVVYO6oeadf2a5i6d\n1s/oaDv+GHD6XGE88RlRtVDkzsey9S7DyLVqpX+ZYL4zFHB+GPoynhKeRJhH\nH/qWoXiE47L7vtDt1dGO2kwimT/1p/ndirCuLhO06sUR3/4AW+OxUiZca/7j\nD1WX95NVzCxv7EKWgVySkSKl4x5ktJxOpmHTrppo4iYSwr4vsuJZYD31+HOn\n5Wd2AtpeOtjqPjx9sQkAdf46680yJKEFmpIotHtygKxnRP5fZEb5wDSVc7li\nogglHzfO9vK8ptIucAKDDskuQmipkhi2eQ+QzwbqHgLJ8g+vlNvki49tbogX\n+0RiqR2TFvUFrWYVine49shsIr8E7kyXoRJG4ii0VmVCnLdFAClzg7HD8foT\naVMCror9gg08w1JzV0A79GhNR1fXEDQ/brdbbylTufJZ4R2YA5riSZBG1LrE\nkiIYKwqXyAcJV3W2MMj889D0ni3rUKZ/O/TJ6Hv+sdjFDZQMxaSFlISv+GXO\ntEuMzPwW+lfCy0ege6mARD3IiLAtDRaiLF4NvOKSGn7TLDPerNt2g12T5c5B\ndJ0G61U/r2DuJtcivcvO7Iwc16RJgzUOyT13n5pPGoazDuUAoChuNjSc7IzF\nQwEeNsfx6GR7MjkIgxm7j9DW0m86oB6kCgTkuQWQyIWeX8OcipuiTVcmsaGj\nl5tg\r\n=8roG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpYp3nTvVYQodmpZ1uQCgiH/aPZTn8MEd+Wfl76hoxOQIhAL8eMn87CFx7uQKLNZQLRuh1tTiOzK8r/qwAIfurclVl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602090603-496b9260.0_1602090737516_0.675201463466792"},"_hasShrinkwrap":false},"2.20.2-next-1602091462-a626330f.0":{"name":"@xdn/core","version":"2.20.2-next-1602091462-a626330f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602091462-a626330f.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yCJErbhN4QYgGaQVdMjHCDoGioDQw33W/4gIyMb9kdZXgR+5U/m7ZC2aapgXiPZi6sn8aDnZMznLsQ7TeZW7Uw==","shasum":"22b8588f3861d29d6eab5893359396250ab82156","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602091462-a626330f.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfffokCRA9TVsSAnZWagAANv0P/Rs9leODsQbwADweYZN+\nGt0Qn7fcaAI8B/r+v3YJ41Rn8R4J/Xe7JgHO4NkaNFUrugg6cHPTXzAwhjr5\nXhW/PryDbbVM/fZmbM43NtKXkPBgnyJrmhPL8XuwML21EmJx08/rmOfcHqm2\nGrs0lExdF0QmeX2XnKk4EJv6AI/xm28RUQGWF3sYvItN5m5Kb/T1KmUmq3cM\nI2HFmBrM7NdSRtntFv7FUDhzI3u3W3SoDyPu3FHMByGFjvvREVCIEk173a+q\neYR9ZujKqDxMy9rNy0wjIn1EeMS5DCFYvYniPy8+k6W9XULASVmrZXNX9k4l\nAMe5Pq06w2tAhw2NtR4J/A9UIaOOGmFi7m5F9krHiHBZJiga39H+0iRrKI16\ndmdfmKt5UfURSo03Qbvc3G9oUILmdL+uhwfrlC7zViGgGzEWT6KeS+3wlA0q\nh6m4ekIEOJ93s1fdQTuoU8u7OfdZULZEucDXiq8/h/dYdVo95dkgUuYXF7NT\noqczVbcUNOHS86PTquLOWadWOycFCt6Cg1MeL6jWukBzr/jUoRUff4luY2/Y\n9l7xX8G18TGs/ycra7I5ZYi8yPS0pJPasgC6kB2fnr4gl3NF9cp0u9UAu3kb\nmZc7nGBbuxmy7cNTddbhuNZv/ULX4ESGk7nh3QhK+im0eDd4F2MtEmEYu6F4\nLs2k\r\n=mc0o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHiwNFqkOO3AFZsSlqyZrC35QlyspTov7OAPC5UgI/eDAiEA627qz1xHlRBO2niaRM5ImY1w1hkvD3n7Ryiz1mjIOVE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602091462-a626330f.0_1602091555548_0.7732917002782527"},"_hasShrinkwrap":false},"2.20.2-next-1602091521-b28b8cf8.0":{"name":"@xdn/core","version":"2.20.2-next-1602091521-b28b8cf8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2-next-1602091521-b28b8cf8.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-atYjWzTV3M7NSLuvAdyv8qrWfLU2bc9gW8FsQsdHD32Q0nYo5qbrOVq+kudgJEfrTOMPF7zO+F08ymdfU4TilA==","shasum":"b3f11fd1bcc2317cde4de2d103a8a06380068e99","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2-next-1602091521-b28b8cf8.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfffplCRA9TVsSAnZWagAASfYP+gKf+f/HKBDI6uyLngZY\nYIutJhbTNzoEwWownp2s6cDdo37Lh7Zu97LAKNb5EAJ3j20il5FvMgSbpStC\nMRI7+0ZJhLg6h7UWEumsUmQUE4RrOsjhmjVfOzncqh5XmbuWGpHNzJ9cPWGH\n19XSYmBsqBBXTEXujXeTO3dgsuBmsgYVPIaBRmIFdRz6PMSoJ+ksTv9slPtq\npK/oqfh/lgyKrfzAUXvCiq2UaLanf8eM8Ae4XBR3M9r6Uw80k2Lb+HvfdMEg\nd1+ZGDtrq94fv9kcCf92kiYj1Qo3KKjGu7P1nGB0B6Cdzw2oceAu0NNZ9kOA\nK4HoCWF9aH9gsrY/isTFYdkVPzsLj7S5apBagFhyhmYSNKb4p+eP76EUQx27\n7IsuQxAeaQu+xF0gcQSD2u8uEguWAPjRESNoO7jlX+sMUFzeX7njkxVP5rTO\ni83R6EJlsxfWwBO5OkQMdxNmpn+8urI40tJZo3RYwPvlROTJj9BG1VF3L1e4\nhqylVy/7uhtYasWNVUpI/auBuSH3uZHfLflCyzeuwMTrqMnUOnZSxodgzMFg\nVV8x/B1zMaM7jtN6s4iKJXn5QaLbQEDuZDV+QzImI4IUT/sE7QoDDUyTwqXi\nC8b++XqUN3gYMKGCwLZmMlWdXbWZKChKmZfAa+E8Pm7rIz+OqTHpmnmJH+XJ\nnv9J\r\n=lMfV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDhAfrlZXLodQBK7JXRdcfrXFNBN82BUPTWiEujpuavxAiEApNOSKxzeCQjQK00b9kica4nr1/DUE7HGm29MXjRKEyU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2-next-1602091521-b28b8cf8.0_1602091620785_0.8944545097437058"},"_hasShrinkwrap":false},"2.20.3-next-1602091571-6a2cbcf0.0":{"name":"@xdn/core","version":"2.20.3-next-1602091571-6a2cbcf0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602091571-6a2cbcf0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yGJ2UIRk50kShcW8xI768Wv+jIEoolruKRPP+WJ05BmRrInF69Qi6VIriV261RCfYc0FkRkDRhWEqFMZuuMepA==","shasum":"36fce1644d80e41e4e25c512e425d04725cd3105","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602091571-6a2cbcf0.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfffqmCRA9TVsSAnZWagAAGb0P/jCeRBCcerCJtqAWY/rt\nW9ciyb67gCz0tk5QKAbbMfy/GIw7As2x4i2aNsK3KNvDsIstBH68Gw9gICdO\n1fWcGwLcX5+eMWRB/TwoqG5NXVwzSQIAM/MZaM5RBJy1EBLwFitpIQgjKxR3\nllGE4fZDi2YUhOMexuYn3VcFmxYjRA2umCEAKRYzLXH2ElZbSkwgzzBLiUn3\nm0hWwl9GhHA6eDXorkKNozITnxE4pzSgNayYyFKvj4NSAfx3P4HATJ//+Jph\nbtD7gMqUbzcfD47IJYcW7W0Q12yMIPOFlmSpw74LwXyFly6sF/CInBMY19/Q\n1IkT/LXB3+C6PMAZ6afte8Ttd06pMG1OR2AMHWk1e1uM9HkaVZVfF9ugEBqx\nKz32Gu2V3VK5ZbXlBlMiFP+onQsAe0n17lEK8OKzx8BJb3Aecq+7NcJCP2Nz\n59SZmEhYT6W7E3IbQIx+69abSNPJpI6QFXHr0zqmpcqbFvMAd+TtQsOdOAmK\nikQBfxnvKRU9UbAd8yd6AnsFdoOQQeJu5yPpr/ZMWdcACljDjw9hyMv1oO1q\nVU2dRwRxpNVP98L7p9jTeU9oeOa9UaBzyGkSh+egCL66VHOEDjJFwMxcmvMH\nUxoBaNToBCKJUcPvx1Wz1V+KGjb1l/czjYRX2R7CDtGG5VtBrcKSUPHiP8aZ\nENyR\r\n=ZZH6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEIi8sCUIRMrlR71HIL7eE2LREd9wbMM/dugYxGMOHxtAiAki9nMNW92SHncwj3G+cXOWS3EyVCM2kirHx7yP1TAWw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602091571-6a2cbcf0.0_1602091686038_0.7565882985475019"},"_hasShrinkwrap":false},"2.20.2":{"name":"@xdn/core","version":"2.20.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.2","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nkKx5kIJd0oaqwVvoLLeVyxvjFcKvNj/+dOf0TB7fIZ+k2qILE//Ad37G3SKxTXiS4bbJPuDV6go2uoO/521pQ==","shasum":"cd1d084379bd036687f0ae3901464d2c9e9593bb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.2.tgz","fileCount":157,"unpackedSize":579041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffgq9CRA9TVsSAnZWagAA9/oP/296HwQx/GwYH5NbBRJl\nzdFpCssbpZrDaijU4b1T0T/ECUvwbc+T7dxcZdrIgV+w+P6StiT8KhokGH7h\nc4xiNkhF3g51aMLSsR1TalHudFjaxtrvIH+xw3O1WQ5b561t0uO3XdwPFY0e\nY5oLOXu9xfMM/kpeGDPvBg5yqMF7SLQ+c2NRG+IQe2p5vYh2rBDM+083vW8M\nbQwWGHb6qNJvDGNX3UC1qPmAgCuTO//QkcpGaGoNNZYn2OnmxgAWcNSL2Vqa\nBvP5I50n1fNPt+mGNs7QcsnBXc84BWYrlXgz5GPinnw5fAjLpBh6D0OmUESY\nhyyCEKs75KOqoP+upv+Ue3s1WivVluNIici+3V1/NesvbfexSEK0hKRHKbEZ\nZF2TqoYuSQu+1Z2u7hNgbDSvNOA09/hb6s69Rp1KXWOOQCYelv8mUuNI/1xL\neHQ7VD4x2v8Y1MLkLrOrEyEdlqdDdkgeq992j1gQwY3NuWAC16Wx5RFnWrpO\n9ecNS8k9vq78dwjGu4aGZQUgjw2aWPbD1LWBW536bk07vfMXuDYZk3Oj4n1o\ndSWV5OLphOBdp1Z8nnpdGVPWJyhMFWLRD5OCkeXyKMA3mh0qh6Szib4UAUWq\ni94crrxRvZeg2V0ASKTdzDORj2tW+NvW5FfMcbjXOsrvjHn1QF1JTsPsWg6L\ncPzH\r\n=hTp+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDn8ubd5nhIiEo3lqzosYUi/ZbpytrldXB/JxmtGf3wcgIgFaiCyh2XbGMXVR8UGRX5ES2gxCNI1hnTd3MaQB7PrrI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.2_1602095805180_0.678403713136664"},"_hasShrinkwrap":false},"2.20.3-next-1602150961-1dd3a88f.0":{"name":"@xdn/core","version":"2.20.3-next-1602150961-1dd3a88f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602150961-1dd3a88f.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9BJRPOXJIHlgPb4MipQy7t4FwWu2kbpTLqFvF2kfkMiELaXRYpKU7xYd7P4kY5Wyh71wnuW8Yd3mJYoaDGEWXQ==","shasum":"59f336ee733f2f071df0b6295fe24e0e3733cbb9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602150961-1dd3a88f.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffuKqCRA9TVsSAnZWagAAQBIP/2iC+K11hk22cHYMLnJW\nsjyUbduJGex2F6NSTrjCCO1NNMhSi6vo2ZYHxr0jM7ohdQzTIdlPBqu0cloL\nJ69vKgVH1+rYwZ7G8vwiGf8sEyqEodAxMVA2O1Eoa/nvC++eqEcR44lC/2Wl\nRxJa1bMmvhyqGYL1GUPXX+rDeBRA/QodmzUqXiTUo0/dZKkTFrr45hqwqeb0\nJC0JUjPorL2rFBC6BCai3Gk/RnALyl0I0CeiShdOrcv1+exp/196kzo1dY2x\nNPp4QMbYfAIg04t1xLSWFV2ECRh54haHHVEnnazUYVIsm8fo1aahxwXH5xFC\n47LyeRp3ed+yO0LAji+1sjYk+lG1IeymeXE7CJwifuN9WFB2scRrlhY2dK6W\n/4vIRBgk9+GaeXLBhCP97QXn42h/MtGnWUUxLp4kNTgs0JlErNgV1LVAUI80\nCI6f1LA84XVX2ZknOhlnMldMZHyI0OLY2W+q8rp1tfuCKtjnkQagBJWpiSAg\n+sGfUvx6XpcEW87IzMmsgSPzE0CRlK7H8IDL5TJOLO+snO9yjlxmgb6/6h6O\nmkwbVfD1f34RVG+jL05LhHuukYj8T5Q0e7cyHl3EhTyBU3wG3KWfcxkIANm4\njc/7bMwI89Ez3o0QkC3uyxfb8r4CfP3qdunIdzlytITfASLi2rE63BRb9Uuu\nYo17\r\n=yfbG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDp5AqtnA/FzN9OQWZdWJso26vwDaRueIaER8Xvd6x0+AIgTEfpbyy7DABk0PbZluPDxGxus5VaUSCq5m6KBLXOh7E="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602150961-1dd3a88f.0_1602151081974_0.7123911734814212"},"_hasShrinkwrap":false},"2.20.3-next-1602152731-76bc75a0.0":{"name":"@xdn/core","version":"2.20.3-next-1602152731-76bc75a0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602152731-76bc75a0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-uOqnrWheK3yaHg2WeOG2Cj/9zin5U/0q4E3VWSSwXsneVmg85MD5WDAfMBdjglI/HJLmXSjw4mf9EJ/2ftNmRQ==","shasum":"7b196976455e59bb222c5b904a871586c17ec544","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602152731-76bc75a0.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffumTCRA9TVsSAnZWagAAORAP/itSd4MdcqRb+OA7iR9B\nQgl546RtOxwoSm2g6jWEB9G8ZQCtFbznFB4cRpkPhcTo50giqeyG4/u8Ky7h\n6UbLGTAjU/3Y8d5bhvEJUI8hWEIcDoBcy/polsoYyEBa5qBNvrGwulSUPqVu\nUGZOV1Ryl3TwfqZjMbAU+KKvh/Xu0MYLbPt6j2ebiU3FRDg97sDreG1ujezv\ny9mOv6JdahezBND2J+JWcon03LvDOWrAvOgo3irALUr1O936yNSR5lvjf/KB\nl1omgwDQXyTMloSzi2IXdRiVh5qshlg2FKEFQdBXSiXpWu0UZYuwZN5M40po\nVTojuJc22SyrQh24GifxmyYksBM/bViLSUXRSYcfwkgaLiy0f7HJA/lQhBkH\nzREbZOgiyLFWfYB6cHC+FKCTLBQJbm+r/runT6n445diVnK4VtKi8Tz6C9pH\ncBIUER9ehOjVULJnLaTOzNu6nKriIDhlc9IMj1ksL0zYmO/4/guHtqLKO69d\nintjC7Kk3GcaKWlRbF7m44u10rRkJiBvOsGqMUIFxUSNTdw5uQChFIOstzFP\nCP+UDbMIx75ONr6bkJsO/BhJhmuuRnK+2J73LVA5sEbcN3HzF8KCforxYqez\nFncqH8KrS0EMOPBKwz4rrDyFpBtRbEGb4o0vsSechSmjUfRlsPd8g5X8dyTt\n0vWx\r\n=pGP7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMEfy4D5kD+/dyeqe76DhbstjTAseEjJOGm/gx57dr3wIhAMuBqz/BtwjWUMkn9EMgVNTI9xZ+4tbv+evx0sLYbYb8"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602152731-76bc75a0.0_1602152850928_0.2711598441345966"},"_hasShrinkwrap":false},"2.20.3-next-1602155331-c0f38077.0":{"name":"@xdn/core","version":"2.20.3-next-1602155331-c0f38077.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602155331-c0f38077.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+uKfYpavpd+U7DH/CrhecKj++npFDnp0ra4GCYssa0MzQ3dXeMziGss/1qnjIszYik8ltZNIry5QZ19K9N1inw==","shasum":"50fd7fa4fc031e96495f660467e4c4f3bd52bdc8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602155331-c0f38077.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffvO3CRA9TVsSAnZWagAAsCkP/R2cZ8l3tPT8CnHWpwVT\nSKtAnxEn44WZmUBsXTPlsdSIRucXIqY3FfK7M69qNAkyyBVZTJo6I4JrJcMd\n7pHYM/SMdO/QEXO5r236tOCNTPJvo7NXHPmI/Ueah95tmX5PpLtEVyrxj7/h\n3TleEKhwoi/fcn/RaHWdK/F5ZIdprohIcuD2qboI49KAUcwzCqhlQW1eakJX\n+NxZRsuuQi4ihSpNeO0NYi7bI4zVYT7lC/NV+JdOSVgRyAahA5L1Lp4QIliN\nGuxtJSdAedV9g0teHe1Tmav6muGo2rOm4JAFuKmduaZI6vDbRrIbDuUMKll+\ns1+EDVHU6fp6WGpERZI+AXPlB9y+mZGXmuQ68Uhk46i7BDwk0qwNcIY3+tLd\nWU673yuAjaAXC0+V5fVlVCPUNk9HXSG/tpyDWXtk5D+zhuRB6FfDPaKjHvTm\nC7SVoAIChMJ1+VclvfmzlNeJDHOEAfzUC9zZhRYxQj2s3yKKpR0tkEl7gZ/Y\nDli3S7gcliUgXXN8szLwDmO7CqZPrUjHWOYJMyZqbGKJMaz4gETSoc63Bm4g\nJ966ZXh/UdogG98PQa9ALsGEhuPNn+XKo0jbZ1d3ghega7KRQbjP5jajcTnW\nOPh8Ijwn2PAOkPO4CSanhGWWhVWR8kdy3fxSVowkhakPzOmNEBkmj+o5a2Zg\nTqod\r\n=vpOq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFZP7CsEBzgdbjfZQVmKwTByQijObO6tyoild7Iw+i8rAiB6zyZmBEY3ExWm738rxQTDbgQQgcX6Th/PAyqi4ZmNrw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602155331-c0f38077.0_1602155446728_0.6762239264819063"},"_hasShrinkwrap":false},"2.20.3-next-1602157989-3ceb34bb.0":{"name":"@xdn/core","version":"2.20.3-next-1602157989-3ceb34bb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602157989-3ceb34bb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9Zu4CiRb8DPS7xMXMxKBG1EhwXZfBzGdZa4iCjiHxqsOrhxMRDZ3zRekQItFuH29pxNhFXdIyit1QIIEgfLhMQ==","shasum":"c0fe965b036e0b39f438a9ee8f10359c1e740491","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602157989-3ceb34bb.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffv4bCRA9TVsSAnZWagAAWrMP/3DNRta3lnKARiVyWZh2\n8L2y2z3dLRx4SdgX8bYAHOxIAVLgM0Kxb/2nDxq+J9tZu19MXOf6VxUjFVew\nKTMJW6eMIRW22OL3FWBxaBnKbogF4W3ZMvLn56ybS5Gzt1nQuN6VefQtiWNo\nvHWqCxE2BUG5UK7L7HEr1y7Wkb8NNvrqRkHlQ5Ij6AafZ1TLLaQYwyPod2WR\nknZna7/e+SxTe/3bWZAaMypXmTugQG3UQydEFwluY2xLRjZTAHnbKmNzYj3x\ny1uY0zlVMoiMHt4mHh/9WY6YFcyTL32PwxAHZlcpyJek5+6THUqsH1lAiGTQ\nBKMuz7m1eo5uU6P4f+8FerhmLCMNfchQpU6lvg0Nr1I41M8vdWKWN+5N0t1o\nG85wNU7RbopwYbwPz/j32hsGuV1KNDJp9XtOqla1NQ9BezV+j+mAKZ2u8FtY\nUCYd05rLvFuofrosodGO9DI+1kjADCxdv7xnPqfhSC+PpzgQhdHQSrpaDsRL\nUluPUtd3Zd5fZcv/F+yppT5IdT+YXIGfjenR/vbLOrmbK/zXxyIhCrFQ8wvM\nDwwabfbn6akD+4qT/fJ/J7cfYEDwu3b6MvHG9b5hHlk55ZfRzu8F0WHPdXWM\npaueWnY+cA41L05pxsy9e1ipz/1lyCNy2vIGN3BFgTY/1/HlwMxlPpIAdJYv\nrgdW\r\n=XY7w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE5lC7NcWEXIUf5O6Vp2jqtfNx6u2B8Bpiit1rbhhWGxAiBrh209OHd2eZufR2pVaA1IOah+x8kRzWF2tsKEuYhUgw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602157989-3ceb34bb.0_1602158107435_0.9833166025785163"},"_hasShrinkwrap":false},"2.20.3-next-1602158077-742c24f1.0":{"name":"@xdn/core","version":"2.20.3-next-1602158077-742c24f1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602158077-742c24f1.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nvgfyVJDhCCztEy8uGsQA5lPmCBt3G2jmWxjyY5qGOgW8MCwSTVgaCu8yFMdIFyTlP9AF/oYkSzTCtoGzErQBw==","shasum":"d87bf871e92a2fba48fceebb3c0cc075062c88da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602158077-742c24f1.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffv5zCRA9TVsSAnZWagAAU5kQAIB+z5bvvumsGaHBBNHv\n9GWiitSeSvtzOsF1oPTqU5uVR0LsenBByNCbQ7uCjOyHuUtZj7MlgXAoswTT\n+Qa4G44VYuQsT5tT83Eg+cwQfr8ZqjH4l04LKuWyqW0oRo7Hmipzi5MrcSnf\nsZ5LJifUGdm6NWyySlD2tVlAKxv7BEnaj408RKQHr3ilugICSSZNEhrcGCN1\n8WfXAlzpFyx0v52D1dk+kby6q3xwGKkyruQWKCCJuzKHLeWiT3J8M1o3nGwh\nUkkRcdHUUyoMHl6gDXTR28a0PT1PBihC/KuJL640grPuJtqzrI+rFL7wXaON\n0eipUp+iZkOetN372fjAXLctE5P0IDHcNya/J/SO5/qjZ4+Codyu8e6h70Nx\n6W+/3vsTJRGh9vf8VKOGbyhtZIbVxpdePpVUuLKGQHGiFMqXtB4NohAP6r98\nLrPl+FoCVv21d7Dz20wt2TpFHuZ3uzgHxZ4THG0Euc+nnbXf3cpC5zkBwJ5y\nFIY5l1oZmSNExSDPfXAG/sZ7/t/8Ww+b/zkDmPm4+9hOdOzYgtaL4YotwohS\nS/A6mMHB3o5lWGhPri1JQv95kS+z4bevoEtMfLuNwooed/a/a5AKF75b9YlX\nKpPiXq0HDvkYa6gPlp8d4CxVC2ORaQ1Ja6UvxskMjsiCtDGC/1pkd8isKeOs\nv0F0\r\n=KbJv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFMLdqhDspkW+mu9KWFAB7/mnuMrQhcqLpCmN++ePYFrAiAPBHVRsNxVqhrYHWbnRJSmKqUc+bUwQ+iNBTcU5r2LCg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602158077-742c24f1.0_1602158194744_0.28928150899199623"},"_hasShrinkwrap":false},"2.9.1-next-1602160156-d53125f0.0":{"name":"@xdn/core","version":"2.9.1-next-1602160156-d53125f0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602160156-d53125f0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-UCWF6eH3T9IMC1WBkHR2yjonsHdJTt04+Vgnb79KyEvQLzYwx+K9C7EKVaIzhk0laKZVI2jfQUlKlOPC6wHDVA==","shasum":"852c0b08888f4285afc121ee0cab64c39b3cbf74","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602160156-d53125f0.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffwZ+CRA9TVsSAnZWagAAwcAP/Aq4dr4srxCQCBcy+07w\n9OIwmPuQENajnvEDAstNtE50hGzyzv0Paf25W+bBFHXLX3qVFufLbU970Zua\n2R1nUNlr16wg5/SiDe1GbaLWZ048Hedk2ohUbJjHDytwXA2koAmWkC7KYFXk\nov0Dk5dt6fxTSH1OVU60YuOn3d6kvUV5Hx9ru17qTijL4nlY05E43B9b+Wa6\n5BQnIrMloE9ZZFqndjufawp5upIqqbL/4rnoXdUoX2k7WJQ5djsRk8Uy8mHT\nfInUnvJtTHzM247IwcN2i71go0hVypiL31zukNs8W4jTULAwZ1jxBgnBUC0s\n4xNtXIAlIxr9tFRvwB9AFT3G1f7V3914uL0T4dl/keb36JbUs+6deVyX/+CG\nl82ylGLvouF7FlpajbTh1RgKT7vHc8cg6inc27Kndyh/kXmSEEj6/md+bPz7\nux/ygePLTsttsFeI6Z9yzCTCNnS4/ldpbcOk8XP1T63d+KxvJr4YZZju1UO0\nTNvgyyMzm6mTHKIQVTTYb6J+BR7E49XDwmLh+NVePOt99lChkzmZ8lzw0Ryd\n4usj781sYwjqevoy7yrgNLhE7KQkbwVt5hqkjFYI+5VQbaeA/jdvaccC8yD/\nHMpCbmOHbp4EXlyfE6JcZ1EkrP2rv2qA+ZRrSFhOtAjq2VATE7sfpQBSPSIy\nNlFz\r\n=/RWI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9W3WnNb7gD588tImM3XMwXYyHKcneil957ExKS/x8nwIgUnhR35vP0YiY+90X7UJDdsoM+Ytt8t97mt7akA6PNdk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602160156-d53125f0.0_1602160254264_0.6904712213574953"},"_hasShrinkwrap":false},"2.9.1-next-1602162330-d53125f0.0":{"name":"@xdn/core","version":"2.9.1-next-1602162330-d53125f0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602162330-d53125f0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YBml6ARmZYaUsYub/2LSWx3kLOD9GhEKtoJ8ZA1swqWHbXco77RtBZQohDS3zaWH9RBYsojHniO5vwKNNKFKjA==","shasum":"1bc2c84e0828014f19763acd8811360f0c28eb7e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602162330-d53125f0.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffw7sCRA9TVsSAnZWagAAslcQAJZ9Cpgn8Ghr5oohGFZu\nIkMOQYLdOZkegiPLrtZ2JdS4Xq/c0rJCYNRFII5qhmF1M0oEa49ACgt0KFMH\nqAxgOggwg70Hl/pR6or5Yu79hHae8xrlyOQ54uRihUUSPg9L4vLLGa7JwdlW\nkc9EDVjbeZpY1UPhRw6xy5KoGIo/1rPrUCtSPxeiOzNZ8/n7iKbqadr1Zu6f\nrVaqMeIjYp34ja5UA9VprFOyk5Dj3rkCf084Fxrrk4+vQknmBNjqq1ri4Zh7\nbyVf0KqDaT5NqwqzN0UA9bekmePfOoWuflr5REC8aJb2CoAHOjNCEUZ3HspF\nabgUmIf8zi65jhygpVjrv/sE3spk0SOVaxZazwobjS9ldODUg4+bqcjPvNEG\nrtrH8Nr7R/Zc/5rKDQmd7tVleZ8wtGJAvkydL2wrOXCbCKo2RGxpLMYyvvDI\n+ziRzbASJm+pjLv2XpImEX/xycGXa6coeEfAiv1tZzOw9bfw/v9ScbqbahJT\nyWrWGh8Gwd7ap2KzHTdjVFj7Tzh5syvICw9ZUKSPOE1ghIfg+ySv2fj3EPKI\nMMq2nKcMSE/RZ5XxHi6cEdqCOss2IlRw38kmEwJGg0nwqQt9Ifg4oTebI+Zc\n3gRoLrgoe7mYSeEtPlhxkRX1dUACNXn9/i/b6ye28vukYx6s//mZMwUWZ+I8\n5IQm\r\n=9obR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICjA4QKdp+F6n4F1kxfRYyPQuhyCTTWQChnXA2qCshylAiEAz3y//00XBG1/UQldauLOgKeumaSg5jt2cxPun/jZeBc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602162330-d53125f0.0_1602162411823_0.44045164559975514"},"_hasShrinkwrap":false},"2.20.3-next-1602163360-27e89180.0":{"name":"@xdn/core","version":"2.20.3-next-1602163360-27e89180.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602163360-27e89180.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EuDb76EAAordRfobIPB0oQRPK1yBfYdL3YDp1alNl2plQS/5rsWMoqB4fLvYpXvkDZojLid+zWkP+lC6IMV5rQ==","shasum":"c5cd725ff2998b603580a95aaa6356a777ddb15b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602163360-27e89180.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffxMiCRA9TVsSAnZWagAAJ0IP/1Q9wbppZLaO3bEZhkJo\nIfUn3XXT0ojMefR35ZpOGZYUDUR5bYCnUjl1QbiAprxR+i7d76SJVOVOiKNx\n8iUItxXa8kMY3aJPqqb4mAtzNt1cwo+89rl+jYT4e6Z2bHVsKmgne35AenhY\nWPcf6BsupzvjpFZtpMF6R+uL2pnH/s9kDPMERz8vAmOz1xi6xCuYk9bo9gGl\nZA3M5nyxMFiB8CE8n8qxWZu+4Sld41fnlIcCzJzmQdLWqnNAEDjEGOD+ReXW\nuNoP5rHko8LBqAZ8+giIfuTPKVHW7pJQENQWkEr9ii8eITZ1JNcuXXuGTd2x\n0NsB+lbVt3wJKFgdOTNt8xL4vB3DZVRZsf42GhUahNm7+SAmyjs8RQUKhfsj\n30lhs0HAjwAnrvAN+eyDYCpmZWRux5DgwV8xnzF/V1jVRgqo/YpitNwkQaF4\n/X7daHUsKXMQTclkRF1OC2+Q3cE83mVLaxZpkIVun4rjkJFCusDTLMtDpFFx\nWxxPASvsRu8qssLHQq0M9u+EJegNp+CtqrPXfMT8WCXIQVfngmOdmG1TiTgY\nEZXzwYfwPaN1dy0EoUbcaQEmHGpeOJYE97FEs29AC8fgus3iCDKlzmkDJnhE\nZbndj4HNs6hm1fXkG481BLaKWZSdUlCNUdTP0D1pX5TLpZ9zNMMhQT/LErqK\n07i0\r\n=ffIq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBCb9y82gXoarJ6V0x3sf/8Ya12mXs5PYGiZlSTcxfuwIgUF0jliLebgEWKoEjw7RNgmvGouWiC4acKp01mMfpNEU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602163360-27e89180.0_1602163489894_0.9833229259400753"},"_hasShrinkwrap":false},"2.9.1-next-1602163410-69827c14.0":{"name":"@xdn/core","version":"2.9.1-next-1602163410-69827c14.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602163410-69827c14.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Yk84g/0rfC8lbnrobl11+7nGqmkiFpNJzHNFp5aF4cFs3rDhD2ae6ZNmN6415ec9mt2NIqRF1wl+ROwTI46gHw==","shasum":"9b547c54ef8c2b128563f2213e63d9a4ad9bb7f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602163410-69827c14.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffxM8CRA9TVsSAnZWagAAHFAQAJhAL9QXdW7sKKzMpK2y\nFTiLdlgCadDNnqJkP+nNHrsqF4n3ufTTYQoMuXnInN73W6lsO+LoWL1A9OYH\ndsgq6Q9rHN9eWkTzQJiao2w7MmtI6C3OTzYgArXK1TjICjkH5q5sjZ3Q3Mrv\nWd/K/Ro26MGv65Q9kj+HCeLtJqUdzhvxAB/znipJZZwTDURg/a3ASfqph9Ov\nKdvH3pH7uFeJCgIRZ3EVJ3INLAhIsQ8RGKB+Hub11rE8wBEUfSL6hRfHT/GC\n38igzGTTY7+8FfqNbOhpcXrfvXo34YqCXN/3LuV4/pmKzCMpUmZBwCJf1AQu\ns/HXkNEHsb1t7C6mQjIM8IADB2RymmpiJEHNi0hmDX2qpOt+olHaHGxNjf4a\n0E2z3GUclNMvAVWYHIh/Xmws6aIyb6yL9HPx2qMWCRnUDOiNyCIMMbfLQ2wm\nh+o+1Ctob6fdDyEOlBeEquzOty0uw5pdCPFuL22lOmd5mL87jONHXx05zWCL\n/yj/D06YxCmbr5MRHgl3UwaUK2tm1F7k4PDh5ursPyIalSyxy++SwXucAgAM\n/I8JeQfL13QZ44bIanqiS3EQT2mninOQ+J3PLukbpZwi9YAvfS0hdYTaH0RG\n7ThbESFJGeC+TPrX5+jmTvxaxPgtfcYMfN62jpdhEsHOFvcmhkQ4uJ1K4NSF\nwxV8\r\n=1I9R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBdNkQDV67zXRh8hoRf2cjGpEES3Sm2H/F2hLTjZ6OMYAiB2tHpDrKjsLrCZ1eGybepx8ureFAAA4vqLIgwPvUsBcQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602163410-69827c14.0_1602163516469_0.032088830126543844"},"_hasShrinkwrap":false},"2.20.3-next-1602163430-7967f1a4.0":{"name":"@xdn/core","version":"2.20.3-next-1602163430-7967f1a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602163430-7967f1a4.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hKDsisvuVY5Wi3wp7ypzvQAgNXQeVAExd4twKsW0RzOhcq1bCRT7qjwOJUn045Z3TnlJk8ijp6U4GAtI4I1dbg==","shasum":"225152ccdaf9103437a6666caee906acb62bf692","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602163430-7967f1a4.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffxNeCRA9TVsSAnZWagAAO/8P/2cOgRO4/glGOWiDAXig\nu+LiLIlaTNZZFDdLYPjRk/M4biUxCC9PwUDXVskjxg8VfiaaKVR3RSvXpjGn\n9xMuoJ5S/jB2XYQ8LvbFNGGyAdsxxFxg3eooOULg4YiFQHqnR/KP8W+IuCpv\nbL9WLm+z3OjciUZHOtlGVZId5tlJ39D2p48dR1qwgXKN9zQBmq2LZag4BYCP\nHFg8RyPvSe/M3PHURyeT17tuuEKEnaSURF98syibstnxUpcpPJAwfpKX99lj\nhDmnBFHMGWniQ+ZIeFceh0fIdUkC9PDKG7Pnc8h8l4Ju1pZGsrIM/Dm66y4w\nrtyenBUrDh0cSKyVTQN0yW8mUmfYWgpLZeXFuQhzpJGV761c8DzswsOUtCCZ\nSg0mj/VpIXQx3NrY5sIfkF484xlN+qh8g/hj7ZWi3glUNj7XtMXJCwqRGvrj\nditj6nKav8B7AakKR+XJnNM+4x2jrpZ1Of941qjRPegohZGCZS3beyReTSxG\nFW7CKhUKODXKcuQVEsMhKjQtWeUDu7YbSNTO3ACF6T5tvgRyEGxziaK2pKzR\nAyBNTrTPKecNr8kKQY/CjRl/72ofg5JWmeeCW9EYsMZ97xwDw2v2yNZkU2VE\nvWBWDpuuWV+MWA/D1qySTDOdimabmpGATNlvjJ+9niSxTG9dY1mlSgJErdK4\neIum\r\n=Y54l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBbamnam4ceuKO9yu3PJZEdC+CvKfVA60bKjRxflvBwLAiBfwYLDNihOPpQBfwE1QBiRLl0o3tLIoSIAg2XDiPQV+g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602163430-7967f1a4.0_1602163550239_0.6406615905191857"},"_hasShrinkwrap":false},"2.9.1-next-1602164060-855d4c59.0":{"name":"@xdn/core","version":"2.9.1-next-1602164060-855d4c59.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602164060-855d4c59.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-FmnT0ahVkPnKD3ZNB/wUtpLablJB3FyCItcoe59lt7anF4I7oykksnhNRG+MwmtJ3M7SEDAy+rxC/QdHEFek1Q==","shasum":"a36c25c442ff1e91edfdc9cb4cb09caecf75332f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602164060-855d4c59.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffxXBCRA9TVsSAnZWagAAXPoQAIJ3+Dr/bDkrcAFXWmAg\nOf2Pz1OWC5OsmL23HSRrHhBP6vSuJelgW03iS8ey+0TV2f+MZed1GxGEd5/X\n0Pj/l7EHBYvLZoY0IOGC7XPQBPC191be115mYeqL3O33yH8pimEtvjFG+132\nDWnDoVeiWb7WqHutngnBLyh+nGee2pIUDcDeiAoKTVoA+93ZBBbao72hB8Hk\nJnZ13IKVx0Dgy/nBKuy3wTbCWqSrT2otNrBBaaWxZgFnQ98RzmDMrz6m58+0\nNpkVr/s1RPQ4xH1e2G2uhhZhFMSsysV6aYEzshVho46PJh7sEwZsTf5bptCL\nwIXZ9EFRrtE5MGNAvXkEle1MJKFOHCLCx2o8xiXIJl5hHafE/BbxvZYyKiPE\nqlPhlzLa1/mUQZvo7IfNxiTQj2ADLCnaxMqbgg4/saZWRKuJFPimbuftrCj1\nXZy4BzG9H8RO8liR811yLO4IBElsFt5ohhARPFT3cMPh5xm/G47lYssbMtXP\nBLWPXSFrFPnkQy1+ukPy/3IhfHxf2GPufuE9HktW2uDNLT0FXMUzq60gCdbl\nCNkeYXdmtIljSf8jD+DlsIyVOcMGO2fV4wOEZer4T8VGwZET1aJPnNEcZakg\nQ6pk2uD5b6Y1FArtswkjgkGjDjKTgDPXgk+GciA5vtrX9xqxoFzVuJdFWCDN\n7VeA\r\n=U/MR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBU+mKpxW2OizQylRN26YOExuYNEELqcTJ14DscTaqVSAiBLVddrQhOePS22QfMpf9Fo7FpMSAkYT5J2CwSIxdQ7uw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602164060-855d4c59.0_1602164161087_0.2723153505165983"},"_hasShrinkwrap":false},"2.9.1-next-1602164824-11e82beb.0":{"name":"@xdn/core","version":"2.9.1-next-1602164824-11e82beb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602164824-11e82beb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1bXD4Sr46WgbA43l8Xld4IwRfz8YAkseQ6KBNofGhheK02L76OhTvOFvTArZRJoXWe37m5zW9k+s3I6ay0XXug==","shasum":"513d56c7048df1501053457749e31881a600e156","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602164824-11e82beb.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffxirCRA9TVsSAnZWagAAAUgQAJGz7wEtfaaAG78pCyTJ\nwn0kcyA/IsOzwej6i/chNnMuTt4dUhsw/4JCx0tFGI+NEvl1Z55WhfCymnZB\nyvObqfEvBjaorKLCJAHa3a4FIdleisXanHPT0SPUBmjwEzefGghYLd/16chT\nooQ9lC4HPs3aEk8qvkH31nxGRBb9EXGE6d04OvlIM2bhXq9bn+E5rENBJRnU\n24q+ac/WPuqU1VWjoJI5gbH7cZjHpKKyaEjpQELhf9awK+272Fa3R9vHQse6\nJra6b1urarz2X8TAMhvMdA1JE71dMbXs4TqtWB7ZpYm6nFIqrtRkt7bej6Al\nLZluoOsyKQlokIeOTRPKGiGDCcdJ5stmBSt28WCN2vt8RL0uUDzP020NS9Sg\nBeKOEP99TYEVN6VSVb4dEUn29+OHKRhRPM39iQkE9SXYS/HeFdP51aLJfSWr\nvum7ZRBAcH5xUk+7LhhqD12lRDMNiqflHc7cQXDJXXkjZQWt1CH3vTf1IaeL\nsdeRF5Ds1OVpOmRvrlfRu+wCFaMoOSjLZiZ7DaRp8N9gQKi0XrSHg4Vuj8eC\n6Hr4IpxChbJUd7QGEc96gD4BX/xwx4lzWbn0vbGWq1aG5L5LgLlg9wO1MgC2\nj/zjIqdjGIsFnerDelw+XCvdYAvLuScuRoeYGQ1uFVKAjMw/03xIIG3x3Of8\nABW2\r\n=32WS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB59wJ7rFT9HS9nvfTNgP6wMggQQKrTj8Vs7G2oPkmvQAiEA6FRoluLLd/23vh9Fu/328gB+vB78PuUYGd8Cd3kpnPc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602164824-11e82beb.0_1602164907136_0.4375760926772827"},"_hasShrinkwrap":false},"2.9.1-next-1602165598-855d4c59.0":{"name":"@xdn/core","version":"2.9.1-next-1602165598-855d4c59.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602165598-855d4c59.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-oCHIbZITj5HzNRwFySEfw/+KpzL3zA5X7YSNHmV93w+qtk4C69mdfEekDHA8/aGWaTDRx/tYPKKGvS6fcJLG7w==","shasum":"ac3ebfae675aa68fe6144c8951bd10bf6526e6da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602165598-855d4c59.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffxu/CRA9TVsSAnZWagAAvE0P/2zPPy1MRV+6qt3FbDtd\nIoBsNQzmv/sN/W0+aZCh1kX9n2hpoTAAXclqE+AWJZaEoM69jk0VTdWSMc6G\nrOw5H1qCst8j3+1UHPgTo+nYwRGa5mi63mj7T8oej4NPJRHSuU/FQ5lrGj6m\nrsgtG4G+ndbsKk0gNnhPFiNSD0n6ONEti7JsaxjfLFbYb+CP24IT7KbnsDb5\n4jZ9aq3rq3JaNh++u/DK7lzoJn4g8dxA0CKNuVgZzxJvN9loIyeP592FKw77\ncWH3tJp8DDsKs7JlnOrFYKnX0IHmk0VvOxlwWdvFgphjlweFZdHr4ZtZiUf0\nAD1RNL1UPLxXIsxH/Pf9XGi2slA10Xze1KC+JrhvJgj2a11YBjhda7+Sju2S\n3uE2sVLceo6pKWpf4xv3O0zjOuEptP0RbK0/0KoBpwmdu8X75LcVOKqzmAwG\n6RXonNoVT6bX95VmCGdVDH0+AbB5X3Xpzcmu6TjHl5Agxl3iGSAp8enGdGZL\nTtFnNbDYYaizorBmE0epqkSNzNmzDobytieeDCt01+BQ/YU0jjeodajIn8pW\nX5/aakJplnqYcn8j0OFyzJKfzPpBAyrqqcR1Gnl+8WN5wyin/+YYU3HL8kNR\ncM1nO1omwLeGe9YItQx6C/syXkCmF2aHIbl/6UQxJnqXL7oCeJI2Im7aEtwZ\neXDW\r\n=4Mlj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAcVD1AVzbF1LOkZRCxfEFMN5i0yJyCpl4d29CAunPloAiEA6cuhHsTfZwxIX+hPmOqGAzdcNf2wT2lIVvgNReYNR6s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602165598-855d4c59.0_1602165694664_0.37151524513737666"},"_hasShrinkwrap":false},"2.9.1-next-1602166251-11e82beb.0":{"name":"@xdn/core","version":"2.9.1-next-1602166251-11e82beb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602166251-11e82beb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-YoNr268RX9uJdX+1+oU96Uu/di6EsQz77prnpntvJPKcFwRt0Y4/NjKh4klTn7SRNBruq0eNkNHB/HLGFHRP9Q==","shasum":"9b4cb639f947b0e399ebb158a93a688300630677","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602166251-11e82beb.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffx5YCRA9TVsSAnZWagAALQQP/0HpHhKGeV0iHa2/3Pig\nkfrAAPhv9KnGkhvwjtOFb7mYSTnNYLCeZIBg5L6BneLcIv5BiVEJFI7PWzKh\nNoDnDUtCBtyTeVf/gVLz2yRcrZQQlows3jlV3mky0n5MRYAGjVZ0BumG5IMH\nN1jfF7jOQogukBvkbipu3x3UfHS2pbe2ylI0pyhFlKhx6pRdnF3KzCsb883G\ntoYVKsJI1cLLp3i+GmKQqjMZAMkw3oHopY8r/+abrwZ5VcByH1DtMXNiwHOn\nRCY2rjv+u01Ros7jCq0lZyP4kDtPwC+zvNcmrU+qgaQ0prthP+a1VTFXPfIV\nWAYGfjYtyHgQPzuyNY2topAXkKWAkt6ghTkkMP0IXMzz1ooNaVlsrSxuPzJw\nOIVq7kecIDK4zhRi3tW8/QqDbykXsjyllD9FVMH1p+VzNxgnmE5EDafGxqru\nPPwstCKvQ4JAJVplAbseXeTEasMrcCghav2Nx/Qp3v+qbl+bH8rihB8WEunk\nWK8h8cos7rVhIuLlvG7VMigIAiinWiZ/d/ExY/rdnlM1XbqX6DfafRcqJRpU\nGhiKiI6ulcZFDowpJADoVOe05quG9aJp61HIeICrk5KFCcc+I8Gsjq2einTY\nw8Yi9T0rbdgmol9SD+SBr0UAMDOIJYs2g8/Pvbv8rvT6V7CSlAIJEkLdOM1x\n5e/a\r\n=Mzzs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0ie9/7Nre8LbSBZnkeUCOR7vzauPXaDx419HV7gaPMAIgTwkBCDIRqSiYxOsBdo5AAFHf3xKp/4odKjmIz2yGuKw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602166251-11e82beb.0_1602166359897_0.14528009008685938"},"_hasShrinkwrap":false},"2.9.1-next-1602166940-5fab8349.0":{"name":"@xdn/core","version":"2.9.1-next-1602166940-5fab8349.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602166940-5fab8349.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-63KQ9+82g4XSrFQ4eqWl8qTOpE9QmFyT8KNTM3four1fdxhFw5jNPI0HRgPqZ3sZIje8LaFemdyHlBff/pIYTw==","shasum":"257690b728b41c95db59f9bdc2612487f0250b57","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602166940-5fab8349.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffyEBCRA9TVsSAnZWagAA4vcP/2rhsI7Nvz3HgSsDE3b8\n5d4ACHS891+tmuvLSjFFzumS1adLcxH15DGHvVLHkeJc720ueO3gIXfU5+da\nGoAuhergnxUVGRdQz97mZP1nmHhXZ+u8xIyy1WEMtmOfZNOB2xSqll2LXJko\n1wR8ewzoeiyqiZS49tinuDyctZRjnm98Bt1YTX+BoWri2r6ZAxK7PpnvyyOW\nJYuI6jPf/i6vuynL0eKcvd5/T69WE1l2Ru6URQmYP1s/Azdorupe1a/HB2YC\n7C9VVr7rkR6uh/82plHZWHFw6O3jN3EOzMAWpWEyhTQuciQJyWXL6lB+/AfS\ntzcf3Wj6MhdkjyTwz1d12ntXhjEPOSS+rec0/X/IQ7b6YtiwjRhNbvCu/LG/\nvqE4h+3F58EdM2pQtmA2kPil2/qeYhvWxTD72Z7boNhWZ+QnxbKphD6z5wE6\nxQ26Wu8qGDdEN3h7JQPt0eswOurzRKVvLjBl/Yd14Bwp8BIQoWcPHOP0kqbu\nxTDgglnsm/3lF+VxtTk/G5LpZWWRPnJjoRhmbbEQDedAoq05BbtrogahYVBL\nd4mJ4XGtvWdNum3GPRH9VjKw3FcQIeuFVPDLV8A16MMMhG1athUQi4dBc9rn\n2sYLrnqtMrhB8xzEcMXiT3XBFXt1nEGHgZ7AA2wwir4H++OM4cp93HAQOtzr\nHAtH\r\n=XhQP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBb5Ko2mY5ZdhYHt63JKd6nsQSaXANvvDa6vCRKCMxHiAiEAo/8ab9gHZVhZCvkr7ZqmsvIyXhUb0tM8dMA6bqFzjl0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602166940-5fab8349.0_1602167040830_0.9207375770316923"},"_hasShrinkwrap":false},"2.9.1-next-1602167403-69f36a1e.0":{"name":"@xdn/core","version":"2.9.1-next-1602167403-69f36a1e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602167403-69f36a1e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9FS+mW4SGMyvfQvV3oOc9kIgUAOJOgzcbBCmazcd1Qz9zXu8DEzj4QcIiOAT69GrQ9bVgf8x/fMqpGIsoC9Gxg==","shasum":"126fc52a3fb925ddd73480db32dcf17335eee0f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602167403-69f36a1e.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffyLMCRA9TVsSAnZWagAA8gsP/3OO+YXrYsSgzdWRMlcD\nZeOVeWyWDg0HJYoc8YCwN98BSjUYFyYvzR9potKwqiChuSD4g3p3VVlJH5hr\nF/5e2ayFMDISFKbk/0OWeQZopXJXCJYsa6rLkY3p2lWL5/WhWFdVp/qEFdQr\njmxtueeQXNoEfUtwJpI5GoT1ikMPBS3mlwg67t8Mt5sswMMHBiB5xg58tr3x\nc/mJQEUVzeOICym155QQJ6Hq8LbvaUJtNqLQTUKeMDeKLtRdn7EdrRjTVJbz\nbGq56nv2LOt0JnRg84562N32wtLTGaLpQeplqm1/4qtiFYuDYXoPWi2KGdpu\nANd37XBjy7LlPIbrjVHa/+Ip2bKVig5AdGIAtK4T6JuVkulY7FnJvrXPtBg8\ns7EbwTrtpBH7XFjUXJ4dkn1y0BtsYZd5A3MsSg3ZppZCsHt/KgF/YPCNOGEO\npE/FX8Ba4Oklvb9hjdCQSBVsD2SLeEMuCMnHO+xNdTulIFwg79XkX/mUVvix\nLOJQuFdMoJSPa8b17O81w1MQ5EjObDjOSkkMrsH/scNt/g3kkVgONtZbnUIZ\nXtS7gpqBZpOuEteF35Y693BE4cibbnjmAJgBBtJ3UdseYFtrDnIoFiTIyDDe\nK6XsDBJdyZQNOyf0MGbNNfIVhN+iw+NNA/oooyqqe6EMxS13A+yIZ7hwo+3I\nuft9\r\n=lAcu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHRlCjBsldf0PpDndw0zyXtZMusJsR1qHOfhlaKsPA72AiAtddHEf2nAgHKH8i+D4/ZRrQzdGAr2iTg3qPUZ1vT0oQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602167403-69f36a1e.0_1602167499700_0.4638284150738714"},"_hasShrinkwrap":false},"2.9.1-next-1602168778-9b132b3c.0":{"name":"@xdn/core","version":"2.9.1-next-1602168778-9b132b3c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602168778-9b132b3c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-T9HX1IRDbyFo2jVEnj/snlvn7+6Tb70r8BIfRygMsuS2gjrwqzrMYEsrt5+QEwPBp9mxFGwEu0qcyuS9JrtVdA==","shasum":"a125a16153630b68ddd79915e24b229df19a71dc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602168778-9b132b3c.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffyguCRA9TVsSAnZWagAAW2MQAJcQeIGxcF7nzsorusU9\nJp73Tj33bIETYvUjQt7b3u9C592IXudt5Gh3iflRHrSV7tUoI+Oe1G0L72xJ\n3xr+cIx/jA0PoVE0Yx83wGpMaSWW4v4HwtnoLd2EaP8t9HmsNibjQu/o26S8\nPfUFzQUyuYG04KyEIuD3kMhffNr03m75qPQXt+/eC1UUKrHnDy+HbTwQmvHx\nmfBPdurw5msYPAuItNfNcady7D774cOkl/Lc7n43VkBTQb8N/bVPVjOEewSd\nDKN2rK3SEycT90Klpmf4/G+XIJZyN0PpWhzUcZrb2j4Zt5wouNK/7dkWKRGf\ni5lCHU+vm36WXIwzL4A/7bpqhMITaz76I3vH+2HYLSyKrH0z+XfCE713OsS5\nG+VcPqDmuKLQuqxO7nS40Lk7caGnHJgVnr85RzJvMACEPP7K3YXe5Uuvxewn\nrUbm5ECAGHWvlrkABM0t7Cu8laB4sxcdlLrTAexWwL7Cb4C/NSkSzBSHmGww\n/IN210At2yuTtuK2V8FqUNqppNZPrhjGI/A+/GwuKITpqk1ZN3KieNvX3+4N\nolhTvYJBJ1OJXIbZuQWwqHr94MfRK0F8npZ4y4q76gzPGKp7DBacHjp8aizH\nARq55GDRxdXVWzPuFCr0cNn4VJVT7GPoc8nm+2g2+RTgY6ixqg0bJPmjLEFE\n5cUF\r\n=K9EE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHZ1i2dQH3GCCDhLGqlxoAEqCIGlpflBOa6PnEl/gP36AiEAmfjVwodS6ANumQMkI3HRwyIb9BYvgjRLNMCM69yCtZw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602168778-9b132b3c.0_1602168877512_0.9737090556206356"},"_hasShrinkwrap":false},"2.20.3-next-1602170355-27e89180.0":{"name":"@xdn/core","version":"2.20.3-next-1602170355-27e89180.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602170355-27e89180.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-++47cTXgQCkXjaFOr/+fyCDcYLssei1OBW/No8Cj6ouwNK2ucBqSxlAJfYcb4eHpHsqS7G7rm2pPJoMKJTqQzg==","shasum":"657058e1308c36b70638ec93192c930490813d02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602170355-27e89180.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffy5iCRA9TVsSAnZWagAAo04P/3qIu0PexuT1M0bld/w8\nQ+kkGD/uq2tDXUJZazA5IZjeynXk4uDQfhJwlA202SX7BUwZQKzkrjN6pDBq\nbEUfENpgc9veX8i2rv00NZL0tJfHREj+DIqvXvK7cxz5PE6HR17dJ9jQyCrw\n/wy5j4reK4Ig+0oMLKr5Q1M9MBVNHC1RWYXHJLHaCPNi3yU8Zt65OK6PhAjh\nIe59Cxs9whLVU3FJmZYlLXXnpxuT1UAnRQhRC5NVxyt2ozDyYM5GVxQbcJOS\nIDqaqk9KMxUMsU2K6KIc4l94s5CsyLTsLlix8T8JoUIFPHkDjHy5zrzbWib6\n8PYh/vq+IciXe2KHgGcEHD7DUTRX0kBhzPAlQ299Eq5l5hKBzgYL9srdxVGu\nxPvG24F6EMhtLPVWxqnpZJTmMR5FEKXPlS/tb8FgZglYDfHEIftfeTFEg9k2\nmPMi4lnSWGUoiuALr8B+7QE553tcN8QLdAPmPne9a+BO33iVWa0Yd2RdBVUV\nAW/cS5leWWPR1Nhe/7rSYzKQMTMar06DxFZhunWJXSKBclp52sUk4QEIVviD\n2++kJS0pg0ZeN5awqr4uil7B1elUE5OT3sUzOBSxhy0+o5tFTwcZ+J4vGxff\ngtakjYRPG1sjDacWjPz8K7wsdILomuQq5LFVyUV7n4hT48RPNdm361z3LNFV\nj0Gc\r\n=vM6S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEl8oFAdbd4XeymIrLz2RNJeGHHnIWKt0ABfMEQkDbJ/AiAbQf/4fx8fhiyodmlXFThbHGOt2JYjws2FmVp1nFjfLA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602170355-27e89180.0_1602170465583_0.6378741876573515"},"_hasShrinkwrap":false},"2.20.3-next-1602171505-27e89180.0":{"name":"@xdn/core","version":"2.20.3-next-1602171505-27e89180.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602171505-27e89180.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-btaq4QxmI2Hxhz5K0Dd4UhwAJs/Q00PisO5oxN9T4GWgAKYV59boZxI1hUOIo5LfXTvOzIbjhqkRNt6aqkFMBw==","shasum":"bbfd38cb8b5749a064266970f3078046f80f52bc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602171505-27e89180.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffzLkCRA9TVsSAnZWagAAUOwP/ReWhFkGP+OoQAVRAs7C\nAdcvu7Fql2Hgnd0rY/HlaFPv+wNHg0gO8UYyvrcaOCYh+vnfQz8zfZeaFQoG\nfAkLep1B0clYmi+81GZJVQlKV6Cs1PI6nRyVWpTNdpSVP9+Tvf2xs6EyYmJT\nTjjA2PAcZh2Nag6a9+Cy1EFMz+p40x0CkoWQmU0b3+3LEUZC9T0bKcGsytJi\nAXmpq+wm5Qpp9NS216vBDw7ClOD+dcnihmaLPpHOxZUyhHVXeP3fUfNxZYex\nbxyvCaVKNe0MyqODz8cZqOwh+P9GxuL+47MQBmFDeu5nqLlolFcVvs1+0fQR\n1ixor2f9ULVCKHKKb5DF2RfjhmN9WCAHAshf3WjJE0+9m0jBIpSL0+Xk9nmZ\nF7GS/glmxJPTMXVUUV8fZ1rp2KMmG/0UKcP+Pcmns/vYFWBwXG3cqiS1gidl\nUxfW8EGIF5ImkUAXUJBCmr3hBMi5g2OBU9avliF36KAYepv4kXY01wuMeWEe\nKc5JuOGSPWpBedy0FOant0q53TftmXqyEnc5tB0lKvoKZ0QilWb90U1m4UI5\nZ5Jw7ZG4njbz3BNfdlp0BqzOyZbEnAP2sV1OHyZGd6M+kean5C+3muUVLWhP\nip7vFpU7CDXfOBObWvQ79Yg676yXmemf8XCXwhQg9CBLnvrMJGw/U962w7OG\n6u40\r\n=bvZu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDklok741hAw9HUOLn0cqaRG7KB7qiuBs9j2kF6hn7e2gIgYSJdapH+TczQKKHGr8oxTG2xWkozUWAZOAHow7UQ6Hw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602171505-27e89180.0_1602171620062_0.009619516057135957"},"_hasShrinkwrap":false},"2.20.3-next-1602172668-27e89180.0":{"name":"@xdn/core","version":"2.20.3-next-1602172668-27e89180.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602172668-27e89180.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bNxoWoiT3uyeElwc9X0hmRDIWoFAFkUgPmsjRQ8arMvaFrg6gElLhGO8euxdNtU/7yHg2gtiSzQQpNIFZHuShg==","shasum":"fd511f7139da0c6423a236b2c5db93c4ed815eb3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602172668-27e89180.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffzdnCRA9TVsSAnZWagAAzCkP/0VBxK/noR6digYDwGSr\nlt0qEoSxLn408NGLCN8uyRVb9JeYOZQvVNGZJuhpRMoEinAXNd9RenzRihFw\n1Jz2c/m0P70V68cD+GvI6p+IDecCS+A60AfbpXyGTvT2gzGyxG7zPJSbTkwn\nmdkhbhWrlNT9Fw0FRg/SfewlqKaNWxvlt9OFAGqPGgb3SOQoy97X76Lb8+nH\nJr332E0+mbBnT6AA4EBSwR8PK6hjK/zvvQQtPNQdPVhGbgE/rDwRLDNoTFo1\nuO3kjFQgXZ/UjbJAN+wWu64BfDHYQU+N7dE7GpCXH/MGyc1r1Kr42r1XxjZR\nMxcgKxZattc1D9lltp5Hj8NsoE7QFQ21wtE9vCnwXw8I1N5Fjg0MKVnRR/GA\nHeQ0VTQ3LhwihuF86qGK1/9uB5nqxP8Wz0ZTSX7zjPCFOx8CItYRmpRSz+ej\nDJE48031Jdx90nc0PzZUqf8Kj4lydFOvhOkWXtaASe7ARa5TIH6VHjkWbeuo\nY3LTvX3H+5tt/9TYl9WZHyDRwAJD0Z2A4hXkvV+cf3Mi3t0nVFBabWOwPUAJ\njmit3mT1PNVF4qXmXOnT5IyOwk6YQMHKQptBwSOadd9dE5oiMBPB3xLyvBWj\nJSxSh7w2hoQ6yqag0Q2Z/7D8ibHEVVXFtfosQeRmL8FwnyDsxaIm6EQk2/bD\nFXjm\r\n=QJM+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7FLRGuoMWe8ezasiH+jZdgwV+LJYrbso0KILgbHygrAIhALK/EGc81BrUFGCy7sovzn4FFuNkN9ab8GIheSP3Mn63"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602172668-27e89180.0_1602172775063_0.5516512979115697"},"_hasShrinkwrap":false},"2.20.3-next-1602173654-27e89180.0":{"name":"@xdn/core","version":"2.20.3-next-1602173654-27e89180.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602173654-27e89180.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-iF7V2JbCOyPThlBNet4hoGj9Oy44OGAY6IUFY35tQHhF8dsm/co7dFb3qd4i/HtahEDuehLXGEQmiCsM8WVf2A==","shasum":"ca810753986c3bd64ad73d6dab7ddb3474b2634d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602173654-27e89180.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffztMCRA9TVsSAnZWagAAWmIP/0OtrPphOZtKDvS9iv/5\nboKUmzjxLO3K+C/qEUIs3ihcbRCT+cqUPL11kyTrt1vMskKNQMtslp2b/Hev\n2MFhKxUiNRXzFugh9f9iFmtPZBRzXnouehj7mxc4RuTlqzh8UdB/5arv57lW\n/7g6EzIkkQ8HgED5Krxkk4UWWpEW7v7veKpPf111NMSHZQM0pHV+uMGLzSLZ\n1njNXWqQbqxHQquHxZd+L9HrlxNl+L1/HTI7sl3VpnYUvaXIt692ObK3bosu\n+im1UVNgQXdeOGR3Mhbp/2ovmrRUA4s3bcnTa4LqVnUvcSc92Zmk0Qgmo1wI\nuD2MuKJdV+hf1wpjiv7IHzUgCWL9+PljVYOsTCtLRpdtkWKr6YCrKocV+hGf\nG2HXu7rx3ZDczPZk2QrJ+ABNmp+LsxNZPdFRxeYp/NAqMgKMeGXfD11i2xVv\nMsAAtpSctZG9RUeyUhg2tYglNbf0XD5mFO1kawq6IDYv+TWhLWh42ZG4QJyx\nGw1zbO5ooJMb4cfKEcuytTvnntcwfze+vm/N20/tzSjT8N/Uq1micGZ1kHAA\npS4afYZpaVkmBP4IsifWUZMxkg4HkKxnXotvTMgbEd9ACLIVJ9v+Oskrli98\ngAoJ4R06746R4SojQUpDrm/DO34q/qK1PyV+Nw7+1nFZZnL2gRvpp4EyVtOD\nZgYb\r\n=0CtV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmjh8lgRdva1VyCGVOpdnhRHJBJXhcnXsA0TLRplbsPQIgM3Ww0fgugKimjfGePqGJ5FGm2EyBDNlqulYJU79Mmu0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602173654-27e89180.0_1602173772014_0.7305143781659822"},"_hasShrinkwrap":false},"2.20.3-next-1602184590-f19a2d85.0":{"name":"@xdn/core","version":"2.20.3-next-1602184590-f19a2d85.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602184590-f19a2d85.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-+9xwAQazMYNBa2LBb/Id0x44++S61mcyGczaRjec2Lp1/AyOWrphJrnuXqcfnGyxMspmxZzeSRu7IXCOu+mSWw==","shasum":"366b45d4b0a081581c6ea5aab5ede18208a62add","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602184590-f19a2d85.0.tgz","fileCount":157,"unpackedSize":579857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJff2YLCRA9TVsSAnZWagAATqYP/j62kRsSgrbwUaGmyJky\nC5naV3auALGf7IyeFRtYx2CM8zboJlLQj3RpBoUGTsaJHsrsJ0crQsiavboB\nGvA7Y0Uei7QugHRBI4xx3VPDVCQUyhpAQEZTSOIAZNmoxwbPLLHni/GxCP2Q\nhXe1l57I0btPFX+McDwOiSsfPZkhkoiHl7R3dIDXnCvi3lrYAPxL1bNJ7qsz\nL1ai+laToUW2zTApT440dTkDE3dc5F1m8bql4l8IqxZeP2VuIz48VvG9tlLC\n7FF80pTcerczBWD/EgrDzGcQQIs7JG5SGNXzdCK7hMpWXNe0WJg5v2fYS2GQ\nLSgmiTuC6MVq6lqY1jUASLYOTruGVPZciGVRl7RdhRu3QI1usMVWcObFVaXb\nsIXCiXpVG7g1sfALGLn2J/0+aLyjhr+7xcJfIIgPbktAGGRty7j8Z2nIbdZO\nlJvEUuhhOJFtU/NDWBM0p8th/DNIhXpXtfE18g80mR8JaXmeeaZMNwJ6gU/O\nGE6aT3SokNr0dSZer389WW0NdYSqB5gkFWvTtydALZPobRUDbhmyQTBESDpP\naDEb/ov4jrk5GtBADyvfJCcem4ks1nnd+HT+qhKz7nWp6pxCjaSpa0dCw9Av\nluGVyrPSiazoRXBcWdZASSFnHOraPiW07bugQlmwVTxK8Aco2xQzWEedAE+6\n0PI1\r\n=y5f5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDC8a8L6rHo+UG+M2A1/lj6VNdSyZM3Hex53ykLOQpUDgIgKLL+bFXseyvPYCikCkwjs2ChOMCKTvQc7k58P7a47KY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602184590-f19a2d85.0_1602184714505_0.6641061088305347"},"_hasShrinkwrap":false},"2.9.1-next-1602240727-48b951d4.0":{"name":"@xdn/core","version":"2.9.1-next-1602240727-48b951d4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602240727-48b951d4.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jjfpaFwADiD3NKvAf9hGdG2zyvqTScoEZp7HIBeLx7K9oYkWDWMsmnEgoJZ5GcASaJp1THqsX0iJOf9dJgSj9Q==","shasum":"8746bf97f6829302563da0930be04c92025d4931","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602240727-48b951d4.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgEE4CRA9TVsSAnZWagAAU/MP/3yBXq01fIgWCV68pa6d\nkN08gIWRrVMCgImvt5qpI8qSp7YWVrCMugcCoYWDgdI0I0Mn+1kY9yht6zNY\nXHBNDmZdUM2TBt2TJw+aG8/FKwYXRxHrjkP8cWl0RHYEToQOj8ZmZE5MrJ6D\nub+VFWAT8ZdbOubEVl5Inj0gNhRrfzC7lfArArgFrXhfM3G6oY0S7Q+Dvswe\n81jttzadcKdF1YZRtVRfu2zuSHkp78Z2T1Iv3RLzo/yAB7r4Di82Cp8C9vs5\nbXkBmeb1fpJ0/kWicXi4l/R8F2zndHCUMQyUETfo4/p/JzZMc+1CIWjxzhlP\nJcCnk2qifGx+hhgdRGgq9AnV5UBkxCYfmeZJ0TCod5gu/j0aA0mVf63ELgqe\nGLaDyQ+2zio/NfanYj64J5ovObzSNtXj9vzmO31JdtIavJGeF1XT8NXugAlD\nvswvBuMqlGkzKBWmZUUFYifY/v0Mz10Gp7S8SLBY7QfX06opT+44f7ESbOk8\nIeiOFDW32jbjJgJ8I6MaWoifH2uLg8qomMUs1vN37UxJgI9x7YkW371QUOHl\nnZy6MwFHBZ9jbikBxV/5Ev13XyV5PMJhvnuIi58xmC49tTXGizWjY6oHyIqr\n+JKN0HbEXvJghpQTiZouLSPW9BXRdt6LKZ+e55WqieJDk8NlLFHT67UOK1KI\niba+\r\n=Qj36\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICrCd64cA/a/xqATlU9//4EBs0N4ZOLFbxbfHWHv3tKwAiBTYNFXUKDOzwRyDkX9toa5uBEjPwdKWVfnKDqanLu34Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602240727-48b951d4.0_1602240823621_0.028506841033900665"},"_hasShrinkwrap":false},"2.9.1-next-1602242108-c2932274.0":{"name":"@xdn/core","version":"2.9.1-next-1602242108-c2932274.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602242108-c2932274.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jESEo39C5r7ysUjsyQ7aGDgVOC5Zor3ubCx1oAkm+FN/BMyjqNOYrjNhqCY4zF6IGEuXKrGlWnLBkx3dHf551Q==","shasum":"527c0427b04de2c9104c05f61c6bd1620c63a1a7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602242108-c2932274.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgEabCRA9TVsSAnZWagAApMgP/24oZ+lsnr4o/EkIsxO6\nyKFOmZj1jRevhahBEs9DNuDDtwV4EMYhJW/ewFr+Sq6gw+XQXitlPAlyf8gc\nuxi3wYqMSUgj9Cu8V8YpZ0SZgK/2esl5TPT3KJzRgeq+zepacwUHV6dyC2q+\nrnxbA2OZJk6xKfHGAEVjaeEKW5lSj3NYONmmD9K7nr+ZJyrSX/w0UeK0tRIK\nelzQvErL8uGVG/NJAPJp3RSG4xVKXWaz3coIWOSVFKt+rB4RarB1/Dq8BsaV\nlEdkf02Wm8/ZRo+43p3+aS1t69+FRScvLksCIrzcswa/R8OBF6JKCd5DfbjR\ngwmYwmWl6kkIsWakBpj54/tIkmSVZ2llwVfiweCu/OQh3542GjUseWQeFvOe\n+OgXCR87ddZhUm972Su8CaryA1nMfyhBJBVCHJZQrAQnrvv4z2yZ5ZIOYU4/\nXYe5pqvuKo65EAjk4WVs5AgA16/8qRjOmjd3L/mc1JGx4dnpiXahyo17cD+J\nbi4ZPAvW6Vx/zD7s4hyr53gsLI9fctLg0UER199JHqcEJu/gNmpN+0PnSqhB\nRhGuKSK0Vk9yR+u2BypJjxARd0lFyU6vSuOadUuZGSeuFzjxvwgD/wl9UdkJ\nKYQ99u5tHLTwpQRktekxDlVi02PQeNS2WdkqzZ6yLtkmab6FrKvm+8UikUaM\nOwRX\r\n=SlmT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdl07hoL0ZDUyCGSp99iOZjhk9UEHXPGwLpdm3QAELowIhAMXPutDT6C8rmYK/45H7eQyrIHJJRmTVkb9g9Us56iP0"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602242108-c2932274.0_1602242202767_0.6894863941963951"},"_hasShrinkwrap":false},"2.20.3-next-1602245005-742c24f1.0":{"name":"@xdn/core","version":"2.20.3-next-1602245005-742c24f1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602245005-742c24f1.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Hd0pxwGYcwJI3AtFEn/ifs2qmdvkpPWUdLgOuZbqfzpsCrZ2ZKJtA6R9LjqyOJX37h7IlNPDwnaOOtepRFTdUg==","shasum":"9b0185f314a4f18faf23fad5f92344a779ec2391","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602245005-742c24f1.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgFICCRA9TVsSAnZWagAA5DQP/iRX+RecO4DWokX4ZvFI\n77ivUtK73SKb45oFcgP3bK+o6y8a12hn7xoaSm+EXYJp4akDqYDZLSL6LA2j\nXtx/GZco4Zu/OkTqnFyPLksOqhvpXejdAp0XVCIWjZOMtVxbysaiXpXmQTf5\nK/NVeAm4zhqU38zhrlh+skUEFUmNuxgXRwWYqfqYJdETH9iad33tYoy3RJBU\n1n81feDplg2ld7+np2BAH5F74QsAlnZK9EYB7mYn76k3PhXgSOTjDwFHtFIX\n0xVADuNajGKVmQNm2Xvi1MMOm8LZMwvbmQCUZPDJH9TprWBekzgxUbWQzq+2\nWzza/RXJRhYjj2Svq3MX1mTZIDr1VwKXgAZ+srA4jSNOG5Tebc+fIqANGSiG\nEinow8idvUKuInc4pI3TMvliT/qhi8UeRNn48V+HIRKyBtjSCsv17TdcpXMl\nGIREVDQoMgVbc+hgTTbN6nUs/b0XhhMvNa1STrIEomdX8WPPN7QFMhNYAKHE\nBRXmbEmkdbnQ2vbzWOxqM3OtHXRF3giW116Tx0Qv2qjFYA9faJmOUdp2noq5\ntHDpLwuUzES5uqhufsIjowa9FA6OyURnZFL3O+1A1h8eoLPfnFGcqpcIZ+li\nIpXvpmlwTNu8H//wmacxIoMpp/dtquGKKiutW+/SSPM6cJU0d2rwz3qZXll6\nEicU\r\n=uBMD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYyiiPtmFtplue3QPK3VZ0tbNwM9WzueGNuF+5bx7jbwIgMSJGNtLdwxMIlO+iWITY4bHUYlzs2Ltn+FgGsV2PJv0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602245005-742c24f1.0_1602245121829_0.9111076183737623"},"_hasShrinkwrap":false},"2.9.1-next-1602246224-eb9b952b.0":{"name":"@xdn/core","version":"2.9.1-next-1602246224-eb9b952b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602246224-eb9b952b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Fa72DBCw6YLZVHal85Hts4nvVfJnr4x5xaSn9UHNHeB7qX/PPU7xYyYU7Ttzv6eFT7dp+1pKb3cm0p1KmtSj4Q==","shasum":"c59783b678401a33408a11f6fbe814259f18b5fc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602246224-eb9b952b.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgFarCRA9TVsSAnZWagAADvkP/3iJyNwOq8jFvHzSCkBX\nKxJxN7cIRqo1mk9PgT/ki4pcuIwUkiZ7mP3yqy4aCmYmy+7bEyOimtrg+QvM\n0cUgHKCGMI9IxGp0wPN8pRsxc19dmSf2qkM3P7VVoDV6PZlqE4VHUGAfcEdi\nw/lsoaNerN0Ku+bj/HNO76HgQF+mA7mD0B0Yzm76v4+VkX9dKLMuuwbXidQs\nNQ1UbdBTGmmElzRihPA7dtLzrZu40WDtBEYBTXtVCH1W8oKAYrs5EKrVOz3x\nzwW7WGxDJqlcxj42SwMj0zD+hqv6vYYHyqSUdNfv9kbWns0nTt1a86MQum/z\nY/ONg2RcX2r9D/CCIogLYbA0Q6141gcOJqqSZUvtVhfk/9AMWBoYn6udY3my\ni0lHOk6O4C81VnaZkxEdV+3NC04tbUFyOkdhs2poMwLsz0aCoE50gplsAjJm\np0gMdsnsD94Y6Upqaxl/WMTWOa2Ydp2KpGBDOx0+Xb/FI1pHKTiFxAHk8AAO\nA8cmjdnEn6wjGHhOMBG4a/Z0ZFBmKaQrh8WhQU7TTn51kvjMPm5YVvuO81dK\nkSWX6URSp+Qr9TvP3HMpfElRnwS30k2j7bQHnUW1yS5h0n8avZw8v7a1+OO8\n3uEnvBae3IaO2jwefL04rr4rPzlJc/3YJXYXW6Em6JEM60qarJwAYVen5mpJ\nI1dz\r\n=1Syj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD93oa7Z5YVFJjPW705hVAMkoHIRye7vI1ScKKE5OYBrwIhALZPm5WxIqb0Yqq58ZLSY5IYQR5vOXcDm6lf5CWrbQ+h"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602246224-eb9b952b.0_1602246315330_0.7101350613252551"},"_hasShrinkwrap":false},"2.20.3-next-1602246726-742c24f1.0":{"name":"@xdn/core","version":"2.20.3-next-1602246726-742c24f1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602246726-742c24f1.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ebKJ0+gQe7LczsEjoYZ/R4hHnDhnvU8KeSdf6jxivrRTlBz/eXX6oW3GafiScuZenBr2sAJIIkhscfg7j7+YqA==","shasum":"002e196f02c5c4947c46bd62f5ae7ffbce8fc94c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602246726-742c24f1.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgFiwCRA9TVsSAnZWagAATmUP/3eR4hB0BOqDnJPXfTrM\n6AFW1QetuZ3FfxcLfG3njihMRxxjd8dxUkBlzUhNqCKm5PIVo+9vsWlg8f+g\nWIK7aAjjhwV5zWhPNhDhStOiZFMCRaffEv0CZqaTowykOU8HKcdy3NaW0Ckb\nRbq4EQ4OMfPqnpO0xB7vPYW7EncChv1e+zoz37Zzhy05dHCb1xlZoQApohJI\n6Wb6xXY1Hum9uubuLq894/bjpsacn6tamRWsAB23qsqXjBkfL4eGinJKGnfj\nBa/yVblnAo7PXlbLjA+G5v+LQ22UqNo7zTEdCBmLy+hb7cBzPIhOC5YXZucx\n3Oz8GEXpvs6qC61n4vHhWT6ul8MCpTUGkm/VQkXVpIrBPbf6L+QhobP70jU1\nFM/MYqMVuwYBg1PTixf+94XGTrw7Iqgc/Zw1fzcRHl9IqkxkP72HfsK5c+la\nmZZrNc6AS7SbaQw0QByInQ4GCqYwF3061EwS8OK1MAJb0IwtgUaH6KE2N9QY\nveQMNldiv/vYwiw8/Y/baaqJ97rI2fMR4PNlAGsUhyryToskMZCofbWUZzMf\n3eXOiELO5EwbGXCO6g4ELUC3CZsI5MEOJMpGU5qM/JYbq9vhW04bSoYrOLB5\nyCoIYLE9Gk7n1jLN+xE0YXOneFPdcu+oqyGbUB2syo5uJ93P4JzOXRPGplNo\n4vso\r\n=e0bu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHAJfP15UBUgnhsk6sO6z+YYqunhKvbT6Ff6wWwtkzaBAiA/3qFCCc7wp7PqH1Yp8TMURlfY69AwpNWk5MpSfNPFIg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602246726-742c24f1.0_1602246832383_0.9360190451483632"},"_hasShrinkwrap":false},"2.9.1-next-1602247409-20a54b6f.0":{"name":"@xdn/core","version":"2.9.1-next-1602247409-20a54b6f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602247409-20a54b6f.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-s265W0W7Mv/D2lnFEmUjCdzTdjkukOB5rK9BUeRiqnMjt426A+j/M/eoGs95R6urjErAFJVXwzEOTY5nxqTlSg==","shasum":"37101c59ce01dad08e0acded74a8383fe187f975","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602247409-20a54b6f.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgFtXCRA9TVsSAnZWagAAcakP/2hBICYF+CyRYkpR3IVU\nxmIfyQ2Nc9uo0yOqZPtNDS+U5SD6obXpkL0ndFgSWJLPQKjJfMEOtygx26ZK\nhbejr/DbT7PuYhPic9SUP2+5hPAt2VwZisXQOi8f3PzLWPD2antWLbSqbk/X\nm8WAnGDROOZKEiobIpT/3qFRf7ucoYJNwZkgCSddyPoIF4394qXnrgvjw5Ln\nGueLQLfmXd8Dhmgv9KyHt08b0+QkFi9h1gwf5eGffsYoHqj1J8VH9NAKBFVc\nv3YOS2bnTnJeM2GhM5IxyUzNI5GZLA/5Q4ufblZzYWGg5aerHL0bRFNDXBWm\nfB6uM0C7VMtVk+4ajHPrf/2U++3KbQZty/rgTcH1n0XY7WzcKnY1CV/QQZce\nWFsJBhS/S0372n6mIwxg1+WrKjZl0VKPXYqAQSW4Zx5Py8Wcq8Fdj4Eg/NiM\nfCSgeoGLW3gnaddaS+kFYFmYuWZ5+hlXu5xcyWQqJEXsb39Ql9CkWKXLSiSf\nhajP/ECgEqKAJW0MRstSyHFqXC0fvxxGr/gLKrwIzcxIAJCUypEbC7abau9j\nVVirLjH6anUFa9aeb7miQz1UCleopbgzTxuKCHL2Rm9Oos9gJ8Y39CwYJzpv\n3FGZlTDMhStemZVaBf9rVn5kIZW7XM2ZH406EvGVF4JfmfrEoFVtGNgy1mYr\nee3l\r\n=BYYz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAapuZjXNgKHr1XR0E2WK+vAW5lBd54joLOvbyA2J8HzAiEAjaTdaMj+Kw6iTcH9Ru1WXl63q0IKBBKeboSaT0SjwtA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602247409-20a54b6f.0_1602247511364_0.47130728320750626"},"_hasShrinkwrap":false},"2.9.1-next-1602248916-bfb401d9.0":{"name":"@xdn/core","version":"2.9.1-next-1602248916-bfb401d9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602248916-bfb401d9.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dqP2L9XgHpN3vy8oSe/K5c7N6+bBPayd929sOxKl1FNbr9CT9oCsnPWpjT0fIztSmtt9+WbpTewu6O6BQ1TXsg==","shasum":"cc45db1c3dc7e0b352b8f42f64f802d066b6e65f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602248916-bfb401d9.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgGE0CRA9TVsSAnZWagAA2bQQAKC2g4UDAjUZIf3MXuQD\nNIXJBT7ZSD2jHHb7nyjvC9+LXLTquHus6Bd1BfAYXRqviwjueeU0S/q2DIes\nvDh+Mqk6dqHrjcPBDdJgqQK4cxRBK0ztSWcNwlnknFXeKfymTgNmt0TEeTeF\nDUj+SCnKgHHBfOOG3zVMyohUhK9zu5rWIjlQetP/ACtBjHXPiVB3nDlDG0F2\neCIOpjQhdxBOg1cyv3Q6KGWOUYDtpVjx4hWv0o0zKmVXq9ituNrCb9nb3WtY\n1eXhlGruxSkOUmLowRsJSUIQahAG/Jcwf+acYC41Fsh/Aztk3J7idWNcIn7k\nK/jp8wDh9M/aFNOhaOu2oIUS6iQ5jcyRgs9jfJi/KdH7do+qslsuymtSE33K\nkAhr5CcDtSsToCHv1ETC6z52wRP7zeR3GiX7KypgWPO99eSR4FmCmkcHV3xu\n81OjODm9BwtqIBkHwMV9RVcgT9LuRH/weYtDgFuOBmNIper+Vc7rnyR/Wp+I\nklL38YG0uUBQ3I4FIkhfZHuU9X7L4CIBtogwR5ryLdNiq5IXWWmW/elFPORJ\n+/mv0m5fvlB+tozkpKlpYEwxVefmjRIQBGnOT6IlInq/pehaX2olIBskPvGZ\nnZdQuFPmqQJD+1xFtPYVG12TOE7pKr/M2fjHgRkKIeTD+c4oIA2r3e/nwbhg\nwqOs\r\n=ackC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcee6N+n0/V5RvhQUcsfdt+yX7Vn2MeudGVrUzYpZh9gIgM3eqzDi/3Y+DLrAAdTQXLUfrjhm48jnKXOFlZ3WB8EU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602248916-bfb401d9.0_1602249012291_0.041004803667803014"},"_hasShrinkwrap":false},"2.9.1-next-1602249993-b1d2adf5.0":{"name":"@xdn/core","version":"2.9.1-next-1602249993-b1d2adf5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602249993-b1d2adf5.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-kVKDWOKsvqRqTKDmQi+gn+xC9BTOI4lG7zQ4yIA8smJy20/SdXHnhdl1ey4Iu0tyoL8AHKGatOyHK8yUtjTpnA==","shasum":"adcb5a6020a583ee9b85d0306a40701cab792e4c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602249993-b1d2adf5.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgGVqCRA9TVsSAnZWagAA4ngP/Rf9FLQwS1A5fvx8hI0Q\n8yLJY7h3jxgwKHSyD4ya/ee6sZa//czR8i03hxM8FItRb70rBs7pNHW84CMB\nys5hDIb86p8Wv+ddJop7MseEJ2UGyoRnuzO6viHWGto+0VKGkLRnoGVl7zsC\nI6uPHjgKYc2ctVwuVjfQl6mbvxJMqzmpAWs+UhpjG66UNxVdvzt9i1RX3C3h\ndwAlojbtqrpO/sw5Qejru3pdeMvm3uWb/dHA+NyWuOcQlAnwvLQEQys/mm8T\nnAWA0t8+oRG6kIIUxlgzgOh4s01YA+juDdCbeTuyXku/iR/zGcvITUXGbAIY\n5p3owQa1Yv6o+9lkKSb6ObpHK3jiT+qc32wUbG+HPGWms7TcGh8K8aEt64Zp\nb96ph/ocEjW6o3WNOaDcgoMTthC2JRpwqCHUTAJIpd8JPxE8XVcXkaNsPIhn\nc8okKZwenE89UofN8L6TbduN+I6MThiYjjFvRJUla6eDw9z4+KARnEWljxfe\nsdGitox5LYPrX9XE27prpCxO4ypHWHzZufSRB6SoslFYd7BBcqmHjLA8Z/z+\nag/IZyb1+jFniNXMgIdO6YZYGZ9arktjhUs3KxbhD9BH9Px805eadl641Syg\n5G2Ygacqph7fQFhVS+kfZF7BPIOrFm4v5jJZJuN5tFjmi3qyS5nJ443moCa2\nu+Ek\r\n=j9fo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKiaJy6rdpt9fMauCKl/zrhmJkdSQUHY2IJBjw5Lo+UAIgeWB6onQwTB79hJAhTvsHk+RfFVgIkWBh73xORQ99mCY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602249993-b1d2adf5.0_1602250090056_0.7671094243766552"},"_hasShrinkwrap":false},"2.9.1-next-1602251201-9ad14890.0":{"name":"@xdn/core","version":"2.9.1-next-1602251201-9ad14890.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602251201-9ad14890.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4Ze1FqRTpxOY1l08ZuBm8gXs+j2SOjcC+mLwRUOw/q+V/lLc5dMkq0M2+cWAa4MpCk+8cNxvUmsuVwApVXNGlw==","shasum":"8875161940cb91604324a61ab6dede026b488002","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602251201-9ad14890.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgGodCRA9TVsSAnZWagAAXS0QAI5o6jFM1yrbSKb+9r8J\nLOq212ZvIz0sIj0gS79K2Of0tfoywfXbwGNQozUbEe7r8BFzRBy1S1IKybk1\nc+4AeDFIDsaoTmSzJrZ6vLghvwuesy2WpPXvfaTPIwBdaA5DUeiMssIK/Qra\nldOO0SBHRi8x1QWiGdclaGyCg1hsGnTMiAcWCXGT4uqjlFR272/DTqCTdorl\nWpNB0CRX9G/Sc44MBDwralBZh7mxmn//Oo4iGCzen9RrHDydU890YqSR96og\nFsYAu+NDN+iwu09ZgC80R/vf1sbLDat2VXzAxnWWTUpCVN1dHULxX+Gc+r/Q\nluugc+SLdxOU0czzWlCBa3kAuyBgqsEMdNdlfHUpRLPhjPj2tZh77JQ2qr5W\nHoESSiUBp5ot6JoIHqZWycAQcoSuRHEh4KxFYVHYklNAKA8qLMOMRbMqFbPJ\n1MH4bgLAExYz30Q5lqW/glUME5dAjRqouhsjgf8ITUA5fCwwIisR4AjzlAyp\nhusbEZMnrICcAGD3Hopu0aJGXzqbeIrsl7Pen5ySWhmh51gWT3GS45eaMEzj\ngHQ0tF/cc9La2L8I/IUbs9/YXPsh9MPk+VfMnUzQ5XbnmCPEiPJZkfUqbGwh\n6JiMSwqNp6e8rG0kmfgxR1xEUAgDtRqhECz27VAnxm+1BzhE7Fia66pJBtKe\nUGZr\r\n=pQlJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB4yYlWelm4nV5rCwEtJpNXWWQS8wVHKvgQ5vSQmqUnqAiBbw7d4B0sTogu0F70fYXeJFMqiWaXorsPHhXQ+YbKW0Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602251201-9ad14890.0_1602251292919_0.04136066481418044"},"_hasShrinkwrap":false},"2.9.1-next-1602251874-f1723825.0":{"name":"@xdn/core","version":"2.9.1-next-1602251874-f1723825.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602251874-f1723825.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-6Eg6SWa58j5e9tkCQ8mGYS7b+0eFNfzK77PfzXW4M57tfRFRV8319Uj98DTSKxmSDJSVDxuvGEkP/DSF33cCFw==","shasum":"097f3b007a7bb13ab63f24f852cf01e4cce84422","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602251874-f1723825.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgGzCCRA9TVsSAnZWagAARe0P/A3uGj3SOCFWE9KZolXE\n05ZbIdcr06cSnsq5YzJr/mrjK4Uk0rJcSRV8+TCU+Wmenv2+8qqBW6hU6zbA\nuKzQBmk7HKJIRmhkL9ooAIw967zjJktpv1++jcKeBWNc7nzKrcU2svdHMGgn\nH6aTVH3cQF9jJ50zJy16DTKRT6xONXAmKTMGx9oXJsmS+6YMF0mEqllaInS+\n0rs7gqiqX+AhVv/ftHjIvpOJNTxYP7b910jH1CRXGpjIf2yNgMSiiEoeLIuQ\nfzMf7Avt1teC7GPmLnb7KPieTM6Gq2Z4M3b1a6ztZqlFvgDIr7zf4mRiqMbY\notxR6n5zdmTZ49vxB8/XWeTGrIO3EMjWHLgWEpqTnWuxqWPnv4UFvBmz1xEL\nlwCfL0P+Oxmqw0Ntm6k0Rs4dsTLMYe6ce8wIeAvMfwjVfZFd+dXgyJbtWb7T\nMPjFIWRLlVudNsxuyeoeGTVY7xmlAD5vmZABYBivdg6rsqL44raW8qioEBOd\nV1qlzLgW1r/fsfwTumxNzodZtZaZxpguUYfY4F5gKGyo1hpF+PQzSE2KWmDy\nEhf30WRumY3pMAPuYd32iCncxj8534LB+eqo+pq3YGmpgzPTbnnb31EVKiyi\nK81GFk2NcwL1SrKvxTGJcH0jdk2ftcr1zk+6L8Wur6/HdFF1juBRJssC4RLg\npnxi\r\n=ZN6C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEvjEPCMnD0Uzp2nFzhvMflRbxn0da7O7aVqwNS3eRJMAiEAiYqE5wTaoKqdkSauo/4lHH000dfjZqRyC26XuP4eSQI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602251874-f1723825.0_1602251970166_0.3760003734685018"},"_hasShrinkwrap":false},"2.9.1-next-1602252148-e2915605.0":{"name":"@xdn/core","version":"2.9.1-next-1602252148-e2915605.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602252148-e2915605.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-plBPZtXcMmSFclkLKcBzDYNqyXNoXpX7uKGWchNA3C0XlXjaHz38Hhmx4HBm3BEytHBraBidWLbM4FcYo7Y/bA==","shasum":"708cbb720b749e536a4cbe634d01d3c84c34a61f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602252148-e2915605.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgG3HCRA9TVsSAnZWagAA74AP/AhZTW0IfvF3Nuv1dEZV\n5ATgwmtOH03iI6DEGFdXW6Z/FpyUZIdyeKlGswzwGjJ3B7LvqJ+bDRl3l0Cf\nY3uvzEYx7IyKZoT/gSTXOgxyp9dd0RzyR59oVWRrDe2XZeCUaZWMIQkmcLuK\nQwYIMe+fOJUNnkS1IrhNXeZzGrzhSmb+jYW1+C+W49MJAYICS8H3Fppx9pgp\nbJOeN+NxKmbmMmBCf1U7cstg7OtLDUdanfrrGrhT8NedOgpXNdVJ259b5miv\nom1IeC0qthN532b3cwfNWH9mvqOqcv4BwZSpBTdOfcIt5Hy+Sgj90saHuQdz\nWisNKQz0bKDfM6L2bd7OEMV/0eQh98w2hvn3M36kWNiuUMMVfzqApMKESnPF\nFO4bPB3WgSHIoCV2PD+GVAbx54oEHdW1RxasBfsD4VxNxkexTUcneecJGwqP\n3FmZlUxBTXu0LYJqJW7NDS/4zM7E7RvHTjwh6oVCPN8meTQhGLxVpvv8CTI7\nIGQQwAEFTysKx6NVGo0cPCVpQRAnJiSewJvI1Ku+MtiBolKyJi0dytJm9Bxy\nfCHm2/YWEaSD8zTCvbSG0P7WW1pa5NLnPvoMPWRyBoDP1vccZBuBkdXyMNQn\nMjQ9NYqPHIy2srCJ6Gi5WElxyO+h7AgTZsmbTSm0j1p0CPLlVqCdXsNjXAl7\nacZy\r\n=SJ3X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAlgHgSv4fslPVkfRxQTxWukuqO6mSEQk2VQCbXvb/UuAiBYP6OnwPQSID9TSdsaAkgRDl0buLo7jXPTgeBPsWXBMA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602252148-e2915605.0_1602252230734_0.6474565008960722"},"_hasShrinkwrap":false},"2.9.1-next-1602253079-bd36a59b.0":{"name":"@xdn/core","version":"2.9.1-next-1602253079-bd36a59b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","node-mocks-http":"^1.8.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","qs":"^6.9.4","resolve-package-path":"^2.0.0","serverless":"^1.78.1","serverless-dotenv-plugin":"^2.4.2","serverless-offline":"^5.12.1","tcp-port-used":"^1.0.1","uuid":"^8.3.0","webpack":"^4.44.1","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-dev-middleware":"^3.7.1","route-parser":"0.0.5","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.9.1-next-1602253079-bd36a59b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Lq2VpQ9sIHyRQqdlVZCS6Z0v0TtYwqyvhL049rw81evJ+UfP7GeFlcDzJtDq2ShTQKrLUQRy+wbfMZNpAklZwQ==","shasum":"d782115d54f0f4a6a75694d6eea1c4c508d1ac04","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.9.1-next-1602253079-bd36a59b.0.tgz","fileCount":147,"unpackedSize":700019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgHF/CRA9TVsSAnZWagAAsAsP/0A74zJFxm3J8r2g8Pee\noMZF/5hkXrCYvx3HjNkRFUAKcA1+F47Z8t1fQ37KAjSEsz0pDdep0gpM6Gwd\nvONLBVFdJL0inT2nUBfcW3L2tqTb4XrcypljuqSlkCT7aGtNJDxKuZ6TwESM\nnYaud8S2qb3cZIwnMrN6Nk5yIy6TPHqcPeMuShRbeXt8CZbTQX5gcMhGDLGf\nmRIjEXkrfwT9Mz5ndEqKDaUv6JO2FT7lWN7Ho8WjKLNIN0FERvIl7WoUdlC/\noOyKcu9qLzs/AP8voL57B7cn1034XqNXsr8fBSYekzItAfta5gZRc+6znLME\n3JRBXlPn6tRIcIAYm6aj/fx6XmcujSK2WnTR9oS3/uzhxuhfbDnlQNlV1E3e\nRbAN6GoIeflWXq5rC641GqddfTQipgXgqNqwu/KLrQwmkC4CGGZZcLiMSnGL\nYCXPabZS9T6VKc06PMPQy8tGo1RkAJDFlv516OcBLn/8df9P/OsOny7UYKoo\nhleC9cYmlIWWY5xK5Xhf5PQVc3dNlaFmXrQNI+V0Q1+lARj5Q85Me+YLl1x5\nAUvF0GmzvxezkwKR3r2/mXnjUDs3FiTy1gF31S3kzcRsf+wLYun8xRmFhAJU\nPwNaHcXp2vgQ6r3lkeq6gyquD990CvQTn0EAgLQrEiAvpSa1EFew3JhN3VQD\nZiMT\r\n=gvkF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAh5FUWGS/QsSoi0KDSa0DiN6jKhMFLL0vqPVaxRk7zwIgXpyne1MeRDA1DAdpkuAnGy9hIeADQ3o67L8vxP0QJ/A="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.9.1-next-1602253079-bd36a59b.0_1602253183277_0.9015419395605397"},"_hasShrinkwrap":false},"2.20.3-next-1602256394-e8fd1e4d.0":{"name":"@xdn/core","version":"2.20.3-next-1602256394-e8fd1e4d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602256394-e8fd1e4d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-mn/1jl6G7Iqgha3sA83QOOmlOHceVP+C3IknGY9qVydzEFEtrm/n3EChaG1vxAMSm3j7Awm0vNjyi1Xjpr5+fQ==","shasum":"28ba7b7d33f09001d1e703b83d8138119a051254","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602256394-e8fd1e4d.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgH6pCRA9TVsSAnZWagAAaWkP/0lGLroz/jOC1pa1986s\nrMIVTZafu8n9AwKvaBtJEspTAdd6iLgFFZTXJruz5y+Z1PgceEtZk47/W4Y0\nJIy6lXX4YFyXJk8j/CbhnB1OFYbzuf17n90k9mG9bpwAVjJ6qm+0LcqpB88H\nSAaMQNDJ/0+tOzTu37JJxb8S7lEHuF4eSO/+aHem+JkmdhLUe3MVXs7sEjJ2\nPL0fi6+ziKM8J2+9q0kISNm2TpwQMnpRPVzYMDtY53bXUvMjR5UozZ/yGApp\nrU3uJ54hx/hHo1VqEw8GzeTgG+gtkgrfB+KVzt4TgRnqOMoF2K8oAEhMRS6b\nFB11sRN/+hSVVbzzwdFdZYW9KD6RklXGGRCMVVtCZ5K2SoO19CiONXCPcEjp\n5LdAvFTec8l0ji3wrNAcNiLkBes9wx0mEZGXAPyTRRmRWegVg6dC5Aoayct6\nVjJz2O2TAptnE0ncveGggYtXXqcbYb84e0m6aTAm7109hFBoycmfdsv3wIhn\nfoXBbz9CtD5CtahC8SX3DD6JnEQbz5IoBG8pwEYG9Rg5TN+YmSlgqKgxD7lf\naHzE78+wKkO6PzOFUrhpgLUzT1be6u7luFF/NyWBg06gOrzFswZRNC373Zgx\nZij97+mXRsmwdJ7w9EpD3z0GW1B/OmePwroorye7PXPH7LfGCgAH5b1I/Koj\nPDa4\r\n=4ceC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8e2+Iwrx91JijyoP0PYeK9VLT605a3jstYRchdIlzOgIhALy6C7D2pxJXMHnQRIcKa5BOqqRnXsrBKZramjKCM4wR"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602256394-e8fd1e4d.0_1602256547399_0.05222271014697499"},"_hasShrinkwrap":false},"2.20.3-next-1602271341-894ca2ca.0":{"name":"@xdn/core","version":"2.20.3-next-1602271341-894ca2ca.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602271341-894ca2ca.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9knQ3zFaV/XAu8UDQ/36ZXDX7GzPcbR5RGM8/EHuFPii4rcnrakHLd0Tn/MOmL/hOBg6qlYtUPos8SB3qJWncA==","shasum":"4bba2c8a6acd15912b2e7246bf01f97e2ba1c9ad","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602271341-894ca2ca.0.tgz","fileCount":163,"unpackedSize":593149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgLjjCRA9TVsSAnZWagAA9YcP/3IRinNudnn5lbKy1U+4\nJktS+P8WXTqsZ6DjAATgVaRmB54F0I4lWCRkjJlsPNKL5lmnxDDzCpRha8FJ\nv2DyBlP/diSgCflZ6m/6fU3p4XqKfRHwPAyNsK8iSekCMsqQtOB5RK143r2B\n/tujLeQmwNYVncTHADihRm/x0Hd314YLoCiIJFzOTWlkkyotdjjyI3nrWzLx\nVrkPRTNmPCn3CDb6rqmF2PpBAtaj51wHA6/8bbrS98iKNJHrf7UGuxZLzc3v\n3bWSzojb2K+T/jJv/EIJMvZq+WtD7aJHujQoq47e0Kb6RkOV93aGHqYofxDQ\nYE/efN7KQn/rO3Tr06SxJOSdd7qbopFnBlyNlxVRerh64fZD0cG/f5N/X5qW\nG/dXIThK7zLE72xGauqd7rGE/aj9dkeDKrI0N6VGx+icfi8Aqu9LzwYOPyJE\nGW8ab3Num3fQ7YCDs3ro4MyOSK1LKOEdkQrV0wHpDrjQ77knZTEpqX6ido1B\nl/SKGqH/qIbHgtC/BFDqsk6VK83447w4i54/aPtOwdMUBIyISaNJPO1hN+vF\naf159CaEMdhB06+Vdk7jVqWSPHvaJiX5fwBGIIwpbvfHsgR+aPiEglk5cU4X\nE8qDx6XopOl9Z3fExvqKZfgbNuWCXBibLPybDESzaJEdinMvUTKmCU7ZH+n3\nCBwi\r\n=RuNv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6EKVVO0x61+fqJJb1lllIXDCLq7NhDSX/7XBFMwhmdQIhAKpTF0alpTaK3Mf6QRUioin2hDYGxGlraXvj0DEGFNo/"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602271341-894ca2ca.0_1602271458666_0.2875512854625424"},"_hasShrinkwrap":false},"2.20.3-next-1602272382-b5fe5d96.0":{"name":"@xdn/core","version":"2.20.3-next-1602272382-b5fe5d96.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602272382-b5fe5d96.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-P47Fwc9PqmL3dk1gpbdSQagm1iJX5ZlUGAjAPe9FHYwT5iOVxXdMj08G1sY0JLw6oD04r36TljQEBfvkL2tz4g==","shasum":"323d2dff1a09e85b6e5b5530fe11941444d14db2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602272382-b5fe5d96.0.tgz","fileCount":163,"unpackedSize":593149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgLztCRA9TVsSAnZWagAADtoQAI5hZ8Iqq25naTsNHtne\nbNvqdXS+X5YEYzAixgcF0GpaobauVINcT7smJhTCvAmNgqMM9oukR/QDEY6V\nl//s9TtZ+6tghSiip3fZmrhc0AzZXjiDL8JkDifZEY70ixFd6XEBtvK/LWEY\nTvxBv/g7+ltIqFqPoLET0ylUuclKrTZwn3rUyQemUsFOdUD6dsDEc4rYan6L\nJ7HNITfseppKk6dqzl7uihVIOnoBfOPdXXn0Bz/DhSmB2l258T9+0eHAR8vv\n6EHJupNO1oj42I6oJVUfZlKrDgVE2IOBXMJiiH1Zvk+zCVCYeK+Ja+2owUOZ\nUaRbeRgK+tYxd0yhBkWZy/lUMHVUjisOk/wv81eVh9RcbZ0Hnf8kdAx2rg73\nRNPwHPGXUeSzQBdKPQ5zLXgZv+cQ9REMaLahSn7LB07GwdIVXjvzKlXrnxjC\nAl2r1rGO3J88Nasb5DNHwH3UulxaufJO7G5sZxcYBwwTQeoXtVk044rVaQnh\neiqC4M9ynOqf5YMb+6sI3qHRcC5pPP8zzEkDEaOpGgaBL9zyNpa4pnFhUqux\nHamhJBTRz5AQWsP6A4FGn9bU36WhHPEXHWCV2PQ0i6ouZWJYluRMMhiE7cW3\n+0V/g4LUlb/V9WhpjWIFX4dM+4Egu9SR0zH6S8KCsW70Z8KZcxMNsyZ97evl\ncDSQ\r\n=6XQp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICKdsgcxjwEonXhSnEb3/vWHspJEnblP1lf72NVsM7gIAiEA2i4oekh7tqjFk/s03AYGF89YQJNg1fWgSE8BAUxVtNA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602272382-b5fe5d96.0_1602272492541_0.1540153355439038"},"_hasShrinkwrap":false},"2.20.3-next-1602272398-72b55bfd.0":{"name":"@xdn/core","version":"2.20.3-next-1602272398-72b55bfd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602272398-72b55bfd.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-S8iYqzzmnlp9eG22S2nz/yx+hBjdYua4NxKbPtksafoaAb7RpmV++8lB9/oMKazpMoJKH0VsNoYWR5KaofOxvA==","shasum":"7f0b3d3b412c17cbedaf73f876a224874ab319c9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602272398-72b55bfd.0.tgz","fileCount":163,"unpackedSize":593149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgLz8CRA9TVsSAnZWagAA03wP/0SaD7X/GvPx89MgqsaK\nT6Jrwmn3DkS23ZEMSAtMQXV4UIWMZYpmx9aAWnDzFu2bBNKLbl7rfNPlnY6d\nj2BHaSgI24P6+E1NFBjPdJT/nm30NwQ3E2qPj2g0UvzToYe8eoRAO745YEQP\nwPp39/0jmpxedrqZ4k9kaJxm4FV4TiV4mJQQLqDmhwadFVL+syXvVgOLndoB\nQST1k0KB1dHT12ZLsRmgV364N3cs5kXHWbdohFGp6b+17ByTWtRiZtI5TUyq\nmAF+kvLJoplrWfT7lRn1oPGWL4ZWoaAG6kHEGmePA4QngmqIwmKIdv5QoZGk\n4PoP+d20xQBbUcCzl/o/2RspX1zIC+FPLQl7hyUpKOdugyuYqRQlBXZt72Jx\nO43Th+4jM++dHn0AMUSfez80G1H+w1H6fuTooSqBzA4sQyipjn0XZ6i5HHo8\nERb+xbr7kPu+t2nHxyCXlsy+u1tES3zoUqIhn+U2seIDwm8Axz6dTevORAHM\ncMrUZ226LH2k9u7bYo8mnyfw3/q9xZjcR9V6ZHw8pLukAe6GP9XcNf9A8wpS\nMW3jfpUaodVT50CnCmd4IcTUWIGQLMPvDWwYcg2BJzv/kTkvyileVyYXkFMY\nx5jUSV6ewQ84Bg3MgpXAdHy3OH/LYsX7dvPDzFilruBtg2elCxIWP4pEqXap\nwduQ\r\n=uqlu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBMYzzKDSlhSPWTkt4hKPBJTMR8R8RCVBJikMefTBTO7AiEAveR+LINyee81i9XJHsZ+qS+3SKvnEsJ1xwU1UPjhaD8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602272398-72b55bfd.0_1602272507652_0.6923667163781411"},"_hasShrinkwrap":false},"2.20.3-next-1602273925-72b55bfd.0":{"name":"@xdn/core","version":"2.20.3-next-1602273925-72b55bfd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602273925-72b55bfd.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-ukvg061U+GBcv+dfN9rqrOKUAqaiTGUjK4MeUi4PdcjF18t7Y+s+O5rr57dg17J6k8tVRs7V1+9cccMMCJyVSg==","shasum":"bf3bc2eb58f7cf84e6fe2ac4e52a69e4c5e63734","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602273925-72b55bfd.0.tgz","fileCount":163,"unpackedSize":593149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgMLuCRA9TVsSAnZWagAAti0P/3xVGYC0+XsQj/XIiVth\n+Qqrlh3ASUYzlbvF96Dpq35qXVeJtLBiouQ6QXCJcYzFrKmeXqHg/h+yHC+e\nNbw3XpU9tjtihT4OCELWsbNikwK7E1trVuyxQVWvaDhTnPI9ukEK4Gdf0m8L\nkNV79EHr5JrM70zURdW42DGd0t90T+gd5yi4V4XzUFJqVaTyLKmOgQEp7gDd\n+vEnduMkkyoNbgDw0CVDRLTv2byaUF1aVSBuY0MuDv2mOi8SkXYAYRwvozHH\nwoLItaF/DOlD9ygTvSFwij+rr9PzwTkpMJ0kID7dNTSve5sVWgUVm6CCLuJB\n/iVbwKPEVgQPnjuEkGCS4FZGx2jTaPda5Re1TqPkYQJm7+iMzkx1vRAKZjPv\nfs4v8c9mDIM9Dqzlm4mQenxrIMUyXXRjHAf2kVSsHJQSloECJuSbqg/ayhe1\nkGG6F9wTJ5DK4vf0fGBzuz9CPO/xt1smzmJZ0Gml9iIlFyGs/s7fJSzzXkP7\nDldqPVutSDb/AmCteS53DzuOxsa3Z0JVFxPZd79KerNPW7KrNTbsJhwUMitq\nFo0vuYrKa6+LX9j5Y3bfcXzl27WXxIB7rXonND77FWm5i374wdyJunXZWv/F\nq5m6RTBXQhZfIG6M/cEbJ6FAMSvfLgbxHINpb9iFWxsTbPt9oLcgvmDqIRAx\nQrRn\r\n=uImE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEC/COcWKAl4t21DqINFLBbvs4lly+3RCNblYMxhYmErAiEArTvGG27dC3oZsggFPbJdDhJ97OcgYCfzmd1+gqRPy/Q="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602273925-72b55bfd.0_1602274029963_0.5125824128322638"},"_hasShrinkwrap":false},"2.20.3-next-1602501471-57929e68.0":{"name":"@xdn/core","version":"2.20.3-next-1602501471-57929e68.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602501471-57929e68.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1V0vL+pOtyWEuCcwShF+IheqNhq8nJKfVMohqtACvrE7ESooFs6RuS97aAGl9oSvYeTjyUVHPdnG1kMGk3SJJQ==","shasum":"dda2fb52149b6770a509ea9f1af6f60e5f2f48ff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602501471-57929e68.0.tgz","fileCount":163,"unpackedSize":593156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhDvXCRA9TVsSAnZWagAATTMP/0+LQn4cbIFb1krWgQcw\nvjg0MO9+xledsoqF2r2W+fR8JaoucqZpQAnNTjU70E/YhgbX81PMgDXhD5D5\nRFSHouSm6GWbaNk1cN8tIkyp00SI3qCZu+TrgALDpbmRGTRCzx7aZFX3VIc8\nfj57RKcDtuLgRqaVFFope85L424pOM9Z9lyjo5ose+YYBpaOjt7qVMUzyl48\n4v5+21VCRVpvop7TRD6F3Qu3DYR0iZElAQ16YpFDxKmDTMwXF34ZAVisNEA6\nEzwzsupuZnq/WakGvtRtxP1QckCrT4VefU6hajCj7oA9hYUkMolHsAP05PCE\nVLQLlG00qg+VmZ3JNGOUBQjjxCu3N/Jrue4O/vZ8hXbmcCLmYwuhutR7+brY\ntlKg4GbpABy00M37CWAq4d28xNdjA+6l6HKlb+WDZ0rjKAQer6OLKWr3pEMA\nUZ+5Sn1Up5Z61M67rXQ58vAVGddvxsXo/tuCohF3vNnXnrEsVmuMKQtgKqcb\n2XayjJ5z5QQiscg34zYcMrXv2kEpWRs6IvFpWfcCtjM1udDK0fwJvGSYj4MP\nanoRHBM0rScmWFPcMYiUUgCERbDikGxTtW2HxUnDySMX+xz/SI0WWLugn8jz\nfK/zocQQ/hMDz57Gx8fdLKVZ1PKapJ/qQfC1Q6paTbkKHTUyNgQI07A6fdz/\nVSel\r\n=zSFz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEyfPsiT7aY4NHccCMCKLUzu1iXtXq4YYYAzMkWH5u68AiEAyjxbY3whfwMTHK8w3HBV4u8srup6A0q9Mhnm+1jIpnk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602501471-57929e68.0_1602501590451_0.9904199702535113"},"_hasShrinkwrap":false},"2.20.3-next-1602504191-1935fab6.0":{"name":"@xdn/core","version":"2.20.3-next-1602504191-1935fab6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602504191-1935fab6.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nfvSAYngfzDMKtQzVbQB1UcCiK7ypjRpkSiMnwhBT3AlDdvjv7sUzhluTj2EB+HRrVo2GYiFN/jgdHyvNTGLOg==","shasum":"a1e62ea4c486729343a379031693d7fed0158bf4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602504191-1935fab6.0.tgz","fileCount":163,"unpackedSize":593156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhEZtCRA9TVsSAnZWagAAg50P/1qJV7jPyUjWd0jtJclC\nqo3weF0FyDmmp4CdPS7Zd3Q2HcRrJZQfE6vQ7cwO90sMiibdLz/FAxqF0zHG\nj5o0IkQEWBHEukPz/TSEtRmLKxemtWiPQFHhbdXTC3jMUNemRWWayG2fKya0\np+Ehqb983w6+4jKWQkn/lX7/jZV3Z6Y+739/+51tfE8sDtfaZ4eSs0IAX1/3\nwCk3O6Y2QmicbGS+VIb0eWXvunuERGL4AoHTnDf0X1NjoOMHRmpZZ+ZPD8Aq\nIDMAdsvFbcJriiu9lrCtz9To/IRQ3MzoWZTp9WYPvR87GxPqxv0VWaVE21VS\n3kQBa+SaPsaNXFhHKLWDhyy36M90YYi7/yuGOYUHe3d8zXJGMP2OkMm5YigT\neL6vuLhA/LhamOnGsNrT2xMvtF+E+07TH3hXPfUcNATuZpncz3oS6Kxid8q1\n6gsx5uAdUlGuT3VEemUhUXY2xZs2WWz5YoqcyN6U6iTB+5QLF1J/RZy4RvA1\nhZF0AnJctt8GH8wx2u1v5B/kFcsHRZ0flUEAUdx7BNyAXLNkU6kpcuFuHw/Q\nAVJkUSUdhvMhxg8lmTitICYEDMXDAIkrE8zzNmV15OMmiyQQxYdZ97JXooRx\ncncpx/hLpVNzWoHX4UKO9w9o6lyB4oWAxCvHfYx2cebKJD5FkLfUNUldproN\nK33f\r\n=ubK7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiI/Q3UtCteG5ikV3eZZdO/SMHXc+USezZ97WQBVBoIAIgeRPkAFVi3aX3aVvNUeT4fI9G/wKMPY2xXhDgRC4gejI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602504191-1935fab6.0_1602504300841_0.5537357932847728"},"_hasShrinkwrap":false},"2.20.3-next-1602505609-1935fab6.0":{"name":"@xdn/core","version":"2.20.3-next-1602505609-1935fab6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602505609-1935fab6.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-SMHRj29jRgeRkVOcvwTE2hrLdVRjO98mbfM4ThFlTrfzhAvhHBzxBs5azLjKYSBKulQBC8KwzcDFEsAOjfVe7g==","shasum":"ab639b4c7c3ddb93966e701e3e20ab324a493b08","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602505609-1935fab6.0.tgz","fileCount":163,"unpackedSize":593156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhEwCCRA9TVsSAnZWagAA6ckP/RpUdqYrXYxhBm0oRi2x\nsrRdyEofI/1EUPeRhaKrefuT11Bcg/nbIvVn6ct3yRFQQ+yPrw8vklp/kmNQ\n1XtSZeWO0zCRXuvF4/4GdsWTflUMeGNWDRkewsDJmF+5N6ysNLggq+sxVtXy\nFD+uOUR1gDprr13sOZJWhowLo6KdW82Z2O3E4y8dVdpAmZqN+OiLSqeq1amY\neXDaVeT9zIvsFKj8jBXgREDHaRBiX0BpRi+4fEC6I+Fk+5Pc864j7LfGcg/f\nZ6dwzoiGM9PSpbPj1Lo7/Jl7j9nG1jP/Dz2LAxNoZlB2TKPNpufBFZjBtOOa\nMcPCYTr6mAXUGS+dvOcv4NCYZESU7OgNi+kJDBfKesUf86tG9jtL+Jx2MYXN\nU1vix4K5/rz4F4MLGyzxl2uxjpTwBGBmzW1e1H0LY/XnS22nvogK9JS8QI4B\nnpTonunNr9ndwyhh5IznePRF+1S/29AjuVnf9PmHDm3DjvHadgNCO2H4kggE\nonlTa4LyudqzgVgXpFVqzVmZMXEWxPj502u/MxkrqR/xdhM2271LGmI90I2y\nxva7DASwMiqTuPjR4e51w7B6K+gq7IQ54lwMr9FxgDBLR95nh4QbEbvyzAYy\n4PQsBJ/+nHIV17JteZLYQQ431Jq7NR6UqO+qLUFZw4ji9I57h6ft11iUHLrD\nCpoy\r\n=rUwq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmL8h0c/56f0KGq9F070sw4FVALPr0stzRxg865yZhHwIgH6uT9Ln5foqkde69QvdlEbLbFZ5ZTlZ2ymaaC6inW3M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602505609-1935fab6.0_1602505729417_0.16740212778819785"},"_hasShrinkwrap":false},"2.20.3-next-1602510733-3daf134e.0":{"name":"@xdn/core","version":"2.20.3-next-1602510733-3daf134e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602510733-3daf134e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-kp2YkI6Ch/OL6Io2pYo92ulUXBcGdqCvKVOji+KG2F2tXe3xC0jonMQ8Srmt5r2oTJFDwxp5R5w+T4ZwgvJcfA==","shasum":"02e7a13e0a208205834b3cc8795d194448c5aa7d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602510733-3daf134e.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhF/7CRA9TVsSAnZWagAA4b4P/A9HMLnyXfvk5RFJxa8y\n5MpqP0DNhID2f6ScK5uvt4yXaodJChUlT6+gBDiWa7ul1K2u2GbEvIDAE21m\nUYfZFvv4dbZuMWEBLypdBar2ihfLY+oJ9NlU6ZfRdA2+fRO02ZNMDc/GMFJu\nVQt4vDBtW0eWzdmYQnYrX3duM4RN23Q3p6hMuClOsGMgKO7uNIfLfpjLXORn\nEAYTtrWEw6y/b52HwQ51wVUyDi6RSZLz3iNblbFXuKdLfJdJdkSixQMmPrEo\nUBcOhST95f+GQ79UJL0sSEjRCzolkkIc2ZTLbqv9UKYkMlokLoyczo74Co/G\nTXXFMpep2HhDU8/LsxORTa6OlcqmEg0e6z0mxpF+om9poTky21K+0x+Re6la\nAXt1/GQGSPlUhNkWyio+NOlqXHU2mRbS2AAD+ieflc7Ytg0nZY6tqken6itb\noWdp5+R7idA9XdU9L2vD7ydMtNKsJxg85LHDCv4YBVMLFXBIoDJicyXeB4vz\nyszcvOtAh2Q0NfNfA7CHcJdbrwbAoUCoL1wk52m7mMsPxh1QQ6D9/fgzUlw7\nPeXDaJ6Fz/3YE3HP6D8msEhUJfNHdX76QuIRvYCJWm0U2HDsIT9phMIXYpxQ\nXtYXJMb46O3HtwLgD6CeWaZVQ0K56VQRO6/sOw+We2rrhljrKUVSRFC0HTaw\nsM6M\r\n=N98F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdc8yAtg1SM9D2MuT/dl7wWttpdIVboNyoC6TOW2bOkwIgZTxGUcGClNoE78eMLtd44lsIJl850UmnOdN0HGHhBlw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602510733-3daf134e.0_1602510843290_0.49719084424047755"},"_hasShrinkwrap":false},"2.20.3-next-1602513191-b3f69c66.0":{"name":"@xdn/core","version":"2.20.3-next-1602513191-b3f69c66.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602513191-b3f69c66.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-QFZhDjjCwUBxCMupDEFLjdp5LV+9/UcDK6+GnJjYzWqcUmI2cDX7YWFJZVbtsDVYAepNNhX48S5zyC6kbw9mSA==","shasum":"8b2a05a03eed69d3bef1e4cdaa1ca17059fb8327","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602513191-b3f69c66.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhGmkCRA9TVsSAnZWagAAVK0P/jPPx99AHxlB2/nvudgh\n+mUSj97meSdmQ73saEQprkld2dqW3h3LGqtdKN+vB2cVwrzQYhIP+/XW6o5U\nRHqqCiyIuD3KvHUa5475e4mEnhuYehP72OAuvTpzbQFzuBAcWrQK+esNqoV0\nzJqJzcOBAwnFRgZDa1D8uRBTvTV/vUmIzIoBJty0pVoIxfFNmmTSIGUYhTep\n80WKLSKBuGisdOb75nvg+2jlZ89YT4CN/5Zb2zLipXSVyTwelnLYKn/tFZs/\nUlYe4eeuKeL5oagp0goI2VS62i8bkuD9nKJ/FcFOEs3sJ31TX2jQPUVDFEil\n58CbJ6qkgxDxJvkUDLjsgvQhX57cptxP1P9pCQTgJNMONdQemtdNuOh8errB\njgJoCyZXRPLEx+kxvLSNaldI9dHdAKoIH/GF50PnhWrPCG/NvGUbdcrvs4+g\nju2DGievso5az3wXCOpxcj/+Vmrm2vVcdRsCJN4UKwbTZYMPiZz89ekQV3mh\nculEGIj9Jc9BK9Ezkp4aWdOTKohGAufJOE8MNiYeDZ6T3y+taYvCykLJVB4v\nlCG7uRcX9cYtLAQUB6/r5ZoMLoJheeoHwSMym8mz2CBhAZqgVjygmO54L83F\nIFMkdD5WAUalWjpOKiNAn1eZg3hDtKW+xRKRyS/MaF+3OQNTM5vMjLhoV8ev\nmtp7\r\n=tfkC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgYyXx5rOx/feOLA7BhbB8toqhARpMcXy6JC4D+OSblAIgS7hlo3AtMxwF80PontPHLjVDulUSU+EwK67ZEvH2ZCY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602513191-b3f69c66.0_1602513315664_0.4059362227762029"},"_hasShrinkwrap":false},"2.20.3-next-1602524969-742c24f1.0":{"name":"@xdn/core","version":"2.20.3-next-1602524969-742c24f1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602524969-742c24f1.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-d4uOxJlepm2sNZwk3cS7LCx9QOdRTjPP8OiLkdqxcEKCZQQcCI6rcDcL+L4k4JGlo6xx7uyLo1AQTgIJdjHCDQ==","shasum":"d257ee60d717704bf3d5cdf99bcefeeb0cbf3441","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602524969-742c24f1.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhJeZCRA9TVsSAnZWagAAMjEP/A/Z1S29xtZXPCKItKXX\nhmsB9uh//FVZEvc0cKra2FNMLPPjRJN6Nb/z9ek/Y47/Dp/zISOCh4h+KSYL\nXw4YTNnCVBpVMFzUXV2gjnzO3+bqE8VS6ZSneRwzid+D9Ijq4tjNdnrz0H79\nchezt9aeTkTQZBQEZq44XLv9ErRQe1/kAwk4hCNXL3NB2mh/MWap+UEk0Cvv\n2+nsDJdmSXpq2c0qJjcnkzJU13Cim47QlUqwJFfnWkQ1SaXE77CcIiEzlh8A\nuhlBNdPXCtB8ZAcOZtHj8p8EBlIWab62rzyWcaaoBxzqXzUw5dV5mlvsizHQ\njzK8gcjQibJ0BEzmignqoR2hRVeU0QojRv0mxxJtFU/smP1fwatxlbjWugWj\nuxXFqM0pj2cuKpFRSgVtTpw1Y0lOQRnZa1SCJT+BJiAE6SNQs0O0W0rlOK/o\ndj3cTdziSW0DI3xN4caaBzOGbKfiMPz+DyQr/cz4bm2bp8ooqcwbeGip2D7n\nb2tjehxP0VCM5+um1qS+O3aMoC84kg4nRoFZzHLZVbhVcTrCnUV7FiuJT67l\n472EskkKUk9tNcuPxCL5kiyRmQHn4b5FUlaSRrIIRrKmBzf2S7s2VJqieD5k\nsNTdnvSXfKiK7F/Gw/5IrJuloxoIiBNr98YPZlclkDhoDAAqHesjC/RJ7pEk\nA+r5\r\n=2Gk4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZCfVR1CvRqCKbY1mR2Z/57wskxfmfEO6qBOCdxacC9AIgFFShUcG5aZ4XylLRz/oGGA0DSGlnxcF6y1DIPZzHGu0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602524969-742c24f1.0_1602525081009_0.8799038720718189"},"_hasShrinkwrap":false},"2.20.3-next-1602529551-6cf1cdb2.0":{"name":"@xdn/core","version":"2.20.3-next-1602529551-6cf1cdb2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602529551-6cf1cdb2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-N70rgNwj3ToroKEHIXKQEdQumw1hHg0x8EVdAFT5sBsLdKSls/R02DJeMt1txkjFGq5SXK1+oV0ObyD129AVGw==","shasum":"9a97275c43c4b5bf01eacffbbd872789be9facaf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602529551-6cf1cdb2.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhKl/CRA9TVsSAnZWagAA5nkQAJotQLXUbsZlU562o2kw\nR9KCZlbsS4kFGOnn0WFEQqLKidTe39B575CtcPfYhwQXveNOxeDFlk6Fj1JQ\ny+d12OXnsSIweAX4Emht9erD3zLh1nIQb6P7wiU8MQUu+bCqkUYtkgmcQKsZ\nWGnIMF1go8V+wstht1JVcNb1TCeDa26fZ8NB+3zkEOR6v4NP0kfRqmK7/nDt\nAW+WBrFQY2t8c8J1bhgnZj/AANTtEQLbgNCO/cAqeyoaUwgIOIobfeoIuXni\n/jkGRwaT/Z+sqDzFqRFo2AQi6GtPAgyJ7yarnaSRHIZAgmADejN6TWf3LUaX\nJdQyISqcHZL1pQXvPMWH/oHuC5/emG0wVteL5fu885AmUjSVZR9JZCbeaAWR\neJzwtegvJEaEUIVqR/NMt0PRiqpaa1L3qkZnu1+AM3udjpPG0x3A572X9UgC\nVIm37C1Hf0tWrFVR4KopOcDH9WFfSjvIMtUTZM/x1V/nuSv+fEh9d0yM22rJ\nz5kKChlnnOSt3CwjAg1ZPx8WHK4Yj7wr1Qnq0+4nEs75FmEOJ2poA2UQJifC\n+//Wa0H2pnCfhvmISQQN1qDluGjJokStnZotYUuUPXwdg6clzw3PMmLJXZsE\nQjcMDDZLwTIj0LOPXBwDBeqvUHr3WzImIww+nqcmTgsRqk0bV93KTIJbmNwS\nJKpk\r\n=feh7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEdyQzwUxIPQ9PAvXTIYiAW+0UAszrzivZFYJ5ukKI+gIhAPHjR6CH+kHH+63GpZvLS5W/BqOQlWe4USBsqBk9fp8V"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602529551-6cf1cdb2.0_1602529662865_0.6891276950457741"},"_hasShrinkwrap":false},"2.20.3-next-1602530461-47aa7059.0":{"name":"@xdn/core","version":"2.20.3-next-1602530461-47aa7059.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602530461-47aa7059.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hMVJUJoV+waKaNy3mFLcw3iSAYsLSbydt0VkhxORme0jh57esOs4V+oyF60mjJUByx4jgbdJmjinoHAli7Lu+g==","shasum":"756a94782da5265fa4bf58b716df87dae3045b88","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602530461-47aa7059.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhK0LCRA9TVsSAnZWagAAYUYQAJaLQnW/SHaBPDixyjtT\nTXL0uOgoAQ0ePOy6wr2AckSfHvMbGNCazs2NzIH3GKGJOwGX/tDqzgPKSDLo\nPsCwFLleBccbAJfU9zv9c7LSfrl4ng6KUkGfl+6FGBkRViZAvQWbXRuexG3d\nMPuuQrA0uLh2xjNgBlUy5ZxAw8bSJaUk+C0DJzIi5CHb7hl98drnPVLeFkLR\n4XRt8zBtLh8gUd+9jJ5t7hineHLHU8NZazhEbnvMvE7jnYM/m75sFVnb699F\nbg22eQL3IWFq525lEdvrG8l11/sMc85nv3RE3HnSikjwjncMJtZN9COVAeUJ\nTAX59V7GwwvgUfU0qOPc+3mUoRRAB8+CvRlKgiL6PJYFJkoZerqVPYY7Rv3f\nw7En4I69ApzZ79C/AUSPnoirf6XJ4dBt1t77H97H+jCB3LoaMybTdhL8i6x2\n5W7+QAwUlvIe+YRjPk1R4hfRF4PH2Hgaa40ppPfD9CrNETLcxap+sC+ytvwS\nMuQp7VXqSa2r8fhl5syiWtxLRIlTdQyVThZZ8jXTB9g6Dx68eKpeQEBu5Mhn\nSmQGqQgIMHwmP1nO0EVay6GsCHfpe7qXgzpdpmcTZWGH+fl4DhJ3LpQlQo4U\nBhdidq98Nn+pfyaNgq6yrNF9KEu1QBRkI/3yTKUlm/VjQZzq06qaB+IEVtbv\nGufY\r\n=x/7Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQl4cg/BpBwDEtVIbG/f3AbcPAzR5l2J5dJF4Wz1VHKQIgAQT6ve0Ib3v9WJYC+9ZRme1+fv2dqO0SWgYhqrBjYBY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602530461-47aa7059.0_1602530571032_0.6581112826896072"},"_hasShrinkwrap":false},"2.20.3-next-1602531488-1653d967.0":{"name":"@xdn/core","version":"2.20.3-next-1602531488-1653d967.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602531488-1653d967.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-LPwTXuh+OtkO529BdV/6qLiPbPMUeqx31FvPRsMjmbQ2QQCvjS5yp+pWi3AqBps+2ndGL+XoC2OaFim4Hlr93g==","shasum":"86c9959623abfdfa20141e68b228f7ddf926e06d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602531488-1653d967.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhLEaCRA9TVsSAnZWagAA/lwQAJPVerSlGdzYDUTGR+kj\nbd/LMPUqV9+kq17nK9z32ikMmHS0O6noW/pl/BUxL47ccQSeQdbKBcvHOpH7\nddI7J2udCwCncpzefUYXzA6Vu9VJEts08ICcdr83yQugAbZrigvaRO0gYkvT\nTEH/poA5l+WY/MSb6yMCO4gih1FswyQgkL7HDq4yu7OzEjW52vzQvu/lbUdw\nGCeX0MNyZOcorNq4Iu2WaJvjuYIU8GKex7xbivgEeCSslWZqDNwuWe54CvYP\nJ6UDUviuXBArL8RmW7SUtgflBgCWSL4Owf7aiBKscDmDfkeL707hxCYVwgVy\nNrkpGcCXs5sK9fk78zIobFpLJvjKKQ5O13yTB4FBy3oUXbl3fY+3wmPSwwMC\n5kz3dsywLzbyzLw0jxggy9ZYXFeHwbD++dMZtyU09p+GOhbAWYcwwTIMqmnE\nRKWx9ohnfQbtNckhCLLYj+sVE1Qh+LcRoSDIw/ITHSJLysol4frVTzJKHqW6\nVnHaHB6GolHIao42REiOCm+LP/WoxgE3IRSgtAQADlWtYE4UjUb5axfywWz6\nLyXvdi3dj5D19edjyk0OCzNydN2Fi0//0SQ3/yiyfbwY94ksPjepkjwx8H5s\ni6KK8O4zMFZgFPKMPreLSAaErhIsDqcnqHgfzjd7NL7nwcwHLVjl/DdDJebu\n2zg+\r\n=BwCp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjozrLAVIVTM51/sJHhsY6Galb6808PpGRq/senRUZAQIhALDCe6I48nSCz5C2QYLP7uH7sDZiAPsanxgS55H8SC9s"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602531488-1653d967.0_1602531609808_0.8285664654684184"},"_hasShrinkwrap":false},"2.20.3-next-1602534871-fc772f43.0":{"name":"@xdn/core","version":"2.20.3-next-1602534871-fc772f43.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602534871-fc772f43.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-hru+3OfBmw7luFGYkXDLkIdWnlcoHU3LWcCRgXPdX5KIz3AqeAV+jxInkqCnzkZNC4coRcvUxQh70QscxRzWYQ==","shasum":"aba843d6a9bcdf9543880ae93b2923d3c9e7b63b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602534871-fc772f43.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhL5HCRA9TVsSAnZWagAAK6oQAKDxvWMOuFUleADLWYXr\nTlQzLyba4BkC2nesS/WsqU/T5JWhyY7xtx4fSQEKqNG5UfiyzTXOlpReWZS+\n9CjIcRnabshLAeCP3WV1RYDtFmq3OkXW538F/Rf4mVJzn8SAvZeF+UIrOy5X\nShVkQPphkD9zN7MxisBUPhQiyeY/iCVNq1KdUZsFPb5d7Iv44teweYORR2aG\nOJlw+hm7NSA9BsuMCBSrGSFIxZiLab90WhQlyxp3fbqsj0MvdACPhgOazPcD\njOsQ0pYPgpPNxpCrCQ+x3dvTP4eyRW4Z6oyMz2zOC+rvZyO6FQhg3fmnZ9Yc\nJGXFNI6Z8fvL+vD3yWGww1UyKJ8h4Qy28AV11WUzCjqDIzkC0FeMbt2K41VO\nulvvjisqXrscGdVE4YdT5bOw/xGTniwysiG9nMFevDCCjvGTUjqBAZeRr0ea\nbuXbjG+ZL1i66PWp0cuLGAM9fUkwYUeRXnKmQhRgzJAWxC6Icmr1KEC+m3jo\nqJ9gPViZ9hWQn/GR+ScjIwI+j2SLHXNapVco325uM0pjQ5eXEDK3RFlglbUX\n+pSPCHoo+XsfZtZJx9pyvSYT71guQjMEN1vLzhb+o1vcDiDA2URKyg5aB1MA\nK8LA/OYIj4IEqA3/wWGVIsCJg5pwlRoBi7vbGpXNO6ZVwLiQSiSQPP2R7GfZ\neSaF\r\n=dZgW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBg7ymsYEhl3jqjsaytZU8mZtGSlIeJSMD5k0V1tARAAIhALw25GBLfclyMYlMRMKcwy2bFKAhGR9tavzBHAeODHgI"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602534871-fc772f43.0_1602534982706_0.09656542604474883"},"_hasShrinkwrap":false},"2.20.3-next-1602535798-045f94b2.0":{"name":"@xdn/core","version":"2.20.3-next-1602535798-045f94b2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602535798-045f94b2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VcPOutUeJQHGM9tQd72YgNG7Ddb5Bp3m1hL0dvuDpoEzRL71c+F3BBtFI9j+vNjkM8G5NaY9knhsSb67w6yfYw==","shasum":"24c174de5ecd6319b23b02843a576b8faf6ca195","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602535798-045f94b2.0.tgz","fileCount":161,"unpackedSize":587116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhMHpCRA9TVsSAnZWagAAgWoP/1R3dworPMbJtAsGhmS7\nlNeGCgBNgehmiIOfEjS+VaLcewyWaCpcT4rjgj1a7UbZlTRV8kCIOKQ44Ckd\nmHDkLExBtMPPz0oLzn+EhXdQNAjAvsmJuVpKM6RRGDe+HQ7G5VDXJH6md/uB\naBy6VTqg8/uMzcfqF7qtqRZt4MRR26FF52Cm2F8LMu3yzKMNqD41iOi6wUa4\nxUaq4oSZC94GBuMSNTpgu/IJzS2tqsbULbg2dVZ2QYEBnu4lTrg2PUqm9aqu\nl3UNBk3W5VYYnWN0xJD53sbsncdScoX4PSZUo8tusbzD6hzWQwxCm6HN4jaK\njlEysNbhLtYK16MbbnftRDdgsn4EbqhZHCXydRpgZi3jfu7ZCZsZ+NKQnc1t\nCWefKRu8a0zAzSZaJrtWiAuKfCFzNQVSSFmkDCEf8ONGcvT8YOFAGf6e9kGp\ndN0yM9P4D2YHGwX2openu7G3/KhZJl0cJohGpI86OTvfI3yDI0rlhpRCpCcg\nrx+r10hiLTpO0Dk4LfbGaEUmnOmYfIUVrJdTBh+8bH15aMlrvLjad3+GdNyk\nv8VdQ8dYtgQZCmK6EmbBBbdaRslE2eZDPvVLhitPrheu34eUzZDI47WPIUXB\nfNUNM70xxXP1Wb11A6VJanDDR4tDQVMIyYKC+xA0uLfxedc7rurDPGCEhzsL\ncQ2N\r\n=kI5X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHSaf7xReg8rjybYYf6mDKzyH5KfOYx9HeM9hmzyRa6QAiEAhec+tju4RNLgpIBVdDmOXHddBgL/1LdRIXAaJdSgKgI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602535798-045f94b2.0_1602535912929_0.2993401767436654"},"_hasShrinkwrap":false},"2.20.3-next-1602582904-a4b55c1a.0":{"name":"@xdn/core","version":"2.20.3-next-1602582904-a4b55c1a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602582904-a4b55c1a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-VEiF3Meqt1LmRqXfRCfx93i6EaMyWda+Byx0t6TdxYHzR5bWQXOsQZ3WGQvFX1eVVJZ7pAZmZPpjj7Jx777BQQ==","shasum":"dacb9930f26b7378d535add2e0685920465c5e71","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602582904-a4b55c1a.0.tgz","fileCount":157,"unpackedSize":579501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhXndCRA9TVsSAnZWagAAEDAP/j+K1gFpn2Y+/NNxI60c\nw6UG9a1lSxvec0BLnuddetQYFZgTM555Rw0Ml2Mr9lPycqZYel+lOQhyQxr2\nz7KGxy2ed/O8g1x1Odd8PVDT+KWjhoS6syXUhfCJRh9kjovln+5PgrisCeku\ncJKrd2alrzCYy3Z8yO6WomrW/aieGUWaxXhZsLWzo7vrBfP3p/gi3uZl9Pl+\n+84AlEz1BFDLz+31o/SwFpbFOl4aebDfo8egOaoXxgDhK3o2IiV/6SXXaMoQ\nYtEo+BRTAq5OQpntnfYXFOsgFmlOoPcTWdAAjwRBkWtE8ssFeFpFqRyJfK9Q\nijFZiufRQSpSokeQG8dTD4hqtb5zrw3uAUKi5qX3c8YVk8O3P6xTkcQ+61Nk\nfaKkC6q/VeqXr5t30osX/hQwXTcn4HQ7UWcI87V2F8W57dhLlxeGHtu0HQOB\nbyvIcHASeMTjV8MfhPkzQVajPeydtN7kae2CbdGF7Ry5WYrJy9vYaxuKalPJ\nRiXoiBtLc8HujZnAqIX3Z3cwEDsrILAPI8kJRxz1zPN04UmdlT4onDQmgowZ\nN2CpWQyBLxIKf0Ohen7XaYtakPz0W+0vpWlZ0ezTOPwr/FMs5HhMtj0ebqFm\nNfzlOzKJp2l3Nb0zfOe5q+iEVilIvqpPjAOAhmVnF0dHc4cEikLt/zsR4a3a\n//tL\r\n=OKv7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEbj0LWjBnLjVQqz260F77YHHB4W6D09u+ojpApT3GXcAiA5gNw+M9qxc/3OM4nc2CBYdAaTvl6P1CYq39+jqjxwbw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602582904-a4b55c1a.0_1602583004901_0.3150350599959315"},"_hasShrinkwrap":false},"2.20.3-next-1602584403-632e63ec.0":{"name":"@xdn/core","version":"2.20.3-next-1602584403-632e63ec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602584403-632e63ec.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Xh59T91PN11rt+WolZ/pH+U5vmaXCjuZ6KU/ZPoPhwRc5MkyWwVSwjZPeXAiYLtltvKxNtsj1wcKgM/CdWj+kw==","shasum":"30cb335215e72f7cef92cd32705bef0f50d04551","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602584403-632e63ec.0.tgz","fileCount":157,"unpackedSize":579915,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhX/HCRA9TVsSAnZWagAAXjoQAJfJg2z+mMZ4xiw+nRu4\nBMPDOTyaZmWBLgK7yZ5S75MMeNm65RFHWcxmr9VAxD5HeMIDJnkKFIiD0y/o\nNalAWg9ddXvK4wNE9Zc75NDZz5kh9Qq4pCYbJe0jfTPHEP3TeCBXnHT0NXCL\nRpq3yTiWjshytmjuC5spdyo6amuVV3nb9sszR8lw3YZcRpByXZ+PLghldTyB\nGzFg9jd3wyo5CPAjzJsyrzsn1VdYAcfhfQWgUdEwnvf8NvgQd4FXDythU/qR\nSXAde3sHjhea3E/df9pzGg+8GJoz7c9B6cWF4IRqNXq+w6uMWXjPFTOfcCcw\n9AiNzFGMc30TH4qLBrU3JetrG/pgMbNtU084bWynM0vlDcEBnHL0npcS/p2G\nwNNAgY6DLir2Nc8s0Wr23fyAJe2nWOacDqWkUA8b83HJnRpSeHE/FHTEHJTe\npRYY/Nh+pcwPXhViXOdDx3OSvxEBsMRQoDXQi3KIqnD7IkcyRlmEuO8mnwKI\nOXJX/mJChi6mUq02Lq5K6/RjmWDpJSWxA3+FNk0m+G/j4TkRMxdKmEqyo5qN\nruW9EZTe84onZSbMvWw5YL6O5melLiZpTQYN7MCEFHcVU/N7V3SR+pWtybT8\nIxFpBeFNPg7EmmPKOHGHGZASk4rZy1dcLWE6rd67ynS6u00vQ2ilQ0N+bgUG\n2eif\r\n=3qnV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFlBWmUCDLv4pzSyfwGXOElfO5Mr7HXIEXDLvBlziMBxAiBuw7SUzlMGaHR4JEdn82k8XcIJj4TGL7GBRMQihrS+6A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602584403-632e63ec.0_1602584518895_0.6588053460468788"},"_hasShrinkwrap":false},"2.20.3-next-1602586168-92ea982d.0":{"name":"@xdn/core","version":"2.20.3-next-1602586168-92ea982d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602586168-92ea982d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-IV1mLt7f2Y5wxxzabuqSt08TA4zoE6y9NXCXU1ddcdA6ZSHbJhWzldOyhRQflwJFC9hWr4vS3gK2fClic5Ksig==","shasum":"0c60b975c3233f1ebebb87bec31cff8fedd60c1c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602586168-92ea982d.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhYazCRA9TVsSAnZWagAA7XsQAIthc+IiU1KWbeTSP2OR\nq7UcSRSgpO30AQidPy95SNPEBcNBOqY0qFUv2Z5OWQNNYoB6THyk6CzJaSv5\nvsywmx2hF7Use1lBuXmoMEUH1YNlAASmv0KIdfMC9vUTEWy8e8aMFwJZU03l\nAnD4QehphxPDgPmFjFunruEF17Vkq+4RoPxWV6IVq+bkdWjhqW+naD4UviXw\nyG7YI4zZcculbYAw4MCdZMrURGtx6AiCFMhwjqPGFfhpNbTdbnL9cpQoWraS\nTJxogUAaE00Yeyc1nlfatZVxZo9xx8cx06jbhAqBEgv5QXWj1qLty5STVEFe\n0YjnDBMtJsQegSMJ8QG1VhAxAiFHd6wT/j3HQzcCVX4ExhpSZdOHQ6C3mijF\nzWyqWwWqUkRQaXEjSgWKYqLJRoVWVy4Zr2RbS7iGYge/3efG4JOrNXE5LNYD\nIy72WOWou0UbTQwIEx/QFk3ZIVwu2v2SmrSAvflbhkfcV7pVF1cslC1O+gCv\nToBj1QRLF9xyKXTgXviaQvmNp1MQ+0SfbBrx10sy76bZmp4spfnNJZLy2aAi\nlPKbUeyo9YspPKVtOCuxpbyEDrI0Sx+I9pIO0xq0308YpTba7QozWRTC3KbD\nfVZvqHY1j4Is3mp5kDFdZU/DlrM/QpABKHaX4p4OKQg0QKJ4Ytqo/3FzmhyL\nNc8z\r\n=BqU4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID3Jqp/vt5L70wkPC7touix9WcyF/YYJMQhyn/MMuk5oAiAc1ngYMf45sU+gf6cVB3jp9SaMWTVX4RFI05pVDIxo7w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602586168-92ea982d.0_1602586290556_0.8489247748199189"},"_hasShrinkwrap":false},"2.20.3-next-1602586384-b070917a.0":{"name":"@xdn/core","version":"2.20.3-next-1602586384-b070917a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602586384-b070917a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-a/6C3dFzRrKqHXMrO3fephSENc9q3rq/IeSjTEXpDVk3SimdFQhOm8svEQh35LxakcQK5hiXF9nWH5QDFdH+og==","shasum":"50c76eb9ae7537f8dfc5fe774900584e334fb575","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602586384-b070917a.0.tgz","fileCount":157,"unpackedSize":580753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhYdxCRA9TVsSAnZWagAAxMIP/RD1WnrGVHRCEPEC9/Kf\n+i6TkyPjajQseu5UuWB3rOfs0bw2F9zfecGg1KYXMEsVqEUoH+AB5mpBCHM/\ntjDCrb/VJX3HOihmSePGVTxJswoGwQLE7gci0iYevhifDhTanlt/mn4Tkef5\ndesQ8xzezIWLL5E/xyEZ7fahIhbNujC0ZYt1bvsZWK7fDsWPlyNdAl4HzUto\nTO9pQJ52H0n4XQu8gSbPrQ7e05G7wlMa9WEEYPMPcKPjOGaeehVOXrs97/2e\nHdB+mut6wRIGge7UapBL5Aqki7X3/i7QlmKwTFjr/WnVt6hC9J7m75UKtFHj\nBBexkIUjlaZEAZ2i1cJVu8HE/3TAp2mv5ocPcAEHea3xlkeL8FvdFhzNxyxU\n5dH3fRlaoq/DhTQgZ1kwO5zW0NAysawZg5A1Pr7nWx3akL0eN8A68Y0PMDyD\no0oQ+RQ/rTWj+5q6MHajgu5dIYzVrwBMy8RkP01f3LGPn9Pze0NMUo1DK6rw\nHaZGberTSuf1mIPY3MXGP/n6cLaa1FNP4L44VXZpnKb7NruhRTPAgMg295ja\nppqjokMqd6v8mCf8rwocniqrohJi63ufOga4LWEfftLWduReFzsBW3NF9w+9\nfHLgUyqyh0Uxu1AvfOhUeBVyledhaMMlFRQ0T0XN8caFjH98sLwxipikzCTj\n9N/M\r\n=UcXI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGNtuS4I2m7fU4TBkv0BQOoSJY1Ws+PviB7T9jyKWSHIAiAPMzO8HQR+1dwfjk3IYLmp3Zdl9Yi9vHUPjKNFX5maAA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602586384-b070917a.0_1602586481148_0.48489520615642556"},"_hasShrinkwrap":false},"2.20.3-next-1602586790-3a46674e.0":{"name":"@xdn/core","version":"2.20.3-next-1602586790-3a46674e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602586790-3a46674e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lj6iHJLyvKkm1kbJ6vqaiJs/+jBs9qo3EYmzYL9Uy0nxIvMrROJ+CEzq0wQYF1y9XMiOnTdPAGDunjkrlmkvkA==","shasum":"204882fb735067cba5c44f8ddda0c1a230a73a21","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602586790-3a46674e.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhYkYCRA9TVsSAnZWagAA2woP/2UWJWsc05wpabrWv66C\nc1fCn1UP3Gv50tD3wCrAipED0gaxfmqVnhZoMioVzM4sA9KYFbWGdE1VwNbY\nT5+XXRxVnMhw0Od0t5/f2/EudGPVrnQF09FNlTo3aRKdfGYZnMUEL9XWU5y3\n5W8cRGjSSYNDyduThvpFnWRRv8sL4yBfYXNHRuajAKwc4H2XUeJb2QB2Q2NV\nhq2+PbEcAtyiFPg3HoYhetnQeMxiugKKVqeJGpTSaT3c0jAv9nnLIzkI8ODf\nLg0sZ1+sn7CIbeCqbOO9NjkaUWVhVH2BmCNcxnybzwkiyd1lcgQ+L5f1rg53\neBzteN5KoTUtIICt7rF9hxoNlywAjp7W9QRyMaWfoGqrsJa/kcuyS0DYt0+V\ngQI3BHWsChmjduBzH3NEo0O4If0G2HxgGEYpsHZyx99V91wWkg5ZJpNeRGwR\nrM7BU3Zks1kKWp4LIZrcWYHXbiD5a0YpGo6DPlVBQ4YRgRypF5tNS+lUeBYJ\nZpoMRrAM8ZYh5NC/n8nKWmKOFqy10Uf4/Q/zPY7fWDRDkrKrHutO4Uohjgo/\n5L02KaNm70HFSrxlt4iqeJDbOixoyxDujDuQdhw762oXMxpqMWYMoYFwf6za\n4LeIuemeFUCzGDdTGKX8L0BA+4nCeOMsi4+WGzVkEPw5Sq6m8a7/ix3LuLf8\nq02c\r\n=+o0A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsp5w2OxtDL01ETcst1kgRziEdZe0c6dtq5hRdAkPncAIgVbeUI1aL2d75hu++AYhWb9ujZ0zi5thgOTXPzlgMk6M="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602586790-3a46674e.0_1602586904230_0.6149327702797225"},"_hasShrinkwrap":false},"2.20.3-next-1602587414-d967de3c.0":{"name":"@xdn/core","version":"2.20.3-next-1602587414-d967de3c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602587414-d967de3c.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Ey97UhMi4bDVxLADiGkmWv309mWXNbsus8OPlmGSa6hWC/uXMQGYn1a8EQbVdqUBXMj+Bzf6Kyb4THhJMtqNag==","shasum":"d2d7688e0d9ee0d57cb45373975c6d02bbd0c7a4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602587414-d967de3c.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhYuGCRA9TVsSAnZWagAAMbcQAI5f9OXJAoBi/n7ADqcq\nm5436zTA0lGt5eR39DOzxcoz8+Rc3B3PlVCzzzSqf/b4RS8ldDuUW0Wadtnn\nCno7D3jXIff33wocTxnrwza396J5xwJa+5QUHf+4rPFPNaK5yq+FYgGbZ4cf\n+wYLEV+8YLjGHpb66kMBumfr4IYQPLtKGL5HQP4BsirwJJp8n7M4dSUdKW13\npnw0Gueai8QQaAXHfSuYSeM1uii4XYNHAySW15kD0kIEJ92mJyHlN7h/Z3Sc\nOC8eZBU8vFLC09I4TnTi8TpWgE4zKBK7v/c2TnN6kOSPV38YMk6eeTvdXRlr\nZrpRXXm0EQCudmOlsttPtdt6BLPjJqIzTW6VlwLda+zJH8itCSX3umMyhMzF\ncff721Z3ThoU0YoWY3Y0igHUYSa3M6J0I2jEDCB7zCcX7NRauDCWmmSzOH6D\nScD2fzXdcAOdLugHNtWWK0V4N6G8g7oXCi0xEHIAX7y+gU5djUTo+eEjLi6p\nchQY1OlEZlB+9mbp7HCfV1YHXJtI7cOB015PI5FFVKO8UDBz8WFbln5wyOOI\nnNNJxc5nQQsOB54CAgT8ho6iBVTkmlSRmTttQYs3Z3pwOPJms/aLKKOuulUe\n43zIh1ahc6dIj3XTzjRXzjs6NjIMzhKQOh8lC4F9Xuq+j4RnceJTkOJyMudC\nZRWu\r\n=7u1S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfa7A/pe25+DD2HJEowv666T6e18gjEsT0TKm4507U2wIgfLXDTc/Y78wgFX2viCScmB5qfNtVsYGEWpmCmWo07zk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602587414-d967de3c.0_1602587526496_0.18809817828350495"},"_hasShrinkwrap":false},"2.20.3-next-1602587744-6abeac6b.0":{"name":"@xdn/core","version":"2.20.3-next-1602587744-6abeac6b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602587744-6abeac6b.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-yj/xdmFwrv9sWzt5ptDbVXXQckd8nWwvA/W2yQYqz5v+OnD7WSmnivWCMK2R6S2hSTNgWsM/mxl3pDkxsDGo7w==","shasum":"498db2554b533b6755b48958cb33264170c199d9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602587744-6abeac6b.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhYzRCRA9TVsSAnZWagAAon4P/Rx/77tp1/tS9Tbhu63X\nQwzTph8r3mMAk7tkkjf7KFa+OL+Z3j7/ONV41eXuct+aaAmC4JoRhft1C8Ay\ngFGa3GsVgpHkG0oSTqc0BUl7U4gN9pE8JDvwMnYHICz6DGwRCsmHmfoA1lyR\n5SLLi8xdPNdq4lIkyrJQEPJciRtK4F3cCYBXtIHdffIi2+p2HvMmoG1/kVZx\nsswh+YKBwxt3P4S3IpyHYmebxmnM8D/lLxwvsG2k2tPAB3uG+2NfE02a9muc\nzmUa+t9udghm2m8p/eKW8PcEYavMl+LGIK1NtrtfF3UKu03XwhwkTyjH5QbI\ntywYzirCOOfknJhOLDSVniH9PDAvAU82HlbFhUoYevPDuDpriyQ5tuBZL+7B\nwVsCV3Igz8dtvAkN17Xgoye2GLVLYtExXRoAfuS2NnzjMfmEhFBKbD38iB00\nw+nI2yQeGG0EdwnI4HOS1Mr6rfWJFsRKiQKum0GnN4IruA5UaABiPZkEgQym\nPoViUPpvI+2w9tR361InsGK5ALjyJ/s1xj5BwYn6iEFikeYVAQV8qLpZX6uz\nIzZwFWHcjerkzoP+aucRMtdQJtMhBIYPt6G/YIZI6WddJWJXRBcCX92cANly\nFLltCajL21WT9TUpUw4jN1ONHlskP1RNMWI1aqxQg7yMH0PQuwMGsPmwGarB\nTS1u\r\n=PKWj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSEEJZUQI6TxWKn7uYng9i16GPHA93PtDoz1cNCxVyWAIgDWf2cfkImv7ecs99wxqB1epIByHgcTmuhbO8mRmuWy4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602587744-6abeac6b.0_1602587857296_0.213754799009912"},"_hasShrinkwrap":false},"2.20.3-next-1602590122-60628172.0":{"name":"@xdn/core","version":"2.20.3-next-1602590122-60628172.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602590122-60628172.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-N73zp3ayRrKh7bi5IUzHu0orCo+wAMdhy9Z8ARgXMyrYFAWwbAZRuDdYpZ1kCtxMomkD2zGJjmQrLCBQnD8bCQ==","shasum":"20f8e601f607d283debd1d438199eb4c3af79486","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602590122-60628172.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhZYVCRA9TVsSAnZWagAAgJ8P/iq7d2m1gdgSLx2/0SGH\n9Czr9bnibFzbc93CQgaHj7Lp5o1VpuAb6sxFLnFd2rffKZcF1LUd0KgokVft\nPr3Kj4mlMQVI6z7NNLWToHinihyqfP4nwGQkBzO1Kfr+DluuyTjayawhrUEF\nMFoaOCtQDbgWkeFvw9g2PyyMQy3yidTxwdqbGCgb9+HTPUZnxEPmW7wOUfFo\n3CjRVfEi+uKroddrzz45T+IHp7zTi8sSZJbRBxw+PX7JW3Nz7hERZv7rkVwo\nI5WEdV8dQYQW7w8GtduPkEJdxtKLLO26m+DVExosmmyX9mVLk6MoU8vaRGK1\ncr5P/fsTWgtN5ewLnfHPMsyev3y5BRblhB4STBvrYOO51LfQNsmr5sbb2nAc\nQw1icQhyL/R7rflzZklk8uVCXxzvLfKp5F7Oc7JO0S9phBTE6k+H5WmW2o+R\nFg4Ptw8piTCap2933ToDdd8AndZnrCnjw4E359HGrL65y+Q5ccHqTkHXG1b7\nj95hm9tFzJHYSE1joiEmWN06gwU6e8MKYxoOnP9+rJC9lUn86vAICaHE/2Cn\nMT9GQOarSjpGHr3OAhvkg6jN0Iukn1VrFoeb842yx3bjAmWz29qKPfUiADn2\nBt3V+13PoWVhBn/3qttlyGR1B1SZxJcwd/0i2tEpGoCRwtUNwAIahFHtp+Af\nD3jh\r\n=9glw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBnKLoVaZNGxUvRAItrbZ6fmGwO+bNTdxtVOsD/sNRR9AiEAz1iehu2+yT386QzCTwD54xWqAQZZhi6pSzTMmlTU2vg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602590122-60628172.0_1602590229450_0.04441354202505954"},"_hasShrinkwrap":false},"2.20.3-next-1602590750-41806c88.0":{"name":"@xdn/core","version":"2.20.3-next-1602590750-41806c88.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602590750-41806c88.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-0c5/zjmbE1IDUbbSivmoCjcBhAUArg10mJLcp5Ou7Tz3S5k/xUTTDg+FdMAvFI6RCzL6Prd943io4+JV838Y1g==","shasum":"e2dce1eb7dc80e57781404e61aa5f5472a812e56","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602590750-41806c88.0.tgz","fileCount":163,"unpackedSize":593156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhZh4CRA9TVsSAnZWagAAvsIP/jxF8SK/f8T/NV0YfvnM\njkyNesB2cW6PG4oEUvU8zK7ECRZSQPdT7Z4/gZjHxLF1M/TKmmbEq3Pxhd1E\n4ztF1Jbvqm+rwZ9OrQyyvOyN5f5A9LdtrKv8ZG7nM8cmAoxqB0R9pxilVYJx\nf19GULmu5R48YsXBUHRMh0PPXJNbrAvAEs2zKGN7220SzEK+xEOUKBI3YdzW\nItjmNSvfZ1qReu7+ps6ASgtmeFxK+61apOkNI4UwubOqvLnJT3gbxCkP6AY9\nBTmur8/uG9T/Z/2xWPoAqB4WkDMgng/9vnMSZ1O5Lb6z9NMqyvslUylw7BQy\nIj3ik3/ZlRJYZwQdzjjTMyczQ6PGRQ5DQHparvdeRhl42E06MviCIZip3VBK\nniR+HVQ1KDGbp6MnPtaGnaR1EDvqEtzwEZXl9yyvhlYlEA9MxMEkjKw2RTUt\nEix3K722b6yz5IennSSIZatfYn5a6Xk4fSOLOb1wn1Y6tA+oBDOUKKiQwYU2\n6Qa85yvt9KCdiCLeT1q57+Vmib3Mso/+MCn4/9aiK7l2mstlarWwwKGXKfi3\nWIFGM/Y8GWmHwVK8Cr0i1BCDRslqiIMbnvF6MMzcTMMyP3ePdo23aJmmcycu\npFJTT2AzfmGZExvHL8Fg36ZZ2FBpjwQJL/lcIsRvVIT//85yW28+fcemM14O\nFLxo\r\n=clM2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDASGj8puIznHChcjHKi79eu73qSCrLjoluSjliT7mMtgIgJxSFE4ZvAr+pYE6NZfUcl+pKH0PZRXdmX7UN4dfwh4w="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602590750-41806c88.0_1602590839605_0.20202530422049447"},"_hasShrinkwrap":false},"2.20.3-next-1602590735-523f8fa6.0":{"name":"@xdn/core","version":"2.20.3-next-1602590735-523f8fa6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602590735-523f8fa6.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-4GAg+3sz9l9xwF8EMW6v6RClRo8fUS3Gb1KE2TMyzNB5ZVOickWe9tRjS0Lg4py6MLUPpuNV8iK1vVWDFzhe0g==","shasum":"e84b77a0c3201aee68ecfb3d8890ec149a347785","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602590735-523f8fa6.0.tgz","fileCount":163,"unpackedSize":593156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhZiKCRA9TVsSAnZWagAARPcQAIKdJWxgcNj5lTl3uvz7\ndOd0IrCyCFA1R08lwTBoD+k+VJ58S2AfV72Q+xzeJTU25XwxTjEjc6RCU8BC\nM2mMA0Oe7Pu+DAMQcX/q4D5o8To6mup/LIhIh5tgFkLB8SUxCB0OTXdH5rqy\n+MrHB1+Hnre+3frvhTqbuRFT0tKvI3c//1s7UEV1cQ13xYI/fe0VbjdyGkFj\nMsXx30hX8JY3K2JekL2dZc8miVqVSdky0lu10GesZkwWoAzyVFb6poLUBucF\nx5p50FZKh3uD2R4KqlxSkfu097nAFQjvGEWNsZX2Cyit+3Ml8yKFg9xASyjL\nK298wmT+NJcSDWxfIuUWlZqb/ff535/VsEBdhLqD2a97LC7CIZhIb4Wt8SFW\njifLZwmT+HZACrKzomEED2uwHWdaHSfu5shGjG5U2uzZqbT9CaKK7NsEI7Bp\nDOanCz9dj4hftJ+f36jFAbkSfxF5Km5fA9A5fT/nH/Exdtc96uU8M+NMSRUq\n7JRoxI7tx8U3R968I8SZkL6vlsyE76q5rXCirWrYm9jRCvayFtoy6ehzHRkl\nivc8kgj87vPe6oYh79ru0d0yqpeB6qru1Cgp5FiIYN6d32FUfxnCs3Kkk12U\nxQtjlcqMDjS3bXBfr1c5lJqKLF7NxuJ72Px8qukAB6PJqW3UXkNjOnjZCWmE\nn0ds\r\n=6MNh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBSThgwP/26lr94zxNXXFRYPTbfr0GFbcKjYPa3FnahAIgZkSugXWiIxxoFtf9ttHZAQUqSTBwugKNMrTgvOF2KiI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602590735-523f8fa6.0_1602590857803_0.016058124805430563"},"_hasShrinkwrap":false},"2.20.3-next-1602590836-a4b68389.0":{"name":"@xdn/core","version":"2.20.3-next-1602590836-a4b68389.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602590836-a4b68389.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PcR2rJYh7Nw8ZkLYJT87LRpMJXvhsVhwuLFlmS1FNGFEzX4fM1rr6xxFTr/EDmU7wHvnNevbK0L+IVCappYaaw==","shasum":"f80c57155aa7129b2261e1a6b741da074f3a8a84","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602590836-a4b68389.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhZjoCRA9TVsSAnZWagAA/7sP/0YuK+tVLPCFA6OSiGZn\njNRb4o0rPu11hEFoCt3TR6UcsNfMtM0HkkkanRrNuV1VX88WP8o/nWDV8q5d\n1wFLhDNOYQgZdnokkns6wLZEdwms+uXSnRT/ydk1qW1qG6Bk52aibLe17ZU/\nV/mdnoNFUUTMTBvyP3iv16D+1u2Cys0WcXO9US/spZYhs1Be2s84rsSiuOym\nJIf/7z/VAs13QfoE/KWSS8WCy3mhhHd0Kwie85Np4qj3fgE4igxsanp2+29A\nwL6xQy+Q3i6U11a0Pd9UffLS7IOp6Ukimh7ORBLayNWcf4u/0gfsWQ1XCzVc\nH1Pdj95H6I/Nf7AjryhEHM29KEs/HdvUHjs1SNqwbqk9Fi74t6JEhR8EnikX\nbgeiz79tWH3Q/lA/b+rPxIt2J0zadcl6hHKU0yvBKr0NnWEI4pNsVh2im/fb\np+QLQEQH9B5bc6XHGl5OoVjqg/JBNDgYtuTuOjrToGDldGk73R1jz9wNTcLS\nYmzULwYI+3KHZiovbcKpkxBXel7kicArx/2ceySFY/csd6Kz3tntiVi5PcO1\nV6wc8y+wWkg/APU3br9GOalJaWwR/t00Z2Hnhilh52a7AV8+I7/YJkGQbDPB\nXESYKPzTmVggs1TuphnIhsZByV0R/MBZ5bPVoqjTx5DsUFEwvP/xAa4qGTeV\nWPaE\r\n=YKU5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcnUngOmAIqlb6WBO6962E/T702NA0rmZN64K0eOi29gIgQ4O/lweu+V7H+r4QZsg+5m3BwEzwUk5LOlnRpOu+lVE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602590836-a4b68389.0_1602590951758_0.7601210088000001"},"_hasShrinkwrap":false},"2.20.3-next-1602590884-cde45fa2.0":{"name":"@xdn/core","version":"2.20.3-next-1602590884-cde45fa2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602590884-cde45fa2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lVaDnK0pcof8iW+eY8izdPl3g2AjfEUBH9xunUW+H0+TPGg2GLPHjKWKvr9whXPnddXVwJUseBft8aHb4V07EQ==","shasum":"ca28beef770f2984798a102ae6d6f0287e1633e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602590884-cde45fa2.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhZkhCRA9TVsSAnZWagAA/EUQAJvFJz4oJ6FtEQrZRn0S\n9JAvwc3kyJqLdPqtXBMB8I3zmdeXemM583cW3FHog4m2FjgdL5SwB4Avojra\nQwknYElKSfcTtpqnfbBO2obnydGUOvJBscza0e0Ey0bY1NkfvPXIkbjHX1ys\nX3XAyLp0FKyN91R+VpQ/uPUjeH9RGopWW1RGXJgJj8FKF9MhCXhmJxWV2hn7\nJ9hNWyFDGdUnZJMrd0l5996oPdtE+tAN+zBmq1CDp+rd9n05IeyzFFajIr8D\nmnm73YHsFAc4LXo4oO2Lza3RCPMwMARvQo6c84nCyP3J25bA5u0enIMmptDb\nMzMLpELAlBHov08nfUNXrsfdTn4VJ0BFzJuqTrCFyor1U0QEX8kOMH4Ai0Mh\n9k70MuqH9s3SN/sOEVG6wxhgKa08nvuOWFEn2kPXz/jfH0QCSKtwCjQKHzBO\nXMEv1Jcdk8yrisWFqT9YJMg53dPuW4AmymHBSo3h4JARhWRd5jjXs52lU3jL\n2tCNW+N6YAZdzfCNmBO6mpdip7fyE1stmtJX1R0XT/V1qL9Uzj4XweYMVJCx\nX/mZPNthPseQlMVrJBlbSIP2tKbclZfapTF7lTQDit0kUDtNRU0VNmzoYaKl\nvUmLQKyWOuTDl4R52qMQ/AFaQO60GLKBfmKgrWKnFa5Kt9ekX2VdUtMMbMyj\n+3fc\r\n=9LVN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICv+TZqAy8dVtnt2c8S6pyCDJsUgGQPSGjmeGooBEZ2OAiEA2zvPBV7RZfAWpUhfriHlXgKBiD1tmux73RF+oo+Lmzo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602590884-cde45fa2.0_1602591008733_0.41222153469259215"},"_hasShrinkwrap":false},"2.20.3-next-1602592175-f1b25646.0":{"name":"@xdn/core","version":"2.20.3-next-1602592175-f1b25646.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602592175-f1b25646.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tiXqsPct7CLAMNykxtSTJo+bsSJVa9oCsfvArok7oaKvBVADyc7Wo+Ot+7WFOR57/UqnE6vkMcqgIY81Al758w==","shasum":"93206fc912a0aa969b6dfdc8c0b5f03e07b347f5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602592175-f1b25646.0.tgz","fileCount":157,"unpackedSize":579095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhZ4cCRA9TVsSAnZWagAA3isP/3rSJf/bErTKOXGcUydo\n+XNeNLzt6xg+fnSzp92UyNZiSYXo+nxszEYCtDI8d28ckUBLJyjb+NiOChfH\nFMGp/mTkB8mCcRf+RUaetosQ7D8OHsex3B6R8vUNgArUqs/hd7A68DWA2tfI\nLStJDrLAExs64AW1K3TU1WS5nxNbEra3mIsG5j+dCKLdDmrdokk8wRg4yQI5\nonkzvJcVMSiM+/Jrz+ztyLn7GzLptgapk455ml8+wtzJMOQTrW4iJmMgwgDm\n/B4H3qyNoiMuWXJSbU/JYaxc/l+3IGevIuryqtfx50mu0mulfozKSCQX4Vsu\nF5SclYunq9uRcnXUx1vAM5eKhzTVY3yr75SQzNNSZxV2UwE9RMavLL3R3R/J\na8EBcWBr05WIBBjCEK7fe3Wh7QEU8mv0RB/bj8W4kH0Nugd17KysjjlVxMnM\n02dfeznRAZb9Q7dInf5lykSI653lZEeek89E8zVCmLz8Ua7z21HLg3E8Xy0e\n2lfWWD+sF0rOi+pvlon+x36qkooQchEWpENLM+FOf5MHdcZeRJzzHVJZOD+K\nz3g7Jl1NY18mukkB3nlI68T3y0x7x5o4skyw2CBTZ180/jXPiHHENL1RBWn5\n6utS0lBOy49LKOtWs9ABMgRSq9SNRcVmEin1nB0h4Z1pGXDA3H6sYGWGFxkP\nR66r\r\n=rl9R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYlTGBwXJz0tDlYgJ9pOXhi3f6RTRjlM50RvNVQ28ZagIhANI+Hpw3ZRc/0R+Uhm1BRz+iRCd8LhXWVJG9CYEfDe7d"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602592175-f1b25646.0_1602592283846_0.7128265606628144"},"_hasShrinkwrap":false},"2.20.3-next-1602592609-b2ea22fb.0":{"name":"@xdn/core","version":"2.20.3-next-1602592609-b2ea22fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602592609-b2ea22fb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-CfLdB2EkvxMQdRGAWUODtdo208+11UCQ4lb3i50GRCkEzlezDy9gJH94nFfFnZd7Fq4eTu4zzQIgOKKwCUWvTg==","shasum":"f839c7bdc64a02d270c2280b7fb1bf66da2753be","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602592609-b2ea22fb.0.tgz","fileCount":157,"unpackedSize":580748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhZ/UCRA9TVsSAnZWagAAsqUP/2n41UwCbLON3aWlyWyC\nXXAtjjF8ilO01JKW33YBytBEWc6ztfXSCpHOctOWGEvbn6xU+GA7C6rojZWb\n+yEupd3PTAhzp1ekt5jhOaVZsjiC1t0NRZQrBYfu3yJUDHGX3KC6m3lcg/pp\nWliwerg3LVmyXLjkruNFzriHTDn5mNchZyuebN9uwD9btOugRP10mC0HGrl7\n94TXZjpJsrgRFA4z3AaMTYEGNfVnesjS4IcUsqa8MvmAEFR8B/K+qZ7YLvUW\na/7LtPMhOmBPWfWg+H6zxuubHCNgklK2xQdQx0DPXBBQrmV82Uyr75nkjcen\na9gX8V9f6rxmyQ15wZUqVY3zai7DvJzj7WYPOtX/p1ZI36dlwgDhaAgctRXE\nHt60F/HeOX9eCInxVmE2EjcKhFpDAjXZ/LBGhB8IrFqSL9E+e5FgukC4tpAd\ndzs/x9bYqJEnejhRr9Bo9mTmFDDywoYwlFktD8QlaA+rKQpPRBQgv75TIY6D\n7tlvdp+Dh9f7j3k2kHPOT0Dk5EHUTnEfMl4i/lNy0ubrSytZQrSouJWmWwXa\n0kVSuzDlA7qOkREcUgZW6Qu7r7qMiVP+iKcZ/w94LW3pZwMhX5S3my89mlbj\niUKDVDzxyM4hkSNslAxOpikT0veuW/k6mBaBKUZ9/wdaVl2LjxATJgym9NgN\nmSFc\r\n=ELeL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGK22SEefQ6/0hAHSiuBGPxJw9Bela05TNkatxHNXub9AiEAhuy4BMlmZ8XW7NSfFsr2bwuysxrTnEXvWbADkBBCFJ8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602592609-b2ea22fb.0_1602592724078_0.6626076467251036"},"_hasShrinkwrap":false},"2.20.3-next-1602593715-b2ea22fb.0":{"name":"@xdn/core","version":"2.20.3-next-1602593715-b2ea22fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602593715-b2ea22fb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-gYn2M9DB/8BE/if/NEkkeWj+bADsSZt78xCZpZiHcBD41K3JpVkKxbIGpd90jg+iyAxFqbYJdnrsiYxXelCI3A==","shasum":"4b47f24c2dd36013bafd69bdfb4552bec413ac63","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602593715-b2ea22fb.0.tgz","fileCount":157,"unpackedSize":580748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhaQlCRA9TVsSAnZWagAARDAP/3G2tAD3awSulslZtRVS\nPR2VKx0qbVph7iyjY2aDZLzpgHOb59NiGIwjWleT9GpM1ILMljHv20nlXUHy\n1fXVhwjFQtIbpk7vvpft+znh0tCcvjoABLLG0rQ06sUbhJRWusujZX6Bjw7f\nvfRC6SEjQeElF1xL0AnzZQIBaGF8YcAu8Qq+TbN71X+S3vPqQLvLNKFQsBu/\nuYtMWFnF7+x1BYV0LWRUjt8plPruqFW0e8Iai7C8lpu56pcXsxJ82JwWM3Ju\np+G5MjLkdMsS8dJZ3B2i1vjvOyvq0/fIWEjDgzeJI30tfC2UPf1zG9cOAwKl\nzS1WoD+77eFgoKxenSIa78dVFxcOGPpBaT5JwXAKPKX7MFNs9hGpqg+RKadu\nfsakkvVN/ggrIod73WwYXOUM4lc8uUHrAj0Na1XjYR80LCO/RuK/K0eleVP3\nSOh9/PJsqTvSk5zbTq10HL7q6D09OartJ6Hcy0kfLWyxFij8FWWPG3LbeXtH\nGDZCNlLB8+Pjb+Q+fcYZcEQGt7wjSQqZSRzZn3SImdDZU+2+iLFY4SrjGSUu\n/irEBV6vuLPe/1h349x+CR+3Co7cl8FTN467YPPPRLSVyMpV4wOmbI80kCZf\nCj/vDnoLzZ1Nq6O5Pz8fa5JA5PLY7TozX4AXGYLM2CYMDaq71hfvIM9UN25U\nbK59\r\n=Algw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB5EW+bKDIK3K4u71Xk+T3E4/TBR3xQhYKwNaqKzhnZSAiBfN3V8EDB+6EVIANHD8GRoSL3kpAj9EKliBUySIX1icA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602593715-b2ea22fb.0_1602593828464_0.6428903169939357"},"_hasShrinkwrap":false},"2.20.3-next-1602594840-b2ea22fb.0":{"name":"@xdn/core","version":"2.20.3-next-1602594840-b2ea22fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602594840-b2ea22fb.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-qrAXyADbJpayoemumtjWO9RwpI8O7yfhTPdi90r5r43SrutCKMBxDsA9RT6TNYsTmGqI36gJuJZlVLm/gITo4w==","shasum":"34fe3d69810c5d5114623f0fa13e58424ebdc559","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602594840-b2ea22fb.0.tgz","fileCount":157,"unpackedSize":580748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhaiRCRA9TVsSAnZWagAAUvsP/0CIa5yL5HnISuWQRlZT\nwOIYrb6VuxmmYgKbdAb8OSlk+O+F0Drun58obTpIQX1mdy/UaVlzBZ/l7ltA\nXV8+1Rdj0/WCKjj273rmAuhPey4SF2RZYrGM3OUTKcq0TFSKQ1Jg6AFoqRj5\n+eCuaDL3ia4C886K94iHk1i+c/binLTGnYa2fMXe/2/Nb6fyPUwEbeP2uf5b\nnp9G+yneJ9CnDtW718ltnUw093iEBWUUVyR/MbCruR5dq5qOe+zhhFZ5oVb+\nfDFvtBIQarp/3XFdAMmdWekaLxzr/DtTU76bmFQkT8io7gBka6bOqsRCNKjU\nHnZho/YxTwXtso07coqd84ZK4yJ6OpBoMnx0xjnXZTeL97Sd2oIhU9SPtE35\nOYJlT7vbCCchyyIzdqKo6miIHpcZ8ypt3Aw5+s88W9GwWbczwdsgsM57FiHK\nfVsD1iHgvYCtqg+cwB5oo7LIfIaIlI7+YsJISANQm4/NcSqPFSRBfTEhuYka\nWgOhhCZQTDVO8AWvGCEedE7+seZ0O6KVoMTs5rYEOpKYlTzsxHfvfjVdmOXz\nZnB7mufvjGsuqnUYUT7OZRY4im7xAImJDWOdeUIl3CY6sOuUvxNLPm8cc2nD\nqJfa8Tntu1IU8V8jz0xmujKHXLnNTIp41EGIV2TS167Uda0FlEvT76G16fCW\nJZNK\r\n=0mDL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDICBZr/tstcv+1MOuFtoGgg49dt0bZlZuEhwYIbOSeDwIgG9MkxuP2hM4AhGYVpKcQuUNbSp4d7tqBFd8GzBOcalE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602594840-b2ea22fb.0_1602594960446_0.07590233827245951"},"_hasShrinkwrap":false},"2.20.3-next-1602596144-bb69cfc9.0":{"name":"@xdn/core","version":"2.20.3-next-1602596144-bb69cfc9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602596144-bb69cfc9.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-1uIDCuMZjajYGEQvPNXamYzBtZygJbvSKqwv3RuN4zOWCIzod/IsGqurNdVvs41oKU27qqGeoFyz4udvP8rVYw==","shasum":"d0099c0fe34b857e44bbc9e4356e9cdb7fb6a4fd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602596144-bb69cfc9.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfha2cCRA9TVsSAnZWagAAwQ8P/11tcmDjcgtUJopvrE8B\nO3O2YvCeWphaNsoGc776UCq7pHynlc1J5A5w9ci98CL3gTdWeyL5Yc0nKowj\nnVGH7/by/K+2d/H5IGx5njfs4iPfUFomtFuINvB43ZZ64R+afqSsv/h8eEis\nmrRa7fb+Y8/3ygOeEKUJHFWj4dm32EC5Weh3BjhDhykHCnnwJPDCILLddLpX\niysBx4K7qUJ4JoaR/u8h59Drr51BTvUvjsc6whEgFmrTAgQxOJIjGInKpdam\nAoG0jsT+dusd0xgt4Z7DgHbue/fO6o+bVWNmD0AkYT9kYahf3Ggm+jVGcxCk\nyxH3OxpNt5y24wjk1HoZDkrGv4+D1FJhmiTvIloUrpt2iFEbEt/X5IvW8eWX\nnMut2yUD4WQEdtUDNq/Hq8OU6kUsmNNQD4Us5Vv8MTgWd+bPgRzyJXLcUiHv\nDP0nOsr84oqcUnFBnez0gM1U+grXh2gHjUU05XFw/ppxOA8EDaLJ9sJx4omw\nu9ducdFg5lUHu+DLTmJ/ew80lnBBNGevO3DnmQrJBUNh2J0jOuNgi7V1gWNI\ntIpeQs0iqImxRVi9a/Rrtvv1AyciGp5qMYAMa9mEOHb59epynVbF6ulvvsKF\ntNCwdcCXHNIP9zUMzW0GqKgZLHgw0xTv+FJPx1Z5l2W6ETTiyZw11KymzcfG\nnHw8\r\n=znGO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2u2K4un4hekPgU55Y9pn7SyCDTmqj4QWDaBr4b3MGkgIgJYcyelPONwM+0eTnkFEPpe63g4SX3M3jHsHCGKGJqrA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602596144-bb69cfc9.0_1602596252331_0.12117201881029582"},"_hasShrinkwrap":false},"2.20.3-next-1602596161-bb69cfc9.0":{"name":"@xdn/core","version":"2.20.3-next-1602596161-bb69cfc9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602596161-bb69cfc9.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-dvWESZVi6lV1qRnIW3itCNMi2ncmsfXxA2sikssWilB/FivuQPSkJ/koWWVfajm6j2lCQcJaKJGQx06PZQUnkw==","shasum":"4979712eb8cec9906942955497acecdb2c54550f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602596161-bb69cfc9.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfha2mCRA9TVsSAnZWagAAcEkP/RndkqmCY0uffTrfmuGv\nGBBoVNwN2+l6/IPt+6cZStwyE9Pc56fa0S/37E68G9KZql4FwmP44HrfcWK/\nDJIoh8V+wVfVFabuR5rDG+vR+tXG1DGqkXGuObndtqR2c29c6x4Ll/3RDRSg\nPAFO4TGrCAGDRYsliIKIsQcMo6oJ2R3knwAu0HElhChDQvwuFhCzyQz69c1v\n4UM60mg5Aw1lJzFZvHHS556BLPDVj9AQnGQDtuMLcjvAX2fB2ZhLUIWpf5cW\n9DwTM55FsjV1OUFmApWwjEIuZeO9z2/iicZc3YsI32hhCPEgp+L+ZTl0wP5I\n3fAgiCunuh8aPey80g55Sfo1U8xL/8Tiv+LyNh891lnt8kXi2mPIGVxh3gy0\nJZ6BcDfAd9cmaLW+uOewDvkNiPpvHVaWVfwFEZclL2WpMCcszbqTbKTqhVv+\nXvlwvHOc9Ehekfmju25v38ZgeLAbWSpkpLQQZO1n6f5uEJyIJ+bmQ7iNCQsp\nVRbEeY6XFcYFT2KWyJCj9+AmPBYZTI6c4gBwedhmB9+N6zvdNb2rHq9HXHZu\ngrIWC+kP7pvZnwCRzDu7rtMEzQZUSRucmJAICgTj4koP8R0sZo557Iv8ZdjC\ne3d0oXkWjgtb0vJpgV2LDmhDDoQocDHKAcF/VonZSA7mEyjPmiHMP/VL590X\nRDWM\r\n=VNW5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICqqx1CvU4EAHfLeNW/DIIorXL1fSB+ZJJQE2YX1+a7fAiEAmNcv4lfVAajZTt0+QVnjRm0KetuObsN/9nPmUUFWhJc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602596161-bb69cfc9.0_1602596261649_0.6055340021672078"},"_hasShrinkwrap":false},"2.20.3-next-1602596826-30bdc55e.0":{"name":"@xdn/core","version":"2.20.3-next-1602596826-30bdc55e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602596826-30bdc55e.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-cpBMgMJ/FxW58ZBWnhI9E7Wk6MZIfAppov/gGtFTbVAaBNpbatFkIhC4yX45aaOjqoCz8wI8skeJ2V7fTq3QSw==","shasum":"cc530dffcf1f09c3b76f179075e1a930e7824840","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602596826-30bdc55e.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhbBQCRA9TVsSAnZWagAA37AP/j7KlhLTLTZ+Lr1IotjV\nHCnvjuu4ULmr8trfvvAZ5UEl5q2AMYrbI0josn3kkR5Fi8+7LBOHOaV7b7Y2\nhJW3ueMNQ4wmkq6rxyC+tpx1iGG/AW1qbGG2X0Nz473DZpZZxdp/kVm5H5nv\nTVOxr6qYkoXq9j7uj/1kqQFcaGtjuZYrsQrdf+XXxZQbT91QsE8sJTxjBgsD\nb+esvXW3GweOcMm2RdV0Wb8YvI14bNBV9EClC7OKkBBqhLawJTeapXGirp4Y\n5fKBO0SYAxKcokcQgH5dqXNFH+ROW76Rbj8FxDi3d59xbPVgkshfl5YDaZKI\nB4mEc2loGjDyWC/JgnRbLjTeP/X9KuNQpsKeYkD43WmU8H/JWhyxlYt24JTR\nU4y+zLV6O321va5mbzE3OY0Hj3ty9rXf2NTdP4jp1jVT0WIBnR27rdkoz5AV\n5W7gcp+YUmdAtzPxQyPFniw9+OXfZkuAlLl/ORpb8R7Gyzo4X8rguReDl26Y\njgxq04dVCVFzhN4hourWkkR0CGZQ46oRoEHMAvHdjC6vLTRw58jYfvR531XT\nT0Xh0VPs45/HTuDaiemaDe/NCoVC6sZrWEkL/Msrf2Pvigy3uhxOcpHAM83f\nxsSoAKkBtu1ccsrWBRm9zZ/egnCotMY2DVpr5ldBP0i/FPpWIXWZFRsU9vcU\nLvvx\r\n=RLW0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjvcL/1+70wbHPFMPtW2Ojx8epwWn5GyhcUF98Jk9ULAIhAItx3QBpUw9IruqcW71s1jDD+/zpNZml+cZQylsv8Wox"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602596826-30bdc55e.0_1602596943733_0.6118452498593856"},"_hasShrinkwrap":false},"2.20.3-next-1602596970-c094c5a9.0":{"name":"@xdn/core","version":"2.20.3-next-1602596970-c094c5a9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602596970-c094c5a9.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HPUT9QCLUH1rhYHpRUJlGRKf1fF3DMMcFKNWQpk+pT0hStdnXTHJv3sU1OHvm9LOCfTxGQWTr328QVCLZhcvxQ==","shasum":"3745bf43c171066e6c6b4d10e193b588f6853047","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602596970-c094c5a9.0.tgz","fileCount":157,"unpackedSize":579188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhbDYCRA9TVsSAnZWagAAzGUP/2/GbjSM2WISOLITQTJk\n7rT8xS+4vsoki2eZfX5G1La9Y8tpsvf1jyPHdL4MBIbYlyrvB0vTugDtumwX\neImwPiu8ZIQ5dbIayieOckirpfUntc+6uIv1STqIASAwYfT4syAL8mt8lVhi\nfOxYQttkwRpIl4YhKB7b/jTTyfmnhFFmMFSooWhXbjpWkbhctg+krrrY4Ov0\n5oUhXp2EScbMh41SV4R+I1TatSfyioqlWTAU63ruP5YU9VoB1qyF2xIEJBtR\n7s05RBUS43usWSkwfSR39EwbYt1KhDm090C7xokhxsFG8nHq86m+F409PNDf\nld4TXyJuUn48m3abZS3KnnSGt1sFyFD6zzEcX3PI9CEAml1W0KvQk/tDr0sb\nOO2RZBzePp34aCadJqVo/2HGQSD1jd4Vg5jbdSxAbgmueJBkoNJoiumlyW2t\ni/4BMcdQJ37uYaoGgLDUIvryM6JQ8ek/izO3kS9Hk3kaofXTm9vgOQGHuVQ9\nUV9+ImDZAqtPDbUJoAePBg89MYztYmeNcx8jFzoZ+Do9F2d3SY3cLcVoA+4c\nCPgDS8VSqd0sOz1xgyPbz4IQqMcsvHJ5tx+s1uc7vqlEsroWggi3pW9hLHpT\n9bTh8S3nRTwaPn9CDH4+YlxMC7zMA32yT/McHrXPHVDlhivUvwW2FVURJJ1T\nrlEK\r\n=ILtq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9g92iq+26bzl4H/iLwbs9XwiFTeF5VFIdexoI+kYaygIhANSgFBevENmPKTkp7YlO3C+WwtmHda8Xp8ZZD3ODI9qE"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602596970-c094c5a9.0_1602597079395_0.10216057668635847"},"_hasShrinkwrap":false},"2.20.3-next-1602597330-85a418ee.0":{"name":"@xdn/core","version":"2.20.3-next-1602597330-85a418ee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3-next-1602597330-85a418ee.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-d9Yuo4vynD4R5+9xJPqhgHhxuvU611pMPMqAtsmZtS3oHoMRBmdp3HRlSIKZNLaex/6d/jp1xFjsK1j6sVlSpA==","shasum":"fc0a89a00cfeab547e58c6350636c356d2937175","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3-next-1602597330-85a418ee.0.tgz","fileCount":157,"unpackedSize":580748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhbJCCRA9TVsSAnZWagAA/CAQAIMUle1bL22AJ/+CvdNL\nvd6ovI7q3PdVg8/4U2wEacKbeCqTXeH+y5wVD70zbSbN39LaWf9xBIDanDYv\n888LdSa277RF0LQCRGcR7+CedycSeZ5BIZU66EwiSUnT8MHKPOZdGiumxBsV\nePOZLxnlhqnZWOu9S9G5kO9emG+RC4VjGJs7FW0kPSgfmMJjuG+TpVeammwH\nOUULb5M5xPXURlsFfejQGxT/mQ3TmOsHnBM0a3+X3B0Y/1ki066EcuY5azzP\nkv1rUukzQ7kQWXHBtLBB/rMxNuig4LXjrihuODgY2ifyVyIXI8txDRZMl5Rw\nMFYXDfaSCifyM4bwEWE9e53Ezqlnrl8qB0ykrxUH9ug38fO4i0ZBqVAHqtaw\nJZIbO5pqWG54j4Sy9LGjKiS6NC5kbPrUdiu20QqR3ly3OqFV0aRPDX73n1Qv\nMsFk7uUbxiTavg+KUft2gWJJuU00O0HR8c+f+15daue5UzjtEkA66/uO2/70\nVIXFobZ4Quy562QB0HlCbqDehkj2bfIrZ+7xyuzBzo0deDbkWM3oMiNGXZBh\nirKV/pQjdLMuiJLWWsjX5/4FDBln3YJg9dDvvA0825QePnLCXMafzzrsAevk\nR6Lb1bACa3XkyTuURuV3PETZ/BfgcoT15kuzBNlf9ap9LLUy4eIMLCo6H7wN\nNr1K\r\n=jvRg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+CEmFGlSg3//4uZlFbeVzQobXI/hciKC6fBolXlifKAiAUNRfwcWfhUjiyY93vyeAZxk9cp2uDar7zoHlcXtm4Vg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3-next-1602597330-85a418ee.0_1602597442120_0.2890565281163935"},"_hasShrinkwrap":false},"2.20.4-next-1602597361-dd9af860.0":{"name":"@xdn/core","version":"2.20.4-next-1602597361-dd9af860.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602597361-dd9af860.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-7smkRgfVPfoG33IHLOBXIH7MaxoM9fNv7vg2Mtip9oy4YAYhUafGDlqx050QpCll9CF6lvgyqx/HzMVRSaNcrg==","shasum":"59276e8ebc127bff9347825b533a784fd7da59eb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602597361-dd9af860.0.tgz","fileCount":157,"unpackedSize":580748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhbJgCRA9TVsSAnZWagAAyHUP/RT0Jz3vy8em+v/QeGB3\nRIZSYB9cXYp/0uz44ag1ZHb6fjNXzOyDp7oXfOQDiEHNTjvLUT0soeew4HZz\nH9W5qHEVv8C+oRPGgWSaQapMXGV4sL5+2uOLA8nVVmDMqIRyj5OQFiyarJUe\n8FuJvtolBLVW/3bGMqCglMsQ6yQDNVDb7aHdPjST5BFDm0wPMlJW06gl3Ti+\ngb6yokOD6w5Hnyolv7jzTpHxgsIAW6V+9SgXilSEoOEaWAWHRoTbtve15XMJ\nNuQgfptjXiKv4zdyUnjc025R5V0zg1Jw/ef72mDUrbClNVPcD0WWTQAkYVZ5\nJKFrD77dL2FMVi1w/Zp4eK+5RM6VKl81qi/ZswnqIaPjrYtFL6pQxxw6VySY\nh5Fgm5KNg6knQdlXK2MI2oFgAwBcIXztrupaQ8TvdtQ4M8MyME9WLwEgIj8Q\nF0r2tPi0IrcWJSKVLmxuq0HuY3Em1xD6ahz7VemWNQnDfZisrjOgz4KXi0QK\nXnP+SiCvkPuibBrablv6Lv6P/7TvNhoB6Vm68k448ve1VJ20tgBijmf/Avgs\nGMtRoCyjVcZUKBqVDNAtlYnbzC4RL9YTh3JZjkZdWb47TeM7KqZyM1b40Tro\nXusKEF3XrG06KFUKJTAN0E8lakfAiAYKi/s7qyGmOFabsQYQ12Zi6D5eo5Tx\nfmal\r\n=FPdy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGQNL899RpmJbc6K54rztd7jHT9woZYzSg8j1PZ56+vCAiBRtoLk99nC0w4LHYCyN8PQlFClrJvgehFaUc19sD9CMA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602597361-dd9af860.0_1602597471742_0.8174707736410982"},"_hasShrinkwrap":false},"2.20.3":{"name":"@xdn/core","version":"2.20.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.3","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-70kNG3AJLMzA001h0zKj8aWCAq+0Jxz9j9lAaxIZS5JpxmMwRYK8eZtJRausuhEuWWxXJS+itKy+six2fP3NxA==","shasum":"aae549cf03c458a36187a9a64098657f39a91897","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.3.tgz","fileCount":157,"unpackedSize":580694,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhbj5CRA9TVsSAnZWagAAZwAQAIHxnK5sRZ5/NG5v8fst\nQ2hfa3yAJWi6PXZHhUff4BabI6B/QwVnxVSnyppv+6VifmGmBzbeye38XJ0S\nFvoyjYZPhYp5d4lfIgXGADs9azEgkK02mO2FaIcp2Xhb6eYmZzUTmKN6pOCU\nVlE4M4d2uhJ6lfzSmoGoktJzIb1rNoqVXxnihqwr7ihQB3RI38pNaNt8lqRG\nhZBfJCRG3IhFQHc6QOeYo/B7QX5/VHUibxia1cOHzAEF3YE/X5xevC4h8flw\nSMpGP6tCh41E5gRuETdH9aM5bySQnboorhLMbHd0bCIJcKuzYuOf5urBTGJy\nOtK1InkUi2als46ieHwQLrsU5RNSr9Fk1Lm6kaZ5h9DZGoI9XnQ9UoZWLkD0\nvcBqMc4FsGD1K2Jp/xjv7IwQDILHuF5Za9czGNX6evgYQQQPynsL9y4+GeVg\nynKbZLiRp1OWfWrgsJmY/8J+0GMsdy1YlygLd8Db311BNqovmHa8oW4Qd/0X\nwInDGgh5rJt9oIAr6jKKYC2DdQHuhYVMSWY1rc6Gq5x0V0MWQQrFCww6I4mr\nhctAjx5bwRj5s6mxaVq4MGtOpzgqmu/GbLQY2cEr87Pi7IPSNfrpF6CJfe+L\n6e9cBWHssZH7os/p/onPluni6LL0DhRGrCVMO/EJ9dBgVtkWREXvIxZT+Hpu\nVNOb\r\n=TpNK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDybhtWE7vnIHGmQWBpTrXHik8ojzVOcWcGqjau6qL8TwIgLK4Lvxm0dLXrKMnQ+/HUP5YAbmagPTkHsjhUsA4QHdE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.3_1602599160726_0.03810098266952466"},"_hasShrinkwrap":false},"2.20.4-next-1602599284-6ff2aaaf.0":{"name":"@xdn/core","version":"2.20.4-next-1602599284-6ff2aaaf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602599284-6ff2aaaf.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9D7zvKslK6H3kHUgN4iWBsE+9VGFgg3Cxqrjtz5aYZro3Jk3EuxoqSGy+WqooRuXgu5JvD5zyWnGscMsR8iH6Q==","shasum":"0356b9ff5d28181090c6ee7465ad1bdb4ed94030","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602599284-6ff2aaaf.0.tgz","fileCount":161,"unpackedSize":588769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhbntCRA9TVsSAnZWagAAHrcP/1y6eRp1VJ9Etmw2O0DW\nvHA9EBfIlFfA5RQoewPl3An+YqcU4bmmZefGvhnjU2yxo7rxqoe6I8fx4ls3\nqST4dUINd+AsJzi1UR2sEJrScFsavB2G5eIj0w0l6A8pSQNw3EbXiIHlAyrm\nYu5Z6V58jy+1dTbL4Deb0hKFKdxJnLza3gQ6fh3KVjEuDi0ekdpZa5o7bMJS\nKlt1hdX5RJIh/k6FjZfhiEzbNqSTFh+ZXydt29F6CnAwnVuBHwzTf7gmK3OM\nf0F1RtuTOnVAdbIpl1JVdzGu9RBLq6lc5o5A10eUwrBVq3qlqKdZWtIhAqMl\nmvAXwY5qow1twDElMTzkUxhtVzc8KaBEC/O8EEopBXT5tYQobRwej617xaSw\num13wjl0JanONqaNV0G9qrtJdnV8usSkvw9lXrL1EjMB2jVtWFm/6DePxSwQ\n3fir3vBTMhE2+nceqNaCxlLHleA1ibfHlV2JlhcxOmHMSTOtCOGojiuBNk1B\n79TOHQhsOCs4e5Na1Oh7AVzLhpG0w6z10ZtUWe0Qz5BiknRruyoWptUAhrll\noHb5y+ahODmrqt7us5TP9iN6pUGOgmHY8e0ecBa8x1oAp5NDIm3RoHHsudF7\nJ9Bgqn7hzoOmpOCChlkxjl99pFHs4Qhf8TgM1Utyg53Sac8DU6dGJoxVM7uP\nCM+H\r\n=L0Ik\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUJJcdm3msZUBL7t6UDX8Ce+bBd31qqSSeueGoZ8cu1QIgGMFcxtEZND61NhHmGUz1SJ4LkmE4y49sDtfnoAGJFMs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602599284-6ff2aaaf.0_1602599404463_0.2818793764154921"},"_hasShrinkwrap":false},"2.20.4-next-1602599315-51d3275a.0":{"name":"@xdn/core","version":"2.20.4-next-1602599315-51d3275a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602599315-51d3275a.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-nJeVjlNqIm2ww2ErhablHVf14mobQ7FE75WFJ5APtzaw5CrtjHtucW8OJMkaLbuVVWKv7XPRfm+eVeQc4Wy6rg==","shasum":"fa6ec66f807ac98249bb7cb5fad030b74ef9335d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602599315-51d3275a.0.tgz","fileCount":157,"unpackedSize":580841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhboNCRA9TVsSAnZWagAAOPcP/0u0GiVhr/IK+9+8Xj2Z\nTdLFkz622ORJf4aoMmWyxKe+WkQpy6NRJ+0iK2G8K5kBGl+4xXkXr+5ZFe84\nU2OnpB1Yxrai1RZGi9rRFn+O8NwcLKXBYRWYb9Kkt3IA+IxgSReEfJ23OkJz\nkWjUArWsvolhKNy0DZifzm+DaOWLOu5Gz04I7IVT5Fuafzw006gamwMgtmmb\nXunl1BPr+72q8BziwlIGNtzJxZynxU1W4DqEFQlRLISDaT9HUg4vKnz4osjv\ngMf6d1owXmVTvFILPK78rsNrjEE+VhH9KcEg3D4Y4/zxKT8LwSFnjbmv+Kcf\nmmhMH/O5yazYUnbUuJYQyhuESkYye87bNtaMzNbrtGQA2EInoHvsP94UVNCV\nKXFb1d7Hg/kK/ag0Ii0+BOQtsgqRdjKZw/zYd+8W77i7IgNF3iEs2iNKN6wM\n53pie509jIZNOcnQMbrqKrHVF2sdC7l9OVVasSIp014X2ZlKnlY/J/0cnImE\nf8iSHVKtgj07wV1yVg7d3jrjSjqEv88ml7rzTtu1EaO46cvso7VtXsJsRPuM\nbJ7C0cKazUSJNrWmJSC1OIJ+Hfzy4OQb/FtcO3hmjhMvuu23yn66VdU2lXZA\nk5mKkYDBnBMbUA/SqChBkOY7/25A20A1FlLkelLQx/7IY3eBmYkm5JfKTpHr\nDPMK\r\n=HnYf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzqGwcqgEFeMkHUfK5GmX1w8shn2oKL3CDRwLSeR/+uwIgNFyKvyObPCwVBIqG+QIcltyhcqwL8oex55haRGSLb2I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602599315-51d3275a.0_1602599436424_0.17404869034613046"},"_hasShrinkwrap":false},"2.20.4-next-1602605240-32ab6921.0":{"name":"@xdn/core","version":"2.20.4-next-1602605240-32ab6921.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602605240-32ab6921.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rhU4AyShcFj2SUnst9I9iOLNI8gsRe29HtU1TfidoefMAnm6/E1csLYWW7KV3rRo08JvqldOoSjDS05+RHNyhw==","shasum":"2bf3a02be863eab851d81b3b09bb132342225334","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602605240-32ab6921.0.tgz","fileCount":157,"unpackedSize":580841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhdEuCRA9TVsSAnZWagAAVz4P/Rn4vIkvzr6dICogzWF1\n1eAyeLUSuiy1PhaQBfmHuvcrWQyz6fOkKOkQwiVKQrFvAOXeg2f9zdj50/Dq\nndh/jLNwoMbvQur+TfbgpylgWWpCpqeKqoYJilVKkUg9+W2XpvWYzw83NL3W\nl02kVtA2EMEGB5KteUWOTDwGWR+LAdfP3QhUGBoH03PaOSsR4KCqQ+MOM37q\n143xg4uTZewfiwYmMWF+rk15jU+G9SsGC9uT3S+6idQYXExBCi5cCWucIJhw\nrXuIFqJKiCfDMwewPz9f4ZvbQu8NPbj0+IKYCYW8YoxzAwSytgj7daTO3PJH\nRUkumkZXduXVa6gU/LdLO/WX1+hUJ+i/+tkgjpc+XJXc3rs+MofSILUCVbxF\nR2Q7eS53xcG2U/OocD0ZMshno7fKRJ/EULe4LVZDcLQH4qHROEQhNDeIFcTl\nD2nuhZPFJF98FFsUZ0v5pVjI3AhiBceZqSe1MrOpwea+U0ASlJLAVP+n6x9J\nMbgGBASrswmLoGFq/oqVbvheFJiqkKY82h5j32+f5pZkIiGiWH3qd8au1MYc\nnrKuznpBqp/ykM4ppLy0SYU9KHYpW4oK+AD21ECVcuVz93NOa1GR9ypT0/XN\n6tuh8jWffdRwss0FFLkTE3AQaKMaUPZSI0FHAXm0J91AIUYyGgymcODzgMMZ\naTWy\r\n=FuFi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/dKKEBaC6A8J+gKakCpltTqesAYWjPCNzq/OB0m8dXAIgGYn7DaOYgMP1j78Dl7olrduBdZeKJp/uMhtJWLB0m08="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602605240-32ab6921.0_1602605358366_0.6625274993694517"},"_hasShrinkwrap":false},"2.20.4-next-1602609929-6ff2aaaf.0":{"name":"@xdn/core","version":"2.20.4-next-1602609929-6ff2aaaf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602609929-6ff2aaaf.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-u7KgdpCklbUs9XxguXITLXPRc7XWeXFQUHEVSoNf7GuG2EsVSkH9IYcwlXW334uDT0iopTFjgl6hNqfZjb1P+Q==","shasum":"c63228dae16df49b1877e81358e14b2b9e2c9f18","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602609929-6ff2aaaf.0.tgz","fileCount":161,"unpackedSize":588769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfheN/CRA9TVsSAnZWagAAAZoQAIHMGIwbCKUEQuTygchf\nBfmNLfpq65knmE/54FvWtgSTVx1UL1JkialCo9SaKlRHuzLyS5OseM46BwZm\ndfit6MMrks0tyZwpg4m8PVSoyBHFi0x3VNuoBOAC69j8I4XSc3SowjVsy7Ji\n/g/v4qHiHAkvP+49jYx/gVkForOF0xcTbRoiEfDdmfjVWq55lZdMf5EXc4M/\nRiZMaX7QkPrzi2SO6B6ZWRuRcXwV4r8hMNpL3d6EJ4qJ4Fi3EVxzr5V+KzJU\nXKf+Dvbci3sfm1fBNoe4xtpVX3AaRmL6/zdMnlkuRMiJGqCSr3lsWeTvp9S4\n5UpYsgiUr87/Vy6GKc6E9/fBrbX2fQMSQxsiGmo4n2+6K1JzOdeBTMylt5g4\nEgA5bclbybr9OBmhV3P7gl+qZAq/t2ebL7SHi3qUPNApctpQm3ioQbTcmzAH\nfkREAl+U+vneDW7kPmP2zknF/hqX0qb7W4+nj25KcPFTBROtyVFf7S0YYi6z\nJvC6jjyVRO9LzYZ6RzV9lakip4YLFteLtgr5NBX7w/HGxqOq7LvmBygHmWbB\nEs7Qv9ichIQg4YtnWtAofB4D5Mm+O9qC1RKAjCvWSjWy/P1DOW+gbkYDS+1C\nRpcj0uHbE1fOsmuZlB7E1BrncJH2jdRm3qBXwycyeZxrEN5unsP3hLc9yxh8\nUqdH\r\n=78Ft\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOG3cr7mKZkGYivjzuSIQi0zAuZDTJLDIKEhC9aXLE7AIgGBCvarIqZVynaukPUsyocpCAKwzJZibpe27shJ8GArU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602609929-6ff2aaaf.0_1602610046721_0.7429857189981541"},"_hasShrinkwrap":false},"2.20.4-next-1602610832-6ff2aaaf.0":{"name":"@xdn/core","version":"2.20.4-next-1602610832-6ff2aaaf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602610832-6ff2aaaf.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-IciILkmhk0hFUEdLSZFdI+9KxrD2waCIRgvn81wYR4NXEpSG0IXnthkwjuPvLqc64KxYUb/wcopTPekbzgTlDw==","shasum":"47a21a7b91070fcc84dffa9c96aec4716bc78034","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602610832-6ff2aaaf.0.tgz","fileCount":161,"unpackedSize":588769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhecBCRA9TVsSAnZWagAA17cQAICMEORtOIFcZM/aQf7q\nto7AB2FFJ4s4F5TOEHWjVWvjknyR6ghXO2LD8t0F8Mnuc/A2vtNb1rSvQAL7\njz055zR8DJUEHIS8q106kM+s+wOYYh3BFjrzzDDM8xWkuxsn+zcrzwJ+0dLn\nKsOSjjXC29auuLjMu1HL8FOJ68tGrw+nsoZB1uMoBHrDuLxHqX2tIx5rIQWw\nAK7BJ094+n/w8c3THxWFWia5ZDvLkPkhaQ4SHQjs9EmzPfIRr7OsxzOx7wE8\n3nuGRC0RQ16c16O0g2VNq/It00k6tGU7o/qc12QD1BuXfQ/ixqZfPGo6vDXe\niFcdI0PpvEZCBY4hSvN/xXYYd/x/8AKB5+7snS1FxBBEj8y4cuJ+BfuPlaxp\n9FfqNNRrKbsiRnyxNX9koCAx1B2lN9zoIf4o+gSV0ZIkILormKCZFfvrEp2C\nviyGAjDUJ1spc9fjbpAxAm2D56ORN3u3O64+S8Z6sKvKRzuT08Yej9S9uglX\nL5lGq1QOXj2b4cLy/2x0eQUug29wjecWAWAY83kqA0bS2CyQpTyJIcK80AWC\n6NUYozgfNs9OaLo0XbBM1p8lGUUDvdEzlhNHJO7JM6bGN5DamEZXmMyLbbkX\nFZtT0KZUwo9gTNbOKTySwGeCTnGiFOEtM9EfUYY38TGSOm8MgKm8yMYX9yk4\n/sNc\r\n=8I5a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID67kCEg8xW+5t95OsUQFpZylHERsB72j8oNgb6qj3rjAiAIOsIrI+nfrYxhF+QSFTjvqpemFHQXnIeOGjGUSSPFmA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602610832-6ff2aaaf.0_1602610945421_0.6037923982254234"},"_hasShrinkwrap":false},"2.20.4-next-1602622680-a43c3d0d.0":{"name":"@xdn/core","version":"2.20.4-next-1602622680-a43c3d0d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602622680-a43c3d0d.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-vauX2mSFQF3mBaBuew7yWODl2AjdI00WrIsC+Cm58+cDU0b6+lisp/1lg4CmO85N8n9Atzfp31IcGrfjHMuraw==","shasum":"c812a4706bb3110d98f14f7dbcd7b82a6b04b8aa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602622680-a43c3d0d.0.tgz","fileCount":157,"unpackedSize":580841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhhVDCRA9TVsSAnZWagAAELQP/0/RELZCJzdxUCUoG5fb\nQL1vE7ku9PX9SXYU5xHaDDBmucskBN7ZVf3qbrIPnbsCOiELzZnvzcQbyHCp\noTYMHhoEdCbLmu94TTXq1+sl7vaJxWekXKzZMItk+nYhGarEuGMU00fjHDcM\nkZ0ooIoCrXgTam5pHxw8VKUR5Jh8RZC9In5+6aEpmG85eNiuArow5AeNfGqc\nh2jOd+7Y/XckQXgyK/aXUaNpjKH+RIGN3CpqVZuAolNv39L6nFi+1Hndd6Iw\n2SREiGZeUldon/OAhwRzTAw+73StOsR+xNEl4SWU/IvDgn3cLFMc7oNgVzYz\nP/DctoP4sOr0qznZHc0fLf6DWKJjXrNaN0EOpw/X6SGiQuZLpGqUfBT38RY2\nHkZA+BaFr22b5dcPl6chsIAkRtKrgvKUhzSv3SwDTphEjksIxaR6BwcPvDxo\npxu/CVl0j3FYZKvfbeVpaqk8X2pGK/l0Dt8goD7AWk/8CnCnTLnaGMAeI5I8\n8C0RWWFpSH211j6bng8IsQ35exhcvQQlM2ROpDYKFhFqAvgzGgIDkp/BdRl4\nO4rBnoeXSpMb3v7O6BP3UdV4QqN1ry++BZdmLC1kHuDyjixg23iPnneOMHcC\noLrR4lAjZDIQ6tx4GeBw2RiTHIM0rvcSQqs8JdSQVhFms/kzqq40O7Li4AmB\niMbM\r\n=UqsO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBTDRTUABDJQqEgPfUOBRY1+POerS6kRFAE/IyS8uxpgIhAMuLXxUeERvUmm8BO0wvZUHbNLRGKfqdGpyWQ1Dury9b"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602622680-a43c3d0d.0_1602622787132_0.15866217895404566"},"_hasShrinkwrap":false},"2.20.4-next-1602661539-e72e3635.0":{"name":"@xdn/core","version":"2.20.4-next-1602661539-e72e3635.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602661539-e72e3635.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+1iwTE2MZXYuzg4kwxfCqIgEcyh2+9hz5aUmDSAkYlK2io1IwCDX6D/Op/zRtizGmPnMK0+dAjercBKxvKTQfA==","shasum":"1596fbfdf4d655e609de2f9d81695e97aededebd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602661539-e72e3635.0.tgz","fileCount":157,"unpackedSize":580748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhq00CRA9TVsSAnZWagAA8rQQAJ7/izHWlrUcfP7CDB1k\ntwQTqTI8UHlGpdsqPo3WTP1p1VBenDq7ms/C1k4bSmWXoKhWM6NIVn/STHqT\nXeH993pyk04v5cfeuKyOiKSLgy6orWvj88kbmJfOIWnKwDD7Y8q55praigBm\n+Eg6PlLp92t6swOXbMxlYdWawO5VOsoKHo8ufrLpjgnYH7vziN6MOJzEZj4f\nmjLo+4mjfU9t/Up/TgLXf29fxTNN0xoorilPUM3qOH2cpt/nF4gaCcQ77Dv+\n7RCZFU+FFaH+LlUz7yWodois06ZVTSZagT1k5RPERXyFq456SgXoqaMpigB5\nmt41YT21bW6hJUOPg1MBZXlByBrrLnfr6SbNhDpm196m3rKa4uk4ftGf1GAw\nwobrdvMuYPVmrC1LdhZWqiBlu6sCQYEBKzqnoGWq32SXSeuFttmcjdlEzR5D\n9TCjGl4UXpUeBndjbXyq3IoyEeAYZzjS0BgwTOqNtLfQohuOiPugCUVLKG10\nvY2uo+r+O0aE5Yu17qePWWqiqq710uh9zCut0nhyt0dJarALNqrPbzs6uA2s\nuBfoPp4JhBqxKPRVPOPllHdj2MbqnZZjNNmjSV000vGHKcWTbs/nRKmfMO6I\nkbZ0lc0OrtkeBgiv2cooCux/0PvZViL2/HEuhNbCVxL/Gy2gI+TYYAwAK2q5\nJqjz\r\n=0MNc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBNHdY5MXfdTZGKeBMril2O0KXtwGZnJqAvomoM/twCwIhAMU40PrjMIxZKHrLqqSth5+cVPhpNg9dZL8zVy72F6pW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602661539-e72e3635.0_1602661684370_0.5031220959844198"},"_hasShrinkwrap":false},"2.20.4-next-1602661871-9587d627.0":{"name":"@xdn/core","version":"2.20.4-next-1602661871-9587d627.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602661871-9587d627.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/hGsLZWvDhSdsvHGfOtLoZEN73hmCLags1JjlFFOf6LEUZZ6FqUk322PXbAN6EZxzCNGvVawP2Dom4rxRYPBBg==","shasum":"2d8cd27ffb3618bc1aa7384e8aebc695084195cd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602661871-9587d627.0.tgz","fileCount":157,"unpackedSize":580748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhq5vCRA9TVsSAnZWagAAtuwP/j8+9eFTtqzgf3P4MTpj\nUF5z4BSqisKcacqlhPCWR3JAsIjTSBUYHfmXZg/KsuVf4uReCySzgy2+/aCZ\nFLIgNnF4a9XGL4vfwjYkRe8FZDs576LyfD3GTtpuXItWnpIPtP8w+OqwWVUe\nO5nt/jznfLJ047TPHtphSOpu+fo7ea9x5rR+KjM5Nc0RBtjiH07w3xWHgPaG\n85kHWpwIQmiJiwoH7tDnYrG8AjNoYLVnRyjKM74iKgO1yiEDBP509KqzTsxC\n0VVTcCH6C+zfkY4ENVicBGkNmD2aXt0z8sHFDn8KYezJJjY6PvuFJbqr7nPN\nMJMsM8Y/BQaKMV2OKDvdYqrCNejb0Iozih6ibnmq+yMUqBot9L/XWMOKw0PX\nhkxGTTT5BUygyOgxlC2osg8sx41OiCooVnuhexSoVtOpGPIdnGzU+dfLJ4HT\nTMr6lc0m0undwrmqGrSs/1+ev7ftpz2HSYk2pmOBgH+0sPbpKRnpQZXpFY6e\norGIv7ofGyPG0zah+Dsa3Pi58m5GTisAqDo36f5hb1UsQLe+SVJb1JLMZxil\nhizKBPKZ2uPk5AjBswdjsr1IJ3tDI8IPeW7B+g/HH446ZMbgwXVptqYlP0I6\ncLNiSsb4rc2GJiD5Ayls27F2BpfGK3VrFOKSXSz0rdSZpDFUBVQCjNZz6Jgk\nt05A\r\n=d/SQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0RGGmJRB5Rvu/FIsaVcTJ5Q0qhYSkChcZxbD6gR/a9gIhANDtYTZQ+3u27LhVDn8q73fPAsxAhZxzW2pJb2CMlOcJ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602661871-9587d627.0_1602661999078_0.34706212825544713"},"_hasShrinkwrap":false},"2.20.4-next-1602665620-e14be171.0":{"name":"@xdn/core","version":"2.20.4-next-1602665620-e14be171.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602665620-e14be171.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NQDGUzeDnQ+piI/ldC/KhnHB1ttuWqidQn7adQIKPOIIO8SC8v9zyecAftLOvC/KNpE7FxImmrLR8FeaLUYpzw==","shasum":"51d7f7d051c58a206c6d0bebfa494ee5ba18b534","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602665620-e14be171.0.tgz","fileCount":157,"unpackedSize":580841,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhr0UCRA9TVsSAnZWagAAEDcP+QFMyh7pkwCFobAHx0A8\nqiLf9CMLpuHc4ELJXDs/QEixfauLhssyK7QIbDiLfhXzhTt4ZAkINCihIsLG\nLov/4yJhdldrR5QQ8Bzy4H5VKlEr8D702MEyr0kE5Ty7OtapbqsJOc1o77hn\nf0FYl+VGflC8TBc3tA8KDWEXIdMMeu1a5g189fKh9a/yEQkqjP+VX0+Wr2P/\nFKn1xkWaSxpQ4D8pyKYNaqoDNa1agKUiMlU5HwByHwAQxdSQFRJHNb8JPXIC\njIe/bLVj9v95j7n+OqBbDFMx3XMbVJwYbAZyaxAfyxDKJxkJELj4JKDcw+ST\nCTmdDGp6NFDQ210J+PU8mQbjiJbJUkps6Blvw4DFMy8HkOcTGtyCEiMxnJG3\nPtSuSKmyKZpJyARQ6lNSpigB57QWE+pNBUXJwpJ1IBDP/3wrN9QsI+ygir7O\nQa/toM+6K36BBW2Unyu1GrJDDMSDmcJrm6DPUZpQ8Bi+WItg6Yxdx0Pp2AbK\naaYcXwwO7/IpVo+52/TDHMOn2mOA6xYtb6a3KE0HsW17BYV6IoZmC5E/giH1\noBDQuCbxFeGYvDt/72WQ3/j5IkMgdRaqTUqIPJqc3t5UC3EIjTZyQPwmsRrm\nuIs1Ae5mNRNhlHkpOMAW6rF1yfBy4BW6UqQQT6ro/7d445s+72NLJn5+VjxF\nP108\r\n=xIBi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCB5mNalAJkZqlQjupnZjQ9v1Sv2x+c7LacStve4CHiBgIhAMDNEZwoOx8alzseWVkvgpFM5ejsC5qKah+KoOVv8c/X"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602665620-e14be171.0_1602665748003_0.5382650899400396"},"_hasShrinkwrap":false},"2.20.4-next-1602674471-04b38d59.0":{"name":"@xdn/core","version":"2.20.4-next-1602674471-04b38d59.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602674471-04b38d59.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/qJN8dSjDNrf9Hkz9sUJ/9MEG4WLWYJsIY4ygDyjMMB0ENndULP0lSJ2xoDPo5b6djLCl8PCd8i97QK3mCySPA==","shasum":"8fd4f41cc6a4ca8593c947eea708ad37bd67c239","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602674471-04b38d59.0.tgz","fileCount":163,"unpackedSize":594809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfht+VCRA9TVsSAnZWagAAOogQAJxg677RJhiuAImfF9Gu\ndfu4OH1YsKlsi1SwvD1hDIJ/5lduIhopDoQ2Jk3rKCvGyiKxB6YeM7fY9Kpy\nos6dZssa0M5oFKVTaMw41b+EAgkojJQcm9pj3fEU34VhfbGc1Jf8yFb2xt1S\nriaspc6i4PtsVAIsw03dSPvJIEeNIBcQNOO/jOjhGazklV3V1Ro11UojOY6n\nPum41YA3zZBMpZ40iNTpq3nsR4KF9SvMZVjjOCQ5Fknnv4kjvxMWCK1HvfYc\n1P4+GPSRPhLmLrmYeOXtvEF6HWqiteogHSJDIqqoDbti+0z5Pjuhn4AXFu0u\nBjVDDy8C8okbUkPXMJm6QEN0j5k24eJlqaS6VzAK3tuROfSe492UYiDaMqlP\nYV+lDqhqM+3DcVZV5lhKcG343mzeT4mrmjydvzsQrGTjARsVz7wkqv4X9S+S\nvvozvsXKmdX8RUM6WMSf9G5nwk0dGeEACYG7/wqf+Ap4UxAr88IKwAE8ObHD\ndqELaHakaDS1j2j1/BJ1xVv+rxc4J0P6WDHeDdx0+4xni2hiqik8WUvmmDHo\nNr+/Q04VVUuCL+/Rv4wqbLn91j+iphejwdmzcNnVp1NA7hZc3LCxM97sijJY\nfp/kV5oaC3ZqjiouA42gG0ayoWEORAStgt5esEwzl7OC8FPeFpF1vXgFiiGP\nbped\r\n=6uZH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUpA8tAzqOkgnzgvVN5Vh9W8274vFqvjSj5xs4Z4z5RAIhAPryWOno26d0maiyGDtRaqTq797PlPdBWZjE+Y3QqyQ2"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602674471-04b38d59.0_1602674580382_0.5733661607448206"},"_hasShrinkwrap":false},"2.20.4-next-1602674471-4c119cb8.0":{"name":"@xdn/core","version":"2.20.4-next-1602674471-4c119cb8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602674471-4c119cb8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-PX1qjJ2fOoppxFsywDf3XAhXtVt8ECLu7fO5IXKKOktSwTLNrf+qjYGr5dZ4V0X877lPsOvzBtSXPy3yLJFePg==","shasum":"a0c1a5dde6d01059f68f34164c0736d79deb94e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602674471-4c119cb8.0.tgz","fileCount":163,"unpackedSize":594809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfht/CCRA9TVsSAnZWagAAJUoP/0CrJ7tlsobnKK6BT3OA\nownnrpIw6nvjvMnkA+13Ifx2cI/FbQkKmpcaGDiMmJ18P+vUJ4haI0v3sQ3U\ncnbSHexwueBGXOwR58qiCZb5M0IvdA1Gy2H6Cm97PKEZs5cyUxVk3kf8duk9\nkXbXTAlZUHhGxPFNskszmzbuonA7pA7Fow+eTGQA3GNx18KngmGGrjJdBvUX\nkJKOjhzJccldl6fDl6egrRt5aeh7P2GlHd3K8t/TNcTmNsGCtfo5aGRjmRJE\nphKIQ84OsQXkmMwjGQQ7ICOps2w/SvnzslIJCPDLPQ6dhFKq2qnD8DIwkBtU\nGysafPK6CUZmUQfDb/Lmly2UkIt9hDZEX+w7RHuwPyW5c03cWmFdmxFvc59/\nJz3u5FMh3t6RDtNpuRLQ3REWL5HaYTZQJaqWXvC0jATHPw0Tdv4FXHurhihh\n5ENbQLFTprH89i+x3EVEM3oFLem4hPSTOhISeuH55OOj1MkpKGS3LV/7fTem\nQ8FzJNl4JAdaWVqBwTvmuNazi15uEE94rbim+xQRczvR+l3EYGJfLbsLo+2+\nPXC9IWthq2YJntOGyGwhodZdtT4K+nB6Ez2KbKpF+05IEDJaWWlZ8yLUbb6B\nAeT+hK55KgPL6T6wjpo5AuKVW6k4CB0K3euv7U2LBc+HP2TknMB/LEYGF3pR\n8psW\r\n=ilOX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDp1kVSm5noRolaUveNB5ra5Al3veB7QDvSRg7QPAd6twIgLr24+AX67O083qY7oVxWx1QIHO3qpnK5LOxwIrflXtY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602674471-4c119cb8.0_1602674626388_0.7809160147635061"},"_hasShrinkwrap":false},"2.20.4-next-1602674817-9e6cb78e.0":{"name":"@xdn/core","version":"2.20.4-next-1602674817-9e6cb78e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602674817-9e6cb78e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gD6m9FwXoeJs7YohxW0BKWJBlbSA6nIVzmMTheKn7fdRVElPCJGYt6dPBGAl9KbHMEJPQk35SpbLzbW5KIHcKw==","shasum":"b5f8b7807fac7be1b29abbcefdc7a91754a1f110","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602674817-9e6cb78e.0.tgz","fileCount":163,"unpackedSize":594809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhuDwCRA9TVsSAnZWagAA33IP/2EsoIchgn4+rk7r2+Fi\nzW2L8lg2fGdD+3IjRhF4lhKvyDKw4fJpATZv2ucw2tv1D738o4tpRZ/DFpOR\nFDBPONXgtV/lb55AiLn1Eh5gqF9a2+HOVflw2stTZpNWFLR66e9x5E0C9N6+\ndDyqivaDBkfnHdqsH+JWZ5KnghR+SPNhEhMX9lYEEafsOxNGwrgureypD4jT\nDl71fNPOIq7ua2M8ESVA1DYmoOIN06508HMoRtlFNoL5qey1Rd++boaPWj5i\nj7y9GVzS5TlDtZkull9/rAZioI/P9xwU5a0//qVzRhWAOuzGLDf0c8bEMUOt\nSA4yFJIJPXSz4FPKqXrO8v4F2LXrGrOAsxOPjvGmHXJBg434n5eXXjBoY9BW\n8znYjLbUfuewwEMBuf34Tr/4dsm/gNkpIIRTgel9B6NJWIHBjiPrINBr8Vi4\nqjoPL9Bxq3Ju8wRE4fdaCWO95f9mzQUnpVTXiW3BPFWwKGXw5oRMkkYhmjn5\n3G26I1rsWlB3EEwcFzgIh7SE8A6uH0cSg1embUXSjEtDKLvxKzcCQxXx+foa\nbrT632ripoyLuo/8CbFfa2bDuCv1NiZn/VKw56haeQGsyoMsQt+QqXZ5fI85\n1THQnFnsvneWYK1EpsQrUIZBAyiWUGJT6oXWqlemLtovg6CFaXQz1rYLuJw0\nCUqA\r\n=VADm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG1w4YtheBQ0c5RcoBa6ZqRVfrogr1LE8E56hhDiRWNjAiEA80FYdRBt44M+EirtoE2CtdC1NkQwZxsfT1sPtPl8Edg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602674817-9e6cb78e.0_1602674927725_0.5727940761952461"},"_hasShrinkwrap":false},"2.20.4-next-1602674825-77b89da9.0":{"name":"@xdn/core","version":"2.20.4-next-1602674825-77b89da9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602674825-77b89da9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-dWaubTVm0x0bEGGjJ7VPgUxWrqeuvNsjzRQhJRWBGIq+cRVkOa+soFlCBJluMmNkcT5qUDLMDMk7+Py4nEqrTg==","shasum":"ff5453f3477102b0ea7a0b43ae1a56ccfc1f4228","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602674825-77b89da9.0.tgz","fileCount":163,"unpackedSize":594809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhuD+CRA9TVsSAnZWagAAAEwP/0LcWx9KKR9wih5xVx85\n2nl174BldHZu1lyB9XNKcPllPQR831XeFlhbBcQPjuTAxZICgOTw7zno44uf\n15GVOP5g2tqpKnXadXW+i1w42oSqP7vIlngzGwxt/6iQ5Yc0DyK+ZxR0mn8D\nNfbzGJsvbWWO9qvEumZmSN7foqduPXHyq2r8BovSWLTDSRdyGdSLwZF7AYiQ\ntPVsG0EXCoCq+q2wMNUK96RNozmYINv+gbFfeIUfgbzDU2T8cKTl9sjg6sog\n7ZWSSm1qnWXuzNOfQ7Z3nx3I5mlbB9MjmMZRXhwbUC4ehAtvp+7SRwr4F03K\nZ1qvYleEC/7zT5MGLmziL37OsWn6YTY4Iia2rSD7ZQLyyB5/hMLpw8cN+GuH\ne/JMlKCq256oZ3lnSB6lOcgpMF8mIDsZHdF2yzisllGuKMi0r7jMcRMyTtsi\nJxP6sgZ2r6hhfYOUO2SKbFSFBvczf5glzvhQWKh6IEP7yw34TJlCVPHppZb7\nA4fbm53hDQ4N70bRauSomlzWLG5+41cl9A6El4fuGydbZvFjDKXyyJRENu/U\nebT8hmmL5BF6CbnMeukxSGGk286TwnEVVmfvcaSHdWGEwbK9f3SQN/YAV9sG\nezKA8isKV23Eq1pdeXMYSRNe4hTNM5rD02remiTf3NeDDEDoZOYnTiJgs7v5\nFf5x\r\n=2DLr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICd+r7cU99gn1WvM7IpTczzj3e5xC88vBng3EVnwRyeuAiAWciMxuZCbdLNB12OQO+vCvuI+Au92VU3wyx6QC2bpXw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602674825-77b89da9.0_1602674942047_0.6584400973709215"},"_hasShrinkwrap":false},"2.20.4-next-1602677094-4b6bcbc9.0":{"name":"@xdn/core","version":"2.20.4-next-1602677094-4b6bcbc9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602677094-4b6bcbc9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ly/elnFcYydJTIcopE9aoT+VLx2R19lzGoy/jPcafV5EwUvAsqQu7htdwriYLNG4Y1AYVKDsn8+yWWjtzhOisg==","shasum":"8eda9c97dcde25e6620d1a2fe19991045a2babce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602677094-4b6bcbc9.0.tgz","fileCount":163,"unpackedSize":594809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhunKCRA9TVsSAnZWagAARhsP/iqB4DmcECsnVW4S1Lma\nbfEbh9BMp3ITl05z3+VW6JlLL8iz0bZqg3J1fPAVb0Z7LojQgBLNYzbrZC+n\nozYkalchjQKb3QrPDRzvhkYUWU7I/lz+ARq7eLsq9OQtE+MPLUuQgSW6fubx\nn7W69kmQ4URc7KNwokXOoE9JW/8cJ9tfQIkNCxJ+HNfSbqJUzO5p75/fxWlf\nW1qs9qXCwsCODllRGW4qIECMSC2raazhFDZfkwZIq077pxgtesAZzIUXT5sD\nnclWyfk0VOMn2RNnaAFtDoJE2arljZ8EUdd+HkyGzBZMwYp4cq5cilYiTUlJ\n/2ecECkAuKcgQYqIylMCPDhJbmgL55SF9ye/1irV+/kIRX/Nofa0xISxd+4K\nGkRnnne1kTX0erB5N9eD7eOPIbNSM0Z/2XuQQjNTeM70n8qlvmwYhvx5SELP\nDl+BZZd5W1IWRDweMZyR1NkBQYIB4K8B35ddzETxNmSah8Xkl8lWoOZGqtjZ\nbotAIFtuMj6HY38RcY309lL90aEYn8jmMmQsfNT3NPkFW7MVzCentQCAM5aI\nmiy4VZHIcWFPFsROgojhtfHe5mhkG5Oc/Mu0aiF6DmxqcIPsC0Cw0XSEvicR\nRQ1tdLGaHzlzEllyPWhZm6m5/j1CFrMpgObKYgoPh++4mJ0v+ss/oSwI11Tb\nNFRf\r\n=9EvH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAP2BjqAeLITeWjJbkm3PYVqDqIdkGf8gckwlsZclphFAiEAu9ZWSrkGlHb8rrsnFsKWfqcD8iBYPM9McDLj0tyk2zI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602677094-4b6bcbc9.0_1602677193816_0.8455568289802029"},"_hasShrinkwrap":false},"2.20.4-next-1602677082-21bbfc35.0":{"name":"@xdn/core","version":"2.20.4-next-1602677082-21bbfc35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602677082-21bbfc35.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-x1nYZidV/qJTE0s4aPWojsUL5qb1TxvRKSBJB/6S0tx7drgh2f1dNP0w33NOOinxD7jIcYsSD62ja5hJUAB45w==","shasum":"e077b34b22b22c6f21dfb27bcf7010df5fb5cf21","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602677082-21bbfc35.0.tgz","fileCount":163,"unpackedSize":594809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhundCRA9TVsSAnZWagAAq20P/iJJj5o/e6y+vn2CdwKO\nJwTn2f42L9Ok8CMkLpJPuAEAd8GK/2fLoB1GHjq8E4DrId6JMhRdvtSTQSXJ\n+RjvS7UKd2Bb1hxVjF0eUuwDaAbCE+7xSHE9bo5hPaPKl/EyT92DE2TuImSt\nVWU/VFuNvSYrmIyGR0ss/CvF2f/xImo9Q5S2YArAG0RZFVCVgthvOJLON/sm\nm8Wv3b65xJ145OUDAMPqheXQF6PoFQtqvxvDrNlf2M3TxEzh6ajwjGT8mccv\ne1ZOfiNhFITjIskAJU3dSA81IROhxcnbpTBErymuMICI3Y0WP7F0f/SQUbLc\nfSuUX2OWIU/NkivFspe2fK6+iHj5QaWzEyacrf9p4YK9aApU4H57kNtYIKhv\nKCe3wWClQcDi0LZ+9MdQpaYZEdbsxE5CRH+e7UWwQtIw7L6DLTb0tWknmude\nXOohWIhwYRp4lfMHtwzDE+/fhyq6jIsATaNt2TAPzy7aPby8jTvTbKP+hBnC\nON0LPQHUq0GdtAlSYnxKbqpOJgmXx+4SOmkpEve2j+Ps0qPq0NsUApJQ169i\nDUetfNjJztbksJP238OMnxQNQYB9PmpkNaq+FWS8CZA39ADquZB2Gm4AjOBI\ngyWiBhX959rtn8pTNIoXah/BhKOVUHplDuIudA8p+uFNQA/N/zlaODvCU+Tx\ng347\r\n=/WS1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAMosYSGLBK71J8iDZm9QA4QrN02M7Llv1Yg2ak7cWpgAiEAzOJZRoRKQiLF41oMeIvA4VYANok6ft4IVcEZegIcMCk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602677082-21bbfc35.0_1602677213072_0.9400151163597987"},"_hasShrinkwrap":false},"2.20.4-next-1602677809-6ff2aaaf.0":{"name":"@xdn/core","version":"2.20.4-next-1602677809-6ff2aaaf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602677809-6ff2aaaf.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ca7hL7lPmsYMYBkjJEAaOYf38gDm/d+VIKxdBT4InqFvVyv1gs2uZGKeOISZiO52zVdtmpQ6Jvi6fjtzj274hw==","shasum":"54547f196fbab0ce14d7b7678628d8cd03c958f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602677809-6ff2aaaf.0.tgz","fileCount":161,"unpackedSize":588769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhuyiCRA9TVsSAnZWagAAVdsQAKH1zuVoBkoAUTHEM8F2\n797jR1tt5wg1Olonb5Zk5ARoVD4+nJzc0udpUFzxjTSrs5Jcb6iJ5dOydlSZ\nae3nvT/G/HI5NXgCTBYU3NDofdGd+5GPJCDDj3jisVfguuObLoVkJDiIP0z8\nRnXEyiaogaL9vQO9mMiS676SVUb049P41cFvl3uiOU5M5hVraSfK1cT5kJ/q\n9rvGn1YkE9sH4vsMrZcQVPSGYBYtnQbORb+62kN/vqtRwsFJGr+beqEIRuGl\nxoE4YNp6WGLumZxovwR7KozxOzijEyWkb8qInNweUumZ10xYDJA52F+E0cc2\nCi1tgrL9TKMQZzRk+yL37DwZ1dKkCMHwl2qb6jaGowbKr3e2yDcBgpRKUcdN\nNnq9mRAPgZM84u0KUfsK00JL/Uig7cZyNsvlerB7JXT0fjf+PuZsZtv4uzyn\n87o97+LU9+tMP9ASLBx69K8Hdt5gRdfmd0RCUCIyk3630Hrdn07TFKrZQOlS\nOYVU6Ic6hX/jL3Ixt8mMuDkDyh1BTmsBGzXWSi8cDFVAYayaLToJFYm0KVod\nm9lCtJJsEckYkta+4SHQ/p1JgO7TWwL6df1iVvg2dkNDdbfNlAkPYlcAtooC\nKlcfBayOGZFQjFTGATkFs+y5+GdyRVWpTv3F2QOqWN7lvok7muSNodeUXuX5\n1Dsp\r\n=SsYU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFmQp7UNRS20VizIiHzBE0IDCPFRDwXRScZRJ12XshbdAiEAilfGZ+4LmKyHoCNya8Rl44GUIZLjJ3T4/vH1A1kxcDw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602677809-6ff2aaaf.0_1602677922360_0.5507729993872397"},"_hasShrinkwrap":false},"2.20.4-next-1602678193-c5f76981.0":{"name":"@xdn/core","version":"2.20.4-next-1602678193-c5f76981.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602678193-c5f76981.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qcTdfMCvn8BNfEwcFOX+LYzz6LWDPfHSP4PZOw0LUnUSsGk8zD5LIqFMxHEAz6MjiAIvjQmdlATeBODh9iscCQ==","shasum":"0dbbbe1918385401a667e08b35b7a06878a0db67","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602678193-c5f76981.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhu4iCRA9TVsSAnZWagAAoFIP/iN2LpeG2kJ3q6Cx5iai\nkPXm+HCyZYH2kqS40YswreMtFtfVwVoodHZEwxPBTze8CJkg6u5JFXT4uRtK\ndwsAEt8YCc+e9NAL3mM35E9y4+eM6DPzjYoo7TYYrs7NbOnvsuXqGIvA6ClL\ntwVKwy41Sd2bLaJyW8+Z7VEWXZsDgpGZdeYsUaWJKuxLXmiejWFYnMqanLvR\nXFkepZSn46FyIvDi+V6KPyScUrA8Cem0Qu2JrBsw+zEoRGaaHfb+Xm87S1qP\nQFpy/PS+6inh4hQNvttPQVBV9jd2Ey1EX+OctDPqNTjC+oaK4xAFE+449qoJ\nkYOKsvproenSy6rWZb3e7y9xVoiUlhg55NBVHQHiiMWaSZwxdWK/Nde4TjQj\npXw7OksEX+/sNsgVRgQmOmqWQ29jQDZbcVC71R3EOt6ZxmyBw0CL9BuEi0cX\npgsLFU+jYI6Y82MGFiB6u+qd0jp+Bc9FzQ/XIuFJbC/feKcIyx/5gdt6rdbT\ngxtXKIuwaw83NDUkR+dZypeSyPTewb7R+TAKeyvFKppNXByjb1DB15z5Xvv/\nyISrtYYNm6y13oYQmeDtRJjlsvpBmQDfTYkOA5sfQeMQZdIMmNWSC2oAauva\ncntBuRG06HZLvmwwGnb+hUPLHOwiDD4CaBkImr8X+SZJotpwOf3lQnHZMYWU\n1c4n\r\n=OiUj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE6HiUbYDtk+RiSezh91iJyp8AWau3L8Wk6/25ukFLDhAiEA9t6wqqTXbAB1ScB0cExU9xowgfbcr+IKcTsdrzZHixs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602678193-c5f76981.0_1602678305845_0.6730017301566291"},"_hasShrinkwrap":false},"2.20.4-next-1602678392-21bbfc35.0":{"name":"@xdn/core","version":"2.20.4-next-1602678392-21bbfc35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602678392-21bbfc35.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VcxRql0zLudvSSx3oM0PYXRq8mAQwwS5anl+taZOSX09/wpGdYoOvIfMBCMhxIE/2he/lrJ6ark2TCWLYR1apg==","shasum":"9070bb13dfb1eb8d074562e297222791aa69958c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602678392-21bbfc35.0.tgz","fileCount":163,"unpackedSize":594809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhu75CRA9TVsSAnZWagAAhNwQAJ5Aw+aj+WZPh02N5sBj\nm74N/lq1OFNgFGagG4zNKlxHKRZ1QRPRKOkGWDaSU99qXUhE6hZ97PHtqCs/\nQ0AftzBixQ6SkpmPidF0t7zyyT2Lx+Y/gnFLaEKAS4sLolhwcecChH7tunRF\nKZGZaEsvqYMX1vmI7Iw2m7vfcZyk0Y4l1QQSIbiXuuXdEBvIvtK+OEvzQM06\nCCeW0I+gfNcWJW4OsBDrvzMsM+ww1lnCVw6MR0BIT89ptPdBpikPHua6thL+\nf7XiWs03Gc9reLEY18uDsS75Ow1577rvj+TH87361zVmN+sGbLPgSUith44s\nTb8f0rqZa+dK32fP4KB+5t/OuLougcaRi9kOlRXRHpiHjxsgE+0beZKagjAK\ne2vxWjf4TsgMRgrDn7dBbg0Mou3oFor1KcdyfmXLgxIqscnm1ql8yvZ/jdBO\nXYXfGtpdJokXCgpMF0U+fW1XYsq8u9Oxnacv0g4GC5xXG/tohMdRjuRQ8Sch\nLMB8e/soOVzmFRHzWKXDWO75GXzfxYExzi2zCzMVTlOtZbiXBm3Ft4lkDuuL\nNaeu29nsoWI5lZ9XI6tgV1+aIICT2IV7L3a4SLIQxk6N7IUMOOx6GDh5+AL/\nWiKhjgrCsqIbTpQ+SZK8HGU6NZGU/9OwDgH7oBUAf5EqKJD5/WQx84vbC33L\naVpQ\r\n=1W8i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOAtfaOJ5htop1eXxeLVq9MR32++ycgI0x/t9IxvY5iQIhAL0aMbHudvuJE6OhmXp+eERxm/OUC8ceLR4xY0L10oIm"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602678392-21bbfc35.0_1602678520927_0.5341591558170806"},"_hasShrinkwrap":false},"2.20.4-next-1602679228-4b6bcbc9.0":{"name":"@xdn/core","version":"2.20.4-next-1602679228-4b6bcbc9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602679228-4b6bcbc9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Bv6MLOM3z0M8cva3C+BKrLj0s7iDRJzEJSPet50KEvo0B+MLiu7Ftj320PDM5xhVfGtvfwNNT38R3jBmuOW+qQ==","shasum":"1c894ad4cbd8868e435d421cda638676a5e5e94b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602679228-4b6bcbc9.0.tgz","fileCount":163,"unpackedSize":594809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhvIyCRA9TVsSAnZWagAAl9IQAJJAO1ow+SGnnbKo965G\nDN1Ifpp87GEK1LdizLvZG+OwJvj/EjrmVb3PC/dcQR2G76T2cU23bg+IKD3b\no/B437JvMa5JsxP8LJOCVoNAaStwHlSUBp8KyXG5eIdpEuYDsA9pVMfIB5sk\n4pgEHi0bJC5+JwAIyAOmjZl1ZviK4PQyQda4KmG2+xFy/GVw7RSXZJalH3Ld\n97981zRsrBllRUWJ7vqLnhrNDj6r662AFkhrhAL/nF2vct3gfY6w4c8viO92\nbGfsFFXaivzz2/M/fpYo+PkEFU8V/FlQGP55hrcHdZmxV02xctJ5x07MgDVE\nvEpDnCX05Tyg/kGagNrl4sbnjn6ku7GkjcsRJepvXVlIRzDTS8rYjn2VIesv\nFwtogyFgXPINKVpoH+x+Nd6cuhHyWQA0aou+yjYTC6sBqW4CtpKeyzlAxVEc\nIWYTSChe3tdssJlDK0a0GwsEUYk60jSqHX21wM5cC4BkcZh4OJNHV6x7H6Ch\nlmch2pQp4KIxNRPVMgAZWPjXMWomujkMsjYKy50LQsb5NTpHOuboTjIsD6OF\nA/XKOOaYGgTl/pZIoI/SQO+qhHhHZU/NWBsPf2TTIbtrNmFZdFVHcDD+javQ\nJRf2I116KohR1Yowe29kV6+/PwEw+BdMart4EZ1jXJsm5p2pnPL5T2m9m2Or\n6PkW\r\n=TQHE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpEyl/IQCg8CaSonlqgSOmw6T17NevcZbRUNEFvTZ99AIhAID9LXg1jCpYvPPWE908Y3hx1KX1WnenR6QB+NnRxHH0"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602679228-4b6bcbc9.0_1602679346189_0.7712595660851864"},"_hasShrinkwrap":false},"2.20.4-next-1602679976-c5f76981.0":{"name":"@xdn/core","version":"2.20.4-next-1602679976-c5f76981.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602679976-c5f76981.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-423vLXmpWQfFMjhj5BdhugCtGCuM/2ClGE+1u5+mMLGbJ7Acz4nK6973cvnzdcJZYdqkVbeed1W+qpO8w1XhRw==","shasum":"02b8feaced0d72e4c2dbc0e116d1a4719b17dca9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602679976-c5f76981.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhvUKCRA9TVsSAnZWagAAjxYP/iBNiH83ohNggCRZ2Hf1\nSUdh558X0F40g5PXDGypcnYVmbuEGDYVUiejre0d26KUbTmwL6HcgvPOx025\ncwei85TCUmsm2H/7+bNN9tycpJkielKLeyaQfXA9R74nxGTsHL1esOzsEUn2\ntgm7rUeJwpK3Dh8HuDLatEA7Tj6pn0UD/YmeSkf99CcEWA8BFc7EJv1AK58o\nxocjz+MB31ExUMxLW1fd0/1hyFsXNvB6oKWD0/M+PSHeTtcUSW0aOcGnemaA\n1LHgCiaaEXlxEYkfezzayOXjVd2cJKhlWGLeie4FZEavGOENuT27Ep5hUg1+\nOoWmUercDn8VV1RPD6DJckH2pgRX+RH8+yug2PhEBB3RkyQ3/fMzSqHhrIrg\nkXdPFzP8idKQqmmph0ME/E8YfYR90hsSNRRDBSVzH+qRwEtKmLd2hM1C7BQw\nTDh0cANzBCnsyOtG980DKh8vw+2U2rgPZFdQOgYiLNKVtdihYCbseBnG8Zo8\npKvDGqxH10LefgVL2+rUCt51VZJ8YvvDAcqpAG7GKXMhsPgB1+gelYnTnUmP\nrn3Mk2vgURDtQbD9Gn7ZjZavsf+jIr1fFsnaUQWSvXVGrOgIUcBhhDMxOeF6\nZhjKkdtIPFL17ENJCGJaWA/Bj19GR7gxdHL2cjOGajln8ZPzA6i5zEWgQIfM\n55+1\r\n=30ev\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDlMHOWz17ln54r0UCG5dMyTHOqsmN8pm9iE7R2QElrAAiAcCcdSDKzi6+xY139HCC1ZWs4sH5HpSdgPOwtU9ZGoUw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602679976-c5f76981.0_1602680074104_0.003790099266649749"},"_hasShrinkwrap":false},"2.20.4-next-1602680245-99620aec.0":{"name":"@xdn/core","version":"2.20.4-next-1602680245-99620aec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602680245-99620aec.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4vcPQ25vEhXAAzGXZ6y91vb4NNNORkAPCQ2EooK5Z4R9D9AakE0zyFYgT6ap18zRsKZD6FDkYi/mBzZvV7WVTA==","shasum":"a7e9ca44cc200e895bc2b1bbd0ea64eca8be7dcf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602680245-99620aec.0.tgz","fileCount":157,"unpackedSize":580748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhvYhCRA9TVsSAnZWagAASWUP/RaLwXZmblFTYE+IXbQ1\n/hZzQDkNDINInUo50djPul5rNdwgnLPbSnld9w1HxaB6a9eBQ5EW4h/A8NCu\nKcodG3lPs+RsHqF+Kv7XdVt3cayfFkPPBE7IqNdXPsZuX0Wtq9Ta4kwoGB6X\nCfNHtqecLt+K1yKuWmTAS9MyqRapgWH0Edglchw6yMyn7mf1E6FqsJ+XHiBm\nj+l5FjqpyR4A1G6isDGseVLsqspckmb0PZjPL56wytn3BUsyTmyT0+sfIzBY\nwNV8u1AqmxBwf1aXZzQSTHWHaYp5ofl6uFilUUfQQbcSPo2cTP9n67gwnyTJ\npD8770wG8nVQRBlNy4RVEWNGC7s4Z2IyFDA6Bs2FVw7PNFkN3NK5KF5BaT67\naJ74smM6pHYBK+v21w5r34XpPEhNj/eMQ9768gHWMAv9WzOkJipX4ZjOMTXK\na4Tve/zUXetG7VjKWNzWiM4yK1Xg9eEYXAcZOyhrkiffgIX5q6Jah5PRY+FZ\nDASQbBVacD7EdtTw0v9qotIiT3vpB1CpazzIkPOYMxEf/iqNf+cHg4wgDdS3\nC/JT1U6LteGcQ2TKWaSdKUtaDJs/mPxqahwfYA/FQco6uLnRNi2T29IxVNWM\nFy5LvrlPfEqaTDkZL6mcFcf8H977cgvcjgvdadmySqgVzoVBGHr9i05ZQp2U\njTB2\r\n=vBID\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmvE8HNR9NtTivUN/5UK9m5u8+AkIZaa3AFYrnCJBVMAIgNM4P+21fc1ufdP6MzsJy/WbC9KbLZmlCHg5gXNmR52E="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602680245-99620aec.0_1602680352988_0.44489303382803613"},"_hasShrinkwrap":false},"2.20.4-next-1602680656-21bbfc35.0":{"name":"@xdn/core","version":"2.20.4-next-1602680656-21bbfc35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602680656-21bbfc35.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-dqcpaTh8kQ4tqTmxvsL5yzprI+9Y11OAjkCnZN0JKS7w4hlawgA37eApwtBXow5yPqSWEvc5Um+/PbJ2bYl+IQ==","shasum":"8bdbda2422d2838a0584686becb776827d694a89","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602680656-21bbfc35.0.tgz","fileCount":163,"unpackedSize":594809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhvfFCRA9TVsSAnZWagAAZGIP/RJ2153RcizOY1H/gEmv\nlRN55YCe8NJzWHmaBILS437WGu1PVyrKzPZRcw8bE/txFLIod0Db08P3FmBN\ndFR4fR02rlVxF8cgxdmtWREzL4yz+cYtqG6DsM6ga17tOxfQFvicKpBKQWV6\nAUsSmQh9vx4nSSXwQwjyvpc30ABRLZltcFG2RC4ZlwlZ35UdKbVhu9ghZRQD\nS3Yoi2YQA/NSYoNoVK0NP7cJCZoe68id6gZiTV1KnmZiFORur2CWvAUoWlMh\nyqOaBXcqCrrXCEFmRhRESv0qfXE8t7X78UDQxI3ow+Dg0HUW3QSxzOdtm0TZ\nhmo6YgRvBPZynqKyz2fATjgMQKN7YuImjSKXfwoecd9reESF1P+YGjGtJqv1\nxrU50BXuJKdkGjRUPY7khxpTs4fZmBS0S2wlOPwT+rQJF5pVoU+tRyjfd3m3\nTtoEbLkayXG7Bds0kAvPfwvSM4uo9AMBqKSVrRCKxKzpC4ictx8Jl2gAdQrI\nwtttKRVkqYJ8dSLer8aFzla7EOV5yeKDLTUxO1II/PPSqzpaHB+2DYbi29h3\nt6pZmIXbnINQ2XN2gJWdecsL1GM5G5Il4V2dCIp9L9B5k4r/ld6MD6pF7XtG\naqYNkxlGeZCzr69AeZbzIxvnaqPCTrsQXQ75LmQuj8UxQAeodN6wHFfaZB64\ncx51\r\n=DBun\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBvWd3iNRyPUNXIIaKpc0OcGNjN2lUAv1FjzYNrHaDgfAiBX9HHSb4K1NBWBspcuCr/l6bfh/wEoOkszSS09kKe83Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602680656-21bbfc35.0_1602680773232_0.9400967328258798"},"_hasShrinkwrap":false},"2.20.4-next-1602680784-0f25d3d6.0":{"name":"@xdn/core","version":"2.20.4-next-1602680784-0f25d3d6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602680784-0f25d3d6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UgwXpFdWJqt6EQ1U2jid2Yka/UPPvGi4PaJ6LVyuOm3k9fMckvovBjUWiumLsX5mfZJk6XWTewG2au9kRfirBw==","shasum":"81149670e171b073615cabb7398f233982a8e2c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602680784-0f25d3d6.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhvg8CRA9TVsSAnZWagAAWnwP/Re5+2qBOSFu1VwgvOS3\nRV33oqXyVAVBp1Gclc2du5IJZhJotiOD7A0pIJ0CTPbgzgr4HUfCUwlqOAME\n4U0yNB/ujQpH+z3syFGXtKzoQMIulMBTC0og2qAWFJsQX1REcQXlfc0v6WA8\ntjjXDYGmenfoNroABiVqNo5rFnlqBVvJo3oTVF8Iov+leaMgX5m4O3q6UlSU\nhhleK6CrzKP91ZoNtGTF0L5V+Lg79Nz1BRD8auzRVPlRTWFAXRWQJeSIGaaV\n9OmEbVXld3SZENnPUjnPUs5jQKY45b3uRWETAPL3/JvqaMUGVDIbral7Occ+\nE0WYGCTJLxgLaEvDI5oue1tIYOGy1+229/ojPXSxAwhmiMGh/Jfwt6z8zlAK\nxfqqrBXFKXUL2Ghqo+TsfKmjl8rZ4gdlQqxDRHQPNND3jiTAVrdqWk1SCWLt\n3/igDonTiyI7JXxyl1fduwFIYOimwr01RNHQUp9m5JAobW75f2daGdfHfgDV\nwZKNX+coslc4ki4M9oG3HEGhQ8GXk+6BEEZCeh9eECYzpEmv0B0G9WKwYsbg\nwLUGkX2YqVc9b1wP69NKyOUUCryAaO/va1haRc52JmxGOnWaaSIViJyvDMPx\nUQ8iyaupVJOh1kKK5E7Bbr4riS9+Tnxekso3TaMNQUu69LQhlEfIFb/I8zRz\nouiU\r\n=/QJQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJuoiyBkIMDILe4yx030PxF1gyHK2Sa+i1IuKL43djGgIgH7OF08xJHBZsLpKWmAUTVNsi2pRDEjpvJu/wVSHFgwE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602680784-0f25d3d6.0_1602680891453_0.6668193452853795"},"_hasShrinkwrap":false},"2.20.4-next-1602681610-21bbfc35.0":{"name":"@xdn/core","version":"2.20.4-next-1602681610-21bbfc35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.20.4-next-1602681610-21bbfc35.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OufqVO8GmJk7YdXwGF/NQv2Lsr0woNhgOWOf09Tlrgu/hpEeLB5+v3nH4WOqC7ruya8ONP+CX0pmbChIDms9Jw==","shasum":"23157707f2626a23514b26e52ed0083346c6d955","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.20.4-next-1602681610-21bbfc35.0.tgz","fileCount":163,"unpackedSize":594809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhvt4CRA9TVsSAnZWagAAlD4P/jVyZDMLS+9/Qu2NbHi5\nIlgEn93BOhSfFdoemae5Gh8jXTQABR5ey1yM5olEKI+ZHdEQM97FvMj5w0A+\nip+HhfsMz2rVfk5vSWuBaQ/os71LLRrHYB2xe6vZX4wgvjGvcG9OdrK9embK\nl94iq/EFyszjrB/bjK+gJkIyWYRvm4hgWPlZSvETtkw2PtxQwi0BCzPpC/r9\nuuS6/jWjgRsCXvMt5YivNqbQYLCpeRm1BfZSTXVkdQiUUgqUyZsQjLBPf3fQ\nIE2W61n4UvwxnnUMZm983PHUbzHW+PZsUdm+HtL2edQrhjFjNJb3nBKII+IE\ne5wz2qCY5MtQCjEjMBoe3o3qHTdyvYsqvH5KTL7Flq5vI9P5REtzt5khZ2k8\n2H9G+IzyJw+82Mi+/ylZ5+U4Qi54fUFAwFZcGkSQTkaGp+Hu+s3eRjF4JUUG\nes2fMOeQS1heqA7+UAh8lkkxpqQoTgAqX47FLbDL0pEq+K2KatApjMTLQA8v\niXWhNn8CqzCo2I+6xUL992JuMBut8H/j3ypBR5ujEc1+2rPS1GrDOB1UMz/8\n/MnzI54mJ+hIgdZ/3nwvXNevXy4YpBfWL9r/2XvVN/qrP+EdljTzXgeDYXSK\nSDirKgxbOFkbfyETD1hdQKMfJ8Rih8h5KZ6AKlyEHTleP0ALmaNYZIOOijij\n7bH4\r\n=MVF3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE+y33Nfwuo6s7BYcdLaADzSO33vzycWkgNUNle4giciAiAmYIQZcP8/4JzsCA5tLADa4G4dDQ//O7dbs5nkAaAyRg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.20.4-next-1602681610-21bbfc35.0_1602681720233_0.9875198309341633"},"_hasShrinkwrap":false},"2.21.1-next-1602682467-ed563445.0":{"name":"@xdn/core","version":"2.21.1-next-1602682467-ed563445.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602682467-ed563445.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/XTucPfYePbRP4iS9W8NgmcT+p8BYYsA31hxFdqSQ9mIr8hQ3eDrhg6rZcOYqeECHAY1RtV1Yy+gZKZmyJ09OQ==","shasum":"3a54deab8954e80caa8e2c10ebc4bf9032fa57cc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602682467-ed563445.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhv7iCRA9TVsSAnZWagAAEoUQAJc0vZXP6j5sd1Ro8a4x\nV8hy5W+bPa1xpleDihl5S2IgIlvRFrZOXCrMmo8Z2EdJi4tiIRTGI9RL3Y2J\n7XPClsCmrvR738xV8IfduEjs7Xg4NfL5fNRot2ZJHWcdncyRhLxBcaInrmLA\nkJApbOxTWgpQvnM9p8Ht4RFyllCiqhtmbNnq8t5eok4n7vyDVDKSIklHw9rk\nlVJGnNGxGXiLPFSVPmqK6yFvXsFBK5sj6f9ziTSdn39PuOK0zItrAh+pzk2W\nvtUuR7jh5SvXRUsVfBHldYZFmOrwMhLH8t1XjIr8LqXBxRZa1Ss83EfjdO8L\nwLzkzBcY1LqViFlFsNIGYdKy7KJEpJaA5fn2VFijeXgcQhJX2NADI/Kvs3pV\ng5Gn1JsxnWAANCXRbqP2/4krNaE57W75/ABcYXXKVAZY9P/kQm3/SsLXZ2Xs\ngqP1nuGLWzkeu8Vv4KbpLY7RLq66l3gHHlQPOILoMZvvuDeMJaG0xx7UCD8I\n7CG+Fki8Ia4hCFQ1JvIIvvgq3bQ6DxRVcZboZGWJ8Tk+vn/o3sg3kr3TdNgo\nJcRMdbQmJuWvD4vg32cWZFW+EO5bTkuFu5Di+JWbcaFiSVTUKV2PgetDJnp+\nPL6lA1gIkTP9I6EfWFw9W+qxoOTrvYGBTF1iJ3v2fYTOUaLty30bht1uWWff\n8Kpk\r\n=XCS7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD14hhgy9HaLuJsjyI4/I0GI/+RimLjEHj3dEsF1RCtfgIhAKpY1lMVEqrObIe8NUO9EV70XtGvN0LlguD1QYTOcFhl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602682467-ed563445.0_1602682593437_0.7680663603547102"},"_hasShrinkwrap":false},"2.21.1-next-1602682681-67ec788e.0":{"name":"@xdn/core","version":"2.21.1-next-1602682681-67ec788e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602682681-67ec788e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-skB2atlzjQB+3Ivb2QWxQdnUcCC+YOWZLC2miEjqLT+c3nzewstP8Db2gn79ubMBvdcekD377y5QA3s7E/AvmA==","shasum":"21c24acdabe981deef3e117a623cee6cdc5c2856","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602682681-67ec788e.0.tgz","fileCount":163,"unpackedSize":594894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhv+rCRA9TVsSAnZWagAArwwQAJAI2U5C7uThnLuYkwL5\nK/gxo3EPDno7ACEGQ7kPBr04vI4Twvoky79bXf1mhWFk2JW5/lLBPcK9TJvX\njaRl+rFQdKJox+K/GMjc7nOPUbRzVXCR1FrplySEQ+H4/2S6SQW42DqWtYwZ\nPEX/WCK2hsiyfReXrEORrY8lL8dXh14gbm1Jsmcbzz+m4WM6JPn/BHw9wEMu\nW+THGTHo3Aa8mWX13N0GXltjKJMelFIsUL20/fEpmxkKo6Dl4HN7CHlVdLzE\najEae5I1AX/52nJC46bjcPBgZS1Peb4OnYu3f2YkHrbuYKAD/TeO5LJJmvND\n5U8O80vFYYeUAeOCQ1kVccM2G88weZY3oWG65KDMEPAB0d9QdZxS1P6cTe7V\n37sMMT4z2H0XVkqGa6pzj4fRYmb9wx5Tm7LNp/HqiPGYrciF6C501kx96JNq\nwQIlLKafb5JEZn3Fn3Jzllg29jMbsF7DLr5QuRSkrlRRdp/ucwwYL2JdLUEX\nB8ZLoi+xKz7BuIs2D+5gSoDOlcISC2fIezk7D64ayiXfSIxCseBTosqE+ixV\nICRMHB0QAK79H5RBj/6vn08bFYi6hXmuFbvyb2iWGz7u3l4H99fFk9BOtZA4\nhHZKbWbi7pbm+AxVPNZAw4rHI2E9brZmxsb7Mk4AvZN6/6i3ytRRVnQRzxGq\nmX9a\r\n=ouD2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6eJQlJss96e0D0np46HnUuHHy1ouhVV/TWcalisXyWwIgUiwQrAwOqcxf6UEyj/2zpF/tyLferwzKXWFD9oojaKg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602682681-67ec788e.0_1602682794786_0.37321961531816794"},"_hasShrinkwrap":false},"2.21.1-next-1602683380-779ecceb.0":{"name":"@xdn/core","version":"2.21.1-next-1602683380-779ecceb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602683380-779ecceb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FXhJFC7a2IVk2aCuv5A3/vQLuBEbaDa4DNdMfWrEa3v+XxUGPSlpcKU1f9Wf8zP+p1jAeUxJEP3kVNlMb0YrJQ==","shasum":"32a20724f1a0d56c1cee1eeeba81ac998f114d97","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602683380-779ecceb.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhwJZCRA9TVsSAnZWagAAhQsP/3iioYBHy77nMRHt3MBr\nME1QX47ds4IHbwnlYgXrCvmGk0qODb/J+f3+ZVfNG8UunLG08xBqXgKivZSe\nEnaDSUxoYYNq1WTDNYCBqYfIC/6vH9VE5ZMa/sQWZDANug6s50b1WFs4yHgv\nAG4K5102sGxV/1hzjAyd/nUf+0BwTGZQZwOdxmJNgT2bCgSs5H3DsZbTfN65\nqBQ9k87a1Km6HxQmA76TSmV1Oeyk1UVF2cS3hkHkSMxy7CBTzefal57f4WNQ\nHZlqyLc+saoJZOWRhRdNV9NXRkOQEDkOMbH94ZwpniRhKGaN6Ul0JCtG7YhV\nZf6He8nAd95kxcEZkSGJphP6fqMeE4dko3Nmq6aFEMKuuMkgExh99N/HUMIh\nLyxwAKva+Fvdidz4axFrvOd8MS/w8zAZMRVT6fF63F40HY9b4OcqmeJ5atYo\nDwj446CJoU8SghCiKybIz7oT58TMcE5bcbWlp0v47PfpO3Rzi6Qj0GHfsI9Q\nbDmKQrwYuPbSwJ/vnbMfYBIlfwiqrO4DWmNxuL4KWKfoRjuNMt71p1NtUbKs\nbdPFQyJSQp2fTu7ah60OuQ2K/JR3wH82Gz1gNT3x5afk/wwmVlPRNcgRoyXs\ncLQsXHew/b7GiuQMyVVRW0KsfxTe7fLfcbaoyfFn5Ydp35/LuDAsuOteRR5B\npNsO\r\n=3W9L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBu20DaaTfJBdsipTnga5cb62T+R7C2OIBa257vgLO0FAiBBIBF9+ctBzVMHj0fzIxG+5KZn2cfvKohvAjBOJcktZw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602683380-779ecceb.0_1602683480768_0.5712343030452602"},"_hasShrinkwrap":false},"2.21.1-next-1602683578-31aa321f.0":{"name":"@xdn/core","version":"2.21.1-next-1602683578-31aa321f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602683578-31aa321f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-yUsReMOdFso5yaAp8H9hfuVaWJlmZiYq5njm92QZ0xnM4F13VprxwosqV1j8h6hFnFQRFni9XCT/CW4gZwya2w==","shasum":"76115ecc8ace3eebe89980a66458fd68980f7e4d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602683578-31aa321f.0.tgz","fileCount":157,"unpackedSize":580926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhwM5CRA9TVsSAnZWagAAxVQP/R90QR9HnH622WggNwhI\n6jaFsottwUyqqqFO6nAd9/J7fINgawUYKH005vTZGqjmQZ1B52pBmC/MIokt\n+NpoGlA0gXvvP4CMCVd3Zb1BLY+88CMjh9biNKSRdLq1mg/xjZjU5FuOwYkz\nb62nbODLqOmaK8yTo/BEpWXjXeEKxayZFpmmsmLmFXaPBWkwrYyIxjtp19K+\nGffTqvxOoHBFsippaPkR2iIfrLJxP7ogm/cW5a/cqRqvpU2NaxYXyfDdwpRc\na4d333o+WBS/jAKDJz0UGZS1ZwLIxlANci+5E4TvtDD+VIu/N3kH6pKmZbVZ\nWe63Og6sVIniTKlhMAHbjXddxxSWTI+YR3ZfDdVH2h18OmN4WVlHNkJ2mvD3\nSWXBlX05/Jqe5Omk0FKHNLlKJxWOO1KDQY8tfve1kI9Slulyr49bzj8lT441\n8x7CGlOjXomPVctrFWWjXPcOSGBPuEaImOTgaqIQB+0hYS5g8lt6SgV4jgQw\nXSGqN0r1bZ9PZ3MsBdHSvqhWCHCYbSQegZ8lGP82Bp4pxQ+nAmmw6VeCx2KY\n23H0pzDSXO/pWNLsYxguGt5KhMB389UBVb3sVShzxTIyf9UeiOeRhyEFRZJK\njASFkD5DYV8VrNjPO17gEkJJMJwjziuEIuyUmItx9InWnzzBg6MfnxxGiDb8\nK/vZ\r\n=xXpj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDgvIapYJqrjppzb/FliEinbQ5c437x+gIvHde/iztt2AiBV7HmY4RZLDmAnuVIbpk1vkxVtHjPCcGdXM9uITjBwpQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602683578-31aa321f.0_1602683704520_0.8865993933567333"},"_hasShrinkwrap":false},"2.21.1-next-1602683709-ed563445.0":{"name":"@xdn/core","version":"2.21.1-next-1602683709-ed563445.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602683709-ed563445.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-q6w1iGN0WNRnrWkA0+L/kLGQmd6QoOTKMOqZshnF94i2oo2r7dxCKnVPWG/hQbQnLoaYf8i/FpEv68JcndN+2g==","shasum":"5c11af65832bc9cb1b824aadc614554dce679fd1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602683709-ed563445.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhwO2CRA9TVsSAnZWagAAn4cP/3uZBgQA2IahLNhZDwMD\nnQqYoF/MM1elDGjZZh3Kp0LJ3ELTfyyzgMTrj3FRE/6+SyWXwFgrxA49mTF4\n0O/N8h9dtVxJtPWkIrLlSb61608pMP9FBZH/fAuQrS8Q6E40PySI3XLGhNRW\nEsF1FP+y2zF5bTFkwa8alCg1qYk1/c9XyE4rINvVcLwE0qRA1EQseISB5t8M\ngNnPN7VlV/9Q21MmdildQXpk7E4x6//zyjRbGx8Llpr+zLdfAMXU03qcfFa/\n3/2PE0Y0lwWxmNJD0pIV2fZ9C4HlyKRY+Di7ZClPDG8b+c+ElWJXoqaBRn1+\nyNNG/XLYXEx/ddsAj0T/LozqNlNS4FowbRyDqK7EBSaVE44OKWAIvKEmDU0x\n4fplJnrB/jHvNCsC+z0kDAp3RFuV3A5cKmLO39GcV9XOjDP3d3PyA809ZtPM\nwI7OQh8xpaiyViHhU1uGgXL/V9UHFO3dzyIy51iWQxbWs/FO4VqrrCaJv6sv\ncJTYu3WDr2nOxjxKcFWi0GiZA7XN88+HDKLA72Bo6Z0NVH5D8u/vPuojlzQP\n3s02m0pz5K/DDj2ELyYZUGJwG8O5gZpm4XCAymP+GHTSQzj1XNzcxqOM4zaG\nfiM59VZmdyvvrx+FVkkptCBZsfLeCsuxdp7RWeuOk9xvjiZwLglzMKxCJpjL\nkOEO\r\n=UUK8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGMtPKiX7tgW4mmXJIyfNrtjjntI4zSxxes9ArM/+Y4iAiEA/WxzJIamOO2D1fnOBx7rM8ELF2xRCihjxS876zFPI44="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602683709-ed563445.0_1602683829947_0.7049045265587615"},"_hasShrinkwrap":false},"2.21.0":{"name":"@xdn/core","version":"2.21.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mfoDQP2qADSP2bh1b2OdEOoD0YUb34oNZ99plVqV7jSM1xBdGhjB5vXuo1mDh/bRSe+8Muwrx5ucixB8UCZjdQ==","shasum":"8c80fe5f123413f0c6c196d01f42e08bdb2c72c0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.0.tgz","fileCount":157,"unpackedSize":580779,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhwQACRA9TVsSAnZWagAAJNoP/0SA+FxUkrP7FCdoU6Ja\nOhtqpJN0Hrx7+L8qK8SuoHmGGWeeetsOnyHzvPmlWSYyS722VlnfvgPMtAY4\nCmE3DybMH1I93V86OfejxNjinN7zIvCdJ4tcYM96Dp3/7VnvPitPPA3P8jOm\nLfqTUUIRejNtyXyzc10nNCDJJTLX4kjrFmDxr618UoVnvi0wUuuJoworRVEi\njesStnVudlDgy9rulakqz67TDp5v0SsylQ8JEY/KoxXLqSlVOmsL+0Who2n4\nVRDD+NVACOUlgV8qVsnyKuhl1RRdCYGIHT11oRALYlCsIkpV28aLmQEdG2+A\noSXp0aeAjan4Bn8Zr4RzChXw5jpkE3jkrZPNCHG5du7G4VQh7h+4P2s8EPPi\nchX0riY3jBnaYNQOsp26imkPkmCBNu/V9VuwJw21EDnmrt7RtwbA6J79GAxw\noZtI7otvIb/3nDjunsCQy7SCIdVhziIEEtkXfMD9cPs+CAtJjM14kvWqbvh3\nPhGU+J5ScUUOHosh/6Oa6pYbmyjWPvBUzXy167U4g/zjd66nayq+R9YovGaW\nYk9Kz2qeb1iQrcZ/mQvrvHqjRmwKb4grQYuzXAD99lHFIdsmKsM1uq92Czti\niMNJGp5Z64UsUbDcIaTY1ZrMoY+mp9Rnt/+x8YBw+pknE8cVaJn31mPjcPFI\n5f+k\r\n=Jio5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGcJZNiy8yWNGZWI3eyD5PCld5Lh8Ks2wCpNyPML+7mAIhAL/oVo/V27FZ4hRq3WeeHZokqN1ZFAzkFCs+FpBlucP1"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.0_1602683903893_0.14423126936809472"},"_hasShrinkwrap":false},"2.21.1-next-1602684216-67ec788e.0":{"name":"@xdn/core","version":"2.21.1-next-1602684216-67ec788e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602684216-67ec788e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Q0t5N7JH25qG4gTXUfr4GNp+IjT2ASkgoA3cv28xVqnlWE0ADi2uEX6kj1Uils2QeFEKc+k2YuHcXgUWQKb9HA==","shasum":"d9855153c36ac6321c210bae3d54b6a368d3c7b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602684216-67ec788e.0.tgz","fileCount":163,"unpackedSize":594894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhwWnCRA9TVsSAnZWagAACywP/il0lYlA7yFYOEGEb/eG\n+NFGpSzEhIvOCqTHuFvJoZ/k2jccjKskF0NVYunrKlBuUoBAK6N6g+HW/R82\n+j95/4XWvRnU452r8MVkeu9M/yTdeJhxRyQ9KUvgxq3Lx0yf8N/sKzn9T4EL\n5qX6oI7vmMpBF79hyzUA68hYEbl7Cz7TDCJza2etpsrTGNWZM1E2U1/a+Dj1\n1UPqpT9wk/kX2JNzBDuTFO9KcTAFEbAl9CSQMa6QBxdj2vRaolaGkssnFnC7\ngLFDLwkKGhmMTaHl3a6BazO6qhVelH6q4AWsUMP+kTCjvmWwG+RykroKR1Y3\nZmRK8QRfS63FvO8obI49DhnGAGH2V/fiTEXEQvHetGukvPwc+qLuk2KU/9wX\nJMlGakh2+PVPKOSHIF26EaDHQ1BjHh9ol2PKFWhi6Z4jmvRqY+VKhjw53fAI\nyQXdV+o0w7PrTsOYJA9dB/9Dz4HAEo0/lMmIjq9sKL2C9ltpE+DFJ4uBMUUK\nHfHVIgAeJLW0YEILfqpx3M12l3Dl5IXDlaguxsVgvRXW4AW6PfPCAYErhjr8\n4ZW0jLodysrWKVgQm2LjBuQ9CsCfjdQ5wKqpcaiT9g47sgdOTRAD4NGhqnKh\nLtp/8WvoHpH3wAMLkbrLOyG6A9768ydc7TaW/JC4l+PMaekWhXwydc04VKqg\njVie\r\n=D2LU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC4b27u2om76k8n7Y27D8cxHr1detxAZF5TYnEmdSJgkAiAFW0UH0l3TicqMAkJxYSqs5IRo+CSdfZWr0l71bDL3QQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602684216-67ec788e.0_1602684326932_0.11708018427857159"},"_hasShrinkwrap":false},"2.21.1-next-1602685091-ead71e26.0":{"name":"@xdn/core","version":"2.21.1-next-1602685091-ead71e26.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602685091-ead71e26.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VDaYVkPsk8thLQ2HKGNgM55v1JEuTLElZjuENp4f0MHJ+2q/d/vD7X85J54/gHGdHPbrMja8tDwGH7tLX4I4lQ==","shasum":"92fd72e09d526bd51603c87a01c70344146c63f1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602685091-ead71e26.0.tgz","fileCount":163,"unpackedSize":594894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhwkdCRA9TVsSAnZWagAAr0sQAItkFVNSlELhDdEjY90Z\nVK/tBBnSZzPbEo+c81RQka3vNxXAFP7OwkCjMIcClTKG08g5X2el/sT3ROv5\nRVFw36FKfOu7vQUeBLXzP8s+q9luKgYmKase3itNqnUhptri7F1wgEBuUgR4\nziRIrOVfkpyFhEz3wzLW4wEvev8YcPyi51pe+jj2g5TODVy7aFWCcr138yWI\nMMrgoSoKijK2TCjkamu2xWmtPDu8vehy/jA6sbNZVSO/l/4cClnQtLOAzgDN\nq3NrbS2103HJICQBpBI7WbQ7lKsoWmsfOeZGiZyna2VO6tIx2RGYscJDj0kS\nn/A8QDQi75b4iY4Psk7kEfUvy0K0vL1F6OtET3FGut7FKHGVdzI2tUEEQ2iq\n6/MrGH+rljYQuxTG9/8zRD4f6/tqgKJZdS5fINp2XeutgWDnVbWmBjzKeS1g\nZEuYpTXQH1VaznmkYBY3mG//+/6Y5IZsdXbaHNvDBb5IWVRjARThvyj1aPxL\n2P6gzWoPRlHXN2AbxljKWmhYn+BHFtYrDczH+p8zv2bp8rCzW4nVhaX/K1hG\nijvscrnhWhG5BFQQaaPf86VHip/w1r6ltPbWKFHugYxfHqFWy4LmEL+05tGK\npjDYIc7BUx5XLEbL/LXu+wfp6lL/bhE/QIwkvdjxFq9oSVPtW2fu0FIxuZs2\n78Dr\r\n=DP/j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB+4KLtX3GW1HdPk9925r57rqeoFl6CvQDG0YmjTuOBHAiEA96jx0OFKhILAD8c8uFWT7SQ7G4b0GTqCFHQIvEhVvtw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602685091-ead71e26.0_1602685212894_0.8922094658741786"},"_hasShrinkwrap":false},"2.21.1-next-1602688109-b496b1ba.0":{"name":"@xdn/core","version":"2.21.1-next-1602688109-b496b1ba.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602688109-b496b1ba.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-s1mba+iXdNNeevLcKH/vW1BkAPnVfteJHrLsvAfi4m7F8pQNkKszwQnoeJrrweCGkZnjleK/+W32t0wD1CtJnA==","shasum":"d35154e43839a5aad47aabab0364e0c7241d1c44","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602688109-b496b1ba.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhxTgCRA9TVsSAnZWagAApzEP/j71XPwdAsZfodk6C3Fr\nqdCrMiYAGXAcDAH3nFIHV5iB7wikFGMcRrRxOhItsdW8LeFfJApr1miAXlgS\nuUb7NiU2Z3cGe7xOTfXhUo/nlyeE7t676UXoRs1+mX2BPLgWn1foEdrtBNaj\nJ46VQGyYC/G6yjOWCKWwCvK+EicoQxXWqBDTc44KnGjOBCw+82QLyIeGKd0G\nANrOlqvz3vW2E7H84YuVdyxMRsFq8Nqrk7209xl2UcbK5Hds1HQJofbh9qCo\nMugIlRG4Iw5PkaqHNKXl3ivWY++/CuuRZWESz1Rv0Jpt8k5dTC+VY71Aa8Wk\nZ/o0mCaewWJDP/fxqyOoOPnEFGTJQ6nUvksBqqJVWg1bspMIfhu3C1hFMxW3\nA8BH9uCLzFhTIzWh37/7HCf7Nre/H8gJaSWEsWdMWbP4UcNPM5uP/7TgkeAY\n9VoiehHuSK4Xzf5CBVSEhSiFnk8gdOCgw7TJWlYLbkA57PJ35UGg9T9xHPXh\nFvzfefVdOobPXXOb6g7FGnUq1g1K12OWWJEpacG1GV5Jg6J9GnrKWl31DqTp\nEfS0qiKHAeUDW6sI6G2WIJgxZPARO0dQU+zEFZdHTGh2uHHwES84UKlhHY3R\nJqqI++/V9TIhpUV2P1H+e6CArsFZ02hw6MotspEYUpU98TbT1y17JOSY3Liq\n81X5\r\n=DdF2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGPjZZSvLHe+rS3LUV9eo9vA1UaC89Enma1zz+7o0RC9AiBlbsKonIXhsgiiB66WnHFwmdTyc0qVNFQn5FYKmVD6Cw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602688109-b496b1ba.0_1602688223545_0.6000318189764431"},"_hasShrinkwrap":false},"2.21.1-next-1602690685-ead71e26.0":{"name":"@xdn/core","version":"2.21.1-next-1602690685-ead71e26.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602690685-ead71e26.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OxPa4G0tV57PC8K1m580UDAPgqSP69Y/uzpl/AIgBGjzrx8KyBzxVlQuHwAOppTK23IGrCvFBFVrhWJtqntziw==","shasum":"d335092a903aaa6d59c1b2a280252d43ebc13ab0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602690685-ead71e26.0.tgz","fileCount":163,"unpackedSize":594894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhx7vCRA9TVsSAnZWagAAN7cP/jxo8lS9nOuOzpEZJ57n\n3pOYO3qVavkM+0k7jTFP0z6xmrPui0p/Jpzp6fSLH0k707GIFdVXUn3uWN3+\n35LVLpKJRFXIvouU2BufklqrP6NoDd/yVd+C3jVENKudPhf2bS4d4u5yvF9+\nbujsdmKDJxBeSqQAXGC6/27TMQGcDM3SwlmxvGIvKyqCwpuCY0pH2jy96JZd\n8kvHip4M038luYibls/l/VEcJ2JLhj2fo9I5UMc+jVKOaoHLT0PA5c+jd6IH\nClV7Fc+hNZIKvvTp/8cQz0qv1oWESQCXB1Nkv0aW/uEBRpwOCh7iz+iECqcE\npSBQXHW8+hEHKoHt3DPlU/Tt/3hSdGV5LRyX6bQJd/oEVnT5KNFd3nxGZjbR\nx4B8ScYP+QFP9cmluI8wDFPVn6tr3Pru5bpSWgIAZcM/Sfrdn2Sn+QaEMy8W\nQEF02Z/SmJ01jRs6ykk/fYxkuJbIOiW/MDEAypG3owUdowiYzr/0M9PBVuJX\nmcvGCmrMXRDSEwepAJ3OESs4McuJPHbEEPrttCiIDjvVuPFcR2yFqtIosRrW\nkPN4Gm8Pv7IO54MrkELYT8BbOi031SlYYe95WKmLYXGr+G1LIdFuijcvnWyu\nEhgP5dVPer6dsgppI9M7yV9jsXpsEUvReARlXWATt2BgukyElRJZV/DF9RlG\nZ5Ft\r\n=PLTP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHTQ9a5jcp5UiKvLTmjQtWVq4uLVjHqMTO+8+2W0cRMAIhANV4aP212uyoza4GiKNp97Dw/yuLdJFyi/AhcvETiRmU"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602690685-ead71e26.0_1602690799200_0.8887852017358822"},"_hasShrinkwrap":false},"2.21.1-next-1602705044-e7a28f6b.0":{"name":"@xdn/core","version":"2.21.1-next-1602705044-e7a28f6b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602705044-e7a28f6b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-eAWeyh0LWdQuvbpgAdFIjoE1tZ2V7bk+Rp4Ud+VtVkOdltCrfbaGhIDHECRk3Y08EnxEf16QUs6+Q5qFCS+lSg==","shasum":"5ad58a5cb7e98412ce390460819a09856788e72c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602705044-e7a28f6b.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfh1cHCRA9TVsSAnZWagAAE4gP/3RShSftNkGtAi2ZLX6Y\nlVk8deR/sjHdALBDpOP7hNJESw1oXqm4BZmOkdB0iPb13ThtC8syyyxkQJbk\nWydyx1TVR7ZbVnT/zNyt3/VMoNfv7XlU0LcMhRVLVS3POh+X5oveMH3AcWke\nMe6WLOSh+KLagN95hIlaBOTwwbT3u4I3mOfBL+z9W5wOPNNfCrnUy7Ns9P8Z\nRlyV+SDbpdcLShAMZGLKqSKV4WBEMGmSoy7xKrCtewn2m6cz1muqoGmaMd0u\nzrTB8G9shA0plSBa+SfxIkzmXMykYiFg3/yPw13IBzHfTV371Y2HXl+s69JH\nzfjEHrlZlNuyaQ4ObcJQtYwUuFp1wA88N0l0aWhPa4edr/soFYRtX+YQZx4B\ne5+AR+QSBpYPNKQ9YIPokRJW9sTH9ZiTK8eEN2SNVQWRmw9y5xY5GZXv92Kr\nGdO9m2IZgTHqW629wYLWaMQfNVttRzUEUBeE+I4Of45GKcPsmIkvPBx7XqW9\n+b98YXoGefDjBLvMz9FuyGLFB+3UTtkVNxZDcjoM2DyKT2kaAzYcv8xlIX99\n2XY3WKonSEvxnh7P1CpN16A4Zvk7pxrR2pwt+jbVvzPOzmuf7qfGqW6lUIhu\nqfeuP0YIvF1BhiV79S+3VPcGK9Rnrr5Dz8QW/CzxLGpJBlX/V6ktce//u9NB\nNkL1\r\n=s5CI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0g9+XBNIS57yj561OKhRiHACiFjdPPpgJ6ydacMI61gIgCI404KtIanp1drOyw08Do4C8TCBY5O9gEqHF4AhSzFg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602705044-e7a28f6b.0_1602705159264_0.027200705046033224"},"_hasShrinkwrap":false},"2.21.1-next-1602725475-326862c4.0":{"name":"@xdn/core","version":"2.21.1-next-1602725475-326862c4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602725475-326862c4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tmeAQQUPVwibvm44uY4uQ1A3UltcbUbmMxbn3+HjNDo6QfXK3Jx+YV012Tc+QcaXFYiuV1SLsVKlHuyZCdZIVQ==","shasum":"3c2092c2b84074c854a7a1385cc3e2367ca0a011","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602725475-326862c4.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfh6bOCRA9TVsSAnZWagAAokwQAJoTUU+SMC9MepU6tcTC\n+rN0cwDhISheOcWu18bywtrJJAZYxOn7erB06XuRBaF5GjTGo1rcnftyOHT4\ncAoooUrjMchRiFNgNJR37lq3Xj3m63uHGLYYYerxPAqKtap17qsToCnlofmY\nCsVwnSQXpXTWxj3SYAWY7bXEckyEpMz2pcLnJUBU72HmFNlCTLqt/LTVeg5d\nZquK8pbsuzZAjS35WW7ByU2h+P9AkVgDHBQB7IZ18cbgImRCt31iG1vDOvbi\ncrxzntkQNwUKd9/5q8x9QgJXSU+/WPIKiRsyB6i6aqPRCHKxCqAdb/KLxsIP\nBxqFX2/c+9sMc/ooSy11L/YteD2WodxbpDizvMIoBOdunSoZSsadE/HnYfyO\nZrHyKpXEnzxvn1rgRNQvPD6nCA10kuHLsX4CBt3skdVK/GoOW3P8vFCl8zc0\n8v38MyWGSGrGa2Bd5bSZxKz5qQXrxCVgQSG0vJt3cLLwBtoie8z3sTIf3LwF\nntJf67rLy/CRv7p0LbbBbbobrFRUePWfXPqQ18IQ5f9FNNaQHSFoO1yRhYCl\nk0iSleEgMN6S81b1XDoncyU8G8b07McIRTkDk7nWxzQerqYJIL5CSMTTnYQ2\ncPNbVWJ9Ha4Ee9HGw9jN9yb+51FP5Lk1Gme49DqrYi9MbV3CYuWNL0xnDSxi\ncSSe\r\n=BL9M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNIkPCfmPqwZ4miGlHx3bbuyvWuvxNnnv3CfQeKKaB1AiB9gRFZ4PjLkdXV02wQnji2jLpcAAfi06lI2E9OKRXyMQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602725475-326862c4.0_1602725581688_0.8075266966079411"},"_hasShrinkwrap":false},"2.21.1-next-1602729949-f2d00f21.0":{"name":"@xdn/core","version":"2.21.1-next-1602729949-f2d00f21.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602729949-f2d00f21.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-D+reY17nBWfUrCqZmqUuV/m2SQvCm1HT4hlewTCgwK7HYPydnor8oKQzBBzw678GYrqzYImMjut+tmQ2dwIxRQ==","shasum":"af85504e209d0d5d4db7a1ed8c40547ca658ed35","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602729949-f2d00f21.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfh7hOCRA9TVsSAnZWagAAR98P/iFOwgaA3n/h6J1UVNyE\nfJMV/GOf/UY6f0jF9hp1pwMqNMEN4ESo0lqTaojota8alQNm9pjzI88wz7uy\n8oyL5BahBrrrtLcSXUAYGwKGsh/MTZ3ZFoV0yKb3ojcGndKp7W88fjbxJ3lC\ndhpdnrqEBkgHfYAkobAN8P/d7UM5vxc1IfsIrvgtCHiR5K+ZnSAqz9ssEEJN\nKYLVdhfrWc+EDXmiopN0pm1DTG2TWelwAC5dkXjG5skDaTYCYo5mt1Ttwlgf\n5gd9i/D+2n2oqZVcNmIdVHN1XsYTMCy5hBaIKx6Mbyto01XmM7+WYr37cUjd\nHm3UQiobmGp+SReNphcdUKimhBjso8yuczVhdzrglCBSdw1E9H+u2dxmYLXI\nobtNAcqueklC89uGBRFbZ87W41tnspN5kxo4SZFVf+aCD2v9am1ACM5H0gyw\nEanhvvILkrPK6A+1/aaYRykGmdj43i6IUu4W2BbhchlITt8ADvHAhjxmVrpl\na0X3MQokf6DwMB4B5PjF7Ft2OFkXMnS5vSiaNy9SSLBwygfQDsl1TLgP3drn\nvrt63n89L6bqPW1L88I5ImIUEzdMhQvEP2C2eQxHvSj8azqMo/bUp4rigNfI\neCKdPT3p0PWKgDbY1Y+NIkKTHEqPubGenae3Crywb8WuDeM6J4/7pUekTUNl\ng/s8\r\n=BECt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYbR1ZfZKg7ffs1NKXnYtwhZfgJjeRnR2zZLtnhNN/sAIhAJBXvmLGy51ul0JP/hgAz5SULAPpjECUYgi1xRqNzkPM"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602729949-f2d00f21.0_1602730062480_0.7362351268021698"},"_hasShrinkwrap":false},"2.21.1-next-1602730542-54dfad5f.0":{"name":"@xdn/core","version":"2.21.1-next-1602730542-54dfad5f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602730542-54dfad5f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-e1S3eYRy07ePHNnk8Pf+efbfg1xbVQL3USyOa0vOcezOJskvhcDWNP9I0m8elNOkN3IoDkYeATpBBK6C3HVEIg==","shasum":"baa397cde4e3e30d162a67f92b48ccf42cfcadf2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602730542-54dfad5f.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfh7qcCRA9TVsSAnZWagAAyD4P/2jxKSw4Jidmx1pVma9S\n9ooKbZ+xYca6ECK7CkPt2Ftdp9sePyURjKCdaPp3dzeCISdPBGNYrJl2KWk8\n6ew65GNq3cB+bo1UmVWi9Dzo0AmNZssMlzJElqgybHcXNYkDwiGEf9I/EA/h\nQqvVh/kW9y4hnmzAMiJSUTNPY5A4e4/TT2rOiIIbIoAKRaTwsfyC99E4tmkg\njGgfq0ElgVdSoCGl4ExjBmUcDj+fTHfbjx4iLm+dNhFjSQGr/EXWAPUofUfs\neq6PgZxf7GwrPL0r80O7CuQN8iYCqjdfhJGZcj7DyWRCiYCBnd1zIEclLcwR\nfFAmg5Wnx+DhJNiCbn9aDi1+SL+/LJVgSbdhzZ4Has/RLZ4V+12vBUj2sNEa\n052pQ3Hnriwk4IGnGopwHAa/LJVcYEyig4CUh9mN0xmtccyjSOqxkCKsb2Bd\ndpsT5GS3H+3yioWucwPhiVSTCBPCw7Kd5UXrHCb5D4zDyylN1AcUbIeGNEI+\nf7nSFQdWwZ6TcNG1WRu0ox+7OTgKg7zEsQ3dV7zUsan/cgIvYMrW6j4EDMmJ\ngitMb0KSCTl/hBW/qm79F33Ngv28arEDUpnrdH69fUYSWq88DbeGMlDXU1H4\nrcJCSHJkkwpzE5QJz0BN3hvD+SLjET1FR6nfq8NFu4Tfw8Kk+/6c8BbZksyp\n+UoN\r\n=qi53\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUbSK7NnBQhQJEr5QiUZnkop6/pDAVVLxdNmDUlW5u6QIgcgYTeCFM3od8X9JHcymqsSa4aOSDOcwXnZotXOsKfKQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602730542-54dfad5f.0_1602730652233_0.3568338569615579"},"_hasShrinkwrap":false},"2.21.1-next-1602730582-c3286239.0":{"name":"@xdn/core","version":"2.21.1-next-1602730582-c3286239.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602730582-c3286239.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JDeQFQvgqeonVFlM9fYPnDJCfZGaqR/aLcy1cgfRNMZCUvRM6aobQRemt6FcJwuAku5iRBwp+258cJnHJf9NBA==","shasum":"25ca334790409abf0665a0af46a0e192b7c1148f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602730582-c3286239.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfh7rECRA9TVsSAnZWagAAy48P/25FwAHgvuEkMt/ZyvHy\n+Q+9Yewen22w0DfszE28bBz/i/ucVM8TWKvsBguISLlPDLbTsw07+LCNBCPc\nSPbBQy/qhXSKwM/EA4DWdOpF5msL8ppsic3C7u4B4LTPsPrPQqLm+P5itIF8\nm0BUP/1Bvqwr2O1QAMTAzqR09Gox1aWzQGzIMwGqyncOcAXQx6zVDKk+DH5/\noWmdaBDLn8WextwrjOYiKVakG6EGTBD+NNaHbEtLGam/sCCAP88/r7nTdWJE\nYXyD1LRGqCRX3DCZIDJyK3D/k52vSBu2PRHoJl/tJ/ASgnLDknRjVxVtBIFG\n27BG+EsdKAFM1uAoGQgqlP1HAhZF+RcSC5CdYg6PtmicCQxfyp/ldyKfRK7t\n5SSsji9DwQz9Yv847YndAuE3Ir2U6SqtjilU/zOtirLcd/BHcMV2tkHGR+CQ\n9XGwKjw9cqrkxipvCoj7k526JFCCKgcn3AFfrkwBKDbMZky/483kWWCUFRxT\n7a+OTJLFR9z4SGYLyOY/6afqEGRYc1LzRwRJ0ZZDMcZkajDB+2gADwML+lvL\n9wO5CjqJNBLNU1/AZX3e8035x3cTnQmkHYA0blDeOXH6Nn4czwQcgTP5B+Bz\nIuGNl8No9aM8yuHIm0okxV3DOzr2GXwcwyvC3ejWreob6GB2PTz6dShLjTXI\n08T2\r\n=+9VT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICH5e4eLO4xaHGBrQK7V/Ac75Pjf5LR5X6ZXbztm8hC9AiAmW2/wrpy/+0Rb5d7gsdP9qBu/xDZRvr95x3GyHh8/mQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602730582-c3286239.0_1602730692182_0.7056250896114531"},"_hasShrinkwrap":false},"2.21.1-next-1602760091-9dff029d.0":{"name":"@xdn/core","version":"2.21.1-next-1602760091-9dff029d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602760091-9dff029d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2o6IAL2FAqU/vFOYiULLAqKvcto5m0tzE3AwweOSjnlv4stVXVmG/QL8IkgjmumrYkDSP14Dqj03Y2rddicG6g==","shasum":"1934bca2bfdb536f70466273611523ff2ccec74a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602760091-9dff029d.0.tgz","fileCount":157,"unpackedSize":585019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiC4UCRA9TVsSAnZWagAAcDkP/3CHcZC2m4ciILibYZ7a\nsST3O2oAYtcYUivTzvIiiFkYSRyMB6MTrmUYjU/YVA0ONVoPAclFDV1BMT9s\nWPPXlgMAd3E9I2xvEBlnNSqZtAnPCociu1yJREAuhRKEq/PMEv0E2IxuaYg7\nXGMlojhpeStU4c3ea6WItQ8m4Ru8KXStuk2qr2bwiuZGDgxbBauepYKAHNM7\nmljPjJNDL7kq3AbNyrzQ1g/1DpL3IR8yCarStqyNjZPmQt+w1Rz1gaLrpXBO\nD1j9m+uul9rsT1E+fvQs5q4ZXsC8mqA304g6Cb++SA5HEOZeB8xvtpHVDf1L\nJ8hq0k2VJe1vAMbIAaNtBohN371zEQHm/0F5wE8H4IU0gFvrKJJXL2iDB95j\nZj+K9+qfi0GHPBgFYS4CLj+pqspoiAWtKuj9UwRwfzVjzSG12FGhatJdUkJn\nbs6e3b9oS8sYrcr5UaUhi0WzPBd+Iwz2yiqjnvBV03D/1HMtwR0BbLOM5+lR\nSFcwIYvEFYiK7j0BP0SXNCnkVvtQ/DGmzzTBZJgX/EpoZyOy6WMIBnLQzYVV\n1PY8VfvNFmXJ44xe+J5IsEALO4+CsjmpG73XifEgd6r9P00LBgV6TKf7btJ8\nACfcAugEo5pXc7Z1ZOLVlcl9ZeqPYPXIbRkreJxbwXe9y4Y+Q8eO9Vhu1onB\nv273\r\n=uecn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDaWzVP+j4PcJ5zJqHo41LvSP7yZVY4rrUOVc+6xepoNAiEAweS/o3kbtJKKl4IuFf/mG8Db7O+Li4xvqexqrl9e7bw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602760091-9dff029d.0_1602760212039_0.8442482939815561"},"_hasShrinkwrap":false},"2.21.1-next-1602762356-9c47bf03.0":{"name":"@xdn/core","version":"2.21.1-next-1602762356-9c47bf03.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602762356-9c47bf03.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YrQAmyGQ6bcy2VvmLWIrr90fSWZo+tIHc5KJiwuz8OU8USIl7cIpyW1eTsZ4pDF8PKtrHRZM21NJ4YVrecsz4w==","shasum":"87373d3b3574462bb51153f1599ca5e570ba8600","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602762356-9c47bf03.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiDbeCRA9TVsSAnZWagAAszIQAJ4DMeZLKkG9Mi3GdQ5I\n3IlI0KCGlirRaVIpBPVMW4iWnXRN4edBUgMtvqu6ZYo7Np6o8ZhgAl3f1xmz\nt5EfZjHRwEJUaaFuNMDZkkuiIY9883uVIpL04ZfstGwOpA9DfHblWJ7izsYh\nLBA1kqHak+CRZBPGFvxihjjrxGyV/R6gcYSoUffyXaoalhaeneSreu56wOnY\nqyDBw3T3/H0Ml4xI1Vcoj5cnLoU9wuXiljc11BCF23sQiSvrQe9X8xSXhMHi\n8DtWRQC9sk8DO09xgWPesCJO5EGh/tad2W709ZfKjhyQEoUJY/gsxnVsrKnE\nHdDzEXIOuAAEQwMJ3bLhp3xeoZX+1EZLe/xEa8uNYLZf6TCCvq/kXff9o8NY\noPJIFizRACjMISmX/CKdcNTwVz0G4MUn31J9JDmGeKIefaZ/w0f/8DcZdAdY\nvWWx6qmSvwft5CdxwXp/1hyocQtgo2Z/5+kFXRY3pp3wG/aqcE1hiZiMCvb+\n2ncOGybernRqa5uH2gNu94WCA3K5SD6qj1uxxSBKsGodU3oi+4B/pKMvw4zP\nH5fGPIS2A1RCG/4Zbeyj4MHjDc5yBkWmdbJkuMub4WIhBvc+lxhzIcnTV1A2\nxC2V8QGUgp2K3orjwHKGrgvINBysZtu5rzoWHS0fI5j4ZNMkFXc8SDr2tQa3\nBPk6\r\n=pAmR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA9mJz8nil2vO+X4xdHz+aGIBXGrOImT1yzxeI9Dan4qAiAXOrjvowhr+YpIA4g6ynnZPU+jawzAPkut8IvW1wRySw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602762356-9c47bf03.0_1602762461582_0.9088321948826106"},"_hasShrinkwrap":false},"2.21.1-next-1602763542-9c47bf03.0":{"name":"@xdn/core","version":"2.21.1-next-1602763542-9c47bf03.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602763542-9c47bf03.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nwQ3J6Mxjzk6fl1jOWk7V/mMn2lLondxmbKLX76s5UVR70SEzmzfCDSTIDwq8GC8Tr4hMF4keW2ql5ToGeBFZw==","shasum":"d1b164aac0d6bbe84fb1db98dc807f2d2b2c7793","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602763542-9c47bf03.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiDuLCRA9TVsSAnZWagAAigcP/jdBsaFYAIoQcpEVfPie\nbGF5hcOlmMs+YuLdmFIKmpbmiE4WQnDoDI8/dShLdeNKmD0EFuXiJIysZLvd\n0Qvi+Na+FLQ8OUwFNF8rtgpXlze5EpqtlZM3Q9GHNx/ul3PEdsk5+ApqpEhi\nuUNdSyOQm/cvOV//SkLusZjVt7mQcEP1ZzdB3sxTDcowx5QFRa4hR6Uz83y2\nKDqElzI3IFIbs7YrS1VdiuhmUrmxoBxuGI4QPOxLE2SKp1ZYJjdZieOuVKMU\nURXuQkcys8B5SqPqjc9fKPjB8pwMy1LxZvEzx67Ooc67y1ZlvtrfwZ8MHg1c\nAN1t3eLAoVd3LyA87Fm+6eM1St//0LpE/WTp9JoK2SlDms8SUcwfOXE96Y4q\nK9fbzmGO4kmvfixFghD+suJD+Fm9do0t0IRAPYX8+REg5Bjuvy1OHL8JMgDw\nD4zBKn4MRHqPNeIxRorGrcH06HdFFK9vTmFHdWkLi2GDnrf1ccOQ+RGQEpZD\nurNamod/7MB/4TivUuvFeswRlabf8rSdOUo4CaXU/XW3cK7z2ICNGmwJkKr1\n+1Um70FPu60yDeWujCvlGRhflutwaEav/28YXLXEO96RVx+YoLzLBHA3hUvw\ns9YQYZMgokj2wYOBD4I/BnjMkXEsFB4jEjnbQQhbSEvfkYYmg+LjqlBOGi/8\nbH5Y\r\n=zvYl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBZ+BtDXLbBpTw+3L0jJtoJfdfUiAoUyvY0D93Ll1hE8AiEAtzO7MGTxEbc7Qx0fDh7QWwNL+L4k4g/qRDtrP51Q6PA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602763542-9c47bf03.0_1602763659337_0.15065981253587468"},"_hasShrinkwrap":false},"2.21.1-next-1602764732-9c47bf03.0":{"name":"@xdn/core","version":"2.21.1-next-1602764732-9c47bf03.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602764732-9c47bf03.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-iNogjXP/A/msOGYVRV0Qk4nbogAo7W+b35R2vKIj6db0eZaU673VgmkFuIK6hDq+hFs0iyH/frMkG1ZQp0vXeA==","shasum":"8aae08b9019e4d17c281bb550edc6f89d57a6cd6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602764732-9c47bf03.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiEArCRA9TVsSAnZWagAALx4QAINYaqtYAkfH4RCBWYM4\nok53dyyBZFWTFugTr0poaxjFxH5zwqoNgKvrRB3rISwiaD1He2iJ4a9v/2SA\nldQxRCy8m6yA+qTbPig9bnGEbppRCtQCpB+bszBvTCdLAXaf71OkaaENj8BT\nlaUb4gxTdFwRsJJykbWFlwgQfQpwdgU9vO+rGh1BkZHa4Xo/gr9HudjsMxoi\nXo9rqbG9QnazMEZSjB7J9fjjCC2cE2MPH2TwGElB1S4Gwzeij661x/rIxn1l\nLENAaSQFycsAL4FssIWBjVB5dO6h34QRP/xWOZ1c0naenVifVmdmv9hAHTxD\nSDfxgnUeOGAWZbhoKFbHnPUDWk9Sv+9sddSNNqZQ7AVUIVNTqudxM2+I3H8d\noq3ugD2T7tU0yyZOyUQeSOOofPietvUFkQH5F9zliyixlD+al4BU8wRqHY+0\nPOFB00pQ43AHFwL9HelhUGdusbQ9TCH8YOOFyOjb6tsQNLMY1hgQUxv7H+Is\nisjTCPf58yDhtEFTj6XFULCny25M9Cwv+b/MnyRI/MBe/4N4GXG8mPflIacx\nZsjoVgEW5U3YckXLXzQSGJk44kdUP6uvxjn8FeGOHLFz2rSEpWMUAs2lUOq7\nEIpPE+JkweV8sMMRk+3k+5kssX9a2Eb39GEn5JMq14UFpLuBG78ER456e246\nuHSV\r\n=PWWT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEq5To2L9i2kmkT2MUslHTVPmmWLy0cTpjvBF6jvZNDNAiBLrKdAyxg9bmMn6g7IjJIfBLuz94TletXywztOuvptJw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602764732-9c47bf03.0_1602764842521_0.20931044648801356"},"_hasShrinkwrap":false},"2.21.1-next-1602767287-9c47bf03.0":{"name":"@xdn/core","version":"2.21.1-next-1602767287-9c47bf03.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602767287-9c47bf03.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hG+jmxBRVcnSrjxj/9n6McVjNGPHSQ2d8MnoFdfvr4rW8QlUISIsilCIJ3RqY3vtS6s0sYZj6ufDOjsGWtQ3Sw==","shasum":"ebbcdcaa54e1a79206af0da7545de350b8fc0e7b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602767287-9c47bf03.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiEosCRA9TVsSAnZWagAAbkwP/10IBKpcYNsP2TpbiogR\nLKHK8o14vWMNLtYz7xXVNPJYu8D8hmkzf7b/x7efsoQ9GmAA8u/GpP/wsL2t\nxB8oySny7BBUR1SioQpW/ffRrdTgh6hiJmXbG9oBMAm+FCz+D5E9/xU2qimY\nocwqwg4I/Hahzn9HbOuKncUZxeVwpjveghsXgNuEww6OkZ9Edl6ORIeEkV4C\nFyRCf/p1MWVDQlSFXTw34iWXiZFvgwxlcQ9gW8W6P2y6ZNtA2dsRM6MAk8We\n8tSDNVB09lH/+tCBmuiOz+q7a1cxJMgI2pYsYiBMtIjwlu8kUloYxMEkHZJs\nhI9GHjhnaGAIqfs3HRnhVYm4gDpCXkWabI1+1BfTr+0YwQP+/0xDXcgaUg6S\nOre640WrnqIBIx+2Do4xOoDEiM2p8Bl1gk+HzkbyM7SvzMJ464RFBamTOxe2\nMfxUL+sKT3QI9d3uznGbQwu79SiRPuBymv43Sda+fLQvSd35Y4ZXmnV55s9v\nxEj8HPqlH6/xBoxUwBU3uj1Vg9eLxzWOt2Q0Ohl3YkZQkvdPR7fngiFPKOrE\nCRQdsfljqa2JmatedD5uxc8D0vMQ1e5UcKeAFg+8sBFK0ilRhW+Z+TxoylCx\nEhuSRaCi+Avcpx0sF6ziVvtkKCROm++HWVOTXrxF444Non9GVcdn31/Vp1BL\nUhHG\r\n=Xrxs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDM5jBpsf5uD8zGRBIORPzrWdL7y3nyGC3qZFufZoLVDAIgNttmiuuzyVzeaJNVEnOCXB7P39D7wDi9RjenMNxisnA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602767287-9c47bf03.0_1602767404086_0.5583241109074906"},"_hasShrinkwrap":false},"2.21.1-next-1602769664-9c47bf03.0":{"name":"@xdn/core","version":"2.21.1-next-1602769664-9c47bf03.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602769664-9c47bf03.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2APldYeAnYh93EjfmNttlyiVIKvckhEOk0G2/wxkbP85mPpnCM43u1eoGviRvb1V3zNuQOcjrYXVeLH63mUChw==","shasum":"d86c9286cb14de38e3d6fb25bf5316c2aa980b0b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602769664-9c47bf03.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiFNvCRA9TVsSAnZWagAA5CQP/iuy1CFy3S580E6Y93oJ\nOJwLls1JKxC/m7jXf10sQ7PU2W1S24+3zMbnGQwuCQqdkJ5GCcSxmErfXKJ9\nlCUECBdWk6w4iAPR/p5N7ZEf/Pl/+ImBkLi9QRGkpchLiubqZhCvquCv7fvs\nWHOdYFaEe4p2p60VYP+PF2eJoARaWq37SA9f/Uxy/x4bbSQIk0ivfjjf9eJE\nZ7Tnt8vHhKbtKwX0z34lk2LA/rNx2ZKv7hZT+ZPcyS3mSrNM6sP56U7QaxiF\nw30kReWiy/zZtUjEXDQDtHbKiLrejTuBiGEAve70YHECh5BkrHZN0EHsrmUj\nXRfgJXLciAubFUBVAOSCzUaFsigrpEOnEmAzziElwcRfVo24KeL8+5Tnplge\nlffAALhYJPYkUpyZNARQupT6x+r2mUgOCJS6i9CzgKf/1/kj3FhDjHzVgO+e\nN9PSJzYFLvWIZ5nE5ykgjvu7GhkoBeZDr4wmPGB3Lnx8nuGVGt/fh0P6wgid\nYRKLrlKle57CoV6/pbMyzl2cqBFcx/f58GMhM9bRbwSLTSYMRIfT6QcHpp7q\nt0aaVll8axllWkMIM7pspxopprfruOafreht5AWxryKec83/4UngAm/PQO0h\nVQzb6fMzEv9IAM8I0h4I09AATDFe2v/ZIJydGeJTyDq9uEbsNlsc1nDw4hjm\n7q0J\r\n=K6TI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE+byvwHQ68pxrDt2/nlNBaHzwGWv+o/Fh2C7IntSRIcAiEAoP3fvZLRD+Cysz9b21P2bKtBBGqPNGXJzJgO574ZRLQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602769664-9c47bf03.0_1602769775019_0.9053743078953695"},"_hasShrinkwrap":false},"2.21.1-next-1602776559-bfd7427b.0":{"name":"@xdn/core","version":"2.21.1-next-1602776559-bfd7427b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602776559-bfd7427b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6aEO3yrtV4U+hrxhZiKI2i8Z/wbYb8AUtTyUtVlzh29+UJUVv3Mi/6m7bJqikdY5sT1/dwzNS+yDaIotOZ5ylg==","shasum":"30dcd07ecb4ca8ce84aac9e5f6ea69c0107decc2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602776559-bfd7427b.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiG5cCRA9TVsSAnZWagAAb1UP/jzj3wfF9jfQ6p6J68Fi\nYWV9Eb4/zmBxcshbAzNNL/gmzwv2EKGUVpcDC2th0WZ+7EibVXx26HsbvZD3\nHtNOTiVi8tyiRwJyfHnFRA8UFwYlnGdnkEz5fw0+pp0zEoxpIRzV2rskrtgP\nRfzBtC3XEaVs37CJRY3mS3DR19b2eqiSqQ/gmnhon6qEdCju/5RtPiPAhVCe\n004IU6ctYCJL/f4ak/RZfsz/AQOAtdjhSaQqcWN3QLyHk5f3pgsI/E4oc4jp\nmXR5iizzBuoUk3lSa/EUfVeyCF3H/Kf5jxANtFHSny0TnvBRx+Hq4sx2hmIT\na9aN3EeDXS+x9GpOhzKx8UBN5HUnIcuqJT4yuEnv+MipVOhadYS8tlmbTjBC\nOxZlNkvxbMRQPbfgLRuD85NizqhU/akZKk4Ua+9abqjmbsSpIoZPqwUBFmcl\nM1Cr8bPgSgbl7GqK4hQfrB1FKxTCQzmguIDtUld9Wr4umzJiM9bQD2mJgYwI\nfiA9QOQSv3laKTiJCutT7c6xF7rghLNJP7tp67Y20879V5Kxm4RSQEB5Yxu8\nM5/x8d53A8a9+quGXiD7OfBBqYk5MGyX3IjgBv/7Sei/X5QhIHbO2cUZ2XbE\nOfjysstIfZY96VDxTS7f1PwzlsOF9sio266QdQ6kuaaBQueY1qf4psTqb/ZH\nJTyE\r\n=MTE4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzGrIAxfXQTzWc096/AZAqUV8kaBR1Yvv7LEcuaZBvVQIgcdAhTcBDoszMYPvieQAw/xPPlArW/LXFFK2fs5ewATk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602776559-bfd7427b.0_1602776667650_0.16826233707693272"},"_hasShrinkwrap":false},"2.21.1-next-1602777435-bfd7427b.0":{"name":"@xdn/core","version":"2.21.1-next-1602777435-bfd7427b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602777435-bfd7427b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Bj2EWTJrHNuHB+/8PPPVPbTGt/KsiNALNGH9MdmBWrtNxyb9xde9gyOx4LMJSOb/bYQ7hN8Dtx/JYyuckZPUuw==","shasum":"1fd152cc9e66ee1c314ae2d20f2fc8cdf2219705","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602777435-bfd7427b.0.tgz","fileCount":157,"unpackedSize":580833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiHG4CRA9TVsSAnZWagAAsNIP/ipi9N9fTez1+ST1/EcA\noQU0QteAkSkFYwfdMttRF/OcttE8ckizuW4Vv0o95lPrcHZtLXwLFjle1b5R\nRG86Imafma4zT0BWwxfWzqyecy5H8rPCxwGqGRi3ba0GiH1d/M5eg60ediaV\n6a0qTm6WYaiuMhf3INCCDvUlcqkbo+fY3bawGLXnuyIvkKvdRG0DmMSDAddS\nxVyLGlEW/RnJxy6/NFVMjBjbGS4X+EInRF7OSO6ZwuQYGtyz1u8iXWUSsgUV\nGlw3gnGVECDxVSkIiLun/V2FOZQvktfWiGeAtB3n/gSQOKOX2WkdSnt2g9aa\n/ltsxP2n4egHL6IjljcnxanOs5/DBHbYn/odrMnHJvFOreto3wKLPhYDFiAM\naeGlT1nqdG6IggQHnoVhx6OHTdSGacv979xdHTxVsut+H/NhN7vSOBGemOXw\numi2h5El4aNv15AB1X1XHYxUT3hbUQAptZhvK/vz93dIIgWZunVm4aDK1KEN\nxepWFROEq1/gKGDgjmgbNC8bpDGJLzbd9i1KbxQ1KTtS4SSNPINemhird9p7\n38zROaHlkEx+i6XEXgk/rDQ6S5NLNsZy9/g3uAysjPGqBurU0H5mG0FAcLKQ\n7SE/oTd2WeU16mOPG+m/sx5POri8Adx25FfS7Il8DBYCfimSoAkRBeycYkRF\n4rZS\r\n=fp2L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5RbbYU+2iuYFboyeoVO2KTjs/0PNRRLcDRH7w4ym0DgIhAKuVXwySQ6DyWLnElp0A4nf4tK9KMpr595m0laO2FGsX"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602777435-bfd7427b.0_1602777528433_0.9169018680745491"},"_hasShrinkwrap":false},"2.21.1-next-1602804497-9088a61d.0":{"name":"@xdn/core","version":"2.21.1-next-1602804497-9088a61d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602804497-9088a61d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gQofMQdeCh9G+CBae2AEh/M4mWCqqIFXcQGfdPkjWEtY9N25opnM5GitzKI2aAMpLZBUHSnRcHtJwb64aKbpvg==","shasum":"dddbf274b0b041fce120b58f5c74a7c9ea711170","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602804497-9088a61d.0.tgz","fileCount":157,"unpackedSize":586040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiNuTCRA9TVsSAnZWagAAS3UP/2Qt/OjwbF+TgDPyOcCH\nZkNf40LrIfM5g1/BIZbS048gUmk7RjGBGieNjYUsBNwhTod+TG4i8ikYOqUU\njPUTaV0zD9BkjX+uKhAe9RKG3nJr4ElE+fY3kXyBtjQwFjNLQ8qmVYoV9cYn\nLTnDMDM4Ms29eU2UeQxRsocKgbr88ZxESVCPuJLn4LrZ/wjFJK9SW15oNLE+\nCpk1bzXJlLRQMuD2NllODpwZoQSzLbQJJYk/uEsFdVUOnzif9T60T4rr7Xs2\nb6WAKcTpBUXJ6/d1EI7IuJvtPNHUZiDKSHVBSWS0UzzmktsCZzUI0F7f0PZH\nE8v66lgBCMTUSKGx+nKvBCt0yBtN/1rDP9n8GMbA/hAidzJjq/4XxMXO4jg/\nwZK5Nk/gkuYXU6Wv7t8ixh1dFAt6VQ0jj18nNs3y3LXvIfqR3fsNg5RehB2F\n3RahMV0g3ybtAV98rv5JnkWcvHYCTc3xRxzDeroC+2d5ztc+UQ9q/Afgsb86\nD2JvhShDphgH/UM/PQkYXe78dOjQPnrdqL+mwESwHc1e8vcPeCjQgcHEe+Vm\nGQJO0unUaf/KY9yf5xiEUDAkmV+axeaaQcjMhjGkyDHwAN5Ph++bTH3bmyX/\nW8I6BZ7dX+6VofI+5Z28I+v+Wxs4nr9zIPc7O95C+YNcB1L083n3CE38VzZ8\nrJS2\r\n=lM7C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAek2/tn/xnBmNOiLIGCWJwxMtFk5/ZOD/XSvV9zLmAFAiBD0wHLO8rxwo/z9zpnyGuq9Jzn0SzEW7XGkpBAJlY2ZA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602804497-9088a61d.0_1602804627415_0.7272661257529411"},"_hasShrinkwrap":false},"2.21.1-next-1602836642-9d327e4b.0":{"name":"@xdn/core","version":"2.21.1-next-1602836642-9d327e4b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602836642-9d327e4b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-c3j/nUs5i49o5ddm26jCJz2QOn3Bwz6ZqJVsqV1iSgnITLt5zZjz7yK/TuCa6guHQtLgA5yefvNHtWCaAb5EnA==","shasum":"cc8be1625c1bd6d9ff2ba9551acd707659f9c572","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602836642-9d327e4b.0.tgz","fileCount":157,"unpackedSize":580926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiVkaCRA9TVsSAnZWagAAD0cP/1ywsoT5FifVlUFMQ9u+\nOdf70+2TS5nilsrogEO8Xf3yp0I5B8xAcl7C4Pi6km0j7nDtQ178MxQQrqjb\nzRCu3o2AUdfrfVWR0Tq7ecjcL4x3KUXVdGFInnZjn3708bNpJ3aPq01+vR7Q\n0mpfVwrQ+Hqx3Pf4e9I8HR9wzq1rLYpR733JSWcApUnHjaNgdbdaJ9j0FPpg\n8rCmvw5JE+D/439mrJQor/G1gW/9qtm/Fg1MxJTiVyaIaLJhzYr/B8xyyNii\nvlWego4T1Tuz41LGjekmtamPDqySvrgnpoylU+ZgeKh3l+eLFuGjFWZ/7rb4\nYM+KvGrsUuDWheARHYBUuNT3c/mHbppoJrdCH/cpHkDbHJJZk7J1kTStbemL\nw/wltLBuTgWEHsw3vDkbjPKNQk1W7kZ3FL7KtJZK3fDMFStcSdDSBwf77deN\n++8YC8EVhkyL8mupwT/CHX/pFE4E6MEMX/ehJ//mjgFFICAhXRjUS/h3gSQj\nqeD1rLXTWp7y6qFGGYl7lW4vt6nEYbaz6X0VHFadcV2y5LSjPxfBg/W3k8eU\n1ptCXfFNTBm/6mMws+yZ6kM5s1qS8Z7btzlRyRr4mSV9r+16N45QuMJRRcgD\n4Scf37HoGEZ33q3sUOPDwPS2LWhp6iFIJCCUDjHaEYKpYIenrTau1dG0lF1b\nDgo9\r\n=EAaH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHGa6v+DQquBjf9R1sjlDMgktLK9mV9upRPOO31YZ204AiB833ZgNNFiKxjsD9bvNno3G87/7aQO5w2r86PL4mMwhQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602836642-9d327e4b.0_1602836762320_0.1782786725311245"},"_hasShrinkwrap":false},"2.21.1-next-1602838800-68410b50.0":{"name":"@xdn/core","version":"2.21.1-next-1602838800-68410b50.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602838800-68410b50.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-QWOdPWbLEpdwYltkD/HvLd2AAiwkMrMqyBLkvmJsgIG0NLwpIokEQgObWdzBnxypVhL3zAUD53tjUq3RndfUPA==","shasum":"036ff1b4eb1248d4d12ae72e55aad19a8039fcaa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602838800-68410b50.0.tgz","fileCount":157,"unpackedSize":583808,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiWF7CRA9TVsSAnZWagAAg6QQAJtyKGRj0wsHxF31b1Ui\n5pvFZ5DPGgcta51mOZ0LOlaE8OA0uf7Ao+zKgloAYq5dJ0vC+uIg3pf0a4Ds\nhcRbucTEyxLUcUECW5ZP3PIaGJu2+dgNRelxBMe20Wd4JQykeNCIASxgRMTl\nD0Kdm9Ev6gmUEQOoEXNTUFqtNuqPoLZCg4I2kAIl+ly7ZFtquzODG3nCKzSs\n3IyG5upGUy9rEJsMjXmxzY9viU0eo/iM0ZZRKLw2hZBUr9L99gRJeTleBN6h\n2s4OOC39gWMKSuGUyXFgCBCpzg3sHFZif2QwKji+t/LvMc1Lg6AHIVRWszr3\nZpepPRZIVTl8jKD12sh88t0gmD+BTzIpwAsMUa7/OwitbqASKjH3zxVunclW\nIYoDNnDoj25j8c6Qn6HA/OcKASglTzU7FR1FkJgd8lXs0KpisNoc7sjhIYuc\nyInsUtbrPqjfYEEIUdtYGkmEXE92ianM+8PXRbDqJFRbjkhrXT2m8V6Yxyo/\nGsEJIfgk6enaMU2Flfpb17nCz6XJTta1CEwqEvsuyZe3BfDbyqXmanaIVQvq\nHg164FhR3+MvCqQlU1xOm6e111SLj/0kGY2VPQ/RZn67bfFXVtinkvkancA0\n27pdlZQ6ZQZsC4cM16zLPQ0zpYSpmxJRF9EBcc9kGV9IRZD9tMtr4+pLjUQM\nQ4jy\r\n=d+XY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6LSbR1dYV7PvZLPsCAZLD8Whz/pSSCjqHM3heg8W9VAiAEqi7lug9T8ecUUabU6YgACkZ2+tlOfrcT7JWxZKTCUg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602838800-68410b50.0_1602838907478_0.40118475238418094"},"_hasShrinkwrap":false},"2.21.1-next-1602840811-5a73d611.0":{"name":"@xdn/core","version":"2.21.1-next-1602840811-5a73d611.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602840811-5a73d611.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ljSHbne9ow7ds9hhhcHvWBflKsYWDyFqhclDwFV7X0St5rD0Yj5OrFxGTzQP20aE2QKJZElw6njyEBji7X2X7A==","shasum":"30ab982952132e6e49ea6d381150e490fdf4780e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602840811-5a73d611.0.tgz","fileCount":157,"unpackedSize":587405,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiWldCRA9TVsSAnZWagAAl0QP/AkxCtcbYLx8gd638bBa\nYNXLc0Km9J/HPPYPfy5ZY289q3CMOh5KoSQGqPEMOb9CAcWc0Il8GkMff0pS\niromPKJCWqUTGFrt+kXlC8RrV/nVsQxOHTuFP1l7n/Vw2XWpD/Q0iRj+jMF4\nB/il4dL0DRpOLqivFVz+o6VEuuWUW6Mt9mCamQ/DGJQJFRyrSHKrYT0Oy3eD\nNF1yqDKbzQejeE3KwWfIhhQyIsIhNMaAy2NT7WazK9ep4PCK8+JnHwuoua/f\nrxCHEMVSmg/zl/+4uRS6se3Fnq3WCqkY4XSpqlLl/u7e0TTMEqGmbLoDEb7L\npJZcE3hfuRda/hfkC4dHcuFwlXgvhDrHwrP9LHt4+nmnkH4vxsjbPr0kWAfZ\nYTfUqhzxS6hSLzJCvvrnN5pG7K6QF73f7F6DshzHA+KaexVUCEwY32RCOV7h\nLgxtNkU7rXYkWzK1wi9Ij/IixrOPAz/J2h1rHL1pHhDJT8USmNQ9uj3Y1RNO\nNA5N0EePQkvPjjGMvY3ek4pczpmZDrUvCWTbAOoZBZjWNo+LN1wHdP7c9sXV\n1hOhoRlXdESLq5Ag2N/n/JyA8fEoIvHW/tLX3kwSOKvNpmVOdBh77Gpltg4H\n4gXsGJk0mi8CX1WSWrif+ZyeO0yurRpTGS5RfIBB6fE39bz+p4GYwATShxIL\nMFjg\r\n=eXcP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCv4quFyDCuJVxzyxLm5I0I+1bxTzwRPI90/7E+URH4ggIhAO0l9g74tkElEgwynevN6bgZmbzezi54gEC5VGBjlEw6"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602840811-5a73d611.0_1602840924798_0.19729850152472506"},"_hasShrinkwrap":false},"2.21.1-next-1602840950-da967db9.0":{"name":"@xdn/core","version":"2.21.1-next-1602840950-da967db9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602840950-da967db9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UQxdvguh6cajUx3fGpLn0gqhrCAEG2ije4BWPY49/NoMdf1ljljiMCd8uUQi/Z3oBDYJZxaSfC/Ncl/Ds6770A==","shasum":"0f5e71aa9db0af043731c0b8d6f83ff9c85c1b8d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602840950-da967db9.0.tgz","fileCount":157,"unpackedSize":587868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiWnnCRA9TVsSAnZWagAA1CEQAJDCqY5Bj/CEus2qMRYB\nX/QL9Ytf4V2Bz7wFP2oTVtR+zV9JldE4cMPvx4H7sXkV7DojUcIr6x6lngVl\n0bgGr2uyPcyXYl1jfqnDy1yejBHWvCcKdiUGJkF4bTHdQTmkweTk+z0qlsJ/\nAWlfdzE5tKd1e8fynkEWB2Ks1PVrxkuY5KC+ye6zlgqGmu2lDNC/KqB/BSiN\nE7n+i+T1o3dMWrerFVDzY7RU9HIAgbiN/Aq+JwWKL73zLDICMQ2dvt7vq8S7\nWGo3It7sb36xZSLf7bF0XfqNInTH2U/g4ZQnL5Y7XsTX40KrdBuR6Zkpj67G\nxWeCdw3lDtw554VNvg6tTJ7TcdM4My576hlF74rqj9MNdTKu+q7dIxDwYHOC\n8UhF3qWXTe0iRY7oBO/cJf6hGY4qxJZyK38ADnpfqwuoNv48/gwEl8Ng378r\nSZ/TX3WE93HEu0KfoMH0gxX4SrtYZdR+73S7TquL9fu5f9Eycenh5A4JwavG\nolVFkea5Hs4Qn46g6he/pnrGQZjS0u09TLfYtt+Sf8e1QlHtsD5daJWqjbkY\nicF5CJSoimc6EV09fsqGBuZwAoqkUdTLVbrsLA2BN0cLYu7xH2SHxgNjCIlU\n38xeskNtEbW25jf7LncHgaLSAtGDK8XhpxfEjJ8le5BCU07Zt+hje612v0L6\n7Pa3\r\n=sKp+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG2Y/jzqVFCHTsYeKucXls9CsTRzvqBB2EoRPGhgT2YGAiEAmsc9+r65GKrWcKNmnj1trfhCrv839JRGWYg1ZJJZ4X8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602840950-da967db9.0_1602841062922_0.19778461258929192"},"_hasShrinkwrap":false},"2.21.1-next-1602841108-63099227.0":{"name":"@xdn/core","version":"2.21.1-next-1602841108-63099227.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602841108-63099227.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qztoN6CCZeuOoQpO3B4oNQki+9YNI+SvA4F9L/CYEFKA+4n9a3bJFVezDnEZ4nuJnFiYaS9VZM3wkb17OODMMw==","shasum":"33f778ec0718a353f34e46272c1fc656d63f5a2d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602841108-63099227.0.tgz","fileCount":157,"unpackedSize":587868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiWqBCRA9TVsSAnZWagAAPksP/R4+eCh1a1qpIPy/IjOr\nDQqebvF4YKYIEcH+TQxjcw77ubzNlySUviDix5I1xHVwhsrkW4NcyLxngfy/\nmkwornMFjia1KQFesCzlfhBR6yfZeBegnEE+HlYgwbyO8PARukRZq1+T3Vml\nlmesvZJCGpCM5Rlx9rY2lYYkUJSCcicBx/BUK91z6NMQpjlGHh1cJFjAq9xX\nvx8F+2OJVKAhhyQatS4PexONj4DT62JfrwdtgKcZ+j2jbzaeP0FF9NJrAINa\nCf3Xt6G9wpjEjLav2oq3ZqEUPd9cM9NW12XH1Njiejw6rzLCvoUFH+jOnMbH\nkP8v+lLUa9nO2aXTI8ZGQpNev0bux7MkXV0xZ9ZZtRKy6DLgIXgc68ot8dED\nFNCTCeggpBxjlrcupny/jFW5OfAsI/HIviP7XtZXD1K5G2HuPJUwH1/0WVZn\nTx7VWgxOUNbrhpGTsNRIB3ZDDhFbSAPfur/MWZM2xsTbaFjeEupdW162Ey8o\nmjovuzlj36djNQeH5qqYhf+/MKfdte1B4PcDwrmxETUaUWXpFHACpwMWlOWD\nVRQC53zC3/UvwlGuXU96rRjpCfhWgbyomL2+S6XbT8yj9f3y+4rGYMxvWRVE\n++G7II5hOr0D5lheAYIA/nbXCAzxEK87HpG0QkukZnmhARwFkN3908ySTFkQ\n6LeD\r\n=aw8R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMbIDhL3l6Dl/xFs0GRqBCRRtiJJ1FgIlft4bEjjA3qAIgYfnmCCkuOMnIkHZ0w6+uGyjpUimliQ4WLde5u3HMiMQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602841108-63099227.0_1602841217175_0.42628043091404644"},"_hasShrinkwrap":false},"2.21.1-next-1602841630-e2e3a5e2.0":{"name":"@xdn/core","version":"2.21.1-next-1602841630-e2e3a5e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602841630-e2e3a5e2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-olG6tyd2YJgakbyuhXlYIDo23Q9C+OuCzx1cKSZmz99WwCj9mIWPnaNMjTEB+6UG2NnHmlOEblx59fbUSe5csQ==","shasum":"e6ece4ca6d6eb43368d7b3d67832b71b39ce2777","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602841630-e2e3a5e2.0.tgz","fileCount":157,"unpackedSize":580704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiWyWCRA9TVsSAnZWagAAF3oP/32cM3CQWWkTpPpUdWwC\nV8oirBGiO4JzPMXSgKP4ouSHciHBdYvgj9FXlbkKZOqS/nqprYfpm5pJVfPG\nefttfZb3usLmJLroHb6S2rap7dQPG9lrVUqHxKKIAdg3wyI4JSwTNrjpCDAq\nZZQIJRbB3PVFwRmp/anih21QTr70ZDijIBRffNA3Wpr5bOYsHG2j5ckZNkJJ\nYZcl7Q7aEjq++ZvMsMNRghrZ8RHne8U8yM1lI5dgSREKhTps1rUBSiMz6QX6\n+YQm2LYWFQ+NGjqxOlBUqMk0566KxMQmNNLgQxg8vv116H6p+b412ZslsGk8\n8y5yUDC+REogKmQ7GhEsTkbtrAjSkn+9fVWVpVv0uQKohjegZbwIW6CT+Kvx\nbPV7tUY08mhWWtxLHO7Iaqxn1Z5w5PytVn9BHbH6OvNzl1gV4OnH2kwNeLr3\nVgMUFkqgSVKf05FRmtSOGoqgWvwl9AN8QwJw874NBcdj9iCGz8QDZ+WivFJU\nYse5vz7MjDIRPG00ncdl+MADp0eDtECawc5v2CLHnAb0Pi1kcvYM4JP1X7ia\nPcr3hZkg35u0U08o7eVASq8Gv0MAoz6arowEv5nbwIjKVSphPS5t1KKtv9Pu\nISkWQL8U/yYD0MVgNmjOJCbbkiyuVFjUKSqCJ0M9QBaT3/PWRWi8jZqjxNNp\n0Uj9\r\n=CB1g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFwBFTLYklqsMvQU0SVKYuk5jpIscQlRqFNuO10AJdRaAiEA/Asps/BzYLAFYQEVLQ2ECrJxJJu4O7XHuV9uNGHR0YM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602841630-e2e3a5e2.0_1602841749405_0.3297766861815561"},"_hasShrinkwrap":false},"2.21.1-next-1602845598-45b50e24.0":{"name":"@xdn/core","version":"2.21.1-next-1602845598-45b50e24.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602845598-45b50e24.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CRzXHy2Zi3BJ6pUNwPiD+va4pTSkwxGQwGw3FxFJ3DP7Rv0DB+xGz47uDxVV1q2FSDs9HGT3dDR6Sf03jNSZZA==","shasum":"dd71418330f4ea9caa8dacd753e5d4d709bcaf4b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602845598-45b50e24.0.tgz","fileCount":157,"unpackedSize":578468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiXwSCRA9TVsSAnZWagAAzr4P/RI0AByhRR7gzinpfcIu\ngnGpfzGFH6rETisGHPokwq/bLNHhn6v9XNkELoy+ZAzH4jqu1vO2O2pjiH+k\nsYpIf47xxbzlkf0SajUQBTbPdG3GxdMWE+D1D2mjN7BD203RZ8tmmf2qUAst\nHp0DGWNroBTXwwaCI11VAD0pGmn/p+/9GED8fSi+FwpZUq1x51UUAMafjAT6\nomzr6k1oBXxEhyNZPg+VpvgghZbc+AhRVw9bOnQgYhYAJpqfoRG3gWfYjC2s\nF1SVVfsM5OHv8jIa7K9k6gm1gWdPSpsHvc7Iakmy5pntsI3Te83svZIW8T51\nziACSUzalz5NXoYfQpQE8Hyuv2BoFbdwz1/yLzbAeII1hU652muqGZyobXJm\nKZRRvonabZnpAPDVrbxdqr2vd/zvuA0PfzpXGUY8RngC4SPBkpAkV5gLVQ+t\nj8QH27nbmnee87f6uIfPncVb095F5dO0e4yz7awVz0ib1fGoMKFmhurs8ya+\nxiWhKZDjNdWUM73m9ZzLaFo+3LVEYKskV8tS/EU297fw6F/sgUlZEoMnUVjA\nycR24lqzi/Lv9OKh3PzqxJN/BqQIP221ryVCXlpy0Xl+vmJzmhAw56bDRl4h\nld796BrGYeQBVg0RYL96cuxiKLMYVrm1aGmXN0VgKIJWQaM9OpUsTvxLAQ34\nI1+k\r\n=G4Va\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2R67rJY7tTnB+79wJVW4HSB73R/J650B2qh+7sADwQgIhAOiv2T9tfrBFbWbmMMldb3YksJ4ndHgNwlh32CgfSxzW"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602845598-45b50e24.0_1602845713942_0.47866942157996095"},"_hasShrinkwrap":false},"2.21.1-next-1602845759-c00dc71b.0":{"name":"@xdn/core","version":"2.21.1-next-1602845759-c00dc71b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602845759-c00dc71b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gOU1mfkWB2hqSRHbZWp8A570RrHRJIaI+7Q5M3T90R279CYMeJ0HMTDdYtv4+b0PTj+3jMNE5Q0J7ayEj+RC5Q==","shasum":"797226c93138f8fbd2257d642b7585bf7f2f72da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602845759-c00dc71b.0.tgz","fileCount":157,"unpackedSize":578468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiXy5CRA9TVsSAnZWagAANX0P+wRBmOJPGS6nho4oz+86\n8Wk6VzVXvBqbFnxysdzc8kLX6gOX6J1t/h2gm1csh3MYnP+pUx15PXfpaI+e\nEKvyLwnznAzPS4sUnVHDBvJorqpZ/vdixEMK6D/mw6t13dIhfMO3bLJJhK+1\nxy6N8yEzj8QIlHRmwL0T47grsACJCCSMcvp755Kbs6z8d0ghkFti88hKqigM\nCS2HpvnMZcmrKlEmRtbJvDj1EC9a3I5XHYXkG20Wh0ONIujbZmOO64mmml3c\nAnHzFrfquxnSEwN4L72e0ccTwqIUxU1HBFkoM7wiD22bDaAi7NOCkGlSC4P2\nJHhSfYh1N8+u/nYRZ/XgSTu+QU+YpxL+iSnwbljLNNf8F7tBzh39sMjoDpjd\npjb3A5ws7e9UsqzB1tputQj1t32o/cjojt+GxvTpGi86GYSdSmfGbho6Y+Yv\nA/HtsQRmveuniKTSUi+R/VG+31FAYG/BZzpvwf0lHjlRhupC7e5iqmAP5oKq\nAyYLk4MF1ZZCw4MwCKhzT+Rsc9DP8P4HclYIHl9/bepszBAC2+TjWWaJsO6n\nuvYJqlLlXRHRPh8w1zSv5TjI6RiWmel+Cy00+L4JqnHz6fOMCld1W0MghI5L\nrKtFMv2xWWGSmp9Eg0qzq+mJEgHoIkWv+hrpWhqQyx+VHb9UuvjZZRh1UwCz\nwnNi\r\n=ZZaD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTand/xhS8f4YIc7kt+EH4fb8GuAfYcleeBHZR6G7vrAiEA9BZnI6+OghvO1ZulijqFdWpKjqFID8Wz02Gu0mY9T64="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602845759-c00dc71b.0_1602845881428_0.21574474845566072"},"_hasShrinkwrap":false},"2.21.1-next-1602846239-9730deff.0":{"name":"@xdn/core","version":"2.21.1-next-1602846239-9730deff.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602846239-9730deff.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NdPrH2JuOrR8Bh53T4Z/dCJ3r6coEV70aJ/FV3kKZUsm3FeNB19XkbBCqXSwPcLihlEc6kFqAWypRGzK1ujLNg==","shasum":"5153990912defda42b79faa81f97dd40e3c13eb9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602846239-9730deff.0.tgz","fileCount":157,"unpackedSize":583675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiX6RCRA9TVsSAnZWagAAMuAP/iR7QJBb3srjsLJrLbEc\n+9fb/L9RMNYg0FPcVUAykxM46VQbUs5jQjeEApkKfs/UPsoKDUqCQ4opBI/O\nA/+mAL2Z4jqirN0IQt3ds256Fy1YiIqXhpKvflvBZW/5PZiJ0O9ZLgwFrNZH\nEAkCxKs8hoguQ+l3wwPeeZmt/3MIjXQcJAR76LHTFKhVk4lmJSOIkUDqjYNN\nfrSQiLmnPHSkYu3xOpR9LTPhUSipmHn0P6yYvP8d2NZv0yggvptM371gAkCP\ndo5undvz/RlhTqfrpe8KNisJe4ZFg4uCqpra74VfuXx3kHMVNeqd59FoS/a0\n+2cCboycTrqvjD8FNzerxIeloThNxe1oXP3EKs4VYX28wwelEH/+hWY5dBiR\n48k5qRKwhUzkaVphD4/j2z74JDpgHg0Bnu6AHRLhssIr/K485lH6CXggdM/Y\n8UkU3CFXVCDvfDo2VuO7DvtPYeLT0ZIChTX4I6SqqDrYPOeSFmpwt/sS9BYh\n4m4+v4b2lHwgjwIn4Ep4s3izv4Mawpew2ncFC/ptm3uJIuz2B5LAfHMOKqbk\nc++C0jngsSvB04bBgjBJKiCk3R6ZnvvYmVE5kTcqXXsodn7Mdn+N4veRycFV\npk7bdQdBRpY48MmqBzPuNp/81hsFv8AjgGovK2peD0n/Acmb9kFU1AZpRYme\n5D0Q\r\n=y+QU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/Zgliq8xFmizSlHlc54HWSh5gFHhz42x5OU8jUhi5lQIhAOSpAIObY8H/rO4kASsWuCGrnpzUti9U3Pmkw24nxpLS"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602846239-9730deff.0_1602846352486_0.2530372458715642"},"_hasShrinkwrap":false},"2.21.1-next-1602846286-15e3907c.0":{"name":"@xdn/core","version":"2.21.1-next-1602846286-15e3907c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602846286-15e3907c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-08K+3sQq/hZkJCHFAUkVyGVowkAheWltuc5OD7CeBrm5XVnpP4HIP5Poazs+JH7HXDIxd8LiZBZzTq0mhtHTBw==","shasum":"e0c631b1bb5110b54e028052657827622cc87e04","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602846286-15e3907c.0.tgz","fileCount":157,"unpackedSize":578468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiX61CRA9TVsSAnZWagAAzfgQAIHgbw+9gRck+DOm6Npw\n4x69huc++euKeMa24C8s85hTWimxP31JdiQdAke764WbbFI8B+0EyZ48Rj16\nfx/EvjD9t0JSl/VVjip39z/NSan/LD42pRLgXmCHg5QBb2o2e15o3X1ZvBLP\n6q/TxkLcQsgcFByWaKQKRGkZFYBk8W19t2DABti1CpTx2KRyrqbLeO18tBeV\nJsNqjPz1derBOe2irzJFgpEWDkF7+6O7ues6pqAEsET1E6uwaNM2y+6u77wb\n4Lql4VT7+pMZIVh9mVYgkGf/7c/61hWTw2jna/JBXt8i8Is8qUlSOk9FXvMh\nQaVzqefb+AeOGb+iATEu83Em4VtaEZKD2w5lIrq62Pt3R5vIQhIk+BPD8Tdg\neU2Fxof2UhLTQ5x5CVr2Zswez1BJJwGOUJKl+xeqxH+kBSCo9/U55F8waDVt\nrUolW2AzLkcvpaEjeqyzlICqkEUw73KwI+M9JKznPaHFhwJrMnokwtPT6N+U\ntbFkqypxPCH3TCtUTTEViqiUBMZ1y6UYJTuJ6JmsYG/4KBMgPBNmL/fJbpfb\nNpAqTtCcySd55nE6AgaX7ihU52Ow9kNHP7tPRMj6Xpjt6Obg2bf/sEJHRGVw\nnCfpSaFRlxHC1Pc0aJDWckqaMlNcpBOYZLFqqOpdOFcvHUsLTcu6tdkLCKx2\njTGm\r\n=YtZ+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEB/LeRGgB1vLD/tSHkV+Mft97Gja6OK3yH7JvJtWlYcAiEAw+p3zZoHa7vlafKSNXLmmCnsUhYwvvDk+6Ry3qsHUdw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602846286-15e3907c.0_1602846389163_0.5910124152283576"},"_hasShrinkwrap":false},"2.21.1-next-1602846633-c78dd35b.0":{"name":"@xdn/core","version":"2.21.1-next-1602846633-c78dd35b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602846633-c78dd35b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tzFIShmnn/EKz7YQylALonCEJMF5V2uQS+Bnod/Of5jerQOVldVxfriyBwMuYCdlaVCRL5bDiDg8dKg+LxkVpQ==","shasum":"2e2b7dda43fff8202db6167f44e5c21f9de381fa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602846633-c78dd35b.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiYAqCRA9TVsSAnZWagAAvO8P/2eRFyIt4/J0UyZunRkO\nu7fWacVPen1lfeJqs+4F34/RxJMcyF7hJIa1KBdN0fO3WcZRLpq6E1jm3BFf\nDOwgOvWETO2JwDIvF1Ic0oEseLMtG9IO9X94Rx0scCOrDvVAIB4aGP6W7ow/\nCj5FAm+ZbTledO4ireQffhCJRxEivXR5CHbNu2vDHGx8+ep1vpt8A8JhdI+v\nfFmAEbaQ3Im0b3VnQAb2eR42xreWdnGvQns3MNXnTpZ2Sn56fPQaP44yv40U\n37zCg1BuJpisudAyQftDmnJmAprD/vqde7BhLMg0S8BG8S4TX/D0/6QKGSPV\nDl/j8vZaLtnvXWCLyUJ6FGz4Ye1ACGtwulJvjwPvsAfgAkOirKDivtHOKvZ4\nBtH0mGTSmpghL8i+KxMD9qG8WulrVXUlb/Zb9e3f437GSZxwkKt5+9TXmLgL\nD48j788Jc4y7uBOzZBkxCdnu3iFtPBR5g1Q+hxHymeK9j5XS45QjHrHvBTXm\nfuOTd1RWRQmdcN8Vg9N3IsVkeUL+sGTvhmlk8+ecxmc1oU2Ww4ZvXGECYcoZ\nhifl6mHnIES6prY+fAQBbJJvaErY4ZeMkSOhp1GA7IRE3bc8Sfrp32KkMs1u\nAiAoXLBJi2JMKL3Tp2rQUFarFG1BtBzDbpPWgPw7WYT4EtOfOnS9MrcI943N\nD6us\r\n=N10N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFwxGFIcJWCQOSxqhOSnRJgV4IhDi+T7f1cP56apkMDQAiAzESFPIzoojRW5FP77ComeyTt8fVyd650wy6e5YvlAVw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602846633-c78dd35b.0_1602846762092_0.29329058122037566"},"_hasShrinkwrap":false},"2.21.1-next-1602846895-6d2bb271.0":{"name":"@xdn/core","version":"2.21.1-next-1602846895-6d2bb271.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602846895-6d2bb271.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8kZm7XRMDGwed3ChpxlA2KfVYvnFeexyVmtPfcf25cwh1Y1kO6/KvJ3YZXFYpqs6F0AT/mmyS3BHO0GlDqoXzg==","shasum":"c058671a74edf49ba1360ade9d6b7d978c72de2a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602846895-6d2bb271.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiYEWCRA9TVsSAnZWagAAnFkP/jDWu3AlT+tK6voqnW2K\nIFwBNHNeZRcMI2ldawL3GBiy7Q5ExQqlEUevlZQMaFwqT5DoHjPHey5CUBjH\nPPjr+PMadxJ2nii40Pps4I3MAL9lXgr9ULBXnruPQfGNPh90inb5lr91ytmx\n4Xne/CIVv9XMRBWny9XKten3+KV8BAYWNmwyl7Wwyojdy9Wb/j9RgZ0rLTs6\nVKBnSDVIBVLHP7AmVkqZGBnUh4y55NrWXNsXAZFzcvTg1Sotss7iM85cQ1Vk\nOerVpTHjc764ocuNkiNNMuDyF9JQXGqwbjGtuy79I25O6X8QZtxF9vnlaVyC\njckq1EvyNyLHAOxIfROOk2d6QM77oBZulSJRc6paddkf+PL9QgKZbwimAztG\nrMAGmGZrw+21dVtKdoE1FrzvTuY68tm2qmJxdV8zeNaQ9ooQMQjfMntsjex4\nxiDA6m+pbpse9gSK8OodebOcllQffsuzlOiUqzfjEIOsCu55cSo1XwE4SGOi\nUAiWtBsJ8vW8Uv6QxN0jYrmg0uHsKk+pr+5U30JjwQ0Btv2e9pa/LVe+fg4w\nE5u1NpNeUfD4l2EUbf1NJsXMt1w+2025OEPMOYCS1FQt0ncFO45/Lig3r2z4\ndSyBQF0BN6eI3mmU6t64+f5JTS/t+0pQ7Z6AMt3SzZEKu+Br/mHdGg8V9+j+\njc8s\r\n=Q0MJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFeSzDb8X3hxplB5zKl8Az9qGyy2wb+0+CGlF1mj7IPvAiBX4DzVOASDu3lutQj0/g13gMp67UzFNJZmRz6El5FIBQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602846895-6d2bb271.0_1602846998045_0.11349808935659977"},"_hasShrinkwrap":false},"2.21.1-next-1602846989-49e633c4.0":{"name":"@xdn/core","version":"2.21.1-next-1602846989-49e633c4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602846989-49e633c4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-WzMh4hF9nzDbMkanzFLn2wj5XH7KWKioatW8qjspJSwQ08vhrSiaztBmv55riVvaOZSpWFNZmfp+HD83hOLvgw==","shasum":"373fa7210e35dc1dbd76d2375893cb02edc03e1b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602846989-49e633c4.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiYGkCRA9TVsSAnZWagAAHeYP+wbhieL9+PL1v1aIppjX\n9DyjyNB3tLLx0zOVK/Ao/MpQBq05oYZ+9a9IT5fb+GtGgyBWL8yPhE1plwBl\nKH8AvJLid57fodQ97Ze4Zah4+00ozx7vsy0WQLmqDGvuujrWTfQlYhuitZdM\nJCbn1qKRkTi9L9qvuMceZhprfWXyFT6MkezoT1u1H7rYMxivVnvEnGlTeABH\n9wVzcddpP7QYZaqIJmHpgov2tmB/wtxlhbkL69Xs2Vs1rQZ+BIK2vMaG9EHL\ngTiL8u9x9TAAq3xVvIyG6xJ/Li4DVzZz/6HIUsn5YmFSuJWSfkf0vU8n9dVH\nT3K2zYQOS6Ps40HGrYh+GWvFQeFZLX2GaDgS8HfQCmVGZb3+kyYseU4XQt1A\naUfV/ZnRFp1/68o3njEU5WzPD9ip7zkN3Qn1fOYBvgEssgVjAHM8Z5by+B+i\npPxJEWwj4AM63KDwma6WStu9G4pSJQiYOKa8wKcmpLhPmZrv+/HYDnEqpIZE\nM7K+kTTeCVlW4bSSwvcxOLpPQwFw4/Js7ZTX0MnY6yDTmORA4m3B51wh8iIN\n09EntCfD5bNwpvVe/ABJsgIyMx1v+saXHRTC66BkngEFAedwPruJv30Mhph3\nSxjgGhQg2wK9ktQKHOUbmD8OM3tTfvk6wlWqackeb/QdlbEAc2xdk67t4AnA\nElOs\r\n=ZzDy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFBgdHGeJKdj+Daiy0UkxzzeQvC+56QUF5s9NiEAD08CAiAAqvhixY74W9cn3S7Cr/0lNQKpy+sGJBm7+KyOS3weGQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602846989-49e633c4.0_1602847139707_0.04995043102169405"},"_hasShrinkwrap":false},"2.21.1-next-1602849089-fc690603.0":{"name":"@xdn/core","version":"2.21.1-next-1602849089-fc690603.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602849089-fc690603.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CQZRLl8tXD3wzkuSDfuFBMnBTyEVjBpx4+M+/j0EYC+JB6jY0MrrMF/BuhuOwVdV9NU2LBU1o0gm4A3OqJgAZQ==","shasum":"591e8605a0017a79c170dd993f53e15f8aeeefa9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602849089-fc690603.0.tgz","fileCount":157,"unpackedSize":578491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiYmoCRA9TVsSAnZWagAAQhIP/0shAQURZQXlIC0ysOsR\nHETuAznTcC4U/NJizwlH16tihaBTqNXb7g6uO6x27cbkzcJPDydFF+UOeCpO\n6ZVlm6pBE198vtnFBSqzz/UrkuKD+OQKH4WSVAaov2p1MVC/COQ/rpo13Fh/\nPiFoXYkNSJuB/xoJ8VaYPkjk/i4J6+LdEkXsL76Hadu0uYvjSC2sv92aJmY7\nXngdr16MlByArFnOn7spm2vKiMr4rVwtm31sJrpX+i3cRo2GJzk+/LF/KYPv\n/i1lohS1EB3pazMx4YqU88DgXeYhuyGTT5MqPHYb91r1pwrUW5KUuNw6PRd0\n++IFka3kXdgRBX4XEzCj/O+YPIw2Il02gtGQxkOL+N4bIpvPZeqjETdVwktN\nqiPdnrBXRbcrTNEyWsxWviw9yN6Y8w2To4hmzmD3CeFj0DuatqA1jc5r4lZa\nptDawmnwCBdzA/qOjXTEYhDwJQXsrFZWDTRC/IDnhNrZX2NpKjczGsnauCT2\nsdZewXZhKmsCRbeGUIYEfHIKMCgVQMmpq0Dpb19Pt4XEsP3CrcWs2zQPZLph\nidYDVV6h0N5GOcd8ikdNJ2+GvurxK7eVN0krdjh6oLLeW73zqzKkPzDqIAHF\npKuuGgk8LCaMM8eb0lvglKEq60XoweYHwDUGRVC4T2r4CQ+USpITycZzgWge\nX17U\r\n=/SZx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEduzIrY7phlvqp//CU9EcmqnBXOn9Fb2twKI6u+flytAiBpoQ/Aw30v1XiqAkcguXVbPd4VSOFa8krxjkzotsPKaA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602849089-fc690603.0_1602849192029_0.6030493398162522"},"_hasShrinkwrap":false},"2.21.1-next-1602851585-37eff8c5.0":{"name":"@xdn/core","version":"2.21.1-next-1602851585-37eff8c5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602851585-37eff8c5.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-689JniuPjSYviRpIW+aM/8mejEatphomBGDhKDpALgSr9qGO/IdZWRICB0ZQq8mYT36Psy8ojPy3fTa/mNwB7A==","shasum":"32962904c99fa35d330e7c26f978eea2ac89890f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602851585-37eff8c5.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiZN8CRA9TVsSAnZWagAAAQQP/1iobZS+1dT8Z87Ulgmt\nfllsl9+wc4Z/atLWPjDJFAFJo1/lD1ABhfr9pjzerwJBtjyQv5MeSuXQDuaL\nwoxQDInpiMdTI/S2eQHuwRYPTMBBdO3XM/buZd+qYoc4pBsoQq76MedJH9Dr\n5maNfpOfNF1mNe4zRhje6jlseMplAwZhwVAxePtRAslF+KxQBQcupTHjAyLq\nGwRGy9OOvFD7g+yG9lHbznclMJdovz+ymUnMULozsZst5nhw07E3lhdBzmVy\nR5x/Iy0jMqhb1hVTxajuu87YVAAVLeNHOW4VEu/ebaAYIhvAYqkisPSscU5v\nGF7ZZ2yqg148E24508BH15l9btYoI7FWIk2tj3NSPm+2EV6JGVkrplPDYHV2\nit2TAdIPWMTNskuL1Flt6Ateglt6njI8rYeLnw/CmAr/44PITBmSIyTTU+ky\n2XRIHHO6YBfczhrPgK4ItfmEC4CUyFqlBOA3tQwm1JJIp/LG4iEARuIlxPZm\nRC+V3y6TXyEFiM6vNMrzjiN/29EeeMQRbNnTdiuhASCmeZtRjA1v8yeq+nDI\nHygnKX6TIkAskS46341G4MswmKIWAv/kT4fi/QYnuMbZGR3q+Ckay8ILeO+i\nCJiiTWRJO/cqZFNIJcPmbBu3A6+OOMNpaY4kpuOIMrDfHS6D01xOPUAHbucE\nRddQ\r\n=B0pI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiDMYNxKf1FfjklbJwMrCQ5Sojukn1Y7pDL+tUqPHfmwIge+VsUeeVHulaoOHMkaaeNyL54be21687YktImtfrobM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602851585-37eff8c5.0_1602851708365_0.3075062067573182"},"_hasShrinkwrap":false},"2.21.1-next-1602851661-80f72e62.0":{"name":"@xdn/core","version":"2.21.1-next-1602851661-80f72e62.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602851661-80f72e62.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3pMoLUzfs9qanTvV60mEIsu0B0SDA5I741MHfSOtpvej3wFYAeMT82gLOPQu2jZ2BwxX8xIxL7yk1o9IdbkSBQ==","shasum":"c378c235fa3df5a9b3f3f974bbd506105cbe064a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602851661-80f72e62.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiZO+CRA9TVsSAnZWagAAcssQAIQAnOPxFiHe4GzO5AYE\ng1OheTpkZqjm3dR+InrXwn2wcigu9A3HSOgmGtQcHeu7xcsES9Eb3rQfwfEA\ne8FOzwtNunm1Q3XAQR1Q5VSOt2ofxonPY6xUTdLxS7Lwezfxgmyk3Xv9wxhD\nxIUWQl5VE0qRKl6w3q8BsrBbUKWW/AidYZqEWRFb/P+OWaq8+AqkAx9nPTsZ\nMoA0MTX/LXp1A/nia+6wg9OpiA1I53C0fho9XONmDxkUHE8tsGY3xrbltiba\njjEJtA6pz6XxkNfg/YMBp4kmNOzkfS79yf15M1+saDzL4HS0d5025FTtW6Nb\nd1Nn7S1ZzJ3qKWDBqiHyN9CHc6maGbcRXkYNupPWrreSbSFjrElG8XPmx8KN\nE1ixo4rDHQzyujg29zOJzyM0v6DhFr+ebhiY2eGBzzuch53VxKLLIhoqPC4Y\nD4JdS4Q96RoLp97kZUf3aUOfd4OPxv+fTUmoDWy7LfEHswBZyscOuaC2w5LE\nD8OcUIUecm20Xj/H4B3kCgmipOGmXrC0Ns9/XOKc3rpnTLvA+be825Tv4DVj\n+4ac8JX0mxwhhWBPeq9x8sOyE5gL6bGkJZCQwmQR8trx9wWL8TdvsfttiQVJ\nwL9hzQDnaTgAHo/l2ihp/g68T0lZPYRUQrVF6toY0/UsELl7/WrzREcSW3HY\nNvlX\r\n=P79W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqlRoEf8MUtJqpMJDEFSzx6y6s2U/64NlC5VrmSoDmEgIhAKR4Qi8dNUY64kfbKXYeTkGieQbAKfzMBJPgXPXuDsTr"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602851661-80f72e62.0_1602851773669_0.24704032926004982"},"_hasShrinkwrap":false},"2.21.1-next-1602851750-c2b1afa1.0":{"name":"@xdn/core","version":"2.21.1-next-1602851750-c2b1afa1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602851750-c2b1afa1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zbWDRCclgdNNNEAJZfmonZk7g8GqFdHT/2VdqFcFHYbfcilBCtl/eDXho5nuWsJM7q7g+8b9TpX0NRWNn/qAsw==","shasum":"4d4f34bc884b822c8ceea89615547ad54750a485","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602851750-c2b1afa1.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiZQFCRA9TVsSAnZWagAA0N8P/ReYZmr98k5JOwULKkfU\np4w66qCpBrzoYYV/qNmaUclsddzFNY0pVdGgsgk7qxnIa+9UR9yvlQtH7nLz\nSv6HWn+3rp8Sgegxv5Cz3/D+pxnpQ+kSEqfi+TTF3v2B3ae1qycg9FSC7zTV\ndHKN2wz9DxyEu8DrYnn86vcIpvC9B/I1dikKTkSYzqYTILIi5O7uJBARaL7G\ns8hXgJT49i4G0Ppg2qfD5ms1DL5toN+YZwwuiGJTykfL6FVrhMpnseEfwU5J\nK8k2JSAakLlwor3O3riviGoH4AsHIPkHvoJJaz7ThJkCc3sBgjRsahVeDPN+\ne4JS403Ah/zjg3s9OKIngQuQ9D+UhO43a0cB16CRX+15zumBHbmJG/7wXulM\nZ0bykuVDsJ+nklsn3CcxdQA/hpiniWCdmst6e/uok7d1I72N0asOtonGsbwN\nwubHnA9SDPmLJ7cmb2AnDeXeilhV6AOaPyEMAf+wQV9m9EgWeR2RL4qamHnG\nk5PC2rMvdbU9vWLixMDtKFvYJnBe5U82jzQDSJ8PZ8takGe530zO6jDg8IoG\nGlYreVRCeV6fQMtCx0rN7HLc1QfOZsBsPeXg5DzMUg88m+LhZMTKxfXL8tW8\nJ/P4tyjJ7pHiDaSzMKISoM/ZXEPd2sy7pQkNbd0uyo1+CU3uMDxVisFkMxEa\n7Zqz\r\n=NHBx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9ZvkNRu/CawZ5CNYagQbOLYsH/r+J4PQOSsSdTRPVwQIgC5+zq1bYMmMu7qOAY9AZqdRKH/yAB/e/phjc859TBts="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602851750-c2b1afa1.0_1602851844816_0.5196106816997916"},"_hasShrinkwrap":false},"2.21.1-next-1602855409-d5919591.0":{"name":"@xdn/core","version":"2.21.1-next-1602855409-d5919591.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602855409-d5919591.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KASCw9K70LWxpTn+JrqqlWoeyHEIiIQnXT9OBmWnTMjXVWGJNYi3CaoFSa/uW/vqMP9lcI1WoSJ0MiGhKb4ERg==","shasum":"7fe9b8ed45584b80f7f2955057463d95895398eb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602855409-d5919591.0.tgz","fileCount":157,"unpackedSize":584013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiaJkCRA9TVsSAnZWagAAkS0QAJNLSonMtyX5FW26Bmx6\nuu+sxB5XlCMWHquMguCTrQqGT32o9MODlHhWsSjW0Un5MuI3HpLony6WDOuT\nS+O4+qIyz5IFlOPOQUuXy1mDKUMFHPmc2YW75i2qm5kaxH1uTBk6GSjQ4FJD\nOeV94ulECz6L4mh9tM962nBOldGmxJNyBR9m0Rg+tJCNF0PWVSMmwQV59NPm\n65J8lI8Se5haG0NV8iVZYzX+2K5cd/Dj9dxuQJSYOFHCr6+Y1yU/6pJ5sbSK\n/YY/CxaTEvxGccSdVn3py2T5RRPxCfSYR+7Xy1a14gYAUCNmUu/FUknT5T4c\n4FKdUQi/LUsNzd2oMc9Jq7UfvJFZCp01nu54oEsMlVE4UULCzcg28QLruPbM\nsF2woIYslxMk6XMBMeFPl58rAo1Z0TrtncexLpMDj36OGnYLfCqFkGTy/REw\naCuLhm9MsjDIhEEPrw8843T/rI+TrDQ8Y0OjhLUUbxxSxDeY5Khkzo4Vr8SN\nd7KpWfubBDC9H81CSIPdLJsNikScF87NWOT6pV1k6seUnHypsStcHombw30A\nlMrUXUzAPdAyjftHgyYKJu17WcA3/IXKB6N7Ts7clehVO//71tUiLoj5r5Wi\nxt+c5v5JjORAjo0SJcm6P73a19BhgpqPxoJXs7C4+9IEu5adOh37an97cy1O\nhGSK\r\n=WP0Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFOIyL3hyUbtwWJYgGvXoafE9oIAuVf77Ke/QKSEDCRMAiBfnhPLkWX53LQ0r5AGoohEH9XRSct1vW5x2Zafz8bRCA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602855409-d5919591.0_1602855524362_0.6403406371179403"},"_hasShrinkwrap":false},"2.21.1-next-1602855743-9140fa3c.0":{"name":"@xdn/core","version":"2.21.1-next-1602855743-9140fa3c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602855743-9140fa3c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GksU4kPtxxkt307n8NFdAQOpe8mhRSFbub3d9DClc5eZSINz1sZydvj3E/HUTqlg0msAyYVguEG5H096VrP4Og==","shasum":"7715720aeb58695339eee4d69060371691815722","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602855743-9140fa3c.0.tgz","fileCount":161,"unpackedSize":586855,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiaOzCRA9TVsSAnZWagAAzvcP+wf1xLf2koagbJIug77b\nusk+lz0T4RGp60zljV8Mh/+G2kL4Ujsdh30LY3XRggYKzmJU4HkdxhfG3X+7\nCvoEnTLu1AZSSviEiAw5Bz79t8V9F0qoUQQQIS71vL/bKEkxcKyFIjXlQymz\nx4IqomZ6J5LxB1oWh7ME1UnSGqXyoeGaFfWjgClrLs9IyfoU7E2a5FAEruvl\nwBVt/IMBtKEN285sUkcxFdHaxnKVetblbbvoJpb3S7sTYEafksxx47eZDwBN\nqDQk+1Tn9CftvKQ7KS1g3ebMTAh+WVAhHbvRQZkao6F+PsGT35gCSv6z9x0l\nyy2DUOoGeZm4IllsZyVo9uay17RIC0MP6DiwVJ6+3vRH35D3q3x95lpyCU94\nHCfHsX7SK4r7fhZVPeDI2/0jfNnc4psrgOfGKeCFRW8N8pDndhyzIC6LerY9\nHxqkl16HoTIdW7oehNL5uz8fHmmvlrb1RzKCoJi1Ip7lOHMuyJJ/szf7+gGV\nobgpRSukeVXpCICxnYyhpDzffEdTwO1n0VdKebhDdY5D2tqg1rEFDu/ktqKm\nXhc6ehbs+R8bzUdOatpyTcgRXZv6eQXRyz+6ApQeHG15r2/19edfnC3LWeyZ\nJkXYdC7y+OQA0PlrRBI2QUH/5kSBWxRC0QPxMdEA5VOp2dN8zv0fGqarsSYN\nN/0s\r\n=K5tR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA9C/1evbuWqeCzb8VcARya6ic139t9bmHoNmetQKj5XAiEA+xFs4tmG4TUSwPD0Mir4L8g/+GMBskIzzTIJHSXpZy8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602855743-9140fa3c.0_1602855858968_0.5428557535699596"},"_hasShrinkwrap":false},"2.21.1-next-1602860399-46c2ba7e.0":{"name":"@xdn/core","version":"2.21.1-next-1602860399-46c2ba7e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602860399-46c2ba7e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-neTylBWKXEb9+gAz6o+sb1GkwlnwFCO/2yhrczPL5UfZ/2GFzawWxnHYLBGnp9/hTHCfKrPUqsuRz/uCEyHw4A==","shasum":"e6d9806f1d1427f9c58f7832775e2b5884ceaada","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602860399-46c2ba7e.0.tgz","fileCount":157,"unpackedSize":584013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfibXmCRA9TVsSAnZWagAA/ucP/3ZlxQnfl3rCnx4FM10Q\nseO5MiQuXFRL8PMMk+aBDK6A4JyRQC/niLe33WLiLxLOObpg8JcheeIoPafr\nIU0wWQH1h24iihyxOQ6Lba1XGkwNRftAXde6h9IStoEh88fNT2BT82ABGa2o\nHESm186J3gvi20J0kX8XgqJwtmD9OLLp3XYG/JToG2bnSKbdde1hsAUeG83S\nQV8nezBHg10L4A62LKuUqcxozhqpMhzS+ebbaAXq3vHui1MhQXsYPTnrRyxa\ndZuUdidf0/aorlX3GRpMKU3jMPPGCoZuY9hJyan3hP7XqBqFbCnMm6XgeZ1m\nBkABjxNDtrsymFSF2bPl09adgSp2Jb7990Gql8FGTSHboNeKfEZ6wHT/D0Am\n3QzJZ02kK1TtJ8om/dd06M2bcbt4d5ixiIWkljeKTvX2zcEbxlwW6vuFd5BI\nKjaqYTsDn5UAcgC1gZfa8hciHo9iqSqc4O5RaIS6vOIcnhdC+8aylfMeT4D+\nV37pi92Xa+3RMAf9XF4xNZRH+gJZnV56Kuu0hVinxCYDIC7nySBIE8rDhAdI\n5X2eZU36F0hZtZxuAUbZCUyaYt/9HlakvFIFhCP8bg1tezasp1lhzHX7rqfi\nWnt3iyPMR+QUdnB7F7fl3wSE89N2k/y4dW2eud+SIw3Klit9rmoapFLhLUV6\nWAKl\r\n=MP+b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICnW23CwicGjzIbiPfiFk/n6MDZA98T/B6Q8vmdSqnMdAiEAhLY7jNr+7/Al6vypVlSmIB8oq76J8OKoObHZ0EFygmA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602860399-46c2ba7e.0_1602860517278_0.2053229675927235"},"_hasShrinkwrap":false},"2.21.1-next-1602860607-e751eeaf.0":{"name":"@xdn/core","version":"2.21.1-next-1602860607-e751eeaf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602860607-e751eeaf.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TJvSlaniDddIINNq6c9RK5M6YrNJifrCqSDM72QtF5MKfzl/Z8DXJ7ovvuNZDo02RM/PXi8WpJqBmTNt6850/g==","shasum":"feb9686c7b203a7482c7b02f3475a78aabba15dd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602860607-e751eeaf.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfibawCRA9TVsSAnZWagAA4asP/jwblf2Y6gKHOAgRCp1i\nt17FoWnnManQU62ElUdVNFz2kify8N415HbuewMT7XPvDtd5gk8V46gvl82v\na3KOwEik1RVUiHQSjvSL2pbThsYFuVCDO/lrOljCxHfMyYwKxhnIHD0ZQgRr\nkdtX6s06lIJuQs+HhXF2HfG7egTZvsghwmPuuGZtzPEfIjJ15x29MaawdiQQ\nvRGmHhCSWlw+I7s2sACxOD+mjROiPIeqnGSMoUwez4WPLpRE3uQn10QWNBMU\nHr524oe/2t5+S+3HXrL02s9J91EcQ5ciR13p+Al5CwXkcVUBeM8eibUv7iv8\nGM/q4inYUZ8dw5egrwF51M+aIOzumRt1nPZRGLgJVoHTbRImCddVkywdPPLG\nwYdE9vyPQ0RtLMmADVkoR45gGHQEa5ZDjNTOIExKXzqEKsw3QKWjx1wdOd86\nbWwuyPq1G40C9aluwicCxW6nccHCkLMLDbEZlhijTtX6sU4UeLCktbx/+RHy\n/Qd2ntUqoEJUKuIFnPMq33j7UfgDKojiWj71ZsJs0DQtMVr9WTBpBbGzyfGP\nE2K+avAszAZIpPaNBcDrm9+zFMnT2zc9FRJh119XuKb+fTe01j3kw284Vae9\nQRt+PzCyzRp222FUPbmqm+bUOvlZ7kOzK5QOGcUdG0rRwpb+S4ob/aTNgH81\nCa5r\r\n=+gtX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBwIZWiOg/Yl3yj9FoGQQ0I1hybJsAkS0MGctIhdmrfAIhAKMRBqUBj5JOcJcblwoilYf85sJ6B//nE5GP3oqK7+iz"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602860607-e751eeaf.0_1602860719572_0.9922287267890164"},"_hasShrinkwrap":false},"2.21.1-next-1602861398-46c2ba7e.0":{"name":"@xdn/core","version":"2.21.1-next-1602861398-46c2ba7e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602861398-46c2ba7e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZBA+Md0a+B7ZY6LkREuBVC3lo5HKRhUYdmQsXqTp8RZRQBvxreJc5sKaBx3e4bFwJs4qAvTOrau774V8fWgi1w==","shasum":"5d6ac9203dcbaeab972b501a836bfeaf32b46ebe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602861398-46c2ba7e.0.tgz","fileCount":157,"unpackedSize":584013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfibnQCRA9TVsSAnZWagAA9fUQAKQywwahDhbsfSgm1NUm\nTIDkS+82XylQkBmy5JrsrUx9qfHsiuOmWdJj42u7+NQEfGA99ehWYCqrjMbo\nR5NvgSc6rA/iQd1H046r3heSDiInbC3O318R/ckHhYz3xa7CzXhl4YF5mYF1\ncTEJD2gWlHOaq6B5JCIrnDfMmawLbvopsvCSQVonWRmsdS94f3C2HTdp7sVr\nK0pzcY4vER4Ch28nz0zh7wMR0z58jHLQpYCk03ezUV7/xpH/V9SzlYSSnOI5\neFcZtrjWkxaBYG7MKs+nkpELEsna55sCPx2pc3nvmaZW5zOmBEc/kAFzp/UH\nbj8Kp7Cpc7ZF3X6eXs8OlTDOn+MYStIXxTLyFQluboVWDizl3ZHUwrtbuDF1\nA/p2O+n3hWgGJa0XE6JuuhbZPEwH0JWWVG3+MzF4A8xOZmiCp82ckjjw24+P\nkydsLdI+iZZwhWPjIXkeBBhQ2bX4GOLrlTnmRXjDOlYj6fbntSmjLRxamYPt\n0D8x8LqxqeyGwm+2juKrAIMLyoHPeTRVm142ifaG78uHpbRE+KkALRd83gVs\nwML5I01R6pCHt2tVxCy5FsnVv51WTXk6rEJTXeTns1lAEe81bzRIe2x6l1eC\nGzplNnI/8y99gFpuaJhiHlJ8UBmopnc0pRCcshoc/oZW4UFfzjf6Mc4OohrO\n37Ti\r\n=YSb2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzSgZhDHMBCbufkUXGeKyedAMFdqla/myhEo8qkWvcXwIhAJdt1f4x1H1sPl5Q14LoyOS7OhfaqTUtgnbg2KTv8bQ2"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602861398-46c2ba7e.0_1602861519802_0.41024990121838156"},"_hasShrinkwrap":false},"2.21.1-next-1602862052-4c1f11ad.0":{"name":"@xdn/core","version":"2.21.1-next-1602862052-4c1f11ad.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602862052-4c1f11ad.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-iEHb7/ozvkBc1cCcGgku6W9slii1zJSfQmxU6jGQuaTKyGlG2HfUCo6PFdxy6uF03kbQ/RFIOOiL4Pn8iVLO2g==","shasum":"1a92e7fd36f5c54ad8d1c2c29d3f43f32a0b446f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602862052-4c1f11ad.0.tgz","fileCount":157,"unpackedSize":579389,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfibxUCRA9TVsSAnZWagAAajYP/if6/FSRdL9M7iPjep1i\nW8uUherjeGjJCuWu3lfjJwjP/HSdV4R137//9Nv9kA9Y5+Hz0MOAl2bM2lAq\nb34/PzGFjknpKi1FEzA9i32p5Bue3F2Pkm6n4PX4KSmaoL8FQOR50mpg2qqu\noVxJgMDKuNfHuqmb37u4Sd9UrPA0jgtQEYxzPr1M9B0xpHkWVxiQ2GaoKRzH\nZUitz7jM8OW5iREHxxZZvn0zoF8UB2mf78WhO26+n8TC/6BYHBsWRutvvC0j\nWprDpSO62jGRj31hovOFqihfHnerenVm7P5/rO7+onEEMa7tmdUur7oXfkxE\nUhLm6pg9jEwOvYaYFHAz62o8H2av0JA93KIaMyNsPsE5srFCy3XZ2YXarMVm\ncsJGteohQr1XIr84Y65YTNoMexhWuS1JjC/k5DBpvelEKZ8utaM39BTdfEu2\ndNNe5hg/xJH/S9Hp7GMKg01fTcPglXGqX5rxzqtAkl4+jtR4y9L3hChFz1nf\nMWvz6bGKVkWeNr/a85DrG44kZzbs1Nd5JBvXMvm2NyLYTkfZObVAZmh1XoNK\n96z5XE+PEr7VSGoUPKKRS7r0Tl1YvsjuAFN0ShbtcURHKKFb8wwnPN319C27\n7E7fCWHbqSjjeEtuMSHL0SdF3CnIgyXd3oF7qCwB9gZ6VYrO+U9wj76EVvgl\nPNmg\r\n=XK1g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkX+D2YJTPt16L1THb/RbrL70Y8KRK+LNmvkcNThmxOAIgBoGAa5ZwAxaHXUN67+aI1p/rx7qDDZ0Htsbk6SbD/A0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602862052-4c1f11ad.0_1602862163600_0.931999527127048"},"_hasShrinkwrap":false},"2.21.1-next-1602862681-bec2722a.0":{"name":"@xdn/core","version":"2.21.1-next-1602862681-bec2722a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602862681-bec2722a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jUSRSouMirBXlgTW8OeWDKLZ8YaQFmu1eU/Ai13LHxoqxR2tQsAImcuu4ftZURyUpR33sc2lWeF33g7LwO76gw==","shasum":"445edb2335e8c400642d19298d8f7d7bd5f68843","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602862681-bec2722a.0.tgz","fileCount":159,"unpackedSize":587341,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfib7NCRA9TVsSAnZWagAA+AMQAJklxAriOhbtBT+wuwON\nBLXBc71bWuB9Emo+9ja78CRhGKDzdmQUXekoudQ5sbHNEcVHkweZkiAWP+UZ\nKSNeOAj4dx8YncpGaJ7l6d+TcDNx5Jy2Xw3rbM1/61FyiEbUoispmJdtg43P\nVBSnH/myo57xqEsHhqfi2/vXbXBQtkDK6J/PvLZ2Aemujo9ID0wmKvNkv/yd\nPMH89JzretzaNA+LOTpCWi3i3uogk78oHKQVKIeqhAhszkq28uorcCEdYn3I\nxnvQbV+6z5o0sX4sp13ZSVNpD1aZxke2eu0ut/K4kPuGY0AW0VMTaaCgXo4v\nMcHUIknjeHkdu5KSKG838OG1mj3nVp3pb4tOYusx+sQR/XDdBjJuaxUdJ4eX\nNVtv538TvbH7RvBjgne2gXmqgtLZVXzEakNLlEKZvs88dcEOyAoKkIC1a5ks\n6wyYBkNmwH5IbWLPdZI4OqlGlZBfXrEYC1RSlB3DdAh1smS1v258z72O5v2w\nGqgDXafwo4Vgfh8cygB41tRbLmyQx/Y3VJc2Sl/tOl3u5KyxB7hpCt8lTBhf\n/6dtVUR6WREcPcVdOo2oknl8SX5aGYt0iQeo2rg9LfG6sRcR8Il7fSRce+FA\n9U3MKqwoxH0NI2Uj1iDYTHDqiu9dtWgZjmqons8heBTEnJ4Xt8HC8+6x+Lup\nsaDa\r\n=z3fh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXirjKu2rn93jj8ohu4u4tqT43213JKdWvwyvtuEs42gIgbeJewt+vDoZEwWOYPePPbCX5qBwPTbT4pCjYnrRO3WA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602862681-bec2722a.0_1602862797425_0.8685307439613157"},"_hasShrinkwrap":false},"2.21.1-next-1602862900-d03bc1e1.0":{"name":"@xdn/core","version":"2.21.1-next-1602862900-d03bc1e1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602862900-d03bc1e1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tQOWWlFs4mgVOIcmNJkUoBarx6oIDTbXP3rzVreC44NUu/08lyqF6cF/U20QIgztvTHmzhQKQ639H2goVFjzSA==","shasum":"059ee927e27e455dfdb84bec4f174ee18bba53ab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602862900-d03bc1e1.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfib+cCRA9TVsSAnZWagAATkYP/RhsrxEl58kOTba5+QRm\n7FKooBHDyb3HumYXp+/np8LnVMWI6P7m8oTdLb7oN38VCWLDyx7/V8PPT3XQ\nrpFZeL2y6z8mLQ1W80wgfjUvJYwm5tbbRs2hjMgyDpl8fCOMSpzotZGbE0he\ngTyRsc2R38+qDUyF/wcGptftHSOt47AYrgTWutsqti1s7hcm1MDQSOG9Wezw\ni844/nFbrD7LtCnirO1s2r3id24IxE2rNkrB3VJVX/1DK06lnhjItC9XPIZP\ncjwESRJcm6ySZBK2IEMwx9EBvkTOy6O30s0wCZAVX8Oe7BjAHPYcLB5nAIeE\nODV0CWHJTh0dqEBFhDvIUkfPRNQZcIXIbcLX8uAWAGWVX5rXrh+HVjiI1Nrc\nOzR9ZfwJKtOocbMRKQyVw3iXtUpK4ZfP+fOuNw+BbT6M2KoUM0FJOGA8v8d6\n3xyTsiIJrbOXzeAbhy6OOBBLOdkEALYOD30O4ViV9kuy3vUVaVrrLxNjCPRQ\nbXA4aaW8fms7zOJwPwqoHjeu/smTopcHTI8Ksjq5uo+NYW67263xbxc8ad+6\nNHrMzIrBBOLzYm4ES8ihR7RNZRtzGnPWw8xl8LbJcjBFCB4KkIjmu75a5WS8\n4e5hRCm34jYTjlN6mYQV4JKf0Tmxy4NQfRengvQq1ZroR6uvoaybngazwe0q\n66/A\r\n=DUw0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHiNwR9WjUHGkPVojnOu8LJShwN9L1Jg1e/UxMhxBGZDAiA2Xi6E/1kBS9L/N/4vNJnD51larDeF2ch/89PFnidhzA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602862900-d03bc1e1.0_1602863004386_0.925391399729282"},"_hasShrinkwrap":false},"2.21.1-next-1602863792-f97b8ea9.0":{"name":"@xdn/core","version":"2.21.1-next-1602863792-f97b8ea9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602863792-f97b8ea9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ga1P0tHOhkd4gWVYYGKW0tqHoLmY8cSRs9VLONFmCoG+iPjOcQNY4zty56GuwnVGp4dspNu4zoazWhTVDKI7Yg==","shasum":"38f896f685cc075a962d99526deffc7e0378f06b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602863792-f97b8ea9.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJficMiCRA9TVsSAnZWagAAjAAP/1sNV4F1jEZgq63hTO22\n/m5fDRjQFkMECKKWdOtiTm3E2tP75H836a2fVp/QmH8+AnAGiKoSAZSiAwrs\n9a+etB6zCTl17NSOWo92uT3nd9DSka3gevR0WwmR3nMl3cUZCU+kZjAkcY2R\n1DczTlU84yhtpl+ueQ3likxyunuIGoNIIsGm6o9cH8x8jdBEPcKO21W4RYbx\nvUnXNnEeGHo4KnbhfNw1/AKGLsSN/qlf9G3X1ciLvdaK+vqkQ7r80rMpW4UK\nsAUWQMci7pMLcHycCBOenZA0uTvOUh02jl2jQuCZyzmLjeLjWCGqlLQRqnRU\nkUBHEkjSG+j3vpPvTcByxLwx1nXfsfsAqqbAGluThIOM9aBNjiqhKsEpJo7f\nVyEajzyFI87V8IInjsm42PjdWP0wcWLwE26R4vAAGi6CcXZWDPDIRaDLh+Qf\n0uV8TfVrPNGvRX2ZhpagzYh6872NvS17kD0DEgiFurkQYC/fZYkp4ZyfA5bZ\nc0QloCEwlCVRsVVQBWLI1B2rSKjC2Hzx9jgVOWvNoZ/+5XeTm7Hff+cI0Qnr\nRzDsefYSP9/NE7EGUgdlIF7MZW80/ZQmVnnQjRGbzak4KyuzU31m21aIKbzi\nCi9+HGou2mwleLcku5gT70P1Z1j0/phEAiAuOUOKjTl33x6boByRhtvhazVm\neUIG\r\n=z7cn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaIobDw309KrK1QwmxmJqdHDz29E9/pXdS05W9jYbe2wIhAMnO7ADZ4bwXNlgfVkRTMhVB+cKZ9uF4ZfDcDdSI9hj8"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602863792-f97b8ea9.0_1602863905792_0.8687762915911115"},"_hasShrinkwrap":false},"2.21.1-next-1602863921-53768ec1.0":{"name":"@xdn/core","version":"2.21.1-next-1602863921-53768ec1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602863921-53768ec1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-u33QA49xiAW1WDp7aW1Q1Sd74NXse9aUvQ5Mo6nPrAu7FimARmVriDGa3jtMJMtKojSj87tpmaC1A1ZfnEDYfA==","shasum":"57814b286941033f036481d32c5299de7c51ce24","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602863921-53768ec1.0.tgz","fileCount":159,"unpackedSize":587341,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJficO+CRA9TVsSAnZWagAAqCwP/itq/rLKUo0jNe1kjmPf\nlH/nc6XyrGMKKt/67HTfCs9a9VXR4FZ2M4HCNmz+zPszrJqKYL5N2qR/JxXz\n0evvJpqC74CWt/NHlKm/AtSK/7+OjufQdOwnf1Q+jKnoMn6aWemfH06ASEpk\nKEvq125Afz6uK7s7L61sAxAPu3ObeG78hIclbLTmnjAhXii7q2IrsPwJjKi5\nT2JLUx4EPr7LUzKUL/pH3bB+ScLhf0CcKD4fAsesAztK7rN7I9OouTEKAy8H\nLbDuGSFhWey8eWlI/PloSmHHDs3VnUyQvD7J/4AKxCWBEaoUEVSvBmocHLDT\n9LnSXtSplPL4nTW0KpSkbXpNvPIuwblBnxTVCQ8KSGj2k25OSxwgmPckH8l8\nD3WCUh5W62f9VCQkQy4OEzBSH7yPQ4YpdqSyBHbuDqgWdzGC0W6/rOCVEkCP\npR4gddN87Nr209Ln8tokriqqoKnDbMVXRfCaJu/TVX56ym+tdQnkoDSTn93s\ncxmqJfJOVf/27/sT6hzECFko6ygr9DJgynoS7Hx2fbURqjn66tHEFlRqwaOM\nVp+fTsKtmsOjd8Ax0M78q3+9lmpYqyOpeo6+IL5WMgQBxfMQgy14sVXrF5hn\nkSdfcTV4DrXDlJglSLsGGcf/RqGILFbCVWmU/Tm1ic0S682mXh1RXGG3F4nm\nnpQI\r\n=HEnZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDU9J92JqyONC4blOE9iWf1KvOHwonAOoKaX4GegL/RcwIhANb2xWJbpRPDDmgdu8uVwm0a8bwBXHsMHBLdvFqfwNJM"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602863921-53768ec1.0_1602864062385_0.7520041369755823"},"_hasShrinkwrap":false},"2.21.1-next-1602864030-4c1f11ad.0":{"name":"@xdn/core","version":"2.21.1-next-1602864030-4c1f11ad.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602864030-4c1f11ad.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-HBiOvaTurjp+l/TDxlAl9gYC4tojHyKDbwPygmN6dMd8k+DAVqqOiJRm2kMXjQ+iC3i+YRv6fE/SRByBtdmWCw==","shasum":"8377c7d8d617c3ee7e6c4ec1bd68d429acca43dc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602864030-4c1f11ad.0.tgz","fileCount":157,"unpackedSize":579389,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJficQVCRA9TVsSAnZWagAAD6kP/1iDTHuF+M5heUeAl++M\nzqwHH9ldt5vXq46qBJ8uDMem0YjL3P9xZ+b2uIaP1GTiXDxQkQf4qFOyHiOg\nRE7sqFwbKYQol48ecH1DdUWIuGoFHKJ1f+sNlzFGJ7VXwBuocAttRXAUaEua\nlaP7gNTduULWFVHZyqOTMwpW3FJVspB2cL+mgb7/pE8t8Cg8PhOZK3TTa/Vo\nQTng8hyEFJ0h0Mba4QYvp6GngH079qZPoDcRuJAxFZmCGbjCQ/TWpQH+xVSj\niDzzEdlVIiGNntMb4s4Myuk7EMWiWWjQ9xHy0NBtALYyG0OJKGOGyfLJcvZ5\n/ki69itseZfO3xZEtNMw4WIG6Yie0NkJqTase7Wbt4H6R3H1oEu8tOxuVTsk\nH1buxwPBGL8yCBNrhCfVMCrbUJXfIaKOYErkwRjyLuZ1CZB7X8VTVDdyQUC6\nX9F7rAA5UvHyadUi+e0K5X4jX9hpJrtG/KAzTABbD84Bqi4NB6tTCNVyGrYi\nkPbt1XSuWaWs/4l42APT9VYRLSZnwSLRO1p9dNW0pKzJaTeK1ru/c+XVqIsx\nrjoYAPIswFkCzeQtyD0HaR/cF4OuFyhyhAv13mvz3uexlObno7BJF1Pvabt9\ngC12NycWG++HAQCq9wZtc6H3MRMkccEXXusMdBA+qw/pazppe4esNuJSG+Hf\nkRSl\r\n=MLpr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC91d5nsZxjbISD5TclqJEBLuK/ixS8CjM9qc0D/7c8HAiEA7O9rOltNLanD56qTppxWDXoCmix97FoUf0+EfTzptRs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602864030-4c1f11ad.0_1602864148877_0.8155153153855925"},"_hasShrinkwrap":false},"2.21.1-next-1602870118-f97b8ea9.0":{"name":"@xdn/core","version":"2.21.1-next-1602870118-f97b8ea9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602870118-f97b8ea9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OQJOyW9fOxFKV+r8Bug1kuWDrxb/GXbgQ6JTk/o4oj4d2a6TlynRaPmlqckAnq0hT4vzULeZ/mT2Ak7oChXmRw==","shasum":"d8d9960c1008ccca9b606270a58d9b25eec481f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602870118-f97b8ea9.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfidvcCRA9TVsSAnZWagAA0pgP/1dfi3SJg/4fLSL6EM46\n3wW1LnG0Cnr0rbCkGmp5s4lZRDpzfoW7/BnZd6edDT4tecsZnabNZu7qwWVo\ntEGpncJNoUnucpOTBUTMXQB4w+8K39vg74wmWIxFozXoXlIY9YLnMJlCxNzY\nSUtWUj0szjaiyjPiy+W7Wy0ujEyRgZjf/Z2RbbtXqTIn+KBRYfv5dvW/dvXY\n6oN4C7HCqVzDhCrlOyPw1n9I60LwCf9t8bK9p9caKqtXGYWEQkN8jaZZU6FK\nNOBIWqiVNYz61G1JEI87XX0kgxTxUAgcpdwWkeuYR2O9zGXAmzYJz9puSd4+\n++MC76Tjkui8tabtANV5uRNhk+gMc+oh1qAfojqOu3USTp0MdySy3wW2tpXE\nDf5jEtsBVY2hhTtGWL0LA8zniTE3x79m6RQiAe6OI1hUTzVYDl0DwScpzUG7\nwpmqOlRIZY4dZ2SnLcQMtczpKWBtZ+tBEO4oy+vDS2AGBVHL2WHOXJ05ynYN\nglIiQcmoVyvGJhaViah/tYezV89xmPIv1uS8RorIEMa9efQ6bSq8jK3CH/MY\n4VD6qkWo+NS2yGMSIR0AOFfQoOSjCh5LNsdznHiCjAAOB1+JkUMlHtYuwnzz\ngIlwvxShRQfo5/Bshc/kMWqTEYDZiD5SWgWjl7mzMocsoHWe+sWj2v7IhdY/\nOeUi\r\n=pQ2K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqJbrgzb4s1NK+lSXJsEEzQ7uVOCJ0VDBMBvpX9UY2RAiEAymjFctu8gXKmq2BKipvxo49b3oYpE7HvMVUssPJnRSc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602870118-f97b8ea9.0_1602870235834_0.7629105984115003"},"_hasShrinkwrap":false},"2.21.1-next-1602870438-80f72e62.0":{"name":"@xdn/core","version":"2.21.1-next-1602870438-80f72e62.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602870438-80f72e62.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-HLBjYw8Ug4doXJUiBeThT3HSO3VwFCVuZkPjWRZ9sqreemG7GHuO1GVJ7VORBSPkoWhEdAdIO7RRpBAusrD3qw==","shasum":"5aefef7a1ec77d7e210933e6fd74f4f41562237e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602870438-80f72e62.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfid0cCRA9TVsSAnZWagAAHogP/Al3MtfXGajUbD6+ktxh\n09zBq9JugOZxzta/OYGpZmo2mn9UJtdGmAbaCk1wibbWmJr9S8G2c9jnmm30\n0i20QhyuoGZWKDqgFRUt89R8kZlYDTfwZ0lmT5dO7N5pMX9JYWwHDSI9cIvU\n1bnrcCmyi6Xk1ZhAS64EsYAeP6/MgcJAe0l7/W9nA5UCUGAMPJLHqNx++w5z\nGY0GZipRdOiFP2/DZxXV68kM7rLLx76WMAYbc9UAcqMio4IAPvQQ6LIlL3bx\nJNpbFlOkiNAFvwvxDQOTeWzbaiAvElGgoqkII0gWHkz0vHqQuUhjAACpkLJl\ngYttfsM196SPswaaH95GHIpGtJkdasv/WLg+4t7MBazeChWLYLHe6SdSf+gq\nGppXP4W/BCBcZjrxh4aV4hIiDTeFfpFuMc0xR1BO2QMo789GPJzYV8duIvSq\n1cdkJ5J+uUTRQCrMUqagVpK49LArmre6GzUkMKJXfnf7BPmf0hxT+0FHaA1X\nPPtEA3jopquXLRv1jRphtXS8p9qb1yy8QuA8w6GrKWbhzUGDgG8fXUMuqR8R\nUbKxtHJPB3rE+9q7bpzhAPu6W/K9wjMOax8lagF5C1wG7OUj3wSixqFIeWfT\nXYKBx7GXwPLaPI1RliLe+2ViRgkw40elgCk//s7WUGu4hTDoqWu7Wy1wF21d\nOGFN\r\n=+Plm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGt5LUabdWu0oldhv/p8HF8lE8V59CK+7P5+myrP7kq6AiBU50yPXUeR8NxTXjm2mLAiqAMRuVG9el0ojKjFvIkUdw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602870438-80f72e62.0_1602870556025_0.7972099863950277"},"_hasShrinkwrap":false},"2.21.1-next-1602871143-9b195101.0":{"name":"@xdn/core","version":"2.21.1-next-1602871143-9b195101.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602871143-9b195101.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-faPSwr2sIlHNnwhwoNLOuRVlQUGYqpkfrmFsaFqEvXljKtp88idYdh4I6EFwjhzxvyWye3apHoKyhMmyrqpCWg==","shasum":"ae39c55c7b4f98fb36ee0d4c7068cf48fefbdaa3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602871143-9b195101.0.tgz","fileCount":159,"unpackedSize":587301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfid/0CRA9TVsSAnZWagAAdT8P/iqsuu7lYs+KmhrMfugE\nBL2zOLTZ3D6ivACnRqisZpr27SkIMM/RG7cF+aC7z8lRM0sunj77g8zvpaf/\nF5TJoUFm5aRlw0E0EMinuUsa1GFTG9hLi+rCZEBmxwTUyiy+r9bZxgpUy3ht\nO4lpQEVbNA3RKgYvegSLft7rE6JmiHr6FfTJY5TXkFv1B+QUPLU8PLF+QxgP\nkLHMDduEqPiAvWM5tNX7NOFrfubB3qEyWO2PsIU6dWipks1o4UYK8NLwuu76\nW48B35YN/QaS/S9cTaNo9gj1pV7eu5mN5Rajle+THwMnlckwszOuRDCIiSgW\n2V/xyrNk8Sal1OejDdsnnge52EhOsKmhjZ1oA43arzHumE9AG2CYYM20LqtZ\n4M0z4+LGF8qD5qcS87+QAcwLRIV894j3BJ5ChTaGSo2x1kT+NL6EouWuxXcR\nK++UnFuKH3Kx6JZCqWHRllEt7/3D178Lip0xTDn+1+aLudSMkR+4YiKOMPhd\n8l1kkMG+R+Q7e0rOH+AO3GqKxrgh2yI3Hadsg/1tk5GRu5uOtG4Smpokasv9\nrOMsA3TfS1553pPP6fL4FQmuv5VDIj+4JXPRq8ZXXhRtK3kVBHalyDw3eqWU\nyatBdbNcbTecopZnXIrVyGZMhQY/CQBCyOcA7V2cD1jLDvL8bekxG3I0gUAc\nT7zI\r\n=wts+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5Pzd/yWkaVBpDxrDAoAQlbWM/gIcHivFK02kAygx/BwIhAIjFovA3jwGC9HpQL+ElokFdBf+EynGFOmiHyLq7TnCk"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602871143-9b195101.0_1602871284250_0.027910232169775284"},"_hasShrinkwrap":false},"2.21.1-next-1602871201-7f53dc34.0":{"name":"@xdn/core","version":"2.21.1-next-1602871201-7f53dc34.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602871201-7f53dc34.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZOgxsOxfxmg6mdCpGE4D4fbavPP4N6xBPuRNmOwd8K+rJHopP9r8B3R4EXlRTG6c4q1ExvjznP0mCavsDeOt6g==","shasum":"7e5333d7b17790d85cdfa9c609353360c466bb9d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602871201-7f53dc34.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfieAWCRA9TVsSAnZWagAAcmQP/0aqCtm3RkftCK75xjgS\ncS9is6HjwwJE5Nuy3DSI+iU5hALmUJeKYL3b65zG54augNAyORQiuJfRzGv1\nwVzKyvt/mekPMsdfoy4fsn6VVe/vrGGrUy8H0bdFctRk2eyAkf59oh8k+HMh\nLrfS39GLTz7/l+Z7/2xso80HYDp6as0LAUMi/epLyuKO+qhvmmjxX6+iOHDJ\nRap3ycM61Rx41NVryD+ZMIFUt42/9aQGNAdI7kA0hp7CltCTfK3ZQ2k66Knz\npj2VFs3GdGwb+4XF6s1wJDDhnSgst6te4a1loFIb81rS4UTSiPQy9RiSgbHL\njPyrGFK15oz6BJqdJHUHgzkKWhcdODpScLQjIDHZbtcD9htAvml+v/0yB/ZP\n4/X275o2u3QkatZ5ZMWPcw9LLVaf3NXfz1LefVaRqBLU4ubANjD7hdMa4geH\nfU/4TphGi4mnWl+F8F7avHgDkOn1NdHPhVV5GxuZoTX2CQtWS2ZlvwxUbIwT\nS8C6qwkwJkW8/h5wOZ3hhSgy7mPBmxpPRh6ZG9V9mNRGyJEF7CpGzIOaTN6L\ns/hB2x5WwWl1szDdw3xrDhDCMuXo0mk4fVZ5xo1DNY6SezZ+XDl9xWXA91RF\nV450gZ5HUHY1oWtE8OpTEwJzw11ZAwsiMYb/uwUccSM4uvJtcDUT82Pl2rzo\nX54J\r\n=pSlD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICXzU8WVlexhwUjpn2NWKDpxLqPkuhDzYmuccmln05WoAiBYfw8sjXPou+OZ5QzNzYVrdrieThwbjpf4ItIIJ7sSAg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602871201-7f53dc34.0_1602871318033_0.14699425588345116"},"_hasShrinkwrap":false},"2.21.1-next-1602878817-96f51397.0":{"name":"@xdn/core","version":"2.21.1-next-1602878817-96f51397.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1602878817-96f51397.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TpZpI7PXghIxA0Krvwv/JhSkDdyG9f4TaRnHhN9aMxdh2ivPylUZ9yoLx9Eavk2iUt6c26160MYmb6DW/53oug==","shasum":"d6315d4119c8b8d8de31282b3e3167b3400ae0f4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1602878817-96f51397.0.tgz","fileCount":157,"unpackedSize":578246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfif3bCRA9TVsSAnZWagAAGPAP/AyfU2hZOsuKViSl/2mx\nP2ghqcp92RezXvPY4fnKmNbfMcZkOqjrGHT0yLwuvJt3zufmLvMwQ8/4NN/b\n2z00DHsEfYa+TrvynnJ7dAGfThgN1otfw55BA5GDR5ds8sZhjBK/SAC39V44\niZp9xuirToIp9M3zEui0p+ksUCNHFOVyfbhUlXZ99qS7yLdOAMNeZeksuMbd\nvs2Rw3LIlf9Rj/H35hQrnXgiHtClEEh79PnV94VI4OYRAoQjmaNgORRVcfkf\n9j/rV1IJcvFnucPkNQd2Qlqzso6yTE12I+4nz88ydQfwDr1lVUILFPdUufuG\nwZOlJMDRDxlbExE9NaqLSWrT8DQhtrK1CJ1Rhd/+UoWFJ2+DopxbsoznyRwD\nz+7NojRj5xGS4xvEsFDg6jef7fG5DKr/TXrEe7MSrOSp5QYP+j3QpRS0nfO1\nazKKDLUxuoGabaOyTlCPQ6+k/V7OdLOVMC+QS5pnjELEC38ClA+z2rsqFBWO\npzUL2ZiWEiQAQr+uwZIXwQaZxzbmJ0nAPzJNSnNwDOoxWYIMm4/C8oK6pVmU\nlJQYdkHjkhJrcnXvHeuahdgDkRBalOlmGOx5muOc6U9mlvC0Yt6Ya5v9+nPP\n4AVCGC5dQgmbnxsSWLAlb3lk7FdhgGlSfbDO0E89yiDiBhCSOt71celCKRRD\nrCSa\r\n=t0W6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDeMQt2U+SB1BH06fXnb8OA0rXldgzsVhk5WzcK0ChajAiAUJoN9yu+44O4Av/7iQ8LNJwDjLiYqQBzdSacVTf2fOA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1602878817-96f51397.0_1602878938675_0.5292086211982936"},"_hasShrinkwrap":false},"2.21.1-next-1603096398-19e6693a.0":{"name":"@xdn/core","version":"2.21.1-next-1603096398-19e6693a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1603096398-19e6693a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zH5PQ5E2lZIqgDBP/Jm0bCsX/C2KyZ9qanf7wRsBMPcX5eF/bpvT2pq/TeA6hq6GHbi7A8SmgzbIY3le/Nbfig==","shasum":"4a84d06f741acc2eabd394fbdfd2e82855e04554","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1603096398-19e6693a.0.tgz","fileCount":157,"unpackedSize":578796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjU+4CRA9TVsSAnZWagAAKOcP/jru8Apm1e3O2Q320KJ1\n7LxaXHvLxVUSiGnTeNqP3GJKmDCjgHy1H4xaCdr0G7gzvWcwx79fst2cjDui\nUCXGIMQaBctv2nKjoFfQ0teT1cnArDGcwmJpDi2BJdVsAz/sxTP0zukfEXDR\n8Zavn7kIxfU+r750Qz+oVWH6z5QiIzUh08fCPecm5dEMFmCblNPSuYqKOwJY\n7BO8iCGz5H3MiZRGLuTHu//WxxBBqO6VafAkBXn+rZwoDxrB0v7x44C9KCdY\nLMhGJyVrsdv2C9y09icpLQy+WJSOjSNkCb81rRNRx/yM1et89NFtEzaRWdmN\nttbzbP9kFG8tGG7+LrC5/94wajjbnvtDXamgjiAJ+L+e9jDz559wjR9a28vw\ni1Kuz4S16ORXr22xmxTpjf2KZ6jTLw2fwuy+WLQalIY+T54M6mAoKFUsmOmW\nvPoDAM+fh1xKWauC1qBdn2Vjp+Qx/QKR32+pRBbxYgMcGYgY7X2zlXkpDsiL\nP5RYgXyycVuYS4gkexMKudrcEg4DrsnJQIpd2kgikbXY+mAbX2W4OHkUR5C1\nKrnQF1yVKJfmdfc+Z+bwgVOl28co61JAftAlifuqJt8Q+5rKHYPyssnKOC20\nY6OV+vWZI/67nbg2aJ6MGmpPidXENLxyqHPQpGLMzd/EzQyqlIwVwz6zffEu\ndJgc\r\n=ddsd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrDG/J6iDO/T5k1Rnrq3LCDLx0Y3BMrUSHfOfoXqEfcQIhAP+hD+DCmM9TP72mvVWE4D/pllihX7Hc1iSskj+5y6Nh"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1603096398-19e6693a.0_1603096504131_0.14095471233358947"},"_hasShrinkwrap":false},"2.21.1-next-1603100701-545add88.0":{"name":"@xdn/core","version":"2.21.1-next-1603100701-545add88.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1603100701-545add88.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GKJETBaZ3g4BSOk8Gc/4JEXfKICCTjdlnFn3jzQ3yIsYj9BACB74hDJNg7gvz5lJAK9nJwykHI42/HWoYOMFqQ==","shasum":"935dcdf984628a370994b69b72445af8cc44a281","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1603100701-545add88.0.tgz","fileCount":157,"unpackedSize":578856,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjWCeCRA9TVsSAnZWagAA1dwP/2RxpOjqY6uZ6SeelUAm\nQrl4Zj8P+aI6Vss/R+jngPDHYER4S0QjCMrRiAeGzFFIpjIjXheJ4Igowbn1\nvT72YjYp6aNLsl0T1n5KE/hySmLgDBzVwQrJgT3xSoRcfa4mOVBXR00evHnq\n+ZmR5eUxZlQMk01PkVDdCX3yYOaNzk315sT37+JeySYFO70YPradh/9DFp0n\n9E38iP0q5FvdO/YioIaz/Z9tQuSyXbNYiaxX5lz8RkK6iFDfAHfolbEbC2gW\nS4bwF657lnE0qVhy2zEXIDTKYq+H8TIe0lM3UuAnzH3KSUmBmy8aqkyp1aTX\n6QORQdkJB9vIGbv/V30LW844lf7RcMj4pvHqUQ87/WqGv2nWPXA+LqxjJLnu\nUUxiwBnq+YhFfuk5kFSJEns4v5SYfgY1e+2/Jr97CQRRDkBBo9yw0mWDQXP4\nKpbEF4GEsASPBStk3TJf3X5GasLEbHeJjzcGDJzltU//TkYhAP1Ld53J3k4k\n5spxJ2X5JZs2fhHlZw+8ZZQFbZkpRRRLxZjxLmwHHMsLb83qOiDhwDvd6Fe4\noHN6jG0Ar+TBcoJgVKX4PoXN9gRbv/YiG6u0MpVg4QPKnwQ5FNtAXNvHp905\nXVYursxSAtDMZsTJ9rwVjUhi49l9s3vDmoGS0tjJ3O36KLiVJUTAaiboSgEH\nz0hy\r\n=f91m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBJulI/wqJkVcmaf1AZCLv0lQGmgiiWG1QzHlA4fpdzcAiB6X+cLDkKJ49as+6PUeV1ZRR4hhnAPNUU2FcxRo0P02g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1603100701-545add88.0_1603100829550_0.6265504914821931"},"_hasShrinkwrap":false},"2.21.1-next-1603102087-a375e296.0":{"name":"@xdn/core","version":"2.21.1-next-1603102087-a375e296.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1603102087-a375e296.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tJituvtE2CC+t4dKQm9AvgFfo9fg+VBH7K1/WKhH+5PzVAHZ4sWI531NHQwYNQLqpnIOtDSgt/k41rnnu0NGfg==","shasum":"385d035f3d2744c7797e4f4cb960b04928de3467","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1603102087-a375e296.0.tgz","fileCount":157,"unpackedSize":578796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjWXtCRA9TVsSAnZWagAACmYQAJfvv1RHIMupl3QP4i+3\nZzBtwwiyzo3lVjjvUoc0RUiKBIQZM/GKb2EYw2DSupRQ5EHULzxauQmw6mYc\n/Q3buT3+ibDy1bDVyOXMRTWpSD4piPB8j0zyW+UHF7vC28o5el+OQ6jX0Gsz\nZbdqSqw4WKmjmPMM50ltMk2/F8WzXQTNNu3q9Q5uIpBJ7GAfD8OtbDKbe0Qf\npTK1NhACWoovCEPqvy0F88GFc2a7ea/zgu6A+m8pNgeqWeLILVehq6r32ghq\nZjZY7beuCBlHNgC+r8Df8GpljXdMR5caJNwikE0LVdkmJt6Uw6aE/5cBdTiT\nkkh6Dx8x9gJzxZZWduIJnK5/IYPQjsdS4tR9/xWckLXbVR5QW2QbLEnG8xvr\nMqSuNxJOdV0U5rk4xjLiO3owMEDd8mDGlxKbbss1nqeyfB5bn3LYwg1R7pos\n3++tT+/f0bl0Kd/ub+kgyeLva+f1bY/gh+C/NS9SNeb+J3J6BlszYrh1JF2V\nYPphL7Kund9HZx4di53S0ZNF4beOM3xKijF0OgKFmAmzIBvFfqi1PifNxEex\nZcZwemvgL1W2T2CffI3m4c9QfDkcmsayEwSi9kDKJYntKEReCF8t9TLtJkQU\nHL54OO3MZ41b9BSlj+YvCHBtaugnokWqRJZQPZh+4SStUVNJ2XutYX9aY6NI\nhxKu\r\n=mJeZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCq6bQpURto/QqvpbNvzNoUXV/z7b47NqIHGFd/G0uWPQIgLjlazA9t0Sk1xEshx/GkppSlnoNieJDJeUdp/iheBoM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1603102087-a375e296.0_1603102189091_0.5960979921938085"},"_hasShrinkwrap":false},"2.21.1-next-1603103237-9766692d.0":{"name":"@xdn/core","version":"2.21.1-next-1603103237-9766692d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1603103237-9766692d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lx+SR5hOS1IYV9FD7RkEo0jNlt8DN613mUepd6iOtW++AYLyCs6DHfNv/pW4L2Cq4MN0xAY1G9OntPBEQnDprQ==","shasum":"747fb745cbd1d5c8cfbeba0acad343ed9aafb0ee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1603103237-9766692d.0.tgz","fileCount":157,"unpackedSize":582910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjWp6CRA9TVsSAnZWagAAC7YP/ik/RtFcRZAMCh9XtQ1L\ngyjQdYsvR1yO5/antQ8RzZYGzEX9ShGKBJ86dAdDn9ZwYFGtdGYDI/NL8CVk\nZe5V6LtID820KJdogdjhpj9Wh0bt5+IpZHXt7COB9lBNRN9BLlgBUOrN7AVV\ntpqjKE6YXmr81ovdoo+ajgHfYDsO4z3RmWvvjzAJtR7jFa1nq0mpKy9BcI6C\n4EoXOSqydQpRWbS+l3KG6owr+eXvUPERfckcQa6c/u8js8Xph/X6gjyw/6Ke\nwh4pBF26oTsjZfSt8REd0nbLYrHy0GN/AuF33tGo1JRUFucIHY953uZwT/Uk\nBhOtEzTGS7Zg0FJZiVj6TId2DEKJPmqJIF+W7dAb70sAtSAM/xtBdRGo6z+Q\nVHcCp3JmZFOqq6K5QpTzw8QawWoDKBq0jhaOa4THKM1CN5reXrvDLqPWvEZp\nFCFZLM+Jb5zuZ6NbqQZrDQ3+/8L7sfbQMpXZyFlkzcmWCcZeK0WvcUf2hIJo\ncg9RilPfrWU8ihHFJWEWh8xu7/cMizVooALpc9VLmReEpzP6oV4OZgSUKK8a\nuoHfW99EAZ2g8JJddlQVFOwxxH1JtmoT+paWy/YkJhzcrc5kb+1LK75+HUoT\ntxvvuRR2gzh8he/lXpAL9L960O+00abPdPL3uv1rAJxRoJ/R8gzbOejC1Y/b\n2Hve\r\n=i6hY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9IuGkcmyMKIIEgOvFmusz5maseREBQ7QDSDJM7YtS7gIgc+I8Qpt7ugEvWWZWvxIe6m0vDmKgjqidAdFadx8KWoQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1603103237-9766692d.0_1603103353915_0.6362270289276801"},"_hasShrinkwrap":false},"2.21.1-next-1603104774-264e2f87.0":{"name":"@xdn/core","version":"2.21.1-next-1603104774-264e2f87.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1603104774-264e2f87.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7MsZ9gVhlVckZhN7IbfxK8HWvvu9T14cTVdBMslGDAJYVBQouh9StWkjcKYI9vRGg2aZpQZyt5ZEzt2TsGRRoA==","shasum":"20f3499b6001a387caead7b22f0cc4148b493d59","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1603104774-264e2f87.0.tgz","fileCount":163,"unpackedSize":592307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjXB3CRA9TVsSAnZWagAABi8P/2FdqXmtBHzrePQE60mE\n8Iv3cAEmescTSfcx9jW34TNWzhNB5tHofZ0W0QD88hfonvTEqux0wsy5/O75\nsilDci49azvRXqkM82dExDn/fBLbH4OB0qX1O3b5hmYyr5XPyJyNQha4MHC0\n5vpYyzvRsns85Wv3cCyarDTb/nyxCRdh2o4BXV1LH4EhQuYUvGDfQqy/Rt0V\nJPyDl8/7lKzJDVYf35GuZMMS/ZX2bpFuewN89HlAMTUj4eZgMAtzx/5Q+Xje\ny70t87cbltNc6l/EpUgtUKbdBb9G0Bf5EQ8VWhJR9qJfiKyKxESr5xT0uMYo\n3MCyOZnde7KvlIdEwe+lr1Dq00M5mEYAtnDPT78N5wyTOeOutDqZQWLtncJO\nMY7zCTwVPGtc3k+GbL3DD2TCRhrWLyxJxR6c4E6perYt18126QnPPyItwLT6\nx7mwo8vTYfKKLjfufye/Rz76pyDqzSntzGXfIuzRqqBnK8MmNLj1FV5EI9Il\niOIQJGPx+wGefxMvGbPXDFHWPYCuXMeDUhQcF7Ougj5dtWCFAp55LTtIl/Os\nhPEwId9a1QZBApE0VVgWVGQrWRhXxlgAG+Hk4jfIYvN0gw2yvoOGNWQZKShF\nspWN6xpmgHDXSa+00FrK2cg24QrpHv9QJI9vkKk2uwZaZ+dnIMTmshPLqo/B\nXIdy\r\n=dUQT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEUx9hJfzCwYaeStKR20ICghpCHoFCTjXFyWE6QjfpS1AiEA6o1Oel0Clbk/4cHJmTREy+89kv62evZQYl7YSMIRHR0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1603104774-264e2f87.0_1603104887190_0.8049227028417438"},"_hasShrinkwrap":false},"2.21.1-next-1603105056-24799d83.0":{"name":"@xdn/core","version":"2.21.1-next-1603105056-24799d83.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1603105056-24799d83.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+sfYPvnGkjozrPh53/+48lOLejD8LucDu4H3FOfFvSAxRISDMM9RUrKK7R3njCFjqnbdrBjiFpghoXAceSQPxQ==","shasum":"4b88441c2237afb374044f593ea8454b9d471929","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1603105056-24799d83.0.tgz","fileCount":163,"unpackedSize":596985,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjXGQCRA9TVsSAnZWagAApLoP/0SS1WeLFPjoYOr9ff1l\nLjEAMQB+e2vgpsr3Y7AAQ6Lju9bGc3sOUJMx2fSZpGi/gRzXJ0k5M1OLxJzb\n/TcTNIuNKZxL1I2e3nWqyGAXhZ6OsxMXfCoDU7sxZXFciqdnrA6ehhB3oLsg\n+kvzFDEovDM1ayXkyYoSmrpesV7PHCFi7QBCPLaflyweG9WX++SU8twAB+6h\nLXOjlo/f8N7AGzR6WZIoRlChJvJN4d+UvKzwe7ikUgMI0MjUTXmHPc+MILgp\nhNkV7T3/wxlgiQxG/UVKZwzTY8PDFqIs/QrzADKED8KYk525YvQwkaxLeeio\n473XfwGy+pkwv6mm7N1VuWgLIxuI6QCuhCknRim0sF6wPUnRHL9NJq0iycvo\ndy3IWlU+H3gZw+asegaEkuEqNAeoRaNSkutjGiGDrx+7SaQ7PC2aRIppGYHg\nWCLJQ5wA8z873tDRKJJDzAQ2HrpD/EM8K49mwXlyZMEkYCoX3dehbcmeSDRE\nzSX5RHVVKYUPfHz6Z+2Txf6UnHOuxB5KFmnFSYAj1bqtoP2rVY03McNiMVNe\nCrCBhs1GhnKsg5BmAkBJxCchhXS0wlIDYDsOou4BC65EjY2+8GidJnQTV8mT\nlpjBIg2lDZo+LS+y+6ge9N5mHkO7doMgL5V/vViDSDSiJXRsPOifR6FduDzW\ncSoQ\r\n=xbVf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgnylc3Gj1g9MWGJTNDhfx87q4McWaKVQAFyuCwjFovgIgY4WAeBDBbZ2eP35sFEdRsAjeYm4VIe9rQLhYdLeXEtQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1603105056-24799d83.0_1603105167709_0.6942728394044786"},"_hasShrinkwrap":false},"2.21.1-next-1603105206-31de407c.0":{"name":"@xdn/core","version":"2.21.1-next-1603105206-31de407c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.21.1-next-1603105206-31de407c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-blej7Mr2Wy7LpFCPjOb8GXkxzK8X856g1QU/AXxOyCSwLtkvncyaqV9nQQOSexT2EngvyFXj3FpcnCeh16mRxw==","shasum":"d0c22c93d970bdf53bfc6d22b7a7fdaf0eec686b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.21.1-next-1603105206-31de407c.0.tgz","fileCount":163,"unpackedSize":596985,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjXImCRA9TVsSAnZWagAA2nwQAJbaNynuSA7suHPTto+Z\nSiJWlDxE4nkk+HsFAZFlTiX+cP7Zg7KSLS5BfUHGgg3QmMPWVQNh5eRnHmuq\nPnzIYC9FlWd6wOyHrXba1YLWyC+G/RfUTZX8aJT2gMo0bSVjb1vfvBlGLhO5\nU52lrCYGP7ZD0rtCs1lBiphchRmHjd/XwjFLPiifZG9rVbORPRNQrS/yj3OY\nBwkLs8gkCX1j9mQCayqiJ5Lo5aZGR+NgENMel/AR1mlZ/SH7TDwZ3YEljjoX\nAbvdmWUm9CsPPzLCwWQgGX71Y4szE0epWI52WCvlZYg/jFMnfkKwdU8prycm\n77nF50CzpL4CwYEjJrqin2aPDjK+h2makhAA4BPMRbRsKzHuBRfRmhlqOtz0\nlr6Za+x3AH6AomNwt0FstANVkZfBjPYhGiPMoaJH/g6gPcrKeuxcH0m+Pafr\nbDCsBoZehPOSX0e1MaGLQIqABPNmWHyCu9BZPORTPKVL/8oXonKbZKlkOjXu\nZS2HwzMOoSjhY9hAgmkwiAqHxFMzI4SmMuHYXYftQpd8+AN4vNWiQDQ0cBkK\ningyLpfBewSNpkPk9YvWbDUT8EDUgLrzAPLiBpKRIBdSPUb4dJM2H9Hu/H5V\n7MHkkkoSksp6R7Bgf2clkMXxM1N9SiNqLJP0R4k49NLVIx6pMPv19nRtuJlI\n6zLd\r\n=NpEJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/YRg9ZdTwcl+lojAMnG8WhKkgOGme6+3FxHyVa62n5gIhAIp0/Y6BKIUUyzdqX5FKnlwj8Q6Iqx8UJeHGRrRS3yHF"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.21.1-next-1603105206-31de407c.0_1603105317543_0.15520308620422196"},"_hasShrinkwrap":false},"2.22.1-next-1603107408-9fee9faf.0":{"name":"@xdn/core","version":"2.22.1-next-1603107408-9fee9faf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.22.1-next-1603107408-9fee9faf.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CyCJG9wHnxIeLQpaCLROuA9ND9K5qGJvpPmKtTn28zy1PMVzY4XbyJ7TkQTH7Hdw6GbaEVT3aZcjoiw8X6ceNg==","shasum":"2d8f44dbe97cf2637a3b2b2c95b0b39dcf888fdf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.22.1-next-1603107408-9fee9faf.0.tgz","fileCount":163,"unpackedSize":592307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjXrECRA9TVsSAnZWagAA7SMP/iWKgqOLvcT4r+wj7Nt/\n0ZVRrK9kSmh0mhH0bdcC0oto8Vih8OgfRyC9uxBrBz9uhmJCQo+mGXe+q7KH\ngXUiP+w56H16dZo6c57mM0gRhQpEOCp/sboR6YYi4cU9DMXMpqLBi7qPyStA\ncX0qvr3YfrD1w32BylNGTyxutjPZ4mqZBwdG9degCsLdgjqXlXUl9q+iey7/\nls7BqwFW7dePYl7Yj8NQGdHktuqhicnvydUgSovLzcKp6OTUf7r4BgU1mO4I\nHAB+37K2FWPfCywAPM56/2yk4DHgV7ciNFQYht0uQCjL6JaxO2U3SxKzfkyy\nbASX19AX20twmL36lV44G3tg+mH6WIqqyFkZm1nrmU0BoWUKsDhSMFfURguG\na7kqf3/7h55sX+y49ll5Gj+avZUfcwDR8sLIkxei3J1clYjfRUdGMOwuP5dC\nqxeuER1eIhxH5ncwNTXunt4ZK9CAD/Zf1rA2u4/dx4YnjnoMWAdrO1mKxA6w\nLRMCzaoUpR4HbHst3qZ+6m4kpkY+wKAUJpmMYIkjj4uzb7y3A1FJLc/ZS/l0\nb3GpDJUJ5YKl7ITMVUDwSw/tZLQIbfwHfgblVL6tpVnvDqE5AJnU8A9HpKWb\n2TLgDsW7L9MH8F1eYRJvS0+hMHDK+mU5NUXH4fWPPaIr1YtFFQlEDqz1DtEu\n4QM6\r\n=Okc+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE/B17PA2EcFWA/vAo/DE3AhaFyNomxdtgtF/kVbpOLUAiEA/Wf+0Ah05SbHpapLvEEGylEmLjM96dwBPiHl5O0eYhM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.22.1-next-1603107408-9fee9faf.0_1603107523415_0.6334901765633969"},"_hasShrinkwrap":false},"2.22.1-next-1603108262-8eca63ac.0":{"name":"@xdn/core","version":"2.22.1-next-1603108262-8eca63ac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.22.1-next-1603108262-8eca63ac.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-AOlhJE5e1wl680d7o6x895YpCZmeji/ir1ib2eZLuAp3VAWD9vSvYcZlnRlTNp7j9y5ZCYqciI+GHnATcroXKQ==","shasum":"617263ca5ec80f4ce96086ff23d29cd5f35f9189","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.22.1-next-1603108262-8eca63ac.0.tgz","fileCount":163,"unpackedSize":592307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjX4YCRA9TVsSAnZWagAAWZYP/jzvr6nan3J0oC9Hl+GT\ni7MeHCY/8r8LLs5nGx7cOuG1Mi0y5h+ZSQLvZGYfMK9oZLWnQ8hFpoms14U6\nJprgqJecVYqTuAwqzC2Kn9w+KVzUXFN49z1c9A8JnybPXDUrW4kc6yVnh4mo\nHvvO3+hwOdF33p9JvMzQxMWiINjpba7PyUldsJNdNmb/EP1xKYCnEeSczF0C\nsP3s2m1MH/3p9z0KKu324Tzr917M0JNwTjfRY20+sOOSd58f5IGRvPB10AnA\n6HYwCuJc34eFh+tRNRFJU2HENV4fAkT++sEpHyKXvhyrqtkPVBvU+cUM+WQM\niTUmb8fgqGcWcImCee6iTd+AI9oT3egEc/RFIoe3CrMXIgy/uyVeauyLYvOK\nP4w3k2FkMo17bU7mjwBjcFiOSLjzw6RAEG0HCodga0MNlWFCWfSzhXit393d\nsMyU6MYX3Zz8poyVzbetyHSKmuZv0LwfOvcGd6/TW64BoVNykNif008Inma6\n+xV4XXqjOGuMHSqvTQCzP5uBPL4JZmQUvgQbnG+wWIAy0LmTsDfqq77RKu18\n8PeE09cw6nW8G2g8EiGPmlo9kADQTq7XLqFKGZj6D6MvNR3DQglNvcjun3jq\nmY2hS4zh1b2KHbNms+1xN6WZk7lFEs7AFtqoSa8CaUw1xsmMFplNgHEMc/Zm\nepGN\r\n=T0YJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA9IXy1684x2kag8zjTEhEU9D/dl+rsP0/nK1Lm2br1lAiAlYwD1jol1q6LIOb/ud2Ev4PKMV/kK4NZ/PT9cwxHCHg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.22.1-next-1603108262-8eca63ac.0_1603108375984_0.05331844913796946"},"_hasShrinkwrap":false},"2.22.0":{"name":"@xdn/core","version":"2.22.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.22.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ocX2yYzzFMrv591+UInK2K+1t6qOhdmnxa0wmARuhIlqWwFDFS1+JSKCx9Y+R6bpIWQA33ilq1UO25T8Xc6EYw==","shasum":"34df8963fbc88537af1bff0d5b5fd468fa3169c6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.22.0.tgz","fileCount":163,"unpackedSize":592253,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjX5vCRA9TVsSAnZWagAAcNEQAKKGoVAFdwAz7WDtBAfw\n4hUGbETDg45SycOR+7RxDqBpR1UY+LQVV9nSsQ56HNm/cKFaNPGEqiRsKhhm\ncCO5rY1/SmKe8MqgEC1Ylk2O9+U+GDgPeO6M6eiEHSKmmC5jJL29V2dwdbjZ\nGzDXbPocsPXE4fWNQu7xiOXqENu26wpJbcqVO41597ORT1HfH9P/jMgnnzZz\nU+eh0JihcBCsUuQ2z2hlw/TQOu3o7nh0oi7XdHFpfj3woADbab+Yu2xoWVM4\n8GMhrBv6RGl8WgueD6IamW9TYUK4nMwdLvczHGmnjz35miNsMH0aRArrgViM\nI37WQk7SYa18u1YNBGuEw7LPqC1R+2cH9xelCNE+HDOlSGQpsM4qDiAOUBC0\nlhwIffgsVB9pAFGtx2vuHstPir1jwWRVn8RPib06H+0ZWn6bcDL9fJXAOGtP\n09ewpUVWcisP1aRsBYT0V/ARE6dTmjVxYRQjnrmIvA81tw7eU0S9vB/Vt+Xi\nlNF+N/eOs2+qTMAGdSr4Px9X9Jbn+eihz27ROraHfjTcHnGLI1T3UB6FRT3e\nmyKV6fOUHZB2+C9ZMVfw5no4KMiL8p68hzlruGuSOiMZ1OcYUPpEQzHA6qZV\nGc3DOUDjgRHiTHM6FFhSyal2TzoeNyarN9nNx+8vbBtrbEmGosf8bYKknDA4\nlUAg\r\n=CEKs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDB3R92+MlWdrvVH2QlWyoFmLbHD7P5Q3aLmwAGbtGseQIhAOg/dSNwN2dkiyZ7kYY4AUj3be6X2c3X2WVvvhp7UG2k"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.22.0_1603108462991_0.6849350419003937"},"_hasShrinkwrap":false},"2.22.1-next-1603108459-aad057ba.0":{"name":"@xdn/core","version":"2.22.1-next-1603108459-aad057ba.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.22.1-next-1603108459-aad057ba.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-eC/uiOxkCTZCP1kXnXQw/ldBEMzyx5COY5qyualgXWjqSUf72qumNMVi2EZIz5v3g7cgq2oc4+qlaLOwV+tWfQ==","shasum":"bf16ba2e4af7f5708813aeea96c7aa1a7c0762af","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.22.1-next-1603108459-aad057ba.0.tgz","fileCount":167,"unpackedSize":600916,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjX7eCRA9TVsSAnZWagAAg2IP/3whb6GIPUn2J83Kg7z3\n9Sni18r9vn5EVYRZTuy14V0fd3SNdwe61BirAcSEwuSm3poJtFrKtmpppoIU\nA33PToYDo/xPqAGtVu4QEagdyH+eVzYkdXk3dTDl3NmSjm33kF2MuYrgSlpi\n1KvNEEs96I267v1ANYAOcFyWiezm1VpNCtW3RC73Cu/C6yAgt05berBw9ft6\nRcFBtZMvlyxnwsI6iZ5CwOZ9WIFxuPHDyFP2pa81JvPIbwBxYsboHoSAtlmW\naWdFTzm2NU5fq8CR5q7OjCjVSQqem2OhSSiSY6BLlHNXDwurYbq+hg//4mvN\n/AVZfLKG9BsCdtSkhLPY09xfvMhKRqZ6IxARQPCkl6zKYCjYV7LZgcrTm3Oa\n0fjRb/qDg5n/bX8vk45I50nllklIDTcwI574TF2EFRsHD4ZsK5k5MqKb3P1P\n9BNM1VWJvhPYqlsKupHdvmsD1WSfTuULamJo5kY2LlBQhxB1VFOx1luQUSS5\ngdRnEqh/dVgfye9/9DHjGUxOJqNaEOzRjI5L1wcGX6kV/Oc22m10/w8vvlro\n/fZK88j/APt536WG5e+dDHYByTRgmPXgW0F2Lv2gPtBSlVyAViv9OHFxLPqn\n48pey1I2xKJw8M/YTzWZhuJWfvuPVt+Xl4L6AHAIWNi+yJcqV5R4cTwk3o/b\naGPn\r\n=Xt60\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEKYFj0FCGKW9NhK6B/RYgtBOeBCF93Vd2W6IPAxJPHwIgdDs2w5DvBwod8Yg4/Ji0xSzFN8ObegVuYBxlkfeqF18="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.22.1-next-1603108459-aad057ba.0_1603108573571_0.5830108553287787"},"_hasShrinkwrap":false},"2.22.1-next-1603108833-ce4c3702.0":{"name":"@xdn/core","version":"2.22.1-next-1603108833-ce4c3702.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.22.1-next-1603108833-ce4c3702.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-h51jWgOxdSolo9quUhErpBj9wuh9l6rq4KriWhp2BdYUKQkPn2Be7lEDj8XozPbPGpA8anI+wcyKitUpgeESqQ==","shasum":"e327a4a65fb40e5325b3fc2f291c0e6aafc33f77","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.22.1-next-1603108833-ce4c3702.0.tgz","fileCount":163,"unpackedSize":592917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjYBTCRA9TVsSAnZWagAAk54P+wYEGwiACoU1dsopODqs\nvP4gmQQ7upKOCUngK6wzEmRsvoyELKfVkXnbwYMNUMqWOWJnjS95gyRC7Hby\npu7+TdfW855B3nX6w1/TBoUbPjdYb+NPz5ShuvgxZYhyAsQ3v0z0NAcmZ1dl\nratNch4gghysGbT2ImOfpxtdMNhVuKB/8Ou272W/f6MVn+x4O5Scxb+Wg0yv\nuPxFzoo+43Q2tgLzfkRDHb2/D8p9ltzoazrSZppC7s6BIiOK3X4Y5ZgMNrf0\nndao8ks8twKSoUPXw68imKrPwuEAKQSzkygbI9nqqqBnoLMn3gcmOCveVGtw\nS5hM6hm/pFe8dYsXGdIycZWN7K0QlZjfCaTmhUs79t9X6gUKgSfyTpW0XE1/\n1TWlxz+/++hRJbdac2lVjgA9CaF8ik8fmlmJJartBcJmEMuKufokN5/L2g4P\nRIhjfSVVTUUloXtX6qtN1AH7wiDZjcddOvycvF7LPx7yIH3Hvhu/i/MMsxiF\nlJnN5l+wrXHUiE03roCSUVzBA5n+8KmH4Y/JZciyuRRmC4zEbMjoPjz5OG4J\nyd7DPDHpBGnrD/vQejL0zg/bBlO6at43lLTvqPm/DuOu5Nb60/waL63C4hNK\nh1Lh0Wl/DY1RCGyT0/Hg19A9pGO+UhFwNCdFTrg++T8llrOJ0cDhBMUo0ngf\nq6pi\r\n=5w0p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMU/7Bh5+GaiFpDVLl4Surw7omxzz/7FyaBvCCIC4AOgIhAOzKPUK2Ng7FgBg1P/IguxsUbA6Lr6cqH/W68KumQi8k"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.22.1-next-1603108833-ce4c3702.0_1603108947121_0.6571367247591302"},"_hasShrinkwrap":false},"2.22.1-next-1603108864-bf3e9bbe.0":{"name":"@xdn/core","version":"2.22.1-next-1603108864-bf3e9bbe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.22.1-next-1603108864-bf3e9bbe.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qtxVXeGd12xDawJp03q3zbO/k4OVTBkFwo/52n7r+SbG4lGrdoK+088WvZzdw0hsudxEsO7zmZQVA6Ep+gorpw==","shasum":"5bce5f83862000a47fd5ca15aae626cf8ee384af","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.22.1-next-1603108864-bf3e9bbe.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjYB3CRA9TVsSAnZWagAAxCIP/ikIruykau6y09+zBMcv\nJxL0j0G9nFhHGLJjP0vUzUGoiM5C3PO0Kzn9AHzKQeMP5fsnQ5iuW9IZr2w+\ncA9N61x8DJw0rnWC8sN95DrIeQA4tehhciT6ds15kTed+JrWbiDskHp+1GYw\nrPlxLOX3Ka/ubRpnOdLLQu+5csf3Z4wgnHehZUZfMaM0RZZxX5fuFSwP4JpO\nnFtba/zLYSAXPzEeM8GQXLHhzlQNzGy4SGrevLY+stpJ+C88FK2NhGJxjd6u\ntj7pdwy6T/5xFBKy+ZBRBFFDf2DiaaC4Z7IA3yL2Vt4azZrJtyCnFrY6S3JA\nNtos3EOSPTlGPtIyjj3YQIVOQGt2BABtrwHBfYgQBmOEIewD0g1cdnaPzjrf\ng+SqZcIVD1EkCHTwiU6Jh++gngdQiHAe64j8QjVUln57mxbQDKx42Srk+K2N\nt4R7kdrPGNQVMYRlMXXUsmygAf8F7a0mP9GLb58QdnK3zbeB5E4rcXX0qg5W\nQNwRiVGHzk8ZyGZFUZlXB4+UDZbQkqbe5ut+jekfcIAS6WiYRzZ4E301YgWK\nYOLzJcLXozXrPaQfEHvlGbWE+2zjBIFqSCkzvqQ34BLZHoyBUxQ+VKG8hEcK\nxwZbHewX/t+0DMI8jZ+tvqcx/SwC9pm03O9V179Tc1JuxdJqCHF4RxybGRNX\nu/7P\r\n=9Gg0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGWkhKxcpfQCNfK4bzE0/f+QDMYC5rv+1PA0wYw3prrgIgEmiIkmLSMNS7liV1nBzLA6z+xvjPa+m9B2G1Cv8ujdU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.22.1-next-1603108864-bf3e9bbe.0_1603108982680_0.011893751702153788"},"_hasShrinkwrap":false},"2.22.1-next-1603109151-b3fab68c.0":{"name":"@xdn/core","version":"2.22.1-next-1603109151-b3fab68c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.22.1-next-1603109151-b3fab68c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Hz0wq6h7/0NLeW+hINlznH4JpXjRCY+uJwjC118ev49J7Og0BFL9qGifWVaR9dw3GuFWS6l6RbSbbjMlXo06ww==","shasum":"d17799e75edefd9e31b109d833ff58ccf3dcb8f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.22.1-next-1603109151-b3fab68c.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjYGVCRA9TVsSAnZWagAAokAQAI+gOZClFYkTzvepNM15\nZN1XEjTfAOOqnR6QqDIIFaq1SRGu6K/BnoOoJbQCj5waiaN/SlbhdjR4/ncp\nk3cghMe5Iv9Wi7FfQBdyFvTevkue181Q1O7B3Klr4u3Jrigi/6xU/VD+w5iH\nlVlKk5SbaKPdDBCoiOuLPwuSAETbN5ndnzfTD0BS3pSbowWqTuqiGRLgHRRr\nTPumGdyIIaqO/5BqnJqnYm+OOESElEmQMLtvv84CG3EiNh5N6uU6Uu23MKwE\nHj4rXC3ySxGpDWqMesW/plsoZWe0ORxjPXOP3d3A7AaOAPEjNs/K/vhb5xjb\nis0CXdxTtOBwHntYgkHu1/+Vlhm98mrXQ3gb7edEhluEmHvLQjyUBFdMsxmQ\njDIwXYmPx5nplYsZqjdS8ccSFfInwMVvlRKDkGSehZ6CuYSyTDqYPIgWyZXs\nbnG6gU4URWvi2H6Y/jKeOqcOZY3HTejoqIWFzVeX0X01BAaGB0LcEJeTvzCm\nKl/XzNF85sVab7O0hQDwccXILvI8K7Zk/Z4NAAS/7HUc71gxzaAKBdseWzLE\n/eBBlv9YrW0MLX+4LE9Z6WaBbrWdNcNQMmXv4DKWHfznQuMRu6Ta5/aEL51A\n/sVdOJq8Hh2f+o9iRzntDjUba5/khOMupvsGiFKzT32+Bei+JOgiIpoXWIqf\niy8X\r\n=Gz+g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB1d66YU7jz1fQxlbJ+a0/JHRlOyGToenBpWRDSwEChRAiEApUiRF2+F0kTEED0atf51DkWmL37yVOZ4JnbQ+40O+M8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.22.1-next-1603109151-b3fab68c.0_1603109269109_0.9702387938399861"},"_hasShrinkwrap":false},"2.22.1-next-1603109189-1e349db4.0":{"name":"@xdn/core","version":"2.22.1-next-1603109189-1e349db4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.22.1-next-1603109189-1e349db4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Bdv8auGVOxh6RgRA0Bo/AOHytgS/45cU8wdxacDay5HjGbxNtc/DDTD01NxJFGdSM8e97x2AjsmZARFFqFV+uA==","shasum":"507e964f1964e490042f45b939d92c2f0d74722b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.22.1-next-1603109189-1e349db4.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjYG8CRA9TVsSAnZWagAAAl8P/iD6Yv2NIljzL6xYCVfM\nI8XqWeGsBFvi4SUN1/X7kG3UYFUsMtlN3zk0JoETPfU0K371OMhVmHxO8w+f\nim0enHIgLjaNcN0H/KSkrg/BKnD0PghrkZsWh+qP0JIQVV652MQ/fVgejoVP\nKdtuDqYQyZxHiw7eEp+HmtItqKGClTUo/NN1fV30Xq+12y/AbSdw/C5L5HGP\n+m4kTYISMxrEDusYfg4d0INYoP7mRSfUAZjorkBLWgjZcI6SWw4YJPDCoYhV\nHlmIoBAYMXfiQijMvtifLrqby17CWzrlah9J8p5YuBG75tfUxSgkF6J1SQF9\n6s2mTdXecpLlHq5wTuUPBNX0wx+b2LbSYs1d5Xf16xOVZPGvwe2pWSZS8HUp\n2tsI6eGueAOPzhWkc6tapk3ZRvdokBzYrxz1hhGPt9NDBfAtw8NZ8oTMf56E\nsNR8hMrVPNBcLZl450GHG/hWqqpqtIOJ35/Bl+0Pof9GyCUVYZEwzyhVM10M\nv6k5Zyyh1DpaxtO3Try6UdD10ADnoiLZyKwQLyaK0hcX3ouf88bFrPbLMPiu\nQGdVfxN4gvPtcGUTkbYvPTLcIOKMCsRKIVxMt2YDtZqUeCzOedCNojvSLWl8\nyKkLruZvMTzyOStjz517ry7Ii5igOM6CEICxlXSNKm3VAtS6zhylj1+jtB7i\nuCK4\r\n=J6lC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAPyz026eLdKO3pER2bcty9PUfZVUEtIkIFMNaz6w6iMAiAuYb4v7e33UreZLNc8SkjFGV3xsis67hcW2rTcHP31SA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.22.1-next-1603109189-1e349db4.0_1603109307681_0.1454400915260874"},"_hasShrinkwrap":false},"2.23.1-next-1603109414-26ec2be1.0":{"name":"@xdn/core","version":"2.23.1-next-1603109414-26ec2be1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.1-next-1603109414-26ec2be1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CyxLmVnIM15fOoZqn4bT/XagwWtnDt6uvLm0YQNR9jXCkSFvo/5YJRDp/upKyuCpN2eP3qxKV986i1sA/IuQrw==","shasum":"c9b7d7d859df97c2294a96e954983daf5865265b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.1-next-1603109414-26ec2be1.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjYKZCRA9TVsSAnZWagAAszUP/0kN6govv11k4/AmSl12\nVhJSjA0UCXd5Ika0sDwKrGlzJU+45E3fmN1IL1Sn0qO30X03yUkLug460XVS\nWMr2rIwH3cgUwZPC8Bm+Er8KnKGBEkbydec+W76BIbsJXi5AwAIL1xRy9C9Y\nnMLFmDNY3r4/qPr2FslbAApjJsgShbkU24xo0SMq0jMrK2yiDXOLWnizPlTa\nI0HwoZUJ87jBvT3OaVpu2Y7xFOwYmMyhYznrXAhvbJoaATJiDyIYeah60DVi\n+00Y+UMwHzE2PiY3j9VdLaQqO3eeOvvB8Eqz+5yggxx0BUWQ84QnaCMq/xwd\n/otHPwoLKHO//ZY2E+CP1uSTHO+Iq/Td+9kLU6YLWrIOALQBX/vz5JrLMvDi\nUSAxswa7IRNkSYZ9rtcJwkvRPR8gKX7cOc/Gq9VTe62mTQ21W5rL68MOZVWv\nDjOtx8rHVM2fLpE3C6FkPhsPLQtnLwyF2A5jecL0RXgE+H+U9bkhuPkmRWRC\ncsVVXvdgt0FrQioQN0/46lxTL/pPrQPV2PTErjcFX/csYgTJtZxrfGkBgxYb\nhiugGvKhWtDHklTXX64SFiol+syCw/CukTkM4YitUDsv4OBCeeRN3v2sisJe\nQsIVicR0/JwD9xQuyKEgU9ZqFsIUEcAhtwibpQZBpYUTjnd6VdQESswanP2Q\nOPAQ\r\n=gSUo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrfsALKdAZNYqg+a9O73FYCIZr4EhsNvNbuyHsLGbNEwIhAN2D0zi4V6LAY0PfA7eZrxbhsMl9Ea7m+CxMkPRps67L"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.1-next-1603109414-26ec2be1.0_1603109529078_0.15760640640577606"},"_hasShrinkwrap":false},"2.23.1-next-1603110088-7625de11.0":{"name":"@xdn/core","version":"2.23.1-next-1603110088-7625de11.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.1-next-1603110088-7625de11.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UQ1CHhQtw35NAsSienj5b3Cj8zehUf9P1sqDxlystm77ij/oZFEMiaOM8qPLOso4B7fipnmOp+ZQy+nTrypxpg==","shasum":"87cdad345c9023768f5402bdf290f3d27ae4cad5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.1-next-1603110088-7625de11.0.tgz","fileCount":163,"unpackedSize":605626,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjYUyCRA9TVsSAnZWagAAO6kP/23l6GKFiJQA1JPF+mqV\nYGvHK2UQ71cgQeoiZl1U1OP+DOt0EBjOQg1+RYA4ii+G3UPddEcgB+Ubu1ic\nWURrJrppr69KG1hX7rIkl9NQiidpQCkJ+/PlwntiJo4D8lBYL7BoloVcVXo5\nR/uslaHoTltAr+whWiqoRJLvRuZNPE+vbktQz71LoF+i4LFmkAfdrJIEAXPv\nx2DlfC0K7k7m6f+B9GIhJO97ODzZ7w0qm1tdek/UMUKRdTxiL329cabayeyw\ncomkdrm3mx/VYSWQAKlHTrduOeQc4taHbNDoEHaFE5Cp1UqmjLa5Gdc4TMPh\nySW+XP8go2sXi6lpX0DbgdJ3+P0efDvu6GKwVH1zHikXpzHkkcdThRiEiCTK\nVU8N6opftS7QCOJoyve/MWvteKueSUPKuKnXxeAHzy6Nl14F8I1mmvA4ARr9\nYn6cdMySctoCCrHX6qWg6Ko/9+0NT47/C00ABPEq3wsjZOAST35JNq1vU0RM\nd3y6iizgGe/TdyXXhEuPJD39arwuAqbXKAutAc+zRvSza095eFQ76B2ZmA8u\nb49ZIlRA4+na6HdZLaUZEgb1G1/NGkBxVX7hq38UaW5q9dKa/bjRwttjAXyX\n8Co1rDDXZ+USR4qYZfI88nQ8iYVXXqUkHdb/g24/VlHrDoF3H5qweVCLaExe\nNBF2\r\n=16r9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDjPuqOphxvlIo7ZViErxryakq1KXZieDEi12dwsllo2AiBgD9AV2LBW67Rj5UtOXQtCpBv/ElqEOmul4SGco0ZLbQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.1-next-1603110088-7625de11.0_1603110194178_0.25814271712269554"},"_hasShrinkwrap":false},"2.23.1-next-1603110575-b4192b02.0":{"name":"@xdn/core","version":"2.23.1-next-1603110575-b4192b02.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.1-next-1603110575-b4192b02.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-sIlOWpXwC8PRaFMnPoVhD7qFkmVqt7v0af4GqzWLnttTU1AyhuXKa1/N5eDMkuwxl9wf5zg4jv+RfJtbE4RmgA==","shasum":"584a68585286d566e1264d91d158c747df58ea02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.1-next-1603110575-b4192b02.0.tgz","fileCount":165,"unpackedSize":608914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjYcfCRA9TVsSAnZWagAAJ1QP/jYqCCx5DYy74Ovfnr5f\nrjQTFJWlu2dMJBHF3aWx/obdz6bqwVDELL53Gbt/Hh0BImVz+19eN8tkjS0G\n5lTqP/riSz066LlCZJkFDI0DWIIx8QBmQpYN3mIpSWE9qcRgHzIGT33IWmYa\nckmE1TuISSclmEMAf04IRg5EKTonR2Bo/46IlmL0ng9VY8rTQW7eEZwcKCYP\njqWsvy9jnXreV7cIiL7AZ0eM1Gt+lMaIbp/daN5anTPnvCo2Ug/aKNrSau41\nLQXFPEp3wIr9KAmdD0bRRw7DSWAd8R6FEKlWCmE81za1u90IYEx5v56M8rKZ\nJXnRnQXkRu83AUOzRhMlWdQ45M5EEqvNN20+ay/Fm6jcqhZOXWjxTa+9vKHq\nM8pIhidQhhxqCmvGkSXUiVBcxvFtd81L5qfqO2789U7esL8IL0qqGu0IXH38\nOmZcvUcyKoYlc2JHHcrPLUpK/OQM23jl69IxRnrwy5HpwLu7hPxe+QecR5FO\nXByP8921uP+YVShj3jUc/sRXUhzkvNm8YQPHuZP9kFZf3kVo36DoT6qGF0s3\nIQ7si3LUz2m9rWycjP1Toydsl1GDEyDXdZ78di7VglMkZ3CSqmStjFwZ2AUd\n5A86fnIA3w/XlEf7XdiBMmLrbeeUd/zfw+jE6aGQcH+jyxR+TTpZfFigWbA2\nO9VO\r\n=Llhk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCejp4DSkXwQBw4vqqSxUc3agNMlbpqhjN5i2BiY8mKegIhAIjwn7Avc+t6mMRdqc5eZhbPe9LsWXMwGmjCEE6lgdy7"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.1-next-1603110575-b4192b02.0_1603110686896_0.3189360785028339"},"_hasShrinkwrap":false},"2.23.1-next-1603112374-51c9ef20.0":{"name":"@xdn/core","version":"2.23.1-next-1603112374-51c9ef20.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.1-next-1603112374-51c9ef20.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XJpvjpCcgyRCMKNch4fxK6JjeTioO3rVWye+tO7mjz9RwYEIsfaPje7BwN8XqAK+cvF9V2MGb2PNfc1N00Wzlw==","shasum":"6c3b7c69bbe9cfd1bb67e22e562260fd34c68d82","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.1-next-1603112374-51c9ef20.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjY4rCRA9TVsSAnZWagAAGD0P/0HC5mvSN/SI4F49CHaG\nGbYm/8/rW96faPapMRGOS4fiH3JyI2xc9ezAom4c6t2ZiiUOfd1ZQoglPd2n\ncVwlZB5YDFImi1gRKRajcmJP9TUsh1ICI2LdOKjwgogOeOnoNdBHHExxvqRH\nJTsRUfppeVekR63f27bA3U0hSLc+WfgHXlKU/B3ISyT9OXw4Pqwm+43ceSLo\neKTci/PJJ55KKfIbgxqnnEqDWxklweVxyemPBUOZt6htY/ae/F23gjT8gu2/\nN4crUoh06R6PydBbL72vR5HmDrceBm3/G75/aIXHc62TClHJ3ff9Jw5Px4El\n/47oJ+tUTKCxW6t+j8vAOBKILe7zoiXi62jbUo3HgafCANOyVPBvTkc4tj/r\n3LOCxQcKelhPWtYOyjR9dP2eDTmxVaE+E4S3Yon9709cY6oLy9roLX29Vgks\nFB/RiAf/jlO/ngArjJq/eF1XAcI80zYJQH0HLUh0DyOBiCjOUiaufC8idxni\nuCYN1CP8PbRCJZYqCTAXTGoTvwumFvy9SFZ3Hsl/VZaZl9LpT2/57FI7gRq4\nWE3AmCuj8nsGiw9K0ft+xPBJGkfukDjoo53B07oCLLdi5Ni9N5Ya85HHerKD\nbclYNTFpDHWwLZHNN8PDyekVQZ2gLnlCP8kpOKQBmcRv29hdCb/KCy6IWFOW\nBPJj\r\n=QTIt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFlwwG5Y28d25y71TfATAsJsVXVLnixARt8LW1i3kBAeAiEA8/1qD+sf5cD/4tzXhaP8aDEt0xyEo3Y/uk5d7vked0c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.1-next-1603112374-51c9ef20.0_1603112491017_0.6373448046581913"},"_hasShrinkwrap":false},"2.23.1-next-1603113615-c889fed8.0":{"name":"@xdn/core","version":"2.23.1-next-1603113615-c889fed8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.1-next-1603113615-c889fed8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uIbGzt8H45sc/S6Si073El4TvdtDNe8kWFy0gzZA81ZjdKrjLK7kAPBXHko1cfuGX5QyVVVhqXAywvngfOZ2fQ==","shasum":"e14393606770265a423c9a4c5bbd6138af3b3d57","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.1-next-1603113615-c889fed8.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjZL4CRA9TVsSAnZWagAAOZYP/00gLxVVQz+imS/Gu+w3\nC5AOoMaL8/kwil3+hoYyPCxe/VEQhowAI+1lP1hWgOmuPue4G1xaQlMRyzP8\n/lzUypEHOfmn2MCCxOkQhZBNOnDl1j459XxWWmO2UVG1RDoU8Wu+Ncnaj7I2\nRL9kI4J4bMj285x+7cy0zPrqxOb3CgZdyvKo6kQxu+CEmCyg6Tc2HRgA0PuA\ni83x+3/6BOsc+ArhpgYhXKLJBI9M+b1hvBu8nquxoenGBShygL7AigAeA7h/\nfRK0UOQW/Da1ClEl5niC+0wK6oS9YD1CXMA31GUfa6Vzqm65wH3IiQcWWFTs\ndwEXhEFgtJhW2Plw7w8gT8iWAMHMX99CFUufek1bEDoVPWNxZqeRpjP36TZL\nMLqBeFVSkJVROR//R2TTRyf5V7A2E4YCpkzKkHpCVPRev4Gk+f+20ighO9Ve\n9CquorWbxJKly8N4z2NSEFp6FLqWogIMU/oUDeYJac32/sdLpSww56MzQ5LW\nxf3fiuK1F8skAzclEg38pYHCYf6H726VckVdAMofScgmAskceQEUUAexJxrg\nANw+Y4bRWLREP4Ji25yKLchtFtsV0RbUjerjVIGg/jEMecMybFk852++sUFH\nbbdxra1tfLax12PqaWUm1W2wPVnSeZZimMD/AUNA05TY+2FfgfOSA7ou8RTd\nu9ip\r\n=0JDQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA4xtQ+umJMiPOoIWZHWVSRWp/Vc9Nq0Ds4BftM7VwCRAiEA+fc3j9WWA7v9aplW8/8fPerWuVVa0NetWtB/tBoD1U4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.1-next-1603113615-c889fed8.0_1603113719538_0.25488895205035855"},"_hasShrinkwrap":false},"2.23.1-next-1603113737-30cba65f.0":{"name":"@xdn/core","version":"2.23.1-next-1603113737-30cba65f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.1-next-1603113737-30cba65f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YT4oK71DcyIZ3eqWPBmhRDFs6w/JarEEdVT5NnEAXtxm8xl7ouBBs3ROu672if6s/YusryRGMVFp+u+g3sL+qg==","shasum":"9bf91604eca27f7f79e4b94b9dfc312b56c0caaa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.1-next-1603113737-30cba65f.0.tgz","fileCount":165,"unpackedSize":608914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjZN4CRA9TVsSAnZWagAAhdEQAIzKijXa4JtNBYZ+iWCo\n7hp0zlq7Rk4cBalU7qkeIv9PwEgFCHvSRiOaWepsvo6LTC1jQQhjU7v4KozV\nDUWKOW+OdplxzIdMbS+E3lqyRlYN6uzN5zxTx8rWZYi3qI70XnJzga7h4LiV\npUqehHdapBgGItSXIuiQ2NJC/p4MmAOkn4/TwZkjYmhRr1SJ5quASpGF3aTZ\njQQBlR62mTlLZKRuRETWNhkT6MgAeBmfWxmy0/0bgLk6yztCZAJex6voPUL/\nJHQbEFyKFckk/D/KgTQBNIm7nBUJRC6Y6e+y1YegxuxsgtjbtkuytlGfqM6l\nvXeFCnppsslw0ybeZF2GAA6O33/Ahgh3pctq90m6ltbnowbhCQTCZZfY5Ium\ndM+2khcvULu9uMkqEaWS8Cfbm27XMtcNtuRmiMgTpcWCpBtayeB8TG+mUqw5\njOhhdubHXdl9NVydgzThW573sazoH6eVRXuO8iWwco4+26CK6aMK1QbgeXnl\n11Cgq5iJ3wPXPnVaB75UGG3e9XILUGCu7v+qhoGQS9zbw7RX+fxR/pORyWZA\nSdB3jxDr7xeyxrKV6TrVWKG+h5lHPgTPcsRVZP1n6dg7Csl3ai0Vdx95j9J5\n4zAFKZYoXmXtqxFzS7YomGslERxaWIhGJHC/cXQutO4mU7ndBb7QocQ3uZz9\n3rD3\r\n=q2f/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyt8Kx+1IEfLEZR9guDhzW+7kGaDq5PAPWWsujsQBWKAIgbCu3qz2LLwhiNJ6gTUU26wMEswuOt+D/dlFvjj3ENdc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.1-next-1603113737-30cba65f.0_1603113847986_0.19387305041287317"},"_hasShrinkwrap":false},"2.23.1-next-1603114924-cf426329.0":{"name":"@xdn/core","version":"2.23.1-next-1603114924-cf426329.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.1-next-1603114924-cf426329.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3AGXS9F1Su0JBJxzLDUJ0A+8sLUbP1JDMaLq0h0SkMxTTCz5CBdUT8Yr8bD8m78Ez8b3NKicNA7u4z1yxe2AzQ==","shasum":"c5fb17143e5487374a2a4f0cc65f8392cbe8e12e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.1-next-1603114924-cf426329.0.tgz","fileCount":165,"unpackedSize":608997,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjZgfCRA9TVsSAnZWagAAsPUQAIKGBzNbDuR/0xkVkmEm\n7ijAETZJkecEWZQuUg0o0Rm0m5mEwLmU/mxRIvgXk+dftz1PrUWtMZtwGztT\nTCZQjaPN7zuYx5i0mgXxWYaCgvMt4tyxB4PTofCsFJSw7jHWAfYr7aItlYcQ\n46rCi4TM0ApYSCy18Mqg6+Y05PUoBPZaUpqwllwTQY9rzrj+E70jxfHNEUNp\nXwWj9YhnyhkjlcjcUC9tXRN/aEKM2nVwUITz7MzTb+dXW77v19CRlDZewkQV\njuwgiJq6S06CUwHKV/lxyy05Qq9DNtMtgULBObwqkkgMynSwRs2smWG+zEum\nWN7uYFXzCqmg1Qg3UhL7c/FqA5r7WssqPunJTyE3otVOOWvS00j0APyR869V\n06U8CBxm4Jz3wjFNKuvj1kUh1XIlQZW2GIBLWBPasEyDtLhvIud3LYFYmt2E\nCyhQIGSO+8j9zl9XhS1DBY9JeAjEMabhWS39CzHdnthxm7UX8vANoD6bVOFS\neA1T7r/maC6UdlesyHblqKxC4e2oJpQrKCf0mZOTURVTAXV7akxZAwSYbdPX\nlekzqoerWIBYyilEsv/hFqvA1qKn/IwJaLUexXMHCnWFRZcMODWVlMemxN2N\n/+cksOuYOCtkMhso0P8+3NXhRjgWTC2Q/kLdC+jh+Sju7313LsovqYY9DcP2\nC+hB\r\n=DLle\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTT9qn69AEwSWrvUQSujPBpyP7if7+ElfzhbcHP+sdqQIhAJfwr3Ya+75o2GFQVlQ5FD08qkBp56cXTvydqhSyF2kJ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.1-next-1603114924-cf426329.0_1603115039070_0.26067886493794656"},"_hasShrinkwrap":false},"2.23.1-next-1603115829-94d067fe.0":{"name":"@xdn/core","version":"2.23.1-next-1603115829-94d067fe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.1-next-1603115829-94d067fe.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Lpefpf1R/hrhWL1F0aER3cVpGANGLCvj/x547fiUnMQyAgZDAnmYV7slrlMXabQPJmPC8SfrX04vGomnhhZtpQ==","shasum":"f2b77a5d9308122a7f813d71a43d82abc7dd75ee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.1-next-1603115829-94d067fe.0.tgz","fileCount":163,"unpackedSize":600104,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjZuoCRA9TVsSAnZWagAAlHIP/0f1OIcirNJqcHihFl3N\nK10ISjSsTTm6wrC4Fpjom5W61V6YqTxhsBt11SnhAIPGj4CkEn1zFTAL2z2S\nb3Z32NK12jM9AQTf9/iNM4wNjBhp7FcRSSuftDhohW8MOlWFoNsHXkj08Uc5\nPwO4r2Y0svX7qcTMDZR0EK7Ae6A7We4ToJelWxr4wI6mGrBnCxGFKONyPgpB\nnB4JQg3QjPqXtO3Hut21XzwFVkIylhJ3JH3RScaoF5/JZST2vGrIctlXf991\nKyE5dvLiGvO9NrquSsk5h60ZoXp/yjE6Pn2FPu/uqeHV4aFHJSl+uhhhHWUg\nt9h4ZD86mH+rhOtglZ5DmItMuSgiJyYw+9tqPxRHxX55vlp6IoUhKIj6Suo6\ngFwCunAtoCljb+uzvZf0M1ct6RUwaOXXBjsSfnerquxf4M1RhrtFhuw1IIO0\nFTWu47KtrFqm1kokFOqJhOTtONI74fTOD9gbTclXILRX1Nhsh2qEtyvTyDTw\nm+kzfXQfDWgtCGdxuwLJEORRIj/HWgi+XQQEELz7GdDjY5WCPFwni3iNS/2+\nMsEnioNAzaDJtLVNaOimiPWnTUvdBzz6Ncvlu5gjjRFSM39SswMvPLtnhUOP\nvBT/3Xlxt9BM8c0OSJcv2v6+8wnVgT0r9uPNoDdFjER+MzVhP89l96+8cQf2\nnfnD\r\n=6aDT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvLzQ5dBxQ8QKNQ3WabAhtD6GYCVSOaU409KEVkvyd4wIhAOfgSspRYI6V9pzNVrc4N39zkmZmyPFgpGT2vzlBk3Ae"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.1-next-1603115829-94d067fe.0_1603115943722_0.7003866605129032"},"_hasShrinkwrap":false},"2.23.1-next-1603116115-8dbd7f97.0":{"name":"@xdn/core","version":"2.23.1-next-1603116115-8dbd7f97.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.1-next-1603116115-8dbd7f97.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-PDv+9fVkMym7cl+svnBxH/xVK3qbrg+hrUI4BHTE+oKQqzl7p/w7E43zkp80LJQTrvNunAC7yB/rVtkL2szyAA==","shasum":"2ec7443cc1f6520d711811e5efac262e3826adf1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.1-next-1603116115-8dbd7f97.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjZzJCRA9TVsSAnZWagAAbRYP+gMxGQ4WC9hupj8ICZhB\nE8bnzQX6xAhUbWIBYrZf2bk/ZF8Nxx8AFsRSshe3sw6DPZAepYNuVjF+HbJl\nPqlb8hLbGt+RH6m9jjJ4pQ9Dij05WduFjkxC4ZwEUBzOH1hruPbRTVo9kOn3\nEr3Pxl8PGEr5hY7oT7H7ZoxNhZ8RZJVRjO+Il6eQjUzes2NTkOVyc+SvaZJQ\nEK+dAEmSUxAVzYzYMEyFeibEhAmOXW0hTcpe+Z26lKNr/EbUG39r/i9sjKyR\nJG2slQYXDM/7Bs2BGcF3MNaOfgeV9UAV9etswXd4zDb/GFjWXp764OuMqiti\nfhcXc0Ay9aZ7Lmh+E20BTrF/RBbsVCTFzNCplZEL2vRsb99IjLZrk+oHcxJb\ntBU756mznbZoUAfOP4n7/kCKJZJB9XOh4pghx9AY1uzFWCDZpTs95QjLwAjz\nxdXjfQExF1QrYJb8berFm+6oClkdp7VgcPpz0lWiCrfTYeLO3xy0yrR7ooqd\n7S4mlUZ/8NMNmB7Z43tjPHXimHvfKYRGnJAH8zs+Oo+jUOrGIHsBwpGFPm4n\nsHwaPXg6LbIgf5SB0woer49fS8VGvom45hQNQyNbxQy5QB3iffvONDoTo39I\ndZYe0VFi+HrJNQYg2NBY2px9OcnLpo+0f2O6LSBk9iskBo/eWmYAwvMB159n\n2bV/\r\n=elW4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIExkNDsKhHPDaw3rmoAaQ5JQkzs6c+GMKsCX3w6zUEbgAiEAkPGyFWEDf0jUfwllUKxwKt+vNK/c9rK4u3QueEIUxaQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.1-next-1603116115-8dbd7f97.0_1603116233099_0.5794666724097517"},"_hasShrinkwrap":false},"2.23.2-next-1603116373-6a3fd75a.0":{"name":"@xdn/core","version":"2.23.2-next-1603116373-6a3fd75a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603116373-6a3fd75a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TeFk4Q53cg8b6U4g9yEp3WiKGoi6fXKQm+lJuHWiQGMOg83CAlwF2ej/3jzUddO6fCnUJqV7msVZ2Hu+W2masg==","shasum":"6a1ccaf1a30b9b9444915fc3b72ce7383f17f649","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603116373-6a3fd75a.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjZ3MCRA9TVsSAnZWagAAnpYP/A/IxXBL4vtN6gq/Fm+q\n/353FfNNRYHVY11zUfOrWI53a5GxZota2eYIsKsUJskhzES2uK/FP4OsDEPw\nLOwLTN5AI0YTh+irC9Uw/LI2/5DEn0+kQhj27b9EGHRgYgcy00IBuM7t4DiO\nfhdZND5vI3hkNpET5HzGmppiBae5OnCrwZQv9KPuVGE3MT9rnHelrLka1yuy\nVtk/w0nx1P+qkK0D5di9ElWyFiWQpV/b0VZAa5/PwV/dqCtrPLgk6LhXvwpR\nPCvYBxXuickXg0CEh9iAyFEKU1CAcG1xGnv79mF+OJu52F6fFAvVH+TPjEYT\nKouTV8bRWCNQB2PX1fdPfB8QPqv+i+UNwaWQy81MGoO9tOvFVFtaHAJpCIAx\nMAWigPcW2r7lGo2hYAd9rpcMNZ6q9w9mNng+TOoy3rFp6vmO8zizOiX1z2DF\nVHx7nFa9RiT4lUAGL+0n28766iKalxPnCyIDsHeZCkap4l6I0iJFFbh73wgM\ntI2sDmoexgmmIhKXxLo6VKH+8fLpCZTcrtuZS5Hc4tD68bCvfBm2mL5J7SQd\nauI70+5VHgsoPpyoe9PzZXeox+G5zVmnP3jBjlrdS4WbUvjS0WS+axo79OfG\nARLjp+wg1xt8VFcyd4CksWmgX7W2xB61jyuE5131eI1oKfBQ9sgGMzm4JAXE\n70fr\r\n=fOcF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfK+nuHqPnUzhNH849mUn2CKFgRKq+GO1rtGliStp1EQIhAPIIEjEeSKkEhtB45+ufBElxk6zTNVI/HogEYsNbZKlI"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603116373-6a3fd75a.0_1603116491540_0.7916570652408086"},"_hasShrinkwrap":false},"2.23.2-next-1603116389-6a3fd75a.0":{"name":"@xdn/core","version":"2.23.2-next-1603116389-6a3fd75a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603116389-6a3fd75a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5If0iIp9HTVtfTmwmoqTabaQb1MtaX3tEGPxv7J9UTU+gF+xi2n8Nm/Bt9Z4JctFduQiphVNNmPi7Z4C10jLqg==","shasum":"b4dec2ef607d0d158c2f913516b5adf5b057a26e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603116389-6a3fd75a.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjZ3cCRA9TVsSAnZWagAATvoP/A8Ir4eRDvjb05RB7Zr4\nSrkwebp3uJXqA5UJPg5ELUzyoGlnLDo2r3StEWCiu0hfuwHrRaKI2nO2thyN\nozOTrTcimNwSAzFU2vZdPc7D4XUr9RWyXdeXFCFq3qWYd9lfmJj+6OUE6uIc\nzfG9CFl/ROlWZGOMfmhjtYLHtcN782AHprMpe02XWqv2/vbLZSgnQogltwlC\ntJd6SO9eM8gl5ixTQRlcuCJtYiqzE2jnex6xNNqnGi/naiZHK1LMowYyOhVK\numtG7IRJLiQwhdTLhfBK42ey3pRD35pAcG6cHqqFuQ755XEDED7sEJwG/drS\nVBMGZ+zIMjA0CEcEaDDvGJVc5QW1fz0RnVyj7M7KJM08UmKR/LaZEIrE6J++\n8R1xrcDPUuygB5Q+7H5UjLmlYf+TcGGQfBC1msLj4sHY8L+EasVuiM6nic4b\ndvjAIHZ9sl9RBG8tw4/qbQq5pxfC2WKGzH+hH1qn2QHjnB4LgrsWWWWWkygj\njmRpkURAvuU6OqdcvYagkaZYQEtbp+ncGbEBWRY2/oXn14cx0h3llchYmqyL\nlL0aeYflxuINA+3WZwvqJf9ikTnBtzgM9WCgZn7T48nlbsKKqCH1k/xfixuG\njBn6iu5OvEwySyHsGX/nkWJq//+6vgzdYmBO8op31mP9EJabcvX0y8wKooen\noYNU\r\n=xK5q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/v6w3MQwLnSQitPYmgGZO8oiOxXhI9yn5s6yqB6648gIgVpSPhw0j9wSQJO60SO2MlRxhaDIDPP5o6H9lnzaM2m8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603116389-6a3fd75a.0_1603116507481_0.7502465088407031"},"_hasShrinkwrap":false},"2.23.2-next-1603116606-0e4ecf7f.0":{"name":"@xdn/core","version":"2.23.2-next-1603116606-0e4ecf7f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603116606-0e4ecf7f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jBiNyXrMdHO14G8hKPPSxx2BUtV8ellJZqWykwWABRmnUgkihB67T12OBnad/R7KM911lSGUOBt4+Acy4eCoQg==","shasum":"6d79129bbe2dba780cefaece751bed7b0ce45fe0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603116606-0e4ecf7f.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjZ60CRA9TVsSAnZWagAAU7EP/06zX/LZbUPED83/+XUk\nozJj2RhPbgtdRBqzqffioyr5sZfTYItOMZSvfE32PUAoTfYCOcFbkzTK8HC/\n9tO9wV96mZbbLDMsAN0grPk96QobfMqFYtj8CwEmw5IQ5bAaTI4LGv4VQarN\npj3osQEP1kKVIJ1M6iQgvqNp9EXQreFNCPSNSE/5LkFjzpTWmiRDJ1OQM/pL\nPFXybeoxqYUDWxoxV4q9XrMBr7IlNM7N4W0SxNxwI2LrP8DjKWtn16YznuOr\n2P6NTUdrUDll39TGm4q8OrbT9cB105rQ6AwMtKDvHSM0zomx+Pd8kWV/QTrQ\no1ZHufV3kZrChjvYNjS7lyOU68J8VTy9LZAjlRdNahnIRTQcubgz8XEZaF+E\nb3RtrTJ4l14TLaaiewoUe6/IGW3jZoOSNU7RTukMzewK5XaKSOdTzpPGX9l2\nXKzevs5ldkvKmRGKO0PutF3f2zK9x0AIQ0Ox6Hrxy2Jsjwfpo59H58pLbiPB\n71HaV7Ms9aL9J6oc35UpEGBCzhSJOh8i6/uikUkbwEUWv8XU2qLKQi87EqVR\n/ljC7nYrIzYtd3DgcEo5sQ54XGMnhXk+vhIDP4S81S8I8QiYUiwAdMnp+hm8\nLS/fY/4T64UXCKr19cDgDEBnbSqtjQ+pVQ/HH1wPiRXmhU12oqiVKphYPFUz\n6o+V\r\n=PHwA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCv4SOWn++UXzLLpgw2gvUJzErVZkE2VhKjmzCRKqEiKgIhALVjGOZ4tQ1eTnSEe8yoojzVGsBHVFcQ+YxbeYg2Jtqa"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603116606-0e4ecf7f.0_1603116723559_0.19734379995755802"},"_hasShrinkwrap":false},"2.23.1":{"name":"@xdn/core","version":"2.23.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.1","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-n9MF4QbcigTSKV/k2yu2Zd96a1ETaBV0g/XEzjA9I+VQ+7IyXy9UZ+/tI5VHfEFt6XDeWq3s2Sg93B89yMD/tg==","shasum":"21453aa5adaa9546581e934a74a689c19060b96f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.1.tgz","fileCount":163,"unpackedSize":599805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjZ85CRA9TVsSAnZWagAAL0sP/RgVpnViXKx4YBC1PLHB\nul8mFZBNtHNMD+imfVZYiSyG1ua0wwPjUbfq/c2CZH4vZWhLs80YtAqxB0zx\nb2vHjNcZSE/8VAybP7yR2vcV01xdxkgBvozlFCVmQ/gnJnjAnIlY2iZLX6M9\niJlTKyvDkJArkVTUXV2NRdbfpvdh5tiWAJlb5+QqmsVcxOduyHBbquSRi5eg\naocGpiu2XHr+Q4FL8aDs5j61wL8BC9+l/bBuvuPVw5gq8yFH/yKd9jgRW7wv\nQZf3tIBin+kWcXr4GQ6YNC3761z2wwKIERQkwcM1FIuAEqETGNKtjsWACoZc\nMnHcVOMOAlSPYriw/lMWtAnFhR3PM0AQMjeWhbapjJ8tRY/GAVAMNYhJ4nrh\n7xA5OgyqrZ+70E8G5t7J952klYgz4NYkcwWIoNg2HiF3iO7tFZGhpYUy5gDW\nHGcvBviotEcBJYXX63yayN5mxtKEzT0ik/+CGI2apCXwn5sVRO3xLz1V1TMA\n+7stbimDfKkSRf2wEVz2yNxX45Pcx1sJTBq1IJTZJCh6Tfjxlld8rzjJzL4L\n1Cq9qSIgCMqzQgR4jlgdibZzGSelPdkxWmxWV84MDa8TnaZbW31dqrm+1a4i\nl8L78APIHtG3OCHtozIuJbBk4FsPRaekuxXpZC3TxxiQ2+vaKfRiQkLty1lt\nXdCp\r\n=bxW4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFo5porI3y42NsRTzFjH87aUbqnvLbJ0DLYNPSI3l0uMAiEAop7Zyg2hgWVlRD3Ls15M2vrLP53TrR7tZMQBZR134fg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.1_1603116857048_0.4969284741107718"},"_hasShrinkwrap":false},"2.23.2-next-1603119884-798df11f.0":{"name":"@xdn/core","version":"2.23.2-next-1603119884-798df11f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603119884-798df11f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kbV/LNFDLx/3uQoCnlJ3Z0jAbPu2TF/a2exd3m6w+ZXEywSn1PAE+cpuZfVA/uKT4Hmwe9vArMceuORJiaZVbA==","shasum":"b1b4b6564fa5028000977702ca81baec4d5e37f9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603119884-798df11f.0.tgz","fileCount":167,"unpackedSize":608468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjauBCRA9TVsSAnZWagAA7pUP/0X+SXPAnyBmUXFG/wJm\n9OuvxzWnVaN0gJnq2hZKgBTtoDOM2Xi2H1ZHHNYv/pQvv4JjgIWekcLF1ABc\nsVWasmIu+JUsRZy/HoEG47Z163ETqT9Jw6VLmBmPgBWH80Y7bcbvxR5FzjyF\nAM4PFnYvZGXHxZd/bSK5q4nDajSiI6yHPBLXfebWsQz03W62kFyJ3h61OdaZ\n2dcMBzJHz9aqSB4sO7IYy7uuK68tV57g+2KAslw5QdLOSgmH9Mj3kNe2JPB2\ntuf+yLOENYVqKXIWoDncVEXL1TsETLwiAUlcDmF/TSpF8qfqPN9GXBvpXiwJ\nR0+WBqFDNT+LYyqd8vI0VJC1XFwcZJsMZymhD250SKme4ZZnXT/+3peqaSO3\nnqn89dEHbmnouW62xwU32s6iwhW9fHKSrNuvVEOwpj8m2EPceb5z35TZtJU3\nbrdKKmptBSTzjC3ESDgDL9uXDzcVpGa65qLVbmN6W5RoC+ftSvq++AD09TNM\nKhgmbSkM5XvC48yyJBlYdF+u9YAIvDa9wals+FcOlEEG25m/n4HmIR0gG27K\nMlINYUSSu4/dX04uSpAO3u6mK1HYAifWOP8rV5E8jq22Yrcg6CtQxTbNzIiW\ngqQ+SafQWpiKFUWnSjUsJiHfzvILdlTGAr+Uu9TMcVORl6KBgWdXieJDCRn3\nXsyG\r\n=HMFC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtX1DAxjMuQ2nbM4JSJzPxsW1LwBG/d2MCP9BtkYO3eQIgA4DgI0D6SlHGUUTrpikTC42QeCN1xBudJGNTXoItQo4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603119884-798df11f.0_1603120000508_0.20154981066938693"},"_hasShrinkwrap":false},"2.23.2-next-1603121750-798df11f.0":{"name":"@xdn/core","version":"2.23.2-next-1603121750-798df11f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603121750-798df11f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-eKnLA6dT9A8wGTZESKc5TZWiunzbE2OakhAT6S14fHdprbOXrvUWa6OPY/QlVBjuiiEAV/yPPNz+yUQOdrHaHA==","shasum":"b07548393f2251d507e5247a274772b38c8bbbf2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603121750-798df11f.0.tgz","fileCount":167,"unpackedSize":608468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjbLKCRA9TVsSAnZWagAAFhYP+gKGB2wNcPhoewzuIotB\nJKacrjv+byOqGmwDL1kjzledbOAlUCZH4e+AMBQpN+7UGf5lPHcA4BgHrQhB\nmN/iBzZCd/VLwKccQCcMkGdg4RaXrrvnXecCANdu//R0xD0BZdaeYzDu+8jB\nf77Gjgvo8O8weOMc8I5t42z5GN4ZnqA33d9XjV0HUTzQbWdUduV56RMQgnFG\nj2QRgCKFlcKpP0EoussqMw9R1VthsN9ZAxCWOBK6INMkqrnNYfoU//hDnTJ9\nahSzuQR2q0CSzaq3P+sRcMacVWiC0jUjrlflPVdTsGRwGpMzEr2Z3fsATx0G\njTAzza52+GDBDV8r2QG0Az9S8/jq2yRnIX8lFYHljvf5nizoSEr3e2kmRtOR\nXQCRvbVhIaPoAlg/r+0AaiYO7Qmvn6wOATbkL+kjdYhBZrKYa+3tHiExXHeY\nakCuTQJUe7XF6kJpLmzuIOy5YQfz1TTF+MUmDcO1tBdVLhKyw/tjOccBpo6+\nUKh8hcXsrZRMktQlF7yud40IhzK6a6d5TvYXh9ir1iUQpmsUKkDFafOXHP+q\nGlSHomz38YdL5+mTnZsyV8SVnbZgKBDzw0svrg9hKTV4NYjWrYhn1jipTEWr\njNO3nf8SDNeX4Pw+LFoCEmmjnJqn+dSWXAHLJWSoon2UXFnosyR9ek14zLKP\n5mNv\r\n=jwU+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAR87ctWDQtHjgBt4WOl6gE9lD19SOxWCWtLBr8wznOXAiBUIQ4qLWJr7JXZ5FQt5W6rdnDIbxwC7Y9oxsv4Ayxpxg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603121750-798df11f.0_1603121865668_0.18091923623405415"},"_hasShrinkwrap":false},"2.23.2-next-1603126442-58bc3490.0":{"name":"@xdn/core","version":"2.23.2-next-1603126442-58bc3490.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603126442-58bc3490.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/3e2LhvaFT0bz4OzNydUvEgBFDjmLNz61f0tGsliHHb5buRHQOG6AUQW5YW8npJate1MFerP/vi1uVX4Vdan2Q==","shasum":"8eabb513f119218093517dd53eca6802d06229a4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603126442-58bc3490.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjcUeCRA9TVsSAnZWagAAhbsP/3l/4dHLQhm8grAIA/xc\n7Hu97wzC857WO4MfdxjLjhG7FTY/iwqZRjU6YWg1QaHKgvTlqUJXGVaWqkBd\nDBd0XIrqU6QNeAaPywtW3zNQXvtBVWgtLHkiuvYPPJ2YsDoQQKumox8+c5bR\ntSzWQ/vyArndf/4TXnzWU0BQc6jVaw6r//O9S/jttiKdr4tkkMjSxUYGVc4u\nl5+OaRmD3g+VZkYj6oYFabeIYGtmTId/JYLB5fDfrgNrl1k8qQAbfNJR/Crb\nOkhrgQ2GCIG6q4A2pQAxQQWsuRBuzwNAW43LbXH3Im0SkUudUIOOART6MdNP\nUthWxZHDq2cbExWPtjQAB8yDmXATzt+A8dlJ8mAABapoqIr3V8PQiCnvSJ4l\nSL3O+9GF8D9OpOa3mdLUc3cYRGivLlOPoaqAp+5rusfXSYhCUY8EfIR/Jxjh\nyKb7SyAMvpnhJv320nfrex6gMNAvknmvLQwCkF1tgPIbc2RAn0i4GL18ft9b\n3aRnYgFZp+D7iRPx/IiuX7XxU18F5KCzzwFTEIZfLJ2SpPOQMMFEI4st30IL\net2NfYSGgSUlEPpweyKWaetZ6sp323ZV6o3ZePU8CFALOksZp0zeXYbmqOdA\nGYU7ZCe9JHGDx7HWHL4S0JS7A96Zj96/YD9s4qO00p0XM95yLcqoA6ZVot6N\nUtZX\r\n=af1x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJjtW27BCvlKoXTh21xD2J68SN8O9R90UavmrJCAl/AgIhAIosJzrR74AHaUkF9Q4tmFjwl2suA67skGrSvS4eH4q/"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603126442-58bc3490.0_1603126557414_0.2542168773299731"},"_hasShrinkwrap":false},"2.23.2-next-1603135274-58bc3490.0":{"name":"@xdn/core","version":"2.23.2-next-1603135274-58bc3490.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603135274-58bc3490.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Sgz5P9YEazs3+M7dsoyiQMTb56ZdNE5stB1RcpOBLfMoxblZuppICqQTy08LMy1Rmw8yLqE/+h4iygbMoXofvw==","shasum":"06e942eb14c24dbb060257da9c5550ccfcf96a35","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603135274-58bc3490.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjeedCRA9TVsSAnZWagAA6hYQAIhsf8GuPIR6NyyPGhng\nHtezPOxauwsa5c/k8AjlJN/2l5vG6WiO+/z3klPXMIYW2HGG1GQEniYUc0Af\n1OCQQQ71JkvymYzmdEPVDjafHP+PI8LvgP4Y/oLpy5N83Mu2fb+psMnVCdRc\nv8o5h+pMcR6TzKcShDkALOo3qLC4E55l5EfexoDb4hwdcoJcHTyW0VSagsUZ\nCcNQxqVcMztkepJwjClgxrEBPuF8v4yyQP8+oaJAajWIwTtzTKefsR1bEFOA\nnDx1vUbv/ybusc/+6j7P+MnD64ddQ03RUQh6Uh7U0JdDF7ius84Eu1I9mBm8\nNknWLe3G7TB/YrX35gVj39+IIwbv5wlSgk94Y2HsWnk016B1zeSd2jz9jG9N\n7yYGv7/6R9NND/qXMOFcz2vq+JFsdzbrPTMhk7ObHvsleyDmdtDFXwf88jIb\nzTf8P0JiYKtHRdLb1Y6r93zA0uGY5wt+wJaXnbINPQb466ToR3mZu+r5fvOz\njkW7dCKAj8PTTwqpUGg81VMLnXmYnGz2VbVnrWIKRHgWXBUMRJv6jbdH4v3l\n0URH5eM8UMr1iuV5CNT0dj6cxELkGU14vOvLID3dI0tVw9fmt801wujO5rEM\nrVUESqUDUUeFMxHFPbFgutAsdk/Bw7XYxU30n3LNXdURDJ7esWlflDpnKOyH\ntyLF\r\n=3upW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6+bqg2KVpOZglyMcfkZ7jS//I0SNGfo9f6c7I5jCTsQIgND8UeaOc/ejx8lzi+NGUEneUWx567CbuKFvP2MMry2k="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603135274-58bc3490.0_1603135388759_0.011151513958461257"},"_hasShrinkwrap":false},"2.23.2-next-1603180994-03d6fd0d.0":{"name":"@xdn/core","version":"2.23.2-next-1603180994-03d6fd0d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603180994-03d6fd0d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-fP9UK2HgBthUTI5awuoDxRFV6tP/CwPE5v/EuajY7+POZ/2//zZuFRvM6wgYbHOYNDtqt3xB7oDGszRTot+djA==","shasum":"aee23813d418ca31b5ee970825d516cb29241b19","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603180994-03d6fd0d.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjppBCRA9TVsSAnZWagAAZx0P/2+gJikb1GRKZdlyW7FF\njqtNCqyLIvgf4jyQE/21/6OIc5qWC7nlINal/CERBJmhJbL0mmC1c6ji1qlP\nOWG/Sh1wEebi6+Q38z7EWWiJsle48MM7c7fzXdCjSFNeVdY0pk7Ogv1lpVRQ\nKDAyfOGy/FzSMNqThw+Y/plk0ow3WXDzOPDZbHtmJ84bRc+Da+BDjESsZWAZ\nTVpuRAqQtWB6af8Kc4zrKOLqmyj05M/vt2PmQZTmuCvlV/GlG1XjOCx57RRX\ngQKo9jf/tunisk7m+Y1k5UBLwckXCZ6xWF1+sG/PfTDzVGefHd1DVKbbAqD2\nwRS5b3ubUPpgi317C1995TT4TPUhI+JoJR+uZcx2YgoKMl2M6fCmHHnajgEu\n9tlXqrhQ7lVQ62CKtc3zQ1Vq+z1KPPESx843YZPc0IprKS73z/I9KwZxnnZB\n86SiBo/hEc28g9h8L4a3xJ2/mWUD7QP9vFKD+s+vAR6xfG/0b0eeuqaiiloV\nJLI2EVUxOPrfNPMIe+2XS5b0pgTjGOR396gvuAEewSqb2KQ3LdWPD9VJ7Dc6\n6TSsAPhJbsO28Mmdzu9jVnME/MYdPgwHBhiCwj9obdeSmAa/+iFnEXjYG24o\nixcMgNS8aihSwA5GK5cchKA52Al+DWL/DtM957YGUMufzbbnTl0OougPuTqE\ncz0u\r\n=5E1k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/hA1YtQCBFS1oq54OTEbkBG/JDfaoM7+io6r8A5ex1QIgLmVcoc+i9FzyurgphIYktaYB8lEeFv62TsuIZet0sc4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603180994-03d6fd0d.0_1603181120594_0.4390325453570223"},"_hasShrinkwrap":false},"2.23.2-next-1603181219-89fad313.0":{"name":"@xdn/core","version":"2.23.2-next-1603181219-89fad313.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603181219-89fad313.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lZHZNxsEYEN5uPN6xobfUFO5NK6n9eJD8HpFhehlGmjOKLz8Upo7Newch/fb99F2wzWthu/z16HthmCQn0Xk7w==","shasum":"edac1fab501f75345a366f41c185490ea2219732","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603181219-89fad313.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjpsPCRA9TVsSAnZWagAA8CkP/RkQC2L01mWxkCOwRqj7\n+XUKmThPFlqraZzUPHskLqUvEEODtTOa9ibdm780T799RH+YXM3Dk42hLPRE\npuClv8apignJRAKb6s+1YRO39auqU8I2T1ZCpoLjXGW7co8thmwT1j+YaAI9\ng0XygoXdbCuzcrLHMu9kHH7yUvN0db/mxwFGx3plIjFIztUxa/2Au1dam8dJ\n/LHO+iZk3QUyvvLYI7jrasE6Wk5W6lEgAP8NGRH2MHmb4zaMoA19WqAkCmUl\nTXrnXkc4PSavpwfoXIJQDUf5NWhu/JRCcMZJc1KDHtf1qf0WiZWEuHNnKdR5\nQ6DP3H3D7CogbRhuTi/IqMdBBAGMB/DS+Rez7kQQcEDarkgenP9cAd4ISos8\nQa57L+C9Y+WmH1XTuON5evJ1zO4uOk6cZilnrlT71XVjy6VQ/Cl+APxfB0JV\nDEjJt1upXaO/kIx+6ruZ8gICPydoCaj8vUJZZPHIVkqFS0ehAEVSZdRqjje8\nENHW56NoSu2HZgN76kVa9/tZ11gPK80QIvD/zOgo31+E7ogudT52BrZNpktQ\nqqaM28dp7w+czVoYfd+tKmTKUb+ux/JFRVZvLfN1bC75oErVk56SJlJZ5H3R\nORgRua9Q20hkF7ceHxdLYxXNgz4KU2TFy7NBM6rrD9eB+iqYUzxb8rNhAD2g\nS/wO\r\n=l+wx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGFucpDejfFvHN4NqXfAgAEK0h1BTUnviuVJmi9lCcEgAiEA1g4AJcRPtjrbJsjQDeRJPZPDg9YnCK99AK0ixKUvPTY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603181219-89fad313.0_1603181326512_0.38451761214199065"},"_hasShrinkwrap":false},"2.23.2-next-1603181260-2ad12a8f.0":{"name":"@xdn/core","version":"2.23.2-next-1603181260-2ad12a8f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603181260-2ad12a8f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/wXnXeudynUtd/7zCMpp8IDUY8mfgPsXTzAIu2s9xWXAnTdSaZAGmzwjXOwTRaS4wY/ju/lvlEPGGwGKDRCHWA==","shasum":"d0fb8ba7acef06344d2d368f50326d3bc94cc94a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603181260-2ad12a8f.0.tgz","fileCount":163,"unpackedSize":604596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjps1CRA9TVsSAnZWagAAlRkP/iRfhEU0Gkzp9vOPtuDT\nSeiWe+HX1YkSOArLmc23VOWoL0lnURQGKTMDDiKE5lLBBsV/akQPYLfTOMUp\n/HT8jxJuUTyOlUtomi4kSihCP3/tiFHuT5WHa3T+m2tJtQBbYGlxMd/Rc089\nyii/RuLkMRu4rXsTh7gB6ouQpok4wnREeSscSqvZRoAQXwHrUa+Niit1q5wv\nEl/Ta1l5scOFjZz2FhSGLO/32DIifKvvDCHQ6bYHaMrTGTdE1vjcoogRKQh6\nGPh7fMIN5L6D344Nr26iHuYFrPK7OIl38OrNAsuoDmGH+5mUUdRE2E8ERbXT\nCRvcgpOFW0s8tjFYbF1KsW6zklr4PecJ6qVHGU7AegSIUd0Pk67rUzaYLVz2\nl1pTrkrqciknoBIMAcgOZPp+i7+R3uXApw087i130vmZkbH3iCZlvFXEq/AO\nppX8Rzd4rhS7EkYLeHDk2PcBij/KXWwo/7mKN6q6/1UePKZYPGoj2SA/Hek6\n/DN6KPiw6AVop24C8XN61fZYE3kxOArDdR39BspOgDPxeGfXbuFC3v36KbJ7\nGleYAxSG6lYT6BlyfQNe2ioiDC2eww5LjEo+Sw7G+pFTz4XKV75sONFMb8B+\nE7EuzNcEimAKGw/PGTHmE1OrlJrSNrghlNRI9y0/sB5HDUwJM45j/8rz5tND\nGBk4\r\n=tLOd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCID+xaFsrV0GBk7yJEIh6ttuqzhdLAKZekvpO6BTQdz2FAh85lL2aTY+4EiweLeuYhrHAKRaHNUbG6N1op3PsaH4E"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603181260-2ad12a8f.0_1603181365427_0.9267225028480881"},"_hasShrinkwrap":false},"2.23.2-next-1603185946-a4fceab6.0":{"name":"@xdn/core","version":"2.23.2-next-1603185946-a4fceab6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603185946-a4fceab6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-pvd5VG08Nf9w09n3fIfrCk/f8YlqxbesaRjX3+861jDow0Pfi/iUjq9EctbyNa1phm+FJUCa0vGwzCdyEmfwDQ==","shasum":"26c931b8bf296884bdbbe4d00f67ec3835760f02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603185946-a4fceab6.0.tgz","fileCount":163,"unpackedSize":605626,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjq2PCRA9TVsSAnZWagAA/ioP/37usXGAix6Pd7f85Pnw\nA6eC4QuuZV/xiW1IdGdx/KW549DINV67wUPuWvdLy/d8QHcOG5TGFxzBjTux\nTk/S37h6JHkj5zEcYKHfXeUpTKYowu/bmk4KPCXyVvAuQGaqImciSMUAehd0\nQB2PKYLzv+PtvjBHPtt2cZ6PNEjt8rr3ke4m5OyLEEG2tYqtivEVLwTVkwAT\nHP4dx1aPnZ6B+EK10ci8uDjIpyCK2FWGLBaoGIaDnMSMZSqhJaoRBh+KBhoT\nKU21fSkWtTpMdfnbabqvDKBjtJOXYw00ZugZ3q5stSLKFh2U2b8ZhM9Lw3M5\n6o+Wm+bMfM5hYUljnkkmtk6Ya/OyRrnc+nXN6WriIY4GgZ6eVCS4MGiwCFsH\nnWGSWFVylBSxK9hqvFrEi1LXU2kNJc9UUCtU9QmqQ3N8lkzQbuoq+zI99Dh4\nUUYZV8XFQTDW+x8GYmorzO3/8KlEu8Q7X1hvpTDgrnjDfoPviOAJ6x+4XpyS\nC6eSNQQXND3vo2r6Nxn9ieUIsSwWCsEvK2LalXolvgt6Q/qXHezj2MxDF5cv\nIsAwEz5JZTnQ4JW8+lVX6qirV6Lf0Y+YAMHnHmcCxFyFXAUr7cupG89GDmUg\nFQW3RCgt7hQyUDggiXCFSAmYFYj9rKVg85J+i4LgjAK2+vm3azT8yg8vxdx2\npb8V\r\n=gPdl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEgxGkZ+PthlwnFRdZ0fh99edre2HEtV7YC3wQLCz0LAIgV3QdVv4q01ajC8/A+DISZ/dShTXAAV9h40htuRQFOtw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603185946-a4fceab6.0_1603186063135_0.7352325046919395"},"_hasShrinkwrap":false},"2.23.2-next-1603188235-9a0289e2.0":{"name":"@xdn/core","version":"2.23.2-next-1603188235-9a0289e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603188235-9a0289e2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-S/G1eiBGZZxiyVFd1aQA/nO0djOwMqwTLMA0gU2OQ3J00a7Y+qRbdbn/qpyMzegxuuzwJOiG0fk9+ECxLN5MRQ==","shasum":"77168191bb5e0c2a829e2ff6ebb17d0e805ef1ee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603188235-9a0289e2.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjrZ+CRA9TVsSAnZWagAA0BkQAKRev7DdObCOkKi3WCJm\nvU+tum2PmOymZ66hAWdRqDuzfHqsZJyaCmIn26TzPATpa0n+oiGOBuja6EWS\norxPxaKqpQS3USaN4+Ft+Us41xWBDMyr8I2sBCDCVnI7SLiqH/VFXnN6lCuu\nEo6sp9BX4zKH/vahp2yNOrqB5p5yrHwkL/2WKJsnekskG/16acaQ+z7HS2kh\nvuLR0jwCaI3HMbtJV7VW3wk2CmR21x0nH7fdmrqA6Up3jVX949oA0c/2NDkb\nxsY32nwPw/rRwF+qK3qcXGXEDUZduUrxo97RzErFWD4L9HeAvBARXMA0JkyU\nxTKzi/gcV5j4FmH/k/C5Cj0nm6I/s0JKx1aaGJx2yH01FlXaGHy4nhRuYukg\n0wTz3Bkcn6lKfzi6DM/AffCFSA6zKVPkOALjlVdP4dtCxe00u21QgTRFl7rx\nmlaiHN4Nn97dk+AfgBJy1aw7Th++IZmLAqukqi0kP6fOS01CpV6gXPHJ8TiE\nTBfdiS/fqknnbLd9PtS3l8p+XJqGI1/5mlOx+3dOMSWbUji5dKeBtA6q25XV\n3F66Fg6e7qVxAk8GZr6m9yz8tW3S82oUFXDXMCT9Gees0mfPRZDL1GJU0Dc+\nBKYOKfjlRo3da0gCzYiurEDi0ovVOMtE2m018uqJZ0dJqwycUjBXvCF1RUPy\nEvf5\r\n=CQ0B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFAy747UD2cAXniTr0lRemelKp2tHY9HwdWem2jIkx5nAiEA3aI2tv0okeaJa/omtWKh6aKr3SSReWHqLlsDRsHUXEY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603188235-9a0289e2.0_1603188349876_0.16032949456125434"},"_hasShrinkwrap":false},"2.23.2-next-1603193636-6ef423de.0":{"name":"@xdn/core","version":"2.23.2-next-1603193636-6ef423de.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603193636-6ef423de.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gNC85EYoT2cIWJ/Pd7oqih4mlaQnms+vz0pmPjRLwbr1ui6fDjw5Ly5OiPezwSNSYrk0uwD2Z63tcCMZNPdABg==","shasum":"842428d7decfae34d84f2b617e2bd63de54b2f4f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603193636-6ef423de.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjsuWCRA9TVsSAnZWagAA3mcQAJEdxMU+genHHcY2bPQK\n64OTWEafw7JpWDYhoFtrJgeZjhscq8PxUmEXbayUcqgPoVOMuLuorTGU3bZa\nfT1ftp+harxvKDcvNdrK36th/HyyQD1TmL22d1ZU/MuPQrc0bG6+wLWP/XrV\nLRtUm3vm34WtElcVnMTbrCb7gS/l47obO+S/lpsxkXJptMGGUpnP3vSPPOS3\nKXwCiU7vqO+ScMD2UlwgmAgX009tG1lzn7KddPZg++KP4TjnVOgLhPCHXVec\nhiYm0ErzR75B4+j9q9LIb5pcQWJgByrEumEPc4OG5VxcdUbVm0XKKFrjTStZ\nWM/tb7YcY17ETd/HxjC0e5vjWUYgVOgpeYtmUcwK6l513DMWlrMZk5ERg3CN\nX1sJHQwxA4BXTfHdib70Ezy47jw9jwCqbZ09IHJYZPgy1OO+1nVuEB86UCUz\nZUfuesBNYWklLP03WL/N7KAHD3r2LVJrtkkZF+LQlAhmV/1Tc7NyAFOF5Q6e\nkWZwuE+QsGCNl0JKeS/l6V6FAjkWR14Qdb0y1xfYXY0HtjPYXXoB9ZQg9rZn\nYCMW/bY36QLHkZFDebqwqv7DAiq4Y4pBSenv1dNuwmdsb+gLGPycpekD7KpO\nbRPQQbp1kFdx6Ud4FnMQ421FyGvdw6VrH4hKWjaFWngHV6kRu0glp7WARfKz\nHXr5\r\n=ODV9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF0Oe/1yAKxCegYhNuUG+/GBhqUHLcUSvh47bwx5TwKBAiB/PkbEWpU0rl3WEWgsa7dwlCEXz/NcA+0VpN61PupKSg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603193636-6ef423de.0_1603193749787_0.7769214384675889"},"_hasShrinkwrap":false},"2.23.2-next-1603194126-4894918e.0":{"name":"@xdn/core","version":"2.23.2-next-1603194126-4894918e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603194126-4894918e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SwOa/qvv2MeYDtslio8+ie2TAF0COdQg9WTlWRIZP7Sc58jC2VZD6bIXnE1zyU8TtrMWjVQ5pcHctFuxwsu/JA==","shasum":"53340081738d440642314f36666588c3cd491fea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603194126-4894918e.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjs2ECRA9TVsSAnZWagAA8I8P/in+6mbVu3SYssyTagmg\n6N2ay7j0d2FC7yWl/Mu4yQAkiN+ZdMZcnEpmxqA2zGX1DUwWx/a3OMDXKaFB\nNGD4zOodA6FDb5w4ADjX4wLsV/rUNNcn4VAIyxjrjiJfPXQ30WGxttxmdUzu\n1+eFwQiNqQ6JaMInNLxsJyGmI/mIxiRgvHAtZaAdkzENQ7P92d5whHv083a6\nfUQdRdsffh/yyoajGj9v/lsuHaWqUQcmVWILOODeqm26SETNBKM+orapq92l\nWxtRYTfsRCfT+l1Uq6UafsN6hlmk80Qf9j2r0vr0peIaMuGLkXIGxr+RweNk\ncMrdpZIQ2Myli6Hefb53MsUJYrOPJbcycR7ogg6yB/pmJvYlyYTzzReBuRKM\ntHekX1zUF57xRsPic/8jDcquSXqjseM1eWreXWNMVDVwnastKaby/9mdwTzL\nG18f7ONdRn6mzxomSjT+yRXXjz1N2EwZahe+G7w5ZLG8YhjFeGCzqFxFX84i\ndgVkU6DPp0kyp19i6bNDaMjPRKNqr56YeMs4F/OMD6y0TSZYfgihfQ3G9k3V\nSOnsm5BzD45g/UixdLnKgLw6G2TgTdPXERlPxOagqgKAPqlTFFs3+bOM6K1Q\nxPtPvy1lELEOoMjI5tCqEn3rSDpwfduHeGrtaBk2XicsfANer9/CoQtSwWWF\nbgPi\r\n=WKXZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3Plmehje56j0tt2OrNuLXRKgZazp7ImNFAnUKMRPCcAiBH7ZympnJvycYxqDiMbIOnEZ/6E4p5CVXYi337bfz/bw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603194126-4894918e.0_1603194243943_0.19347595427027908"},"_hasShrinkwrap":false},"2.23.2-next-1603194613-3baa53a4.0":{"name":"@xdn/core","version":"2.23.2-next-1603194613-3baa53a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603194613-3baa53a4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-edionqL2Ar/hNGPMgcM/NIT1fuFOe86txpdOmOcLqSHY4Otp2iDzw/96MK42GnXvDUUOZcQozC5fRpQNuMAptg==","shasum":"5dd94e8ea71f6e4eec574c120b92873602b68c9d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603194613-3baa53a4.0.tgz","fileCount":163,"unpackedSize":605626,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjs9oCRA9TVsSAnZWagAAMNUP/AjDbVMgu5/kXZeQ+l4q\nzxsVrdqQwHIMh55GUs9Uu/fSNwq1f3qoOTKvI0adv5C+e0SEN+69GopU8NEO\nsvciXLg13nO7BmiCJNQE9G/k4a+6aX+9IYkiR/ZN+2kfTrTMdkp3S8oBgGx6\n2l4TLUNUYbIKvZzdDSpvpzqxepsOORkCeZ4PDQYCsXpXHkC5jLdmqhuj5Pp0\ngnxXaescB2e0wSj5exY8/pYuLv/T6csnC80fNX6QhiRtibJe/UcNs5SnZPqR\nDZeEl9VilsShbAbRG2DW38wooTwUAjDgNQWxYWGeHX5bh6Zckgl072rYrfz1\nYvtQb62iJaXV2TfsbgTRbel3R4It/VKX+gGdzjD1goSphWdlfLt+9rPaRTps\njC3FPU+dWayUtUIobYmCGZCZrH7E27KB9gphKoziBAEOGkU5X2MRt1anl1Kt\nkNmGqJkGj8nHo97E32Iqn/ecasBPOu45tglfKzHDLEAvLlUXQEg5sV1A+31Z\n3mT8/q3HxARkzhmrIqsYnLV7WI/aO3ZJv90DFwFXm4kOzK/MfxOOvD6uWGVu\nn7FFjCG0tb9/5RBHof1HlURWaOYvO4EUxwWFSRnMsMWhbY5VH9Sey6GsrDGE\nc+W/5QNG/MFJjkxle0c1ky6h46KdSFAk7TTSpkOw0fGj1194NjCUvx3GkbpO\nOV+R\r\n=trUg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICQKyzgNj7InJCV4QtGYVnWhsaHaZlubo6xa6gmYt0SAAiEA+3uGflzF8P1JgnK54qYwAlk+965veuLrYd9r+BeGBmg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603194613-3baa53a4.0_1603194727564_0.2730922834872338"},"_hasShrinkwrap":false},"2.23.2-next-1603195885-d990dcd8.0":{"name":"@xdn/core","version":"2.23.2-next-1603195885-d990dcd8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603195885-d990dcd8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-AgmjK80clyeMow3TcpQTTQNSS3Qhu9HXM1bDynAT0LBrRF86ZMHNnS4j7zh1BcflGWo5f+J4HIo2RONMwuJbPQ==","shasum":"37fb58de1756c4f0b6c691632c859dfc19000999","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603195885-d990dcd8.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjtRfCRA9TVsSAnZWagAA/moP/Avdkxp1XvwByu8KDrbH\ndBJBw7b1Oszin/xI4GEMetL8onZbqQ50p4t6w21gyFFC74yyCJgtZVUqgpZp\nszJ9vPRxQodbjfKU1TbzByJ4N2X5XJw0/7abO/M8oNRF1hJz8WcmtCX0q6pQ\nEo9/DEmhLaJ4f/MWDqlAsLNR7oWL/Q06hRGdOoVs4fNFtnI60JHaREi4TIam\nM+Ppsm13wQPKefQXjZI/x/JkeFT+s5Oo81jUmymp1BKBym56jmc1xxBbQALZ\n1k+z523c+M4xcEoJa98eLFa97oTRl9C+NfTCAOy3TFs5Cs8pk+PyNMrRDp8D\nr4VMOnjVoowboySbaMAF6nd2u++9a4hXj/ZIQ0Qaa3gqjafXDU5g3hPTyYRz\nsP5gic+VaBi2xKUuWQmFnJJhItJCVTU8sa3gLJ0glSo11fOBRNz4hn6knRq5\nLOqfKXmDTf8jetjIJTeYDkBZv4/iWi5GtvUxN/Wa1ejBynGA1NCHC9d/+/eO\nL8wNZqzVIBZrNQoa/rhXUHQj1wBi4VxIrWtWErQfhy7gUU6M6nOl+TgPTjxv\nzuYk+jz7PK8LcJcXukEWgWOjTUELFz958lbppCE3jsW5C7ggw2RwXwHQld9u\n3JieFslL5rlyjpdtfx/AyuBnFwu2Tzk7KHNO1jsqV1ZfMs/fEq1X+VPkk/Em\nP0/f\r\n=8mGp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLA2dyykoB55U/76FMaXY4tJT5XNjpHqusxqpgRmYdeQIhAJEdl+VWpKaBenHwaWdKwIugCvr4emIlglU9jXWnebyr"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603195885-d990dcd8.0_1603195998442_0.42160276983179146"},"_hasShrinkwrap":false},"2.23.2-next-1603196927-4a5d2930.0":{"name":"@xdn/core","version":"2.23.2-next-1603196927-4a5d2930.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603196927-4a5d2930.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FrKHCEnsmG55R32rR5XTgBwtLLA56BDHJkBGjDW/ensarOeEcDO/ARmBDmTvAIP/X7mGwL+Urv23z8ejfZwTVA==","shasum":"e279b0a6a1018faf372a972397da5cc46b45dc7a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603196927-4a5d2930.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjthxCRA9TVsSAnZWagAAhyQP/jallE9xRJf0/1NaRImZ\nCNjzS7rRiTt81dIOtVnR/c6hmaNLHV551YtreTLL6KAihHMloCwyUDbh08C8\nhgE1gDMY1UZqcqlEa68sFXkwnFQRmefmfrVUpt12mYq4FMLWQT/1Mgq6ivs1\nVwUc9E5HQgBsnnRjlvaLMkunmgoVUbClZ7yXY9Iuw98xdjQVI+1gG4r1N/pT\nx+BL9Fx9WRk+f8R77aCCaBuA46OE5WEWpLJTWOfWkBEha7CpbH1f6zythoxw\nERtLr82DxkiRjpjAMydoPF08iBwEGHgBInps6ljvE3aRUvGkaQPQXNdQ6dhd\ntYGf0GDs/2j7pGFWO8Z5Tl9jMjjLnIEGO1W4cvh/HmSH9AmlFRG0TS7KvaRF\n/sJ9XTtUvWUx2/hM89CYdgBc4suti1CGnUtCxw2Aar6V19e6NkEYmS9t/Svp\nuKC57wywh7QZY0RGRLPG2EPxl/4qG70F6aG+mQ0DTMMV4RzQA07eunhr67jB\nXf+wevqn0NUkyiNJ+ZOC2V318sv/PQOmkIolVJme6E+TJJGtwJEUxEmFGFBZ\nBRd/Y7m/kluuDhKAaO2zrtUqM0Fhi2dwLCr9sFqYRXLf5EKIlSCaujvMhXXe\nZFJ5+PPU/nyVGs4gK00BXY9PDBuZs8UWXbcWlPOO7VG6AvGXrTxGTxG0l6mg\nAL0O\r\n=O/Kv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGXYRGtr52lV9kz7z82a11d+9zz5LwVb7d6ODDbtzDUwAiEA9Rv+a2X1TIyR+879fqxMN7MmZ/a63LiAdkp0eB+IDYI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603196927-4a5d2930.0_1603197040680_0.34008906923394755"},"_hasShrinkwrap":false},"2.23.2-next-1603197008-57d7850e.0":{"name":"@xdn/core","version":"2.23.2-next-1603197008-57d7850e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603197008-57d7850e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bo1woCAvU//SdZr7XkeBkB6esBVpFM36fKNDpBR9/n6oirwvbhnwDM1X52oR7xHZ3koQq8R98pCqyDC7JHc2NQ==","shasum":"f0b7c6078c0dd5d2629b7d1c93a672cd3113109e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603197008-57d7850e.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjtjDCRA9TVsSAnZWagAAIpcP/RcCD5XHQTgk6WxG2beJ\n8l7zfdvbPBTToOVOH1HOt5mMMgTXdaBObPtDhEMI8D7bPSx+F6VrbjS5bi+f\ncucGDUyUPFsFsyEG8TRZts6VMGazxVWhXzAb379UOum6OVy6qO2aItQ+YgoZ\nh8LoYS48n+P2EkdkRJMdMFpgBkL1HbP4DOaDMIdXgkdyKaailcn9GgZhCTzw\nIiR/NOqF+5sxufFK5jgSz4HwnMtIsCNCbV81tvsvuR9nUw9M2RgJ6eH0rWS2\nhGKPVoFzUXD4sqpKYG7KBnRiz5bNuVEviwepa3qBeCsQ73SM6aH00BNEvbbw\nC/UvBcux97OFfDF11Xt0aR+/omi0hz6iqnRmE+L0SKpon0l0hK5JP4m6hr4m\nzfmAKkK9HVW9bbKH9A254SsVpzT28322S4Z+qWM/d51ANj2VPL3YeKLKUaHF\nflinKbZHLXl9Pv7GsPhyQFPSDdsZo+ExYx6nmD9YSofDh1jhuU5DTqFOJr1i\nVXUt4X36f+B4T0Xjlm/5kE4UzjBLDDXDDbGLsCkzHRjGGILMh6Qm/8WhEFem\n0agLysF7vsD55vQ+3NJIXE7tNC/V1ycG06uHwNMncxm31HrLTGLq02twJYrp\nGCHcWo8zG68GAqVQDxzTteyVakaGycf52yhGG5zMqTfpvaJXTaor9dOTmPHf\n7YBk\r\n=DLvG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCh+NWvTYgkvSIOPiLZmpfWGe+f97M8NDgxQAFsK1GvjwIgCNE1rT/HGnGwD829jZU2mzwhZ9yNCRRacepc0uhouFo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603197008-57d7850e.0_1603197122906_0.6596546027684647"},"_hasShrinkwrap":false},"2.23.2-next-1603197067-7063d34f.0":{"name":"@xdn/core","version":"2.23.2-next-1603197067-7063d34f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603197067-7063d34f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vhfcv2JDQYFYmSUCaDKVqVHKvtu79Iw/LTYge2t07A2grwu6MjUef3SOqRM6deZ0fPDCik5DXtc8q/6yNy3FaQ==","shasum":"3299d3da3b7feb9244889e7486dc2197250cde49","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603197067-7063d34f.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjtj6CRA9TVsSAnZWagAAEJMP/j9ag5nlQqij0StnnShQ\ns0RJHTsgXnC30bxLv9/Wwk8sJWSSKwhBmksEohfcIsPTvWwnKBmXRX6J4rpP\nzAk0gQYT3fMH1zE0eWboUmOqjRjBocoCFR+omUnEifrYB16bjB6S2SKNb3X/\n6hOP6W0kzHWUtnRbIo2jBYTOTKNf5We7ICgUEf63cAT0UPxhkFDY5mclb8r5\nwiTb9UaI1bM2/K2GQoZ9M/Cg3PlbZyBbokKnWOcRCjIeZluE4DMX4kDloHCb\nFLKkJf78gPjIxlWg9xK8kv4Cp+r9QX+q8Tn2dWYzGbvWYckel1P4A509XzJs\n/2OjsP+kKQT6eyLcBnAvv4FbsMg0OcA69GGcWZiNCTiZB1mVTsawMuA9Toni\nEWu3nhyhcSe//3lc9lvo9RRlgBDcvv+sDZFKhtDgZJmlzrtBdDALMzCG17rV\nNXQ0KkoUBT1et/3iCg3k7pidD83XrSYaQg5tb6TtKUX5AugWk28RI4kLKhES\nLSgc0ghpjVcHuRF3T02wHBpNE15xYFrgJCu9KFupPrFsnZQ5Vcgqq7B9s6kv\nTh/ejFehOOBrxrEAgEaXk5d+47oDXiduRDHkY83dOcb3Ghhfn4g1QDQIm2Wt\n500jNAXBMA7d5UZgcN7+MS7GrLPDmRCHF5xfFMyBAOdP0dAh7u0XYq7r27+g\nShfl\r\n=J8JN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+qUi4xn4MxOJjTEO0ixJVifa/DFWeg5inGx2JZV6hnAiA4TRBOnGfPLpP0VFr7/KWVWCFh1t5LGg42OkNLD8stew=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603197067-7063d34f.0_1603197177592_0.6350510389811161"},"_hasShrinkwrap":false},"2.23.2-next-1603197231-06a60c29.0":{"name":"@xdn/core","version":"2.23.2-next-1603197231-06a60c29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603197231-06a60c29.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kIAh9YCQgr8Wkik8Gzd70UTdyNHf4c6VV1xOQqYyGoBWykKI77NukXnbVKgzG0Wk3cfcIDFHLUycLLqOg6xMew==","shasum":"b09bdb70b55b63bc08ce28068314157fa5f86eda","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603197231-06a60c29.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjtmjCRA9TVsSAnZWagAAuy8P/2Na3/OAwEc0VjbhNHUG\nrPaarhUPckGf6XU0WfQIp6OS2UeGza9k9BsU6iYcxgKgXn+NAYQfsBpIo335\nQ3PXAsEK9p+G/znVjaeNxK+iiXgNQqfBK6+FhlabS1Sk7NwdYQrBjHD/Wv3h\nEWcZo6Cyn8lwg+bz9pJzAwqOrJnDxkPDBqcP29OIA2R8REhPRjW9erXQaDNB\nld1ZNJeiaDZ5bbCjQyc4zPMYM7kb5ORPeAoe3ElTrczlpzptBt7i0OpEv6Ii\nBuh4JxnDeXwvnK3ZggNPPUA6ORn7QAdNRpQieV6WQIgSCi2AkBP5zEuAMeuB\nZejRx3jd7y77MULh2ptoXuoPBcMmTDS7QDQWJxbxWEPSC9/KqEbsssLQ0xVs\n0oOEWGWAehkHHXAPpUViszENFyDRr1n+N++l/H4ORvPYok1s2j91/jYy7RtJ\ntuEiPwsTvAefzY9ZjVhiJ0Ut7xwgk9KwdKzXQrmKFVe4e72/MN0uLNGvpDZc\nx3Pi8kaKbMdcT6s2dk/LjfLr+e4DqM+3KH3lDeMmG9ijg1N6mJOSgLNwmPiD\nkk2WrkhYGIiR8oLZCQMjcSdDmncpG51kTROvSCalZ3x1TCICk8jQ7qgRlccT\ngs7AkVWvrwCnfQhVoINRlm9y92Sz0+IT4uz3b3FEwXFhoKVovhG/PMglJ1HN\nCFd/\r\n=i5yu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDu/fyQ3rDpmJjw//+qbHGTGcIj0O1+1EtvNNrnRNmZ2AiAGPM85JIBmsQn8vVSX2a9iWYtGI2N1s/fuHatFqi4Evg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603197231-06a60c29.0_1603197346462_0.2932747597495855"},"_hasShrinkwrap":false},"2.23.2-next-1603197248-8b5a7603.0":{"name":"@xdn/core","version":"2.23.2-next-1603197248-8b5a7603.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603197248-8b5a7603.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JMoqdDUvjK5YaIuwmRI8Hh40bv3jP94Jtc16ZC0qIv6fTLr44jcPc9IxT+fx4WzOLk7hnUWHLQYvu8q5JboNJg==","shasum":"e17f18d2b2a5bee5869b3fba9b63965690855807","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603197248-8b5a7603.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjtmvCRA9TVsSAnZWagAAvBYP/31lhIVXoRtRVvl7GZYW\n1OE7V2rhIUXWdI6vz5MQj+zlfGnN7IjJWwKJXAWqKhBVXyU/2yCdfn1S/Q0n\n8Ejl7fuKozdrUHRH9/Y1V1Ku6zEaXqEqJC5Z2+dorTdtl53Lmd9sIygXoLeE\nB8addVfE6h1YAKik3hZJWcsU9s4q/LgsH7zqeTB8+RfDfR0JdIkyg6i7cM9v\ng9wAYauNeFuID2kG9F3SzoI0VjPYQhRP1NI+0FlMJT9jzBftkWe65EWV7PBq\n66fLePCCMiJxJgI1iQP9Wn05gWciInWBixxUUE1oYctVLhasbbM/Wu0nGvgf\nwPW7z4+clY6uEyblWvGwDp6G6T5H7t9O6CJ08A5fKoymLL/6ydMpIOjJg+i9\nS1dY4Sx0O7T+6hbqqInRRg4YMl1dKYiFwPTHyG/Td+rgY6QiSC/UowB/13Au\nWVQ8Uh++tbpIAQSsmM0niEjWykCDoSA+KgWDk15Pu6k1bLaZ9Ev4k8yFRhV3\nsVF7hVVGYBgXYGmQl/GOYTrIBJEP39slv1afFUAaMwIP0CJys/x/WUOjIUvm\nqNJg2SAHvqJaB5oh92u6yIUvn9QM0gJhWsphtJsWPD6gbYAmqz/uhuAHfvUv\nNz6z3nQLV7hBfE9sin/hJqFGHGfceT0xxUgyQZ2rwZgNOPFSKP0Esdc/98mh\nHeiL\r\n=iPbE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF43e+M7RoAfNXs4FwNArZrjgE7ZZG8eIRqFzQEt72+lAiAD7P4fahsGRPuwvcvzaC9uIi8SwpFW8xTLQGte9T3WZg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603197248-8b5a7603.0_1603197359134_0.03741790621518115"},"_hasShrinkwrap":false},"2.23.2-next-1603197253-8b5a7603.0":{"name":"@xdn/core","version":"2.23.2-next-1603197253-8b5a7603.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603197253-8b5a7603.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+vqKh36eSJLv0tGrpr1LN3IhmFLhOeSGbLTPDw67kl5TCETr0u7GrYgUVgt11pw8x129KEBRusTOHNlPU85riw==","shasum":"50d8db0d2bd74dfb108f8604e65dcc5e0df3f19c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603197253-8b5a7603.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjtnACRA9TVsSAnZWagAAvtIP/3sYEk+0CTP9/03JY4p2\non2B732i1jQM0/kPvU+3PatEYU4LHOQD5f4blY3/+Xsd/ogeEDykTXySHB6s\nRlwTdW6KGDBbkLpOy5uvxKRoZk3LJPjSz3mr4cAfvk57a0+38flPTJoyw5O7\nNWj0DuOA6Gjuhuo8JIQM4YENoowua0xCmdM+YhMAmaazl+CwGs2DxFc3hpx1\nBes19YYLcBT2rHuJD9/Luma1cXSzCy6yihdFS56ULg2TIEsv4Xtn0ZDDqFZJ\nLYSGB3gRGEojEcyTKILdiqlTRUXLl0XBydtISaKEYUEh9J97F8wQJA+KO6iM\nu9d4rxO0Sr7rD2G2QeM57lKU84rZdaVp517rwJuzL8XThQaSYEiOwSOiAf5v\nG1/jQJE0uLQn/EDaD0E5Sp9AtR9fneGX3A17uvzOGg5PDRYNmcEveIEoTfiM\nvrMzYgc8YKg6G7LnmrPYoM+96LkloJ+MgProYalY1EtfkuQIpNyQFeBLMOgZ\nY+ISRPPO3IarR37mRcYW4OAX+22Ou9fCKILQB8Zb5YXXj2+r2Uqqi+BqUwZy\nod665FB1g4GqFX+GwaJPC7ETP93SzpcMtIK/iQW+nW3tFvr+joHfZG8ysX70\nVgj351vhczXz2FDGvDVYflUPg1jD5lRvDxf43t4CxYTVDtJI0KLWqckC6ZsV\nAhx8\r\n=rUXM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcj94bgXH7a2gLKgOjvanq033Iy48hN7G6FalLIH9aIAIhAJR3GsWgNh7zOPhIG/cVTzTfCfLRClk9ywcHopTMB99Q"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603197253-8b5a7603.0_1603197376443_0.29473744704600047"},"_hasShrinkwrap":false},"2.23.2-next-1603197984-dbfb2c04.0":{"name":"@xdn/core","version":"2.23.2-next-1603197984-dbfb2c04.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603197984-dbfb2c04.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rkB9C6mbcpfzKrm2uGZFg4aoBALydAGYxQATF42K77XypNnuDFB3BsRUccRqAK7rHZlJp3cHzkk8NaysIaj6Og==","shasum":"d8ede50cc1db747e1f512aaab592af15e7d04d4e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603197984-dbfb2c04.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjtycCRA9TVsSAnZWagAANvgP/RxqtjKm4CLvpoRHL8Cw\n1JduJkN7K2Ju/jfj1l98sT1JNWgDiEL/JTZU/cam4/4rL3ERVe1RjSI5SgQ+\ni/94/9ZkWXFR204PurGmlAy2BJ7CgqNgK9HqoI9A1FIKdJ4Guhw//REWYDLg\nwRc/22at3Bdq3OJ7xreFW/8tzQgtTY5P5YAEFfYQZt5tdaKPzSxIgJcHCJ5T\nUyw/34AEs2ZKzR1vdKB3p+iaIiPc9ojGUftOWMGLWxNrJgZRGQibEHdSLcc7\n54tJKGLnbF5j5pfEPAnd8GYiZLMqJ8cZ8p2Xc1sO0YN/lpuelCoF8whA5542\nGVuwIm67dk78ZtNB/pvBv8s58SGLaVqvRk4I6NXV7kcIHTNdat0nrxAothaY\ndYqQ+pBxlWys8C7tLhcrPuOg/pkIFBBESuEH8EmsBboBKOUu4h3RX4hk6VCF\nos0coRpEp3TKsGBMk1E6gpS5AIIsezbCulEE3RlR4gENjCNVMeXGBaYr9ZAG\n3a3WgH5CDagPlVomUW6l5fTTHg46AoKKKDTUjuIWp41PiqBAO8A3emNhybwa\nRpyeQCUrok4+uY7YZFiMBuKHaifLPpyImhduBQtgV0uB/euoUGf+PVq/zDdD\niriQvFRMj2q6g4m9Hzc1eXjrHRqqtywYAWFcnlt0vNQbVdrjb37P6B5rx1Hi\nrmdi\r\n=3bUK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNvQpupPwDyCsb7VSVD1YSG82cmobUW+t3H6rIJq0n1QIhAIgkYi4o0x5plf8makrV6RLUk5VMOvkVHd1dEaGVlZm9"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603197984-dbfb2c04.0_1603198107617_0.9636859234286153"},"_hasShrinkwrap":false},"2.23.2-next-1603199962-10e74efa.0":{"name":"@xdn/core","version":"2.23.2-next-1603199962-10e74efa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603199962-10e74efa.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FwsO4hUJQv0X9I+vDqyZYzSppuvASgcS8jg8XOQ5re7BnuJ9a3K+sfVN6KofjrsE+PWLf34k396nGsF9wsZNOw==","shasum":"94cc71a59aabf38624579d4060ca3868d4b39b0e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603199962-10e74efa.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjuRVCRA9TVsSAnZWagAAhTkP/0ZyhyBoJhgd97xNIbEM\nyp5VbFl1XElD33Q9tKuX+hwwFeJQ6z9+GxZf+dbWWUoKFd3TJv700kpSE5Ip\ncZ+N7TRowYXcHTYQbz1kIPd2wT05r3p63AUPeNG5WU2gw42nrY0JVCBQ5szF\nPu3B05KbtQb0v/gUMR/L4jKRYozDZPoOlUtShIrKaFl3HJyprOvFoG+/BZYQ\nW6y+xgeGyPIDn8fq0+OCIMeNHvhOhrnllC4Y8GLOjiX7Bz0cfVzTlb9czDqi\nj62/OxbjcZRrIymerOi3O/TTKl3eDU/caZD77tDmRG61cavuH8Xe3Z7p1JAf\nTnNt8YqDDXxdZOejBMaibYLClOdQni5NVOvKXfQQI5iLTpzM9wg3iALRpyEB\nrVEkNPthiZzn1y5d0AVYwxJB8rzytbEwXrb24n3ViP/t+aFpPpIl3P1FD6YF\nmYl/BIMikxDZ0KFJF9oUoimtsnfi0sJcSVvIFC/Z8tQNgS9abHp6VS9HswEb\nJ18oIZz7zfEPMP87JWUbVHN0kGfVePV+PHOJZrhh12nY5f3bE99L5/frrM/i\nBs4mLCSFkjRSHHY4TlyOnCusNZeyEXdhlLHFU/0f9p1MrzHVhTRWlHIrHsuB\ndciMGhIZ4Hjm0rpbV677yJBjNPin5MxVN301KxhQ6Z5tTG33a4mXC/dsmYWD\nPXzh\r\n=nScx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNgxKiokTMBr7tGh32A38+hvV2TwYLD4KRxNjF2r6TfwIgSNP0YZdZOoqGXAASDitW1YKFgTeqdAYTsZf+BzrkDvQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603199962-10e74efa.0_1603200084961_0.4230992824661979"},"_hasShrinkwrap":false},"2.23.2-next-1603200262-60825cca.0":{"name":"@xdn/core","version":"2.23.2-next-1603200262-60825cca.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603200262-60825cca.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vROUv1JcXlFB2e8+htMcf7pC8onT51vhsBH89YkPRK2MeOTArIib0TR5zkcJAywe+2jnNreP74R7hBx24f7e+Q==","shasum":"f39c88fc35302bb855c2f416f913780cf60418a5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603200262-60825cca.0.tgz","fileCount":167,"unpackedSize":608468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjuWACRA9TVsSAnZWagAAXwsQAKOv1BmddHPCFLW0FoSh\nRuJj/AnuSVkIT9H470wJccB/231+1aaMtxM/yLMqcSUa7hhQH4kwgfm1yUuz\nunLVIgTq6vN2EyaPFLOMBW7X8gZM6WRu5hMMhB8xU8oOCrD35npZ3phEUZpp\n3TxWBjpqvOnGrtr4xgGJU5juYKLaQhgUc9yHItjYRFJFsu2Uj1T8Ookqe8u9\nO0dUEhiRr0LY8N9lbh2vYzs4nEbx3/EJgNAjfNIyYyAIGY3Vb4XRK7RAHLsH\nPT8+TPh8ueU6d7Wn73dRNAKzyQHIp1A6zoSkjlCMF70s3clrnAPwZK5h8iCo\n7WlzsfTUM8NQy0owph0EIGQbJH5NmVz/NjOLDHcVwNXf6tspqJiyDUWl+Uiy\n37Ie+9GQUa0bO4mDUNW4XvRC0EoGzxF5vsvyj4B9vRp8B6iLUl37tZSKiKRk\nuxt0BV4qAqaVvwiTJFhf+xjgayIFIuC0moq58F5FuuF80DawPF/SQHKozS6s\nPfL4Kp678eTh5F9DU3GJbcXyUUqm09itIT1c9zlCdnDZ0FoFpmj53e3pk0Ef\nZqQDCJwVkGAJ1UGBD46hzM9kn4YNeqzAZDak80B1Jj3unzEG2RX64tC9oC9z\n2terB5L+lO3dUJboS3ksO+GBCd+Hc28mfH6236HxQ+EOWh4PfNIpgmMMEqSb\nzDyN\r\n=00Rf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwkx04CqXugbPXRr5XS1UgCkEOEUx+9sPx2uibvjKb8wIgT26Fb8ehYn+NmW+mqcRuGki6N4C59bTlU0lN06RQfcg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603200262-60825cca.0_1603200383816_0.09516599499609368"},"_hasShrinkwrap":false},"2.23.2-next-1603200684-e7488148.0":{"name":"@xdn/core","version":"2.23.2-next-1603200684-e7488148.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603200684-e7488148.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-f11rOu0jahNOq9fV1oGmqyf9F5g3pQfmshpxFOiPK/I9stqO3tp8LXAIx0nIoA5KRhf3bFW0oZhyFb1rZS69sA==","shasum":"aa980b9e6bc807b9fc8b8a0386cd6b440aa886f6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603200684-e7488148.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjuceCRA9TVsSAnZWagAAbqUP/3TA/oiF4mMiKtBA40Lf\nF3vz5rEJDOXJ1dYQlb5b3TcrSmj3UpgOOIr7S5cV3+7Q89NUgc0ecAB8Jj1Y\nfYLZHTJLi2oGfdpDi+MDfqy7cD+5wTzttWbbGwXIo8LitdxCwnTnabwEhZt8\nkKEG5xc9OIFS9Ums/XZuIEaOUS5XIClPaXEuIFsyWKHpehRE32kpHY8qBRO4\nLYfFD4c588lQkJQsMRlclZYUfqk8ZuDcA/Us62Y8pzV5pB0bScUGFdsjH8Tx\nvyguJystSlSNMJmOO1QQYv76GVqF8LljjuNO2q8sVTMqt0nGpIlxNQb7KHYA\nhitVQpjSNRL2DL19BiAmiluOwsaFg0tWslrBCVHA6i48jgq2ilAcioNH2odF\nHZv60a5IP2gX3RIPXr1KtaPdMmFs44/55qN+Cs7jiKDUqGIovEJgCbhcKIYj\nYg2xK55Li+d3Zn9Flw2tzKDpB7RTEiyHO/hwyRnadGKIdMwropAFu+9Pg/r9\nzDaIW2478umF7fxuw5yF+Knr3DN2mySSotYtug0/cuMHoHduR/TfMAY1ia7y\nDLoLusgDpLbG9n4MyJeMSYYtFazYfuEpWO7I4Dgs+sBRIsOx2NUsaaNDJZ/D\nWi9muBjuy829IzAGDIwdxOGfh3b4Euv8oAVzY84RpJph9zTh+o3hbpjIkEdv\niaiY\r\n=qlEs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSp+OwwmZ23CxspWjy76rEpQr4ah+tLVc+aR7z+q8JqAIhANeLWr1N19/4vJ5e3wFjeBUOyjYVr4CdmW4l7hVkKKqs"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603200684-e7488148.0_1603200798477_0.20321657263390414"},"_hasShrinkwrap":false},"2.23.2-next-1603201378-ccb9f60f.0":{"name":"@xdn/core","version":"2.23.2-next-1603201378-ccb9f60f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603201378-ccb9f60f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-QAsTQI2+AdeWWPv4mNbZNotCccIh6cqo1ctE0u1oQlANPjld91tKEL9rDUXVKWk7v7ynu+PJnuorYFnvkEE4Jw==","shasum":"b4b031a23b91caca6c6ef3c2c0da42314d800704","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603201378-ccb9f60f.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjunVCRA9TVsSAnZWagAAM0cQAJJ5caZ3O5A0EWTCXJbX\niVbi+OGViMXEtcg3DQnaHeXz9De/rx52olpTL+mOl7wmpJqXv6b4jEtUyfAx\nFZxd+KWMGLbWK+6chTHHTYPD152W57RY/40Jigl5I75VcCTn+1wwTJeSJWOn\nXcFWtLFRQ9OV+kF24E/7alNgnFjRabwQouLt/sbbBk+zLbwq98y/7XYv3Ve/\n4k3/V2d7KY2U4L8u/Is7SuYnwtJFzXsWO8DPCi26Oehqon1GqhZvDMEtKrYC\nMijiNnN+mrEmNz7YYm8VY7fDqNX+n9gGKH7UZRblZ30OoWg8Isi2FGYIR+k0\nSrbvkaUQOtAYqwLzXPEsWIOgu1a9ghOGmhWgBqxTGYpdZc9oD6jWIBiMHpWZ\nMKQy5fAZPROQRqiIjPbP1Mg9rf1qKZWihEMUJ70Xs5fL8N5Zc1uIsh9HJx9K\npBQXMKbcfHws2XtkX/1KNxjkFhGO+CP9Ulmjgy1KT7xwPXZotOk90mZTTa12\nstOBcxblQ4F4oCII0kT/3t1b4csUcl6zUkhLxvDeTq2iIUE2DGKX++Y0QLJ9\njyYNaCno0l3+ySynauhzh3KBLAvmmmVytCvz4Unc5vof40A5HJS3qnMHJ6Zr\n+wDOyFJPEdt22xRptKph+yHwZv5mh/yf6y04zKyqOJkAKK3gTuw069aHvFkh\nzUdp\r\n=c1Rl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF5PeE286k/KP38LqKGIoXhOgo9w56NxKb0Z9ngFYG/vAiBLHObpSU9IgGtpgSWSfx29YfyKPmGLFDQ+nNISDPf+8A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603201378-ccb9f60f.0_1603201492850_0.5917668372755334"},"_hasShrinkwrap":false},"2.23.2-next-1603201718-321145ca.0":{"name":"@xdn/core","version":"2.23.2-next-1603201718-321145ca.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603201718-321145ca.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6ls1yNkncoJ4UnZXyqAYCzj9ADGvwAY5AuJopBDgZQgxAqt4MT4x3VxLowl1l0lkIvFldy2tdJDpBmRLu4GLlA==","shasum":"776a4a0c2313adab7c87e1a577a4f4917410cfd6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603201718-321145ca.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjuskCRA9TVsSAnZWagAAnRoP/j/d9UmjLupZ76UdEPRY\nH5hYTRrzcDU7Xq8vBtclkKFNsYMjMsbNtEdqBSGQz60OLbhQIlTm9E92fPUn\nONFwyeuLvtcNKxaUauQ63PQBHiyrDcRjfDkeq80iAoDCoIdq3i244NYl+cnR\nqbJH6Z7V88lF87ZKDR+tEBLc2wXngdJXbh3Er36THhxOL0ym0LBzF7BhO41/\nYJgp27CsYhgeTeP8Ml9bioudWgzdm/zqHKFSoTJGszHqsWTnJ4dpONn2ImOC\nXbIYT8/7fEVo+MOfg2DQNmKsags+XsfZzT845pJLSIO1O/oCFhP4q+m3SSK/\nLMaNOvLHcEYgyRmxMijO5DXacRRaRXpaMEyOzJu3PXdwCDSgwUDpUMb/YlOr\nnxNn1xLDiM+1aZb5op7CoqnPxRX/Uno4Owv4NxNFVkkpAk8V+dkHyzc8L+j6\nkTKnjFwYut/7XGnql+6wsHVewgUpyZol0bEpcN+gUNgnfjWddngG/wqVWb3t\no05NfzjP/IztCGSz1ByGI1r0PIClVAP7tPIhzCOfXwgTAWHt5pnWcGJdkYXD\np+csC5yiI7ZfAMZMNvKqf7ZGPuXj7+uWZ/RpA8muS7bwPHzMph7DssG0C0Ja\nI+2t3HVuOE3zuJRf+rlvMQMiOblNiwmoIlQWHgSfHwYktHMLz9ZVJKqZ8DgS\nyXNH\r\n=gW/Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFuRLm7V3oHD72RlTQauDnp+hpI4ZzTKyBZRsgzNi/Q0AiEA1P+NNLmTG4Si6F2rzKwbWDfuIOxXmYYnHbORI4NWwGE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603201718-321145ca.0_1603201827679_0.34205017622905465"},"_hasShrinkwrap":false},"2.23.2-next-1603203972-88a6b0d4.0":{"name":"@xdn/core","version":"2.23.2-next-1603203972-88a6b0d4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603203972-88a6b0d4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zpllK8SGYuUG9GHgvg0TkuoW02H23Tv1I2Fkqrj1E7pYgoJxv0leghzu7TCjCwaMtgpzZv512Vc2K0Kuxty7gQ==","shasum":"d0bc1b38c9bfd9ded0f11345e77d7fbba7a17ed2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603203972-88a6b0d4.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjvP9CRA9TVsSAnZWagAAnaAP/0S2W/sTdILjA5eGyTyZ\nxZHKDMUqJWeJFc69eue75DDrqZuLGNrLi9e/ccUpOvS8b8lqrNdoFRy3aMmY\nhyGffGddfO27rApkCO6JGSZeOQ4Snhg8yJcfc5kjqdaakbJlXdpdKSil5t2F\nzWzfK66iyaw23lvrypY7uu2LB5sKalNj0wWiyKUVafVC9rl2aLfnuqAVMleD\nYP598vSFuUppmZ6NDksZF3NjgYqaP6Uvb2/uKpF19+MZmsR+5gqhkzpcexLK\ncqezT48W4eYTFCOSg8cwY71j832X/ghWVhAzsMVkEHUU48pmR0v4fJBqv5yc\nRaBvk07L7V4A8Hn1iCkcCEudC3VEtf3+AEkr7Q0k2Ce+LxQmBDCxT4T8AwJr\nI1sp88gbjbqMclUei4Rhgs07EJQgI1b47RI8RHts9JVkZQUYrC3mq8pdf5Vg\n/EJjN+iNXxOrcO8xwVsaPI0ESDwno/IZiiURy8ZHRg9065494HisZIl7kg6d\niIRFduK82Nsq640tN2LqQmWurTgUMTJtUiVA3DmzW8gMIBXtvKqrinJMllsn\nd886FriJGjP1aqinLf/GwdcssqRYEozZjbjbbJ4EKtNP00Kp11jXaKS8AhED\nXI4kNhL7kCngLmL+odUe2Zg1CIHb7o+Trv0oO6PF7GTZJfn4E5KSIWFb0UjU\nK81f\r\n=nyue\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxR6+0/66mh5rmCm5054rjt20iIX9yJbHDx4wltFq3jwIgN+hhlB0qKKv/DvbGAXsWR1Vbvcu1Yyu7Cmrsn3f+iho="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603203972-88a6b0d4.0_1603204093096_0.09590142618632358"},"_hasShrinkwrap":false},"2.23.2-next-1603205767-d3fe6488.0":{"name":"@xdn/core","version":"2.23.2-next-1603205767-d3fe6488.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603205767-d3fe6488.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ex8uF8N6u16PZc9GFjRb+Uqd4BZQHEbNia93IyuOAU71C0G/XrX4qj4RhcaWZURKdvqaK18gn4W+jZmEICVb6g==","shasum":"a66e875543c866c985bab447749e234c449d9e90","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603205767-d3fe6488.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjvr8CRA9TVsSAnZWagAAXtMQAIUtv8Q0fZiVUQCqkK5Z\n4GkQclsKIOXYG4tN9976jNAlVdSQ6kIG/+nL9AyDzNW148uYR/YHeXyu8kYH\nLxwmpcSt9+hbaEOKjAQNRMIWApGMZOS+AXujfVUjhdM3yu6jSez2AvDsX6im\nIIfuv0kSYljr9tSfeQ25Ou2oCDAKNVO8fWHIH/d0f7Zv2Z9zlVVFxSpbBBua\nFrCoM1tDLwLNbBY1Gi/7t7E0YzRM+BgJ5EhWcNkhaA1PtrY/KDqMs0FWkPH6\nRd/H7tyKoBXy2ScX0qq31e0FFgQjg3FOYQ2CFWdwTYvNRLwGSryVrI6t+z/9\nwrHH8U3ggwZX6/1iGRJpfTwDVAlYYNAPnrXu7YCu9PUHh+6YB6rj2+KIQZ07\nIbtwikXBiQg6jNrDRfr8ewhs1NbCdGIw8Yz8hIDdjBdLN8ghQv3Z1urSbrbI\nCMVJkJFtqWo6ySkDWr3cK1TGJW8evktxTOCzS5DmyUCGKSHs4YkrlwVGf9Wk\ntPlMK2GO9zQJ1aDY3czvHedeUQJN2GSO/P2HXtIFpFQzJI2jqoFqhwhEJeHZ\nHwmrN9RMXPYppipproplvM8veC93Yvhi0OUTjt52wOH5V4TrlOVM/27GkcpP\nrcPQJcoszdEQnHDzSncAY9v7DOjWZMck60qQjLMbHHrNVAuGcyPnXg5sjz9f\nGEOf\r\n=ysOH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAruqhdkfMt8swbMOccb4kOj3EUHng537ICz+p210HSgIhALdAkWQSyJczOgedpdIuWAAcqsT4boxBPnHmazNM8p0R"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603205767-d3fe6488.0_1603205883857_0.43281769494190514"},"_hasShrinkwrap":false},"2.23.2-next-1603207426-86a1fb65.0":{"name":"@xdn/core","version":"2.23.2-next-1603207426-86a1fb65.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603207426-86a1fb65.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SUGqKPwAwXawGW20g3yxH6VPBTbkRCvy28nd8cMT86y0zNIm+Dp8a7mEEzH/g965qc8NdbhDRBhF4uT0J/UOSQ==","shasum":"49035f077f83a5acb2816a63637fe93d9cc1eb19","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603207426-86a1fb65.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjwFoCRA9TVsSAnZWagAA9X8P/j3sBf3MyUYPpSk4w1U9\nbFbwV7LdFK73WI9OGlvQMZCn64r7dWBT0UzRO1CwPWf9G253QyML8siErvt4\npCxhLSF6spNIHDVhblNVLOH3J0dVi3/sg/NaUMf/w/jhCm+tji7GMyo9R+tf\ny6Td7aPueACID4BX9mAS0j3FyVJwbA3eWaf4dWyUMHOG7itN/vydEaGZHvLo\nny24QU6alD0IumCSwBstNWmwnqwvRrS1WHV7aCaiMWHiCFUJ5vvXNqwIU4tC\nLUhRgbS6ttE+cpekL1MPI0El1BHn8sfFPjjDNY55bOp1ED18ekF7WnsGVcrZ\nEoMLZLd03IRIIfzzePOIQmPPIZ36L47nrvixJMUM1j1VcgZSxKzGld4Jhxcl\nB00L9Ls3A7C6v3LnGo+BLNbrIzanPwFuRiBSSXpXxUcp9XqRNrHM/bwkRejb\nTMCE9LzKCpNRMHVQdAQ/GveOtYtdTqgXE79DHhwkR8XxbVwukB0Lj8OuG+l5\nEanNTUGXcvi3KdMBE/LSozQy13RsVPOUSC6MwFSR37VQP23fQBtAwqKufDy6\nM7WibYKu5xD3dU/fYV1H1A3fiKNzUPp4okRTemFkgiYslO6/TGXVklJFlGM9\ntWBWApE47Cu2qxa1HaABynWys7WQM7tbzwrhEBWXUVMM1grByPag/S5CCjMj\n90V7\r\n=DKnB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBE2tUOF43StWpUdbK88RSyHwS4QwVg40aRBD7RkYJpuAiBpn3W7slUGiTRJ+IcQQxBc1EnSK18TpxCmh7k33Y7+Ng=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603207426-86a1fb65.0_1603207527717_0.13142974839034327"},"_hasShrinkwrap":false},"2.23.2-next-1603214775-cf159f37.0":{"name":"@xdn/core","version":"2.23.2-next-1603214775-cf159f37.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603214775-cf159f37.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KaL5RzmEiBzJvkPH0WuvgW/jKJyZz2tyJYJ2X1bENBSg0mf18dIcJh3fPfCHTHm/XaxIj8XScD6TqtYbCU7mgQ==","shasum":"002a6816568478d77003d54a8939bc2eca65e42d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603214775-cf159f37.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjx4rCRA9TVsSAnZWagAANaMP/R7D/B3RywKyPYZ+XjVY\nLYwiMWlbxr/X6IMCTn9gmvkLwp8U0/4kTByINynAm4s/ii3jqCJAi/oQEyij\ne5RM+GefSrPi6LI9vyYbDWYGCYHeynz7ztRjbw5vVVgoWiD9ohR3xOoVGC2Q\nwieFclOmUYJHJw81BzxeiXmnHoV7Kwms8o6pTdvYkYN6fVkkKmG77Hb6M8LW\nZqb2oY0aPgz2+1vW6iuVBCJc0w0aWU1x4DS4bKfRZwaHQv5cYQNg57ZHLgyj\n//P9W4ftgnaylEwm3F2u1ErLlqHmiuO0+OKJeFrBdNhecXsBQN7s7VTRDvSj\nfB3nM9WzM9xMUI7KFG2XherscmnMYO2lnA3LtrQ+K9bsCKqj9b3W+df2ZCll\nH2Y7vlsqCu3PnoM63iyY2GU59WTCUNvbz6vR0bQ10BVwah30eKaQ/njZgXW5\nuME7iWY78Y4Pww855dVtXU5hNPqvlngIMDbUyV35VXtXpYATMAG9VY1EPM4C\nwSp/WsDAtGUfxM640yfG6Q1tYK05b4GLK7buZC1Ekj9KZQzuTsGZLusaRoc6\nfODhEagOQVIbs/Bl+85oJcv92dsylJq48UyqtvOtvSXsaN0bxTGjvcI7B58V\nlcSxnBJgAbjeuc4FXS8Sjl+4OZRAJcHEuMUIRym8xPYkIYeMm1L58WsyIil8\nZKfX\r\n=ubb8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVQUGHnzPx9r0ZG9mNYZkbQRht/wD4hSz1BdTX8BAp8AiEAtPNcSzg64NumHTvZ+YSm1/+QnvQGi0YGPrpeoPZAEPc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603214775-cf159f37.0_1603214890643_0.5047854238925542"},"_hasShrinkwrap":false},"2.23.2-next-1603217761-3fb27c98.0":{"name":"@xdn/core","version":"2.23.2-next-1603217761-3fb27c98.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603217761-3fb27c98.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mz6C+i5h7wZ/qXmodkgytnLbJw+mWG42kUz0s1eTzOGxasvg16Fo25Cukv8goXoQRwlbpfgr4a6lj0tJtoB2Mg==","shasum":"3dff29f757fb745c5223275fbd1a4d10752b7676","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603217761-3fb27c98.0.tgz","fileCount":163,"unpackedSize":599859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjyniCRA9TVsSAnZWagAAVHgP/0XZsBg6H4YN3AzoIq73\n+xE6gCry8/B6U6B7nOYMz3f8pkGf7T0MD9eYM5HdHHOR/T0fUhc+dj2Qr+Rd\nj7INcw6EZ4lXNIoaRiI8oyGe7TIyjS5g+zmNVhpEWBnaiNmlZGOS5FFE8Hht\nOywvT3XOWVjhcdPMh3b1irqH6semisGmyPkhDC5rNwDedMjuzfiUhVlW4EOK\nwvt8JlqFavk9btCsZz+M/UhQUaoQeawl8b9cHP3EOBwclOGRvMjJOooLkhQF\nAoO3OHMlYzaWbyGMRM12vJXxhDPKDDycRdtQXmudp0McvHw+XT4vLI92cmxT\nG8Y8PZMgGqOQJHgAAfs4w8ikVF6P6Az/GCrTJJUzmV/1Om1RocTZK3Y/lQaI\nLRJahsM/J6NS5mCqT/+foWD+kUJSqdvFiy3PM8a/Pg+fhgq9UBjNHGlTCAh9\nTGmZEzCeULMRhy7fhMyL7mFKFvoWsPLDyJiEGRiXCdvCtgF4V5Kwqd9uvfb2\noxjLoA9BFJ9Jur8FFUaLKdJq8nFyMu0utXf61ON5FONFX+rccztePJXvSbSA\np+fHn3lZIdanAJbckZkulriYQSybVfN57zxXhsq03CO+uOwQdF7nijMNVCme\nYVKTkt2LY9eudlAItC4cWbmC7mejKLXvodbcjkwgvhQQs+C6z5uQulJ/fBek\n1B7c\r\n=vX1b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcXnLbeu64bMeqAmwAjLCt2x5jCfORirSexVvnXdMujgIgYrOi2qHyEQzhKLQtecNEnYYNualaa32aY9GqUxHQeHI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603217761-3fb27c98.0_1603217890063_0.6361931180404732"},"_hasShrinkwrap":false},"2.23.2-next-1603218947-d06b7486.0":{"name":"@xdn/core","version":"2.23.2-next-1603218947-d06b7486.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603218947-d06b7486.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GT/eBIkGR3I3S7IrFAlKXMeEMJEWZ23x5ma6l+f1W4uSolR7zPoEkH1u53MtpcizYufyedlMMz9p6PH9c4vlSA==","shasum":"fda9555352c2cdf695858ae0203daae5dea47925","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603218947-d06b7486.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjy53CRA9TVsSAnZWagAAlV0P/jJIdB5Eoe0aDX62Fmh0\nHb6J+ZIppD+OI90WutykjtQ5nNmXwDQQTH2Gzb7YS3d7kOSTymsfDNt02PSM\n7kRsQ9gWBy/5AF03hWHU7IsHxHOKmDpGINu7gWgsDZkDYcnFCG5y0uynvbWx\nL1qhuv/orRKpiP4VqZp44oeyHtx8hfwE4c+KM4LOWSig6DezGnfXviPmI9Ha\nJToOFQ4XeMay/57vB7GRQKZWGAtyw5qEB7TpNGrXxCrGHX7P+TSggN6rLoK7\nK+wY4I/fzcT/r7jPFeKzIw+D1sk1K2C8TYLfAKDe10riVZxagA424+IoBVZ8\nkDTeGS/6VqVDlcNOVaC53c1nRNHFzdO5CE5rpKGUwDjjbtUaBpw4qih7je97\nFesSQb4HwpFHHdSc2BSeHrTR3PLRmpjjT1X0JYgOh8Y4NzBjwxLTQ6whnb1i\n1oyN4G41OesRVLc49cqgW1mwLGHJe98c4qkVTn73P8YIh3+YzUdkc74F8fEQ\nHbO2uifHPoPXdzK+yb2sYE7pNl9+pxscF9Fj0B9PrnuysUHYmjrzCSZ3XJlb\nA6V45deojtPY61f3kthFYVTlBIXmFvb9pm4vnNn35g/eL0L7Y55zAzZBBTbi\nwrIMvvJxBs6gvxYjmqxZytO6zYM5gyYG2eInDEgZFFhN9CfUqNGZcfpvJrPE\n5oYd\r\n=agKl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEI0f2CSNi+HMvfksthIZs17Ibtrd3XDxQ2k/CdsrPZQIhAMpKeCnqUDjJITFK4kmN34sDDh1l797EuSc5MZBZdQpG"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603218947-d06b7486.0_1603219063158_0.8868697544835624"},"_hasShrinkwrap":false},"2.23.2-next-1603219176-a1d77680.0":{"name":"@xdn/core","version":"2.23.2-next-1603219176-a1d77680.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603219176-a1d77680.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-sEL8fDCwWtdRD4/S02dQloi0npeIbIRPiihX0n57JvxlrX7StB3nAOGcmJHzHUgFoQCCsZOY3Eubb0lzUF0XfA==","shasum":"0dc62bd1e77b12143fccdaf8a7f249d5d87fe612","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603219176-a1d77680.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjy9fCRA9TVsSAnZWagAAm3oP/37O4kBhfvTJDigWGrXL\nXovgQQIqsZdXUmhyMnR434cjiwzg+q53RtRMHFyXbwGyKRcvErX80lEYqkUH\n/78pTX9Ss5OtZxgvAeM3rerk6Pf94gLxdPdlcwpiEcWFXBVf71rMmzXnRWMT\nAOcbRhO6mrUdU1g2SSm2LzTYiaLFHWx5oM6NnAYCpUfIjeh/d2nWwftbqLkZ\nl7hxXy5I/BPnAAHub9o1BvgIxmnV1P8j6MxdYTKeQ/Em6c4Xqm9hFv8R0HL8\nDb/6/EIKpURehgwtHN00XcYIv5wdDX1Ks15uAUG43mSrQDpAH/B8EJzT/Jow\nVmOdWE0wc6NF2a9whWpU6OKt21L2C5aOJ67gdVfUuVMqb/mX1a2tusVTu31w\niO5C95/7MaKGuEkTBW22rvT+bkPPkrU4tW+xU6O0DR0hLjIWGft6hqZ0dwVF\nAWwyKARnRnEOU0YNoY/Q+IZg+/qWi93b8UWqWGuoXfrlJiLPTE+4vs1x5chD\nFpVNsfSzX6U0zjPWJf/WAl6BzyY+f2RGMQJVhs5yoei1/Js+UiBSA8X7hvVQ\nG/S0CJ7V/ecM7OUWFG1IcYlLyFOAaruS1q/JykL6no89AEnu/gnMQ1kfXEcI\nGziyWGTrfFX2BVkZnq/k1jN91R+d9fqs0zZMnnIGwdRBN8CwBVFh5eELv6Bf\nQ8x2\r\n=nd5v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDzOWdbmZ4IVCaikLCUxdrb7ZU0Bv38oIIy5D5j9Q+7eAiBVovueiS+QWdC4h83c8PCyDGyRM/lNrHDnec9XKlWa8g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603219176-a1d77680.0_1603219295115_0.8018016492772289"},"_hasShrinkwrap":false},"2.23.2-next-1603220841-5594b74e.0":{"name":"@xdn/core","version":"2.23.2-next-1603220841-5594b74e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603220841-5594b74e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-79hT57o7I6144htkHR7zUmnMDBal2EH/YFj93IbvI3tVsq0OKnLahRQan0+4km6FQQGlpzKx22V47BOl9A6oiw==","shasum":"c0661fd4f456e9c878462afce221433291947bc1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603220841-5594b74e.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjzXrCRA9TVsSAnZWagAArMIP/1xB5767mwYZE9z01OWH\nCDzSNAFzymavCSKVKBvTYvVucm1PLnDamDlydjod61zMlmaL7/F/5smq0q0y\nFM25jjVMOTADfHAQWC2nPPdM80BGhbRKxcO+w0ZwpK+BB8bGCezSOoKts9mY\nkq7IUO0XL3LinTjKCNKt2q0FTYLcwBgBgwDfFcwcy1/YGLndPakSIvWbRQ1X\nntWge1eOU8NfYAxaRr4sq2varOm5MpPY8KYR18l6ZEnMbtGZZvf9iMOP4LZD\nL/nSEL8pXDoHVbsMNmgo6ToReKe5i+fQ7skT0O629TqxNa0LVjcicHTqTlOl\nw0L/mvs0zNqDT5CqqnSOT974Wwmpy/gurhFil2ryAYOhlv4dNLLcnJFU4VLr\noLI5URCJ8E7rqneVgtp2fow6uSpzOo2aLuUq0qxydD6znNj6ZQJ8X/Yto8lr\n1BrR7QPvusmz8ZcoZBx2R2qjvWFRBPqo+FrTHATDR0/1tXq8y8WdKIuCd11w\nb5umSa+WtrQ2JxX2JBdu8+TTjAXi4UthsIZTpudkf3SyKiO8yf923xdLGeF1\nwH+g3Vstwl8dpt/JmZzwKt5G3QXXpv2p0Jm3JZplXSISTKZCOjXRJ3Vzc78R\njDJDviKM1vZY68UPWGu6InFFPV4bxLWibYGAW3GQBDOWqN9UPGDdLGEsNdSu\ncBFU\r\n=9RVj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsBO1YjEJeZhj9IK2EU32j6rwW5q0jUBI4e6L4MrHz4gIgaPUSatLfLmMNPq7HduXYlkSRqvQH1PRQcHUbljrAMjg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603220841-5594b74e.0_1603220970795_0.05106018599100426"},"_hasShrinkwrap":false},"2.23.2-next-1603222060-64be487c.0":{"name":"@xdn/core","version":"2.23.2-next-1603222060-64be487c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603222060-64be487c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Eq0PxByPDD6JPVqDsZ9BTxRhEU+LRC5pobywBU29sfd/08xgK2qDpIsqzjEaAnhO5sr0QCmsCni33uuVIj4GyA==","shasum":"b71feb4689742f9ad954b41ce05e58767546f3ac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603222060-64be487c.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjzqkCRA9TVsSAnZWagAALS4P/34pQd4+U4c5L2X2SX78\nW+D8NWZbZ4a/QJo45O6WGJD0wU2gyOrHLXH+wK4ht1qKHhsAlxr3ctO7NL7M\nibEueB5Oz+D51DursCWYYPSN09wgrbElZy8+mzDBluVqJRcxrjKuvdziDJKa\njKxCoz8qJXZazOXOm/6aEGRSjRmwEFlzwxU82PqnBQWDY/47Sl9Eh3hGL0ai\nJQ4uBLaWqkogTg6VSb8SkoNAo9aXWxbfeIvrtJOrTHJER5s+fJm4Mv0SJISZ\nIoPjDZpo1qKn3MGNKwPIV6f2m2JXeKus6LSvPOQc1+zrEIypeemAedGmh3q2\nCRYKbWJcX+rlxkmPav6b2p+HR+fqYbTzJKUeLyV0LqwyzGJ93dr6+o3E3NYS\nNIf7eDGIuZfz+RQhWWqUBc8TYLtqZv6l7or16ZE3pio+TjQvYfYRDw5SK/ug\nH1R3d85zbiRGLfVD7NuAv4gl9nlpxGe0rfSU0jU/uupvVH7Cl62zSQ8/nhk+\n4/zSAHn8am7aYm7hbgi1P/fgaPm4DVNFt07zebkvQhK7egjAxVIO1Wx4vpVa\npUakGTujOTQp1gUj8FOHpC1kx9izsIDq/WVUidzj81uVaBSmTJvDTJYuFw4g\nYcRoyr8yr/+jdNIoniSXtFF1YDbrPTbQmjKTnktwtT/wsJuxj7a8N53Acyb0\nqXim\r\n=jQHY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCe0ZRCBb73UxMAyr3aOzv9gaYaqAwK1hhlLFDyl7OrdAIhALgjY528egjoHYXKnIUWKcmPNm4R+K8Xbq2CbwOdqY9q"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603222060-64be487c.0_1603222179698_0.9869967952889904"},"_hasShrinkwrap":false},"2.22.1-next-1603223784-e4a14208.0":{"name":"@xdn/core","version":"2.22.1-next-1603223784-e4a14208.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.22.1-next-1603223784-e4a14208.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-33urLUHblT2M9AUq+V69QwuKiFSZHXJfVQ9hNK4Msst4UgpHX35biU9jRQagoHmxBkJWbALO7BaItIja/xBRVg==","shasum":"64b536b4b325dc435a01e46e8d8ad628542e7a6a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.22.1-next-1603223784-e4a14208.0.tgz","fileCount":167,"unpackedSize":608615,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj0FaCRA9TVsSAnZWagAAyf4P/00Fr549todVRQZgRT9x\nSpJlHcIj4WpX3o7ectWhGd1WEuFtmPzfwYOI0ZBskL7y5gmHQcSsL4vXBcUq\nkQh8+pIgvq6rzM18DS/uMCUKJR2CLsH0CYU/SaCK+zSDpjlNEYiNZrKEJDOM\nxh0B3Qpd0UeC/VMhh/k16pRvOp0UiS43xsQeATCxSYCf3gZfAKcBRnBV8C9T\njRZdzYXlZ6WJJeHyLKdxI6p9F4Wpgk7POsH3YubtXXy29faUh28bGP1evAMu\nQDiFGASKgnSGiFqr0AEUDPXlZ2aIVpcPA+OCi5/gDNpuMVsFHevY7cGav+ky\n/QwKpYs0aQ7NXRRC65ov1fZ+iAKThvgsry3c40RSFw1CVQVvK0LHXRfZEST9\n1VyvXbvoSgmAPYxP9AFsNSYqq/cFUj7Xb7LbP4EHVXtxjod93TvlkC6jv6EB\niPfbfFiRF5cvLlSdFJyKW9BsRetzKyXuBQKcF/YlWeRUjwQ4tEle2QJ5OZ28\nC4IHWHcPJmxc6U87XaunUeC6EtiGJWmt+hl//uyYCWtgUENCcphm1c9+sSbc\nEj5V7QPyZYNmCRvWHUEgTlNeMG1RYZGxTeAnDw7vd3GLhGgztRiRUHK9P5SG\nO1LDNA7R34RVt/Wwmkgc+HzjElmaz3Bzpy+Rc9rHi9+Mjn5dY7FhCHNKW3AL\ne8Ri\r\n=TZ4z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBKT5ID8tYFZpe1/+fCT9rMRA7A7QePgxSFK/FczSmBUAiEAkAVx17OQ1Prb2PIjIZJJrX4powHsd17bEJVUnbIxzoI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.22.1-next-1603223784-e4a14208.0_1603223898127_0.13937744200473468"},"_hasShrinkwrap":false},"2.23.2-next-1603224008-d2b969b4.0":{"name":"@xdn/core","version":"2.23.2-next-1603224008-d2b969b4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603224008-d2b969b4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-BLASYGh31UhS+cxW2siMEfWIOys+8VCVziBkB3dQg5Ps3BIMsaiPzbDm3ZHok1Ruexgtcv2LS9Zw3L0cD9Xvtw==","shasum":"95d3cf2d80f0d648977379de82db57a32a17f6f7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603224008-d2b969b4.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj0JFCRA9TVsSAnZWagAAp5oP/iQg4kJ8eDhcj85hHajh\nNAQeQhwWy3lafTrmVVUlNfBrk7SSgAVw18pElDVpr4njwkjDJQWkXRKFKHFX\nkUzXGC8ZaPtUniEDBaZQpQjroAsOfNPYbbPJ9yjRqUXJKZAc66+8JMni6xOn\nVi4TEIK47tcpDJIkMepME4Q2IR2v/dfvvbQdU9VJlEjScaszB2lC2IkK+ksJ\npiyfjwyipW6Kpao9JeS9hp5rChVutHONx2l6+ExJVXxMZSnvYCst4MpdnUz9\nHK2bOoLVYdGI4nOOi4tBAm5RBDZlOVxwo/xyG0Zjrka7M+Q62vORoPK8EpN8\nNBE0o7dmH3BmKlEVQ8J6fNyp7I1njgvIMARvvHLA9a7dkOcIw4c0NnOXn1xU\nKz0KhFub5klPBc4iYUa9fBhvUjZJBN5k6+3sw5wdlWM/HqhhulpvMP5ADceG\n1kIoFAYLTgBBJa87F/AH3JgXNxp02FfI4mNTk+ojg+FdrZiA759UUmfROM74\n2K09SEyuDVfjKZfj9lb83OPJPevRDFjA+9tWDXLrXgg0vcQDrm3dpfRNagqB\nGL6xQb1jB8RlNdP3u2qnvKSRGRN2Tv6PIWnrjPWcTwbXJqAjw6yc1A7hp/No\nx8mNoyaBZe7eeRNppEbsgV0MgQtGz8j/5nhlhlkMcUZrrD51oW2XZqDt7MCw\nd7VA\r\n=kI78\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7eTg8Mw6X61Q6qP4O2WJqT+7WVtuIQaWMh2kPWCFa+gIgMqRulu9fPYt43fPJcec+OZ0ZG3FPXDOiGz2DxZDBA7I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603224008-d2b969b4.0_1603224132421_0.5838107640387691"},"_hasShrinkwrap":false},"2.23.2-next-1603225734-4925af00.0":{"name":"@xdn/core","version":"2.23.2-next-1603225734-4925af00.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603225734-4925af00.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LG0Q0A1+NHx61YAHHfBW60O63mEXza/OA2kALil1WvtiHSzL0Ec5rR3clCON/gNgb1ab3RFkAZTmuW0DDJUpUw==","shasum":"cf25fd6454e7d7ac980258ba1998e12594ebd79b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603225734-4925af00.0.tgz","fileCount":167,"unpackedSize":608694,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj0j3CRA9TVsSAnZWagAAJbQP/2aYRLR5qsFdzpJBkotP\nYTWvPnOZVDAyM9fGC0DCnNgFG/trdGa4Hksjj5gIRv1mO2vSrtJEY6UrNAxx\n2R+NepDpE6flmj4sCrzOXhU9x1xh+7YcIalQv5MNzHO/Ixn5x5cdR0dzscK4\nTR8jtG7INvPpTc8ghhY18oKeOy5yJPHpKZ06G4u3ri/QB37bgPZoisptpPaf\nAhsEfqofaNMy2YmxaK3yFO2ki//yWj2WQs1vf5wqKWoa9wf7YZ8nDEGXvtom\nnkxyZenahd6AqHLQMJCBKZ71fOzf4gsYCMi8e6Dq4WHd7hwIvdpEjouuPn2R\nwQEOF3OMn3453MA/ERH17e0X2RMDDi9rf09PfVeblfpQ2yRAvzLjhobPL+Y3\n4eujY3+zf71Oak4UKQta96+uP/bssRVATmXKTvHrxBbs58brRcRKfkjnUVR4\nB3NwiGwUM6VYZEEz9u53U+HPTFy7EKt/s5pYYVVFcBFhJQ6qhsnvAOWEN0V/\n0oy0arsPSND/kEo0rjOl4kePwTQGwBEsaqVWQdDjCRpMYSsosf1Aj/zhPk6p\nGXoPg2RBTN4hCvpajcbmGrOCFycE/0JAwy8XdIByW0Hk9K2c0coqXuRrJrjF\nmNyDicn0KXj4VXshfQ1nxi8UqsoQXotj7atVLRsncJfuRAasOkz4mQBi1XeV\nyXpw\r\n=n9OQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFM22J5G4SupIQF4CfY+7l1wuWQdUDUQckX7ef0bngMfAiAr5tzUwpox4jVp0MIAlkjEIAjee5MgfUEjwl2Zup/wRg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603225734-4925af00.0_1603225847333_0.4743496479800511"},"_hasShrinkwrap":false},"2.23.2-next-1603225869-3a8b90e9.0":{"name":"@xdn/core","version":"2.23.2-next-1603225869-3a8b90e9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603225869-3a8b90e9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ci3r5OeULS1uDZhTnqV5dnz/lTEmTCx0A8Z4uoFUa1bgFDg8o3tU5p28Af+osV35NhFrrlscKZlCCrFeK9uiKQ==","shasum":"c920a0dff697552b7f3772ef933f0be47e88c839","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603225869-3a8b90e9.0.tgz","fileCount":167,"unpackedSize":608693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj0lzCRA9TVsSAnZWagAAEnAP/jcdXC+Y0kgFZauyYMNw\n76zDKdiaxianOXlM8GzmH46dBZaZ2txHCkXkvsPHKIQiOEHPrznLRKhpBEIM\nnkx0fI6IfEz9s+IyaY1z51Vl78xMB0RlsBnDhnR2FH47aiRSX0G+IK/tDTq4\np2Z0c+7girWHmtMz/kqDK2hPI8D4Ek4nlJ+e1+WdE4SKzk+3jqNqOOvMko3O\nVzIgjevPmlEKVum1F/TurKQkA/6y/7U/COPkx1TZB9VLZbL/IKhjhP2NU726\nkA+2I/BMWol42JOGcSwasMH9ASGYfpYkC9qqQx/P92LOKVhuRRqMD9n7dNfW\n3bbt/Ceung1k2xmB3PehhX8LUp+MZ4DBbd/fc0ysHYHPUTQItUQxMEynSLHf\nmNxZIEKgFs7nWS9ZtKb8D5R0Em/mnr/GVg7ahv161tkjZ3AuErAq9WGkJLCh\nlCI6IJ/NVPGunVlkBSWFDjZI0oUFVMIiJCOYrnizku0blCpp2ZFSG2xUmtYs\n/IiayWAVdHbKOKdq0gN57vF7FiQHvQRp+9ascgS9JSDCluJk48Xgs0n6ILzL\nbk5aXpmdP5ehb4xMlG3pAFzxl3A0uGMHDtNudAELNUjaUsxf6mMpKBzGeKZ+\nUjoqUWMrtRzO3RX5zHxRtGYTRfA5vB1i4i6dIqw98oyvDXb1f4yjpfymlvH0\nv5xC\r\n=JrYY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHp9OZyFeLXcllR7OabJ4EhTh2545vm/Eaz5IFMky6+QIgeqcpfnjiFI4COQcirFPKW/n1iOiSaYhO6PgCIir9fPE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603225869-3a8b90e9.0_1603225971318_0.7669496981227215"},"_hasShrinkwrap":false},"2.23.2-next-1603226704-3a8b90e9.0":{"name":"@xdn/core","version":"2.23.2-next-1603226704-3a8b90e9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603226704-3a8b90e9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-y/ZDhCTqluVjnXwLOhaOC8Vqw+KVSJ39c5NQHLRSFMxbLQemRUUmTqZOWk5ZIvdMC7KhfXQkaIfU4ypiDx6vbQ==","shasum":"a28704277271538ff9bcb590310219c6d0496e8e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603226704-3a8b90e9.0.tgz","fileCount":167,"unpackedSize":608693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj0y/CRA9TVsSAnZWagAApkUP/250wcxjxBbAzvCscaFC\nyiOYAMJjTpxgsYh1rE2TJt+lQLzsknb+Yn49VmxZHzFpGh3aSyvDRY+lZLPe\ntMxdSJktednpvMZ/7sEd03qiRMdFC0OXkW4ghgOE3aRqK9Xpm7b0iLHRdIBW\n75Uz/Qia/qqqTjhEkIHXlYU99ieMheqOCO9Gp7iJlHviWT7LXh3AT0+Opnct\nHHH+33fgfr+OOxuEMcTluIT+AQBC7q6d+wW0291N2cSUtIaNdbJ4OtQMMgHg\nZ8eh/uBxFGm29eSgVxzzl5Ql+bQgwWm6UybYIalJiZhoEZ7S1ZsqsrK3Pd9h\ndj2vUrozdyBQlvBPowXO4bQVNu0LD5PWHQkJ/1+n6sTKAOV4qkYXOm1n/RLW\nmCnU8G488Fes70RXYrT//wVsYAYqslYxsD76ogzT1ym1xdUYCTi0zkcEu5tR\ntYRUvWw1ZvgRCtMddeqCDS3dhsnse5fQcak3EQ7Kbf3iQp693apngk0ljzWY\nbE2MGHqib1YeQvnjvdscNEbrUHKvX9re4aGasGElYbAvLiQ8/3mYIkGZudZW\ngVY+ugQfurcR/rsXayogp/lvnhlgR47/BUTgQcjIf++F+hjddYE3JISbVmiQ\nwUFZCW5AZ1KPh1v75x00lX+UvbmIi74HXdfZR1crrAcYEeM3Kdpn0AE2jOxr\nOBpe\r\n=r8p2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAYX87NuTTN/jZ1mkgNvy5mcQ47qIhcPqd9OryhG6qSgIhALLW6/KU5/kYuQhP0nA7hElB5pp238bMl4M4fj0RQisR"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603226704-3a8b90e9.0_1603226815255_0.8216409229549195"},"_hasShrinkwrap":false},"2.23.2-next-1603226945-d13bd839.0":{"name":"@xdn/core","version":"2.23.2-next-1603226945-d13bd839.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603226945-d13bd839.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-H8yFJQYEGjIaG6LxNa9qhXiHyrhwCcYdC6FNODFbZeUp/D6g1Ksy7G2NhGrqE/9Ode1mvZtAc4X8Oby5A7ailQ==","shasum":"ef6af636772c80964098e59c40a67fbac1d857c7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603226945-d13bd839.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj02/CRA9TVsSAnZWagAAKY8QAImXk5683Q6vXHGbtUlB\nIuazek9MBjWoq8RhLsAL/gm4KTQqWeqRSfBCLOMC11yefK6v4un0Ngo6on1U\n4vS1GfLrrjLCmJtEhdontdqIKMNwGuvNsuRTFSVxf+O1k0qa7tkKeblYBba1\nYFdxXbsTbjSJytAfCYSIqlv+f9Cp+NNg5Ysie+DJwl3+UVvGKpmsKNASKBxU\nIjxTfGZ2wAfAfSf3fDd+EQPYrDWYxw6kEtbw4x14LuYFF+Rnq5Thw6HAT3vn\nU31Yvb3QlG8r7iLhL1abf3SivL9czWwv8EtUSl7N1Zhb1MCzHqgRnYCs9xdu\nVcAhJXbGLUFsUoMMagSaICVkL+PZ6vDVTRYsBfBj9cvSn981QnOu/lMkMQzn\nmFgPhJjDkUDI18l6WgQKr4o7bnF+vjKWzbNVHOv+Z4nE0RgQfSgIJ/zqj+8K\nfLXdb4gAhwnmVBcV8/m89ICMCv/9Fl2SX2b73NVotMueXv+hNCddzghRdDdX\nTHxlqA44jaVPIKC/FcxqLw3+wHkIyokZdzphycJjQXi6/eRdLReMdxWr1bxn\nplFM7Xv/SxzuUh6qgbYjd3GmB/ek8UZ9V5W7VzwsavUJBdmOtitYGKqexQDe\n51O8LkX2GQwLR0rTELgYFP9To7EIIBocYbaf45FCw2e9BI+qXaQtnS41aSUj\nyrIn\r\n=1K8p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdW5dfmDZd7/8k7EvS7wy02YH5Bpm8DCH6mw41gml0OAIgGw1bgf3jr4mU5YntwU7oZVrbtpEB5MPrQr2F2SDborU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603226945-d13bd839.0_1603227071490_0.394092586141527"},"_hasShrinkwrap":false},"2.23.2-next-1603229104-d13bd839.0":{"name":"@xdn/core","version":"2.23.2-next-1603229104-d13bd839.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603229104-d13bd839.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nNSYAGPysyrpQHj1RQkGjeURUgCXPRkMK8ZHQceeAyWL0D8S917Dy0WEr9xrd3uCoKP3DRp6c5VZecXyus9Uag==","shasum":"110a19aab1cd8072a10a85832048cbee49cba731","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603229104-d13bd839.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj1YiCRA9TVsSAnZWagAA6IUP/1w/wOZ4VQ+8WtyUGKLT\ngzENCA8bDXYLCUAT4mCMpIxqcyOMjMWQjGsL/YLN7Nk9EPVNQIYvRRBnM6RF\n+mC7vf3CnrbwNz8eksW2cI3aUpFXAVEnHOBvvvbc7qjj8r3PgGEIb9XvPj4I\n1Bup1Tg1uKqd5fve/B9rj/az3F9O3N11aEcnugZxPzJgQVgeqhXR5xHTuUpV\nf31FHAcbn2YQT//u4XCxTKGTQMuTHtscLDjJBA7xo16OQN4l3af4AD8vr2nh\nq7+nE8i1zEzMkGMUUgXeU/SCKZ2lz4wLZwCS7/MNQjBY+0UvGszmFCYKVFlO\nywXRIpUjcM0pac4D7DTY60NXAfCH1o4Vfeye82/9TQEwm0HErlgUKaHuE3Jl\nyUIHyaKTBPjUaqCGQ861h7rQzicxpL8eGiBb/HTeIAqApSVx0QZIzHn1QSQg\nF5//eEMsktoxQiSVsN29eMx+w1K/E6OWGYPFfKCEdC0jf/x+7x6IJjXTMSql\nY4ZS3MeFcwO+DdbK/kzqjBR21zfc2B6+LIk6jzXyZBJur8aFJHxKexw1Dol8\noPMXWhP90PptmTWORp2Kkq+fE6bqiwCpTksazlUq93sHSNmIHpEwjb1ZjqqT\nX1PeTTg+RSaYjT7/D0JyWg1IbvIvDM30+24v9ugZitiL2lVxgAuQ6guZ7+On\nB4aT\r\n=SDdL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0JuW7pMfX9wPUBPXS8yAcKcyJ+Apx7iltD5q0c1oGNAIgM+mfCxF5bzXfddztAMk33PGSHH5+dHDCkybzilBAZQs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603229104-d13bd839.0_1603229217705_0.15244224016751007"},"_hasShrinkwrap":false},"2.23.2-next-1603232708-0e1c1f51.0":{"name":"@xdn/core","version":"2.23.2-next-1603232708-0e1c1f51.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603232708-0e1c1f51.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-y/V7Siijlru8Za7Z20LRqgvGfYQMW9st1WSZDwJk7yDdzAOBMFv7eiN7rMzmCD9lSYXUJ6kU6PDngdXYR9dbHQ==","shasum":"bde1203d5943c5982beee16cdb68ce317caca324","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603232708-0e1c1f51.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj2RDCRA9TVsSAnZWagAA1Q8QAIInstD2rvzTl3xN6ATj\noZXTUR+ol+Zxrhpfy1Bq+pSqOXlEBXWpMacYE57Kk01YMn1DwKvk7Bapxh1V\nE7GyE/3xmVDIy9N1mt+1Uvr60sDr0mvauAZIHGoICBX1jO1mkFVDYTVjMGw9\neBQjBizI8ZOXatuezrzuFcQdPwF247eYW48YCvhNcZFyEa9ynnj7fXFr15TB\n7I9nedkNz/SULF8Q32MT85XHL0fH2z3HNt27cbFWWDiwi3y26NArPBWLNFQz\npHp3TY17Xgyu5c7UAPiK+WQDDKJy9R5cF3x7NLQ0AzrTQt/+GAD+vcwtsBR5\np9GkbsgPcGcR6pGMgSegU/A/D66ufw9CjQR2TJldCqNP6TlKFUEyA3CMA0dy\nZCpdz9fe2w51X7fUnIKr5vr6ed+hQVNBrmS3P4RFSjrbLrgyXc4Mf2xLpZqi\nnJ0bS0jZd2DvLW+0KfCp3B7Yni8jYRPWLv8OBmukfWHLVOafSiaMyQNBjJq0\nziEa7Iglpg3ndV94caUSTX79NqZURSxuCxBzpq75wPZi96+KrWNnSORnC/vl\npTtNr/5Q5L3sz4RPzrfJKxe70yCxo7tqghx0AIlhcLE7hMDngfmtz2v8Y7Td\nbzSwCSqMO3N91mdrSpTJpcHicnuvvhGAHcckzUkdgB28b9UPvOi0zHjlsQ4I\nR4OC\r\n=caC1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGhO5AXrRWCWjgA+gvUwZEghxGTFZmWqAi0AC03I24OfAiBabshUHXyYggca7QNm8t8eU4YDoTsZVhVzERfOi7bAfg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603232708-0e1c1f51.0_1603232834556_0.6279580491416747"},"_hasShrinkwrap":false},"2.23.2-next-1603233694-e1b05968.0":{"name":"@xdn/core","version":"2.23.2-next-1603233694-e1b05968.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603233694-e1b05968.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-dRqn8rpV1PhCKM5SfXqJR8ZB7QWWrlUHJWolIAjBjbJPkWe7Y75YgijHn3RS/2CDHUlO8veHHP57U0Pvb7mNsQ==","shasum":"522316a85a6eff057a6fcb9e479aeafd8de390f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603233694-e1b05968.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj2gLCRA9TVsSAnZWagAAHywP/i2icnLgqcLvovAMeDVz\nN4CzMKNEehy3v5/pA5rpI9pIRNbRpKz8OxIB66Bj3aerm0DL3sHwSTJRBmB8\nHQBjke+6qh+TWFfJSnrdWOl26Cz7F0MF7712UqIAeCOrvf0D12C/nIZMRwDk\nUzmZ6AUx82/3TpH58hUyo5Fx7kO6sZPql69D564n+WTAS/VDkjGqxmS4Gl2g\n1GwHss3EN2S25TMpkDnvS1O8j8hzGl/IeTGqBBd2z7fNeY8jNISnngDZOYsG\ne7imEYwj+4JCwyttm2DEgqZsgy8bAtil6gTO20epvMwfOaD7h7RYvqgcf2op\nvxPRDKHVOIZBJA9GA588aX3sdfTxsmAotIfQVkGsG3ehLR+nPmqHhh9CZ4ca\nw+si3rQvH0SjTFkE0ZPYUGiNziQh7Iks7krZVVxAY0Xog7p1YK9dFwbZF1I1\njbAa0/FaA6BrxRnP7u2nyWuaIAJ2Xb09/Y2mSon+1X/RrJtP6iuxyAFzM9ZF\nfYni5jgaUT7ayLvLrUIDAM8ZiQOH2TrwHDVh+FDxxNBePpYaMepGMiK4xybz\nPjw40LMNP866v341Uxa2f7Drdl2pEqzPE2JgsZKdCNXXlrv8JBp5xHhf1Rrk\nbZ9CaUT4aHIZqnR/rHBgKZXW8+hjXVbdp/kBxp6j02sQ1EHxyYN3gmW2haLc\nuzxC\r\n=XcJ+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjhQUkxo4pIoAfm3pT+aPWkTvpWjv4Q1SZ0c796vq/OAIgVVghUbdv19/8pWozgOQFfQbwzvYstitaMx5Olq1PpvE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603233694-e1b05968.0_1603233802869_0.25831176818458346"},"_hasShrinkwrap":false},"2.23.2-next-1603234621-976d2c5e.0":{"name":"@xdn/core","version":"2.23.2-next-1603234621-976d2c5e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603234621-976d2c5e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zc0kXd8fs5qHAt/ullFlLd/j+s/Qc+RnxmK0ECOXZrLdlJcHXjLMgz5QOKu/NKUBa9YGjuZoOGepS0ILEmyVVQ==","shasum":"222200cdaace776527c9bfbb36d67be1bc1bb71d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603234621-976d2c5e.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj2uqCRA9TVsSAnZWagAA+0IP/103G5qF94w5j76SAUup\npOYp90vKlaS0xFoaQZuEXLsoxEy5Ms6aS8ITmgKaFxH58g7GWkt3vqRe8oBD\nS76e9Jm5+xQ1MwtXEEqipaSy6xxqLwG//krhkgrd8gV+8eiA8671qjO5yYFg\n3MnyCVhhfEQko/p+76xlWXerkYKCkDZQ47fMLosh1AL6KGBymoH5dQKf2gAB\nPQ/3gkStpBEqYkpThsFFtsoD5O08O83le71c309kO7KRCDcMDwma1ZgbQD4C\nxwI5OMEF6t6Yj+fpi+9JXqskl+VzNapiGL0T3fia/U8JWmp8SaWHHSi4rz7f\ni394ORnROtXrW9aM++d7hoFRR2uCHSmnjeR2Va9LvLnMrreeOybGvZw90vxv\n7YxPj8J24A9LYwD+es77VvzbtVb30ud33j79wgddNu+kb2CDHz7r/HTkeyzK\ntLwC06VujuwcYfRZgIjvMvyEq32qTfC4ZJnmYk4aQ0kacSqfuPRfDEvoK7bP\nnxFtb3rHz+E4Pxr7xyBrZEqtzr1nh+jkk0+3T9U71Br0NQ6X8p4Rjvtty6th\nsAzzTkwUqM+KyOZtjcGCM8R9VZ9vy/W1ic+VjjTwtNCqBo6QGj+yfoLG6xLN\nIs4IjcdSr8vuCEAV+SMdBJtUJECPE4FTQQAWkKj0s0TE9nq4hrBuWEQeF3kI\nrv/T\r\n=4bAs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGjdflaE/u0TP4fwYc0JgA8MR7nddy7G6T2mIo+MVDkgAiAYF4YDtgSrbsuerWNBGgX8UVmdYe1MmahtF/cfmlu/Yg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603234621-976d2c5e.0_1603234729779_0.6881496722895819"},"_hasShrinkwrap":false},"2.23.2-next-1603268092-c3d62bfb.0":{"name":"@xdn/core","version":"2.23.2-next-1603268092-c3d62bfb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603268092-c3d62bfb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SICyWO/TeJq6yQrhBxNjr8MLdoOh8T69jtaDCRwYqHG+74Ey4IxP4sHAmTGorrLA/rNedcPrdfxxoR3UY/JeAQ==","shasum":"9d67e8a485a6ac18bf50f271376b92f76b9b160f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603268092-c3d62bfb.0.tgz","fileCount":163,"unpackedSize":600006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj+6BCRA9TVsSAnZWagAAnKYP/R5QtWzELuPEcvpbi9Z+\nZa4su4c2lT5KXVx4c8tfDPSuwivk4W9ZOhT6GkE2bK70cezlqiurHmqgw+FJ\nw5sSslTSmdx3vN6ZyRgqw5hrz2Wo1yvICpzOdgsxtTcshK7I+t0LtU1u8KQQ\nNgn4uJX+Fue7daqsuk7zzN67gpoAwtYOUVfoIWX9gCagTrzs+pqTTB9ENuRV\nSp9SSwwxW3BSP6AE9cggG8DbAofd9v3kHLPFKTcaqwJdi8YF5Fqw1VOa15Bm\nuAm8Tqyjd828tNPz+CYjBuFcTBuia95IRSmXJ9lXviEEbdiZn1gfPTSe95ff\njhxkIdgsNin6DW+jQ6Dme8xtoXYFvWKQM/g659YaIjuuyoKbRBhFpBLfk9ov\n+CrI16QjBO4WIl0GvnleKgkIs7BSTQ1+3vJVsr0dZOI1cy8N6tNrsvRGzpPg\nLELhFIgoC4EwhYcSjFXLAIZsZ0gBNmLqQOnif7bMu/M0cm41HdbLGrxR4ofe\nTnXGSJe2/m46pTaNAIszTvkSgj4jFP0b8/dcW96IwzUwKkoYTwTWEZ91vWjm\nsAYl3RVCpigb32+U2SlwpgMo0xuAyvTeVjVUV5kYcDGaTX22FsVhoLRrWB8O\nnAyfCM2XBfByo7Te443tEtIRPh++N0VfE5fwHYKS6RXqD1Z+I4fvIoR5g1yS\nrtno\r\n=Wv52\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxDke9bj+AZfp2iSx3fCggBSnsbV5tVSLf6YF+ABZGqAIhAPDsP8Mf3ntyJmrL9IzX/89akflSWSNMmzEmnT6CNbTb"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603268092-c3d62bfb.0_1603268224611_0.5789233373961453"},"_hasShrinkwrap":false},"2.23.2-next-1603268669-f01638a1.0":{"name":"@xdn/core","version":"2.23.2-next-1603268669-f01638a1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603268669-f01638a1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-l99Jvv2ctAzXszJzftyWv8uaqTUpfFJC4ovjiLYzldjQ2YONN704I1e8B7veV3THxc18xqmOjJelzip7PLnftQ==","shasum":"0a033e1c4e88f4a31716bc3b9e2f9fd9929f98f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603268669-f01638a1.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj/CyCRA9TVsSAnZWagAAyZwQAIzkti1jKLi9HVX0WWNd\nT2HzN5t+52492LUwt6ROaIjwHsG4n34ajhNx+7SihjiDNG1v+eLmSV3jPXBq\n9EoWAPl+UfysHgWyCoYPOSRydJLiEgAwALCzQTvwL9Am30clfesKrtYZI/mR\nRg+7jUEUf0n4nOav6d19eKmzThnUlWlysUpwBFXhFCT+qTz8BDl3Qttmff9v\noZMPi+DjVYoHaaFrZdQJTUTJC7Hfmtx9K9jBDyKyHy3hCOJzEMuDtavH3j+6\nbPyxkJFg+oVsk4Rpfewd7W2hOn75QgT/8W0gEDcU60na6Z8a/Q4iNX7ittay\nEjNCk6qvsjQsVZ7n9GWi0YKnvwT4WtvGr/e53JWrnnyijRsK6SRim23w9zbe\nlPEw9T5J5VTzq5qts2UCIPZA22xJ3txVWYVrmvgk1t0sdJCBqsnYuQ+LmC8u\n5sTcoA6uODt226RCF24kRH23HCBSMUOq94AKBwJhC52G6jVuouvxR7OcOXL2\nE+JL2LCGy6MeHNStRBGddlFeoYEEZ1MVVQFn9uGalujSJG92D56nVN7EcYop\nEmDTOEmmP+3+aRJA9SlgLl458OGtwsAUONhNTXPwIj346tdm4bQ/XR3tU62U\nm9YzbO5CNOIgUtTrmxzUuz6wLIATOflMbCDGMDSUFHxOseVr9Phs33tRHhGz\nv2A1\r\n=7Lb8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUN7npcUWl+ghzKdxffkNIk7Xxtgx+fJh+8SUGizBcaAIgbHcMQFXnn9mDo1qqI6KBWhOV2VBV1DeN0B2OELm/Wtk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603268669-f01638a1.0_1603268786210_0.6314251104458046"},"_hasShrinkwrap":false},"2.23.2-next-1603268746-36cbafcb.0":{"name":"@xdn/core","version":"2.23.2-next-1603268746-36cbafcb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603268746-36cbafcb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-eT736eXpGk/DpifKSHfYYVwrNgyJmRY4Lr+wA5kwcjZI+pX0AoCY8UStXNDV8clxaNZxFy7UIw9H05R01Tr0yg==","shasum":"e39c6cbedaf318dd1883f22f6240b9a7854bdc15","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603268746-36cbafcb.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj/D/CRA9TVsSAnZWagAAIOcP/i/alvF5SRyLGEpDJSXc\nPo0Qk4pa7iA7LEWzudyctgIiH4Y4Q6faHmzv07LpC0X5IETJbC7iDUYNzcgg\nz9ASjLY4Au51GLy5t/cQgZX9hdIFzhg4U91pTY/CP9FcE7XQX/k8njIQYom4\nv0cuwWLUS8HIt9AlFLBzcwGQWXeN0ViG9AMrttk9NEQnUXR3lcU0exdxS0Ez\nxvjxVK6wb5nQOKcb1slWI9BzkX8ALZrpeuV7g0N+/XvtL5+mVxtgTySwKCQ4\n3t+TzM+L9BkfCzRIXmKYgHJmMsrXPCH6OiWdDhM9JWp/DvVoitt2Fkq1trHF\nkV2QdPbD9SlOBqJ1ZxKq1U3/8h5Zbsb83X/5ty3R5RgStR8XU9SnoszC3Lsz\nn9p2qxRVU2/FDvn/j9L9UWK/JpAiPprK+7jNmtjur0Xr0UM4kjzqe6IMczwb\nCqyaeXce+Wjzxa07rF6VlSbPr5nGhFFLeQja72TlTZNcSxK2oSUIuJ4vZiea\n1XV3Rbh6DO9wfJWRMOUIZFGHdJSEZyA8ESLGX9VVtnwF46yfRYECOArrlhkr\nZuMKmTUv6pBJGUj22WliTW/da9v3WK/tNEudHVujsX3pFMFVnnhm3eliFjAn\nz7slFAnnguysOFoNEKNiQXRdS+LWqKeBFL4VwRYWeI+a6nyeJarPdIcc00ly\n70sN\r\n=l6jM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHmOhp9UGz9kTbpphpZyJ5k+ZFCFj9WbRy6oNaa0SU33AiEAkYy2II3pgiodei0ulnAuo3Mn8aHH9A8hwGoMtjqdkM8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603268746-36cbafcb.0_1603268863454_0.7157752274357392"},"_hasShrinkwrap":false},"2.23.2-next-1603270116-a12e86f4.0":{"name":"@xdn/core","version":"2.23.2-next-1603270116-a12e86f4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603270116-a12e86f4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2bYSB9GAggMl3igfehpSYfA6a7hOa7U+nW+WgwU0mnAKGdntUUzQidPjUpouXzW6pO7aq9BrIuU3iUE3NW3iag==","shasum":"5bb9905290eeb0ed71dcbcf77e1115bbf196cef1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603270116-a12e86f4.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj/ZKCRA9TVsSAnZWagAAhOwP/2jN9J+jeUYK7YRpm0vD\nxOU/ekDQIXPY3Yc6aUbalUssaiuuKD62RvaEhB0p2RVT9SFXBWQVmLbK3aSl\n7zPW186SFh0mDbW3V4Lyu0e2n7tDZInc/9E6SUlnVRYkY5kdJXPmJRR+iyA1\nzGZuy9pOw7lQZrpbQ7etGz2pLxzaYqQIeU1D/IAvPOnztnCGl5ey6/4D3ijN\nDx/TIlK1zC+sHfH3nhVgzuBL7ddpdRjy/oHzEooRM+TtKMOALiJxQ5rTyMS+\nRTfQnIqqxBhdNPzkL+azLTRknrhguNyalvVEdq/g0N/vi0Z0VaN0uYjulnaV\n+daDAJQCbGtSLcFFHX8cMyxmKRVOSSAV0rUXka1pTxCmiLjoW5qG++gI3/PL\nHn8yNJQ+QQh1RnJWHcd6XEbHI2NTwgk+1ga3mjw9o32ePzUNa+mleVf8yQIA\noSzaPBjXgxCs62PrcVpr0hQYxa1iTzJ3JZm0bWKKmmx3ILAkGIaCDa6+9xUG\nOO7iE4Z9uvSlSDnSqLDYN8zs+F2c0rdpildylPU2EfHXoXGvohV82MoJ0wP4\nTMotm63I/0yoPbWeUgDnVtgAm0KPmtqEAYhBn1bnPJ5kOi5qNXa/vmkP1jhW\ndjzdPA98CN4BDflmsX8ezaH3pl6f8yI+iiPPrINYjuwHaH+RjFErQrD2qMPq\nrq2P\r\n=eZ6s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQDYXcd4ybXzTtRL62jqkT4aiFfH4WyYWqTuS3CRbh+IVgIfTInHZ8YDjzmxzcVocLXqwN+iBNWZAOYPB4JD+Y8IjA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603270116-a12e86f4.0_1603270218268_0.8592133811171827"},"_hasShrinkwrap":false},"2.23.2-next-1603270659-83667af4.0":{"name":"@xdn/core","version":"2.23.2-next-1603270659-83667af4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603270659-83667af4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-otzgcXRY88MVJPoHKvnC7+fvKhJWbalipD/ztlJgcaN0TCrwIOo2fqlGTQf5fzTbRYmNU11aC6Kl2FLlWyX7HQ==","shasum":"0a6b954e1037d7b9e2a165fc37689597bc88d74a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603270659-83667af4.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj/hoCRA9TVsSAnZWagAAqO0P/iyt2sn1Qj7NgGwR9Fkp\nYWcmTvU4zFtaHasioWUP6dndSsxQ62zTfoP3MvT7oH77ltGNxEHwPf5a09u5\nrBJKijATNaKuedSqb4L18GjIGfRYFQ98VX0zguYP4r0kp1lFm1gZQ5vj7Xjq\n9Y1SYWruxplqIbtimnB5TfTMOdAgEp3oge1wtuax3xQe60IH1XSegqriOrL6\n3dKtC2vgcFvssWyeWuBRWFKdUxoyLYZWDm87lIAVrdAsaeBal8qaea1wTCMc\nsDp/nVrUTwPaAiWXGibttcssn0+6TXmKtHPwyMJh+0ImfHZvZu5hLUHUgNV3\nnT2WUEcxVcnSS3xB6k1jyEuKmZ+nttR3wJAn0RevsITLATE9gYBOkfTiao8C\n/FjcAUEl4QPGnr4ORwxkeqrbsKp0xjHZOQzqx4nrWEQdJtcWtnwTdUH87/fd\nKpFpj+UtKPU622HsjlhTXhKk6B+6AAMn5pjtVsk+OIWGpp1OZn9Qji669Mpy\noL/0/lCQlsUwC7MTEpQd8GnM7sbfrcvj8Ri6Dvbbvb+XQujf225wBGMXu3gN\nAB7Qs8yTLRQBXtF7QaNzalCJO7TcKy31UncUkHpx9CX1uKcy90925YYZ5/bh\nyThcD+3pqP1UXvQUqD+/u8YITgJ9tMKRgX8/N3hj8ZUbMJGlHM/LhQLMYNFt\n5vR4\r\n=yoFR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGnf2rEBMgMoOWlihcbjd/Q1jdFJtUCORND/1t4si01+AiEApZZG1fYXq5YcShdCl0Tbb0KUnhW7XnkLHeJBsSzdlrw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603270659-83667af4.0_1603270759742_0.44008918249907447"},"_hasShrinkwrap":false},"2.23.2-next-1603273858-d53ef9f7.0":{"name":"@xdn/core","version":"2.23.2-next-1603273858-d53ef9f7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.2-next-1603273858-d53ef9f7.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Wtywn3hkMUm+HO7wXfYrmgSgFqfdNS/8PJ45ISWDPVHGFUxMILlLA81ntmoIHbvEz2eQeKPT1HcFGC82Cc7BOg==","shasum":"c3a356d45d41d4d7f84195000f78c091832ba747","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.2-next-1603273858-d53ef9f7.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkAT/CRA9TVsSAnZWagAAcpMP/3xY9JAATHjkmYxklLec\nXrAVuI+/KEpq/pzWq+gVrmuJPzbUOJ89VNuwilM5/rP+suP9dZegyY6RREhN\niV2V2hWVQQXJnmCIotYQIGgVCQ0V8J9MC86dvCfDR+X88nn7LVyY03jvj5o3\n2PzO1g803AAufXXPA6akMYkKQkS1lGAuTNy/iexBycApf4c0oQakb5pB1HTS\ncoDLfNQkIFusNW9VdNX6fYgwF0ZVpTKSpqKMV7kVgSS7zyIT6o4EZ8XGjjRw\nLNVk0JSrTzHHuwy6P4Mqoz7Vrxz2mvlhplOrD5AzWgayzhUdvI7N+zRjS3co\nPEY1TrsUWCqcZ4TvNqRPKzFBn58ABBIrSHPQpEs7kSpEOMn85/U4apHuQgFh\nhcWEfRymuLLfFVf/RinczLhSv04wkzKqsuXU7asJj6nX1U0B89Vi1+B/Bi5U\ngcwpOtmfvyKusSf8sUn3YGiBGTL2ie9h0A7HBrpIk3nMpL6/TzKNC+nZW7Nz\nQK5LFXUY7ndExlyQxyGHPDeUeCRj87RVPzkSMNt4syR46Iulv9NSTGXUqbhk\nUqlM5dUucAPFWzxD1mXVhInJSCW7atAPj8uVXex7gMETgJZN9by2jFlDUw8X\ndNRfOvtXzZoYT3gfwpsklam3YWSBb9hokpJxjvUvR83pZRuklBpC2GZ6rqt6\n+Ts4\r\n=oRYU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKg4FyjHLGcG4kJN6CcGmjObT2NHGMiLqjaNRUB3PXvQIhAIW+iD5NcleUJMLJlTMaIl7uaIIhn7paEXR1WyFjJ8/B"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.2-next-1603273858-d53ef9f7.0_1603273982991_0.675877966693728"},"_hasShrinkwrap":false},"2.23.3-next-1603273986-9856d47e.0":{"name":"@xdn/core","version":"2.23.3-next-1603273986-9856d47e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.23.3-next-1603273986-9856d47e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OFD1fy/B5pMmBwtXTwuKrxr5S9oG9U1J57vufu1lT+Ft16sjQIycPfpp4UA64Xh7pgr1r/b9Ttbi9PIt3xQQJA==","shasum":"0ff04f8b34654df70946740be38f93e04b934535","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.23.3-next-1603273986-9856d47e.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkAV3CRA9TVsSAnZWagAAPRAP+wba3p33rV+FotsLRG9l\n7K99yDw9HZn9iN3Bofm7vXRlUurnT+0UOsPxS+mzPJ0i1eb94PcWvLoEFpSD\n1ZH288+bfcCU9mQmYliZk7LNcTrnXyUkDj/pNs5hACiQg5pqz+hIP7e5miXh\n/dqKr7bLDIf52AK4fNA/irj/VlOF/BYFYHIgDCp0BKz8fw5nxEK21SCLn+/5\nX4YeCwfk6Rv8Zh8N1O/0SVE8DRXHPRLLxYYWPIYVlUZdeSqD3yPMyaFzzeCF\nTu2CjT90T1h6Ob7ErAPoGpZa5s1eXsuz6mXb1V/lW7zqZrOS1//p7FLh2cno\nJ4z5w/ae4KQePc3I1sugSAkGzu5sR8KPRPkh8yfReZ1si4w0IifBMEgQgK4U\nA229fw8LxuSfWwMeePREmiW8pBA4jLz1xWU+uLoriymR9B0x27qKd4btGBwY\ndeT4XTxr4LjD2CU6l6A5U/eAOCcRpWGb1uNwE3njg+Lxv7G8SZWHTU7JdL74\nzGxX1lIT7qvtuF0DYmqsc+siW1mjxeScbKGn9IemjZ+8DxcXMx+V1D/ii/Xp\na2IIjpY/T8zL/dbMzAcK3mC0aKwJXri2NFRcfmhuMY6WU7gBC/YNe+YGgJgy\n+qQdgBbnmIxvbBqY4SqOHuga4qdlD/ek/W2vQcpXX6V5w8Uc2gitbQRrNnzk\nlmBH\r\n=NoHg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFxfFym2O05fxKHW9Xn9TPJpgYr63ciLwltJALVZJiJHAiAYcE/+S3UH/DI8SEkQ5SDRHO9a8nAEDm72OMP4gRISsQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.23.3-next-1603273986-9856d47e.0_1603274103254_0.8013358085128148"},"_hasShrinkwrap":false},"2.24.1-next-1603275471-329df333.0":{"name":"@xdn/core","version":"2.24.1-next-1603275471-329df333.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1-next-1603275471-329df333.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-iMTyS94fJN5GnNW1hFa1f+sPOYiT1h5gwqpn+BafMy79dafD47plE3Et4QNllTxtnZUG6jrP8BKTN/kzQlq/9w==","shasum":"489e5d5bbe2ef2d12cb530eef2b5144a2717bf52","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1-next-1603275471-329df333.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkAtCCRA9TVsSAnZWagAAzXYP/17iSnki7GDUDXDDuFc8\n/nmCzD3KFjU+AIKyS4HlDVFW3+K3/qUhItzu7QCUvYv6dDS83RJcJdzymJuC\nkFN/xLd1Idog85Er6UpMmhew5zbMA/vH/sSrGB44S/t1sNNtW4aTrDW28VkY\nYnlZuSWY0ihb3YIac0NElCd5x2TlZ2v0o+IhGhiyMmqTB1zgFpoPR/1Z0V0/\nBIyt81lrz62oOGpBwNTFak/NTi5xy1ScrvZHHEyUjTlEsmT4If/YE8DgN8Ha\nswKLBjIFw4vfHRFQDRfxV6rOC5vuBduEDLQO87eRdYbo2EZb8tDnUD6Wbqwa\n19M3oCK0bX6x7MD5f6TWgycuTn8wyIycg77PcToTHWPuLAvWriRjeItCu/yA\nb9Z9xypsB3Pfl2kgnjlI4GsFjXxgfKoDn2OIe9fmDfqswUD4zJ+WHHRjKRfG\nGdN16Q5lWJMiHjOlM+be1BBflXgzMoTiMMIAJIc6r+oNl0xoLjU+RjStPatC\nPhzQCmZLsygZtt27umeFbYLmABe4wAampRPfiYLimnqh9I8NZaX6+bcc0q5F\nIFFDHs8wzAhSaLFnKu/Ci6CKnbMPKEKpQQdqyJyTbxhe4MN+Ji245zPBDmhq\n5HXUSR6K3kZ0nIzvh11rdrdyO3+weDjJ+G8w9uV5h0+gudUPfBv4L+vpxg15\nS/8M\r\n=KxJS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHi9rBIWaltEFABllNWZBZvJTeb6HVwGxu///qCdDTH3AiAY2SvaIm3hYIs3ZfJngsG4jyp/9zXdJ2QDTSj0ViGPwQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1-next-1603275471-329df333.0_1603275585888_0.7282122410809406"},"_hasShrinkwrap":false},"2.24.1-next-1603277042-cad2926f.0":{"name":"@xdn/core","version":"2.24.1-next-1603277042-cad2926f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1-next-1603277042-cad2926f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6CTxI4kpr7DvJZDe1D8ps9zcKevWJmxR5dc7fozSqx8gDCL8gCyXxiyLqBwXEsi4gux2tSy2bSByT35PAI9oNg==","shasum":"cd75464f51d991f65cb8604acb1117a01d7dcece","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1-next-1603277042-cad2926f.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkBFrCRA9TVsSAnZWagAAvCcP/AvdRwmJHgSHHYML5ypZ\n1f3hyuK+89TVakOBSB+PlzOkGAJ/p/45AMp0/SuuQcBFVsRR3BvVYi1q80xl\nyoXo1NvQV7GlsZFjMVhOTOl2vTEB6v+C9RSy+HbJ0tvpWXfd8GsRBC5luHTi\n6YiTgJn/7JNvSNrd+pSvaMIw+N/t0X+68j9JyFVKb96Xk2wY/W8bqGYzUvTF\nj42FuBZBmruyNn+N1r4Dc0lnXqQEM66eQ3cRGbHFCMcB9i733K6CPzRuKMo4\nDUq4BiH4VFp4UMxFpl6ak3C4x1wCri0J4mOudPWDVM22KR5biHEltHjEKMV0\nugPbV9K4stXciN36QUi72WIlycuRLQ+ZP1BM285i3edR5GTefD3NxYTAc0ZZ\ncWQiO5xm66Uje4CFa88dNAGO3qrMC/+RqRew4K3JtBTaZ9T/CT1wkGjVjQ1/\neHpZ4ytd5vkd9bvJ/Ps3xQbwpheInNHdI1fbzoxJP2dbUx897Rwv5EU1Eaf+\nofEdEHC3QSp0Pb2Ny3AkHwCyCy42Z0pQBbArRqoTYwvxk99qO/vwZjO0cqWV\nm0UUU+/GGO8fIe9F0O6fgZ+EcBnwPmCdWtKe+snEg6EeJvCtoaQhEl5vRfme\n6ctHc9AnpfZ+7jjzEZg1iljZuBcY7JZfqNxl59H4VxOq3/FU8KaCxQ2Gpg0h\ng3zF\r\n=eOk7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCM1SJnlrphSo7+PlBGbcEB2T9vE6joexT+8DgcKWEk+wIhALxDSzuZ06PQj49n85JW21JT4ts03ayg+JrpNmLRWHyq"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1-next-1603277042-cad2926f.0_1603277162514_0.7322476716253561"},"_hasShrinkwrap":false},"2.24.1-next-1603277528-d6eb3909.0":{"name":"@xdn/core","version":"2.24.1-next-1603277528-d6eb3909.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1-next-1603277528-d6eb3909.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-cKr1sBYMjiaeLktCvFXGoL2SV0FDPYZ+IoM2DAhe7KwQ9YfihNTgHYpz7XB7ia9PGoXAqHoHt6rIGWN1KGPaWA==","shasum":"4c54a286708abe743716490fcb356c7edd41f83c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1-next-1603277528-d6eb3909.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkBNGCRA9TVsSAnZWagAAl5QQAJZuTu6BBf2tWj5LIWz8\ntnxhBb+9laSCTQPA3yX0xR8Prn+cwomOUoIPHP8Bqx0GmXJ010wqgetQKD6G\nA/5SEngSTJAyLBxWsrJxFb1IYQuLTLfL4j+6Ia1IXAMmt9Xi3K5urmTPY01M\nmXDJ5w1xhaIjIdMhZxPSZFEXKbsOoRyTr9DEZ8TGNRLSHItY5j6dEavmc5Gr\nkckQ1FBrruHNIc9J8cSyXVxHDCiZXlgP2VbkMqMI8O+zj4Xxpm67nFFg5UXw\nBnMl7kqjsASttgGrKxD+h6fo6CeJ0CG/ElfjVTvFHze0QEnrHgB3ytgzedTE\nkIv0LiMPQnYPKmC1+ngkTEqHmVlPvujALwUHNW5cPqLijFko1u+oJm3Ss0DY\n5I4SdX6fx4ofZvCySmN5TtBrlgXcYRUx9dG4X1oMHkz4+RWyvQWZTLuY13uy\nC1wPfWKBTm/8Q18E2UEJgAbJSn4Qs6rLGrKp2RjD1lNiwO4D2ul5xEuCdI+7\ni5Drtrm9/5JACGIvPtlX7EGZV+4J/NeOMr+D1G3eS26NOOqk2x+aHYaibRTa\nQ9H2UUoCyRSgxhFotiIlrWyClHpJBCEIFQt8C9ic34ngQnzWIUU15pLPVTMl\neGk3141My+KRdfgKmfIOYtamWUHWzR+qMFG0aFpVoNydhTFY3d2c4W9+fuxw\n4FVT\r\n=lVx3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFqtVDMT5TButytrpPDUyRiDhbykNcwfvQ31MrI+L6lgIgVr4rBGCWdkE4TVWeEbrYjI+HqjbmarKwTyPEV2C12P0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1-next-1603277528-d6eb3909.0_1603277638358_0.1148420095919771"},"_hasShrinkwrap":false},"2.24.1-next-1603278283-f85daa8f.0":{"name":"@xdn/core","version":"2.24.1-next-1603278283-f85daa8f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1-next-1603278283-f85daa8f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Cz0cX/ZTm/eEPoRW2Bj22gp3Bwvnrl9+Z8yYQ96Efwk7Q9WFAKCECMB+FXBQ+A60YaSKSJH6JoFjQ1uiVTAtKA==","shasum":"5fbad6b1206493f59136ef8457535a8c040a7695","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1-next-1603278283-f85daa8f.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkBYuCRA9TVsSAnZWagAAz9AQAJfBIdhVkGGQ46pQx81Y\ngNoQn0pjCUgiiLF83qmAwdaz9qig9gcst4zZqCc4ZZbGIJTKVC6KtAsVFAcg\nEMGKzB/OWyN61mcvi87AQNkidqhTKI6AU47dKHq2o6xGDKrw6mySDTFeLlZz\nkHDshhzPJe4p8si1d0Q2y8MO2S7Rz/TG0Mc1Q03U46xJc+g5FlltksH8u2aC\necwLB6PRaNk2ibLs8Hh9Ict39FC6pWnlLQ5iBdOILZ5OhOZWZcF/qQCj6zEO\nIMwnW/6ejG7bbBba1x25XO8ZjtPjXiIb5yaBuYKj5n/yJ7ATPUWle42EJD6t\n8XzVEV1T73SDwXxEt/LtMUgY7EQZvEwy0i13dPbO6XztYSfJK3XlhhVBnJ8I\naOOOJxmr9KPgpY9b44tp0IcN2YphuLOA2Qw90OefZZx/Sxly2n1xHD5zz/m2\n1yrYej114/dWk289ZUYQwkhf23p3mS3eNQKMG1OJD0g1SieoPNPYIcyeWkxb\nYlX4KNU6YJ776nDGZALWZ1MGiWyQgFOoGIQF1szgliOInRD07lsaKiCcBARC\n9ZFHFv6J+kNI2RCYteGxkygjJ3O/QDDlbP4Mu7tU2vX2pxlypwtL3XGVgKF/\nbsxKVoWSx+o2NzZjFRboL8M0s1UJYtGa3VLS4ZbSCHYVZz2JJHrLlIgyDtRn\nn86A\r\n=2cNx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFBpRzldHSgKjAGbNZAbzXJKfmi+5Qmr+/1l3Ar/Lfe5AiEA08kzHuuWxhytu6e8WTYdesvO3ysoT+DIT1LQRhy48dU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1-next-1603278283-f85daa8f.0_1603278382079_0.12210157269061073"},"_hasShrinkwrap":false},"2.24.1-next-1603278802-d6eb3909.0":{"name":"@xdn/core","version":"2.24.1-next-1603278802-d6eb3909.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1-next-1603278802-d6eb3909.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5BY4/zOp6np7qAIRZs6McckJG6fzpN2eqNGtf7PF4IxGL5R1lJvr7KIUKJB2Jt/+xg4c6mYFEHYfsFvI1sOjMA==","shasum":"a7755280810d738ca51af7ec5e83c443dc7770a8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1-next-1603278802-d6eb3909.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkBg1CRA9TVsSAnZWagAAxkcP/i80ra34f/wgtAec1rsI\nbiTAF8WnRW8ruqPPdR0eZ2t+mnf033+Ywhrhlmm1IWlrnprSPduIKjGleurY\nSFirrAYNZwh+BJeH3+8mRz6z5lWeARZWh/9zhIPiaXo/o6tk82l4iPpn4PJS\nT/dkssFMYfpkQErzAickzoXah2ga6sEtrKrsbU0WNqJm98RlIuGYoBcoceOV\nq+81SrtwLb/WRFIENWzbjjMDaTMkI0pehq2ntmg0o/4yfweJHNR+1fVfO2Hj\nsvDAfar7wOXBJpC0GqI2a59uAR9iphGv3KBFNuEzc33SADECYFJYe5OvpsKT\nEHCXQxh2nd8NLhsRjpi3nJXdjOI2TE27LVMSMupPdDa0RjQZvQPc6wTXD5Bq\ndQrXqRxG1vvCPD0qKDNUmyaFMNia3k+juXM/5uJjwW+waBiCFkEyuF4XE41z\ncTMgFRFzR97OBBzu+y9p02fuqp2V7MDJzGuxWaPEs6Vt4Q5SSwjyM3zZr59e\n/XsLM6b6BrG/dFhxPQa3ydGdgKB9kJlMvJQmb0p+dm+sCV/ZNU4bZ2Nt7ERc\n+MkPAMZtxNrQoocg8VC9jkHazFU5/9x7MOKnDSjmTr15vTD9E1byjOEfK2if\n3XmnIdnAZRouEAkoxRcQ6QEyMeHV9C965cRZthsxnQq3TOX35CMuKU+seqXr\nwWVv\r\n=rN3q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHl8MSUzUTTX3UuqpbGD5uceGouyc68WnMZL2LXHPoCIAiEAmCycNjZcBncwQEbewtGuIhz34jW67eXqGslH9vkLvLE="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1-next-1603278802-d6eb3909.0_1603278900512_0.9131082525511571"},"_hasShrinkwrap":false},"2.24.1-next-1603279073-ab2a77ac.0":{"name":"@xdn/core","version":"2.24.1-next-1603279073-ab2a77ac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1-next-1603279073-ab2a77ac.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gnr9lTsnkqx1DKdjcbfjhAv5h+pf6AUFZNdbcvjJvE3lWNVlVfm6zYCPZf8D0gDfAFaC8acDrQtvJyuVRirLcw==","shasum":"b0ca5bbe4ff241aebea82aa55b043c82e0728a26","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1-next-1603279073-ab2a77ac.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkBlTCRA9TVsSAnZWagAAGq0P/AvaVNjZhbyG7Dbwj8GT\nJdndemUOovg+B6IlPI0RRtmvP1uHH3F8kH44JbLq7x7xuEqdoy0k4RxzYTXu\n9Kyp8ABpTiCWQy6Mq3Cp6tgoHsRdY7Q1tZgzO35RZSSBF+zIzyQMZc/w57dR\ncxkLbG5EGyvFed1x3v6T/iyjXrT0cbnwbI8COWrEmY72r7dI0byuw1RJrnJK\nT/EV/YeuMrJZbfcyf7fQJ5pPYN0RfT0jzbPIwaZART3bPCNlWX8D+gFrMaBs\nKR3i0IQ05VIM3qv1Xy6RucRGK4t2VCYlDcoU1T/GKRWoBTB9B65ZAD64192b\n9LF860X430oYbB52/RQvFAO0DSMR7sh29DWjvsZ2PgoSBnU0Lyo/fk53h1lc\nLiYA1y5uWA5JAyvYWjbp1swm9v7GzucqOgHPsuYi+G1z1QyBD9jHUZj9//iE\nYh/RFu+OFGLTCh3y75zKlwAPc1BAU4KmdPzcniq78+D4P4mEhtFicUnA9eEq\nuMvnYFNozQq/JPB/Xc/tZI9FWzE33e4Nz+8RS0jRYCfb26wssiuKRTBZqEIv\npbWYF1cnpfXsP4Bje/vP2i2sJ/ZXa7zR6xvbo5EIuumqdYVO92V+n1HZubrD\nzT5Hy08rtI2P9lX2HHWDCNxRGFuTNfIH8mQAhSlVMx17+31k4E75LHd4b0Xu\nExJL\r\n=435N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC99Ox3Ztds37A3mDP0hqbzon70hdmjXIZ+MTCVGBA6XwIgCIkKBPFxWu3M/yXKLuWnvXiusSwlvoW1sQ6q9ov+xCY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1-next-1603279073-ab2a77ac.0_1603279186884_0.405846206083744"},"_hasShrinkwrap":false},"2.24.1-next-1603279440-d7a6d29e.0":{"name":"@xdn/core","version":"2.24.1-next-1603279440-d7a6d29e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1-next-1603279440-d7a6d29e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/a4o6n11EQoSnkIzNkHM0uDmcKMDr5mykLOewOT33QhEhc8PY9LFNbL8V1mI37Eo1Q7Kn8RbEuqlWTSFSE9dCA==","shasum":"e2e14fa699ab6b44f0c035226601e721913de3a5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1-next-1603279440-d7a6d29e.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkBrLCRA9TVsSAnZWagAAkGsP/2BLag85WRdh4HU3HgJa\nU53cbjX87NY535tWmATHOgZEnTr4awzM4xiPXc6Pp3JpWZYKIbjIHcothdK3\nN45H2ZaSNsJEFoA4PEyW5F8yEvhQ7VySsTn4bEG7lnkiKo2YVgv5niy2qf1R\nugFsjh9xmohQ6iUxlAENtuDg4qjamBzQV5dzWVJYyP/21VwlR8jWn7+qeySE\nNV88+nrCx0mGRhhb+NL9wSecBYBgx+pQ2TKbs3hLE9GBrnBn/xeGTB7ZXhDo\n0mEY879NkNSXgHcMRksqr91ToqpfoaDqsnfejS56d/ml1qBsUYeAmSp8FRhU\nBgrGwdM09yLGXvUcXQqNhG+UDQFnIcjPMycRCoyMR+cfo1CyFKZon/vwjV6d\naWWZxKmbzksxuZhVK42ykwD5NLPJ/atW45AN8C6O2NoVcXkAGll9+Ss3IcqM\nvFUMjG7hIFnrAyDaJun3wZBD/UqLypBIdvqM+riKju9DF/39gI9LxhjkUWB7\nzq/S+sw7lTllWisQZbsb4OCrMkOL9rCwFWBafmA8uyQWdc75snuaeV1Rqoqk\npixCesWcSvNP5Rjktw2vdI2nU31shtyHKAEZgZj7Wf2HjUd7kQ+X15WvqG22\n9wPTXT+hFQa1J9OYrUEFyleQ3Nl66+YfuFLxpmYgbQ4cFhpsSojvAfJDZwv1\n3cST\r\n=++ip\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSx08MnxAnWLhIToXMADnt4ZbjqjSQJPNoImwtJgI4QgIgaxgAgvxtk6dzNtjYzR+Os0J8F9aJT8NOCnDz4BNzXCg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1-next-1603279440-d7a6d29e.0_1603279563309_0.25807649000031874"},"_hasShrinkwrap":false},"2.24.0":{"name":"@xdn/core","version":"2.24.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8tzArrI9fa7icpnqB2HUCu7sZJV2IXiuihXoF4w22hlhhRM8sPDIoWCYVDhSAIx5qAk6ATXclaLqeGL0iNT7bQ==","shasum":"08a6b8d87c1077b034f54b8eab1ebc43d217957a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.0.tgz","fileCount":163,"unpackedSize":600197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkB6/CRA9TVsSAnZWagAAIToP/icwdLhTz60GGt+UxFhx\nNecTPYl8lfu8dfeJsQJkh03s+OhWbEYqDw1s0W3lOn0xGUabFnOIrbcVxzg6\ndrbiq6RqRIrVA93C0RjL5Gw0x5roGJYqFdmMuWWMD1p430AJNkvayX6m9DQI\n/iFiALtKt5l0rYocLDK5PoR2BG5BJn0MnpVRn6BpES0GLHZXzRLzU5Cg1RWJ\nzPWW3DAL0X59HEPoSdYoB24eY8C5fe2ndOuO1DhrZMMyh/zt28VcpprOkHsL\nZdhzjX7dbUqxrQBVncxJW6pjs/GHSUjeIuqmfwNRpvkGIlpE8zguEYEMnz/H\np3WUSxtbPHL57W3TQSdskzHn8QdQTwJ4a9RSXupqa/hzD3OORklJUBEGt3LT\nWQkedtfKwpIX9THaZxm/AOwRG2g9N+/XIcb4cT8q9bsmCVz788/mszlaBRqU\n2nCw7JdPBmJV9ubo3CKq5E2EYCyalwaeqXM+ju4e/SI4xZduhOlv4CSjl0Lx\n6NDCk0H1L0BjtJP/gdToAlq14UToXqzxfJiJu94DF2VR3os24brNQ40S/+S/\nTUl1btLHltgsntt06jL4c3tkYKWowSfiMJHjJ9bCQi2g2WPuGz/5ZKQj9f4x\nNRF6EXL2M5BnYbrcYTPpqxv+g5URPBjcf4koBCH4l8gvmfDYTXlAeU8F3Dq6\nf0Eh\r\n=/76u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGQhKzCNYF2dJpc7csuxZzwp/RNgpsW+HFzPaBALIPo5AiARJy6LNjumoWigWavhTGiyrWsXkIMXBM6FEdiRB9LwEA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.0_1603280575117_0.10435949935330746"},"_hasShrinkwrap":false},"2.24.1-next-1603280612-fc1a2375.0":{"name":"@xdn/core","version":"2.24.1-next-1603280612-fc1a2375.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1-next-1603280612-fc1a2375.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-a/QK0blRT6SfnwEqVGGx2wrmkpeuHk/MVrSPe68jV/TrgK/O+ubupZBFFtF10aNZ85yDSOkUcCf7eCKs4jcEiw==","shasum":"52ecf1847d783087a8ea713bd43fd9880540be28","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1-next-1603280612-fc1a2375.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkB9bCRA9TVsSAnZWagAAtzwP/1RAen7sS8EPb3p4QUhC\nkqeIs1N+fdmZQc3DcTre2GkYwsPIe8fAQ5XgPORewFfUTZrxeY2nTD9nAXoT\n7rEEwdQOXM54uQgT0de2wrfAxUHCTzhaDRj5jzb8jkvzgomxUHCU7FLWQEbm\nSJFfnTaYO3SmHjPEFuQ8q1FUsS0IAp4zLiPk7T6LbecwwosL8H/g6D1YmRWj\nsuMHHpaH3KFPK926k4yJ2bk+Zw3dUXa6BGKo7KfYioDkacxgBn0TNf7BOT1Q\nuRjrhbtaWHnKNyhzq2kbc3B1PZBzSUjhoEYAvH9pLafgw+3UEuavaeKRPY26\n3gA9NHTYQT2X6xprXe/WlJ+OXIogjEpUA2pHJXmwXMEWEe3md29jG9tqTG5j\nb83VYLqEyFryFEe9kEv77l1I1uFu6vtF7dn6vNpZedWSMOtXmIpvp5M1W8vN\nOi1YSkWHVEEZV5MMcnNZ7g/pmD2XAs5ErpB1tqXqVnLRHUan0nbGrBwQYb8m\nqo/AVTqFFOvoXZEQskeRCMEMS7nbwgjhf15gVwGrGr/y1H0SVrh4xJjSF+pZ\nJGKfWZezEyLXElr9tqNYLIRcVS/eSm4XemN1+po5r7g1ynsKRMnXVgPtAbcP\nGxnxxHtqs21E6Vu5AahG5phtkQVvwnONLf7gOKYIrslc6mY8KXOT1xTW2oSS\n9amp\r\n=F8QO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2irZCtmPB6MenpFLAv6FRHaQwSdTZT7V9ov/niu1aagIhAJ0zxO1YmJSAbvD3hp8pa64GzgUAcuFuTB7pVd4EA3WQ"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1-next-1603280612-fc1a2375.0_1603280731106_0.8579727580091208"},"_hasShrinkwrap":false},"2.24.1-next-1603282050-74c7502b.0":{"name":"@xdn/core","version":"2.24.1-next-1603282050-74c7502b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1-next-1603282050-74c7502b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jNd5Sh6Y24iKD3OwM+MMYHmTRgjOGhKN6n9lErt6NGhZQjdyQK1H1TRtEwl363h8fjNObThsRGZb0JdV3aneNA==","shasum":"ef67b534cd7e79e0119bdc18920947558c991a17","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1-next-1603282050-74c7502b.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkCT3CRA9TVsSAnZWagAAnOQP/i5qUzbxGuorrbWSJNNm\nRT648GZLyBWUtUMR2Do/rsHblfwJAUdh18if7KZLdVuFy4HwE8QCj2nPrZhQ\nad/yWg5LAte56KZXpWnDLcqwwpqIkU9CIZDTAvKKX4kOTq/7GoRuyr5lSp2P\nQYc9z40wtmDiwHT0HzNm2OG3tN72+rJPlfrCAVFuoAB+tI4Xar/qE8biOmmH\npUysgbl7c7csq7BJfFZQYRArwFhb6ROj32oPPg0eThE6upNqR3dS0Jp/BOPy\nMFcLJuycdEhl5X7pFdof+H/+gBqEB/KSyNP5s2GIFzw1XTfwUXjUzW/bHxm2\nQSOx3YiWCHeOJowOzjBrBhHQNs0Bwe0xqJcAeWniAfGoulb8TEQliCbK8hfp\nnq0a80h1tUQHexXqwfbCSFvfAt3FUes1J7NHURNWFIqLXyRCd1FxwdI5IG1P\ng1W6F4yYAOwfGMbd3FsyvlqaauMXnD5BFXRWSr6hLo6okvUhfyVrHm8ahEE+\nxgQqJvIo3CBXvoHXvsG00LCqI/XECVVEikfQ1sF8H7ATCjHSbUDZE/b0dkT5\n9It1kGgNDoNiwB4WiMmecs0a0ujGq0VoBUvlXfJwm+EnMltPuhiu5PdtlQ4u\nBX3cH/yZ1u7jU5PeBX33516vi0hYJaJdiVZvGqM6NJnDkW7QYwJdgJwwd7M7\nLZ2A\r\n=hhSb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICySz/iMW66M4x6xUgg/V0RSAeYZUOsVjkJ8cQIOAf54AiB+fgShQOArzMLYSKAZsscjVNvjWNlXeNNiqQexP3H9ow=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1-next-1603282050-74c7502b.0_1603282167003_0.3357184141794034"},"_hasShrinkwrap":false},"2.24.1-next-1603282945-3adc73a0.0":{"name":"@xdn/core","version":"2.24.1-next-1603282945-3adc73a0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1-next-1603282945-3adc73a0.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nNVdrrIrnnPO/d7FZD08NW9cIebDcNps51lhA44Wah+kZFpd3/eZ5XR/mRCEk4fJ+7KCnsyw09BvskjgB74oxw==","shasum":"1571684dbc09e53ae3757a5b598c4b6d615220a7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1-next-1603282945-3adc73a0.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkCh6CRA9TVsSAnZWagAAY6oP/3IEdUVDoUuz7IJdUD2s\nXh3P1cx0FUj/zoSGGPK7A2dK4hEqLx4Si4zmM4TRagUvp3aW7pydpcXhoRCP\n4JpHkYcfyKzx6mwqYEnPbK14afbk0FddWoT9y76CTeSqogaFjov2KWJwyjrG\nIoi43RjXO2Pk5osn60rYYTPdbwfy9npUBOTNweBRhtuS6eGMSNk9ebPJGI/B\nNiMcXhq3A3V9fQJx9uHFdq+eBLmdjkJwAXk1Tb0+AQw53zfyFiHNzcF/zsHx\nN+JsAhpTjgnW5gjQFiHyvLMwoRKCRe1XVs2/7xE57WRiQqYOYAIjSGWL1Uqz\nPZouoOAZy8TKNwQ/L9z5uz+5jU7jLF0T5mFDgqMw4QvBg2k23n2mros6tk2+\nTmaIuDI2LkcaxkqiKrVMh+rzjZb0DrF1Pzj1IrITcU2FxCwe9Mjz9MvTH6cW\n2jatzHeoPyiVD9j2PUfY8T4x8QI1Or2yiaPJA+p0Vu5zFwcvAZZcx6mkByp0\nHZN1NumwKXO2ra0VTgMxGnVNq2wk8xMKoUOKLeFHmb39H0jO6yCpZec4zShu\nsVVoYWsRDBZTQCIPxBdakhhUNVc3/8eCIipJy3GuONyHIMcEtZHSrhM7qkk3\n12w6XYCnNcnHD8oGoGZEqzEQTBCLx3tCwi0gQpX9TQXudr5lZhbJE+em1F4E\n8Fxk\r\n=phoo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICp8+5/WTltR7f0zLyH70isc8P5+z6/fDOCMoUscsE7JAiEAxbNbbciSdvSvgnEegcYNX/tvtkx+nV9BngqQkMde9I4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1-next-1603282945-3adc73a0.0_1603283065403_0.46362137468187536"},"_hasShrinkwrap":false},"2.24.2-next-1603283112-0f1ef146.0":{"name":"@xdn/core","version":"2.24.2-next-1603283112-0f1ef146.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603283112-0f1ef146.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jy7w2Og71dqT8FGDMFg4AixjnytfINp0TiYKrRELoh4tIOh7reNguDGK75tao4alqKJ/k7PIUSyz/pQU+X80gw==","shasum":"c923ecc95ef0813dc1dff6e30bacbbe8370b4787","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603283112-0f1ef146.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkCkZCRA9TVsSAnZWagAAkTgP/R5HTcVtvyyRN1KQy89r\nGw6WVLkm5s7/giXaK8nM5iTOra3rRsvwYi4pz8Vz7g4nmg/qFFTLvpHC8Aa3\n4v0gntC2sEfkRo8F4SA7r+7YNUHbj9qF9QAse0h366PeTAF5N+VP8iKcCv89\nrRfS7kWytQRooi63djEHbzbZ/gBvzT1NmEDvSxzuy3W3ZpKCkSbw/jICMftu\nxM+30r8DrjkDqL/7ryXb96BC3uEVdRXDx7gNzKE6XaMEiwF5MESFU7SexbsO\nH8xnbKL6/vvZrEJjUpBkrCEQi+grhyf6ZAmlrpPS1Yk/bQykAAfJXEXOpmqf\nURfubmXwWKPOL0JfYMlrV+hd6nntR30dlTs8trm+AfTG0LHIN3q2EV85L+b/\n60onh06EqIzonf8HyA7TpyyCQiFZwqz1pfvRJE6vXB2p1UiGjWoEfRbEeckM\nmrohw0vyY8FgJaWt5GzOpdWsYB69MF+gjbr/z9mtzQnXyPO0v3QpzQHEg0oy\nM1uxgeEB8+joBUBC/CR/BoXv8tJsybxeAS2j+7Za2CK4Gt7GeQRanXwDP580\nIW+AHEKgvLacGHI9IXiNEsT2u7gl3aIIu1wNRPbA19hEw+NIxDdDROC4kzTR\n4Tyx6s4+mWIBxbhLrh0pxSfhtr9byNa3y/YfoPGzs+VoKgsKh9JplcBMioyc\nBYGg\r\n=Lv9s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3Eit9/bi/9uaQmBzYZZcyAh2nsvAbqYvGO4bWdA3IwAiAZ61TdBAFrQfQM8FCJh1vewnVDs2Pf2KLWlVCbaQnYMw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603283112-0f1ef146.0_1603283225167_0.14168156780758756"},"_hasShrinkwrap":false},"2.24.1":{"name":"@xdn/core","version":"2.24.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.1","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-T19lXpcfOa3HxGiYLdZ9IfrXtNCeTnu9ckrPtKo5UXrAb+4ICShxA8e1o/jQAXMYTOhktidBhm77mOW6rYIpww==","shasum":"74bdc89ef11a2819f09be44ec094f24cddf424fa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.1.tgz","fileCount":163,"unpackedSize":600197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkCllCRA9TVsSAnZWagAAk0wP/jWSKj2awZSCPAJ0pyKk\nBRA7okQfiCfENSsfPy9KS8zXmHPPSnvJfngbculelvSrIq1rnWJsSn6a/1E7\nIQ9Iyt+NYBTrtTw4IWa1sNhGauIcfGQCC25pJIj0Bmc/BSb2QjBIOX8QAt3n\n+1JueFdRu6inAsr1X1SO5+RdpEYoVKDwUX7jIhJTQAnMYMsTA5chRwevgp/E\nI6hQQaYQ4sg8+ZhDWEHqkUo/L3M2XKU+DuD1Zpj3wo4webIj6+Ivlii50Ssh\nYVp70MdegPh/awb1dosW3RB7EQb64ROIyXRS1asucHgtX+cZ21vmn9z1Rpl7\nCWiUn/h2ixtevuV7DizXt0Mems40p0k1L9OYEyXURcVs+/HhGQyZJwvfZxNC\nS21lqY8OkgSfMkluWwgg71ph7I+IZ6bff7J6He9I8JbgUoLOXDGC2LrLPEbz\nXLGTn/XHX3dw+uG3VAKa+QwaM3pJFIkVU9TGoWJgboUuoVyHJu5ZgDMUHQWU\nfovp4ONFiZxDYDw8pqHOi/0g3+HyJrtXXorYFPTOAxVLivcWkYpRggSAvBzS\nRSFLOBkQrt7kCX5i0L8l3afMnzYWbg26kiVsx6ut/KtZjI28MrBiiqmj3F8v\nQaqG+G5z/taoLIBN+bao6F7E00QKSy+e2y8jtdhx4andO4xml/NUD7/fTF1S\nc4gr\r\n=6JKX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFHzN9ynU9w3t8i+Ef5TjW3j+3kojUOAPyTWw0UXD96sAiAOWiSeAP8ePsoBKQ4Dzl7scOzlw2frGfPb1teEuhPFOA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.1_1603283301138_0.7835802825898248"},"_hasShrinkwrap":false},"2.24.2-next-1603283329-28699d74.0":{"name":"@xdn/core","version":"2.24.2-next-1603283329-28699d74.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603283329-28699d74.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qrushwyh2+Q1oM9JJfDjNPHZyd61CnxWQhhCht4ihTsseJ3D50+DLWfPSfuxoMVZtcfWzSFB4HwxIj+xABElMg==","shasum":"bc852997c5825cc73ec75a79b8cae628a74a344f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603283329-28699d74.0.tgz","fileCount":167,"unpackedSize":608938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkCn0CRA9TVsSAnZWagAAgxQP/0eKJV57GiB7BHXPGrkq\n86NWGtqMKRmKq4PDXMUSzI5Zrsrzjno008ZHtawFej9uF1Kw1PAm9L9H0wf9\n/gtW8gGn4LM/LQNqrba8U8P7lWLNfRuasx4DH7i2xLTtliRRiLKxXIMHp9Nw\nyDZdf4CfGEdNyxonDR8X3B0Nd+2W4gAvDivZYfmr/f0jIwJ8EOwtLIOvn/8Q\nx0ntLarfzIXajBopDfusBRtvXEuqQ+YUHujxdKzxYNGSOspfGLm2p2Ui01uR\nXkd+/Ce42OVu+Cf0ritXK97mW70wF70LkizRNGL1TSyzXHZC4zwi6K7nkJgi\nyS57l8YWk8w7oijsqCdJGO3qcMjRAAYW9vo9xL8PAeYAUGjcJnxhrcQdy/PI\nu+Sr1mNnvm4pFYX1cSZgCvKbJuGWdWMsWXbthV+ck+VDPYtUXXdHWC4tAkYb\nIh/iHRI+v7B93nHudk7So+wPMq2uWGYDKX1VzOLWFRjkqXMWwYC0O6kHEc+/\nup6/BuZpp2QqqnFG+ejSjFzRCXI/iRnKZsL+T/M7PCREudMjZtNJirqL3cxm\nYuikDl393HiGGAvZqIObIPJdNNyZL98e3dv6TN4Jf9IAftK6fisJOeYriu4Z\nFJ77wyyk2vn0LpGpFEqkauTBeA3BvQDzYcELfHk+ZBuhtolYpF32u1rE6ndZ\nUwnX\r\n=wsNy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGvXhHwkxBI38Dse1tMotV6DK6FPVBR+d6c+mBf0jEgDAiB10fzFJ8a6lT591kMrGM56mc2H2qBxX9jlv2KhYjXC/g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603283329-28699d74.0_1603283443668_0.6257653885198533"},"_hasShrinkwrap":false},"2.24.2-next-1603284038-b4c37cab.0":{"name":"@xdn/core","version":"2.24.2-next-1603284038-b4c37cab.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603284038-b4c37cab.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1Il+Cy5MK+XUkJtCYAhr6akvcrWsBwmapJv6pSO1UOvUHZuctTztVHo8jmd34BA/qzDrB4gNKo+WQWcbf2W0Dg==","shasum":"03bf4ec458016429d29aff4ee5198bc01c619be0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603284038-b4c37cab.0.tgz","fileCount":167,"unpackedSize":608938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkCzCCRA9TVsSAnZWagAA4pQQAJuQLk+FbzNRUC971Csy\nOC7JrC29qQlOYKYAsMJ27wLFf+Pm+sd6Xifssg0CZixu4rLnbPiFkgqSdywC\nR96HUhFzN8Vxdc9bYvPCWoGiG8dk8EUcTcfjl+9GY+VL+UC4m0B60I4/YsiQ\nv+VdM0NtlfP3jPtKv8HfQhtCFAR5aR9B4OtNP94z5nHtM2DU1dNOPZU7cyI9\nfBSMUBKx2Fgv+AAqvbzL9uwvlsdYSqwOH331arjJu61m+Gki/UZ6h34juTf0\n1n7BaiKLOjCNaqkwLrpbexDCcKyuUKtwMoRn0k03p0C4A02c/lJcc2NZWUtQ\nQuEH/dwBZkVBjdhSZZBd6apYmx7yKYR3b6upAxt6yteuVaDR5qeeMN3BjMBz\nDJP9XPuJONICsmL0b7Gy85D7sqW06eIis2BzrvAzPqguIkDkAI/LYI4htyf/\n2AzTIhVLXhaTWUYnxov0d7/SePm7Onga8PMxv6N05wyfXqxWnaI8C9++OtAT\nCptGfzRNvZAzrNzgKgNaP3OhB5t1D6bzZUtixhwqOkMeefMYIUClhqrG0Ev0\nMyvCiya3GdUFaJrM+5mbjRTc6Src/NltcK3BsLKjxmZua/2prUSj2RHcwDSk\n211oqUvYcDeVNJS09GSu5K62V/PX68TF1qtY6HSNW20yJH2YcU9Y6FNYS2e3\nx2/l\r\n=pfsP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuJ//Y9om6SEMQaqVBCtjwEB6IQLSh2PJstJkWtxMIigIgFcpUcjPK6tq6HEwViOQEzlEqctdCMp2X+1GM8rfI73s="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603284038-b4c37cab.0_1603284161998_0.26578566876139154"},"_hasShrinkwrap":false},"2.24.2-next-1603284449-71333485.0":{"name":"@xdn/core","version":"2.24.2-next-1603284449-71333485.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603284449-71333485.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+0ML57ohX9pzahONIpEez2QhtGC69nweFMHtipcoszD1A6JbALfEc1lTw7LfqxLNcu+CHL70efflZij1VE8mMg==","shasum":"5f8335582599393fe9db9954731c7a7953813216","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603284449-71333485.0.tgz","fileCount":165,"unpackedSize":601552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkC5KCRA9TVsSAnZWagAAM1MQAJ8AYkBaashGGgljp/ee\nSgpdmf0lWz7Cod/o7cqw6TO0dRZK2RZXNBbBGQsGGXhk9/72ify2JtqeAQfK\nJH5iKmX9Oqym9wSHUIgNAADPIEViClf59qoGvMEF0TDoR8YZQtT6MBErQVKZ\nxu6dA32vd/ICUn7MUAaVenoh0t9s3SwC6fowIBsV10Rfuw5jOA3S/X/Q1O2D\n31Ay3ibEusGJkuZwnm+OwuA/0Q5+Nh4A+N8HHJeKa+/vVpdzMlHukSJP+pif\ntScd0aclqWD16p2Ls52NXsVpJIwgnGf+W55MbkGyK6+H9df6iQSPKFPPkM8R\nU1wI92jQpJWwyyWFoTmfwhRKRpFlt2f+vFuheImCw7tykFcPOLzgBCMvLz2U\nrBF/ZG1N4rBMXr4h2sO3Ovkdb1g7ATXij9/QIodVB0zE3sLzUfbbALb2zWS1\nqvlHUjB5wxJxuG6jTGTbjqYYPOXeAOoXjYld2MgRxlcyTceudq0kfdT8K9l1\nHwScOWgT1Ip/VtPcRg2mWF88rx9iC0efcnWhLH2rnkfFY5MIUueWqypuc6Z9\nub9VeYZdu9z4+ld+q915GVegGSJxPBZOKFJx8nt1ZaRefJqd0t0h+mppn2PK\nu3IYUFc05l6L1SkhhnhmMBfb7YSp/7qV9MgFyfiEv6p1RIlm3oXcpx5umpLc\n2Q/B\r\n=2j8v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDi3JtETTnGntRICE0PsSzJKyl12/nJ7JTyxDFshNavkAIgfHvwA8vGGE/11pB1rJ6pAlQYm6F4fEXtpejfZCfcwv4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603284449-71333485.0_1603284554181_0.4733454075648631"},"_hasShrinkwrap":false},"2.24.2-next-1603286057-71333485.0":{"name":"@xdn/core","version":"2.24.2-next-1603286057-71333485.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603286057-71333485.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-V9espTZexW8TxegIof4bLt/i3SaByP2NjDj/eKY2Nv1+J6WQw0iNL/fp/7nol+qAHwh9UhJhLh791LH18cGH/w==","shasum":"72a92b8585c2da2b85c1c1682e4fe66afb41d64a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603286057-71333485.0.tgz","fileCount":165,"unpackedSize":601552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkDSdCRA9TVsSAnZWagAAOr8P/3tlUuW7ZZ0KrOVrUbZr\nMYi0SklMPBnjQXW2JmNAGaAcN6xpgAR4zKvP1E5jUr6OuQzTlcok252aHDtu\nz5O1nKKRbG/No7FxlskKkb7AQ0DxJS7EL/nLTCa7RN1PMUTKtJti375IhLX6\nBZ49kCWTcs2ybT9dQyDS5/Fbrf+SglZzpXn367DzNR10Es0LzzPPWn4qw7MF\nIlnzAABQQsIbR72jDle5MYx2Kn3e7+xCSJrSMA2L3AnqChyVYvnnOwqRDQ27\nyua4M5o6QUG7WWuLOj+3nLAeNh1NRchATW87sZzPvEq4YBxeGQpoRtD4XyuO\nycYYB0kl0uY9BWHkag/XuCVKCmqr4+lvbYyajHjl1ZtB+CwEk6Vr/NgE4Ciu\n2zQ+jUjMzvoUjznWT6n2gZoNywqeotPrsEh2ESD2fMmeNWtV6RUZwFxOhq/i\nM9bwUXthk4DQI6jeaCaiFY0rPmBFLIIrgsZ28QKwLzhNoWx31eOYFN0H42cr\n/ZFscDAvcY8RCVTuE7z7ls/nNzjKYD2zIPkSkO3gtHRMxdoMOkwtobncSw5o\n0ZxFbUXEe/0moMTotaa4nvmGorCvh4m4QJ1NnC8x7qx+YTe9JOP5mN3n2EC9\ndFMm4hz9r6VTRcExiNw0vYJW962GBak1zuMPpHG3L8bBXAZplPoktvVHGi3l\nKE45\r\n=/e1C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGZ6JilLO+oMiKsu078HL6YstKIGbVLaKxDiS4aaWGLpAiBoKwxDe2oHIMBp5hF96PyVI6RL3OYlDuM82ZftFHcttQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603286057-71333485.0_1603286173343_0.28693768429069544"},"_hasShrinkwrap":false},"2.24.2-next-1603287393-4254c3b0.0":{"name":"@xdn/core","version":"2.24.2-next-1603287393-4254c3b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603287393-4254c3b0.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IU71kL5jByGjepwJc0+iSS3gv8RQjrsIqkF2uQ+xhK4bjAPyV8s+ra+piZ75N6e6G3PG0iruI+TWNqmtdflfTQ==","shasum":"3c6e388d3469b8d5c2b68b340ed9e802d60d21a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603287393-4254c3b0.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkDnaCRA9TVsSAnZWagAA5LYP/jbaEdwHfaIKUITkkKlh\nHv6XX1WdvF3p3YF7VHVp4bufToZ3UU00tWIQlca2AYCOpX1GQhC5ap2gN1ed\n6D66L4lDp/GHKmah0+4bVom6I74CdSBqcr2lH6OQ5A2vcU7AI1EP75am67wS\nTbXOrHrZfvGAL3/r/TXm3hnmJ3KTiASni3DYjpUjVAwlWwZuMwRbyFt2v8La\n1CtFK6EhUatcZD9rKbfDouB278ovl7m8E5e09iQk1F6KB5hhsNOG7bBTVLp7\nCw1tT8gW6ayi70b553yXhjnB39oxiVQRHru2iTZS9I1FUMEuZsX9nycqd2hb\ngVoYPxTX3yGatWfGKDdIxRu3QFUhdORsKoG9vufqa+LH5anXMva4TnP53gPA\nE8iwu1wOPMVb9s2vpcPy0dR2htytfPXAB1fa+QLwVj56nKidpWHwVnIdNgp/\n8kwm82kl4sMOuUovJzH0LseN6XXWDrWviQFB9ev9Wu6RNOCitrNCx5v3jj6k\nYa0yOYz4TD1uEhYIZ5NwYAVn/uuwPnUN899RAth6lFqthD/ZRs1MhetXDn4a\nY/uNbdoQ/zooN4T22LLFriEyjH5TTGTkgByGhcwrVnIoqu6hs4lPTDQvedkB\nBm6sz/AZxR4C2HhJwhqRzUOKla4LjDG8ZiwNjh9vMu/h4GEdf5/2tkM4RkIM\n6SjB\r\n=jcWR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGl/zYOTPPLln9LHexIs5D8Q0XAIdjU9nqz6Sb6cjMGvAiEAjhhJB4dwtJZJCdcrI39PcAfaYqSR6pg26wuaHKa+Hkc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603287393-4254c3b0.0_1603287513743_0.24229146066566076"},"_hasShrinkwrap":false},"2.24.2-next-1603287503-71333485.0":{"name":"@xdn/core","version":"2.24.2-next-1603287503-71333485.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603287503-71333485.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-o6YNsQcny9Myb0iLCqMkV1I4m50sa53ESr1vAdKhTMyFzbp8CYCNvkoRaOJvE5sSLjdm4073ZGOVadJGvHOBJw==","shasum":"192729980214b4aaea3166ef8fdc3749716bcf47","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603287503-71333485.0.tgz","fileCount":165,"unpackedSize":601552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkDo7CRA9TVsSAnZWagAAjB4P/0BaTr5rCo+F0P3U9jlE\ncA9zlCZjyOaveJ+JHoLcuAEflXDf+BpdSi0Ppn+yG+zDwvrMpP1OX2bmRtVA\nvCVx0KkmcVEHUVEoDHKVQuFp+25S4NeJavD2krNu6LHBDE1JiwePDoAcMZmi\nXG/St//oFtXCg5xb7i6C7TmY9sx2fU2NtpUtUDaDW+jW9GcB6vkYucEDcHer\ni5bbW2SSx2/p2ckOds4GxYvykQjc2UfEz/3kc4FQkv4FdLwRqL0R5d+aBpGU\nyB3tTc/SJfNTQ/EykyBdYXamoGGhxRuAHxo86T0h5GHm2kti383T+Td2Nx1U\nrPFDtyPsueOX44ij4Z2rP0K1An7gGc2s93UIrIowgf/HMg02KUW8qTioIetM\nRBIrB3kxAKEP+S9Bg7yZxLEE/NBmsLQhP2fgATzFdENqXCcEsNhDmlg8oZio\nCWNTiaXTtpHXswhpivQ3kT21AIHKNoaATRCCxFOClJFfDQe3r1KbpAyyXCHq\ntRRKhX+XYQOfqu7LpF8LTbvJCn+0tBG/NupxyFdOsuIUX/9/u4JB7g34Btqz\nQifeWDp57BiM11IfyYQXBdTEUm0Zhg2LiZET5aRgIp+Tflw/XasRLPxm4GTV\nwWS1I/DrjqXjBJiyAWGuB7lO88buGWPJrUFMtvJeVvgIABIJoD16k+Wiqjrn\nEuEC\r\n=+V3n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZGFRzaXrHC/U0TF2W1eRRSIAWE3Yn3ZX6fwptStoHYwIhAKEWhVQJyaonAY8Iy5Io27efEjE/K/GOVgwTPzOiZTw0"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603287503-71333485.0_1603287610594_0.42012096671723276"},"_hasShrinkwrap":false},"2.24.2-next-1603289969-31b650db.0":{"name":"@xdn/core","version":"2.24.2-next-1603289969-31b650db.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603289969-31b650db.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bealrHnOQ2QGV/pwLM+ZWIps/c69h0wcOidzQtjD5KztQ/+lXWqFZ+ifNkaL/tEhIFg4U3+0g00Bj0x8H3TyTQ==","shasum":"10ed39964353be009c2e484bb033c8147e5cd5b3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603289969-31b650db.0.tgz","fileCount":163,"unpackedSize":600355,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkEPnCRA9TVsSAnZWagAA0dcP/21sv25bmftUN8CwUgdf\naascxXMgc1nIi9mZO0ytZ6LmZbgJdfctL1NTixllveFc2AGK8MRh9mJUFfye\nVaAmMWSXdIbhqa77JKZEvcsw1f66/MJRq28Fpla4kLPzn/WpAOgLquPReT6B\nQ9DFd8+X2vuQ8eLhz6THymWmIg2RmzQQjAKC/BMQj7KRuHGw55CVfSrbE/7l\nlRrxJvq63EUG7IN9FtFRjFS2uK7Qp2swDi3q1ts++eh+63oJL7f7n8aS9ATL\ncpf+I8qzLLnIclKTE8ENEbUuMOOsmB83MsL8IWpmA6Q8e2/HnQiwcm6uvQL9\n9I+xsxGuyZ7bY6IR6vQl88I6EaAE+IQ/N36qwDeCe+NexPrEHCGcoBkT/X3J\nQjRjEC5XTwgm6R8DzigK3jvNAxi2yQ/d/UHJ872VrN/CWzmoXJc53dD87RD6\nc67Pncy9vatzBzZy33Xh0ZVMSioHNFwu9OJwBTZWgX11eDj8vK7A9ml/HLTm\niBO00ell/EhmlKAUKCZPU7l84R0VvN91smdSRO23YIF38lYiZGpYaSEZBLKH\n1TUWvvBQwX4ISs943jM3BgNPGYqJiN+BMn0fvMwqOi925NkdgSV8qiFac+Wv\nSEooS/Cc1gkjk3sy9+EQzi2ThM0YSn3J7GqC8W92CJfb9Hg3hLo2JSXDweiu\nsCnd\r\n=VSNY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB6p60s/C6kqmVkGlkA6+mv8YGLHZnEubs/gsSQTIfV5AiEAp7mWyvtP0DbONAQNeV67y38wO15/wyovePnxkROceSI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603289969-31b650db.0_1603290087147_0.13448510021906435"},"_hasShrinkwrap":false},"2.24.2-next-1603290728-31b650db.0":{"name":"@xdn/core","version":"2.24.2-next-1603290728-31b650db.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603290728-31b650db.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FhMohyNJJqBVSkO22f1Y66iebdwP+957NEzEAMClptd4DtBTAdd8mjZLdSXVgIqTTTLqNpCWU8iIuDRIoJZBKw==","shasum":"de0423797bd6287231e24bb5340fce0877379f54","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603290728-31b650db.0.tgz","fileCount":163,"unpackedSize":600355,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkEbZCRA9TVsSAnZWagAAYbIP/2BlAhCV6jsq8bRNdoMs\nyIxaFZR3YRzhanbFct/bMNpmqMuZpdvEZnsf6WGl6uNS92xUIO9x78Hy1J6g\nCHp3bKp0q8LV+4h7lrLhWHFS7RqL2PyEGKvedYeKzRHhKn9Dufdt5seqAilj\nWB9tTNKQXWdk624y014B+gXaM/Z8KWPn4oHCq2DmDJiLsKm8PPiO95IGIjx/\nt9w87f26NcLQYCIx7I/k5sIluOFcHmWOjLoYyGz45kjIeed8z1ihP2pBItYT\nbl+oYMws03+6Nb2aRotFnNNX4oL3bdfmTOM5Rdh20PBYeHw7ThKBrrWlgdF0\nXzO00+scfJGGQsZWlt1cuFJ3ZnzGtcimAJpQ9Y0170yX5/ANCkd9mX/OXwwK\nZ/NNz4aP0pcTGMAUGvuVvQLQVnMJp8mdy7f+V0aA686ophqJGHW2Vsh37wJi\nfBVMXWWZDInzQbInxYHrb/jmx/AeDBg2uoN0i/WABi2kKllmOTyJ4mmY+RYk\nBNZkL/72tJqoRxtWClcNcSDLQb8WJor2ZoDiXn9Pd77+aFGXoY91YaF0lf9E\noLv8rOp4B7vlnXg5ygzspD/+rEXEPuML/GRQLQxEHD49/nSzlXfEoFr+nApP\nEGxwR1dMBKly6WEy62JOoxOq8eEZdulfOuQqy5X25jcA7sPfInX7F+/u854w\nEvDJ\r\n=seZD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCC2mIGbkrm15rkz0r3cSg9COFXI3ZaAQLoMe1CR0mcyAIgZ9YMk/0A8dPlBh+RnVuSgMZrNxhNecA6XbXwRbAsa9Q="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603290728-31b650db.0_1603290841226_0.21325634430127627"},"_hasShrinkwrap":false},"2.24.2-next-1603295610-dc4c4f7f.0":{"name":"@xdn/core","version":"2.24.2-next-1603295610-dc4c4f7f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603295610-dc4c4f7f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ruD5T+hkT+yChNPg9Jpj4tzqNorY/q4WKL8A++JAtgeg/oixCZrMO3uQOPvZ6+Hjpe+kpM9LTOGeuWAJL2Cc/A==","shasum":"d654b0da6dbce43359c1c9fc0469c268830ca5e4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603295610-dc4c4f7f.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkFn1CRA9TVsSAnZWagAAzbQQAJH5LWim2kBN256RgqUF\nPTdAzW5byeDvkmtkjUrLC8EdUe6Ub/H1GeaL/rX04AbIlp4ZgUE3dF7U07pz\nUw59T/bSTyaIWB1tZYg/PlqqBfXs2qwmJzQCnQCnluQJd42sxSHol4gHuZTo\n6qTbYTBdwo8tnoUwL22xz8zFafw3VFnNBiGIT97kgBcUXdVysUXHKGloFNrg\nCqzPG9luxcN5trIQ2jdw34lGmDA38fguFtqMK6OxOcO+vrwTR2tB47nEVWv0\n7JpRQoPm79kBUxbowE4O666pwTGgJ/6XNhH9gZf0lqysR2mhDiAYj+3efZoe\nTHgJmZfvxJ/5C9vKaIaJhxR1bDMVRv37/VDa7qz7IujbPz8g0g3hgSkUbODK\nOblHCKqiSX4Hprqem93xDn1ZdjZRbjk1HC5/CNumjnqGPteKhzPFbmGfTlVT\nOZ5qgKp9kR9Rm7ohk+/qkovZbNhzqibgEVnrv1iHMgBvUPDJkIGw6Ezgqu3l\nqEudfAZSRZZTgLn7SMIbgIlZyyrtmi6Is322F8EVOxl8c5gc+qoJ1pRRjXon\nggjQJpP/qfKyuG/jWnpG6JvNRnUjX6/2sihWJaVq5MMrJwWfPMCHhkLMfNqq\nAWxIorkl47FkXBwZxyW5woZa8H1dc9KNsuzmhkLIn2OtDOLMUv7OgE6Fn5tH\n65tv\r\n=DoBn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCR00mh3DyvMte46mUF3qTOM7smksFjchXTEetzajlwXgIgDhnmmcIlF0Vq+5wd6rWopdgRMxxMas9q2JE1tRLrhk0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603295610-dc4c4f7f.0_1603295732593_0.3481216498711821"},"_hasShrinkwrap":false},"2.24.2-next-1603296038-7e80c90d.0":{"name":"@xdn/core","version":"2.24.2-next-1603296038-7e80c90d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603296038-7e80c90d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1fq2h8g0YfbbyXuzzbt8+YhL9LrA2nyplYfp2/dZRNTGqC6WTg0G0K4s92iV+WiACE53x8mtc3tQDzXEzVywZw==","shasum":"f4ff2277e6d42e0d28379e5232b4b6344f48d025","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603296038-7e80c90d.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkFuaCRA9TVsSAnZWagAAtE0P/38kl50DdLH/QsleDvx/\nUq9GyANVV4sL7yLsTcLNR9k8Poxu77g5V+F6p59El4xeLjy56ZhjBcXfabFD\nTLp58iS3NOpqQNzs5otbBPRJkv2jZdi8oJY1mNZ/TNaNVjTUPnfegkNvy0+M\nbBv9k7R6yp/UKJF3AZx11gfNdfLJoXfE7d5Kd+EHt4RtUa5IIQug8t8yaCwG\ncAo+/LpEqKYEv7neE0kelj/PNdZFXMA/x5opq0lAPfDurfOIDcd0QJ2iaud8\nGxp3Dd/bI5EYk8eh9GyMoFlr0dDLgE7wNeEvqx2dzSoYQqsi34t1NvoEkC7f\njj/CiSpXESsrg90BwxAtIRLEvpJdDt5Du7gYzBgEEDKvj9j6fGFB9Pe5eAYT\n5i11YsXk1ckvwb1ZD9Qk8g+6G125CeVvB59zYgdCQS3/9Wt2ETRv5B13TA/U\npWBio/TppeRLt3JlxECSqKgAuVLyoTLlafU/Dp5xQqkvmhQHadWHoG7HGRxW\nxpCcLGAA2nH9KRdSTA2arRNgMj6tUJM+KcxAEHNr/eg4Ta8QmB6mlKhKxxy2\n03s8lbsByLhvZ9nSA41VvZEXrN1khUZQW6VcHAac2F4L7axRi14Af3qpp873\nOhuM+DQtfPHmvrO/q2tMRvZEKP5ss+MjY9qDQ33JsPxTzcTgTC7C1yqM6eIB\nX9VY\r\n=vNnr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNPa4DfbvOBoorw+GEtQBJP0MYUUEaRzdAl1t85AaknAIhAOl0ievbSY8GwTGeHPGr8sSy7NJz1S7BZup5lJLjjSDl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603296038-7e80c90d.0_1603296153927_0.4389687383180616"},"_hasShrinkwrap":false},"2.24.2-next-1603359410-15ef4c7d.0":{"name":"@xdn/core","version":"2.24.2-next-1603359410-15ef4c7d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603359410-15ef4c7d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-W+XQ16xsHzdJf6JzvOtv3cdGjvCsB8qkZSJ3Y6CPDRLC/jO4QXIE0E4zPe9xaCj1WVsUmljHC9cjUKxVeZLnwg==","shasum":"26533f079947e9f58c33aab212575c8ca1b7aaa6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603359410-15ef4c7d.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkVMhCRA9TVsSAnZWagAAVYcQAIc0MMMBl65XiUdsQs1l\n0PqBfmUq8hca4f17IN9AqgPCJ/UobxrN2q6YPbcRorhjoWpOPpIPU4VxFtCT\nXrceZw4cUCl+mdrWgFELRg3sLW6/J69F87ORctWGjYyYQFa4cK2ROkyDGoMk\npxd7Z1cv8UoZqG6RQkd7oCYZDf0fd6XhCRqniFCl7AweFOOVn7qBzWE1VhWq\nOiQk2jElIkDY6cGV1jtKC5vhHg/VxmPcFLtuQ3A5SrHDDxvzm1kaDNuVUr4f\n0ZnQyOCgTHNCMmci4R2HZbhJBJWXbRVlSHsQl872itIuO67hoHAF8R16jVdE\nUzZKM9ornPICDBvUHRFv1iRnDb2so79VHSWZ5JoQmNz9AitzLAPtl1MaKR9u\nosIlm5Ko9psiHqA/y7zg96EwmgDIz6CM/NwcW5qWAuS1AQvmFaX5v2aiQ0GI\n5Tp/YEvR4MHMyIfclziRy6sRHCqpS3HRljR/OccHlYtWugyvVVfKEE9q77vh\n9nTHZQFd/uqvoFMggGY0qxx3S/NUgBgFe4P3o8r3Vhk6WGAMGpM4r5LfKSig\nFw76Fspkq5cTdfLR/l5PyYW1zh8ZR/Yo5qfelMhQBV+wanfU02ZgsEc7YyJZ\nJFj3zr70D2yF3VGBeetA23N9NjC7WS4XK6PIb8OL+e19TY2vbV5dQ6SyKcsr\nVXHd\r\n=zeFr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeK16/+ZcFR09T9kKE17cXQsq2sxj7Y4oJvFfuNT0oTwIhAO5cStM0do1kc44XlqPedg7Cxq1YbJkzaTPZcXbsJMWr"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603359410-15ef4c7d.0_1603359520476_0.27321864568189724"},"_hasShrinkwrap":false},"2.24.2-next-1603360478-5d6af2c3.0":{"name":"@xdn/core","version":"2.24.2-next-1603360478-5d6af2c3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603360478-5d6af2c3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-WAdV4vWqbK3VJ8EbioXxZ8SBWHuqIoxQCeVleB5kGD0AQxthrR4fYLDX4OHQjE517F/6hoHIPpGwkfxk4vQiPA==","shasum":"ea3b04199214e4a8e96973a62366f812ca81d574","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603360478-5d6af2c3.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkVdYCRA9TVsSAnZWagAAnPkQAKGh4or5rVWo2KH+cC6F\nw3j9H5ZzUCRG1/PkQ3VWalUVEmM+QyveGedhTx9KAH6Po8HOCTOz+qt+gwfr\nYAs5PBuf1QRGTQhEKE8vMX/RqaIGmwZ7K2gXHWjKh025DhOcI12ugCGGh3ZJ\n0V7gH5iqa50ks6ms8Brv738FRYxV3y8FuvbIMvfLLQ1ZAmk8hBN/391Z5B8x\nxl+sBOpCqxPYdILs8kch1YHq2nnTL0Pgglu48poBqopkImL0Bn5HmQ0kDPgv\nz4jx8bUnb+iBObYZahatvCu/mNsHSvS0E8q2YxdjUjVbBhfBFYcfUrazhtQp\nVCaCyofvnogtZV9Ur4G4ZpPamlM2YfPdyDadXsUKXyzaGydcnuP6uP7ADqfn\nRhBFM7JG/rtyJJcdJV28vCKLRbKkr1+1cyAClH0BKR9oAn8EuUhvNLw5vhPD\nOyfOUZPa62YY773lUBKCsRfTK6wNAYLbAck2YjWR4SCk03FlzLY8i2jfCdPc\n13ntv+RAxMDUwwLxEWsWrAkhP0DV/+eWg6p8S6drkKdVpp6yfrgWuM7dGtuK\nV6ZCfPWe4BQ7fLDOMJT+FduxFxcFB8HuAuGF2iQVqU5gCodPuRyavuVIbs59\no7To4k9X1xE662psozE125or3RqLKrtADv7GwYvrKqffiXRTdHsHtZIruCJE\nWgKW\r\n=1bL/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDXBdk7iUIcsL33PkuWDNYLFdfPhrCb4l2wEZC9A4AgzAiAhGtOZPc7jFydXHSe3XTfX5CH+jYrKSP2OkMGggZKrOw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603360478-5d6af2c3.0_1603360599725_0.3599642309659612"},"_hasShrinkwrap":false},"2.24.2-next-1603360660-e02a39f1.0":{"name":"@xdn/core","version":"2.24.2-next-1603360660-e02a39f1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603360660-e02a39f1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0Z6DxjPtoI5WQH2ckCtpN4nSFP2RN+Qx90KL9zz2t1abhw56GRLjhnoGDxW/VKNb7l6ryLD+w/Xm8+MybNsLJg==","shasum":"09cae8edcb2a50d653ce702a1dbae7770415973b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603360660-e02a39f1.0.tgz","fileCount":163,"unpackedSize":600251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkVgBCRA9TVsSAnZWagAA7fQP/138oJe3qeo6ksf5Z0OB\nChUvtPxua3m09i1ZrMhgUAJQvQlmL5B7Qe5QSRN43IdmALx6wuy5L0UpEJtJ\nP8RFWzPzSeq2JPU4cdlS1bh6Ew82wev4T/ezBywszVQiT+bfNCihES74syb3\njGMbFuLW6eEFyvEbhE4sXKYKQ5Xc4JeJB2kJDnop5dUHqU0SzpE2OHXgBPGO\nbQ6Z8+hMLgbWuFYvr+Zz+b5LaWEsGpJoph4uQqArboN5blkr20gbpeYp2DuB\nwQgTvKGzmKZntSWGIe0fM8T0hOZWwzELxvoE61R1c9ttU6poQ7/Yf/+Ct/9K\nGMA6ac8TUT8U/EWL3cv4A2bGxeykH8nHgrJT6gCQYWyaCJiKlu+dkqJygYkK\n9aCOM/B8XmwTuTPm8Gm6Xbq8hzkPG9TdK0/9Kaf3/2BYTaw16Di5EMq4CTM6\n9w/ASTh83lBwEA+epXHNfCetuyO7GXmpw2IwJGV7S5H1jf5s6KmlHKY95Wlx\nJMJJCbFSyz4H/IIabuoTi0UB2P5bOnzlpA0Db75D0oB3oBWfIqmUEROaWNAn\nbD6Kafh+wPlF9vpzg0lqpgW7tVPt3aH3qkUkIa15G3swUekx9gK6fqUMtuuz\nTbd6v/cvJsGUT5McCd6vHA/bJ+C3gfpcqrWvfIcBG25AeV0kvLaXWhbisQvh\npFor\r\n=ffBr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDsiIqJpmdz3toNSC8WN9jZj/DtZRZ+EYS9N53XSBeqRAiB7AXuavNkWyEQYo45NZNVPpK2FEd5HlVT5GZP2Peb1rg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603360660-e02a39f1.0_1603360769038_0.6387214175330189"},"_hasShrinkwrap":false},"2.24.2-next-1603360783-7bbaa571.0":{"name":"@xdn/core","version":"2.24.2-next-1603360783-7bbaa571.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603360783-7bbaa571.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-WDv1NB1MnmXbHyArb/gN1fEHqFiaIkQQK5euISHhIffqhJymcnfB3frwMJrrlwBZtmS62/zNP/QAZl1bjM/d2A==","shasum":"5488fd85d2dc99bd11392ab8a2e88fdc55bc6e9d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603360783-7bbaa571.0.tgz","fileCount":163,"unpackedSize":600649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkVh2CRA9TVsSAnZWagAANgAP/R1dqpa+twRPmaFdrEyT\nLjwgPgIwDwZYySO1SNXolGWy7lEWb01xId3eWUQqMB6cKVBWJQDkZbBHJDh0\nzTilLREFD/pMBfpCEi3XFZ9i8rnY1sM07lLqwsbdlaUkhTBBYwg48TuS6BmS\niQtYbFwUSJbRdCE8SxkGiRa+g2FuY6B/8Fl3zTLBrTCeQR3ZbpsLLfR7iPj7\noOQxc/xlh1+TMDqrA91h13aj3tc9h96MBnNOS+cqB+u2peL0WJVNfi2Pp2C9\n2ga7K8CaDZan8fwgRsggmZyEGilyw2RuIMmCF6HctoT4OKK4qxQ5PZMk3Lcr\njm0w5F1TivSSRLPOdZj0jpCVEnTnJpNTAKeb/Fer28C/hswdFaTf642v9seo\n7UZIc76Rz2KkhUsyWZPLnneMfa5Itq4pRgVG1Lw/N/QAmpNRsPz7n9lLqPLt\nQTRTbNmhIhH2DyeRJjucmmIEmFjSzlbs7MyMPjLxVHgs27L2lEQO8L6Deasa\nIlg62nVV0FXukSq/rpgsI+QFUaIBXiGGd6zoij/9FV4FfBpLVqR5NgMpqmya\nMDAB95Xi3XyX3CxdcybAvaPgaaZjKMfKN3XJQXBSoD2hGFY55iYLTdNyFkWN\ndQudcuJB6afLQmrMitadT1KiMXvGlL61CV5EGbU0GNNv44OEVUA2lKBVBmrC\npUs0\r\n=xLi3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIACEYeIBWQuo71KXLa3GC7Y/7kGb7YQYlCpzCUgB2JfcAiAkbY0l+RF3SPMZH/WRxwil2ggZcxRbGgeSyjFkTuh0tw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603360783-7bbaa571.0_1603360886420_0.37180388957643307"},"_hasShrinkwrap":false},"2.24.2-next-1603364436-7bbaa571.0":{"name":"@xdn/core","version":"2.24.2-next-1603364436-7bbaa571.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603364436-7bbaa571.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3v4xbTPIZnqVnwHvmjCY0A6iOgHI+AIkSWJxdY0np/YzaUORplTnlz0OghozoJKqX44QS9jOV3y+1Bq2GlS1WA==","shasum":"60f091cfe4cf5857651e1ab22fd4328d60113784","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603364436-7bbaa571.0.tgz","fileCount":163,"unpackedSize":600649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkWa8CRA9TVsSAnZWagAAq7IP/jTpHSHwRERV3ip4xj2f\nU704xP2Ld28Z56KoOZD48a0ez0gEyrc7AyhPExcc3hrtwPNyYVVtZKOtuMFI\noxEUEQffkUusCENA4bTH6Ucy52vcQGpDa4vw9E9B0QKIhlgIJpWKUyqXTu7P\nG1ennRC9Cg7RJp6ueVBypAv7y1o5rHn0UDiYAI8I5fUfCw63DC2b3EzUte6b\n5flU8daW4r2W9otR1HpTp/cHEuRaDTBcAlfWzF8jHZOadgBPsR0wf2SNOwWL\nb9UfAOMgudM++F3MHZ6wL3HeVYDvHIoPU3dYJbHResGUz79F3gsImhqsw1n9\nB80zfJDONJy1R3f3VW7+ZYlP1m+T4QPjVvAg1EGjX8twk71oBUfBvLD7uPEh\n8V7ECl0D9KfKhQ8JgLSY299J3cfhVatCrpV0JxnSVhPefH6dHe6SszS/jIu6\nnRkohUCEYLw4BAJVna67YKNfz0yfook+Z2ccYal2kcH9S7ABIQOVU0CBPsPX\nlqu1pWFM95vw7JhwGQso88byB1ywpune1EC88zUe4PD2fMTX9g1Dfk89fx0T\nodS8zulpp1sgK/HckhWImMHn6tLa1NQHmkZ8fbeDs2eRgy7BkXXBDT50WjcY\nNB4DabxuuPwGdS7peBlKNk0ywyO2ZnsfVaJtSjXX/fcEOwX7xBKpf0SIi/kJ\nXxZl\r\n=EdtA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHoJw6OGxFC2Oa21nw5uVZ2XO1ZO61dawiMYkrgH33xIAiAYWM0WMeaJEJunp2PJ0cx9xX5STVQnaJIkTqBpdsJ8Kg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603364436-7bbaa571.0_1603364539617_0.2737113047138111"},"_hasShrinkwrap":false},"2.24.2-next-1603365548-7bbaa571.0":{"name":"@xdn/core","version":"2.24.2-next-1603365548-7bbaa571.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603365548-7bbaa571.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Uct/MvrkJOiOZKoXWMOuNDOTAAzc/fLzbPp95ot5zYZHu2Zo698ONe16/X+jJ9+C7T+3M3kd2qhI42mdc+yXEA==","shasum":"b90d34a747e07fb3c81cafbbf5ac0303cb9338c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603365548-7bbaa571.0.tgz","fileCount":163,"unpackedSize":600649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkWsdCRA9TVsSAnZWagAALHsQAIAuc/kU03hlsMPtDA+z\nVWRUtLvL6mudv9fs+GuANd0N7K0fDAXKenYZj0Oxh8L1OaR3UhOdQEEa2Dc6\nQ+PCDv4bVlrIww8iFnET/idAw8QWdw7M+9Ve+ByIfejTSw+d8fSiG5Pop1N7\nAjAOPh7eOfFmOWMbwK4NZJKJZlRmbl3eDIaI4PbstFjXa3F7UhqNrhAwCyjD\n44FKfC/69vq+cY4627JhxuJQQKDdFZQKZVu2tbYag3Padh9Y0oeyYFlliaep\nCE2TwFTR2DyC7MoNU66z/pRsh5NL9SdJN0EsdV6Ps0CUq87kMSB1CFv1jOcH\nlVSN+dTDesgBnTucLzbVfNRZCSBG8hdhRfgPP/D/Wfx/8G7DzDETnjDA6KfN\neEWK0jCEYjM6e+96r4qBhcrCfggCaol7a0cKRV/rEHkgMb26gNSFQvorSStI\nMit2oR9zBI4hXoqKjPE7lg/mYzbDJ57iF9ylDATODUltiRgdmVUyLBrwtCi6\nBUgGffafB+JD+/UFAklauNyQsM1z1VpE5Low5mj8p+9nT2zhgxdlQg8zDC8m\nO7mS291YuE/M6bzpP1znUf1VtdiPwIATIgJ7ttljW83qvx7FUivbclXc7FKC\nauIEy/1wFVz03wOxkKTkiHgbLZ1vZsDG6Zj9WZ4/k6Tn4uIrmeNroL3E32oo\nHLn+\r\n=yTNX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUpw112pfGI0JTLczJYGSf+H7uAFhhLhTgUusJEsXYtAIhAOBlhg9Z/wpTYtoP/a8LkXwuUW4xhF0kQPnnCj7MgYOj"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603365548-7bbaa571.0_1603365660946_0.9454272399670678"},"_hasShrinkwrap":false},"2.24.2-next-1603366373-f9d8b020.0":{"name":"@xdn/core","version":"2.24.2-next-1603366373-f9d8b020.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603366373-f9d8b020.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-h8Bejl0ZnsUKSZW0Zp9qTAQiJMdwhfpgBEjSV2QYsbAErwkWTjZA/6STB866DDAMigRwOFEwWH9t69x/xgsiiw==","shasum":"787531d46ea11e38c078df2d922e26557a232d14","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603366373-f9d8b020.0.tgz","fileCount":163,"unpackedSize":600649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkW5UCRA9TVsSAnZWagAAdJgP/R6uvDE1T/RITUMRoE8j\nbaR/DCZz+jGCya+censWrKdOUrtqKEAFCKdizBEzdyw/LXH6L+TUQ3RPGKW9\n+FNRlskwI4Zmn6AolPwDT88AP24a8mtatf7SPvRAMuZa3KT9c3fRJj/ljZY9\nE2MIdhSGvnwU84UDb9BdXDjV0gncB5J+Slw+XfnLgPIQKDFwmiJ0GOvDKw/z\nNiE++gQQCtZShF1VDb5Qkknw1dfr/rWh4KtFTvLGL++unijp0hfknKJpmZlY\n+YE2Upt7CVYLnl8SYudHGsR53TFj45QysvY5ovCqzSFMfoDhiqpdHvMmO+R8\nGe7iV/f1Hibp2ESgzwpmci/jxMpANHysILhnLyn9IxMad1f6C0SEs5E0seWs\nlLQUhVDLt+YLJpglAngDVgkTbuCYmsy1BtnIJkrl75+K8G9ERpeNgzZ7HIDo\nRPAWJ2D4YROLY8AYG1K54gil/5TBN8lpVMSPAc+H/zhG3bAnA2j3rXFE2ve1\nF39uoWEgnzinKetHQ4FfuIjNTMMtoi0NLpYwbZapdYvNhSS6wfqH04llVJ1u\nfO97dYaY5zXUo7HROmF+vls9JAksKAF70d0Di5QKIJgEDuwSEykDFTvaEfAG\nGz0qygjS3ohShjikOdEi4awJCkNXNNtg/3Ji9QVq9/vGP8O8aMyHmQ+SmUR4\n+fkf\r\n=dWH7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAJasZYE/rCcOdwTenJiq4evjWSUX1AO9IL62Y0GTQO/AiEA+budCJK59EgGowFRrUKfrRW85FTAAldgT569VcXjchI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603366373-f9d8b020.0_1603366483697_0.6169782156102694"},"_hasShrinkwrap":false},"2.24.2-next-1603366564-ac9acdb8.0":{"name":"@xdn/core","version":"2.24.2-next-1603366564-ac9acdb8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603366564-ac9acdb8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-fDJSIXGSKctbB9EKq09nbHnq5xAolDYeh0rnT6LIOlHWJJeYsO9p1Ur7wvimNvIL4g8kOZCmlpywbF/K095bZg==","shasum":"d9f07afb91484fb53257c025cf2a3e1b5eb6a141","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603366564-ac9acdb8.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkW8cCRA9TVsSAnZWagAAyyEQAKFbvsZLldjLnk4fb1ez\n8+7xJgZ2kilgf76jvbRj6taD8anZLBcgvhy47cSfhU4/155tdRZI9Yx4Hpqy\nWtDWWr5BEiR1P+Kq78Sk6aVt8BZVpGWbFHIGscJgYMoxP4gqwrJgFD10DB/h\nidxpKWIIEhzJawrA17OqIrPVQGAyFm8n04EOjjEIRRNNL8tS8iO8rc08ChsA\nBk8qOO5BRYH3FhCElLYGaD0ktKwEsf6+1kAEJ5OvOGjCjFHmbRQ8VhRE1mW1\n3I9HXI9G8Ad2naaO5RQmnnwgurR+LKwvzHe0papuxtI2M4+g1dv2k1VgkGAW\npD9kGbTOG2YV5U8eoPJfd3Gi0UwccWs9sv1T28mlpZcGy4Sqn0892uHiQouW\nFka1NCfCgiGr9WnNqKi8RcyBR0Zdz2MMsorPDtNpAorckZjyIKX9RGIUFKya\nuUdN0ROmDIBQVTsfJT3ZImX9yXaGYz6QSGWE9MClOBJ8YSTzdJjB3YEdODl1\nzSQbdRZGHu7BFMG9rxI7gzO5cg+8ydt2GjxkDJ1C+Q6/tGWvZvUJ9/GQATgh\nMfXK75Lo07r5iBjYPZBjq56JiLpEzPNsK97JrDuCbtlDSJtnAaE6hjjx+nRD\nYtnyX5H31b5ugiqN0vHWv4Fmh/pmvJzLybv7knW2ZiffwolIOo49l8FVo8p9\nPUKB\r\n=TI7w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9BR9ggRsUEnApMzLC9spRdKo1O5KerAKdILr60sjJzgIhAL0iJ5JgV3LHO5dacNA2g03wVrpuyU9pW7IevxqPDn4p"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603366564-ac9acdb8.0_1603366683882_0.6540859848967793"},"_hasShrinkwrap":false},"2.24.2-next-1603366688-f42fff92.0":{"name":"@xdn/core","version":"2.24.2-next-1603366688-f42fff92.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603366688-f42fff92.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4Mszz2SUx1zOXh1gEolZekp1Tmo2DO7Q9dljQLNHcJDqXr3bzb/FhGQ652u7LmrWha/XmFVUWoNBUgHBoYuDzw==","shasum":"c72f8665c00f21fbfc69c73749e9d5d69dd2deaa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603366688-f42fff92.0.tgz","fileCount":165,"unpackedSize":615156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkW+eCRA9TVsSAnZWagAASvAP/1y3YAYKw5J31ACH2mTM\nK+0wIs1dHetHXOGAZ8IQLtcwLL9Xoo7swRjf1FergUIQOoQ7OuUcEsi06jO1\nY/+QmVu2PZwGz731+Pq9DkSWmePoUkGaCQb6aoCemRBdIj7CKd+T+l7L+aUu\nc4EAlYxxqTWT4CfF6w79AX2LWYQ8Cj/oFONxzAn3GzOajW8Y9/TqJTj5+mOt\nY1yMzUjR0ZXnel/prukQMJSypOgiJlRrncrOiQi0n3H4MBcvs7VJr0/MObqf\n53cXIQaelOnp7YNEsPaQoImVE5Fav0qbgVkAqT/lb+U9r+DS7rPto7eMx+zj\nyKy/Bb5n2R0H+V3Iah3od8thLk4w9S4aLHBNTWFbglORN4u7wdZoNqUNnieH\nO/4Vk8h1nSF53mDj7H5/bY2LiHUw5l8IV+OoyGqAoHFC4UWIqNpYdzNkW3Zl\nHpN5aTaz1OKhkSyoP/hjZDdj7PbBNbbt3ZrZcwHPjLVvArfyN4q5QFSCWFUK\nrEo0QuPzfXagPDPsGE52gzhlLAnp8hxUz/eZO3GHzMmgL4AJ24iovOtskM+B\n50Rp83rVwiuzhkk9bu3SxJiU048Ld3v2fu/qNEEeDuRJP/zIJZvhidfFpsjL\nJ1a/b6oEq2IVLa6929Rfhw7J6E+5RVvr4sdTuxsNF8dcHl3dk173ZGVdjRlD\n/Gtc\r\n=aAVi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWsfHbDDYMdTxoEWQhwo3qhlKKpchzIfdWNxURPWNm+QIhAJXjqC/58UjyQIEbWmg2RMMl5lAyS9fd2ehLRfKlRGxG"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603366688-f42fff92.0_1603366813528_0.7141668780921371"},"_hasShrinkwrap":false},"2.24.2-next-1603367483-5b2fc941.0":{"name":"@xdn/core","version":"2.24.2-next-1603367483-5b2fc941.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603367483-5b2fc941.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-h7I08zls1ZZmqhtMT3tpY6X4Jd5seljbMlFyqMdgHQKoRl2CYJcX/xo9+dejFnnh8frnKU0b4OSwyfkPJ/BzWA==","shasum":"89904e5a70d7cd4af94cfd3d1cd91c05ca4ff6cc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603367483-5b2fc941.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkXK6CRA9TVsSAnZWagAAm0wP+wbSLZk9IGFbHP7KLen0\npVgKWqZ1sO0rDUE5qVIH3mD7f9RxwwEwdHqtVYZZ2KGTTfAif1WIGpzejHkC\nVze1e23H5H5YhA+oiW7WpAJBZ/+3XW68YQPiSP7jYzRx4G6w7xgw9TZLdjzt\nO9OfFXG+oMnnSaua9SXqDG4+6uhcJHeyiuCyHkqzL3JoDlH3VvQw+BBPKf4C\n0dFr/yS2VhTK/W+Y/TekLPnEPHbuUzBAYE+bWPlVo4N8oUeErQIUKMp6ewsb\nhXUr6Uke3UPYgskWEBnhVsQidwPsPLraVHH6y71UXNm7XZ/F1pTY9JVVjJbM\nRoz9kRrKdeKEHJCgY3fCZow4cWhQxr5CNY5VVlxaxN4jDODIs6qTerslRvLM\nmaCg/LPvF5+JU4qnUkThgdldlGBnhjZIo+LL1VzF7kIGCym/BDzD2J8TJEWA\nypIdIZFyuDZuua5gIoV2MnPOmypcFSKRWKHc3dL6uYyVmETwWqaBF30wgI02\nxteHLH436QwiQKdMNloM4BFn64HCUITo2XPxdajQMw8ByFSlw9C0DFuGgbY7\nVA5Qqb6DLGnZwaFlPIHyBrHKix6yiM7nPPkBIPMbvHgGCsORk5dC1jq+jZjs\nN2d2DB6GKHgShWL3suhSpmLAakN+AHq7dzrY1jqGm5gN2S7i1Zj91ehFIepS\nPrhO\r\n=cYa3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ0/0bihtUO3sF2ifnNYq408WLWI1+jfWjNTwPiwagEwIgQ+S7qMTFUxUZh8t+oBs5WgjHMveKbd+jto3fYA9xqMU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603367483-5b2fc941.0_1603367609730_0.3035514092259093"},"_hasShrinkwrap":false},"2.24.2-next-1603368242-5b2fc941.0":{"name":"@xdn/core","version":"2.24.2-next-1603368242-5b2fc941.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603368242-5b2fc941.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ANsAOH+4DTI85zU0AdzNpqCGz3saBVNQ6cGErnMWHbIx+WBOtDnAIDj6dwViuWxzT5v/xDiwHkjXw+cFIEZ+gw==","shasum":"99e49f41691c334c0715b9702a547191b7c788cb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603368242-5b2fc941.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkXWoCRA9TVsSAnZWagAAG54QAKMFxvmU4OtErtjT2lHX\na58dw0y1mn6NBLjpW0XO7Ez1qpAWmps2z959ToOxz2jhhhTwYlR+iDqOAFUq\nWesE7+lPTx1i7OiwEURo6t6I6pZ4CwrvjGwmKe2LHlQLWEcU5Ld2qCRGz1mx\neYZa6Dz2788XTEHoH6FJTjO/0kuMH5Tqo0qLXAJgLqt3MCbG4diP6fHBj6LC\nzU2uJxitt1aBc+fTT5buVgY1iY9egpWCCcWCAZNCp1XNomj+H7FXdHG7+Sxe\nuqNGASnjmM0Dk8hmi4R+X8OtqNhNnPul8i8E2UDNBtNefPb/ryR1vuui+f53\nh8/bskSjvlCMhh4jguPE4JgVOxaN6Oxi9fVWspmgNQDakRyG2ipdhNQ26Mqb\nqLBkbG9QxdYgTOneXMr5tHJkP1S+AbBauOV4MylhF58wT40JdFihf5n8RflS\nZ/PFmeLr81NGewm5K2dCZg7HlqMnfwYsWlkew2taqR307qIh1J0SutN1I8v9\nYrEv2wmU/8yNKRhphKKuzw7AdbrqcG7RTkV8tmgpDa+qz3T17NexyplMLUzs\n+UoPMLQwSpQzYi5aQE6DhnTvf7w5G7lyKqpjn+qgGjYeWM2/shZukyLqJ22W\nLq9jUINq31w51S2KlSCEGMuh+A7dMbORNSvLxPX+EGSHPSm7QX2502CchYXI\nQkxg\r\n=5+Gz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH0Q7trhDiR8/jUi7OkNhToezbBJzfDCPWqaSRYM+u9ZAiEA4urCTXkTICIifh6Sp70gLhj7h3ZPZgPsdZAnnKt1Rrk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603368242-5b2fc941.0_1603368359895_0.9187305673752875"},"_hasShrinkwrap":false},"2.24.2-next-1603371880-5b2fc941.0":{"name":"@xdn/core","version":"2.24.2-next-1603371880-5b2fc941.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603371880-5b2fc941.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-sv/mXPIonXDHVs4TIfmJpq9kGBmYD6I/6lsIDxCKaNaB3w/w//DyMdJu9IjuaDDChjpSW1Y2Gu1c01RbT6U18g==","shasum":"b289018da564ef5129f262fcf0abdf3629f09aec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603371880-5b2fc941.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkYPeCRA9TVsSAnZWagAAhgwP/3qGpG5hQFGPRKxGDpkQ\ne2gudMNqMONh3K7LZaKFlKkKc8A78KMZcOunp6Ioo1JCbDcvAlwmBMkHAKKR\nKEm7+lJdUZ5UFCRpoXUQjFJ7FEY4bR9TI/B2ZqntIuKBqbGGgzCOei6o7v4E\n4muMz57gYWOqYO7i31XPUa0lKQF/1axZxhd4rF6E+E6Nn8gzRXRtoDb/IB4q\nuNHyfEYE5Y+SXF12gpvoarh86QjjtwGOEqw9MJL1Q7Z9u2Xw8nElCZKklnYe\nxvSDbX7GscYF25542sTp9tPYm13n67w0pzZVeK8K9HnrfVWNk1Il4Dxe0suW\nYQn2OVzOiaF22pdUB3vDzsVQ+Bwe6Xw+4aQYKvvyLiJ2ui8tqaH3IGyoxV+H\nIKmuf/VFfdSpJ4erSp+VzwxTGPUoYTJDXcsqcwm5pn3Cpage9t22Mu1X7lPq\nCU+1pdyanDhe7d5Ie73pWWx4jPqmjki6we0b6ryIZFnH7Kg5K0PlOB4uKQ5l\nerevLaYOjwSIQea2nOV1oY0DLf6zn7rOgA1LamRZZs6ODa4dEQkKXwBUeW75\niXDSczFu1SdB0LVu/TwEcgXadn8cOz1blrKzHhLujxa8sUPz0Cw+DAoyEDtr\nwfAeEK/a/OU8RcVW9RK8LthF51gsRnbLu6EAhWrEnQ/g9oLoVQGnAevI+jeW\nd+/s\r\n=ygch\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6W2ltrsRw/7BbnBwdtdDhtwjIfSh84H4fCWYBZfpcKQIgUCKYJ35Ytqa4gHr4pEKolyamtG4qf7WFBK/pw1SyOSw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603371880-5b2fc941.0_1603371998400_0.09632764565325869"},"_hasShrinkwrap":false},"2.24.2-next-1603376759-04644c94.0":{"name":"@xdn/core","version":"2.24.2-next-1603376759-04644c94.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603376759-04644c94.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-DUCye2aws/EwCB3w1ahKLJfvIoKNrqcweSMeUJ5f5q5Ewx129pXE6Ig9vIPMkIOpjdHn9zIwen/e3V2iyG4mfA==","shasum":"eb697bc1205dfc2325f5d8b0dcfa850f7bc7b644","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603376759-04644c94.0.tgz","fileCount":167,"unpackedSize":614705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkZboCRA9TVsSAnZWagAA5TMQAKID2H3+nH0PDmwgkZcy\nyLDNxlxqddTQG0AsT4UnhnNvZx4k3DGbU/RoQS5Fw034R8aG4RLv/rEQU+t5\nd2M1pf2xudRs2G7AX1vA8KIupxXgTszisCk4eR1wefUtcl9v8VxdAeosr0xY\ncHxIwyyShxcFsj6BZ11ywXCnv8FbcziuoZHVVfWUrFLPXG6VVa2ouYH+pLIR\nPBF4XerIHJPCOJ6OFszTNkt4GmM5E+JpXqBEpdYoNFJsjGrZ9kbxf5E+ruiJ\nAfawiAzgPIEeuWZlKpLpuyo2FXYM0l0bbKzJYjK5PTl4o0OJ2V6b1voZjqRn\nD003xLei+nYXeq60ItU3xU6TTA+729LB9OM+yqdqG74EWiBLbmzlCl3oanom\nBVT4GKkIIRbfguAkXzbFAxDnCr0JoDNuG0cScF3vdBuyLIlEMYNKwu/KqK8b\nNpk/v1m6smcoDZQGXPLu8/z0atxXVVqp6lSsGc53wAgT/K1/G2BPtQRPfwOL\nWayymp/IYtmS95PS8DWEBE40v2ZqElPSMDQOXTMMGEDEWRgTPnweCzLtkThe\nZqRj6Lj0FEsfMA2Blzx0lTn5nrDaCKT63a819vxwJBe8oMTNE+xrtjXxC84o\nbBqa0CMeDUlylaFYlDIE97T/UUjFx8SSGt8v45rer0Wh4i4u0G0bqLXHCGGr\n/eMR\r\n=QJCk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGwWunh/S76IcDuzyLNakDp1qwrqPcrsEqm8qlTPhB55AiEAz6skBc5uACEA54d9qIpKsDLTVg63M0WLWZzUV7Y+IfM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603376759-04644c94.0_1603376872157_0.736921136050462"},"_hasShrinkwrap":false},"2.24.2-next-1603377549-04644c94.0":{"name":"@xdn/core","version":"2.24.2-next-1603377549-04644c94.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603377549-04644c94.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lJX0t5BuFZHPsk7UeK7lNUyV0qzGfNMzmVzWbjtbdW8SagiyaohKJd8LZaw9rEZ4MU+cV/+8pcx5PixQe3Vz1Q==","shasum":"9511116e0983eb6ebf1a1cb54921ce5fd8511fde","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603377549-04644c94.0.tgz","fileCount":167,"unpackedSize":614705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkZoCCRA9TVsSAnZWagAAseoP/izq9H1FcON7swC8PiX0\nMAam/7S75quxmuS31SQ+hq5vD3cQG/8msxxWlAEMTQ0eQ9WJ2S21EZ/dqRlV\nNg3WSZZCT//ZsclTfQpsZ7P9Cshwl7rSoNdQI9e87OSjvzsBlbfWQUWZHhFQ\nkl2Lu0UIRj+UooHrwE0RMKG8pa4ElzD1JVlJIdYlaAECQpIEVPr/WlW3gg1z\nScks2PTWtPRMBBA50PK/L+GcJWUMhZxjbCLyYYIl+w92+qIgdCl5QI75XDyE\ntelISta9zGgTGkGfm+WgT/8Xc3nIhuf6ndBB81JwlX12dGG1Hk65vTZSF4Rn\nUVFuSfwIf2IRkCWuWwGTubHIoQdpb98k7VswK82hnlt+3dN33f2L26plyitb\nPiPQYSIClmbjCBNDbj6wiRAaqVbxsXltZkLN6TpmGvhs/xi0KHdo4uyabhAa\n1hMRYvDcS+71wXu+DOaOIymcVhzS7MgEXalvFxAznsS+6RtrX5m7ftUtBCLI\nYZDFOypR0WC7zQzAQfxsScOCFs0wDj5L4dz/BicFEh64w7/huwZ4pYRDlTtQ\ni0UtYr2h76ozu/Ggk+RJg3jwA9TwXoDWAwVjRRApw/Xdsifa5y4Iy8XMn+aN\n5ZccX6ouCT/3w7gKShoJuvhMByxmgusylZ605uGEx2blh2qkzR4CKavAb6w7\nFgu2\r\n=JEuA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKmTwxth36s44sqPVl1k/s/tiDxNmagdsqyN/BTbU7nwIgJXk7XbUfW60juk0QWbGBdlsFQ83T2uZsfEJmwSAOegU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603377549-04644c94.0_1603377666332_0.7531850032559972"},"_hasShrinkwrap":false},"2.24.2-next-1603379490-d73055e2.0":{"name":"@xdn/core","version":"2.24.2-next-1603379490-d73055e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603379490-d73055e2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-eqj8s/LKjOxkvq5leZReSl/l4yVgubFWFBpcURS/3l0OHazMYnRaFNv8qv78jQ4W6H93dPW1FVhlOHXucsmwwg==","shasum":"69fe825582f204db28b48c3651326e90a8dee497","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603379490-d73055e2.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkaGVCRA9TVsSAnZWagAAPogP/i1er+cgQgPmVHuvNxxz\nYHMf1X4KCBtVRNtbN+C0KeyX4FW0Zmd3IQmia44Y+n2iwhBIoDzzpwzUXp1J\nkmD9KIPcoO8UxvbdwgHWr9/Otkt2P+TPa8Q1ytu7Km5p0BeAwtTzxiX641iR\nxqFNI5aN0z9gqFOd07xxVLcEXXNq6G0qKYZ6IggrpROMFaRK6afHsKvvrsPi\naH/4yrf35PYpVDF0Pk5sdc+Cc/Xvg0Yt0mqmn2zR5EwVSUhOOiNou3kR0izp\nYEtAD2iEidw90hcafZpXOg9Z7BI7fh6CKV0H0HFuo+Q+DJ3oB/J43S6Q0uZf\n+Uv3V61qpFFz+mQwO3vt7Hne2E+P8YyH8aZKUF86KlvH9U5hLgI4+Fr6HYCn\nohH57Ou18vgIt4Y7xbEZxlN8Jagvi1ZGiKkdqK2OThxIPo7OU3OP40RVbB9l\n7mGQ6yzISagLfg7VvnmBetPJldBvFhF0LjIqL+3e//3Qr2IxfK2PDucA7f94\ntBfzDFoWCtcsT8hRg7+sl56D92V0p2JAepmhJEHxavF8kkqB/ivnxu4yLhJb\n+KvLxaZqUNJmq1pkbQv9dUvfBWyh7IvnF6VzqYJxmymE8aZWHCu3a3kZOOOk\nFmbu1yIoy1Jt6J+7qA2pTADOlSCheFtlvQh8smNEb8ww2tkKQ3LGefrD3MmT\nTeAc\r\n=LnHF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID/h2C4yWRTWMnomceCe/kNarQ2HSwuOBFJovWwlQaTVAiB54GbagsuXMT75Q66eurDP2SpBecYq5ImThE+E2jM48A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603379490-d73055e2.0_1603379605241_0.9075256594477663"},"_hasShrinkwrap":false},"2.24.2-next-1603379760-7e2473c2.0":{"name":"@xdn/core","version":"2.24.2-next-1603379760-7e2473c2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603379760-7e2473c2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5KmSCJsHl8/18TUtARgLAmePp0w+VBSGZBYYLzIwBT8yVolvazJVOUa0XHyKUogRACGnFhjM7NwZgA6W2MfqYQ==","shasum":"4df831becf81a2e1c5cfe30b61813f7689880892","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603379760-7e2473c2.0.tgz","fileCount":163,"unpackedSize":606035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkaKiCRA9TVsSAnZWagAAKa4P/0R9/Y6gbidcHL7DuuB3\nUIMNTmlQVVzjeO6ss5ybEGUPx9UeEtBZdFM3cOl+9ejFK2+T/eHF/K6LfmNt\nSgluComC8xJ5r64y123f+AARxMnUrHkNkcWJigsntk550wea2UTGHdKr0XX8\nI1paE9sstYy0ErKlIyVhXJGpDiQDwlb9GuW2EneuzrINVrssz/n3ptSHeTOU\nEATqY7qdxlG5pcs5mHU4pQ2d92nJlpSAeSwFUWPkmF4005qA9nB4h8Cn4fb4\n6ET2zlNR42DlGYNZ6Ul8So3yNvVdUzVejn/668AKG6Z9MqCUWl3/6VhVZc7y\nmMRJPXMzcecRck81z1NVjwAEezTrd09DC4pXqgyMHNR7fQrZp2zRxQq00W1i\nR7lN8JL3UV4ijiSrA3r39SjIC0+vmkNwfZpJfzHQewEmVcyp7thv5raWDU4a\nkWFaAV9/MA+IeIuRz8nOCKzc+wMMsStZ6YCcD84jfLJiHPWrK1dUi9uV0Mkk\n4s8SWukEq300LqzolnCv04w/turBHgAuHROiyBwvD2m4iPnQR8zSIXPetIib\ndzYkBkWJrY5Y345l6rWnYTvJKPwS8wLMoXl7jvS45zzZfYkveAu1bb71YOQc\nqkyOtgpALFIW+eREN8PFmUSv4WphgYUaQjFh/NbVgE0S2/o2fhb7AnNC5jdr\n+GH1\r\n=W0ct\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDS/FdvOcS52+7ME+aunATplGclXv5Zcm7PQCmt8y6DtgIhAJvMaQUCQ7zyXkDJJntbDGV2Peb3JnaoAk4o/IcrMiON"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603379760-7e2473c2.0_1603379874342_0.5342337998944944"},"_hasShrinkwrap":false},"2.24.2-next-1603381230-7e2473c2.0":{"name":"@xdn/core","version":"2.24.2-next-1603381230-7e2473c2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603381230-7e2473c2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0gj04/1/XRSKOlYLwqH2/CB2QUDV3psrL8mMOPkI4MoVrNF1ea/6F/cPkQ0wWqNuc1t3FMMId1KqijSnLU++XQ==","shasum":"488c4fac80ca79da2b42f82f1982b0019a72e657","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603381230-7e2473c2.0.tgz","fileCount":163,"unpackedSize":606035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkahdCRA9TVsSAnZWagAA3fIP/igG1tuX/k+QCP6zjPfT\nkqsTklksjOPFFkBlzvFDuKJCpsoBcr4XLCnVKR8ZEV6lcan2W3RSjnFSb5ST\nsw7f3RyVN1kBJq5TW3yMEvIJredkjSO/uC8/pZmxFQZaHA+lj3wR9T+DhUaY\naLOalqfgqJyzkbn7H1nuM+x35WuoEQxprefKu4qx6rZ52IBOV0Bdt2L8XG4H\nS7mq1ZcWRGS7hqgTIM98hXzo5/3PGLmsgdG09Hls+Mx8KmFmsy+bFy6T9aiS\nJYhQh7OuNOsD+tI/m3WHY1rvFGI565bCARKe/Wzt+4qrlJ+nYt8sXCV+FzCt\nYz7Op9IVYgFTFBgqomw9HYIQH9TIhvj2MCugKVZUMuGOBRfg6VBl0qsQ/mup\n0lofjDZJwfBAaLnLVwYQd4U9XB8+/BitcbzmYWx1gtZuVa6fJBuVHE+RUyTh\ndXJy0Ek4sLJFfGVm5QS4MUeFGhqQHPwmikMB87cPz8moK22l91wCzZOzwjqQ\nQRC40yw7g54ASBHeZmwJX+AvoNFbzmIQNMrgjH3QhajPZODjAxWGYrMEwSrc\nv5PcSP52L53HYC4ue4SB5qBRDzQCbDk1WLZyOMP27gVn4NJlrv4ZHCP1mLE+\n+BozOgY9gmEnn21YBCSFh+HEgCdfKDvzBLd/ejwotOZqBE7QFy5oFgSJfmnH\nrmfD\r\n=jcSk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHlduQxnEQyF+Rjc0nVSZwUoLYD4l5YAFRYf1kEgAIcGAiEAmFdeOM0Nn0mlIMx9SeE+m0xLOBARtTb6RzWZ1j7cQ6U="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603381230-7e2473c2.0_1603381340651_0.9044893687996625"},"_hasShrinkwrap":false},"2.24.2-next-1603397701-62abe542.0":{"name":"@xdn/core","version":"2.24.2-next-1603397701-62abe542.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603397701-62abe542.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rdqYgDx2PEkLRrhN2V7Or7pDTYgyWzgpXvfpgeVgNyubMzTRt6uBB1bXizt5NIhAuln4sNPVdG6jHST7cFEPOA==","shasum":"56720ed452c841d0966d6c753ff55753e0f8c888","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603397701-62abe542.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkei5CRA9TVsSAnZWagAAfekP/1yrTDRGniPbZGdSeW0B\nV6qNwo7V97y7Weehpvw8t1tKuYp0jI7v5TvdoKu6qQIgePeWGq7xBLbXdH9J\n45dgXWvsdcmwHXMaJvpoNh0EdBgHSoJpPNfFCwKNFP7Q0msOep3KCDAC3lBc\nPegqND6dzCUvFpOZjHCo09Chq7Jq/ErS4VHICyoKaIDyz8MUGZOLtjCe471q\n2qWQWEevgEG6NVZYcnCO5MrxfIB6/i5sfCDrpdIgyXUg6SvtsLy0d0ggMfxk\nF6G7duBOg5eS+2IhZkG41Y6LAFe+LBGoBqzxrKla3SXf+FHLPvivfZyB9tQF\nlP1HY3tA5yF3LsYvzRvRNUkA3jDK4kgV4Fw+cz/Pmp4AENplPIwV8cG/orm5\nLIwlNgmlCNMKfTnjVQeXA1MIXt4Qo4mElz/xxgQqoLQZXpDQr8+OwsHC/Weg\neij9p9UZlQT3aLTDGAVgpwnQ3R2UH5HRYPQkDbyabGNTJ6IBNky1Qh6MjvLL\nK3CPMejCY23nQGTVGJFuaRcnmp1ndHpABWbLCKA5B2Ds5KSJ000/uF1EkNKh\nlPDM2/I5zt0v/Q8cJW/9EhUoNJHwcBmZL3HZXui1XiBNXUUm7gh/apzpFcAN\nTihbUZh8JRgjmDJQDeDFOsrnyP2OztdhQeQBPLKFMPhaynwffhT+qbZOgxyN\nJSAj\r\n=XREz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF5QDBQWy6I0B+xCkERf92nt1fSFO+UlJWEi4/iwHQ5VAiEA2TYpE+JHpqD7Q+Ctf6D5E3VLVgKWFYiDiHXl4LbyLrU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603397701-62abe542.0_1603397816745_0.3782432781364442"},"_hasShrinkwrap":false},"2.24.2-next-1603397978-43430d9c.0":{"name":"@xdn/core","version":"2.24.2-next-1603397978-43430d9c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603397978-43430d9c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jwTeO5oBuxQQAGY0F2uevrMKrtHG2C/wSJwUFtn5LQk1jWWQeCKDHfO3J85SpHHJpPlmmK9bQ9DXE0H1XfwWRA==","shasum":"b870c0e885448a8b2986d8d9d1822a0edfb29eda","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603397978-43430d9c.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkenaCRA9TVsSAnZWagAAbPsP/jIS4TeqdHmZoX1L2Uhq\nL426A06QmaMY8jpeQJo7w1tC0Dm8GqGVbMFG09RlEiTvCEwYVHcIru/LBMz4\nMQ2pR0RAWJqdXJxQ8DivM4ziaptRUoVz5KlRWMEWMThQBZaskvQKOqg9DKQ1\nrAXEOXxwU7ntY5L+xM4Wcllep8hRB91M6rf2TzaDwXCoQZqlLUy+5WbUS/cI\nEVeE7SA4uMlJY5g2p7JQlQoXAxDX6nm3sFv2DlOUn7xM0IeU69skZY/jFbSn\nlVpdhfYMJ5JAVVdwxVSz0dvJt1F5c3KaFp1KUFOhYvogCAjTUntQgCbJzNQC\nDTr7QcwTaD70Eiq8txcr5FGzRLUrQ1wkUNM8l2WooZqZ3+Qch6LDmNFrliPm\njDxlwaJnkdOJRXTcP37C7PaolpighhFy4xbDvgIZxREz5XCZD3Eb8a6WN5EM\noG4eawekO+PKgoHvEF71T3qNaagPEL5xq1rhFWP8FIaKx6Hc6o7pHmIsEHNd\nnQ1n7hWZBz6kEvnv9wQiIvNpXe12Z2UZQAe5JUsPM8svCYOxkrMaH84yPj/z\nrmALIEM0s3m5JLilh4MFndw/vDNhWBUG9+0COkfch1UhWqo6h6eqzEhLtiqF\nYuh6z6251odq4nSwdS9oEB7WzmYkRNu+MOpv1FVuGK35BQ0BAfUZ0jSkxAQV\nC3lv\r\n=jKrs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBkqwh9F+6JNke8EAINT5cLCCbscz4/hTj8H/axIX1HvAiEAk7DeKL9U1Dkc3Dt0qC6+R1B9sq4/EfB2O5OxO+dQ860="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603397978-43430d9c.0_1603398105905_0.43954331960474047"},"_hasShrinkwrap":false},"2.24.2-next-1603399613-f42fff92.0":{"name":"@xdn/core","version":"2.24.2-next-1603399613-f42fff92.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603399613-f42fff92.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-D5rhYgtVgTBlrdueE2XshGYNUW7xBfmcxLdJIKJ3uDpG4XvHNvQAnW9jg4J++quj3UR1n/4w/YfCadsQgVpMwA==","shasum":"7b12d4cf8fbb1548435494a206bca07e6b8be13d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603399613-f42fff92.0.tgz","fileCount":165,"unpackedSize":615156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkfA3CRA9TVsSAnZWagAAz9UP/Rnzjjh//JnsO+9xnUEv\nGN148Kc3678b9Tz2W/wXxTcQwlmZHJutwqu272o0ncqFtLFjwRb89q0qdSOF\nQgSTBYinrpHFkEK9iJ61mmBBeCtoI8UvQtoHLd00zBRLGtGL8LY08cTn3YFc\nhaVvORDz/rqk1NYIu3yCI7pR14HiFmOY0Su0QC+7dz+LnUvlUb4lFB7fmaSE\ng+A+22yK6E6zFAgTVPT2xpu+9mi0h6118YEZnDOSMHTvjnsR5e9tMN9WKz+f\nKXtdF6tAguh5GAX4QskeeHzISumy2epKONGQRAdEMOWXiq+hkrq3UyXoByFp\n5H8FqXTBvAESaIuoynU5ZMl4BpvYM0BUXr7t74BIZIX7XjbQNM3aqMzedFyL\nWdiQuKdEI3Pk8wjGx95pqfZe5aezxWcTcM0fF1mbuMfn8oHePGgCijCmznXX\noN1v00/VqgmKKIplrxnY221BOmeCogiJpuoEDcLVjK1hsfd/LVfYY3PBR3Pn\nGj2Id9LDHJsxT17ISqQwtWtX82rS2QazCZNUw9VRgcINNHasayycWXJDm7PG\nSGdppSdQ+yT2UE0zNFm7nrYV0WUTnb0ylzyGfL0TOkv8odtblpWgrIn0vW9j\nt7LBKAWmSSM4s1GX97znmcY3zP4frfPFLTCMtAYOzA8UHN2K3tGFlgZ9KUuT\nPHdd\r\n=OlOn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDe+Z7f7SwOBWMFDZQ8jGsMCloAqaMlKZSOrFlOwtCdUAiAw0M3kpDRkCr6G+GgxKWm5vG1oUN99UFGQxvCaTsrVWA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603399613-f42fff92.0_1603399734691_0.420108545260792"},"_hasShrinkwrap":false},"2.24.2-next-1603399836-62abe542.0":{"name":"@xdn/core","version":"2.24.2-next-1603399836-62abe542.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603399836-62abe542.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-yHPaIipidZzELmxMAWzVDpyrKh+RBMLUkCeGOuTYueL0H3PD35S2tq+U8QPLKEks5u2k12C3qId0/lq2I7tGaQ==","shasum":"20d650b6da6ec95cb5c34bb0b9343ce6ad1ae68d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603399836-62abe542.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkfESCRA9TVsSAnZWagAAD9wP/1IpMLCUY0kBYUkyf16J\nrhyE/NYw69B7AEczc33AMLOUoXuw0ljJE3VYFmde+aOJCOotbTEiRyWIUuQe\nuOZDPx7ngRcEoqOMO5vdDroXZ+dMmy9dRe6oWJ0PGNrhE4lRFP8vJtK/cU9W\nxBaj0gTBkWs4HefuV86ECrgg5rGLe31qMDdBI5u59xCgVff+eNTyDoD3fi/g\nOe/fFaj0QmhVXDQylaGDl/0GaimcYtE7aqxaBOdnlKe4JV6xkcA5CEsDjCIb\nBJyzbDggWdWtp203bcIbgrcW6r5tMDzNri4Y/uoS2UfkCrmc29dbqNv3kf/L\nN4I9CJTCKIV2QBXk3tnRrrSbnfSSJUJd0s2pnfWYpXjlpmyEMZOzVcRuuvls\nKMhhMDK/VJRPSWISekcX1dqgV2F/QcrLjquBYTFk35hWLJj23WttTxeJDPR2\nGUAaHFTaFhmcmsvszL7mmstHKNKCRmB+hFk6EypAgix3fjeiiI9gXXBK8jJ4\nBS7ZJMhuir2FtUsYYP+lSR2IJHCOUZFZX9MCVd5EieqWW3b5ikZx+Q7YVbng\nPXMef4w+87Z5I88v8Wp0s+J3q6TxtP7AfDsfOPLa5iPNPh6ERlkdB92HcXcA\nQMfe09O2dWpLtMzIZx66B9RHKR6+UvFM0ifC5rUw+99EMhgeqLtFDd9PFKNQ\nah13\r\n=mRuU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDsXsJbt2JQVqsOJYGCGSlP/TOp66hkAx2Gt91wZTcgcAiBMmg1BCvuFMNrk7SzZW4D6N3GN3/kd2Giw08f/AaP6nw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603399836-62abe542.0_1603399953537_0.949524827551258"},"_hasShrinkwrap":false},"2.24.2-next-1603401241-62abe542.0":{"name":"@xdn/core","version":"2.24.2-next-1603401241-62abe542.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603401241-62abe542.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1O6KECxukMK3vR3vecp2DTlIS/5yO15ZnYFX1GFZWYNp2rBYxzHyE1fpvJ2yhAcwsdAdnFfyL1TSSu58NZZ+Tg==","shasum":"f31f47d46c11b540fee2b96982fba1294f6e46a8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603401241-62abe542.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkfaLCRA9TVsSAnZWagAASMYP/2/bZurwWuZM2TJ39oO3\nGOUfeWPVAN91B5ZNQHK9bIVtdJquEGXCoMI9aC2t+EiBZWiNDNr9HC4Jmtoa\nLZMar08G3F79LAjLm0krJce7XWBAx/9hrISTXpEkP1FsAfOS763ePtmEqshR\nXyRHtHzlXtgPvGgb2Q3RQ9M2ofE28oNNgX5JJJImxohMfJrhJf5fmhRvM5MB\nlU9LWsT/NDx06BBeb1ErGXsufvON1+7pdQRXgpXKVzrk7WHI815BiGanqRMH\nraOpZG7QCPQAFDL+EHrbqNewjGTdEC3rDHhFacck5mgbbiMWcRMjikj0uqdr\n2h0cNaUCs/aVavsqYnwhzQpCPibbR1kBvp4SQP6aRr8Rgh87YB8kB5fCjcCq\nQSbzbHWsDOE+Vn0Plw5FY0bR/wjnwce1ACQN8PN/3Z368ZA0KeW/OOqRRE0d\n1ylXlaIlfKvquLDSEBRXzzUxPrD5toPAb9QbCrvBceJUwacZFM/q5oZhZQtX\n+rCSemepCFG/QHF5k4atZ4+wha6pB15swxYM4ARxbK5uLq4nTW+RjdScpKt0\n3E0ZHXrG1HGOYh6rvS05KOTtio2rPTVr7MjMvkqpP7dTgsAPjfC4/b1IP8Ra\nGGOD4vkHgaB0G24V8ItEOgRMdMoDJUluCuZxZzRElp+ZBGSR/4lo4Ae2cQtf\nzQDv\r\n=R/86\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHU+NP1klv1O2xgutY7fioqsapwkqTMCWBW8FAd/dJx2AiBD9Qg+ARe35PrWA1xMkqZJMzDnD6aPkDaQj8FchC8ZoQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603401241-62abe542.0_1603401355285_0.915326404320483"},"_hasShrinkwrap":false},"2.24.2-next-1603402937-8f92e6f3.0":{"name":"@xdn/core","version":"2.24.2-next-1603402937-8f92e6f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603402937-8f92e6f3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JWKXzYVq8O+pQ9gotxrjFtV3pR9wKaJwQ/66VK3FFUS6abXmMUY1ciasJ6pNDH0MYCToxsd8p8LHXIgw8X63GA==","shasum":"5122eda093bc68c5d7319f6bb2cdf7b8afeadb38","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603402937-8f92e6f3.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkf0oCRA9TVsSAnZWagAAjbgP/irCacAVaB5JH4tSy9XA\nqB9gjkSe5Xp9wvO0zt5kr8frMS9g0bWQU5W40hTPAi/loRS0uKtGE26gxs9J\nZdLqB+mYZ4Lez0rvdARGA7patZ77R75DW69G3WEvxuuEzwtHUeUgdE8k/PbR\ngU/G7JwlyW5g/XEzVuaDZ50JJNP0pOArx5e/kTYndsmiQHTfNwlFn7fCfmWS\nqiYSa2vYfC9M2mPcncem9BypoP1nRfRrbnIlV19oK2uopv3Nj8fU0VvJ9lf1\n5qkgBJY5BygpahX1Dqp4OsPiAjRxylIpw9a58c+VNpippHlttDdHf4lLwVVP\n1L2nfHD6WKAewkD+4xUz74z4LLaRK9ZmwRgfBiauvUkR1q5sVbUokVC0E1Hm\nBdTsULrAHTNG0+nK/Ap464YsTBbYQzZ1fTA91DxquU1kDqsrS1si7MjLMBbO\n1Js8dEu8Id+kuwJI+T45tJQNHq/ExtNaXZetIH9cJDW9fVMnASRFRjawQp3l\nJktdNcTzoBsUx7dTBb5/sJ9kfTNSD7K1nx0IhjoXVo87ZRsDFwlmX6/UW9a7\nqwDReA+04QxZ8RfZGf/0VuiSh5B19NSRK/Ln7HhDkLxvvReUt4uLw7SVD0rM\nLhEx3q+Ddb/P4rFgPbPH2cEJu7Se9VNw0GHSasKy4gTOo0p5PT4o+fh4ZIju\nwMKu\r\n=9Kwr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMnDvYVK1mzeVaSfD+YqdL0SW1t5C5uQsNGSvW7//yOgIhAIgVBlkCcS8KDFdaTO7chA1jQqDVmwwTEQavRWCckQ5A"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603402937-8f92e6f3.0_1603403047593_0.24140702507820477"},"_hasShrinkwrap":false},"2.24.2-next-1603404151-f42fff92.0":{"name":"@xdn/core","version":"2.24.2-next-1603404151-f42fff92.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603404151-f42fff92.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-AQnVvfJxMNXY4yMeI4da8mMBZHeZc+QlWr0tYTTgpvqAM02cPB3Kx6GKX+I5rDyXePbpOj/qMsfggwLFp2U87w==","shasum":"15af2fbe6260daeada7522aff271cd998e064a37","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603404151-f42fff92.0.tgz","fileCount":165,"unpackedSize":615156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkgHmCRA9TVsSAnZWagAA+8YP/i/FmV+msnZxZpvG5UWW\nTET97mJT0csWZ1C0u0QPnVDPuu7XDVVGIrIFjWjKYjZeqaANs8tGOmcl8mJ2\nhGnzlCadRxcNRS3p+KPQ2V9FHxXAqjBg/sjdzqc0wpZfoHAZUx+UrmaFI5MY\n1OUA9LmxTfcjeKBIVzT1RNdOp0zzrl3LYFcM79SOUen9USUIGT4jGEwOEcsr\nsWuus9XjryDEGjJNjGe4YFDwHsMqR6+JTUYRLrzoYJI2rOA4akjVlFwqmUjt\nrc6rg6+cH5O+EDunBH/pcMqCZHA2VkKpVHTBxrz+F/1GHJ98Iht97ZORQQAz\nHFGBi5lCnelibN4BLmYUURjQq1c9u6y2xl503ppP/FMj/aohbBp5gpQSF5os\noqgQcrivP1GGlfcED85l8esrOClr+cFdCZFt/ZB5/DHFGCQ2wuRnFbK1Va/D\nYr28z4y62Qsd+jQ6tfKGFGTBiLJrIISq0zD+0ZSZXf08b0XyCd+9Uqke6OWP\nrw4MAwLwD/cYLXxuikya5LGqQ1zzlMNCJAaklPQfNDZhytFB+6ci8laU5fHm\nePLGcXVlMTDEJGLEMbjBsMasXF3Ys0enue56X8K6pbrNNQNbQc9wc2D1E4GM\nz7aJzwf5x5dcv6OswxjN0rvwXvTZC2gYjOF25FPTHmL/Wup8TqNXZH5b7TVM\nD9VH\r\n=WHBf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICJyNOCJo8Na27buYBDimhHDVFuKHISuK7csSZPK3WTwAiEA7peQ4DxSEzYrx83eD4SQLbdUa0rnegtznWxVFjgA3h8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603404151-f42fff92.0_1603404262486_0.5989401334948206"},"_hasShrinkwrap":false},"2.24.2-next-1603406443-6511996b.0":{"name":"@xdn/core","version":"2.24.2-next-1603406443-6511996b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603406443-6511996b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ev7SK/dWPiG+iWDHJnZzX06pz40j2nqPEDWXAdynj1o3xegc9HNt3Zk/fLT0Zkp9dAHUvd7kWgI2P8M75+d5CQ==","shasum":"7432bfb8c44bd0d17d1488dec506557a9fae0266","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603406443-6511996b.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkgrcCRA9TVsSAnZWagAAGz0P/1w+7skjC908VE6pEqtn\nkhaZMyQS5sEr7gZYg/VDtTjJ4WCw0cZqnMrNdvuWdJRBQS5bt7xg6rxUz7Oc\n1Dc7Qr61q/EYiyiyRs4HmLOXAmHhK6XnO8pUGqn5h6lbvow4VD1ONqMYuEAW\nVPpfe6jJI3BFqB7cDWbNpw91Uke406YgUstOjJzJkxcYowDzceJA2EbAWIs9\nWDzZItxBDXskAxEyDu/vD7DrVlcnAB2sH79L/BJAe4x4f1HOnC8E4thVFXzO\nUvSgEZZ2rgKrtw9iL3OjvkR4qI+R1g6IvdYg7NPW6tr8ieuE3t801ypnJL+U\nHBbuOfzkHsajttIhnU+Kdf5onXmi/cvcFbTH1jv3QKLgYDVpmJ/Uy8I5Suyh\nHYRQWdWL6lLoNfuAGGVesyAgVh+7l/qcFf0MDlJBF63T3Rg9V6ib0QZY53NY\nqxu+Gf5ZnzW1BaQ5gLpNoBHgRlEGSlqZM7kqTvMhzlnu8TEQHQ39tk1toJr8\nl8AItI77aK2eZ2D56NoIUr65InpqzoSbm8zau7JAVQkwq61w5A1AduuzkN1r\nNxxuf4SnUElxY7FtrSA1jibeTZfVebXiqHCiOxs2QWup+RP82TZT10zw4Bh9\n+LnM/5redXw6g1NdJJeGrsIHCabHxV4RQ6L779IUguLbml6vfn+H9vHOaDWV\nGs/+\r\n=aIQI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF4Nz7DgYMJpHwvSJNZ+thpQ3AgM9lA6Mn4+OSEP8iFdAiEAru6hBW/8aUr627y1m4baRZLav17Weh6HXpbrlmZfyi4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603406443-6511996b.0_1603406556322_0.8663861145232297"},"_hasShrinkwrap":false},"2.24.2-next-1603407492-0ad9a0a3.0":{"name":"@xdn/core","version":"2.24.2-next-1603407492-0ad9a0a3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603407492-0ad9a0a3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UMGZMN6sTqsPs7EloNYqDnJoz/oBk3QniHTIFsJhyfqPYZFMn2CbipGdEvsmuoeZj8vfBoLPpTlmpmTJbacnfg==","shasum":"3fabee4b408dfc98b63f6660075e5381961f8d73","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603407492-0ad9a0a3.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkg7yCRA9TVsSAnZWagAAnxsP/1663UHpYZ/VgHV2lmK3\nmr+pu5dSXSnj3dc/rV2HISTr2DXVNjGYsn0W9RTul0dtOkZ0/L4znQsuSs+o\ny3bCZBDJ6Xzqjvq6xQSuPYM7ahMU9jDM6gnvCAvEz5v5iYT/vwtPGW7RkeuP\nbMX15IRNRCqRV20S+ptqJYhM7oA+I34U+ooP2baq3XcPd1mfclY5J/qm2Mga\nvl0DIbTiWpQYMrApv5OxIsZJs54nQdQ0QR8GYUXwWCw+C1ryTXEpbgWMN9Ii\nDzVT8cOqXS1WM7+nqY6eYoq8ug7aUKW6q3rM/mAWUvzcNfxQWrZuGO/T2tHd\nyLoVhP2SOX6VFW1BLKtkzfMDRr+CRlTQ8o5g1UvcTFHYB1BQW0IB4JtCQ1oM\nEo14ary1lV3/QHRPj7hURL2yguZYtBpFUl4rK00TtNUcK96gqf2WUIXdl6Vl\nHQnrPTXYNTrNrLoO4OOQCgLODwLS2Mun/u0JkeDVKTfWC0mD9NajKDc1XLI/\nZuE6jDcfN91rJMhNrFSCE4HtHvThwoZ00v2GRSV2JgS/vuIpIPhGO6wu5TkO\nbAsl/9f9dwDYgYm5pGaji7BS8IzazI8SjK3UgyFTvB7ZcRKdLcL3qF+s/X3a\nsoUG0ZshEagF1bjMvALczvEM3yjAzCG++N+rAbXp0Sv8cCv3R3VOyPYfSmSh\nMEI5\r\n=E+mY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG5gkZhDjxSPcVI9sr/kQ2zb+QNhZWHnP5C7wuQcYqDSAiBVfNSwndiyVVn+8QfzDxX+V+WQY0nuRA1zAel6VMWXqw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603407492-0ad9a0a3.0_1603407602190_0.1285406806929461"},"_hasShrinkwrap":false},"2.24.2-next-1603432798-7e2473c2.0":{"name":"@xdn/core","version":"2.24.2-next-1603432798-7e2473c2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603432798-7e2473c2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6eVQMsGhNa6raKO+XXFipbTDwcZnLnoZLOJUlOVngrK+uAbS6yWIvSpJrWx4ImQk+8YEftXVqdSBGEGzZ5fMEQ==","shasum":"e6ead2db40d8ba28ab47462aaece89179dd39ceb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603432798-7e2473c2.0.tgz","fileCount":163,"unpackedSize":606035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfknHhCRA9TVsSAnZWagAABjQQAJ7RhaE0aZq60Hji6gZf\nFqiw1BR9p09Qc9tTG3MUfp3EzpB9HeKDiHTD0P/bLw8i4bhv9JJ91SaVcqG3\nbLHnHShIpW1x2g96mQXj12twK+2IQLMb+gmOuojHzQZlyP0aKmdIJ/zH3Xxv\n/fJEHzCeyEPloSkwFmWGMuIfblJTxbhsGrbZLSoTEnYkT1LaWOZMRo86iLNQ\nGdF7L962U7Z9JVIHXD6npn9ezl1lxGMn+2b/VzAjGN7l6yxXvMOvz8VcQa9C\nH76hxA22Gbw6M5kRt3iU3KmwHJqwSHGaFuWJwZzyYTBSkx0kjzWetw9dlfbH\n+W2muO/f6UKfEyBn3WXHcgcBIABatUyAxcIt6o/mMLHF/PJvhGWqM69QYgR2\nfI9zR0On38N1m4JNjZSDMsdoLzpTxL0zgCzogOGqRZmcU5xn7g84up/HiQTs\n+7HVBZ7HlfL7VM+q7T5oYQ0gBoQR6SVUUKt+hlow9svJwolkYtwtyJl5CFBx\ny1oGtsLRLHTLPQcL76X9U3o6VUvTp8H3nlM50hbQv4uwBTMxOITvRpM0UDmS\n8nM3H6gf1pg5SWHoMSvkvhzt5zZ6+bGOhudcmKoCuQhxylx5dIV1wEClZH78\nA6nRSWy/OZAVDo1EHOCqNgkAgv44rOqZYC8JzzHpXK8Qc1iYW2sgd/xldp/W\nHr3K\r\n=1QnA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjogCfyRSABwWHuuiWiE7as2O0CigVkCNPJb+LGEUdVgIgI9L8OBw5TmGEBFLLlAZhPkbqv5O+nCHz7DdJtjCYsB8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603432798-7e2473c2.0_1603432929031_0.32610955404066533"},"_hasShrinkwrap":false},"2.24.2-next-1603432892-04644c94.0":{"name":"@xdn/core","version":"2.24.2-next-1603432892-04644c94.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603432892-04644c94.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-oPoPclb4xJ+4o5ErjQmXhTdHvYggDs8rhkHfVkXKKB4/R1atvf/WRLxCeQ0GFKLC6NwvPFZ70Ly43ceKzBpddw==","shasum":"6f31beb5004f4b75d73ffd8a3975bd328b2b7bac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603432892-04644c94.0.tgz","fileCount":167,"unpackedSize":614705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfknImCRA9TVsSAnZWagAA20wP/2kIsc+ZQMfZDBj88i+s\nweP0upqXjMehq1oYgHS6R4RW4/34PSzfcNIrZhqmcYeMRuGSXOB+hJECqo+4\nmkcwcZ7am/AAK+uf6MdeILo1POZyAyFLtEgvWhnX6Bv0t/CHA+9ZczKP3iiI\n2195lwx9pd5PL/YIC/qXHc1VYszFt0hc08zum0K1zZJ8majWM30Fa1gF2GuT\nNDoH8u5F5cSDjetp66DPqi9nPkjx3iq3p7ydAX3flFEjThpKsYONIy5jcD6C\nMa7qrwICQviEc+owpFfI/J9TAf90JVrUZQteZa4HBGxH/w5Fc/G7fdXrJ7Cl\nvSVmTEX6AG+Ci410XB0WNiioqEIv2OXPj5F4IV/VYfTB+bd44O7somgFhZGj\nS5+5i8BjR1tiJiBn6DjkEDZQpb+FXdLgidUzrsP+mzIWr1uQG6166uqw7Glo\nvoBNfq3maFsupzvI9zkmLZpvMU3cVcQCGEYXVZpHVhf/ojNv6L11K1r8WPme\nzr9VKXX86O7ld6BquzeNjzJrI87Ymt+ShcSgGCLwvxjYMdS0k1z3EKY5mtPg\n7zJ29jPZ2JoDPL2PiSpx9EH3yT1iFG0/DdvthaXsCEuMwKFM1qxD+LLKJugP\n1emJUlvgDFusgAPHne4mOMm5OqNuOfq058oT/ede5lhFPUHQ/R1KptoonrY5\nqQ7b\r\n=bP6y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAMx0+8Usn6bn70EIteWvYGPKoTAn5XseRvmLruEzEelAiAq/4YP+i+uLlv0dGCrbJwpV+Autwh2NQPoLd3VnV8VJQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603432892-04644c94.0_1603432998179_0.12069197047826763"},"_hasShrinkwrap":false},"2.24.2-next-1603436647-3ff70880.0":{"name":"@xdn/core","version":"2.24.2-next-1603436647-3ff70880.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603436647-3ff70880.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CG/729yY0j/LW7Y6ZTvcw/epdM9jPC3RqjPyG7tdJrPJONoh5vSDuIpquOHAF85y6hgejepdfat6PxLJzQ/Esg==","shasum":"b8ef17d8ca14893543d10ada870633b78218eb4f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603436647-3ff70880.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkoDjCRA9TVsSAnZWagAAsIgP/27YknSoSGKzEfKRHbLt\nzl6mObB27AJohdNZPt+z5h68UTlCza6D7TZSuwDKAB4yIu238Gh3W0YUJjO3\nYj0wkrUtYYiAsLFObYYMhgiU5gvVZi/obxbQiSvqmj6tS3VrD9GY637N/0jI\n/nsaXqIaR4YjO0PXbom2LbqxCKBSAhCq2GYG+l16uRyNsHhhTqZLmNx+M40F\nc+Oj0797YiwfzuJdZHxkfMY2dR3zJFBeRdKdF9X49PIl2iTqbM51XrXgK9x0\n7A/P+xYhjSJOSC/yAJN4F5z0u1OJP106TXEVPHUG6L/ct7G4flrP+bCrnMRk\nj3EIjQY2g2SV7h+2yNzjSCpEdsY9iZvOubjhPlzpeHFjjUpFA9mDegjZokIq\nK6zMgmdSEtxnUi0aCNRoa022177fabV0RUEDttyE7RSFE0wzIBlw9PpaOnvB\nfGyyVJiG7nEBORo2wHf16LObBbGSVzDOa+bbqbODhnnsbX/binwEdi3L6+nA\nwKRiO9e6yXE5pmlhWvi6pw66aAyMC9/ZJEtw3Rp+lyYmp6xhRaweOx/zErNg\nUCIigIkShTjlpR9KFRavjPEiwfIanXcgc3cP25AGYLt7R/4xFmDExztLeOLq\nDcaBbf+xiMmWOVmrfVqbIl0kV1IRTcfIj2eN+g1Fq+DcOSQmFwTOGXeWIQia\nZsao\r\n=My4A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDU66qcL5eRxZRwiClshBNmd44sDq8wlQZqatXdr3goqAIhAJtf5sVoOGM8Hrn+oiAm5m+5doDcOXtiih80UAE1rczd"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603436647-3ff70880.0_1603436771445_0.4278417480494685"},"_hasShrinkwrap":false},"2.24.2-next-1603442742-c1fa42c5.0":{"name":"@xdn/core","version":"2.24.2-next-1603442742-c1fa42c5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603442742-c1fa42c5.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uk6IIUNehZ5uqou2oKlc10JIfBt7nTmcRDysaKtiFTcblC6SmMSS0ntwM2l6WAdL4ziiBgFajv7wbpQqapAYHg==","shasum":"95ba1d2feaaae988c1417070c92e86c8391bb591","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603442742-c1fa42c5.0.tgz","fileCount":163,"unpackedSize":606416,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkpiiCRA9TVsSAnZWagAAwPMQAIQhTf7Udj9Woo0duwpZ\neHS4ZVwUgFGrBIxP1Vu39Tyk512BB4BdjZdrJDcKed0912AA1R6Yqm5eqDEt\nEzNPe0w0nxBqpl0ZA7AxWRkflOK/r2W5GnrmCy7Adp4dZafdBdBUlMQrKNLV\nJNybrmKqfmc2bC6B3Plj9/nNxfqUtcRcjj6zVrypXSQlCMoKaRXG4Yxlhv4u\nGJNvXtwlCkbSbVRX7JHkDUOLXYBibBjDrTBLb+3xykxGWlqqg017X5GrbbEb\nuKZKnkj4Rl3/Sz1cGzO1zkap5YHF6ZUOpFWcTmUfAPt9RPkHEPmEiUsr7Klr\ntXEnAwmPkjtQFOMTLO898OfofAygVLklRE8ZtYJxnoTIv4IJy3vuEWlNCVgv\nKLXUhk9tBkjF9oyDw7DOU1g29dstbFQQ8ROwT/Nf2OkXR2ZVgJC4qjzjdBCl\ncVJku2+Y3KvJJptyiccxYDiW+YPZ9edbBRNP9ah7AGf7u22PE82a0jhLur+H\nkePOnfbedBXINw5WsZbLlCMLkntO3FvQfl8lGR/R2jsiyQlGTtrPu1g1uCLW\nluLVb01tEzP456SnN9UtYS2SrAreEfb4D+FTAJe3poQzogZuuMwF0GeBN2Dq\nJv5K7JH5bNyKiobXyH0c3xIbAA+CPj37ugdWtBBk1ytllT7hv+38SYb7h0HF\nim7J\r\n=p94Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBIQ5yYaQTkj6w65YRYnmfol46GPrFWrzImIWhJy7EF+AiBDAPKCKRBlHNWDW1nXriGra0BewmpQ4oHmR42eq/Fj6A=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603442742-c1fa42c5.0_1603442850144_0.48330020318144884"},"_hasShrinkwrap":false},"2.24.2-next-1603443919-49a6562e.0":{"name":"@xdn/core","version":"2.24.2-next-1603443919-49a6562e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603443919-49a6562e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7xFq8tORrDs12RdUpnD/eciq299GbbNdIDYDkn3VNyTPkeNKPPLaBEKEKkujPctV1/QL7pWh6c1+ir+lXMAkNQ==","shasum":"51f531cd880aea5f43273db9399cf9d144b84224","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603443919-49a6562e.0.tgz","fileCount":163,"unpackedSize":606568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkp01CRA9TVsSAnZWagAARSQQAJGyFEf61yahne+yNC9U\nm2O5GZcRskpcqiiALKjuZDaeZQqo4njZNMZWndlcW8biUWEE7hR2jlH+ODeZ\nv8VKLNduUeJ6o24HwioQkn/54QhI/jVNH/BFPpA3ENXNoP068yYzexdQ7iEt\niXEctBnGqDYBW5THPpIzj+sD+q+KdW8niwxDUnXdvq1wK3UkzI5+S0u9R+aU\na9z92m5L0vL/F24SswcQ0MoyAl6HXfLNMMScImHS9rmCZk/R/CXOgln2DCaN\nHKmLB3AqfMkTJW/66hFQ+ypyCoMF0p/Jy0B+GQZDfOJmHrvjly1AhhpsANje\nJ2rx0yojj18Zi6NDSFwbxhFm2gbIp7UtIf/oaRVArI0xXLCxCbSadx527Q/3\nydXUGTw6fmU46OQ8B74g4DwqXV5Wf903jA4r8i3tjBGnz7ylmepiTdnKGJIe\nxhzY3E50USOQPlY7gWrZ74cCBOaXFu8e/eBRmrZ4dHkuAkcjoSarwndFiD7q\n3Kkpo0MyQMNOyvbnKkxrDzlofCMPrUab1+2iDe3fNScNOXXNdLSuAj9vVK7m\nd7B+b8vehsiG9H2m2vn//3DCFxauswZ1hnsFKD0cwJi/fc58Qe0b2mF7P8t1\nPaXF1sC2xwzEhtJh5AvggyWm28E1luDysQ4MVKe/5P4mwGVxJm0P34ZXtTpw\na6hr\r\n=G9ha\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCb43+CczMpXzZgL/1WOufu/IqVGnBmFl1bgBbOK2szjgIhAOcbyJFyzDi9xf7ShWj6SvcekhTWOn1RQGszw2vXn41v"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603443919-49a6562e.0_1603444021278_0.8930719753907337"},"_hasShrinkwrap":false},"2.24.2-next-1603446803-bbf9a11a.0":{"name":"@xdn/core","version":"2.24.2-next-1603446803-bbf9a11a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603446803-bbf9a11a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hfQJls/qOv7kpUjFlerLLKkkwPjQhuI/Az6MK3lG+MYZwawXyd+bS/dMqR2yMfOihCQy9wN3Ogz4oueg8ng2Nw==","shasum":"eaf3537b1daa07fbb37444b35e4c81d9d38e6a88","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603446803-bbf9a11a.0.tgz","fileCount":157,"unpackedSize":603809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkqh+CRA9TVsSAnZWagAAER8P/jUWR2I4akeCYgWe5hLu\niIWm5YdjKykKSrO0vn5fsw9cHmkywBizTlS4MF6i4F0ZJHmEiOBkIR5dRzH2\nspO8v6cArVZMh8zgM/0a3PFQG2e/ZfhLtkC8KpzCtzEmijjk+KCndsgyo4fA\nXXg5ZyNqiJwhKtJ7cLV8QRtgGQyL/8EA+bZBEx46tLqmy5vTwp4twByUtPbT\nk1YlE7PuImBPoIKGSmZnegfo01ecp3bdzHwAsOmiJUj26JrH31MpuKiNZdbH\nNRGSK+EZOCr/+1tb8LNeNn2K+we9SXH9xkYe5gFx2dNfIhpXoKN9yWI2TahK\nOjfKR+xpOOyjbu72MvzJ31ysfVX+QeHZzablH1OGZdxPvMRFbVvkRQ4ecTg/\nSDBf7H7AuEf93/D/mYze7a+VehdPfx2F8xk8/TE1XT1rtlyK9u28MovHzc7Q\nkuca399LVrbXvPp4iFm5Tow/gIggwEQDesTySXd7xiv78XYlkySIMEt3xfdV\nOPHjtWDiji8K+x7OVtSBsrCJsqZf1yUo+45mQjf6KPZh1rJI+2BYu8uLqqbb\nK7XC4UrpGkgy4guEzVfC19cMc55NWlhJYKxFGC8ktIp7X5Xi9y0LoqzAWrSi\n58mdzeo7ptn1IhrpLE8CtTrCiH5LlCLTBMR/Z1vn86+ra8v+073A0l2Tl6LU\n3aA2\r\n=2teo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxx+r+BsaYElOookHblLo8lWtJJkOnmoTl4iDJ7Sp4pwIgE5Aha+UBH05aveLzTfDEORYEiDTO9A+MIukc6GHA/f0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603446803-bbf9a11a.0_1603446910286_0.30480439297654294"},"_hasShrinkwrap":false},"2.24.2-next-1603448066-a4ce91ab.0":{"name":"@xdn/core","version":"2.24.2-next-1603448066-a4ce91ab.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603448066-a4ce91ab.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-EkYzAC1OHBehVaHg5NS/fEFMJNWf3/1iExJ++cXHP5X7cT5h9XvqVuAZ5D/unurfMcleondwJYnLAIKMvBLfHA==","shasum":"d228d5992dc01cd80ed6615b08986c8ecb7b5a33","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603448066-a4ce91ab.0.tgz","fileCount":157,"unpackedSize":603809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkq1uCRA9TVsSAnZWagAAZTkQAIO+KGAQaBO+Kh3xFyhQ\nHa1YKH1BlycIA2v4+NHTLL4dWQl5vYpke2yt2iRh6Brsa5/TL3Xw7zpro3SH\n7rIQjzFN1oy9Pqx6zErtYe5rPRS/IPRheNjVSmnUQIkMjXB4CYxntUZznAUs\nBSe2z1dyxS2216AHgb6o6YiYhRMP7683XDv+2+M/54DoKGy6XP2zbuOFmUTr\n1LasY9Ju8itBRzm5Ny9ZWTEfJOSUSJSKqD78FREE1OEyNRNj5/vzP/enhPGI\n2rzpoS+cFZtlDjr3ZLZlJ+/Nx6L6rpS9NWtpwmWiJNaYcpDxMiqVlZtfSZfy\nO/IB2qVOxO7F7bijMaSR/CMTcUqgIjg86uKzejm0vO5uxhA1k3Noff0f1P9X\n2BlHxVhjoef70GekS/WZBqe7bbXPm4MlNOWUtADq3s/aZ22nep8DczNQbuEO\no4CBOT4uhsyRC1DkGIzCgkDTUOyGO5sld8WfocUJu+GYIy24/yIThaF+blKe\n7932zUBu7VAcKjRjpxbCFUXxQQbs+yWMjKLU4dKNhoQMQ+966K+vF34kzGEH\nEQhBhDn6Aq03tHPLErmRoZEKj/GyZSC7s63jlAE8mt1t/xB/R7c7HYvtM0E7\n4iMmUgGDLCnshXtlXgDOkivgH7eJ/FSza4PUOBT0ZpEw8P5suv0AMvrj0QNg\nTfNq\r\n=CwlT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDAhVVhKa8OKwdPjKfKgSVxtRkU+26GS1Uf8+qGZa0q9AiEAmIXYwoEcCXIy+bpryDSpRNVq/mweG0qmf6pFlHTV8Eo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603448066-a4ce91ab.0_1603448173808_0.20783228504016438"},"_hasShrinkwrap":false},"2.24.2-next-1603448956-ad2375aa.0":{"name":"@xdn/core","version":"2.24.2-next-1603448956-ad2375aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603448956-ad2375aa.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uPCbDYP1xWYQnax3nXwyzc0u8v3/poHjVwjqlTYu9auAZ6jUwvIE8CbHLy1NWc4XhcqOBo2A6IMtBGzl90Ewdg==","shasum":"e7092c8f9a5b6682e31ad19cd207526a5e31957c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603448956-ad2375aa.0.tgz","fileCount":163,"unpackedSize":606416,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkrDxCRA9TVsSAnZWagAAYpgP/1eb1dgODMFWl6hNj9MW\nytPNKz1TxQzK0HK5e1S2DMNgZtXpKTiOBLMgt8/3oT8aTlJsA1TaGUpDj3tZ\ntDeoslTzVJcespSJeldJ1rCxf11bbF/OusNy7+vv0jLd+UlQw6KePmHrVpwH\nG4w8TeTjhoDDI1pBSkE8VoxbM8NHmfPbtkRnvlbOMY654aTSj7LlmeXNts0v\nBEhluJLS+6KQUt4L+570XOumjMEynzs+rg9QtUSK+T3/87NpEkfvgwaxx7Q+\nl7CcpbxFsnc3Hkq5ze2g8f3WogTjk2fLqtmN9vc9udZr0/jzvKjuuas56CWm\nrhoo0ADIX+9QnU0xo9gyc0MYhXvY4ZY6ao8WkOTBa8Rqr4SDFyyFlwcVAO/j\nepp2xAxOp+hUfARPSif9YjwaMeevKa4ERXV1a3z9Aq8Kw9O7eXDH9lGKzNf/\nRWuwQ5/C1yNnzegy75cVXiOjN5cRU5NS8AmtqIaxM00o9uGQPhwYDRReD1PB\nnqcjpwASIlENP2VFPlY4P62kF09nY605B+1vIIN3ItjVcaOyvH24dO9sTsT5\n2XbRurMdDwCcv7WlTBZ70xFgfHWHGot5L+pv0oEUj3YGcI+b6sWG4hCxoG4C\nWuNB9bbZGm2hy2w6hdHsTlMUWYzGOGWyO4Z1281BCtD8Dans5WKbyGhsXS1s\nPD1U\r\n=8owC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDagKSFDwCfBAcuDMAbr4MlB0V8bzKn7G/xSQlmyo8YywIgGWsxy0yS/NGjWMIbGFm/WmmVeFPoRateCQb7VozqtIY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603448956-ad2375aa.0_1603449070637_0.2719021422214529"},"_hasShrinkwrap":false},"2.24.2-next-1603450039-4fd7d9ab.0":{"name":"@xdn/core","version":"2.24.2-next-1603450039-4fd7d9ab.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603450039-4fd7d9ab.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wQ6aaw2FaBahALUytRVUiKkbAHIDefSkmL74MVF6kvyl0HsUJ8A/bR2aNwWXm/fg/ABwW8eUk8G13sTZP2dgHQ==","shasum":"5b936afa97809e30803f1cbd6c8fc403b6e6eda3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603450039-4fd7d9ab.0.tgz","fileCount":157,"unpackedSize":603809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkrUlCRA9TVsSAnZWagAArysQAJIcAtZGJUJ3W/yR+8DF\nMZPwP5wVWjho54AuK8Giufop/n7520NGdZ6Z0gsp+lGxVfIAp1E9BNGjuKG/\nob4ccfDHud7uPNKPRgjCMrVWGayWZq7bpYmtjvBSSuVWzfnZSyYgM5J/i1Xi\nkTLJsbQxGHoQ70IgI0+A39PD1DpoAwepLVceLhUJk2v2ElD/rztC96RumcA0\n8Cwzn0lKJBEefEoa1c6iPbrDnb8t2SE4EGC4Z3D2XA4ej1tTlaFMrRtkD0eK\nI9I6kmnvXtt4ul3K6slu6z6v4cVrukD5xJut5yvnHKCOy+4Cn+UYGz4gDJsT\nk1NCXhyZDotQNUWA9fp4zyVPmJadOiVv7L3xBsNLsuvKAhgv33PRo2OAI8cA\n0wMkq0EYJlgXAsYUUxpMpyiu5lYSj9iHNYZ409MmM7TNa/NlhaFmvD0LkU/M\nX4M+fe+eVl9ocHWsM1b65GxvkRQcIkBHJIBVnlJLd/LOrh/eFMjcryGKZrj6\nLwDjDKU2i3iCewfOY6S+zeo2MmZ7yTc896C8WqLnd1sMTAavvEVeXS5LZEht\nAEw1bOObu3MXagWaeN46J8TGd6TKW0HD/1n1O5wXPNSigvf9pUHvQrCHPyla\nap0LoXJbn4jHssMTkq0n4t94bA0WGZpxy0UWLK1/6EnSPdyZzwgfe5neKwcc\n4z1u\r\n=rpi6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGw3BnOCH7wopdmbYFoIt14ZWb5zr8swD/wfZD7wmy+XAiAVPr7F4oCuhVZFn/veevb/flDiNLOuzNVz+nF8Jj3tdg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603450039-4fd7d9ab.0_1603450148606_0.8561771676443579"},"_hasShrinkwrap":false},"2.24.2-next-1603450496-d73055e2.0":{"name":"@xdn/core","version":"2.24.2-next-1603450496-d73055e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603450496-d73055e2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hrx06jb7DT61QiOuXf3/gpVXKdZ7I9hol/6zYXZzAerY2ABJ5Pc/BUs278sy63t56NOrftrZk7rGwoeRgeG1Sg==","shasum":"1108b704de068a3467b605136b331a7fd15bab01","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603450496-d73055e2.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkrb0CRA9TVsSAnZWagAAvQ8P/05aOxLhKvwg1bbEp2y9\nU+cgHdqM2kSkaQ0eHg8KCsdduJFwyihSp8Y5hS6IkBE/f2j3fIeBF0nIsxUx\nbsAFGmVhDKS6H2MD/o0/KozaW4ojZc2cKkVrbijL+tQpeRVCmNShql598aAB\nILbhLub9BgmgOlnV+EiaTFSochkwZs25a0OAr91cc/z2ZE8vlw4FbmvZl9RA\nztHkC06IAPIESpdWrlmQhsF7ZW1GQpSdqYtaMMI6Fkxp3xJ3y6goLlTzjxkw\nwQu4OyezGFu16htXP/7uun+11wXMoxfIp6gz/ojFhgJySE6ejhNYzs7zIryB\nvByeN7O4/JE5o1Un2UVKSmxz0EBllfiJkMbBczBo8Et+VMQAs1ZFxSn+nsRs\nc+FQIseLreyA5XxZqo7SWoDHFEqSKn2ydV03tzWlh7ZBtuReFyEi4sgzIDjK\n6U7scXME+ZJXdQlicvp1Ww4tdyfOKTqQ1rqc+/WghNThGVu4sC9WIDrL43S5\nnvC9QL94WwEgP7dqnrCi+TUU/VSvWdqfz5XN6Uj3S3MW3/g06f6fBYRmvQjI\nPiUXxm4XOIm3H0nTbBI2E5WVGxTxUfc7qECJsaBjWZdl7IP/zrdDld1QhWVl\nMaxdvETJQeHG7LB3YOgGNybAOSLAvbE/izpswM5g3Z9uQrC0kuJ/YJ9+BxYS\nnx61\r\n=M6yl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG9I5LEfXGi2Riwzem7qrinRbcusSWpxJRzYfDqx4PaDAiAc7stIIMY0KmyFCRXAlUorp8bKXT/8YbCg9RTzJTDAIQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603450496-d73055e2.0_1603450611816_0.12954503968895414"},"_hasShrinkwrap":false},"2.24.2-next-1603452949-5b2fc941.0":{"name":"@xdn/core","version":"2.24.2-next-1603452949-5b2fc941.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603452949-5b2fc941.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-viGExa5FqZDvb3WNkvpT5vdkfa9SawvvuyUvFk9hl34AOyCCUapsG4h9eGs0gtR/3t4yVYhS0SMZJLfeRdp2Sg==","shasum":"c1b9cbf01bacddb245c5391a4f906190b5613ac2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603452949-5b2fc941.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfksCICRA9TVsSAnZWagAApn4P+gM6gA1V+OuU1ZSWrzeS\nVvT2clNQDpiZZbrNbwfW1XhiiUJIns5MqZGtpGt/vFyWTcbs6czY/nTq2Ped\nrvtwMPSJOQHT6b/R7XRbj6aPaSaLI3M8SG88Mpdb0f6B4ci24t2QUS5BnPRu\ntyQrN8ZjGPS892B4vn0O5KntO/0gX6jyB3Y4AJ2EuTsfVFPXv581vUk4XmIr\nn/az7zSyZaj/Kn/F7HZftPDlfDGayghBtamckzfgE4Yzp207VoO1pIkI12EE\nZblFQ7DTwosJWVKwFbxhQ//g50K7cHt9P67A3+BZbIhY4dktcMHeFtueU9wJ\nNvZIkUfWq3A+MaGFGjNX2ekGMua9n71yp5apmjXqiL5q5f+O+0KL/f1aT0Nj\nAU2SSSOvPLSvF72NLxA2HGB8PFpt1LuFwME97nkDZuexZam8TUClHmI4Afjn\n/PnVg2ViNQRvDp0fdzZhfIHVGgg7uMjkbbH/LnUiQXg7jfxKqPz1m7L9gn+p\nuASYp2+Jf+ZLmSEUPJUerc79Je5KhlBwxdLGKNXF5cT9j/JWaKYqQUFhQPvZ\nTPRIin+7FTLOcFlmVq+sAjRg0iqk4ynQVLgTs+VldVp+YLfngcWwmuq33tzG\np3SbiTSiilscPtgBXVCnHUqEovus19uBN9RtmN5N0ZvFySZmpu1ls5xzvknV\nXObr\r\n=rtpD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHQigHNB1Fwx0e8bq+wVpS1zOQtEEvh0ACaVaiEoIalmAiBUTIvGNJwBPPqLpErjZZUfbQB8xxKgRlaRxJKPw8SyFg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603452949-5b2fc941.0_1603453064194_0.8425406678992129"},"_hasShrinkwrap":false},"2.24.2-next-1603454500-d6f5ed75.0":{"name":"@xdn/core","version":"2.24.2-next-1603454500-d6f5ed75.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603454500-d6f5ed75.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4XGSpkvOF8TPxF+ovWdYoReKD0oXZ/+23FA93vD8n7HKxVxjsXU1bvj4f8EHaU3D/+OPi8qnK6SJw0UsmAxuig==","shasum":"a9be0d129e3c5148c77e7502d4a7b46959bda7f9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603454500-d6f5ed75.0.tgz","fileCount":167,"unpackedSize":614780,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfksaiCRA9TVsSAnZWagAAQoAP/i6YOTPbMbkqxUT4V6pn\nE4145GBVWE1rmEYMlwa13NrzcvCUtMXJPRPOPm2m820LAtjZwCV1Zd7lAhI6\nQhCC68KADJ5bfPHWCQocCY6Sk8wOvTnFiuNqzbiLbzDT89iy1xouGKwn2raD\nXyfq8iQD6aEB6oCYAUeGkPdeIkQM/VpTHO9DtEfhj05w3Zl5V5iRmk7QsZ0w\nm2EWAjWi7ytzTwC9+W7kEgho0K8/0G7ZcS8Z0Odx5q3tML9AFgxPvsgjeIFf\nENS2+Q9DDnF8NQ6NEA2ury2tcSaKWGRJ6ntJ+0jeTkEkYYo1TPS+OI6e0VeX\noS6E+4Gki1x+gCQR8/GQLoO6heaMvLY/hDWgLItQ89z+yyEup80I7iQlFoKb\n9G2gyGVY2M7H9A90NpE5dAN4hoTWFloA0h5oZP5/ybyLO9SoMUdktt41RYSe\n9mVAPV5dr2Inq+T65o+7ikdiwGdN60UPX36McQWVHGF6hcH3jIwwVMLKo+cb\njyFmIJuiLZ8XDj+kEaxUSSf0e3iuEvC6dEkgG1dIPsZ84lx2dL9sx25ZDpBM\nHsR1NkGG0IDOC7NuqHAGDZEoqfcnWAqiMD3rRwDCN+imndARfNdYf0AlHdA3\nH5ykqg1mX0s3xTngaXUQHB7M1WCUUlhVtjsGXhqzcbpPwtibIO0oIwubXats\n42j/\r\n=VuhF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICujqU8Hcon7+4Se25cToXN7i3uI0wzGPmYWXINIIIAvAiEA5hHlOQ03eMPa7jOjWblrZb9iEpbphQLZPaX4i69etKM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603454500-d6f5ed75.0_1603454625576_0.4916876013892497"},"_hasShrinkwrap":false},"2.24.2-next-1603454821-69491ea8.0":{"name":"@xdn/core","version":"2.24.2-next-1603454821-69491ea8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603454821-69491ea8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0D62Aof5XqaQOAIojSHmlblzbWdoKlNv9h4ID0XCUFLArQfBELaFvhFraf9bSatOX9k1hOPBmRHJVQ7W39fbbQ==","shasum":"7d2d1ac29357b15e5c4ed0b8fb56742a7c0b5ed6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603454821-69491ea8.0.tgz","fileCount":163,"unpackedSize":606018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfksfVCRA9TVsSAnZWagAAMxYP/3hTgHnr+rbXV8skqEPC\nP0PXZ5/IGwax7ReYO9jAauhNecpPP+d9cE8sIZ8c8PS405uHPulpBsW/g0Hu\n5IG/p14T1JFZsvMwP0eiaL45nhvxTkRnqlQ3e0Z54+hU8tbotktgpt88NBAj\nSQaRNKyUZScgfGZ4emkncOmLD0sgtvebd7kTdW9JSUlMrGvpT3irHw4sLYKS\nKZWTy6CocR6v97z/ds7rZBAk7TIqbTXCPoTJMueyq62E2bE7NaB97CyswhEl\nCUOPIb0yqrFKvSDZkqX97ptzJJs93Yey9niYzRtIo4X5Dov0HDKTd7QZIRIS\n3p9ncIjAkZar/44dPQGkCAKrtNWnskvRpqZt2+3rlCKUB+y1mcMOCDnkmape\nfCzNwtKpvok/xwJ0Ieo1gdqP2zMu2aVHd3VxTNCsrnzuAHeFq9eDphMvQPx0\nL9h1ngtKsut/4TJuxKgH/r2MUOjtXKwgX9sjg9a6NXmoRZva2yecmKfTA2fL\nMUmLxV9Y/Nuv8KXdsMsepbAeD46FbEIkRRhlR/ycq+LZXGy/U9NkDVC0gJHw\ntJ3DCJ2Nez+qwQmqXalo5WcucHlflhycehTpbzm64J5tfXbq3DkKrka538NK\nCGpf7rf9turt/+eUr7o5GfCKhx4MDvsOEx5EIWaxquITBX9vcYL+cN+NxwlO\nZgYm\r\n=dqMW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC1W+AK7xb2JeyH4PKxFjTGfrgc1ctghwnq3n2zGqNUWAiEAvbp/DxLNh4tBZUAFpcZNEEBEY3qRKSpWEML0ue8duA4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603454821-69491ea8.0_1603454932997_0.5745610529450813"},"_hasShrinkwrap":false},"2.24.2-next-1603454933-4587494f.0":{"name":"@xdn/core","version":"2.24.2-next-1603454933-4587494f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603454933-4587494f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8Q4fnupmBZMZbnZyCbQyw+Iq5+Hj/w//pddLKJLIk2t3bfF1vcd1oGNaj/bi4aDQxW1eKo5SB5B5z/VwFdQC6A==","shasum":"e3e97dcf788e59057be56daf2fb3bdf3002d09f9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603454933-4587494f.0.tgz","fileCount":157,"unpackedSize":603809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkshJCRA9TVsSAnZWagAAjpUP/368iP2mIbBp/bXG1ki6\nYPpEhH9M76D/zIFpAXEh39L4mP0pWaXGAnjEybzvqx4gmZAA5J3igM107vRg\ny/1sz1ejyLYrOrN7NwbVFctL5cfH/P7w9oTCmo5YrqArNKnaIz5tx1WvmrzE\n+96nb5AmtgBGDxvFC/ULOKc4KOzWhyIeIpnx7v3Fea2qKMQodheSM/RYZjDp\nWyCglXMducHMxVKXoq+8E2ntpjt8hXihizWkIPxMVA/lSm+AwDSAoBv+yAh8\nwnY5Jiso84eTqreM0Z347wsm0Z/uGabnK6P2U5L4f/RaCE9F5Up5Q5vWrK2I\nsmR0gWnS/fpARympDLqwwAZ/iHm+4KxE7ofkE9sCpQgSAPJlqIAmgIczskaf\njNCJrBlVTLl2h16Y2f0kNlUNPZI1kfU9pjvk/c7GZnOGOQIIWwva5NWfO5rB\nGRonmivFTtwNY8v+6pU7A/nUIw36rXqfJ322PJlP/mAFWRnl89yhymeIniZ0\nqQ5Os97JUIJyFxA2p9bq4XN/8T19cD7FG4SNZ8yau0Y6RNJ8uTkIqo/XXAfM\n7L2FM8oXOWhaeB5yAzXtKTPXrW9F1S1l0fOsNwUVOBpUJ04iQa58iKBJJuRd\nG2VcivYKRja/AZSqS6Ht2KbsLEXnYfhMY3JTREZh9tA1iFNmi/QxYhKW38K1\nrpXh\r\n=HDLj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICcaJh1qxrhG7wlxJkvj6qppumsHY4mLGPj2tO/tJEm4AiEAuvdxL9pyP7VhTx0wrcT/+qpqCvBQTKIGjbAVL5X9Lu4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603454933-4587494f.0_1603455049313_0.7183258984880965"},"_hasShrinkwrap":false},"2.24.2-next-1603455061-5a757eb5.0":{"name":"@xdn/core","version":"2.24.2-next-1603455061-5a757eb5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603455061-5a757eb5.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-cumOjPOOcDJpDq1lEyToXfAkbtjF4dYUkdbQytUO9E89cnOvpxwXxpD8B8wg8CPs5/gzFAT/A9bAJtPcXLByKw==","shasum":"b3b3de5df3d8bf7f3e82b01c50a6b60a0ab6da85","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603455061-5a757eb5.0.tgz","fileCount":163,"unpackedSize":610847,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfksjFCRA9TVsSAnZWagAA7NgP/R+X5yY73Oqn0ivwIJYV\n/At4EvGiM3WqNSs85AjJ2de85cWu34IBEA0S2v807SI81hj2W2+k4AoRgsTH\nNM9VY8eTdF3LyhgI2wbCYr0VpYKQpHojS7ssVlVTDJn1cPiHiumFGylnC7Kd\nJychn/36P4E6CXWXASgJwbcYqmwFCU8mNY8luRE6BkhGuwAlfO2azqkg8jDS\niEepqmXysJkp9XUmHiPf8eivZZehsOy2ZtnrCwjBzQ3ggD+dKM+yRyOeKTB/\naxP4+T8sv6Y9XK6lBoVlg7DrFgo4VPYzcpliuQWeTEWsOj+uXxVEHYA1qTpO\no+vm8KE2au16kzIispuN+YvTNvwj0AgzLbmL1/QVvW9A3UZ4KblnFi8E5RAJ\nG5AdQriwOehF+j5pe2BDFYlCokboL83Aqbbbs9NwtBUcDacT0sldbVE1Lnpt\nGmRXQbT5myVRjUFF8ea+JniWnbC/T6AK4sE66RnFHiOvVALq9I5jtMlqXOP4\nXDm58Fde1lpM8BMQQFL4BQcTvIKrJyPa8+mWn3bWVZ8JDEFlERCk722ufqMW\nIyeHoC6lXXxGD0zn+ALLPkiJ1Vi3tbjDyLPDvwyOIas9cS+yS9KIFe354xdy\nSmH835h4Km98iY87ZFl9EGN2iQfSYIkRdaKjRKvSLKdeI0Ska/BHv/xszx05\nHBOa\r\n=mkOd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCnA3z+P9ymXbYMe4qyUXrY2j2B1NnmoFXDN1uy2kHZQIgRjLCJ2aJQA5CibRcLwWIcYt3V9J+NhCmLVfJ6mplYzA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603455061-5a757eb5.0_1603455172444_0.2907818110398104"},"_hasShrinkwrap":false},"2.24.2-next-1603455826-f279999f.0":{"name":"@xdn/core","version":"2.24.2-next-1603455826-f279999f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603455826-f279999f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SS6C8NZvfXDwsCMXeohz2cpCt1Fw3QPBw+Wvx6lXwfSuL3hskQZZCtnieqsp7ogeOkaVh1y+x6uaiBVmZvc3uw==","shasum":"7621822b008c7ceb56d7314d63062e9aa78cf63a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603455826-f279999f.0.tgz","fileCount":163,"unpackedSize":606035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfksvMCRA9TVsSAnZWagAAsPYP/1/VGxx/b2cvBF75K69U\nGTXgaNTN5h+MBFJVDdw/jdUemk17Oavf20W+u14NRpS/GJ8DEZFpY19kmphi\nn5o1SP7g6e6XbyxfZ+nTtTzhtb9tY+FNmXO8FCTV/DpN+cgnB9aE+nt2w+YB\nZT0qzI+Zk+Z0rzZiHlTXmGSzoNDhJuElrnhr5peesIWweYwmdoDYnqFZURrD\ncgrz2A05wyaMYtdrJk3hIZcjtUEXZn/QtdGiPIEt4XQ2elEzperQg96q01Be\nhr/RGjNixfdmRm/nnXIW0UjUsJSVFotXXKO4MCTTveEhVRrErB9szkh9TVR1\nZg+J/3rt6aZpj2CwZTXfS0KaodcJVkUoAJ3oRb0J+5KvxTEDO/cXTGW05RVT\ngdfZpxy69TM3PKj4UCpzjC+CdmNUA3AcSCZ3BWXuuc8ik/xiqAKdBwB4KqGc\nJG9m228qHddKW2y/xjH9kDCvr6cAFwwVVaprMz+6EZiQR1AVNS5oTc4/XlBZ\nbiLyZMJVPrtmxPoCZQvNzup/BLs2IidPB2UGCjjHIRN++cpWeGa1cX/8hI63\nPBKy7ZuRXYwczcIWBf2kFWEkw+Xk8hUDGuApdM6nfiG5HnrSKgIoonwWHgAf\nGSCditkEarkmbhQ/WAS5ne6NxDlbAuDZr3jgtTl+DvtAYcsP3v2RKnSk1tsF\nPNYx\r\n=ty8q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFdS8bgHGR5SCH4Xtm7W3M1vMO+E6BXo5rRS585HDYUVAiAy33Z7lT7bWNZ7iu5zPmfAUxDpD5JLdTFxJrwO+fxKhg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603455826-f279999f.0_1603455947633_0.27769938294857766"},"_hasShrinkwrap":false},"2.24.2-next-1603457149-4b4c966f.0":{"name":"@xdn/core","version":"2.24.2-next-1603457149-4b4c966f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603457149-4b4c966f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vS8tVh0u8T7WtxK4mjMDxASLOJSaIrwKPDsUWvA0XUFfnQdouMi3+56LUKrwd6labvDFkKK4wXY46aQVEb/6Qg==","shasum":"d40b86b0d53d199c5a01ba48ff281d960536cb3c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603457149-4b4c966f.0.tgz","fileCount":157,"unpackedSize":603826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfktDzCRA9TVsSAnZWagAAmkkP/3NEdw07MKTblR5ew/Is\nOfb4aVuxFgkdINgD695RHKvDkORCNOkxrUFvncizps9rASg2cKqs0IjyxaQc\njtgD4sOmjQC75pIdTabJuRTvuNpEEZDwddcWED4kPA4kQ0uXvrxDJZmJ1F2G\nXjoY3xXg728DC6nUUf6BBY226nxyu7TPJ7DJKvUDD/GlJmOLQblDYN7dryQN\nkH2IyF8+MysNSmGl5cRogKeEvcvnHXNks/gtpgGUI3yyOldzAq11inEZ9Us9\nzWZX/CcC2tGFwhbFC+vTCdvx4mWJJDHNrvXH4oABtafRF3vXJtZVSlTJ4OFx\n85/MDTP6MTAD7GHYLsdJlQlhNCbUk53r3tYr+jwertmdQ6U40mI57MbnVF3r\niJOpkdECjsxGu4dJLeqdbgUnkuuahfSG6ZKWWzJKdl9n584MbJzmbBx6s9qd\n12hertftWJWAT+RfyNX6+4dGHkBh6NxSKtv4mbwF1MZxw4g9FT+U49KxBHZm\nH0i4fCL9NGUmLG8D6811ncohpBEfFiA2qhk/+oZbnB3Gi7FJxYiporXV9kwE\n0W3gyhJKvZ4sQOYjNhTMyZQZkxhY6z6W86wY19VMPeRgO66ryv9ra1wLlm+K\n/F3H2FGwaBLENuWjFMCNagDYrOAiqebpg7u2GNB7p9eBmexqkkhbpHbZ9GT1\ndqpU\r\n=NTup\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICWLQKSWAWijSGoEg2e5XLLnBx/7LIh3Wj8F8VnLn61QAiEAu92Gs9CAIgb0HznuoMv9593SlwBcS7w42iYqcPd+77I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603457149-4b4c966f.0_1603457266442_0.41577164757227836"},"_hasShrinkwrap":false},"2.24.2-next-1603457879-b94eaa0e.0":{"name":"@xdn/core","version":"2.24.2-next-1603457879-b94eaa0e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603457879-b94eaa0e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1VfSILSxGaRqGO+ERnkRCHF3GzWtFQddXDL7XTw/ZlLVqYJnO3nr1If6PG4fG9tZYQTk7MflRDmMDGs6LJsMww==","shasum":"809944ae60e6cc483d74f7412a2a1e907a8e70da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603457879-b94eaa0e.0.tgz","fileCount":165,"unpackedSize":607336,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfktPOCRA9TVsSAnZWagAAJZ0P/Rz2EyxwMsuBB2uf1Qs3\nqqvrd2I5tAq/VRO6t2TSxqAQ6l3K2UNz6iiQTb1XinEUIR/5aMyWNrTkmpqB\n8va/oKHKlViow13LU68IHfxs0zaAtj/oN8837afUiBLTDmnZn12ePxzGswAJ\no126pZ86UlpVT82y/Q1JuT+DfW5RECciGfqiO8XNYJduBkEi09cRAFN1Lhxb\nVkXrPLv/iLl5VulVxYv8I1OwxmUd7POqfjRwCAU8f9j1cS7IWG9g7pNa3vWe\nzfc0D5cTlBC1LcTO1t8M/NKcdrtJraKajrlo43tvz8JFSvPteo76r+dgyStM\njERPBvLXV8rg6LbL8T2iEzYYaveDAerA+ZzUa66HLOJOHMRI2YY3gs5qJVS+\nS1KD1xoUV2v1MA7CYio0y58jxmnR8sld9Pcvnw2+3UHiX696Ou/7uVJwA2K1\nFp0zCROWmYSxyEW1TfMizPWkPMAf9VUlSadf+3nDevBwt/8723j6KZB9XefM\nLmN8gRCmlmHBYUuof1Mz6PXhXoIhg2DAQrioCZpS7hjxK1Kit1r1+8/f/SZ1\ntrc9BBX4yy2IxTDNKHSZOZheZ21sevnqZQ9yiaZXeXWzN1J4nIJ0YIe+E12r\nzxh8nvolDSOcTqetODR2jg1zFi5l8vSCtTSmeCKcTLEFMtY39i1ePlT8/RJr\npWSL\r\n=YNK+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmTN8726GW30Q82cJ9gI3Te9tNky6R8l76qC4/kF/ADwIhAJFfsl0HV2G1I+8XvQYvb/e8k937a2MOCUzn8bvjTIBm"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603457879-b94eaa0e.0_1603457998155_0.8105462490543258"},"_hasShrinkwrap":false},"2.24.2-next-1603457954-f5109fa6.0":{"name":"@xdn/core","version":"2.24.2-next-1603457954-f5109fa6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2-next-1603457954-f5109fa6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZQt7xSpGvFppmKHOsJ8og4eodGxBFyHqbhl+Sq/Fb9seIfEerBuSJlXumirChFAjPvxa/wRvi9gxOga9wTsoEA==","shasum":"2cd3939b535ce03a8ef76c4d38dd1c517c708845","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2-next-1603457954-f5109fa6.0.tgz","fileCount":165,"unpackedSize":607336,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfktQdCRA9TVsSAnZWagAAGucP/2S0eTWGqLPiIS2XoSRY\nr05DBMznu2RbKkF3V+odwdc2BGMoqUpv8cPlz3nRbAsMbJqWwL/Cv42Qnp9x\nK5t2Fk1m/LmTi15rb/O2KR4ktwLHLDGElTpHdlicMqEga0A9/qFgGpfvm0LT\nabnaA4zAwvY3teVAQ2vbVL7DaQkYqW1rhp8DyuAy/sM81IWTkVatsbzQ9hXP\npYsWfkzjUX8a8PChle7u/2WcJSA9ikmNJ6MrGltiWkriECk/rIdDA79jg/xQ\nYYXm65MEG7LpoakHmr/w2AxRsZHiYSJUY6QubetVFBweWrRyQfptaz5Lpsxm\nd6WpUXnjDxHQb2SqsYxzfkVBRsOTyIM+5Ve09zjo2WE4lxHXBvk+lfZ2cMMw\ncsKrp2B7wCb+38Qrjflxmd9r0DuNQnkrhYnxTJquUT7A4SinWeE6d2YBXOdJ\nzREm1X0lmubdJgNlsUWF7A2kYYOBwzlQaWGCbp7hSiAlc2gnwVjVvawrM3Oa\nNii7Wm3aprq80pVrvK89FCYwvloGr7WaYJjbYwqfXWNkzd2XLDLTYu3/Vxs2\nKDtaLqGMBpsnnBYcmymHQxwPyur4q0+Fsf0l+zMGfmj8oam40yygI20vFjvT\ndMHhxnj2E7Dq8BVlz51ZhqzU8t4KaDfQREAUL8m5l3103eqV2F6hk6GaZ+9a\nf7b+\r\n=ZEXc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzyD7fqiLQry5AfCbSBbtNfhir3iKTHzv50Pig6PNNFgIhAOH94a4od63JqbFkemEUa9du58G39gyNpuQqc79yCoGx"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2-next-1603457954-f5109fa6.0_1603458077317_0.8732486202079994"},"_hasShrinkwrap":false},"2.24.3-next-1603458209-2e145443.0":{"name":"@xdn/core","version":"2.24.3-next-1603458209-2e145443.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.3-next-1603458209-2e145443.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-fek0JeZ4mvIiIqwy9LSAvvUJckOuvcN19WaoMhCMvj2kyqzxX8bllT3oLMPJF+QVZ4/tSEdXU+rUlAup4DFKMA==","shasum":"48bd8ec251a25fd1e9272657ef899a0a68f759ac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.3-next-1603458209-2e145443.0.tgz","fileCount":163,"unpackedSize":606035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfktUYCRA9TVsSAnZWagAA4qEQAJB56xeUiCzGC5KuuBmT\nQi9M56Cbc3q1zpBj+seaRGMLZ2ImidX3AMxBfpUuerm66iT3Dbn2zAreJKLM\nPIAOxEh5wK2I4l2Onbg3Awir1NiFq6uQvrh2giYE9CiwmZpOmU3bbopg7giC\nzR04GW0H965pJnHbE43D5hilG3vlH+nF7mP/rJi1sKbSv+HbISGC1gELaQ6j\nZLXDlEvs2p62CWmJg9UpVqBkxS8NrunE0NCIsMnQv63PyXPjfIydMJVqQF2M\nk2Oql7S917IoDIRWx6gueg5ub275MyiYdDw1drolqygWP9dA4lSLYY2w3tcv\ngCXuHxXekfcAcSlu5CJqlfp8d4s8PfnOhacbvXU8ioLBK1X3F60SG5//7EkM\n2st7Vq5fCrhLImiQ7mY0YJc25AsdHikEoiuJ8vze+k1GqT7eNXp2fMWQiCni\njHNIRFzl+zO+MExTSW20VAAci1q431UUOBZCudP8Y5MsryCV6TtD5Deg+rNk\nvRr+/dDVT2IVGGNDjPw51FOFhNXXI6Jbjp7GwG8BM4992lCuu17YP1Z4SJmc\nax8aclT43g9vRiOe1FNiKiH43VkHIg+ro+nkuFlN7cqGOehteHtDaKT8yET4\nmSXAIUin1xs0l7NYSPq67WhC4aiyv22S0iGR1icRgcHj+T6JCZb6kXMogASY\nYShq\r\n=2zJn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHrngH5mLLB88sYjoOIb4sO9VLLwxGSr/wF+SdzweyB9AiAIJ8fQqAL4X9K3JGukiEz/xLZ8uSoiy4tkg+VzJ28daQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.3-next-1603458209-2e145443.0_1603458327842_0.15717346370590102"},"_hasShrinkwrap":false},"2.24.2":{"name":"@xdn/core","version":"2.24.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.2","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7nHQLFjPC4Fx3MB+4j4NhBYSat0hF2YHzYJZgvxPK8nYf2dyakUrTHxJdgBOaqCOpP7KOciPOqwC2EP7CLFXnw==","shasum":"39f7d3977ee5bf0ca2b8f5a933682c0ed21b9f3c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.2.tgz","fileCount":163,"unpackedSize":605981,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfktZMCRA9TVsSAnZWagAAraEP/1OTXoVV+XlxWMFRC7Eh\nf/LxhpHy3aXTtHBKgZg7k0dM2dN4sst523cx/9Jrix6+aiWYufMgJT3FS3UF\noXMhhCja4nmOLLTnd2+DbJp0P+EV1FtbcNEho3krtNenLHpCNVsxFYn3lzsj\nLPF9bn9Zcp7/v9ukR7j8w11Fe2ngvV75qWiwB1TA3R0wGyjFo1Qad0/whAJr\nhnn9QnYYQcZ8zwzN/AZtBbsLBs38YN5ic6geXeSEyIG+ykHSxKMbu5m8f0Gu\ndI5Mr6HbEh2k+GxNX/pevo0Is1gj68bqTRmY8K4VWGaI8/UBx0BJzg5WrLpK\nP2G+S5PHaBkzRMyYpMdSAv7m6k3w84gCqsymVmnQh5vu36ncJ3IB6SpCqhwO\nvLB2ZegexvWd7kb8as41een184vWqkTmvaZFXuoiVNSoIDefN47owLt4o66G\n0/c7nS8chzReRQT/5GCuBTFV43eSw2wR6upk7Cle8Wp2MrVE/CZukERGspZ2\ndme7r3t/iHI0sgvAO5V4BCE1tZn+Z44J7w8C7SEaO0pqxYMWyiofWtE9KZID\nKUi8VfEaadQk+652wFBJklWZSfSjsMm4FNqM0JEeJduSDRm5Q0Z//ddx3MI+\nc4ZIZE4kT3uz7ltNGHLEVnMNz8IyMB6uZVqjxf88wF5IyfZdoV2UukjazF8N\ngj44\r\n=aPav\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkpj3OsxBHiX48t0sl2Thw6IueuGZrbuZT9TvqX+JNFgIgGrtgWk4YS5Ga1T/0rXR15FmCmuDvTgdZArIag1Rbq4g="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.2_1603458635507_0.07134479407199623"},"_hasShrinkwrap":false},"2.24.3-next-1603459068-1e927a3b.0":{"name":"@xdn/core","version":"2.24.3-next-1603459068-1e927a3b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.3-next-1603459068-1e927a3b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TUCf6tPib58nhXl3RZOTRkbOKR4JOYjfl3iwo5wZvS9DKpJYBFJfurEP+ies2A0Bief0xkCIL9O5gB+TY7uqpQ==","shasum":"e521f36140216cbc22ca4f1f5423be0b87e1ad05","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.3-next-1603459068-1e927a3b.0.tgz","fileCount":157,"unpackedSize":603826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkthkCRA9TVsSAnZWagAApRgQAJpXRJSchpJMeb2I+rUc\n6s4kiDNp3YGLKEvVKMAxgBZaLiOvl9yOk5v1buPrDiTYjhooethF930AOKpu\nt+6m2VFCbP6MZoXgKA3DQqDxfuhG6x+I1dx3PS4kEufe1u8rBYiQOnedeFEI\ncptFUrWn5h/cqJ87kK//7xW6bPaVZYGli9FNVfE1HFwatweCOutkMQqMgGW1\nkAXi7GR5iD1/1ziieHg6AhXGBqMllJK2678kmZGHETwHDME6CPlBrheMyO/V\nt0fZ/S0gjmhobSKwWubSCFaVJhQBmjk9RdgQl1tjeO5mJGHCRNw8UbCVGlyI\nfo+/YEX6Tl737cha2fu5sDWQL4BU1dvYKxZhKV1fsGuJPmgyG+stsu1Xb42f\nzrv188L35d+8AVP6yt/plKRzbwb8OznXI5Peuelo2xXF1YzjFav+lcFiq/D4\nIiLW520AVl3XjGMmXnSOrv3QDySn6ZyOwEVwgRlj+35Pz82qgKNQfza6VIgk\nRiG+tn542E7WMvhqBQwf47uKC1eNQzNQFtw1jIDEhk8Jp3uMT8S1dV25ISpy\n5ZdZzs1s161qx7WWAKIUwTxYF2jMKpjGdkBoVp/eggLwhSUr3QzpHj5fjHOs\nVoh1qtdtRegLMWwiOvKbTdVrUl2o2YJmqedCDx3ssi+6P17D6jnqACFw1lrE\nIfa1\r\n=BTrv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGtFucM0YRk3Seg4kgqFDsbhfusMPuIRBWnSmtnldpVKAiA05MLvf1LiYxHbwqIeEqlBYW5OpdCB7nW3u2nCNUm2aA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.3-next-1603459068-1e927a3b.0_1603459171479_0.45893024009480055"},"_hasShrinkwrap":false},"2.24.3-next-1603460752-e18c47a4.0":{"name":"@xdn/core","version":"2.24.3-next-1603460752-e18c47a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.3-next-1603460752-e18c47a4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MhQnwtNeJBjlXdVl7scuPMiAp/RdbZhGYyYVqfrCMdlJUg9n+9KmmyHHKpRiip+HFQzayluP1ve/32QOhz2nFQ==","shasum":"820f534693355eef8953c76b2ee5ff415aeae4da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.3-next-1603460752-e18c47a4.0.tgz","fileCount":157,"unpackedSize":603826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkt77CRA9TVsSAnZWagAAvIsP/iFhlIxincUOPljvotkz\n9FIiYj/GUBg+OMiEOcY3DOfWmzQP6yHN//xvbzDUktxnoioM7zzNXm9fxSCg\ne0uym5qSTKNbn0mpWJa63z+L3Dfwgnv/MrgusSZbskc7Onsg9Wy5NYMHQVjd\nuJk0MF66MWy/REJDuOaah1I7e1HCptFghii5/MAxIJaUbLY6rIYfj6qqh0lb\niFVDu9DcYhLVDBwcrUigwcMbyxcbrypRY3zKWvc0VuhP6i4krxcnUdiAHIWL\nOiFyiq2ybbl4/Kyt4XwCRJw/tSTMKqMFk1iLp8pl59zhNJtf64MU9r2tRik3\n3YF5veM8MMrwPwIcV1v2hsXfePt91m5iUckY7JqhcWCVg3QlT9J3ASdUGIKK\nL6DzFQ5pEjWiCiWrMkO/C2JSqyujpFDZ6l7P//n2rB6WezykkaDERC3hoUQ3\n+rmWkZn6J/A4qJrqSHYYplq1kNymsW/zrkN0WGR1xd3cpqiC+BaRPPMZd5kL\np32wAcSsZW3yDxJ0CDxiYAsXp43P73fvHA1Ljj4utBXQQxWMtGpZerZKIX2t\nQESH/45BiXTsZZQFpBFEL0gbspOceLYYbpxD/h1f4L2cjv8kcAZHHWCMjfqx\ncOmf5d2mEu28DzKzccXUYsawc8aAegA5VvSKoW9sJIDXU/FeVGUa93ETuARM\nJTqm\r\n=hLM2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5svtlAVY/XJ6tBQD7ka5mzb2Xy+QKiZzxhJKTyHeVqAIgXTlWrxAWLvEoOl6OuUCAfGkE5h3+60m4Tt4sPu714b4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.3-next-1603460752-e18c47a4.0_1603460858871_0.5608824697976518"},"_hasShrinkwrap":false},"2.24.3-next-1603461838-cbdab423.0":{"name":"@xdn/core","version":"2.24.3-next-1603461838-cbdab423.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.3-next-1603461838-cbdab423.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-DZHi9f7zjXx/3TGB87+42JX0h3R/0rNEiNj8YeDLsbTTctZKigwpBjTix1FcnVAbwYl1USr6u+tyJdB5olKznQ==","shasum":"11eec4628421f319766e4c48f2f660383ab58d87","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.3-next-1603461838-cbdab423.0.tgz","fileCount":167,"unpackedSize":614797,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkuNICRA9TVsSAnZWagAACKsP/3TB37JR8oTSmE09IaSv\ntJ+/6km9PPGK+8h5A1xVA34zlYY5iHJFkJWK3xKbU5nnbRzGe+98S4trHjQD\n/e6wBxVFdHAjEj2pquo3NbKw1T0utV0E+kdMH8gqFCfy+jl5NB50JxySL3Ai\nxJoNUqOyIrlRUkzw26Y2onAL/SWKQ3ypXHOf5ojm7bjKKTF/KQU3pA2fUMyM\n4eY3GiLZ5ko1wnxOHscPpExz+d8VveiqLp9VDWxZoAMTz6EaXXFzXB0EcRNw\nLf+dxNpml3athwKkGEMO1S+0NnZBQOplMBVQgo7Jf4LQzl0PkKSwiryecOle\nQjwo7nDLdIsNq25MPFHYx081IOmWszuvZ+OBdpkTsHr31IOAqCPlikpBq/Gl\naxp9X0hccldKoPMzXpQmqeIBj7TOh1hexQrcSOaHKTet3covOoG9ODjJyaZM\nPlEZ2/mP2/HWSNDTlLOMRP5wQLkW/GVY1vwPdncISOhfNYJcqeXEH3JxpaRF\nDHlbISRnbAAd/BlSZ0Ai/kwkuPmEKIWekDmksxQR1wptwJ7FRefJFWeSEu4R\nZsYj4YPGpSg1quUdDS6RrMLvNQNbm9PxsuWAfJpc+BKpQfeIanYOX6MhVK+K\n3eXuhQuNBkxGLps098C21hkSHPVY7kn+bXCav4qH40VorMMicyBt0Ox3mqYE\nb+Cv\r\n=GR3c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGRnJikNJmLX7FF5wDuZ+nmF2ywKoLSW4T5leksALyWSAiAcfEVyLEjiTI+lYCnsFHdYas9wDIJsX1CPsfp7vtnQvw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.3-next-1603461838-cbdab423.0_1603461959447_0.36145623069277066"},"_hasShrinkwrap":false},"2.24.3-next-1603462683-8a8dd4f4.0":{"name":"@xdn/core","version":"2.24.3-next-1603462683-8a8dd4f4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.3-next-1603462683-8a8dd4f4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-a1GsP/kempBnVcOc21sqrUX7YaCI3aRGe7nnHE+PHmAN5DpqT4nHF41PgtHJb3rsfY8UEkbViJ9T6TmOcxAjQg==","shasum":"c284364929bf66b55809afcc75d3e2f5b0e25901","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.3-next-1603462683-8a8dd4f4.0.tgz","fileCount":167,"unpackedSize":614797,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkuacCRA9TVsSAnZWagAAnl0P/iC2DWwv2jkGPXG8jHL9\nyDswCrizvJdY6+qRJbDgr8phJlc2SMR2mKRmlVNgTDPgOWQSWpcUP681AH28\nCJpG/NRlYa8ANB30O1/geSLYfGblNPHn9uRHVVVu/Mm2JtJCPzqJA0Pn/VlT\nsHtlb2O+aWWVeWvfJzSoXVzotZxqHicx1rWKpnEg3R4q9el2xjo8vs2YwJjF\no2lVHkTz6ZsTgr9w5daTXwaDLHlCZeSawRGXSRHJnNV7ID9DdbRigFdhoLHf\n11bC9NCNDhpzacJw7i93WFdUrbxaOyWRxVFYHpENy0NOONbPjhajvTzB/SeF\nsT7VCdt7mrccp+K6BHy/CYnMoQDTZas5cyfaXGtYcHxBVAZICl3d9jOgXEdA\n6ZiVTrQ/mw/Apf46DbBCWzLAUuKYe2kH/VkM9Cmgg7UZPW8LGp/P15HMU7zw\nUQ9spuXbLASSPkNKv6gO00fOvPnCn8yw5On9aT8gwIOO1DZFuMfkq6IVyfto\nnzWB8n5IeqGi0QTLn8nYkYctK9pZ+2GACEcdp3frj4sSokyAmi7vfT29k0IY\n7DFbOPdC7oAHFSIXgqTB2oCqqdARdxC2KxHmTizS3IFP5gh7O1D/UVXhqOAZ\n/z0de9mIH5UhRas5QhOsBjBgb+VPDKh0WheR2ytPDUaIaqUCNJwp+m15kdHg\n4IRe\r\n=sYGe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBjZEmeZJCL9uAu5RrSWgrHKxZ0iYdyHgI6PoC8NokNdAiBeZUezpi5jMmC2EnFo/CdqMi7iY69LG4J9NWEThJeL9g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.3-next-1603462683-8a8dd4f4.0_1603462812123_0.6158676573352311"},"_hasShrinkwrap":false},"2.24.3-next-1603465195-34727386.0":{"name":"@xdn/core","version":"2.24.3-next-1603465195-34727386.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.24.3-next-1603465195-34727386.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-b0WgJKbUcKF7Y3tLv8lG9vgm/6k0FQ1a8ZPPvPwkk80muUXLmWYkrjIzPLVu0yPaVb0UAlYHtP85zZ7qC0kscQ==","shasum":"73a183cc9361f7838ab8f80d10c622eafea4cc47","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.24.3-next-1603465195-34727386.0.tgz","fileCount":169,"unpackedSize":623935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkvBoCRA9TVsSAnZWagAAxf0P/01KxYvt5CrV/m1yPb9I\nkrNFUYtIpwcfJ/K7jQ9R6p4WxqcGQ9PfjlUNSl0C/sHHPkDLPKIr3T8ZPX0u\nKHq2IyPXaf/Pymhjq7h3zUXZANX4EIbsOU8r9o/3KPdGPOZe9fufZYOJnQcf\n1SoYFsP8c8rtJih+eKSXnxsz2g6VttRRskrwt0Oa8IsGsu3Rz1FioufWyVEE\nUc7q5JBvF4cuhGtQMz217Z700nJErT6UJA+Lf4U4fWkVn1kedTbYepxONEEv\noeC38MGZJ1VPgCwjH1hgTdPY6nV41xefczYbIcEdKKmTXvr+Pmd6GN2jSEuW\nB4UBqIplSm0RSudaNd5KQ7DlLLwTQPP0665l/HATUTTbXkl+49vfHsbfrGYp\n6+YGzbxLFDr7ea6x9HZvA6/WaajJ/qfOerruLvC1X31EmDx/QzzObh/4kM/m\n+bLOKIGHz/ZdUoqhBZTkxEPZnBZuBQ67pzjtzMAg2KSQcd1thMUFbcBYuGUT\n00cXq0EcEDs5+gdVla4RsBo058PA6T1N6caHLzU4Pnpz6I9f7xa+sSDdjHPt\naYZFBSvB3SkZYCQTc+uLLFZaqHIz1aawqxaqbMKAyuA/D6n8vaLTNYv6c4GM\nfQVU9X5FmgiwZ4AfjOnCUDzS08+6SZlvU2RgDB9YTiwBDPO75Rl64pfJCVkR\nKvSf\r\n=fgPu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDBjAoJxYaPyak0aygJWJYkaUsIFr2J6w7rWiNvtV5ngIhAO8pxgQC6uRZCYKsBmGmVckKYVHKA8d9trcELnSesB+5"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.24.3-next-1603465195-34727386.0_1603465319393_0.47436024922858344"},"_hasShrinkwrap":false},"2.25.1-next-1603465313-c539ad40.0":{"name":"@xdn/core","version":"2.25.1-next-1603465313-c539ad40.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603465313-c539ad40.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VR7xbZtp+fNJxbV4OFgRYcmziB3Erz4be5Dc9lMHJyjVuPgq4KNMtaez3/637g03Ezabzl4ERRnz/WcX8ZzNLQ==","shasum":"c42d5222a601edcc91216468cabe49bbbb7cdccc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603465313-c539ad40.0.tgz","fileCount":169,"unpackedSize":623935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkvDTCRA9TVsSAnZWagAALKEP/iEFAhSG6WHBHsHa+/cO\nqXP0YWvF+KPAcxtHkdp2LuU6i4lTuEv8wO9TCpnQKVU/bjgiiM4a9s9MjKi7\nGrNik1e9zSkMxTJWgGa6TFc6HObzM9zClt1sinxuZ/FNbnUnrjznvgUzwA1t\n6K1Wyp78CU7lYW/d7eioEGRpvCK55bRm9XqmyfMhfc5OsndD2v8/AN6x5G1Z\nB+Di0SI610CxPDuLo3FInT8dJybX2f1y1d4Am2A5Z5T8mwfVGJVRprwAlsKk\nHNsAiQKcHJs13HtYVnHS0hUpH7CkEuTKkBPIzikB0KjHgcHARJr+pCcY32w1\nvLAKeaP4y3Wnqoqv5nWcLVRjghTkFU8DJsAUAaXS2GmEXt+udcLDnaesGv6n\n1O1MwTT/IIUCUgMjcJNFI9tIMCg0oAHwM4XzPvchkItK+kFDojm26yWcNZTv\nQX3/FtuVTCkntY5KG/gpbNzC0Q3obvamPDs9XZgAAkypjm9zOuYOha4vGVzX\nKFLUt1vuK7MofxzinX/e9it7uf944iVXmCuQETKe4dTd2Q9Xch2DVjVIdv9U\nn2fMvda2YBN+ITY4SoXZxQP18W/xm4oDwEwOdm5HC34uR1ttBLKKETMJ0N9J\n+VjWTiMccSRyszBeapBXpo0385crKsSttbfy9GifG4UeHd+t1bg/aWqFOBcu\nCmP4\r\n=Inj4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBWASGeNk2EJuYVPML8E8IAXm+ERrH7Z/Je6pbmPY24QIgToKZZzeTlj11IDWZLSbYCz3rmYfpKxkK1YwQ2nLRQ3o="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603465313-c539ad40.0_1603465427158_0.7850787627373095"},"_hasShrinkwrap":false},"2.25.0":{"name":"@xdn/core","version":"2.25.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hoNmU2RFyt2kN5FWM/XRo7vxWpxEnPXio50ga7KXPd2EDFN85x+jP09BrgvtunJ06xPm9GCe3VZuAKbVR8et3w==","shasum":"f8b374676c61046f826c3f08958ab2ada7d49230","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.0.tgz","fileCount":169,"unpackedSize":623881,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkvg8CRA9TVsSAnZWagAAoGAP/0zZ4Nn0mmb/XDoVLVTu\ndLXPY/LAdK1CaeXbDntFZ49hSFwQESQoNGGia3JI3LWuhfE9hr9U0EManqxK\n96A1vzWPciDMFlgutrd8IH04abOe+wfaiQG6YuQQEVIP+QTDYGRsbxJ2ZG0c\nX5hNCPX8FATlxdPKTZkCeaEHK/6XEIu2Yvy5qnMSx1V+WxSM+EJEKqEXJdfb\nR0mYpv6qQuyOfYpgkMMI0LuW22exJsa1GElV1qumXu0mXC1IM0/DUDmGpCmj\nMMQQDVdV1uHcrxc9H56YBJYMbC3Tb7oe6EnpfZ98CLuzmSnbQacf7pmZqc1p\nlqdGsTXyyRB97a4AFdYKg2ZP2QomMSbr/M36L325gFl+63PhfeI4kdgasTN4\niruitjaSxV/L5ZY1vYzKEe7cLpnl0MaES1gVolPJ16q7vbONupopmJ735+1S\nJLPzX4wZ1mwE78mxt8CfPAQyKW1EJ65k76psY4zWobdmcd5oOLPLEeE3d7FX\nUVHLY3W9ikVRYU+rHb4rNrGQ33zOYljKcKwyzF5ErqSRN/kpAw33hjQ4xtc4\nqAsDOxxYfMDW5fg7MbkGZVWAyBPat6dsfbsurMEM4mLipnmxoLb6ZMCVrD0N\nzvc8ewbJqH1eFf6SCIGlj4RidJEP2qaI5hIgOs9F5UHtzleoY7g5awFpcsOm\ntfer\r\n=A/MI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBd/APkACTfjFcyKO+pV8DU1wgcqr35k/r1KvF8w/nq9AiAU0TyAX4E2DnCwaYUnGY2QAhEtjrAqTXDJbPL2y55b0g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.0_1603467323976_0.052234639969479524"},"_hasShrinkwrap":false},"2.25.1-next-1603467477-9b01f0d1.0":{"name":"@xdn/core","version":"2.25.1-next-1603467477-9b01f0d1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603467477-9b01f0d1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-e6ijbuM5nWdtrtlGUnqSvavPvE36vlssB9BcOXS7QJBl2PYcT5mR6dH3luWn4jTVCYRWDYNR/kX+XxLrD0hW1w==","shasum":"9afbf11a9c631ba42503976c904da596b89dcb8e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603467477-9b01f0d1.0.tgz","fileCount":169,"unpackedSize":628766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkvlNCRA9TVsSAnZWagAA35UP/0middILPCttU+48mc+x\npX9M7ONlz89UMHvTwNrPD+cVTXGLVvM1vfBsXICPqljZMnePYOYHzG5o42ed\nDQIbRxiCox6wMWHZloehRS3DHpj8pRNohIZxj3/gkRz1+mFkMrReMnjpiAYp\nX0+MDr2azlyBlzp0Dnlx9N9/nHmRcskLh3wMaa2KEWGUjLlP/vGGi90OLFan\nH04d2Cw1HIQCwTEiqikkbNzvcR42+rq5QcVK8iM9roo/CU13ZSbRrhRMMhtw\nq3g++aocr+Hagcs7io8AozUoHNGEPleW/DGeDAsVgCqITPN77rPaGlt84Ezc\nXGfuyoIDU6TSO5ka5reyViCKZsHQLmrTCDjHbiADDsFsBfyJb3v6S3WbRVa/\nR60zBdRv/yAuSGSS4c0OCYCCu8V1agtmNLVBWJ9cdD89hRib5PK8iuKfv16E\n24ntvlhilCjJ9eRPDOKjpTqZwD+YWyVnrQBBQbWbILkR3eLaAht1CzzEhiOY\nqa8KGggDuclHQntVZLALf6zA8xd0YgvZc3g89H36bnqhTFusbdYKYXBUyRzJ\nqbAbbpprnqxvGy1OWuFS4mCer+ug1jBs/U5e0+j3AkNliXmf6YwJdYD1beK2\n0NCnMzdusQmODtmKC2dFJJUwQOBQt8idI/3kySlVubOmRBTBOqpIirGtcyTD\nwj7v\r\n=hrOY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERhvv8XVaU/yotuyNIE46QCphngiXYCHJ3fBd7Zu1bOAiAgp4OuOU5eHjQn2XahjFbGIkmlM1qu+b4DAsGD3I9oHA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603467477-9b01f0d1.0_1603467596421_0.37450274421665464"},"_hasShrinkwrap":false},"2.25.1-next-1603468527-084728fb.0":{"name":"@xdn/core","version":"2.25.1-next-1603468527-084728fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603468527-084728fb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9EWJ9xP2TGab1OSw1mYlEL2pItrNgS1XxDqgC8KrabToaNbrIpeG1qWXfS/EhOR2EPYvwUSe4YFIel6GVja8Zw==","shasum":"c2344dec2952e7483992ed1cb4000536f606f4bf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603468527-084728fb.0.tgz","fileCount":169,"unpackedSize":624022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkv1rCRA9TVsSAnZWagAASLQP/2WffhhDG11bkFaAJf04\njCmspmIYQF/Tv37A5xYoEAwRGGUdKsNcYDTjQFCX5/12wYV+8vO44SwaN+5S\nuCN7BPGIolRFzpKyIzuSto6tcU30FdxG+cOVX/KdyKxyZfKqDt4UQ4N0wIEm\nUGeiB//aD/tzfhI8IiDKOoC83TglznljtOdvHbTDiSzC7HgT2B6DNvRNP/lx\npapLLX5HrBQ1Pk/ypWrueh1RgrRnC/Zy4byB0BFzmsz4okcdmfjNE3HAmgOI\nNfBDaWv40zTHk+IZDtTv/26CaNDUtSKflcJdEVOOdjo0FCPoS0pmuk960xYB\n2xPlex8R+8/0eaHBV4lDLnecdqchub5C/b/tbkwAH17jRX16hsXvYy6Qn0Xz\nD9QWsf1tdkomPw720X029qWvfkB9gPy7g2ACbbqoqlsgmRcQEkcjJhSg833f\nVDWI+HvMSCHSiBIFyjCtY2V2KFSTrCHwp+VXd5tYOQsaJRcCk3C3Zm6OJyvf\nfn+CW9HFrDJW26ZyZlAzMs0ocVm44y5Ro3DhwLkn7VmBY2ivScTvhNyQ3vKi\nWyAuHq2i8wEmTa0iMJiqqFo4FukkHfYX/Mj4gyUOWhvjdkG9PUWd/RvkxKWo\nUh02fRSfDq1ypTT7esd1JeZEuG+GiLlaDgNFsOpxIEz8TyfvFv+libssYpAe\nC/NV\r\n=Vl7z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDpazWaW+zTHF7Ds/jHkHc4HKdO5dPRhMSJHrFrIlZ4jAiEAh7re+gqXtPQ6jTw3r0DNu5iXeYH3FK7Q+mqfWN+Spqw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603468527-084728fb.0_1603468650408_0.5583865333007467"},"_hasShrinkwrap":false},"2.25.1-next-1603469448-ee7e0177.0":{"name":"@xdn/core","version":"2.25.1-next-1603469448-ee7e0177.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603469448-ee7e0177.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kx769WzitqlT+XowuHP+RWVm0cHvaaWXbgOltRRzSyYVgdHRdiTWhWNSRth6qNIFOu1KxlvSTewvRewElK9ptA==","shasum":"5d2dcf0264e5275b740825d39696593c7d413ef8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603469448-ee7e0177.0.tgz","fileCount":169,"unpackedSize":623935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkwD8CRA9TVsSAnZWagAA42oP+wV/gvopIDBa/cikCge/\nXtz2aLCXHmLh/Cl/S/22JcYeZumODddqyavk8wJuJQO5LDJ0C1mewY9r7SGi\nQW2tuDXDJdmGe59jXJglWMOI4Yw8eV/HMmFhgqEVpl48Gj0TusKNIeMyxOr6\nuOjWA/JFgNftZMtB6asHQ42hp3FFbp1qVUlODsRaiGMTNtuV7PXOXf3IvsrZ\nDRNTu7nVVDTHdfTwpFsJNJhnNtdqFEeC32musbe3G/vU6uZpPpaaNQ+gxgwq\nyFgRlDAKG8mcTowocuQ04LM6N7oQ09VDNTrIJ2P09JIC4vZe/MS+qyMRfvR4\nfWkgcspQ1cSW0aSppFB+y/p6a/l1CKSswPvcHwt4pyA8DDIIoJa4AlwGVsAn\nQAtDkTyRZh26wszAUnFFrdpW/x/xL9MSfkR+gwqmK84L0oCAcAom/UBP2daO\nabFHC6I/bQ/TW3Z/wpP65/7hF/vK7n8ZcyFeCiZaCdV9iCjeIVACupYAuFKW\nT/DAUyzACSa+jnQOXB8bgce0AiFNWZOttUfZdlFycFB9aVhF29b/YZHQRoJm\n2XmLILgIfOcMxPK5pVuAAimfqmzMUipvWGU1FP0d5yXTkZpkrVHk91jDePvX\n2fkje/Kg2OZQljtCmjhbLYufSqkEjRTrsOM9qEuBk3VPZqyhCIQLAMb6unfn\ner+j\r\n=W4td\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTrVzZcXsmZa1adF2ULvPsUvhDoz9c/5Et9aa+7MDw5QIhALPqsv8TogTBSq/wYEvpn4QIqfFvUOYnwFZcOdYflfco"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603469448-ee7e0177.0_1603469564347_0.7317495010193351"},"_hasShrinkwrap":false},"2.25.1-next-1603471075-509d2d87.0":{"name":"@xdn/core","version":"2.25.1-next-1603471075-509d2d87.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603471075-509d2d87.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GyY83nHxQw+YoXosPQVgIUKhb9UX1okv4f2221ph7wR37RCON6O4JkgPTVy6NlIxoEgonPg3zmd6G4Z73aXGHA==","shasum":"9fce96dea4af88fba138f5a3a1fa1bb5a931496c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603471075-509d2d87.0.tgz","fileCount":171,"unpackedSize":625236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkwdZCRA9TVsSAnZWagAAp6AP/0v+KyrHiKkxX8i4d+ti\nhuNkgNTXwheA7z8nFQZjLYLKRHuON+u/PEUoipGtgf/Az5zr9jTxb9qsX3+i\n3c9B9n0XG+afVdADAtdJ4ybK8IQ1/RSOMxIGWy6x7nJMNaUsvN5ds5gZmvv9\nHq9nOnz0t3JK+5islHAUxXdJiK6mCdAm0Xfu7WHmuXLV3Ayw6xCBE3qvU9Tk\n9ibbarfOlkKRHOVAzzT6P2+2II/XvN9W/0O9H3iKXCxR3YZJiD0/tTimUKCf\nwatdrUfNpXdlmuLIEbldsmTARZEjUy3m8ZPUXZD/Q6/cTbR0rxWqzmoMirso\n3l5ZCeblabTSJuo5BUBp/OGK26XyCTf5ULal1f7TMhhh0F1tAHhnfJYuHMVC\nzenyGDaAny1kYuGIivdOc9t4PfCKLi+PuyS/xgvnZL7PITKujZhIHOrQn7Jk\nzZ9KRzs9kqvXejzsJ6N7qUfDUeAJEawiBzrnCDX7rxYENqgXGJLAus9nknJW\nJATsqap91eHIRWRud9a2LBKIiMmavbsWFNXjvTkU1+S05muiTO3SRjEOjfh+\nTenmAlO3auXhY8uRaRz0rNZXtm0yY8K+98cH9SlTIh+/cpO/Khsz4NAC8w19\n75omyl+DI417btaiPCVlVxo5Vlvm4p4h7IOO5b5KIxcVklZJmV6/DfMzWBDe\nj9HC\r\n=B2Ls\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDug9vZBnfaU7ExN98A10+YN/YFFnznfmOm47IWBKi20QIhANCJG/XT2ngpqVhLXGhrKqDtqyna86dhOz340KSF4pwA"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603471075-509d2d87.0_1603471192867_0.2888430486619671"},"_hasShrinkwrap":false},"2.25.1-next-1603472478-400993e1.0":{"name":"@xdn/core","version":"2.25.1-next-1603472478-400993e1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603472478-400993e1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-k73ncv72I12MYYd+9IztoIrYKH4YLdZpcPT4YA7sCVsDkKQsH6jgX+ji2vBzQsa4cC1oSpR1wlwqLZ7nHJy1mQ==","shasum":"deb589aa8f321dab9b1bb224fa5107a0f2a581ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603472478-400993e1.0.tgz","fileCount":171,"unpackedSize":625236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkwzTCRA9TVsSAnZWagAAxc8P/0w0gTgHYbZVW1vilX86\nXVnxQ+vV1dCh3hkTARUtQrK1QWXvALwrOptFQUo7NS/iPmajGHHbP1Pfi4OS\n0ANt13jl+Cx1BNV4MSwHrEtMbc+8n5r8M1RyqewFCfyRcNGV4tVwZDEgpHtI\nWjxDNKEbwGTbGnJXNLnUdMVEpCYxso170YgUk2BPUl72uaBTvq3Xbe7mP1UF\nPZV+J6KD1Ake4jOyFewx8kYe2Eq7kKcAcjBq/Prq4g1E9l3P0BA2NoMxctVV\nEQaSNaFrZwgp9doXHNu7DMLM5mwhU5l2nT0A7OAVVzOpG8hn5JnxbZOBLAUK\nrxX5nnXvjo/EBPivSuE9/Vm87G+WkIp1IhXAMY/HEev3l+dTSnW5SbwSDB1E\n+EEUbTbZ8ffe8C7xUUGL0JsrMwjHTyK3zp+OGtNrlX6olEmjQ3/qw8cxf5n4\njumTdevVjJt/yaJGIMH5MXc7NyiTS/hmSJLDWaMRr1eVG8IYw/mh15eAM3sQ\n5rjWRHlcgWKekJzxoogm+vZy7RVfy6ueXxu/4NpDvUpjoySUYQvFtvCCXFzg\ntLGfzoCHmEW40SMMYzUOebohTP/KFBp/4rFOVcJiJfdiFhne9Jg4oIFHROF0\nQ+pKhfpxN/tHVzxszr+V40eWmJlTp0eAjqnp8+C8fZi+Q1Rn9q70VfMQzkdt\nQgqk\r\n=hQWo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAhVFFDSi2Qpo3M50tPojm89IX6WZPNLXB3u3GFun6N9AiEA8MXf6FXPvTnNB3S9t+WWN5fh10RihUvW0ABXiTR+66I="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603472478-400993e1.0_1603472595124_0.9197989494204464"},"_hasShrinkwrap":false},"2.25.1-next-1603473470-400993e1.0":{"name":"@xdn/core","version":"2.25.1-next-1603473470-400993e1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603473470-400993e1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nBC/B/2C57KaeDKMBsSf2S4inmeUPw17LjQucIYC8bOHECb7xbkN5FdodealIGRLFVrAx/K8q0zuoN+rqe3q4w==","shasum":"4282b39fd06ae522d306f38fc4f154839e97cbb3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603473470-400993e1.0.tgz","fileCount":171,"unpackedSize":625236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkxC3CRA9TVsSAnZWagAA6lcP/iuaxe8ex7XKnTmS01TZ\nbbYYqXVSeZbsgU9rOlHsEPKU6rB6lZ/4ip5MfPzWOkhIZOhxBwxsjrqqs/28\nA/Ffk7loCu0EMuzfy8VSmhkZGMtX1iNBRmwDe4WcqLS04NtiRvat29ZuWuxT\nVjyVBo6MMtCxeAAk/k7T74TzUNuj3Bn8Yj5tMqQZWsl5GabqBuGmX6wFnP9g\nhrY5T5+e2+mIn1lvecuV0eABBoTRdhwpx4gLeCbQKFyR31sNM98wAxLb4fh2\n7oTLIWhamL5ki7aHymZE3+KelFxvbtdKUnYM/1nuQHJanS65DjSMea32Pp6v\naMfyE2S70lGcGoATW39iqYdUXTFvsTYk7jbiGGfMf8tSW2dDCzmwnx0+EQ2a\nsDgXLjdhU/ScYlBMnmx+wU11kbUWhkpcVSG68/0jeFxtMhps2U1AuL0At+VO\nGYflLsipilSVPYrMN6jc6cZeNJjC0V2ZX7kfn10UX4W33dqqcLCBijwHn/h1\ns2l/+7rvSGNnfJ9gQKgeC8sumjZMnSZh1YjcG9Vzs0FSToziiXe2iBTMJ8Td\nI25CBebfjkMxgxNgaKJoGZ3lK1n+kZ6laKlIQyvrhcqDrl8tTe6Sw+mnHSFr\np3nsdIkvAaiDBdGxRzEKH16z7u1Vlw+0vwROi88UzcFyAJM8A4S/x6XxLc3l\nve7Y\r\n=S4sh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJ9nc3Fa2WS1GmPZssBqOamvIorPvqurzJniEHyThLlAIhAM31l+Karx8dujGBJFKtzSLA4pwzz1MlXhH+ihB4fbRA"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603473470-400993e1.0_1603473591080_0.5821425798394044"},"_hasShrinkwrap":false},"2.25.1-next-1603475709-7fba193f.0":{"name":"@xdn/core","version":"2.25.1-next-1603475709-7fba193f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603475709-7fba193f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UMcKOPIxqKhl3xR8K86qJWGawpEvcZbTcA3KHgpbyhYLehHe8DIa8Y2vYQcA9ex0S8HauJ02SskxLhddlJM0bA==","shasum":"ab0f4c7f34d604c02fa0be297c3f79a00ed0d66a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603475709-7fba193f.0.tgz","fileCount":171,"unpackedSize":625236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkxlmCRA9TVsSAnZWagAAmZYQAIOmsySAEm7xA3v/ghhC\nfXYB4i+wcLyGGIrvLeS5eSS+hXou+PAiw3zb31FXV4JyDCeBC2NilCSobKBr\nByX53Hv3A3F37JZ8tAmnjRpZRHknKn9u3aCDLfLRTiHHEkrY1KdRtSOZwisH\nPnEvZxJJD2GLkwilqf7Aibys5li90s/KX5IkuIWgZ2A7DtNycRKSK3xSmowT\nYuhwOQJ2cfEiKIb8ZCm9yv2JVmKDGmyE/LPaG4mcwifLDiJKPAYKEVqVTQmx\njL6ltJSaX9jFmFxHRaOSzUe5Lo9et/B35/uzl04S/b9HLroq44pT3ZCSDKie\n95ti0pgV6p7sSUeicAs7+zbB0zbCA2Ikl9pP0ydnNRovSMSnm5ijDjDYRg1r\nFZuZJH30zb0Obo6SP0aojpt7KtXqym9XM9Esukoa7J8MqG9fP1id7pIc+BTs\nQJqahCJLTn0Obr0WImeYupjFxLRlm/3OTd/cwDQA9585saHmLX+Mcu8Tdxlp\ndcDntnVZfwtSugvK1HhyMZ+8VXotisASl/G8IokFTZ3nUwiPZT3TALy0906F\nZNWBVNs9dzbGNKA/rX6Z2eb/m3ZgUc+ofEZ1etgd+ihq/P30YraNHibDoX+C\nscBJi9bw6B4Dr1y/sd5q3EblrYFdXHaAjFgGfl9IJYaps/pfmp4azQtSZy9m\n1nL3\r\n=f4F8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9+cnGZNwdzzedRLDCVqShMM7/qsnX9T6DN6cog2Cm+AIgfVTSXwNnNK2sViKjaG1FmiUMZt8uEbgryDR4D5BWyls="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603475709-7fba193f.0_1603475813501_0.8811303703613032"},"_hasShrinkwrap":false},"2.25.1-next-1603476486-6df528de.0":{"name":"@xdn/core","version":"2.25.1-next-1603476486-6df528de.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603476486-6df528de.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LZPtQBvOKx7/r++YYSjdskb6em+EfVB2gmCtlyIzA+GUb1tfHXVxrs3nxphq6WC7vzv44KPglzXySWfmMlxZPw==","shasum":"849c4bd4dd9a8fd3f6240ed74c24c46320f72869","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603476486-6df528de.0.tgz","fileCount":171,"unpackedSize":625236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkxyBCRA9TVsSAnZWagAA+r0P/1MahKrWzFLpLpQYRLYN\nCAhg+wzS3VvV/XX9wg9c4u5Na+17nry6Yk1oHCoCHJ7lH5HbH4NtmpEe58F2\nHu7j2CSBzmTf4yyWWUBDZS0BgdXzbuzku7gfn7KoxcEQvbktusaWp1Y+QwjL\nfxGVgSpaEZo1Qna6Pz8SsfE/CDlA4pkgm6alQUIFWIE06KN3Z3DXambQUf15\nbQIpy/cPM/o5ThCb5DswP1Yxhk4o33Ll1T4VfN3l7iUb7DKJJNlQuh9nOdDM\nAMzeoqGL7Y6s+jdeRXYIK9DjF6Z8SD0P+WtnXk0nNaF1HqzLZ83o7uhUDt/Z\n19X8NE6TbRLkcf/fgWOmPzSEM+fV/lnodIllxftN3DteEA+kF9EeOmkzVSIF\nx2NUICkeIpkwpki8qSmXBeZn33evLd7Bxr0BpNoKcHYMr7/wE42Q824h4VY2\n6MqsloVnxlXclIeHTIpctBqYgt+jyx9gxJuVhc4+t+K+dtOd89oPEYwP56wS\n1qQcd9DzkR31Wc5XYCK7lC4Xw5VFj3SuuhTOROx7JjhKQ+nuU4x6YB5KEOOJ\n4r23pLabkivzn3JIsApJM8rGO3OXaYBnc9xS3g88S4cp5esSocQhULUgeEVZ\nwkz/J4+cFcAah/lTJYmY7/3ZQQgsgBuxGSSP8S5vAwM9WZf4QZDKPnxBgQqj\nttLE\r\n=RmJk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXBgsPQWWJE9h7xbRWV3pD7uUOjtSaE68XKmX0rCryigIhAOw/n3znMjWnm/MMZIR7dDNAB3UwSP1mIZhJh7tYL16u"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603476486-6df528de.0_1603476608915_0.07931784803255382"},"_hasShrinkwrap":false},"1.48.2-next-1603584777-a5c272fd.0":{"name":"@xdn/core","version":"1.48.2-next-1603584777-a5c272fd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public --tag latest-v1","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.48.2-next-1603584777-a5c272fd.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1iqYvz9BhdxKivX2mlXvjckCpPwv6ZlLSoWWmQDhHM3l4jacmNi31uSfBFOM9eEQIw02GHv5qQE7NxdygfDPVA==","shasum":"9ab672b0f91155a397df25a133149040866c0cb4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.48.2-next-1603584777-a5c272fd.0.tgz","fileCount":137,"unpackedSize":590031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflMWiCRA9TVsSAnZWagAAA9UP/iZDv+ZjAE8jY3LqRILr\nrna7DSnEEJOQHIeoTCESIswXq4E2Vu5rLKBAqPWqbWA2hEND2nfGQBtsztbC\nsppuFfWGOgJE/qx6593RMMBfMJNP6tvlXZw0VLuRgKHveGWeEyY6Oce+eoyW\n3kxmDTBfWoe8g2pV/SME6aZOWd2J8x9b+bRCfkFWKPuflQgwhsQGmttnGPGC\n604M4do74QfmtAfYI5DsVJqEffLee7gBcyGU8HjcwY9X2XPKYPyQoOVil4tz\nj8iH6Rc9qNe8bgG2AfItrJPlaDz+CQO036d1zFwfpMITeU0KZ/Eq1yeVma6X\nMQfofJG9sgIY+Nc+6cbi5XXaj2BtkxggxdzRlWeJHt8vEYdrMXMhll/dtn/D\nX9YdAWCciIrLCwil/Mciwb6/E75M6ZlfPeQ6cAxDAXb/alz919dbbSDqzdSW\nsHfmzbe+vLr9Rb+4W4TLuTl+wUGUJSbijeATeqJsb4OBtpEXl5JOPh0TG2am\nUyWlYcmnQk6HJ/s9YWOS38cpLXkfbeAYnq1iQhFJBy5qzWDEQ803BC2O622q\nHHz0POFuP56V++KgoNTF1jriWoBF7AMtAPC+j8+9DJ6UCdTqi9w44HYPrCXt\nO/1fhpejgVfAJDbGKBWmyvOALk5DUKVeLcFpLfct6jZtHfwptCLvNVlOUXH9\ncHKU\r\n=45pa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8HnEfPnhqHhxO3mCNP7YzvteBiTZ6wVfOQYwcmDNs2gIgNcnWK3xQfkjz3hcNVAJIzYxrAhCqJMw5t4LEh4OJ4Vw="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.48.2-next-1603584777-a5c272fd.0_1603585441657_0.4631990217902533"},"_hasShrinkwrap":false},"2.25.1-next-1603701274-c5241f2c.0":{"name":"@xdn/core","version":"2.25.1-next-1603701274-c5241f2c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603701274-c5241f2c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gQLngk6ov5yBXNmra3PCYP7jjf/Di93Z80zB7Fdt/b5n7B1OFBnliIN+ewyOQsruO34MZijwYxPaEYSagICXLw==","shasum":"9ec2d0dac18d62b958720040d46a449709770945","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603701274-c5241f2c.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfloqaCRA9TVsSAnZWagAAGSMP/AjPQ556HCr9c73Dw7Ie\nLe1KEE1xzkYBKDhCzVh+zXP07aRXu54IZBQeCDWvqNgSFVHOXKwIOPvjt1nd\nuif4o4wTkIIbLgNIzyRG/zeSdMdPkBgDPlv7tkUONBSW0NuDPKSv7CpCkzyj\n8XzMPbYJBb/60HU1OfUIrK2UL64xGi0CxhN4xxKkVjvosE/MEcHNT4X7ypnf\nBSVPmT9N8lrjd328FP+m2YYfZDhejWXQygJu6X2tT4N+Q8RCUF5PPxVQ0mdf\nhiRJeZuDJK8i30zRSwcpib4PyF/M3z8HJE/+swixlOOAoPsXKCXTNkxPFlYt\nXTVP5SHCCJVhjakagdn9pxAxG/+UYcv11rmAtMF3iGpJgo3ZmGLYZ05tHUgk\nY1UjrPzfVWIsQMgfS8UrWP6cNyDEkgD6yeGMRz4Uf1imyA/aQbJVs/72RJ9U\nCpnMjYBcIAZX59jwHCkzbD9qgsMOEk5PETLq/mS6gaGaTvbEVhv+DDP2q/zW\nayerT4j7CCnDfW1PBKjqGN7HkQnCfvtGlZudI8CNs6CmzDUqUgo3aTzKwxjV\n6LdBD2aX2nPFtsP0Cjixsm2VXFbAyzxnn0P6yvx7Z0kZzosGKTafT1r8g2Fs\n9sl+OcsW5rmtgpZ4cNqmVOqyaZffl3ZUJz9fh6xgsW1XM+KuJ8YQAPWVXbxf\nkwva\r\n=EnFX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBgTcLh9SHHTlPMkB/KmM7g/H1KZ684HB7lzOcwUquNAIhAJE4Qx5q/wMXgvXkurf3H4BQ46ofgdb5DmYAJ7mxIAR6"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603701274-c5241f2c.0_1603701401736_0.11476491464663119"},"_hasShrinkwrap":false},"2.25.1-next-1603711941-fc9576d8.0":{"name":"@xdn/core","version":"2.25.1-next-1603711941-fc9576d8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603711941-fc9576d8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YlijwJ0muwO6BMITZSphSaD2F8Ou3PUUfX53ZMKwIfCCC4JN7MLOlX7q7W2J3aNa65aCxfY/mwBmgpFWM/3DnQ==","shasum":"befeded8ae18766f74f6e23b9f643f9e23b4db05","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603711941-fc9576d8.0.tgz","fileCount":171,"unpackedSize":625236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflrQ3CRA9TVsSAnZWagAAvFwP/AxGpF+c9nzfjYvZkmQX\n1VkOfFhUy5Mioo/OstrKjGKrJlSy2NEyUzOreMyP9/L2RmHhKvrYoZsfDewQ\n5mW0Hzw7h+nZsFyq9G2CrRxIm+UVmLn/QLxbG+rM0mIgOdfmKMZjnnu0Auv1\n5OC7EgTewhorOOi0AqMehZGJ5tPB3bI6/hxlr3cZDOdp2DUa+6mEUvSVZQ2m\n8Hd5Pt2gl3tESPfxuAGZ2bySQb6wJ/qdl1WnAvhGe2Auxbd7aqiHODhfB6pS\nnyEae4P6hBJdk5UDZ+HWJdmYyQAqLzbWRv3PzYG+GpYGVpuPVtIPrnbxQ2W2\n3jzfEN/fBaUpc4EgT+6EgBvLvJSDNzvP155ABjjRTHxrWzvR39nWGqjv7PXX\nmpj+aOF7WTtmi1uhUdBjAXGWyDmmWH9IzIAX3aQ11q3+Clhtdd7Vn9cSfVhY\nWYYcUyK8WQ/8hG4dnq8p8xzOMMei20jScTypbaN3mHp9/C5uSCE4r3O+swIL\nmAb7or/8aN1qGWSpEfhMGk6aIUdGL1adAMF0njRlpiIhTr0zGcJLvB0DMOOk\noaYcUGsU4KasEzH3K10wVHi93J1TXm7r4/5aFQ+6FmoCku4+LbM7TP+HSB1x\npc68Fm99prXaGnkliXJmjYJMbF8mAjrseGQoqyg3TN+B69TPkIkHmaDimDSW\nxxFd\r\n=PQBV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcYkyprL0VqfXFCphJqtGSaBIsWpSIA0XEIEAhD4TDWQIhAPyPgv57bY+CCV6HvXw40eEvb6qye/J00782ktrBizUo"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603711941-fc9576d8.0_1603712055439_0.43471196016687763"},"_hasShrinkwrap":false},"2.25.1-next-1603712548-08bd3151.0":{"name":"@xdn/core","version":"2.25.1-next-1603712548-08bd3151.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603712548-08bd3151.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qgJPOy3RMwYpel17bIjhFo+f6o9/DST0CXJWODRshEPalUHB1zb6ELrKCau0/z4QY+sgsCZqDg1ji2utxa+n1A==","shasum":"88155e2fd67d6697e48cbae5a4841517eca0ae1b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603712548-08bd3151.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflraRCRA9TVsSAnZWagAArvQQAI7NbIc8guxpqK9/lxeE\ng2/TNQX2yJ3g70VqYzjw3dBF6Yvapga3/Pw9jUYLOk3hWcZSYvUU/FMPsrPB\nBaCBKmbpev7YGLp/STgalqvQQVMCmsKg7v5BthE7vaMFqSMpqPGn2zETiPAh\n8FKz449vyGmcYWtna6chQjF/mqy3ks46AATH5R1ZoBg4GVg6rnc0m1kQ53Y1\nFsIoVinTNvty8lwPImswS0x+kP2LTlhafXAvVzsN4F1YNpk4yVbSHbC8H/9m\nymSeigw9mLw2v09fwFDdgk4zSS4IkIXz8FGrimNKtwxn+FeHDCPM+pPJFkNC\nA5CRpWqLkRlGjznvOKomPqDv5Q2UTJFPSoGQbVnw482WSsDewHG/SKzKBOAl\nYLQDtbhmhKUbIMK2s8HG7E4AE9jlc/yF4lD5DW2YNQ3fHbZJfGaAY4rn9rMX\nV7u5kon5dWwJMF4kXAD2i6r2LsCy0ETQA5Llb2DfCRAdPWfQw8PX9iwAOY+O\nLTQ6l+Oi08CEfqB2gz6svqCd45VVc0WChHbcLbK+K4LDKqhvwCYTry0kDRyw\nY5sDro2gtPVHhjvFIylkYpZsLi8m20hzCgg6/9zdW5nCnyuk06zeKpQKyAfR\n8qZCegTHXFd1ZN8G2pWCXRAPsFesstoVI5S4XXLvAklDqcfyY705uqqvsH0J\niECH\r\n=Xydv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHAHafJvuaf93N+Wh1aeJB0y43n0gcqjztP147sSsXuLAiB0U1u3gDEdu2IbdEERLqzHPkPcFyr4DWB0a1J2FiWDOQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603712548-08bd3151.0_1603712657193_0.640202862206458"},"_hasShrinkwrap":false},"2.25.1-next-1603713415-8dfbf25c.0":{"name":"@xdn/core","version":"2.25.1-next-1603713415-8dfbf25c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603713415-8dfbf25c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-HvOngIKXGElzXORJWPlPvDtWh3/aHcNNV1ephLVsUqAtXttw9LqQRezdpBKXq4migQmuPo5I8YvRzVTjw+3UKQ==","shasum":"0c9c541fa5e6af56424c8ac1dc09763c945a1dcb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603713415-8dfbf25c.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflroBCRA9TVsSAnZWagAA0RQP/Rfpg1b5C32PMoExQtsf\nieDL2l7ZyyEBP9qqKWILyjQOog3cB3coY0kUoTn6wnlg7niJJzuaGsNxmCQz\nczC0bJtPE10XhswQgxpMmmHVckH2GBbHyiowZeDEosO0/xEHycRa/m3kdiIL\nQ4+vG4/BBkU1o2kE3su/qeLFjOxFq4PZn1zsNmntV9hQAKaatnQys2c/nPO9\n/vJhe90IHtzrwfYqPrTNrBXetz9Bg38PMuAMLoKbLD1z0SHg4H3aIdiAMTSw\nJ7urVILO4SfJZJFevvUu9k1B3ujTPHsPF5mxrGgafujPcP6jfN6GWqwOFsgo\nGfXqXrfr4V01QlcrifQ45lglhtaDd1dWliFm42niqWfUU1hLjdz5x65Dbca4\nDj61qpS+PFqZjCHGo3MCxdnmQhcBUinJHsWwWgQABQnlN3IUr0H4ggNAljNO\nGKf5Tw4pLWZnnVW9StSDumSw6qstU+0u9zGJN26GbFxrD5X2KAoHD2rwHM1l\nxhqjrxmiTSCDGhaEznqU8tA8y1SBAewJ31FMm0alM8z5F6TuyYp8tinJtKzU\nJtPaP/b7cxdnVyoRkDyczzZ6+ufXcrnoVHNGZOQ3FFHfYLYUGDINaiqZVl2W\nAmpFo2/o6OdtAq/zl/Qq0NR3crn2OKA8dW+j3KA7/zN4ZCtRgS83VD2+rI2v\n0uBf\r\n=+vss\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCutkmJ5VrXFT+tat4d6WGwjPb92UGkdWWN7jCPhG1klQIhAOkFBgDVNr+S14cgP+jnSAoTexKNVirAroW1adOHTQfG"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603713415-8dfbf25c.0_1603713536901_0.6008055513316746"},"_hasShrinkwrap":false},"2.25.1-next-1603713823-33143942.0":{"name":"@xdn/core","version":"2.25.1-next-1603713823-33143942.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603713823-33143942.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OV0I4m6BNSQ8GmR4fpshmieYG2nTPn55qTPqD+GM1PJnW97OxUXpXgW0oXB7d7UIwYQ69YTdtzCPGVzIlOZgFA==","shasum":"35fc93bdca1d2dcd3ba4cfc2b21ba4190cab5e76","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603713823-33143942.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflruSCRA9TVsSAnZWagAAe9cP/AiggxJPHJVT10IeknWB\nr6MhXTeqwb2uTiVVsI4nQCSIsOrqSHIqiKnb9ptaIWkFCaObOjInSBEXJr1E\n/mv4cS969MJlt7MR+A1O21KKl2oSjQVEuSsAeNOxjE5Hd2mZ/vWCwy/7LGCv\n1p34qy9AD1WBMQrmJ9x2tlfCUdQBhzYHF/H5/9a2SDAmpsNIveDgMXHRBAg7\nalTdXH6uV1gmuZ6u5zL/Irrk87dj2XBWAOf9HtOTBd07v5LTymGFyBYpmg6g\nK8zupxA8Dj4hNwOvJUgjZY725sMJ8Ssd58Z3dsIqS8T/H89Q9sbnqp0ou+2s\nUng9yGij6pR7d26Gc+Tane1o+l6XURtAEBNgLSa47n+E498v+8XFnSBXMUc3\nGTXbxptxVHBC/5wzclx9EuJqyaWWmMraJOepXZSFdz5sI4iD5cU4vb64Lge4\nb+OuwKxACkhtXOseqgLRL3QYon44F2lAKdS78tE8LoXGFIYef+32df3+L2y7\ncIGfgVOfQzWvL7P15wbS81Tp/qVDvY/hnfJM/QTEgTMIBupmLTWe8yVpS6Kz\nt1PpfWEelV7Oo7B14UPO62pw5yqurIwLp9Q/eP+CSJA9/k1dn4tB2uOnDLJf\nAsPd5PUk1PK+3cChZ4DVhmlYPeDcTzgCsUeNpr2troqBS5kgk8AZPtOR8nzq\n9OeW\r\n=vj32\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDj8uw00vwG5vLgr51aat6dZARO9VVpCHa2U8Qq2w7ciAiBSV4a6P7HR9kAQqBctrfAQXPIPrw5zzX90Uz0nJHZfWQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603713823-33143942.0_1603713937707_0.24520124046676806"},"_hasShrinkwrap":false},"2.25.1-next-1603715429-fbe7bd1a.0":{"name":"@xdn/core","version":"2.25.1-next-1603715429-fbe7bd1a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603715429-fbe7bd1a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2YuDMPmgMIZtS2boNxKySkOlyGlZOk/IdChFt2tn9HxAOs8i40aXyqZc+4QVZugU4qLd2wjSWxZUUEOmoF8FGQ==","shasum":"d71f1fc0a1ba83e89d740454de7cf8a1b70f1e22","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603715429-fbe7bd1a.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflsHTCRA9TVsSAnZWagAAYw4P/0fyBWh5V6wNAEOFdX3c\nC0ha9ypKYh2/dddkT9IWix/ppsT53qCWpEmhEBvfbuQbnhoV0UMcF6jeso1Z\nxEO5/LRdnXmdhLLe0EYDW7lGvEVlyyLjEMa5krRlIJka+bwDjogXAqzVuY2I\nuHSNfl6xI0qPjTJq4T5BCKxrn9DYnF7K/fvp4OVqG2axJtUw8WBulidtoJWr\nhdaZbwWQCEa9fs/5k0QT6r4gNZNreMJBS5W9Ii+lWuecax1LxDc4hsYqeCzT\nb41gdUz1izid3EiuHBbAy4rh5Opedv6GvXSCcHrHGG+TW436IqRR5KyeJgjm\nE5r8TcXZv7S6kZYyZwGrBaIEfyjmVFG0tz36JByZOYhfYO6EQkUe928ptxD5\n9/LeTDG1UAZgm8zV8ErN1OudPsyom6bF276PmLdRqBuoZagUdAMyhN+X5ukx\nFdENOzTC2CW2WF1UAJx78vs4jyeuTOfif4iGuqpRBgf9sFaO7POp9lFS2CRQ\nIyno4uSoyljtLhcxatu1vScRHVynP7EK0Ko96Nql6TfHz/GSuM+gC1oi3upa\nLWNuWb4FsmCxeQONwjRdioRKcmtnbLKKyfMIAfAINxEvlj8MuqxTYXGvyUid\nqXPeUmRgwUH4gEMvGOdSGGGOn2Bj0n6GhYktLLoIUWNNnih8+X3S9Gbmwi75\n3ou3\r\n=DU77\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtSZscKE6ProuEl4qh/dLJnMeE1VKNV0bc1MxIKLqvEAiBoWXqmPgbufPsgRXV5rvftAts8CpQI9OfAA99EzkOFCA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603715429-fbe7bd1a.0_1603715538858_0.6029497948206495"},"_hasShrinkwrap":false},"2.25.1-next-1603715484-cab97fe3.0":{"name":"@xdn/core","version":"2.25.1-next-1603715484-cab97fe3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.25.1-next-1603715484-cab97fe3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5uyuooJacbLh4FtJcW17dW0PVQeq0tXYv85OM8LQDMXCN6doncajJB0YK36TUc41F5PjkYY8qaEoCpQ0iY6KxQ==","shasum":"25bc3ca601fc9be132d97160d6534196f25da8ae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.25.1-next-1603715484-cab97fe3.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflsIUCRA9TVsSAnZWagAAzn4QAI6ZiQarYGcLhmt4CskV\nQyLFvlYA5D/TP2weHwN0MStUn2YKINsj1QW33ZBH+z5qD17XjLvGtpOArzfI\nTlhkiBi+f6olVDxLHiYXE3AAPQ5FJJHYCEN5l5fSkApEQesUhETSt47ypVLs\nbVg5CgQJ8or5GfrGFv9p1rfipc6xTSMLHyOPuvDJ75FLJkUDQpoDp1KbhWb4\nOBWNNhqAQ1aW+hthZXjRM2APAn4RBsYW/ZB2XzMM23SpxBLOtuCkq5KK2GDe\nVL80+SgDsebdZTWSfAm3na7VgqgAVCAw1o/6SabGtrgxq9CxuwYf4g9Bpxam\nDZbZcpfDhRSdKCri6S9uMMBCGulg/o9mFFup98oqK8JKQqw43HnxTiMXW4De\nkSyL6+H7yjF1eRX8oxvU9OZqEMUMlpl86tpdJmphvYrsA7XnxdveRyzp4tOc\nVOhGJ/W1CD/VRrwi5vL97nrcam7AnpD6lAMdMIAO7avuqpcodcl3p5qoYAlO\nH1cM8f8UnATHIJ2U+Bt4u1QD8jROh+OuS/Ots0z60JbDt4yC/oUQo7e13Y9X\nwoBur+wes5EkXHs2hvhWDVIsPe2yi7bG3GiyJqwEwvLIwTrx7Pxr9CfaFQVd\nA0xLg6hALL6AR0splAFWCB55KwXx7hbcOhVp6GZnWm6G3QorZ8aCi3nbd/kG\n9Xlb\r\n=E9vS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAV1D5+M3ik7JQc1QMzgNFUn0s3iEmX1Jrcoap5pUrVAIgMPce0N9vMoQoNZ1n1k5xs+CLzDDg/lz1pEEQSDdXNLc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.25.1-next-1603715484-cab97fe3.0_1603715603839_0.1077188751517344"},"_hasShrinkwrap":false},"2.26.1-next-1603715568-ed7a2830.0":{"name":"@xdn/core","version":"2.26.1-next-1603715568-ed7a2830.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603715568-ed7a2830.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-iarzO6zSWfNSDLzH2XK8yi9OuRXQ1o0hNLVkkfAxPPSHoLa0uMdl6NwL6X6b9xMlh2B3XEG97IFWUniXTqWuhw==","shasum":"f49fe3cf208a85af91e63f260962849833870cc5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603715568-ed7a2830.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflsJYCRA9TVsSAnZWagAA+/wQAIlDYDQl08EpQ583jG70\nPHhAJgn3NRJ591kektYCmrPK2Q/AOq18TNWTjWsbjKYA5onOc5DMDNiaMPSP\nnVLDJmGCB6/28EJLeegU61X+GmoGDtzmggLmsB+MpICJsuNrIOkCLuwPDB7W\nghqUDtbyjcsOnz98yS0fapzirjk6nM4RZd2liWopFP/15Dci/62tn9tlE+fe\nsY6yNoVAvXlNoH+Jkkhhyaa3cC9jVko/pHt2TTrGxUjBJFhGLNZMRp7IQ7Pa\nllV9z/pBHY578vHXKISoaZzUvr/XdSCSrUaszj14m/EBAthaMduZ2UpWeHW3\nCS2oRtsFQLx95DcVa8JQxVV65IeWbIUVB5kjZLnIm5xzuEqozHgYyIEV7NUM\nBSJVIS20FYAc+42N5ucafOehYS/VQofigJqm2TXl+omn4XOOZHW32q+j+JZN\niFN7/VazgY7t/Nna2uRWM+s1V8oR3VpT4CeNJZHfAACG8A7hV8NCcIiYlpjB\nSP+ukVpVYCSTGSKxoQveGDs0dr9XQTaAXJE4QltShg3ANd+gusYT2qqJZ2PU\nBMBwNqZmicgiaWYpVKDfUDYvurGvq07mjnWPwzCZj8G9jEeApJhAbhKWP6sk\nSueVgQGsBX3zCZt7n0J42xmcia08sQX1aNZE4hadbpyqzTKZ3KYqHYiAWcWS\nVVhJ\r\n=H9Rc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4s+AYjkvlBAyNaCVdW0MbmGpm4cxZTmnsuq9fpeVsnwIhAKHZKZk7SQckinCwDa1kJ13EDU6QxrapgLLEE3VS01Kl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603715568-ed7a2830.0_1603715672267_0.020166175303337752"},"_hasShrinkwrap":false},"2.26.0":{"name":"@xdn/core","version":"2.26.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NtVwcSW41QRRL9eSDe2AAe9UDfUMygyj6msAdajT3oqTNs+82EPAs28jT/CC5j69p/bvn7QQ95MDBvjf0Kd/nA==","shasum":"a5b1b26cc1ad8a0da41670c70799b1769dd97e39","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.0.tgz","fileCount":171,"unpackedSize":625265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflsgKCRA9TVsSAnZWagAAI3cP/iur+dQOA6bRpxX4Z6SS\ns3XDtwzPw5o2uYBW+iOfz8McDAd/9MscyeRhZ16JM6b/q28zwXtdsnsBlVyw\n3aKi1CWsNu9WyisXiaT8NgS4sA2dyPmdm7VHB6SN6g+szcOXP/iqwWs3d2Ds\npOi5l7wUIDtBhNZb1FyWtMdPiMmUG6nnKjIUcvfXK2zfTWPB2DduJX4fb5uG\nNVy8lX/A7+NrkVUQvjKQEfIyc1pcyymA7brSZfxaZiun2sLQcVXm8m8U8P9D\ns3TDPmbrs7x51PFa/25lS8SC4iKov5LZNwLwuKaKt90c6RshtVaV9z6krFQW\noeB6bEPy1pFaerW87xRG2QkwciwUvdHpMx1tfvNmIagPis0fcTvAHdhfwoE8\nnOPlufp6Uui39bCvTRBzfhlLH95Y84XY+bhoUIFGhfyhuBFLNws+aY+PMVUN\nlNU5RdtDIUtCI8yyksnxK/TtvLzIsblafwfwfmUk1LNgCXmgeeQAw1QjUOd0\n8h+SNHHnjugdZiMqFnrKBtBRt8XfDG3BES8fHBaUBTk0Ndxp8z9FH+3YzU1u\nmE7n6fQWzncQ3EunZoZ102fRFI+hp+IRA8mJ8yarxBPqnvWOqFo7aoiqx28g\n3j9PyXLfQaM4SmnQVZCOhfXUY6tY1r6w1RdlE6r0VF8aRBoDmxRfR4gZnhRD\nmN6W\r\n=el4r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAytAIROSporP2zieHarrJlfEcgpD7jV6GicSBILwXAWAiA4uObqDc6jUTStyq1fhd8qnqCZ2HG81Pt5sRl/JL/wIQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.0_1603717129923_0.5123580201904918"},"_hasShrinkwrap":false},"2.26.1-next-1603726492-95f3a5c4.0":{"name":"@xdn/core","version":"2.26.1-next-1603726492-95f3a5c4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603726492-95f3a5c4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KWZmaOltGjJHK2XrkEgbjpRZ49re67BFekgESY+QFtSTRbSlqSjgMI3h5aCJ+hPf2uDj2mXllJvM3PyRREgtaw==","shasum":"e2c7b2188fc3f26e0473da2706737afcea54274e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603726492-95f3a5c4.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflu0SCRA9TVsSAnZWagAAUyMQAJpo01IkM2oUZKANkT5G\nVRQjtTujZMCZ+7yVQXW+Mx7gPeqA4ygm83ZUmrJ/arrlSMXtfPj26G3/1gyS\nrmWCDcCa5ZVY8bpdN8yI3CBhDk5wo5XiHsF3xTqyHmlvj57U+yyq4lH8uqNd\n34rSBnNf0tEkuOlCYlgx+XpokMKZURfVwuNtcUSKZCznBf8cQBCZh7donuew\nBc4szbLPesfD1rA7zGBfwiT4oIJtN4OismqLQUMAVvo4qmOcijhUxYwX2uH1\nlNQBu43Ouyi7YivE9vf5ON/n32xkSWHFv6ghfGeU41tqYxk1n34e8c2AJ3j6\nXGT6QdR+ccp8ESVzKwI4fqiS4+KjAHcd3RXCH7aqkqponpRl8Z3gWMYi2Apy\n25+eLSrVUtMDbDxo9A1vUo5a3KJb9cjhuISb41cbXRG28/ERplhgsTlPkd5D\nNd31U/TdbVmgMyASYNtRe0s0iPadhfk3TryYjMcv4uiFCn3OgYpUghTJokhY\nyhSdq7AcDCuZAwwSbCiafGWvmmaWWzCtdevas2e/kjDb3aSUH8Fry482cOhI\nvMLL9UBGQjr6ZdBqYbjAGcTYaSjir9XK3WBlLtBfT0rJKc56BmB/UemSj68M\nQyFByJ+6KuLIp61VGNY+pKDYsIINwCNsDD99FWog9ATVf6km4qKwE/z3jmYU\n7Meq\r\n=zc60\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHi5K8x4gHj850i3FIXQoq4aYpKcXxRCiDlkQ1TvrzlYAiEA4XZvNNVLcpdsmhxv1yHSJtSKxdJh0DTInDXe1kA/Fjs="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603726492-95f3a5c4.0_1603726610045_0.7956793207453607"},"_hasShrinkwrap":false},"2.26.1-next-1603741405-95f3a5c4.0":{"name":"@xdn/core","version":"2.26.1-next-1603741405-95f3a5c4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603741405-95f3a5c4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-BYDVO1GxvhaU12AA3OBtiasUI1XsAqRtZXXITQtd6dSoNxcAvHLaGB0a1S0AaFFkE/EPNL0xzNE6KF/yjiycWg==","shasum":"2b5889eeb27e5f30febbb9dfc7227845800df499","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603741405-95f3a5c4.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflydfCRA9TVsSAnZWagAARvIP/2VOkcDXZtlUlbpqHofJ\nO69NyXzwnxf1oKR8j79nu8z2xOUlLvYqD1Iu3m62VKfDkToW6a4fmAUtL8Wr\npwRePTC9ThipaPpCfwCry+W7ozs2mhTT8tplXSSXA1wZ+JYMqEmul19M4ChA\nLMOQPeaFUaaDjgQnhYiMpks/1DV8Gj/WbqJKCEQgI5jN2NOVdGbK8hJaTtH8\nJM2cRYq1oNNCJ1U6OKMPWAEn6hLINRv/28xYaGLkyLQj0MddcHaiS+anPLKL\n1y9PjHvBd/hPBuvehZ7zXZMxoU57CzwQSKtlZoeF4PX/5aIOIYoKum7ar1qg\nqzluMQnf41BbLrpHMLu8hDS9LzFdwkpW+fdkpFSgIP1k7UdSY46wEirQgZRL\ngzVCODLmZGk5cnE2olDfLzVw8bmAbfTGQx7cyiLAPenxFxMa+opbZ7XrteVN\nWYxC/btrphewZV3hxU3+nBsSdtYwy7k0Dg397I4/MawpQbpFHufrOZ+L9zuq\n5+7RLpvfeMYvUXo7hfB9RwpdcozWCLDcLO44l54y72T6V+IkgfMHso1ByvG1\nOBUVdyFcO3LgVMAkuxdVzIrCeja1yKRRMfP0uZwEP//FakkkEa2g16Sg0AmN\nszuNFi19XcJOoxVi0LAT8bF3M13Cjg8ZQQ+1z4zAEl2RG5k6qL7WZUUNpaIj\nUKmr\r\n=7fUP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+jhPpq/Zv7KlyNyWCpGs/x3oEgmGsLNdfCxC96GGVjQIgKoSQXfITJX1MFV6I6B9XJyi129a6z6jecka8yyRmP7Y="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603741405-95f3a5c4.0_1603741534783_0.4317278176377588"},"_hasShrinkwrap":false},"2.26.1-next-1603790871-95f3a5c4.0":{"name":"@xdn/core","version":"2.26.1-next-1603790871-95f3a5c4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603790871-95f3a5c4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-U7cWkyzJ0NcQ+SC1W3goVnqUPtKUFOoXP91/ZN5vtjBrIp0X6trrVW0dEFUA7dOy81zRbYu21OgBrnLBOkaTww==","shasum":"e09346f57c0298b052987b903fad2db8109a1e59","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603790871-95f3a5c4.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfl+iXCRA9TVsSAnZWagAA0IEP/2V5uj+GfwE3d1OV2l1C\nKS6WOIf6lovy5RJbWY2t9J2UngLd5NszcM4RiVj3QeD0QpKOkqYH5VQ2nOdg\nvroCeypTxVrdSpfONwaEE2p4VuUPqNJvzldC4cTGCiJZc5T71zK1h746h9O1\nHDsxhl2I5PpEsFsslsNGczMVis2FPG6pbh0Zwe1IGYj2ZBPjzQUlAkPNIo81\nw6di1PfvKiC9wx1BNb2j8qKLRUeMRC72tXa7660JEy+loG0UZJXjVDRAjf4A\nShAxFu2d5ZDwSH1XVqCYJwpjfnTuxZBaqafHSimBtfSKsAhitwYdITTR4mlV\nTGxEw0heC2oEqY+JArkaGsPgd2VrpLq3hTNVvEPm5t5LYmig+AMZVK3z5UK5\nr7rzDJq52b13XZhI8X0BlQ0T48syIL4O5oamNYq2ps75NrJlyBFzc6loY0gi\n0ZgaU6OJowE3XgnkOPbt7AS2hwW1RoTLv3aMVBzUbEsmo/2AE0Dg8JvQzYc8\nBInkj/REwMqeNSuU+oaBjCmOWpzx3TXA2yWMYop5U82aH3+jdIOq41ujkzq6\nmaabZO66cqQXNUUna9IpvMMq0UW3oOxCroahHkCstjWa0M9XHvWSd056RTCo\nGqMVN/etGOo8xjMLo2tWj0LeQguxq37fhu4BUFXJG6qz5R8wr+7KsoJtmrbt\nrWw7\r\n=g0FS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEWxyxM0MLGTOjWlt+0zx1rsRyHAMGHLY+Xr6rmBFatAIhAJDVeGamX6m8nHshMbpeVUll86dnRSQOQ1ap1RvgY37s"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603790871-95f3a5c4.0_1603790998899_0.25145989376786426"},"_hasShrinkwrap":false},"2.26.1-next-1603800530-f7c598d8.0":{"name":"@xdn/core","version":"2.26.1-next-1603800530-f7c598d8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603800530-f7c598d8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-EZFGyLKUMKBVOsE3hikklxHmB09L4fP/YFZtxhnzwskTtphibT0S9Ty3CFgoEs8bZLXwccU7KLLDD2lNz9z/fA==","shasum":"e1e16d790674af21921f710564e2b3338ec8a5a5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603800530-f7c598d8.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmA5MCRA9TVsSAnZWagAAEXwP/2bKfcVt/fYFAlft2zPW\nfi1AzDVnE/XqGor7z03+RseKkr7VNXXC1FugUYbMsugoRyRFIh39g4lXdGuH\nK7rMaE39NqiDkKL28RwxciUKfQg38cb8bHd4+DVnkFtOei6P5z+/kjJZoDtb\nHwXOv/lJ1w3fJwkVAV5l9xpSgU9cudCWOsOhGuwdrdVLt9ij7SvZK1GIcPNi\nuqDqk0f2Bz8conuCPB/EylvgyuQPsUytjZXva18Dc6HQ5IFQ5m8ttZThDSDN\nFq21BVDBDfwiC+YkMJcKfG5ExmJCpeCEqvRHnrn51ncqQ0TPqGOO36UQDiKr\nVmP9oHytKEC3vsozCTtfYsj2Lo9Qv/D4VWFg4O3zdUINmxwSgJfjOwR9B4Tf\nvqgjCflr19vdiw+eHgSnTd9VB+LOSOxRuo8EIdUnSIDqBub6039STUnjhTF3\n1gq0dXyBetoE0UGQYQ+FW5CbnFOWWDA13Ii+roPGbJqAO4VCY6afBntUNxOU\npmGSjKj0K06Yly8bgLBK5mMXdCUwd4g2xqJYEmz+1PauR30wp9HEisD0JsW5\nuBODmZ+jet/sbIufQP/SiEvxyUeBBX4LfYKG49ote/7LSqacJViTcgBC8D8o\nGvnadCmRoLBGRBwk4q7nJf6hyMwuY/V+86Pju+l7yaR4lWBBFCVl+NpsMXFa\n48ww\r\n=JD5F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhyaDz1bh125Qw5Ilz0PwpynhgMQo7DHIHUNdWcRKd7AIgICX2xfLlJGtU9Zv9fHEynLnV4yCsZHqX6retQhzPGa4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603800530-f7c598d8.0_1603800652429_0.9907731004829532"},"_hasShrinkwrap":false},"2.26.1-next-1603800708-7f87ba04.0":{"name":"@xdn/core","version":"2.26.1-next-1603800708-7f87ba04.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603800708-7f87ba04.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ymBlFvBkx6pf7DabXlAqJCSaqGhV8Cwp1T+tbPrX587CSdoERW/5pcv5aPap/SKzH8ALz/eEtQZntTVNS7+PFA==","shasum":"c7463aa66835833280ae0d8e553747b75df92fd3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603800708-7f87ba04.0.tgz","fileCount":171,"unpackedSize":625869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmA7wCRA9TVsSAnZWagAAq4sP/jH+2dqTmIeKYYP6SANe\nxasLwglmVHVM4lOTl4KhWFsB+NI5socKaoE7wKYaPWeSSRjQXAE6HNkIH6HE\ng8RIjKC0FIdKD2z5qyzzQlXiJdsnq7TvqK0u6Au/tqOT002nNPnz76lnUVuS\nktMovUJuqWeZ8sxg4/rqRqiKDAjqUH4YC7fyNTUqeNa9NO1YCvpJCbWezfmK\nlM56yDudzRnXKhIH3UyR5MYLpLTbTYA87QWdtwkEESDdLvxJ6IO9HAN0uXXK\nGHMEVKVikEYOwbA1vGdNkwCgK9d/0PGvlWDiqBGISIKobH0eCfFQUUeUiAZb\n4XKqRXclwalLrsBgjUMPSbxVqub2xpMZrnoQXbspLV2hms2jwVAfuNV7NKmr\n4Ov9Eds48Jr/mZUQY/LaQXm6IJ6Lr7KihyQhuachlR9p+V1wHXp4zwbwzJho\n9z2Ab43pDPB4WkTqQ6uEOenVHVdpeAkFcozNyafCpzSmaMLCtbQcC8AqKz+O\ntAA5hEy5NoG0yIfADGK1jmS6d72ySq7eeNU5rT6kK8ma3CctAXKtwAiDwSlV\npS/4u8v1WIZ4Lo5JAfR4Oo2H3zebEOf72ZGxd778uN6EI1KVyzFnYTMyHvUb\nv3n1p+HX+dKjnjKeaBYhK4T5IOmkyDCzx4TP8IjF5YodUV82aacBlcyqAia8\nCmSb\r\n=EFCV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCoqJOLaqZJfAzS7dS+bByeLXUE/hsi+Lq/qwhkwkA0gIgff7P0KRj33me/zMHKIoRrvG1GGXEoHfA4p2/kRHmClk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603800708-7f87ba04.0_1603800815797_0.9302498736272857"},"_hasShrinkwrap":false},"1.48.2-next-1603803932-4526ebb2.0":{"name":"@xdn/core","version":"1.48.2-next-1603803932-4526ebb2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public --tag latest-v1","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.48.2-next-1603803932-4526ebb2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hDwE4X4RPbchb3jWt0DuyCD2g5PHnd3xB2nDtr+hyj9UgP2HhjHnJIeyWbPPtxuP6O1r0HVmQQDhTXE/hGJ7rA==","shasum":"ec13b89238dc499cf76cf520effd787007293cd1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.48.2-next-1603803932-4526ebb2.0.tgz","fileCount":137,"unpackedSize":590031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmB2RCRA9TVsSAnZWagAAwi8P/i31wjJtj9KDtvX79/kw\nbkQ4k5a9/U8UU6RYGPVoEtCrMLGjuQAd/VSJ57xqkgxtlRa03iL3IHwC+dJO\nt4lsDcmXvKwcZqoE4Wqdx1pK/OMu2z+Wb+JeRWoOjrnkTNm9IHzpOyrGALPx\nZODeIJGQ3TI/DCtOU1jf4BHaGt9kexKkrpnHFOfT/+bb8CZN7Ka/f0aY9u/V\nXPdrMluTGnhG5GhD/c0RZSeCs4Cd3q9qmiE0aSpMfHEtCwaGldN0fF9b1paY\n9eF69wIBXwgAhcCQJXLyy1Xg/Atryqf6mGPGzV3XThDS9fv9Kir6I3Vro5UX\nC017qlfYGCvsXDmQBDs+pc4CRD8CJcmXSJGhiuIloxXd5MKT74lzFhMsLwgJ\nCydcBqS3w0o3ZMveHT0WAF+Sia6HlAimNypvVAZCTBrmCZE+xUJVsI47Oadm\ncNUkABqHoQeYCJX01d2aRD2cPwyS4jSXerJCCuY9Yf+HbmJPIci7p0Ky+1TB\nw1KSOt0VpjbHhJU/G1wbsXobylLYSdDi8ZDhLFaN1SlYliP9vtQZ7d0gUo2C\nHNCkuxCBhdot8lnMiz5JnMJhEno2wR7ODJ4+427DSMbsrx+YUDy4rUwBYc78\n/GCVIQPU3TNHgGTZgpuoq03cdnzFRMyrhu3jVvZx3DiHlv6IQ/OMCo1tBwlZ\nj2ie\r\n=htrs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvSx/+OaZSYOQ6yNxB0N6gV+uqAj+HZ57kGatZu6EHYwIhAPlQETb3IRkvddrKhcHr3JERtxZcK0CgBLk8gMHmkFA7"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.48.2-next-1603803932-4526ebb2.0_1603804560692_0.49189880902660055"},"_hasShrinkwrap":false},"2.26.1-next-1603804549-d7c0bc22.0":{"name":"@xdn/core","version":"2.26.1-next-1603804549-d7c0bc22.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603804549-d7c0bc22.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KQ4bV3sbAEwZgeX1SI8KIdln87CAB8vw8ROZSWw5rb0Xqmi6MeusRwjuOePdjOLPt+kFAQkZUD9dD78G1MhWhA==","shasum":"d5b351669e847cefa77fad0821f9a0eeb3c5c2c9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603804549-d7c0bc22.0.tgz","fileCount":171,"unpackedSize":625869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmB31CRA9TVsSAnZWagAAzA8P/3PeM+mhKq+KzjKK6wwL\nu2O48sxWUrEyoUR14nFJpF1BuriMScJCLcjAvRPKudQDqxXMBsIRimdf8K+4\nl759bU++HnPcJ2RWwVmMZNlyexctEiadH8TwGrc9ZT8RmGFXT95/3p+kB26F\nAM+wG0ni1/8BHfO+SIsaeGh3U5w96yxUr8HBCpxM+6E2Dr3nrh604n2IiGZM\nL76NYM4MGn8IaIQaEITmj/0J0ywdLMrGnkMXgjb+yXg+4qd/kcW22KiwckQX\n4PgUspyikbkQcr7nFx5U7SDC3khnHHNw+0B0accEUGUYABeVlEw8da/jIRD3\nc36/gtKVqig4tW5zZ473tiJF1iS5Lk3ETV5VvUGYgnApjJCMyzvlNijZbxta\ncSXAZYnfz7aTetmYwNjRic5uOWViGn/fQ5mm+Jtq0fyet1shu+BD0FT//Tz8\na0/0gOXIUgQLwa3kfT+wv0/hx/P+nCsGUo+ZMVtm1DLzTt6Yd+t3ifWQE1qj\nhBvCqhoeIrfkneCIP+KuBMr90lTtU12xJbkNk3YrjFQizgKsi2/CCFSh6gK2\nfuVXg2ttXFVOhMQCZknONyzK4Qs7L/o7EKFBwElyiY64U8hXFAbDGQjPSdy/\nUtWLgD28pcCFz7IMX+CTJ3eCrASCZ87s82Nro6G7GnUp4oBap9nlfd4yatwK\nBq+l\r\n=8J55\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD33yBMFdZFWF8af1Q3rO/c9EWTyvnMBNoXM+eL4NitnAIhAOggOB9P9L9W0zmjoCaZDyt+mdcaoFt7O0gA6FgPuTea"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603804549-d7c0bc22.0_1603804660534_0.08508393202362519"},"_hasShrinkwrap":false},"2.26.1-next-1603806604-a0b4eb5b.0":{"name":"@xdn/core","version":"2.26.1-next-1603806604-a0b4eb5b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603806604-a0b4eb5b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SmsPQMRjHTsfiGwElGVxMeo6Pg9nFxLJ9dfhBn2MhUpgWlh+P4QFIxfvm0Wd/XgweSV/LH1U/Fz2RND0mYQl4A==","shasum":"927663a44772a4c2d74dd72533f3e041641f861d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603806604-a0b4eb5b.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmCYCCRA9TVsSAnZWagAAKXQP+gNmlPPdF6yiMHIXYSdd\nGE273mi9h17w4Zc4O0JpeJYcLNHaxrpcnFgxuRWLftUJhDG++yDaDWh1POQG\nag0xvKMBA+Z+NuinyPaYVu9phXBlchMtRkGQ8EJqMHVETjTbsYHqkFGH66ya\nc09Q9htKqUyFoXlUtlytE6YJsQHr/Iv+3i/ZNF4wrf/YuqJelQj/FbiO8Qgz\nUIahqOPtDqJnIWyZ61uJlyJ9/rpZ9DPH9CqyIqAnoyFpMXN29zwG1J4HEgf6\nE/rOTT78tUNxa1VlAJxP0wvfM1N1Tt8eUvUgkCcBW6x9dfS2CeNreRYpqfot\n9b+9cYEzWD5j7xNezzf3Pwf0KDNPe+97SHhiD+4Ptn2iVobmRfcsYviCOpFr\nZ7LPx05xSNL3SGsU5fEx47+dR6+tK+432G8GJ5vJmKmF3YuE3S9Zgi0BlHeB\nq5sUwn1d2es+saiR42qnw2ErSSjj7JKw2A6acltGUjV3dng0fqwnE8hAwYAl\nFYFybYfZFD02yRqqcRWl3RpY9Oorbf4n5yI9NGG+/dn7S2CaFdf/jJ0YLfKi\n71bE0CStKC9u3c1wPefDaGhK8WU+TxLCm58jk+heQ5dmW7WCxkEUuwHF/zm0\neEnDWf76TsrnoQenWymHfEI0KqT/0hFVwLtwnsRR7eUbBjDnhdIPwSKZlA4O\nMU/o\r\n=H599\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCoWQaQEJvTB/Ar+qbarN1jtHM7GsaoWf4nrJldYzqSAIhAMohf+st+AsQSqRPxKn5/dF8DJByR1KndZJcYberjGKN"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603806604-a0b4eb5b.0_1603806721652_0.3846035676864539"},"_hasShrinkwrap":false},"2.26.1-next-1603807670-742397dc.0":{"name":"@xdn/core","version":"2.26.1-next-1603807670-742397dc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603807670-742397dc.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kij9igtgBLP2xGTHzTyd6reIKc4gWzgYgy2uUelLlE92PHEAJUuqCS7dL5tcZ7iorwhT/WieYGjEfxE7WwAxAQ==","shasum":"765ca50c110212ae378dc8e7f75c5abe5297915c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603807670-742397dc.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmCorCRA9TVsSAnZWagAAMt8P/Agyl7Ibg8WNfr6uP2zV\n6fgCoI1BKAUzxVMtuAaL+sA1LJK+J8/xeAz9DwyJ623/tPr+AgHjwob1gsXX\nd2ugf1V3DpQkshBlacx41Nk+lexV3t5QhoVT63hMd/AeIYJiSktkfcMWKx12\n8BEtGAIWLEYLZIlO53XRCE/sfNfxNNiCLkp482QOyR6Bvb/TUv0zcxcEx45L\nZVFn4yT9PuQl+edfIZIv2BsNW7/+ANdu1BnRCGmOV9M3FNU8rbV0UNmW/3PE\nCcgZQT40ZrCXDCIZ+02Hfd/iOZddIot+3I8wwPIHzlMUvz3UzKu+wutwtG77\n2sDnKZrCXs94QBtsfZiBAXHj7VK13Y0m7YfyAZ/oX1R6hnn3ZFprSfhPNsAs\nXXYNh42pyEAhhuH3CWP8xhbhsxEPA36oVsqvd0J8ZDfla0fkW40NNMDOWfFP\nupzlqGA4uRRPhoH9cYuyVuKjie3mTJGJu915f3wsy+1HjWneiFbkwE59TUUo\n+uFRo1y7NdnDeJ1xZQVeZfPwRZawTitYY3XxAalBFiuBRsDVqlAFU3LWyZWH\nFEChglsRFXUBPU8F2CBX2S0VQ5aj890K5aE/TYUtjxEqFvsiOSB29GvBdNzz\nBx7qTvd0UtNlhTWF9qA/RmUi15MlqeX6bEwlEU5Ju+dMe4mhZkrFER+jiYN3\nK80v\r\n=NHNY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsE1JZjy+21FU5sM6d5dWixs1HTPuRBMC2I3XB5G8sewIgOlgBzRSpZRMa3MhDW0rI/DeLNGMEefXjM451ah6XSN8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603807670-742397dc.0_1603807786574_0.7756307372905942"},"_hasShrinkwrap":false},"1.48.3-next-1603807879-44a5e9dd.0":{"name":"@xdn/core","version":"1.48.3-next-1603807879-44a5e9dd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public --tag latest-v1","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.48.3-next-1603807879-44a5e9dd.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-AhDp62Z2Ym68shHuERi5dAathgZ4HPVMYS/FHjC4jEiV1jbDSdrutDlSFNkXyw04rTMOtihXx8yFPXCr7pJ2Cw==","shasum":"5fe04be3310476dd9750e81214818679d913ef57","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.48.3-next-1603807879-44a5e9dd.0.tgz","fileCount":137,"unpackedSize":590031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmCz/CRA9TVsSAnZWagAAb4kQAJIWHxPUH5/vPXJfZCK0\nRBrNopOlePMgfePhKW4oGbuU78ytOmmKSELyWU2Y4whY82gFYQrnhWV66GFd\n4iVe3iA5XpjZzRVNdv5Gq+JwSEOKtrjv47gon53ViyDYX0GxTmcpn24wiuRa\njMR3pJ6ZN7M5YaOYgGhyKikMFElkZJkVtw0pvjdv6vRiHG/Jnt45RR+Fy4J/\nb2yv6PIE7qoiB7qL7MC7aM/uegmRRKkSFdhXSdMVt4RL0MQtHPdZTCYaH+xC\nKv00CT1TQJF2VzqVavCxYhD600l0AF8UX9x7L8ZX3WLmH2/irO102afZCFz1\nCI5DoxqFj4loT+ouTasUaSoIK1k3KsLVMCYSlu1t3pSbZuo9qeRv675sN/82\n3VAdTS8mR5f1e5h8wkDFTi9nK/KjEnOxkFY/bDwA8x7bx7ELbnxFZyW5j0bP\nRl7bhagSBi2VhVCTQ3mFJ1E6hH3j6fdpZtKf0hujelVILZMvqZGoKxMDxGRD\nQ+VCZu+/HwEiy54QEcW3WdePFR6T1gsBihdjGSdmjj+v3AOHV1l3sdpEEBEt\na4E3ypYCgDZrcAHOXJJPGHFsX/tRu7/UohT64FCAo13wgSbo2GiVBsiR0JbR\nrRpiHEC+MwtXM7K6dbLon0BKpfIm9O9J/L39vB6JykMsVmltc7kXhF1J3tn6\n46SZ\r\n=TIMx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGbeYQvX/WoJJN8cyx+kjU308j0Pu9TRLsVA0OK90kXbAiA3I5WFaUE7LK10URuGBen0Ix7Wxi59ugqprMLq1yA1wQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.48.3-next-1603807879-44a5e9dd.0_1603808511389_0.8349619516940809"},"_hasShrinkwrap":false},"1.48.2":{"name":"@xdn/core","version":"1.48.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public --tag latest-v1","release:next":"npm run release -- --tag next","test":"jest --watchAll=false","precommit":"lint-staged"},"dependencies":{"@types/cross-spawn":"^6.0.2","@types/route-parser":"^0.1.3","@types/uuid":"^8.0.0","ajv":"^6.11.0","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.0","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","http-proxy":"^1.18.0","lodash":"^4.17.15","lru-cache":"^6.0.0","mime-types":"^2.1.26","node-fetch":"^2.6.0","node-mocks-http":"^1.8.1","pino":"^5.17.0","qs":"^6.9.1","resolve-package-path":"^2.0.0","route-parser":"^0.0.5","serverless":"^1.64.0","serverless-dotenv-plugin":"^2.3.2","serverless-offline":"^5.12.1","uuid":"^8.1.0","webpack":"^4.43.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"lint-staged":{"*.js":["prettier --write src/**/*.js","git add"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.6","@types/fs-extra":"^8.1.0","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/webpack":"^4.41.10","@types/webpack-dev-middleware":"^3.7.0","ts-loader":"^6.2.2"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@1.48.2","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-S+Cb1Fx1DlZAbcY4lwpTduiFpb3D5Qz65fy0WDkj56Z1chncXcdF4O2zeJKW6S9tcR+9mFGRXsW18IIx0XSTRw==","shasum":"85c18fc740fe5afc67476bec7f76da15de2fc946","tarball":"https://registry.npmjs.org/@xdn/core/-/core-1.48.2.tgz","fileCount":137,"unpackedSize":589977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmC6HCRA9TVsSAnZWagAAXyAP/ieokC2Y9KG6uHZnBhcR\njWPvrKZxBucCKto6iDXh2Uzwl3PxEyFgXRgERPnMS4QRUwho682oTWw4cm3g\nHSwGoiX0qZKk6F8Odi9UE8u7790+tdcKZNpYP08AEBoCczX6yQrhOk08dQfM\nw4/cD/5u/aisEk8hqT50ff0Ch0DZH3caAl0kbzf8LP89DhcmUTXXbjTS/UyF\nmBzFAzEtch71G1ZhW6fEN4dypxrkzSAM5dex2Z7ac8z1dHGd3vGZMHiqDf6Z\n+UrXDwksPL0TSrLFDk3NN/cDkBkQ/Veaig4f8eXIlrJajlk7KYUlOCYXAlHH\nZw1tduV9VgvtKgXiiod+9vdQ6N0mHio1SFUh2JcOf/Rpx7few2wLBuBBQ98v\nMwGXC7T4YDZWjUiZa6ICQKjN/BrTBzO8qEMNJsOBmnWITnM1CEpEbA19YnKW\nIa/5QulM1XiFfxG0MXdZxGBHtB5YJAP74OchJIHcgHlNPhraqhp3Ze+FrjCJ\n2UPf9H+iLCOzOK4ElbvNxiMhATNsk8Tme4pVbmpUKvW8uLk7sdA+aPhBgltP\nmiIVwbuEZFmr3yWujkdntnRkRdnSSWK2g7JVVgEB7qXpY+BFjydqbnVwD9S6\nYnQ8Y3MkYkcaLeRhlCNNZ9KnIDiHEJpZ/odJWs4JxExnG4KiCW/IOn6gkItr\nI1CH\r\n=pxap\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYe5+DN6BCpfXOG4YfrU98mdcdd6rv+z9E8B0/9GVCzQIhAOLlr/myuY+DDfH8b/Sq4MTsKfNVU0TTnpec80thuAzB"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_1.48.2_1603808902951_0.47144034028889137"},"_hasShrinkwrap":false},"2.26.1-next-1603809474-6b2d18e4.0":{"name":"@xdn/core","version":"2.26.1-next-1603809474-6b2d18e4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603809474-6b2d18e4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ETCp9fRNU7Csn4B6vhUAUZd6VivnRfiYpg1N3IrP5jPP9f+s+MnNoi1XYG9/rGSMh9ZEMWBVwnqn0vdn6NoP5A==","shasum":"659df6c5023e98b34edb42c4a49b44ea73a008f2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603809474-6b2d18e4.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmDFGCRA9TVsSAnZWagAAMrEP/2Dv9cKO8VZuGx9/A2U2\nh6dFnmQhgXAd9h0EPlZKLcLFsYDErQQpnfENaTdFqu4+6HbWlNrzW+kKzphM\n3aiHMmU38RN3fmOPW+w30GXGeDmCEFR/nJ7Y5mFGkkV4ZwrzRVcmPXp4h47/\ntvd4NYMZ6LZe2QO0ewzXAbYAtHAV3VJ7jvflp0UTKrHuyBMu1TkSL7efu5/F\ntMsJjjAStAo5NwDquFjezq4q1odBCgxX3gZFBlfZO3k0GPTHepP3TZBBUpnj\nFuoujbiwEjcz1CZSnkcVV6JTHDJ3gxEb6il6Y/jtkDQefR6HZ8LR1Eo3Bh+l\nSIu/+v4qx4fzvOvL7rO5wP6Q0miXWlEJhM1DcGK9/ceJPKUY76Xh0KFP8IHR\nSRRtPyQIgtZJZZGeuKx1Rm2571n4ksRsro6wIhMzyW2xQhSy/Wa7HsR589oR\nbIdLcIGwTIIU0uaNvuAElSAWjwywn8Ov1mpQQYexW0WCZEmnYJsFdm9v257C\nG4ckJW4a1f0Hqsc9FRlu5UhnZO5lVvoWCIYSBp7C5h7h/glR/XDw+R4gJ8Ke\nW7bqcSctGQjYLimb4hBrtG996nHjpLIL9SLPsCdvTQG9kLdULKPcOHPSBS2D\nOK/7o3EL4J84WiSJKpSzl4JQIvMVjMRXrBDpZ527D6utRnYV90L5Pl55Zugt\nVC7z\r\n=as7K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFHrPyqWLa5ftB8ngEEkcvdUxJ9yrE/kyNnGoUWwgO70AiEAvLBh6i7rCJadLS0I/9XDtJ2PuakZNfLrFJ8Z0srtek0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603809474-6b2d18e4.0_1603809605958_0.5275355875360561"},"_hasShrinkwrap":false},"2.26.1-next-1603810682-99696a29.0":{"name":"@xdn/core","version":"2.26.1-next-1603810682-99696a29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1-next-1603810682-99696a29.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vZlYf7o6X4SgE4sip/l/iaDfoDMVjIYy9MNUx9NjABn72oWl4aujabo77tTw34IbinxsATgbsRQhe1dKQstVVQ==","shasum":"b13330e5d626ba419d58c068633fefda6007ca7d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1-next-1603810682-99696a29.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmDXwCRA9TVsSAnZWagAAJS8P/RCYxPL2q185u6PJ9qZK\nEBtUdLmuiEawwBcchep13qRi9iS/OaS5w6qgPlj/3xD63xJM1Fd0auSQfl9P\nMTorJOPT91cblzVq40J4fTLBp3fGWNrV7ydOQw8L81BsxDNC4SDgALPvX3km\nD9FzfDIQYMLUQmlBpFxgTShogf2pXQKlNB0gir9g2GIheC+sSvq4+MDOZ9Wa\nC7N/CNtjBY1I3soCRoPSj/sz0nECFr3FOwQJzZUDLcaihTIFw15xZfYa5ee5\nsvkIg7gbqLK/3Ile7X27yJ4QrtlBewUdB5WO9guvj24oG19HCsVX8hePI60C\nRBZTiJKEGTYtwb0nVm57UVaFlCs6YTQ5KP9tMRsDlP2dPJSTRXx+tMjSk8VZ\nWVV49Ys3s7bPUlxo7E1mJYVT58/g4Ps+G0Mfpm0Jhm6CkfLDo5qB8FQAn5yw\n2mpjRu4WjnXCpS40jVbHEhzYB5B9/XjbnhNksNzJo9nD1nqp7mtGgdGcVPMJ\nf/lxmWa6dK7mGXNZq10yfzrw0m7Hh7fof/KvwSqNgy8pTAkI9fyMJrVz5d9i\nv2FXjdPcZo22ARS1rlSNpG5SkIzl7CAM/elNkfpkXRh5yK6UjRLEDg0mxuuT\nMDkHTkQUdP/+9+kmDVUGo/K6w0GtVwytlDp/HCPhGPNORz4O0E45DL++F+0a\nuUjC\r\n=Y7po\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID9wITPsTNpshkPPyxlwg2dVlACnrjervUWX7+KzyrEKAiBGid4UkzN6dvMae7OuzZ3EMbZJx2NZM4I8Fkjt6Y0NBw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1-next-1603810682-99696a29.0_1603810800274_0.5966057938083764"},"_hasShrinkwrap":false},"2.26.2-next-1603810836-02e6366d.0":{"name":"@xdn/core","version":"2.26.2-next-1603810836-02e6366d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.2-next-1603810836-02e6366d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xEvvRq+ZBGr8u00PGZ87V2XTzozp7+Dfy95MTdkvpiYHXUxiNenrPa6so5GPkp+ciLPj0FJ5h3rPUfAEzPcLeQ==","shasum":"8c19677329d7e8297a2a3711c19c9f2becff0d67","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.2-next-1603810836-02e6366d.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmDaVCRA9TVsSAnZWagAAzdoP/jajsfQBRB5jWtwPRoli\nYewr2/EJlIWbw8H/Y8f8b2cTvB6NJH7ApFfnJ/clQuWvXvi9xVD/+Oh29Gh3\nRsjpHMOU0tWo7+2GD60aNN28QOm7K9kSIU2vT5sAoa91yt60ojMGbL7RS9QQ\nzPi8uOVEnehApDf2DAdkz7NPowjShSM+2QOj/71Nlokw4cxXrmUnvRx0bpNJ\n5U4+1/N+qJpP/OGMYGEfPOGsuowf347m6VjpG3Vv0BFvJEFljTbhTXyn6XZE\nuE4/sozf8qWQlFOYZIgfrGa5N5yrbIOq4QkeVM8YEAqMhqeZlS7tE0D2uwNa\nu6ir3jsgwBYxLA0sXt/JqTkAxdqX46UoLFATtfbB4GuudQ8fvX2ER8EdaPK0\nUZIItgzp1jpw9dhQxit1NsmzRUCz0QRHo1MKM6vRQJ1r9Zj546k+1flPVfdj\nqL4a2eQ/i/Eh1shtDd8Cr2I2awT0JMflS1/y5GJT338q4P2wxacJ/C0NWCLK\nDXTStn3RvomBqqrS2u0BZ0yz0Qn2i8p30uxhxmyxT3cY8YrEs+7dknxa/6RW\nZlDEm2vr4CPazoxNuyV4T5Ew9VKHZVs+nrjpA94LVQgSRJcTwYB875Ss5jDT\nDNrlyk3Nc6quK+edBa9boZJZW1LVGzohQ+zoxvNcxu/yVXX1+9fgAPUJzJFR\nDkRk\r\n=HzGZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5NQ/Mh6jCo64PCW8bWvOE22SEUtxYIcFlwcQlBv89nwIgLUGA1oKGEt5BnUUVVP7gxuyjaC/bLG921W1mVsY2Eto="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.2-next-1603810836-02e6366d.0_1603810964834_0.7464840901751721"},"_hasShrinkwrap":false},"2.26.1":{"name":"@xdn/core","version":"2.26.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.1","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ouIaqJsul3IRA44lvBiRP1tn8OxzBEY1NUH1FJn2fUnSTLwUCLvLr0mXrO3AgpZSPQAkeN4mKYrEIM7we2L3UQ==","shasum":"d0d477836007eceda37d3c618ae4b47b9bbf6b9c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.1.tgz","fileCount":171,"unpackedSize":625265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmDb6CRA9TVsSAnZWagAAc2EQAKK/Bam2SlaDjGXhnsPL\nqz3GYTFzyq327k8cTtCqk5kGXZag7GaD1J3eaHKSOt+iJfGEpBdcGSE3+nk9\nDWcb4aujgTjc+1Of/08n3ev1CZ06r8u2FfC4bGCXLD15mxncu4E/o0nOhgg2\nWUYiIXoSlqpFRFI00WLfG7pXIiNqpFOsWTS4Prp+qg50tZqGRrj3AgMCE6l1\n0KWEmG3GVWFs57gU/ps5LgOUIf7RT0r92ri6shDV2n0C668Ymspdnu2KKRAB\n5m8HGycUJYwkWgtumXQfyRIo+lmezi88Ot9IQNJisbb3HzCSSHOCi/eMLXgW\nKRw4iDmgj4GaTg06zjmCqzAiq6b7TTAqhK7nmX9jvUrzgCzuVyYdrYhFOnPp\nMU1jo4IZzIxio3K529X79j/yfdDOxSCdPkcPCaRjOfCY/fA4Kueb5uTgTtpE\n+ytdWMAlBhkj34VNIseqQcdakpDwGUHYB64p7gZuDh/ITEbrRQkE80VcCb8o\n05VhOTpgDgk6t55yE5rdmu46YgS+lLfh+3wzU3W20qOiMH+46FqZSk3I0Lnl\ngq9yl6XBkpc/8pqwUNpAOEML3d1ABDRUggyiP+TVSMFdDOPCrZdq3x8kPfZ8\nJfUj/Nt/hszV56NOf35ITWL/8AkQn4CkRA87jllhz94z/Q6PbreFXi6y2LqK\nkX+m\r\n=u3M3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiXQx/MFVXfw2VHr7YoVDBjh4g9gNv/mTg382N1+86qgIhAISADQL8XjxgDrZBKkkUzbDwjEbTlDDAKmXokkjDMtJc"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.1_1603811065507_0.8986894035405235"},"_hasShrinkwrap":false},"2.26.2-next-1603815010-02e6366d.0":{"name":"@xdn/core","version":"2.26.2-next-1603815010-02e6366d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.2-next-1603815010-02e6366d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Vs6xsTULfHy0o422CMNfMppk6Ht9TRjhBiOhfSyjG4zVznG80L6U1oGspsv5OU+3fqnRtlckpRoAmpiE8x/V8g==","shasum":"04569a10601f4e3f0c0c0b46fc1a7023e78eebaf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.2-next-1603815010-02e6366d.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmEbXCRA9TVsSAnZWagAAKzsP/2DVk09sd5I0fauJcIlm\nG8y+DQiUpeTabJl5M29IAOWXpAuquJeuDQQ9jhCUJkp/6K/O+babl4JCFgNC\nnJ5OVFookmn4jQRiKX3e/LbbsMoOSP3cQofuGDrr8f1Q6qUJJnJ+VYfiQ5rD\nNAAODxC2++Qysbbw1dbVOF8w1ZK8uZKonIxBXRb4niJDJTJMs95QTP26bTDl\nertczVHVv38HX2LOSb4omGiYd9o6vyao6+NEeH7Sf1ZfHyB18lDwODqXiC0j\n7a2g/onijrEMxbUtuNiFCsYrNT6FwRtDMo8s4dLtnHzV849vSSjrJ9AFA44A\n+WtzNyZjpFQK1XdvOHUZSVOCflR+PomGwdQ33AxN1Mo7i9gYlMfgqTGZhh74\nazom8X1Un4rGX/Ryn4m97P/Uz3T3PUrbpGw8acHdCYI/9hv22AB18phNddSy\n25jT+B2p2pGQ/yYzuhvztkso/ml0crI47rWfJxH1rdvoam3+UmQ0XU7KYtkt\nrGqNQOSt1iHqa99kC3RimqfVVxqZ5Glv/Ib2c1ALhd+msgtIUHDacI+S3pUR\nBMdIgVrMZFhvGMtGXbsgSvhEUkYJNwp62NInNtEww01txkVeNvmQ69L2Ryq/\nRneefB+s/hUgioUAz07v2csklxS+6wjXj1G07f8s6sUD9/15ri3p6ZUzl7qJ\nY/Pp\r\n=DDTY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTqoho0ISpgh9oywe58y53VK3yqUvJug1vm2dXFviabgIgO9WrOWGV+PFEqxOG8A00uSTPOhbel0Nb17QTcfvWODM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.2-next-1603815010-02e6366d.0_1603815127108_0.6684478971255967"},"_hasShrinkwrap":false},"2.26.2-next-1603816325-02e6366d.0":{"name":"@xdn/core","version":"2.26.2-next-1603816325-02e6366d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.2-next-1603816325-02e6366d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TcKBBKgQKxVqzOmWx/5KfCAfWXyc2sOPuJ23pF1hPohH+WJ+tLBj25TuUD+YLS2Cm/wCB1tEHD9TMWrtkH7H4A==","shasum":"26e6bef09548eee5ccbf22533c774d6ad8a4d462","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.2-next-1603816325-02e6366d.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmEwECRA9TVsSAnZWagAAtMAP/26A/D7tfsw11pBUBNpW\ne1OenjcItHUdlIefrrFXitXOVc08MvL3ZjVw4Ja60ThzC/jBXrKYAhn+BoXZ\n80c9xLbDxPiiKDP8HL/3jX5ISlbLmEzkAPmHHxBLuaZsTn8gITNN7tmkULBU\ne8jlkFoydA87+4VKbcr+Im3OTly7KQWo8Y5RUV3r1d37xydkqSnLs5g34wn5\nPYvhWHSwNzQvxqT6Ta9zGPsQZAKsuKVPHs7engLHiNGBDZSkurKD6McKmRzE\nQWqFrDDjYDvuUCH1EBvdJExLL13fpL+ozO8XUz4ocyF1G9a/jAyG6r9c4BS+\nUGSbrhSUKPPykrjkoIArB90p4+vWSYxkmVVt4jOHs/s/b54v9IIHs3WmSF8R\nDb5IezoAhym2F3PPoppoGYo1eLly74GGT94tcUSSxtzZ89ojWyxhXG+5NXG8\ni62HDRzusGtNzhQ4tmigc5F6T1Zm5nahIUmiQjKyM/0qMEw5ImucDCRFNAiq\nDOgHW4LL766Ahmzm+ca46Wc6I22acVArWOmNMiYbDf6DxyvVGMMA8Dv+1GZ9\nUrQdBLxImfo6rB75nvGvb5UoKKH9A9eydDWFfP9R+rmdb7eQ70vv9wPC0tKh\n/OXrsAfEEozbAGRZs8AXXNsdREs0YW8cP59jXi3B6/JzoTRXWhXKJbudYYpu\nmt+d\r\n=lfCd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH60v3dHBYNbJkcD4UEIlWiuw4TLP4Jm/SpKnZGCg87eAiB1f0pnnkWfRLHj+fmb5TDN6PE3P+HiKqBW72+hX8Rtww=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.2-next-1603816325-02e6366d.0_1603816451478_0.3876202619474831"},"_hasShrinkwrap":false},"2.26.2-next-1603829901-01bf666c.0":{"name":"@xdn/core","version":"2.26.2-next-1603829901-01bf666c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.2-next-1603829901-01bf666c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-43iLGcUbKPpOgWQw1OTShCFTCWq0R9WuyPZ+oXMrHny138oRyqIza3o2LqS11Y1SOT+j1k9J4i/PKq17/4jknQ==","shasum":"66c611d0f31d51929b623c37a65ddbb8ababda71","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.2-next-1603829901-01bf666c.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmIEPCRA9TVsSAnZWagAAtS8P/R8nUpjBcZD4o6Go2uEm\no8DukaRv9LeHiOuc87kVozc4HeAEeucn1VejN3EU9vV76p8ETEugYZzo2sy3\nJxu97ePjzq5lx1kSCBUN6d6xwLIUwZMxurHn0yxyG5Xc20dS6/nd59QoWgOP\nYGLZtnwPuYZ/4MGld5L9KzbAw1WoyJaSG17JT/czEOuZO5zNH3ALxUkDjqZa\nPnMSbh9h82zCB1B91hLiNWgn8CsOepiu5tu+H/yctcHSfaLKcqBY4jr9JPqT\nqcFcUdDApuXdeRvzXl+5b5t2UyYeRCMWC/K+rB2ugSbl9zsrO56Pvi3TKTOy\nj6DCpvzgRiLujA5NrmRPfnGD1f45v/+Qm+GtFwPjOUs43bOpilI2nvfTIP+S\nnURGShoIsYX/+lCRK4GFxOQyAM4hX18ZX1jLx3a6gxVLPCfQFZfWNsiyit3C\nYkqTxvqjEvfeCqO0RxjEX3qsig1W0WBkj9s4q0wnSKSG9OnmPJtzDvblB5v/\nAwi0fwqcPbdu8c0q6LvwEkt8Pl5ZYzCBoZ9cL1zAnrsRtDgBPDHaOeJ5mLdt\now317uCad+4GAeWwty45yb1+eKs3Hi459WyT8odmH4p0n5HrciSXra0+lJqx\ndWZRaMyRFXUVLdXHdxHSzNQ15MUkBDW1GrEPxkggdSQrCJSi0LFqjUoexgNW\nBdpV\r\n=eUAv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGHID6to63TvlOD/05CEJalwxorMFVjel21e/uihm+VTAiASLfPVQ+pCzd4iUIqFwQRUFzipHCglOhlI6rLeyjZ2+g=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.2-next-1603829901-01bf666c.0_1603830030631_0.47388404415983"},"_hasShrinkwrap":false},"2.26.2-next-1603833319-ce9d1498.0":{"name":"@xdn/core","version":"2.26.2-next-1603833319-ce9d1498.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.2-next-1603833319-ce9d1498.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tITExP7rlR1MfmXVT4EqKE5ImxktqBfREawof4ioQKQLqNWA1qVyV8Oo3qwcpIC/HrgbCY58RdBdq1krB9EStw==","shasum":"13af14b42b49259dc9ad7c099aef9c80cef0fafb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.2-next-1603833319-ce9d1498.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmI5TCRA9TVsSAnZWagAAleYP/RijR8pHpzKLAKQbIyPL\nL2/Rtvvmd3bQGWhHEciudDGkT9UuT6d5OVQzoMtrMq0W45QjGZKdz0T16uL0\nY/3Qe1W4jIMueLJvZrROilfoxfeZYGZb1Dk0GIYnOOXO6lue+Y3uc19h0UQ+\nrfJWNhU93J8k8qlqZ37Mz7RZrYO4jNjpkRwldpqAMSk3qNqN6XiKq2/zDT+6\nyuwkg8g2dQri0DDVKkPQNH2BA5RRbM2rk6MBfvfCotg0WCFbVm9jJgE5Q/aA\nNUZTl3b1MyRwV6l2zTeQiOiH7oixfGte/WJdQe5R05hkQJYzuDhCtS1KmXgp\nfIuidgcO6Yikmr2WMfuDMtTQXAZ48iCHtqTqheh56j2pZH7OExTcido9MuT0\nbu8duv49hggLslC4aT1hxCCRYgsvfynWEuEFyuKayhiqC8SfliH70+7tHdG+\nOOAxSFt9YJOwI9XzcWdjsYWMD+9FU54ciBBSnLuU8hGO/ULfc2/ck5oENTQ3\nh1I6TdzUlYOLO1+POoDCEom8r1p8GcusVincqtEs5ILxXvUHw11YdNraK+lg\nsOsqfl3zUpMocFlyPHJWJdeIcXTtDptOJkTIYMfWwkf+dObHjXdBCeVqvpgo\nEzF7YCt1Nf/5s45xezu65Qv/ljk9tNeKLqGD56RA4VvfxgbmkVi/pe3PI6aA\nQM/1\r\n=LkbH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBkCIro1y47VLdb07gFr7a2R2pcdmEPjxBobZ15yR726AiEAkP8nndKrfIvy08DpNHci83yC1GCeDPQOwoPpY9XSgMc="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.2-next-1603833319-ce9d1498.0_1603833426117_0.054815032695071375"},"_hasShrinkwrap":false},"2.26.2-next-1603890257-b068ddc8.0":{"name":"@xdn/core","version":"2.26.2-next-1603890257-b068ddc8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.2-next-1603890257-b068ddc8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7cXZxuo2YNqnRzi3oUYopA23jB6neoAxDFIdm2HVcpFXSekOC95icvKb+/nLId1QGTw35pDuni73Z26Lb6KJvw==","shasum":"a1f5657e796a9073e9d3683f029d19b3664d2de5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.2-next-1603890257-b068ddc8.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmWzSCRA9TVsSAnZWagAA3uYP/RwcJqYOfld541jjBLHY\n0fjfv4KCNXpO2OEysyZqjAB8g1xGnjJT57XKpxSSqUhGwt01mXybfewhAmOo\nkQ/5WEeGhN85Btv6OgpF9NEnu73rBEz7odNYZBjwzuFF4umyGxWK1ff3JXhj\nHLw7U9yKBPQIDyiNBf5ez5C8cQFuPj47MwQVNx7Cb2zxapFNQSGxJrpIpAak\n4WvwBFJB7ZVEpVRM+kOg4PsYvGyzBYecgus7DRoWzQLraEo5KUjI6tTcQAe0\nRPyv6EsrmwLqLke0lToddqrc33hrjgncq1QQgaEVEUlO7FNzCEnef3lVxe3M\nc/y2cPIYNkMQDGHdEDp0kywTwIPK1Z0Tvc/kVsz0Ag5EMHrR8LesJrNp2+2D\nFiRlm601p53Q2hLrN3pSO+GiLEyliScjOcgNWJfNgaghaRvb+cobVnqkP/wx\nLLCd9hf/XA/jc3CYBCroSuO7hkAg7xDjyXS82Xm+NN5o7GAdeKy42mqAdnJi\nh2SOvAWbq0M66EfS9jtC5RPJrnOLtoNKQW9t1Na5MqWW4xLOdSM+qKHgxhyv\nZZW4bOqJIVTm9mL063AlFuGLgqunPfonXsZi8m48Hdvu7kf4OT9sFra011Ox\nP9rLV8sC1jA1i2RpcebbwrHYDVwLkApPh6Sa31wsVKo3/QBbMJ9ocRt3v9tC\ni7iz\r\n=lOlO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAxSHuDKB+PuD/EJJVjvmN5OzEcoM0DQFXB8Ob0hS3UZAiEAkz6KxexAy+RHq/IRDOl3gIr/EimdfgejimHR8Grd9X8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.2-next-1603890257-b068ddc8.0_1603890386188_0.017928825356919864"},"_hasShrinkwrap":false},"2.26.2-next-1603895970-aaf802be.0":{"name":"@xdn/core","version":"2.26.2-next-1603895970-aaf802be.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.2-next-1603895970-aaf802be.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rLvwc9qRX1oTUdLpZbcIhSe/E2/l79NnBljj0WSER3zTCgpiJda6AK0JQEhvH2EbHz2XC+Nq9AwzZQm62n3frQ==","shasum":"beeae4eb20a4d60d872d41e28d866985d3a5b658","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.2-next-1603895970-aaf802be.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmYMeCRA9TVsSAnZWagAAaTwP/RGcyVj7lwAkCvKFWDQV\nec2U4nH5aUJhAvEISfStJXbO0QnBtGR7EwsL0JXKUfQCu8lguyU2LxcuNuKb\n5bf4ZU3/pn+IEUdKEv9T3M+P6mWLpGtFHPcrPQwoOP9Y1b+anPfl0vyS1aif\nI6MWnhiW3COU9BWMs/OvWNchMvV0uBK0CUyHiydJPD6Jx8CU0Z2NaSnF+9cg\nYrcQZ9NrRCpAbaFeOi23dVACKGY+PHiIe/H1FlAK21N3OBkxlEvrLjWZDyOh\nn9I13WgdG1hFXis0zQx7to/7S/zFUCplneIqyqpw+JAf3U1zmjqjGAKz4RVE\n16PwIcl+3i57sS6OYsGSM3uwRCZHEC6u1nk899wOsUYtE11MjpFfsFPzbd8n\nYVbnANUjCwzHZWgt6nIYCyyVdIs7nJTcVbmU0gdDlf7dZO5cclfWqhsN3fhd\nBjFAuCHPqNUueOURWKSzi7m0UbwLjY1LC0gQWXa+WSuASmIQL5PcH1ygKg5J\nUvce8vE5O1eV+i9FVXXnJIBIvyI5gLhGV3sMg9PRXci17ojAEAI5y2OWHBvf\naIsGat37wi/auGFEy47YKlecol3DnycfEy/tbh1qUr0SmgLf03iywnhMbkrD\nIGow8Wi9iiJZ/fgra8xClQR1EuEgKjZptjj36y9+6c1dP93PRx5/vonoeUgy\nAXNF\r\n=e2oD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE5y+Uyd7/4E0QsX5DzGgn8zqRq59uDkORd4NhOjefUQAiB8TSHEUTCtF2Tx9KcUdPb1TrWTx06yDlbeKSYRLVPFHQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.2-next-1603895970-aaf802be.0_1603896093593_0.4926237944454528"},"_hasShrinkwrap":false},"2.26.2-next-1603897208-58b02ffe.0":{"name":"@xdn/core","version":"2.26.2-next-1603897208-58b02ffe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.2-next-1603897208-58b02ffe.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NC8lQ3QEaeNZ7AJQm+wU8V6HXEHU6+8lyXCApOC3bI2q48IChU2uhWEZ0yuUbn9Ut4CdkQaa+aqHxa3DzRfRtg==","shasum":"fe06b16220bd9ca99663e5eda6c128b8305843ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.2-next-1603897208-58b02ffe.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmYfmCRA9TVsSAnZWagAARrQP/RFfgKu3po1kEYkZAEP3\nw1NzPfdstqLJze2ruWSUFlOuJxMao+85ZUUkN1ByPadGCu7yEVETvbge92Um\nvg1RcGuVyTPQuDD8G/H9RFeSZkeJ+VqmYiTmPMk2OSJ/6suYC/b1s1FTM3Ag\nJALqX02SAUEpPCRs9Usilyr9AxDNOXjvciD1oNz/jco/UYVNVy1rAJn2dgev\nF35WoKGlQPiG0CohosbtNpE9uhQQ1lIiTmKeKOyASBaurAGFb4PVaYHg+CqR\nNO70lcPyZMAqn5g1Wi0L+ssVDsBh8nBj9zOu/sOxGp9dZPr9I7uFQGfcbaNE\nbCk0KaeKSUQVZMhvd05ISd2qJt4MFHEQSsnQV9iVC4N+/CpUpWtITp8GUVWu\nLp2kZqg863YJOBX9TCYJQ07aIo4X5+4v7LUhgmpMzvU8xseQgZ+cWsKkl6kJ\nfwhKmpiMYq838g22emn4sW/frM19SrAppLipwhi7Mx0aZ8Rz7WQkT+lXZRG+\nl9FMljl+iVF+Zsd0xkC7grn3F/fKNAVlkLfLw4z+zYQViMqXURepyr792qoT\n3j5yv3Qfsn337KhY90Av4wrcHIPaoHQv/9LNLCbanA3K1nggakCJk5w1Sn49\nbU3eDK+CaLVlgQBO+Vrmp4T7zyXDE5pxRAg1v7MhsRV+XkU/nIKVMer2RfWB\nr8sl\r\n=xqPG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBjxw+Dua5APXAISo0ZIyHrF4L3QGLufac+cVTW/VHM0AiBRweRGyDN884t5+Le2AoH4dXsXr//viWpXBfUUrdrlZg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.2-next-1603897208-58b02ffe.0_1603897317593_0.649604246636142"},"_hasShrinkwrap":false},"2.26.3-next-1603897870-f24a5990.0":{"name":"@xdn/core","version":"2.26.3-next-1603897870-f24a5990.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.3-next-1603897870-f24a5990.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jSDZic2g8owP/gKPvA9Y5Ky+uPafeGqPc4QboQ8gWrVj68blc5JwoR0Pb4IiEindm83ErPX2D2gaSVJdnnfZjw==","shasum":"c44f8c573be5a9d0bb08cb744897f612ef362a25","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.3-next-1603897870-f24a5990.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmYqNCRA9TVsSAnZWagAAkXMP/0B03MuZjBrUnCgJUlK7\nMlecFOVesr88ycPluTvgx11neaeJJfdkbZorR7lYXL6ES3pKxxu1eqQ5iuLA\n/1I+m//KENC/WHx3BfqGh5iFGe5dbTYXo1dE+GQLcw7+RWjS5SI0kDA+1a9z\nZSSPBjYfPto34zuqvjyOTDc5MmedncbjI6ReFwAl3msUBQmmpgeob8WIblR+\nvdknrfAYMqAfa5I+N8ZnyQTK9MQMF4vi+VHkFcC9AGLNljg+j9zs/4nkdIgN\ndck48v3waGztn0bhPhUyTAUQuuDCABO5kHtqeJwQvU1PGwmFN67N5tkzq8DT\nDKp8d1A4TPq5PdHPZhKaSu2dmjtCDpKCxSi6M5HhNey1yb7vHnYXcsjM4dYQ\nRbPRCXCVTjHqAQSSLbu4cS5b/rNa9uFvGLCSe6vuNb4eQJhnapeZdIA7mrZe\nYn1U+UNW7L1dzilWUhVcZ8gyoNq56Wxze1p5kmujvhuk1ivg+a8ypdGhcexs\nlPhJ/u6N7b2TDhNs2iMe9YpirP3jSYyU0NeqV2Cqi74w5h75G6tscvdoq/tn\n0MXZTen4gWoNdVf2ctFU92BZbMdHw/WAY+NXbZWociGyMP7m+h1jQlWofqiM\n35uWqNxz6aWtQuZlID/Tz2a2xPz4D3/5Xy7ILXf2ad96+AfNIBEMDHoLFkVc\nqGH+\r\n=IVV8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAozW8cq5SVGSayuGo2Ywy0t8Gb8JzD67Wu9EA5fUjAVAiADqmWozVIHY9b7PV4Wvy7hPo5XKAPk71Vr5Ozs8CeHjw=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.3-next-1603897870-f24a5990.0_1603897996264_0.5285421231788523"},"_hasShrinkwrap":false},"2.26.2":{"name":"@xdn/core","version":"2.26.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.2","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qqtuOLmopT5OfftcmxPhuudtWzSIiPt2mOVnwqBKqdR+yOG+gieusbSiGy3KKX64DNKUOQUvEkxnVe7+7hg9jA==","shasum":"030c96b4b2f3fcca542a31f8a80790744854524f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.2.tgz","fileCount":171,"unpackedSize":625265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmYuQCRA9TVsSAnZWagAAZqIQAKQhD4RZpDSJEdJMzyjM\npqF8OA5+C13Be5NXUoYmcsxMJ0lJLt+xSNuXo7hFiOek8mYjuImnAP7Dl3sW\n6MMooPnj269yBTpu4vDbKgnnZN9Iz3R/6yag4Ljs6F16Y2sb64ucgqGIzAJi\ndvyWbKumD3UyvAOgSf3FIBq5Ws5BNVUhQZ1khLz+2gq9YjzcoGDULKm8CDXs\n3xj98RBOm4taVn05XflgxcnCpcxw8UzUD1O9Sn89txcMT6LLuyypJaCr67UC\nTrnM5tXVIf4LzOeTscLubXvV/Z3iLcyW6PA6ief6BNBIpP3jTbf7m2M80Oci\nQEzr+Kg1pwSEU51hQaiE2uR5JdMI21ZgzzmHWxsw9jrnC1B1xdbaFi48nc9o\nFhe2zBwYXgkZhVbRGsK9l99Hq851otIvLmwIPiev17SieK/5s4TQW3HI+sG0\nDYMkSqPUU50VmrWwSgiarZESmVJdvgxtSXJJANN7wrgDtNvQnYkx76q6v+Iz\nkzE7waOsDYgCOROGCPdF20X5BpjKPPBFIPHG+g7zhCLknTVM/IuZXznUMg5T\nNOol6nziuq6w3X42fd14Uym6rVcqpNuRUenvsYyxUPzqTXcp/5j8r4JGy6Z6\n7z5psaY8+rg9DrSbVfdsunRBj1WAO9ZXlAH26tnFVnWRYNjwDBNsCm/n4SSP\nutKN\r\n=pKgV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnPDHwT9q3JjCB4WJR+W7FIyXR0HJ4dV1eOcrnJvkNjgIhAJhTfc4EQTobwIu/mCdi77ncJQyxSfZ3Am5PdyNp/j/O"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.2_1603898255396_0.08029969245940416"},"_hasShrinkwrap":false},"2.26.3-next-1603898958-660bed6d.0":{"name":"@xdn/core","version":"2.26.3-next-1603898958-660bed6d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.3-next-1603898958-660bed6d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XCi3nbAos+J58WdCVNyxwwHdF8wChq8Zucqt0jLwmEy+eV4H7J0MXvsfqNwSUt9D2ye8LaFPpfkT9QsNTRFjuA==","shasum":"89f1f1fedc9d1be91d1cb3c9d5909fc10ea2eef9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.3-next-1603898958-660bed6d.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmY69CRA9TVsSAnZWagAABdQP/3Pe2FB+b4XGhXPBuGQP\nHdeEpRkm1dYMzajww+8vEcnxYomvmkAx9gGYVAtg2B39hbMypQGtS8jQSEVz\ni7aJY28da78pOW//+EHiYU+3S+gF7bR+XgnNqp8rDiIty5UY/LtNYV5i1gUb\nSpklulJPnensDdBMb7J7I1IIeBFALgY5ZoWALfhNzTgNUs7OAP9JG1ndC2Kw\n/AE5i9Bb/M+e78iBSDTC1RoOcTbf90MNdQ7maXRhe8sYBOVHze8u25s8Ipfm\n3pEsE5USu6H4B/hltfwamBU55KpT9zxWUomOuZDu4WnARUsUlchcyzcN5iWK\n7TTrUgo5xr2RmkSC5zj6qeI8XoIH/l7X5ESZVOXTwo0TUhg/9BeldaPCdwQl\nrtwTD6cMTXxM5l+zV9VjEP8y6ayTg2pQHPztM7/SKnc13d3K7sT+afG2q0Js\n8GNaFQDaWxGfnEcsPzUGfTXeGqxYJrqFilFEZz//xdxLbcTESfCEtl7JQGMU\nl3uroCZXVhKIzIrFvT1H7xJ95Z+ZrMs+fyDuGq+/rFqtw2SrVKMjLab+kvbo\nJX/LeMkPpvLzjZKuWKRaGB/62Ew7hCiCNxAc4Rarf1Kvlr1XVYFuGpKJ3CA/\nYld8dFytZaMT+krUgt2SRF2Vx18JlRxI5oMfuYPtfyEYVNlNn+BIPxv7zFbz\nSCiZ\r\n=54Vc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDYeiTy2uo8D1FxmX3ahYAzEKoUTDN4+UBlLGbAsBjAZAiBUaXkXaz08k9e16dVcjHHaI/jxghJOKTsobqJ0ZCsr8Q=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.3-next-1603898958-660bed6d.0_1603899069056_0.025721369362846414"},"_hasShrinkwrap":false},"2.26.4-next-1603899243-78634374.0":{"name":"@xdn/core","version":"2.26.4-next-1603899243-78634374.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603899243-78634374.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-HqEkiD8sk4uLGKOkV0tFTFfq0JZMU10UuK/l59EB3uAdjuOavwj64BKMsw5Th5Vb8c3GakCbzfFc7oRMwc9ejw==","shasum":"3374865e90ff22c741a7127ecae5422f3063f8fe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603899243-78634374.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmY/jCRA9TVsSAnZWagAA/a8P/A55WAXxQEZYoGH0ZWDM\n4V5tgPU2iRV+5oSfcwp3ojLvqtqVvZBCX79R3CIqILuaqCdNJmoRO2l29fU7\nbPj6oLaGnti0/ka2aQ9Geky/ZLuTtMMyGPXzy3tjW2EO8c8U/0VX1ROwGjxV\nLMb3PeP65NG9YjJXZHZnjLfJuGmc+lS6aI8SaZJSPQcF9pISpdDxhzIW4CTU\nWYX5nl8/zO3NY6aq1K0vWaD2c/gVSYrZ2Z6y+edwa2/NoSf3pWMt0LL9SgWW\nlsUUorSKQ3GPDhp8albB4V711VR4VtfF4yNrhPHv1qIqes3GT6StUSqJC83y\n8lhWLE4AQC/7UUflBkslSQh3eWC1GQ9yn6ur9shhTjc9mQI9Moc0AxiyqmMf\nsrWOH8w8ZQSNdseiddLpWn2FFHQ0NuV0Ko0J/qyVaKCHX/C/cWfJwbl4vyFk\nx4/FBFGShOmT9zpkp+7L899hqHUCntiWv5o1R4L71j7HW+tRDyCTCJuaYC/6\nnukhHv+CJtIxJuQOGcZIoVGuLnA6ZByqNjpN8WoKg2O5fD4RPD8jfP+htwQc\ngOEu+n35qLzgP9UHqzr5av+bMvVHkdBQrlcUKvrjiajuOMQ08NiL8QXXWU4r\nz1zXH3IOaThQzI64/emfCo7p6yC9LrMb6EI4aDW8caQzbrujZVVx3SOSn1Xm\nASYC\r\n=Ra88\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCi5QuRZsIwiMKg/ED3y6spqS9NCbyXTuQhmQB64X0KzAIgULa95rhNn5hvwtB/MMu9Tt2YMiQ+cWnxCaVV2Vwnvd4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603899243-78634374.0_1603899362850_0.5640455092663439"},"_hasShrinkwrap":false},"2.26.4-next-1603907303-78634374.0":{"name":"@xdn/core","version":"2.26.4-next-1603907303-78634374.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603907303-78634374.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-t+437BwmI5yCIRVJX3+r9Xa3EQO4Q807Oge3JKS5lbCHi423v3Q0hH32iSCvGN45PCZbtXj0SYtZFWT6wHU9rg==","shasum":"dbd9e2b8864a3407e4861cea83e3ad7fe386c22f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603907303-78634374.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfma9cCRA9TVsSAnZWagAABvMP/3YKGdq8obSMlSvRhZkE\nJRY+mYwTJrBoU0Q4tYXmK4UhldO/B0D6+yThIrdk/qtPcS66gYgk/kdsBz/n\nh3OomX4Nypss0hLv8Iwtk3mhnsyEd1mONQuoEf8w8yuUtTk9J4TizA6yd/K8\nlFM9EHf1AzX+D+3Y/NyPahbx7rDin7LG/6MupswQgKWPQgUVvTlH3TfU05go\njEBzpF28LCGthj/3CQDqKnwoSD5dHF8Boe0uHrLCoVP5W6Y/27a+whSlA5p2\nwBuk5atnLAhV+nlPwfTrQMq+3HobINNccQqURDsbfFVLZyE2cDKMkwTLDdso\n6ZTgE0FPwjVLzH0RNE0hKcnVt8oYM6u/D+BHlw+ahkWAPZIN6shXi15uwfoS\nQs8mPQHwIIS63rjQWMjYMbzBK2tlZTnhm01zp+EtPk0Wl6XcRc9MBKTwohyt\nru40/yVw1oyhuf3CC3ucmbapnBQtrtZ6GL+2kZg6cmjUmh6v/xFkyVPkMNwh\nwwRNbF5ESxSqJilRTKVquR4Tke9jxUjtDO1PWz+lKQB4Z1XhtWp+ynrPKEyM\nL2MfDD5TKuP2CI6oDVwv7hTI6tWDrtEy3SKQvKCZOJTpoLNvZIaW4zhzT/rB\ntQMAAmRktIBhBeE1Fbmj7xcs33F8u40FP/lAht/zuhljTTAen8bnEohi/BTQ\nGUIB\r\n=jnZb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0Imj40Y1ZqzC+ALj8eVuLob8mNyrlkqCGsEMBB0wrQgIgX/SlaoTHidWMLElJJgJO0kBnExvyxHyJsTPGy1Rsb58="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603907303-78634374.0_1603907420100_0.0473441478703891"},"_hasShrinkwrap":false},"2.26.3":{"name":"@xdn/core","version":"2.26.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.3","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XYFEmKj8oUUfSZnvDM6dAjHRzYRh3ERxmlxZDsB2XChgIyEZerEYXsWaHaXvpOe91vZeV+bQDC+YpaAkhh82pA==","shasum":"ba737ce3b770a1868ff2ea6716e577dcb57f86e2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.3.tgz","fileCount":171,"unpackedSize":625265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmbp1CRA9TVsSAnZWagAAqjEP/0CPlD07wRQiEIeb6DvF\n1mvLWKn0m/ybbCF3IkMMO+6r4mYMGMFOTm4p98xOUcy9jAvvOT2JfSIlfgcR\nEcRttKJmQTAp075rT87bdkosgWCB/ydg8Em+hz/aiZrM9z8H59RRfDpk5QJ2\nxZ6eOG3flYXTSWvDfMywu/81yQNNtA1HzQM+0Nk1LQliTfMDa+plAxxX596i\nIBQ6ssWHEs9AC+Dw2d4YNoC0gRvbggrPTkWU+QIgQdfF4DA7nILvKG+FmE+I\niI6RZYBwCprcRmnDeIiC8uObyvYDw30L6LHNeynoFo7QTGKvXtpXbZXML56n\nhhdpRS3gehGbRCykrXjMfIA0r8EFIiwdfuCE5gjLYGRPTgY/DZ/V6D6Kk98Q\n/gjcW4ysZSvU4T8Ir0btGrvufOIfjXdrecHTB+V0anNO9adkfjb2WJNm8PnT\nrI67MndWBwdy0ClRm5K2u9U66q3AoV7P+c3aRBqnpu8X0kvYGlgc0ym3a6dB\nUrYm5vNPdPdx+6/MEb5hwWiT4bhaJ/69xh0ZEcZZeu5rMpt0NfnaUVnEfulO\nhZFqsNOr0km8FI/vD9/ac03e8NFad+iw1ybRANyuBypBIMQEi8p3UzPI3X5s\nOZ561Wusb/wSmlT/tU2karv6koMw/z1GVCGKElpkj36sbVH1oHp+uEy7somX\nNssB\r\n=9+td\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCv2VI/7fBRa1GBdUvfROCK87OhOvw8sMPApc5lOMKqBwIhAMb5m9RQbSbRr4B9OrvOxpsiwHpZrIPYp2NL/p67z53a"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.3_1603910260666_0.09330883522697975"},"_hasShrinkwrap":false},"2.26.4-next-1603944429-a071b41c.0":{"name":"@xdn/core","version":"2.26.4-next-1603944429-a071b41c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603944429-a071b41c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-h4cqS3+BbEz+ZCH6EJ22DE5Rsiq01WVjN39AMI94SnhAuwft2NrSVOWnZYxYTaAevMzyEhRGH7Cko5C9Bwe4WQ==","shasum":"c1c3ad94e316322290bedd1bc623afde706725b6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603944429-a071b41c.0.tgz","fileCount":171,"unpackedSize":627721,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmkBgCRA9TVsSAnZWagAA2nYP/1kGwIpKqaYgwT/p+2Tc\nNSPNsySgmi2NwBP8MJ4vr2nbaEyiFoqsiVoynR7mQwWFPaBexW38VjXTvrxR\n2MYX/4470dSsLW+Oeurx+6tia4xvDO3qI2dLXmWTocvUYdzMlul0sUwURWJq\nDpD4ZQlgs3iEkz64X+wgXgbv7o01fEoYCCxaLCgBbBnKpASPjwbiQk9n1txI\nKhAOre5Vqv/DLF51JVS7WKvPFjdadSK2dIaFYPNHGh/NJ1anmt3nLhhZQjD0\naqtVqO3mZ9CxMNyKOmpi7BEJeGiUSJZbrOw3uufkxjP05iwd6qDYgSBEBpkG\nuSCC2PuvgRcquXLc86MwArCzy2A19//Um8eYs+FVMVV9QT2vmUXykFs84LLP\nfwj0brx/BuFl8je40Bl3xf1suI5UHr3SFnYlT9aSlBZjs+Qr4Y264+/59Ywf\nO32dI6KSU3Mx+A7CfBI5mx4FwKzKQdnMqV0lFlZopaCUYsO0leDmX8T4vv6b\n53haZcywKRLKSH67WaK7MzuZQsOh7q6ndXZMLOZY61lNpeyKTQfyXmNerjS7\ncKo1GVFppAlMk4wyjNXLyUIVGW1qDxswKxB6sTAyVE7cmTCkQ+E7QA+hy59E\nxXpDNg4c8OIIUreknW702/IPT/V90oTeKBbe0rf53fvvFuTu8xLfbQbK8G5Y\nGDVE\r\n=zOjR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCWt/+PGmGMKDfiNfd22aAby7Uf9nOgIBE/MIgfM/LKAIgCIkcV+JoWj/y0S8QnUDfzd8JUHCkzsosvoKmlORaX+U="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603944429-a071b41c.0_1603944543926_0.875836835922712"},"_hasShrinkwrap":false},"2.26.4-next-1603971763-ce47b194.0":{"name":"@xdn/core","version":"2.26.4-next-1603971763-ce47b194.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603971763-ce47b194.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tr/WjzJP9qYlopWbRLlKZ9ysYmDjnKudir01ysF30AbPTw+Hmri5PSiDzSNQjvAEpPVsiXgRAUL8+HvtSZeMpg==","shasum":"0fee3620eb58ec8246d3d2f4a09187813160ede3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603971763-ce47b194.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmqs1CRA9TVsSAnZWagAAiKIP/3gr6vA6hxP1MrQTryzm\nr3qBpfuxl/9F+eZN9Tn0tdq/votvODSq0Uf2eZcyBc8c04FSrMXDR1UeePDr\nQHjlI+IG2WVZJy2MOTz+nYps6vVnPXdIC69V7f3XedCXPhxmghEyyCG5a0Ke\nZQEDpR71VPOnQFoxq5zdAqmsEaosemr7AD58VksFy5dZ5Z3z+YmlzOzbcT2H\nZion336JTFufWGs3aSlGPj3C4R6Eu9e81bJKcRvM4RRta2oJcJalnKgCW4NF\nl1OeDbzkl/Spnm4tYi6koSbqUx9MUMk0nJx505jXf/igZNnOT119ZxbNPlCs\nOW+EpF53c/5p1oIK9v1Cb+ojFKpcfy99dVjVjrY9VKkGjdpv2Ov99nHjnJmE\nczEnNAbpudCC+AX35pNDyOubBiwqVTyq2H/6lq580VSzNqIE4VTLljsBgbbq\nQZzLfp6H3pc/9C3zjauem2WWPmzRZtNJfHrmHteLpTGBPOKTLQAyajPHQU7w\nzVTPU3uuAPN8gedg4OzguAxJRPV5Vhy2ZZnhc5PHqwv20Yka4hPh/T37L8Sm\n1qNAVOIpSsInkfx9Eoha08FFGue2vKMNZOXnukSz6pjM1dh66PfPFLrH4Eea\nyXG32EkrSD5fO7xshptjgXhylP4kPNfBLkU7jBWqwxOo15WS818GaM+BmzJn\n/z98\r\n=5Yen\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIE8DPU3x65Gu9mUpzjf+190AuAXndr/UOmV/M8+dNoQIgb/+Vv7a2Kfl93pzGhBP8yO4cDxvN181X1zuQiGyXNoA="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603971763-ce47b194.0_1603971892956_0.5819220248617254"},"_hasShrinkwrap":false},"2.26.4-next-1603979624-a62581e1.0":{"name":"@xdn/core","version":"2.26.4-next-1603979624-a62581e1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603979624-a62581e1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xwU+bldbvtsizszKlgtaqImDNaJ9EWHkgEXfxKj6jnd5GWgd+g0Lf6UDGtlGOhdu+9892JlDgkX4LTsaqN4syw==","shasum":"97f11bef976058972974b417d4972d513c1d9c17","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603979624-a62581e1.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmsnPCRA9TVsSAnZWagAA3lcP/3cVMc+J3HHzaKRTX3CB\n0u/m2ZK85kmuJ/dEs7yvUtQNZ+4OmqfDZNYOlRY+bSh/dLcihjUNxQ6pSE7V\nDvA8l/bR80BZl7hILHC0kXw5NIB/UJvzffgb/FN73J5LbrAyKiM8Id1/41A3\nzeoAWiaj3FPYk3QB4NI/XyfvtJJXV56hG5xnLkaPXi7THjhoqVoCIx3wiO2w\nGhB2AeGR0SiMhIKRReJ6eSRb/nj7zfX12HSIYGlcU556tktyU1+Kz9LNPSPR\nFKr2owU48rw2OxSmzQeclg6pGgZ3UDUCKzLCM5pw5pymCO6/oJYu4+wg6LKM\n4pNSuF7aUU003puiI1vC7cJdwEfREbk3+B+BzxAsIoLdSjkN5ci8/Tm1Y8/j\nBuHM4j57Veo8GEWLLkwphh2Q5msMbEBzixPalZfbyQQuWM9ua5NePhJ434QI\nc+DZcS/tDerWHnOB0XYWYXrt5S7o8zCtUQSssXLAdKzsn5np5dwGSQaA2xZK\nUDqPJ0gorZLOjMfrEArhN5jADJwYi+SsoSBUTi4DoThw2fL3QDBBz4o/Bpcr\nOUU4evNRTtFKGQnLKbSAZ1BNc0JoMEx3A49cLpVr6suJ75fYbsDvev3iYs4j\n0Qkgv0xqxQ1TMYejPBExeOWg/2XveyekZgxBe6zNho57oMPG81t9dXB0Gb3B\nLD61\r\n=4/5o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHhM8KfPnhXR7aiRHLUNfZ1ihHGR5CvOF/7s9r5DXBlfAiAW8V8jS8QIpf8qG/EEmB1ROnk+HSErmexXatJI1uBeMA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603979624-a62581e1.0_1603979727385_0.10079615421039279"},"_hasShrinkwrap":false},"2.26.4-next-1603980399-1ae329b4.0":{"name":"@xdn/core","version":"2.26.4-next-1603980399-1ae329b4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603980399-1ae329b4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-thSrjllmtdgfPMRELPnOWmE/8+8JnaD+uwdtnFXeC1qIroq80aZZ/Ukah94p4pqDFREoiPnWWAJeqLwl+BFOrQ==","shasum":"02d64736315069600f980fcd108f67712cbe7024","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603980399-1ae329b4.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmszqCRA9TVsSAnZWagAA11sP/0QT9qR1JMMqu5Qy/CkW\nAYA1W9UdLDODjMEeOBBNzaPevf3u2Rp/KgaBuakHi+0b88NmDQBWzmKpc9FQ\nsCkAToxVwIio7Io/LPupm25iIANYEUYgjoMDTKyEmrAY99U7/eNaTKhj7JVV\n5wjGjLvpsIlJTPC7C1qOW/mchIWYG38FU0NzOaCu4LpVdcuTWlHGJV3ZFrxt\npZHlmZjfWMobsItIOFlO5lDrLYeIWpbzG6aKqUIKRNbU+qhyCik4IYqGv3lS\nmLAT0EunUbFwT5UQZqArwVayE+BRitM9x6hhr2RerfFDCgEEWb7jjDjyof9F\nxxTJNNPkWfr2zJZQwbG5FNc7JrXT5xloRc8t46BMqk/VeR9c3bHbsW3qTy3P\nkEKo5E/+jnz7A9Euqst2yBIcDCHmOEqaOPVJsTBcvzN1baaqFE4UoMxBRm0a\nmKlTQN3m6Xzbifez0vNCN027awZK66GYxkw4APSdlQb6ecDEoT6xzpgGmtU1\niZVZW/ZhrBBWSwTQ7luYxxFk5oYRxPS2mjHO43OQ31qwnNyc88Q3canvD37P\nnau7E770MRSZjXmrXn3YsoVVbSI4eBzTVN85BNSZ5m0jodsISpcOOrklnKzu\nNH4u8tlZsERCGaT0hocXn+mou0fSJhcep6Lmn4pN4A9dQCcn9BUyz3h2P8Vp\nrjbh\r\n=uQKN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIARiFYz2eTjlUs/ZirJYxLHJlVcjbgglCjRDSuM2YZtSAiAp+7QqIsf+S9slI+SLv/Vbr19RzDYxPJgFJyqg5kGPcQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603980399-1ae329b4.0_1603980521987_0.1083789935807824"},"_hasShrinkwrap":false},"2.26.4-next-1603980601-133e2906.0":{"name":"@xdn/core","version":"2.26.4-next-1603980601-133e2906.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603980601-133e2906.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-EQq7jhlUc+kFe5whIDazbiBE2dtUUwOsd5XyRrONR6mK0qfoJe4IS2cK6Az2+rOiEFz75IwVi9cPHga/Hi+7mA==","shasum":"6d3a81afd3b89ed4bd69d01bec27da6ba2e34522","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603980601-133e2906.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfms24CRA9TVsSAnZWagAAO0EP/ApJNiZJ5h3yGhwuwgaj\nVBJrsb6ldQo1walt1rT258TzzieDw3YfesoelOZghYuwBsrf4Ca63IJYcMut\nS4lsXRtdHjkWzO1nUo8JfSLcaSt62Q+tjecfNvwRoPeAup5edsekVSUmjR0M\nsLT3fq+Dw/8upEw83lAeNbaTSDLmLMKpIKBCllIFfRRVXwDLkYu8nLFI0wx1\nib0YAU0X0aL9aDlc2qfuDMU+hv4/rWu2a2Q9PQhD5MngIvxCvKyYmA/S3inu\nyT4yxeARUqXR1fzcnTLy1t8LYhkiy4ASusyMrZ++G7xMWrFFcjfFLiAz414d\n24nMIgZ/TH0jM8j8rkoZ6QgOcPtw0kuizRFVe/cCcpnhOlgBnvfMW5yGGFr5\nsvnrt0HMIOXWQLjxh+dAX6hm1JsLkvuDnXoUshk+6U+/qkRbgepiDYHs82g4\nxW8eUfZ4GyydDmylwUAREQ0TjlQj7xOsp7gVyiSpv0mYgzqqDOQRwjrxISk+\nEBLTW8n7VZWRiLG+ri+MJn4O1kFf4C9lktdexPSYukWONzUvPWmDRiAxMHsi\n7svBxIVMYg10UHPfOI0kg4H/xMXBKlUzEmYfBdMueiX7H9WNmhbDt6RMKyVU\njP1U33XkaDrshmksJjnwNxHX5x2IwGWNxml3otKZKUm56hROpVnKMryz2wbX\nOIaS\r\n=dsa/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbv2tViMXZWAlCmXidezJbDoWsdeUgWaMHIQqdmGAL7AIhAPDkvci2o0l9JBZHRDYrEgMFdXgjkmlx5EouCmE2OtCp"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603980601-133e2906.0_1603980727654_0.35004651482897176"},"_hasShrinkwrap":false},"2.26.4-next-1603981179-36aa76eb.0":{"name":"@xdn/core","version":"2.26.4-next-1603981179-36aa76eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603981179-36aa76eb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lxljBIIYggNiq2vsST1VdOk3zIWrj7mDmuxj3M2tC55E1DQa7fqnigGHd208opXFkDfTM9O7U4qnSygAxKYSYA==","shasum":"259b2d0ddeb58e1edb6d5435876171cbeeece4f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603981179-36aa76eb.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfms/yCRA9TVsSAnZWagAAO5QQAIfgiOFyfjQnruHakmU1\niQvtNSAnHHHo+HSgftEQaraehHl6Z7WiEfynh5DHtiswz58bRpy1hWgK016G\njR1ZDGKIUXBlGWZN89VWURYNx7WDTBF5Xv3MKFcnlw37nSikykctLasN0Lbp\nkIQhFQWUagWYqz9+gZj0m3uOnzTZFiy67KIg464k2Gc0ZynjO2yL34tP8OCS\nfHdDNMJHcEslZ9/o4InhxL/exawEwC5SnrzBPwN/jM7vrQQvStci7tb9MbBw\n3MCZUMbqjatBsnBZvVERc8K6BOapnrJsCBH/hUx/uQI7y7/tVduSIpUI4Oks\nyQkWPKEESohrrAF0ULUZLhMerfHK848wn5Phpr733BgobBXv5+oQWoVApnGt\n+d2naLrB2BS80bWg/7kjJFYwghx5PRgF9MuRx+WgksKzyq4dB6liVUj7WFoI\ngHFmCzpGT2RrU8SrovfFvAXr/15dqfuBN1logHPmfyo2B0o890d1c9cjyA9Q\nxRTlHikYLyqA+RxfS/yLHa+j77Mwx2olmXCrVi1X2+rtaraPP64B8+93jVv2\naNRYTZo3mX031K4NvPTURUb9OW9TtvKEHhshi85Z1QPclMG5YQK+Vm3CDaFi\nNJUiczdhn83CTZvNfglGqk9K7d919jQi/0WGNydrzjLvyb1U5daDoPXfth2m\nlMUZ\r\n=+hgb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEO6zxnJjZWEE11oMcMggSwHhkZF1OwCRSqh2pgUmaEGAiEAtyCLChwpnvUzOT42A7tVqcEQtUf1wxWNMgg0fpKgCwg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603981179-36aa76eb.0_1603981298033_0.5039442526681632"},"_hasShrinkwrap":false},"2.26.4-next-1603982372-8a2d5a78.0":{"name":"@xdn/core","version":"2.26.4-next-1603982372-8a2d5a78.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603982372-8a2d5a78.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-G5hQSiqZRo9ASTwdbmU/2zGHrs0qhHh+ahFo3DW9eS0uHYC8hkDU10I53IzpVH/gZC9n0qpQCfLdNpS3iLPGEw==","shasum":"c4fd2acd29cfe012b20abebddf1a32c059d314c0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603982372-8a2d5a78.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmtSQCRA9TVsSAnZWagAAQLsP/3Wfo1aLIkKrZMvEHXBV\nI4HBMccgN24Ny/FaJ1XG2ygLbx3mQFwKE4g6CrdkVnZMknxeSPlVG9lIjXOE\nnmta7D+ZADMT+dNXCFIZLtRvNxGAv0oe44J2hs2rYH0NH7m3jQiiRlLh6s7r\nE9+5Hmm8aX0JbkikTf9Rhwj/pUQ8BnpTetd5QQW2uxVw8kO6qNn0FUS+1S2r\n29btDiWqEXEZ7NLoYGwpQLq/vQuCk6rcMEtHQi/o/Bzo9+15XJ7vXCjjS2wN\ngGpw2TnBAHh9OZXhVkcyTObCWF+ZQctd+Bnoug498UN6lySxUY7UqEt18uw0\nhuGpL8DUX3XsdZlJHXxtToawpOF8SLCOJuKMZu4TMZm6m0qRH5V10rDQ+Jyu\nUscllECBsVIXViBZsiZ09zmEph7FzilF10I5d6VMrPmabLS/TPmJ4uWUO2zI\npWQNZWzeLyoMkv039mRYJIrhGg2JaEleKNmUfYzY+u/Rqu+JT34ARQRpfNKM\njKckpKoyYpws1JUNBNOwNSlK3TiiBTlh8/psgVV+MT0v9t6uzTPsq9zo8DW6\ntcVngsXz+a/y0Sk/QsXsqeqfyW8DC2oTO1sekb1tTYDSILD69m7gmteNkBzI\nRD93t9ImaUYyVYf30kXOiTgAJYjCCuo/ljBqf0KVvYgq9S/rJLQ7e2OUJbq7\n7reE\r\n=PVha\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBkA9CdMhLKzr+n3mh26fDwQvX/Jh26JZ2zSdiTVkYjiAiAqPt7EximCKumoHPzpDWxGoaKR1F/vw1l/bWhtF7kapg=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603982372-8a2d5a78.0_1603982480041_0.01266489196826992"},"_hasShrinkwrap":false},"2.26.4-next-1603982541-36aa76eb.0":{"name":"@xdn/core","version":"2.26.4-next-1603982541-36aa76eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603982541-36aa76eb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xzsx4e+MACC5Ksb8xTkm9Rk5JqAaNWlw8SRkxqfC4NkyRcPaq3d/CzmD65FUK3yPLDhNRtyzmLojF5G3VtsQ9Q==","shasum":"4499b75a6c29a3eaf0ebeb37f1293aeb78204000","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603982541-36aa76eb.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmtVUCRA9TVsSAnZWagAAzogP/i0luCEdo1M2Pq6tl2vH\nO+DwDoQReLUq+4GM3zWHEC7wxKPXkmgsxIWqQguYYFkFiWxFKCk47gklGria\ngi9kKwMUY556JPaLeF8fHJqCuZvtMatrVbFX68CmDW7f1Qz2HhG9NCJQWQT/\nu3lXgMu/g8DISBnVUJ7GGgrpM31axKFooacFWhC46tGINUnSLfHR94zZyaF4\nJlRt9eGQ39v7lEhk0ItuRhFwppL5HbQM+DypLEjLDqQqKmbGvWTF9kgikP93\nC6yTE9Le+KZTbuJTP/01OfRZxDEoWiXbTASVs2SUtCX/2y4wyEVcVP50x+Jl\nEIsa2rVfJ0u33ySoAZ18WRvQYmicZ3EH9touDYOLgkwVX0y2pFroEC2DaPrw\nAg4kRNQ29wQsgyw9hvWo0NAi1valQlDuqp0QeplLr5tjYKv0KHqMtY/UNJNM\ngevBacUK8UQrBecfleYEWvMdZtOJaViYeUD72zIG/cYpwPx40+CEcWmvlbGE\nZ6mQz6E5/+1frf0okd/xMM4IwFyS+4cwabQi5q0iIyV6z2wzk0aD3VRWHcH9\ntq+Fh8Ojqo5TGlCeUZ+giP0uGegoTAJ29UCHoxpcP0+AEk1hrqeq3BeAcqwr\nf+SnhQaQbR3vkSd30P8Agk1H0D2CK+9SBajvU3C2rBb6jLSJcVb+77UBPPwy\n4gMa\r\n=ls46\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIChFrPga3aDiKIJN47TZrU99GEO5IaloQOseqrOLHy9RAiBTHf4omhqe0tqRIUkb+eNHRtDj0vp2jxObnGpNsA768w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603982541-36aa76eb.0_1603982675901_0.5270269087423138"},"_hasShrinkwrap":false},"2.26.4-next-1603984411-c2aad9d4.0":{"name":"@xdn/core","version":"2.26.4-next-1603984411-c2aad9d4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603984411-c2aad9d4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lqfynl3pdOgA24Efk70Bhg+gQWWz81SnJPpPu4wNi5BU2rYOZBwfhTC7WapzQO5/bKEfd9H/+llvYkirGfWIWw==","shasum":"93ca7c930895cec2b62abcccb4470a7d5f8e6a50","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603984411-c2aad9d4.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmtybCRA9TVsSAnZWagAAjssP/264Vqdy0SeThaHt+9k7\n6zYGThk+8Yg0RM1HFFK7batmtKPkZoReF8EDRsAtXIljYZ85gK42PbnrLsT/\np2lfljYGqHycGpBRlo9RQD0K+LY+6+p2vqHcKX5dehKtcx+uDEl4+c4Z0EfH\nHFRd93iZpvJjQN5DHXC88r+CjYLX1mbbDMXPHGGnjQ+jnrvLs1kfnyuDd4pr\nUFJIwJvBBAySFrxSRgHeFRObKTPy2MzqOV4yNnu/3kdRg6G6PAousrZOtxd/\nogH8+DILwiO4CuniZJZQA+eSXLiMmorpU7mTADa6JVd4ddK6+lf9tDx8F9Q7\nCZiB4lN7tdTtXn8uLfsAq+tRv+Sju2F2UDVYjQhZbOvGIBKW0ALila3lh8ba\ngV2eeG3rFb/UC6/ClXWRiaamnFpCy+wqt+vYbblhQ1aAfdq5UA6O/X2pjveL\nO5Bqjf4nUOUajHv+ZkYIBMABmrUBTz60QJYQ/c3k1nRxlmx4RPS4IpeeaSnv\n5kbP6BN31ww/yHeO2d5QSwDRk6h703gj/bibvX8tCtb+zY9XY/w0HewcRPUs\nCGFrzEAQWCPeN0JCojOuFvur+Guij0sog1nEogjUBEYMHs2/6F/cLr0O808N\nLx0mFdqAE/BPu4H/NxK/nx3DOHmAm57ZiiZh1bJ+6R1e+B7l7j6bnhKl+8De\nT6o5\r\n=g5Gr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDF0gEQGRzU9mfU5EHKxal97cWIRwp+T/oX4895zAkVAIhAOVSffOu9hsPDxm39PAwGtbKiIPKNJg+EOI013BcqNzO"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603984411-c2aad9d4.0_1603984538298_0.7263466286964653"},"_hasShrinkwrap":false},"2.26.4-next-1603986779-56071728.0":{"name":"@xdn/core","version":"2.26.4-next-1603986779-56071728.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603986779-56071728.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Bsis3NMGcE3e3PwPMIQ+GYsL5qcHi7M+y5A01P6MQKfYpAuNSiEkEoyIUACW7iTszAmICMY8xZc1yINta/1cjw==","shasum":"817004269fbc838f465dacca3a974fd5d94063f2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603986779-56071728.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmuXUCRA9TVsSAnZWagAAJ4oP/jMJv5hjMLLl+IfW1Wc/\n2vL35hrR0Jv6x9jvCMqC+VZ6WMJFTKt+cPMLmMrWQDwMYLq8DL4RZXACBiDB\nmj59RI0Kf7h1t41Z4b7TBWM7RgV8i5TRLL/1veGHedmsonA1oxFCVrWsctiG\nsCMWzexTwmfKukh23e++p42G0IMKJJiJnJFAIDJtj+7uDvyiYBZYtgyZcDHM\n3IkwFn1hyQe73KTtDPYi+tiGetcMvuSzWgfhiX5UKEGIQ4OJYFfR+NgZ47ZD\nT5PEWBRJM5hWM3jJL1uDo6XeZoI5K3VkHAK+6gD+iPurE4wWrLAvQEa9kriE\n9uMlH7mKtSXVrqOWSHK6fQKkI/G6hIPQ0ig7OH5bkm8B+GGO5cB5fhYV2WAg\nruWl2k0Zz8dMo3QFCWR6Qwn5HQhjLlN2bfrXxyfh4jYggMIfv6igWzc/swT2\nLMaX8rfLrS9kaP3Ynqq5DythRMAGOViCu9kFZ/Q4YBhfZ8ETF/Vny2vp1llJ\n06QNxY2cZ6KXUvxrmGZJxw9uz2ysGxu4PHXbTnEh9fQQdrhvRS7Gyl8a8Bqe\nMbnMLdM5pZ7pgCQwvmk8U5Ix3skOcNbyNMEXNNJNrtjnp3McgBmIcLdYlPph\nZj2LXHNtPjoaSWhSwGr5IZWP6AfydaiK4S1y7Y0SMNr6f/KiU/vsGzUt5V22\nkUen\r\n=4L+N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBeLqqDIz38TOO6zCo0g9Qwk2dzSKuYNRS86YhB6yq6QIhANrY7bwKv4hZvIfa8d1XDYEWVQTPzxMrsRQddh1thSuO"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603986779-56071728.0_1603986900346_0.44790903124327364"},"_hasShrinkwrap":false},"2.26.4-next-1603987997-acf1fa16.0":{"name":"@xdn/core","version":"2.26.4-next-1603987997-acf1fa16.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603987997-acf1fa16.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kfVE8niI42Rxcflunyzuvf7waWjdKVUCx2EPJEAx6iwANLmX6qitkr8qry1IlB1beVyrhJnfEq6vrPzv4QQnVw==","shasum":"b130e9de660863aaa264a84c00944308601543b5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603987997-acf1fa16.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmuqVCRA9TVsSAnZWagAAxAoP/0wf7oj713zjf71KcW2D\nRzNAcG2bUWTlGncj3OsWJnDKJ3oHwNFR97u3l5cdbf3MnwQejznpg/NjmdyH\n7paIZEjyQtC4wt4atp21gZ8TO6V6FVv6mDXC1Io+VfgZ16zmco9OtfsgU1hl\nXZLH0sRvj0PoDJDgc/DHMvGHueNyMfSJa8YRE7KOb07dbc1l7CGj3k8Pl/zG\nmOiPj42/WEZzVl88Oah19MYqu9F1r/dPJGqttDOYLRqy0K3ABnb+O4GbC6mS\nNVRwqjRzBLMIPcOJJ7+j+02KX9uRBLMdpHLWWI+xYYljT1Ho1cgfV2PMUHN1\n7e1I/SMZlkFtl2+01D2iIhHOIzPnwIQbimzI69DR09ADObq5stAJe+5QMbC+\nc+OaQEL4Wu4PfQIkxAF15tb8k8yCr1xL6nz0yJ5yTKj7EqbNSHmgEKazj8iE\nJ8G2hv3ZY9IR3L578/UG5pepF2kr5Zp3CQ8MU1Jwoq0jVXKAjBtkq8cqQA7U\nhHIr0pujo7mHzwsiW4a6gdgX+08ygVzjXmoxF6a03Kxkkfzh+KGtsGqZL3dD\nVazMaEOaS+UmTLx0nYp1/79rPLQzuuookw3GXeyDPtPSJUlEcij1xPuMaD4K\nGCidW5kCpE9juh3/D+oqRcKSgq9PeWeXyyY69NMTi9w9mO4+l3Zx5mafPHto\ncKpD\r\n=/TEM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICB+p5OZdjPpcBYJv5oxlpgS8l0KaJ3mLF6yxqVMjgLGAiB1WybYvl1EMvKUpoPKDFem7BHiAcy0UtcLcYD26WPO0w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603987997-acf1fa16.0_1603988117302_0.9933663681487657"},"_hasShrinkwrap":false},"2.26.4-next-1603996074-ce47b194.0":{"name":"@xdn/core","version":"2.26.4-next-1603996074-ce47b194.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603996074-ce47b194.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-AYLb63dvNzm++1lllgehdixiTDY4YHbjzsx/05GdiQKWoVZGz36aTZhHPJjEieT9G8IZQqQa0MAhn3KNQD+vBA==","shasum":"cf8a1e9976a4e0fb6a0306233f9638294b88b41b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603996074-ce47b194.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmwokCRA9TVsSAnZWagAAcQMP/2fdtpBA/iQD4TNbBIwG\nO1S3vZuntqR/5SxdX2eNfbR3Nr3VS2EiYVxKFGinhrRv3f7FYTOlK46N0Rt1\n7iGApzgLzaOgWhVe869/2hh65UmB5puAmUcX8+wjITIg11OiCN14u6KsDkRy\n7776/lpoYeDiPJbgQTUnXcLDmDXjztdq0uKzsVHlzBjziUjzvjoCB6BLDwCH\ndBF8j30q43q5qu3IaCOoKoV8Rohufn77WT5XLL6jI+A+RhrossAEB8UY7okI\n0fLCj39i6Vxd1svjjyrVu3K2Lgrvnm67xvqELmtI7Mit620U7NCv5uBRSbYE\nA9eoo7Ed7e4IhdEXmYsKIrOJ6vmGgdlYb4nkx8SSEo9JaE5RmwyHMZ0lMgdA\nrbjNkjb9Y5KRZ7nqpjrwn9nfwufpMkVN61wK10F2I0dZVXshO4n6gHHzWBAy\nzSK8zkHTYBNOeekAhWuDd/za6RtdyAQ3YNz53w3tSjJNddXWqflY6B6rvuq1\n4wwWBtVeSkUmxsxl5DO6CbfiI1OTdGhUZYzSdvH4rwfS/fXq+hgcO8bZwjmH\n4aGlT8Om6WjxwJ16h/XrYg2HjtAEve9W22M6DfB24Z50Wpr3dspxS6JTNpsA\n7Nw5sAiipBnuGL1Tc2X4hVJM+mHd1+u+SLLK8Uppi9yaFdlGQ3j0LpEAETK9\n2/lH\r\n=IHpR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDdk/sM214RW5Wgsh0d4VBkeHmY4ROvAvArNhON8BAnKAiEAmvDfKKnqC+po+UIjWCHwWZ6q0k6QtC4ChCar515Fw3c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603996074-ce47b194.0_1603996195814_0.6553674212225422"},"_hasShrinkwrap":false},"2.26.4-next-1603997705-c6495cff.0":{"name":"@xdn/core","version":"2.26.4-next-1603997705-c6495cff.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603997705-c6495cff.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-DUjJVKQz7u+iN17TmrFMMx1Mgp+pNADGGLmn5TJqcUljlhzXgU9b3aqpcVoMGMEVV8K67sM5fbWW9YhjwkZfpg==","shasum":"6dbd939f36f2cd397e5e40cc031894d8fc80488b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603997705-c6495cff.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmxB8CRA9TVsSAnZWagAAZTgP/3/rMW3SJ8uK3R8i/FhN\nlDUINNYbyi8RC2yzOxgkPIPgaD7pq0W/VBmlTUlGD+DIXN2MXrYHSTp6F4K6\ntp/d6n1F7CmNems7fy34OM8u1UM9BqLIFb7af10GRveyi8b6homxu6nHnx9J\nJz6crlrRCk4XdYtA97r0t0veHVd+H3XRse0jTKpCA7xZeugT7WSCcVUEAk18\nNAIKuljV2k/Gh23SxVeJzzDkXXoha+8aPLJc3QqDrqLd+vhM27luRqrw03br\nyYtPKnZAuS7J34azuNWZQenaSPMJx9GOjHJttaaVbvdrGUlaSKU+qt7CFP9f\n5n/F8AtVzOMAZdHD1usEuBRvEvE9nbJGKgDwBt+R2cGA49kYAufc5Y4Lg2pq\nTTgInjCb4PA4XrO6XPoW8lDPHfhhdfOJv516Bwij5542r9tkGY/nd9Q2H9vz\nONSrJuO5U3SRtLDeCA0qs+/w2NT+YhvcM+HLjwtkR8YLHSxA/KVVa/n7Tzgl\nNIj6Fcp6i9mqB9/x/3dA5dYqdjSyok6oNyYZD8ok2P7BS5EKK12gIgeWqMvu\noOxT5I4ENlIUBWvM8X5n9x1WQvOS4680eDmSpiPIzc2ZQB/h9YwMcysVe9Bg\nvNPy7mEoTPg6E1CdVyevZwWkN4O8Uzpd+wbuG70xVxt7XVNQiF7TsT9ftv7e\nbs3I\r\n=h5qn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFuHXDjdwFmUSKb0iw2sjvKqKtl04zHmNcZ+fr/L6CPIAiEArjKopgtzx5KCjt6JyxBBxaDJaItZxb2HR9DAdvrW4Zk="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603997705-c6495cff.0_1603997819726_0.9576079186738771"},"_hasShrinkwrap":false},"2.26.4-next-1603998701-3c75928d.0":{"name":"@xdn/core","version":"2.26.4-next-1603998701-3c75928d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603998701-3c75928d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kCdLJp4sTqdPomyjamDsqSt4zMkavYU0Pn5II3iKuMULsxD4U/padbJZKboJ8OmRAgOkhQZLUtKMTjFM3J6UkQ==","shasum":"02cf7d29998b08458c22d8c275e02b831f5b1944","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603998701-3c75928d.0.tgz","fileCount":165,"unpackedSize":627089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmxRZCRA9TVsSAnZWagAApIQP/1mhgqxbsXO/Vp7NFTxP\ndfH0zqww/Rv4AzIfXWpHQKksE+ymH8lnPHS32f3fI5NMH0KTAAcKnxPflc8I\nqxQYSQ7WYMfKkzTrOIsHieIC/wjlA1lT4vKw2kk50GeKJ7BGnIze3vCKGYr9\nmoQxoayxowCkJh+753gPodpP0+47BNC1SvlibtowxzsH2QsCQV1WJaqfxAar\nhQV5/WsjR8yS7TuttwWN9Qg+5CStyH9w82BB3v5rV4TAt4jmiqQKj/zZ/A/l\nNDgALUijgON1QGqnfNZVrHEHUA8pon2Jbq/IbMwsExI5ddCFK9onDpr5G9Y8\nTl0AzuqK04hRC/ckuLgsPlMmNQYwl2cXEqPxz51x9R9JS0AoqoLHF1yLiOti\n0B2vILhZvfpxLzel4fOjwQAr0+oPLW2sEBeXeelK1Dx+A3jW1bk2yjRGxD4Y\n/Wnuva+KpA50PJBcWQzlD27V//bVM1uWqHljMbnSFKTOmvKyEGQykvrLUc4K\nTYqPs2J48a6+TtlNZcIfStruqxSTOuu6bEN7ruIu1TVbZonQg+6G6jRBZ2DG\nyCbyggF4HOpHxTZxkGhy9mK/alhkbQNvmV+WCFCFK8aTrLHxVeX89Rh4rKjz\n3FNwu8syH6cGz1w6jJ7g9ag1DQMIqjEDc+QrRMwmig45Pd1pvxAq7k4e8lkW\npAtj\r\n=AoRG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQUFpdvJWoa30y9qydvQ5sxl5l06ghlewvsC+/uObjlAIga+x4BIvY8vWSOXFIcIjLIhQWmIdCNQ38ZbZMg6dldW4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603998701-3c75928d.0_1603998808932_0.0520675299410982"},"_hasShrinkwrap":false},"2.26.4-next-1603999183-27d35075.0":{"name":"@xdn/core","version":"2.26.4-next-1603999183-27d35075.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1603999183-27d35075.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-poPSHG6EfzcyUinORzbt8jdc8UrtSWB7Lvdt7vlgQBtfwCCIQtVmDFlaSupShGb7ggRP3HdcouMfh/wHaLjdGQ==","shasum":"5c0189a31ec67edd200cc66313b3183e76d447c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1603999183-27d35075.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmxZGCRA9TVsSAnZWagAA6UAP/AkU+OF1MpVqGeJstNFc\njrQ/bt6+DbwiF2o2t3W5KLqUPXReI1Iodu0+ZbF2/pUiJGQ0enUpg+wmCf8U\ncYUD25su7UWkeTuM5CwLFFayC5Ge9nN8LegbD0UvCOR5nSfbFP9c8VlLGSOb\nt/l9cPuQcrNE1yK+NWaSnsMkjz23F9xNsfNtF6u8VM4sI6nEqaez3aRmm8xs\nkSnNvCxa1+aj1TgDDqExpXTif5NfQbLIgnqZSX0oUc/v3UEpwctyYSTeFiGB\nG4syaG9QKa8C26BO6Q0jVqMCwSEv0k2jjqX9Of7tZx7gUIVhu6CJzdz1V+1i\n8/r0PAEDfCafpaS5RXwTOeWb/Fums6s3rbyhzEgM6UHV3mKzeIn6PrR5RSNj\nmyuZ2P40wWix2Mw8VIWfCxhTYPV/xSKlYwkWAxhSUfpxssRygS3DGNrQ5EUC\nDwiDKoeO1kcPU3LvnbSaliINYPVW8TKBi/ZFuyx52xTD50XIql0bXvdniyHn\n45JeNEY8kPLnrpJl3/g11H0SqlJ2J7jMT9budS9hEvD2nIxMunXA1g3W0C2i\nCTrbzSfc/I2cq+7za3/WDUjrui0/5WzI8kR8R4t8x49eVzqlGhBpPM+ff030\nFZ73BfERVV44QttaLXqCO2JSYeFnXbesnQgZTrXgnwng3YiQYF2TXoW2sFfF\nOvik\r\n=SxuX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTyKon/Mn6NHQOQyPD7m7q7TS+pfM3Hs3LtHARtK+V+AIgZQ2EalOKuEPp4GCz2nIggwmaGdYwcgHJ/XYvpZxQpHU="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1603999183-27d35075.0_1603999302366_0.9537963406968226"},"_hasShrinkwrap":false},"2.26.4-next-1604000158-27d35075.0":{"name":"@xdn/core","version":"2.26.4-next-1604000158-27d35075.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604000158-27d35075.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/9WSKGCfJ+BfhEe3nlbgFxfGDPLr8hjSH5EDCHV2k5ZmQPCfAR2bpgccuA7AY9Isa/eJpRqnBIIOzS0NNXvL6A==","shasum":"0c4d7fd3841a0b58286153fcb9075647d5a515b7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604000158-27d35075.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmxoTCRA9TVsSAnZWagAAe88P/iU3MMNiF+sM0bWwhBzC\ncZGQm85ZwAZQ0hneMWB6awcQr0jGabvj7Zexpou1ESJL7qh2tTKmtk8QpExs\nvgM7sFZBAtv4UzmUec3Pt6a7nsBChqpXyO5aAf2WwMI+4qAlrM0vfypaZFCm\nvdB94aZqIQ2oUnjk3+Q0LqMaOmq7EHKXIFEF6tFxHxkKjn+m/AvyTdG/wyDu\nuqqFZxdDVRkNTShZzBmLFLxtSFM/dwsh8t3FGmz0mMoNApVy8u7eiMC8BwCT\ntr2VdfjhKAOYcT+rhmbjrJziVDCNNCVQJUl5UdWAsTsaJooqS77EPqVjFRfc\niwdaXDO/F8zXRuXHExmobTFkMglI7q2ZdcrkrBmN83RS0EIIhJblosOjOYZn\nS+fdP14XwqYoGkQjfGbKE4L3h6p4cp5vJpRyqj7RDaqBY3/9626fz6uhn3s6\n9YwqZ1ZxxyQb6iRFK8mvxmmdW1gX1nHgFG7QNXno57icp6JFT4Qa8CvOex+a\nEX80wtFohrXQqkztKjlbh2dibz/eEgFsXf+NpxzXFQmPQHpTFxhBu0pXpJUt\nq2zupMjw3jbXVDu21h4gzQT31dIKiWQEIJcbW0tZ4JbYrog+AXlINBS8cK8r\nMGjaslI1p9wC0jHL934DdJYcI1iF5QOrLeKcHWwuiCRLLcwHDltK4q6pxTks\nW9Cr\r\n=0fzX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1gyPDBDbfdUwhJwSxMjxnd9NtTRf7DdUKQGHDkNI3rAiAOTdR7y1PQhjlyNrDrdCm2KqaG1k1rv7gCVRO83hFJDQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604000158-27d35075.0_1604000274893_0.9404450935277433"},"_hasShrinkwrap":false},"2.26.4-next-1604002649-14ea883b.0":{"name":"@xdn/core","version":"2.26.4-next-1604002649-14ea883b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604002649-14ea883b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-b/V7irwewIl7X2VfjRp/ipM4kIIpWAC4C1tFuk15DLr4RBdX/T8xwJ/onLmzF3p0a1c35i3vB7gfddM7I5SF/g==","shasum":"40b54742dba44ee0435761f4e2d4dc0c0872c94f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604002649-14ea883b.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmyPICRA9TVsSAnZWagAAcuIP/2sinDMVkRQJH6rdBsQS\nylVITQCm8cOtGHXSkjdvUEjw+8vHFDnlGvN+xq/nq1T7WIJzXMa1Ef4crelI\noWoXeci18dm0ITaWi4O3YXXYACl8Ikjr6xkwy08Ql8v4rMRmzCkfFFHk4wuQ\ntp8AR3rU1VmTYfgTk+dUnTCm0YLuBbUo0kp2jMg5MQ5EaeEJGO6OMARJ8sUc\n/bCVxSmS3AmkVdUOCggo8KzGfRTKWdn1p71j0aUkY+t9oyBdzOWjJIL6aEn1\n6vnRMob2GNCvpB48ameXV51YAFFKi2IfytOOFEyrmJHUMU2VdvKjc0Dnxoqi\nopKTZ2j7yIbKizhtMa/zg4e1YwcXY53J6lvkHo7r7+vGPLqpdPO0IbNYOZW9\niIfnQL5l0cGKXzbhwxihdYLgMkIvX5GUxBEpTdQpRzL9B/CKWOHQJFjDeyNx\nZiQU1pqRye4+pxGu+nSDnBDOioP8x7U7kY/niGmJN06hrHTY6Nl0sB+PAaen\nSD7GZfuDgBtd3wtbdqsRr9qyw2BJle2a3sssB0U+dGV4hdaLZunxuNyU0OUI\nBFjynoDc26Om3BdAGnIuUJH3qwavE7eWMeV8u4qlToQZlzkSe566f1Fi7EcX\niByS8b6rz9j4Mu8/wR3AFxGeuXeIJWPB9n+lu42mM/L2Mf+le14NDFkSzZMf\n2yN8\r\n=EG95\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5JalgLdcjDHa2hQrxuAu6HX7mRPD6KMUt12PmTMjIbAIgf060teiZ0/v4MtRROv11Qmd8enRLWiXC02KlRgaayxI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604002649-14ea883b.0_1604002760059_0.7494573541256584"},"_hasShrinkwrap":false},"2.26.4-next-1604004239-9cdc3775.0":{"name":"@xdn/core","version":"2.26.4-next-1604004239-9cdc3775.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604004239-9cdc3775.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SIuuUEmVD60W7+bALxBN9i+i0MisLpVK9H1NLOqBIyIGvBaQRtDv3VKTc2YpLicqPMyLZmcKm1I+j4IP2jNfpw==","shasum":"b0a695f42483f41ebb79b7f1047392014d3644e6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604004239-9cdc3775.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmyoJCRA9TVsSAnZWagAAn8gQAJS4oQz7S6wCYXHf8iM2\n9dhGAfqWuD7D7KtT93qTTxLrahLg0fgxm/RsDElSPtdr4B4QYAtZviRvWxq3\nFgTGGaVQA2LmW7T8ha+V8cNtvPLBW6Jqz6P+zhE0mcBSmEJBOKUGkDIVl6h1\nK/J/K+XC+KvB18dne/ckgaQYPC2YDgxI8b5QHwlbyhM+7Im8ef0Dl7Z9p0zq\nGSlF2Eeajq+oHXQJSQwlaRXEzpcVIDAYVd9cp+9z9GncTqdXbN9byD9x/Tpg\n5Mj/mqygeVMlBvYo0moZq5ybIAuNYwdGio04SeBCoeMMKdpML+//7dLej12E\nDVPikMz0M4vQ9mr1CMMEYN8S+nqN34wjR6E0VXRzeczCuN2VOkdgc/aHChpp\nFTdZ1G3ojUdto5PqowvkXYLbGgG25E9TSDxn/jwwK//tbXkJ7UCmoAlAbz+W\nH2u6DUHiYJteI1zOMk1i28/Ib84e5kglJGQxkqIjtD401wAfLqv83rEORt1N\neiqftF2lPw6Serwj5rsuwiuTgCQdDlUe55O8sYqQri4Jl1rCZ/4SuOClUgu0\nDlewv8ZN5vWSxsPjC+YU5rGKLmoNTjEG3oCtVAMG1I/qGIrYi+4Xp+sWrg/R\n9/+87MRjsP/AbEhSl+BqVIhBi6DOv6bHM057UDUEXuthu7T/N5ilYziBt8ky\n+DZ3\r\n=rcOY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/g+34CeocWNkelz7lxEN+O5qOGUDImKBQN2beQvQcSQIhANUyVgACcL3I1pr+ZRypjiN+glAYsAp2xiPkzLT3qnAG"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604004239-9cdc3775.0_1604004360843_0.07668103296074191"},"_hasShrinkwrap":false},"2.26.4-next-1604004945-b6d0afd3.0":{"name":"@xdn/core","version":"2.26.4-next-1604004945-b6d0afd3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604004945-b6d0afd3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-B7bs8RCWWds2fLIAYnf6z9macOGSERbQVVnHuMGqurgIqtYiXKT1PquTkFKEV6C+kcY1QRfeuUDaOOSAkELFuA==","shasum":"255a82db1355daa306adaa3242dedc660608795c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604004945-b6d0afd3.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmyzLCRA9TVsSAnZWagAA/KgP/ibK51VClTOetXoch4wE\n01g4S4YJ74nU9L2Rr0gd+H+ndXM2UMi1IBHnHXTSUUu0gqgdYh7RbEJcOewG\nvlcdMYil0EYUjWIS5nchXe3FAee7jVr6PWHifMQQov+A9DbBiaJwlwnDayws\nyJuxkRIacjOYOXnfYFnz0xzWAZR5IouNa3cSXD3pkITu6FNTKjMyvY6Cwp3A\nPfM7lB5zWfT1uKxgKlTihX7aIBG0JYMJHBUSZazKTxPmQJVxPIBv7ks6iFGo\nxNCeq6tGRWmr7cQW67W1Xdcv9/JZPd9pnLgtPFDpITBAAwAc3AwUful3miZs\nwB8InnhwFHErm6aNy1OgGN6xGdXJ7uli2MSvee0/dAZ5CZdNW2+duwQK1S1Q\n7tMr2nc6ErDpqt2odjqZ30Fwhka1P2XRyadlDXPF2cg/BQ9CI7Dc3F3bAQCT\noz4g8wZkoeoZ5to3NAhmE8joqQeYEeA5Q8Ht91IC4PEF2jrxt623S9cqgE3N\nsqPsXMBR0q1L0cwhlmgNP+ABt9ie/Zv0GUAJm3992wzeyLkVNke+rYhG2mWg\noESnCPAnQZbfCtCd5GpHZE/yjyZ6r3NW9Ug+Izegc9TJA/mT9jP9bThTxknc\nP9L6U3DP/XutVaKO5xZJVxFuKInk2/cXd1Yb6ebeVTG1erKR3fZYF7ElPOd9\n2+PB\r\n=5PEn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDbPDr0tAcrDza8KX9XamT6TwlypCVkyRZoldk6Ei+AOAiEAg4zY+STo1zY6sfQtlU5kkxPKzDe9bMlv/m0qFJqWF0E="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604004945-b6d0afd3.0_1604005067240_0.08778398144778365"},"_hasShrinkwrap":false},"2.26.4-next-1604006886-44d32181.0":{"name":"@xdn/core","version":"2.26.4-next-1604006886-44d32181.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604006886-44d32181.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3MgUkZ4EZJ6dQz2DjYhJMUjNzn/Si+NTSU/wG4kF5LwRtzgsWTHPAF5hHCWJQQjj7wq8x3xCB1RWEPCg3EkoTg==","shasum":"6fd9674c7b4bf2678f1ff950615fb206ea74a3e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604006886-44d32181.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmzRfCRA9TVsSAnZWagAATVAQAJS/5XEGhn6is/oajlmj\nwPf0XUFVc2MpPiS0UKyBI7hkkpD37PniShKQ1lpyLnjqK6SyaPAcm9g50CTF\ntm6c287CPliWsCwzRbxRE7vGhZrgVW/MUu88qy0y+Kq8RVOECxvwErHGQXjS\nCz1T0Veom+qJC8DPiI06yH8tDPQWeyyHN5m9mGMnS+FwCu8IEvjKDSEqorg1\n39n9t3tdor6YmYu9W+E9ZAyRUoXjneJUlRocT5Qez5UBeOQMxHb6IRnJ8dRU\n2FHmVjAghMmdx8e5aP/VJ968itxSZvGRfVgayPfMHI5ReYlkk/KBLigoAWuS\n0WE+8tVaeqSR4QV8sa1lycSq4ShQTHVcDF9PsClcbYo9w9cLXL3vsAxfKRgw\nbcjd0QqhvPN5ZLEnvK6lzb4B6NiYZ4ujoQRp/tr2siCOPUxVz/0NOzQiRzSJ\nmcHEvEoCgKp/yGocvjw3vOlhWjzEh3Oe0WUxqPuFznnpgk0OgoFavnwRc3HP\n2XwYhZXSeFVE+bBcIqqJKBDyaQ9u4JmWtCBWfN2cjFGWwXNHRpUCqIcw0Qdp\nvJSf2bvsGnblnchD6WKDCYweMQt6iWKoWKMhvWUz+f4Z65y/YPFGDMedKnPx\nT5qMD4BwNFuBIc/vPy6PQiXntckN0i9pLenAMQ/xrfQy+CxNSALUwldpOJOL\nP1k4\r\n=Ata2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyYredRki4sRxG8uAN/dJFI4k/E749iBqeDnZxn3gJaAIgKCRSy4WhUQrSfe82SCl5bRLqTX5Wglpsn3XwNie6+i4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604006886-44d32181.0_1604007007376_0.9758134461777317"},"_hasShrinkwrap":false},"2.26.4-next-1604056954-879fd75f.0":{"name":"@xdn/core","version":"2.26.4-next-1604056954-879fd75f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604056954-879fd75f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-WHznxB36qBi54BZedaDRLk5Hophtb0amapEsOhn+262i+zkfogpeCf+eYwgbYWi/m4iZZXg21stkPHMmbV1XQQ==","shasum":"e965d9d938339364376209c45dbf6fefc96ee50c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604056954-879fd75f.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfm/fqCRA9TVsSAnZWagAAnkgP/R6eUj6O7v+12Sk+L5od\neq+LJejvyI2IsTtMpGbaiRVlFuhVL9XOc0zjlQuGK7GTvLsW8sI/dcb8QIfW\nZ1yS6epuUIWk4A7MuMS6UC4P77E6QgrAI/AGvX2mjO4h8UqZeL2O3XmZPwj3\nJgWHBsYByFlcqLqkq4XTYJUuJs7hCrJ83IAidypA/KoSaRppWDqhT4WHpTXw\nFB946JWL+TaFfkR5riW3UC+M4smmK9Hx71EUp865+5MnmYgGjRMKo7Xh8xMk\n8q+mDwzK0ptjO+X/TGeHKw+h/yrytzM3JRD9jk70vCuBDAq65xxzE1XyLSO2\nuC7+HXTw107hP17On6Eq4pHd4XgRGyifCf0qL1qEU/cyjRmQJhdChbh2TFmh\nZWtXIrW+gKzpKkgazBDxxGHaECctcv7ug+R99ptgY31RxIoeKtRTT+9CCb5M\nOGZARQvboPT1TLnQJW02sv5MN6dm5F41Aj2Pw1lTCSambqKEXBGYYLYORrI8\nkLdJL9sQHXcRCa0tnPG4xpyZnxPM7kMPISPlDzbiIKwRScZKvyXmmnGJ1L6f\n7tu9Ex2PbcSgC0GCI+a3FyMEttGgCabaGNCvKfZjuALtS3PBwruTz5TWMmbv\n0LUt6zXadOVfCSQPY4kmoi8j3URwvHVbqMgrNarYhn7DoIU+8kQEG73r5md4\nXWBg\r\n=pD1H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkPPos4E8iT1j7PG/7GGYIVFOSZs1DzlfuNz5Y7xbVLAIhAM2DqUmjbuf04HlJhDKjt/sMSCVXcEvuJNJr+uMaROQD"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604056954-879fd75f.0_1604057066174_0.6187790386655845"},"_hasShrinkwrap":false},"2.26.4-next-1604056996-33a03a6a.0":{"name":"@xdn/core","version":"2.26.4-next-1604056996-33a03a6a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604056996-33a03a6a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zhT/VejTuWqkOwGrjNW4Vg+TSslg7+0OLecbV3MxLFqkKL7UpiYrVhz4ltrJSi9Uoz9ix80Da8lp8oLhTfZfmw==","shasum":"0d616e187dcb25816d1562d1bd9525baba3fe42a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604056996-33a03a6a.0.tgz","fileCount":171,"unpackedSize":625319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfm/gbCRA9TVsSAnZWagAAtk0P/ietZyNhkNuXStCqd/a6\nhU6Yqk/p9dcJjhaLo683fpWaaaFKJu5Ggx1qsQKVTVGIo4YKKPSqeTV3qDB8\ndM+jLZycNkT+ZdPBBAfWoVGTd5gkqemZDPI3D4c4Dh0vKEEjaSujIjL+JtGp\nVKTo/zhk2OF1ojkPI063+8GhzOvMOWfHcu9GCeTzjcJ7jnMiIgUNV3DtNF2Y\na6RjaPOz46IRnlWacxRazjy3S/crL66c1P+i6526QbazdF0PP1GVaUl+8kCL\nSj76l0GlIuhqpcKyJkVfFE/5ZIA6Xm4Ivj9UTIHbzASc0gM7+D9XmFftOIos\n8ABxT6ChpNdgZtU3msp7IDMVXDnQ9y2xIMsnsR1l0hWgI9u4ke3F/JcTuEFW\nZjj0TNbqMUiIt+szBgdz4qW4hHA6PmAnYNgf5Jt0RLX8gVfinc/d5OZTr4un\nq1S2Uy2T8cxnwGOGLji8JQxZEy4c8x6JoMQGo0JuC2GWzc8UmLColglBEMe4\nRfTbd0OLsTdcSyCd53G/BqMFtOb4+Mflxj87RuBd1LVO/cyProB6tOfhqw1j\nM//X1QapmefrnkmznPugAFaOlXt4pqFBt3BoawRpvFu4//DlQqz2hylS0EuO\n+g1bUQREHMqi91T3F7zy8fJP6PHC7KIHGZRuCTXCW1ugs8vkQYwkKMMmslIV\nXFFB\r\n=5GUu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSGQJZqD8IJ5K2M/5TtA3VtgzP5QWATiVmJKCxjKv6igIgKCgLF19Jy7dwysJ/hoLH2MHhEeZg/Zkht6uG8XWwYCo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604056996-33a03a6a.0_1604057114833_0.9256948673274912"},"_hasShrinkwrap":false},"2.26.4-next-1604060477-9c8a6052.0":{"name":"@xdn/core","version":"2.26.4-next-1604060477-9c8a6052.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604060477-9c8a6052.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3fG8GCuUhjy2vGd9o9XBrOdia2aIaO29YbvW+cyUMDO4YQcdmhF9+fffBPWPAEu/kEncrF+Ehnc4449dVuyEGg==","shasum":"767d6e1e41f05bf46d5d298c2a314f34b4c15bcc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604060477-9c8a6052.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnAWtCRA9TVsSAnZWagAAhn8P/06+olDXaMb4+LXt/jho\nK94LA7tLvlQcag6T17okLsNgSUo21MJj78QxXUPR38mymiSK+bwglZWhKsnn\nYnEh1qODCK1s+J+SH22V0Xv58sg1logSEPe2etRaZltZs+H7A3L9uIHKcx0U\nEvRLfR438atD7CWvqfuHzz7NHUC5NNc3vSoB9tHootQy6MrFsDIuqvCrhuHG\nm5dSv+gmFjuFlYLLpdKjBFeHjBYEwVVQRCCjvJEDhedW4O8ncWpjWtBD/3gA\nmlrZ0O4RtF1ZskD8QKfe7LI/a3z1iRdHH5J/TZCsxA1LY+XyuiR5Sg85dPTC\nt7AHJKmFn4eedK05cKK3OFZXlK37sP0sG8oIcF9EfDWOcF6C3Uxxe1zHk+g0\nLiFgg42fjhzIbph4OvYFAFPTDBPCAm4NHmXP13IEDx6ZTwDjqBh4rSvSxexy\nmZJwifMSkU0QnfjjmuQB3A2hWw1zBfhHG6xsyfPz5GSzcuR1Qugyohz6rjVM\nBJeYTpiMAFWNV2n+Ql0sNr4pzw+mb51Hcdu0WgpQJBj/HAF5kzZDftOaCTZo\njiiHi5R8TOZPaNj9OK3ZkZjvuSl8SctnP6bea3+I1Cz4r0vubdIG/hGW+OQf\nIlwcppGmS8kZlHsnwhzak1GDcYjG2rcaTgWBF6oIAHWWW+THlo1QLAu7FR7j\nzAFA\r\n=2DBY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICd7JRaFiN1A8w+SxqojJTGfPwTITbPlC2b9IvsKgpX4AiEAzAE9yq1bqXaSGSB5apfC/geJVrGcUQnfh/ycXGs/TR0="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604060477-9c8a6052.0_1604060589177_0.03220268802466597"},"_hasShrinkwrap":false},"2.26.4-next-1604060503-0608a3f6.0":{"name":"@xdn/core","version":"2.26.4-next-1604060503-0608a3f6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604060503-0608a3f6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FLglg/9Y7chdUM+OnpVL2r25j7rTQqOrw/wM5dXW9i0CMDdIBCgeYpCUz1xJELDvsmZuUicH+kseDP379kApBA==","shasum":"3cb014633989e3dccd27099451985c3a3da3aee7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604060503-0608a3f6.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnAXUCRA9TVsSAnZWagAA/koP/1Lqx/1gTHYpZnr8FJFv\nxBRhVLComLhFdYur+rKyWLOu+TAvegIMmjSfEGwbW4dhUbdT+pE8yIkcqmjI\nsI1kIRRTX1RuOsMdFCy4N2va3sr8aW/luMv2h5GfslqScvsi9zTLjK3KIwms\nhjUnyE2Le/P3qfj3jdarzpqvxgHwsMLtXjqfca3u2YAumoPIIKGolk6bv/FB\nBbNkmHLUW6QQM4WgOf+XPdTYoAqMHBIlXqstk7OWVcJucBnkFvuTP3qn53YM\n8fJ1d4UfmChUCoXje7DVFeW77VwHu+ZTnmde25oYQxfbGDtkIwIG57zuEpPx\nekxALC0pzTcicB7R4oiilgb1UzMqpskSuMnI3+k8HzpN2pzmfykbJK0uNl0m\nPYJC8mM3Ubl2A1JJES1/aNJ7upKnFtZYWprvo1v2tHAV+RwgvrRN0ROGZ+TS\nOFb6NlBpklRdziHxj43Bhc9xXT44n1bSr+wxgQdeOZNzFD2+uP98sVOHoYqg\nXmVAjeAi8TJWFojZZugU9Sg2Rt3VpaEp9S0dKkFzzOFvEPeQzoslKT6+6RWi\nphH1PLrSQW8HfRzzEuYLmmjOK7wsnPrSnkCFtVHpL4wpNkaWkmEVRB7h065F\nN9lcM9sytLkfNDZdg691+zo8TVoannm/6joppludXVoAfnBqwuAUXFzeiJEC\noKcD\r\n=ZYL6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpLUiguCOlpq2yJL8CLqOLENaoz0A8fL/QDLDeOKv4GQIgUm9ttDdx/uqXvLB47A3aHjS7IKSD6K/xqCNMp9J7oyQ="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604060503-0608a3f6.0_1604060627618_0.9511277598981596"},"_hasShrinkwrap":false},"2.26.4-next-1604064531-0aa4787e.0":{"name":"@xdn/core","version":"2.26.4-next-1604064531-0aa4787e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604064531-0aa4787e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-K55A4ZjWIAGFxsmzQnil/c/88dVM4K3AWRHMqXXHWw+/wBd6HMrhBqcIqInIDOBzJMVvEJ5pRYtQ9mRgT1Eseg==","shasum":"349948a19c6fa45cd8b6dc78fe7ebc22db7c78f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604064531-0aa4787e.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnBWFCRA9TVsSAnZWagAAmNUP/jtnb2GV++WyYOZy32eJ\nn4DGuGclUxfsCCLrQwGMB2/h+D/jZbSDZzVqOEcybzfppyZTg/DlQ5gaHbUu\n0L3IkK6SvIeBHVKa7yfLXxd55WYSLkitF1ZqOUc5HM2qg0LNjJKzQNh4xqH/\nx+oNG5dO+jSz6jJHZEz8NiGqRoSMPnfkzWOAou7WtmTHijhbpiHjr2UsnxOH\nBR6Eao+PITp27c0G0duemELp2DctEBGoBPDVwiikJbwrNXIv+ER1FBB3Z1md\nxUM/AUJzZxrqSd4QhrCTAP56735mHlgxJus8NHGuoHfWRxkapAYbHjas/44m\nq2eiWe1+hF+usmUxxTaJVM5zIs0TbqClk/g8+qYYjzwEE8qyjf8aCWWtIJaY\nAArVCo4h2p9+oW8k3V1mA5CwwUyqIFfLTcpNF5GcLfhKTIUf5/Qt5aOitway\nQXyJeMD7OJZorLGPT6rIPSsGw/fTxno4ipmyD+rBwbqvP8dv5DlJWp4bjWPx\njXz7Op/C5lgzNm7Rl6XfsFkFPRLOgcG0SyHpfpr4ci9e1diOu2x+6NtIO9s0\n6oVHkcNXLO8pGmTDzaomv6wXVZ2Cd5k7bWFzzGJWUhgJdKE6WuGoDmZD8LM1\nqPK0uf1s1FPgZhlD7J2ihs4P7MD0SQibTqkzf3+UiWOh1PLFH+/9X46I4XSz\nrvc2\r\n=JJ0m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCggKH2hdXQieZcI83OGNbp69se1fst09VSF7tHZLpUsQIhAPUY+5bXvySiL1dnyEfM5TuOEnstt5BDU4naEwPPBt/j"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604064531-0aa4787e.0_1604064645296_0.44262872306080037"},"_hasShrinkwrap":false},"2.26.4-next-1604065372-0aa4787e.0":{"name":"@xdn/core","version":"2.26.4-next-1604065372-0aa4787e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604065372-0aa4787e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NmEZPPDSVb1gCIlHlTn6CdgVHfEUtqccBC7BdC21pB8MxKgkaYAuKqBkYZ6ASm8SGavvXZg9aoxMpOoaHJHBYw==","shasum":"986591544b0e1cff55bf2a305f1c2ecb47b990d6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604065372-0aa4787e.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnBjTCRA9TVsSAnZWagAA/kAP/jKOUPV5eVpSbmwIQVrA\nHNiNzM9UT8DblY72W3sfxvRjX16kfIDL0wvaH/Y+LQ79htjMqqaVFy0UCeUw\nJvNBpZmF4K5PUi4602M7GfRvd+l6FmCMgqsAHYrejymRLD4xOGUpWR5W2iU+\nUJp+voH8Mtja30LIgHxYGS0UqV7JR3kjLM+NhkxxiEwkoZIhRmSZBAdyo12I\nJF8H7nSlC/Xvpx/olASfdD3H67L1ZPsrQ0CIC8FjrB+HLVyc8L05VJVd4YRf\n14Q/tVLZvwZeh5gi7gyTHTkZyNO7toJhsnSHv3ctvJSH6lw/5FvrriJyUQZo\n+BK6T9L7AGYaH+5tmnsJKRNHQl1crrxZ1X/Lx/zs8g2pUfOyDpC84ifZj3Ms\nvBxblClujCvdMU5YMC6/B50buV5JfoAzIwd5I5udvv0CCg7qhw322phuVc3H\nz4PNGyXOOAozH/sbKyYzd5p3IrMw69GsIzpqXrCTDvojf1/hbBCHztcXUHfd\nLn88JAkKZ9P89tKdj1tBxu82tXPPPVwYCiJ/ZlP3kUvhiOmAefIp2WzG9g3n\nmeDXtshvsfUeVr/ItXSFAm/dvjoH6+dHCvf10MQLHGXN/BSOmlRMlgNINXNk\n69T0xqPAv3xOIusmCaiNvgPR8NXiz/sBdeyhUNS4OFYinJqVGoa09H3Bbkqj\nFOck\r\n=3aba\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB7iy2EqX1oL5KBJtmw8kHJL0M4ukZEtsr3Yx+l+hrzZAiEA35GeP7uaVWxOnHZmLK9hnJpQSWEqUxGSynZ0O3FphhI="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604065372-0aa4787e.0_1604065490828_0.9403927408662587"},"_hasShrinkwrap":false},"2.26.4-next-1604066134-f6f5ffd0.0":{"name":"@xdn/core","version":"2.26.4-next-1604066134-f6f5ffd0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604066134-f6f5ffd0.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9ddEuYBHvEWVfAt94yBS50zre5UU4YQ9ZK0RNT3QNybOdXZVm7k9uD7L6u80KqpJqxz0OuxpocDQFtiRCQWoqw==","shasum":"d15bc8a2043bed8c661bf8568d699bac98d122c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604066134-f6f5ffd0.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnBvXCRA9TVsSAnZWagAAJ4IP/jlENJocCeSf8U74rZiC\nLz0F9mUyNl+HTgr+AOW7h571Cg6lFhwzsYArVK99Oj0EF62h4iLdju8OC9Cb\nsvfarIXEY/x9bScUwjkTQop37Oew95SIjiBINeZ4N+XFcOO5NHcr/Pm+o+H0\n9ajIihKN6oDSVsZnioFphD2rSlcwwkDJ8Ska3eXiOiymaeat7GwTHWDLPCVA\nOxoWonGj+dPcxhCwgHXKgAttJIKKe8nO/XoAsFnhZMS3ZxzqqfxXWTGqFUlj\n7cpuAcsMbpGGEBPD29gyJAaCheq4F8Ggo4YJcbLp8AF7T2rgxTxeRtzFtLDN\n66JeHmIa3HQxfvEaVEcXLfgGC7u6sK83yEqwOABEj9TImG1phZkSyIUgwvQP\nRkZbYtvEoF41I0g7uSNsVlzIgOCdkHaxu/y5pMWmadC+Kd4aydMjFP8uPl46\nEfq6CTmyUuP9ZXIOkJ13BkIjk3erVaV1TKR17OiYki7mwDTD074YSDTsKdHh\nwC0g8PfpqSSvHWBV943XCfS8cWPF2YnosFUGMz29DvaMCFJcKrRDwLTCajcE\nAjJdB3qnwFPQL8DKRFZeJhq4/TI9RyLjuepVbVFwhUNoBaVLgeZBXKNmtDjR\nvOHrowa6mLGxFNhhdOsZDjHC+FpXoaF2KtxqwMej5/JArPSI1yLc6MC42pF3\ndwJM\r\n=daZR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMpQsTubxmn9WE4f3NTycLZQrhIHrXaYjrPmYWpJbhsAIhAMfSL8biw80YX4MyjyVl34/KPL9I8qhxoWhinaK0YDmi"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604066134-f6f5ffd0.0_1604066263129_0.9338682187171952"},"_hasShrinkwrap":false},"2.26.4-next-1604066992-951501e3.0":{"name":"@xdn/core","version":"2.26.4-next-1604066992-951501e3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604066992-951501e3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vLw5w9vyNbpocaHBoyxtvpqFG0BaU50zlh6lT2D6logVMj7kNGPRyo2XynTj4e3D+f/fZjliGWDwW64atUbUWA==","shasum":"c6ec303b5702c3f3e8260267339295fab1a5404a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604066992-951501e3.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnB8vCRA9TVsSAnZWagAACVEP/juUMUy5sPDvPVLy44SO\nG3N6rChWl7g5lF4WRoZSpMFHm/TOYtDUFts23xA/tgQKSr6XayS9LvkKcdEa\ndIXwb9ihdiNCaKv/t+A+pLDVcUGl14x33abI0FwBg6k+fSChPmnRUdTG9ko7\niSlQnGplmstcIWO5YgomZs/7qQC57Yt31/y4JHTyCpdKNe+wltpVPijyLsmE\ne/6ZojrzcAV1ixH96rVpd4aDF48uFnvmrmcFdV1QrBqss2WwtRnZFU+CStJE\nk7bVzfWXoX9DkGpUnMnl5yCs3p7hqgEgLBBqBpz67pK7U+h2xx8W88ga0tjM\nV/8VM1oDzvDsJ5WPcRqNGzOos3hHvblmaHzPYpUmksofXzseivhW3ZMuClvo\nxYbUNGnzuzQ4g6/pE/6fyK1mw7hf8+8x+Hsk532m83MGx1jzM2ohJ99QGU7W\nWl19URDg/VYLP8f3FJL2/vO4eeusTbyfM9K923JwvZ0C6Egwjwqq0PlI2liS\npRWlYha2DM1BWJdoB4p+0695D4ycJ2ZYZ+DiiGzMS3SzMxeDlL7u1F25ZBbN\nanvGIq3MbT3vJ42yoMBTSBAX8r2/rJWKsOkt9HIt3xNL5R9EMcEdewXmY8CB\nKdsZUAjM4e9W6NMpRZZhLkV2mq/+Q45olAscc/v+6YAWijIgpiygDTnrbZ2T\nS9v7\r\n=bK9X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC30jt0b3WszQUCOI5thSs6PaFTyzXfIcJXZBHtGjzy6wIhANALF19fB6MfUujV29LvY4F4nRo5QVo7JxRZis2VMRqB"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604066992-951501e3.0_1604067119060_0.3862782767470916"},"_hasShrinkwrap":false},"2.26.4-next-1604072759-984cf357.0":{"name":"@xdn/core","version":"2.26.4-next-1604072759-984cf357.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604072759-984cf357.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-C4Enq5BVTXOXxjiHsZ2hggTmyKlfS6vCu24PsyypKP2vohZ5GB2VAOfVFE33QgSmRcpFfJuHLWOzDUqaJWzlAg==","shasum":"c8b880410c0aca741c46cc5cc94554e7d47b1041","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604072759-984cf357.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnDWtCRA9TVsSAnZWagAA20sQAIlUIGzqWbkDXXeqXFGm\nlfT6/eQx+saraayLBdRNr2dSXx5lyBkFMuFogcY1wJRWrJVJmdRxWT0lsjfd\n0bJfMMoa7ajAADbQVy0eqq0dO24j3CSzCeLGbdlxA0q1PLe+157YSvJGbJIQ\nvhE2+Y9Rw9ouN9ZelYbHXbLQOzJyPoWFAt5FcJygU9TUsnNuQpVMY5ggVM+Q\nk4ujEQpgxYQtqXUZ3JV883QdPatWuZOrsklzrOH3yGUKhcOAl0Dg82NWU2Hd\nS5yXrfbjlx7mAIXbTMDpoQCqEZGmfmYmodNsdtQamFgPQ8AU8rmJ5Kf4ysa8\nWqqgUJXAG3SA3umKkZW7zWINWSiae05JS0fg/EDln6yCQfMW3U7Yo73R6KYu\n7e/DcPs/50pANqzUS1GwCRD5qPlHEpL83XDyRXxYA9y2yhJY8QVQDIarYWWp\nLdSjqxjKBpQiQQGladOJa9hWYYhgqbZ0iQkztggQCvnv/XJ31W5dHfNHerp7\n8ufWZ9geZu+I0z5UAwg0jfSFK150XZOQhPOy2xOngYxK6JeBe5ZkwH5fijl7\n14qL/iDg6uK8Ay1YJuH5+scga7EVCxF7bvaGvk9Qbxfsbn373+FenVLCA3G5\nm4sy8ebZFg+KY1C9IScoTIFe3r6VURRhVih949ObgI7PyrrxWPZrQfCN7e9D\nhUFH\r\n=CGGe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICch/0vCRyonGXP+famN10Eb+RrfajHgLgDPRhRSz61RAiABBzgtZPiWjP7UM5kWPLsltMYlJcBRgUZ5OWP+Hk4YIA=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604072759-984cf357.0_1604072876886_0.9931562630355781"},"_hasShrinkwrap":false},"2.26.4-next-1604096243-bcd1b3bb.0":{"name":"@xdn/core","version":"2.26.4-next-1604096243-bcd1b3bb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604096243-bcd1b3bb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uEFgfm2ILLMWApJYxA5EFIjWDSCR4V5h7SinLnOiPqdoaFltXo3cv2EsRNc4ZjlRnUX8OZqFSatu/fIBmbtKVA==","shasum":"adb715309454c37988628c7b840be850547d9eef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604096243-bcd1b3bb.0.tgz","fileCount":167,"unpackedSize":632606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnJFyCRA9TVsSAnZWagAAsbQP/jegJZfYv58YglYmQJK2\n8QJte5P/wVMClHiJPA6whnwGMRwQgFNm1tdbfugwPdYUw45cvgy6LH0ybnlC\ngCquCnp89CYM/CnI1WaGqU5QuwOg5PicUarjRn+vNAmtGZncq4K8Q9sn8tVy\nr10iDYwe5xKrSc4r7n+u+daXuvzwG3d5FCRG65s3IQ0BHmOXRXNmBMtuT5JC\nmxnpXniMHWzvF4XPXmAdhCBuVYbOcYft9prLdFAnt6Zj5cCCFJsxQjcPM0E/\n5YXTgFaDWx8GrlHYqRoqhaazX0r4Dv7SPUgzAV/FwYPqCK3fb6rAqZNaRPrF\ns01Mgtvs0QHb8ebCPE2PUvlAD+rOPjs1ZvoY8myZhSVgXtGSswIb/wQC3fLt\n/+F5C7rhwGDx1Vgc4b0zwMZhgzmZOvguqihEYbDtFfVJ6bJxL+a+8WmQS5e8\nF4zMh/AwjVXHwiXJqjTqIyKNMY4bE+JtM5m395dzQUS7uWIH9QMH/+UvjC+0\n/IEALo4WtkJemwdxk5/WWmafSuXE2Pb2JM6Js8EFl2xk1Gjs+rgswpF946ad\nEEevkXXuDyNpFfdgwUAfYk3SMTgU6/AnZ8+tg2zezlGis8HqORWbmjfLTHRN\noUp/fkITeSyZi+Q27AS/tvQsEKlmmjiyQ25p8gooGNeDoJeZentmiGAPe0aH\nGltZ\r\n=59QH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYmRdlfMxBrWx3lXV5VEPlgzQpG8x2YcNC0BTrjgjB4gIhAL2gqwr454JnIOeX86N9czAGxGqblF2zJiZniONngjCl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604096243-bcd1b3bb.0_1604096369532_0.04528851866769412"},"_hasShrinkwrap":false},"2.26.4-next-1604315905-03db59c9.0":{"name":"@xdn/core","version":"2.26.4-next-1604315905-03db59c9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604315905-03db59c9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-78DO2CIYQz8tl56iJGXvzHVK3sDoMZ8FO0jOxWQVAxKZoqndal98dXcKUludNaTSBhV0TCUXluaPtJEqytikJA==","shasum":"3e8e96820db72fb81e182754795e62d2be8adad2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604315905-03db59c9.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfn+t/CRA9TVsSAnZWagAA7z0P/0sktjF0Ib0SjSeFhcsp\nMttBSfZnavhln59uA/2uczxIUwKXMIbk/lp9sTWBwFLxy15VpqoSZ8GNAE1c\njO1Z4EpjQfcsFMyMSCXsXkp0Fp6AB47LSVcDOxWghB951ZCMhRaoiB/lFU37\nBU+HCpHy6+DcZRPjLYoBy+cEDGSOudAzpQhm4Yr3yOAaUgfnfV+zQGYIo02F\n4pGVl7S7w3zxJ/c/Bn6yvZhtolc2mvrOuq2HEGxRbbMPSQU79hwSu8daffGo\nNbvSGmnqr87WChfIyeFJOLOlOkVloo7hygavpmc/Aof/t4eHTsaXRez4fdF2\nBzEnWTlQycOUZw036vuMnXZEM4SRKnmTWZF4dAbXDwnY4oPXkKQ8U7lxOyeF\nL9ZfknuPafN6QTqWWF93o+Zkdy7wSnMRBVFeIZ3BZhlStpSSwN/8VY2qmJBZ\ny4rQ488VQ69ljcInxCBacJbyAQOj7EOb1MSgsSJOT/KBrVCgL/cS553AKMGS\nZqlfOlS7zmr3Y9BU+LAnzoUQCehW13zWHfo5NZvDf92e0LYnIXE5lcMMF1ot\n2ULnHyJ0LVQUIf+ZpRDuHPgYUpgfNFZ8h2Hh659zDqkeuaajYHcpjFX5oWus\n3hVOXK8GDDcYTT0qL18Nf/LyUw5OTektOUNkU2TO76neYGqVN4RJ/p1u2AUE\nVsOJ\r\n=n5G3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE6RGTrRSULVessoJc6ehDpXGBmlu6jcE/vgjTM+BuKXAiEA6rG4BscKZkHUOha2HnrfrSij0c8qmbSLJazm0zu7BH8="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604315905-03db59c9.0_1604316030981_0.04785853824309849"},"_hasShrinkwrap":false},"2.26.4-next-1604315997-d25d55a0.0":{"name":"@xdn/core","version":"2.26.4-next-1604315997-d25d55a0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604315997-d25d55a0.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qRUQCO4UAdCgzlGKHIFwrPaLLHMBiT6m6ZXZaBhBzZD5Y1UAQLQwAZRaOcj6lIPAZNqK5mp7kGuUxIeBgqvLFw==","shasum":"c3a07e334cab59df0402e05d9d429109aac26184","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604315997-d25d55a0.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfn+vVCRA9TVsSAnZWagAAbGYP/3Vz634JGsJcPFidWG/1\ndSyMvmWUSXz27mRfCfS5+oqx7sNaXKILsHI63P8QC8ZqCg40BtpZD522eH8l\nMaAlxepDX7NjQt3voU3OBTK/DnxA4vJP6QvQQsTxpxKt6uLdHSsAopY+tBxl\nKhG/SjAY9s6C05Hlkgicot55rh28DYrYJ2UdvqUvBwbVj/4e+RMfylRFllea\nGZHhvDlwUp8BDs5HMvVyVO6vDeCo07l3mCaS5WJApOCO6fFScqxnHHBS4Xwx\nut5Op6CdimWCrGFSdYShVy9GNPlOKlO4cQlu6dQntWyNTS+KV05E5sh2bDnO\n2X+AEJlbrtkiyxAH9KTey5xRFg8ZNsIbZHKTcA9uZldQ4nB7NzbzYu8UiYkB\nId5wUTkz7DF195i3wUg08Q9Kyyi83WUVcFDJI6rjzQuh2BdcX/PFg/O4yj4H\niXDs7UGVBDLgdMH7AaU+IVbG9CCxjmFQeY1HcDMHHZx3JI1brcrQZkFculnL\nEUtDq4jY+6H2Xao5NOsD6pWof7Ucs0wAxeqQ3rrmlaZxU8MZfqEG8sFVLfTF\nv6NhqJftq+gXAanrwssjSRBsAaKT8MUReiGRxcW3TA6k7MW8EooDyfFrXKgs\n70oogAc0wWPvsEsxtmKdSnCq+3mIU5gt8OzpE23ui9/yAP2uiQiGCBI5UOec\nIMO1\r\n=ndLk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBD/8S8EJCR1OddmFi/ls5VYt7D6v4RksbTedrx4PWdLAiEA0bTDMue/P2VoeRGYj2QkJYbSvJscXFZv7mt5On4nu1c="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604315997-d25d55a0.0_1604316116749_0.6430914972604949"},"_hasShrinkwrap":false},"2.26.4-next-1604316277-14f51239.0":{"name":"@xdn/core","version":"2.26.4-next-1604316277-14f51239.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604316277-14f51239.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-y6a2y5M9Paf3X86ORrDY91EKi5mQRwUYiPkx2X3W/RYyijyYfejtXSP4bQJtpsnvjHs1IwMkFnWzPiNUs8BSIQ==","shasum":"31ab32e0537f29a3f5e74c18eb696cbd5bb9105b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604316277-14f51239.0.tgz","fileCount":167,"unpackedSize":632658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfn+zLCRA9TVsSAnZWagAAEcMP/3GDUAT1jaD8umKhrsdi\ny4RYKljq/DnOVWP0z8d14A0s40TZnpGLgQOIDm9HxfXIXx6k3dSCUaGRKBX4\nJtSCyfDeKTdtT800VJ1wuIF0J0HYqOM2TawFYlXrYI65e0jMjNR05zIEdgVH\nrL6Hjzn/1Hb0fiGVvTl/xTuaOz0k8+vEuW6uOmk4XWcTNxoimNcb3sU9oyF2\na+M5PaFwKapSF3j8U9XB8eokj68RQhXC7mowGbxnmre9ohpNqV8LqjiIbQnl\nJGNVlb2dXGATWXrQcTm906sPCoxF5Yy97/qBQYJYrBzOdXzsrE8cEWR+DQL6\nIQ67KPjZnsUcB4+gNg32KnpHD93EkVL4MpN3taCR8SlDOUBN8yUevBUQCt1I\nxteq9v17NCjUWqPQ5W9z0z9U/ghuCotbBpffmuLc2WnNjSh8R5yUm+v6NhWP\navrX1uy8P0E39A29NEkcEyCSX2thlr5AF2JoDWOwPm0aEAbJrLHxZe+g36Zr\nb+I998a+QZncoTAhaRHWpuwB1bVhHnOGOecahvhfLswMxzkKxgECNHmoBoxX\nvGu0JP7CvdKLWUCH2KDaRul2hTUSNBHVxHEjIuEQBOcMr6cVLncd8CZKNFf/\nYC/Y/O4xJSt3f48pbPo6OEgpOS22E+FeAliMrWkUXf/BI3BR6pwG680m5oM3\no75i\r\n=+/Ia\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGiXcz695+b3tv7JbYFCLCU/er6H+w106+jBnBZqubIaAiATadgWBMT/Zq+btWwAQmvKMaiTRnF8GIX086k9GQ16QQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604316277-14f51239.0_1604316362504_0.20756454348210407"},"_hasShrinkwrap":false},"2.26.4-next-1604320876-188c1848.0":{"name":"@xdn/core","version":"2.26.4-next-1604320876-188c1848.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604320876-188c1848.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Odld7T7HPBU7xg3GsUjfFIMSgZpKwbAmbk4uqiHak7AqCa7x8BG3pMQ1Km2U+HLsQsXZVZMTkjP8BHgY9/iDlQ==","shasum":"06305d3cfc17482267e86817dd988fdb7c7ab84f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604320876-188c1848.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfn/7kCRA9TVsSAnZWagAANM0P/060eEdy80LRAVbwBveD\n8dh+PTiM/VKgflLIWttjhhMe2g2jaZ7+3btfn1GUxQGPDQVz/h+fj2vPN30X\nLRdc+cHl8BbLoBJHBjd6fMajS/ZPjY0iO73UkqPwAK2NZ20B4moMxjNs4vkv\nkpNN8OGrVwkm33mOBZsE7nwd/cRPd2pcnLfQUoygy9zIXVgZrb5yIPBtdC7o\n8STpBXdeJ5+cNl7BUzuoueGZm6ii06D85DNQbEPz0Ar4oKwOApKb4NWGsFoP\nYAF5BwWTu7mFV/HjX9Hogwex1g/sYQRern26GomplTfFwDm4YXNBoMldEPlJ\nCBNQWSufJIi3CZqV9LQhkiu+G4dq7Z3Eg00G04dUJ7upRdYB+HYFIxVzsMTB\n1eHOtIwJYJEgf9MMIoLtEoDfFleU++B3vPBX/htysHvSjXD8Dq/jwxi3rL+7\n5dciae3XQN2Gf2mYjkmLrYW/wqm6AcGY7X6UES0Otbjkg7FB4zxENEnuKGda\no6CFHUvT03vfJqlFNqHNHaqVkhn4YIPw9N0nUBGleOUL0ZqLGPLTQBGgO3ie\n7DOnBhL8yBZn8O/szPpCGSpwHb05/mXQsgt7Qi8zmYo6qRqbXQcWAjP+CG9c\n0x6DaSFcU+Xdr6nY+R+YqfpWbCVM53ZtTfxzcLBH9wOtU0YZZNKpovkygEZB\nOkSy\r\n=Umvc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGEKaY6E00ESU2pmGUlsH8UhKYQxCX781LeTDIwG1oqxAiEA5wHWOQjibj1ZMjd/QTTF3S02IHbfYT22RgpZVqTCOBY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604320876-188c1848.0_1604320995821_0.8504492039417657"},"_hasShrinkwrap":false},"2.26.4-next-1604323244-382b3fdf.0":{"name":"@xdn/core","version":"2.26.4-next-1604323244-382b3fdf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604323244-382b3fdf.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-l9y/imSPS/TRE7UbhTQUfppFRO+Vm716W5ruBWNFB9u+GbYIT+hd/cPp7urUivNFcMzgZtUlWRKUtnW1saR02A==","shasum":"1f353c3c587cd0907ea2486f8113ccd39e0cd28c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604323244-382b3fdf.0.tgz","fileCount":171,"unpackedSize":625953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoAgfCRA9TVsSAnZWagAAqyMP/0W63QzcjYoGdXaRv0z0\nFDBFtXqjAC8xF24bu79v/ROjMFCEApo4GKxsVAjXinhWgSMWQ3JiDJlTniPx\nhKhfdoYHdD0rlNQVfbfjuW7JmvWXb6Wkbg04TWDMUpc1i4qdctbXfhLC1hvM\nGgqGOK0efK7lejONpYNeDRI9IA5IUbG2KLN4zEPhioyBol0l2epfzRvXtW85\nNy1LyiOjB2sdJIZA37C08lS1IsS5u7s7erCV6AIULa2k9fNjRIHbuRGrMOJR\nnFkMYctsR8XoWrRhCtccryFiFgzFIpz545TYXl9YYijq/VY+OMmmekCdHuTQ\npeV19cd7NO2Aec3iiK98voikuMX5HSMoEk2xzSnrEX56yLZvHqQtt9DT62Gk\n5Xsvv/AaU9vMBH1SPDViVKpdnqB8202lAJNOG2Mas9v1MevYyDykNdloGscG\nzw2YrJwwbybysCmHQ23mx2rgwuMJ0/MNHn79q/s4Ue9Uk6bwoI/24hW5vhlo\nWQcdQmIsQw5yClDO59xK9G1ykmgetY2wp0FgWznkTWPYG9N6rNtK9qRVNI2x\nJ5DTFr2+u/kotdhP49QpGPwaomTxKM4r9EDZE2UrEanpSR8IhODzerPs5f0H\nu1pMYCcblcsqW7BH3YEKO3D3ob6a7aTZIIGFm0Co1YGMBMmniNK5Qqid5wVq\n6xc/\r\n=muXF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmTokb1elrZqdEjS5bP8vmNEI6iWgi/B9SSg1Ly3MxZQIhAP1x/J1cx+E/3IuLtAA9E1HxAeTRZDEeKfICoZjLLCe9"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604323244-382b3fdf.0_1604323358746_0.9297740604096634"},"_hasShrinkwrap":false},"2.26.4-next-1604323405-53ce8ed9.0":{"name":"@xdn/core","version":"2.26.4-next-1604323405-53ce8ed9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604323405-53ce8ed9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-aOt0mPuIrvIvglAs5IxvvvbItZpP0lsblyKC0EgDKnRRkKlsTq2ignQx7mc32jNkxoqM70JioSuHVrNqJXoF1A==","shasum":"224b6909acabf2e76e3a0b50b8533a2e15391c80","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604323405-53ce8ed9.0.tgz","fileCount":171,"unpackedSize":625953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoAizCRA9TVsSAnZWagAAAIIQAJhNrIkIqgNqrSBtBwrP\nz6kkEm7ytendcZF0vEpJrUHJsa2b5UiEwUP8CIZ/kB8Yrr9yaeqHJU3vEpI7\nXxGSsH+GNCZUFFhbXZXChsQ1X/ddVT9Vi6bc7RiDkcOgM3y/Fa3kElliklCS\nJWzCb/fFRihYJPtKnG4ewLh5wzXeWsqAEvhnYsdLZseg53HTlrBxMAQFVzMl\nVrJtLE4C3boQ+wdxK6YlKrOGzySt/4OAdQK7nrLl7wjDsumALRWWXrgifBHw\nykCC0N8hs8ttfwzIis2UCQMI1Oy1CrqfaL1RZ3YpcZK6K2SOxe9CghL82MBd\nhcIHE59wfF2Px0xqKju+sEqVhZSRF5ZJxIUWoer0ELo1HBj7O8WAsHCYJa5t\nOecr1iqAyBan+IeU0WlPixggSGb6xb2Hw/2TSXKrVLqU7UMwREpC7bxqbOud\nWPaCNiireYMSn4UygRbnNnlrqiSGWN3g3SyFj69KDEJ1xWF35wgeTXlIHkpd\nqVCGWOFH+KwAi0EmyfLA1C1q5cuinyVpOU/Hg4pIkVoA1vcqsE3PGMhWkdbj\nHP+y0V+mYYumomZiTZA29DrvoYRJXRD9mTOGWR1YYZ8AljZnnlHCi03VOZ0N\nwUNJEsyj7E06Kq8deNQH71+axUTsKX9uQKRReATA0VAUlOveaUGljRptAZbW\nS+tW\r\n=DeX8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE4VGoqh77YMIY1TZ+mEUhwNksQPsKRWWInIai2TAT+JAiEAp9R53FthHcogKT/RRVXMo9y0J5AO4hyNRQdTtF0/OEg="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604323405-53ce8ed9.0_1604323506471_0.9423798486179242"},"_hasShrinkwrap":false},"2.26.4-next-1604326514-29836483.0":{"name":"@xdn/core","version":"2.26.4-next-1604326514-29836483.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604326514-29836483.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zw8Ddu+usdKEZdEvsA/ESqR4spx/vbwG9/I09oZKeyPiL4Xbc4ZD9qKn1cjEBPIns/6bgz0xZyRDRgn/Y6M44Q==","shasum":"a0ae074db8b98bcc493784786900c71f4a40ab7e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604326514-29836483.0.tgz","fileCount":167,"unpackedSize":632908,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoBTxCRA9TVsSAnZWagAAgkUQAIP5tmLwICBAqrMy0By9\n9MLuinFm7RXmJQZ68VwjvVOveghiAl+iDUDtAoDc7Tskl/JOMSb6YaltU+ri\nyqu02QzVWQkvC+OoFmlc3xMI1+NRyPEe7Ccwjwip/CT33qxCOb5++QkVDmKz\nNhS5wKP9RKgnqVrpim6CDggy4LCW/SvijM0rPeV9KBA6kJx7Y+oyTGIoIUga\nSCIlQTgQCid0XszqE5/QAkh+IcBPsajeeDuZzzHEindRJW0U8O5Ucoi8MLnk\npO0nM+9WUc2E3c0/gomKzG6pVbvhxtOAQlhHZ+NJnMGDCvbKD7PrjU5X79pM\nd/Z2ufLqknAV+3LCA8XvgI8dz5L9ZcLUDrrEVmsPhNyYDyhiAeuBTgnjOxDX\n2A8FUw6Qa/38e1EvfwGzLVXJF6eHh+avq2ONuzdOjNLbPdwEHC7nFAktnPCa\nuk/5VQ/tvcweHvTlQ9EPHuQfauL9oRAV9OHrObivR4Sn1hbOv4RXtF1K4yXN\n/JhYJLISn1hR8CJzuhqzGI20iEksGzpvttd7GgQVuXXSh6duHjSh6BTRqjgP\nmyvmJ+2LYjVNoNabsQ1dbr+UTpPwiTK+2OGlWAB2E2H8Wo7qFw4tRQoQXNhV\n53395zZ/fdwAJJGHYi9/BG/JFRIg/TTdl40cW7e6fR5s6+IA4p2MHs8tYKLI\nCkDN\r\n=e4tX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnXJs3ZxffVJ2m23cFm/rfXxyRu5gHfVeoU/O/hOd9JwIhAMcxYup1C3ChBjmEWe1RVg+Ws1tngyvkOYZkva3iTnLl"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604326514-29836483.0_1604326640494_0.3704317580348373"},"_hasShrinkwrap":false},"2.26.4-next-1604327444-5c840f15.0":{"name":"@xdn/core","version":"2.26.4-next-1604327444-5c840f15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604327444-5c840f15.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kZwO4pEjTlt7LswbYxS6M1DiycLElxG/RHsiWnTp1KRigiswweOuMUc3dPmTbxUaEMhmVgTJqqW/xXfTzepa0Q==","shasum":"f112fa3072ee25d42ec563a447bf6894961709f5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604327444-5c840f15.0.tgz","fileCount":167,"unpackedSize":632908,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoBiICRA9TVsSAnZWagAA9Y0P/1ccIWVTUByEjSEvp2mb\n9/Axd5AFoHOLZuwvTsukc4invq/Htu9eDb1Pm0MAGQZwHoZplXt++A6cUC6c\nF01YRMGw34lavrB3V7UpUrL6A37t0vR1WPScSA/SVnh8MNRtmEPjs6iyoAK2\niF/hsUxswvLIQGV8luirTM82EWJhibltQVVgpVjYneosdI1OM0yJnPrUaZyR\nscRM/FUKudoARQHvcfTAb7ZrUvbtZvQQ5IULVX3szTuXqGi+JJArIQAvWyRJ\nzw25dUja0Fip2K+SDzwYcrZRZe0D2pMNHbpMX3EWq0S18LE+GcJvobDdbkTm\no3HoSRgO26R2oaq1dlh4SGEPUql6tUOwt5LRJwKqplFCkZ9A5HPVrKDM0jFJ\nFoYeTUbKQ8jI19qdhyLQccLtpSuxIA2Ss/hbFhqA1q3k5RopcCXbuCrUGp5t\ngKIHWHWOT54SCYlFNqeg9GnULyYt9OUGFbkDhrx6D7jor4ibF9ImDCe8kIjA\nrP0bp1H3Zcj2CsaatMavKYot984p3jlqm6mHjg0Rr6e6yR0grx98fzPJrhfN\nC6WiZ1ec8GZ1+/62naK6aEMSEX1Xgzwq529590OqUndm+mCYT9qDtT+IpPRk\nUm/dtvjWIy9Ytf9INoNzehMi8qTmEfc+VLm/5OgGGgNTiEqSe3sI5p6rmFDQ\nVYnU\r\n=Hepv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB1EqEXo3S1WLfcdjiKAj6bZ1v7ejcq8dEHEIJ2CKij8AiEA9e9wp1fAKuqpgRZhGm9JnLqCPN2wMDPYUlhC/NDdsUY="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604327444-5c840f15.0_1604327559705_0.9495302650509252"},"_hasShrinkwrap":false},"2.26.4-next-1604329623-192bbccf.0":{"name":"@xdn/core","version":"2.26.4-next-1604329623-192bbccf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604329623-192bbccf.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-z8WcsKu4Nt/INuwP0UjXlPppz6CTal0JVUhG9AIJgUe/p1Fmy5G8kPnyEZLUr224CKPJgqycOAw0nCnqUYUZWw==","shasum":"035dc22cff77e7b01b83335dd5f86f04bb9c3b97","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604329623-192bbccf.0.tgz","fileCount":167,"unpackedSize":632908,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoCEKCRA9TVsSAnZWagAAlzIP/0yOm0tu0CTf00PuWY3V\nrSUvCOBjQ89lW0uisiOV1nvDQ5jeLu88C53GJzPzN+MVB/ZWoCsCYEMx+jl5\nNDdQ+aWbFZxRK39b4mpEgOyAxYZPNs8QHs4IPLXCa8BlmBHLr5Pd4UQL0+XB\nWM5wqOFATucVHBZQVR9bttfnm6VkRszzLElKF4KqKpHVdU1lh2sGrQsBjkzW\nAhLA28iLNZrRgSwL1mnF0q5zA8d7Wih1gbVdBfbW3nKK/gdfj8wzu62FKuoL\nc6T+qWZyma8ZLj9BJxKaXGAJfqwijIVHOmzpbzuLxM5buIOhkUfsEloXljXp\nvxJ9AqQQBUlmnNtiVoyH3EvCvkf5KbMG/+mJIPF05r+V0C9uow7BEjQVwZUR\nLs989J2ipY49qb34FjBKqZO6HEWdEXSOtP/1OCPoQzs4rOdaJJRCGDjBLBpa\n5zT1w1L/qzZSZ27hmVTtS6IM288Fhom3mbuLsZLzJSG99plpz9ZCgJbnjoFE\ne4nl+h5/ffedq6nxz7nFUkMYEB0mkOEbqK99VZTTsA9o8l5cUQFqcUIZIpny\nEorkQ7yhBpjkeoqZaZnr0Z/FXuQnL8wEe8VZxVXdStIyF6wePoBn5yJlvun4\ng7uKhjfItYtFriHdGzNyTnkgIIKbQlxK7Ku44e/9qdZEpYL+Z7TwAr0OKfQz\nVn38\r\n=Fzau\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG4babiHeUguMbHJ5pr5LLYsTgWtG6JN/ZHlMMNKH6sMAiEAh+PwGDJ6H2V0hGhXc+fIJtRQwhViRQ5+V75bM8xVQeo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604329623-192bbccf.0_1604329737568_0.21169317098350948"},"_hasShrinkwrap":false},"2.26.4-next-1604332523-a8bac763.0":{"name":"@xdn/core","version":"2.26.4-next-1604332523-a8bac763.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604332523-a8bac763.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/q1DB4qTQTSltN/VzzpEJNHrN2g2Wex3/X8wu9Qdjqa5u7mFVPOy1qUPS9r0J3bqPC9mVwLCXxiHaSnPBNi4Zg==","shasum":"588f04d6e434efa347329c3f198bcd76397c5a22","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604332523-a8bac763.0.tgz","fileCount":167,"unpackedSize":632908,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoCxcCRA9TVsSAnZWagAAiNEQAI5AhiMNCSOp9OUUaT/v\nWilttyvda1H4WcD0WZyjSC3dO1vux5YLw0s2I6pD5rrAoc1f7hyr/ZNSZiTt\npnLl2IYJdJXXP13ZtkoLArVu3Sr3TqiiVqRM3m+d+DoqecXiuP48qOv2ii2N\nrzlJp0IyYCypfRlbVZJIymemc3VR3e/SFaM9e9z3L+XS7y9aaeF1PykDFA0d\nrf2ulUqD9yUphKZgepJ7MOO313QYJfjx1TwPkLoDTHP9W28hBxjja84rxN4c\nN2TXYO5qd1Tto55RmWV4Nluaj+WU7CoRsKM/cWj/Jarls2pBz1j1DPAMUvg9\nbMNQaSha7e4Ds3ZJUTmos5kd9z5N0GtLCNtdLBZetrDJnYSYbTyZdTN33HG0\nDsXTIOfrp1VvPkbiynq8DkOeYUOAiWVsQ1UxpICdPfEwCKgFD72vIm0BuVtE\nRVPpvvBkRwdOaDtu3o/SpJH8356FgG3d12j5M5bf21+1m0Hcwws+xG9RhN+G\nXFzk6WzQ69wqh3W+5sQhCvCwrgZ2uU0sOSD/aRAiL8UZx2EuEQjFidtDWg5Y\nmiXZTlcmMJtknOekQ5FXVEmtNk2+LeJFF7NM46dEq4DV9DNL6zjpLJ1rAex6\nVhPKwor98ubBuPBVAZ1f+o13Loh0fzhHzDtBnpDMb38ydWVpRO9JvCbJEkpR\nt5+S\r\n=eLYr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDnBtN2SYR801ZXztXFZeRBP+Zepr6BtLOOKEbEOcuK2AiEA0a2z2EZms/tUYmbypQElw9s9fxkNlpUgTMQw/uUCmO4="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604332523-a8bac763.0_1604332635820_0.6789787921959842"},"_hasShrinkwrap":false},"2.26.4-next-1604338068-bc6c8ef0.0":{"name":"@xdn/core","version":"2.26.4-next-1604338068-bc6c8ef0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604338068-bc6c8ef0.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-m3w16GYq1RvJ9ON5frBfMaD1aGBDVkWpWdwaM9sZjB+DBLpzitAKlu9NC8MS+eBrEeA879QLSewv2jsTR16pzg==","shasum":"06285a4da57bac9a84418d8f95820609c56a73dd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604338068-bc6c8ef0.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoEINCRA9TVsSAnZWagAAmjsP+gKRY1bEcrmY7cYAmm4W\nusOYBlM0bxFIfXxpXRil4XvOZgRmzvQRSVWbjFJQTqM2A1uSahyfh32HIasF\nKZ3YQMY6S7cXVGwVQXxEpOh8g+GJBI4In+yUXUcL/drLZYIelsqfZPub2K7J\n0SpKXZyDM1zXMR3w0bgBNKRrvytG/rE0NrGWyU7TFZ6kuHGxq2Ij0+ySZE4V\nxDsLHuDzQ6O3hMNpPXzJ+uH60wP24iuRCEC9mPwhmeFmi9HsFFht1sU6QYy3\nB1VaSZKnCPznZfpXcSA75+a6Ao53QYlCU18r3MAUfcE/abx7I71ej0Wl8wqO\nuzlVbkP8Oc0z6jCuvDdRh8l/DUYtB08o10Y4Ix2Ws7z3csuEzn0++OEMcGPu\nvp4XqHKERPlmZ5xTFze8e5p9hFqhTqdHNwWVeZex3kDq2la5ijdPjd09sPCU\nYaRUzmMhXaKSHurYWxu9baHy2tKxgD0ZNNQPYhUak66jalOCXmUiVC1cXlx7\nNDo0CPiuGbVOiYlQyVvOoD2mIl8uC9Q59JRpz2IzNl3yZjHIfhJN7EhJNJ6h\n00cD2Byr1l6W25vvU9aA4tEpIpQgyiofEuI+KZz5PpxfQZuktbPj/If2s9zF\nSXm9y/5oD6oxTqRXnDPiGA0PAOHSjiHbGhiMpMo9FbELc02WntArH+zUNKSv\nqD/E\r\n=Rdaq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHYDqRgGRyhPaRJR/dewFx4dsbiTKz3rCfJoTWRlutXEAiEAsx/OUi7vf72eXcAxagyD9+fonOH1C4Sh7pNHgq8wNmM="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604338068-bc6c8ef0.0_1604338188492_0.9759609190846905"},"_hasShrinkwrap":false},"2.26.4-next-1604339843-0222f29f.0":{"name":"@xdn/core","version":"2.26.4-next-1604339843-0222f29f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604339843-0222f29f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-AfHrYkAW++H5I0yeLsnnmKlLKycFYhWPaUQ89ZH8RjiXtmxksw7ChlhRsAP2FycjlIkvSCuHCftR7wf/TIDuKA==","shasum":"efa3a07119600607a34f7d5a851f3b234bc9d338","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604339843-0222f29f.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoEj/CRA9TVsSAnZWagAAzN8P/2USK/RjCAF9B6Vclvvp\nIonrkgJ6X+KzI0+NrpJksoUjrnlNgCP4C3MiqKm7PTqkjRMb8eSAxQWtK/tQ\nQa9swe0SOthEs1qz3tnykKJSpBJEw7i/6uqtB/vZDCDh75Ch6aBp6FvTzH73\n9lEqOex/QPgINg4Vgjgkk/009n+Ualks6FULywTxfdfmtlwICnpHIlD8qVVJ\nZScSjoIXpPg+Kxd9YdS6XKuHUcwdFYplKP+xQkmkL5HHs64flsmW+Yp3JP7K\nGMITQBQeiRQjSp3Nq476lRT7mBUKx/ng6V8/U62cFoa3LdCcW/GciZt/PH3Y\nacAbAJr6GP1XsJMd8OY263B2CBPEkpAibe3viNQrOHSkiXp7hnvcq+OAJ//Q\nay6L0W/x1uhYLJh7cypVdQ7Vey4TrFwWh9HPZP28DkSPxnSPd9lBb0RafTz8\nqSp8IiCHaFJ4iL3HaEVM5YXu+i+Lf4CWCrJJC0yaA/R+kPEnawVyjMiLYfCC\n0++iArrEqcmIimrDYdqDZS2XP8W5kiTQOuAkfI/amuuyRjHXofRKk/PN5gWM\njXChDkCLOpbVQHC8uG8NSnERMhy8Ld3WWvVV1E5VXlPbQJJD0udzDjQSiYxu\n/1/joAoLY9QxvwhwAXju5tEwi64BcxXB2DirKAcAJWa/b8GCXbAWMudIvGuE\nZGI4\r\n=ulOa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqLnLkE4jw9O+br9m/ha4sP2z+WUH87eTRJ2FlteatPQIhAL38AwrpF4GQUHO9+c+gpmvVhzyLSbNri83cfZAN8vxn"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604339843-0222f29f.0_1604339966853_0.23995120419784755"},"_hasShrinkwrap":false},"2.26.4-next-1604343360-d9e622d5.0":{"name":"@xdn/core","version":"2.26.4-next-1604343360-d9e622d5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604343360-d9e622d5.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uS+sE9R04+xkFBVNOcuifWAmp+Ai6R7jrTWIjbM+DjN7Zfdoy4pM5IfoW4z0FnCbLczu6dfvY6NlypwGcaXjlQ==","shasum":"8f5f4bceaf3eac0ea4fb593ee9273d33f72f3992","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604343360-d9e622d5.0.tgz","fileCount":171,"unpackedSize":625953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoFalCRA9TVsSAnZWagAATJsQAJ0QFiQJLUI29RYtaid0\nclvUJddN6228gILeBnHcy0U1rZ1uQVYI3/KZRwAgRgQGapvv4kDr6mXRQUou\ntc0N91r6nIKkysqTRTeauQ80pPxnZsEglDCXaURZrcXLAdLOLJfUo3hr4xv4\nib+2CHEYVNPPxUG63VyNZyzZQGt/fKODVRSXGW9m/lvO3oxgKF8J2IAQJkH5\ngoabPZRl/gsBTI8z9DbegN7sflVTWgFmFwJY3eqrfQeRvSGDrI5EjT36gX1n\ny8HoItsdHQxJxpMgu2Uc3vSkytaRhhZMaDM43+FcJPRCq5X6lSQaT5wNO1R4\nzBx8LsoY7r/7Jd4GMDae2H1rmsHDhZkew7quxXfqhwLDlh8q/6J95GZ/ET6x\njSnrgnjt3OxEMTFkvPRdH47sWudWTK8/762X7L7tF1j4rHSp921mwHJxMBGr\nEGp+f3ALmepjUboBnZzqI5GV1H7dv/tWcY9yXz/MQ8AGgrKvuvimL9n/W75k\n+IL07GQ15MML0LHklfVkuOjBFaukG2A75svF1sr2F0A9UZuI5CIbv47QLSkB\nUKuH7iNcbhUs/B6l/Lo5rJiHSH6DEPmtB6/w6Yuzw9KvsuIzIRCqwbCkArnT\nViCQ5nllofbZplSAYa6A/NWcBdpqGkOhG2JiHn/ab+cd1YsyynOqZlOWgoGF\nEnGl\r\n=e/zQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSqVqQC1KvmNjK7zn0uIPKTCjsDNkgNLk6W/DmwmLzpgIgWxmwmzXst03skMvLZ99is8OYQuB3SMc8g+WiUcM2Uyo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604343360-d9e622d5.0_1604343460728_0.04049665873298536"},"_hasShrinkwrap":false},"2.26.4-next-1604344862-d9e622d5.0":{"name":"@xdn/core","version":"2.26.4-next-1604344862-d9e622d5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604344862-d9e622d5.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/MxUPpjUvXJWbt7H9Bda4aOysjeK9jmQRB5k3icA/WK1XD9k0ophKWMfkAbGf1304dBovzMbI4t4ZpwomryzvQ==","shasum":"0a5ae02414c997edeef2012254d935d238eefd86","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604344862-d9e622d5.0.tgz","fileCount":171,"unpackedSize":625953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoFyCCRA9TVsSAnZWagAARjcP/35fxIxWhYo4TqWq1sy+\nOK6r7NQxOzEHSTiKQDOYDGXNWLfMNxgKFeoVIPd0hZrENw3AA31NYywFzO0Y\nCN1zjFV7vL+FGBbNHsXE6rrFDB62mMsOXvJAYkxVYM5GQm3Io8LxagOcMJmU\niGG6hJBQIoAjjYvrFZnKh23HOdS7VSBkpatGM1CW0XuQDNEme6v4e77tiaUU\nf7c6wYG4yTYpFs6jnrZtcrSHFV8NleX2dvalxnfNMF/tAs2PYY3GueWQTt3j\ntEOT+1iBBc87J4bdxK6BDeUmhqcXffmNGCD2j2CBtIbjzNDIxsDak1dgR0lK\nO0vqXndzRF7qOAvxh1fuONxaAvHYWm9LdYpZmvJgHUkWTWqWsobgBudsaByh\nCAaqiTjiGBL3Lxeu+PxN4wVFxNbevVSB4hSTtmeM+wx89Mtm2ryNJc0ilGVU\n0IFCm1SbzG1gAMNOYBiOzYH3TjXKbB1thnyY+Z+JmRgAzuAaRCeSKx2kgzbO\nWYEREupY0UOBcFLG48aDLXgUz5+nuDFJBaVAcg3aKJIrNR3XwJ+RhrjNeTiB\nUEdcQokK+dJEr0BYMmpJSHnQ2xVkBvP5+lXJ3fm0oXi88+Su/+6TjYb/hHu4\nMg8eNLLRCvaVuHPNlMujKEPjf8V7rIhIgfEo6iNKvkOeZebcLrM3m3pRNWCB\nUHI6\r\n=n3Cj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAZ/3QZXoZTHTt+yOWVVddigGPfP9EZulbV9dnMAEu93AiAAn73+hJ2oW4OmUhu8ByEhR0XY5ZnGd+1QOc3V8HLroQ=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604344862-d9e622d5.0_1604344961446_0.6091618135812185"},"_hasShrinkwrap":false},"2.26.4-next-1604350721-971177e1.0":{"name":"@xdn/core","version":"2.26.4-next-1604350721-971177e1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604350721-971177e1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LYaj8DGMYskpHKpjoYq3qL7H30CfszrQwDFCdffu9HDqb6e6He4zLL+pQECf9w2waRwd31P3Szw89fnJSNurVA==","shasum":"8f3baf214b758c62ec90f0779b355091f9bf3b82","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604350721-971177e1.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoHN2CRA9TVsSAnZWagAAJisP/ihx6VNBCaoZTlJjB+uZ\nXtSH7PYFqSfUR23Sl+t1IFdlclJjapyT+/p2qp3JpVCrLSO383maS0hMrhXK\n0MIobgNXSvM+GczbMVr44Kp2xNNSIOKl3gETNRRk9VTtTaY0z7SejOQO4XSR\nPiMCIptAuJ2W3TjIupv9X6NS04RIG+Iurf5FYa5de8j8MZOFulACaloK2aM4\n9uaPJQU9aZBuWJEDtAzImq4tw3Qz2ZZvJBEeWHxvPJw1m+phf8qqn81JRiet\noPme6kvcXAs71KrxKxAHP3bTNNuFJpZYSJ2L1RDoCHvmWbTDGnkP72NpBBPD\n8MSiwER0/PiPYDXT14V9/T1L/3MxH5qYb4/zRryK/XTfFM7Lhudpp+Xhh2Do\nDqXfttWXW/TK/KkwIRcX8Sy8OCowDuq7YJvHoSI1eEyptRKvm2qR1z8GuXKi\n0o2NgJcQaGBzVKFqcUT8vIxTz+A5yQP6T/35cS/2E7cEsjbtCSanrPnFHA38\nVHdsaAKjjFJicL3Ske4kSXAr0TN8R6HcVz8qikG9ALLWw8IMbensstoNUz/2\nYxADv4PpNcSI0fgvSZKtBOy+B+UmN663riPDsSg0q60lIeNvq3sYybBLv0m+\nzU41gpaZwDO8ax4hjc56w/24ZdlDlS8qC1qmQOYaIzQSo10J5pmQw6WmlKW0\nk39k\r\n=6qPr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgHcv4Hh42qbw5KeFmyTC1H2YlzXPdp7vFGlMsQvZk4wIhAITMAqFlbZG5QCKu+H8rfzcqZKTdoofih0SUQ8OpjWtx"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604350721-971177e1.0_1604350838024_0.17612443764059615"},"_hasShrinkwrap":false},"2.26.4-next-1604354425-c05324ba.0":{"name":"@xdn/core","version":"2.26.4-next-1604354425-c05324ba.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604354425-c05324ba.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ldIweLoQ0t1zqqZeNaYpLjK0Q58qbIiK2weTK21jwXhoShgiLpyP87CVk5kSnGTI0JjiQiDVDaYdZ0Hyx2gpCA==","shasum":"d8b71afd2729272c33f7d415d90c8ef8ab29498a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604354425-c05324ba.0.tgz","fileCount":173,"unpackedSize":627184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoIHpCRA9TVsSAnZWagAAItwP/R9tYRKxaA3rYocxeE9x\nQ4zDfl2E0rxDpRbiwmlObbjr0VT21vhCyqiWcMpr0+KwdTrq1W7VmESABnal\nMt2vGu+Qh45sYJX48O8FNOOSntm6gUQbbXP5lsJjJJi48YKrCvIXyMqHZa/g\nZ2xNTIt1x8U7852sG67fUNI5pZ5FyAx8N2ZzugCxAkjjK7qlUxeubgY12w+o\n95u8P1YfE4lUbFUzBo6qaMwopAasQpPFWf58lp2YH/RpvnxifBDL60VIzTn3\njc+IybnNqPDAkh4YrIEetuci8LPqBknKonpoalVDrI6sxaJSwvXcng0Z2+RD\nbOldx/2n/pnNAO8hri4nYlO/jIefzSTEH9bUW/VcwSLalc0uYdf478pdHXf0\n0YGydS06S4weVGOh9+p8/qUORt+uWspQIX4nqicXDdaZtiCklf7s/wIPHFPN\noVEPIDp8GxBBAqhYY4IQ5CZkZ7PABT5Qi4cx2TJwYJyhnVb4G0uIauG+CGe4\nzq9WbUgaU+AAzqXhueUCbogX7GaJtZI5wYgrJHvEANJ3rfKpg1ArHH//hRCH\nN05cWMHVBXeFLdj52RDgmnkysG9HNFEt1aCDm1vjXHaIuZx8Svs5yGNJSqkS\ngnNJHK6BflfUoG1ndy8obgrje8lBiL7gSvfox6iIX7XgMYtPSO+ocHH7bJyg\nY+oI\r\n=5AF0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBscKwVHbQYKUO/hwwlEMACb327n1/5pfxisfq5hoc57AiANFfTUMymfF+vWFUIrAVY5PnGPZSJP9kpXbAPNEWfm3w=="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604354425-c05324ba.0_1604354536731_0.7960280569692166"},"_hasShrinkwrap":false},"2.26.4-next-1604354719-b55344b1.0":{"name":"@xdn/core","version":"2.26.4-next-1604354719-b55344b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604354719-b55344b1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rscQgoR3HKw3eEStRbv+ZWmtRpVFWx16+azNZyv/SapogvO7veaBV1G8P9f55D0SevJkSjSmVB/+xoJR/jY1Pw==","shasum":"c24f872899851732525533d553fa9efee787445f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604354719-b55344b1.0.tgz","fileCount":171,"unpackedSize":625313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoIMeCRA9TVsSAnZWagAArlUQAJmdq/6MfB8AmIptHcjg\nFj5sCJPc3b2TekOCjfNf2rPz/I/9uT2nQOOTJ0Mox9mrlJOX4RdOx0lgimEa\nRFSGYSVviENioRlYV5kJk2y2ariGawZGSzsnqcftPt6wGsjivnWoe+IoPadg\nlFA6gY0nZbcWDn9BczQBBXGtZCR20UElZhuRo5bf4NI3UbqAk3UhKAf9ld/w\nrEr7JLOpJHs+8ZJxc00rZm0GMYpm5BgtDfqRLCdK3yrc1mEfTjECwBNw+539\nM7gQuPwN8VYrDB6Dd3qYCmGiY1eCdFMA1zScjdEobjGma186X4ZKeH87V3HI\n4e7pyUxdP6Z3CWMMn6zF27quoQf0wAtpACXZ1zH0kTCwyThLI/q2gpOuBI0F\naMzbh7RY5LkS+lF0o+ZgJq4LZrfAU8hjFB4bs3oRbbGO55g6lvgwMW2aS3Bt\nHmpkRtYWc30kov34GKc8B5xuRHWlLHvcXK9RcN13mCeVcfrd5wP3WT7K8iyR\niw0pi9H5YNpA7YycGnKemInS9GeQW/1We/uAbfNEtIk51A3i8BePUevZfp5w\nAB9J7hsW+DdAZEv7SaXtevfHTsygZG0hA6/4eXCHPrlexQ/bcUw2GgAHS7rC\nz6TjSdnLgiSoK1GhwNlOMnp/hOb+/Bp4BYimi18c7O1zc4EyaOmnqcMZP5nr\nvIVB\r\n=oMwc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTQUWz2KAYVvrZf3ydZBmjERJI40dQ2Y8h0YrqnAqCtwIhAPUJmK1vYejUrP33kxuxQFgr1rEYxqLIWrttbkmHE07x"}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604354719-b55344b1.0_1604354846356_0.3056512087475296"},"_hasShrinkwrap":false},"2.26.4-next-1604399637-9e2d8ac4.0":{"name":"@xdn/core","version":"2.26.4-next-1604399637-9e2d8ac4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604399637-9e2d8ac4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tgANrZYZEQopOVhdHgStoDrqEBEZMn6w+GnaAyZ2J+ZYlWk+Del/805LXxJhKnp7+8b7LtFugd+H7tehH5Kk9w==","shasum":"bb4d30b09118b2f39f28b2c62322ed053c9267cc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604399637-9e2d8ac4.0.tgz","fileCount":173,"unpackedSize":627184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoTKcCRA9TVsSAnZWagAASlUQAIeRWWt5F4vqUg1l5xq0\njej9V89pv72DMO+NTqRxbmmaXtBLq5QA936KH9KfF12ZzNpzKJURRwfQ4uuy\nbY2kLQ14Mx9SFrS4pzNnhSRRB+iY8wOCpaTzP8QVItnhUTIqdUZmShBGX+4U\nKq41lwL07DZeX0kHgFQgPtiVMiz5cscmDf5Xe2P4VNp3rp5JTy7T4Kz9ib8o\nNyuA62L/dF/r6cwjc/K52JaUC3TgALKj5da2j8J7IBPvFGiR+Eruh3q4VZsl\nmJE8hfjTHMq9vhaok1TMb9sdVTQbL+wDT5z5QBCq/LoWT7bBjmayjlf0NngP\nJMk3e2yJH+/sU3QG2cw5JxRG5tprWuVopQlovM8rA6HjZDbBAjweZ1JV8bmW\nLZ1yzErGDB/KzMfDaComFj8JU+NBMtGoZGJvhelK8RpT0Ga8HmjQm6D/I3eV\nm8fn28zUh8pXNitIRy7octJmO9rYjROdF63h0fhLPkmB1Ldj+5kQUITKtvJq\nB79b5GCZ0zInaYgrk07CO3YaDAAFbZBbi+qRcyIYnVuoxpGSDyi+1Mz0P4zm\nRLP1wB43YsUGgeHZ1gGOTL45hZ1S3pCGdRY8zv8DLt/SVPo6kn9pA9TREIBw\nmwcOfWFicXCoV3AqFfyFxiybXzmUpYfLnreC8f+2NR6IC2KF856569nMomdH\nkexL\r\n=Oi8n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7XJWQwZ8ISDGjrXHHzLIvOGFzCKXkZbbWpwtlM8DGPgIgEkkk35gPQidc4dSMeyb5ljatY5DC2QlXAaJemY7ityo="}]},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604399637-9e2d8ac4.0_1604399772220_0.06184082906873978"},"_hasShrinkwrap":false},"2.26.4-next-1604408298-dd1d3e16.0":{"name":"@xdn/core","version":"2.26.4-next-1604408298-dd1d3e16.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604408298-dd1d3e16.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-K5TrtWp5pAAd+moEqioJgkJDbjjUKd2yztSWkc5G9uWG6WCUiDjs12yILef0qeCAFsMmVbLLCxN2rrNY3Xqmdg==","shasum":"5f04937f39112c1d8661aa33df399c837c5c8765","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604408298-dd1d3e16.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoVRwCRA9TVsSAnZWagAA3eYQAJyzztbSKi0UgN3ptSLy\nDkcUeA7z0qBsA1WD3hMaOjb57qRT4qeUjNNsbaWSBDK0OjAsWmWXEbK8L0la\nEWPYBn8Ace3WdDHZgd3L1JjRwxqVmOx40TePKKKuvZHhbTK/EF2ABZX8pfYa\nByoPhaJkQzenfEHvrKKzYRIpBWi9kpHUUuT9oz6cLlleVXGNGLpk8v52TNVq\nlqHyUaoLuA7xBDMkLcY3tJRBgUH7XWObsoZ7/6GFB31muw3F8ZmEECn+O+H8\nl8O3wJyJMp4fXWztwkXjwBOt9NlHcBMdqOUA3atiYvqUfpOpIKMGrzWwWTBt\nnsx2YXZLunrjFjMbK2gKer5nSIaYXK0xDvhz2E7duhsIQpkH5UhZX8Z/BIPq\n8bSRJs1VZDgYZfWaiiXn1kWM+kLm7LXiEIqMdZwKQzVN3ujS853yn4BhUkGZ\n7WF3jcIo7XP8g+WC0mo9isFO4gASAYp+maBET5e7zCC2Cq00lEkkVigzl4uE\n4AsX+r8kmxrJ1XE1xgX0c2xHEMGW3bojNZWd+h3bD/ftEps7q31Hi5Z6KLS6\nYBTyoNo3AHyTiaZjYrMsbVesF22yPa0v8TWG2YQtv59wP6fgcWl6rlepPA8I\nu5RSaPPvoEo6DZtllRDhYetHu9HGySAA+wCyuPLLUVAhlvVSMY7qbhzWvgNr\nLJcr\r\n=ByuR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFal9WVhZULmU4I+GinT8Adne+m6dZDPKkzqPH9l554AAiA/jHZG7jPeU4YVYAzMNQnfye/SyFpWYEuXt9b4Z4+oyQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604408298-dd1d3e16.0_1604408430617_0.7844793180363345"},"_hasShrinkwrap":false},"2.26.4-next-1604408797-97ab878b.0":{"name":"@xdn/core","version":"2.26.4-next-1604408797-97ab878b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604408797-97ab878b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YXAM7NQcbrcKw9wL3Ck1RncvYIWblxEGLj8zmb2+/ZjHB1WzWie66QfIpVrWf+G9MuwrTBuKlob3f/ZbkEH2Mg==","shasum":"e08316a8b131b50e7fd26a84db92304ae64d6418","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604408797-97ab878b.0.tgz","fileCount":171,"unpackedSize":625403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoVZUCRA9TVsSAnZWagAAYegP/Az5la2ggGKutFVoYJYQ\nQ0Tiv8NRI9bslGnJtLYHMPD/nBNy7dnSftqxtn9BR0iCAWSLhXD5RjEJGMK7\n0rdm5YWAQUbRP/wyJM6MQOadFhIR2XeG0wxCHwOA40BCKEg2CJtMt9j1LkXt\nHzQcuYwEF4G1AxVZc15i/h5759TaXs+FWVtTXIgtsSg0s+8Mz4uPSufpe66N\n6UcpNNcAbZr7Qgv22ZWk3XFJEkjmSdDoj5xvn9rw3Md34ZdF8eggk4hBb7Wl\nFIqURJ+namLLIBQbbmdwZjhr5qU60BJ5yjTqniKW1jy6ywJhAmiCKsaLsxvt\noHYWz/jmWrOE6Goix1JXutDoK3D2suqb5zluYDOFkL5+BBypclDpiK1bHNcL\n8JZR2Gh7KTsX26KbTF56/Kyg8V/wcwGwndxsTPGErqGFJKh07ddynZAO8j0P\n8M0VEPVdbaZ9unbv+UhZD+oxhMS9UVh4GoRIajXEJal2tY2wMoKTcsYU/8me\nfClE87gdTH+OrPqHG6cDBv2bmQQHvH+EhY00Aje0vkQaYBpCtjIbPr5ie3JN\nFVMBO9RBzN2dI8MycuZknQi7dpz7GHGQ6PYUm3he+S4m66rWZzvqzVFq8jGD\ngxflkJ0+Dy3i0cNAoZ4ADHNXWiCkRoF/9xk6P3qDuST9tMkVy1ea+z+2WgZT\njXKs\r\n=tvxi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBqsgQZEeravuyzrXMxsEj8NTTnZKQFCUrD1dEVAemOwIgX4NIv3MoZNF5UyYKAp5RFwb3HjCTxML639dg0XOga0k="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604408797-97ab878b.0_1604408915687_0.40043081552392357"},"_hasShrinkwrap":false},"2.26.4-next-1604412070-34441dbf.0":{"name":"@xdn/core","version":"2.26.4-next-1604412070-34441dbf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604412070-34441dbf.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Lo2ukR0oXoB3nEdlJ5ie25oaI2BN45pWGK7h2CyLWCCosbjmYZhNOH3yvLwk1dJq5FZt5f06el92oBSddgg2GQ==","shasum":"869af748a327efa846efc0f9a7dcb9ec44152edb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604412070-34441dbf.0.tgz","fileCount":173,"unpackedSize":627184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoWMiCRA9TVsSAnZWagAA87wQAILwyeyXawkP+zvucyVW\nD5YmnYsjcUmPP5NboVJ6nXNDaZ4Q6kySb9YOK2/91fdmZGRQyP5bht5YDLhF\n8bQ1unlbEt6gVQ4WHSQ/Ht8x8HXn6h1DDerItKPLKlJq5ko8Vyxzkx1I3pdA\n2jXpsX/xjE17CajWgHWWUFKRorgBMk1flflfz//QJ7qlvtMxqdm0vNsMKlQ+\n9SxP/w2XyFlv0Y8WvdD4WfyGIEkKEol/OasltOy3C5EuPcw2KFVXZSyDzxXL\nECf6vbCji2NW6xAYo7bLr+G7snkjqMJFi0Wts4uVnO+kVOr4I28MW1Am10Hh\nvUiR4zgFbqEweWWvkfxp8aoFti2ZzrjjcwB53JxNEyTsypsiPCK2P2IKLqUJ\nGsPLdQMGeNp13ijZQmRgu2+ziGAhG5fl90NIOeYo09tw9PPSmm05Okxv9xy6\n6pnkDvzCJ6DdzQTLcHSg8Da2CajmKV9KgXpytL/cSO+t2rTCYEazqjY7oDbl\nODOaCqBU3PJkIt+lyYtCIzPfYKVAGQBGjx6lRJUtau9UerUZLFmutq6jQ7P0\n2Kx6qDneaPbxdcsnvgfH7TWKBfsLrVhi0Rq9huzgJRtCm3Oi1G67MZT6P8kb\nEOm+ToVvH7YyOGc6tyzxfGKJsmTVXAu+Vr1JZek1/rRzSFSfP/2RTol29693\nLbGT\r\n=xTdM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgU/4mWnZrsdxupcp1LgDOE0l0t4FpayHLIbblRrhZtwIhAL9E0fOchzvESYyjHrcACgf8aVt97fqwXmZmUBRVakFG"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604412070-34441dbf.0_1604412193802_0.38098572241634177"},"_hasShrinkwrap":false},"2.26.4-next-1604413177-5d6d1e8b.0":{"name":"@xdn/core","version":"2.26.4-next-1604413177-5d6d1e8b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604413177-5d6d1e8b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NoaOFTLtTvSKHHdaCxZWkTBWHkIj7Rtj7Sm4rS4gzP/w//9pVLfoq0eHg39XfLL21qNaikalZayEX1/1hrM3rw==","shasum":"f720d4508a6a3570558fe83beb302fdb5a86b27f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604413177-5d6d1e8b.0.tgz","fileCount":167,"unpackedSize":633103,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoWdjCRA9TVsSAnZWagAAZgMP/irvdUvDJnD3dU8GQREK\nWNQTdLkU4WaaC9EMJx50Chut2VpZecETx9EWQGAdIlSDmoYRmTnUGb25hPLy\nLm9lxITop0IDSH0gaB2aCGjBCeZ+cIJE/LtsEOOtmhJyS9arR+MMZ25i2dHJ\n80Z8pAE40FYy6GPAl+5KFm95BVCiz/LjdNVrWPy2YDERP6PllHiVb+pdaYuT\n3fF1QnNIZAbWYWI4AgxKAWLUXVeIw4Cz4qZjHAjgeE54TpJ5xMM2appltiUM\n4srN0lf1JPwvcN7M9Eq0bJBZItNjRiCzgXuxS1N2KFM7B8+4XdbgsDVILk6o\nLwg7H4Dciy3qowPc1BEe2CyQl+WUgTNzfr2hihmg5EdUSnNl+MHB/75fuJMX\nXubZ8cK9gbS36pNyLxDpDplaPPKTluUP1h0hgjYY8ivoa+PoeqseCOvv5Ibi\nZlomecjo1o7bucmm95sTkO45I2h8NiiIF2tJf03Jec/gmoXCuh0gctQI0wxj\nGtR3ouQPvKUr6rHd68Uoex/cyYJrLs5iZhW3q3+4AlbSJxRo0J/sHRe8lpip\nZB9r9QT/2OAoF8O1QpaNZ0alsx6ib5NVy8vUeg+uGtXYMhU2AONUasVh92TU\nzj7wIAr/rmb8/TGUlIlJxvU59st/CdAynm9GWPAZMv2fiwAAiJwEnYOWZArK\nmxKd\r\n=IaiT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICjvgcjAhz7nxk0LomqHECL5RKYdD2UdxqdOxzKfilH4AiBYbN29quBaudYsIMmAzkMbwuThB75XQ8otT0/H4oBAsg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604413177-5d6d1e8b.0_1604413282935_0.958294765733974"},"_hasShrinkwrap":false},"2.26.4-next-1604413178-5d6d1e8b.0":{"name":"@xdn/core","version":"2.26.4-next-1604413178-5d6d1e8b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604413178-5d6d1e8b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ASbvXa/23bsYAs3d7cwMkgP2kZrOAlL+lpzumLlZqeMkfA1msPpVvhtUcLAek6uwAjD8EIlVAiueZdaBQB7Miw==","shasum":"480e97aa2a6517ed06ed2f7eef7470a97a485d93","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604413178-5d6d1e8b.0.tgz","fileCount":167,"unpackedSize":633103,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoWd+CRA9TVsSAnZWagAAd8cP/2csPvjTHQtRb3fTfqy+\nFMQ+4qUk2wXeiCRiztv6SZcqAwleXR5NAVDHfaO3FffnsIK2eF0PTTJLv2b2\nR29aEumo62tE3l+ckWWOb0Y61KX4q0c4iQcBraXoFgG9PshLkOTzU9meE7DG\no2YTzkyfMq/du+HL4lrVCeI3wfcrEXQRSs6Wy7OJk1g+qWlyStbNgPi2FJNP\nTxrPHm3sIViNrTDAdjf563alDN27mi5oTrt+udLlWHrwyLXPxfvGWIx9ZAvs\nLC1Yj/BkI8UVMeyORLNe+vDHmbTV7XZ6WijKQQS9Zu7bTnvBqXVgQ6AU+Ibi\n43yckPplMYEMAm0z75pjNtzq8XV5UKq5CqDahZKfBjxi+9LD5YMljCG7J46c\nqC7u+pZo2p7BA/cDamXyihotl7QHJCxmrpL00EdiZ+hAnj+A8n6tSrp7UR6K\nNw7MB0JfNVuA184XRvcJETxgxnPstzsnLIUrA+F/jUJf+dCadLNLMcBlVKp5\nF/4pA8lDRbf9DaQlmltAALELSaS62/RNcj9YAfKcNdIY29IBrirqK3Hcj0dU\nYXPjaku+aNBWtCvcuMFQvn62m4BI31qQT6knLWUQoQ1ukTWylG32oEquFIzO\nTueosyA2mvU38KoFLKNsy8aw+/5PTYJqkuXZjwvIxP07LBTT5tm3LnOO88T0\nZyUP\r\n=s5ce\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4z3XPCBYDklgwSvG2pbu//H3HYxgvCoXa79/4MlZGMwIhAPlB5366JaKgV2rFeBSBW6USCsZkY52Gy8sSy8NABqoq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604413178-5d6d1e8b.0_1604413309975_0.7759482091642622"},"_hasShrinkwrap":false},"2.26.4-next-1604413641-8ac0b15b.0":{"name":"@xdn/core","version":"2.26.4-next-1604413641-8ac0b15b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604413641-8ac0b15b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-z39X7OR+5qZ8oLMxFjwb1QYlYmKncU2f/9HrgkFtK72iDR3miodztpvTBOSq7n+2l1cIew8siMw4hpgkcrMVdQ==","shasum":"2526a6e4f621ad90d771f2beeac91a24f4cc00c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604413641-8ac0b15b.0.tgz","fileCount":173,"unpackedSize":627184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoWlACRA9TVsSAnZWagAATrYP/00oy6mNVwioQKQuRJZP\n94t3oLe4+awS8AzOlBKii8cwpX1pknA6jCtmaj5gYyZlktfxGpssRIs6p4LY\ntaXfFZrcDyf7yJDcOyn5pPPx8Z3exmioooNOLHOQECd7uusaSU9xKq1sYEJP\nQEij2CdXbHEocwla2Mu2EU7gi7AmqqlOhOCliGU4RKYhGbrti2oqwT3OphEj\nBqUB6GEnTWkIPwoURBNlIzvG9woXU22xUi8hsV52mQKmpaRQK7Gd7qyOMfFX\nKdzyfLfY4vlUXB4KvgTfcjdh8S9DWHWPTLVFXjzA+eIeu2N441F3Vi8bqV0L\nihXBeRlxfN8iUvHbi/cs+VeGrza2wcqbOaZUIILySpO04de/IbVJInq5ASYF\nF+Jkg/2k6Wqe93tGqHIgqNR8UMLQ3lS1yMQtUqQY8b50QLXe6OnAgEzyDb/1\n2r7HsvsddK3Y51MI1/NDFEVjpc+CzYfQlIKaQuJ+RX1Zg+C8hSWDT8v3TQn+\nAfOHJQ3QZSBFfl1NYUOdOQBRamXxtUsxk4QCRZybLv2iPne7U49A6uJurJzA\nCIkGq0YDEdG/AmpOA1JW6tgXRSW1RASX1MoM2BBtJLY/7OYPcZIj3AyP3eRU\nL2as2bGiCf6UP1tMATROgij418zTSKpmRXucu5e5FyZqFk3IJUR0b5sCMIYu\nTMwW\r\n=5gkg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDif6A1WsTvmPlxVdbIidFunPD4impU/ByJY6HzhM7ZxgIhAKGePdK7v1pD/CADf9Z+U4GjVChkclKIps94AsPMEWLn"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604413641-8ac0b15b.0_1604413760086_0.23299000909579903"},"_hasShrinkwrap":false},"2.26.4-next-1604413700-3e4514ae.0":{"name":"@xdn/core","version":"2.26.4-next-1604413700-3e4514ae.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604413700-3e4514ae.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zj2AYyCNAEGybc6LBZiHuFEBOYO0BOnKrPCinJK/hZo1BqHWWfnrIBhZ5KEQFkiz4eose3j3Q3QNYSAAmAH9dg==","shasum":"5fd96c87442345015830956605e59e1e05122402","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604413700-3e4514ae.0.tgz","fileCount":167,"unpackedSize":633103,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoWl2CRA9TVsSAnZWagAAAeEP/0l7irDWtynusCb29cTU\n288R+gCmF/E7d02nu9DE8N90mei4Mp0YNCOVtLrlOC5InpoG9JkbldqL8Cmt\n0Wmx+oDREMt5t4uWst2eb/jzNstvIy/hs/WvurGl2sEW5t+obuQVhjwB6CYb\nzNyW0MIOctw49Z5D+yG4zpdJm7MFqdZEO5NEhNTdQ2t86zyIbGKZSrRylPhj\nVO+vcBuFtH97U9iHduwYUCv+OuLgEJwafz9UlzUZ+lC4HxbAKaMRb4vJQT5C\ny/t4mkCaEPn5g0FvKyEUvWwO0v4telRYaxkkyOPyRnzZtfygUQAhSubKCjyz\nhtpeWSb3HNBYC0OW3TcMQtqCBt68+GivyMpAnkIlOIJwwgON0OfuF2dcWyU0\neHB2XVNXpaHuhKMEnYh6n8SpJ3iPje/T0Ahs/aFpIhJ/qprUpGI6CypGu2NF\nJbcoihrlz5aV7e3bHgCRvYU+xLCbpFgBf6UW/s9xu8/92irLFnk/nkrecQ/e\naEzT98kKHoSiya01Zb0D3QO7GpeVLRRtZXOQ81vUVGvK3zRhJX50TvaNxryl\nP01a0STpncG4AU1wvYWH7dbxVOVnkebnnNBOT5G9NdXm/7ZRUd4dvEslIg9V\nxVe7KKxSPimj+8OlNyyrdBt9947eo4ExVnj6/1v8dxUhptGIRCQADnUGEYDA\nKktw\r\n=QxUm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICAuk0byMdn2OOm2zL+r5LgN+AENU4vMl6eAj6ezt+/iAiEAsoAKAAu6ayCvoxqPrXb5JyhImRxP24QexMC27AFhLoM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604413700-3e4514ae.0_1604413814109_0.9842572108805563"},"_hasShrinkwrap":false},"2.26.4-next-1604413998-d5dc1c62.0":{"name":"@xdn/core","version":"2.26.4-next-1604413998-d5dc1c62.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.26.4-next-1604413998-d5dc1c62.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UdBOR24POLUJiSs8VsNUbi7vjGyL87PfsSfjGLWBAdWzLPSc2x/day9G3rfnANP+8vKumxWdyXUzKAT8L0+ZcQ==","shasum":"1ea2ea2e97f3312827a003f7a9b9b5e18103c04d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.26.4-next-1604413998-d5dc1c62.0.tgz","fileCount":169,"unpackedSize":634884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoWqhCRA9TVsSAnZWagAAkPsP/iQxo6qBdFRfTiml1qKV\nIhkWnMI8lF1CE1bQ7nDHNV4ynwhv5RaHZbCurkoTd1mVzC2rxWJsDY8Z2BXp\npTpBFIo9CeiOLsbq3fsJnuZMqYUKJrtZz33v85c/5aJt1zfR8I3zWr68RltZ\n+t6ijC3nr9ay07NUBD6L5Olwp46oMIwB2ML55NyZKM2H//I6pc6u1L+Uten1\nrXEQb6DuEcB51q/8yMD+tWezZ0n3t+i2+IF6WspsDp/+BO7N4zGCpja9RygB\n9CgFzL4440/So9hfoCi3lJV0oDa6br74vBhTBBNWSbj7o99KEaIx3BG3p7DE\n6cpQND9MsCVOf9OcbitQ2DJVlQPA//xe3o7UUyWvxPBHgo6jrKCW+6fVUMzs\naL7EI/uimj2KGvRZ0WF+bQ3uRlkI7SVxY79A8S6+NMPpKlazPsuNNGMa9qLB\nYQvnSQdWeLiiokW+YW44s7JUC0rVbz8jfMxyFdANE/ssvq5Hm2K9shbnwnJT\ndsuVQUuvKtx1EWn26aN6VLrnGefhKZVqGvHq2bqESJMpqVzy8yfvkAQDDjLW\nAy18j4WbqcxUNRXoOcDXG3TzbUt+Gki5cog5LA0no/Q3WHoO/1uHXdpO8lcP\nnYWS5g+7LmlRFtBdP7Qpf4o9l71YhGNb90wDgjmxXjhjNphXUbtNMvDZGmuT\nIROM\r\n=Ce15\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH21SkM9lozQvI2rtworzAlWuNaEHZyiYVpnMNfZzu0GAiEA2uRkGL/le3PuOv3SmN0GQO8BHs7C2yaeWNBhfNcPaY4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.26.4-next-1604413998-d5dc1c62.0_1604414112735_0.025883396367211153"},"_hasShrinkwrap":false},"2.27.1-next-1604414967-7227dd71.0":{"name":"@xdn/core","version":"2.27.1-next-1604414967-7227dd71.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604414967-7227dd71.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9NJMaGs3IFlSbmhkgSrps+H0gJybSp2pDPOpjEKeeMcM80XqxnXrvrvTd7PmK8fX6j+3Mtk1k2a+EnxRGvlJtQ==","shasum":"0442a58554a6dbb62405f8d99e977d500a2cba07","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604414967-7227dd71.0.tgz","fileCount":167,"unpackedSize":633103,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoW5gCRA9TVsSAnZWagAAbYUP/iIMmgq//eVIGlPDkM0r\n9L4az42oHIGpT2py14TEYiQ9o037+W3q4xb0TjwIQ3a2Lyi8RGGY3YC/i5NU\nPrnXMBD6PMpeASMblwb2yRFYBjCJzYvxCxZJ4amTqrruflHGCJY8KRw9URGc\nS4fBSo0n5hCtn4kQUJ8y3vcxHe258CeHwEdR1CG1V9sbTVbly/tJTOZTLGQs\nkSWkAHSq4nReMqdvb8NrNqGdmC2AvB5ePyxL/x0Ewq8QPzUYpr2VEApdfWIx\nfcPMqMlExfanrP3ywtb0KFRqW9Y6ThNAm8Gitar6CAEdUdvCtrdGD23bTl4f\n5Pbs9AE4UHymJWpZsp0wI4IWhMa4xRhUYVmjtQSCQ5MAUx7/bvJCp+gUzFe2\nTyl/3fJ7lyZsr0cFWMP63TOSpAjzHoo544y/UD13F8m6yxpr6kt1yCupBLsS\noyxg6pnsZC3KZdMwlwrcylCoyiwOVyKZu2OkJvvcwADTia4t5FhHZTosS0vO\nnPFzGToUTRoWUO/ajnhy+JDHPLBMrEu9kTgBzMkwvyBcTqM0v6+gTbeKLdwl\n3Z57hHk1k8JrSHfNO9/js6t689YXLYXa59y00/iUSpMTbjEw4CGfESlNKk0r\n0iGLAsWMArETe18vhtdjP2NirO/Ff3Fhj+6n98RXjVyRw/XMKKZ+QV+eb+A/\n9kBV\r\n=1OZd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmewBY3gpaCJd52DM0c+D00xYLlUOf0L1Rb0Wl08C+wAIhAN3apzZq2KsWWWf1jERnpS3QPTHnFtb5NumkF3RbfTmq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604414967-7227dd71.0_1604415071938_0.6703093796574737"},"_hasShrinkwrap":false},"2.27.0":{"name":"@xdn/core","version":"2.27.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9JyQj1UHMx4AK5sW4s20A03gqhEK2V7Bjudlw7C6HvAZ5Z86xJGXXSmP4aZj0EWh2G1zugCAJUoMOSMgcaDxPw==","shasum":"a21bc01e8ecaea5988f757cd96c6ec733bdc0552","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.0.tgz","fileCount":167,"unpackedSize":633049,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoW7qCRA9TVsSAnZWagAApGEP/AlqLgX8U6bC3zdglrSn\nRBlySQFkOJPzORw5FpFaQVm9K4fjeBaJSqPLADqFXOSb30dMNi6hFuwTXtYj\nb5i4CZNswvUAXgDx8sF5ynAGbyBciHUTqnlavGCNKvmmhLHREP3vkofY5Pc2\nNh3fX0iawRwdrhXinDQ6SrL3m08Cav4EtDC6UVZR8d6KpO4WkxDD/ZTN43sl\nuNNmB1R7ieT9dN1w51y5iByDmprCsoUwvBNML+Blg8ZveKnTXmBjRILXqKI+\nOOoIh8sXS5G0ISut8bP1hZ49QKECsSd44kpemVvx3ferYS9mVEkT02O4tNrn\nXgGxYApojo8quwUs/FfuLviSy0yVKt6rBHFOIqbxitdFJKyggSQ2L7Dsk6rA\n8AhmsvZU7i1uWj4jTsPoVjlfNaf1qgRGASgO/ILR9syPoCsfnMVGlEmNk/jM\nOzBd4GcboQj6vl07hcowkNxw6Jcbke06AwbFW6HYJk+OcfZN0MORMNZR7Umd\nLY26Bkg7gGCJEzOSXgxAB63qg40+ORRA8xzzjOyikG4cppg5C/0hjshPS06W\nP5W1iSfWMjpOc1yngTYSsjSae54IPeGoUQmNTghXi6NpD1eKGnnZL4At9pwd\nzIBKRTu0AmicJn0k3dSEWSZPLuVBJ0f2/TiBil544ds33avq6nXsHe1OcUQC\nz9BN\r\n=wkEF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDU83XGwAp116Ulkul6yiUTfq5JIzPLuyDo2a0aZxKwwQIhAKA2cLdJ6X3Xbmz/w3LfCscEExfX0gefPjmIe4q9KJWD"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.0_1604415209397_0.24965558938757915"},"_hasShrinkwrap":false},"2.27.1-next-1604425416-4a53aeb7.0":{"name":"@xdn/core","version":"2.27.1-next-1604425416-4a53aeb7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604425416-4a53aeb7.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-M+bLNcgcAqhMdbYhfBeY0kYkWDhaie4E5X1/XjPoWvedM7h04X/dzB+zQ8A352zsrOalPlvWEtsRuHKqLZDldg==","shasum":"3490d5e281aa1081ee4879af02f18d39a8a5db91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604425416-4a53aeb7.0.tgz","fileCount":167,"unpackedSize":633013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoZc7CRA9TVsSAnZWagAAoJQP/AyRw2EwHEXnQxkEr/sm\nLNZajKmCgIqk/d/t1iP7jb8b4VtzW+Q3FK7uXMFqmkbDdq4f1wbAWpVqDilO\nBRZQDfMK/ee+MncGpFLAnydVJC8xYkqNhzrvhouaqr3KveHjMSZ8H0nCtzLM\n01IM71A0/hObeSeeWwG5e2MBdKydn1BXq0GBB1O7k289osceaPDYMiA+RqtP\nd8NlCw5J5HYtdN/tsW9NpE7evWTPhU7+cedl4e3gMOE4AQJW0XdDOTAm3ddL\nNj8W6uqrXAFA8PqKToaE5n/Eg+1lDzIyShyB/vyntPmmKyYBGiFF8E6U5ul2\nZZSR0Y3e2qJpBu3q+CofU129kcsaNPsUw9tKjQg1/Fr5jAvCANlGFbF38oCH\nacQN1r8P/A75bVNBPRbE50gOCu51eM36+x/79v14dfvDa187vjQHF2s4nYPu\n1HmCKMHZtHJIA11nzMzQndBMdTYKBpkwwei+kgixMUKUMrsKi6TU1H/o2amP\n3YQiBwi+mXTHfTAXAb6Y7fmugeb8fk4HrIl+xhlbmNi6v+qFAOSl+IHvJH24\nPkPRJhH4Q9cfEgK4JEd2bIp82xfP3v9lpdbSeT1WagJgLKXtW7YusMNSf37G\nRynyb8ar61/kwKsYvjigVSsTvumM01RynClyWlPU4I1pfFg/jgCBAOPaDL5c\nZn0G\r\n=lJfb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2i/BjKWXOnH/MCFip4b50R+0h00KyF4QpHs4fSGRgOgIhAMOCDNqi1YEe2rBjabCzGGkpM2ZwgJNM/qEnbAIMs93z"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604425416-4a53aeb7.0_1604425530330_0.06354223269550308"},"_hasShrinkwrap":false},"2.27.1-next-1604428707-ccdfc873.0":{"name":"@xdn/core","version":"2.27.1-next-1604428707-ccdfc873.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604428707-ccdfc873.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-b3WR6E0GDZa55mTZia27Qaa1re52iiICIWNGGei2lwiIwKw7qufAcaUREW95tSEVczbBj5EQVAbubZJCkF/dHw==","shasum":"a76d77c8f8e7eac885f289d96ffb90823a5b9b0d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604428707-ccdfc873.0.tgz","fileCount":167,"unpackedSize":633563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoaQXCRA9TVsSAnZWagAAO+QQAKK+5YWOUe9BzUY6d1dx\noZzxm+Cg3n9G9Eb/jJBn+eSj7sgi50IkLFsKDJe90YH/AalA5tVUvq461bEW\n20d+T2tLC/IriO0MF2dbHupmxphA7OnZ2/QTqiYlxQyZmafoApBJexrAxbfb\nzS/nXgfat45ct+PIX0lUz8Dp9MbLZtSwOkhNAqt/4E8KaAf1hxXTyouXR/dY\nQgLpBX/bNfcM+dUTxq7DQbxe76WcA0Yq8SH3G9f9DnLEm0hqNyXVxQCph9M3\nUE57PH7pkQ17yK2Kt9ZbYMG1e1QFDI5uUvQ54X82ArmDcutl00Bp3CtlYgtp\n6i3jrOygkXdnYFQHII06efPEzvpKQYcMk4HojewB1qahDd0/R/5lkoDJKJb0\ngttSqjwI/R2i/DWFb5GRilIBZRizBc59DnwINCZUuzufbhm01IfqC6RG4b4O\nHVU1vwVABDtFHqfT15JkDHZkxVOJsrH6pBGRDYDdSCYsXjIn5StjVS0kdZMp\npmrKpYI6qKFu3qdAKgp1bK48DHDlaDpRZ9zcyAJef2q7xhyicqY/BGY6mHAF\nkg4f8Tx/P9JgkN67U0FbeEZqykrv2wEcD+pJnxlUM8W8gq6qZ9Yr7WtbNLB3\niME7OsPw8p+CxPk1jpzTHXnoWWDn37fdJfjhTtZAQq1Cy8SvX/O+MwLjzd5W\nVbGT\r\n=SIjt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDX32nN37KYbU8NQ//xfNVOTLO//NwbbjlOSPwRHBe6UQIhAJrtockbtDKegAZhc2Z6yuapOYaCIBdxImbmb1hD92Gq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604428707-ccdfc873.0_1604428822521_0.05887319145919778"},"_hasShrinkwrap":false},"2.27.1-next-1604436700-9235d996.0":{"name":"@xdn/core","version":"2.27.1-next-1604436700-9235d996.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604436700-9235d996.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+it93HWQhEwSfZcNsr1OblcfTbEjRxtWivB8a2gFsbMYs+tQASz+lKA8xbO1wppvq5Q6sIsVAGP3FCbI9WYRYA==","shasum":"28b4c5d8668a782b73b9cf406ab4ee6181291f01","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604436700-9235d996.0.tgz","fileCount":167,"unpackedSize":633013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfocNZCRA9TVsSAnZWagAAWs4P/i2CFuwO+HG+GrmeCOY8\n0X2Xn3/1kkCUu2Ukxws6VeB3BmVByM2JgakIpUv/fap+DZ/Fpn7+50xzbUAw\n0EuWPpzIgw8xoqEUplh1txIsrwv+/mSMAg8HSoTGV04YvGtbfGrdqgTbz6Z6\nb0mnJelNDO+BisV6o7sj4s9IhI8NDw7VtgZf7LSs05+y6TE7/dJ89XMeRL6M\nhR9Wol2EIylelh7oF90SDZsPntlbyS5e9T0uW4MwNHAO5Vn2eYc7UjsMYhXz\nY9AgN1e0NlEhZaPs/CLi1HjJAM4PEc/5VACjecdEbUFA2f5+NYMP/OuRJGey\no33byF1zXjmy08Hpo3QvTLrtmbF1O4D15r/ln+vwEnVppnN68AinmAhE0Xd2\nFUP6HGkvktu+z5RpmTloN23xdo+g0sV0Rq3Z+6foRT80DTwTvM++dWjQgRE2\nflAmqyosxlAhEVVKug0sswLpPM0HCZm2d7UW3I1fKheAApi0NVkT8/Rz0QLG\n9GESp1hb37HyujGlZJWT8kzxFo5pntOhlvXBRt7KFuysaw8DMfDaAl+qcBRH\nF/hntwC5PVveHtd1nXi3/wTWOdIVe/PH6io6IuZyXw9nnWK53zOWqYS5YQRg\ntiFpPAHY+7ZiaGzpbB4HGF+TCxb3KDOMys8AgqEZLqtBOb4diEXhRU1HmRiQ\nzsrw\r\n=iYFW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8GH5jLyzxkJUdvVadY0rw+ebmQbkOxnHZ8egSZS/N9QIgdEzJe7rQudr1SCoVsyytThuzETzzyFTzY2kFuyeuJ10="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604436700-9235d996.0_1604436825148_0.13547697376998458"},"_hasShrinkwrap":false},"2.27.1-next-1604445922-a2613b1c.0":{"name":"@xdn/core","version":"2.27.1-next-1604445922-a2613b1c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604445922-a2613b1c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-a6UDFLOsnoeJyB/u3LN1FRkRa3vcl6nRaeB208GhB2g5qhwO6SBPi6gPg9JqoduJH+x51rv/Td3B3oYUNvnqew==","shasum":"2f1fa59445315831269624463656f68d05e31423","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604445922-a2613b1c.0.tgz","fileCount":167,"unpackedSize":633028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoedGCRA9TVsSAnZWagAAYpsQAJgcZ2HBbqF6O/BvJfGy\n4+/z7yc8LHM0RGNTiezs478h/VH7yOdt0Atc3GkIXZro7aAx5NmL7uzi44UW\nazpBYm1ckzWpxuANbrZqwjsYBZ/t+r48p/jdtxYeKfTVMNZgGlRpQB9xePPi\nTCSaW5QFOlqrkknwxitpkcTpEBfu4PfESRppCC+Jgk0Hw61o9ndDGeBgxrwc\nhOgQ205eNd5qBg7XXPN5EUHDXlMEkeihYhkibDxJ5vmx4PB5G1IbiTmjrFs/\nWrC2mJram6y5vWJDelnCW2kd5U+6vjB14dsrt+ErZW4nmXWaVkOY14dPwrGz\ncI7BSoeYd5zUJk9THj0mxeuqqjtjD7NLOWGwgqidAqxttYQQdaUrj7Ba3ZMk\nyKvars3i4EllgW7Sd3KRjVmKYnQqgR8xhougiU4NQAb7iWjSPhOXcOBTo2PW\nkgP1OIqk7cCPilMSES4Vn3QSqQdgaF9mPVoLJZVj25M9nBiHWafk3hKt6FHB\ni6Nxbl77zAhWtz6yu+X9SlL9sK1GaM50wbxCdCZqZ1+M+avuA2LeeXnOW8sD\nwHpc/tpfn/7a8wJDRO6B94vQgmxtzbLUR7dn+Kc625hVwMI9jOTd8GtzFOvb\n6LmoFKY2flUx5hxt8jiuCbqnarh+DB2xYNgpa+xgLzajPLnD9RzexVlUYwSe\n7BAx\r\n=Hcr/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRYcNKAU5+gTXD/LohR4kX492fs9fL+qV7Zp5acEq88QIhANUZ7au/83BwvSDhFypvtoUvzUXV+7bFjEktpJSSSaN/"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604445922-a2613b1c.0_1604446021578_0.8730743025200478"},"_hasShrinkwrap":false},"2.27.1-next-1604446333-a1f7bce3.0":{"name":"@xdn/core","version":"2.27.1-next-1604446333-a1f7bce3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604446333-a1f7bce3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JTWnszvDFMFcHmxTM3M0N5GAYwGqoawr0GMEqfPaa17hAQooJe6/Gv0e6s/+A+X2xGnpnhCxwOWBWAGQRcIh3Q==","shasum":"14bbe2886a702a051c65fa5ffec45b771a22cdc1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604446333-a1f7bce3.0.tgz","fileCount":167,"unpackedSize":633013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoej5CRA9TVsSAnZWagAAtXgP/3FfmdIas7z2oUhBTNuX\nEQV5scxYaEuc9Ja/oexkQIFKNDzDpA2Pzjf6rKWGPceNorXwu/bA70ljFHuE\nWaHqYXST87BNiqSK3SwD3uBJN6bK10Zj3C4UH+ZisdhFNlAbPT/tpxU0g5C6\ngsuP6PHcy/z88qF4/t24dONuC4KKWL4jExZSfd2LhY0n4ZzskzKBSTzx7Mzg\n9HzilzpJBqYy2lTOFUDGQxg7pBdBcDiVN6jxL5Yxf1mqJWqVJ/TZJszdxHrL\nmCRyrBZHDtM1Fqow/GobYpeKNkxACiN+8swBVY0Fp8lraGj3VvlULY93WzIW\nDKT7YZ+TbyJJSs65zJfMfYqwtKdOGJ8QHYMjyDV/cEIF3D9LHdPEmRZBpftx\nx9MPi2FZ1a3es6dFxu/9UKX+jV8Hz3nWGMV+2BjiNOTESl0F+3m/YbNRfNzn\n4Nnu4MdfGaY1xUMQGBifj7mDvOsZtWeNLjAtpD1+Rihk6bjYJQuJn+7gVCZB\nQybRpIaTqT7blJbmpNqbdH8jyez2kvSOuyjk/IA38UuxCVyH4yZ+HeiX3aNG\nupah+IXjjWHbmEF5PfMEOBfNV92fDo1YjPwK6vXAhlnRTtYuT4GIsSENIb/J\nk2OO+T2YrcfMVL1pPNID5ghFFFquOGDhPwMuCpMJhLiZzGQV77j4lWncKyx9\nYUxO\r\n=Bxuj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGTJV5OM7EWszfgyFYJzpCH9qTUdUpSlC47uYmKESEiGAiEA4Nqd5NP7rUj4h7HODrr/c3BYvhro+kBYARvtzj4bFog="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604446333-a1f7bce3.0_1604446456594_0.5767849254004582"},"_hasShrinkwrap":false},"2.27.1-next-1604478197-95ff28f3.0":{"name":"@xdn/core","version":"2.27.1-next-1604478197-95ff28f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604478197-95ff28f3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CF6jqjlbX4Mzij30OahNvgBLWkdoHmyLRDN9fpxdwlE5y4I0s+7tK9+x+E2Q8olwCtOc56eF6r3kFy8houpZyQ==","shasum":"3034745a63f3e35fcb31cc2d9e8a3a834052090d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604478197-95ff28f3.0.tgz","fileCount":169,"unpackedSize":634794,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfomVxCRA9TVsSAnZWagAAEuwP/3/2ny5ZdXVqNk8+GJ8V\nGsvSXNLkgdCDLJWNKAct9BmuwPY7nX239jb+zD4C/DSckM6dgPaaBlsNkKy5\nN3DkbNbB7q0GadUaEPjiC9vX3jVs3q7RPCKiCw/XtaKh9cBQoSFU6VJIs+XL\nSlIvek4+0p3r0ln71IYaT1EWDGSzV11IIYsbTAyL2Eg1amaZTir1QF6hvv0A\nHpI+a+nbNVKS0vjIiBNpM5jQKOgayOF4XS6HHkk+XCdgY6dLt4u6D+vFUURZ\njW72xaf4oEu6vLtfAGlGKfVa61xp8XOcMw3JKZoPo9506w26jEuH+Z/mq4so\nimfke96jOjJUdBS3aFF+MpWRlxKYcR4qC8icbWcKlGj85WGC1bFeC9m09YGb\nOv+Xr+eN31JxCyCusGeT7p2bXetS6PCsRFLdGAvqsC0+Zm8y97wHYr7w0BgQ\n0CfbaMhWyma2SIVYg2cz76oToppBg0hnzkgBrgzVzFPEyqvd3HTvoKaLrqIq\nF//VGHBl7VC64JXdMf8c4M8DCsDCibKOOECI9sMFUupCg/8Qg3A2l7btId2R\nV/owIqutk3/OcIiiZgvLv53Br/wuZPvfAtvz3SBrebLrG/lw9WBD4LvKZW3j\nkze4xAuqiO2T5hOGR5VUyY2+Dwwxy0hdOeqg4mklFvXpauhQ9dZTkIPMlYAm\nDzXY\r\n=qzuy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE6MpYPwuwPMvnukmO3DX1ZdSuKbZCGikqLOWsCKwpzJAiEA0itUKP3JlMEz8p2YaO9mgICF/39fcC1TXXPbMxcM36s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604478197-95ff28f3.0_1604478320974_0.4974826518239328"},"_hasShrinkwrap":false},"2.27.1-next-1604482505-704474a9.0":{"name":"@xdn/core","version":"2.27.1-next-1604482505-704474a9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604482505-704474a9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-pc/j5gBupdcn3znXkU4awwncyP1yhs/VGqv3imGvpVKo68NH7BVOnFDaSlo4u1ehPIdbpu0nFOFwtJrd1u2fgg==","shasum":"18ad4fc484f3bb18734897b529e07f51badc4c21","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604482505-704474a9.0.tgz","fileCount":167,"unpackedSize":633013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfonY/CRA9TVsSAnZWagAAARcP/2Fs7UZ3YlBKvqQECD8y\nsTjm+/iq6Xt7d+S+kf1JGOXnZ1qisoZb4Oj8wWQSeBeNacMOgmw4r1Sh8YjK\ng3dNrthY+1AVm4Pvcaka+NFZ57O7oYJWh5wHP/o/NrWjys6UqH+7KUyCiVtU\nwsfekiFfSTP3mt6sO+KXpIRCQqSeP6nNq9L+dEwRqv3FZ8Sf1NCh6BB0jk8O\nyCWJbuxTSOTTGHVt31/bFZzMdMaoaHFEKzeD1Yzl56XOr6htN8ThnqNz4woj\nBEWzscpk3+IjbOKpzJIztzXxiEuo/2E7NfyLsMTVDw8+aVZOjZkEb2GqM2nE\nF8b+LRtl85C9oqoyVekIp3J+ee7bOLi3ztaetZoz1Nt3iiTODcHaOoDlEYni\nml5Q4Nf8wj8NbCa9/tH2xgAMJzI9oTDfc3EzsQWxVYUs1zyhu7kS3eK/382F\n1mepSOKXoLQlvR567fnl5HtyHh1hjTonn50+GBv11+1lkf4/hA5DY7zfI4/8\nTKzOYGQGVaegcrmx6Nc5Bf0XbfJSachreU9KmnGIC6zwGK+nlzL29JxXy0oS\ntpO/4z1C5cIGs0dJRkvuminCakHcy+vEQODFue1NyVvIlZUxvX6cVeQRN8Ii\nr1rdSRsrfyChK1DExUJUbM8MOnql4hCa8PYs0PfiDrEyvutYUhMlhjzC44Ge\nUpMX\r\n=JWDZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEijINQHli6w3se7Bt1/tWhOJSgjHBZ1aDaEkvJEvT7HAiEAxoXeN7ucIYxW+DwhEhsLqvHVrIKs6fOQEJY+Iu9GikU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604482505-704474a9.0_1604482622345_0.3574440153890879"},"_hasShrinkwrap":false},"2.27.1-next-1604487185-95ff28f3.0":{"name":"@xdn/core","version":"2.27.1-next-1604487185-95ff28f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604487185-95ff28f3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KRNQe0tJ0WXEcDo54AgWOasnLXwnbSo1ZM8mU8mekGGw9yA3uyap6QfXijI8x8Va7b5eRG7M8BXPXqoWbOOAkQ==","shasum":"f78daf3c81b5432f932bbeb0d19ee48ec859a9a1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604487185-95ff28f3.0.tgz","fileCount":169,"unpackedSize":634794,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfooiWCRA9TVsSAnZWagAAQxIP/j+YhnUmPwUGsEpmrV5+\niQZwknyMASHErHo/xmMStksQ/rdSikYiRzB4nM5PUWivPON3uhgVHe3oF1nY\ndS5zuJdoJAtTbmuWg8A5+IUAlkXk1+vHEBafjyrONYqEMRWIie2Xyv7ee31I\ngcrRSpxGNuU/DxSpkh8VvMzWubfjVMbSFiwgImtou6GYU/VMDoevcD38Ulzz\nSlbNGI5IPMEKEixZqc+UTRLB+9Qrl8oMsZOqD13DCWPn4G2HGh7OM0SN0vBW\nUHctRWBF6LGv7s/qRPu/B2L6q+2rE9UAz39LnxzG4lI3NSj3X3VTtE1j2hjs\ntg8FskYHk1VOhfYkuRMn13WqpOK93yj2oZmvc5n1qGEVR4BrlWKmDpluFx+H\ndLwMAE0DAjZRR/G7NoKM3J2kbtfOXttUE/yjM8OnGnDqiUAdJcue/IK+QDvN\nvVzM/+iCv5aAA1b9QEuA80r27x71jRHLDGSeeniFFpgV+ql6dBgU6o21x3td\nQmP7WA2CdujeJ9o9ImeFDp1/PIwNm7DjOcd+3+mVb+jiHsIiyuuMnxJFMevu\ntb5FF8t6vevupZIbxaYGBqy5xbUy+havbvRMFdM32H/c6PnJ9iSWhmjUOQEy\n+WtPa8JbqZJR8NyHUknIwLFT6rVyB9nGWqMjDU6bMHkcLggfeTRL/540nb+Y\n9ujy\r\n=2SqW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD44APjpsxolys5i00iF6ie2Tdv9vWw3hr+MUsp0m2gDgIgFHcsuMh5Fm+/HDaufl4UDAoRbNVChoMyrXFS2ywBJ44="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604487185-95ff28f3.0_1604487317780_0.041139158817350197"},"_hasShrinkwrap":false},"2.27.1-next-1604487287-3750cc8a.0":{"name":"@xdn/core","version":"2.27.1-next-1604487287-3750cc8a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604487287-3750cc8a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/WfOuK3bVJHgcedvIJUmazPq72Z6KYfftgKZ7bhr1xdIyBXHSplTP/vTAUH7c1Y4TFG3VswueqYxPoDZ+YkNNQ==","shasum":"3fe100f245700e803cf4d70548dc5b8563925cdb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604487287-3750cc8a.0.tgz","fileCount":167,"unpackedSize":633423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoojjCRA9TVsSAnZWagAAluEP/Ahjhd5Xr5HOIP1B5nNt\nHGGKdgwjrty1HZRdUof3J2N0gmVDbidJJB1T9YtzyDm9H5CDxz5l0A9HszLY\nIFOPFizBlelBd/1RwmqZ6FyCfb3Gxqu9vMOUP+lKDewRlHgN2BNRYRqBFt5m\n94z9zaGw6k6SJFgtl88+lbrLZHqcKvipFErLpwkVKYwIN+EN3dY60skxnWit\nL1raftlzJltHGNVqeTSA0x0XcNVHQw0QWrJAUDzSOzv1QO9TYvZM1KnpuKZw\n+xME0FTPIDirGx8vYIYsTbQYumvSAgk97gOnir5psRYwPwdG5PoQ4rPCaof/\nkoOo35kx9hrlNz9PkacBZWPTIZHqFvo34xFslnp8GpAt+uyGyS1tFbwkp6cH\nYbjEQO/jyoh0G93ZGXfAcAEU7I0aidkaKhIEQE2vxdK0J8wGzNttriTtmX4n\njlrDjHqEuY85FK9zMh9yjYEsiQp4MTYmhs66mfXUxPIT+9YnBLxvgBbd8aGS\nGpdN0kIGzb0id7IdwIJqp0sgskJaXCGj4ox6P3P1hGnKkHlSr2A/gVVOrnNB\nOnbJfiC8nCGJCLxCAJW3B2DWtGgp8OHGdLL0lj5PPsSOSC+mXC8gh70wQnMl\nrPAUgGM6I0uVDdlqxfRn9Wi9ABUnGRMtDkBTLSPjsH03wg9u1h2FhorGo0Tp\nzVb7\r\n=oiXl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHFRJLlICTwzBS4FFbFvihU5AS89bna0Pzm9AmBz/mIGAiBjWBwRIL0ar620goLErnuSxNKnlxCxZ5xH2Odz5eTnHw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604487287-3750cc8a.0_1604487395316_0.9417174882759667"},"_hasShrinkwrap":false},"2.27.1-next-1604487504-bdf447e4.0":{"name":"@xdn/core","version":"2.27.1-next-1604487504-bdf447e4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1-next-1604487504-bdf447e4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-L4Kgmnc/QIesX945QpXs7A7IF4xz8gs+0sqlz1URDbBxTS1igvw5dpjGFlE2DVECQAgC1kLOvT9G7WMUOY75qQ==","shasum":"2a20d3523decbd455dcf68ef76806418df1e1edf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1-next-1604487504-bdf447e4.0.tgz","fileCount":167,"unpackedSize":633013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoonECRA9TVsSAnZWagAALvoP+gM3MhIEXMYfSRlaF7Nn\n/kLfWlnH4z4ayStyz8f0kLC+PVZnD2hhQnaWctpVP9VZEuuxw3A0rWxJjifS\nunR/iH0yhH5Zdc4CCprI2gtn/+emCzDuzb47bUUO7nKkhNT9iOHINK8Ucv1X\nO7QilYJjf4T7+HHxgGuVB4eLvacX9JkfwzI3QEW0jry29W8Bdz+0MeVrUy8f\nHJXqt52mCqi48kd/0mimwP22109wIS8TfXv7rxZ8i45O+BTpbQv0g5MlWMDh\n5hNuIIEThU54P/B5Dl8XjKbPL0VUqtz1TyOKORB1aHVnI07Cywh5+Tje+PRX\nRzOCZ4EnLC9kmFZTPVtW6WdYKEsSGNDzJjXURrr4HOqUDuyjdHqeQfsR6Ctq\nvM/S84ig2I+z2fovzNfe1VEXa38QygyiSE+ch5fbFnUhGnbEDorX8FNRrEun\n2ohvZndqY3n1j1JUUXgRFuPjTlC0jrslbk573mnc9Np1sp0ZM8CgZb4mv6jY\nr5fZeg3cpkocBoxjqDdB2LhjTekLY3rG3NYcPsPR/UTO8ciBe3v17Wwxwzh9\nzBeOHJ5Ttf6aB6zHVBXxm1Io/W90oXLgRHYz201cSxNlhOm0QAV9IR5am0MO\njaw81tGH1YgDNuog7N8fBZ2osYE0Nws895O/ohESyUBaLG7qjp0jNWDWvcrB\nNMyC\r\n=QuI5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzrbxaQWKismSBs/Xnyl3d/HKy2XyhkwFu+Oc0cx416AIhAKM/ho5yeOBFCmLhZsXobkfJol+NSJ50te6mTch+nvUk"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1-next-1604487504-bdf447e4.0_1604487619711_0.7702727883589326"},"_hasShrinkwrap":false},"2.27.2-next-1604487530-baf27c1a.0":{"name":"@xdn/core","version":"2.27.2-next-1604487530-baf27c1a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.2-next-1604487530-baf27c1a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-HPPWzaDt5lUJcKFxQQ2VlAIEtuOi2im1cJeWCufgHoAuzJZl6tmNNlzbAHqFB8QNgzBQAfomZKz4ru4Q8k6Qpg==","shasum":"dadcd34cc9e3d91cb4077a43adb654d5ee3f801d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.2-next-1604487530-baf27c1a.0.tgz","fileCount":167,"unpackedSize":633013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoondCRA9TVsSAnZWagAAo9wP/3ZBoaIZWuhqEnSdofvo\nCw1SWc1x/wzjpfIBwgirzBy4bwy5LLf2sdBCPozAHJnCY0W4PC7voh03Hg/5\ntkN6Zou9E8ZIQWIuxlZGTTfHnwZ+wYGJMMUEFmcqDBM3QTCUwJS8OmhxLnN4\n6LmHbjndPCHteVRhNtDBEoP9SAIglAq7fMtj33Ge/tlieqhoyBZFfGhOy/au\n3UuBUWzisduKeHpheYoksaPsZ4JKlXOIPdBIRnn7ctjwRk+9uuKk8sbcZfrF\njzYyaX794t7TPk6ybUyw/NlhTp+sxex4mvDcEKYQszdOOOOmmWc7QhTdZwyz\n3YmP8i7tMZN+NhnyRqPJbodnXN5SABB1QZEx0IVDWEc4IVU2CkRb2m2M4FMU\nwQ6L/pZKs+ZK70u4xGcH7QhN+19amgSE2JVNxqkaw/HDoYRCd7KfoquZeWh6\nLSTL3sAHMDLO3g1LflZ4zElfyYF5n0NwyfkTLvnkI7P+0WD7p11FPfTmrIaw\neot/LK07tBx8NVMB2vkTzaCbJVKSBPra1plrqhKU2qKmER48PE3LSYqPSRcq\npxiV/F9He0iaWIX60SVB0rw+M6eOvoP5Ov7dK9IwoImy/Tnt4JvsrldlMIUk\nJun5t7IQjDweXx9/uH9jkIBYc3Qo9psyAPehguB+/bRyMILMqERxLf8dlV7X\nKet6\r\n=EYZE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBDZ0XPSSVvIaWgIjnltAwDHc729WFM8MTI2xZCJxBD+AiEArfuYR9XAh+6YQltp7sKpf+kgCRa5vqInofOv0ObizGM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.2-next-1604487530-baf27c1a.0_1604487644542_0.721989440420576"},"_hasShrinkwrap":false},"2.27.2-next-1604488934-2681ebec.0":{"name":"@xdn/core","version":"2.27.2-next-1604488934-2681ebec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.2-next-1604488934-2681ebec.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Lbhk7Y60AiwRXrgGGX1dLLvnQc6S0/vY6/nNXDEAOikjjzhEg6Wf5snMpIbgAvjBqSwraQb/dNWbHSFeTKDALg==","shasum":"6b57c2695ccd19951f413a91af0519ec1685f0bb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.2-next-1604488934-2681ebec.0.tgz","fileCount":167,"unpackedSize":633013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoo9dCRA9TVsSAnZWagAAHzcP/R/7XJkRI0VxaAS7sCqP\nfWf6mV0ne79An7ydw+KTvojSwfaAdSDJnShywa3g1TAtPLriNtJODadmhlsX\nS44o2n95sEn30PrVOxxJk7EJNqPKrMLQU108+7bFxVDnuUCq++akHgPyh5wS\nAVd/KBFB6A2+nUyhubheaE+rXy67r2aiiUdz0Ptu9h8SlbhyZiyL95DobroM\nmsJ1ajoRD4+boKu2a9nvDqQRdXLdOxJDTFcsomsPUL1Mf/NeDnFohEDH8LHb\nzeMY1FsLgrVC1MpxAM+Y1Ut+Xlvgdx5TXke3TWyXDUDgxTIjVxnfiJ77MaTg\nRlvZLquR1U5fcbKeLPXdazQTDirM2DtjHikKVSkAlL76VuuOqf2CLSczqlVV\n7dJe0wVYsiPj3+rnOusm9GCqV1fj7zGkGAQPEfOfKzmefhmSddlEBvuaG98v\np91eBh8dPtBseg6zagHPhlYmKI65tKuDvRuU7Vm1fECJ/jb/lyrq0k8jm0TT\nro1VTMdzABCOU1rFUimkoPC/Wsj1buBkVYx4YJUL+6AwU7O3M01yaU/O1HZS\n//p99qsosbSxU4gW2X1LZY6h/PtJyEc8f9VO2TNCAc9SdIpyIOn/bk104qio\n1rhPtizQ9MdGyie6s43nqLY/W0pZSWFKJwHMFH+QksYj59KBZ41TkpSMTUqs\neaCj\r\n=qlNo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE9Ohs8zNC3F9mO36P5NXLYw/YCc4qY4tPkURMnRCbrTAiEAgNh7Tm+mr+FrojiS3PuWu7yTtHAuQO3BXSiloBm2R8s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.2-next-1604488934-2681ebec.0_1604489052495_0.17659481323625337"},"_hasShrinkwrap":false},"2.27.1":{"name":"@xdn/core","version":"2.27.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.1","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/hu4A9B00PPcGOC6R93irKXPZs9pr5JYWRQvYmGeCmMYiAuwdllmfqkJT4gLcqArh1AtgwgwUqwOCKX1lqchXA==","shasum":"5a7d22e871ee69443caf04958c899de119d98454","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.1.tgz","fileCount":167,"unpackedSize":632959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfopBBCRA9TVsSAnZWagAA/QEP/Az3errjVCsa/C3/0XcE\nUVw1dKVFqROaF8kAFGXYYEWTIJ2NBnNg9eShYN2hnk2zn88cwoutlj+v3Il1\nuQ/jkTHfDdM3EBBHSUWxsbsUTFnYf3nZvC8jLRCoRubbWRk8Ne6a4/txe5Qi\nqwP5g3yuZQhBy6ymKNyk9nEcmE/6SvxALgRiFxnn+vrxbzops/BzcRdTBnkc\nb86NiRK9kzK4uurURam+IwVv5pVMMdQzCRCqJlzkeSxnuYgAqbNdqeL/r0aI\n7jDIcve9ARyFbSL2oZu87Zg5tpX+ekrI0f27gThrg3Aj0Ksa/+B/W1wfPlsw\nbZuCgUXLBOhzBPrC2brO8BFSeZlo4bVTeEjCs2sfzrwOXtHKM6TsKvv5xoug\nr0iLYbmEqm9ao6qGG/YGFrRh5Ss6YHJZGUp2xr9OG897vq1P5hVvtRlJlOIB\nE0TZjxw3oO+F5HRquE/zfrOj57cmWMN7o2mM4yrsQSAyR/lzBjwILPl6qJJp\nsSUAKWxQHQl/Ij1JOQdtduvekDMqKyG1D3sB8lW+dCaMVGJVNOl2biq57XHs\nvoW/rWQxX4ejV2iYikZ/mWk/ARLbR7lkxvdlTLAWmwoSnaaOXhphfkDdHXNx\nNFmQjzs6UtnViPtx+a0EvB/zi6U259VwMkSNWQQq/oMy3Fw99ja3s/a5gdjH\nDft+\r\n=BTWr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBXGcO3LbbHV5sIwAn41oR0cctmvjxGNEiNXAfT2aLcGAiEAuw76JnlqKMrIieA+GpNPP5urg+0O9bps6LYxd6YBOSo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.1_1604489280817_0.9883983171540045"},"_hasShrinkwrap":false},"2.27.2-next-1604489592-859547f2.0":{"name":"@xdn/core","version":"2.27.2-next-1604489592-859547f2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.2-next-1604489592-859547f2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-fuSO9L7fw3w3KmpRF3yrctUt2S33JFtxsmJ9uobewNpNElNkmjQ/j/8rtCKw7D2R608kFJdwN5HPYZA9zRzZJA==","shasum":"cdb77c37e95b7d4a2930c955273b9363c6f86ca9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.2-next-1604489592-859547f2.0.tgz","fileCount":167,"unpackedSize":633028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfopHlCRA9TVsSAnZWagAAHNoP/A/Ist5VnOHc6yWO7pxg\nHeg9Vvxj2jOsT7e7LdHnbRJoCDiQEWp01KzBUk3c5NnWHirL00ODR/aWB9Ty\nCa2L0nr3cg0ci19TGYz+qyxGmJYv6o4i1w8NI/8o3Gs8TfmpQTKnvgXlcCSd\nwkiCuNMV59wu44ofzUctxHKhaY+n/9CY6KHwyaijC705dgCslLYTHzjuqmEb\nJRbjLvBGzbGkqHW+i7a6vHUt3QbDyAjQa2kbGEPKVzFe/x6IoZbiYGKetdkX\ng2+hH9yrB0Imi0Mya+u9Y/dhf8CN+AeiMSPDQCWLd/21ilqSEoI6hMnM8juq\nhta7AI/JTgqaPpI31gvAotv4/uJatidodRAdFNnUwO13GObqssus2u0dRmah\nRHRaDJYo60yWRObHrYVpECRXD6uhADwqwRAmGT1UU7MbwSUDs1DB+o1WaqsU\nj2CW81KQMi73HmLu0DLydJU0PYMWF5efcW/dslknJFAXBtKQkTJ89ibNfI3l\n20qcw65kFd7/yTmKLxNYs1PEDwwuzYG51XFnx30FYYWXDFyuFt8gIk15AC0j\nY+dVhx7WUrocUy9xSLsJbqXLRM++ZBi2SUq4ZDvPwMHDQrpKdKIJnpuABMpx\n0q+qYR/Pch9A7cyp2kgCIjhNY2y12Ot803pXArTZrnAxaUoRc7sSr/5xkKZ+\nF0ru\r\n=2oBx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC51LJBhWhVqfwK2qYSfzYeszkSXvfThAZppOTAWnCNSAIgA2pUuehvjjPHHt8YTYxHKuNNjd0iSaRSR2lSVQEE1C0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.2-next-1604489592-859547f2.0_1604489701242_0.38969391814962706"},"_hasShrinkwrap":false},"2.27.3-next-1604489652-399b23ed.0":{"name":"@xdn/core","version":"2.27.3-next-1604489652-399b23ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604489652-399b23ed.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-84KiE3yiHrGWyV1U+MSSlAAvZXGJRdgE4bhS4h8VhsWf4vnOdm7LlaP7qyT1zKosv2rGDGZ4AozRJW2ORbh0xg==","shasum":"1d4bbdd7ae4bf0774ecdc922161c10cbecfcb070","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604489652-399b23ed.0.tgz","fileCount":167,"unpackedSize":633028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfopIkCRA9TVsSAnZWagAA9p0P/0fHMbkhEw6m6H2IvEI1\nm915/v+JGH9iYCcoRhTMw7znb3W5MGWnWI1S8tC6Odc8B5OCjb9LTaNOrLsw\nzVXkGdPkZJocuW2ppqgHaCu0v4yqsWSUrki9ACsQM0TMqNq8S8Tguov6DiBA\nkQ8KWpIpxbT2pTbQPG+WB30TgMZk2EYKQHDJn4NsPu7KycWu8sKtPKt1iBjU\nkRy/Abi+blzM31+5QrOvFE5rdMTejCyr/EPmfbn/HTz00OvZwVqK1he2K0eA\nQr4EmcV7/037BE0x2f87A9i+7cH3PCyCrHWZVAjiCE3a71BVQXl80pkf23d3\n1xxkJWzc8q9dAVQutX7HPqw+HYQBWfika0DJlVqd4FT45JqP+845dOZKY1eJ\n9/Riw/TKCZnBUnWxVcWXq1RLDsjdSBkYXFRquX5dUkD4oQM7u3d+KHQv4Jsv\n75JDRsB4ESweB246z6kuj4s9/i/HxXUnIy34vUh13rdIPaoF6fnvyO1l5z+1\nagCzbaPTRqvkSlteS6Ha3X7l514aWqO54xbVAxiA2bWQFT3fi7IEPct1+K7L\n2grRk/PrCPc25thLYHM4qf5NRo6DgJY2Nd9m2ooLyDmJ51GQf3bmMQhR2fSX\nK+k+SA9mfYxw5I2IQ8btE9O+zkuTE4tUd9DpvWSpCFsAHuKqiiBrrQPDHKHl\n4Wp2\r\n=MrCw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBxKAbHecKrVYEizMkEdpx/nYaDTCN7BI7/xM4GEeUhEAiBqf5/7BmRSxJFzqRApK632WXKLqwsq1PLTLOlTuLybIw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604489652-399b23ed.0_1604489763804_0.3959175056992337"},"_hasShrinkwrap":false},"2.27.3-next-1604491510-399b23ed.0":{"name":"@xdn/core","version":"2.27.3-next-1604491510-399b23ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604491510-399b23ed.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6XepIrUMU76tDUefAADFbH/VronaBMvPCYhduzQkh8SLFqLRRx9WDX3Xf+9ocQNfmt8m4WuHw0Cx9uihJSLJvQ==","shasum":"2453c0be053a93e94b828ce06380d63347d5dd70","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604491510-399b23ed.0.tgz","fileCount":167,"unpackedSize":633028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoplwCRA9TVsSAnZWagAAKR0P/RVywpaaQxbAyfSIF4YQ\nSxaY2aHnOEHOoLvEmaWetYkYhz3TzUWlLnSeBqEeo0hIgrRoaArnZcZ6n02a\nV0lDU7F2rVlxuflXt0mmzWBmhiYSAuM/mnJdr1mlKW1UG5C8a1LOB2cuFGKE\ny7LMIitbBE8dbH4H5DdtLkZva71LRhIwDQDhKpd4qVL2Kv9YdxuHUPoe2j5q\nU5qpco1hHE1fnUCW9pQMG9TlaBnF4O6DsKd/zBYR9QK760lNe9CsO93hVpX/\nWUJRqT0xc8FGBVnuyW+oRV8xLC+sTZEQZpDll1/yC473Du9Jt2uJTXsywf3S\nKYpM3KE2V0y0RnXtRXiF6q6iW4MST8Idw8Llj0zgA7u4rUyxHz9d4bvGralK\nsaKKRY4taD4ulnfpKHNMw/vZG+BYkhnlybXp1x3Du+08CEbULuUhAQ9Ac4+H\n/kodWeRUX5s4bYh5JPJkZW+kxcmh8V/+ncRYQnzgoAui0B+AaK9PKeU5Cqh0\n/ADL1eP1MlBZR/C7ZEK2BFqOxKbPHEXD3PqpeYZaLPLttWgUbB4V1ikNpSvK\nPJRRHgFwqAujdRUhreO/o2FjgThcVQkRe9w/Awmh6FoSvBWlE+khLVrK6WqY\ntY5EnPEYJWfb4omcWcCSXW8j0LJyMnrSky+FJ2YkNCnDE7b5mwLC4Y0aI8/3\nBRHl\r\n=awqi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICPCNMh9LJ6CIUlqkqXluwEO94TVnuqKknG91riJXbsjAiAhp97Mfp416B5iB1q7MxWUinyFj/rsxbk9hfwx5YOKgA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604491510-399b23ed.0_1604491632204_0.8975140733680433"},"_hasShrinkwrap":false},"2.27.2":{"name":"@xdn/core","version":"2.27.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.2","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-n/Td37okOGQzO/iLu4jYK4Be1tbZbGffWo3ou5Y5xaLMQOsKF0dIygmUOd6Hd2GDa8zf8OhxF9dDNyPENbYTuA==","shasum":"ac3c5d5421c7a8c7eda05736678647c3db984f30","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.2.tgz","fileCount":167,"unpackedSize":632974,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfopmoCRA9TVsSAnZWagAAskcQAJbVqnMmSPRr6Beqegzk\ngsg8iTOaX82zUyWd4Fg5LdX2RwqDGFb7Y/v8vvm+kVzm6fj7zWaPmdsKOvML\nAe/uV16jNjsGRAxMFtdfamvkaQOlUzfDj+rULx1YXBjErzilWKWthqDmRizv\n31VmcMyDZ/iHWlcunQk+B6QyhwOxa3p1kfjejvX+feMqI4ti7WvuVmOFN3wK\nII7TTa02G48/TwRgPfPgh3NsQO12kDrLYJA9leCr7pTQLI3KB1lEvfjJZMsn\nA6d09CK2OhwDa//mvynumgnRHgHfY0YS44eN+bY1YYTweZgl8rg0/LiK7A6O\nO08VLA0o4D79KBoifiV13fmQZQgW2Yi26mLiHpmxDf4lIG3SUbNAsydG8scK\nLxDUFMykGxxmnvjhzp/CZxAPujvYjwtY06a6sEPs7GyT89UFp9CfNlEZAvpA\nxKGf5jrRo4kTUHkcY3S9ABu+XDBhG53eWRWLQwtrJb1UNw5FIhtGOChUQOxf\nflcSkxjAgj6/11v5uZ6O7czTtpmTlmNjHgkdvdZGaKDErlk+9rVniOFdxCLw\n12EUbFqjf8Ft4QDeWBaL9xvjiGLArGgQnGea5KtyP57AsgiTuiI0jXOhno3y\nT1Z/VN5AT9PIb6byfqspmsQEOH5sGM6l/Q/9WK7eqxuvprOaprELfJFJcxXw\nPi/a\r\n=YxtG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0TSPgNRoBgRoJA6EYM8S4tsGxLKBi8xkIAt487ZLPDAIhAOj4jJj9NnHwn7ubd2r2xSkYfey1B5QuZ0T7PvuA5lHN"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.2_1604491687977_0.342835962609225"},"_hasShrinkwrap":false},"2.27.3-next-1604492797-48071952.0":{"name":"@xdn/core","version":"2.27.3-next-1604492797-48071952.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^5.4.0","webpack-bundle-analyzer":"^3.9.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604492797-48071952.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MGHMs/ZsLl/GhnJcfAgb18+VcBWdPS4IrzwVgh13YQh/q1JATXAfGnbQrg3jIVvkhLi41MMMIKaR1sUh622Z7Q==","shasum":"4fb2d5b82f56466193c36a23e1e516c6c5f6231c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604492797-48071952.0.tgz","fileCount":167,"unpackedSize":634473,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfop5pCRA9TVsSAnZWagAA3R8P/0ufTFmZQKzC7Ctmpcxu\ntD+g2OFlYbVAUhk7pHIydexggv6x8+ZwiksQTasMb5gMUUDm7yTDb9cMV72p\nmiYvfr8jwt6zbo6kLjxFeuJNqbY7NJcdfdRone4W4Oov7WpQnocn74W2V73w\nLjHinVqxj1KyEyVUXl+9WLbUt1ce0q5wJ861gkAdLpm7REitLK6MXyvgdrQc\nSTzdWpkNPV67N/DZUD80bbeAS397FErMdFG3jzRMhS/dpSGSCHZu1vLr/xn+\njuNuSoKwtbMHKTnywEF9SmD0HyDT2HuXkrD1EF6oCP81D18bPuO/krHAXtEK\nrhKuHYaF6kkFSj9QdgZDFJ48K9fib5tY3eVP6WAx8m4dt+Vp3dZY+73J3BFT\nWsd31uXDDBpxYturHbULN2rSBMfeY2NzMvRIUdNYqFLbLKE+NM/SHvQ6BezA\nS/TJi/+D59YYTpq7fDC0KMCzp+4obmAh9dWUngLiM30Gk8F3vmcLvL1Gtkgo\nCOD8Fq8QD3/sSWXbq1bbTDckDo24a/fPHxDmG8pt2XKcQNc+M6emqH04KuNG\nAmw+SIYLzPBl7yh6ffhq5qDunSmMxKxdDuQZTMbQpyiJ/hKzcSzNaT9qsi9j\nvtFJrpbbE5l+A0vJKbrSOfn6+06BFqf/4xqzjKxPXH6ptxvVBy9XAn2IQ0Ij\nIvS4\r\n=Ty6F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/PO+pZu+Z1u6LQBcDpIWjdVCW/UulDuoNh357F3bkdAIhAOLrl69gbrkMEON85eV0uogNq4UzehXndhbE4EEWb7c6"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604492797-48071952.0_1604492905005_0.43495159722250043"},"_hasShrinkwrap":false},"2.27.3-next-1604495174-ce8b86e6.0":{"name":"@xdn/core","version":"2.27.3-next-1604495174-ce8b86e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^5.4.0","webpack-bundle-analyzer":"^3.9.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604495174-ce8b86e6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9OsVRwkLw/zzN1uQL+r+ddIVdkkRNUT8KUuGwkw6oCVscqx6l07aLu+pefKcixEB85OsxeEP+MUD8WbkLttVog==","shasum":"4e0079c9b74ed999e8fb09baddcea0a690cf215f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604495174-ce8b86e6.0.tgz","fileCount":167,"unpackedSize":634597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoqe6CRA9TVsSAnZWagAA08MP/RumKh1eQkT6zVV3VRXv\nUqux7KWe1IwuQhnetcIKlBtVVkM+dp+2+schrWySiwOAgryrxjlIHYdbtIJ2\nX+Q9ZHpRbIfHWUEzN7zKHklqKkx1XeeDAdWHfL1k0k/oSeWV72KLU1VwcCNS\nPykHf/0SkLrfdi1s3x8lq35kG4ESjs8LZ6a/syuvvTEQTI1QCrH04GFP/HpS\naCaJ33TyUghoyYriJG8UPFe6M9q0QGNxhqmKCbCKSrLSpGEPjkMeUQFrbI79\nnqInsXjWptbAjGIAYFcPvDhjwUkzHXDpURwcpxERUgcylH46OcHORk9yticL\nAE/iTlszUO+DTnlLYOJIMKd+JdUYr0OS7Gy+HtdR2MCGKox6qq1abOEfjKkR\nZE2LYknUAz02O4crdvKTUyKp3FYXi4dvZ7Y1zIZZhQL0ONYBsmK96bi0vHat\nhRHk+4lOpcJh79z7aGFgHo+I6wPucvUByvpXKy7UpQV/mQXJbScdOCVTTuLs\nRCs7pkmv1rjgABYLsoDPq6n1FvX7GrPNmEwTQrUP4RoOQnDPx2VelreEgj+K\nlOoUH5xKhFz/fje6pxlp4dB575Kiik2A4IkUaqVfutr7VVwBqo5AfGEX8caA\njIc3mSteu6ssyJtQabBfCOHyNpOQwt9LDZKdtky8DNF1EmHIr9y6WWlWbht0\ng0p2\r\n=X35Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFpHbC4DFWGus1aBjw1i32b9D3QmR/uvKqozsWIb+MBuAiEAq8QjX82Lf/0asZs9ZcoJa1eFFspzebPBCn9Y7O0isGI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604495174-ce8b86e6.0_1604495289372_0.5639180640786818"},"_hasShrinkwrap":false},"2.27.3-next-1604495297-78a7ffd2.0":{"name":"@xdn/core","version":"2.27.3-next-1604495297-78a7ffd2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604495297-78a7ffd2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JyfkbEALcULekGxoPYd1+ZqKoI01eY8MTlHqeARbaEaEQWSf7QiYdS96tznBVfv8Nsoke9Kb85f9RCCbW05dYA==","shasum":"54b6277434e8719dd67c8d98f60e0780ed1840bc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604495297-78a7ffd2.0.tgz","fileCount":167,"unpackedSize":633028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoqgwCRA9TVsSAnZWagAAL6EP/0S1XUd+u9ATjaBwLfeF\nSk/TTjrq53FdE4vJ/+n4+5TReEIUW4fwVCK0lDJQaUaXtcMUQOQERZaSIAS2\nJHlYa14N8FJlaoKRbYLt0+ltBgQenmacuvLc1IdIRtN1IfXflDzp1Ahm92Mi\nbiI+3Zf2Fra7Ko7vX2t+djBqNQCquyjIBhnZfB+YqpYJMXH45eSfq0Flwlw7\nVSona4+kzs2FyRtAR9uHDlymEm7ntDdhpk1OKH+AYMXB4WH9zAgyCaaE99FY\npTuYN6kXat52YmKLdaXVtgJqSwkuHgStaB5LFhEkHeqQzlZZLBfqadUOaLhC\n8qPIvlAmrbu2vGsLsePJCsOaJoz2QDdGnGno/ocStZ3+9/czyUJneMI6hrkp\n9ZF/DUSFMhQLbHPnOancJwhr4MxE+WGpxOTaIbNLubAXFNXE8/tyZqXFwJuu\nFQI+gcuVCRct4D9cl52Yz69NzUfyLYs8yd8MNbEHiWk/oS89+f1aZsx7b/r2\ntLE3r0N//G8ON1uZk/bu2nP5RR/S4JZwA6oITKq0thcqx7QSEi7pGB2b8bPZ\ni6/CVurTzOWJgRprbCCVG7YdSSkM1gMVjrw/FW6CKdWe2VX/A57+svLSFzn3\n19vAL2nDUfWVbj2l2DPWyMR2Seq13e/akU/dAOP+QTJw2Ai+PunchTWVb9sc\nmAau\r\n=XeIZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDm6tGgRO+Ym/jd5AR5oCH2iHesmbrxnU1xWik+2vPWpwIhANtAey2fUVW2bXi1MocpY+HxHHsuwxy/Mtk+WYnsb9Cb"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604495297-78a7ffd2.0_1604495408175_0.1492286002613905"},"_hasShrinkwrap":false},"2.27.3-next-1604496074-4c1b21fa.0":{"name":"@xdn/core","version":"2.27.3-next-1604496074-4c1b21fa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604496074-4c1b21fa.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Zjf0d1j8oEPpQD7TVwtbyRpEapUcHNniMDYehA4ho+pQ3Ukc4sRE+SLPM7aRGJ85taPOcUVNE8+cPncEpbmHwA==","shasum":"28f35ee76ea67d246509781f28431557292413fd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604496074-4c1b21fa.0.tgz","fileCount":167,"unpackedSize":633028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoqs2CRA9TVsSAnZWagAAG1gQAII8n0Byl3OLMIm5rTi6\nke5ExGH2rxnGLe35hR3WlVpSAN+8mWgnm+E1gUWK1IU1nM/mpyauavUoUDnI\nPE08uFZZzQR8fgiF/v1NACvF7Xc+PfwPXjlnn/7zqTaQ21EHoeYSfasXNNPQ\nCg7k0yAGsVIVAUwZf6WTL9JX80YnuLtBGnChIB+yKPVwzIqR9BgPgeG+BUY+\noYomy6NPCluHPND/ZaHYI6F3BL2p25+xd5M8ZSg+UO2RdreefLi1SNv3wenz\nCc6KUX6chQDnJ1E7tI2SlBUYWZE+er5LY5x6wWf7G1Ktem9Kn0N+OC9i949b\nXargsCQz7jpH016OQRuGd80qL4dNe+xfBfF0X/2VeE3lr0Ofd0SmHQZPrp45\no3fUqJXOdZu/dmZPCIjA7RrCgihJtJuBI5Qn/cS3aAHdfTBTBXIoakgtUkIE\nken1XBZUhzPLtZwtLoPuJa+ySlgfeF98Zy2nDwkjN7bxkJ8pBPs84j1cHq62\nCQ3zxcDPD06PZqB8qUAW6FsiGmrzbnxD/61thINPhq5sVmpHD+RmGw3NpAeL\n8rAgSzHADZtMv+feSFCKgyuTokqPVGUgeYdRkMb/d+hooMpvwKLR4TXAb+Xl\nENWipEUXVZEW7V+Yzm8fYSK8UENeckDjmqIRlpkDHInLWjAAEiA3WfhNTL8Y\nldfw\r\n=AEdu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICy22VCuJvOldtjGvSmFMd9eTpq9Vl3AAaUKDNMJxJbaAiEAvG3SidDxN5V3OI6RjvbB245xIX+Hc5zNs5/o9s1ubSU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604496074-4c1b21fa.0_1604496182296_0.26444583104063435"},"_hasShrinkwrap":false},"2.27.3-next-1604496189-27e3c069.0":{"name":"@xdn/core","version":"2.27.3-next-1604496189-27e3c069.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604496189-27e3c069.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-I5WcOMyPrV0CH7LqF3vHMwqF3jWoyEBoGo+AT5Huepieo7kRG2e7e/Fq4cDxWSxFhH8JYzEd0OKR/wb0Vv4YDw==","shasum":"9810b58b207ffd6916794a8987db49a0c5ca5683","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604496189-27e3c069.0.tgz","fileCount":167,"unpackedSize":633028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoqukCRA9TVsSAnZWagAAbXEQAJyqMxhyBrEZuO179VB/\nEFlJ35lTPi004I16wGzrs9MXj/b340fuuRvtkJ8AOO6cZhs5flWjcpw2O99B\nhr+aiYpUXw6z7aj7DY9lDJfG+spn/WMlU2H9O8yhwT2pRVt1AO6PBa+XStN3\nsQ3wGCRYywqCrrORJfryTOAEDQ9g8p/EXZjI9XYCObjCoT3n82yc8D8istBP\nATcwtTBGLBuFxrSs9N7UGzgYwc6qn/XeNR9HMvAJqMz2Htrxbb58L83jBEED\n47ci6fr0vbjAy6PHL4Pf5TtTmWmf9ZgSAxMVGCHGfbxFGDSN1UNwrPa9GORQ\n+rZv/fZ//wMkh07OdjD/a/xWtjemiUoiqboEVdln938rWdBo1WHk2MDqxjZp\nxRp8xzV8I+1BuCobyhocNbqprVOxGsWe5pRLuwvC8rtqFgMnrvfxS+R0OnBX\nkZ68Ma6OIUy0ngDueTYmENn/g61AlcOYvSoOOAg57SEC7S8r2B3WevG1X0pf\nJj4u4uRvor/DJ1355XPXgTjtqZmJmzzZXTBaMdW/JAXS6tQLrBS5hSnVX5/6\nhiDH9h8LowiIh1ppDMddaJwg9tz8A881xZWcsmuJNCEKHsvnvYM2o/InWDeN\n751jbPyBEW5eBc5JDgFZe1Ku0JRHUi4hjZkvP1TTBY8k/03l3bgY0/h1lDDJ\nzR6q\r\n=NBx5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJyB+W0NzM4Nq7eV5CIELlNuZKn9BLvJTa3UPz27TV/gIhANMoDVXCCXubiONdH/Llcrd7TwOYomF5wAgBQ9vTZjJK"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604496189-27e3c069.0_1604496291361_0.16004382851040533"},"_hasShrinkwrap":false},"2.27.3-next-1604496624-b977716a.0":{"name":"@xdn/core","version":"2.27.3-next-1604496624-b977716a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^5.4.0","webpack-bundle-analyzer":"^3.9.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604496624-b977716a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RiOdUVhUkFbGO2bBJcm02rZxX/TGyosvAUYM+qJcNQ7kBeHsrX/58GtgHUybbJLJB2IhOVnZlkkYqzH2aKH61Q==","shasum":"4620a6897c8ebed4a08036c438607304b476313b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604496624-b977716a.0.tgz","fileCount":167,"unpackedSize":634597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoq1iCRA9TVsSAnZWagAAntQQAISQ5AeFynTGvqwlkTxv\nxdK61jiRXAVHTc75qXUrErXoreH3RwgDFck3PIxcH7ViMe/hcpQFBpx0GQ9Q\n8McY4lG3I7yKuT2NIhvR52Rtfd2vCC6VYBaSdS5p6+wjHmrjNhsg1h3CuVqR\n/Wu4c79TRp2Laxmli/IapeNUbRhPnqdkjlX4SwYnFqSwSWrfljAvY1HT+Abl\nuFCQ2GayWORFaftXOTLoBMA7UlIHLyGO+lGqRGbVCcWHuP2EjQ/t58xxyCjP\njO4/xWJn25ooNnf5HgafdZ4pV4hIi3r9lQGex8sMNyO0j+rDJRsQ3rVxEBIw\n4EjQ9AF8Qy/sEh+BnTrn+nvMiDIoCI8EHpsLeqMkz50J1pvYhaLNW+0nvFNz\nOdT+RPoFRp4uFXoM6R0XwfvBqe8LfKyw0U97VhRQjhUY7gaXonclCX0ARsWY\npV12B0JIOYKB6wZbp5JAFiASY1YZ845GDIkurYtygeagfgxT39fL10+zio5E\ndwAWiLkNSkhv/RkPAZOl098R4Y1oD6QJbpc06UL8hjOO8FZwr1jPQ6+GTsAR\nBz76kgaBDpIFzuGEsjS+yo/HcTR6EMZQzPm3GkWYaaXo4iyRKVEC7/qksp1q\nLpPcoQaVKUwYP76MHhLYOpJvi8mOTJkZAXgypyD8FX6m20fdCCtaW5Y0Hn4i\n766b\r\n=W24S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEhndum685JJUfCKXrHumMFSYGQXIAlrQa/4BEOQSIEaAiEA1Cl/MZCGXW8dRBie2wcOOsvARVu1Ir7afIg3FkIV7FE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604496624-b977716a.0_1604496737553_0.30911005304009653"},"_hasShrinkwrap":false},"2.27.3-next-1604500213-42d2fd9e.0":{"name":"@xdn/core","version":"2.27.3-next-1604500213-42d2fd9e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604500213-42d2fd9e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-J8o0Ys+xtnq8BUnEZ9di2Uz7wO4q1+tglHL1zEJ1t8ibVDFpb3xHpj3i1+ErsVqZ4RXbA5/VCzz8Yi5ydqhPrg==","shasum":"353bd49187f11afc9a419a4006560100dc7bfa15","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604500213-42d2fd9e.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfortnCRA9TVsSAnZWagAALmsP/RquxPCJTO6Pu8zwPtfy\n+/EPuLfLvB/UMQ2ARBts8XjVHKnkFU8Xm5xufLcuUIRCcvyJ5UvZUkvsdT9i\nor5//EP3NMAud0cge8nekaYU44/DZHN+MVa5o91wbu+2qea+rkIdAqghrZ2M\nSg9+I6ETV6C1EXWuGpbdRzaxqOk7UPSqboLZFHRl83q6N5gAJJOYDDfitjh0\nCzugCXBWzgrxrd9yVn0s1+bS2igBdWSkihLxlv1EGqWwbeGgUfpwZC7vnWHf\nvqpiHR0gfF5uuVoOqYYeP2M5g7F9dUmr06mUep7z7SGN6CzB+VL7QIkbznfU\nFRrAwVs1MZhpfmSgXP2noYwpKDogPslIdmsuWGjuZL/T6YJrMsdclgKVNuuO\nAauMiQvdYSuxVtowaoNf9gKWJWdmGq4/DCosjEC58/KdmloohceLj7Rwr4MG\nJzgIE4I+xXE/haemVJic7FXWAksD8OwHv/qiLSkMbxp/Rk3sDnbgrm1rRUo4\nanvs/3U4CqHHDn4nGJXQiRCSfs7O4fKjdimoORd2dVCqpavsTqCtYKnO0Smt\n8TjEyEWO8gr11BUYvUrxynn2iwBaVGtAT4C+hhGF5Yng01MMQXgwVFZDh7BE\nsfw4dBCf0leke/cKDEb+YaakAEkIAzLWPKORcSKZ/CqNg+nfUgmtojSSXbx4\n0qBB\r\n=RHNb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOarYiwsTo9wPQi8H25RHREapW3G5p4hComJ9mwAnWHwIhALHeu2vrl6k2Ox0UAtIuD57h2zXOAbz6xtrWtEINHv/s"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604500213-42d2fd9e.0_1604500326729_0.5161811658640687"},"_hasShrinkwrap":false},"2.27.3-next-1604500946-a0411080.0":{"name":"@xdn/core","version":"2.27.3-next-1604500946-a0411080.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604500946-a0411080.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-PZj/WT2W094HA5rrncY6STYhpi5vBngl+CyYKK2pA40BdTIuqp2IINH2MCtuiaEH3u41rfdiRE7zK4grY9fsEA==","shasum":"289cbaf73ac3b2a55fa5cd200aadb18af1c577c6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604500946-a0411080.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfor5WCRA9TVsSAnZWagAARz4P/RY0Rd0yVU3vf0yYSYiv\nXiCn+r8W0pU3ZQWwfXt3cztiVZr5eprUhUS8Pt3PM5YjhntvVkPWK8Otozp7\ngTMl4X2Uehs+Pvz8D6cB/fn8GEdnmjQcvsrCsKIQCj5n+N5vcD4HTrDctRn6\nLvt6zJlwH+DAe2Mv6V94mdNh190QTJZ6wfmqXHYggicQQwci1l6KTZyQ9tyq\nsLWfA1lYfDanjem3oyWBtRMQAkCktmjVBnjvCWMeExeGM6IPRBZks/tOIFdy\nLNDmhh7vWB80xHoVEVfHGsDwKuSfdb3zjUTMq603oPlUCMozgTPzzOs8RozR\nyYsOJZOGhdSUdfN5iiuB0l+16LNu1VwmrzZc1x/qHQ+h3RAait56KNdlpNjG\nM1ixtQPE725Re0QwVB7sLvxgNfqzffZLPgKZ7R0m/hs99UwBrsyse980sidj\nMU5m92e9qZhq4Kc6ABFzo/jh4mV5TysoPijWnSpCHhqKXL6lLqB8N1J+PiRS\nAqoWE/LaBJ/SFe5dfPTNEsv8qXfeQkhduqCb6UO41VWd5UPBkYl9nVViRD5z\nvKDQn++TEUhWnoL1fz6Kk5J2TOmJ3eC/09ceYT5umAa1DxwQKcVfxckMrmVc\nEv4Ze07zRZDhMBjuSlDKlnLZJMD0O9Ld4LcmR6cHjAIEqamLPFuF+K7RKS3s\nlsmM\r\n=rWse\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICesJWx71qfLpDEQoGcyRj3tiyGsdcTuwK/vy5KKol+xAiEA3gXp/WLJKAAQOW2pp13VPCqlw5FxZsB4vZJtoBmW8Po="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604500946-a0411080.0_1604501077532_0.7654477185225739"},"_hasShrinkwrap":false},"2.27.3-next-1604500957-4ec0bfc3.0":{"name":"@xdn/core","version":"2.27.3-next-1604500957-4ec0bfc3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3-next-1604500957-4ec0bfc3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KWJzamvodJ05MIo2NBqntW2CVbhPp5hNobg3rWK8g1zdZxnL3IgJHk7PElWEddLk/BP0CdNGoX3Cl8u2IN2gGA==","shasum":"2d23b0fba76f77555070d54fdc62f3a85ce50d0b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3-next-1604500957-4ec0bfc3.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfor6MCRA9TVsSAnZWagAAQ4kQAJvmDdlnmgTh8/N+195B\npbaeUe7NlZqNRcz9T8IUEZzTENKbdYrM7X+0CUSCceurZPfbCAFsnp0Ign/e\n+LOusbgJVHr1CSSpp7U2uVf76uwdvzI3A97j75hyhIKRzxvhK3d8KsEaTaNE\ncS17awIn1wWc9PwVu1WeLG9tG9N84lqcOFm9twZqbLz74408ifTIwxlSZ89u\nB8rvro/p2oMdj4NehcXSwW6AFvgdL01jDWG9XfH0SxJD+H7/e0t7t9K6gQrM\nUsOX5cYOPCuY2zX+DxdMwrk9t+d/hu0g3LYk8WNSdLYb2DXpXh7byt171ilQ\n6JC5oGlCb8Fl09RZMz0PWvNwVcP3IMn5BpV4/dZSAhazP1PgwHu3B+sDcKFr\nEK0taI6tuqtMOFERYdx5YMJ1UEuV9pJuvolmBIrEbdV1nlKr+9Ho3zmxrn3V\njbH2bN5PwzTmIsmusf3hvawXMP5aoCjMIsWXT1lNPbJ6PHyWi5qZWMuipxXg\nCZiIDOUK5KPeFAupE1M2AlQ81TwKo+E4AArosVxgFLoEYybWN5QmFq54miFL\nfOcFIv/+iAfFO/Dd3LkPFeL2IQ7XcV9MAcXVG7JUr/29kwFYFIGIGb6ZEb0X\nqj6IuLgKys6y02jGLToVDrmOJwIaa1vSiunbYs7Y9ZfwX30+QQkGT4sKMQ/e\nmt2I\r\n=z5pj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFTHfm3xdq/p+G09al4lvtD92T+XZkwkeJzRmRlfnDvgAiBZtQIICzIchEQlf3IqRDzkxXy3vVu7HLkTZ3arMI9vGg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3-next-1604500957-4ec0bfc3.0_1604501132115_0.20831682087441483"},"_hasShrinkwrap":false},"2.27.4-next-1604501017-a1693d38.0":{"name":"@xdn/core","version":"2.27.4-next-1604501017-a1693d38.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.4-next-1604501017-a1693d38.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0OdJtWiamJaebu+lyDH/Syf40leSB0/p+cUm52SvS/wpMR83YrxvF1tsG6w1tfA2qOvomtfzI+bZ5/zm4Z+hnw==","shasum":"8d14f37ac07540b0fb27988c2592ccc99f0ae82b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.4-next-1604501017-a1693d38.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfor6yCRA9TVsSAnZWagAA0AQP/iCokEE/DDdTX05/DpF7\nOELhV2930/zTm0tgs13etrRh+Hf76f1VKhb8e0hdBKRRBfHfGcwSvDNn2Lp7\nErLdDMQqD3PKngILmGcwuXgr0z1zgfUBkoI3pj/9FfYsTKib2tRwBJS8V9dU\nrPFxvqbr+ZSpBj5bwxzmUVs6VLXApsIaoByon5K4BQYiUOuXcmWaJCIyxK1L\npPfAS7uq5NwIN7vBAjQTT3V8NH/unqTIgARFixtxw5naMwJ6NGndD2TQ0bVZ\nsqcPIGhjqo+0HFY4yXF/YkTe3xnJLfRklB3VRLFF+rR0zjSIesUVl/Jcj29j\n3dGb8pAu/4OWrRU+OmoG4T9kUkFc9EWd7IpZdSeAB/j0ImmFXRMRifWxvpq1\nxTiEh5imm+BuZi5VHYlnCeeRcdcJs33HuPzu63e00cQhAerRrYOEFHPKlJRk\nzExTzG0TKwpUD2Ym5/AP03Dk9L1HXmjxfHga8wxA1TBMFPRZH8CidYej33H7\n3ythawoTqdD/twn3fA8mrAAJLmWZXdPGgASL5HUHARPKh7Wyot5dhx8lG+Jm\nDSQLnEfx2ZgBZZ6o5xRgOZ2z8eXnxrpne89oX2XR51e9281LOSsRAXu5eNjs\n/XSihd83Gmw4Ov0PmBLFA+IhZu8N94h4fPExHQvN29WoF7BwK/TWWvieH1u8\nseFY\r\n=yXa6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDcTS6mTDNEPPbaUA5IP/pvTz2RX7ba3iVNj6lQ0F3Z+AiEAjcqlpeRS1gQJvHG9Ti0+REygCVsuynPSNE8Lx6DvhhI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.4-next-1604501017-a1693d38.0_1604501170055_0.4531100807698456"},"_hasShrinkwrap":false},"2.27.4-next-1604502546-019e4372.0":{"name":"@xdn/core","version":"2.27.4-next-1604502546-019e4372.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.4-next-1604502546-019e4372.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lSM59U5Z6pdo1aOmcLVuBQd0nkxSwCfqhBXDw+ZSaKk0I7l0GDkAIyhYJR8pgHQZTbSaVyTAaRvFxsolT2vvUw==","shasum":"f391ee817431437f6b9945ee5373eb8b9f9fd98e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.4-next-1604502546-019e4372.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfosSGCRA9TVsSAnZWagAAw3IP/2ietR9iMx0CunFmL3ZE\niC6VIUf2SN0ZF4Q3FFvkkwiFj+y7CS3oOJ7mj/QtyiCceSnImqklToYesGhL\nc1xeBqDr7iQtpzq9ekFN8CvM8THWwja4EN5GkA2pSlEaFNQos8STGVkLAomk\nNkDqbZmUQWNmzB4iJtoOOnu5Nj94ZW6Je5VKGC6J0abCD0P5PZJ4z2S0bkV4\nxi0dLOSf0nXSaSw4Ulvs0mZ06aXAG8OtqdJgs+mogdTgcE6OdBI2Eye0h/Rw\nHXm+GDYYHC0+rMPR40R0WcZzNUvvc4vS3/i2zXoY6OYS9EyQu/5sKFFS0eXY\nzYQFVwuMxEBcPpW40kOkPZjcgLa8WKQU3hPpCnIl9OckgQTx0kerlbuAmh5R\nZ+f4BqyQyeoTKJXW4omkOV6bIygV1gJK61OiENuWEadh8ve0PsrYW+0YeqPV\nVROve2yEgiJcIAuw0z4cAVmjxdCds1QYDUBZr2t1toSFc77s7AgJWU5h9UxL\nPsmZN/rsPNpd/1Im4uvfptYJsA4fPhg8BR+e1Baj+ItuPg/gHlph/EJvP8Ol\nQruQPMZoLurAmFIptd1SWSIXzUUl6gCRxyLszg6AK3uviw43xyZggcP69ShJ\nqELCotRJwe4zEf3KS211hQGJMrBah+nqTX6551S6xkItr/rWVTaS8IpoyIaF\nSHA1\r\n=0VNL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICMgbBjWQOlsY0SRfACHGFTLm42ZOMiMUS5uYCeuG13KAiEAmJDPS1XeEJFB8W/WNqkPIfeY/FCQjZ09mpL6Ris3Rlg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.4-next-1604502546-019e4372.0_1604502662153_0.08881118156687351"},"_hasShrinkwrap":false},"2.27.3":{"name":"@xdn/core","version":"2.27.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.3","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-m4q/injtTvqUjpM8xJNNty7BGjvHytFMme7dRc9JB/Bz9DTK51XFzPX2g5Jl2gxkkq+yWfzR2MTkda4isJ+MfQ==","shasum":"881730a38f97d1ee0133169702a6b1383cc8bec6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.3.tgz","fileCount":169,"unpackedSize":634755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfosUeCRA9TVsSAnZWagAA5vUP/RBK0SmokIvDnZ7m3HU4\nkafQtRPJv0xvEfKFY0RBqgmKixekdjTgk9g/wgHOD5oYpZXxIIZiBpKObAk1\nGQWqwKVcf9GaDi6dOg/uVvEuWK4QHQ9jl6b6QlSiRUGWYqxgo/LYf+ngrASI\nJ/mhJL/Xx/0qjhghhelt28fFLlq1yCoKcTZ9XSXIS3QfxQuGrXnZ/EBcwFia\na7fHnaY0Gsr4qS42Tch/uT5d+L5EP7FCksUCxDQNK2TXXANH9rlIBrFaMlY2\nTi5yfge7ymSoW5U7DgJod2U61OFsRASnurA2/ywqOhwlQskKAuf55Gi2t+gS\n18iBsmVsDZvtN9NRlIyWVCNQm4cAlqVmThay9FXXq5iNZBCXPs7LKQ+VdRFm\ntM2GkKIR800Xrohz/wtckdjXtHhS34GEkup4uLF6zHL2krfh4da0CRQHaL6E\nqPjrueNRPv6DpTLo47UjjmBefFaiOQZKmMkMM8qSkyhAhixg7Dvv1+zSqLvk\ncBORf3hwejjeUmoL0Wn6IWop4UyuPdopHa7UumQx+9msb4EFceIbY0udf4d7\n5BagSeuFC2ii2aXe0wiuf3z9OH8lqfUbDAZBx9QwR5ZuGk9Ba4h9GOQFKXMQ\nB+GDGG+/Oi4XQc1CNBlj62/0KcJT8V8H3xQluzE5ckzfQIgbNvWBgLI/8CE8\nAs3b\r\n=xhMQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb8lwrq5L7yA8owkF1lj2+vFLMMJaIlqbXv/9mXJNotAIgVgCU5fG+9l7fHgDF7cGTi6ZP+VGndFiKO/QTM1vyWms="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.3_1604502814171_0.17227086900594735"},"_hasShrinkwrap":false},"2.27.4-next-1604502811-a89df8cc.0":{"name":"@xdn/core","version":"2.27.4-next-1604502811-a89df8cc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.4-next-1604502811-a89df8cc.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CiUTpwowaGgeAJoaiFiXAMXaiBR8cJlOvFtr9V+sdNJAyyTU+hX0TG7DZYPXnvHFJtR/Sm58MRJPUXJfR5iRRA==","shasum":"ba35dee874cc77a40a90400b003fb34208f3d533","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.4-next-1604502811-a89df8cc.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfosWQCRA9TVsSAnZWagAAhzEQAIy8a7uBSWA8ig+IjbjZ\niVY6p9+kykhqiSBLIn/mh0ifgV7w9YIQMlDcceqy4IIddBAU8RiZFZv+zB5G\n/owrUwyH3augfW+2Id/uIQCpqkoAWQCvzRurlDptqcT/nX08zaz7FYhxA9xy\nDCXt/lo4bGf7aLk36Qr88ffoucvcrNzefbalaePk9jtJOonZec1zt1b1Oaop\njU5S0JAFX38x6naCNNYKPhlrG1hrVvH+Rc6UZaulyGFlJkVWk6qOYDHQfNGu\njEaZ1IkMkn+bKfP9v7iHq/fMSdQn6gpwALdpmwQYjzcbPxXnegljhwhzAhOv\nGuBwo61WC85tTm6uA4xZ+gyBD1UGZTE3rnkHoC6CFCQ+a0z1Tm5naB3dKCw1\nSizflWvIMeVVk8+zUToC5O2v/hdakNUqvfrGdLfB/YeOy0LtUdmlt2YfzQ6g\nTuIxwZfMwXuqk7mBOgmKpLlegpB5Fvk1JiXUqPrGxsQtuI+l061KZkdLuDNk\ngipg03Tq8TlGHL/we3Kac9bD/YI/e16nwbHd77fjJo5+AVzTxFZsPgv1WY7s\n0ZxYTndmlZf37Er1OP5Fngu3p8PdrxiHeHDS34tZ95Xr2vMfLXnidelN5CCJ\nCKX6/LFn7bE1PHcpoRn1E4jOAe5DTD7ruRDlUydSpkjtcMEBoh0gJPCqjM/L\nxqtk\r\n=XynW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIACFRj+iP8wxoHnR8qxrrKhMYP/FyFE40M1zm73FbwE+AiEAu7NdhQ3MwBYCvlZ+Gc42MdzXJ15LszbOJTZOwl5Ntbk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.4-next-1604502811-a89df8cc.0_1604502927904_0.024780038165052476"},"_hasShrinkwrap":false},"2.27.4-next-1604505184-e6e3cf20.0":{"name":"@xdn/core","version":"2.27.4-next-1604505184-e6e3cf20.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.4-next-1604505184-e6e3cf20.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LXeIIyNvPtiVfx6EfaOqdha+yMG01F8GSqDYrp+kHUBmc2meBE4Rjkt6Q2nZqagO9I+CbBkeA55eN6OojfE9fA==","shasum":"b652d18825999946d784924720ca2a795cf3e345","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.4-next-1604505184-e6e3cf20.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfos7gCRA9TVsSAnZWagAAiywP/0fkPpmgQKBJAT5fRuZF\n8kkQ9xzEqDqv/35LYcuM/Q2gY5iLVwTG37EAUs3jk5/yzWWPWmTSyd9b0L00\nlh4skjAwX3yHEWA9ewGtE7qfOKS85v2H7oOZxCRaJl4WHlQYerX3KE65Vvx+\nYodGCInLOiWeal1ByJ+jKei+wxYCERlaI3Q+kHrPiBUzzzQec8VZSZ+XnvPC\nCRCNVyjUvwIoLlTrt/AqL/inPVnG4IWud+XyjnbkcsW2HkhjuR40z3W2qnHO\npGj84IiV2lAfBmnIfSoiEmjv6WXwXftw+NlL2TdIyjDxzYVc1TFW48q0c2vr\nMz6qml7HIMNn7CsXCyiyFwuWA3BlNZjnp1HtntbgmGPUz3w/V6DY5BlSZ5Sf\nGjBTfdJOnq1BfmzGGUShgZWZ1SjAeNV4tAVEEdrdmkHA0ez4yfotWc52UU8l\nIY+RW0hEmcG7sjcI9Km2sxa7v6uYseUlC5jQU4IEgllhN9rvjaARcSABc5ii\nZUk7lOgs6GD8Jq42utd8IyVHDKDSSlIxBtNDiFQ8yXA+R+2snJKl2iCncGGq\n8UjgdTZY9NQYnt21ZRL3jA3Qnw+yrGxmQNyMLecXSgxrn2Fm21Kf+t82/VHz\nTgMqTHWAi8qjoG4gu9vcvId4I4COonbSEPqT/UBgJ8yxIs1jkjHy2wxnivkD\n2g/A\r\n=MyAb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtKHzmT9fSw1AeA3E6ssHKLZyYZ6g6lmBhVud7HwA6tQIhAOTVtATjt7+QWv2VjLJ73ccvonk+gHK/S5BIPz8P5Dq4"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.4-next-1604505184-e6e3cf20.0_1604505312318_0.8136162847492112"},"_hasShrinkwrap":false},"2.27.5-next-1604505240-6f27eedc.0":{"name":"@xdn/core","version":"2.27.5-next-1604505240-6f27eedc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604505240-6f27eedc.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-EZxEKAvInINnmMi36r1+BuIZ6JYQssjtQMWbdfBWNZ5+Y2Df9i634ELVhn+1Ut00KJVotYOvLDb4o5j6rhNjFA==","shasum":"4d3a419b5e72da55a22c76a1d4ed2546496d0e8c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604505240-6f27eedc.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfos8YCRA9TVsSAnZWagAAFHUP/2+VKJ4jQswCEWeK70zs\nqJ6JZv7ErT/oB2NqZgObEr9USnPHgageLX4j2NWR1k2lfJnKQr8dgnnLJtnQ\nXSbIOc+UH7X97UdAdwC5LXkR6FLDjSAZr4gl2t5hgWSWmIZtxOoKDVPNCx6i\nCQU9h7S+pDb67nGczSwQY+K16stk3cSgz8Vux+7GTjeTw4hqkS+lHriTBtHB\nKb5+Yx9XsQSRNRXLGfrT4Zo75JLNjKsTmh4Yby3YelGKaAcYLEFrbatbz3Pg\nK+HpUogXQWupVwzTHaYzl4/J4KiqTj5SVWhYa2oV80NrGlH8OuGsaN5YUEzk\niK4xe+6dTjnR3g/WUgfEzzcpEDSn6LQmF0NgLXoG/ATM+J8K58iCl2c4o+Z7\nHTKqrRJBeV1P8eL9KDaFnnZUrcBKKwsNAc3JZcq1F1abGkouMw2XvYL5sPdY\n0XMZ1Pr+HOwhmVtctfN783jEBaZD4ySorbmSCIdVnLh5kIIzLt3NX9DofbFN\nkaiTo/mzlklwKWSKYVLilwk0zJ8fvF8wkUi0UlR/uNWmZzVaOwtJjY4RxMB/\nMB6UYPwYMbuWzqszoF+az0VGio+cyI7la5jEcVpkfR5s2hgvG1Xy/iEpow/y\nepL/XLe0KqCS5vQP6YIdGDYh2RfUQxr7s9NBlSi+RHSp5UdX3LrnW1QCTWiy\njdo6\r\n=9fYi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3YQKkmyYqovClt9ZY/CW2bplyzYFGko2GCJyPClXKygIgIwHfr8+DTLgnfTopGzVb1AOpDPKlCxQfEN+rfyncFN8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604505240-6f27eedc.0_1604505367701_0.3662485744409232"},"_hasShrinkwrap":false},"2.27.5-next-1604511416-6f27eedc.0":{"name":"@xdn/core","version":"2.27.5-next-1604511416-6f27eedc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604511416-6f27eedc.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-g4MrpcTyLYyQTmkvI6iElUbJQEEk8hh4lduAnQ2ejDBMTeUG9dRvdURDMWXbFSLggYNCVOeB7PlVadAoiHapkw==","shasum":"0d455dc5103c5f22f802f8450e99cfe57b28207b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604511416-6f27eedc.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoucwCRA9TVsSAnZWagAAEsgP/j4ljCxXw6iK2FCKDXx4\nkT1sXYUysBCCEVe1NhYV2MDwBnekthdK9WPf2zffBldAZJoztKrAFoNyOsrU\nRGemLCjjvBOXjSaKG14C0lGT5LgxgDo7wKN2jQJzaE55YRJdJtczi6jCGZb2\nlyDjnXuBdyXYJQSIqqa/MOPQc90L9aj/hRNjvi+Holr+Kd248/5IbYa7vIrV\nwKiv5wFS6ms3t7+znNNa+SzkgGv/661sw3rXYwUtUlqeG5k0tOcO5KSPqJ8b\nxcS8Jj7VV2Fpfz9Y9FWoSjE36s40TzmFEU3SaLU78VN2xofS60uMYE9whcwt\npEzdOEQpaSRKECWbOdYYUOiZqbQjkkXz+XsRl5czPFlmRnAWLQ0qBMuegUZl\nk+ZG78OxfqcSrwhuQeoETqGdrwDHpLgv/nQbe39q4mCyN7U7sdAKyMj/gPUr\nzzXla+AMHFnCibZdyiLNdTu6g7f4muzhzrN1qY8cc1e4iKg8roMchAAePx8k\nN/YntVzg0B2G9UAIuxXgFrUEVa5m2rPbY6Tjp8mnNO7HqXbkR59GlnG0jII5\nuMfIh22Wom1P9wtqZN90fXGvnex/tHpY4jcey/SMq4072C9XvYS80/aNOZGB\njHU6QIEUwYj4E2mTfOTSw7O6bmG1mgu+ZIbijQTA0/yc9uAsbrZA4T3+Flv6\nP7hI\r\n=lNLi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSvnHzCHrzlo94PIqoytIQhlTpWDCLBtS4dpOFND1ILgIgB0Oun7VVVFxMR6CIv4FX5vKBSEgmHp3xHeoqoBQ4tvw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604511416-6f27eedc.0_1604511535973_0.155662738359708"},"_hasShrinkwrap":false},"2.27.5-next-1604512997-23dd580c.0":{"name":"@xdn/core","version":"2.27.5-next-1604512997-23dd580c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604512997-23dd580c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TgnLPsyKFOLVL3sRjUj/h18OcvyuUAwcr1s5iJUBxAWAlvpRFllLXKdgAS8aI9ugywJR+5p9Ljg03/tmELGK7A==","shasum":"7da39a24c77cfce9aeb0ff7455591dfdc3611c02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604512997-23dd580c.0.tgz","fileCount":167,"unpackedSize":637265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfou1cCRA9TVsSAnZWagAALiQQAIF6RxQGyd0u/U4oyLMN\ntDOen9NEsZlZWFhLbvBRHlPvknAEd+UactRfT7GcgDe4wMjCnPr3qcC3fngp\nPKoH8zSrBPGLycyJHU1rCc0jreS2345wM2+jlmqRRbN4H0QixsYmG72p8TP4\nJIdlf3Eer+AWPP7mFNzLzmp1Hpv8e3ZSobyCCb+KtATHDi8/BNfhQx4aa/Wp\nP5jLAiNj9LRmxwOqkxHF2kenctxPr8Jpu80v+i+sevW0qAlI/tsvj5ta6U+S\n9TK29DRNe15XyTlK2YJ7nTL9PZo0vjXm4kiXyvmT5/Z/3fXVR4tYu5K6WRf2\n/rXkhwOX7cCWgYVyROibmCTHhQYuHeZNsL/O//a+yrVZ32LVPpJK4ti7iy7p\nOWv83KuDpwpCRf2StYH/9g0vR6Tg7f8ZtC32sIXsEsjRib/4R6QQp5pbOgZg\nqtYocywcCI+iEVMn2Fm2caqb2iJkNgfahRdotBlRNL3p160/ODfnsQxGNWVw\ni1A3c9zzYv4SaRtMB5sr+t9n2+lii3Lmeg6ps0P4poicjJOlFoAwUonb1JEG\nsQXu0XETicpb/PMBWIhKWVPcy2jRPfB2N9tyDAX7nmAtsSS3mSLIl799NNrB\nmyF+jp5cJW1YGeQQmWmWTBnyWfsW7Z7OLtRUTWE+tNxvXcDs3ZfhgvYbSCMU\nzRDy\r\n=dDEa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIApjv196u9KQ34UwERrC4V4ujVj5XljZXghVju7G4vYSAiBWbWw2V/0ZgOkvah8AwG43b0tftrdchKKQzwSgmr9d0A=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604512997-23dd580c.0_1604513115563_0.4845633209914897"},"_hasShrinkwrap":false},"2.27.5-next-1604513033-0b239f25.0":{"name":"@xdn/core","version":"2.27.5-next-1604513033-0b239f25.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604513033-0b239f25.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1+X1bDFNHmNonowW0pVOg7mRIPxNdhqYydXiCVGuJk4xdbwxyu1DCOB5ARdSn6+RLRXmwpiJ8OuGslQjiyvIhw==","shasum":"f4d2fa7ae5cac63647c30c436d107480b47ba27c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604513033-0b239f25.0.tgz","fileCount":167,"unpackedSize":637265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfou1/CRA9TVsSAnZWagAAVG0P/0cWETppP3zxuL0xi9za\nJzFCyoqZ1gJ/0+dbg+WgXOV7pUjRnCPYh4H7AtbgURRhpQKL74ePZhGXRtEa\nwLPc1OdO2ihRrkzJqAIuNV5Rl8pSDAuJk+PwPTAQELWFIc0HQubhz9wF3UhI\nUnzec7AqWqJ67GSmOYEfG21LxCN1qZMlpebA9dx0je2H08C5agRaW0qb/kCp\ncGBwOfTEXYLR32HQwI21a101Q282pyIzAXY3o14AFEZT2m1OMQIL0zBfWfh5\niOtBPQNXuskIMBFnxNrXIoScO6f39G8o6MBmh3swTSLzUz9KtOopsNIn7U3B\njyqSlGckfo0lDhpIkPel6/KXmwJCsLRN3JnOOomMMW7yXe2U/K37+KjKYQUy\n3wlm6OtcYjyzzrmEOvvh/ZH5GECnsTML1X33/2P406krt5MojOQwjOp9kH/n\n3Y0cUVsvkL6xdKdrpNX9Z/laFNddiuaxkxwuMcgVyq2m9wozJNcnn2hCV5ee\nyiBEzPQoL8MbYvkiiMYQi5VAn9VG5habbdUhNE5myDJWD8E1K5QaA5lcs9Df\nHnC5gmBaa9JMVuG3sxaWyrWwoysuLdfHISmvAdFf8JPWNMcWV0c4U3PEgTV3\no9K1KBuskintzODqpZsPwLSY7pCW7vq2yUovLZbrNQ2vduqlZkAJBwMaMZne\nSeM4\r\n=iR7t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC009Fnf2r/GIAs8AFLfo4aJ2A9Vn6zot9IEEMw2VwGhwIgOtZ44my9ELzTOKgkfaKZaUs3ruGH6Z6Q2TxW7WiFjqg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604513033-0b239f25.0_1604513150485_0.07137740926102953"},"_hasShrinkwrap":false},"2.27.4":{"name":"@xdn/core","version":"2.27.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.4","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5f86fIIewdxdqH+Md+X8grFjqTbzcjrDWs5ojw81DdTxVy0CVXG0ZeAGJmagN5DM8JgsGss+7xhxwl48wc0T6g==","shasum":"44ca5e67d9ceb6e59540a4cd5dee0a3fcd7c8d5a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.4.tgz","fileCount":169,"unpackedSize":634755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfowQkCRA9TVsSAnZWagAA2PEP/je3lPO3OtCMVmB7jbHy\n6Lp/RVZRYQCbacp5pLWAX+BrZghhzsiW0bnbtyFYaYYWXqwSMgBhTSsB2Y2H\nlhPGppUVkuwfMgelrqV1kORpcSmEumld2N7m6EmCeJbnvh/bpuWkjHbxC6W8\nlmzmSGohn8yg+3qAMXDQyVdzKDLhJIkUUmOtuHL/CzYezNF1dE+XT4nz5XuK\nw2UQGHocNkzxOaBj+/NxePj/GPbC+ZdXfgfbIQb87SLax9+bCiPrbhQCxnMX\nUZ4I0sa5M+0pfYXqe214YcE0udAJ8aNq5N6B9uvWc701k48Zs8PU/KCb2i3R\nNnegag5Pw+gUViXbCvWOiMj1nVZ7t3ix6w26t6kA8LdRLy3M+dkm7ajGqHuT\nVv2Yaz1R7ZJhaTLqJAky/d7t7LmYOR9zLRVNw8vD6C3x12byZVJHzmFN56VC\nwUk5W15a7j9bt0kWlbCePfWfbNt+wGhxXYqLofVty18GmdhKkEhmjAu/dxS8\nXa1sOiQv+6/ma8N4CWEEbJRQIO1lQf2nwvlSbxdr8O20jsZNd05OiQyde03d\nilugVeC2MXSBB9ak525KolmqDDNQyCmfMOgAVwNnICxRy/vsfedxILdrKiwo\nWt16sJ5g1fxE/EtsqjZS8f7VN+najEvCacliRzbyaDyAmz+3B/g4EgC0PJSY\nDlq/\r\n=RGzV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID56pFgMfa04qw/4m7EDvsGPPOyLnkfyvg9RaM1Q2JFCAiB3P57AXD4goUMZlWDwi5LMyeOTrM7EPn77N6uAYIct2A=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.4_1604518948078_0.0722495365130853"},"_hasShrinkwrap":false},"2.27.5-next-1604532455-3a53c30d.0":{"name":"@xdn/core","version":"2.27.5-next-1604532455-3a53c30d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604532455-3a53c30d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ov4lxUCpNq6YCmyoPOQI08NBUS6dCO5faa2gqQMdNwFi0GCH3+wvsZfU6zQqscQO8YsVpSNGqFVBwfWMvCmFeg==","shasum":"b5045aba98913c855b7da90f06044f9caf36a6f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604532455-3a53c30d.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfozlhCRA9TVsSAnZWagAAKXEP/17J7K8jfI741wwOdhfL\nHT7Tdw9wfKmNM929G3LqlcfqUBEYwYjGXINXu4TH/pUXaVpi0R430ydhrjme\nedkCuD1DJVHDY9KGF1qTNJ7HEPiDc3o3H8anlCYXyDkU0WQb4ul9OwtfbpD+\n6SoKlCYrEVFjSbqxjLtEZPPjE02z4p+tXV/JzmfAPg+IzrhDbPitdwO3U9OT\nP0LkZSQvAxDYW4PmKp80keJzfPesvHiKcEO9wG3ryPCUgdXeqV6A1673HdFB\nBSDRlDTFv/8BFlmrkse9klHrYKzSV0ZeDGPmJYkXm+nH/0kCnJfdkbOm9B+X\nmjXRR8Xhe7iYzQGiJjbG0J694MoQioQ+6s22BXXFrUT8sL0icYKyok8Jegji\nVf9QNMf/ddi/lhX/Y5fQAI82fYrnxuqQDruDZe7a30VCl2/5Fyk9sQd5dKhS\n6qer/VCLbpg0giXb/E1ROCPDay0UrzO3+gvh7atE8haFhaqUiQsF5iKu1cDy\nUaibhU2VIdpJONDXkSXyCVuFx9aSdir3DgKGcfuNJR0wsOtxbEioOhg6HVYb\nxg2n/4hqH0Jl8YugfAd+Lrc0j+bGr6dM1LAsKi9absrJ/I0jHDssv/5uk3Bi\nFTEHpQ4HylAsncVXf/WgeOm7I5AW8T1Evn2xoKb2NENvYczQwMIMQhgIuw+d\n0A7A\r\n=BtOz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGFg34FGXCx632E2D7Sgq7cQvC0H29R8mGCUgsWnsYM8AiA/Qf+RJMx/HtwnGTER/pzXMfHINGPQpz6xwCBk5kNJMw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604532455-3a53c30d.0_1604532576743_0.23665425213729474"},"_hasShrinkwrap":false},"2.27.5-next-1604582059-eaf05773.0":{"name":"@xdn/core","version":"2.27.5-next-1604582059-eaf05773.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^5.4.0","webpack-bundle-analyzer":"^3.9.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604582059-eaf05773.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0whqNQC/Ivc6uW16mBg+fKBQM/1yZNf/xk+2Sl1WST6qaYXMlOo6oaD2rmOuGoR3/JKJTVLz8uYKoTfIal7eVg==","shasum":"954c67b0d03e9b2fef4e14788b09d32aac6beb40","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604582059-eaf05773.0.tgz","fileCount":169,"unpackedSize":636548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfo/s0CRA9TVsSAnZWagAAyPwP/jVRzahK+CwK7yn4FHgM\nzfwBkel+MUIiIvBR7zZRlQOhiDf8wGWAKx8IsF5zetwp12x3O9vMB4cpc4Nr\nnW5QK4bee6y8KYe5LlYVw9rE31urQFI8TgFftc4trELO+mgHiXmk0OZo0mEh\nIDQW3ZB2Lua9Nyb4iTmYxQtu/08tVbMZf8+EEHUxvhRayFgsj0dKIu7PM3wV\nA0EEvkX+lk26oM6SpRVrAlym1eHflR8dpcrZnUQoD6lM4rVFi2S9dDZhwdP3\nCns6k0yNyggO9tBTZr6gAb8Bx2O/tN6CkSe+u/oiGe8gZV7bxiMMGtJtcYDv\n6+GHU1/367DChsMcqtX+g57N5fjSfYQVPNsAopIcaRZHHazy5RmAByk1rCQp\nEr4eTe2GAC3VueEEr+L1VrU8yCGCBQBOQWb/xAwxOIbGOp7KVNYyVi8hONye\n+gA/bF+khwC7cHpzcG1eo8hY/uyhz9RVGo0TKID12K0JLB/6jFBfX9UuUR1a\n5gUO+WLG+xoQSty+qofasUKhAO5iyprgWMxk+DHmoX/8uu+IpdH9/E60raNq\n0OMYQpsAZDF7BYMCm9oATGjyxtjOHKfTeaEWH97vKnEERDDe53yotH/fbKox\nIH8Ix8AVEGsvfF9V4rv8/iprti8mGBtUviNTQvObey8Z2KZjZT7x5+w6Qkv1\ny1zH\r\n=H832\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGnZJhKN6ap+VRWIHJvOf3FdphfrcxOxeJoSV+0lzXy/AiA+hW7D0Zj4zRsVg3+nX4Ip8k6bQs8F6wFT+Kcmk2Cm0w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604582059-eaf05773.0_1604582195313_0.919182840060278"},"_hasShrinkwrap":false},"2.27.5-next-1604583159-b381e915.0":{"name":"@xdn/core","version":"2.27.5-next-1604583159-b381e915.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604583159-b381e915.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XtlRecpFRGolYFnDrmwvmHUWWU6Bj31mvA1uyGhvuMTuTlFzJV6JnyTLgb8kUt6DHoYBqSb0pDmEFWLgTsn2lw==","shasum":"df36d3605b2c6e5307b6b0cfa4512659d0b96488","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604583159-b381e915.0.tgz","fileCount":169,"unpackedSize":636622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfo/90CRA9TVsSAnZWagAATEIP/iza3GX2gWleBiMfb3sv\nwxRWxjVw3lej2qByL1IiUNLdWohATHuFwhq6r+QF0PAjvYnoXhl0MJIMyH37\njZgohVW5qlyk+A98qJUPbfJB8r8dsRwermD7YniHMNnB+ydRUQlKVke4FcXK\n49khHvQHgUcsVhm0NEa+GSNpgJ6D2Sl876izmjI0txFQBNzuY9eVtMVbatg0\nRIjTa9x+99u3KynCiy9ZxauT+y0b3v0pdEavQxuTXULoCLJ5y72PcufG2eAi\nElHTpaq4ynk16ASilvw01AMqKXBZ2EDRva9BTCcuhsK7KtOU5+H1w1l8bpe0\nhTS0XEUobT4d0k9VHuWExxTYfzH6MvP1pBqwnQZvinvARB2LkPLxOSbcAx9V\nw12JBAeL5N4GfOQHoZlg83Y3zVV6XZrA1s4RfE7PRGt4+kHfgfB+aJTKKv0q\nJ6v93XwrPu3UownJPD0X6yVdrnd4W74BdSIhKQoJR5qanMC0zqEUjo68JUyQ\nXAbSFYDkGTFfCmr61RM6mcLeMq5sbokULyDI4IRhRW4x2ekzny17Abh+trhg\ngoThMvenQbzL3sUwdEiw8sI6L8iEHbSifUdm9L98nUfQNacHpy5pAecEXC5d\naZSNJSKpBTySVDKOB3mJAzSu6q52udoBVEUxJxGK6T+oLKxpv6bD3ij8VVl9\nXqHD\r\n=Nee7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEs5XLSBdA+CcnrFUbVwuT51hL0bKIfx7BdNrgOcjtdVAiEAyZP252LvGQ5CB3YpmtCjmXMWscKtdKDp2Ls7t55zyWE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604583159-b381e915.0_1604583283659_0.9896799511901258"},"_hasShrinkwrap":false},"2.27.5-next-1604585342-dbc100c1.0":{"name":"@xdn/core","version":"2.27.5-next-1604585342-dbc100c1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604585342-dbc100c1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0yBCBKesWNWGCHPFL8qRm2uT4qUSjsebv46QV/x9k1us6DLzjlyGD8yIf97rH88C/A2aVvaMgUDpQCRg8jO4KA==","shasum":"38efc097f5dd6ab501cf932bdef151c5c3e733cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604585342-dbc100c1.0.tgz","fileCount":169,"unpackedSize":636622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpAf7CRA9TVsSAnZWagAAYoMP/jt1jkWPajqcReGK2Ul3\nrKhNRigY8DXZH31Mm5zQr3GLtq+j7t1W62a4rZQXwAXV7F7jTVQVt1uaKsL4\nEZDYr7DvZQagZb7WS/ZS0oZxEn7FKh5ct7zjcu0v7y7Uow2mWagiuHziYz1M\nOVkzIhREMhiVlL9AHtirmKp3CruK+Sm8iTbtLLU4Rr+zEGuEgF9CrJoXSK5i\nHEBSWO/Jp5TcwqnDlrygOCX/c1cLCQZG1rfkG6c15MPgmed5vr9WjU160RFD\nTk2Z18D2qe/+0+R21FvFCxUa4j2HFo+MeHz1NpcWmiMCUAzsf8Gd7WBJfDwz\n0RCPpcL96ysOAiMeKBbeYfRUpW/Y2eepuxWEIGQdd6OIpah/lW7f1TCUU9us\nrb8iGpNX33QQyTqOpehOiOMYXLw+9crXgMoZ94/6uLdSlIRsmwWxXk7wMqm/\nI0kVoVnX1xU3SSYaP5iKoR8/wgpsc+143ZX7jbG0AqMHwdibeFGOuGoAvpX7\nWCaOdo38YNonqsHH6inUsikRKrqogEXEYf9urlxin+/cy7rGRIvrsC+JL1dK\nFZDuVHbCHzu+PfLJKXvA4Bg0t7zadPBC1+qO3hXrZ0sYvIsWeVRQjhUNvkAZ\nuiANBHsuIEJk/tdO/5ZKN2WwkYAWiFyjvsq+q+BKtT3IZ6c8ivXXdCFaPFQi\n5RBU\r\n=4JTS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCG4JKhIhvtW1HeaVUMOhCJCp3syclACDX15yWUAw/nggIhAKpZoiR9x5NxqxD5IBb0zXTrdbp5vA1Tg8auAiaaKw7V"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604585342-dbc100c1.0_1604585466667_0.9883501526544753"},"_hasShrinkwrap":false},"2.27.5-next-1604585398-bbab79f5.0":{"name":"@xdn/core","version":"2.27.5-next-1604585398-bbab79f5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604585398-bbab79f5.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-HC/8m1PT8krwoIL6EXM8V79luuYioIHIG0gq5gU48XrSZtVPAIvtJUPHW2AvhkCrEAhepnNoGdOAin+X8iIoTw==","shasum":"8d596c27f3a70f9c5c66535cb8ca96395405292a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604585398-bbab79f5.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpAg0CRA9TVsSAnZWagAA8w8P/0s1jDZp6MmRLtr2Rj9A\nLbBgI2TGp7NdgurYLLXKLwWblIqcF09oqLtNC7HI6hfOwVND2b7U+4rtBDh6\nBMOzi0k6boT5p+UIiu/6RLz7NbnxmtKhtz8U1ucXK/lG7SacWGEIoUZ95t3P\nzB6Rnfw/N9hdWZRa9gAq0k2UCg8ObvbHD3RpmmGW4FbLkfxNBspYBkeazXVX\nA1fBLRGwWOpDhLtXum4ILYmyrC/LH7vYuap9uPTID9KrDKvxoG6JTu6DePRk\nYWU9bxrR1Qk98yXrB8PNEJJfSTQxgqyb3/ZtKwp9aRw9vt/vGbjRhF4nuSYv\nKvZyfGONwFkppRyD5WsBGzyY39S4LDV+6lqRiGapTixXWHaBzELvVSj8KudK\nZRHoWHNQOFw4RVPkPNpqfFiESzIEk90XwKPcXZ4AUpdkGMvNNXNrQMtmx3m3\nzKtHuI9U+EG6MfgP9B5/ou7d0GxyuCiDlai7UG+RmIdc4Jpj9XX600CihfDK\nrGbjWT8SQZPFVmPTJOW/lBIRhH3dauQvPgPl8+cWnyhQjUOhjoxl07N5ZdGC\npxCrkecQ1xYUZFgriJWUrxSX1Ot9BWHQ1dBbWTubG5PtvrypHCRf9QWxP5K6\naxaQ3E87CTRFzg853Quo5UHvQbTk7RRWIoqld3/edr3SRvf9D1Cu2MZRQusu\n8Z03\r\n=O5iL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHBsnIZZDkDyySPuwNp8An8X5EuOgNetmtV0NDiqV8xAIhAPk1fQPCNuHKF4v1DH8N5zat6XA6OeFwptzhQKkvTYyu"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604585398-bbab79f5.0_1604585523671_0.5947130385872617"},"_hasShrinkwrap":false},"2.27.5-next-1604587080-03db8caa.0":{"name":"@xdn/core","version":"2.27.5-next-1604587080-03db8caa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604587080-03db8caa.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VE9B4Qp68WAY7W42sLqBhyTJaP3zyUy3cz7q8s3zQcAOAcs2u/16GkG7p/zG9WbkNxrfTaydzpqNrQY5CB/tIA==","shasum":"1b5f6420dcc3d51d4dd061b5b014ae791d5b8f24","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604587080-03db8caa.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpA68CRA9TVsSAnZWagAA8oIP/REvONPGg6OXXVo/ynev\nqLXu1VjyqkZNpoDQUVONnz4KYEsZbKWMxTBuheysq2X1PODaZzftupx87sAd\nBFIe/lcYc3aXp6CXjfZoCxHtN6gjPaTgORyZwT0DYEdSgRZTKDNM10NzigGV\nIwKhYBj8RCiKdO0Cvi9+L25dzqBGecq0cqZL81lgelyL61q6O2AOzhWu71n0\n70r/TEyJLQ/GwUrU0eKTnlUHwDqFAKoR8iP6tCSvW3oZLSkJc5dy4y569dP2\nR/+UUqfJIcInG37K0jwPEZoWjgb2WvaJJJ5dSQbZIWMEojbsSnf695ajzT2z\nZnCL1BUVel9ev0KJs6AsHsxZ4R61vQ5tE3OpUoSsFBObp8KRwlvZr7V7V++K\ns+FhLJTjInfn9JcraBph5j16dHe0NHg9MJmUWVQqM8t/NMioMEBtTvOVOIx0\nuMLsWMxLLfRQkPgn2oISkscRuUw4xu2iEPWrQ228VFR4F+MDaaZ2dBYzJuwU\n3dXz5i6SOrEDjL/XsaXmoMpQlnyI0Ligr4wKqAsTBKNptb09i8Wh+upMOo5D\nnGvhB4RQ/enLkwedK3TY4SuZ4eNFH4fj0CY8Twg9kK2K5NI1R9B6Td5H5hIv\nQhQNfrvcZuKpYVsK8PNQhfPbRFSI5cT2A6m70P5G6YW+1wg765WMQ8GUeRmg\nuFKF\r\n=1hCt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIspS3cv1Dn2shxf0ws6pyQ5hw7FkH/I0BDQMO4ng+nAIhAOw8OEqnA352SLksM55Nfvx5+ZLOWmoCZp8gAiEzhrGd"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604587080-03db8caa.0_1604587195729_0.7399861114369728"},"_hasShrinkwrap":false},"2.27.5-next-1604607141-6f09598d.0":{"name":"@xdn/core","version":"2.27.5-next-1604607141-6f09598d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604607141-6f09598d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vlV2Nkbf9GjNTyw9k38b0jzEb1ahjwaFddGRXkBxNAoZ+PephcYwtNjFkt8wRAAhCPtD+WlSU7lRjp5tp8CVHA==","shasum":"a4bb33964ea4f77a40d1b3055ba2000c1ac89149","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604607141-6f09598d.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpF0pCRA9TVsSAnZWagAAX1sQAItUW17X2EB9W7CyCkl3\nuXa7Tm43pQWfeyI9ehE1F6N07UKP5EHab4k+UXlkdxXEUvrYIU0HG8pH7/aQ\nw/uc/+zFoQCbUuNSaHqyNx7JAD+M43R5ADNmswYHhB8lgKi6gN2bM7SNMSBj\nl7K5NWjNTSOX4diYab2q4zx69q8gaaO5rWPN2V1mX2mSgYkrysiYdptQXS2q\npw1ITiFooaW2yDQzeL5xZl5IHHNb53Fs9gfFmSC2kdffmARf940Yvd/E/jHu\nQZOKKtLpvG9iuFPnZ7zUGskQAWCJACGBk1DQM3hA62Ste0zZVhRGw8jwFNC+\nbG9bZauHs8mjmCSPfx6ZJnqhQ8Ku8ZY6FdpTApXBgLwGDPK0ssUZU9doNRJ1\n5BOnY75Ef5JLExVhULyF/zEaTvlhP4S/zt5jGzJAXZf6BvZ56aAd+QkeXDHc\ntf/pB2dtECSqCDy9ue6wMkO3JRAt9JhafwTJH4kPsY6zgzgpX8YL0IdpxydU\n2nfP4UfvrTA+0lKtzISl2tGCKJgZ/rUBJzG5Xb8gbzn7UUPq/n+fnIqtHnyW\n2CUJb/zXW/ln1p0x/hXsBJlJuU9E8asuO54UuWcSxW4hnQ8v7WEwIHtO1RyW\nnT3Nys5pQm6J6Hpjw7YC8sNvi3Xtz4BdUAf1YPoaNMSeLtrUIyXiML0L9KwI\nBZbe\r\n=Bu1j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHLWn/TCFxIQBv5BXMpDUq2qZ5VG6a5MuEn+s2EwJWy7AiEAtGfhyOLKTJ2iJ3I5BmZu8AeEVWrQzxhezPciJ0P9fTs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604607141-6f09598d.0_1604607273313_0.7946741522312408"},"_hasShrinkwrap":false},"2.27.5-next-1604653440-7651dd3e.0":{"name":"@xdn/core","version":"2.27.5-next-1604653440-7651dd3e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604653440-7651dd3e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7LOEgjK2CxuBWHgJtDBr5oxO3KiSmL7E3nn4veFGkPSvw4dEzDMUOPqLAZyDtkUkU/q20I8mUIvzB3t8lde7/A==","shasum":"aec2470d4314a8741c1a748b5c3506f03ec4744f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604653440-7651dd3e.0.tgz","fileCount":169,"unpackedSize":636620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpRIHCRA9TVsSAnZWagAAgf8P/3hhlwiItzv8C2C1Hf+B\npQm8H/2i98j3CZ6T1rOCUrSUHqYceF4A8b8ezakIvJQpVAG/AnT1UBCfa4Bp\nxnFMLDMFfvMwNQ982HUFszEEq8G0OXolp21QcgzjovcGcol9Fnu56ctTJutp\nf1bJcfkmiPXMFpwjGbulSp9BhlQLJwUypZKaoo38aVr8qM5eIpOBMhrbzSLb\nK7a9KSiEDNRyPM1N6U8c3tt7o/lthGsZP3ZHsguX14yLXUApLqTH6iHxZDhL\n6bD21kufXEZMNUdDBWN2mozYselsGlbjnli2cWKSpDJTgm+An210pN2gcN+q\nczBp8DA53laccTP+SSS6Cxh02u3+31wRuCt9Zq3EGKCFBjBwPD07v50k4rq0\nt/I6AUMqvd2o0IfybywL+TL+UjI3aTl3DwziILV7RmIhBV0nc6eiKUjgBv2M\neHRcwUVbKs8ubMZx66aiUNArUn8xqD/eaM0SUhL7eVa3cwMK5Su0WluAC+kS\n5hRkawx1AdCEpMVJHHnK+mYGaQHeeI8GoZHxI+L/A54R1SShx9Zt4IwcDocN\n1ztXVOZ0soXjIpHOBuKEVJ9rOOXT7mzch2zdYXfaAaM7wUqX5G5BuMATNPkw\nNKvvvrU7g7Cnu8CWOee6O7s/NEQwjMPX4b70BVb2IirMKz5aC8jajD0w4HMo\nep+U\r\n=/9Xa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC5hsTFgWrlSFW3mWwOejJ1heqKKdv5AY++C+y+3D7QUAiEAxi23B5Lb1rKcWkKFrnjKup4TsrPCtPob/av5EIGBjL4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604653440-7651dd3e.0_1604653574715_0.04812803877319305"},"_hasShrinkwrap":false},"2.27.5-next-1604653738-d0d506d3.0":{"name":"@xdn/core","version":"2.27.5-next-1604653738-d0d506d3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604653738-d0d506d3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-D99MF/LGsXpHhltXisWC0kpGVSg+KtIGt7vMR2EWyDLJdYEih9PH8C2T0hCJxONTGXuyXRMPpGFfe4OMqh3KkQ==","shasum":"f9aecf67c8441d1f51456b0905efe8321d348321","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604653738-d0d506d3.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpRMlCRA9TVsSAnZWagAAnIAP/RnJHZ2DiGLpUDN7Bcs9\nscNvV8Ieel1x9/grmAYTo339RRQ1EhMwazSnA32BoyZhMQMXsBExo1VSwZsL\nPhgiPSBYNJvCpxLc8HXdEhQk7hXT5JLNefp4EguyibaLY8SjTx4dwRFvTvFK\nViXtX3oau2IPjY0JXldt2QARr1SBvunPHik9PDVUFKkQLVleVvFIMW4TG24n\nsCROy0gLF2fCJCeegTY4wuKjiqa9Y+ucdnJ1EuYZfwrbcnPGkNCudf7vE7wO\nkazf+2iWdTprWUE3lcKTvbu+ghyMZSkfcyYuUQPRwQB+9Im9NAeZ8PGmZqxR\nxmqLCgzYhIkIZ2yy641Z0tILtT+JDSbNZLOW46O29QmSGARZGFrxTqZejM1T\n2PbUjeWLCnuDp9JB44NV1VkWRy67iEwoOqpiERzPwF8zVH8433RfJf6rU3/j\ntY7yoSC8hmaDnAMHFBN7vk+rvunxGF+ZGm2LAwgPg6JOStD2ocCV51S1jj+n\nCTWXTmMrVqmOmg+cE4lR4zQRcVQD7C4q4V4uVJwxjIydA34ao+P7bnLuJTmc\nnpgBK0fxhBUqCc+BGX8OLfQ57CpZWWrk0Q7gUzuqFSUSXLAfTrrz3SJSNuq8\nq8lf58B2cfW+eo0+eqOipJhHRsz+SV9lMGu8oZqgll7IPq27nNGWxQNpA+Ea\n+SUP\r\n=bOzE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFR++0xRLCEEKQQmtnJY4Hi8VN58NV4CBjlB9cf8bvOQIhAIyr3QAeBwQZeLEsfw+znL0TIErxnwIdVa/LQjBuO4u3"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604653738-d0d506d3.0_1604653860872_0.47795574564289134"},"_hasShrinkwrap":false},"2.27.5-next-1604664558-bb420715.0":{"name":"@xdn/core","version":"2.27.5-next-1604664558-bb420715.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604664558-bb420715.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nMJVVnM0Noj/NvGYk1v2Z6H3zEkRArTKHbcrHeDi6E2Am4sR0M1oJYxx4YbkL7BFPkiP92jatLzGjCmN0w/a/w==","shasum":"c1fb1b7f32c4250284b7d00cb3cc066822093a08","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604664558-bb420715.0.tgz","fileCount":169,"unpackedSize":636602,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpT1lCRA9TVsSAnZWagAAKOcP/35XJnfvG6bCSkcQ87/J\nL9TtcZhCmN9BtK8IWYbbsLCs6RxTBvDlfB/MLh+4+UN+00zhXHwdCHIhe6bR\nv34NWIGrZ81pYB90XKPE5UIFhx/rDi1duH+NEgCyKJOBo8nhiwCgwpQE5Lvq\nPM4biGMYC/Bppa/58ZoYZCa9VivCvMXFpJgLGOY4omLp6u2R+PC7eIeYJ0SN\nBZfPjz9iN8gCDPShWfbRIQeFrFsij4Hkyp2n0mslipKlaGjcGiSCIyZyOQvI\nf1spUYtxgQJ5Oo5uxopgtwAqTvE/fSM3nZS2608i4R+u6R+F7IWYUp8hm0Yl\nt2IbH1Sdu+oWDEqt14VjwlplmaQB0II8w7P6NVl70zUbSLOmT98iYJiEc1t5\nvUfbbt7G+czWX7TWsC6pbvW5+2okrSg18GZdtNoQz9j9VsAyb6lsKRzLmcXD\n7JXWZ4uj8bWhHGRmnJbSnZiM3ZjDeRHEIvXal4FyhRfZuv3KQskcraNYU7Xf\nYdHZK0pxhK1zzAYFQfOico8Ai+WPRCo+vMm5csRoKEuyBfp3EkZ/Soq28MCr\nsUQ/vqTuvlUBTIN7jXFJlFuiAyx/jezycjtLJrsDnwPvTopK4E1VBDUT+Q+V\nWzKf9Gge/prgYdW2ENC2ituEAafIWQL2JdolgOHEAew0+Znx+jwHXpFbUzjD\nwbRv\r\n=M55S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCoysyG4VtGrv09UlONrMCc7D9hBcDlD4ltGlcNGnFJgIhAIaVXQBlDA2iG5IPEAQ0ggTzSBWmu+PHjc3RITVQpWio"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604664558-bb420715.0_1604664676793_0.05537200616870819"},"_hasShrinkwrap":false},"2.27.5-next-1604669143-008e69aa.0":{"name":"@xdn/core","version":"2.27.5-next-1604669143-008e69aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604669143-008e69aa.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Re/zS/cLllZbv6gLEY1GOoTN/+6v84qCWN2M+e3WmtcbjpODJu49lal0UgGZBdU76TxvvrVU9PWHTfwJuXd7jA==","shasum":"4028b6074c529229fffe3c434e404780c34f8b4b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604669143-008e69aa.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpU9dCRA9TVsSAnZWagAAYnkP/iB+ExOHf80YOMOGltg2\nGCLDZznKu91NjLE2T24VNH5qNoAoY7PqEXx3QMvzI0aiM0DN4Qw7kiyMecfc\n9A5dcVHQP0hbKGfdnrTGeAsPox9aAaVZZuzjdnZX1dDDuT6Uc9g6rpDmeodJ\nwOUxWQegWrhQRcgPBMSFsCmjymhWtiRJ2gnbIuKYxJfkl7u3lMAg1RbRgYuW\n25Z/7W+zI38NnBf0ywdsAyosoZacHz+XgrhVepkw3rN21uv53Oderhj4LTnz\ngNs+6v8X/KEl08A/eQxOkAVp60cBsmzBSDA1xsRIV5E25l6v/THxT3Bs6E1Q\nLnhEPDBoRCKGJE3O/CheTni6vlowxeMUzQJZtfDJ0sUl99YwXM5Ny663tWzg\njl3xgbo/13FKAEk4fBG5LOSSgQsDGZUzxM9l4y6JeSqH1twZoh+OIx53alQf\nDAG9t4SLtwghilMLInu6Rd6uWLVuYcCA+dV0jShho6ASm5EftMFcvLIthLy4\nUnNkMxJtBsJywvGAuKfmJeYnGx3wzABvRAnd4uh4JdZxnQz+5VexduExO6iE\nk49LFHndqAR/D/rhNc1FjDfhDDsUFKHCctkt4CJTNGy5ITAH6MxKp3rQQ/i8\nRDHMnufEciaxTp05uQ1g3uUCeqfEFelZOL3VcbmYskYaaMkj1vSiDEUZHa6w\nWBI8\r\n=eLtR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCh1bcdE4P63OTKfk77NSxu9KATM3ZFlLcr25st/sPmOgIgOV9YaF20JbdIjNWaDw2GdaLv1eS74455H5VttOCMFL8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604669143-008e69aa.0_1604669277307_0.18643957130732858"},"_hasShrinkwrap":false},"2.27.5-next-1604670370-26f94330.0":{"name":"@xdn/core","version":"2.27.5-next-1604670370-26f94330.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604670370-26f94330.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Npnf1njzjYurZR6iVhZqp/RF56750ETMFfbF9IrDfHULrD4qHT9Vg4bMLDOLtqy/gSxl3Qyg7iyZsg5M6jpm3A==","shasum":"25386fcd8496d33199df970d2ff49a1565ca1818","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604670370-26f94330.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpVQHCRA9TVsSAnZWagAAmRwP/3Ri+DQeTTu7tOjm7VXD\nPwdSzFzglFBT0DYI7IWsOVHHGpO9X5Q5gDKeuZmeVLk/2A6qP+cDK6rNOaJ5\n0dpR9s6GnnEg/ppCgF2jBsVitgxvnah15ANjl26rhfvVxDjO9p0TYcJ+ekOn\nYrj7sqRsHYQENW9SUWB+xNdPzVyKxZFCNQ1m7lLO0s2Yy879orqhzX+hJ1WX\nZVFtNucIBZPKlgdSBdI7QgDXM+blvwy/puTP/gA+MmBl+VRuOhw0sd2Auh2f\noMO2ZUzMsoApK4xH5X7jkFsVPkzEjGe/kEqlujJ/ITSTDm4EjQmu1gnxBv6V\nrd6utA1qziRjr+0/c4MG7vBv84rzSEfWz+jKjZsk/aY9LihA7CtKuMG3ZgCz\nf90aY6JV8BOAW+uAWH3GnTaIRu1E3P2fQ/eCBZc46+CqB8EKCOz2cL1luhrK\niAvCUnNeBBjbrLhNJpMsqQnTmqCa8MDZ5tSSOOlp0ZcvPHldOZr5SGUPUGRC\nigpNvur/QYAmM/m3hdmQfd59i5Am72xEwMHlDakyFIrDX7GwQw3USlsmKhcZ\n1mNwNKEA7Cz+y0Zw/6ax6zyNDN3gMPZdU0zBZfhKFSDcggDdoCIu5P0Gv5rM\nvHdyXoXSvGtweXnEPHnEua6jTEuKzlkSICqAjM/O9DBJvkg6wWler74A+kqn\nGHiT\r\n=57tg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXrvjp59GeOXXvMCnRh7Bf1/Up2YXgXJsrvw6SfIYBNgIgMMxpbuINKoEi6SwKd4I59UD0CIPn6Rbqs1I45fJUzXg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604670370-26f94330.0_1604670470189_0.9450515067484413"},"_hasShrinkwrap":false},"2.27.5-next-1604671887-5cdbda57.0":{"name":"@xdn/core","version":"2.27.5-next-1604671887-5cdbda57.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604671887-5cdbda57.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9WZ8cDScLANtd2h51iTBE3lniTJkinRX0mlJq0zwzMRyxG+mS1hXV6uvc04Zh/BigLbrD3soyi9ri0WLeLm8jA==","shasum":"da53d9f2f5264690a1e8db900945b43becefc786","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604671887-5cdbda57.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpVoECRA9TVsSAnZWagAAhJsP/0u30JPtU3CYhUEI/+v6\nv/rgs/z+x27s7BVoswE4e5xg/wdI9g4jGl6hU1Yk2soBokrED3w+LreMbDPM\nuBjYWCWfY1ftvRJRhUMlFg1QqyuSU+7wCRSGQXbE03wDqQCO2kPouzzlXS1N\nx6zfJoG8ffx94UJuLcQYiK+KTcnwfl697msMr5MG4AkDYa8gGWGnb+GHdK3o\n2QR09ltQIPxYWiuNjm4eJXYBfCVtTaoOaE9VHYPChlFWQLqBvcT0WV+RlPJg\nSHjQcSCckt7XtVvcghfnlHuBqubdYWXrs0/+ork6B8XQRzP3mRa7qK86e65I\nauAVjlm0DXSWNl159l7zQneKGzm6T0mlJj7EaB0K2QI0hP1n3R/u8Yj1O52H\n+b9xuuFYMvx0h4eg0fakDfW7gT/BPu6TWoFU6cSr0amJBX072jODLo7+O4ZU\nUCVMquMEgX3vtKM9vsfwpLrNwYdJHMxrt4j2dorMh17qdgIljkZtlsU/DnUA\n4u0E5AtGuhuU4IRT5TwB8I7Kd6QYbQ5K0m35ZYOSIALq16tMiUcQti38JwLF\n41j4Gb4VDwrQMNkx82NCgT6RUnot62UMmixjgm0F+qP/isMb75zvNkg9LZUT\nJlAqs52CUQ3mxysqgS65eKNDTc+rzilvtQH4DAvRK2Vg+gaVJCfQlY+bFiga\nAdok\r\n=5Hg4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHTsMxC/R1B+3o1yvk4pXPHs/9TXS+HP0ReoMJsuFhHwIgT7aT7jKMDHi2+acx3odC9KoB/+F8FP3pXT0iWty8atk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604671887-5cdbda57.0_1604672004309_0.1899565295356982"},"_hasShrinkwrap":false},"2.28.1-next-1604679244-29fd0c32.0":{"name":"@xdn/core","version":"2.28.1-next-1604679244-29fd0c32.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604679244-29fd0c32.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-BKslIqmwyAxWKnJBPyQJ4Quqqyfhwwsnzo7K4TTwbMrZSwrLoVMArwQtXyzZjLrPyt5kJrqcs6PhUXLCouCcoQ==","shasum":"908fa6ec96b7d242e2a2b7643efe909b746a7b82","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604679244-29fd0c32.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpXbTCRA9TVsSAnZWagAAfusP/RYeHxsAYLxHOg6mi4n+\nYTdiNkHDrThH85lIEayO4Ufa2lioNaJGVq/RsvdAjI0U1sWdDrXPXyzDd6gp\nq8zErFUTqvsmkI8ID01/anQNXUNCkSsjl3F5RYDUoVg525jzYGNiikw1H59m\nxQQlEXnMg7RWLftPOtrBp17gRAXzcuq/ybo8DNvwRHivl3yJWPJZbZbxqoDG\nSRja2UTZpKEcDuQOEBmYtUrsSQ0Dy+dEM5DbZ61x96rh9dn1PCbWxQ8yx8fq\n0Q70lzEB+SXyODnBZFZURsvpRw5tiAyX2cgDGnvMm46Sa1cMl2KRhsF1ICA6\nYDlad7ipLFSCv/hd/wYN2ohXL7YqzI3fhy5/T+qzvHYj6Gn5Ntgp3oShO/YX\nyfNf0bsi8ij2KtqHdfI367HOiiQdxhG3lB8yo1P1GSb+cvGkZ8/RRIomaLkp\nVcdnU3ZFC2eN1nZDFLRaAuyovfkOyjDltGZMKo2ipr/9XqwptN2qqVj0bSvC\nG1yhcVITvQ4UmYZ9S1hYJ+VJw9Oplmu6kdZPXD2v68iG6IplTp/RZYS4a0Ss\n+9kkWuH6JQrbOniejbJosmqZKLFpJBkh/J8slv++PLewLWMR7bLdOmjmMx9w\nH3hu6YcMCNXBu269/hkfmooEVcoiF8EGFfNv5BcNvLc23AieSc72uL0pq5nL\nL1gZ\r\n=l/uR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDT61oEw718A+WxaMEmQeflDuYkli8TFIDhO4ztwEXG5gIhAPXspHvxvvRhQMC2W9dm4TNnvhM95UKxgKr12nZsM8t/"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604679244-29fd0c32.0_1604679371995_0.4461720892238019"},"_hasShrinkwrap":false},"2.28.0":{"name":"@xdn/core","version":"2.28.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1nxCQrKNy1nkZZ0VhLGqXTv4nHHfSBdjsvO+7O1bOCxeeO2huSn2/H/L8+ZaFGgym9pqQCL1gasSwPesaqmckw==","shasum":"82773b44d5a8d7a7f99014f4782f337dc1312553","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.0.tgz","fileCount":169,"unpackedSize":634755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpXs7CRA9TVsSAnZWagAAabYQAI5ift/J/afk3IA5SFym\n9F9VtVQ/kYz2D6lvBdGSDaU/ymPjOANyGXPUk+s7M/Qpr+KLWWn/lk6iiJ5M\nDeF9hHjla/v2axlFP7pomZDb2oWTjIr0JfJV8zAZknB9mtqdw01lbh3yLLNU\n9rjHSwPv7K31KOFd7A+wG5ivKr+K+HCtb0rpBrbH6S/egldEp0xEg2ADTjeT\nMy2++XG2wgHQG8NBi8VDzKFmQwOKMuSkEFw0GFEAtmVqlC5AFu6GqAVMwp00\nONzJVojRGB/sMdxfQPrtq4xAeMZ3TgWFSYICsQ4bENxRf33AoTFdbSic4dSD\nSPKF5B0n6E1OoiajiQXUPoT9WYRj//YZ6ODrZTyauzj7vSdtc3ZGNELB7TsE\n3i0Fc9IdAA9+WaBfZEdqxcjQSWZLW2dAyw2fmDI/w0TlM2nr/5k1T81Xeg0e\nM57Kzd4/HplHPz2Dk44dcYNyCjagVaarFusUVajLaWY6ZkTO4G6PZ0ivsLaj\nKZN1i+t/L5dPpsXCIByE3xddVhShZB8utvBj69Y3aFNAsdP/bkcMKG1Qa2pa\nwr3WgXKY05qTlUK7N9aZtCoKJqYk4m+ZgZ8QmLjDsgL+obcDKzSNlJoXYzyY\n94cP/FprbRS8ylZGxZg1MNLncU0wIeP/gKW8ByzTg331HoHJPhs2CUmzu/sn\n2+ph\r\n=a7dq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCIEnw9W/tot7LZMC8HUypt9fnGduqm0uH5PfCjadzLS9DAh8sUhJvOSqce/i6OwIi1dkHjlcY3we4hOLx8zD/aLDf"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.0_1604680506792_0.19813918071087122"},"_hasShrinkwrap":false},"2.27.5-next-1604687061-7651dd3e.0":{"name":"@xdn/core","version":"2.27.5-next-1604687061-7651dd3e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604687061-7651dd3e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jzL61X/nNo4Yv8N25l0rrg8UvYAyp4IXqtEeUJGSobvfl1JQ2hwyJZ5I2XATUGtQCnljyZxTRlG5ktXo/Qzmig==","shasum":"359c70ff9a3b40a2a1001bb68f8bd8a0bac2eb60","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604687061-7651dd3e.0.tgz","fileCount":169,"unpackedSize":636620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpZVQCRA9TVsSAnZWagAAo1AP/imdBNrSGGpPxFntE9A1\neS1keEfwyMW5ENGA+0knOTz9x/r1OO4PQoL6lVMgLa9b47JmA0OEg8M5i6Vd\nwZ0ntSvByEKEbeIPrk3AYGRypv71I3cy4/FBcPHkrHKu04KRUfXIXX5pddFa\nsh5qgogxyTQP4QzihcgnMEN9+y9Qi294Z3abJ4bEXYokXUQWyONbGoRODNTe\neNErLjE/pmr/2+hS4/nt0VFvA/NhaU9CqJ/Eifwlf/CYIzKQ3EECLxzeAbXs\nUenZw6klKulIWXHVoA3Sd26FjJNCpRJA5LMGsV06+edST6gJXDC5q4Y4atLv\nwio8H+YvIERihie2qhB3PJEMdRA9dhN9vAmWxz6j5XYDVNRbps61uDUNYutu\nrQn3PNV9zQB5aWpt9ltMl69cHtiJVyDnQa9MafkNKpmReG72CSGkXMcCF/T+\nxWxpqkeQRWtCoXDXjAejJBAvXsIFkJVGyUIDkgZzfUQ9prRhw9r64iCukzwl\nke2c073CTq11rd5qAkUkCPQz6q7z7zYaOEUQibcqkhb32yZL4myvD7EKey4V\nXha+0Q4e9O2oYVcGH2/FfQj39gtvh3v3SD9Id3hJAcAs8dA5ufigaR0wogCP\nsFRebO1857iyOyRkrQwdUAtkroLJnzXy5Hga71F6r2yu3MJ+RRj2RBKOTz+h\nm5/F\r\n=4ZNf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCW/rq55fs5Ye238gRKGdzPzH45dXuZpCX7Uw018ZTJggIgFmxAOuhQvQCf+DXzgQI9X7t25y/sB+Bf1kR0HGuQWV4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604687061-7651dd3e.0_1604687183872_0.33461683750497384"},"_hasShrinkwrap":false},"2.28.1-next-1604687141-bb46b543.0":{"name":"@xdn/core","version":"2.28.1-next-1604687141-bb46b543.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604687141-bb46b543.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ac2MzzEIPlciNsHiBDxasMb47gDd6J0vD/w/LZZnLwSOAQgwi1zKqBEiHxdD/gVyh2r56Z+fiMzchv+dK+ivcw==","shasum":"74e84c18db46758c5216ce053db23b3a61147f94","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604687141-bb46b543.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpZWgCRA9TVsSAnZWagAAyAAP/R0TuZOxezEQYf6e7LUf\nBK/6j7ZRbLHpu+S8hN5ZYr/oxx1zikXRICakguuBCByfn4g/JCFRrK4B2MsS\nXF7Yabq00w+NrgvoS9gRN/dqhTsag10X/JJcsvxb12p7a/hhLZ5u3kBjKFpF\nhJ92zaPVU/PAuFgqZ61i++fMgWjV5N6219jTy5n0EvvbYPFTul1TQOS8BAu2\nj9IFCGvVSECAFy6byn8pJQrgei91amN95+iavRp+5ko7fwwQbtkXsUI4liNt\n/mDUh6pnJznojn/ps1UHOf5e1vRV8THUcsr8VmJffm5MSSuENsxihvH4e46E\nbamwtMgBzL2e1P3qBivWIWaHcq23DcDX4ynbYGYfPfYnRObcwlgzXqY6f5O2\nk+BxL6EunTsSOv8IlLYv/Be2d/8CgS/YwMohdewah+X8ZpxVRQPSuegt71Ye\nefnsxfQoKDUyHDsjv/0IcDGi7Ia0lbOuiArtSFhbWHt+mCtOX0SZC4vSxt07\nBpG304ygXLIREab/UdX1dXQeId0Qrg5z1IgVf4UXCSuuzoXKKpNfZuN5K1BS\np40WtOciCSI+crCMIOHX1ojetxbC88u69T7Cql1OqZb+PVC8wEu6vJsyJE/O\njPQVg3iE254YwYJic5b8+9vgGhVt4YaciUwhCKfYweffzh0FopZY0asFzowT\n8oXU\r\n=QPZO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrjqYY3Nx/jXJH4+koPaxZxPgtGmbDiN4bLDnm2AK2LQIhAMROGd7fXRcRmX0OUhSJhfvDNM4GuVxpyle795r9CdwD"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604687141-bb46b543.0_1604687264230_0.5648903032808164"},"_hasShrinkwrap":false},"2.28.1-next-1604687303-f3511557.0":{"name":"@xdn/core","version":"2.28.1-next-1604687303-f3511557.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604687303-f3511557.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TLkFbpoz5gSQjCm7Xf8M1NjhM9kczWFPpPaa2I8Oh7QeTGgAvi3DHjuKkF+HvXgjMcS2xjDZlLwl4uUqNEKJ/w==","shasum":"a68627c5e55a1b951aded7bfdcc5951df0a053a4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604687303-f3511557.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpZYwCRA9TVsSAnZWagAAuc8QAJLCKvi/J/doB2orv4cI\nibHAyNE3JLo0KZ0p3eZC4ZszoU3VBlljFFk0uXJJP6TpQ7zfd/qej/wChs1x\nuHUQByDgqC+sBoHUvazbcpAa1OGrVJtbIehp95F4G6MV6NrHGoBnIIWj4FKv\nY010K0u9pd4CLQThX91GpQwJP2SwKxzbsHO2rlYHvcoy2Gh+e+sLwaklRygs\n8UY2hiiuKF9JhTulV0kaTHf0pNIdxKZa49r0RjSbkqnehneoTUqydIidIrYX\ndBX2NF6Wl5HniQnq8kqbb6GQPfmzRBemLuT3ppMeRmivSE0YyOWXB9/Dp0oB\nvPccMFX4f3sElb7cm96Ck0yxEc1sF4lqzZIxQlwvpCvk8hO1DlRNIlWAycln\nKaQjPqagDxbb4LleIq/TLAuzYtn77ALJXtmL7lPwOgWvCvB4QL0bFklpHTq1\nTYHKU1G901iUozrJ+Vqzob1SCA4R81LVFBKB4GQCyDhKAnJDmjI7pSmB15I1\nfqee9fGqKX5/+bh5Ifd2hGkHTPcLvdAe0T6pwn+dconSTDePOb7bIuzTFt8R\ncBC92qGOQAZJnekDncs8QKWuelPUzUEyucpoXAY2/3OOSZO8zBo/38XVqxeV\niHNYjbJ76og0mUkjsuqwEi1n8EYXeGh4IWIUL4Aoiutupif5WSw959OZYDSy\nyf13\r\n=56eA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGX80ejcncnSPSrjEouSmXyMArlYWQ5c/R6WpE9xKQcbAiEAySt6cOBD4PLaCoenCZ2QJhrBebgtom/JKFgy7BSdZtA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604687303-f3511557.0_1604687407719_0.3318009969356688"},"_hasShrinkwrap":false},"2.27.5-next-1604688530-7651dd3e.0":{"name":"@xdn/core","version":"2.27.5-next-1604688530-7651dd3e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604688530-7651dd3e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Q4h7+r5sye4/BiUi+2jUu/3JeM/KjgVHDT4bUx9EZ7PmUf7aO+ChsV29ZRcEiw+rv4Jybs2+amN8KfJ/z6DFLg==","shasum":"f134fb4554eb80f56a541da3377fc3c87d310f7b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604688530-7651dd3e.0.tgz","fileCount":169,"unpackedSize":636620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpZsgCRA9TVsSAnZWagAA+kcP/RUzLPFQ/G/rVhTmqTs/\nGnlXjNcpmT7KJ5k16rGLMZp9KFPPR0nuB8FR2m0vaLXFQVm7eP6N7XPMLQC+\nWjNNP29gnbcsN92U+551khyajzb2uLNu4IuCqxxQERpG7ws8MncBPdMKdClx\nGy14czSdv3Vwg/Zh/4G+Kvze38G+JZxAdjOCD3oM/o4IMORVxdCzj8V/om3e\neTTQ4roHT3RYAHECupgowiGb+UtMrGGAoI4Nr+r7ngHFxrN0BBLZZsBfEPgw\nwTI71FZza2PHSL4HDNc9yBx813HI3ispJU9wwCAX93+SC/Rho3HbVxWZ9NLI\nVqAlA0tZ3jTkFfaHdwHTXWwm9KyDtyXJtwtIcYPlZBiNLNdCKSuCAzBE7gjw\nGAg2MDzG3ixJ8rxuv9e0LY0ynXCNnbR6TVkr+eHqs1bsbkPskmT3l2KUA8kD\nqJoZGbeIMn6CvmIYUQ7Q98/RT9PZwpuOrfFsOnSRXpoWpfv5eUJ1alja5RDo\nsFvG4aIEAe4SMSIAJ+Q8cfMsqJTQUOpS2K5lKFybuzEGWQSiU/ENBJzUg9W0\nyney9S8xQPw0DiqNNO0WmadQbeq5x+ER6CZHgvC5gHfnTfvEofCOA5RyJEb5\nw6B0nhJVT+MjEZE4gXfYd6cQUdRqz605XcJK/gBmR2L/BsWgLXnskZ+ZOOcm\nKfJN\r\n=Gyqy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtE8BO7Ut8tlLNbTIwUsWb9Y51cAJLsZSfc+qw1QNbUAIgVtQ9pFZqIHx7IesQX+gsumJIj+n6GryVWBNmF9B1Bgs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604688530-7651dd3e.0_1604688671410_0.793746757118873"},"_hasShrinkwrap":false},"2.28.1-next-1604689469-f3511557.0":{"name":"@xdn/core","version":"2.28.1-next-1604689469-f3511557.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604689469-f3511557.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7+RXGwMEV4tBGk8c1eVomImsiFhr3t/g3Dp8Uzu+QtUe8IV8+YCchV+VmSseiEWoKJO18tutRssBfZc+cHO68w==","shasum":"10ed983dfed9f6d077c08248cf8124213ed19382","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604689469-f3511557.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpZ6wCRA9TVsSAnZWagAAIB0P/1Qq1kRsLZZyZF8wW8Xd\nxYpHlIDi4XaelgEgCuUGjeAhjpJpBry+s9ccQSnmKbvOyMKAEbiKF6Q9J/Dj\ndBOhqoilmjjnSRNPPcUh9476GDyN9J1MDr3ruGVEITbvki33khH4/h5VE7qw\n6Jy2kn/kk0aV3X289lsHtaltpx/tIszH3KN/n9ATFu9GnRlGUdIZYGlZFMe9\nTW40RwIfpyJ/wzoF0TrknPHmGhlv5hXRBNgVu/B1w4UxFPfMTAtGih343/ph\nqAB1nLEIC7WJTLrQJbvIzzDQBZC/OhSBiW9freVY5Z/Ei6yJtUGMziS/xDa4\nt741wAv0Fra/QYGRcoT0XeivjVAb/T7XzS9aWcdvDTH43GT08xBcTRnYc2rL\nkXrvQmD02Gh30XemKyhmZhsbNynBATfFiyiP07ak7UY8murpQ9aHuqVGOEP5\nQSgm26ohW7z9tGzmzclj3LIlG6YJPIpyFXOAhQH+I3kmxEJoSwrsxz5hxedg\nawAAzzXQwI0lsckbsexlyapc7LEBruxhqxYWFx4JfNBptuWm36GDuv3g8loe\nMBWfFQZOQ0sx4gyd1ivUiOE8LpPCUbfOZzkfzPnmhN615Kz30TdeECuaYbu0\n1syQO7KpyETR4QBH0uftRnaQMHl1lJnCHKqN78DGf1xH9APBYQiDkZkA74fV\nwu6A\r\n=RtPX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDxL+pf+9HRLmr+A1+19ep+/6ixxOZ/9lYxOv/Iyb60nAiEAhoeoM4ho27HTwDf8i65U2H1xd3Axr5HHTWs1uKnDu3g="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604689469-f3511557.0_1604689583432_0.2253385013308955"},"_hasShrinkwrap":false},"2.27.5-next-1604689659-7651dd3e.0":{"name":"@xdn/core","version":"2.27.5-next-1604689659-7651dd3e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.27.5-next-1604689659-7651dd3e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SUgCp/n3xJa75PQ02vPMBcIrZ0Zo3cW30v2b7ccBn5gjhk8sd88NvoRLgQWAVZA9AB2H7qoRxfqyeEMnnXCmNg==","shasum":"030a773d778dca8fd6436a44a8ec1380c3cc861c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.27.5-next-1604689659-7651dd3e.0.tgz","fileCount":169,"unpackedSize":636620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpZ9+CRA9TVsSAnZWagAARIsP/2jOjh6dVvyOO93N2Aw4\nkbZItF20qnFPklx6cSlOAVRSMVyyq4S3PwtSfBUES6gGkspOxfIjoe7TV99T\nA20O8nmES964jqnr88ZXpKPHL8CSAaNji3FZHfZitjF1E1ugyWWbyPmORqv/\nYC+k05Nap9DdMx/HLewoJJI0oaphlR+TnF7H3NzpgBRF+fvCVEch11jukIyh\nYbPm5zSghZyPEiw/5Xnay128DZ4G8R5xcJdp+32bGckAunbNcBs3SybRJso7\naZzemb+kpIMrdT8+prm+gM8xOPg2zAdRZlOKv3sujZ9D9gM+yfgYsvPUsJXd\n0JdMx7+EWyv95tdWwHKMD+f6WFzg0vc6ReJCLYUFDGFj0J9suYBJyWr32Bag\nLpM0UanfjWwg3iZpEjdpLuWNBbf6v8xQz1ScirjX/aNWRT0H7FAvMYGlVvuF\nWrmW1bFZ6hKt6vPZ8KdsFNu4uoJzLQRs5NscBdlIlRG6FdJO6h4bglJLYf0e\n1SMg7Eb4dawf5QjC497+VoYbLl5vwTkDWQxFSnivEbZLEkk3K0GbGLkauqr1\nrWfq3aQw422tKfAfqlmRVzILSbTxe55zOCL+8VaeBiQMubqWA/+eQm2Yw3kl\nag0EyDckk9yzQXJK4JP73zGv/9Ec/hOfdQ3WGQZJPOVpllmjbJf4hyQ9f0wa\nHUcC\r\n=gsv4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAl1pZ9RcCi+iEInfm909dCZhfMNwbRx/L2OfH2MJOz5AiBw/vsoap5MyT8vB9Y6zpKDXTjycwA97Ql1Kwvkh+iCOg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.27.5-next-1604689659-7651dd3e.0_1604689790173_0.36470111650565906"},"_hasShrinkwrap":false},"2.28.1-next-1604691740-d7238ecd.0":{"name":"@xdn/core","version":"2.28.1-next-1604691740-d7238ecd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604691740-d7238ecd.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Kj5ii1FoCLOr6YwIar3ExL+ZWxrPWgLnR0UexhjFc+iQIK6zhtQl1c8eT2/uaZmazwshTfb/nA/lHI12vaYEQw==","shasum":"b1cf24dbe74722c65999a46eff891624685515b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604691740-d7238ecd.0.tgz","fileCount":169,"unpackedSize":635359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpaeMCRA9TVsSAnZWagAAYHoP/0dYsmqfhiFnvh76/ZIa\nXyoXAzvjtRmrVmGQbZN+piudmJPPWo18z64A6Bz16ydIkZhFqavGh0kiLtLc\n+NTxWAx2ZcMYmUN3Yg0Ql8bQyT2WxoJqrKpmshDYl8FCKVz0/wuC9+nXhj9a\nHbkbpHKJU8kZYaqDDyP082R5PZjN+xVjwULKLL4QmbPHbhxuk0Ob1qDgEkBh\nlWH3z50pgCfAoecEVNjeEd3HZQV4YyZNXCZyYmQB+mWz9LW1Oy878Wp2kN8O\nIPRXXDbdejDVqBZ7tiuMcmNlX9jWDpFgFYMJOHB8YKlJhR5gzboHtrdQQuQB\nFQSUgH+NjOCX6/vdZRCgRKxQq0Qjo+/Xpdv4hkjUiRojGayYvw00+PPo0Jnc\nNclQ1Af2rOv4U4Wn3GiEQqwlx2RtKRtXtZ1ZijkLSqTZnVQhveyGUo64M+hx\ngC9z5Z3HOJM/3qtmFXG7/G1OEojw8EzALA9ra0JG/d0xBk7Jt4vaQMo4XHoV\nNipaX84elI1UJQN2oD1pe84KhC264qgbV1pvALf9LTFasyx1ZnxCwY1y5jNX\nidTWoFTxCFToPgyGV+6uo98Wb6rMYzpD1vABe+bpi3KlvoM/SsWh5X3HcMDX\nfwmjaeYztRRe8gHfQmevWha/STqHjF1+5Pas6XyW0USG3F2+WbWOdm44gVp+\nWhSV\r\n=86uh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHwput1kKZ74uKWAf6FZ0fdy/ZbbAcr3+hqSslc+hNHCAiEAyJmaUIAOu6+n8s+YzTGuHMDvW3HZ9maxabhBw6EshbI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604691740-d7238ecd.0_1604691851911_0.7201558357139977"},"_hasShrinkwrap":false},"2.28.1-next-1604692852-d7238ecd.0":{"name":"@xdn/core","version":"2.28.1-next-1604692852-d7238ecd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604692852-d7238ecd.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UNe9y3JS3YBULAFgQ1zRlO1x2Tqtab+IFgGgegcfBZRVrGV9mP0165ZuqIeed6ZJfiSCCM3zmSdT8tWPlQ2beQ==","shasum":"2f8753627b93841629df14820a27b1aa662a9bd9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604692852-d7238ecd.0.tgz","fileCount":169,"unpackedSize":635359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpavJCRA9TVsSAnZWagAAgJMP/AgDSMngAyHmn5L77CMQ\nExVNnMIUrl0/7EztKMMGIEbG/FqtLf9Ot73oTR7MZXdZSRlaxnAiTz83eb7R\noJXidD82Zz0AGZBoDY5Dl7Z+taKEKmmSYdBR8ikUDXwMcW8to1cV3DbCRJB5\nzC58NXxb4xEUBkOOSPjkfFS+LcAl8tyCsqIuiQ5kF83I0oLH5Oecno9TphcK\nZRGGEGeb0iflvw/qNnWuppSO+INpSdopFUteq3YiaTbIzeSreZ9oWDf1iiSr\nMaRNMf64csizxeDvytr1XlbutkY/b8KAnf8Bijmunbowl6P7vfJTOu9BVTMy\naPDUrGuj4x8PEezv4Wa/d/c2JEmK3ZGB+Ffde8TzDJ7VEq5B6bkX5CuvCsCB\nWBUP+gxodJi5rkCKevxUN9eQJTTYYL31cdRE1eoQ8GYuVODjF/Q5kINdkUTF\nO/5oqGH/G88M+DdRnR/qmaSe8TTvN+EkNF21EAmKoOCFZNY5tWoehIlAqL5n\nrETGxTC1K7bjPrexPPj9AkdIzput/1Jmt/4uZEw8Md2fIqIEqum2IctVx9TZ\n2ft4WsmpqMctCezBIw8vh3jjXa+6m0ppBXmWlJRaUrWBcyiMTN12xwTo6VQz\n3wU/dVx+6+TdELq5euGniyYphsXgg6i7fOgYFyNNtXRz387ie0L+gRULZWNz\nDX0B\r\n=lcJr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGP2X4YntfezPwcBHY9U1WyS1rtJotVARd+CRsQLp52sAiEAl436cvE2x/+cfgMXLVpFySqt/8v9UevI5iydSj3OnNc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604692852-d7238ecd.0_1604692937393_0.1257556192288325"},"_hasShrinkwrap":false},"2.28.1-next-1604693922-9faaa6b2.0":{"name":"@xdn/core","version":"2.28.1-next-1604693922-9faaa6b2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604693922-9faaa6b2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VB84LEfhbIKp5PBJxGC9XFCTOxkAhJ5AKWa8hvRvizrvC5501inEhsfwMHShaw4A+eIpBLGJR4xrgNWcRsGvSw==","shasum":"1e1158416345135b86a5a7f71bb54b18fadbdb96","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604693922-9faaa6b2.0.tgz","fileCount":169,"unpackedSize":635359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpbAQCRA9TVsSAnZWagAA3HAP/iMy22uQAARacLvKIkGJ\nQQtzapxZKjzv8fuFzMSsSqgIt2xGabs1iswcL/dxj7O3yV+8NTkJutKqUYUK\n1xicM5r7RDld5hxvWvrQwgzr4p7YHxAhz/z092SsZJLw3/FBUiepvvoTw9Hv\nXv40Z4NgAdhHrmA6FXZSbvXUU8tDOaFzTtfdVYxAI1eJ/M0OwbkJnLeZ9XVr\neSFSB/n/2FYawPX74my+6DHcNhKBuNfeGuFWKQl3Ww4ICgTpqW3H/TC6YEbO\nQIQ6sjqI2oypF7RBdxUBH2DchQTpLTRhFqka2fbLFxqmxYpt7IJxcx4H9PCT\n+XJtmSuAzLXYFAmKXG0KEdUgiKE/8TVlVhhLMn7y8IqH6fs1085dCu4hq7S7\nLjc8M5RGRfOQGLVvbI+V7r3AzQxKfD7YoTZc8cBTo4VvcqBAOCyCMzC04nzL\nrC5f142boBLh5IvbQZkk2AR3zmK0gVirhdWgKtfHtuGbwNRyookxYEi/d7H0\nKCIPSf7JNxW93PVBCi5QtSkA6TNiHhMcmsBnTslvVeM/1SLN0PvjdD8exphR\nUevxmnllUDVVbdxeAwryfSH3DCi6TxmUOOnQeI7sUK3Ev+r2pmWWNmhoJpjF\n+NOcdLw43CsWME4NI5zJS8542Qyp+k0dP7o8PeziqVnzjHD7dE7EnvQMtrJg\nXqId\r\n=QTzI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTOdE9PnlpaM1oujyuaIdo8WvT7jLrdpUVp66IqXjZYgIgEcGKgo5Ueham/h37Bcr0aKhYZh36XQuwKCTV31bgDbI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604693922-9faaa6b2.0_1604694031394_0.1929010446541366"},"_hasShrinkwrap":false},"2.28.1-next-1604695862-8fcf46b6.0":{"name":"@xdn/core","version":"2.28.1-next-1604695862-8fcf46b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604695862-8fcf46b6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-37jtLxy6cH2sGGsHnaU7MQC6khTX96Ofr/41pys8hZxd0VVftbKB7A/R4azwyDf9ZyCfvwoRDj3pKjEeTNT3vA==","shasum":"31c6971e77a448422052569d25327c8660c95b8c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604695862-8fcf46b6.0.tgz","fileCount":169,"unpackedSize":635359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpbeaCRA9TVsSAnZWagAA2DMQAKKmxaKz7nG24rAkQLJ6\nNfwoa7r+Id9ieJ0OhqHPj1o1bx5zc2EsXs2haNPxTlmYaIPxvChV3HAOJVLG\nJtW6A/LeRBHpa/lmXqs9RKJixTRxL5/fCt5qSnLqKzZw51fQVUOaUYpWqgEf\neLg2F3+TPeEn9IU430+1MSx9wJ5q197TEKwNbqCVfJkO7JB8B4sKf/HoOASe\n5R3JKmsPCuneDqC221b+BOZEIRzz2CP3EqRc5k1pUh4wkpjxPoie0PXzdO/C\nBVQ4n1AOzoZqeQzxJCqaJzKPESCEy/QtNi3dMkv+baX3jDeaW1K9QWGobLw3\nolsxXN/a2rxTUdddmT3H6YsC5PVoXANMRKdwM8G75xhWygxIqq8MkVlGhMu8\no50D2LNfP4efJ25NuqZFfxErl5gTqHbSuf6nwneif3VJDeFxtbzCfEIAzCS8\n5CtvN3Rfnk6Y25Y+FIDbsK+V/Xr3aloWYej8wJ1pX3hMhauFvho8QOPSF/Sn\n2AYFB0xE06opCE7OHN/iRnBERa5nTLYxHjLv899y0RRbkTYcWX+wS5c/i/SG\nub+jgQw+2L/tXbSgW7WRP4aJ9SkrE/cvjli+QZPHgdjnuPhIwiyUOicOGIEr\nShnnXi0rFJp/R+EGWD7T3bqehs6yrW//Mdw1bFriPTbe873MPLgTTWVTxmJ5\nJeii\r\n=NHWg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFx0W4trIpAthrPPGU8NHrgH1EI2MhMoitGEbid0fzgcAiAZ4Hq/lBdWRpIFiBnxT4YqWv6zZhgz81sFLGic+SCDFg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604695862-8fcf46b6.0_1604695961801_0.37023792792903776"},"_hasShrinkwrap":false},"2.28.1-next-1604796421-d647383b.0":{"name":"@xdn/core","version":"2.28.1-next-1604796421-d647383b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604796421-d647383b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-psZxFstiX6xYQ3pr033aKKArhgRFi3udCrQzxWOlRK9GjWlqaW6ZPX2o0pyFy6IlLbV/sZbkWXMxIyLAm4WJ3Q==","shasum":"4b9e1fe1cc56ae9d18de6b549f7ee57965b8f27b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604796421-d647383b.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfp0CFCRA9TVsSAnZWagAAAMEQAI8SNgqO3k3Dghll9k4H\n/RqAq92o7DfRzz9t2A7DzT9lFAojkkMrVHYILstyGK6ZBzni3rme6sQFLx1+\nCsOThi0dkhKyleKT6OXpEczbkK7AGSNP5Zprx4a9OU+vdBMuWIM3XxMptl0R\nJK3hWtw0L/zn6LdldStpqio79WiSNseH5A4N7CBgnIJBcTdGJ3i50XAA1aqJ\nimCjiTWDYVH9T0AHhyhhv2znSYFoE3AqfEJ41z7A+vK4Bw0R4iTrwDDdcTa0\nbAAKa5sqHY8JknJLjnHsykze1lOqMTaAnz81dLkVZgnhYH6O8lA8cwiVNfWf\nbShKiEuOBfwl8Ugr3aRH4DePi+76BDVtl7RgagAF78soFy3Kv1TBI8LhldZc\nZT4P/VnkDPweH1iUtEGCHB8YggBzJom1R39SYmzMp2SdakeMn4FSqX/QXIAk\nbCRu0JX2SWGB2IZBITizgq+3DHu00hgPNH4lOWVFSNO770xvZrcKgKBNg6Xm\ns20ydh5VhpYK9GQQ+TmnX5JgBPyGm4jIjyxDMqLWBOeFCCIRjf1K1dpExpNl\n7aF6qut4xPH1OKWZ8CVSNya7lgkYOu5NPutoMfo7HkcD9wLw2fy4ssfKmnFH\n6lUNacCNIu5hfeHHsRtFbZ1IWbZAu7b62JKLoxDw8jOV+kW+v+UE+ii7JpNf\n5kvC\r\n=3BPa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCHwNXn9lWoL4BEcfkI8pYEIz39rtIJzbthznoN1WlqhICIDy7axXU1N4mHEKDpQtPNdXm2NlHzM9GLYBOqMdRmJJl"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604796421-d647383b.0_1604796549006_0.6999397935802758"},"_hasShrinkwrap":false},"2.28.1-next-1604806140-d647383b.0":{"name":"@xdn/core","version":"2.28.1-next-1604806140-d647383b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604806140-d647383b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7QVK4z1VusQnhTpMjC4cbqao16+xekdgOvVu9GCfb5IBzG6LB57NynARSZY3VELGqn+sx7ft/u9LkOg2EoQWEQ==","shasum":"10ff022eaa24e2d14f55c991ea40204e8907802d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604806140-d647383b.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfp2ZqCRA9TVsSAnZWagAA2VAQAJ0R7c9VEaTvl3NQQVG0\negfFDww1sLnFRqXxnO77G5UK0nOw+hQFvpIPjXZcE8M98HipeYnygZP9RrI0\nrHhcwq/GNsRSslTxsbkeAbski3LIrDbqiJ8kngtCOskK/+0rADnG2pWKrKeO\nCz5jmT9kMsoqdHaO0yKNoTyqCDtm/dQoK8qzEe8CKwftZGhqaVA5htMEWhXX\nqbvpwVoKJvwdXiaBe4R85GNE2Ga6E4CA56eY0MgZTRUsiMOFm7BstL19vuzh\nEpP+QoUg/kspQSXVBYCLpdxLASJuFCdvHE/ogU+GvB4Qi2JW06ClOGlwfgYD\nNpvDuYoqOOKS2uzpAy8TJS8m5RKX2C7M1nxYvAaqWNkvwdXHKN/Fx7xKjxhr\nnAPWwZtuonOv//dYobxjOePX2Pry+/592cM4QbzUxAgyEsjDipDDsfMILU+N\nNibuxWLW3ag5k3ioit0daH3k3fQ0+0dWQWoQvzCeux5nTSmLXwvSJ2rqiP3z\nDRwGKIROM4eczAB+8+DeKH2fUQmpn2x/h8YgjcFET1Jjxi856a4BucXTcrke\nTv52+bPDf+P3t3ISrk+CdmBu8kG9S6Yjsp0zcnkSCDSw0h4KkuJKsfKtus+N\njav29+wda3k9X2XNK9Buj2IcQM0C5+F83ogMZCEnkP6KQm8lhDz3jptJpldK\nksMB\r\n=Thzd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFV0+aXQjluWZ4pPD7gNLNu7Ab4ee2S6CTpABEZeAICMAiA6cgTqzRxZsKVSJawtKONxDX84QJ32OSW2X5rj0BoahQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604806140-d647383b.0_1604806249682_0.0498594322699808"},"_hasShrinkwrap":false},"2.28.1-next-1604806739-e6fa4017.0":{"name":"@xdn/core","version":"2.28.1-next-1604806739-e6fa4017.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604806739-e6fa4017.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hLWPz9QJPSCJBp7C3u0ym3+xp5X6XmVgkIkdatqGCb4Py6HUTD1oehXtz3+1vzRwn333CfqfBvF85F3y/BY0ZQ==","shasum":"6b41e272f174b7e12e5eede21049a4c0f6070bfb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604806739-e6fa4017.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfp2jLCRA9TVsSAnZWagAAdn4P/RwRMQ3Mc4uGsM0jZDal\nV35Qli3O1U+aM8uNMHKUXEMzWKhVNpXLlKkrp6rPPW27wFKwfCnT2i3eCRC0\n89yVMSK7yllVoUlx3zBrfxJ2YqSemV58TGcjdmFACO9cJxsHWOeamAewpPLr\nWn62+SO+fCVUwCzUkajxoPV6xhRSzAz8X/p1xUftJgpAiZ0zTWvzeibZIroj\nMaaXgbRM2x2ONNfdkeOqNsAtjECbuQGqNKuwHcu9VjgL+whQ32Wn6cACP6N6\nt71AJgyxp6GS5xcW+ihNL6EgPSYRHoL8o4kyE95q0wsmmpiCbvWrpZd2RrpT\n4UFCzc/n7bMrqfxpaM8IGltlMQTi08YKI5qndNk0joODV/cXFZpZvaeoXjcP\nSQvB3XQ4jJcn3L5PfJqn8x9d18mqPOmiDyx2YdJxvSRG2jXOV9hTdgGueWot\nisjou+MvwTfNJF+huite0vtFVXyHuH35uBGOUkT+sNNT38W1KKdq0qM6INyQ\ntb6UpEoAWKSa+zTaTe/2zf7XlIozA1x9CuUyXwnqEENlzEOMTgaAGZP76oje\nV7nZ03QAoxsmga7pHUvdb+DlDE/Cx23o3QbjTrJpMARZ8bav/c1EtlBbTZ4X\ns7aNs+F1s+6fNJTNP3pnhiHS0E3+8VBUo/Nl+QKS27x6rEiGO2jOVzJUu6iP\nGR1j\r\n=UG1Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHmyJqNukbyi7DwFjpWCN3SJbbRuB64/YxZlOjusbuAjAiAq5RwDuOT3A3+NUgziTDOJSgXhYKIV1K5cPBJVHhMbvQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604806739-e6fa4017.0_1604806858660_0.7662929809093135"},"_hasShrinkwrap":false},"2.28.1-next-1604810153-ce9e66d0.0":{"name":"@xdn/core","version":"2.28.1-next-1604810153-ce9e66d0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604810153-ce9e66d0.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bgv4HIOlLjHOzq5/yMulyFz/bPkHYoswo1PVslEeMfKPlKqxIhMp/S5Urk1cgxjPddyRAW32O9RcvqOkhzP0ug==","shasum":"4db61b5ceb0d2bb89ade9021459855c391c5f264","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604810153-ce9e66d0.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfp3YPCRA9TVsSAnZWagAA+yQP/jCHEcKoO49ZwDAygTQX\nNIWFEyMAbzc4e0ywKy9m4IQZNLeaO4wsm+CPUK5pqf1p2Ur+hRJGjaQNXMhn\nb0Nd1E97TDzkijJ8yexEyTTSRQQOUA58qGCxChl7itjrs/B7UDUYMv2Z9xqk\ndqVOSh4ghwFDqb6woJV/3EMUwgLabi0+ofse7I+Aao6osbLceZLA0BLOZ0mP\nC+56s7Zq8qmPoZkVKRJaZjIVEVW74J1aCV0BLGoe4WRZm3SWlDDeu6CjT+xh\nqV97mlRuKLexDqESZxmfY3w0dM6e+PXSNrIoLNxEBK8au1bprx09/AekVHG3\n/UknTV9yMgCiq9yb3Yg8N5EoRfcXXybos8yev7pyjsx0rMkKe3ibWSfFEka9\n9nkgwyTDx5lDLj2k0aAIWREYCodKBczXZxw9H+bPUn24RX6KJSpu5wTFK7Kb\npaWDMRUGGA/UZcbw0eACVJXKgSIlveB8bA9r95og3huTjXBoSKigAHvuCtzI\nxaSC6+i3FY3v1f5k5ehRFBp4HPcCYxuW+0ZG1XevXsdHACiR+6x7a3mXiPZl\nJnpnyx03OWn+bOztd1kYKhg/ar6zcKPAtgaZ+SVx93lzOs1NK9s23EZ5Onc/\nUzE7xF4fbtVdSz3gfL+RCGYHZijQbi/DkwTq71axE5ysGYfI8B3LY2A2h5kO\ntRMB\r\n=X/K9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvQNi58R2azbA2WbLnIDW+CJ0jRqHnqFKovYonO55/ZgIgPePU71fEJD3EXqJn562nntvdmUIdW0lKiO0aRZPaSOI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604810153-ce9e66d0.0_1604810254756_0.2008174211000575"},"_hasShrinkwrap":false},"2.28.1-next-1604814318-af966061.0":{"name":"@xdn/core","version":"2.28.1-next-1604814318-af966061.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604814318-af966061.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-D3I8aMLMXh9fNkWsCiHB95P1E4QGuVHy2uv3pITd5w+4ssgJXuoU2YmNHQMDfyd5S+O8Ovg0sRYVRUT6FfnxPA==","shasum":"3c24e66791b462f6b84398c97a8e30e4cc34f93e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604814318-af966061.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfp4ZlCRA9TVsSAnZWagAAQ+UQAJF+lsvQ8RH6Y4NZALQt\nqrnKdDeSUCWawF9KQJWkvlVHxDNfGzkXJpMpkM2POz58nNfx9a1YBDRoOpQW\nywRSI5BT1utM6/4lJ1ULZQ/e1E+Yd9CS5Og+1so3ylqSENTZ4K6RMBfoa2W0\nnBPSL5o0PMvGLI+KoUTpsIm2xPcbvVnYEapxeJWwOJE8TZxURHhwWgTzXo8H\nB+C0PmQTDWtD++qwQ/U7laNPGK6oi8HVp2YLjnAp5ywMOK1A0RudU1B/dv6S\nTnN/vQlAAy88oN1WsZT+1bviMs+x+xX6fqMa+ydASQ4/JLArumS7rUweCqXf\nsvZjwlAwkLrMPUpWU/XhRDe7/FkWGH+SXXCjIEwZSkpekTIBJIzbyEhlNk6n\nmN13ueYtHJFum2qHFUjrCy4fmLD6tqTRtVszyNV3t4CtQUdsjQy+rOCXWByw\nt+svTLkad3XwpxFHRIUxWQ8u4qN0vy/B4Hovi3IDLMFaw0mMNVpP1z9B/2rf\nB1Vq71eWC18gRZZnt/cKky5UpVUHte/QfnXbRM6dzb6D/lu3o8h755MiOB7w\n+sZsX+q8xBBNNRIZwW0DtTAIshoYNemR/0uNwEJhIm52CAHRQNNaYNMqiybX\nSm4XbzFPUKfqusT0qw8XK26j4dz8maPa73g6lkT3mMwRXvmvDEBXZ0wE48hi\niG+h\r\n=10oX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIECXdikGGWdfcrDpyiwwNZ0teOLzRgwkIriOSBr8/VhKAiA16gHAO5zZ+dTzxjZk9nSzt6O8G9oIVJL3rhOzxdGnBA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604814318-af966061.0_1604814437199_0.6452186459118399"},"_hasShrinkwrap":false},"2.28.1-next-1604845683-af966061.0":{"name":"@xdn/core","version":"2.28.1-next-1604845683-af966061.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604845683-af966061.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-eNoI8hlYCKNojZ97nGQ4nDxsRidl72htzePpX8XSjMX40sgA0Le+wXyjIyhLZY3rVo6XcN2XAjSXUWLS48jFCA==","shasum":"ae22098f1893242e9d04fb3fcc284389edcd76d7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604845683-af966061.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqADdCRA9TVsSAnZWagAAM5EP/RiI2vq1tRxvQa3dyzTW\niq6BojEFNMXBj9IIzQjEohFRVddpwgJZGlhOS5wXVAY5GucdMFgSwh8CpthR\njnG8kVhsij0LFGUMppv9F8aRKHFvlPcYtQe/VtHhkzYLCS9rrPYqq+J2kFuI\nTRl3DyfQHArkD6sU6sWr/bOqGmdpvsQNYSJgmRFLBXIqo2LwYu3crSD/LEcu\n7EZlJ5Fz6+Lb+dN8ycS4ZlVslyQ1KLUrPy618btJYp1e/60rnL3T/nJerMaB\nmSYrrLgnd1HsFWnbaS3fFZsHol7bsvuhTGhLk+N/Q1SKfC0JEP44xfP/DrFP\noiTvAvbahciPsHN+UA1Ziz6qFsVy1uXYpVQn+LqUNgEgfpAUMHU5ywS97hra\n5dAjv5T93VGE12zVnzi7DHJucHHVv35sb/W4x1iVr2knKiDgcKRCHm6b8P1X\nIanO2Q8aC/jlihG0mgVeVuFrgg6yprQaH7yKv6z8A28rAw/Ggygd+fBecho2\nh4vh8eD/3rV6vMoeBSUyPgrRf2CriPlr6Abe6rA5SY4Y1pzVHCdbsrfCOmoE\npWBx4JTFIoimm8uqqaXrLSipdTeJLret7M1bLCtRCK74lNzCmqxS/4QbMc05\nje66WDFArCOZN7B4BXT1EJuTusaIv1MRPMnfo+ZzX1/F1L2IGPbkP9Gcqbo0\nunS0\r\n=nAV/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFZ02ODGHzuq+4GmSSINwZN7U2HoGkfrOpDO/HkBqD10AiAA6cmIFh8IpygnrD/D3nfUuBT3lE+6Xroui6/vGIuvjA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604845683-af966061.0_1604845788587_0.6674366275459203"},"_hasShrinkwrap":false},"2.28.1-next-1604852554-f803135c.0":{"name":"@xdn/core","version":"2.28.1-next-1604852554-f803135c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604852554-f803135c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VLaS8OyRUIjHUUkOI7U4/P9Gx6I1DwpAnEyl2+bDEpcHzXfl9HWfwnBV1qVzqEZZZkhA1vdvadf/BXnzJ4qqxQ==","shasum":"26afe066b15ecae5af01e389aabad070aa173e81","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604852554-f803135c.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqBvGCRA9TVsSAnZWagAA7AQP/3OnSPrgiH4JO3GfQ9hy\nGE2yJ0E4G6wAzap9opRK5CVNTUbaseGCMguU/OSfHGgcx1GpIQ2Ixux1++Dw\nlKKZNdbMe8w7o8cg1NUW+uqAdM3S+VSJnrzR7HvFz99L0qYfvM/5qCv1Df4n\nt7S43JrYyt65d7NjcwkcjV0KwD1agMTyivX4e215JvTS6l1ev5NO5DUoZSo6\nYIA+4wvWs17fRY6IC+KZ1oHkfEHEXcGD9N3qHx0g8XpnjUyPJkRbIkb1KJRZ\nCzo7tikabI9zxkROFIisQ04uiCZGf843y1uCIMyw+FCxNMcklwLHLtSNTaTK\nYnHzpBEAeJp9I7kOzmHQPRYLSQvKREELc3TYsDJwQLmOD2vpFR1h1EIC7YXD\niK9dQMJahVPBud+Qdcd+8aAc848UCF4tH0B2SN2bE0hDOlyw78Yr/OIO5QsL\nSYW0VTblcXN+cnSpdNJ21LBQW1MASom+5N6CeBH84AaN9FlvBngaCpeFN23z\nNGdVyKzMue0rgnOfwyGzF8YVUqg6L+m9GY+MePVck/oLRdmyVpvFw0y3YkBO\n+C/IhO0W/8DiLOk3Vno1bK8velHGvEJnT5ydj3qGsCpnaQmAdu38pEcMVZ2Z\nnqkgrYj2pCwwPa0Rtup422PHhG+xJmwoKvGOeIf5UbHDdNg/LR43N7nHlHPo\nXDJR\r\n=BMta\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICNBUtiVyC5cBFcmi/F6aRPyN+XO7Yp8NQWO9X27UcMuAiEA4J99Jq6Y4w1xpmpjHONA5hs/3WUKgdebgHgOEVBqzK4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604852554-f803135c.0_1604852677116_0.6193291962776111"},"_hasShrinkwrap":false},"2.28.1-next-1604924391-db51e663.0":{"name":"@xdn/core","version":"2.28.1-next-1604924391-db51e663.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604924391-db51e663.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1CijqikiAQSABCzfQvo3+HFeCXOIj9tcwnpRyQuMZTAewllrz8H0UEn9PNp6pFEDBAvFpsWHQT2wPSqAg3E+Hw==","shasum":"3b38dfe63bbc6180d89329ab764b6e420f43da2e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604924391-db51e663.0.tgz","fileCount":169,"unpackedSize":635164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqTRSCRA9TVsSAnZWagAAEwcP/RPkIQn4q6HiopARM5lV\nbyT2Mqt6Sm957b8G+yL7EwAv48LLMiXTzx+imqxUpWb0e0bv1/qT7hzw3zW9\nYUGB2CKa/tr6xSOJ7xj8jJNzz8DUmocg+2Fos53WaxYh1JMaj6MlTi/E/rZV\niwYzHgZOXPrtLBZ9hmOmMdh8OYe1trXkwpXmGNZzY3SsYwIsaF7PYg9kGbhf\n+pEqEqdQeLnJ5LUyNQHWYLjK4fYngrxAulzDnS/4Dv79P3NwtSipkMr0IDo1\nxAY+4JtvrQ3VFoOYFSdiXozvRhDL3/g63inDUbZmK10V3uVhI4J/WAuVzw+Y\nPYtDIFayX7u8oCn0MNQgj1fynTk/nrVBLVNUhrrVbZ/ajOX/j9ZuXnocB73T\nOsL3kIWkP61TDP7v0flRGyRPhuFUzci54eEqF37X73PaBLSw/0GtKJfIrRjR\nG/PT1EKSYSjP4+3ISaNHYq8+9fOdlZIOg1B37SIjw9X0IDsC3o/eJwETmxLF\niwfMBW/bS4i+H6DNdHiPrGyue8eo1oguslH4aPKDWpI2tcDKRpsuXmsK7Cs3\neaCAupWz58H4CdKP3S5f1NTKj/Mfo5eXRd0PmhK3ybanKBFqP92ZujYOOZYM\nqkzZWxeQ1EXRy1HATvVRXd9wAvZir4XNnijHDFAAtFXGouZGvs2VvPvQeO+2\nD6xr\r\n=KGCC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC7d2lJ4OdPBdmc8c9fUtAfnSXz3PJ+xIDXPMtwUvqA/AiBoY4nWxT4jMgFRhJmo4NEhLMr/TdgHzCdROIDPObf9WQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604924391-db51e663.0_1604924497350_0.48608862163663424"},"_hasShrinkwrap":false},"2.28.1-next-1604926653-94071823.0":{"name":"@xdn/core","version":"2.28.1-next-1604926653-94071823.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604926653-94071823.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-G1uFt9HMVosFDID45rp3ldy3pI4nv9IcaZyErIO9x2qtwe4MxCdovr6APmzk1V8q45xLAdtEJ1KBFuzICdd+0Q==","shasum":"0a4d72f4ec0f6996744ecc407094163fd37f0af7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604926653-94071823.0.tgz","fileCount":169,"unpackedSize":635164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqT0/CRA9TVsSAnZWagAAgjsP/074OZ35Cgc1M/bBNDMu\nzzyymSySTuImEFcV8vRr+DlEJgMB7KHWeGkrWk9Ef4Yh01NVaMTAENeNMsSW\nd5rfWe9BDHpykDWywjOfdm8VNWr8lMukxl6n3XFOKL8ryNbPa/hJ2CyxGQ7D\n8IsbZtY2Ta2TS2ZtzDvOv6Tl1eNTcTLsNcYZH57u6dz/cf1QwlrmU1vJa3Tp\nWAmflY++ZVVGyPPOw9EiBasNIArfP7VtSpFnxVYJ+7fn/ug2262eWzyxsODK\nMN3nrZj4yO1UWN5A1tPt33EqAt0nWvSBUduF6jjOVYwjp4Q275lY1jduI3lR\nVb/gVAUxVPMXZfI3oSHS0qaIbh+VzojHQaMtHwM7/C527E4MZLYKRpdp12+N\nkv/HbqcFE6U3mR/C+NgOwp0qb7Of+GRMEAOhP5TkCA4Ptyfg4joZSsy2Is3u\nF1tZFmvkdHEalMvEjYxQED18t+db2HlDz0vMTtsc+tP5a1ec0EKXrt8mH1uh\nF1Y5ftqB+bsYhexam8qPZKk8VdR5eVaRPmtCcngtmdFktISjd0hBS0jaIZja\nIhvNyStfioArVCNBNgAJRBnNtVUMBHelKBX4ZzCAIspQLUMadq2077uZiIoX\nQNrs6gqdv578d3m53Z84xf9/2z30iQztFXv6wh+uuH9yqMQXoh1B45dKl2bG\nAioR\r\n=8Lu3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlUG5+emtgmp8LsbKJNJUIjHWXtWGihjEsKoJIAo8SAAiEA2dW81eQhJQS65DJp5O6qIO65Tr9gasY4xBOA7M0kdeA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604926653-94071823.0_1604926782378_0.2488997799192194"},"_hasShrinkwrap":false},"2.28.1-next-1604927316-19869793.0":{"name":"@xdn/core","version":"2.28.1-next-1604927316-19869793.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604927316-19869793.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ko0ab6oGUMavBq4TmkZLIW54j0ZHGNlqzvyBU0Vd1gkmaETQZxdKhvanPP/r2Ch9JPW1+ZRlSEGmydPSXgT9MA==","shasum":"9a18ef453161795424c7474481ad1ac89d598861","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604927316-19869793.0.tgz","fileCount":169,"unpackedSize":635164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqT/HCRA9TVsSAnZWagAAtvgP/Rf/Hfmuk1owTKLUk4ND\nyGm3z5yRZYOhnkRXxMFWNcb1wU6NP3pF42070as8K0IhSozETylMB25OFY+6\n8/yibO2ctfwhNzBv1e2YvcDju73Ji4MObNRrTv5AB5Mfjoj6ent903P5Rsv9\n1lZ3mLPD+8rGilNoRdGd028f50ifKbTzzCDpyiqyWpged2x7uu4dDwKpdCM4\ncoGsGUKb1xMO1uDxX26q6O/u58s+cYqvZfnZARPilAJGsiOViDFoSYvinScJ\nY/fDhplN9+wEINEEKAXo8k99PBkm4FDpSG2rvBZB4AQCJN0tEhmQWhHwL4Yl\nV0NCSCdhcerqC0/pg0/DwYwkekMn4tfYCCVPp4AYdKqPmO0U9Jj0UrjgB9sO\nKWmOTEoiXGH2VesWSwImiaUIISj7xG6/dglXyvp5DJ+SDd0a0r7ulwn+ABR1\nPI69d/D/h6ffUsD/Cc/fhFshJVoa5akzzp8byk+dEW1ivwgoqXjr9to5o42T\nQW104yaztWLwwAq6lOrLTo+iwAiRdSDTN3HowfPjGsONlbxYaYwloTihEKjb\nMoTS5uR9nGfFXfxA/nS3r2QbAVOWWZ6kAYJJfV4QEustZf4mJz2Oi2A14TWC\n2nfwa+UbAxukYyv8q3IXpkooZNjPt8fvAcnIJU1SdDAPbq/TpoxxqfD5ujHs\nV2KW\r\n=iNIH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHqTgjr1TIsSz8IPpx57agRXMU4OySAivyFszfvip3FIAiAbTPkhSpnjXXKHvShKPgrezMlAqb6OqN+mEEnU6QVT8Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604927316-19869793.0_1604927430865_0.956857249370052"},"_hasShrinkwrap":false},"2.28.1-next-1604927756-45d59a53.0":{"name":"@xdn/core","version":"2.28.1-next-1604927756-45d59a53.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604927756-45d59a53.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3j2UL9rIfoNlzUJbMQ2oKNOv06vnhh4ZvQe6dqrRN8NvZRvTifr6oGedbS132x0JdYOVheCw5yXce0F4izUeqg==","shasum":"2f46e298479857bc781dfca43bf2cf6f99d17a87","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604927756-45d59a53.0.tgz","fileCount":169,"unpackedSize":634767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqUF+CRA9TVsSAnZWagAAT60QAJ9xzzOcRoEtFhl4TwLV\nYCpivC5RljOtY3pRqXtL7mtVcTCzKYgFXXtQsTfYh27IbyRtrVZBBmsnZO1l\nanlRvZQQS2xzu5eHIOcZB499EoeZ8n3qZAXNrjng6AY4go0TxcHgpi9PpvZN\nnmRnhxX9kZr5hfHJrWT6ghb9alJX9e01zdLz9yPyBIv6N+m3KjYOQri3O9U6\nGFiUa/vfac9aAlm8ct5ROSXgP/5cRhQqIUAYHATlncgCriys38Ljhb/rxIZO\n033oOBMC7IbrrQX5Wa9nXlyID5EgY0gs1KjbqX0ijYtkyH+ji8Jz3iUP+ItB\nwa7G2BIDEslHTD+X1rOixydGCDqPiwShGlDF4WDW1jsqH+4T7FUPwR4+FHZi\nS2BiKYW+lUfxHngl3SoTNfKxmjQ9mVK6C5lutfpMWJPquy6Lv5WvOVEyXyoi\nMiA7UnoKwWfM9TXyLRIs3peuOtA39w0ray8s2F2eWo8hqR0HpJe4g3HQQeSn\nCZv7gviBy+sz/MQY66skweHQmNCLkXkR6TV0UZJgYNlxFHUgjUDRLDY5NafX\nnlnNP11YECK1u4lsjpgDUZwJEDzKwOKQu0uEqDncVDMfkxP93jEz6YEakykS\nXTxIGovXFA3FtHYYRLcPIiaAIEYRpa1fhrDxs01Gvvkygpi0GlPK3R1hED+T\nYhTu\r\n=sPdz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNxwgPZrTu9AsdkZ6bivoCRRXZ2rZDKhWsxDzwGo1ofQIhAJPIFxVPq+xKiVISE9BTnoivQssAvMY5izZDrUiMWQAM"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604927756-45d59a53.0_1604927869650_0.23449508945647413"},"_hasShrinkwrap":false},"2.28.1-next-1604927821-eb204837.0":{"name":"@xdn/core","version":"2.28.1-next-1604927821-eb204837.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604927821-eb204837.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9ofR3fnr56ItltPlr0SSh7G8PvRsBCPYHow55M+HVjEz+uDjC3QPChHzhb6OOzeTIDInE42XgEgjLDHYoe174A==","shasum":"1aee81978895d7880ec02aed98e17862cb419c6e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604927821-eb204837.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqUHDCRA9TVsSAnZWagAAPS0P/1mOxEZN+vcFr+/acrW1\n69PpjvHXpNnCawpS/SOJgd/otsxXlEhMGjnAaMxL71+y8HuYZP0c9Cc17BpK\nwOCg1d5/diMZdmuCSORceP7KcxzmQCaGkWdvxu7KkG305aNrirpd+ApHLw9N\nRuM32lsHZ41lGzjK+wmTqMV+dvkAQ5u03ZJGf7zpPaJjkJxTeM+tYGefKjUP\ni3x2eRAVmjs9DmpeEbVv1OY4KkwOUNHyE6mCyZNJVFTeZ7GYqD7LABFiXSUu\nNv7KCO1yO+ViDVyjEU/uosRXFlMr1LyezFT5+fJZ+J+RG/k9e/8aR7+23VdA\n2YVyefKJvATvVMN9a34sjD1Ykv+W86MFIwjOgYHLGNm5Dssfu3oof2XgSuW+\nPtsFw5pcjgyiQnA/PZ+L97JrZ3ljGVLEllHnwqac8BRvErzPLKhG59byLH5y\nXcswn2xaJ7dq15N/GofGeBPKZGF0OjVGcHQcnqaLirZw4ujF/sf2bhTE1XnG\nd6IcfBD3KggvPnGW8La3ssoCAA1Jdl9hNq4bgH1koVpsG1e0k6M8yCPHUWtS\n74sBjrQrocFXx11Yr1PCkfMocaToTasVvb5uTg2Jwpvb+U9Gmomyv7O3Zljr\ng3D8QuoUtLBb225hhOyj54wY3jL7Pp0iClmnKZXJpQTd15X8D7OLnb4+L6HL\nU4l+\r\n=/0Jv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHM9BHur/MvAC6AWNkAhOEcPPxhWy0L0PBxyE+0gQFlSAiB1394ehmDlUAatsVMmfhxXH7I9L+jN4TSEcIiifac1Bg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604927821-eb204837.0_1604927939135_0.6468265393203307"},"_hasShrinkwrap":false},"2.28.1-next-1604928384-45d59a53.0":{"name":"@xdn/core","version":"2.28.1-next-1604928384-45d59a53.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604928384-45d59a53.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7WaVwVIs/oVUlUaXZOmv/6BaV+Bw5lvBcyzAB8ejIfhnnZ4gWqxKtGVHTDcUvdQgU+xGupVbKfCkQxKtxs/gPg==","shasum":"b80bcc85a11c268a7547a4bd1da03af8eec65719","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604928384-45d59a53.0.tgz","fileCount":169,"unpackedSize":634767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqUP3CRA9TVsSAnZWagAArjMP+wbGXRCvab35M67CrUMR\nDPFoXFeUlfAUOMBlsmxMFPpl6NBJHShE2YrR7Pn3WPUl7Q155Yhj/Rva1rwl\n9lO/syKxJQ0LSL6Kd2B5erl/vlb5Jm0xeVf3fxGXnU3aAphcrZujIwazGPbB\nmoIQPvbgTIa2tyX3HHkdyAwlZQcc81n6m54f9MLtSIHmLGl32urp8NQ/QeWl\nqgrD2yu1NmKGPMzx/JbB+aDLCP88zFDG+NDwCPARLOFhLrsyyaOhHIlcdyU9\n8RL/pSghZQ+PMsN1sS4cHzC6M1mxzU2DFIwxUXIR+phf6nSPjkqSBpA+5psq\n6g1Nw7BzBkiLZdE+1gHWL8+cq4ZxY2iF3Syk65qMAmKQlJmI2LfjNsx63Qco\n89y5Pr+fEeiTXeVnjUVqzSqevfnGRkS1BBNvIes+nH/1fsOL87WCDaGloiAp\n3kbB0DUOQaiV27PDBkRp3nD3mAASNIPEkH91KXI85prpILXJWpPKMd//l4EO\nQZHUa5jT2zUlGmTfkWMfEqQbc5YpijQFEl4XiuyMob2bD7PzwVGOasEYYSbY\nkLL2N5gVsQ99ZcPWDerR+Mg2pIozbiIOZ6bhdXAMyH2jleqPrP//1xhCg52h\nJxza/vAbexjWjbIznRX6kFc1gXHeJlXugBtPk5QYNvZY0E3jGB9G8jyNowTF\nf6ie\r\n=0KpO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEJ0JrrQ442GRsUaSCSjxKC6oSs2/zc39+M/UqtSX5bEAiA3+IIEHm3W7z4/Ls3oRhK65sGCM2ykhCtHndCYGrmTxw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604928384-45d59a53.0_1604928502867_0.9823591347372957"},"_hasShrinkwrap":false},"2.28.1-next-1604929600-6cc9592a.0":{"name":"@xdn/core","version":"2.28.1-next-1604929600-6cc9592a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604929600-6cc9592a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uAzpj2pSbQp+OgqD+EZv645TIuE5PCp2Uvt9OV6poociBCmRxikWoRcmETf1vEdCPgE72NzYWWYGm7+rgBgJgw==","shasum":"795aa4fa8a85269004e7a8cfb3591dad380fba2d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604929600-6cc9592a.0.tgz","fileCount":169,"unpackedSize":635164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqUi5CRA9TVsSAnZWagAAQyIQAJoSCsqM8F+cFUt/oy9M\nq6RoPolyztNjYDQrcP6wUn39j80yJfUGGIGPaFe0ODP5sDB5/j//N+98dIY1\nbCbJ+xxKRZtXcVaI0H6sDVAs4hBlueW9aQGzASoL/sUf6hMDyj4xXExYK8BY\ntU1fBmey+VPdzQEPeRm21E0robNrhUXtd70weCWegrYipwAHwJcyJXJTvVJ/\nsipWNFUxzk+u8Hq/Eq0P17N78AyNJeQLm6KfD7XbMzTsF3hXkEo32OXZremp\nHGOd+ZvOgZsO67VjuPpPGLOgn70UGFLk1gmjCdm9R27JRXxxNlhjNCCkomFD\nFu7WoVOVvQK9B3QixRuKceEYvWrey1iMBI2huOQY1eGpKrOzQBMpv7i2pfD0\nD6d5py80oxcwvK/WsUrfqVDd5h5YiYiLMstZ5O08sawuJHeXAX0FQaNPdCYn\nRbaamtj0iB9QwHudlRbmOkiTemRjLMKwV+eQrGED7UrBsUISw9XyJXBdXI/+\nZpFqIDn7Pvv8kk5FFnm57/g65WsA6D9gA3Jr6N/9vL4AjV4e25Tm/q8B3MpD\nCXmotHtVM1U1hfQyw3WfweUfGCdxgshu/ec/NxKscoRO2kW2gNhaGIXhOzaG\n7QBpGdpum2h/CVKI/NDqey1NKC+2qCMRqnzGhNJ5iFmpSZHGRyJB4unczxlD\ngJYf\r\n=DJ65\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXlVO31rN19mXp7B9kQrmYa6AV3AHeTS6m1KlNGsupsQIgSkC6+S8kyFNUk46c65qJv1Phgu0OOJ+VyLQ0smdhTXg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604929600-6cc9592a.0_1604929720528_0.6037254854407421"},"_hasShrinkwrap":false},"2.28.1-next-1604930281-f70c5165.0":{"name":"@xdn/core","version":"2.28.1-next-1604930281-f70c5165.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604930281-f70c5165.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mD7WG0mcv5gjMlttp+asvzpBxEerM/srSE2XgYFubJ84dprvba4Di3p6OzbncpzI7J8w6iWl9m6/mrpz02BlzA==","shasum":"84634db4602418d252ff37e9b1ad4cc117d9ec39","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604930281-f70c5165.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqUtkCRA9TVsSAnZWagAAJkcQAIW/yYRpNCoEGi3/T/XJ\nqsk/ocsbJiPZ/JOnB6n7HhRZw9/vQ6OL32LYMnTucl/w74lQuhCTbmqSzxSk\n3XQUPwfrJh6ZYYdK+6lORYTMh9d8YSn/1VjbKExyS6rg1EnolTc8bxD3hJ9c\nIWyywa7S1xaNv6eYvPW0Rq/qqHsstH96n48dBshMGZ7WkhrmzAZSS7CjSho+\nwLuxBGVHTo25xLlGsSJf8120A6fD5x90SOzNR0+d80fw/sHIBeb/bv3YtB2k\n9A6HimaL9GihB8Fpmw2tGCL4PADQqRY0nydTgGC39Hh7oYBCMa6cMIaz3APE\nCp91dDRFEDwVwaF7Z9rAWcQXylPrAi87m9GVxEDtrCxNBQ8ZUUATogTp/HSX\nCfpQIrrC5AMpJBfrphecpK6IRBvCkui0b23fi2LxjoU18Nin5EARIvrzB+QB\nlrz1klE7uiMMqzt848av4s9BaF70F3YV5AbjIIywjeBZnOhjnAXKxAwi05Iu\nyJpkPSURzvv68Zm6pzPLjFqtnJ3GsXutPqHxn8uXbQGCWBYnTkxNSdfw+jbe\noTSslJ5yoQBs7AgygmSuTDFRlYkatsWBIWye4NAbV3rpq8XRb55/f9DHwhsC\nqHqrkO/INI5CLHxkolVlB3TRHqcjHcxj1BhEVwCBtb1Is+fxZtcvZtJFQyzZ\n70Av\r\n=Ekyt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGC++O8Qmh/YD0DXUbmLELm8CfEeAH9QyP9zc96TsekbAiEA2ayvV4SQRFgkJQe25XnTKglV9aizxNP0Jpn64ebDNts="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604930281-f70c5165.0_1604930403378_0.6547489675412728"},"_hasShrinkwrap":false},"2.28.1-next-1604930388-d57a0973.0":{"name":"@xdn/core","version":"2.28.1-next-1604930388-d57a0973.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604930388-d57a0973.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-p+jfqmDrBVdqLRjOF1ltpzJfuBm5LmU/4iJJlpxd7JIMzhq+RlQO/7gdWlE+ZswWCSkU5HCeP2kPNSivzF32ow==","shasum":"5ba24141129514c5603da1f7494b764b6952d9c0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604930388-d57a0973.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqUvHCRA9TVsSAnZWagAAn48P/2600QOnK0G8X/AHhGEY\nDo22A1FVJAPjby9UcbIKILB6CTbRVGPX3yo/7Ey9cfHoH3R2JzUJSz48y2ME\nY5OIt2X+d82ySBbyWtEd5hSEmMZ9Fcl9zf7j1K5COGPQSwnwlwDYMLk9IQud\nmV4sPwxrh1gQCiISl57+VnT3xdTpPosHT/PXqdcevdY0zUa9k3CMDspICjjk\n233HCSc1VmcOZFjWYluJyACGetctBbu6KhyH9wxTRU4z89+GpSI3RJYtfxyK\nLxnC4qK/FdWgcRYxYSxVZXQ6IOCUnVLqCIsEvDsfifs0KtAYKx77atWMZva9\nwjg0AyzmzenOTnTzaE6L9XCbsTlihAQn8wthzEHhOcZriMHeEVmuHLaXXRhx\nyufOuG2qf0VKDSg2AgR8+Dp6Z3fLxS/2iQbWpli94gQxlagszU4d7h7OL+Jc\nGgwPs3aF+ZHD1wsfUYj6B1jv8cLgGQ0SD6HVauFjrOf2eq5kEsUfnRrVQxB4\nW4s8tjGJbhuloFxlFhO/3yy7r0MMKZM958M/HQOO1llH9VuZOTYH4OVJO+jZ\n7H0now8Lm2WH3YgxdHUsw9SLX1jdDYBjJlTzO5KxDiTVG6yU+G2mHhIwhV32\nCZL4NNL0vQnM44zHr2dBoTZcnfy7btovXy+fpNPR560zHsgq1DdvXn8v+q10\nSvP2\r\n=6ZUd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID2eprCR11O8PejH4DKJ/S1QZhqbCcJvRcFew4orysZVAiEAoOVnuqSWO6YmE1mzc1nTF7k6OXrsFlij4GSly6t0w+Q="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604930388-d57a0973.0_1604930503203_0.10029664973736141"},"_hasShrinkwrap":false},"2.28.1-next-1604932831-0769ffbe.0":{"name":"@xdn/core","version":"2.28.1-next-1604932831-0769ffbe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604932831-0769ffbe.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kwimaDS3xgmtFPME9lU2EjyhtkhJUkYSIB3h72Qg0WldHUlGDSLl1i0lX3pxaNXJRzt7nhFw7tulso6cGjXgSg==","shasum":"9ec420ddd8007d05e973de0d0bcda23c20afb6cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604932831-0769ffbe.0.tgz","fileCount":169,"unpackedSize":635164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqVVcCRA9TVsSAnZWagAAzVcP+wfSZAuT3hm86iRR5OB3\n0iQtITBAr/t9qjakkLYRXQjVKbPrj1SphaqLl7liTzu/v+tlBa2vQ3OFVeRa\n98IEl7PkVEphVjNQsxqRc7oTX/eGnEPWIEX7OlSS6K4Drxwtv0raQmJpGN3o\n6CCsevFvxrkVplqUZkNmWKgr+4t1Hz9MoHfzAgMlcQW1N2XVzkrvBcRDbNzd\nQnYwV/BVXKU3kBMJCXL6yp6Xel4LstuBITiJMqpJmyWnhiJDnD4J+htP/05x\nxoA0MZ09fXEe9a1S6Yr1t/4+ImvnF4YdKo62crY26sovnAddFa0ru8CPoVAz\nD7Zce3Hz1uYll2ryinb22h/qJ/Qju5fN0poodQ/xzrtCPr5CRlCq5g+hyhfV\n8UU2cNe941Z6MaD34SLZIXwglP8gEmNLsGLBsYVwmZt2/7SggeXkN03CBY7t\nmvoPLpeGxOck6bdYksuH8RkM9qDuZnVaULOTEkjGGY/i91cL98TERggh1P1d\n+kUmA+gaa4fVcaHs0tCSG1vf0OUlZhToLdh8jC6C4D2gIqCJFh9F/I9v30YQ\ntPyUwjMRw5kHh0g6TBDcxA956qQqttG953dRhBgSbJUtk7U43MX181lLO6KD\naMfo3oOA2gKyK8gdurLTj8pP1Y/3AvOrg791u6rj7ZfgBF5GTH8waLrkiHgr\nODaN\r\n=c0o+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICohC9sCcSYB2Ni/mzqo2Ag8M73/y6ANeXbn4zo2Cy51AiBf+mpFurdf7iH0LRlW00zhstmFyIyr9Jte+H6TILwtzw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604932831-0769ffbe.0_1604932955994_0.5024548675820211"},"_hasShrinkwrap":false},"2.28.1-next-1604934988-9a50f1ed.0":{"name":"@xdn/core","version":"2.28.1-next-1604934988-9a50f1ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604934988-9a50f1ed.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ylXj+NXHbFhteY+ExCgwN1w76PT4hcvJezAr5OHXXYt+wv5fRbD5UpsbobtCmHod3HU2HpSPFxQqYW/db7mNXA==","shasum":"1c15231490e622f5d077fe0ab14b7d0eeb120b2b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604934988-9a50f1ed.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqV3LCRA9TVsSAnZWagAAjlkP/0wh9dKCNc6pumqnCKHe\nif6IhxvrjJv4YpwIw6o8P/uuz3E2/CJxkg873VS4Fen4va85TXKXllAZl/E9\nZYmq+jtIsTbsog+qj7ZrDPoUG4LdjIH4bMRWuwEnMtGeW77e71lrN47EJrJL\nJ1FxzXYZJbZE73Lwe3aE1ue2w/3jhjLEQpnL9+a4tXqmlYhUMIGezJZoizGC\ncocZeSgH+IvCYBxwln+lb/FI9+1wsVhya3SPWRzSySuKoN1Oj+YC1qCVMu+d\nWBOnDpE/AeXbokwoQbvF0b+TQ3hj/iWRupnioXg4uUBHdTk8gb0Egp2A29k6\nreVGReBj1O97UDeEWLwGoS7dYSM3RhivCrCGZ7jsF1Xll0tOd5XmRlKJ9C8G\nAL8+zUOaNxHB7HfIi/7lBwdSKCeijcm4QcsexutBXjb5kSJ6B1BOM7fKWCk+\nrutXrKq2jNYfjdhYytLw7Smd4OPofNwvNQ6TEtPykmisinrTMhWkXMlXgBhL\nec5TE/6oFnLYeKzgUiCslw+vzly/v4+aff5yget/8G6QS9TbbKE4jrBRQ9i6\nY4CsXTpinC7xGPy7I5e7scLD+KOb4C0pqxF2W8hdYNwdcwsLfvkhB23EBtJV\nj1uv+z5sdY9RBU16BikpDpE1f++/FPZig5uTn7goONSGKcNveryV6E06y+ZX\noqSG\r\n=zVFk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBWYYcHA9r9uCa7m585F259gkOln2x7IcE/YcpZ2tP5BAiAdUCHnq50Uq9f9sHUJhU6fD5n5gMiu8GpV9twP1JN6GA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604934988-9a50f1ed.0_1604935115306_0.2152781043172618"},"_hasShrinkwrap":false},"2.28.1-next-1604937150-08106f6a.0":{"name":"@xdn/core","version":"2.28.1-next-1604937150-08106f6a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604937150-08106f6a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-z+/Z8e69M3V1VcIVdzsrfnbbhlA7dA8HvZRXNqAUlGsQGkmHsNR+NsQsRROXM7fB7wrja4mssMdX5xlmFKiOVw==","shasum":"13d365a532af75e9dfc723f27bd53c661bcb5f63","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604937150-08106f6a.0.tgz","fileCount":169,"unpackedSize":634924,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqWY9CRA9TVsSAnZWagAAuA8P/3YCIJYyFwCb+a8v+W/o\nLQIgiC3UAEStjkG9lR2DgKY4kmUepM1Kq9Eszfa/7ahRg/VvghslLXtLv7z1\n/DAPdndgOlYVO43522ikqSaG9+o9/8RoEkrufChEswGTpRlI0wTfNw4toV10\nWTe/DBPzuw03AermA1kKUn83/ueEruwAjVVNsKn5QbbNcHowDWoeNjGJGPtH\nSETpqRr6kvMRf8RvWn+uY0BdWIWORuvaIXdwhpIutszXxzW/yFN519QRQbBb\nnDjj0LgAYOKNA7kvACA/jmlc7GsUeXJAJBb9GFoNupd2IL6RXg3/PZ2VmSKj\n2sYA8DS6SWZrrscBHKlkZi4NGk1c4ens03t5mb9O2PuYh9F96EbFSOM7mkx/\nHKbVOqTK6NEyPDY8XRhhQY+IFfRkAH1fPtOWsrTpWebrN0xYela4FPtZ+ZMy\nwJcwrDwjhPopNQErFkAlQDN8E/r+h+HcagAvmk2ASOTitR7x3Veax0aAk+aI\nOKEoPEU2jvVDRvTQ2OE7oUZM8VBnRUTaqptpZCxyrJXAJTeo3iTVt/tOSXW8\nfqyedonizztN1kDXAfMvi7lzLr36VYhguhQ6eDes+2wVSGZKswFj/TG1KEUp\n5tEixOCM78LW3uqc2BFhf53a+RBi5xowtxWXr6cTWKOa4OFsQ9Ze6u8S7Enu\nAdSt\r\n=ZqC1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCb7p9LCj4WFb5GD4REzTzfrokqs4zg8OXarhckLEZLYQIhAIQ1m9D8m2/Cz6LUAMaMGvafOe4wpc7wYDo2mhl0xPrI"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604937150-08106f6a.0_1604937276723_0.1525920751167258"},"_hasShrinkwrap":false},"2.28.1-next-1604937724-4b8cd78b.0":{"name":"@xdn/core","version":"2.28.1-next-1604937724-4b8cd78b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604937724-4b8cd78b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bAqtC8YGzBjcyWdeqnfhoulX1kCY64tGc1TRaVNFUntVmUfVFrxS49lhP9C706dsJnctP/KrkHApkg2Qj/mQOA==","shasum":"f5b97bb9ebade97bed3b2d4026236584abae7f88","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604937724-4b8cd78b.0.tgz","fileCount":169,"unpackedSize":636957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqWh8CRA9TVsSAnZWagAAgOEQAJPQENFquurcFuEMDyGJ\nGh5FOguRpxZkJHL5iitUgyTEhyPP9dutrQrkpK1+uIAIH6ybNbWeq3jPT5hm\nyHwtG5EBfkmYW8Vaq6As0ff2GkFHrus6bQscOt9G6zNhnfjZ16b9oZZkT4py\nCOo1YwNd1ZqJFul5AraklLgJeS3l5k3PsHYP8B19EmjqjOEsr9hOSaXoFkUA\nJoCwYCgxHeNwevsGFEn53DmqH2Hur1YkZH+9XQq2Xoj7fQDAEZkbJs8zz5LL\nifaBwqzJfbxqD6yWEc8JLGQufY8NWfWYN0i1T7KSRr5X81AOtCfF7j3ITWbU\nV4Ppqb+OFhSnNqig21Xxn2VSboC3du+bkaOu6DN1V8c+435Eu83b1DXbjqII\nGd969dIE46RpEi3cOd2FKeymk/APrjZknQJjVMFCEUILkXdhSisJ2XgnOPWU\nVQfbwQjYvmhjXC7aYRIXNKmobfYkdlGe7B9IP60weGNhOncwBtkviBpiX4Q4\nYThmzaxlZ0JVWZrUAy1lJJmv0aqzAcVZNK04laAG5wyLelryJ25CGwsrLcRv\nbT4ylAazktgDXbFPlP8ltXiWGCgNc81AJ2VcOS0efW1fv+olyjZwAcD4K7En\nKjbmNOAd/hFraMBrsoOztVl9D+oePWh/GM3hsvQJuzG+/jcWiXR3NmMzeGDr\nIC1u\r\n=8j/t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICvZTtXBkfFG1LZAzkNPlxO+iI6JQtaMZyrKnwFMyHeJAiAeMcrtKQlPqbr6eKmLd2/AiZDRRlJ694Qsvp+lMZWGyA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604937724-4b8cd78b.0_1604937851848_0.5112004118336362"},"_hasShrinkwrap":false},"2.28.1-next-1604938866-bcb4b149.0":{"name":"@xdn/core","version":"2.28.1-next-1604938866-bcb4b149.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604938866-bcb4b149.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ST6AR4Hgaj3KL8STADwiFM6ZeoZNoyTry4/+cTIEuOlHZw0VbknNESH+cllXQUmeWwmrXxjf69RTGyNMfbGh2g==","shasum":"f4293c4c4b4af45e131c6d4cb0fcbc7a05741334","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604938866-bcb4b149.0.tgz","fileCount":169,"unpackedSize":636957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqWzqCRA9TVsSAnZWagAABWwP/1WRl+PCqJhCiSKnjB7I\nLQACjY7xIYBmWyjvL/SfZg2SLfblGB+SqGuK6+5K6f4vMvmgBlL/VvI+D4HR\niux09P4kapo/EEcM5+NdQy76hFHnX4rMUqgOfrZxNAKAB+ilAxfn9Ty8gwe3\nOLlQHulZqFjTOkoORjyAfLfSwnP0x2o2set5TT4kNe44N+Erz3yV/7EzcWpL\n5Qy7mt4J56Bv1ORj/7PPvRTm6VVUKCFi903F6FAs84p4+7v+5SiIzojVURwM\n+RzQ/zIhvacKDGqR/JdIfN7a7RgTatH1Z0Gc/t7vV+wrC2TAQCbeKf6qtL3N\nK8pUQjmc7myqkbnb399wqxNOdzjiwmjLrA6CSakmwxy5nAD9luVgd6wfQXQW\nAeeI1FwiUMyDZDVClOOtRWY9OZIHJ+kdb/xE8FxEvvVi6GLTOIBRS5ncCdI8\nQvu0pdjM6dDQqcCgsckl6VXArpyKM1LD84F/1hYpCML4Odr4egfpFhjWgB43\nxN6GCZAgF1Yl8w2K3AuuiZMCLZxbSG/SI5hVveuIDKQud/9qWtyrGi4Oeyvt\ncuRxI6Z0+8KuTi53NQmQeQK8OC2QhNvlxtv3gAmD9W1+t6ZGhlarDJEnZWuD\nSqfToFelonOijxCghD6xhgDB5Qg1mlAj6Qv9YUm/UgVgmcSsct6yhI4oZhwp\nbEVR\r\n=moaM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDDuoPikHOJzDV7CYI8BQ25/vgeQaPuuxq0IR5mm+m2AIgFG0Bml+1PqCUMG/hLXMxvArPHlTdVVVnkgRk4G+dqhA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604938866-bcb4b149.0_1604938985547_0.44547312325368615"},"_hasShrinkwrap":false},"2.28.1-next-1604940284-f9f37fe5.0":{"name":"@xdn/core","version":"2.28.1-next-1604940284-f9f37fe5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604940284-f9f37fe5.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xvGRUTaNiQ2HiTfknByrNXBwInQhhf9kdsxRHS8A1kCIcK5YNgNmAJoSo1bvBAwglBjcR9Z3Y82VZ7g9wljzwg==","shasum":"7178cae656eb4177eb8304b928137285bbff884c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604940284-f9f37fe5.0.tgz","fileCount":169,"unpackedSize":636957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqXJ4CRA9TVsSAnZWagAAjpAQAIETYS+HR5bUwcrbNchk\nq5pYhgyoWWERsCtUN1SnRA3w3l/7q0X7J2/fXX/VWw9l6FCS9sWBL6IJkaMe\nf5dOesMrOPk79vKyAqdRFPe//n4n5qIXDG1MqNfD/wAH5Opsfu8UP5ScaFHZ\nkxGzQcS7XfxkcoelG2KNWnvOobu688PYi5cCJOzTm8sxXr4ceKLWLDnow53W\n6TL/ggtTcJYvD6DKLLPqt+sbhamRLYJSIQPm5VXz+Rf2Oau9tlQakELkL9m7\nTI+vtyZDPuYXh6ie8gYtj4Cq8w5eaQ+vjX1OYdoUZyznsHXziuxOO0uM1/OK\nt1Ja6oRveQpnB6kE7ixkB5N2Liyeo7Qyw6L5Jk3O3napV6SJgOWfYihVWoOv\nrJnExWWM88NIeHEPjGOyMYH/JwLNwTgKSXZr/0hjF4F8/qj/2L81DDSFXqtY\njEc2ac7uhUzMwc62HOCivUZ0Eb6sLKvQhEJoqXkabmbmW/t1UT+gM2GU+Zi4\nPedh683NTJdQ1P/YDo1ZCIMi4aybglN/2QZql+9xms5vXpjmTzV3ynXa70zQ\nuCbSqjSa6GiEdOxQ4ql1whBZEDX/xZLmnUqdb5QUXX9bObr1C4v+DsGC4iqr\nxzZ0aT3squUgGrChHEGpmzrP5UdsmRs5RibdFnxrRaj92SQnYfUzeRTkluN9\nR4i0\r\n=pTJo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCxdmm/tNBrnsRqJFbRwc3zqLIE7uNvwst5cDbgBZqjgIhAJ2086QEN31UoUYNRc5o9pBKFXLESUtoNk6AMil85uJN"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604940284-f9f37fe5.0_1604940407401_0.22938440771737034"},"_hasShrinkwrap":false},"2.28.1-next-1604946758-ce089a98.0":{"name":"@xdn/core","version":"2.28.1-next-1604946758-ce089a98.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604946758-ce089a98.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gKyZBb7SGfB6KevpRhbLDeU6hjeAm1nSnh0VJtR+0KPAcpI2Eghk8hyeZMcg85ANLZ16fZ310K4yZHHPO6e/Vg==","shasum":"7d933c82cb5188dd7b54ad0229948ad5c3c2984f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604946758-ce089a98.0.tgz","fileCount":169,"unpackedSize":636957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqYu6CRA9TVsSAnZWagAA53wP/Rjbw9twtpE+M86Y6l5H\na0DEGm11d6F/NEj/QEZ0gRUf42ZgN6cOeqP5TMAtApTr09SacdWSUNKrzOPg\n/1kRYktXBXzSxdJz2k2e9wncq1DaaqZw8CYFPcjOHxnbMxBzTdIgOGV7mQic\nPp/g2mViE8Q8kq14A4IB8XoLmIvD37NyZgJ9fpyR4ysNKYoALp6OI/6HHQ0+\nzFoaEst275UCw+W2GtBqAwt9UK6osdIMqx5k6sEVV8AUyql5+thzEchS6gU5\npWzeP+J21duKVCQFiODQXYS9byUH7GR57oagDFNMxddM3cYawxABPP49UPhN\nxy2clZnNytmKAjzXQYEO44cXvs2J4cUdWUiEd13pNTkiQW8RHzvqrcH2cGsu\n0YtBVCr1XE9K1mUOLkqjZWX20HW/GK6MapVcMQb3eZUR/nLfTc5IY9iu+XBa\n4sqJqdMYE3O8akcj17qW9VpJGpYYSOqJwpPz4sp4A1B6cAGYcTrbMTCunGv7\nMpTm5/TG9DAq9uIqoq3fHGcryntma3MJ6hX1cplNfR9rsOzIXeEgsD3BjRaz\naC5WB5qAg56oQDiCazm4sog6zwKBsIxJJv3qR58EpxX/oFi2OT0YmTeKCjoB\nAjzcX5cEw/d3FIp48iXUzmlrZCOlF/xLYF9NPPU/AL+BB24TIuYBbKzx+U1c\nURYK\r\n=fHYL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGlR9tXh7C4QKDelkXyUlqFbNEuR7ob+/ABORPM0BRsSAiEAqn38DjIYvvRY2GtdYaT/KVAhFsBwyg6Hx8cZJmQzOH0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604946758-ce089a98.0_1604946872967_0.23504309769815257"},"_hasShrinkwrap":false},"2.28.1-next-1604949351-c9aae640.0":{"name":"@xdn/core","version":"2.28.1-next-1604949351-c9aae640.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604949351-c9aae640.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JoKo3vZwmSWyA000SldO88CNAGSJRKHYw23DcuL7BiAA5a36Y1acdtCR4N/gU2jzWPnUDwdem1pSWGg7OjkJYA==","shasum":"83028429e587f19baaf80d13ed4e20aa1896e524","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604949351-c9aae640.0.tgz","fileCount":169,"unpackedSize":634924,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqZX5CRA9TVsSAnZWagAAu68P/RfjKd+zcQ9qDbaalksW\ng6VIq7O2+ITvXcKG4zOAHRl5nXiEH+hCgwV5JrqpDSaMStvoHipi4szG2mhm\nqNGxh7EMr4AP3vqOeE/h2eIDRavZEqND+bzrusd+uLzq+zZ5oB4L1uMLUfxD\nzWGkjK62+BV5S6AM9ndgXi3b2ph4n/OxMnSC8aUh6/8DmgMjhoUlazKWYZiS\nq/QidGmYJIgoj9pB7kpnsEU5Ul7iF4C0GcJ0HLa1yDXroA+JGTCocFlBheEn\njVw9rwkcUlPKXl6g7tsuAKytZfwo9qy5EzVUUbaQpew+dMeticpq+DL5Zd4s\n11C3yjTcYdAyAN6v8MshtyOW4ltsVj4zpY7EA+Li0HPmHTxtMDkqF/ubDPLO\n0mr1CZpy677tBgLT3XroFYa09EQeMz7zzjG42wjWlMfiB2NVGqMztEKjqj0e\nT/nUUiAjCQzcmGOJIS+34n2xduWJ8tFnOJLwCvVWlncdgnFWHtT9oV/KgZJ2\nzwKj1wQ7yt99Lh0GOozQQGsDq+Cko39T2g3kADY1IgppCyofFKj3Yk8f9cvd\nzzP50FKS/9u8Jnn2aawPDzmp7+x7poT/XxZ4X5Y9jM1hr6/ftB8+M7jEI8Rx\nwTUOXljSYXtBZTgjigqHU5W8lnifDRqqWLggmryx+w5oJiJzrv9M394vdzMN\nPKXQ\r\n=XIx4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCn/T7R4g646t0CnJEQ7szXH8J8oX0r+5WpY2QoK83AigIfThESCrUWb1rXER8TX3DRXZD5R32WK5wDNEHGi+5KMA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604949351-c9aae640.0_1604949497044_0.8098237455332971"},"_hasShrinkwrap":false},"2.28.1-next-1604953397-b65d053c.0":{"name":"@xdn/core","version":"2.28.1-next-1604953397-b65d053c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604953397-b65d053c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rW6o1ZU7foyym38oTlMGX5LH7+Kk6pDZum6eXJgckrtfFbtOHOulCEBQWm3n5xqMV7lEj9Q509ZfEuiqy9NdaQ==","shasum":"c34b3c086e1b1bcc1dfcfb6d92b6fa8850e86333","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604953397-b65d053c.0.tgz","fileCount":169,"unpackedSize":636602,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqaWxCRA9TVsSAnZWagAAADUP/A29092Nm+8SPyEcmSgA\n1/hAhY4h7Fow4F591kP6aPWP979IBADLRMqZ9vkqT5yZW2hVI7UJ+uAMCkXP\n3IKRpbUCOKDD6mv9bdF6lKlyLquziv6mlA0pV2qDsoziMT1Rg0/uXB03MJ+y\nXL4qp+CQOlX47saHGW04gJGUOSfpSxU8q1SaLYv+m3y6zUQuCd55n4IjkN19\n7hX+ezNOBaykMcTYxP7DOYMwKqRMkijwFnkE5J2YAsqvhPiQBTWFAebMMYGP\nb+n1ErIfa4kNj6VS44UJIjm4+UBWF+A3BmgTbEcCTJ24qxHlMml+XTGls2uT\naXTkRx5+MzCqYtz0FO4BlDoHC+HMCPFsSiJKFOB/N4lcRLmjPjNTb3KMRrUT\nJD3q1PRe+N4v6zWl2auVF00h2A2UBnzbEf8a5vWh8/5ja0XeYMEom3EKOSbR\nnFp6qo/P5ckBAcpeC10aGXoF0RKBxyamK/cbyJIe5rVS9bfbB1aveJV21Oj+\n7K9oJBWJSyRKE4P1WxJc2aH1eMqAMruLAPnoqTxJDM2J5A3+GBpULHMbXr2Q\n+fDV8+s1rJDnkIfRjPKKGsFE3FugsobfdN7b8Tw4eddwJLWtnkffb9sP5Y3j\n5bt+hUT/jOKiQ7VdsnEAVQexLg41INDXzMafd8djSWQXBwDSSqaBCD9wkdWs\nmkbX\r\n=HbVM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHRpXEcSAquQThLH9/OXbhLEyUx/ynkf3f0amV/GtFY/AiADLviquflP5YxiK9XAaLXlwJiL1tGnKYIS8KoGcEl+Eg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604953397-b65d053c.0_1604953521293_0.3257699697201393"},"_hasShrinkwrap":false},"2.28.1-next-1604962055-7b95cb27.0":{"name":"@xdn/core","version":"2.28.1-next-1604962055-7b95cb27.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604962055-7b95cb27.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-H3wEEAPDvQHe6BxJntRox59EhXz9yyV3QIosL+QM+ONUpQGxd8acklEMhKOr87IHcx3UvMsuEZPLJAJju9vM3g==","shasum":"3b79f9003d396934ef02df59a49f6b59d8aa6b91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604962055-7b95cb27.0.tgz","fileCount":169,"unpackedSize":637118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqcdxCRA9TVsSAnZWagAAF1wP/RjEOIoMiBCTA0qyShy8\n9t3Mzdu7/kbHm2qKLxbkV9WdhEBM1zZ0kaRYtVTee4O3WW2u8eHAgI3Rwvs2\nKf1u4YPyWNYnz+rdNsVYz0neRAiX0mIUnPhT4FlYVu+0qkNbZJ8iopStArLr\nFnXQyw6PYiDB7kGVDY+YajjK7dff/IniX+F7JgSAfmDdZDh9P1RkvX8voB8k\nOmHYv09d30lY2jOVm54zkclxIPb8miS1Vn22xXhF8NACAgh97j7sIIXaNW6k\n0qL8rOuu1r8O2e0U7CAcYuqPHnDpjw/+L20tkgAo/3yGH1FoSu3yqWq8u4TJ\nReBhoacKdM5xkpZvLgXSn9tQssSHbj6iJeoRP9bKnaxK29Mko0tEL554aM5C\nxRq3O56n+QLE2HGzoMP/oIiVJYrrhtWvQ2ENkzbe4FEZm1xSKBzMyFqAHryX\nridhSisGArKszxQ1KJFi7Mgv8rwftpB9mLH45gmFCLny8mmikjBtLAZcX5Y6\n+jTssQdZOqJfV0e8GiDhQNbiiA6hWSJ/ngNRY7LG5HbqMhTLpaH1iDEc+qzO\neXOQhZ2PKIEEyiCW+9JqyGlfTW+deu4QTVzdhGxe0I8HYpgaQ+Jdj6Pet75b\n3vxmg8Cdo4HkbBUKBOlNDIxsCHblncRa/RpgeYdY1vJNONl0bUzm2Fa87M28\nAxP1\r\n=MhA7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAvqK9S7cyBmB5jH4uKXBd3yOREVJggArTkJ7mXg83r3AiBFh4AmfODfhLMReMDD3I6DLOvdk8KoXRf+By+rh8hU3A=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604962055-7b95cb27.0_1604962161166_0.1309117129133146"},"_hasShrinkwrap":false},"2.28.1-next-1604971648-7b95cb27.0":{"name":"@xdn/core","version":"2.28.1-next-1604971648-7b95cb27.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604971648-7b95cb27.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jdQWCqX4lTUOb+RQVn4PP1JYyk0H9StdbEn/6+DS/nqhGZMYPpnLJUGsWaEQuxmVyx/k0G02Hs3LT1VsXbqOKw==","shasum":"6544a942690daa52620b45aa7e1f287eed58e89d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604971648-7b95cb27.0.tgz","fileCount":169,"unpackedSize":637118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqez9CRA9TVsSAnZWagAAN9UP/i1whiukF2cDI/K+ICPH\nNSiGZgM5uoHenW+yTWwetBbXpfRP2RjVsFESpSKtudG8SiA0UIQGLHMCMkUB\nA/r8RSJfIX2K/xoYBFhapsSpt3+h9Jbn4QJDXqqr/7p3EJfhLMWWs0GIuEGW\nn5Qul7UWHCwWzA21cq23wX+j2RRImzGEFuoQKgMPbXu3gpnjYKeXOv3K04aN\nzGOK+N/x1wC4N9EXrfe8JfPi1PBwSYdyecjjXKX/ckdN8rQM5/aOq1wwrRk1\n2e9GQtKiBiMAP1VKEayyjrFkunZa59E7ouwdYHulHHJ/1ePanl7ChLPmNONI\nOH2uW6bzEPzji+55YYNkWJiaAjkt2clr+VWo6qjoG7bJr2w25D9Acv2yHMLr\nyvKo0F+nm6O/JZ5fiQ0uH8HR7tUlIAkKep5MwgNkT32I1YQHfrFrRM7f9UNY\nSyTsrXby8t8sh9kxGB01OSAOrL4Gd69jsc84kq1vN7H5Dk7ijLxskn69mf/k\nqWQG8XD6hyiQZflx5+YGltj49A/TiFu+ZL7NaQ4FkvpB7oHT3M7soy4R6YjE\n1ZHqh4hbofupSySNoRhyeqNqn8ry+8JehGYoMh0euYDVzxKcOHxNkgulULgP\nWhTwcPikKVjFPD3l73kw7Jed4x72URMpBU4dfkq15geO2qUsEPh8bO/uXxnX\nse4x\r\n=xpy0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEEakntPwVQ0kucRlBnyV1TXgP3V/+TCvqQz06BwF+7dAiBaQgJm7nNHCrSPRxhaOjxqcd0guv33Hy5KQmxLPVuKFg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604971648-7b95cb27.0_1604971773105_0.46921014120290616"},"_hasShrinkwrap":false},"2.28.1-next-1604972587-7b95cb27.0":{"name":"@xdn/core","version":"2.28.1-next-1604972587-7b95cb27.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1604972587-7b95cb27.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-82wUgKSkPOEACZOuBLJW32cIHJXj/+mhNks0Mtp30PjmA5Gr36nRew5ZqW+bccyTSIcL8G0Fkt19l46XzEMk2Q==","shasum":"e63869f39e911a32e4a1e988d65c04dabc14e79a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1604972587-7b95cb27.0.tgz","fileCount":169,"unpackedSize":637118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqfCmCRA9TVsSAnZWagAAZZYP/1AzGZTehUn9Mhm00w/l\nLgarPCiRHSYXJ+gGR3yKYjPdMdv5dCbmbMgCnuGobdpn5qMNZmfRYDL0SYmO\nzDFQ1jM1wyhMFjAEg/kGyf7EiQW6NKUwPXdMoun5fihAXCMTiHKoiN2zO9LJ\nT7kV9oo7j0A5YF8RzAEg3MsxlK9KclgL45ZQmpj9sRc727Edq2f90Xcmonhg\nvHIMr2aaqqMCUmQEMjRi2VSycGrIDmIU/ISasfQYAD60y7dyeVU1mRvmJcVd\nCdJ33DEYjebecYUBPTML7IKrHkOhqmmJUUpDFKuuCcwu3XJmgcuthCbot3mV\n+N4CxH+oQQD2EIrWAkYgg8mFht09hxet4yCRXtC/LZ92E8KMkt8xi5dA3sh1\nt63tLnMrogRZgOuL32KgrE1fAXmpVLztjSsZ5xHd1SYA3pWDt5huIOdi+pnQ\nT09gH2nr9AA/1Q4YBheLhzsVuWkmWF1iUWVTFt6O+CCbqTuO3sHGUi74wK+u\nuaR7O1xshJw5npP1tHZPrmsUhRfQSBHnfrJ+mm9MOi19brsIl8y7qz3eIbAM\nEMp1m/J2FO3oS+XJwlNV70RpIbtmW67IDv7uvi7bTjCKzzAkV6Fb0SdGXlbn\nsslMVtIz8i4GFYtN2iwM9e/JbcEt0K8NF/9k4XPYdUpNYbImdoJvr6/bbCkd\nnPFW\r\n=X885\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcYPSob1dwhTWeubBBzntjJCKrodRe1FA83B3b50u/NwIgDOWWjed7YfGraIp43XZLj/CPnJSsOXpks7YLXHaXAus="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1604972587-7b95cb27.0_1604972710139_0.006083702819844161"},"_hasShrinkwrap":false},"2.28.1-next-1605000150-48b52a3a.0":{"name":"@xdn/core","version":"2.28.1-next-1605000150-48b52a3a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605000150-48b52a3a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-r10EW89MJs4b0czxDGofAzDXAk/4rLfj4/bAeWYYqb9q+ho+M2frWIPqb/B0DvxQ6fMZLUKcbz69WoRVHymPXg==","shasum":"a71913feb81621323458b76a4579186fbde99081","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605000150-48b52a3a.0.tgz","fileCount":169,"unpackedSize":636602,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqlxHCRA9TVsSAnZWagAA2gsP/1bN9uFr2Zy3hJfmsW3V\nce/8/LymfTyqT0Lfziwn6b7AeBUGf+G4eGC+Dx9gyP5adVaZPV5BZvaq/rGk\nMJDOU/p1jaxkX49DZ0tjtDNtvSJF9f185DdiKa4GTr7qmWSbAwgrH3Bh+zVG\nwunvxJ4zn7VTwjfAFS6FW+vzNF910CsLM6m4czPrdNnGt2X/DHcPaeMjOLLU\n/4jv4TELskoLaDewC4MRtkfPSZ/dhk6cDoB08CAuhQ1fKUH34SbvwoRXj7zH\niEaVAOupNj5ahtljOQoEBTTEj4utHxjHAfch2g1bjDlmmFPzs1DjqKozdWgD\nJ5CXbLTYdHl7OyShzoh86j8hWgfrCn+SVAqsAsiTFgQRJ0/gl2shVKxoekRR\n5wIMft9T7LIY6Hiaccp7XpVhOOANsCuLiwUbROyDNMgwNW6hcnz32HuTW0zr\nVECzYU0/vrwtbv9qS5LMgnsDLLoOX0NAeZD9iqsmTXKZOTKLnRRNIR3LlCP/\nArAPj6URfKmPi1zuJa9SjyVjiqBMyZAuDHz7OTd6pKPOBqQUder8VWado4Wl\nxB/aTt155DKay+oUTux44UzaArmXLKXGjAQlEk//5Z4VkepYz0cB0p5mAltN\nAJ7c2bqGqQ6agCxGz5gR8ZpZtPiLrU0FFx5BKe/SVatu1JTJRIkybIdI2tzd\nlV/A\r\n=yyHq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnlrRpdL9nREDWvx79MvVyVY14gAXROTh3x69DJ379NgIhAOZARAQOgtWZSQKVS0ZRzPxakQYHY5S1PyMCNNi0I7BF"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605000150-48b52a3a.0_1605000262609_0.5612236295726956"},"_hasShrinkwrap":false},"2.28.1-next-1605001485-ae20af71.0":{"name":"@xdn/core","version":"2.28.1-next-1605001485-ae20af71.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605001485-ae20af71.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2wVznnFoaJEC2NtpE8iBcVfc1bsJa+cO31TmNpwa8W4NO0v1k89rvt+lPfdJttn90R6WWDDLu/gTc+IT2IOH5A==","shasum":"3f337bea433cb6f4cb6cfe8eedbd90a32c2b7a28","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605001485-ae20af71.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqmGKCRA9TVsSAnZWagAAmH8P/iB918pbVJeJFiVpi67Q\nGZXNIgA7t2bsj4TV8lK3KysQf9FCy2okLkPdBYxn3oZDljUHrfh8CQgWujio\nvBkiylVYc0KxQTCwIB64iMgY1ZweawnfJExOUlt9tryksprmVO1nYtjia9sN\n5yO6ZuUemswKEa7yKRUsReK46eLVLuFkL9uHpD1bpl5O/NTRJFOql1zmblpe\n1uzOeibyEd6Gg4QuknmrE3mjQeVZHHAbLgHBBYgFwv+OfOkGVzkwaQgQTjrz\ntEa1Bjm9VmN4Fw8rL6n6IUYjx2kvQbSOLv/NVV4HVj3wpXX5i75j8BwNa4+4\nUGQX8PStHEeMnErC3QrYU518Q3iz4EsNxqSl31xANGN59c1lOQzXwBtz+cNq\naRTyu1O5Fro8McNmLEhbuLJyCiCbq0c9lwkPHnCfvY+PZ2bR7O+Eq1Y1c6us\npgU4wy0uP82eAobzDnze7wLH2BGV8NVkyE3rkWIGEopjeIaJhudpwWzf7e70\njoRpz1WjXThxy3Enk7MAWmMBLtS0zlMNklbe3JYijd15w78yTK7DiYZdVyQd\nrPm/BRG5jR6rogO+4E2UhPK20Pas0VU9V9hsDYbL0ID8hiv7E2cS/fsba6dH\nzGYpaToBkXAyNtDCIs/uV5pGEaySHFFcIXCgPndnC/IQWG7EKWH8t+4V4l7h\njrua\r\n=DcKr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4Tb4pUzB/jo/uzPCwXy13CkBbSI1R3s6I2djQ17MPxAIhAKnc89CpkYZ5Ry2uABc4x4td3pIMCfoSJggFDyEeDJ49"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605001485-ae20af71.0_1605001609607_0.06084294560664483"},"_hasShrinkwrap":false},"2.28.1-next-1605001726-73129584.0":{"name":"@xdn/core","version":"2.28.1-next-1605001726-73129584.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605001726-73129584.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gR2xnxnuF6rKzG8+tjfeyVS8Jib36I+WfyEfo+i7QiMSQSQBznzQhgbhadrvi5HXuSfbd0fDsnC9a+8gGLMh5Q==","shasum":"e5b2609a1e5fa4a894015e7abec59829003515b4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605001726-73129584.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqmJ8CRA9TVsSAnZWagAAtlAP/Rd/KVG4vHGXNJQKVJde\n1Ms4ruvcl1AL7sleUiks5bGPsBQpEBAWc3iBsybBQftIv43F6uiTyNtowA2C\nN9BCvZmnK6jwX/GJLt/mexgf7RMPWmOii+2pKHinqQVpEeA92BTvhEtohVaj\nXddE/4RDCeOWL6OB+qhvVNC8WJHsUIln/+oVXwg/kqkJUXV/i0bXTJhkeEfj\nPW2e1poQh7MegwPimDmuxsYWfv9XEAvEYQxhxS71mulJH4U5VftvWPzxmp7L\nIVJyWwVjN6+i7ld2t4Z7gXrZlW9BUSc7EwbSVbwsSIe3V4l9Jp8ZFRs80FJ6\nEG4HjxfPU1PwfX06W0Tll5CIHpwoDDfGM1N8032fEJzsyJvTPlGMZy9tKfGm\nDRTQBDnA+EwafdMoBagTcNwQs74J62vtgT9W4vA6Xd8irGEjG4kPWQFcTCyi\nLU8orsqYQWFlGLZaNSspGvVM1X0HO6i+tRaMMVAAv0/7KjenIMY4H8eCqxZb\nD5KyuE1oPsXO3CimlwBAHm1R9hV1RlrRgfGOXzEaCFR/EkQ8e1vvlOm0gCH1\nPD6pKl2n3abGrFAa1pktvy3GmHY3eTjnnqwcqiSJgvcgoYM4U7QKuZBtwuij\n+5HjSetlygzWkUIVZPPytNIM6hGtniW17NUD7DbfW9KSA93annepwH8+rjlc\nM8Fs\r\n=Wgzi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBFDuuoEx5GpIlsYsXVulQ53mAbl72sOwk4BtMF5B1TwIhAJPVVhf2DK2PXBHft43lDlbjiI6r17JVHHkWKGMIi2o2"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605001726-73129584.0_1605001851610_0.6315189760833992"},"_hasShrinkwrap":false},"2.28.1-next-1605006749-55a9abbb.0":{"name":"@xdn/core","version":"2.28.1-next-1605006749-55a9abbb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605006749-55a9abbb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-C9CGjITMhpaVnYCKDrT8V7eItkl1CBaGXDwHGiOVYaOpK62U06kHOe+AMCV2Ls0XhXdFPZivSao9NV2seARoWw==","shasum":"addb8a7b5575b297b2f89a71a0615a3fd3475220","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605006749-55a9abbb.0.tgz","fileCount":169,"unpackedSize":636602,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqnYkCRA9TVsSAnZWagAAabEP/18I0Kj5qN6xQDRU+gtT\nNH36muqM+bsVp4tgcJgFlcj/NUlm8NSb/he0IZ83ngOw/f1Ajxc6IIYdww7z\nKPvNSDR2cQVXtZFH0PfirSYMok+OcvhDwP5W0m9/UWh+Tmxr96YwBwLmcimY\na7uhEM3UIynnRlIFPLcENzmBruxsSs8f33hO3FUItPiguuGx5mJabGq3pDzI\nj3Aai0QLV0PdF8DE072ZqBl9jhEp/ONiyGBHrdpPvGQkxtxyKasXhWk3tlnv\nOsJRXfamIbRy2okzeVUFzFIiNQWpjRNRUhmMEPNvN1TwNTpkTN/0NHgRe8Q8\n4WiIv23j6BFf5lX+UQh3ScwUv4S6ZAg6aFrRCeZekoYinz/4N+WENsy3TBZv\n1PxuOQUEoa23f76AsBaeQExWffSJmD+Ou7KaV6gwpB77tPe9Q/Vk/c36MG+8\n/wXyVhzgPU5ndPiraOqwYftIYIfuTAMh5gKdcZB37MLZxWE3QN6mNGmwGrrS\nVKZCC+bqnAvU0LbcncbyLUtMLrPlBucSRWrjEOlEcaE2NMwm4k9Uy5EwzDl9\nO6USwgxqciuflUJAF5bH+EO03fy1S+/eef0i2fk0IyX/69WVNCoStllDarKk\n+ATXmSuNIbvKAqC9oqm1dP5Def0kz8m/9lN6sLzNFjWjjYNX2Xf91pC94Eid\nxV6p\r\n=DoKp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGyxXhSPesN9wN7k3H+xFtB8ZDjs19cBEEVUCbYSANXAAiAD9nVtQjKOCQukmJe/WX1U8ZJouP3AqccWM8f5gM/nFg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605006749-55a9abbb.0_1605006884139_0.33662811269932225"},"_hasShrinkwrap":false},"2.28.1-next-1605006864-9d21c28e.0":{"name":"@xdn/core","version":"2.28.1-next-1605006864-9d21c28e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605006864-9d21c28e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-QalCguzTLIZF21yCq4cVDFmAuVPykoCuD2uNXIygJ/8IO8ZmIApyoxfiCwfMCTfQBNsMgJiJCumnMQNdUgD4Og==","shasum":"2ce5baa9f61b91554a396b57a83dd0e5cf268d84","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605006864-9d21c28e.0.tgz","fileCount":169,"unpackedSize":637118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqnZ2CRA9TVsSAnZWagAAfkcQAIX238VYojnOif12uwJa\nH0B+cv8J79t1FceZpjzz8JDlVbDGa+NIXOWLcFxVoR/BnwR0Tyk8kpd+hyBV\nvuhY9uwYBpAAbY3nNzSijpe572CTU+ScQlmi0kFInKe1vCek7sZ7pcDvA5Zg\njxjupQKUnuvGF7WT+dPnLJkX/cprOhqN6Yx1bNTsEjYFUkl7hoRAn/u5+tl0\nv7/OECDBHJxQMW9zeX41bNbicEmBhSTY1FDe3scmiHor1zHz7iFYQI/N3o2s\nuefJATRb10bEgow2TWOBQdGVTrWQgQZI+sqkn38v5QRNIO6rHsedlPMuPJjE\nYTjkRDRTcRrG/WDU/hls3lm5oMUnY/x2QabpMriFPYxJQBshsOfP0or0sR7n\nU3Vv7Jc7sE9vDoWxxe7j+AkXfi81KmLcy98CY+luvN4VoN4i/G+KcjdNAXMm\nIqyHu5xrPFBuvUw/+5y0hFZvgjifBAA7RcuO4RDw3S6otTLumtDh0eAE7i9a\nGglvbxYnikjhMRbB0nJ7McmXYjUZRSxRBbM261SAR7mbCTsOYWg4bNdC/2Nx\nu6fsXGj+Kj99KAagf4SKB8YiUMXiL/HN6T/fmbGVV6hVXoBfg1kOODCFHocJ\nUKJvyY06iiZR0MaNlpwvPWCSKmqTaRE8cJAzJmDijgkhtKRXewssfGCjKTTR\nEHtQ\r\n=jmh0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHxyU53iMJ2cqpnNKvdsGIpOZ8rgWj9rHlWuHO6LaJcGAiAkhGvfMZhIBZL9wA92wZ7qqUfW58UrHK5NlLo9HBb+Zw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605006864-9d21c28e.0_1605006966390_0.833043657068187"},"_hasShrinkwrap":false},"2.28.1-next-1605010898-f5f9af84.0":{"name":"@xdn/core","version":"2.28.1-next-1605010898-f5f9af84.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605010898-f5f9af84.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XuMz8C9eNeOxG95x5qyccIGsMrp89POzG3ujVQjGcoO7alD8t6BTul0XFBNBce4Cg4dIEFA0iCw2eyomKvVxlg==","shasum":"aeb311ea89e90167ac5db4ef667e304d9f908444","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605010898-f5f9af84.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqoZiCRA9TVsSAnZWagAAo3oQAKJtbbF0qfmLtFQ+lnee\ng9NLueIHa925ct8joXACj9VM6R+ZtdMmorE5M01K7REZ8BtR97ppmbaxq0nd\n97yuYe8q2xg/ulwzLqYEhzKuNNpM1HQXGiW1KPil7lCqV/gcrWDZIuiIjTky\nByx6FfoTj0rzCav6ptKA67hO/FPCUz8cPGAqSfhSOnQNf6nyt/23kf5sEC21\nLzcnruDIe1mcb+GHDsdm09d4yRPxvjNr3PF7upefvPF18xwOB8wcslHjl6hl\ngQNbqwK/D9RG433M4UM+o++g2MROzYq8vRzEoQ1DNkEMi8QYsS4j/uFuRUAF\nnFb2xeyFTxDhWXIVmTtSjaCT6r7SOFwlPrU/JKETCqszujGmpE4y65PsdLZI\nqoxOULlrnzzaFAaH36SMsRre3eqZSQFWF02tIYQwAahcWvcVQEfKnoUMkT1z\nXtvPkaw5jdnmOvKKF7B8ntUGfto8gKTC3CUQl547o8jfMGaspFwHnTZilkZv\nwea1S0JbNIE8/EkfPTQWPgEy0CT1xzhGuLiylx3IBzrtVVU9YbaFqHyVS5yM\nlEDxNjkFlePlqDl85C+4dl2VtPfgr1jm40+ImnBDvxIDNbTjbKGLoRYqDT/i\nAGxeEy2Nz2bb/QW3jgG8sajrs0fdJYmPc/ClgatjS2muUI9MVWMAKPf4SVK2\nGmrd\r\n=gCVC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3VO6bQRWrE5UDnlGnzM3dYaYI5uYDbo+yJr60pB0wBAiA4h1jwEG4QVWqMy7lCVVnsPMnEgqxTkIbOBUHXoqoP7Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605010898-f5f9af84.0_1605011041299_0.502102344906014"},"_hasShrinkwrap":false},"2.28.1-next-1605011253-b79f16e2.0":{"name":"@xdn/core","version":"2.28.1-next-1605011253-b79f16e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605011253-b79f16e2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-EF9jfTDh0tJKyCOPFFzUrBXEoV39tDDto53ehjWqScDzsL9AYiUI7kjJB9AwTceNbVpytVr0O6f0QuiCg0vGSw==","shasum":"24bffbe2b7f5dc80b092b59e5b5584b598b973b7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605011253-b79f16e2.0.tgz","fileCount":169,"unpackedSize":636602,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqoelCRA9TVsSAnZWagAAadMP/2aL3YKZmtvefNMrPTkN\nHZhW+AvJSMzwkFyzKfhnKAcibP3uRaeWVeQPQgyEAgC3+c7JIBKl4n3/i6WX\neM9LMw6n5R5nHJ1VOJnqcushmKdZWm26PtUOEv5C81fsSTa8tjI7jiJTxCFd\nEeoyoZ1+5nOj4kpRqN9WB29WdN8hC+NkOXFQhHRgnOsjvQOGFaX084j09YhP\nPGm4fAfUpwIXb9R4EpUeGwzTrho+2BJ/t6EVT+o1Bv/+CkJQZsdWl+YWZRDB\nI9AvVZ1KynxQu3nx+cqLvZCH/Xq7Eoyw9AaOZ6xwOJ8Xbsxeuj1sqhw8LdnG\na2xzQq7f2W18DslJmZx6FhhXVdwM5C7Me1KcSMV5m0mmZusf7SiHRQft3vFm\nOz6fRoJbOv85SSFu3aFefoxDAJop6RsDskZ7zjeAAka5zBOXTzeKoQuOU7xZ\nx7AuO+WKvIeBo6aRHCmpyPkMkLOoIkHSmY58fgM99tafGlq2+t1Yie0PTZeb\nKyOYTt5c7K+sT8ICx0qa8CegVC4Yjuv163qIefHBSfHIX8RDWNuskRNv6tDi\nEJcHUdeAo17oH95+PueQtiB183q4Aj2Zt9CDTBGaY8q5nqj//Iq3iOsB1dpa\nBPencNS3k7Jd6SS+suFKLPvDHssuzZx6tQAdfqVyaChLTRWfXlNUFN6NFJvN\nbcwi\r\n=KwLP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5Ws4QyteuCREQoTJhv8vAIZ3bIGSEgb+nhoe8nbPAjgIhAJCPJ8nMx1L3zfU2M5az3wyW18morGjnH0/W6LiL2G2l"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605011253-b79f16e2.0_1605011365274_0.26101586554403955"},"_hasShrinkwrap":false},"2.28.1-next-1605011277-86e32daf.0":{"name":"@xdn/core","version":"2.28.1-next-1605011277-86e32daf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605011277-86e32daf.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GhvgRXa+mVsPI8ZKQ1uNvffSlm5LP4TXB3xCbVnLlczehHJqVYYT4wo14A5Nnq56YlXlo6QoAUE227JhjfU5MA==","shasum":"877b2078cdd561d73cd85991169d3ab665a0d5ff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605011277-86e32daf.0.tgz","fileCount":169,"unpackedSize":634686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqoe/CRA9TVsSAnZWagAA3moP/3x0TRbg43AuQx6kZuB2\n7ql2KtM62hCCGpq/TLWHKKjW/90W4sEaxlAavBP1VeqAH8KtDdrX4Oy6Gce8\nz4gU31sM+JeSFmnml7Vc3vUqPy9RRl/svWfDCMFzKz0EFdhXze7bg48pHsF0\nIhnBOodZ/ro6KWdXOl/XOpZRoGoQnBbZCRP5aCRrNjTwAryKeVLP3Jx/xwXp\n7ygS2aiXchfaVWxDCiEgihXLGe08xYK+N0idJRgbKplQoanNlA0RXoPiCTRL\nJ/cySeTlMcleWAiuDIeZ7OBkoZHhjB0qwa+RPgL0exYYKlCSfpCdkp0q2DGa\nIdemKeY8Wvqmvoc5H67RAB+WQX+GyLjJTxV+jO/YiOJElo6jQt45l6MNiwKV\nOx4VIjEopGwNVEJKSV9c0PmlBvUcMYJwUfCwSSEyf7XRM3qMAH3NlQV/BmsJ\nBUl5k3HtKHesu6VPNfLkl2V4SrCzY2a8e1MT5NHnpY/UIqpSYl2jtcGrFftW\nCc6Ezs+3ckIqklgYKvwy37/hx3F4W7yq+RovY/KiPvIEZIw92AEcHX055kCI\nq0TxActYNIk12FUFAdd0sjyxL5gQ5COBsh91ob6Jxy/njbmQBfeBc79flg3X\nDUncP2bS+KMsGVhVShVFPex/SHQ5sQIrjNhHpHnhku7IzWQ2mEoVXHRjwZvV\nH7kU\r\n=p39H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxuDBsvfKsjB0O4MZEyoq2YOM4fGOwHmipzTMjXCi1UQIgIPt5zZZmPAQmo1yP6brm9D5nEDVxQN7mIb0BJhbq3eg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605011277-86e32daf.0_1605011390464_0.8180408181483838"},"_hasShrinkwrap":false},"2.28.1-next-1605013419-f5f9af84.0":{"name":"@xdn/core","version":"2.28.1-next-1605013419-f5f9af84.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605013419-f5f9af84.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/rx/WIqB60rnqg+w5Qi5j1lG0QXmet8HtxEZiJbXHfAj61Px1B+98ZHuCGCZNDI5xwWNhO5sdCtN/ii6Qg/epA==","shasum":"699f9bc40d4ec8d6544fbd90c3ea512d2ac0cc11","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605013419-f5f9af84.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqpAsCRA9TVsSAnZWagAAvPoP/jMm5BvJz8hwTplStbpm\nNMt6XJmUwe3PCXirGvKn4NbzJMLjiuYMePQMVsX8B3qlrO+eHsZXrR+8nr/E\nneKZnIuLhTM9Q6x/uJBeWklFG0a9NkSM26FjIrsLRu8rSdIDVtcamN0TmVCO\nE8OYoExVCqdtRwNmJv8+sZuJg1W4X+/vh8z7Jva1/kKMN/fi9RBzLl3GYFtQ\nNLaSJYXWXjAOVAbmLy1pTfONjWlcT1cnuLbmAzTvP01lJ1dpAy/BASED85/U\nQc9MH9QxqpbYLTB0vLoZ4CDxMPPbZiFJcTnJiBcicGo7lplCL3kbXMCUdigW\nPNGF0nkoJ6HurrYfnP2X3br2GJsYbQi0MqyLnLhYJDfnxEUmZp7HWd5th07j\nEIerZJwNeZFRc6OqM8Xxax+wemGZBL5QD+VjY6juifmooFJb/ike7PWztjKQ\nkOLNBJLJxIJu3kqyNRXeImx5d7EyMcUMG9n8xxPVyKo//xK+RDcTK3cJEGmY\nbAk+oF7gE9cSxNNBctPwbF0dS9rWrG3YX3sMezJGaR5U7YCrdswKkm62+FjK\n2cZp7zuXm+u1yMGOqnMfEDlVq7feOxkfYlLRbFu3j/+iomdIk7JapSSbS+Aa\nEJH8u9gLYv7uoPnvq+oQOzcfANIH44OAUfCQAfZLvggy4IAHTvIGTWhKuwUI\nChC8\r\n=LNuP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwT0bAv/CG7IK9TeMxFDgIZ7CsbMejuuW0CLoPrbuUQQIhANEIKcjJlBTfQjOxufuQPn3jWZTbvYS/+2iaItV11oeH"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605013419-f5f9af84.0_1605013548298_0.4306924397737115"},"_hasShrinkwrap":false},"2.28.1-next-1605016658-a7263dd1.0":{"name":"@xdn/core","version":"2.28.1-next-1605016658-a7263dd1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605016658-a7263dd1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IFKQm1/u4Hs6fZijOUj1MUeTukKj5knzMz9z/RvwIWODA++styTRJihWB+l7KXc5AdVCKU/bjG2T8cr+dRXIIA==","shasum":"6a73d8b640bc4346ffcea1691d4671f41d09d408","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605016658-a7263dd1.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqpzPCRA9TVsSAnZWagAAQzEP/27SJa8XwKgrSTpdKbrp\nH2tQgh/fvALQ5ZfD5nPLd1uAXwBz/UVeNQp3oI+OATcqJOJZmSms1TKNoW4r\nMI5NUQjOAHFxEnBEIDacqyAIOLuHds4jPKalfXOdrNhqodAZ3RZJzoK678rR\nmeH7i4Adv7S34+JpCl5/i9FqDoErNLrttFy0qAUR8So5XSWW8j603uy3eP77\nnzQv1AJthGrkgGnBJWAGIFN32U41EFBoG2Rt2vks8syxo1R8elN3X9uIGGw1\nUlaEFj7QE5mdFuytivk5oRcuJdjIMpXfWTqDmOnscwz0F5sNO4wyOmBJrnBu\nHamSOVcJyh0DcuXsDMpEp6SSzbioz87kzPsrNDpaqSYKVo7blN0JZBDg/+69\nEkMav+nPhoyxncdHXRLNUGSo0AW1yE/f1aneTVovrXGxjw+ginvjzhtMP8qZ\nUwccoswl7JVzBS7cqjx9Hog3kTHBjYsav7GLqIYSJ3qorBkz9PWqUXXo4flu\nOVAAhPqmb7FOdGp0EpR6O3aXoVgaUVp1CMC4szczauib/qw8ds7sBGxaMTua\n0oubpDzpLv6rXKD2zZCOObOvAec5ek+m5ty1+W+HKb8CUuFB1mZcJRwKLZg6\nm4Fus2D1kZR38iKDdsBw8l9XBDo5IlHzTWrx4vloE80XTAdOe6nEgVo25oqw\nl7Rn\r\n=Jg79\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzEgLfTTGJdfafLAcXynIkBllATia5ka9sc4eQlldbaAiEAho+tmhzgOka6nPHKcHkG432Nyqi1IEcrYpCoDyUUP7s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605016658-a7263dd1.0_1605016781257_0.0002782243826602304"},"_hasShrinkwrap":false},"2.28.1-next-1605016878-1d17d256.0":{"name":"@xdn/core","version":"2.28.1-next-1605016878-1d17d256.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605016878-1d17d256.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kqKny1HKa14lWB5/iTBPvl8iW+XsExkWlqvMXfrO8DpDkxGMVgUJlWbCC5z4Or/BKUHMcCZBdylN+ER+YLIIdg==","shasum":"3366f72935cc31475737e93091bbcea24e4ba30d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605016878-1d17d256.0.tgz","fileCount":169,"unpackedSize":635359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqp2iCRA9TVsSAnZWagAA97sQAIyUzZAEm+hFa+JIqUS4\nt6u4BDI+oYdcMbD8akJuJ/IRCjtChfZ2mUqGRelalNVpuTeL0kqAMYvNKaNt\nInPzctZCcnGoMTm3Cdh9f5hlBsqRI+KEUXi221zaTzZR8Whcbfg2Z47EsIJK\nHM8WxXLJ0k6MczgI2Y90vCsx4cCrC711qSBjouOfWsI1vsK6Y9++G8g8aAlv\nvjx4s2JmR/1Hp1WaZbYIyFP39jPcPuXKuMtE9dlcvj5pWuIvF68LDMuO0yyQ\nup+9RhfBlTu1trwgTLuoaSsqGTblYCRF5PkiLUVustA6CrGTk3vaCnc1eekM\ni7t3zUnDCx/kbFjVZ9ayeqrEg03yNWJgLiJwPqWqUDY3pKSMOi1gbYmU6VPL\nO3onUSOL2a0+YAD3hlvYa/7Nvrd60hBsClmMbXJ14jwTq9LxS5wG/5MPslM/\nFv0qUyljJpDaGZtIxTs2sPvGfrmzSTMZDXnPQBQ7Dcd6UmmkN4BfujlJFdn0\nLUPiGrmT64ZSngQGLNBH6GNzKNuUwXHVPRBSbk9jNTlvFsVk7p4I1foxl9Yr\n748LuwLa28DtE1CTLmeCFdxz2v//di2TQj//SPqAz60VbhsOacK9Osbn0MF2\nf2mJxabAvbRqqKnFx87y87etTFT643c/vdZCDqPo5seRJYHGU0GSzWlwNCMl\nU6/U\r\n=YlK2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/aInUwBIVNz/MMgj3jd7J021lV7bNfyz4mcTMYfaVGQIhAJ8Z4cZHctVFEqDGgs1H/pHvOY+ru0+JtV8oaTByyK5T"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605016878-1d17d256.0_1605016993437_0.27186111536541113"},"_hasShrinkwrap":false},"2.28.1-next-1605016886-53055129.0":{"name":"@xdn/core","version":"2.28.1-next-1605016886-53055129.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605016886-53055129.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-AkxyZfrYb4o+MeQZfjhx4rx3c857K9OArPFYb3cGCNXbbS1zve70FbHsyERtP/uans8ay5juyYVBQhp7ikhY+w==","shasum":"d21aa2bcf519bab759194b908b55696de8a3b4ab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605016886-53055129.0.tgz","fileCount":169,"unpackedSize":634924,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqp3DCRA9TVsSAnZWagAA24AP/3z+bBmvUJyrsW5HaSx7\nahfQc78jqzSNenNj80yugwau0NuEWHJRC92H961jji08/XEwTumIu8ZU/+dT\nzq8BUn4bWVKu8spKKUXoJIpQBUhNDJfaBuuEwYyQ1nRyizALkGIj9ozHXXVr\n+9FK8ROnr7fU04/VKHlNpmTaGqoMBZvp06mTcQvb+fC1T7Oi+dhMjQku6trs\nF7x6vFAJJobxfWfi3BS9NlJBJBIMPqs7t0ECBLNLBeHkK9tQS0kHJwh/VjmL\nehU00j2Ru3+A2sXHg+XPMHCBq4T60Wch7si7mtCSnZgs4JpLwtslz0L4+iKa\n/JO/DCNPkmCoZCvTpWWzjf+MibrXKRgr0q0iJ/Utp42943q+dqUQvUMY9afT\nx+mx0KEW9Cbg9q/v718Nys+rMdIKbWuO3ajszDCcl2iQg2xgKRRhQDerdJgX\nbvPWOaz3d9t7+hXqr13RMHEYE7940GLMy0Ltz+gzMDmeLvVhG2WXhuMgrxr/\nUicj4dS4Zqz4NSsC2uV53qngVyLNP5NdS2BMYlqWBGDMO03pArcc3CVP6NDa\nB5ITonrm8J03PVif0IvtWFj4YfhSUB5WUoILp/PwL63Gn6hr2y/k2JFhsgqJ\nVlEwAhsQZ+lzlWTErRmUiDBnYUS1aamJh1wF7zWuAzwwtUDpEzeSdyzv1CSb\nyhAI\r\n=ZD92\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFadEXrF6eAxbyZGNYkj4Gk18Pcrl22nPs5bLMgqDBaAIgEw12tcLQyXs0gTW7ZRnDXhNop3GEwcQ1XsTU25Q8AsM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605016886-53055129.0_1605017026728_0.9879965557354531"},"_hasShrinkwrap":false},"2.28.1-next-1605017531-33fadf9d.0":{"name":"@xdn/core","version":"2.28.1-next-1605017531-33fadf9d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605017531-33fadf9d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZwIZIEDJDaB5Hy7WDp3AazTfzxgYXOhO1htrK5yrQWEmAX+qVwl1w71c1c2WghQTIDD30+lwNjuzVvgvZGxS5g==","shasum":"95f024249fe3a95ed010ed5ba24951f1c56f13fc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605017531-33fadf9d.0.tgz","fileCount":169,"unpackedSize":637118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqqA3CRA9TVsSAnZWagAAEaMP/3GjGKCApQoaCya7cGzX\nte80/XruWnlRPzhF5m3OxxqH5cJq2Rnsl0nd/VZbe1uqwJOfQFY1AWfHouC/\nJ1E5WImScN25eEovhJJ09dfp2Q08ECS8qHeo/tjVbyTINZyxqYwP8Ag3amaY\nq1z70G70pd+I7qzFhMwsY6KmB1xdquSICWq+8goRF9tsmYj7UJ4N1MiKkS+H\n0sBQljU+FSwt/4Q6A2B/qTmeLXxoqreyCC0hjUs6Qi0GsbhGbi7RPWsvxYRu\nLKjsQSRyZ0uCABNckwfZ3hPrmHdMaGY6zxhmZ/jBJqAnquAtRoc1YFEHXyMR\n/40W37VgTBC3yoazxIhK4PjEYjWeBlUd1F6dWlEHeb3r7WYt+G+110pXnBlU\nDEFVDHX6CUAOKSGWUo9v3c/xxos/sOzgF7XY/DdpefQfQZFYeUGVsHPL4exi\n00NVHDVQNaYkBUgWrIy+bsMRjB63pKe5pxWFL69InEQusQcUycdUGqrx74KG\nO83osJCrhGEUqU9vj+IIjlrBqwfVNisnd6Qsme2mHyarQIwg4efTt6+BUr+C\nCqPxHFPz+dZAHNxiW2ChXtXgsV8uJr1XtnNp2zspHIlS7QocxewrSF39ZwiJ\n6BCAlfljOzlGTmATwUCWIDipV1/2W0PY8o0WPqqQjn9k/wtaOze/SWDWoU9O\nNfTn\r\n=LzhR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtnEK1e4w1g58RrrJRpAOWd/Iywqv9P697b3UpFTw47QIhAOAA0KVdsvgW7MtX0Lgeftb2eM3SCPEZLlcT03t2S1Hp"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605017531-33fadf9d.0_1605017654804_0.40268608258709726"},"_hasShrinkwrap":false},"2.28.1-next-1605017637-8fb5f06c.0":{"name":"@xdn/core","version":"2.28.1-next-1605017637-8fb5f06c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605017637-8fb5f06c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8nad340Zry2J72uiumtxjqLcm+fYA+bS8N+6aYOXRXgi+ClKxsiJM+VZCatd368U6SnNwtukMQC6xwloi/2eOQ==","shasum":"8cc5c03dba7b6f4bfa388b44f67e31a8d8dca5de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605017637-8fb5f06c.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqqClCRA9TVsSAnZWagAADOcP/RMkYKPIKpd/81viKBFo\n/4aO1QGHt5GSaYcNBm9U6H9aIqeGw4g9+28ynuw9q4bXp5lq+vmjWa2tq0hf\nJvMvw+8RuDyIx/UqW0C58Ddm647wN1tqCIjeLo4m7TzzULu8i2rSKJBCkBcc\nhMhOke80xzTc4cBjngROhDy3VLoqrRD4WgNemYItAwY90LVBQ23JXgOh4jDS\n5laeHD3eIJ3ngx+R3GgdYC4KVBPZvVGKCPEdnIESr1lh0a6kz9f6qnbqCjdl\nwgXmpHd43qY3f6GAQ7HG/y/9ag7T/26TA6inkNh39IwdjhB8U3wwdDBw1/YU\nHcJ+qneo191fhsvbqNiecvGuA7JleSxeEp2AR5tGDqSbp9MktE3rIR38oONq\nVcSW6KaPcEKjGIN2HvoOf4cB6XynhCPWzDGShPX9E+CH7pizpJwvHnpfx3uW\nbJASV+gUH4kKMs7mT902hafjkeEKRjLaS+uLHpeCvpHNEzy09C4dzBTXUJEK\nbPvQJiewHXtidTYZBEqAiXPSwC20DB4WIrlO1l/wh+wVbXyfE6GBALF4tVjo\nCfWbo/2oaHKxmnS3tHzbJnxXIo+QFDMmiUwfr6L3MeF3ggcl6+CDrcxR14mE\nVD23zHHAoqwLTbz/kGJfC1oHAtI6+8hrllI6rwiBFNES9bMmFH5zM9R544s4\ntjul\r\n=5wzs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID4BlUKgYYeLKe87JlsUrr6jkWAR24mQgGYuZ7r27SlgAiBwKSiaxm0UBtXWmr9qhIHyK6VP8bOpP4uPYKSQOF1vDA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605017637-8fb5f06c.0_1605017764699_0.15279739023737093"},"_hasShrinkwrap":false},"2.28.1-next-1605017821-a23c5c5a.0":{"name":"@xdn/core","version":"2.28.1-next-1605017821-a23c5c5a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605017821-a23c5c5a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qG8nf4nIqwoYgSIiagohLUMu5bwfZWeuIxSbWez6kRTADUpU81rKwnqc27vsj16Cb55TyUt0sb/56ye4nJArsA==","shasum":"db56287776bde21ed5b06fcdd976b89ad9cdfee9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605017821-a23c5c5a.0.tgz","fileCount":169,"unpackedSize":634924,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqqFpCRA9TVsSAnZWagAAmvYP/j7Kj7MX0p+x5kKgSP4U\nizHG25P6EH9YWBkuktZT8lwM3+NI3JR8BmHJAlCoEJ/GRz1qoCJj0pnZABYw\nVrFmEWwXJMCclRXxjJcIP8IzRrSC0MxPWBTVzp5nhdxYff7KsNZ+lTQi+/Ch\nYjia45iGPi4cM2LsyxCg5wn0AXMzUxnJy94pXx0+MIBCCAu5l3LGTZhCouwz\nlwshE4rg6Y+3X2PKPSZjRAnnX9mmKtgIKmVHVittSoX4qUWvKzc6JUOj8ql1\nkMyF7ewK1lHEbfYE0AlgT4gFvpi3mW32sQJAAYbw9fYpIpqZLh0uUKIQTreB\n1gKV9qDqAXNT8EsjmsDZ3W0cNGDf7ZOssh0/9p62I1QpM0V08cGRrgqgJpWM\neLrd3wlcZ6bsVDsbIb8pdiArT8hkWu5lTFFVZdFOH+QalzH1VgussNFyHPTI\n99bnwyx0XeIfFOVXEMZ/2YbZ4mpxTEoekkopiUR8JJgUfXVKvYTl3AgEioiR\nF6YGM6+R5HiDrQrU3WRCIwdaPYrmEPhB75Gi85Z1rbi595GMTyW9koRn/Qck\n93dMJZNkrVZ7/zRhfKHOSiFySd0J84GhiZQZtjfmgqvVUssk0I1B89gP2ABG\nnJIJ0H6+MlLj+5rOe1+h4jioH4EBWLIkIva7S2m2mMmW3y7xPWWKrtgIUQ4A\nGWix\r\n=z/8o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGaYIGZ9vsuAg0ZXa1sa89a9rr6FrkCtqNrYP4KZZY1RAiEA3D5gc85ynDfKQyl6CEUiUINInlkfqq9htCbCLYZRiIQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605017821-a23c5c5a.0_1605017960745_0.5403197681338918"},"_hasShrinkwrap":false},"2.28.1-next-1605018224-4da28a64.0":{"name":"@xdn/core","version":"2.28.1-next-1605018224-4da28a64.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605018224-4da28a64.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Y/T1DeHBCj4tNDxuh7bgtA/w/7IRgVR+anYNv2fH++Yjzdlhq9wSUQqcIWcy4wWyLNPDVbGX3UFL4m2KMCyMKg==","shasum":"a1357c8c8503915fee5ba0fc5f90cd93d4c58a23","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605018224-4da28a64.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqqLoCRA9TVsSAnZWagAAv9kQAIVX8PS/59YLpKd+NYl9\n8P8wGUDG5bNWgInSvs1l5wthLKoJAjxZu/+afNREPfWeyq80mpWmU+kj9IRS\nApoJKcptfBgYaeNPh1PIkKKbFIJgfj9lkcIvWM2PbUgBM4H626IH8VgGwbhm\nXRbzAzY/IL2kAEqopvnTp/r6Yt8GrSKlgLj528LcciFIhfD01Pgules0SGob\nbicXFKofkE257OuxBxn5lyDvVUop4mJ+MXBR8IijCkGiKKtYaqgKOlK6SMhE\n6MmGDy4pNAkZbt63j/yVQLtHRE2jfIbcc/uqNH7Dyyjgg1j3tJcGJyeeNBGe\nT966kpijSncw2fB0zdya/+RhfByBlgbvfqd16Gu2EdW30ePCyEttX10Etdqc\nERn9ff2jKKEN4ydGayEbbt50QK9IVvVinQ372AVx+tRXjD3p1LrGUjc2R+2z\nr2/wNoHIXiYimI09ZBBx2jKXPuddeGkVWJO+KktaeEWe/vAska0zt/Sy9XHc\nDytvjZUDXb+spSVn+Cqpx3pl/MnBp5l5QSpPaAEjZhctCVP85RMvjSxooMoQ\nb5MyBgDbZsc9lAfs6nnArtwLKMTMmBi3u5wokhj2AITiWC1HmmYv2aWpFamd\n9K458CXJyzOs0wmo2KjrRmrk7gjlrBB/ewzhL2NvxWIaRcicqhU4tS89UBKy\nF4BY\r\n=Sp1O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAb8iivT48UhJvA7xK3FogdfResiPlrsxqzzwoOoIOugAiEApB3jcTUiGHQxoKypXIHm0Hh9PtJDTvGuTPI6jAHhR9w="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605018224-4da28a64.0_1605018343410_0.43726743331261986"},"_hasShrinkwrap":false},"2.28.1-next-1605018398-b629b82b.0":{"name":"@xdn/core","version":"2.28.1-next-1605018398-b629b82b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.28.1-next-1605018398-b629b82b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Sg1GUjKAZCFYetSEQYFSJtisn+NNgAtKBh52HzKCcHr6XCmOJvtMmlpimOExGa3C1LP1n5l/Ou1n7u63cbySGA==","shasum":"02c882ead3306af2c3233c3da3106222eee9b501","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.28.1-next-1605018398-b629b82b.0.tgz","fileCount":169,"unpackedSize":634809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqqOYCRA9TVsSAnZWagAAaIMP/iFFzI5t5aqWqFwQsFFz\nMMVPu9CCWZNZcIqnKuR/2ySfrxO2J9V56fzAMgN7qd6PP39nHT1Tz0BDsJ0U\njmq17Y4mDRP5dDPALV4aMm7wcp9UjPloStSzsSB3p67FuegO2UxPtll8VAlq\niYRBNPxq82p4eVmOioJLEkl3XXp2a/wdqiFnOXTPARbdgPgjmlcfMnhZSHSx\npCsnshnzGIjnIH7lQCc0990KXCndldCSVqK7k1dF/9l+OCHhEr+cKEY2KclC\ndlQLdw3xPOTNeb8r80nTYMo+QKk0+SfzVhUOof2tADmrel2Ya/176Qh68QLC\nJ0VtL2SkWWw1KPMd5PnUDKRRtglP/s++OsKi9M34aAFWcStCwZgn4Yjeymob\n+eLIOIkFftKHk0doY/gz8bL7PpM4Lia28WQ45rXFDAoPW9uW4Lm5rvx130Bh\nmcBdEp3Kxm2gePEtOvWcnXE2OAZqhSv31iWIzuQAJLLR5kCyAaD3Kyxib438\nAuFOF9wVKZnImnvrpg8vVyVqllpUMJy1AASDxxFJjexfT/oqMOx29m4Ue8yV\n1H9Cyl5Yh1Uh7mxKRWAxD2pM6KoND/EL+vB4ocNBdC6QqorRX9tPZ6QVqZEp\nnJNsbd5HjtQCE0J8SKLVaTLSbc8ZiDMsKsEd12mvYse59J+mI6/uIgcDpHeM\nihZ+\r\n=qfx/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGoQUuNXtG+21XWWIg9DzsLxDsVccw/4pgHlYDXBY3lSAiBoSbfCHeR9chQ5v2tOmYYUoBiEkF0aIsFP9knjoq10FA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.28.1-next-1605018398-b629b82b.0_1605018519622_0.9904947765782266"},"_hasShrinkwrap":false},"2.29.0":{"name":"@xdn/core","version":"2.29.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-59mllyQqBWLwnYUx04yZul8xYXSaf/WYNYEOIwHD3K5cp1XyYiJ10cykbCuejT7ambaSulK90ThI7Hroetn4AQ==","shasum":"ac99240cd417f6ebe8f84d7624841a795dfffd90","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.0.tgz","fileCount":169,"unpackedSize":634755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqqRsCRA9TVsSAnZWagAAsJEP/2IivOSihdDrrsunBesm\nBoz9gyh8+ffymuA9C8/74760mpMcwe5UuIMjTdwWIL6yD7Eerlz9xBxxb8aH\nV418Y1nPlN/KQzmwCHUNBTDUk5uF4mRsZdNpJPhfB/AIAYRKbV1GUnI0RRJJ\nCkkhQmvyVp0NevJ4gRB4XYaDFVtGD/hchSe4coYESggZEq5yrc5AIzq2d5s8\nSb6wprEeSY4pX1n5j/fFVk7MtCKkifpjPCziLquMsGMuQS16WTbjV7VfjKOP\nuH0zLxIyUj+aTfqCUbBPA6Us04bhbgcaF1YVjcsqiPhX8aCuIh+p7RNrNWfM\n1EhfsFAyOKc266IpoIFXYjMeQv13TKGjg7zRZwNzX9aZVSCpnjjKSpTXpLDk\nyz23HK3bcuL9bVe+bzksLCWbH7jOv0hyWGOtNnJfBb9anyw/ujzhTmrIHyWg\nAcRz9J9Q+w3O7syFRZUuFbWKYAqDTd1qZNSq6D1cSD7RV+hh3R3pH1grkefI\n0j8BDNy+T/3zzno+/h2xDOT7xt7e2ZWUk1/FzgRAQTs4eb26EQn6FNfccMMi\nA48zF37wjbokbtvxWQZs9gahAnY4Z1BTbh8DDFuq+AXqBSQ43kqPHwQLply7\nPiwDEUtYjDWl1epmuY3BWZSj4XOT9kg4H3ArVUhJ9JDqfE5O8NHttSmi1DLf\nul9d\r\n=wCXf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEQj4hghm/9xd6tyETL2LhWOA7USGTFjGMW5OraKDaKpAiA8vj3e9x70qEPamPX8ljMcrCgYhpIQi0iLWzONMPI4cQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.0_1605018731973_0.8791217021256126"},"_hasShrinkwrap":false},"2.29.1-next-1605018774-351cce5d.0":{"name":"@xdn/core","version":"2.29.1-next-1605018774-351cce5d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605018774-351cce5d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nVhFFxVLgMTKwTSiZX7Vytvd7lUAOD5b7W/7Dlyx5L7YnusSxi8vpRE4gYhqvxR2r6a2cO7OXjRM+7IFmOPDGA==","shasum":"f5f24fc2c5986b38bbf41cabd8b3107791f086a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605018774-351cce5d.0.tgz","fileCount":169,"unpackedSize":634686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqqUNCRA9TVsSAnZWagAAbkYP/1xiRXb1QzbSdRI+7EA4\nJJMdlND08lNYj7QI4jvqI2DFE++H7CkzIMonn6AxFCpwpf/j8+sKMKwGriMB\nb3EPpg2kLPMnOt5nXtRmWb7/2yNULSNuuaY9Ta2Ai1FNLcP72tjvleYRIrJG\n0aANyVCLXQ1DEQAxRqYZzeMdVKCYtveOUPZh5lgZh0OH6h9Bri8UT9njOzbz\nY0dEeOS2vxPlXWJDdN3+MN/HWTCLYg8tpvi/kFRTRAr2eau3t/0KTlPhIcIq\nAMIDM0STCAg527VyYvadBH9Cek1iSQtlFBXpJPfW1UkeP5NrtQ5B+ZvdWl7Y\nZhLUMsQXD6YPlwTYU89WJXsfHTHjzNhh9dQmvfi5urB6Xl6p+uBWRunYvFTk\nJVQa+iKvZMAVHK9vCjIzKZsPDgU3baXLwDPo60agsKhcqEdNKd9Mu3ucX/Qj\nf+cIgIvRR6Jyy/pYP0yhXzIUqWbcI1PZHBXAKV0CcXhm2T71tzEpr30LOMt1\npCl/0uCRZhYe1ZOIm9otIVnWrtaFpJa4z1MT5FD5NBdllg0OYWsnp1lJJYK3\nY8QAwUrmt+9COZ9f4egW1rOZ8emiG7nm+Y+c8gi5IptLfwNaiZHJXzu3spWy\nJ2w0LcMGMLPh+K0Bp5YBKme0rHDKpy4xfH2Wtxc9l8sOawW+qJfh4TDJnyHW\n4z+0\r\n=26+Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC7DfQ8LpphwGz2UHb4ySzX/Xh6MMQf5gZq1bRuj5lW8AiEAjhn+B1FcdLLzhQ6SjDp9rf9vWa0CUx4KoV4zwdnImj4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605018774-351cce5d.0_1605018892973_0.5553837476481889"},"_hasShrinkwrap":false},"2.29.1-next-1605033137-41b6b15f.0":{"name":"@xdn/core","version":"2.29.1-next-1605033137-41b6b15f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605033137-41b6b15f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-po8jBoEJ4hnu1VTUx0YtBi/qsy8XAzy8oz5fMsiI2It10iNZ5fLL4Jvb7KWOe0L6GC0jCNdb+Jz1BgksgFpS1g==","shasum":"dc54e4baa2a9053609acdb87d07c0ddd8171dcfb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605033137-41b6b15f.0.tgz","fileCount":169,"unpackedSize":634686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqt0+CRA9TVsSAnZWagAAL1YP/i6MrGHRwgBU5Khe556f\npAoA0wtvJyyaUzNLx//UcXL4H2NC8WtvcgXyO/TQNl8MS2uv1xeFjHdceO0Q\nSsb7kBsSoeGF3zfjux92i1zCazYikn8gGBTOdDiHOQyKquwlyqDrh7/oWz/M\nc/Ab6rHguLpVPwbcJR+FphCwDQJrh/Swxu4bLND/HkJtMtdmOMrLAxf4eAGr\nX0dUVUtOC5ojVx8g6QUwjPK4kRylDUsrvBHRdqdyDpvcQzEfVuecHNxMmOuM\n9ZaunHPxHuEUy4WiXPYW0gkiqnonHYH01qZJVzgCq5tgxe0tDwVfF2cbDE7n\nILjqGQCJNrS9GykJPrqSCpQIrbUQYG7cUi4gMiCXjWw/EBxKnWOhkGA4lR7N\nwQzl6yTzS+JvUOxaaBkh+X3GLnABHQBZuYeSCJ4Sepb/QCslC9uZ1j6G3u7k\nt9cnGIk2DHP8WGxakgKHgw/KZlXyvxaFgKHg3KNz0+l9DTr1201A/uveS5nB\nD+Z4op8sm0ApRApnGxHqCvBF8H634ieqaNz9V2ggEIjuZQkuR6E6FhttMoHr\nLw5viTpGwxPfq/+OfaQpMLjst9Whm8Hc6llKYsdhPCuWdX3fisisihWb16qw\nIxbAZbSA8k81CdFUyxd4pd7OivWcWAH6hGVP0cmzfuorZZk1uaup9PdGZFCB\nqFOt\r\n=N2TD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDL8R1oWcPwj1NZVwXJbBNFUtiA0oEXzSqgioiC/Gc6PgIgWgOgFyOiNrn5IeMP3BudyQ2JmfRBO4/Td8t1qpSuvmk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605033137-41b6b15f.0_1605033277363_0.7964874650149436"},"_hasShrinkwrap":false},"2.29.1-next-1605033164-9855f233.0":{"name":"@xdn/core","version":"2.29.1-next-1605033164-9855f233.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605033164-9855f233.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hnE5jYb5KpHSOdseOsg0f94qTK4GDieiH7Yo05apsEDC26kVUtMIKnA78GT84f72v3CStCQO1VRkw6QRosJN/w==","shasum":"b4fa6c3b9cf54ce9bd127c31cc9280d9c778d9b7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605033164-9855f233.0.tgz","fileCount":169,"unpackedSize":635290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqt1WCRA9TVsSAnZWagAAfTgP/3D9jPDJugPxbOAYrVRh\nyZ2R5/X03newhS3+REh0Cd3wH8hLpEb9OqzFlFPP9Gb+BSWscThgKraB/FLA\nObq98VE9Rf74FUsENX2GcxBDkAZO734mWrIJ/+X73vXyzZZjhv9LyTGYSBX1\nYtjl2twv68IZ7td061cPOKsMEz9ezqxYYslsGQxopk3JWusslBt9Xk4qzscZ\nGsjKHUU4EAXOU+xYnippvgQsTzyxKuJUz38O8Ap8Em9sJhq1/H142BPOsWEt\n68dlnC6YalBg/iimPizi4fsRKWjhs9sSbh8xZJhYdsqOK7SJ2ht1CXeFhzO2\nW+T92C+6omzVuTL/rpMq7lZCVClGpDBz7jIMnFdLDCiC2Y/MMIBpQ0pVRbzf\nCc/JwuoL+iLycMzRyXx/T78rHybMHEk585n7+1GYTib3u+6+tVMq2O30VgpS\nBOkVWKjO8NwZustaj93dnRFimN7Z/327KBOG5DHHnRlFF7zQMHtCgEW4vlG5\nHoLGhFGWJEaD6pSwo2Jn+TlaLIrPKx2kISGkt6E7fRrzbTPjQidFdmAwmrR4\noLcSMTjzAPsAzza4/pDD/inNxURUsLfDaZvsS/GCVyD+NiqVVWg3jgdu1IAZ\nM0oT68040Ow9WMUQprbqOpn7oKfLTWMTrv9RpMtTz6sO5g/GeLb7PztZD1Gk\nES+l\r\n=qTxG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaJuV3DglP7tHGjiZI3H+pqtAinCN7Wsr7lYRBVJCTqQIgNKP7080iyo8LYYnDWFpHppo8Dm0aUu3O+P5O/MueVC0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605033164-9855f233.0_1605033302244_0.5960684875975482"},"_hasShrinkwrap":false},"2.29.1-next-1605034874-303cb02c.0":{"name":"@xdn/core","version":"2.29.1-next-1605034874-303cb02c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605034874-303cb02c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-W2Oq/KGoz15zqQa/p/M8NbYth0Ld53QrGw8FRpg0zOGV/YEgbvPmfghE8556uzUFMMK2lxa6i0+kXlGsvCPJIQ==","shasum":"1938ed96847b80e9cde36b05bdff1ed9e00fab5f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605034874-303cb02c.0.tgz","fileCount":169,"unpackedSize":635499,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfquP7CRA9TVsSAnZWagAA25IP/i3L7pmXrpeL/Wk8lFsk\nYcDFRTyhETeaWedF9S+eO9wITwgAhNSaC6fLJvYLALP6vWrYQ0xiJILeDTIg\n5pKF6FQZiEqjreFuCgUSr+LfCIKH11fNDc3JyFdG+g6hq2NucPBJ6g0k+pMd\nFmRPIYrW3/YQjp2G4vIgie87YOlUqeqD5iTxCFcX4EKkUoi85NREVYU/f1SU\nkdL0s7UXNhNKZF8hjJoTGv5dWuw1ha3nK13TNov6PXWC3I/pRcHdZUXXjnN6\nuVNTB9pvjYilAISVlBZkRGv+Mb4gCej2ZDfAZSlogwVsw5ZL9jSfu57groHV\nMH6EkKefQJwJV9lDkczf9wPr4rwJUERmaD+a6yny7WymZq45xnKkWVlGWC95\n8xUuwoKqjGbbtBS9r95IpkA6MZI3+HYI05pHj8rRLWUq54daSAKLjKsO/c0Z\nR+t0Eyjmo8wDT+sxzs4HpdsgbVdJgLQjwyfIw0IZe5kC2uD98eo3eS8o0Ux8\n7hPXIK9y6DVApeps+7hXcuL1ipFRPJpMz8YOmnm1PU/filwr2oBaJIFM1VUa\nz03i2Ja0x3pMUjqfMcekA9h37pwnFnuV4MrTJCrsIOHVQpFuYeT3BoTSSK4I\n0+cwBuD8+f/8OpRNjVmBbPJaErV5ypkIwyrDIEj1DGiqsbwQiqxegTLirvq/\neQew\r\n=KyVw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGCnJDg4umHFz6zHDCdjVlz7GTLCtFOG+bDxiDuRzasqAiEApQyriyyNZdPYbUepD7fX/42tTDq8vchJbLM5TIDujyc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605034874-303cb02c.0_1605035002420_0.42681031484044496"},"_hasShrinkwrap":false},"2.29.1-next-1605035022-41b6b15f.0":{"name":"@xdn/core","version":"2.29.1-next-1605035022-41b6b15f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605035022-41b6b15f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wkTGqAz+x0LGERusZ/rTcaGf1pySu9AplDuxR97Mmzm9fN2SE2xbWoywNovcdsUB5d/53dxTdLTv8qQAWzQU5A==","shasum":"cccabb4571ec97d79f0b1bb7aad3b382b092735b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605035022-41b6b15f.0.tgz","fileCount":169,"unpackedSize":634686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfquSHCRA9TVsSAnZWagAA27wP/3DgH4pDJyXJIGlkpcHl\njfPlRZImpHwOvwBRhoW3C8+uDPPybuFCW2x0XBHvNFA438LxaMYb6Kqgmsx/\n5awahWWxt7X8zyAGN4de26NF4C6NZEqKUTCxRDFmPW+zR3m3iRSBiGOm6BnI\nDbJ6ZJbxLxtzpC0HajCdCwpoeG0HG1ZhDq6D0596gpblxXQVAAyPAqFsIC62\nzAqgOUoN8XnV6T8hS71Z8vupzc5G7yYD3rv3xqF4Ip9RmDtOonNxFk96SWeY\n+QNp6+WWm9xAzafFWVYkeNzqIZyvsWyChj0BAfr5intmLg93U3LCx2MoODdx\nhou0po52RpeDlj0PF8MIosaFopTAzCsjBEJLQ4uKAb44saKO97hVft62Zxrz\nedgll4yfUtJb6ESBGyDWAWj33qndSw2YWBrIo6zWtgypbIoLLsqqZX8/DxIL\nIxivAOlmyGaw8mFYiFL4t3uA/88XNXHD1JlgBHCDju/skXd4ZC8SpHWT0hyr\nUNtKZ0vPobRxeHO48VEhvD0MJ/RWA0+ghvvQ+r/xKezqy5iI5kO3nBTD6uml\n3dxsOIpi9dbR+UOe3mDbqmbV4OiBNijiD+bO9jzOtrYz1QwaPxEkhPfzl9bu\nAXEFa5MdJc8OOCtPKpRa2aMKXY+MhNW+UbzkiJAqkzmtLyO2oPogfQUs7KaZ\nxZ/O\r\n=0fwo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDm0Qt3Scl9PiUr4MKj/uXdQGa7w1lZ4C7r4a0Ngbj81QIgZYrpMr2IS9n2ZBvwkrgQjp5LzrhDC54XfLSgz7KiD7I="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605035022-41b6b15f.0_1605035143027_0.95106767031956"},"_hasShrinkwrap":false},"2.29.1-next-1605036955-33751c2d.0":{"name":"@xdn/core","version":"2.29.1-next-1605036955-33751c2d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605036955-33751c2d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-n9UiWeYWTgt2H2bRjLuXGKRrQn8dVoPMwXV2//CMN6CW/aPtlctnjK/UleSujCpDu6TaXtYGCVDEMlX+01b0/A==","shasum":"3792815b1ade4ee0a9022e4e92f1e71bd1bb0e88","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605036955-33751c2d.0.tgz","fileCount":169,"unpackedSize":635515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfquv9CRA9TVsSAnZWagAAlPIP/3hpjsoSrBB3+TDjMhyy\ndljBgQBf6Rg2EwXtVkgg6JrcGRzrUpCEmoGnGJwkZKZVMWN23MFybqEr+UvQ\nFt/Ch/z/7cBO+nd2IPiPsifzh1iNgJW+vOAyc3TjZkGhJlU5PRZWyQJ86awy\np1u2k7cy3mKNMXhveFkfot/2/MJiRBEBfF2HAwgfW3XU9qh+ORG66cTZDRjk\n80g8cDfqQ54CPnb+TwDOcuFOnbWB0wsxFwspU3UjjuXt3c/f7loZxl6Cs68s\nTfh6yWhs6tya+h7Xu7gCu5thBqv0P+rc5sQ2oc3xZFnuw9dZSKBorlrAmlG4\nbRcokJ2TgODp4NWIv8yKDv8U/wJIWWx1XGqYA4PX9uuQZPa11B64VUfUtpU+\n22Bb6Bk061MUe/6VBjXyuXqqkRFugjuKQG++LpRRlznkAi68++j98Tcgkt9+\nDmQdvaMm3Bv6BvGFTi/QX/w2DN2vECcjwZIqSg8/4a3ivJOPvcV7TStKrORq\nRX7yiatKAZJlhbwVUEz5L6tfoxITnQHAz61OpJkyVeFJ3GgCg8+q3Dqd0DEg\n2GMewYPDOLB743JDvGO4tJueAHRsH600H0UQPJo2GDD/r7wKJqdROTGO3xkh\na1pdKxgHYfw+xcMTnQ64jjL0e28vOXIoFHzrsSwbQSRKYBi/TYpFtEgM6Vm3\nAQnz\r\n=qiJg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGT2tSdSIVV0s4cxL5mP0sS7I80GcqAnfDz2vKB9jnbaAiEArXFEbztLV5K8N+psr9gKYgYL5k3CnJkLGRQ74LSwnZI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605036955-33751c2d.0_1605037053165_0.33921706193212753"},"_hasShrinkwrap":false},"2.29.1-next-1605045509-ff97b182.0":{"name":"@xdn/core","version":"2.29.1-next-1605045509-ff97b182.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605045509-ff97b182.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+J0lDdsbCpWMEErl3RxmugbEr52mGCqnuvaeOeDZOjLOA1OPNPN82TSHpKFOZlLEanVL08kZcY/v7d7BdjmBxA==","shasum":"e9abc4e8461f08288b4dff80024c95c5de8b988f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605045509-ff97b182.0.tgz","fileCount":169,"unpackedSize":635397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqw11CRA9TVsSAnZWagAAdLQQAJ7j+aOs3R0LTc2uTKa+\nlfBkt1kgOm1CGLB7RN31mTjBtky3eEqMtJKDGnNetcdMKh19EpFturjyY10c\nly8Ou6OO/gxm82/sT7k996FrJE3oQnTx1SDZ6lsm9BPGXgv5HDN8+gP+bC8V\ndgmyxGhuFkRmBcPM5mG0YpdAf3NQ0yxd2Dxm9V8pm4J5U0Cqy0c4vFbSNU6z\nBW8OvH+dSYl8gA38QzIdNXCpJdFRzrfEXghHc53woLZxcW1dFGG11/LSeYFg\nc8QbX72hXHZfIZEhmS/YSOZ7ptui5Ysa4dfT4cbSwdDChmJ0o6VBdzmZkOZU\ndoK+GLfenYKgniWTvafSpPCP/mmFONSmYveiCRmkp1hHVCgeqhiJO+nIxzDu\nujB6rosWSx6ESpj3TtvJYVIfh+n4E3GRVHqQ0PK4DO6mY+fd85icAp7BQOJS\nxZH46jNSdF54UFLOqQ4oXNtxb2AQifRnB/87j82XQOgBf3cmcfy7jldhBQvX\n+YeqrCNh02iqJxliFgsoVFnxmWm/b5DBokMoV+HzTfPRWyqIb63tFGmwLq8T\naC0wJOLL33EZwtIjXdy8yAAJx+hp/aqNkQuN9CsU94fUrWRhT8GGyzsdPPxt\nWSDrxP/9GszVVWRPm58SD53UClbWFBEs+CMN7ImZLoqQf2RxPfZZLMwOjL7H\nxGpT\r\n=qY2v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGA/09Kg0y0fU8nkkYf/eZQavIkDk6uyiRy1ECjdGPBLAiEA1bGGaMaQrJrW/qYj9yc9O6Bnyl4wKVlcVciD03iyUuA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605045509-ff97b182.0_1605045620182_0.5301375076826778"},"_hasShrinkwrap":false},"2.29.1-next-1605048693-3728717e.0":{"name":"@xdn/core","version":"2.29.1-next-1605048693-3728717e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605048693-3728717e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tXipDsm7nRoliTEWobGccII9s2hPlC5pkEmNGlLtWWazJqY4U9JSYf8iuNbPfBsq5WLshfBeUpZXZ7z7mqh0qg==","shasum":"4a86b57fa34550e63b86dc15b1dc3626edd0999c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605048693-3728717e.0.tgz","fileCount":169,"unpackedSize":635397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqxn9CRA9TVsSAnZWagAA954P+wZijQCtpfs+6A/VoEWi\nJTgt+htO8GYKzU26rGI++MfN6oFitbbpfKtq/IjaMOpY3Dll+6OuI5/nexUU\njZvGHoRO8Ro2P0Pmi6QRFw/kYJTy/EwP/UlqjAg/tCn8eC1Ne+m14cJzP9dx\n5IRW0fLgiyjA8HxCxjj5CUHgkgsnnpWxzvGdptpsFfyiCEPZzv7HICOhPS2z\njqepkc05UrTdvAgqD5PYszha8czK+dGY2KVu1IESDcx8z5OX5Te+Q5AahWka\np7BOWLaxq0h0BZdvoaDDuOfczFDWX8ZxaAKUQnJ34QMRXpA18vPNAf299eZ+\nPBE5nX4crtfIltHn/LMQ1TcZvN7NEgEpyXL4T3Xh6SzYy5Fzm0z29QNy6Jvp\nn6FmhUgng02PBNG0r81okSgTkKfaFkp5a0vRzr8F61eqioJ16a/T4TYdGtKJ\n1tL1XPWXOiDe9T6hAKLZphUL0PEP0xJsOF2xP/ifYSSUh8IWdvibvmmM8530\nZSst5rnln3Lq0ZUNaRgWn5QRt7FCQYS0E400OkttCkZor8w7emiD9QejtF9W\nwQQtRrcVo4nt2G37Wo+WCUHVYLbFd+WIFeGm3Kh5hW0HDzhj1EZdf80av3Ub\nsWx9lGt7LAZqnBMz08Qybq1fribGMLBTHhPJQhHJEVYX8gUKLmwFrd4drAhK\nbx1M\r\n=d6XB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpXHe5bA43Igt/H6GIsyLJGaTSI4Knr7MuFANadUnAFQIhAOShfVGSOLMkmLN3pgJpn7qoY1Yi+MY5WhZhhnlnifTm"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605048693-3728717e.0_1605048829118_0.9311033228543684"},"_hasShrinkwrap":false},"2.29.1-next-1605052397-a809a73e.0":{"name":"@xdn/core","version":"2.29.1-next-1605052397-a809a73e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605052397-a809a73e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ECuDblIUHfsoZHFfOzi2HIlcOFDWO5EGtbntKB6JpU2l4yHBQ5snLFr4WPgs4iUlXNlphegg/IquB4jgfQItwQ==","shasum":"c00de609f88e6d42894e926fadf9656bbf0ffec4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605052397-a809a73e.0.tgz","fileCount":169,"unpackedSize":634686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqyhyCRA9TVsSAnZWagAAplYP/AgxW1qnhzhcF/RiU0Zu\nSmjPNirdN5MKkKn/+BzEP484OHfTKJRQcYf8KbpJXE6LYw/uxBUTkWMj91YM\nSjy7MniwsbOlq7MtdmXrwvRRXvzqupq0DT4R9Qxjuxjg6XwOXCjYTA3VkWSt\nuFiGlYPZRTpEDx5mqoeAoDtS6CHhmyiMefJfzjZmcXRga0FNmJYPWWvwyHIV\nv99EBLK7xgWfpRIXEUW3KEttJxO/0Etc53jVthkYbigOhM3GhNvmI8NnZX4R\n6VvwF0QByyJLyo6I8NJDwA5MUBghP0WQCk1/WJzAS9KY+V5eiqMwVNQD7Tf9\nIzFI5afAuZ4aPCl8KufW+TCCkLUjkkAUQlf3kvcw/i8Jb8Qy9Co4KB3bJTuN\nH8JpvmPp3QaNkhMi9Qx/oPIp8mI9g+w3Y/BGgsA+hpF4iZGwQ9HHo2X+pj5o\nJ7tOO5XJTp7MNrTNymqtt55+1Ds65S9OUvC+32p6rNfhApPYPJD2eR0JXARa\nRCkx5NFp9EG2dN5XCnzXgJZyEvSihkMWtucQ+5F6sL4lgb5nDKBPNR8muzNX\njm6stzyizxXaSyyFx0TETNFRgD4bgje1gvd+aGK02AFehKgjh9OTVyTK5Lmm\neVW3LdSVgBQV3pXt2taTGwhIyA5Dx6GwtjMq0wLEaKXRYvwnK+g1D6CQpnvD\n/i+d\r\n=sNtv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHH8D81bSRJMWWRhRvWNWUFNUYIztddGTrsjCEwbSu4fAiANf33QmVv9S2jXQyR4j6eXhWM4gxqQDdNOwDg+gLFTgQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605052397-a809a73e.0_1605052530200_0.262600800895592"},"_hasShrinkwrap":false},"2.29.1-next-1605081972-7000f34f.0":{"name":"@xdn/core","version":"2.29.1-next-1605081972-7000f34f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605081972-7000f34f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-sGnbCC+BICsUEmG0jaEcUkzRXeH5Gg7iNIqIOVi2lT6YOBuD2OXMOHHsEBUbZsLv7OPNlM1tZTUDsTedQiBPCg==","shasum":"edcf41f3eb363ba57f2be8779a6b3afa575fbedd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605081972-7000f34f.0.tgz","fileCount":169,"unpackedSize":638378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfq5v5CRA9TVsSAnZWagAARSQQAJdKzNA6kiPpbiaU5cV0\nr9qB2iOfHXO3kQ/LWlm31zxwP5qUl+MbHf8W/t0E8YAn3VADKdZXl3RqVGe8\n20SlVOsk8c0wK485KL//0QQttIyK643z6UsMaFuAZ+iHIcjrxUnkcYizCvxO\nt7geAVNUCQG6w8aBpOV0iA6az/C78K1ZxL35AT8b/cmny7xgVvtzAVv8r3hw\ni7ATJr8bUHj46rtcLAkxOdqwx442ooQQ65AHfOSqhUX2PLYJ3MTG4hKx/Tzs\nySzjYDjBK+YK8qdQVK4TcKids6YcCQAHRGlTXBk+SfmdBik1OmYi6dmP3Cr1\nyKnFFD1Jhm4Y3RT+tPPukyV9KVJFW0nvoY1u1AzMdnTABrJsN6CujyHoMf9T\nmbCkD+g1iBH3qh4V4X7wodkXZAP+PfW5c3tFJ5ezgLxfM2N1r/dAwVoSe4Zz\nLiWxBL592b4bPUYZQMlxvElhlkau5g7wmfoYSTYEkjR1Mx5GjMgColTilFHn\nDf9Hp5zMIIQO2MJKDSX6oYtQhFX2i2ERpnYDBT6N7Kf/+GXTpXK471zMDsOg\nMy2rJFLe43ne/+L1y2BXOjCHugTk2IxP2YJ/U8sbKBQJVByxfLJVKNT4aKcM\nHRyJUntmPeCe9CtcJGymMpI9r6gtbIEHF0fqCVorAD6DPuoFBBwC5qWzd8k3\ni7Xn\r\n=hV2x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBQkpVc5ob5pwRFb5oFOsVLZeSP6skE1xi/WQLN4aTsgIgTuScP87LZvvoj881kGYsysrPyRSIPN14cn15TJu3bOk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605081972-7000f34f.0_1605082105017_0.6034392144604235"},"_hasShrinkwrap":false},"2.29.1-next-1605106241-a080185a.0":{"name":"@xdn/core","version":"2.29.1-next-1605106241-a080185a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605106241-a080185a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2cDZr6eNBXW3K2IeOITsx2KYd9f2t9T5kaZm8iqOEUNyu/awEk6305nA7k6fl7WMLBiTSvbDr0y6XKLhYI4wUQ==","shasum":"1cb2cf3c24c474b43153c816e9bae3d323116714","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605106241-a080185a.0.tgz","fileCount":169,"unpackedSize":634964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfq/rECRA9TVsSAnZWagAAiIEP/j2kFchEoADbRxrs5pQB\nX96OjjlUtjM6llEugRcc0VH1UVBjOQhTowMVwDkEFmNathWeJWNQ4r0zJ/QV\nR7pwQzg2EoU6OgzcJIelQDBh4fMW07S/Lg2Hs7iOBQig8e7QLuItxXiIsmYx\nWyifImlbLH9nr5Yu5xwU0bALYBED+MJY6yijtq0lVjmAryH4t2FU3gF7pmoD\n7DHS/6ANwK4+WLwyI8dCRf5OL/WjRby0wpEW6v4RpduyK6LnpYNt2SdIm9mM\nwkOCcX2KBjSU8lHHh3FsZ9dJ7RlAeKV5GsgfYJ4vW75W6npdZ5N6x/u0kmYr\nnhsFJXidCl27tcRo8LrxEMb9YW5TcW/4cJ3NegMbrw2Puqx9rztnNvfKx/q6\nTe99jnYxKYUyrOr85gqNEBnJsiS6ulXYPuHFFd4OgcXtfyVK7DBIvSF8ATBr\n4P99gyRg16TXUIZ7XyYvC8eBqGagRxD4wGRVKJQ9uEVGlAfJv2Sw+Mr3S5YP\n8Pdp2us8/a2YWN7+oTPDaHeVqGCisCQ9VZONe8XlpB0M/Mse27PGX6H2uJp3\nd2wF1yRwZixpP5VNuxprDnOPTt5gj7O/252qiPegXllGqT218ZtR5nsgyjKQ\nFUrHdcQtjWKwqKQpxF65EKsLx9vxCGewqBT0glP35OsiiVDE94K7otKW2iUF\nLdQ3\r\n=67hh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAYLtV9KRkG8Uj7/vqTxkMZfwVxa3mRJTrj3UodxxWnNAiAlFajNLqO/afDi89wKEBIGbjlR9cim21nlOnMuuJwvwg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605106241-a080185a.0_1605106371540_0.50587352644889"},"_hasShrinkwrap":false},"2.29.1-next-1605107367-2dd91c42.0":{"name":"@xdn/core","version":"2.29.1-next-1605107367-2dd91c42.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605107367-2dd91c42.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FnS/cKah9KKATg0+X2UsKHzC2uudBPfciDaAT4K+De8+qARYzq34geyccpcGbPbzHp8r218KkgE6yLaxxmfYRQ==","shasum":"d197efdf51c683345d7efc7b0265fdb62f3da6a2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605107367-2dd91c42.0.tgz","fileCount":169,"unpackedSize":636497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfq/8mCRA9TVsSAnZWagAA1vwP/iWdCc+hyZVMorpMVhZD\ndkxtBb1huz+vPQgNtnjwi1RzkGajro3RZbUeLTpEnG42LGDEW/fyMzflCFLC\nq2s2GiJPR0K1Le1tUHqRaPqYi3toTPnCnyjBY0WLGkY0aoS6SGhPFkZNdLqH\nZl8+vRNdY8q1XerqSy9xHfzAnJE1NIy9bzgi1hNXmWUME99qTRsx84h4clTy\nG1SPOai0RKTMcI+dwgf+vWM/vs6oaJz+NCStklTehep1CzxMJCC+A5mptKgi\nZiFB1T8VfZ2VOnmeei9qZSrB6Iq72fuUTHXR/3wbMoJAHLn8Yv/NVBexiFpw\nPePngzijtMBrP99fYnlWCZmpqyjWpeW0fJN0GHJBct94gWOfV+IZBijioTZL\nFVlgxwBi183+n1KLfdKC9t1WcgOe4dv/xSXgsRSDyJkSvPvYJOWIno5kNpuW\nhaijOx8IuR18+F50tmolJmXabXvjxEyE9pqNXsOl8WVUFiaLLwBCuJrNPz9x\nrSLm9jhWUm1j1Gj4lyukhsa9JTbBTsGlz12Esr2X9YshVavhKsFZCtjltjj7\nQX799HL5ZMglPp1qmD6XVdjGZP+R9t2GLl7D50dKZidhJqhk1PiN7I/rkxeE\nXWlIR/zgu68yLJU0mcV5mdYAe015HqT1qas3UTu4AWe58M88T4ek2wUqJBx3\noc1L\r\n=2QIv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeYYdweX7rFAhK+e0c7ZHbzyiNY3ApgJetwr4OaPwRygIhAOiqpfwmapJ1Oudd5EHdONpI+DpBh7V5+uhuEAWeofBq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605107367-2dd91c42.0_1605107493615_0.07508059921830013"},"_hasShrinkwrap":false},"2.29.1-next-1605108291-9f478187.0":{"name":"@xdn/core","version":"2.29.1-next-1605108291-9f478187.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605108291-9f478187.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-760cQqodRV1nzn9StAXcUe6fbf1O+bIy+g8LA4QAjB6etpWImjDZbsZZ8nrSfWUX/ptkraiWTyj8teJMg0Nq4Q==","shasum":"5e9de3790aa9287b564396214e89bf9672074646","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605108291-9f478187.0.tgz","fileCount":169,"unpackedSize":636652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrALLCRA9TVsSAnZWagAAH3IP/1LaKC4Hj9FLDApoL+Zb\nMZekN7He3kAs59SS964gPBVwk2LnP8RXE6u3OgMVQFWIni2dMzz40ZIvycY5\nrYT0oqWoUe9CjvZl4B2/uvPyB1BiTolHNIpYiCUVikes2IhLgiPYW8eee2b3\nXUNcnW8ObLPMjk+XPM8o17+gy6Y2Q3YSbDaCEn0m3hfJOjKUNWRC0I2EqGG4\nDTkZdf9p3kIn9C8K9xqWA01osrfuppGoBZPSGTgmbvORcET4EAw36qm8yDjX\n7HQhvyAthrbla8rgg+V/Jbf0OahqozPpPu60mOY11hAWl6fzALl8Qtg3B30Q\nZvwdB3COwTbm14AHZCKQEX+PdsF+IPDVQTQ7zBxTwwFgnPCNarpZoTs0IMzq\nJSY8xeKUaSl1Ji2IN2+SwV3c8NY99KzPLV08pqWpnx/saDBRGeXSD/0JBhZV\natoLF+LAfVCtIMaJR4Ua+OVNaqWKwzam2Ho061zIHwUmn4dZh/T2GDmANU96\nL4d/MBu4euO8UbfpPRtDGP5WZ3Hsa8rZNJjN1StKrbQQEGoki0Zm9NkpzxSQ\nXEvV8shzP6FicwVKubeNnO6xZM05v3ssDfSUrSMy/7R0gcys1Q3Cu1uDvQeM\nBMU7cjIQtoWaNZyVXLMUkaxbaUASuFiutHhrl8mpXTe77HjhwaWKP1UMhACc\nTPnA\r\n=DTev\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCu4mrhC9Lrb4uQTT9Kj7nF5iei0prWV3KJHmPmCwRnqQIhAP+YSnHoN6flSiNPf2BfQ9zblTV2ldUM2IayIUCOqNjH"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605108291-9f478187.0_1605108426995_0.07825579803072902"},"_hasShrinkwrap":false},"2.29.1-next-1605108462-d7290acb.0":{"name":"@xdn/core","version":"2.29.1-next-1605108462-d7290acb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605108462-d7290acb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6oQdUdZoQF4YS/bmBRrKaA5bk/rwJbiw4OQCFMM9H6yG2TOyU5+F8I1E6zM5hY7Yab7z5NBBjh5fKgsslmFpeA==","shasum":"79d354ba0000a49c90d0b73e5921f96eaa3ac3fc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605108462-d7290acb.0.tgz","fileCount":169,"unpackedSize":636652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrANtCRA9TVsSAnZWagAA7y0P/juRfO/ToZgj4Scwmkne\neMLTJ1ZfuKwTjMru4Gs1dNoGcOyuJQKp3BJPlFl5VxrBpWLKTYselqLZvaKN\nKPxO6tvxGYlTKCukZzstdAJjGhjfDnY1OQhmAKsCTipu97CMorjfAp/L8zp5\nlsMAuNGp5LVQU1ZUXRwDJ24Zsj+4KvfOF7O8YI09ZPQiHzd17Q0jAszB8Naz\na0lBPlR5zaFITosr9OcyYyEokmylj+TTJgupwZVisrcdjZoNoA24qYyTirE6\n7B3h/L+7f9i7v4C2EFUzeSM0RcOLjpsLOXX7KvZv7dGMVICojpbC0Zv51Rfo\nKHHz0rPr8KX2CriUfXvT4CmkBL19py5QFEV9OrUT7dne7kyVFJuWU2Aht4Tw\nkxyZRG5Nn61wRPYht0zFVPMpj0ByAUzFilahGxN0zYiJfkQAQG6GA3qWa667\nV9BN3EXdZyEBCDWwgX55BfWfGALbYLB3oUwsrEc44vyqA6NBwQszObhdSDB0\nmlHy7eKw8rRmW/9lKvoL9CpM3WnaoMhBUYYx7a9bglLvRXE/b19kt7UGTj8P\nyzOxfh1PC6yILanmm+6HUeRt6yErwkqKax2t6UH0DURKURjtC7eDGKfUEv44\nMDJWVPHhHETdSF/nOJuNcMIw7Df2OG6PchJw8xYmsCK6xmEwCz+0R8pPisGM\nzFST\r\n=Sri9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTFP4lLg58GgadktB5AMcFE+g8RduhrJABdwpx7mT7bQIgA8XdFC6cAQ5woss0CVWX2IpRx4QXWLiarJBlyPXMBDw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605108462-d7290acb.0_1605108589326_0.8876566822403433"},"_hasShrinkwrap":false},"2.29.1-next-1605140739-4c9006f5.0":{"name":"@xdn/core","version":"2.29.1-next-1605140739-4c9006f5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605140739-4c9006f5.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UPxQlUC2IbWtKV8FPKvNsQbIlnbotY9NxWO+JjY7ly5sY6jIV4/isR/n1okkpwlIkfiXrXnKpQ+aFAmLoYgeQQ==","shasum":"c1292a3c7b641006533e66c42f7258149bec7a81","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605140739-4c9006f5.0.tgz","fileCount":169,"unpackedSize":638378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrIGGCRA9TVsSAnZWagAAgk8P/2PgwdvUxrDnd5oLpMWc\nPGulXNVL0/r73wkpsf6HmQjaJ/fs55CPOoGwRtBe/bMXmzFXQjj6XvIbu/lp\nP/Owz9rpo88w+sip5iXfeV4ajB+LoMdcW7Q3AmJOQfqknxVBa8GO6FPjnFBn\nnuk2dqwaquyK6Ingg2rD0thqubHtvmk88vdY085fIvYu1ftAvV9eRVZALIU/\n38hS3rLg6ieD8kAE9pcoPMFNUsm7o7oZGjo8PpPzeNtHZ/C0Wyet8OQJXMjm\neMqhGLjyZxtL+tY4k/Z2XM7v5D8iY2jH/howZ15yK1utDxgk44oh+KHFW5Fw\n2p/eZO506Z5tT/wKZsAlgW6+97Dt5jGuL91Pb5b1WslZN6nh2GPBYZNQ3rFf\nlOeE1cwoDtbXmOjP1zJ7M96i8ZqfGjIpDWMEOkqlDPrxrThvnYbI/NA0y5kB\nhtFFajX1EzxElLqKOOqjxFTDNuBNR16aSfeGtYwH4WdL0/jtEE21zx608OYn\nj8Wc22MEM3CJ5oOiwQ35aSIfSwzHvzHkkjSgRqCLBlkfBr55UQ3as0FRRKC4\nlSXXocep4sos8bYVpFR8Mz/CKmANTDnB8QdsmWEu8z08fVxAayIJtF47i4r6\nEEK+jUiM2zM75iWgdr7SZTa2BdAvn2xWwpCnUfvd1x1GZ6yCxKAnJJN1X1wb\noqN4\r\n=Ysml\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBWh0o61vYj7AxNN7Esfld+n2exBhkW8ag2eXMOHrZEqAiB4UtHf8tZcgv9/JAudLsn6Y31TkVdtR6yxkJtOe8lMRg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605140739-4c9006f5.0_1605140868851_0.2905542381686772"},"_hasShrinkwrap":false},"2.29.1-next-1605164537-544c7aba.0":{"name":"@xdn/core","version":"2.29.1-next-1605164537-544c7aba.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605164537-544c7aba.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xP5kdKC4zYG1uttyr7kPuvO0le0CAs6FCj2YKl5dU24JBSpTr+G/cMoZwaQQa2xEPSpD38iy78XvZBeUKsq8lw==","shasum":"5e52d392916e49a2c024e301b4a939bab8a3a312","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605164537-544c7aba.0.tgz","fileCount":169,"unpackedSize":638378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrN5rCRA9TVsSAnZWagAAqjoP/jR73alNdVKrdAWAJQPS\neUKmpMSN0S6DFzTFzDjzcFMVGcfmKymxhZPiEXkfa8eOqnxUiQUdGln2UlrZ\nnoNGfE5i8HxikS4Yf8P4jmy6st/vaowS1uB/G2zPWSUVuoswQJ4igY4aq6OO\nlTYhnQPRbETva2Fi/03Fhf4iO1skWcg4JSnVs9JGczZNEyr2BRlUMOy4fQRB\nXE0URm+u9bDfh6vF0W3RBwxQ7py46U8mSwvQ3rxCn6mxo9Ry3xfx6BDBZNOy\nquAjENJQziAKzfpMVnmHEyx9NS/AzyeYQUtELpVDGy5MFRnlWiKU7JElXIO2\nonqwfKGZVd3lPwg8PlXFI4dEsBLJH06HTD6MStiMhYALalw2jxalHz4EPd2g\nqBlR7zaDjJu3tPXxcE9a7HkWjq4HOeQAOoB5gMemIWNcgWo4LiSxBj121Z7Z\n9IA13aDV6E+UfGlrP2RV1UL+6lrZNBszwR65pNm+MwULrm8FOnoDTTy3Jqvg\nkPRSFueoTUSYUik08bXtnPkUTrvJZUcyhBEMjuzBcLd1PEiooGXZQcDDoaN/\nVFrU81NcHi38P8gCrIwdC/5RE9t+Ozk22J8RGOiV6xbxaOiXPTncoFiTTR/T\nZvfjBQkt3vaQCRcXUWdkANYCvnh8wGVGdcgGL+r8IepHwzXMNOdM5cWDPsJj\n0TFA\r\n=lbr8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsxNKiOqxwU2ZQNi7W3q2OPS0dWo72ue/vkORXEnR5gAIgdlLdsucPYdVn0TVKCEWGVQzyHC+iJRfK3UQYxxpGWbs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605164537-544c7aba.0_1605164651150_0.7092383394649859"},"_hasShrinkwrap":false},"2.29.1-next-1605169328-f71334ce.0":{"name":"@xdn/core","version":"2.29.1-next-1605169328-f71334ce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605169328-f71334ce.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IihGfLs88n5Vf4d+PIfHBndsnsVCPTUPzlSiMn1Zs6FdDPpzMX+ieWWlcrHNXrCE3l+pUAXfaHQZ4xTpaIFPjQ==","shasum":"ab7360505d299e6dd3e3f2dd176b002269344cf1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605169328-f71334ce.0.tgz","fileCount":169,"unpackedSize":634644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrPErCRA9TVsSAnZWagAAf40P/Ap4LLATojIm9T4ZQhOG\nADRARt3LAGS0UigysZ4ITb49maTlurHQrHaESFDQCdADWPgyGUAbqGF3RdzR\nOuVeWTODWo69Z7iXtb2kxRlC1nOSsW35pO3bFwAvk64mIGlFDFp5mepxydU0\nVb9gsMBs28qCLPp42zPH/uSowkUd8+03bo5vLqbSzLsofom/nI7PwGRxhRwt\nbfUkRtruZAboS6/BXXPrTBE9ABT4GcvtBqDcYT4chzVFISL9kcX+1iQVrjKG\nUyMS97dX/1SMtbH05cC8ZN/a8jMRU7Uw6MKDTEozNNNofI8XfrsCcMGm95ZI\nUOyL0RwrhJV5yipMoPyxJ7cpTgmm9qj5qIDjZxZ3nFoRk1845bmhZDMgSVOu\nYo+GBEW8dMhtp9dyCgkKubRuCYbq218lnHh+QFSRXFZ2aTllE5ZZLQGcSnDi\nv4zCZM80kNrBofEL7HKOOBbk7CCebzAq1QeSRKcT5YNTB6PFe2ybu2lGXryw\nd78WFpIk1TIhgVirDZbiZpwyui8iHuA3CypfN9Uwxfwalz2swbzPmqKIK7Ke\nZonWiH0dtG0buL3EA62gLM0k7MRnskdstgiAZDTHfm3X6muhUyme6cK68FGY\nfrAg7kM+xoRAa/2fsGFmKfJV/INpm5cNstUp+vztKxk1+PK8f9jJ2uwPKnjR\nc+tJ\r\n=f0Py\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6RbS25EQz6U/fda7VRrnvKpash7LqTr1TFB6RoHFU4AIhANIXpCf6i94zqjwT3VdN+NqDKN9Goxg3uGMxpo4y2xX7"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605169328-f71334ce.0_1605169451041_0.18135223545816803"},"_hasShrinkwrap":false},"2.29.1-next-1605176928-f71334ce.0":{"name":"@xdn/core","version":"2.29.1-next-1605176928-f71334ce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605176928-f71334ce.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4hxDKGvpDhiya34YNJQBNP0+ZxAKs3/IaTbp3m0O9vWQe70PEUzJXM9oSe0+QRbylUpR2M0wZQYThTiWU4D8xg==","shasum":"f2cd66c926f96459872c83a25cf2901abdfe77b3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605176928-f71334ce.0.tgz","fileCount":169,"unpackedSize":634644,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrQ7QCRA9TVsSAnZWagAAmFQQAImnkjepnxB/9EoWzxsZ\nVXQBg7OA1HQfrFYnj2Cf7bBROO0Jsx0HAOUJVZWNeO7WQy3BV4VxWC2HB8Qm\n4HAIAqB92HqQgHr30D5ZUIeIV1SqZYx7b3xLH7uCb/iIKIGjRyCdky63PVz7\nUe2obTPysyW3orpn3HKg5h6bobLAbs40uQe0WgQBYBRXGTgpcRe/Tpzxgb+1\nNmCQB8gNTHsvjfijgBC+3bXO3W9o07bPjjF96zqNtv/SQQywUF+jyqpsGgzP\nkkepTsBCvTcLBgUNjra+oSpNXHTmO9z+Zre0vU0ho45j6iISnW4yxA6YRyyC\nmpbOIjeiXlwZn5baNkvB8qB71JdIwiUYAl6k5Q3GqA7etzXQ8zYIQW73z0xa\nRfwZpw7Ax9Myd2BvFNyklG0EzEblEeDSlQPyabCHefV0WQMYBeoS/EJwTK1T\nB4okXIBEtl7AuaYb05Apo0paeluikQL9tM/Hu01RevvmU+2kDejjZ0CqdwyG\n06631opafDCN7dP6HDeT7fPQFCG4XJ+i93VQpjAirE6kbauzIOVuygwSGIEd\nc26cv/ioX4TBPt8+nN1YNoHaeHQoTtsaQ7xOKGR7wF9HKlSHd5EN2mKJju4f\naxmHFZllv0YhffXB02Cyjs+2XkdtRFsyOpKRb6cSd8/ccqzufBms8S03iwCN\ndqQH\r\n=1GCj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCreLrYvkKxfISOgFmhFioqian0y8NP9LJuJMIiVb/7IQIhAPEdGypTZ5Ep8wlD/dT3MI7sArYnWnIlU2Rd1ZVnQvXb"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605176928-f71334ce.0_1605177039633_0.8249259402001761"},"_hasShrinkwrap":false},"2.29.1-next-1605179025-2b120fa8.0":{"name":"@xdn/core","version":"2.29.1-next-1605179025-2b120fa8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605179025-2b120fa8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zpT0Tp4gDj6Xw7zlXFm60ed3MyMhZMLQPwP5TcwrWr7bhfm///TobftIu/fKRStPSfI71efO7NNMpzkLzD0+Cg==","shasum":"6df8cfe71a0c3d05d63107bc6cbb07cb805ca1e3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605179025-2b120fa8.0.tgz","fileCount":169,"unpackedSize":638378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrRcdCRA9TVsSAnZWagAA4WEQAKBvAAFIWGviHRhBIgQ8\nkon22vlfyepVn5H1RyqrJzFogN3fkXczDlD2i7hUdSQelDZ3v1vhQkao6b9Z\nUG/gM+/lJRB5JXy4K7KmaKapjPel6LfrBy8cqTZHdBu8EtpZd14gimJqhxpu\ns5CLGrAtjCEFoYcP7PCMBu8jz38NdlCCdNSh8u+tZf33ZS+K66xY1oNRQu4/\nDMYQcedmBAxMdZ8tAr5d04+zyMsx3cChB7jEKDbIK4wyzHoeNmQ6dSzl2+pQ\nYPimldDZPRsz9XOsAJQvW594e/cJHD2vMUfV8O9Rt/2h5rZZIdck7A+A7+9Q\nyJiBGOFTGGfA6Z+oyWNkhELN3iTn/9NEY3suPdu1NNNzkJWNgoBwsZ9VFJkB\ntm5/kJ7IqWCT4N3KviOKyplh7S9ewtIB5eSxsL62Rc/cZrno/7usL04OhVXK\ncZSVs6dJ7ZtQP995IaHE+8ts60Wtsaarhn2W6lwGF9Dr3VJD7P4jrrmmfBXj\nV7KPVJZgImFeHrVXWchY9YMb+QcKMFyX2mIDXeaDuVOr/7QlyPC6x3rSfVBR\nULzXI64OpQ7A9DGL9Rj6dZWFh6JuJ5fmg34kx7niWCWwzQw4QUBzNpsL67nY\nw3g4B1v5RT4lzeOVAvlm0qcVvBcmlRtMMOj07kNqUQDqiOXSbnRa01zejMre\n2r73\r\n=p4pn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGE2vszXB1VEQZeQQPqPVd+Sph6TmtyNC0lsZEBJQMHQAiBBFuLkoifL2JKCSKh+2+tYKS7RiJwXyAWiQrevnPKVQw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605179025-2b120fa8.0_1605179164949_0.8173982247338789"},"_hasShrinkwrap":false},"2.29.1-next-1605182499-ab088f59.0":{"name":"@xdn/core","version":"2.29.1-next-1605182499-ab088f59.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605182499-ab088f59.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zsFsgcpVoAdyv6UPRUXdzAMWu8LIkI2GGXufCQddiZRQ6iPZopCCVRyZmwom9EghsU6jBZg6Z60SRojghat4UQ==","shasum":"abe520f7a109339f97a92fc365e60e8fa8aaa478","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605182499-ab088f59.0.tgz","fileCount":169,"unpackedSize":638378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrSSeCRA9TVsSAnZWagAASQ0P/3i7hYGXv/9WE2eRLaqW\nVIeXsffsLOq59jDbFECaS0IedJk3qDHrnbaF8fskxzPdZAFGCtncUMqVGN1y\nOYJ9Wk4lc4TDs/4d+gul/m2f5zjzXb5akvE0SJ9G8wQQqWP07mweumIRCuNQ\nUvUObOEVpgFw4TKVTExb8C6DACWKG451k2Amlsd27NKUDwB9tOiMCZeUZD14\n4cBTWJhDVo6U7tytTTa4DdejfT9Sd6sCy8mpG+4GbEAUYVBQtfqjZDow9T+R\nLh4Hq7eL6C99yg8SwgyfXl3lFmVVdUjhM8qWjFprqTd8NrqXj+uLCwLjqsfV\nAhvJlSI8cLKK/o56sEN3Lan1tRpK7uvhs77zsLHxbDQNPQA2+Jcr8QdVGy1Q\nR8vjEOR1cKtKbKD8foQ4NpYMHhNb1dw7QqFD6eP6SRsEG1MA07ou6Opvdrm8\n8prFnDBNeiLHVC3ZUimE/hmuZZAX58KPes3O/oBm4qiAMhzKBvJXkJQmbxqe\njI3pqCixHOZlr+crsS/RGsq/lkcuIARf0UdpBBjlRzR23Po4+uPGPqtmPbCZ\nZ2k1HmavfEZeEXGB3uzO51U6d0Wfjgco5em5ABJ6qzmXppKUN30arXV9Z2O/\nOnWmuKHs8PrQjKHa4JIpa/z7Ma0/hKKkcYv7ymjv2RcrAY3wpxXgE2+Jsqbw\nIfH2\r\n=o2D2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC3qVt+tXEBYtrADpP474KcEQK45HriTYpyGJmcgSPZvAiEAy/oSTZH6esRrsAPjxMMeWKCrL8U/+pEKPVDITKc4yUU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605182499-ab088f59.0_1605182622102_0.3295868451333175"},"_hasShrinkwrap":false},"2.29.1-next-1605187801-a3c601f4.0":{"name":"@xdn/core","version":"2.29.1-next-1605187801-a3c601f4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605187801-a3c601f4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rTRGeZg3pjuuU8zCnTjaW543k3tLJ87EfiPyixzjLwBqfVuc9u0a0VhDOlShMMup2nsiJM8VwQVTD6OL5nUg6Q==","shasum":"f5eddcf965796bbc9bfb5281a68ff40f62c9ff36","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605187801-a3c601f4.0.tgz","fileCount":169,"unpackedSize":636024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrTlpCRA9TVsSAnZWagAAldEP/0HlOOnom2/Nbi8wbvUT\nN9fQ8h3ZNTZ3EWVZ1O1YjkTolE2QOqyp5wDb0suFW3wNLYn8T2r41XhTTzc5\njw0uyjkvgyV5HXZc8tNNvhNRdqE2LYWHm2/IC4qlCEhv6yRVWXdCXkjMaupI\n5Gp6Ng0Fw+RiweZs/RFD4XaC03RZptY4CddMjUfMFqY+QpTtEfnCqVEajoh3\nqwcCXDDw2DXrYhMpRDTxtMJEpCYVDNbtgpHyZaKahM5aCfPj5jXIb9kiR8hf\nLu2clIsMcS4bj7w5jbLnxM4gXD9w5oM1ZjfBtFbzpc4uuEmT/TbN3i2NKVu9\ndbpnJXpV4cInMfgwyRwCBx/XGwqXXuTazGsS+qNoTGhF4OiMD9049FbpNphn\nATA/QbTQUNFvZh7NBONZV1Q1rL+9TPwlF9wdS6xuRWdY1LSlCpBNm95P60gT\nqXcgnt3r0NhTHfnalRT0fHAp9d5P4sEeQ5Lcpik0u20IIo80N3BFmMvhAOc5\nIPXxILSSYnSzthoIQVYi3xaImlBtoVvRXrW828D1wv8Ixe1qw4zoExJPwpc7\nR9553Qrtvk9YRfyX7AZaAgU4XEX5bWh62z8gLZ4Cq+obaSQkF4fpoQHBMvs6\n+yjVGPH6ZIQF49mZE87RzzNzFzf9lvd51bbUtc/0dUigvfMFXXYQKnyufMiR\n9QvE\r\n=J8HC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG/NtlOD9ynj77Bo15DYQORlG7stLrkQPA6Dy65r4aueAiEAjHQeALuCQB2XxLj7FL+So0zHyHMyQDqTxIIEAGCr85o="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605187801-a3c601f4.0_1605187944982_0.8653447973914159"},"_hasShrinkwrap":false},"2.29.1-next-1605195130-e170cb3e.0":{"name":"@xdn/core","version":"2.29.1-next-1605195130-e170cb3e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605195130-e170cb3e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-P7IKNWImKhM/CXi2fPsjkcvXMlqCniVIA/sLsyHYGLXMMXW9Epgbcjb2EIZd7iHocUQ7TE9tDwadfD2WapDMuQ==","shasum":"5374bb2b14fe0d0f417866c4d0218cd488604e50","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605195130-e170cb3e.0.tgz","fileCount":169,"unpackedSize":638378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrVX7CRA9TVsSAnZWagAA85gP/RpOrtorE4NZBFB+GJ8s\n40vn35d+Pdr9BKTmwPHhV7eEPbMeYhBOwuuMzmuyHorunJIHFhQHVZWnhv0P\nS5pEn2+vjBK7yN45VtNcc9ZEoy4nR1mtlmnVVTieUGBk3O6+DTaEViW1jsLC\n1yZSmyJca6+GLD/a2i2HK7JwozT4eYIF7sPwHOnPAQO6124+9iBmmRh+OLhR\ncsQ8IPxW8klQUtzU6hfY0NwKl9ixMUvNrDeIR9u4nO5z8ari9qyzlAZMlr4x\nJ5CBQI9KUG4NKLr6QX7Eg4ggaXaCoILVuvRzGhEZkDo41JXBIznrlQUC/qg0\ne6gpGq3fX5yn51hf+v808Y6QRizFRExrDyEJQyGKwPl1f53tK9DpHsVWpWLL\ny08JmghJVSN9Uw6wLDzQFKqjKwdzWQwIBnhXwBRPjQRroY9nBefO47LFCs/9\nh9ZWYuYYKMZItKFKNlSKPvBclcPJV55gUGruVqvHoLvOFccr8JpBLGb5eiqy\ncvRb/LiJoJ/jJSojCYFecNidsQKA5VNK3S0I1EsV1ZGhjJ2vt5JdWNFSCrgm\nXCmjmhpxe31J5+OoUUkiS5Eq3r5SZbRaYl4Gj0YD1+i0GPR3K77xW07lLvpZ\nyB/Wv8AihSiLhe5LA1rkto4sHFf6Bz4YogdJDjIaR3d4j4VFUjGiaDvuakL5\ncOMd\r\n=T7HH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBGOxvi8f1sbM/jPL0CjAlbfVL3xiwFoM+d2REW2Ki3IAiAF08xexPenVg6LjL676Tkn/4ECjnotifNjmJiiVzOHgg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605195130-e170cb3e.0_1605195258700_0.41267284103209656"},"_hasShrinkwrap":false},"2.29.1-next-1605198090-431dfc79.0":{"name":"@xdn/core","version":"2.29.1-next-1605198090-431dfc79.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605198090-431dfc79.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mhjzfF0pRvDmImFA1NNgpkONhrmxo+9MSy/dccqKpfQDbF81Qwhd9LhEX9sQFhlASEmfg6h+UA1JutlF2XaHZw==","shasum":"7380dc90c114cc985bf7c5e6ba78bd946036287c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605198090-431dfc79.0.tgz","fileCount":169,"unpackedSize":638378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrWGPCRA9TVsSAnZWagAA+9EP/Rc2Gu20jh7ufp8fKWEE\nRPCnBswunMY6RiogcDwr5fdi6dEW5kCBvjDnnbw2Dop1IBCE5zujFQw/yFPn\n2hkm/iyLBiV9z8Fkt/QG49lUIsJ+0k+ArbB3DtZwV9GxFTusk/+Kyely2WBc\n238zSd4YYAOvWyOxJ/qfqM7yTFuaxQNA6buaYvXSy2wAit80vJtjfvaH7E/d\nD+KIdIvMnZArRC2Y2bv7jUEbE3oqCe8X5FOoMyGi6UyAGpauxRb5TqtSoXVH\nc2mzzMVODAQnhFn4LcCqWo0pvnLEHceKb19DP+qEw0KeMnYVqhigxUz27WEs\nc40oNS4pavtjc7b0XtIQ4LT1ob2kCotbxINKwNq+qhiddZCHHzvyYS/u2vrv\nioXjwxGtX/J/en9chomrc5lP1uONmXtVGNviZSquD5HhgHSLvY+7K5INsULv\nmS8g/Wj0ieuPcQtXRX39/GHgp7liNUYU7c1kDrnKZIUSDQUjF4ZXdMhU50TX\nZhVh9gYqDgWo7T44L497ktk8FyekjtzJk4lqNouxa7J4YbW/YdgGFYjyjKog\nblgt1Fhj1cQDYxqyfq4mzT0pyrlooZPDpY+geZYo+s1nNEER73FQVPP05VFE\njnj1vs66lCxguz+0FDfpCtzgS1+1KPPK5lqsO35PiDbzUqJfQft9tgII4jds\nZVfs\r\n=ZhcO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBd4IDtQafBGYQTLAfw8SfNmTK35PsEvTBwDCkFXf+VxAiEAxl3KHYODBywwIHiW2/e7b5ZErj6Od0Tj2RP8c54U3WA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605198090-431dfc79.0_1605198223063_0.7554355052874004"},"_hasShrinkwrap":false},"2.29.1-next-1605204536-6aeb6380.0":{"name":"@xdn/core","version":"2.29.1-next-1605204536-6aeb6380.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605204536-6aeb6380.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UcZqgHjhKgUNV+NtYujt/sQy4Y07EmAi4XuAXrN9LogvUraeFs1TuACoF1joOysyvdu85Q6VVmrsAfFV25RKrQ==","shasum":"da1971ea3674ee63f603af00e5ca3053171a943e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605204536-6aeb6380.0.tgz","fileCount":169,"unpackedSize":638378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrXqiCRA9TVsSAnZWagAA8XMP/Rk5+3IMdR4dCDrY/cCm\nv5c1L798DF1qLtDddLX+AtOqGUsbVks7LosBZ9kcx1AUBCKhE2RLD3fkfe06\nB45NOVBylXlUfsXEa7WjfsoJHyfxw21fqaGnvvxHPbBM4zcvx0LjGFwVv+13\nfskBFYd4/xGTKBZTk4LwvgdWcykKduRrbmsG+bA2sb4lug7yOOpcN1Z4fdz+\nhwyFvaZzfOG+Gq+E73B7GN9cPHSzg5OTF3nxIQfPy+YyV7WWjQt+Gdo9ohnp\n1ax97iPqMs98LrsruQjKotsUVcBczFuhu6GECmvmyLliWNXVwnKPXEYztBuS\n3KR843ryl1qmNZOPzFVVZOsPr1H/q1ZxQXGE0eWkgU/CRb1nwlk3NonM0uH4\naX27z5JmE0FKeCD7W3We6D+fEQiKolSnmpmyR8G/5ZE/PGXz8wEjt6Lkf8aa\nmF8YX/LIAvj4n1w3VF0kjU1Y/5K00A1PMeCkhl1qd4vcOb4aw/YUSXMhx43m\n6YE8rkBCuqKww2hIfR8V7UT6/ycEK2Sxv8qJ1wo6q1VPPUrZnwUU+q8vSxuW\nO1th9jIqNN6gU3iXr3QrFW9HMoK4toOdz0459Mx2Y3YI9gvVRTNracKDsR5g\nezIjKGLWfEU6iCZj2n42zEQSuTpFRTwUJPYGlxgQYSbohgM2fvvcPPNSKoDv\nXVBD\r\n=XhdS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZfnUUdWA2nCrc0KQdrDZ5APk0Ko/q+uWCkgytwf5ieAiEArTyMDz2/vmmFB8VttWpeJRRH91fo52cUA+KQxO+GAwk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605204536-6aeb6380.0_1605204642249_0.008346870435931741"},"_hasShrinkwrap":false},"2.29.1-next-1605207991-0bdb2a36.0":{"name":"@xdn/core","version":"2.29.1-next-1605207991-0bdb2a36.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605207991-0bdb2a36.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0V3aWd6V4eKlHqcVBFhiL8I0DUwCFKqlzIyOO85Dx+5izQp1ypWiVmLDd3Xnz+AcQG+mdyoVvyeiIKjPk4fl+A==","shasum":"84b6b2b1a95f7a2bf7a48713af1be1fc4ae2dc9f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605207991-0bdb2a36.0.tgz","fileCount":169,"unpackedSize":636652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrYhQCRA9TVsSAnZWagAAbP0QAJaAKvvBHCSHOoc1nD/r\n2V8t2YXAjmtF6RoQwZOpKz3QnVBchJ2J72sl3pKNsXe6VeE4ORVfhRs39mpF\nPg+P0Ae4xpEUPt8m33pX/V3ONOhoK0wv1eyj8EiFlmII1TfD7erSAPZr33ft\nvI4TipIgDOwc9EKSDU+AS7avjv1hQz9Av+bwIUsj9DQI59p+h4syRbOOx+53\n8v2Jr2ZBYLYkpl9u0ANblbOETKTkbNeIibpddhsr3qtaHPo6PVHNU2Zbg2Ra\nMpwH4q4xJF9VF495LgQSsWyGkFP5x6IW+TJlNzoXUZOMweF/0MdyUzU/R85Q\nbSXXzcTIoNWxdyOHUIL9B3vC4w620QN/KvasNVOXbLKUgGRlR48/Q/4tlioM\nclaHjIM3vXTZYRbt99lBJyGfcB211SQvh6Fxk4K7oeCokZtYH72F5StMotS3\n/zXYZ2JBGHPzCWhfq5WcuyZGcZ7I3uwHvOoIVIs0ts3hjrLyjfs4A1Ve1f8n\nbz8/7MA5teJ4TzeW5RaTbhnQNxhTVCi0/occuUv4wgf9i722CSTN8+WQIlAw\nkc1VFlBRmuatM6EJJtALrXqSDCRE1LFPZvMNh+F/iioIU2b4I6olbpOv7pC9\nYTOlVj1YldYxO6nwbVpi2oBXyP+l2uppQ2ixtzqKGZkjVKKX0MDOR5tm6UFc\nJa6V\r\n=FLAX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3SoaDrn0Kgj1O66RbdDQPC1YQ/ISYCAWIHmvol4FwKgIgOqi4GCoe+774p9bzzCXE13Jki7m56cJN6xw5+D9/Jy8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605207991-0bdb2a36.0_1605208143150_0.9398079822330183"},"_hasShrinkwrap":false},"2.29.1-next-1605210842-6aeb6380.0":{"name":"@xdn/core","version":"2.29.1-next-1605210842-6aeb6380.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605210842-6aeb6380.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jt5GZsjXhuzdue4w41xogAeoCRLU3rHuU20LrH1dawL4wuwrHH8jnu4k/SAwhzyobFl463aTGZV9axTdTx68aQ==","shasum":"23ce7dab05df8a87dac7f758063279c3d10322ff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605210842-6aeb6380.0.tgz","fileCount":169,"unpackedSize":638378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrZNiCRA9TVsSAnZWagAAkuYP/jSE3WYpgY9fyKnUFPn3\nL1DIBg1lvR6zRF+uQPdPGmfkVXQiZVJ6ZDZ8qffPjzb6WigGM11Ds2xX/aAn\nqBoStV5H4i0mAx0wBHC6Nnl79HzJhhZbnVltFwT2qs4uB+iS8P1Jc4t4dfyf\niG+viX8WNcxLZy8aUwKL6sPGNObbYbAPlmjhMb57t65T5peYoV6Krl6pRqSg\n+trtNPRbiKNCKqQl+DRRm7D8EPUGfgakMZGH5VGoySCGNTgrpXgCcLORZpAQ\nzTtMrgXxhd4mk6AoZwXwLguaB/yQvcLgImtWug7KqJ8AZo53iSUMMOyxXZ2n\nZAsPZVVIh5hf+KkESovpeaE59izqXB5bGNRTFsNCgrL46QUKQ1aRDmpNw0ts\ncNZYbXEeAEuk663v1SSq+WwuYm7oATHcB5Wj5b9gKtOdzf/CuqAGVLz/u37a\nk9h3y+ZSeY4GbnENN7ga7X3Umse48LJJecVcPQbVBYIDpeH8zkKmh7TZP2ka\n+Qo8AmUPdvVcURIZdmZRXeXXpzQnyTg0FAn1on6daxtWRZz+3RSeDtmJYBoK\njFr1bFm0EGDVle/bCL6VsD5nT1HuKOmv4gyKtyjmLxMtvB8aVw2OgV2/J1en\nZ8pGM2q0NSEdWKXXDw09XrrdRNrnksJAHrYXy08qXneSZckeij7rdwHGhVr9\nZsSU\r\n=eeDZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZiMVb1u6VoTOX0jPOqPHmgFUn3bjm5NNDFLpS7gtKJAIgWqOXSKAg/70rYZ8rvlUfal/A6oH3S1zyNZqQFkx7Hqs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605210842-6aeb6380.0_1605210978231_0.09179746983963488"},"_hasShrinkwrap":false},"2.29.1-next-1605211089-c44ee8a2.0":{"name":"@xdn/core","version":"2.29.1-next-1605211089-c44ee8a2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605211089-c44ee8a2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-WX6Gg8ZGVtH/BE+rvbRDXfyOlpN0zPiQ4t7S+/fvmlELFLOrVWoxGcCz/8iYnES1lCx2H8jts/xwizs85Yb1lQ==","shasum":"3cf0af020f326c79aee4e137b29cf4515125401c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605211089-c44ee8a2.0.tgz","fileCount":169,"unpackedSize":636652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrZRWCRA9TVsSAnZWagAA5k4P/1mVn+cgClmT+XCi+mdI\n1TB6gllSxRdqLcIBCIH5l4hgENbAL5bkbkvAd4nD7+aooM2g8rWXvhf36ZMK\nL8iVR+Y2M7UM9k7IP0hiNpqOw51VgmWF2wfSMyfczZQ3Dh6ZyI7r9QMAR6PG\nE0zRL4mD1LZbGgDGzLfcqbsYomwNGAXHP89AR558ng8KfKO8Jchmttoyd0Ha\nfkLR0qK1A/R8d3oSf5SSxw9jQFX1znh9837oN+Yi9B6OiWT6IUCeg/y629Y7\n/Sm6fkoGJpabuz4ggj1xjaRBWjAPB1dj285Wo3sl67gWzuUZBF/oaiDcUWDp\njkF+ve1+Bg+hF3/lw4EVIKAOOHOzZS7mGlXgo5yOgYPZyJ6fQO/ndsCX86bd\nHZN6bJ9xHuQVxq1oUw4zTiq/rJYNlDw9uSXgZJYD881eSDGZlvRnsuE3MrlH\nFYmN46wYj8GHwacYDThJYRYHlXEB6vNiSt/RGPDikLCwH2a48KbKH2QBARxa\nGOrrjtv5oXVDB82tRt/syONDhgLp94LPT5suRGfjx1A4IfkNUwbKORkFngbC\nTLShTCgLQ2VkcXNg2CbMeVTPzvFsIl5FubdfMNXPhFdWN7w/wOoCz15Rfewb\n3qCGUNh6xHkoZbsdx+UG0+jCqXi4vRjSr7x64r4krb5/3WiEworlI+OnDcgS\ne4AZ\r\n=eZJD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDD7cWvuC57RJfkzrUVgnX2lPStsZpmTDmIrMd1+xBfmAiAR2N3GgV8GCv+dmDgMDS7unlwc4muqhvfdI8sO/lqbdw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605211089-c44ee8a2.0_1605211221812_0.949432097448244"},"_hasShrinkwrap":false},"2.29.1-next-1605213064-d0f5ce4a.0":{"name":"@xdn/core","version":"2.29.1-next-1605213064-d0f5ce4a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605213064-d0f5ce4a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-eNT3xMt6KAV6EVNl9oKKXDfHOEQNyPs0vSbgz/mr1/dsCbToMwazxWh6Xw6lrPPBW/5Tl/wf4OuEOxXanJ0xtA==","shasum":"d56ed15e2eadcf25a6cd59bd2d4512cb77c757e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605213064-d0f5ce4a.0.tgz","fileCount":169,"unpackedSize":635397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrZwCCRA9TVsSAnZWagAAx8IQAJ57FPx+qCm84/zZNdeB\nZBJQfZonFt6Xyr83G0BNzJGQoC3zbc65IkLE0MsPeEHlM90lyM94T6gVd+jD\nBeyACU6v4z0HCKKKqCgHxwLc+ih65hUBQTcBsXucUzuIG9Kkekq49ygJSTTN\nd5rFqo7EqLCZ5YG19Xi4/6TDxZQCXTCc7WQmsl2tcEnXPXHT5VLVZI9VTvS7\ngVPz3lLjz7vOMO6XmYgOmQuK/4TZsqvs7x+jLhxvoJXBDxfD5sGh8GIzfZsC\nhHdrSgBZTKnJz+RN5t+S9epMtDJNjNHQtiM9U62W/LqzTQ/Xgo6Y51hGa0+r\nzVNHeTe7Vle3bqZnd4177IOUtanQHf7lpqoEzOvv7D9Cfhb7k9EH59/YuSTq\ndOL1TyneleZTq8SOCLByED8RnROhpmIpFidlfMXFLnGvg7vz5NYXHtnnaK9a\nL9UUz74y0tM7s67JuFVQ4s+LaAdlI/HquH4sYq55Ndi03SCYJa4+DJU25yeC\nNd7wuPUSmvyBAk6yTq0Ds94YdpWycfRENdlpu/td8jgdt1nAwapd7ixiVtBX\nz4UAQ9UVubuZ3wvWVKU8NSSrDYZtFNrLYr0Ku5al1/p7VCMnzY+pg1o/9ADr\nBMOhicNN7Ncfj6ZG9vgF5beXo9qdKyTR+EZvckE6kMMyUXGoa9lpKblVcfCi\nwN68\r\n=I1bG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzl+MseNv+fojk7zDKGNwyHbMan+XmWiE3V1mP9JfspAIhAM2hBsJjrY6/FGi0WAQ11sgFi9v1jUTItgQh8JjC6onh"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605213064-d0f5ce4a.0_1605213185550_0.41960358279018584"},"_hasShrinkwrap":false},"2.29.1-next-1605213089-7182131e.0":{"name":"@xdn/core","version":"2.29.1-next-1605213089-7182131e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605213089-7182131e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1kZpPb+u05Gugrax4UEi4CFNzrnNsuYcfeVazGLGzcEqpGJ6Z2BCohhWF2ipA3Xd+xxEx3Z83PsS0N6DUh4VQg==","shasum":"c5a47afdee8ffb5cb4c132cdc2a3dc00a0cd0df3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605213089-7182131e.0.tgz","fileCount":169,"unpackedSize":635397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrZwcCRA9TVsSAnZWagAACOwP+QA6sp2aEKi7p7O5NUHD\nGPcYOPS0ZMaF8m+rsg4256Zx4IDUtbcJcnL8GNf6aI68kRzlq6481/b1nXfv\ngPiMJV/AYQMzmDuGiBFVLIQ35SX3Ezn4wg+1A2Ey8DSrcmjyykY9ZlXO5dR6\n4tEw18LilLWm7aj5UtGWecrUpyUOBUZWUuNsvTFGQ746eKfMwoOSB9Tq72mw\noMcfsGer1IFWAPd47sfH3nUNQbb23EUuMf7pFBi2ptYDMOqlOUhjmpWEAkYp\nNXBVa6EWRae8ypd4ygaxejG5Bim6kdwJ3pr7fLJtKeyDitHt5OZdElWY7EH0\nrJhmTaoOFdM5hlJcX52cfBB2A2/P6N/uQIUEcpGO7J1mnFbezfOfEXLQZBEM\nOTu3xnZOlyZh4YsY5AbW7huSScmbwUFUX4eGhHeRZKB4qPnlG+YvHOh1amcl\nWtRzg9pujX9+EgcGB5wVfhBxmEtZXPS4rH6W9TLTz1Ly6BhMZusVNDZiDFN1\n1pmRyzEUDwQ0mXYze6LLvlm1HX1wVDAQMq4oTxUlM/39f12B1nLBo7Zq2COh\nPen/sZkbqHA0hUdjyZaPuq6byvBQUKgvz6BCvkdM0ghYtVuVx0Vu4Y5aaxoR\nNN/foV1JUpufngmMMPnjI2n6N5HfighcclVxyaHs8OeJLIpkKRdB5AcHF9Z5\n6aTZ\r\n=aFmO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHTHH0FzFQOl5Lz3CQI/IN/9IboO9rmFvlqtFrm/ue6FAiEAzrOHtWpIpnOYy2BMDW/fDUL/MihXZrP2hVZQwDkwUsA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605213089-7182131e.0_1605213211718_0.0065971019319439606"},"_hasShrinkwrap":false},"2.29.1-next-1605219941-fca701b6.0":{"name":"@xdn/core","version":"2.29.1-next-1605219941-fca701b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605219941-fca701b6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0RcdBdEzKjTKMmhdfv0UK5huaypYG+N6IYiyb8xADhztj7biSzakccbZ7gLWpRhWxAUe8yI8S7z9oja3FTn9rA==","shasum":"26e37ffe56c47f95520c0b45cc96d7acbdbbfa31","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605219941-fca701b6.0.tgz","fileCount":169,"unpackedSize":636652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrbbhCRA9TVsSAnZWagAAheAP/iYhgI1oT13T/YdVabK3\n00t+/8ipyL2W+MzmQo/Zwd98lBp9mFAYQgxFxZ1SWADeg/OQnmUEm4eqljYd\nntVbWSROXFwj4/Ol1Xtga6WdO9j24xb3ykjweLlB+ITyMWS1vypfA6R12hv2\nHCBCmWvPlRhBgOU36VcugbIPSmqt51oxpjQyw4fDvtxP9g8GweRlcJzmP2Cs\nzMEFk6bGppSkdEQcbQ1LNwt3NN04aScWyENfS2ukbU35918dc+bIlaPukFsp\nmyXfGn7KUS1IVqVKoN5a1P1f0Mx4YAm9vuJK97pXL3GecC38ZmPNeGNA+vvn\nAOve1Gj6fRJ7weDWhKfgeFFGvJbt25JRcVnDAAAtHF4rn4EZT3GN8WaBTzzm\nmdMxLIettIteEb+U5YUL5ssWqkbPIGWCONpAFpSn2VX8WP0BJIF923+9gWrH\nls4qiLkODyT851YFxsOBvNlx2uAjgjlCos14x5ivM5tyJ7c4M6wqXqa1BFbx\no+hkpecOcRpTtSfFapIHnvLb+BnVS345JWU1iBX+XMPDdHD6HDvdglYVBxA3\nL3Fo2I/O9nPKlV1c3lmAaA/bBTlyROWBXSRPNF5ZlzgsvlZdP5QpzcpieZ+b\nxWQoL/youlWjllwYLYBi8l+Q9x1SjHtVctQxPTBDaLUwaELboxOMPU8dGkz0\nRojO\r\n=A8Lk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlZfcx9Fj/a5GZX85+OSmBanHExTwGJ4Ohl8kBc/TyEQIhANo7VAV7GYCAKMFJa8siJeaL1Wn8vqkJ5TkljifOL9VL"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605219941-fca701b6.0_1605220064476_0.8011958729634232"},"_hasShrinkwrap":false},"2.29.1-next-1605220611-2da01368.0":{"name":"@xdn/core","version":"2.29.1-next-1605220611-2da01368.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605220611-2da01368.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5lz3mjzU/a1uHBjd1ZjV39LASEfYLnOC3S0jV+eXWEdXti2pHXG+XHAv2vcNSixXU3ZwP6LSH7gYN+1WZCuZnA==","shasum":"30e663ab5625949d0724a6e007c338f4608862fc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605220611-2da01368.0.tgz","fileCount":169,"unpackedSize":636652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrbmJCRA9TVsSAnZWagAA0pwP/2o4bjDy6DT2MbvyCKnT\nRdPH7rasB9Bu9brFhYcigHNZrcItAXTAA4+4fSWBrNd0AeyEfySi5Jls5D2W\nAIQ0RPh+d7AnEUhGnxdq5Wz4mfF+EE+iz8wdKLpVyQs6FwRMuoT2JnH7CP2X\n99BOb7O/vw8FQMfuq25LMqtKV+6+ETK5VlDWpKqsqSHriS5tugsR4QvYcTU7\nsiwuLTxyNDjEWXdXaNabfTgYr9dmXAsrpg//oAdYe37uwBx54G33BhwRXB4S\nq/lFHPnDtCH80vgmzDPtRvDJU0AcOUqBCreK0xF8imLw6pxkZEun2JZtH4gd\nUC/dwyNvzYsxM11AGuFnX+oqALG9HtywzhCaa7Hn36d3Tg6T2tzOklIUuVv6\n5gvX/tUpjXOYGbF9OwJjCqfqYrFgcEdCV3+BMgzWjO29SRLBlGVmy18kfZGW\nan2VlEPFKb9hfS/NyP+Pw0rbSuVEYPOfYM8DwQr7Q+r57BvlQuC3N2o3yYl8\noM3sk1Hbr68baXAjkjXBmUf0F4uM2W2uOl+HAhN6hWfdX57BK06XUYh5yKwe\naopfG8EuD+15wbT6Bwhgm+C8WuQlI3zgZaeyycLSa1U3i36ZmUtIEto/lCKy\nyp/trNMgOJ+orm7dutVYdchHUJ+ChApSPtujqbhD5RG09gBBCPV+wS15TSje\nzs9j\r\n=tclQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF9Dt/iS7GsWlluNjT6XMxoatlWbScKcVnwdK6ESYXrHAiEA4n/2iN/16akWDu5hdlv1YvTS33Bhvbdb0EYWQ5spRnE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605220611-2da01368.0_1605220744232_0.07610992671289174"},"_hasShrinkwrap":false},"2.29.1-next-1605231317-ddd37edc.0":{"name":"@xdn/core","version":"2.29.1-next-1605231317-ddd37edc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605231317-ddd37edc.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Q/WyKoCi8EH5BufEmX4PEU+/ihf/8dVzEYyEZmG5Wwjk+kBSsLd3jesIiVKGNRLt78Es3neFyPmKADKG2alLPw==","shasum":"9133fe8afe44b3360522f15105eac226199a6111","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605231317-ddd37edc.0.tgz","fileCount":169,"unpackedSize":639089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfreNRCRA9TVsSAnZWagAAu10P/3eWrG4g9zG/Io08VgGC\ne6N/er6CDkEZbBzo2G1TaEiCLOlHvURb3OY7ze6ooRYGrWFaK+PIepN1anwE\n7u9ylSOjv+c4qqTc6sH3zBxVE9VxI3bV1xeWihujaDHTvh0jAW/iEZ3qzB4b\nIAh0g/0CRbNFKSWbK97W4FT3GuVD/zPdDc3Lw2rdh/B7F4YTTpbBeFO1d2fC\nQHeMw7VZ5NxRdomQCMmQ37y+XCJCSRb5PNxrRUlbGtFlQ2SRcgNco0Jz7R9i\n8/JoeFM1yuZN1hRn25i9A5HnghNShz5jTzCn+OSkgswjCEuhpnwy7SGoVGoq\n4yTYjGiNvt2pXrkOx3Pv4YZUSz//YMB0Ax2RcpLHq/vPWvsaIC7a7OxYcTBV\n+2lcyL7sfNlVOBoql9SfGIMb7uQF1egvmqOQmwFr5l+XAuXqqenmm9xPZ6Mj\nIbDoJUgzQeIzVWL40rQFvJGqr8wrH3wgKnXw6a07BPCoBd2SJ4TXRNv0R/0W\n3cBCqasYS9WCAXHn2BEnIk1Y6Hq7AfsG4OpqGQuhjQcV9QGUfQ9dVS6BVUM8\nQS0C9l3LcXrMbr2tculr82PN9lcnAZV0MwBg4kvgjqtZMMS/ehXH1LE+c8I4\nkX1Z/pAM5uevykoAk/1KqUVsODmf2tXKhGsSROX1skvhF+a4PssFyDowkXhh\n2lr1\r\n=n4hR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGr95nL1SCMB1DdM9lsw6Pr0gVDppf4niPz0qqKWWQd2AiAEaZyuYhTgiWf7ulcyNWH6Q3V1caHtlvo5ygZ3Sc3VVw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605231317-ddd37edc.0_1605231441011_0.7161556113597378"},"_hasShrinkwrap":false},"2.29.1-next-1605232431-5422a9ba.0":{"name":"@xdn/core","version":"2.29.1-next-1605232431-5422a9ba.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605232431-5422a9ba.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UqKz05VuqJyaX/L7PdvZvc494fDeiWJWukGcE4W9SkLnRL5dVbHzrIOCrIF9K7YmR4IZQRktjBMI6BTJfwZJiw==","shasum":"96cb304a985acb236716c1f00f0c8d3f6ec0d716","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605232431-5422a9ba.0.tgz","fileCount":169,"unpackedSize":639089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfreenCRA9TVsSAnZWagAAmJ8P/2nFvr3Fpf1xI9PjXcp+\nIh9SgwnDp2tYx6xPH0RdhdIlhzzQAW9FYb0JHQri72OEmZ1LAIlrMB0J2ZIz\n8LmwAC5tKj+4okgGBBHZhIonI7Fbnt+3NXoF9KrtYD/8rm5qBFDdiedI3nAG\naHQd+I/gMRWTErFihq4suN0LpLh30Xz6iq26Z98pL/ECUJpWULrNFOU2RzB7\nD8kE8ERLgqkRMQ02eJVqTdx4VaPjhVppU+qgFvSoJTz8ZW8Wx5QFPKMemq2q\nzxigtWXWUnzmI2i7oDqiFIk6ERbR1xAKARQmTXdQgfkaS3yhFZAScayFUQhX\neEDMKnu7uRnfc3vMaMj+w91UtHQ+vEppX77z1FZQ6o26qXDnIbGjZGi57g7f\nJGhFntQIInnztAAyQlv61kGKaUAV4CnI3OLRQ7+qJbj9GZplwrblwEnmVgjx\ndLV0NQLebDPgz17p86Wi85ohN0ItAFQsyoKBO22LSY0uCh6ocnPWnwYM3Pmv\n/ab+3+OStFg9xtQbo3ZF3Ft3AJiBlIDEPcrwPFYZf63fUnXBV+Rcg52EhQtL\n176HpTve7f/4IBJevdMkjSDH7GOAHl+xYH11CV4yuisIwHj2B47zhI92+C6L\np5SGfYsgHIiX0MPCRhBvGxwBqUfUXfJy0r0xLPjd9vEPcQYwWFAUwirxLReJ\nMbu0\r\n=Ehmf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHfc9TlA0X1+qM6RHJLcR3oWDg3K5dNUm73hC7DtfTtsAiEAipTvi0ejGF5q1DLeGnd/NytAE2qfwiCaLC8wFr189pE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605232431-5422a9ba.0_1605232550642_0.5352770086383791"},"_hasShrinkwrap":false},"2.29.1-next-1605233226-21cc1f35.0":{"name":"@xdn/core","version":"2.29.1-next-1605233226-21cc1f35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605233226-21cc1f35.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xRWSt8UlPlYKhLHT7zUnOxvpMALYdfjae2qHz5iJJ8geMMBxLCQy8RFmZUM+PtaH1LxLIj2cg6NsUyOhJPCrcQ==","shasum":"dc1b1ca238308fba722d9f2aa9f19bba661dca13","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605233226-21cc1f35.0.tgz","fileCount":169,"unpackedSize":639089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrerGCRA9TVsSAnZWagAAhzkP/An6sPbIzQqk3fhkomk2\nFAK7Be8YNvJG4ipTRo5dlxnIpBM0O+YACrnqqR6qSoV0Z/nl6w77yJi3HM/o\nqI7AVhg6pQqis5M/UjDFJGcVH4OKwj5rLU9ckgQNFebLr6dtI5UgiywdQl3C\nbeZ+98ypbwXv9lX+MkeGouvCQ0nJA4676eieT3MSk9Y1tdXgjGYXUUQF5VU4\nCo04QDkaPGWeBi7x+gogbw/1V3JkR9oOV4GPzrqayibkis3ffk+Z8e2h9xB9\nGZ30LT4OtHN+kVQcMCKuMcIJdHmbQU+EkVNiBh3xRRSX1FOgvIrJiSIgj96m\nQy93DXdIPpq9O+YsHpQKfxKEpWDI6RXaZoxE+EU/e7sSyz1VFWMPHb9QzOwP\nuKLGyHDlCMFO38YMOYSHjFgFQnSE4rLuJwVAAWXECWHGKo47+zy4pVZf56P3\nthGN8eRn9RI46DUbzVm6s8f5NJghP5vDhHl7K9LQOPJdO6BNjrvw+ehtlriM\nwDIxil3+PImmWnaz9Beq1qnAZzx/BDO9Xssgb2lh52qurE/zCbjJyxpc2KGk\npTK1tAyf7PSeT/H9Hzo6SE5vwRzk+ADQYHaFhYTTjMYYYH1+LmnEojHlVlJo\n3qXpNJCQpa5AycvNRk19zJhMdnMhbs9Q6faSVdtpyf1O3efR1Na/JpDjhFnE\n787w\r\n=C6qg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9WDbPhAohK5pgvQj4Q+4KjVm2dXYI+pFEITFd/AV7FAIgV2Gm+jdrYaDs6jZKidnxNmSwc1XIvEl7bes+seRrX7s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605233226-21cc1f35.0_1605233350164_0.08747678788150104"},"_hasShrinkwrap":false},"2.29.1-next-1605267316-97bdd9ec.0":{"name":"@xdn/core","version":"2.29.1-next-1605267316-97bdd9ec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605267316-97bdd9ec.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OHleW79HNvsRaGJbRC54x4rE72COvMyFWZIrCaHA4fhzVJi1LxwSfjsic68klTs3mq+n5IYF0RXunJXbO/yOZQ==","shasum":"e10701e625ee3b1d74bad221782d5fac3239fe22","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605267316-97bdd9ec.0.tgz","fileCount":169,"unpackedSize":635397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrm/kCRA9TVsSAnZWagAAvmUP/1Ww3CTypAAdQ72v5lpT\nNdL81HpDwTqa1mh6NeLlHT7r9fAU1hYVsvA4Ux+zQ05jBPPRGFmjZv7y9oz2\nnmPECL7PbUnOp4UY238z0XqpADzMYvqpb1XSyEvW1uZhS5eBAqFGtiY/mh21\nrj9XfxBNZcCl0haXIJHrnsVAUw6WNgjEw6qTRKnhvgNacAqzNRsgq0UpSOvT\ntn1bgD0ShlfXQHM6wf7iGmQpe/kw6M7bfYfBn4j0gq/cWJh+H9P2u3XgpCYr\nRuKP+TX6n2HCVXhLsvyoY4LS6xpVEiUAEZrYS3fHmPusx8f/WHeZo3eOlL6Y\n3N8/WgzjWKGD2S+KvXOEhq1+1ufjz4DjU8gsXwqEa2HtKc0sZm19B9RrHFey\nlyceyXSPGfwx5DUc65xuH98mTDh5Fs93isyhRF7WcerAMEtc0aOlTZM/f48N\nCm3mBi47YaCTCS/TdzZzC6P7xRhEC5QhueKw8oGlGTVbsGpq6Yx0EfaES+Lx\nFb8hqIJpTK3FzMqEz29JYQ4EzsKJ4u//eVS6Gj3hoO5BfUv6/61Hu2oIXCeC\nPUfXjtf3Ew74VXSmCzDQ/VDZvDW77eoifcZSe6+T485KL1/RmH8n5z4jho1P\nkd3PuYu3TwyfDEqrYn8Dzd1tOz4EOpwAFXQ1Fq3DlVFjcp1E95Wr0CgyKm4G\npimm\r\n=E+Qb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFhA3mHQ+IizbCd58m6usgmqVk0aDpqxmrC0/esUbTFgAiBOjwA1NnwF7/BDFWc6rl17kHufrejZbJjQz41vDeapOw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605267316-97bdd9ec.0_1605267428265_0.5699168465396522"},"_hasShrinkwrap":false},"2.29.1-next-1605267337-97bdd9ec.0":{"name":"@xdn/core","version":"2.29.1-next-1605267337-97bdd9ec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605267337-97bdd9ec.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nrEvbPuIvojWXsWcFE3dMNhLJxZsHKQs96vq9MhqjkU2hHzuxF03MIhTXPsPBzs5gZZbej+5nJuvhADtBB9X3g==","shasum":"a9dead3733594baa1ab74be41099d9338f0eb3e7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605267337-97bdd9ec.0.tgz","fileCount":169,"unpackedSize":635397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrm/4CRA9TVsSAnZWagAAv4kP/1auvT/VYSeUhocCSpUs\nBNhcHvAl9vh47XH+Opzc0DApCrpqGL7tA8teZwIxKtq7sW9G/kMpMOyJvzPN\nPZCUbp/HdLZFp82tt0suLlsLYrq3NjZZxl+AZ8EOZrdtf6X0GIjexGZlgQy2\nh/GYSgoyyqeWGpvJ+B+Nv4vnd+XsoH2rzXpmy2f5PE3jt3gCPBwXxlFpqW8e\noQnonl40YEW5ehowL3mVh1ORB2MEfI+zU6446nXZ/WeXp9E8WISGBkMAAswI\nHRtReuYxxO3fPcvQbjNqozak+/f4Jv9TgXOghs3vREWwaVdGzd3mjha7Hc0d\ndIv3i21mAMSFifF41uG7JaU4O30ydSRZ5fJbKNeiMHksYqaTSeF5AMFvrN2e\nP/o/qvkX4jvX6Ok4mqfsdwJDbuYB3Pu3JjPCAU5oe5bznjHtKrZkUP4KHIru\nDmYAHBmoDuHft6QAqdrG4SGwLrsJy+5MtimfdRcyNpHefOV2f8WyE7l0q5EK\nMWsDBi3yHXDkjVjc5sLIR32coS+l6UoylZWRG3nEfDlm8IaOZSdwUe7JGHDq\ne2mZzCDudAnRlGJAe+9eS+U63vYIef5Lpgz0cYc/bURofJP0trcXnyoLt/D4\nEDm5b1w07J+IMGmOJxZ9agTtJIY/3FzltChh20RBoeJHl9tbfB0z5ZLDDpIW\nY0EA\r\n=oNbc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEwaRcUkdYy1I6RBT7blS7PkDmlaHwXcjyJUxFgi+2zYAiEAv+krDlFhMPWFb6WDTf2556LfHmdssdoTMY+5vwWy9rA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605267337-97bdd9ec.0_1605267447978_0.21634531257033762"},"_hasShrinkwrap":false},"2.29.1-next-1605270854-04ff8082.0":{"name":"@xdn/core","version":"2.29.1-next-1605270854-04ff8082.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605270854-04ff8082.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0+QZowubQmatoXku7GDEWgQm8CVSBJ3Q2nU1pTUf9uEHM5NVBwbeWN5LYcgbWg/RygzyflwLY3aiRY/lk9LFIQ==","shasum":"b017621f21fabaf6a7d663298b926b607311adf3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605270854-04ff8082.0.tgz","fileCount":169,"unpackedSize":639089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrn3FCRA9TVsSAnZWagAA8vgP/394FQrgExHXPZJYJwvn\nKRVjxlENO1qcvrelmkbAsL+5mMZU8YymuwqWvuwgXbRLYXARG3rDIOzuyZjK\nfz/t8omiwH11GiOZrWVW5a8DSobCkuf0LDIgvneRYZtiZHTGTlVGLPc8CLOe\nyg6+hWi2sFqUXIETvxQqXksXjptcjFupKt8AiVlf+68wSJ4JCTwavUEpkeDi\n4hcGe4/B7k1Kk26hYcpxCC0xVyxuD/isfCMqkPAA1EZN8Tm94leH3DBcmqBt\nNybYjNbZmnKa9PuT6HvdGRXbgYS2M3WnCV/qgslmsusBRSbHM70LVTPDACH3\nH80LGnNFDSB8nQKATAX4h3y9EHJC9LYCBeDXdy+RzMGKBk5Hqw8jsru8BzNL\nzzRgzPIfTODKV7cp6xj71YuoJLABIOdJ/DRvMTkm+Z3Xf/Zl7ln4P0cABSxn\n2X5k5n3GKW0y5ZfPu2mhgdVIQG2JO64OFvVdtjvyfpl6GYV9cJhjrUpJtlGn\nKtKYzTBNmOZp0WGDTxaFqtMpeouBwoQM1BmYbpEaYliKAhw7bEzqlx9Puc4+\n8PCiGH86tx5EbNUSRJjcXHTgkewX4o07f9WP0JGfsE59cU2VT33/osj7esDt\nNAICvYEAHxtY8i3kZxdU3Jbhin+feCb+Ecw9o64FqkkpOOeGUK8sevtj65HT\n98wm\r\n=hCa6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgOzT1ZyxA1f1aXdwfVlb8JFtpUN1UnVi66gOzFUJKewIgYmB/ACbKpWspm81pTtEJl1KeH+A9EzrnODz6JUvX6tc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605270854-04ff8082.0_1605270980441_0.6774343723579501"},"_hasShrinkwrap":false},"2.29.1-next-1605271306-f8207329.0":{"name":"@xdn/core","version":"2.29.1-next-1605271306-f8207329.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605271306-f8207329.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9FGcnaZza6LJ6U8pFuXbb6GZZ+SSwUGiseLBBrIC5FNxW36SStfHj6d10ctUIVQYipShbf1yegVUKk1md0ffOw==","shasum":"64ca280531fc776fdcbe0c82b7401de4082301e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605271306-f8207329.0.tgz","fileCount":169,"unpackedSize":639089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrn9yCRA9TVsSAnZWagAAH3IP/iDHk8GOmaepJHKCBu52\n4GlbQgx5F0JuBsab5R6buCYqZKkfCMY77YpIoKn8Fj9rAGiU7QXKAhbDNbBZ\n2pM5Kk8WOf00UMGspLgJn2XJWiCONlJ6fXcuRNBwZwznNmjwezqne9qTB6EQ\nlKWt2mr7w/Tsy578FsqI7apgtVOEKzcgEjoMJyuwx6hgz5kJmhKHkKJ8s2/b\n3ne7YESbORBZ8SmLu2chEC/yWlNaH7XNgdR3kFFRx+TWppUqJORdncuWPF9R\nG0OENKC9yDekKZQU57Wa0Bs1g9eAI8hqTRkHJMskS7wTSscL/0+h2MI66/wV\nfMu6j6JnVA6ujRwcoAiL7eSj0yglcfRxbNjeVAvbBzuJwYF2py92150WO0Bx\n4uvYHbYQDJoMKdXYInUiaYXQ5jUyZ4jZZ9U+lr3/rkp9LsINwURwgs6zjtKK\nsXxMdPFsdlsHlBQSWt40lz8jKDFvpzHNIlGvL8SS1P2VfCW3d8SyNmqIs4Ro\nAy7rLf3gGRO6iaTVgaSEnd4h1mhU+xjx4FnoA0oUHX4H6eywZWSR4H+iusED\nTVvrWHM9WnmIGkZqJhwyrfo1wDx0iW40GYWSPR/9USTn/TByeIJqgM+9AvUN\nH8meRO1BFlWZaRKY6Yw6Va1X1IYkMQgHQo0l+SFxDviXF4h4XsMsWf2UGk2o\no8ZN\r\n=MkZn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAwPQc6PogJ1XGOJF9kDMRmDjTi4fDa2YXFXpveZAiWWAiAPBBSksk2PE5is9rNbSr2SNGlwuC1c9PVL6qgyfjM2Jg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605271306-f8207329.0_1605271409714_0.2803819654216162"},"_hasShrinkwrap":false},"2.29.1-next-1605271871-51a83a20.0":{"name":"@xdn/core","version":"2.29.1-next-1605271871-51a83a20.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605271871-51a83a20.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ve7inJC0UJfykwMjwDE2ZKvzgqsq1x3jbcfKE4LRhYX41VC2scI/Kv8F3fW9HewEnVJExrmhrkgbj6LW9jVJOQ==","shasum":"4578ce6c59280bcce4e19a25c651da22cd8fac33","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605271871-51a83a20.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfroGtCRA9TVsSAnZWagAAmHwQAI/CMHlGGzJl3KjAVNSN\nECeN8ClldInJWFhU5HQi1cqxflvJvHkfNYV4Or+mXqo7f9cn95fb0WXCQdVA\nFR1SNKCmfQh9lXSAeSej+YP009D3lbOkC3SOuFC5Ivd3w6edMKCXpaA9kLlv\nxE5J3JkOQv4KXz0Ttyhnm1ecglqFReMVBSnAFOxLMGGevBtcImQR5w+w1icx\nzjqHJH9y8YcpAxqy1BW/z5K8SsYI9ZkOErdfmcKVcjh2YoF09CoNLxuwyCxR\nBXj+fcqEVuPIk3KO3HdletOxAfK0ynP9qg7dJy3Wt3JNrAFOzGj8HZNdJiHr\nvZsigdPfmX5ltjwtuIionl5d2klJtabzzP0nqKrDTQJccFfRPbRubvaZjepK\nZSfSNSVWAeONZUrgM/XTWWUoU93QnG3UKOHcsnK9UI8bpUapD37aghx0yfrq\nPX16TDn6x18aM242dBcWrKkclEFulDV9gLezuXTyezSKYz6l2iw3Dt9qxPyo\nQbnxAs/vdDU+ATVa1ikSqHqGDMBDkePhKTqyZa2Rp5Y2W41Hc9FpDcfJClEc\nYz69jBG/frSkODXKPo3GWQtBgyuQKoOBppD1+WvgWmCHsSKlYTcoDeprpkFn\nHWloNkXWJvJANXyMiPIqTcAv/KIMTh8OmchrgRmlaO3/dhoSJnTjOL410LBu\nG9YW\r\n=kl19\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1qX2L+CmC+CiiVaN34FQuhi/8EXbNrbajhZFOGzReegIgJTx2DuKVzwXmPSoAfmRHMMhBOz65A5c7hwiIAxOJ2Ok="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605271871-51a83a20.0_1605271980977_0.7311001003285154"},"_hasShrinkwrap":false},"2.29.1-next-1605271896-d38f9eff.0":{"name":"@xdn/core","version":"2.29.1-next-1605271896-d38f9eff.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605271896-d38f9eff.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JQ4/hp5Ay+zeKHOO7eyH/bCyEigIrj+TN1oJQKCUVkpHVX2D64UsWXEOWR+FearN3ieOchTrY7lIDJLZX2Cxyw==","shasum":"b20d242e073e7e54c62c6e8b03761f69816e6973","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605271896-d38f9eff.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfroHOCRA9TVsSAnZWagAAUfcQAIc3mqTWCIMH8rXb9Y4P\nTOqAemaFegUq6TX6G/4Ot1Z+0nfy2Nme3nKMBCpXvf7//8pjHutgMH+Kijf7\nDwGY6h2vaY6CEm6j00SJgcC+KfWVOCKUqqPod13yz/iD8FbYcI0abBLXAiVP\nb/NBiAS3yL8v4k0F7OgItagG0aPtMnHDXFcdAGPle+RUz288bikg5RPoSqxB\nLmAC5f+4+1iWWG4opjI28f7tlYZait2fZX3lZAkNMGrK3reqLldnMjmLu4PL\n9GKKGCfm1XJBXTXoBeoasQKvnIaqwQ/jydIWJHrkyCGT7RfsdcD/gUulzl9J\nmQb++kq6XZ/lAKo8GM1X/n4eAipjRBBHaeDDYyJ4Dbpdjqf+odPR1T6ka+FR\nyd7jYIY9pJAOTq2F8DJxMhF+t1+XqQxv3StsAj1ktRyV+tJ1saqUAzHExoIZ\nPuzeZIbYeU+KjRLaiNCi4knwlI4frZtn1C5tFlFcRw1mCRWwZR5uc6y02qxq\nZxgsJtCzdfU4l0D+MOOjX8TA3g1taA05a5t0JlG6NQ9snHGthGHvEqBZQ/Wz\nCmoRtzsDLsE52kDhAiOapf6/zJqGfb8rfXeFOwLjPVr3rsRwq/muIOwptWda\n1rxU4uqxKawXrrZbF1NJdCBOFsPVeWMJ4ofcqHiPamQfcFDL6iTYVNM6/R1G\nxM3m\r\n=DrVm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGuJk8bKey5T8w20hnJeoUAWKO69q/AzayZn2WQZwKwFAiBTT4LXNMRlHS49Udc0RoOYF/gFIJVuRKyVkfx8m9w/MA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605271896-d38f9eff.0_1605272013587_0.22716707621896304"},"_hasShrinkwrap":false},"2.29.1-next-1605277241-6b12751f.0":{"name":"@xdn/core","version":"2.29.1-next-1605277241-6b12751f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605277241-6b12751f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zziagD6lYDddmRpDVrOsKf0O4EROVbxuE1Rzq8n9HQLwG6e79oIaZeSVVFYsuH/8sIb4kq9ox0xi9OTvUnXXpw==","shasum":"06e88341a587b54d0fb586e8d8effb161521d4a9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605277241-6b12751f.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrpamCRA9TVsSAnZWagAA+V4P/Rq9CQK4WaSyMs5Q375c\nNhiUOY2R1eKJCk4jXB0dMUliOb5+8i70gBoCI4r2T7yH4BNZUlkQbEtX0uxh\nl22Tp1NdaPvCnWPNOjBW/pP9CVdLgScCK600ATRjWuHkLIiJC6j48V+ouCHn\ngmfedr0WDiATOsESc+Qh/ptfke0zTLqIORwXIcAdjPzbRShbDtBbyZP2ozwa\naE9hEl6LMx8pzWRswipYgIwlvDJ2qwr8rLGBo3qLre7xXbJq4XLA1ZN5d6Tx\ne3iwBy1Fs+zGljLQYuy8Sk6+233ZR2BTqA7CrorMYaJGqhLRdg1equHKbY4b\nwaelSHeo0ICL9fEduv8UPKxJcfkDHpkhZcQNIzweQCGPzTkj8HTCcu3wxEoQ\nLFF0mrJoT/H3fE1MHRPnmN8aeKLpSkelhjImyYIw8uP4lL3/alyhgrHEsbKP\nyX1hXcsJR6Y1oKJfg1PMP4Wtm5UuwYX5SK7aOLv+zrXF6zS7cpH/T3UvVBPj\ns0KDqIrDtIegkRqOEhzncYfblKtsYFORvmTR6PsZyO+AS3AJtYvgfwG/9Vn6\ngfUS6o1WUFrmeR6OMAn32D86nm0RQSl1/LmTFbTunr8lpSoZfqbwje1qtVQ2\nAXreSpA4R/QZLkj6KnK1P5nsI5OcCiCPGJASQz3p8/MnHiOoTgb2Rp6gCI8l\nb0qu\r\n=EQmq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIECF6fNdiOf3par1wuO3kboEPSyKkk6bhyD0IwP20IhNAiEA0KCzNgn3fr9GLeCqZso6rdSVq1oVR5zHvGNsRvEn7X0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605277241-6b12751f.0_1605277349692_0.8456634179136682"},"_hasShrinkwrap":false},"2.29.1-next-1605277396-19922c4d.0":{"name":"@xdn/core","version":"2.29.1-next-1605277396-19922c4d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605277396-19922c4d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RaKxw+z+nPHFVfuFV//3oiXks8Np31dyR/ilSBpOnwnnQ9PvmzPIBTmd4bKWqJs6mKPU3MjSuYcCqnU3fRf59Q==","shasum":"81c3be3fe1fe1eadef21c9d280e1aec85aee102f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605277396-19922c4d.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrpdUCRA9TVsSAnZWagAALMYP/32uEXY4RUEE8Apyovrr\nsqFaF0n3xHWr96UQbIL4NJtL74LerxRRWWCKSx7EazzO7DX3EDNL20dPT0JU\nJXH0+PMT34rXpdbp/+nocQ/3Xb5Lnol9DkGj5iA7PDsiLo09Nm3VlMLrh6aW\nnEmoqAEpnIM4Ke1HEchxYE0s+4DY7hho6W72h/+YHxRxS6G4PZDBKUiANmOr\n72HogR2NoNVybYhdCihR/MtsKVaCkPMLXTv1Te/iWMcKG7WSB5YtPHyxzFwF\nZ2EjdrRRlwbUT+mhILdsVWnmSDFh2ltJQ7W/r8d+4UYqkrsl9+c2y6gh/gRy\nBk22KK/SLHKaIfp0dl3DKJ8i16i2qln/FizIulT1JDC8nzm9/r5eKGV0R6rx\nw3XXBQpTONmb95i1puMKx6sxtmY7SDhxQajqWmrpWMCGIuUinOP3P2NuzApK\nKlUWm9Z7lhkzYjSTa4/m5GBFH2pR6vveEfYL3VZ4jjjtDG5e1XQmhhlDDgAC\nE/73zNgcmMoxxvSJJF95idCnESYDb5X7BdEBlM8TzNNNEKwHR4JDtKl1OyUR\nv1Kj63Z45w82FtXRyRYWSOrU6oJ9TtqnKpJ3RPmuXHZVm2nd3qF4xL6YFN40\nr+RDmNg0BE+dHvmjZYbj4kzeeK86mMIBH3sYoo2xAoELMuUBzflAyy7s4kko\nMdEI\r\n=FAFF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCf24R1pwC1Bqz3EFwUWzIht1Zp/ZVB2MUuZ3rcu9GrYAIgDHnPZZlU37bvqMFsel8pbf64BTmhXkK4ejuMrVnzmtw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605277396-19922c4d.0_1605277523660_0.9391023904449707"},"_hasShrinkwrap":false},"2.29.1-next-1605277718-8e877540.0":{"name":"@xdn/core","version":"2.29.1-next-1605277718-8e877540.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605277718-8e877540.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-m/nBcuE0EkaOycNaSVCJC/UweO1MjJUwhEzXE2+Na05StNx86bp0NMzXCergYVpU2pH3z+BUPcwXZTlxTzufZg==","shasum":"581c749cc01709f8aa54712f7dee92f62c72d2ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605277718-8e877540.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrpiCCRA9TVsSAnZWagAAOm4P/1/PZ+FaEfpQSCZIk2NX\nQO5r0J4cHCx0qhEhvFCiwbdxy5EsfQRncKutqQGEV8MNV0MgnNnjtKEiqa+3\nakIaE5ugodPobeQqTepPmRy8RppyCAoYqOBdQ1mfaIVJNRzkwckhtaA/I3qy\nuB7+0/JVG9Qsl0LPFDz5OdcUy+hCrLWoyPcWLcJe4fhVWPfo82HPEHmX4odj\nVlhiA/lJQS/PXR5YGMwDXFoCUW8ONr958ttw9uxjvqDk/VBZ6/omjMYT16dV\ncUsrla9yORSKEquSZjGBfPUe+Ap88WCJsb0zEH00F1AUZpwKOaamkfFQB7rl\ntdYqCmAxRFu5CT57cC2gpjuPxFEmKMlukaxtuNJerZf/p70cTBzuVbDninW7\nxqmifN8/E4fXBjwMFSEj/A0QNK610CmWAuGCenLg6llT/s07en1jjJXVCghn\nHN3c0j6fGk7wZ4bC/9EKuJx5BZuwT8cypEwOfoM+pPJQ1AJIzie9aXEGK3ut\n1Aj21BOlRwVapflcpoUB+O8EFic5u7qWDtmD/qc535Qg9K9trBbvZk4cThi8\nHvBNgubQEge6vawhhOaqf6ZKtJUwPtrigV1KsDXareQLPmVoGR/Ud+AQ/2tF\n3HgR+M1BmFRJDlJVFja33mDPAxuO1PSThTIkHXKjj+OKtsFO7XBulGXx5bf6\nBFj+\r\n=pCYO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAg6KkwSnlddJJIsHrHzgWGrHRtf3aYnEuAJ1+65npi4AiAQkf1Lcu83S+RveNrWooKyZIyC4HjcD183vsvG7ddf/Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605277718-8e877540.0_1605277825818_0.8354448368252454"},"_hasShrinkwrap":false},"2.29.1-next-1605279440-c2386709.0":{"name":"@xdn/core","version":"2.29.1-next-1605279440-c2386709.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605279440-c2386709.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Gls7pkBX6hfz+Lss9BQw0lnqYxarDIMaxGVT74eheeUK/Y1dpcEO9/u3rMxOXWCC/BwReMLDpQ5vlpQPIycF8A==","shasum":"0947abe2852a0b30be3455952c40a800ead95c38","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605279440-c2386709.0.tgz","fileCount":169,"unpackedSize":639639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrp9DCRA9TVsSAnZWagAA0o4P/RbWdnqTofkQpkx0AH2R\n8ClE9xvr6qacXo5lp1SfL8Hmdvb0YBfSfBUVugCl95oK+Du5tkeNfyLawrTi\nGvYupma/B3xSz0g63MlCKUebaoD/+LiFdY1IIhi5H646Xc6aq00Z8tHhQsIa\nhbQa1/nhvYUYqtCx8V1Ibda73TcV7Rr4BBbRWOPtflJUhPDCfTG3Yqm6LEtK\n8kg7YICY2n1jP0siQ5Xm36BWxS46iIEfxtwmUBS4LFYqXn4sH48zx6DILSB6\nxLHmVf0JWTbKwFR3TKNMHM301TpfozQIZI5XUSjOAl//60brw4TjNbKzTSgb\nu4YxNN3gjvW0JX6vDSJ/uC/AWTd7J2wjm4mzUkwdNC16LVXNh/6A9Cmm4UQX\nwhepcKWjvnFCqu4geJBObVEb+5hL59CS3A0ICGzoU1iEWNACzH8sA72yVWaf\nmndpZqWQx0de1YbA2X9oP0xYX1eOv2kDo6L8mIhud9ivpBvtA7JMEbxu6yFp\nKSpuF6fvM1eSyb6T7s9bnR225DBUTnhJgYtrkRj2EAdy3+RtBCoDe7VvcX4w\nr7NBwdh+wmi8k+4oeocwPfLwFCdEi335CsXtSdsRzJojq1uT+E4Shq5iwGDn\nDb9bK69N2nMCirhPipCpK8CukrAGnnVIzyyStJ4vevJgOEq5vX1fyqWuNeQ0\nnQ4K\r\n=xK3v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGV+uMpgyIylkTojWD1gLPh8jiL4DW34jeF1YlHp0DiOAiEApZO9zKZBbdzbWB1XBKKwSb1PepVWE3my3n7eX2ditm4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605279440-c2386709.0_1605279554598_0.01848203582942487"},"_hasShrinkwrap":false},"2.29.1-next-1605284689-cba07659.0":{"name":"@xdn/core","version":"2.29.1-next-1605284689-cba07659.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605284689-cba07659.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Gt+2wxEd1ps4ejgbdB9reDX9JNjIKK9ItAnLiv1vzyBOTf0n3YgMu0QIQclWkMACIncpOQv/IY4iOwI5eTeiXQ==","shasum":"9ba9542bc30dd9e422ea74ac9059f6d1b8cbb269","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605284689-cba07659.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrrPCCRA9TVsSAnZWagAAR68P/1+IxXK/oMkG2O/ZeQ8F\nQD3OQCV3l/aLg0jthRuBA4aOSn2lBRPVgjdC17SxqjmN887BbhljzglHoF8g\nsMZROvzmHG51D+U2d4ft31NgN3kWphldI+m//aZhwKWGSDpzoh3CZNkD0fUh\ngW9bBja8uV8Oi8dcMDHbSGl57+IO0hRvJTNBpk7Nug0cWZgrye9Fgukl+dZQ\nXaj00KL8B8Xko8SnwzIRjsHqebDewWy/LOJNV0KNUNCX0SiRCD8Nlx8zkTf6\nvRVl+QEJXA+AaZryCpzvaXky8qiV6gZqvTCn1Jx7pcwBL84sT9JBtneBZavg\niUit2SM7mecoTt4zHv2nMVKJOyACcAOD9O3ZGkQVh6gxtednMXF1mC+h6cJ8\nn4Z+CAOhGZJWISst87qpy8F62jELOw4rcPSXSjhOOzgD8kchWekWM3J+bXX3\nUPIedWH//3B6fh2nOwky9JSAznAcZGBhVyl54gIrV8rRNlSTIt7aBkNwfCzl\nBb/yZxvVBdUuIzY+J04MdjfHxXd8HFzWjQpwZeaJR9H+/22wsR6En7hsXf0J\n8QiScsKGcAf5vVXd5nIJldBkhypkujfehXuT6ZY/cP/Rc61IDwZ+3LCSgjn7\nxODqn42X6cYDxvbCBHg39Q3Bm33HobV69KFcUpefHiCynRzVU+MXPWbYQz2a\nDYAI\r\n=BK84\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwLLH8ouIArT3VLfzR1IHxQlCV2uR1dvFLIet80MTImQIhALB9LzhRy17GG+JGArpclTXtGZjCe2idwcjBSonRG3gT"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605284689-cba07659.0_1605284801602_0.6051077306599555"},"_hasShrinkwrap":false},"2.29.1-next-1605289435-6edce4c9.0":{"name":"@xdn/core","version":"2.29.1-next-1605289435-6edce4c9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605289435-6edce4c9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lCExKrx5v6f9WXFBgeee0aTRkLjwhJ9qVSacG/0Gqa23vPHwJdeMP77QeBaH/XYSo0ot0CCMcs1EVAyHY3R2Dw==","shasum":"a2f067dd2f39b28e5403152027c65a97ff4ab24d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605289435-6edce4c9.0.tgz","fileCount":169,"unpackedSize":639639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrsZSCRA9TVsSAnZWagAApdsQAIOOQV3TsDH29iAPXcv0\nzlRF+9zzwmeYTC6BaALh/gBn7dJSUzByrumL5WXqxu3eSWWmZ1wQ7RAheu1e\nF1y+0JatkTlgr8oWtoaZH/ER5kcV3u/8g74MVgoFzCoGltmysoIJVyBDXrRu\nGMfCMrlB5kjnC9++sSiqcx54HpOj6vlUHaPpEoVP1+ytcPINbCYp9iwUEYMx\nGhFHxQ1cp6dIQY4f0gG9OfrmsJTVDaM5Gt8yDEXXm0bm+/qf1x0703WHJu8N\nrbGiJCKqOzWAGzuhiiNB8IIrF+M8IpKDdaHKXFWP8BM2YMxrFEzhVfBhxiIS\nhpbt0RK+2IQ75ai7k2AIB9bndT8AXUg9Pej1wBDEP/zo8EfTmz7lW+LjRKPE\nWC7qI0bLpfXYLzR68TjF5Rd+OhjcrBQxxDq+PGuzHh2pmS+lYo1lCnLDaTVm\nseLrzAc73LBtvAsADIvZWUtDsuh+ogRahID8E6bJyN8X/URlTNP4t+lxAPuy\nBBr2vhgy5mgLCkeyILomkl7r+dittEWc4Lyl8IGYUv7wg1MHe4RuzneYWAYx\nzs3sJqo/sT56DHGwWL27uN/Ced8PP2ZxRJC4d4rHIHWo60ZNeKbt+CbEaPVw\nj5e/Cb6ld7EAWk/KRQnockIwST8sWnvyivRudic4zqwq1/atbia5bjrluI1L\n5pfW\r\n=3D6o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8/EV7vwg4JR0U+oDiLXfu5r8GXMDKhv7bfbsC+yohOAiEA8+pJQxrl7y7ELbQGDub1JO9OGIhELcGbMiQQ4hjQLqQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605289435-6edce4c9.0_1605289553713_0.8700956304640624"},"_hasShrinkwrap":false},"2.29.1-next-1605292246-763c6626.0":{"name":"@xdn/core","version":"2.29.1-next-1605292246-763c6626.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605292246-763c6626.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MHPhJaR/w/Ebiu5xvt+ReXVFlo97uMHeHEbQmO5lPQvrl7rx7A+qG+E4CbB5WuqaxLmUCd68cZn49H3dzWyEug==","shasum":"0130ef7d500f265fc80582a77462be0701539252","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605292246-763c6626.0.tgz","fileCount":169,"unpackedSize":636652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrtFUCRA9TVsSAnZWagAA4cMP/i19KnLaRkoSAeXI0F5X\nu4DKzbc39oizLC3x9DpeGRyyK8hhzuzcp+/uvl2XJoT1tFZPZVNweyYolGbX\nm6ee/l8cn3KC797MY7tmOKIZbJelw/SS7M1R+A+cX8O0+KD63BunjLhlU/vT\nUHICA4DnzT3TXKSY8kejS1o6Ns9GnGhZMtY83hDpGgkKPKKoY6CCbdTubIZP\nOFpsg3XNSReyZt1EsAlaHjGM3Bs0eVoQ6PqtwZE19oxmcNTRaQ42WDCFaXLV\nJBcVDv32bsbSYr464AaFW0iHGf/DYsGUdicttXbaDtEZGM1F+Nbj2ejAfBF1\nS0RojbhktLI6Me5E9Yh5nlbCd8bdDHwwywv8DAocAtNz0Mu6amfJGNEDhMF6\n5XIvkGuQIVXKZTMkz0y4Z6XIo03wbYZFIWJxJydxXkZxCBBWhY8qKN+FhJjU\nh59BdJaRrH7AGjdcQ2EA1ShLlQABg5Q7O9gIK32tE3MuRN3rFJxspMn1NquD\n/nIf25Nul8qX1MHm2KOohUNltIENh35En1gjqmZJulKNHZpS7YXBiMR9y4ur\nDuzYi3qC82L5sD3BpCu+s9fqLb0A+NHITD6MZ7GzCSw1fLVj1Esi/1xsAr2K\nRZWnD474ocS5T79NaMz/3znvaQgNxBy+UhJrr0YYnPtTSzyj6IYqjiPZdAUm\nH4Zk\r\n=g9EM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDp6M1ZotXhOW6fih7l5C5Zm6jpsnDwH30UXF52pq/+0QIhAIYwTqLEbLf346TGW+yechtuVbYkv9oc7DHjTbrPF3/g"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605292246-763c6626.0_1605292371449_0.620577069268593"},"_hasShrinkwrap":false},"2.29.1-next-1605297932-01d5bdb0.0":{"name":"@xdn/core","version":"2.29.1-next-1605297932-01d5bdb0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605297932-01d5bdb0.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2qC7gQ6YhD/TehNYrp9umIOZknF3z0vTZ2NUGW83uXaFtRMPj85hGkPPG7ytzcORkezOGSQdtBAvLfQ1/YPFxg==","shasum":"7864bec974b7dd5d64082521864591ea78ffcb2c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605297932-01d5bdb0.0.tgz","fileCount":169,"unpackedSize":636652,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrueXCRA9TVsSAnZWagAAyMgP/RpyaVWlAkafjiCHva1W\nXlWwCtU8oW+7f+8jQW/Zo5LWb8VdNGx6IXOpQ+9JF1Y4FqbmNqW/2IZ8jjRM\n4pjoX6h6SwTT2+oYkPwQ0uCcBwd21eupYOSpBnqoCPttVs0h4ePKRNSnZxIQ\nLzoVbOgVyCIQmmml8Kc9h2t1+0CTx9bxvM3zn85lyxeVlexqeXpflKSnXvu/\n885kOHYdeEXjDQG6a7Tzv3drj8bQKgzI1ExUeIbJdyhFUYgyolfR2etfOh9e\nEvRYtK9fbrMOsEtPl3osoHb/j3WxU9nD7SAxkWFtLl32BYWNEx1M93gQwBcE\nk9jtvKbxEi/jEzqMHZiy7gBTt1wiHqYnXzy0SClNKcLKW2l86hSP0DYc34sL\n78K353cQF57crIOWyiMN/aMTAjt3RRVUoaxZEFUvfwdqUQQJika6nQNpr2Yk\nYqa/yP4j9YXRBEMmuCji9Jz7Sqj8rx4LC4nZXiZp26NDd70kDoAcHQgwHWPL\niaXaf+ZaK0pPaxLTnVSF70ikw8T/4n/5vq2t+5ABaoyMOgb2LByRILKJff7i\nD6JZka7xiDqNn6pIn4dGBCgt+kXWK14AlTqMPw61K5zFgk0mk28f0GwoWeER\nmrXK2ao2Jme/X5zd5jqUeB9DWJl2DllF213P+5xPOrH9GtjPSkjbLyQlJMj7\nMf96\r\n=QNgf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5VGX4aK7OUChcZ3hPFPT+LI634jOH5nEtOyRAwVGUQgIgcIIsXlywy9QizVQTEE/HjHMY1tPZ9IbOgLPa/bH2Y2c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605297932-01d5bdb0.0_1605298070373_0.8680753876847662"},"_hasShrinkwrap":false},"2.29.1-next-1605394195-ae77ae1b.0":{"name":"@xdn/core","version":"2.29.1-next-1605394195-ae77ae1b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605394195-ae77ae1b.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TOLdx4Vj1YIPnGmB/NAB6+ZiQHY6DAwwpVsBcviCKuS55YhsLw6KjQD1d1frfO1edI4yy7CTtETX8wPslenyPg==","shasum":"aaced32b210e6d003c03adaa254fa699818931a8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605394195-ae77ae1b.0.tgz","fileCount":169,"unpackedSize":639437,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsF+GCRA9TVsSAnZWagAAYikQAIOW1dNOC4TEpgJMOahP\nbU+syCiQFgNr7D+Qs8MYhpf7nqMdCw34petxzYiI1Xhc93linl9t+am8Qgq6\nH960cZreo0Tz/mk1H0ZssUAo40UGHpny2kK5fpVotrJkwOvh0QHUMFXWM2ue\n+nQOLmPbkqV19kBXXAuuhw7zW4Wm31DPGqCfzGqWRkQqWySl1DR4On8LiGr1\nMtzEJAV7lekxxMqa5Ha/dGA/GV6NvCH8pRG3+b49LItYQc+o9dAfh7rbwKiV\nxvEQkcBl00LghzR/wBBO307icpFfeqzgY5TJ4DVnw+b/jc9gXdSIFYv9Q6EU\ny/gV2NPyDfY9R/n2MVJTPWq8u+O1mnN129W6JVe0L2noq5UQg5c75fAxPN8W\nhqP9C5OiHKbNi6D3nS5WDJW4gsPZKspW6HzZpNF9mEuLWtN5nYcrFDqVwl0+\nCqVDBwdmI2eC6lywi9/XsVLT/lDithqNLnSqGkkdYug2GuN8ulCMklGMZfZw\ny7ma3ViffGzmowGG8JiDx56nzvLIn5bQvhEVt9/0Wk0SbES49QYc1onwa0Ub\n+d2ZOQyuVd3rjXp8k8OUa7UyNGWlRWsudZy/7yiqsVIznnIsWRgT0/z1xVVM\nYeYNsTrMUJBWjgXW6dX2Db7G3Y9osts3/oYs1ZYuzs9h+FLt1TVjvZTE9mBh\nDaRR\r\n=ZoFt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC8Au4oC6quQnfDgUry91JtMuAi8/rqUNryP/tbwf7bZAiAQnjNYtlYBOtt00RhWr0n3AFhDPc5cAoCsMh+z5wh5Pw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605394195-ae77ae1b.0_1605394309558_0.2990395256189624"},"_hasShrinkwrap":false},"2.29.1-next-1605396541-248ed8ae.0":{"name":"@xdn/core","version":"2.29.1-next-1605396541-248ed8ae.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605396541-248ed8ae.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8S7p1e2x9PwHgDeWqEcmmVFkBEHk3wzDBvTzbiOnaiaxZZv1TlXxihrez794sC+0HCXtUjxbnCHZL+mWadw7+Q==","shasum":"db197d651d7d2dcbd1cb5d67f230ae97a6b1d902","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605396541-248ed8ae.0.tgz","fileCount":169,"unpackedSize":639437,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsGivCRA9TVsSAnZWagAAcoEP/R3mMR6CeluKq0qvhkcA\nSu+Kg2SwJGm6IfJKEPX1DPxKl3UOuqsP6tj3Fp+BqIUOKZgyyadz7JV2Z1Oc\n8j7fl4q4PYD2tFtYSubLTy8OMmRpYYa/ydRPs3yB6itjQNpsw0VKpoX80jgc\nzLrTWQq6sHKptkQ0Zpc9vOYJ+1qYbC2tcmMfJvhfk6GSCHIjVvWoNKuGSlgv\nb2/HYH/9ZUCLHVhf4884WmbY/5VY6CM/ywXiACDXtnKREv1U2oyqvLxpQ4ml\nHc6ELUhbkXCeL27jfz8wbKWAy2kHtKcck5ZpI9ZP2kG23qkboOB4ufg1r+iW\nl2pVHUhOFcFUBNCa+KFs/5sfAiY2AcbK0/GWQJrXMhAD5K9uiySQvjDyFKoh\nwEC1ZA+W0XNyUVY2r/W41MvTMqqeiL9N8XLS6EEWRP4kNj8aKQmWCz5/kDpp\nSlvKG6BYmUrFkRpUbjgBn6BXUd7+Ss63KxPA3WbAbDtb+CuoyjiYLr4tNJTO\nRX6O1aSH5Kmeg0+T4yL4wZlOgChgMeeO8NaiVvqBJcK2LFkxCfbkuAhQqNUg\n90z/yOF3/O7F0QdheTZqTHPd7dBEKVT2qsIuMuwt+A6v0hkqu7ITklaH+Bgo\nwxq3nUhOe1asKhVeIMqu7uNeMRaoR+/WUq6sD/6CSKzi9llVQZFkE3ieYfu2\nf3tQ\r\n=zTlu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0BhIR8cb1aZzZMrFISeTd9x0xYFO83kym8tAtTj/pqQIgOFFx3jjFIVcxCPwmTtaLOk6XPYSi9C41o35C4m1t2xg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605396541-248ed8ae.0_1605396654584_0.787694739170796"},"_hasShrinkwrap":false},"2.29.1-next-1605413653-9b3e6665.0":{"name":"@xdn/core","version":"2.29.1-next-1605413653-9b3e6665.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605413653-9b3e6665.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-n5p5bnBuaOuml9F03WicCKjX8KcV8c672lW059QWHIUK43ASRipfnG+aybYAhcn1VNVSLxPGbm045Sh2ZkGZ4g==","shasum":"c4b63ed592d345276a42c59f2c1992c467b8d57e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605413653-9b3e6665.0.tgz","fileCount":169,"unpackedSize":639437,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsKt2CRA9TVsSAnZWagAAIg0P/iV/l7rx7gWTfu08p8E4\n6jDYWg8GYiMfYSQhCfcwOZWp6mwDR1u3S5TJsXMPnGBDT+1/ZRxTMmWlmRrw\nLjp5BIgr/5G9zrvEIpBJTSTS5hj7sztnXGHJd+zfsH544iwyW9svHKNXViAd\nGtzvZaZSU7KPqQ8VCbaxrUVO+uC9V9zSCDCHS/jCQqSsIkwQQGYpWvAnlNkq\nlGTMntYO3QiQa9OY1fqrkh6wMPn4e6OjEyFAvFW2ccxKW7zN8xMvkDFXkhRl\nOqS07odqMLiMI6PmxQvx8XJmiZFh6AyySx3RiS6eYuYTc8U1IxP2aNc1TXqj\n3IOdz/qvir8NyB2bAIrMI1xHIIeDARN+2LBtBvyE2FxrPitZsHnkJf7O1PKs\nUFYS7YmNWAaJG7dAo7/uVDjwev2+h+Q9LStJQrRk+yXGntVHd0fEy66VZjUn\nrAbYzN9a8nmxaEIuL9MwDm6qPE+UQ+CFHelIXpC2j2OTk1+3afzJXIUivBiE\nEq9KIug81e2Nfpu9rZVHfwP58ZNEKWaSxfWt+K1SRwnic+VeONfV2yTud3RN\nEL3/aEBcVjeBw/6ZhCcIUawxOyLGiPquEVcTXkCHGbsfyOhJHft+xKWXopu6\nA3X6n+F3tBaeV1t9nwwNH1cCysqjYax2kMyTpZ/m0sb7WH9DrSyFSnA8BR6V\nX7eF\r\n=BC4P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBPShYG3dCxCHxVWeOK9svhruK347SqYlpTxqpwOvcD/AiBrcvor+/Tzak9j3wxpK5sGC/+YpSlDr2iXnCOBrsoIJg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605413653-9b3e6665.0_1605413750039_0.0799157715253429"},"_hasShrinkwrap":false},"2.29.1-next-1605445864-be8f7381.0":{"name":"@xdn/core","version":"2.29.1-next-1605445864-be8f7381.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605445864-be8f7381.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3Bo8axIDRbOGMkM+Bc/L2fyl5O/zYZTAMwMEv4Kw2vtIwb3VzjlrL1NwnBj0LWVRfdQZBVA5GWEsY/UAkzZkug==","shasum":"b904ad91fb764c6d3c05807df5a0a2945111cbb0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605445864-be8f7381.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsSlWCRA9TVsSAnZWagAAmrcP/1q7cCUXKdtv4sS/3qp0\n2Djam4Z2LmIHEBT0i5qEKfiWZ/pwX8Mz+CX8Gv8txhQQTdwfwfROLF9RAEy/\nzQwdj4/8JvEGe61yHY4Y7kfwDlk4Ymy2AZzhfCWbP2xgvjm4zilSelGBXGRI\ne2eagbXWaK/ny8uM6pqqQiPjRg6nMusazgJdzMLHWMrnCb+W5MUH1LscTG08\nJVNmdNpwxTQztesfbnUrTRu8QstQAkuRBacbJfne3ikv5DtP4ALL58gXsDSN\n0ud4B89PBkheqpU62G3hMJ81ZCw+Yr/WPFkzyFtV45hwOEJG0yeUSobfHC6k\nM2Qs4rRN/mR9h5C6QGoJj60k/wH30IYZ0iVp1SWVgGtCIICgkwaaOmlWMtYj\nMceJd6q0QOPVQQ4pnzlVzhbr18YcMS77Dmnrbg/Qps4A/XTheRZ2BbAlCw1i\nvoH9yCQJrIrXgkcMZoCoHXR1iSutgy7ejXjdPhHncmqROIi0LuVm0y6iDQec\n1dv8/pXbAEQpV64oTJfxnZ7ooVsITPkCgjwE2f8FOU8WeEZhCtI+cF9zbiou\nC/1VMpaBZ0/3Suizad9tJBfLIgg6aR68aBFftdxmBv5f0+TahqXfHK8kP4pM\nSoDIz/lyJBlrsnX7Koqxof6IaCzC+HIH36BhKlULAHMzVMpM+WcapTAh4f6g\nICKf\r\n=XczP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBKQz4MXwvnI4ueUJ5weRzuNONOpKML6lIZOJIzlh8BzAiEAsgVv+ZbkTNhv9etHHghbTIc5kU6U9xbfNLtoQpBIsE0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605445864-be8f7381.0_1605445973486_0.07647600572959878"},"_hasShrinkwrap":false},"2.29.1-next-1605458632-2af203f7.0":{"name":"@xdn/core","version":"2.29.1-next-1605458632-2af203f7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605458632-2af203f7.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-G6Cn7jCrbl390W/HvGyiXjXyTCABpO3aSbBvarbqNrCZc8byN7yRQfr8qbay6SrPsfaIPMTN8XCyV1PjOy+qwQ==","shasum":"948aec52244bcf21ea2d949bf5619426c4a87822","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605458632-2af203f7.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsVtNCRA9TVsSAnZWagAA8SAP/1P02VkHkh7Uxkd+7JQ1\nVlZrwj5Cd3dS7rqOIZh8+3DD4P1mr1l7F4GeC8QujTl7KWa6rAVvuccAPWPa\nxkzdE0XXx15wmv69eQ0o6VOUtN14wOJhyGp8c6TELUqEWj++Zg9FTSymEfZT\nhiiCF5UBD32EGNvCmJJD0IBAMpVHuhJOjgw9GeyXBNhqxc70IOXElaB/B4v0\nlDwRzgxfZPGMhdiABVtSViWUYfgAaPxQN19mQr44XAj6F6xxD/BXDazi1ylp\nPxwbnoySLTLFbiBuIF/OCJfsHW7yn4vFU4VXoe/iJUzckF1x+a5BdKh2NqQt\nzSIwEHQX1vJvXFr5uTZrhIMi3ZXKMaGIUszHq4J26V6Nv3Cni5I6CiaYe82K\nxTdvDHrxn1qwPanDERYGy9iisk/WS8Bhqch5DwX0qMaDpj4TVgXXVnQUaKgH\nM//6lh5e/qzWUL72EiOZZp7ln/qqFi1DroryyPOwbXvwSBIdpA5n996yL6Ag\nQEtAIovg9DdiEqdzhVjkEWgwmrWQVTAaOHNkCoAtAA60ff85/NqvkuCJ4FKA\noV+5i+u/xEOEQNjhT9Ipr8fLmDXWKXZTh7wqADT5tWGWKnhOwucG8Woyf2EU\nZsfffCm1WMmQlAJqjqK9NM0PmBGemdYcOqEox6r7RZk8yJf6LhRwcP9ku0ka\nyMEC\r\n=LWzS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDi/tm7+8dPJ17mPQvtOjIrerE88XxWuEsZc4E4afRgJAiA5sE/QDqgQQibf24pXc7SP1law8ygsOnbTIKNnbBy83g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605458632-2af203f7.0_1605458764704_0.47809754252400327"},"_hasShrinkwrap":false},"2.29.1-next-1605528730-70d379c8.0":{"name":"@xdn/core","version":"2.29.1-next-1605528730-70d379c8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605528730-70d379c8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-t0ydZD1DFgPEVtgU5HOnq8/19gbNzc3E4z2VGkWihlS3CeKtXCj/74no8cmct3CTEHfrTvyQwTAAYvnKh3R3HA==","shasum":"18e814c473b271822d3d0d063f19ad71397476ba","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605528730-70d379c8.0.tgz","fileCount":169,"unpackedSize":638079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsm0KCRA9TVsSAnZWagAA9qUP/2YI1lFqVl3xGfVRQrlf\nEKai/Sciev4Vdr3WfpDh8zr09sRJtu981e28rkAkJ+vErbiie5gskqK9Brkz\nUf4NYx3GltH4NzvCBsgwP+ysw1VeL7rR7tU73Nh/v4vKLS3HygK9bqEMRPZN\n4lge9xOxbzhz9bWqop/wRalKOcegs3cagILRsllylvFi3dfsFW1PTT5oBJ9x\n+sZ/5BSSdy/lulzNZYnsoaO5BlJD2ih+okJBUGZvphUe/A9jP+SFJnrLoWhy\niR4SrFWDdVuroI5ttithh0q7KlNz3z8cUEOoplLzRdPfC+GxTHUhycr9mm6l\n5S2srxvb6iIALe9dRSqSX0/+g1jb5G45ihi6SbBH2tpef919Uyeh8YCocuSK\n8FBd5oTFbOegc0AOhgV2gk/mud0TdgIoNUv72917/KWn8wllXEnFokPE1fGc\nwHHVGzMbvi5OdBhZze8ArnoYnTDZbrekUvFzODhtfbEbYYPDh+EokFvP6TlZ\nXSeHl0gynFiNKKYj9vfDBV3yr/b/N8eU9wdVC5NfjPtlSnEn587/spEsfE1C\nNSCZgwz8Ry3IwrKTa0Za6bUa2DCmufoJZTzTOC7FI2mrgHFxwSRrCArgN5xk\nZwkj+hiN3x6c7ecZVVzgeW0rZxEOVnTOnZAT01ZczcIDBiBhY+iYFFPWRpvv\nEJoO\r\n=JhWr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDNXDtBQuAUEDvAqMIXdvf9mcL7t1e4btmQ3o2rt7UFYAiAquY9dsNYidQMTfgPgbG7+zJcHQgX3yEeG0wdkL7tTiQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605528730-70d379c8.0_1605528841819_0.3193056167401278"},"_hasShrinkwrap":false},"2.29.1-next-1605529600-d2c565b6.0":{"name":"@xdn/core","version":"2.29.1-next-1605529600-d2c565b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605529600-d2c565b6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-oEFAWzza5awiTSE5bF9gqTAigr6ggtaUyYSIzYURVhweMzZphk8/PQ/KTJo2X7ejnZUnhfir0Ds+mP/w0QhgTQ==","shasum":"dd09115592994570b8c71ec9c2811a979be18288","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605529600-d2c565b6.0.tgz","fileCount":169,"unpackedSize":638079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsnB2CRA9TVsSAnZWagAAG8cP+wZC52Kmm0AEapyN0VPK\na2YVqJHez0kOKUc2TKIRLzXN0MSrF3ahuyWMastNnPIfQvcOPzSKgOg8AyVv\nCmQcAD7AsoQ9YyOxqgCXijabnZcqaHKiMHb3xRfpIdvbvokJeF6kYCkeBVxf\nArBz4ZxECsx+UYLhUCEgs/FdHiIVScwOla3Tjyi9Q+jBzt8l2kMJMlJVve3z\nfQM2tuNKAwx1bnKiVs80KOmW5tBk9R+46Jm5+QSq00Pd6yy7cXTpTJllhsBC\n/A56YGCqUnZColRdrKej6bzouJ9Z/Azi1KPj1y7jeOOa4iiopNFDFMj1fsKr\nLmNk3B2un7Ht2IwTfbXZw/3nezgfgC9PSFHqi4j89CxN2bsqK/m6IT1/Yt9F\nNOkS5d+XeNtBTHuWaNmIlk3Y8utJR+WDAfIxeM0E/W8Cyb4jJK05kY5jsmyi\nbOi++mzcKnGW+0vU3WAH10ZkLXrWWSmd5dVyBgAOVD2K5eIJ51715g7Z1FjS\nNX8Eaq36MJJiLCi2sFlggGmD7dIhoBemAbCfPCTt1WJ/Z5at4ywGl6E+nlp9\nTueuiOHLllNwOTQD/kuJPcJg4TIu/gshz4vE5L5qiZ56k1BCqgwOThx0FCEH\nFbWO9WkuWJLK4MqwWffXY7bwBcFbU7b9esbIQqVhd9o8jJ4p0ykVUCII6Ane\nZ+eI\r\n=0TPN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA00SgTyg60uqU29oAghcxvbhuK58r7BnOmygj46RnH6AiEAkQbsOTMN0lStL2PtWC+Y1JIH1XH1ZZf+681wFOtExZ8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605529600-d2c565b6.0_1605529717485_0.09816867344552183"},"_hasShrinkwrap":false},"2.29.1-next-1605530576-c1e20fc1.0":{"name":"@xdn/core","version":"2.29.1-next-1605530576-c1e20fc1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605530576-c1e20fc1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tv1MYVODzCukvBsciwcZ6veh+2n5iO0lNRfqE5jsf7awy3+tUn9rqXViRIcHrIsm71jo2syX7+sjVxgLLcy9bg==","shasum":"e1238f7b7546d0d60836b2b376bf79063746c80a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605530576-c1e20fc1.0.tgz","fileCount":169,"unpackedSize":638079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsnQ+CRA9TVsSAnZWagAAHRQP/AkQpcr3G32jnj9uJWSi\nav97wzCMeEmMLXXNRPhB8zI2vGHlj73Enpw+RTU53cDmtkdCkoH896AJYuoH\nVp8Bjh0yXorutOF2j0sQdyMFy+F/OXhedrizKvYi3INCa13StUE0x7YuYn3G\npczSZKK7E4aH/fkTatM66FIyTJ1z/Pv7oEX+e33q+TSjjxNC3+xGdJjbG0Ni\nd6NLsq1dMoh5dTOLr/IypLq0QYUnjbHhF/RNiIQQNHQqVgwuDGumV1jzlP/V\nawriBryxXoKTcllPkApsC7uGuGLApKIfGcbfqN7jRwhwkxvQ9TcQAPz6W1YB\nQEcbQ/H8ak5ciqC60XoivIVKlocXBNw2HBgy3a6HY4D2pvCbZsnV76LqW8ri\ntqMprccyZTObf9t0aNZC17uQWb/AeedjP1aOWqQxotB0mjgxUgItMMYhScHC\nlkDzIxxcVvgEOfoMdd8RPr32hpNl5FlgThvdAwj/rJqmG1V8I/YJX4qUI/tn\nJFddHfhC5w8ZfdUQRAAZQsu1BgcpPOwKaQkI7mIuOjQeSK0mVwCEa74OatX8\ngUVgQ4s4bWOo+NTsbkewpL/V2+YxSEzOf31pQIuD7Vhi0AYvdmbHutm7Jkc7\nc9P41kttQ9/dgsGPoug2GNIG8LbrX5+gpnqYhl/stXYhnmUEq4oRyTYgpLYv\ntgP2\r\n=XPKn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIERel4bIIiYA48lBqknn3d52yzkJb1cunUp6IPRf97v5AiEA0xJcS5VIxDckgs0iXCYoU8a8B4rZq5NFHRApFpTvSKk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605530576-c1e20fc1.0_1605530685797_0.1919411868732781"},"_hasShrinkwrap":false},"2.29.1-next-1605531016-e41c43a3.0":{"name":"@xdn/core","version":"2.29.1-next-1605531016-e41c43a3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.29.1-next-1605531016-e41c43a3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-34SrGUovw/hMtvx0bYJERPCVGzPTk0S0bY4Z6oecCUEFx5z0Od46uJlod0M3LzW+pmbv+PrKujUvn9UlTFdJUg==","shasum":"e614194c26bd7a37ca236e38428e6befa791d4ef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.29.1-next-1605531016-e41c43a3.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsnX9CRA9TVsSAnZWagAAn0oP/iBf3vtsAQpc5+kTn0l/\nMKZIptD+SQHM0WECKyuf7SCr/lFQFbeJQkp3BCPuPuPaaiRXVtXTegBKR5mB\nYAmGBEx4Kss8ZclXwpeQywDhEg6MiZmfNRp6MdSHHELHjCf/DrRT2kLFMh3z\niAcHVJg9A5dcxWybBN7MTxpwd00eEVZY1R27cYQrrLBfDV0eg74E3E+Ci5hM\n580fecdIvVI74UFrRRdcdrVK5AHCx/XOUa2RuiEhipZKAUQhx3Vn+0xtwpYp\ndgw8l+zMfGX3D2SAKLkYom34qrFkDKvu3qTNfxQbRYuB7EyxQSVHc7xoVuSq\nyV+w04cPptho2uaQGMQaYAElBKXpLnSKjzNZ9YODH0geA7homvVqXpwpwPIF\nYlpI+k2J+tDWxIQJueoht2zGxq68ODTs0QmuD1wycZZ2WRNClekQHHIg6O4A\nrhp427mhkPU2XTduhomVmn61MXaGR+S1Rz7fcHvubBwvpoQ2EjaVM1Cb9X68\neIhHLYqaVn54BR4PuPLF/6xnO761VkQQ3m/RLCD1r1ILgRni5QAirNqH4VW0\n4EZCiOjysyFNazGCA538yQKQMQMtCL1G5moxpL6bRp0pNJvGB3Fal2efeHg2\nPRmswewuGESNzGXRYlphGDmFGZD1tEvN5VmmYAdNtOgrGKwBi8IhMlp6q+W4\nsKtn\r\n=Zaqm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHiQpajVojpFBtvtsH/cy/IlhKuSHQuDMzml/mm0+i5dAiEA5dm4Zb6xTGYHttd/Yxxv0QMP5vrIo+75tH4AVPp+5vI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.29.1-next-1605531016-e41c43a3.0_1605531133001_0.35615746278649696"},"_hasShrinkwrap":false},"2.30.1-next-1605532940-1308973a.0":{"name":"@xdn/core","version":"2.30.1-next-1605532940-1308973a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.1-next-1605532940-1308973a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CaHEEdqzifSan3GuUiOxtdVf/j6GSJ6M+kSwULtSc87Pcn1+G9CpiUrsVAqqq/RWa4tXHQdC+1gff0/nW1oyMw==","shasum":"759db029d34a707b27637e7ee37c88fa7a8d71e3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.1-next-1605532940-1308973a.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsn2MCRA9TVsSAnZWagAAIs0P/1DPf9PVg4TX7OSdEHGY\nBTfHDal2EJxLbC+WjQwSYtOg3Ec7X0NIAn8boBsCt24uBrHqYbuIiIiIrhRs\nYoqZ+MBfinpBrgkeaYWc83Yc1yruwi3NrdFyKrDXs128m0qyK576WVID+FLO\nZwYt8We7O7fDp9WK52SFHa63Wg51hrpriQ7DkPMEb5zcqjxCfVyKVCW2CI83\nOtdYgvj0sfbkoWNn+/FhpfhJgyxSu5lFP6ESVDdEyHI/Wo3zDxFXL+3c7PBa\nMJzPgmnVvbB5SDgkwDD+8noxBWEvBnfd+nPqPibujl2IG/0vdFZmu19u89if\nK2exIX/ZgbGClxZ5+pLqvBjL2AUZWLrzjwOwHS+X4KLh+cKMGfRpfKH6eqsV\n1Rfi2ChMSYtVd3Ies0IKwTnbMQN3jYmLuF68Y9NrtJ8m034lNMKdn+rOMk46\n9ZqGO7ys6Zj0V6AxkD6yoNSSU2ideORLmG9hMT/PwCWE9iC9CoBiFyGUEkeG\nuixjH1n/820Gsbbh3q/LHPbvw6qIw6kmXAiRumRe6MFaWZhdOg2T8F2nFlhy\nrDOqS+aTCErNvlKEFcF7njrEMHgDmYW/7kdsgQAqjd4DMBTyq3+CWthHutLd\norc0fzBNn+db1bFLjNMVTb64CYSEAgvHD8MrXihW8iBRsueccVp4FoQz/SIL\nCMGW\r\n=vbJk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiNFaVLfF5V5YcfUxNg8ivgs1nHOaiJmS0e3HlY/gxhwIhALJq8EENHkVRgki6uTdguvyi7YyA7mC8tZS0ujpVRU+X"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.1-next-1605532940-1308973a.0_1605533061793_0.6020513304988191"},"_hasShrinkwrap":false},"2.30.1-next-1605533135-98af3341.0":{"name":"@xdn/core","version":"2.30.1-next-1605533135-98af3341.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.1-next-1605533135-98af3341.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GYpnJMZuCKLx1hc7KauQoxFwI5E8K4yWRVUYRtmR7WL1HXnD8fB4VcY9GKAKhaySXKPK80E6COWBl1FKbYivoQ==","shasum":"5d5e4d208a45ab9e03504d391d319e07cdcf555d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.1-next-1605533135-98af3341.0.tgz","fileCount":169,"unpackedSize":638079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsn4+CRA9TVsSAnZWagAASLwQAIPerbKPZ3lx5hZ7Rq0p\nMomjOx+I8m26tcfmfwxapRO5L9kpj9XbQy/SH3SIYB17dyfRb9wZJaC8+SR1\nYuxrL6ARlBPD3RuD6U6PV58oOaSDfvWbXoc7vz0ooWxODNNdhxzFf2iwXUF7\nrjCDe7Hfdz0hPa4W9mtUU1kqrk3VA+16dHh+EaA/qI7ZIBTglW1XY6o1KRGd\nhVEwti9KNgaTrV0btqt1yXxEX78NcE8uRyOVKxKhJo7XXhPMm+9q1pycON47\nyF/3ZTSlOMV41RY0WAn/WBcNLeYPBSkDikH77VcFl5reQmjWM8jaUCeeRvDn\nmKaXaZJYzVTJSkkDBF0RaQJN8FqJtKHojUaoaHiIv1zeogSDBX9uzLHi4TIp\nFd6Kwt3ju+Fio9y9jntZq3VfgbAqoWqhJA1VOflIaWtmVSBDxOVB8MIb8Bc5\nSyZN04EQdGRoNJBYkaFcOwmk5VRw8YVwe9NwLyhVmxZjlefdjtl8RH8Kt9Zs\n/yGWgqM+PWvPy8FSIkSzrb7RU6/IDkcFBHGfd3sSFf2bgXN11DLsLTNshGwI\nUAdxEi9zTQRMBuUi5SaIv3QPThxUwqBjo9dhG2eiMgcuACeazpQNkoxhGrHG\nCv/R3jtljKrJvbtaCkXbFNjxxj4WY/el5bQc5FVsrpHouqxgguM09uPttAGd\nrlU0\r\n=Azn6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1nSPclEs4mDQzl7frPvmuoRkmh+sS8wAMVE3HbVlWjwIgHLSAaOG5jPpWZjAFgL/fCPb0cZEKbX4qDjMo6mazJsU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.1-next-1605533135-98af3341.0_1605533246114_0.563225648725066"},"_hasShrinkwrap":false},"2.30.0":{"name":"@xdn/core","version":"2.30.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6LCBV1tD3HcAYbqtlcpW2E4hH9paYPdNKmjLOeQjKZUVI4LZ+GHz6jKdhURtK/+MOs0IjAik7r8RK5AXMyzFaw==","shasum":"f99a406f2db6ef3e3ff340e4de8369f47837311f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.0.tgz","fileCount":169,"unpackedSize":635893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsn5iCRA9TVsSAnZWagAAkWYP/25hKV/IftAkwWFufRV/\ncI8Tft0kBWxf94rR/PDMYaqrA169IYiFMpoyPgkQfXMjoXEgINWHvnV4wUea\ngQXRy5mFbRoid6eEoavMEg0B8COlt0B+cJsn3nZ6OIQScCP33/WHwOcFeauE\n61HarSt9S1PbXidzDMxjEWznPwmsqvadP5VlIAAXlcC5xqx6hdHx3DCkP2+D\n0qGyUi392TJMxOAal+W/Q5Bk5PiGGTVFgjWi7U+xwJlJ0ipzu2iGHBa2FJLc\nelMEMbOW6pubnWt7Dvsw2RgnDwgylLxOV128Sd8ubimpvfDn2fYhdoo2WKMx\nczQGPZ5URxrTn4arhkvWjIq6Km6ZZ/8vbRFep5XkrBNv0ttpQpNE10W5fulZ\n7/mxO+0V7BPyjX/Zv7T7prkblowPDnOK01N19aY1DMyFdv5heNoo7E9ZPI0d\nWJn1ayo0Fv1vsknpPBpc95+PZmDacq8ZFh4+4QTmuTb6xaZipfYl0rWPEhkT\nRExYbE0hHk9qoPkxXn1c3H36fy/9W/8NNAU87VM5qKhiBTRX8eH+PFbyzm+Z\ny5IRFtVkZihth4c47TD4T14+95QpteVmHKC2dVzM95lWzCfGuubksuATopkg\nAH8QUgzGfSsisouvg92GCPRvygN/lFcXRfUfT+E5SYDIBilJ+6YuYD9oOIPC\nXiqE\r\n=kJ3K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHAHca4Qq1C7jFhVdeuE8D/rJrpts7OojthTEy1UD9XlAiEA7MVwZvZgm/18nmgY4VhD8TEBwGIkL4w7TaO08W4PUew="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.0_1605533281654_0.9890863726927133"},"_hasShrinkwrap":false},"2.30.1-next-1605533608-246600be.0":{"name":"@xdn/core","version":"2.30.1-next-1605533608-246600be.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.1-next-1605533608-246600be.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YmYL0iDJex1+V9h1dc1a1c/TawWFIHkSuVtIa7zJb57Agv3Jr3iIfSG+fcGi2RDxcLglg37v9lwlbf0D+evK2A==","shasum":"582d7eb282cbdcdfad534ecfe95180e72e93cf23","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.1-next-1605533608-246600be.0.tgz","fileCount":169,"unpackedSize":638079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsoAdCRA9TVsSAnZWagAAIXEP/Ap4p+XpwjrTLwHl4t35\n8seGeV9BYLYtnkqse1gzEMO21YDwwO/eEkPLUEfr0X7FkAG1hGChu64CCIB8\n9dIrKZpPmRdKBPTYZ3qtW67t6o0B6Lp72GIt1dxIKvy7A3kSzw0uyNP6dMPI\nVWIFQssfEo5kKdirV62gxXR91MOC5DTyoOJzYDGfOTVSOj3s3Ha4bzNExBwV\no9AkvrrSiRVtORjdTrhDkjs9qwv3mJcMJcuaWpn9Iz8sPlIq+wly7t9JW4bf\n6YUdFXwxWOTQSISSn6AzvQ+fPfowbRGAcJ9cC3zuTxvj4a8p3xkdJ9bZqpg0\nKjk6fy1p7+UvrlJ5eFf+Hg61kKyc7GckpNg82eHP7ni+5ZXSrPVAk64V+36B\nB4aSngP2X1Wf+sBxwO2YSu8vcTUyTUT4xrWy5lB+YjcEbUjgF+xoZjWmpzFQ\nE0s0erw4+t6qptrPMSlJvedjw115B/2xgmoTDtaAoh/o8xfLqBokJKOyPRHL\nDhmviopgCotBJCyxAf0ovfW7RJ2Xy1YajCBSAs0LXySzZDaUlbNJNuLLFZ6S\nUqlg7TCa500Xxu3UxTS69NQkE1dTyWRUljQXmcOFg4UyR683AMwSCh3sSKUI\n2hApIv1Hi02wo4lHk1OTuKk8DekJGtvxFI3YyWt8Nn8q/znVDqk4nV/qqYLK\nm+fQ\r\n=33/y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAvD2o0qiXP+ij2SLxMUhKr8aAjz5BMB5v0WpXwXZ9owIhAKkyxaG9C5MVMpv3KXp300+/gMtmmJ7270Ys35sg9qRo"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.1-next-1605533608-246600be.0_1605533724784_0.4325664038899182"},"_hasShrinkwrap":false},"2.30.1-next-1605533779-91d25b8e.0":{"name":"@xdn/core","version":"2.30.1-next-1605533779-91d25b8e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.1-next-1605533779-91d25b8e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XLotGr9ehhGh4/6Xo/ycjMi7znuxpgV7nmHQI9sHDJV2pqM+AQ7LDRYwofeGSc0cRGH/oci96RFiotlfda0jbw==","shasum":"0f421d666abf82b3b505d1a50015244b355d11b7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.1-next-1605533779-91d25b8e.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsoDECRA9TVsSAnZWagAAVZUP/3Y90uu7Y97ar3rbXHuU\ntwTuJ08HY62A1+397ZGIAzBKFthNKqznWL38/o9mSppSJ7ceRUdTWmEQsyfL\nkQG909MVUiDQuFwJr/V2vj56gyp8SVjHlMgCheZTK42st94rAbwCzUX1QVNv\nzYDRs/VRGEE4k1EEWM6i5AyFV2BADm0QkirxoMa0ZZF9Ntv89FqJoIbf8yvo\npRPGIFkJ9hw/9qzsRTEf5wkuvVZFU/gUpPbwNCjTOl/kU01zCE+N21XyzO3k\naIZkhCzXRja9S5eJwGv6wbDxfPLR3ckTmKSAv6qEiVGy5wsKWYBCV+nel4WQ\nppM/DyAm1Qou3vR4gtDE+McS8AHH6MiaAEvXh2PZdBXoHpK4iPpRiQfxRQAR\nzXCrPs/xTna5hvh0Ix6orPcW96SP064UR1IZvkP51qukJlRM5qnTPJDSSP6s\np1vfSEhaEw3pna6eGfiQTyO852vbIJ9+vzf7RFlL4tivPmhUlQeoMmHY739z\nnn0i7+1p12hoM4hn9DSSggy5M46SdR2fIOXvN9KDnRygiWtea4dL43WMcvo2\n2XZgc0rZ9abmvzxrKl0t/Dr+AjVgKBSjNHq7TlrKWTIiFqa7Xh/vFqSH3mAo\nt+y4GApGiDthjpE8HpHMky/W57VOvlrg9/cF0tS8x5nQ3uFyP6yADpUUFAwR\nRGYw\r\n=IaCL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHHCOn4GqJjU+BSB/ZO6otLfOZRoEv6YMqJpie1BMCNQAiACsrQanxtzTdWNGyxhjdRvsPP7vFsM/uGreEeXWWyjMA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.1-next-1605533779-91d25b8e.0_1605533891631_0.8699893975330764"},"_hasShrinkwrap":false},"2.30.1-next-1605535186-52c00531.0":{"name":"@xdn/core","version":"2.30.1-next-1605535186-52c00531.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.1-next-1605535186-52c00531.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VwCDOHYcFvnJS47nAFwHuxJIYBXgc2LR49YeXMD4YGrgk2m4c6CCf7FUMDaHMenjPGLb5+YQ4RtO5DbtHotxiw==","shasum":"93212b8539ea8aeb31445e222f28b1385eac44a1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.1-next-1605535186-52c00531.0.tgz","fileCount":169,"unpackedSize":638156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsoZJCRA9TVsSAnZWagAAh8wP/iUFau8DkoQ/MKkHVxXy\nygCmFqtgC/5jJrz35AxrKt2+kYwLobzyDrXr+xQkSuH60v0lQyo5npX4inuG\nxtNdngigQEA6Hug+2jCD2nMmy7CcTRe0XqEh5h29woEmD5aUgXKOPELlDqcU\najW9MTM5CS0AcXscyE5r8E55OVj6T56AMEOcaFRW6pislw872PjpGkImXqLQ\nkavo1g5aWW/LrfHD4zk3wlUK7DmMHBF4hztLtynaYXfCfe09MJPOaX8Mf/ad\nqvsZ5SKqNdZCYPZdQm2rHS9QnJnTBAKkiYbTR1bXIwd6v4JGU5ndr3Dofq19\n4Bc4dpzJXouP4TXdKGhji3JZ33istYsR+PJQZZ5xuXO+R6hoGS7EzII9DtGo\n8PIBSaiAl5c683H+79nKMvn/fQFLaQKo4i/yD3tTHVRi8mu40hi8uxkd70LF\n2Vq7X26fAvO4tR9cCZt8z2s6NCBu3U1/IuyjjGXKDd77pDViBYryfKl7Ip/O\nsrxXnkIxtgkAyyy+spn4voj4jqymrnWngIf3tUTki59mC2IHNs4Yg9Z8hab3\nQxUntfbdMmuI87H2HkeNX3Mz4eXDPchGEKo2ERqUohRS+VqA9XjlPhRIYEJv\nKVBRs6ZvLxhGplVkkXck3uXl+YWp65F9KVIuP1WHcX2C20Hp67eRBXVdShmC\nLV7z\r\n=3YIi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFTl8n0kjtcxOuc4Xr18IyuFXxCqPPYscVmhUsi1AMzAIgAZtosWTUTeAVTgVtqP4qwwBsIY8bvblfaBfHVd4EI2M="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.1-next-1605535186-52c00531.0_1605535305115_0.27088459925746977"},"_hasShrinkwrap":false},"2.30.1-next-1605535853-122cbab6.0":{"name":"@xdn/core","version":"2.30.1-next-1605535853-122cbab6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.1-next-1605535853-122cbab6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-awXBuxxnbzbT5pHH44oKelTIF1NKFFY20DaD5vDcPJgp8ddF+gm7mjoGEdC9wISog+lRCnhqwKd1d/okPf0lNQ==","shasum":"270097c603cb6cbe7984a4a9def1dd1eed25723e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.1-next-1605535853-122cbab6.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsojXCRA9TVsSAnZWagAA4vEP/R5VpaP0GgALSRDGPAKN\nK3DbibnlvWrWx0eljzNgx5p1sfRZTcl58Mw2Je9f0DMxJ3jAT3eg02lDGJe9\ngyHzYqzhn1E3pZnikV74kXuMp/JIrAAjFnoWrFyG/1KUeFowAuC9MNOp3cb0\nD2G6U5VGAvaq1rhxCiFxzkxYxmZ4dBjzFQWkhobRLRWi98QHwq1e1N746vQt\nL89lfnWxrmZLyc05gPsIRPk3K8usz5UHqEtzszjoYYNxnw5exEMmuT3CI2ZR\nwpkJxiKSLiYKxVe1bPzaKEzhaz+YV6cDcVoLXSSTgBb9Cu5/cnR9X6ZrhwAV\noaLMKsERm2/dAjsC54pytaPMJpBahEF24UEH9kgkXkm+tjTvIaeS8SO7Bhcn\nc3KWv7pCNt9Uy550e9Ms3iQbeWwU3ACtblzZLsxTrIGcvZL/sX+nfn3RNogZ\n/gs5Cb/7/R69BYNBBmckYa1iLjzk+bR7tYolMO5LMS5EMVef7bj8RsPPMnow\nOjzrb+4tAhra3V50yR778IJtSB8Ybm4jTgNBqyTCze62Llyd3zdSd5HtGHUW\nZudi0Wfz2m0AF+IMC1gIlHkIchuFAW2Kmdy+ZbiDXlhUBGrRdfUbYUz0TLxx\n5CR1h5la0RzDWZMphitxO5im8jabsP0USVCpVygXnwST6TqJBw9wkQsb7iMj\nXcG5\r\n=KM8M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZ/TfRF/y6UniCAOoFx3RPRIHR1uNDo36aAc3rrauaTwIgfAqUCerZIIEiHRTR+gMFRMbMWzJw5RD0Haiq9c2hbOg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.1-next-1605535853-122cbab6.0_1605535959134_0.07232386046879147"},"_hasShrinkwrap":false},"2.30.1-next-1605537420-122cbab6.0":{"name":"@xdn/core","version":"2.30.1-next-1605537420-122cbab6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.1-next-1605537420-122cbab6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VPewmnZ3RZR7PBspimhxUi7uLgp+MVArH9QOtGhaxnFLDSe3KIKxiq0gOa6izdk63xk+nME8jTd3CEuerGNk0w==","shasum":"5ff1a10d9cefc3a4bb0352e1dc04dd653b9d132b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.1-next-1605537420-122cbab6.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfso8YCRA9TVsSAnZWagAA6YcP/iyKYvqhlZOKi7CY+MpD\nNBtDYdIGqhW7w8YUVFmcCsXPM7oim5WxK7xOYWWaf9IDVtWij32vzNS8YFBZ\nsebyyPdWMDBaqy/Qsix1MnWixoENIOzKJRqHuMSP8Gt+F65loCe9akmMVCai\nBTdnj5M8aZcblTowJLsmcs53gp929Nf2Y8B9BGLx987bJPZF87SR2SUfba1i\nLVUppX187QDaOw5a2nzZpqkn8DQSnahC7KCPZsFUX9pTN8Uw7O5eYZ2Dw1qX\nfTIhos8em2y92Y38ONv1auph46dwrWxgSSZXgvgkTNqd4dbSKIGl/eU1R2wI\ngusWVGGaKhYXdHWvDGT7fp/qFJEUHb5OJfWxq8JeptwUdek666zAfu2Ju58g\nv2yOXP+84TsmSdEc5eBDyRv52MjOFQq6tP/F0D9i6zzIInUcUIA1JghmYl7S\nrWbuFK8kpAy3ZYbXhY42j314afvcOfo/dLoyG53MPQCq5cz51nijuAk+JV5N\nl1opEqPT0wORoXKSVwUxyGYx9ZOa+sTbIYaDW+vFAHp4DEQJCIoIgsfnPnKc\n1n6rDzp3iZyNz8ANFOTs43hmyuIbcYqk6+bMgPhlhcdRv2scX4Qi/DX4XlU9\nnORMg9j60j4RMg/zvfye+YSh++xeGqco63t1TAkhiat/ctUocFSuteewdojG\nhNyX\r\n=rKEw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCikB7XEhU23lld1xhx2Tu7Bsdu7Wftjic3Hk73Myom1AIgPzCEuAT4SBsnxc5R41Fud/0ArA1pOFK00DpQb3ByZ50="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.1-next-1605537420-122cbab6.0_1605537560443_0.24189958337770134"},"_hasShrinkwrap":false},"2.30.1-next-1605538549-880e0fd6.0":{"name":"@xdn/core","version":"2.30.1-next-1605538549-880e0fd6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.1-next-1605538549-880e0fd6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8pR4i6cU9oD3emwiDl3eF1QNA1kjGGaHSLchSVmt0xaQyx9O2HzGxTZBeS7zI2kHvXRWmSlLGA8rGyt+ZurWZA==","shasum":"2436a22d98db81622a53e703864117fbdc29c87d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.1-next-1605538549-880e0fd6.0.tgz","fileCount":169,"unpackedSize":638156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfspNlCRA9TVsSAnZWagAA/s0QAJNlO9ST1UFRmRd2dQLt\nNAQY8QarcUiUsc+PHntp9L62Ln1AzZ6bP93ugX4FEKfoFmEoHsMAxlGZ7+zD\nAq7kPl6ycGW/PrZuq88gooc58T6k25GD8ryvWz0wg6LOQ4aJq/4z60tDENi2\n8a6Os9kSUqMse6T0VSt8F6v2wJSzV1iwJt3jfIc+Eq8OI43ikOKYnFtXkr5p\nSbaBv0oloESDpowc1EnqpjV8NZqbWqTyxrLg9RGcXUYcmItiJbsopChJzy2a\nCLUscGA+w69/3quduOhP0Uz/dZD7PQV/+iYO2cMWAjLmQAubERRcJSzKHlAN\nNEZVk91T+C1VzcPGBEajXeLo8hZPxZgqdWJjOgdyr27vY1JQVFeO5fpjnUQr\nSo43iC0EWnN5kYJdXEImqlC7Ecyg4+teYYyYx87xyKbeRCJDJbLhZ7Qk1jon\nP+RckpLImDpqBZpib37GbtzQvV6mzJ/1f0uRMdHvqgfbWUyEyXBWamvwzejv\nRMXMf59cjqOawIHqWDSpy+jIJBAF+SIzWeDio0hpaTley0vnBm38/TsGyS4h\nzauE4ozxTMCvB9jFPjVR/Qop6q7OmcSCURIsYq6V+sRntt7/tU4UDCQW2gkK\nhl4jmAfLtoTD2g8Jb4D7TlfZ3BP35QS21Yhy3YdaLFCrC23ouB7atml5OUT9\nvdAy\r\n=ygxZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCogoGjWm2mvTguQbhxGoQGDiUBjG1fP8YAb2/bzMPl3wIhAJVb6AWunEgYdEsLVM7/YvqOWTwb6cE6b/DpX10mZXl4"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.1-next-1605538549-880e0fd6.0_1605538661116_0.15987570317391908"},"_hasShrinkwrap":false},"2.30.1-next-1605540555-00386573.0":{"name":"@xdn/core","version":"2.30.1-next-1605540555-00386573.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.1-next-1605540555-00386573.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-yfSFfQtiaUOFzItEm4xSmX3y8cqKBWmoiEMfK9zjJWmwWu49kYVu1gXzqig9UDroI2KL4SzX8PeYkKdncPAcrg==","shasum":"22378bbf4b04093a66baf1b3f149d19fe93eac26","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.1-next-1605540555-00386573.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfspuICRA9TVsSAnZWagAAtW0P/A9xTmScO/2epIq0tJHj\ngqq1RLHJEaSATLeUDqnSjlsOmsHBe3mvV5ALr8YkB3twBJIs8cO5+PjO/9AM\nvywgkSFCtwUM/chO+ZFdzzGPTfEQb6nHg1DZdNsBI0skQfv8sPBcPqzZtrml\n+PbHruG4RXzKYJ4a6MLx3m49V1anI1RCQuTlSkK9Hw2IgumSKbn1DJ9W+0Sk\nT9JFbDPTUyioCqKxO9CrFXtRaGNMK/Bizb9CKF1SLDe/Uj7+C09hrNRna1z4\nAljDCZBUmEsH8LMXu3QMHqdNyHsGGp1V1CBYwEFQ+37xXowiE7SwRhsHRoGF\n7OHBKOZQSgdC1dCV7dfaRS2zgVg0bjMA5nKR6KE8ckswZcbnjNnoYs0dyrK2\nHXvAqsxmFo/bPy8mcAMGDoIboGqQ7S+oW2fcIo9RasUMkyeuPoPWhJfb3rcB\nwletHRPz6UuPS5j2YB5IJ6mdOKyttm/ttkeLZer7GNjYlTK07GU+cE3Di+TH\nb2JJ4qb1xfQmTgCcppjPCrDvflEH8/y+qsRJ7CKCZYKkJPCs2cLIzR2/oiWV\nprdxd516AIE8nIE9uMydZUKYONv2PNP9a8LQXDpZBkMV0fmSvgXQz29iDmGb\ntHjVcZmRa/iOA0WUJ8YPe6WuQevfQdCBYSnbttDoECKK/kOPitXC6ApNn2sA\nX45Y\r\n=CJX9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH/w4eYKg3pDnusqIeW0FpMRbe54ghWHG7Y7H7/BTUM/AiEAtB7IfrZdsyXfhM6I98IhUHpSXbe+sVwaVheX42b1djc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.1-next-1605540555-00386573.0_1605540743858_0.12445967200842167"},"_hasShrinkwrap":false},"2.30.2-next-1605540836-75e11a77.0":{"name":"@xdn/core","version":"2.30.2-next-1605540836-75e11a77.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605540836-75e11a77.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OckDUeUugvO98cBCW7EMItjyixvIHW5O8n+EDtjr5/Zwa06HPx5hfQvR+ZSdlMXsO6wslHXQvljeUgtqT4uk2w==","shasum":"57e11b12feb36632053ffc7b93fb7dbe0ef9d05a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605540836-75e11a77.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfspxjCRA9TVsSAnZWagAAjPIP+QEkGQRuuf+XWy2PR5ta\nBglMHMzXnT6OArqrnJT5kYpT5M9KHHpnN0ky25TNU5ak6uWChd8jg6VM/wDu\ntAok49YbKAWVOXi34+E4F2Q9ekqYOfD7GCo78btfPUvAKfWUpBeYgrxAFztt\nSWAKQmoxdLnPKLJ7m8mMkqABq1okhh82xhB7SrR83h2WiiWqNkwVEa0apSIz\nPWf3fVMYJM5fVqwIa8/zbMuqLAJOuShEIOQ40YW5O/ij+XjXkvLvmpHBA8wn\nzRnlNKwGAG+DwsKMD7q8YjE5Xj14UHaULrYmVL18uHGKEECS2NX/oipXV/Xm\n3v6IpWiR4sl1zfL1jKyQ80d0NCc0032beZrJYOmvuHb/TqWEzHBEccyncHD6\nMGs4tX6IJg9IDExeot1QojpQhvxX1fJgaiZHh1MpLuYwhXLjHyaebqw/P7aL\nRCM8/1GJJKGs8kW829impW6AgxUacm5F7QntZ6gKrMiLWPc+BqqxwxTW3pz1\neO/DjQfkapnM85PFwK6ZlDvRfUXcly/VM6gfIavT1xZ4wGRZSn989XRyZquy\np4B8lNETmnUE4HgEIsP71y8NlOknqj618ihkZvuKSAyFQ1Mg/BS8iKP3P56A\nU2jcDZwfr8E+KFfkFEttE6+cz99a2NOzGUofpeSBcZCGNzG2z4tg83orBryq\n9/q7\r\n=7k3g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHsySPFQzBKd6FIlja9B9TOiwgqXJ9LmSVoE/X1sxRczAiEAoG03YPC6cyue6TKxJsT7LOzN2v/KUPLoTaqRye55TJc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605540836-75e11a77.0_1605540963205_0.5383524971495814"},"_hasShrinkwrap":false},"2.30.2-next-1605541039-67697d90.0":{"name":"@xdn/core","version":"2.30.2-next-1605541039-67697d90.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605541039-67697d90.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NYfBztuAHUGmGU/m3+1LJM5f8+dyEeQL3quK9/SotISO+pd5VJFM/HXylLz/EZ95PUaLzQxcDxtEL28HHNHLxQ==","shasum":"6de7d409d9fbaca04cc5ec74e9c8663d419b850c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605541039-67697d90.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsp0YCRA9TVsSAnZWagAApvkP/2O9kYCRJe1lKXjl/aT3\noc3KN3EOAYcSvgyEVM6u50XYQO/ffw8wKTWEXreNA2m9e3B3yBfi6jP2x0MZ\n37E2jBx3F+ZadvbXIcMLXma6V+H8yw+WB20UwNhvlkbQ+BgQ9yXTFExAdNab\n05jPeV/0nj05kxfklrbc9gKZXYusRtwml7LU0705zhJtQ22p/ZVISTdSNQXx\nXeZfIHaZ3lrdfjKAesMxc3CufUVT+Az2Y18XcA1nAoroZEMgTr5OE2O5dvd5\ne1ixeZBp7RsCXoLGz8Y4KYKVOdi/b+LBHctZegsUepmABjg2LQAi+IuA+8et\n9e4j14F/8vnDw40PBrzxUYVkThzojpmYWhpCDLS1tmqDS0mcsGue4T9x3m2i\nKvDDJjFToL6Yu9UX5TBB8LqcfR4ZHXgjzXF/x0A7rDC3xk/C46dIE37Ytq4y\nC2b0avMP3FqsEqKUKKQLDiCGUhixWzRSx6EKK/Pp0ziBSjujn3GfDwPXPxNm\nNBh1ng0Lno953N8zBWDN5k1a2cCzm9AOjjn48KkH1f7Est9PZrfP3KE3TwpR\nDH+21bLLAk3LotqMgZQRcKUzw0+z3C2p9flSySRHLHJ1ctEZ3AiDOh3SXzFZ\netmyHE9CXfP0Jtr7vcgijLS5AgW0KYHKfFIOUDcJPubrBjH9c/onbn2H9+39\n/I81\r\n=0So0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBMCrPly0y1+s62fPQP7LENNBcBdoz79kWkh5dZnPwmgIgSZk+CxLEklhH7dnGzXE4+DP0zy1Nnrp9m5MadbmqhFg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605541039-67697d90.0_1605541143354_0.441034275718756"},"_hasShrinkwrap":false},"2.30.2-next-1605541258-a8a761be.0":{"name":"@xdn/core","version":"2.30.2-next-1605541258-a8a761be.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605541258-a8a761be.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-cT2YPNXSTVNMu63DCIWpvgtnESN83//mDqkus+xfPsUtRXzUdh9GQsMZs3B8JtIdUSQ8hXwGBtfDIM0c8rgd8A==","shasum":"09a97d2a3b5ee6259ed74c057703e4d8cace7168","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605541258-a8a761be.0.tgz","fileCount":169,"unpackedSize":638278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsp4KCRA9TVsSAnZWagAAcdoP/RUGibvFZ4HDapUaj8VX\nKy1n19ZX50HDh1wDqCK6RTGQPHlM32fx5sy7k2p0/U+O0/aoTADsvfnWmyKT\nttnqZ2a5I8TI0S81pt5VRLOgj8aD9xh9T9rLJjU0UhsKih97zdbH2D5ku9MU\ntJ6P9c44iDFJeV+WGVue/AS7BsQP0TAwCZkV3xV+rdB3U+VLlSiQENna7g0h\noamN6rv9aMoCOLubMebqaYuQ5HejCdUM3liwhflV/CsufTlVhABE4QYTQ57/\npCWmPzO/JVfVrbnUKOucM21QaYy4S39JtIlQ+vxGE4y2IJV+jOKpxxOhUlna\nSWO7zbsXz+anzXsAclhYUGVgSTut2AFUH4rPVvOKBUwABj8ut6Uwp5hUKqKi\nr0ZiTyQa4ELAHg66IBnJpkn2XoalDrvS94Y86axKpxGL9muot2zJZX9PuMub\nakLGaiQ3+8oyheaAVTH6CAUVNg4m9GotFSUT4wxhH7IBybsdPkFQh63Ivtq9\nuekf0Ym1Jd3JS4+wC/IV/D0GOmkulTa4u9jG0RQ6CwMHA4ECB2DMffYcoj9N\njyggNKMNrIINWf/HXa02t7DDT6XZVeLu6EbbDN7+ed0txD0JylGN6ofixV2V\nyt5nmT/Au/5ORIJb/RsN71R/KXYEQoK0KlUAB9g+1iMSFsHG9wl0DaGcjL8h\n0BzT\r\n=rLht\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFEq12v2/rA27eeZWQXppvurn+5xhKn1BDUYG8LUgUI3AiEA8ajejA+POie76zLa6nWuBCiODwuQLToqc1pIlWyKRy4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605541258-a8a761be.0_1605541386031_0.28373398495199154"},"_hasShrinkwrap":false},"2.30.2-next-1605541801-91ec3a94.0":{"name":"@xdn/core","version":"2.30.2-next-1605541801-91ec3a94.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605541801-91ec3a94.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-yYQuPbYzMCzx49A9Bba9qfYb4r/X6Z1agAdOdWxEPd0oYiGRp7VtbzxNSIfnnA86athUDi+si/kOvXlHCDkcSQ==","shasum":"fa112cac34aa6fe41c6e33afcb1d840279bcc256","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605541801-91ec3a94.0.tgz","fileCount":169,"unpackedSize":638285,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsqAZCRA9TVsSAnZWagAAcd8P/AwyXs15NCbKfZLAGyxt\naVWQ9IXd+SQQgKIJXTeeRIBWBDTtffK74a69uVa82W8PRd605Ub7FcfyCXD9\n8D6sf7URkmA8oECpXS65w3YMntUHKeEDFy4DDUp/TIz3ho/GyNgV0oE9dF3Z\n5A+GRaWydXrzpZ/nYXmlimmZ588+bcd6A4hMoU0AFiSqy4EAM4PNvTITJ36v\nhQMY/eaz4Puui+5CsK0h6WZQXdcy6UrZGXkqAFs/vx0IKmsHxoeIkH9IW7RJ\n/Bg4dsAsMSr91sTItoHKjeL7qNj3qW4HbBj6ruC/OuxGmzNIrnoqxz7wmhb3\nPd9gFV1pttD7L5TvIozzSnCz4yjKgHdwczT0PpWUezJY+E6x1g0UTBc+rACg\n3I1dWmBuQRVi03lDRV6B/QAD4DJghTxNwh5OOankFBVqjC+TdPFZeQZPm29o\nGNykVFtlEzmCSagN+XjHAPmWVe3cBWyQZgrrPF6E67KEQXG8ejbZ88Oco3sJ\ngEq9aKYqysaS/GUUUZPHB1V7mpJ5Fy5HB7agCOwrgociqd38aZ+sW0Ul8egj\ngC8IU7z3gzMcg9nJnL7HPY4e9qYfooOEBK6b58/jYZJrVCkbjLR9HgFBCPJM\nXAMPrEwzjX7bUjrL87UClGLd+RQDAl9npRjsavKuKZ6rkLqwpQ2TciBlKjXm\nzbsw\r\n=+Tc8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHCvmxaTBsL+/ftR9WuROaqhhjkwiGP/2ZDeK2o/rQSoAiBW1yyR5gZz/tf6k8Ht9WBIM4+FAlDACXOb4hF34jJ5Pg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605541801-91ec3a94.0_1605541913102_0.6618675177877149"},"_hasShrinkwrap":false},"2.30.2-next-1605541843-67697d90.0":{"name":"@xdn/core","version":"2.30.2-next-1605541843-67697d90.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605541843-67697d90.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-BtXw9BrHDbxyA1Gj+j4g0Cpn9fGzaV2cZFpcH6JAbBCYCwlaPV8hXVYEMORZUJ2aYlRjUNQMB/NJTv9mPO8hrA==","shasum":"bd00184b26ea69ecbf42637424a3400c2b40792d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605541843-67697d90.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsqBFCRA9TVsSAnZWagAAOHcP/0ugfKehrkeUEbYM6Odm\ntxwRjmt6HrPaM6h0dW1EsPQLF1LVCm3WC/eoF3R8BZiJBKm6/s6lCBmjQfSd\nJ0hRO0JA9gl8KQ7UsPhPmO0gnpqnuSJK3WIiod9DB4q/oK3b3XGPRzqnqN/F\nN9ofKD60a5PGvEYE++pcHArzZqKZtOrN4I/NUd1Mmc9Naz5vrykd+xCweq1E\npCsxzFIzl6kx6sp4YtjGmiDc06b6FZ7Cuyhwf8cY6d1sSuau2whYsKOAVP29\n2Q3/HLx2IKhj9dNQdlqE9n+qlc2+2wyZnvWz6m3fij8Te0TRV0NJXZCAwuvL\n2ftlgMWYEqok2MEtprk+RZPHYS9pnGNOkfDsSD76N8turz4RRZ5bFCOtrIbo\nUEbe5S74oxdkVs9BDvPsyjzXo9sZLkGEeTzq+wVvdf8F3bJOpgxTB+TrFXOq\nl43sIdegqr3rAVbzZKMFM7EnmkO3xNIF571N+vmKVB+/KfWjh3eP1O/vC0TS\nSlyh7Fi2WdVKauWo1ovGUMsd8/9yXS2GbBVLCPjiK13ZTkkEkAYr2ag8tlaM\nTiLdPcU+JmTo66Aw5Qpz9vth7RNNvBBJWoYFKV42g3MEB3fimR3y+j/hvrOA\nZom8fRZ2E00GhkgxcHGtz3fnHOXn9rmqr+YSC8F/Nm9L2AMAnIPYOdop2vdq\nkQkF\r\n=E2Rc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGRN4o1RJgP+XJlkp+zQDpEHe2P9b8eKoQSDrc1pyYP9AiEAv9cN6Fld6985rXCKdDNX53nFIyMcI59SLiCwNwW9CKc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605541843-67697d90.0_1605541956666_0.33407125936643256"},"_hasShrinkwrap":false},"2.30.1":{"name":"@xdn/core","version":"2.30.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.1","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-52ypwwIY9l919C6Q3XOuFViCCgM+G034q3k4XpyatGmbZgXAr45Kmfdbs0f67cpxZ/CfTnJ/OEEDqOYJAfzYAA==","shasum":"96c53ae6071c79e61a83d37e4545ff8f1dbb4e7e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.1.tgz","fileCount":169,"unpackedSize":635893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsqMACRA9TVsSAnZWagAAxRsP/R2MEiSmrNCeCL/DDqS3\n96tSu0It1ljkfhaoHenqGvpuV4LeGsOKsvt+2s6s7uAiNlrpd7GIk0nHZvqr\n/65FP74E87DZWB+xYXiGvK5zGXItVcK7SkrWedNhQ043X1EnIgES5PyUQ/0Y\nXZ9nYAQFbVadWOeu0MU2dmJlhpBjMEw3EppuO1rhL3+pC+p6vvprC+WS3Bhn\n2kxXrj1Ea/Nf1yIU9yEsds6QfqZA+N7fsNM92etOYzPt+3Qcm3wLegMcErRZ\nWnmx6u2dNFYTmWFr8KrWzuWOt/szR8Tcjth+DPzKPv6cxbifHm8jy2uXhFnn\naKgDCr4Qtpa3T2u7AJFdd3tONZT2LCHWkVkSLt+GqBuhkntsZi5Al49LN2sr\neXX6UAn4UIkRoZvFEp/nf9ar8sheZqFkPGl4CTdk7xWvxe2EeJ6gm2cAu3Qo\nLqiWPboQ5n178b1N/tEk/YZBYXkRR/33lIKXTbD8t2fVbv0skdDCGXlCc9iL\nN6QIZpIso8RoDK5HdEETfo2tsyldVwQoVjXFoK/5rYJuqj5Oe4gxRiCL81c5\nLwx9psqwyvG0fvsoIXOUVt94xJqD10A2bRunBCuCsru7vMlK0N9z6T0Dzd6c\ncBrKdSXJTz5RiFuyYykTYiWSS/ANx/tj6s351QNwxjJHNb4mKPPZz6od3Coo\nkF/s\r\n=nbew\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb4NAJEkbyZ1EeNOfwW5AlguL13VYQt4LaQkaD+4Tm5QIgRt1RFDiZfLHLXpWS9K4sbgg7MFfRGf4mK2xUWET5O5M="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.1_1605542656334_0.8673385442907071"},"_hasShrinkwrap":false},"2.30.2-next-1605554612-1894efeb.0":{"name":"@xdn/core","version":"2.30.2-next-1605554612-1894efeb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605554612-1894efeb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TuVX7BSIaWHwjTMWqg2qU2YUWOyjGAzpPI7Et7HX0V/JaUybPDZOC9jcpK/impHsg1kO8mQQ5lwAoE0AdKD4VQ==","shasum":"7573695b54003ffa391cf95e233c353109af0539","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605554612-1894efeb.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfstI0CRA9TVsSAnZWagAAUL8QAIU7gzYH8e00DOHaLy4u\nmT8kO+E+e5griBCkhU/l/YYPjd8Z82cFsRvFbqRuLnJuQV5WTP6a5A/C005w\nvU4KV2lUytS2NnNrQ4sru72bPgvc/+5HtXjjr6a6i7CRnU3UrygriBdoOEZn\nDyuyYAALz8BdcLvzwGX/1NSVRGQohBdEc3Lamt8jznPisKYobG0DnXMRrjIg\n/L07wDlVUX/PcRdWM2yAmnWbHVPsK/dUVZewekYgUY8IxBjp17D/tYPIbEGG\nNNREYgxKdTLOPyMW9nDHb5rzlLz9eQiCPifH7p4LPEJOFRBDTIk1e2ICPX1f\nYettCeIuv3DBI+G7au7h3MlBqgKoyvFAiq6YdI+Pt+JEeHBJ7g3fegj5jR6l\nRobniKXSYptEirSVrTbsaLr/cBDf+k+icBQDL83Tmh21RCdlu7nPZpP1oq+I\no1rZ3+c5Rgh6BfjaMd6hdoKBvkXOPcFuvfwfCBdcZWwLDEWkEOKzczNDX354\nWjIaeU4k+ClulqJ7CX9cOtWU9sqh9zlIjYBUB6Dv3ketUEYOpuC9j+MbF6M3\ne9A7izzWScxqedUnNExDE0zeeq1Y/bt3AwcR7YNlRlJgKSwGxY4J9khdr3Ex\nXFfDxEAj25bahhmiGi8lql0Fp65WM46pOrLG4y9tcqFO0fnwUsoJsvUygmos\nLcII\r\n=Jr45\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXsqvkqI0aS52HCLeCNAyCsc+Q0mHnZIA86JjRT7VhaAIgak6TsjVy9H3I3n0GJp1TpM3EpQTuB6NxHfhN8RXSLYQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605554612-1894efeb.0_1605554739239_0.2713341255751833"},"_hasShrinkwrap":false},"2.30.2-next-1605570951-07f53782.0":{"name":"@xdn/core","version":"2.30.2-next-1605570951-07f53782.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605570951-07f53782.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-oO7UJVG7H7cDJUd/1EjqHEasBd8+LYw29VlET1vV1TD6KPqfz7WApoDkwedwt7x6ipzuTY5ys0Dpc3uq76R2AA==","shasum":"15aca7bf9feadff67dd9f0271bae00fc5c4602a2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605570951-07f53782.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsxH7CRA9TVsSAnZWagAAXYsP/RHsTFr8l8CAJyV2LqxY\nviaL0ReTC9XexYy/7mChJVdwSsbkhrWuTStqpmG1K75gZG74rQLFaJafw+ff\n5ZcWY6rPI/5wBSYiJo+tArBLbYaicj/TJRETzQTnv1en/arNDtmyS653pOmX\nTlTPzg2Zb7FMhMlC6RJVa4E7DVi8qOoDy55ll9YTrquGyG64aKYfxG7tdJ3L\nhNaEiROJh4fPv9OnzFAPhNX+iGVCSobLhD0VTvC5his67AZjOBG0CfhluijS\nBVJgLVkC4PXiCL1YfmDxB0sC29LEA+tmz4JjEnrLjblqkbz3vuErupM/bpHi\nda88c/bQNotXy0JxYIlYoF72mRRHU/LAQawjUOLKZeyTbYED02whupwonErh\nr2UkKc1l/y9sdzz93AsqnPp+AxMn7isp3lf1xZBqqnUMMPN2tBXGds3FsqGn\nDq63DBTuWASObA+OiWqnRwK4JbXftTgT8M0SkabzK27pXOW+Vyq20tbYr2L5\nej6QI0SOzPCat92I1M0hwjP21GQZorRMvC86QZrjG2nMIdET0Kc6S62BPZSv\nu7QwKzOfUMNREq/hBQ2b7PXsZ4W5HV9kdj2rwVqToMuI/Jf8Zpk7wiYDcfBp\nhqWg1/9Y17bOHtnnoqneY89uG7NmnqGjoRZameHg8HO8nQO5amRFnGWte6RL\nbFww\r\n=klyB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCW122k7Hh3rvTZBPosy6wGUE6Y+aG0OgxZ3w6qbIxzdgIgdx8B/5c6is4SoBqWHd5NshdKaVw4X5mD0SXSDLSaVto="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605570951-07f53782.0_1605571066390_0.781690891677624"},"_hasShrinkwrap":false},"2.30.2-next-1605600878-b2e914e6.0":{"name":"@xdn/core","version":"2.30.2-next-1605600878-b2e914e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605600878-b2e914e6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-N6o1HDzdXegIaR2zEq5UmNjsKvr1eo7dQLU/4m8VLn2E2SLUlXmHCSsLg40baXi0sAWFlKmiWu4Ukry0u/yqiA==","shasum":"911202dff6d8d920fc58a094a020486a42ee21ed","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605600878-b2e914e6.0.tgz","fileCount":169,"unpackedSize":638285,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs4biCRA9TVsSAnZWagAAFr4P/RU/eBUSfThjgMqyADbF\n1HCT5+bw980jgAqZ4rWckKB3HQ+XHGWl7SGIrH8z6g3oDaaqtNKztqgMcDm7\nxbnM1Vw47yuXCy2scCnFI9vhFhjdAyCT8Slw672qeerPrABexMKuRgAnNtNt\n3z6jlOhjhcMWi8IzOezZhQZ5jc63bNVZ4L2kZeND2rYy+FTKRMxVoHgax1Vm\ndTrWuEPckDOzNnG7CFnr2W0PoM6LcFiNpxuTMjMPavNZbix5+ehwfHb4P3EL\nO4xAS2zFU/ayn9dJY7C1qb6sB5ObXlJLOZtwZpMXrz/mrdPvugh+av5+O2Zj\nISE+FApw/CGzKODx+6Eny37bMIkvXhjvOoCuKCWH+22YuSRUNpmEhx9Z8E40\n94jw/xosBlT0XXywC7T2iRes7PqBEQOzr93UXBfJDheJ5Bm6V6+a9ALCtV64\nWzqn9x4GnCcVUaWXhtJoj5f8M73ool5Qrpl127eNB7PsLtfqD3QCQzFDJFJQ\nML0/sFXqGCTX9sDzThZjbGT6sYRg49GPnC7ZDqaIWeL3RSPY9+1EcIrTPQ0K\ndK0uu0qxsd0AHY0y8Yfc1+L5Gh5vdPaJW1DeMib/X+nsxFBzt98ktiWZvCx5\nIDOacuSxhe9V9CeE6/YgdK5cR3pI9KPZE2PtjHywW0KuVZSoYfIPK4vVVzR2\nLAa7\r\n=ORUG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjLjhLiYwhisByJAQ1EVbQITdN3p3EQZkJ2qbpoE+UAAIgL/Qoy1I1osgKGOv2WSdXUDaUKwh9AQZJZCUonC53kqY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605600878-b2e914e6.0_1605600994141_0.6836106383004044"},"_hasShrinkwrap":false},"2.30.2-next-1605602353-b2e914e6.0":{"name":"@xdn/core","version":"2.30.2-next-1605602353-b2e914e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605602353-b2e914e6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8LOFu08VLoPa/E5MHxpGs7qEiZ0f++jH5Z+8HR5obpiLWKICPBkcPMFCqCDugPTotJwPfEziikRc1TxbqyFcfg==","shasum":"0b50687ee11cfc5bef1acf4a6e1d81d728b5840d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605602353-b2e914e6.0.tgz","fileCount":169,"unpackedSize":638285,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs4yhCRA9TVsSAnZWagAA9vgP/1AUUQgv0aIKfGr0WYWi\nu3cAd+4Y5Uzr1S1zoL75AvOlZ/7nvZVqh4QcNla1CndYZF3Xhdb0znFtKjzY\n6QUlhlJepWum4jECx9nAJR5ThLyGbJJQrm1MBfDOAHld0ZNeY4TjHRK3FpVU\nu5hGeyAWq/TJjkgwesBOIIBDo1huy6BuPmo4n6jwU5kRwCeXiXBRTXXkaxXq\nbbrvwPQKS/SjNovOfE2ucEqnMSYXPOx62XJS0P1xdxvRljSYL0VmEHZGQKVn\ndR2T0VUowQ5siJe5ktXHMB3hEqnwChW1xlgrbJF53OTRN9Qrl1oNC281GlhX\nx7pfuVvYINgxa+kppBdKQhi+JGv5tcwsFfhbOftswTrPwAZ8qcUWTBkdFaVd\nWhNVmbOhWLFNTDLKS0dCCHSIA/WjCGp42WS8ck8/WLPRnQr//Sm1KWzButys\nXn2Y8MJn3PEVuDNGJlLEyHM9lF8xR/WU7ggpp1L6t+/0WjQ/3KkmavNMdfd1\nQYgAJpm4whq4z9svtsDQR4b4vf/b8HO72/1qCcxblM88crd29v+BW3MqqF20\nYCmrwkbLPgW6MZMlt+H1CIoESTx1lPmmJggiJCrp7Da+VamwR8iij0IdJ2l+\nGSYQBDuWNvy9/KJDgRvV59evllV7vHEdGIVjFuMbj13ZYeUO6oIQTKKHm5bq\ndgSU\r\n=XxRS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAapHOcvLSo5lTQd6ywTzkD27vC5KxbMuBEJxLSkmhDmAiBDlD/ivJPckWgzSnSxn6ApxJt+0Wa+bAAx8pTF8fTspQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605602353-b2e914e6.0_1605602464832_0.9341301649938372"},"_hasShrinkwrap":false},"2.30.2-next-1605604141-67697d90.0":{"name":"@xdn/core","version":"2.30.2-next-1605604141-67697d90.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605604141-67697d90.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zYNM1Et3ztM/dV9uZBTKyR7j0qMHvAkY2ImctE9QaZqanr9fp2QMysVF27MZtyhvOHyniAtuLPiYdUHW84jeFg==","shasum":"aba62f07c5ac20180fbab5598bf93158ff8aa624","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605604141-67697d90.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs5OtCRA9TVsSAnZWagAA4+YP/3X/elnzlZ/I6rCLpqxv\n0I32EjeC6oStu4ve+AstC+LGaI/QaTp4leVLBdeDK1660Km4HEAS96KuzAvy\n/Kpi3jesjygHbYzy22BgDNIavy3Be9jF+dy62Ca0Agi/yHBASoqFvl5EicHv\n1f8hne/ZQw0OWZCrjsXHOc1UPpp9AQ4mVbt4iAbyoyTuIX0Pz7v6Tp10KZST\nsY1ObodFlLFX4vrLxCqfixuIFKgqxUiRjWTSj4lYgtJJzPeHQ4NBK9AFRIJg\n2S7J0tr81enESieF44fnsru7f1vC11lSfYchqWmrLPCyv0qUUxIye6+tuVoy\nY2mNPeslRSj92bBkQaW+B9J+XA0emVZ3sYIGlkaSDqe2GW9bnmKkQKA1gohW\ndklWWpif+HF/PnR2zv5ijKjkV1+WuhtmkE0qFEHvA2eV9VA8wHoHsYq/+4bM\n8UjdPRXE2v4iSoJvkHCiIkP9IiL9Why2/MiKMPLFso4qyxG6buP664+JR2Qu\niva+sMbS3DX/GEgW0EmoVYmbNwNLYna8To7/R/iVj/BMhsJJ5lw1wfkwLXc6\nwp0GMmnuQMWVjitazWYM/0KVDd+cQ5QYgwI9lh0sXU6gGxo9pYIGme6nsflW\nAMrS96TNzv/FdfZwT4vDLsvwlXtklDA6mvWEDWWkAY1xH1zgjBKzUe2eCCet\nJhUx\r\n=tbXa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDogT/cCOt5eufd2sCnsXg9djWCZk8HF9HuqjmZ3pHBMgIgVDbacr4hsQyRRdmzrq7dOO1Lsv6Z5gt6Aask/MGjMxI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605604141-67697d90.0_1605604268980_0.6459542964231495"},"_hasShrinkwrap":false},"2.30.2-next-1605607058-67697d90.0":{"name":"@xdn/core","version":"2.30.2-next-1605607058-67697d90.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605607058-67697d90.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/bKOsht0jnXrS/Jj+yxTMPOoPW94LY4Wa7cdZ1b8CNkjr9ivKZ6oJCGYfKY9WsTQ390jMnHkd2LvN5Usij0CBw==","shasum":"99c8425f022a39ce586c7ced288e7676459e08c5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605607058-67697d90.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs58ECRA9TVsSAnZWagAAotoP/0EkmXfECqRIjRoklnXc\ngfzK23zSHw2QfqaqJbETY9duiVY4qmSBWPnvs64410nl50EGnd+dC11zHi1m\nFpIvdVtQtX2F4stir5Bgq09BlFSX8BlWJHkOYnawXKR7GXpQqsr/9HgkOd0r\nvfoM/v/Q1v+VKq9+FTwADkKAkM33EDmKXGItV5C+9kLvO2ol+msvRNxcACEF\nGeLqIKBkaXFc34jzMMwTxsJVJwlbtaVvuMQEAJJ3jLa8O12P8iiTjqf9ILqa\nb0DR9SILG/58jF+4S0t2es6llp2WMLBdtp5oCRlGGaFlTapEZG9RNeOAJNzX\nOJ4T96PGT+0f2JdFcVxYRy0AyCdtEznr4FPyH+byKKW4AJAEEV7FNxjwpdQI\nZ8gB3BLd3k+ad5miqPjBraMHFfU0UiwrbOTsdnXKo18WIZAlYF2uJV4xE8mv\nd6qd97ZqwELy2Tpv+93s8v1r0mj2Uj+aZKc4I+IVWaIAHHug3x+uIdBkpz2l\n7WiezwT4g4+0MjWZT0go/fVIIe1ciEwbE5hH4gVNodGa/TCCZJb1Ob9sgvEP\n0uTGGkDH1gS51mMgzmfWgNKAzNIQdMnUoI3ZeFhElmtzHQGH+hm9WoX2I6Qk\nSBYTHs43Mpfc47pLfz1OSPfZjJq6uEDw0LBKrw3XWBn35t5h+p6ncsY1Ofth\n4Qan\r\n=19ba\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEbqpMKgR4+piOKYYnpmmGwYX7slO8N9ngvmK0A8IeY8AiAnJhr1C747df7u8nTsztEIRioQbby2So7kydFXY1VSTg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605607058-67697d90.0_1605607171992_0.4746832712113942"},"_hasShrinkwrap":false},"2.30.2-next-1605608261-2472e6c9.0":{"name":"@xdn/core","version":"2.30.2-next-1605608261-2472e6c9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605608261-2472e6c9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uMFEhoZRJJOwpK+mWK1aA3qjKW9FvRBSQ8ZpzC3c3koiKFMHHIBf8heM7xS950a7mVZf0vCkpe/J6fySET7Jig==","shasum":"5e6e868262206a0d3c331cef58011af8eae51a97","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605608261-2472e6c9.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs6O4CRA9TVsSAnZWagAAGwwQAKS7D8/TRIse50+dOHK3\nbPhfRD6mBw/iK2MQY5Ci/jxae1RzxvgFU3WUqFTVN5MczsuXzFM7KGhzREbA\nkSqo3XECmJcMRp9+Npk+q0tqwkyPutFfS7plA9XMg57nHSme4RBAIQTn4zGe\nb9Wur6kWRRhknwqwU4rMJv39WZdm6W2SGqADaJRxLBaMW+VpsSGu8K/RcXac\nVVl4fvYSItduDQn5OO3x1DavAdbSK0QLN9KjGbzTaA3SbbwKFeXvOvhVaa76\n76+IJJz/kYqVXAmOKyGFu2mGJNSQWBvoy/tjrLNI6FtqIg/5Y6mnaJFheyl2\nkU50geNmuaPLoX3omvZzEGfWuXnKO8K1cwXkAridfvwh0mCKdrpXANdfPXGH\nmb/KLI4bY9c9uWn9mLYmntjaF+OsY/PeYlr7b0LMEUUllr1BPubfjlXn1Vk2\nmlzcyGNBhQNtEUuMm6WrqIXuUMrizdYaudfStzMVKr933R2qG6FKqij1Yzrm\nX+7CLu0geGRhQTSE3hoFAqaePuPHM8c/Co2oks3wQXBSVft1uwNMYKxqNzjv\nq9ccvMr6hKlSQarmhBU6F+0Cud0mQN6vHKN/FrxqbPwHfS6OgnOOjrcyr5ns\nLvc7dwto3tfxuPO3drwVLGUtcwdiKHfrdHyDUqL8YUuBwPFLRp/GjK/o92rm\nYQT7\r\n=B5gh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2ezs/1JyNzKo33hsqWQYT+xHUXH8FBUZyzg6ET73RlgIhAN+RVvPFbgV7IMBlE1c4nhoivfaT8Kg6/+p1clRp/ScO"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605608261-2472e6c9.0_1605608376192_0.1542965296054042"},"_hasShrinkwrap":false},"2.30.2-next-1605610237-07f53782.0":{"name":"@xdn/core","version":"2.30.2-next-1605610237-07f53782.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605610237-07f53782.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-cuPL+m9g4nyhXZe3Sb6agS1pvKZrTCO9vnDZJo8GHVH9Nj3RhS2QCHL2s7qy6tne+UBrGn5NaALuBXGPx+d5Qg==","shasum":"0350d7eee58c59af10520a998e1759dfa5f7f07c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605610237-07f53782.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs6tzCRA9TVsSAnZWagAANw0P/1l7okOcWRXFCFRS/Nj5\nULFRd8INj/75z2Ard4VXFJpLOiA5p6tXNtEBGUzenuw/B/kv2FtoGAmV9KPB\nq7FrEhNueNZ1XyoFoYwGwEWp1DYJza2W2LwbY3MHnjyTouvxAFrlU0J51+Sk\nzqgu+4Z+C2jUjpjhtGJyQQUI6Cy5NatErvaaw9h5cgAozlGkMRv2+vfQKx49\nvJ7D7SBj5pLQ6L3bShEpTo35erpuVA8CtsIpxjGbaZBzguPrqljSOD7EXvlG\nNuFTMedKEjaHLRNwWYc0HNEuHOur5N63AF8Ysb+wz3TLFrHyTADo50lAxffG\n5/xf++6wVo3OWM1Q9YalCO747JGWEUDCNqA8FmRycgWrmEC53q6TTzFCz6TH\nxn1wNXrQzH/PXA4NA/xM2A/dFNdH/mcVCD1uSDOk7GB1EaBokQrsJ98TJBHR\nwFJo012+budvALuFQ8GQS4pFSb2S8LsCt0eBay896NAV9zrwMG2DtehO0v7y\nLaNHHlM2Jw9AP0BB89R3Y3NzPY3nIa2gIPpqAZ3q6I63QHiA+M0Yz6cl7OLl\n7eVf4jIVmUhLbhS5omYtsqzpGn2/PieKWm/cMwGjY8x5YW/Y8F8QHCm/GIDi\nm85FRH7d4M7CCAdT7vSsBRAf4cYxkghL+dUP5rGGNWSqG43gcO91DGTO998/\nrv65\r\n=1BQe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEZ4B+RrdZbXbOSYvngi6zNE5ZaIg4oubgB0FH0Py+YsAiBY4i8uZV9dUzcqlDntI2F9nbUhm+ysALMbdfDTKCqU6Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605610237-07f53782.0_1605610355189_0.25297487119697815"},"_hasShrinkwrap":false},"2.30.2-next-1605615693-16c71828.0":{"name":"@xdn/core","version":"2.30.2-next-1605615693-16c71828.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605615693-16c71828.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mzAOD8tzeKT/7xH7ph0mAw9S4OgtxQLFEw+NLH86Ve3Z1yzM0S4Tjka44k+qNaO9Ar8vmdDNls+cs/qFHxr4xw==","shasum":"0c9ef73b91570297088096e928c6894217f2cdaf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605615693-16c71828.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs8CnCRA9TVsSAnZWagAAG/cP/jvT7FOh1MA8slFdKqAu\nUyCFOMrkZP4ntuZ26COYgfIXmy0AyNgfIGV+EBME3jRQNfj+8Oj1gJt854mR\n4MJE0DJqJsXROf9Yv0M+ZkW5/p9eIfYq7DmSZa/gSvkTR0HIj2J4XS9FPAWc\n0ao9m37E6I+zLcG9GpJhaU6FUlkl55aA2fXLTXtenLLwDK9bsNRuM60V+obr\nlDJDEys3UpW7PR6Jn+Gv7dyDNm9k8/z/ZFz6bWjFWOb6Cv3TZbfO5r2SPYWr\nSdbzCvyaFhJ6KYAH7oGRpda6JGHMCxRAJZ8HjJPq/l4us45bUy3a3pUCsA/t\nx4mDbXNVfpTtdRpopbDAsE5AvGGNT8P/bgAI3omNYH8kcKLFLfgZ3MyVNKPq\nAcSk61OsDd26kl6XKGuKnTBBCNs/uI9F0IF4cflLMF5wJ8iOAoRB8jvUL82d\nT1+E2QSCsD3lEpfSy35tbaKYpeTFprkMh0CY8wdlhYKxdDeG1tOG2iLTZbXC\nkTf5XIWXEWLQXM5VVWzgBrBZtytf6SRE6bZsP6SIRZu2PdRJKKaChxB94/Ab\nGs+urhFQUzfZX6CoQyilbCxSI2ugwXx3WiflHuo6Azi9UulbpIjgoJd6sUJg\nfN87ElSAGOvNB3kIHrFVi3dbKWMVV13HrwuNhdstXzJk8EZ+rYGzupFlaVwL\nRmfK\r\n=ShLn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwcZ+BWfr6aIz8ya2zh8KMV99hyq4RZ73QWLvKPah44AiEA3yPj/15WUJNATFDMb+Dk3lNDEahlqU6sRuvFgwrpXys="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605615693-16c71828.0_1605615782877_0.5916141681768052"},"_hasShrinkwrap":false},"2.30.2-next-1605621812-3186ddbb.0":{"name":"@xdn/core","version":"2.30.2-next-1605621812-3186ddbb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605621812-3186ddbb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ce/qLPrE1GHuJEc4o6dIAEDkfxnjECKCYH46lhCWK4dihVjB2Gx7bNMZMWUWDn8PO4Jx3UhH0Yrvc6a7cAxYfA==","shasum":"a29753f422bb29519d2608d33cf58de0bf5ba99c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605621812-3186ddbb.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs9i2CRA9TVsSAnZWagAALDgQAICKPBRJID6pBT2ZXeZA\nEXZFuDnhG2DokqZgPexcwdJY0kxuumC8qyXVSOjHZFdNB6nwHQ7Z6CBBo4Ju\nbes8eXQjdAZjhF1nJIVSROOiGovXmDvkQ2xZsS479KOkzI9FbwLd2IdV4X+Y\nqJ+kVfRCIgtgKK9CnGK727mZTqtlcVwe2NKAQGxXp/DgrCeo7uPEpCI0FYjB\n+R6Y7t1hvhzf2VagXLG2/RcNzJTuUOO0zPtf3prAdXO5Ev8vB2MnxZOsifoZ\nX46OcMTyGrmRCNlwPBkGAydnx4KDVXE6G9Y4hdKzAUFqhF5q3b28dnrJH9/z\n0AK+Kl0nySSe0FzB4Osc0ri9PpbwG8THZ4QgK4/j4Fdep7Th5S1RRzImC/5a\nhjktAmTmbyppefmCaERcInAbF8gJiP6UQ/DIip8eEYneoEQBqpePS0jldXoY\nbK5fSXwXyRpkMlX2cs/FdgD519b9K+HfnsoG0/2LInBJf2r0Z8vzFOaVkC4Y\nKakRRSPtVeApUw7pxDQsZPf32B9G5Utxubz3c7mWjuVzASJpvirFsnR1iL1k\nI/Y/YRbzSCpY2eTt5lXflVTfjYrdOCsVKbscjAMCm1vURfF9LA17aqBrsfc9\nCNHUsg7cHt3Tf9LMbkwM5I70f2V0LQHUR6+bI74Qs77jHvpSXrXY1x5F7259\nyYA2\r\n=VIa1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHXI3J9KrJ7kBUrCqiJY40H1avfAilxFg61e8E+nYH4SAiAtFGVOhl6ySvaL1/okfposJChl2fD702sGgx+HFZkglg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605621812-3186ddbb.0_1605621941872_0.3427192192553028"},"_hasShrinkwrap":false},"2.30.2-next-1605624535-74a081a6.0":{"name":"@xdn/core","version":"2.30.2-next-1605624535-74a081a6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605624535-74a081a6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lnIA76UUprvFd9hc9TTklccqLjBQgMtECrW99lsc1g51IO85DEVouAglNof8lNo06y/h5PezIWjMSc6bk6q1vg==","shasum":"4d27d0732fc2a7518b67a4742b2fe81e8478e3c0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605624535-74a081a6.0.tgz","fileCount":169,"unpackedSize":635905,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs+NSCRA9TVsSAnZWagAAvt4P/2D02VmZFPFgGi3DU0M+\ntNLHWFN/2BLfIjPXRlSpO3SukfgB8+YD2KxsrLk1cgvYV9jC0SPvQFL+SWgc\nBwdx+ZbWot/IuzCpM+rI20JRH1TEXfk8+tpSQUN3yPryTzaspD6CdKVSvWVK\nO+uZilS5N+HE524L3Vjt7ELBLzQR4GynALmX1PVqZieNvEqB4a9KqK1Cc7Bk\nXwlzRSmRyNtnXaRM2i5Sr4l4pGWv0mG+2vZH4nPFvC0DOdNSQ6/KAUqll4wb\nutMEN03ugXApQtmYQRxDQwgj0XMgtuPjn1ArNcBaaGMYqfA6eGCqsbnnT48J\nu5hbRhNyKTHFJKFqm7cypXliyqueAqlEQKXP0kjo1Su2ZTUfYK8DBEcvmDsR\n8kRquf6Y2imtLEq0GcyHI/3P4K8dc/fwyxEPAd8x0OxOr5l3oFSChuVZh9xe\nsImLcQ3OF1g3uNnfEvr+5aUhtruBl9h3iD+Et4pbxsKudqpTxuCen62FxR0a\ngS+Nu6BH2s5rwhmqJLRANcxNftP1ugc/KzEkIBgERFN2plSfwE1iH9gzzt8n\nyUZbNZRsMiZNo9O4Q/LdqNS33vAICmA5lA6yHtVQmL2oHGdHMo8omfe1GPUq\nFOHZ5gGdpj+gemMZ450aSFrvhyvfkxM2x30g+OxGu/yqq9pVfVTfOluXZjue\naXOz\r\n=ylHj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGRFeevp5IyrNGsSvtDUFhsJdEqXckIJo3wN3mioDT21AiEAt7Phr0ZfzX9R9Cy/9v5Uj1Dczq5Q+d5Pn0VPvwOFF/Q="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605624535-74a081a6.0_1605624657618_0.7033464074899578"},"_hasShrinkwrap":false},"2.30.2-next-1605635698-d80c3689.0":{"name":"@xdn/core","version":"2.30.2-next-1605635698-d80c3689.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false --coverage"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":false,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605635698-d80c3689.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JR0Wo7B5mE4AePleW2ZKxJNB21MqhLaAUfczup+Rc6EPpn8YOzmUH11LlNzTuavPjrBifCeYssezoJgS3hBf8Q==","shasum":"e70376d1aca21309213f517700f95782e1777577","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605635698-d80c3689.0.tgz","fileCount":169,"unpackedSize":642836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftA7gCRA9TVsSAnZWagAAas8P+gLF6M4A4wSGWuAD4qU/\n8Dlvt+1+G+8fY/R3MbqJQUdZCLmCcgVAvacG5DxGGOFk5hssDCB9lodUMDDS\nmteSSwvkxtPq2c/7fSAFyxGOMhNp8UfdVhmG2rdGZa+clWrbVRo4Trfli/S0\nEKnYlbNJ9sdpbeAgK/uRXR0+TRpDwGvbV+0H6fYr+sbttf37BU5yMH/nAMR4\neTPLgrF9WNvmYzpT+MjC1YDa4imKrtWlhvEXbDbP4VYT1IT8FV1c4vEg7FP5\nrZ3rnZZQiY2psmXzwjRXGi3HHo/IQmWiBjvT1lvNnKxNt/AxWm/SQJ4WxrPo\no4o+zIf2st7hPTApCIEz3aK2n4zlHefVD3c440ZoGrr/4Z2pituWhCPQwSAp\nE8vkmeUg+Tnx+56z+7ExvFzxy1UkWqUHqzmT6C65OIKqpAhg2stGd0J40XvG\nVUabrngcbSi64/VoiQeQm+l4tkxZ5Xs+CHbhhVXuNE2izfD4oC0YwNc4VRK1\n/Okaj7/ACGlNCkBO1mwwS/f7FWDeC5iKZw0rh3jsUCZHMbkVnJKsFYarGbJ1\neJf5qrHoa2Toqi4V1sEGtSvm1zu7jqFpUkxjWRx5ZKI/L3pJRxZdkqX3Q6eZ\nX0r9HUDye346UYPUPJ/cScbCfQ5jLhWPdZwT1EV2yvr9rmrVgf3YvlGs/Xzr\n0aO1\r\n=u9E3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID3lc8m1WP8172rqYmPwseRwWyWXPS9/PTMf/xeIWAhdAiEAvE/WxleyowSSqnHa+COEuTxPOXr2aI+maNQ43H4iPbI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605635698-d80c3689.0_1605635807976_0.1522857736326808"},"_hasShrinkwrap":false},"2.30.2-next-1605646890-e41d3320.0":{"name":"@xdn/core","version":"2.30.2-next-1605646890-e41d3320.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605646890-e41d3320.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-eWmS6cpD1h+QTqHE/4KUcBxCdvCctULnwVFuxn6xguwlN0PBZRI+YCML0CRgt0kAnhP3pVo/BpDCoxstx6/uzA==","shasum":"c1153b3dafd028eefda2435c6eff67c0291c1a80","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605646890-e41d3320.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftDqdCRA9TVsSAnZWagAAnwYP/07641szGLsVXdZLmw1A\ns+Dcsfg5daP3EbrFxPZpHqlLpKulqdONRkpX2PqCWAuEBRQnCTbbCXAWUmVU\nM8kchQZEZ4/nDmgY4aN5PX7q6BHpbUc4oF4iDQq2+0l2vAmodm+GGH3+bC/y\nHUCJLz66xOz6meHsO3KZ2slPsxYSC2R0Jfi1nOCJwt4QW/oVjJVCJgDh3sw4\naj9x/vmceZ1aOzhpW5xILUei5kobV67Plv3XdtrM8dfNh3z077WhNFwAYlfi\nVWXfTM0gAKjVxBldBdW5cOqulpFmUHNES2X4dHwodSBNHQaunpwZ/BueSbVL\nXELCEMedX+xC/igObMr44wyqlBrRs+ZdaAcoj+fczYDFYweQ1A95TEbjKw6q\nvCv6HKBXD0OrAqKuIsc+w9KxHBP5LZQfpuS0+jfishuTU6ACBfpDIAL5GjoP\nBDZn4nrpIQIuq3dpCBTZVMa0Y46E731wueW9fkqsuStlbP4DAXoAkCsUqIYz\nTY6z0x0ZUIIlYuhr982m9O7ehOGv35NvFGOylPT3FPGyNifDTW35DkK2GnH8\nJHhnctwMjrbY/UnYFGTEQw49fjJQL3LyNBb/IaBQ6Jh0QiuplXO4K0UEFLaD\nKIP0iO+WWJgKIjZVB7zllHU4M5yR+mzSEvm2C516X0kYfkGYoPOfgqWiKkz3\neVD/\r\n=QRlM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFGAWSa8efHKAXVqOVkRrhuPsPtYps2c3XyPdGF/tBqwIgU4em2a+FWRtTdkD5bHImB5VRhvHvKcpzxbmIbIBEmV0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605646890-e41d3320.0_1605647004649_0.9172316744461131"},"_hasShrinkwrap":false},"2.30.2-next-1605649215-f69850eb.0":{"name":"@xdn/core","version":"2.30.2-next-1605649215-f69850eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false --coverage"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":false,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605649215-f69850eb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+DGtYpjeO4DQlJ1OjKLdM65rCTte1h77rYGerW7HsjsVoY3WYVMvGWFEpenJcR6E0wj7LFam4zxaXXm2ONAyWw==","shasum":"32889fe7b413c6016392beb5e570a1cbb3d1a888","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605649215-f69850eb.0.tgz","fileCount":169,"unpackedSize":642836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftEO8CRA9TVsSAnZWagAAOwUP/2FpvWwWmHqTjav5zRXO\nFcN1SK86PI8SbXa4uHRSthrH/Q381HKNGVO/mg4/EV6rpDAn+JfTXFmohX5n\n0Z7Lv2NQLSmJSK6e9a0AQIsnZAPYFyfj94huwVZAe5nuusdqaQr5tk7MfQRA\nEgpadPNoB+sU9vcVOUUXg5Ewfja69G1DlAYt7WWocOZ+nU7I0V0PAyoRK3lS\nQt4p0KdKrz6NoBWXNRiFslLdhCmULVgb9prh8/6QuKekLO01anXxFk2nT90x\ntKRJxqhlM+Sd87QI+Ye3eqDlfAZZY8mQZtUN0ulojaZmL5gmj6jkL9LtHL9Z\nggQ+//WHsGYcNMxaewhvj8a/XGWkTZxFfqDEtUfpYrYCcz4xhNSiKErIQ9Sq\nnr/Zc85dAYXLYLLc0namV+WIGiWV66CiQY92KZLrU0Dt3Gx9u/MQsGnRUebG\nLn4FFngtTU9uSV8TZOcVphrDTAgeZv1Ef9R8WUkn1W/kUFnyj46Gn8oz/Mpb\n3iGIOorS0SGeumIoEGbVO0Mh/7why2FN3AGvoGosP8tAa8HmxPUZqb17hKod\nuc1p0czpCtOwS6F7DW4qAywl6SA619IhiRwdWsuikskeZ7C1rmrXwRn5l0/K\n8mYueN790j4z824Pl+y4bQ5ik/Ih270cMmadF+qAUJ+sYBI2zXiQyYuDJOFF\nQhI0\r\n=RvzE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+wWgkq7qkpeTStub8TyPrinyFo3tOLQ+Z54tpnOhLIgIhAOPWNXfMZDJP1QHSc17Bn0cmezaOA4/I1uiJSXGYc+cb"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605649215-f69850eb.0_1605649339858_0.1465937820087848"},"_hasShrinkwrap":false},"2.30.2-next-1605651993-ef19da1e.0":{"name":"@xdn/core","version":"2.30.2-next-1605651993-ef19da1e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605651993-ef19da1e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lF6P/Jliwxrv/34ndNP1FT9bKjM2kucmspbS8flV4eI/q+h8eqYU9qqy3OHqHHYEZ0jJYbFzCjmIZo7IULeCjQ==","shasum":"9711625e9055a959134523c381625f5af8575585","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605651993-ef19da1e.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftE6GCRA9TVsSAnZWagAAM2wP/0WiHcVfsxdeM0JsK7Z9\na1JuZ8Mhb3FW0IytKtAFXQ9jfn0bxzfB/eLvp0JLwQFk7riyBz9jnHjzFq2l\nh5tFtOb+J4R+ca6s+VyRvujt5g11cki5JdqVA6qNvsm9xr4Z0F3jtOg5uzq3\nGjZOhWVgEfVHYr7NupJyq8pSnt+BJxC3qddmgcQ4IX1g26gt+m4roiXaT4FL\niWf7oVp8nvCl7Ubo/uawQPTCTugFMuAxPHltt57VnymaLs4jzOTqUwME4RAt\nZ/NqLQSAJykI0kBWt7IBbciq/qZH9HJo5LPLcB8nD2ujkH6bbjFU/CkcoNi3\n3FmRGm4TnGcdgIPHXcdu6s10rT/7u2dEzCemceNMEOIWmpuj6fEqfUsH9U/L\ndsrsP1WNNhG8348NdWSuqWQ3hFyogQ9aU+juBfqK9DefYI76X9AbKG6ZE5DF\n/grtPrj5XEKp38oIuvrGHudQcruD0VtsBYPuEkNKfh4wf1FVTzFR/E5OJvSx\nWHb0fLNqxsqr6iHe57E7CsB8xsDoIZHeyUZ4ogceCb/3B5CBM1qxS+FYPgPJ\nY4Apr3u21itE6VOA9d5pnz0hprdj88ehQxrHij6qrxmBHlE3eE4V2jj8nL06\n6VSxj7Lt061R7igVglWVZS0IYWY/PL6QyZv/nMKrsnHUqE/UWqocMaIKTVRR\nU4IE\r\n=+L/1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCY5b2q6ia+pcgmqSpEj1RGzBQDVQ1A4qFFDryUPtUSdQIgfWzWQyFAXYYm1wLvjB89uRzVXwidI2VOiRYlrptuA4E="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605651993-ef19da1e.0_1605652101436_0.05408034060675404"},"_hasShrinkwrap":false},"2.30.2-next-1605653534-34a486bb.0":{"name":"@xdn/core","version":"2.30.2-next-1605653534-34a486bb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605653534-34a486bb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-p20YfCBlLOBbwTBtma5cyYA8RCU94/NPLv6oTsBoDr8JfXi/IzGL5ECak0rCHCUXEpzYuSq+MNb24xfZGnKXgg==","shasum":"772a5e7526e736101560f3998bac3d1de459e172","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605653534-34a486bb.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftFSUCRA9TVsSAnZWagAA9hAP/RtBduiP+LAEuEyYE1vQ\nBGDoTMYtp1DC6OXdXxDqDySH15uOg6hoNI4XgzjLT2BUxJltq+DVxmgCr3kB\n4QIro+oVkuxEFG83kev61PJm0ZYlUpr9o4fundgin1HV3lWu6ODATLt8W7NP\nc0d5toNO6ByWiuiDiFy3MS5AiuSEjazhcV36xwA5T9Yaw3k+vy7DP/oRKr7D\nN10ZesN87okuM0SFXtZfuYfsF4gm18+rEenyf7sBXEtSsRUEeQoSvu5f4kfj\nTOoJeO1niToJtWE8ro162MRf1Oe6Ssq6L2ziY1UUztbCfHbQsgMktauES+R+\nYyVzxSh9mjgR3jGM0FUBop9IMPrHkHlqmI9h3D2QnQjEwute9lvGUR+3blQu\nfnAHbUUc0qjADQOUTcS88QkznVnAtYTtfux0LiSYaorwMcfNtV330eMvqnmh\nwoQln8rx6Fb7RJPKkLnBWc6Z1d8haR+JeuDZU4VJjq9f4RNZU2uWrl9a+8yX\neAqTWnqUfAjorOrvGtspDt5JGHPeA1w5max4xH66RJplq0r3Y2YFZ9jRzoav\nc25lYO5jPQpApxj8Ia09cVSVrZH3brPjul3iDgre5WDLXJctZE4YZHrQf2nH\n7X/x2ZBX4FHFT1H4bYAhDQmr9prVX1zM3mtSkBhHDjxt0l/jXChXggUNlaA3\nnHvU\r\n=4UQC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFbKXrQZwHP8nlPJO2Cc5Sodbxz2mIgWnlDmM+ipE1XWAiEAhgQJ3VuKHdU7MDH8IvlIv8JJHWfkbRZrAcAZVWTM/WY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605653534-34a486bb.0_1605653651964_0.04130268724877739"},"_hasShrinkwrap":false},"2.30.2-next-1605654781-e5459f72.0":{"name":"@xdn/core","version":"2.30.2-next-1605654781-e5459f72.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605654781-e5459f72.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uyo2KaepWjpsr/Wskm4nKKOGgLuZuF2GfJY1jPILXOiouxNsdLoDbeFDuXHFHbhrJDCma3lhVKUucimZb3sCHw==","shasum":"d2b246525b7fac22ca6aca115e3209769f828133","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605654781-e5459f72.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftFltCRA9TVsSAnZWagAAj2sP/RS3d45H/6CINsr/F7ut\ntBUyDvqpwwCrM07ZZedcu8N+vSnwqS58+1xWNcx8WZDRxQOkBKsel5P/ie0f\n9kWxnzicgvjFcWM5dMtlZKL/8o4getqevzxAeQQNUN+P/ITsOzaMaUyMvlf6\nMgvbipgQLntHj4yXgLjYzsSwebUKpxOJmOP+9PZs4k/zVNHMuyVtq2TioMAc\ndcnObfsjcG+KyvfkZGzIjeMvHiibIQh7LV2KcY2td8lJWI7tHsGcO4YvtLJH\ndbaZ9V1pYDOcPrBE2IjfFXyPH+QjAzJTK1mWXDY+oPo33YLHVWDN3DaJzF41\nadZ3Ouxc+HW6mpad+0TsbUeeJBlu0/H7WUPDy03+yJ/VGL415U9KSun71IZ2\nfzf9G4fPtDFEI/rp09zcNsxzM/zfpaK4hKVShhzq3/4gxafKFNwQ+cwc8Zli\nazzZrBTAgLBFhFupc+ennwK/jSyUoVOe7j+bDSbPM2g8d8PU8E1Rt5Jnhuny\nZSQ5Fr+QxtFFeNRSURQC/NHYHQhEjqXa901iDG/Aj4hcA2cLaObzEjYR/gN6\nLr/FXa3dRCZbnkgh6T7xzS2qwFnpzGSpRBrzN4pO18AmUau/M22RA5K7phOD\nXmetJtCGTqLm8dxsLIkLUEUKxut/hcjDBER3Wg1H+kyWNl6Bz4eSQp4bQEqx\nMYDe\r\n=ttgZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHX4ObBDvIVhUmZUS4aNuM3Iu2ygUt+tPa8GHWJuEX+AiEAptGHnV1npA5lmxAgYS2F2FgDP7UkxLY2lEs8miAC26I="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605654781-e5459f72.0_1605654892529_0.1428805316075934"},"_hasShrinkwrap":false},"2.30.2-next-1605694712-e712c697.0":{"name":"@xdn/core","version":"2.30.2-next-1605694712-e712c697.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false --coverage"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":false,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605694712-e712c697.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ld37VZ6AyWn7vpAV9/dL7GCyCL0dCtaO8GMI7IK97AZ3+H5HD3FrGVdtCtmm2/PT4zeDIkamtW1l0BpsUiwZZA==","shasum":"79b6a838082c717a664f36e0e3dcad4098e3531a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605694712-e712c697.0.tgz","fileCount":169,"unpackedSize":642836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftPVuCRA9TVsSAnZWagAAIOgQAJciVJEiy50z4FyG8/H8\nM7M2Y6adjLb9WO53gWLxaA/QAu25gYbw8axMdH/PH0Ml5MGUt5xzje6gx5ez\nivmRwSAS7lQKE2bhkDjU0taa5pJt/+0NEEH710jf2TbFKfrKT1ayQy/S22Wq\n7rKg8lWnk4qDir+fh5dThaDQSgko4AWjuqKz4067IyPvf5056Dj2jSum/FJ2\n8ZobuHpNTJXXMEmOFdJgvl7IWpeCJNgGTXGW5hd5Leq+6zU+vhB3dxy2tPGp\nhs8C4r/6nloFOq1cmFRkdIZHQmCwvuTI67V12czPik+RVcrmIBhQ2AeDE/G/\nnNmq7eDfiBa9hW88VwRCeFNEZwDOa5CF3ATPZNeT3UsEFf4ioV66mPCHY0S8\n7/3ytTZHobr6fWHzAOwg0cAviIiXLnowGPn8ErNhzTgkNb3YzmLq41zUhCUh\nH7EP0DuLhHEWRrcOFca17fB2VmlYzeAkeJmaxq0NkQYkQ05Q2ToTxFuuDzFa\n+ABPHGVJj/sWOluitDB4DqXokgZjtZxhhJmvGQ1Hclp5yal2Or8JhjDTpszL\nY842X/G+fVy1WdkvdFUYcZIrLroa9D8qqCSs7S1Sak+aMDYQ0aUyPtAgIen9\nCCfPAzofqDWlJ9xDENpL/BfCP83MnJE7i9ETWhTDVR1vlsb8UJ1/siKc8FRH\nAtwk\r\n=IFhh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFU/IfP4gtkfO17+e5nR/tKhaFmeRYMsyHeSsRsYlMN1AiAJOC2NdbuwFbthnUNR1vwplDTt1/1ahQDiLk9vTYzj3A=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605694712-e712c697.0_1605694829323_0.9492160175567312"},"_hasShrinkwrap":false},"2.30.2-next-1605697098-78bb4d3c.0":{"name":"@xdn/core","version":"2.30.2-next-1605697098-78bb4d3c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false --coverage"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":false,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605697098-78bb4d3c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IIZYsrpixICqyqK+DrU4SpBOM2VzZp5AwPIsKCpaTZKR3Zig8u0wofJ62HgBg6NH/W3U0zAFAPjhZ1KpkuiP8A==","shasum":"f4d6a267606712428ba1684ea27076956e632a1f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605697098-78bb4d3c.0.tgz","fileCount":169,"unpackedSize":642836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftP6rCRA9TVsSAnZWagAAVBwP/jp4Li1XA46wJEjN8BFd\nPs/YbWX+rFuJ1cfxg3G/PhQcTpDtFSxu6fY4pwwcfnj5WXM8BANQZDMCi6+Z\nUOUx3h6zjA0lzuwqJLTeLH2SRRAt5Lu9pkmRwyuf0EA3qf3iSeqtgYXG922u\nMcmgbJkf3VeSEY0PjEm/XHY9XX3n/R7QbOVvpnpoITXLuufr4XV2tC+JJ/q2\nbwagPUI3XpWeabto4X4JwvSLhd9MhJHKTks1H0hvMbOGraNw/8pweu+VVxIM\nhXAP6X8+/84/UObNC0DHOhZ2EYMshtnGLcK3aUDw9m5EWBURXbX2pz2ZOh3N\njpcDOJa7doC5Q1FPGonPSwZKA7Vwr3yz7vCHWGeVVV3BiT467Y6ZT06Xe5lT\nSX4t86Z6GeXCN3+P1SyGdchMF2jlaDs7EksBWL8xtNnno0MLuKlW1rWul8zl\n7es4g8k1bFwcy74AU91jc4Fiz/Lf2Qnfz7t/tBv4dg+voQCvKPPGzIwCV5kj\nXa7KUaLZpoptu4+uOTiSjYl1njt3DU2G69/+j32wvyB/wi2KNmhkzldSdLfo\n1gBN3jNeeUz1hwRJ6PIZysdMiBD/VOGAkXt7xpBXPtuXPDigzd9vbk8XGPe7\nu8BUSordTIYkKS0ebG2p6c8cvTfxUdpALYdquH0qmjAfyjZb0iOZZR4Pdk+s\nzGNI\r\n=hmwF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnRqUoI/MKef6jmorE5oLrX+Y5ow4aKAq0VtZUvaQ2DwIhAIUFFiDUG1ZwDNXcEvAvINQaaJh5vDSQnACiP+6rZocG"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605697098-78bb4d3c.0_1605697195279_0.09507480935859136"},"_hasShrinkwrap":false},"2.30.2-next-1605699483-b86e2919.0":{"name":"@xdn/core","version":"2.30.2-next-1605699483-b86e2919.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false --coverage"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":false,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605699483-b86e2919.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SKNuhKs+62xKb2CYtHVsZkz+xTDBX7FyKN7bT3tz78YOn0I0I6nCS996JAb+lJ10hvf+JZXXZkhq/VyAHumsrA==","shasum":"051663aed22a503a8fb791bba69837b01018b023","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605699483-b86e2919.0.tgz","fileCount":169,"unpackedSize":642939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftQgMCRA9TVsSAnZWagAA3NAQAKJcsX4immvF76rio/H6\nxzxexFqujvnnpnKeXi+RiuH7EXqEIwZP7nA0hsNf8258nPnDMBqbmUBR66A0\nXYVKg4O4FYPmuG3WyKkVXm/6JAO9/+Ci21fcVyX1WWo4rgdRaWjYT1WnfCeZ\nwBL76KbfJeRbac5KIeDPuxiu/rvonA6bZfy17TLiiee9LlXE8S7wlboce4sv\nvEUEdbO7+vTDngenpkBDf63/8P7NnbWpjUe5kByqEuuP3w51MRdfzUKjmKaE\niqy1aft6AchT8atGN85tziZD9m1WfpoqwzJLAl7gGm4Fdtv0rhOujuB3sLTi\nzyACjZBtK9qlYLWmQHs89ZYNjefmaXv/drKJKquIzb2b1th4CPYo7hLFwhIo\nXOI5eZustp/smalcamTLt0KfT0pBFc2TjX+dCqYD2zhHoPF12CFlEF9X3LWQ\nLoJIS62NItsqulOOjDkTmNaJgFvU9rmk7Y3XX8hRVnBUeAMmJunS1F/b2Apr\nAF5RBwVv4/x/roh6E7gju3FtcYpYd7jnu0/477uL9FgBPG0gfhwB4V5aD1Lf\nx+E4gC+0fF3KAF8900VXiNdKZlGCDccMBK8B/ipWp20tcdg9sMm2vjZjwuBc\nWTNn1kHmNO6pcSi4yrYpSp9vAgtmjbO1rlGK0x93nt3r95mEvW88/eoU4u/b\nYRBY\r\n=EXtR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClj653j85ZFlqj4g+U8ib4h3CC4dIAdV4yPpgjVYD6aQIgGYbXUEk2H9DmZWwOXCGYpsJnnV3nJQ6Iu2EhbHMpKmA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605699483-b86e2919.0_1605699595687_0.6217857491224648"},"_hasShrinkwrap":false},"2.30.2-next-1605709976-2472e6c9.0":{"name":"@xdn/core","version":"2.30.2-next-1605709976-2472e6c9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605709976-2472e6c9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LqhlWUoeP870f7EzZ4kKZgewqzVGA7eHxm3KhIbGwmASfb+XYL7e90WB/vj55eZtfJr7byvjJShkFrexnQgQWQ==","shasum":"4a7a6bb5e60d02cf93afbcd6d8b12f65e6f88587","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605709976-2472e6c9.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftTEICRA9TVsSAnZWagAAya4P/3zePuiptx2Mp+1f7s7h\ngBIa6iVwV75ixAUG4SEeaVWHtAqlUROXdcocFkoxZClFd2fANRIUNtCdovAA\ntkU4XdmCt3lQlo1OR5fdeiA4HHfvsYaH/4lvNmEqf9IaHtq1/8NWzM85W9Lk\nLvdTG0WzOpoRHBeJEPofhO7gbKn8fNwI/I5onwBjKGs71UakhgJAqWkh5rSN\niYevkaGp+iRW5Kny15y+XgAx3L5RN0RmG52Gy9BtZ7DuoS/HIkLR7XeQP3ZO\ncsNkU1TP53h05WB2xxuA1Rrpeygm/p4yoXIRiQKLCY1jUU1YuMtBWTXtpFbB\nsnb69GM5v+a6dCeObz7cWv96vVmj8G/PwqBac0Ul3e6lGOggRqjFN4Sf131T\nyMO4Ej6jKEXqSFlxk8J+RfGVFZ6SAxaTvJ2YAL4epdu+y8d4hO0YNZPW/JXE\njiv28RQValYenmgItjK7dZjDs7TIl8bi4djkdboWrVyXUUTNuWY4AhOk6PpO\n0rSBom08ouuUYgPeqYn0mJlGUfhCcgqsKcD9570Q7NGkqTqSWVI8pzb3AD8a\nZxJjxd7ebgYwd78XU1uVyCsnnmQKz+5+wwzbU3yavxMKPLJGVYeoLPyzWukG\nibENOlhC/oiPUPVGVUZ2n+wnQramL6xPuzDHbdiputzGJZEKrXy/nBk2rrly\nLUOq\r\n=+9xG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEPo21DJk1cv/wZdQuosebwn/0k2Ycb30kffUPzVhzeqAiAkAN0qJzZbO/fHYwsWo56WGPK8rFKWnHng4g3Ixfn6AQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605709976-2472e6c9.0_1605710088068_0.586176298023465"},"_hasShrinkwrap":false},"2.30.2-next-1605713228-1c5ba599.0":{"name":"@xdn/core","version":"2.30.2-next-1605713228-1c5ba599.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605713228-1c5ba599.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lbLTCPPQyPkL+zr5iS/mfVi8R3PFA42RSeay5RyfnTdPOzOsRYzg7q9OpGjToezxmGhdpPMAJCdM2SLYJVKL4g==","shasum":"835f39f2484bd0cb0a109e8ce4e61e3254d791fd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605713228-1c5ba599.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftT3FCRA9TVsSAnZWagAAgFgP/0jczOZRjexaqyp0RGz1\n8ZPJKB0sEw/J3MCRX+yG2v+zhwQ3x+2uweh1dFTPkOEmO3Vq6fGrn6tzZJYs\nTBysFaITe7gAAhO10JOjUaBrcNSo3Z+ps8Ishk78Eog2kWwGTJHSLfuiraE6\nQt7Ld0/VcDDv4eTsqRw+g/sCzrib+nRKGEq9D+hlkIrb36ZB9nCmd/qrUk4l\nD+cgRwbntfsHP+a3WNUY4+ufMtRMZb7vw4TT1POZymDZTF8FL7M1a+XMkFjq\ngwKOLznwjkzO8TEH0yf4o22jzVsPvyF3IMFMNSN/VUooShZiKiXiviSgUll3\n5WjdthWLzGREnDyu5Cfha7iokzg4NBiBNilSNf5qqbikSe55DptAasxUy0Ug\nLiDsdIPQV4607UfcGtbeGEZsgJ927ArJyUpwjeKBmYTc6/Vsuu6YT20IAOI5\nOK78VEe4wu7bRik1kGG0b1YWN9nUIe08UO8KNV17QG8MWJNkZ3sgw/EZCEgZ\nBfE3QExXH8aF/7RUUQMFzDlfN94yrDUd/ev7qfP0S6JgniNy0kkMtG9hqYKG\npeGK9i0GlB2tCYIzYIzO8KsObwgmlCqA1HQWbx8DbDumynAY2rQLEfnNW6v6\nDkKDR+G5jG4n92nbYOsRZAu+BrL3eqBm7wPQhuss7LGhkddVFLnCwtieq+Pl\nBWr6\r\n=EvLf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBYydpHgK65HlMGdvEuZ78+Tiexumhc7yfEjlWNOYmIEAiEAyGh1xolybXq1ySTpcoiqs/6O2dI8P+HPH1fCvYBHik4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605713228-1c5ba599.0_1605713348820_0.8653614149482207"},"_hasShrinkwrap":false},"2.30.2-next-1605713859-2ba902fb.0":{"name":"@xdn/core","version":"2.30.2-next-1605713859-2ba902fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605713859-2ba902fb.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8RZ2VlX9Mdjd96A/Nb/LHi8D7VNCp2j4XLSqI/F6pZiuopwDky+cz5wJIppgRrm/KHhrWB1C9S+sKPQSuIH21A==","shasum":"b10ce0d9dc01765cfdadfc261014a1337feab4da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605713859-2ba902fb.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftUAvCRA9TVsSAnZWagAAMswP/0SNdERMX1LrlkuZLboF\nj7Yr1Ortn7TMGMmc2NDDJujXVDXy8xXHVAM6l7aAdm2f5oNCwjIFDdOrJ84U\nqWO3caPjS1hpjK+7g9xsS1FMInw91cRHZKkFpQI7MB74pOnuR2HYNpEqYZmH\ngRnGK4FnRDPcsdE92LBtura1dxpbsVFRWDUUXbcUTbgmKoic7Oy4+2GNFDGj\ncL/m2/LY6eU1s8OFV+d3ddTD6ROiC/QiIbjQtpc/0C6NMcn33KQOf7k3lmGt\n2837OaiSjcmPMtpugyq1iWPxz6mQBQT2vE1RyDfP1UWpjYyHlsmne+IXi+bw\nt/OOecv+4FUJYfqxM7d/goD9nZB3StDozp3iGaaHSS28t6GQvey5sym6Fg/Z\nvckFY/H6E+huinC18mnv08CtIBAq8M9EGKfh2hqaJ/+I3UblD85SN30ciHyz\nRSf5aPzWbLpJtTgzzjlVDO8p/qc8k4XkTwAK4VNErO0xvzWvgP15zBVC8Hpg\n8pTrdIPb1yztXn9+8NkJT+rbtqEPNFWfO77HpA+1gg5QnpdXDOmJyEV/qjVH\na3Fzq6bXVBO80feGV/OxE43Rp45jj+EeLqMxFzUT2IRWeGSM6D+ettpMPPhE\njQeLODYvxlYu3Kb/Sr1qEu1S+Kmw0R5uDK+YNZ8mBMU9YGzPVjVFBM+95Yft\nSdQL\r\n=xeFX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICQGJwB1rYRYyRVplWguBOslaMhFpKdd5BI8fLv6X3WoAiAq7N0/FvaQO+mx6Ct67PiiaTDYR3EeaDRPAsHv0WuHLw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605713859-2ba902fb.0_1605713967282_0.22659994294303942"},"_hasShrinkwrap":false},"2.30.2-next-1605717606-9f8763bf.0":{"name":"@xdn/core","version":"2.30.2-next-1605717606-9f8763bf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false --coverage"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":false,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605717606-9f8763bf.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xYzrFGbWXZviixQp7f8hgYebRYuI1Irnu4+FDC8Fzlv1lZLcHn0UlL47MBORqzGkTPD+dEf9jgsdR2Tc4Is2JA==","shasum":"b816c0779a85eb8b57dd13f471143cb567e0b3f9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605717606-9f8763bf.0.tgz","fileCount":169,"unpackedSize":643465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftU7tCRA9TVsSAnZWagAAPdEP/2mq3Da+yTIg8jbsVpdA\nrmMkgCOITzmdrysUryxWVvfe0EMWlnj0+vGSfUXx4W6k7PL5Lu52QEnNHs6d\ngrW0o9KfkRGzJr3pBx3391O0iM8hKwKYCRsA+CUyZFqUFfAJAOjI1BuNCjyP\n87p8wwk0XZ9l2LluCoJTeFnWFrHtFc442XUAch0kZVF7Ok/irdPrn59U3XFG\n8ycOiAwlCUvcs/Zztq3GX9BS/NushW38vJuWSAsw3JtiPvaYm7+PwO56HUme\nsW7dTYfOxhCvEFpR0tSE2og808xr97FDjQYojke2QP6x5m/GMAh+8fYnGEWg\nooq6CNmbluwPn3jDFRhDd4jCSnesUyy2pqqp05FWddkt20n0FeWbHK8PLSL/\nHneUOBrcD6aQmqqWn5yqpVfAsfmLu1E0tSdYAbZL/lPAuP6llr2k3R/BepGO\nxBXWGYuHlKcD5BaesKBNctAuvvA/PsdOyzRKqlUW3WnGd7ZNlPZxvU1TXwfk\n2lGIjZVfIGJNbBCYEaEEQVF0gSICeTBpyMTfdZUhsnJFdlV4ouReWCoTr8da\nAHtaScHb/JZxpoHHryL/gn/4+OxmtD5bNlFVYvK9MRM6DnP23UmJCr+2SOYd\nvX2iRKHorv8aGFRpUc1wn2TORKC6sPml3v6HIKnsZLK1wpHrlpW4i3zpeza6\n0SH7\r\n=SakY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrLE1N/qfaIUurzXdLweWMBKxaSCxTaWE6jw/ON4gQJAIgcP2oymx9IXf0VP5RARPSm2Wq408N5ltowhQrx7Moz5c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605717606-9f8763bf.0_1605717740329_0.42251494965215186"},"_hasShrinkwrap":false},"2.30.2-next-1605721468-1b3e103a.0":{"name":"@xdn/core","version":"2.30.2-next-1605721468-1b3e103a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605721468-1b3e103a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+K/k+mWudIB20EGHyljBGhcbPBmMinsB69HogmLEBLBgxtnT51RoEamrXTAqrjE6M9zmCohx1yNYDATb+8CxrA==","shasum":"6b6db56729321f34f9fae56b8cd6c602d94fab53","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605721468-1b3e103a.0.tgz","fileCount":169,"unpackedSize":637758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftV4BCRA9TVsSAnZWagAA5kkQAICp04Oiz5et7/9EJsAL\nVTpZNTiDuqJ6PHonVb1x0KC1UYVVep2c8oKC2WSsogqQycnGYv2ZYstV2sbr\nrAjMCaTatUCxjrQ3REELaPpLKlZnFLNslUc7fpyWC/DI6qfQNYc0kFR2lMo4\nDkGmvq1/6NRrkHlmBaSjGNrg0SnN/3jxk6TN4DhhbvBwUTwl3VkeLKE8SzLc\nM4d4Bl8A9z7lWzkwutEO6oAi0EH9Nlq+5Fp9+mI79glB5NWXJes9/dvL4hma\n7O3x63woFNL1oqS47PaaYTXnvD9MkIh8lWFUNqkALAxGpq7g1YVYTHCiGoAy\ny7spwN5eChu6bSLSfdPU1SqqnZa5KU7Tc+5fTSizzYg+D4p1Y0sd65Gm81IX\ntbY8K521yjIkpHmQfmzhFslwIx9CYOj5fpQ70pe+V9JJOhiAiTaEaQ6rDWPg\nULxiBfI6SPBIChcEwAvI92YKrKmzWq5/Rulglby3Mp2QIviJmdhzl/JON6J4\n0K6OZSzJyoOeIphzqaOlfVO0cpcmoNFXzCjzLq+xWGsWu/6vuYl5/zx5gxZG\nx6Ng8YT9d2lGLGOn8B8sAiwmGYMQq8IdKTrsclyJIJ5GDjiy2h7riSgHe1z8\nKoP68bQtDnoJMrsX7pyJBWPL7sCsghDGkIajnX5TtoqhoxR4p70WvgvcVg7n\nhh6l\r\n=N8A1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBZ9qb/OC9ejmwmx91TRW0h8VsKA1H+1e4aSVNr7CRlQAiBok0lUvDGOWSyd3XG5Wb6UNLH8HrNdA1gthloI3vaRfA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605721468-1b3e103a.0_1605721600565_0.47681020897842474"},"_hasShrinkwrap":false},"2.30.2-next-1605723797-4fba3662.0":{"name":"@xdn/core","version":"2.30.2-next-1605723797-4fba3662.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605723797-4fba3662.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MYYViOByNAc07h5DN+KFphT7/8n3QhYqlhbrJeT7tC7hAilaTwN2SyXJYtKz8uSlY5yA2sT4gFHBv15Le/i/RQ==","shasum":"6cde6cb321e81fe80a8f6b5d3f1912ccba636a29","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605723797-4fba3662.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftWb/CRA9TVsSAnZWagAAj1AQAKCXCQ904ty9hQPApPhG\n3y6llEJpMuGAqQrNUXGi1aLBAKKCsTi+dz5Zgm6ofT8/dvs1IMAtzuIfM0NX\nxJpSwfTC4nULpTfn3qq/+3q9BA0CZK/fB7mZkUExWh+T1Xdkfhb2hFtuatUS\ntK8n0URxJhl3bRiWT1GsX9v/cUQONN48yitBm7SC03/Du/K6zxzZj0LKdc7w\nCvGNsI5YvNDofPze5eceM6dzdQiWkPtWkfbwVTMdChzMXySuiyTS+6jJRpgF\nr1EEcvvTegwk8Umg26IPfwbWPNB4WAy0awXj6mFcmAf21+7l6xAy55FcIYDk\nWV8EKhNlC/kmoXEGYM1f78tw5Lx4/V4mDXDVV2gw4YUQg1RHmZunu1dIabIz\nB4/rz8nG4c9sDpmh9RpOSupeyVOwFjyHsSpxJrjj6Fxy7a+byp7l9C3oBlP8\ni5baUy6DleeDR+lMq7CdDrstDfr5R9ZD/oShdTBOx/sWBkvdeKu2NRMwgMbM\nTIULZ3sveInCbEjPak6qbW/4Unc3ZMYz/573sh/i0hPL1zz6kzuhM+3MQPwh\nv/3gG42wizUJqEoRIfsb/6L69civZ6JugJqdENVKuqMH8KfQDq380Q6ftdE6\nJuVNheHdYDoxa3RJD1SMBqWLQsnfiFBhb1Gswv6SNa9iNJQdpZGsViCU+Cta\nGcGL\r\n=m8WH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCL6+wntKfLyqG1HZoixvH8DEJT8HkUjjwN+J7bNJw5ewIhAMBKA/Mz9QCvmXTXNb2t5yf4ehDP6g4PJugU3pOaZ52h"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605723797-4fba3662.0_1605723902146_0.5457451802214521"},"_hasShrinkwrap":false},"2.30.2-next-1605725386-3e9324ec.0":{"name":"@xdn/core","version":"2.30.2-next-1605725386-3e9324ec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605725386-3e9324ec.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-teQV6/E40iiksLT/PB/YffomInlX06uQ5JrMQ5VbVsRQlLvNC/60wCtlAAVXs5OzuPB13RUTm7/w3uEv9Y8LuQ==","shasum":"5f628833f2ba39c270a626897c9faff41b24a1b6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605725386-3e9324ec.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftW1GCRA9TVsSAnZWagAA91MP/jZIojZiYQB26thyYFoW\nMQLHtQxk50grq1R4v2UdtSCu7v4J2q58p7lZ1qq/uxiymV6dZ5fXrLP6s9sk\nu8F+Mj5AYW/NkwfOjRMr9xDQGFbOptd/rVdgNq7QPKeWOxt94mr9RZfyy+qZ\n958315VAIDxyYpDeF/rWo7MpSfRx4F1A8IdHx0RQa/7fLSTst9+FuXE63LJt\nc07jsz/6z+TdJ9ZQuIF5vJKmP+WAkwPzM9ECLm/exvfPT2OkCUYiwZTcBTuh\nua+LZE1lLWDwxRABbokbkNowDo4PdLThgAfJEmZtaEnlL2jPQnDXO4FjJhQm\nVusVH3uPLCs2zl46JTCMvV9nuoQ3WSUjg/jDepLKGGWoS47Nl+oBTgmm28n8\ndvhI3jJDzZpV051Mmlakff/Wzbr8yR+2jSydJY1Jy1QbBLsUq+X+PBXi30gu\niVsZ5t2RGq1ssPoXcQOd5MbRzXKAuaGeya4AvvwFyQjS3rHfUu7mPrZ18sqy\nmKgJ22rN1osjDK4Q4xWOOQ+48XqhRzZsDkXwjdmv7bZQQnPsYaznneHawQIR\nfsKmcZzQFBdEvrvHX/3neCylULRGi5NOld8xCLTCzJCcrpocsoHBCFaNXiPe\nPykjLhspopx6KiG8PM4kIAu7pz731zHp1jjYkz70wpXgOEkX4b1emSuV18xr\nj5C9\r\n=qj17\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCa/8ODnD3+zSIqAX8lw1spLO1VM7Jv2Gq7qUGcppea4gIhAOSBeTnEDT0Bs8Rkan8tdtHR4SeBuSBrLTJOR88yTQqS"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605725386-3e9324ec.0_1605725510143_0.9335544054890819"},"_hasShrinkwrap":false},"2.30.2-next-1605727991-3e9324ec.0":{"name":"@xdn/core","version":"2.30.2-next-1605727991-3e9324ec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605727991-3e9324ec.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TvPoRmdGVRT7/czqeBE7+/pST7prGO3IepXr2HUYWN/DW4zrKhJiql2VulkFsw6ZS99Z5x2dOrsVtPQsdpmzKA==","shasum":"6545803b5a79ea3e83218f887b29a287683802d5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605727991-3e9324ec.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftXd4CRA9TVsSAnZWagAAaMIQAIAUlJnEabzB8X2iopys\ncjCSii/6aoGV5WpjptnkbVRYdpEcw1Eb5JjMn/tsoms+NBWx3wci3aQ/F4nx\n/2clXfnkYPZs9nXaSlA51Fzqc+0GEb1EO1OK/LQlCwwivsLp4yOnXhCwcFDo\nawc1IPNizkO1lm2jc84yekaLJaVbF6acEnp0tNa8QD4TzGSvxJCY89dpzOI+\nswPqCY/teSQloiYvXZDajxble7ZLbcWZtRTF6VStpFQ5T4DX1+eOiyJW2TPr\n+zMOuxD2F3rjVVuXg0FjpXvq57XfvInTKyu7wFwI20Cnswluxb9AaKyCMszV\n79wo2ISar4yJUimx/KfvyffIG42n9LqEwwkOUVBHN/0YwdE2MCXF/mDU30Ju\nAwtqmNONC/qPABPEg+YnV1BaARfmDk89fe6BUKuoNPzB1S9EaRJM9RPngfbr\nxNtZp2bU7Vmd3WicOw1eQfEFUR1GLMLRFuY5ketPLhEuh/G7gkJiWnDPpk/8\nXx3jCgSlbprFdlLvHnwlkiI77+ZuFqtimutTLek3hF0rxGImeZ7U0NZ0yl3E\nbPyF5wRzsB1o3usq7UUxIOzF/m+T/KRqht172KMXCxAqMZ9KFsF6Q+Yn7uDQ\nmKGAgCiXOhSt6xb7E56yZMsX+jSJpLzPSru9vQH2q42ztFgX6jaea10lm04+\nlCb+\r\n=xfO7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICN73uBDTJHTXSTQ36zslk7Otn9Sk9DPDc4Guycyj9w2AiEA+Ntwzdd//Kxu5DxKN/pBgyDT7MoZ6VWyrMibF8coZvI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605727991-3e9324ec.0_1605728120146_0.4258318287977483"},"_hasShrinkwrap":false},"2.30.2-next-1605730357-284519e2.0":{"name":"@xdn/core","version":"2.30.2-next-1605730357-284519e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605730357-284519e2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UFXyxeIhq9cETTrcYUKUrr4eEn/e6p8J9ajt6DPxpXZ7R5gCofPrN7H4YlwvyuDVRVxZTAQF2UmLipdoEyO0uA==","shasum":"997f1c21dd181e5bf4ea04af51cfa32b5c0bbeac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605730357-284519e2.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftYCrCRA9TVsSAnZWagAAfecP/04JGZsgETKc4lwRV4bU\nqy9pPXlLV/pfZxFQ2XYvk7SgnVEcMAKR/VQrBfns3FX4M5lgxPEld7ogNmvg\n0WUCt+M2/vVOM0V7lIG8EDvnVRqn/lqK5Ftpn8CwbPUyTOmZn5S5M5o4f38P\nO6uBAdVYmyY8jzuQifuQCsm+V8BzC4pqZmj+TV8ypD52MdwPkBlIejMkGCRN\n/DztEsha9mIVQed6+MwJWqJLUrw4GrTpLsXgVTPySvIMtnThXekd+aIrqKRl\n0nyvHpj0dhaaCgnsaKKdvCBhMMAtCp4hQMXqI6hSGL3dHrjIQlzoDRiKM0GY\n1UnDUAwfA+m13176RWBZcuWOe2WPoxg7Lrwr0ej5Urr+p/TTMJA5XvkheIu1\nuTLu0bXVBawckSIoiV/e8cK8BSED/9wQVTQGw5uVVxjHmd/3SjqE2KvfxGAv\n3V/PtYDsB38EfR2qM7tTdYgEM3uhzfaflcsBu+23jJ2pz+IwJzaNTwnHnLPZ\nQy34ieoLMzPIp9cML6x/wlV+mCLld2+E+6QMp94RV82MJeDbrdt/os4iG79q\nBXUwYwtV5rv0017TRLB8mC0lnijV8eQJr4DPEV9BkNYuUwyY3ChfgPyJyB1F\n04rG+fnHIkkQbqKzle2cx0QUpZnwouTyxiw4Q9rZIxLImdzbUOpN09VBZPcy\nxFgZ\r\n=HZ21\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCY/S3En2jqQlLPwgsIrR4UFqnD6aq6D2MBrTija/O39gIhAOg8QtFc75V5xC0dPe1QufYQVVtYCL/VQlB8NzMvJeqV"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605730357-284519e2.0_1605730475303_0.6522040267670637"},"_hasShrinkwrap":false},"2.30.2-next-1605780744-0ec75768.0":{"name":"@xdn/core","version":"2.30.2-next-1605780744-0ec75768.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605780744-0ec75768.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tfreStdpEdsCKVyBFW7+GIaCiCG/OL5WdbQxsHSkS6PlUgnwLiJIzX6wYM8S+sfj1hzf1Id6YsOu11OVI4OAZQ==","shasum":"28997c32cd18d289ca5b07c9a5263bab2d5523a9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605780744-0ec75768.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftkV/CRA9TVsSAnZWagAAYTUP/2GJMdTFlv9cteNVQtoA\nTzbhFt7+RMHl3eKnb6F+J3KIPyxoWWcvRbokvtdz+EggospY79Ib9+ddBEpO\ntyByOeiLiglImWlMb8oI5HFVeVNcEQgJ4/E9Dq/EZtghIYN9V5E7VZVvX7yN\nr5GIOfFXsVmLwScI6lPJFFuh4GyFUnBsEVHh3r3wBqyXnWuhs+sWdITjDWpL\n3GiVci69KphT/7gKmFCHCmNDFezrvkZPux4Kr2/BUzOqvobhcqg1/D8mdrdL\nvAwfecY5tXCIZV9OiI+u/Zt8GhC52rh8FXq326IRi8lQTeOxo+CvGyEHWIjH\nnECyL+nU8bfchYMXPoq/3xGY2BwT7wN8ezpOp9/fVDfr+CVnWlx/lAtU8WKB\n51yiOdPmEHJHTEqFYYnLmFB8fu7/eid+qoBbd09XoraSAkdhqP5Ouzk4mjNz\nlRGFsWskIB+aoW/JGFpSc4A7h0S5MCgDMMQfewAgfcIVKEcNbc0NfDTzyBri\nxGLnSOtPiEu+oq03WfLyGexg/cIkF25A8+kmOEA36grlyGFPVTNUskh6pcue\nUrdy2BvSUyJsThgS2YrsDir3RrSLkwJvTW4sfu65zK4qT7NPkcU7lDcMdhfk\nSHlUnsE04u+Nx/O63otHuyrvwVXc7mg4qaqLznEfJBeO4JkwLFBET67mG0J7\nnwKG\r\n=YSTw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDF/PSorvHbj1toDr/hr4mOYGWkL0V6O0BwajAhbt9cSwIhALigOMr5NiC7MFjRSpq15R4IkuzXeWCkDTrM455Jwucc"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605780744-0ec75768.0_1605780862545_0.08109376635552557"},"_hasShrinkwrap":false},"2.30.2-next-1605785618-5c882bf8.0":{"name":"@xdn/core","version":"2.30.2-next-1605785618-5c882bf8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605785618-5c882bf8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-br+X1xT7voSf1+2JjcBxW+N1+Ti+0PINF7PsOmGP9pfzZzekBlOi364qeYEjhpyLVQVBbiuOlezrtqtuXYhaJA==","shasum":"24389a642c6a9b9b1aa1d5d376a4e85606e49f2c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605785618-5c882bf8.0.tgz","fileCount":169,"unpackedSize":640113,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftlidCRA9TVsSAnZWagAAVKUP/1y3OaQzcGfOK0h6pLwY\nyy2abAGswWOWvr0ezJINo33e2lDY1ifjt2AUFM4P+dDYyRO/RWB/i8mJRZ3x\nl7Y9nEolaobaAniwl5d/c5t/i7yRZfc49lYzus1Pc8JYAi6cjTpe1NOB2zbS\npyaRlYB8dCmAvLIZaltVurT2HHdI/cxLZXfnDIoCVO2Wo+DyDYrWC+RsBXg1\n2xESW4pQ18cZxSL7UMiW2A71ux/tiI6xPoZliyu9wrkcAuaNJsaJfaD+PJD1\nJ8rHIzAjKNQHMFsqaEnXmHjXYw2wMCaRbLMpqOAsxcCGDJRqPuHVU6QuFsFU\nq8ZA/8IlVfTwnrwASuBsGzIxU9vOq5KXviTyXVrsByW8Rt8fMj8bEcGAbrVo\nz5FbISh3nR3kylSP+hnNZVUuhp39L5XzQDuwRFC/lEqD276watiaWBOWaest\nsOMUtLN05VDhX5QYpBqk+Q8sjasvz2oVc/y8qfHyMrYC9llyS3QCrtYszrCT\nfPlpHf4psVF4gKPivJoKLNnRV5SZQUmDZSTqUaZlyTFcNNKGZU+17usspT9V\n/1FkwYM+FyfO/kB+gvByuhP9BeE5eM9FVdFcIobhha+SE39dAnlL9aOzYNvI\nrOFu/OxtvahNE0QPPy7SJZkHsvHfgrJAxjMIW8Dax1qojcKFh5yt+vX9fDkE\naUKn\r\n=/dBm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFEloKHkxagc2NRniIRGPokQFQogpi9m6RgZxXAOZel0AiBFtZrKdqNqXoaqPTRgW9Drdlcv5actHXqnn6Ff47OHPQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605785618-5c882bf8.0_1605785756401_0.8756595382551093"},"_hasShrinkwrap":false},"2.30.2-next-1605791444-8cbe65e5.0":{"name":"@xdn/core","version":"2.30.2-next-1605791444-8cbe65e5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605791444-8cbe65e5.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OWQtNpWzuPRxUSZ77hLASsum3JowMuwF8/HVNkleJwCXAHAlFWhRtGi8EIuyfxe/omg0lYs2+Y9a133oi6s0yw==","shasum":"6c53f7c4f7bc1f2d216d2a8c7b7f963057aeb6e5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605791444-8cbe65e5.0.tgz","fileCount":169,"unpackedSize":640110,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftm9ICRA9TVsSAnZWagAAIVEP/RArccVjBBSzCMy56rVA\nJPhVPxCKXAH5xfW5vMX+2UI81C9kuiy7Ewcp6QF+S0I/QEntYDqE1pRZRNlW\n9+Ew/ZMjE8M3HZYL3UFwRNnOzWpjiYD7QmwpTpPXQaW8kb1qGTbYT16elXDL\nTAg6ymMgxL5tJPgH7PURuu9k2hJ7rOpRdXmhfX36xGpWCC6dq0mBf+0uABYi\ncFlKvSNBqxecL/uaKAxhxXjG5/x2qL1KGMSPCm75481+7UwC5YfiEPfSSDVM\nX5af7FbbYvHwSCtChFX7KTSQA5e7aa8f6F5shmpuHBx93wrlS4cjV7D+Sp5A\nZ6TI6T/CNCuMcfl3DhpjtjrI3micP6BJcJlwv22VZ/07JM77kPX0so+Kf8qL\ns5grIPGxQvm2aO0i+uIenp1bFWLxmw5paIQ3sUATPltv/av0LHeaF3ArPthL\nevMGct4u/RM0Zg5I8TB9ahtX9xLzx0pLIyVZQWTLor8bjgGB++CYRLtPbKxt\nlhUWDqIJ2WHLmBTwxzv59QIjA6le/yrNgNeAO2G1dir4wdMYi5w7h70FglBt\n0qcYwCN72N3B2lXUFd674Yi8he366bG5+lW5WxAadVepRq/ZtfjPkM3uKzg0\nrk/5BcAd0KcOtk+B5PeKABBo3JRBNC2RlZIJjKZHYFFivekiGqCvGo2mEb2K\nirVd\r\n=3XnI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYr3A4OSGfFaEwx/+kc5L/oyTmkH8ODJ3t7MyjeNXw/wIhAMyz38+Gj/Cvxwg2Z6Cpxd5NTmbGgniA6Q5gZGOyq7Mb"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605791444-8cbe65e5.0_1605791559498_0.6008684544640781"},"_hasShrinkwrap":false},"2.30.2-next-1605791955-8170003f.0":{"name":"@xdn/core","version":"2.30.2-next-1605791955-8170003f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":false,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605791955-8170003f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-yEQjer7h7qRBJPKhKU21465ZXymRE9HXdb3xPHqK2mqbhZ9DrYYmOf2BWNHRAIGqCeMv+VtJ/l9WtfJP1NOaow==","shasum":"90188a4f85c58f8990fc6a6abf4067426b258fea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605791955-8170003f.0.tgz","fileCount":169,"unpackedSize":647420,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftnFNCRA9TVsSAnZWagAAiZIP/0SHidvD+X2jE4GDnvaW\nn1RzZKwyofjAMx48Fxjw8ep5IVPTE3LIqONFUevrAaRlTmhPJydQ0Vepe1RV\n+i0pGpTThtxbpUfrhGpSr9fZkE2TBRmil/6g2Ycwr10A6HoBsMSoWq6p5Lz7\nWx+aEM9p7JKwfDXkSrkJvYMNrsQAVciMT97qGs7mbnNHshsHYPFMjScfyv+A\niz0GU/PvIE0GX58BYIRtUKgWUcJTRxzZ8rmRmXJthzKkZFwJ3wbj6zTHjHjl\nSMd01OFMOAbQSTmLORe/wOgtc2QlAotiZZFhXE8B37zR7Lb42mQoKc5XrEAb\nKLXBmLJdjvUSCbCdrJd/ODe2rS8dydJ0ObRr69fvcrmlC5vcxyEw/XI4gyr1\n2ZJ4xOJWOgWbqrWiziPMvzmhgl1i+AF8Fgar5qMBvA2vqBCGUxug15nqoseM\ngnWPgmloiH+80NJhrTrec4sm1l84kG7v2jezZVdHheahJmN6xFFZJDBG8OIS\nvzs2SQ94E/S5/scxy0Cbx+YFj+oPQ7jOI+DF1eKXROwxQQ2fCXg16VLfcElV\n4upNRIJlBoteL7cMEqu8rZ4qBbsLYWQTjgjCFMgemPqMxvsLS9FHdbAYK3TB\n/7lseerXwkdW4dlBFBu7kWqHiLvAVS+PTLA4NXCV9DecyWADJB8VCdrxQCam\nA08p\r\n=Nre0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBKSrXgjxw0LVtaDgSxlr+yYPaRm+k2+0M6J5Flr5TtDAiEAsN0yD0SjI1w4Ozq8qy+i6VG9XMTv+iZ7TiO3FfYSgOY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605791955-8170003f.0_1605792076508_0.7279999854777488"},"_hasShrinkwrap":false},"2.30.2-next-1605792036-14bc234d.0":{"name":"@xdn/core","version":"2.30.2-next-1605792036-14bc234d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605792036-14bc234d.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ykdq4hl7V4X12AC9vBejB9eQSi3gyly0F5dMTeUAkeEdcRmT9O1/7icwKkCMhc6x+stXUWq3NKBhB9l/9fQ4/A==","shasum":"d16e3cf47d4c4d5252e4a681eab1d048ebcbdee0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605792036-14bc234d.0.tgz","fileCount":169,"unpackedSize":639550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftnGdCRA9TVsSAnZWagAAMa4P/Awrsg5Q4WEuQtHDum2b\nm+C7ejNphikhWM4zYW5iJhwI7UvRjQSAZRcrGymwEdbEmzPj+durUoJOzmxG\nOSD+aAWWjysJvg3VOCRRh8RGeiZylOkWPTdHPkJsEBfV7Cj+Y6tVpNJrglpD\nXUak5degZo+Y8rPUTaxPIH+xV4FYHRoGbFeHasWCVdZqr49MSZChu4AiiFHX\nCpJ0XCIcPZcUfV0tyWVhANuiWVnUdL0BzQdfSSoCiie1wq1a1ojjpJScMZbQ\nVvhEks+dzdQh2E/41AUOqdebdtu9okl7aEZj1yYuAA1xDcJVECPBdDDBo7Pb\nM0Xi0FQnwAZyd0fvHFrdiIc9U652x9OvDhSTvD16fRXNDeB/1FrRm3nKomMz\nmHx9RP/XGl/CUyeMZ4fjvqGM21p7bf3uKhoHOj0nk9kckTFO517mnoxy9IuH\nihCbdYB4SAEJTAq8GXw3Lzbk5gGQwpIcUBtXgla5UT+aBuid2oq7j2ufKJZB\n8CKzEQJzvBQLjVQqcLdlFXsA7yTwSM7Zn0N9IeX2wGkRmtByqqSclhnZvNh7\nWWirOLLvyNxjAHQhpWUjJXFrxMthk6P2YC0Ci7AjL9lTopkzscnxFyUBwBnE\nE1CMQMGyY0bAPKcwndJuWe5tBVRxvLHPjK4EJmF5nDI23qXOiwn6nQ3vS8Sd\nWS9o\r\n=j59W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDI4nug2X8eymS5JiAAXXB8Edz1aViK6/2gIszTbEnvpwIhANP9xHQO50uLkXCznf8VhNnd3u19JnRQX4q1ChKB7lyP"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605792036-14bc234d.0_1605792157210_0.2994242006209469"},"_hasShrinkwrap":false},"2.30.2-next-1605792189-8bd0e477.0":{"name":"@xdn/core","version":"2.30.2-next-1605792189-8bd0e477.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605792189-8bd0e477.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZumR8imdD0ZIsa0fCF0GU7rWm9Zjh2xKTglrXXV7ggnmkQEa6m7JNrHnCRmBjjqhGi+fVm3nC37+C3rBeTs+xA==","shasum":"44a5862c8d9b34e513819948afb5c50ff043dd49","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605792189-8bd0e477.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftnIwCRA9TVsSAnZWagAAZmwP/ifPaN+MPriy+a8X+CGu\n6oZkwgUS2/3SGxfnrFAolKdn4hFU6FQ5w2ogYHlBU0epNtHyiY24srpNwZQT\nCOD2ynbPg6IGRJa8CSfNTylnqSfAoOXNdU4va+bKgCvLWxyq/MYFSmZb0JnU\nmKPZWFwX43KRq7urOYCkg3hyoQPbGrv8OdZNKbuNgtcqXsEjy5zRX8IetDRE\nPy88he3B+fBujvD/d4PN/Zn4bD1KcCQz2Zn3xgJ+yzP6Dl9d74IM+HeSIV6/\nnEFfeG44EEeQlfbiMngTJ/yie28fe8dlB38gEWxqumgcOgZ2jAi/JF58cXG8\n5rx+gi2RtloqVXXZBjJSlxc2loXe1xy4KKJSYNTZpJLAs2mMftC2RqAFuH3u\nzZ01RzlGVtFwR91SUtPXvTrQ7IukR2i1sM/76Nj36SGwP4taBbf3cu4Uqou+\nkGxf8VlFq7mLl2Lpg6SmhMdFQEDusaKlVs457WyKmoUxuJ/oUemlU+CRqSBM\nxL+UWwUHCq1Ksf0Up739Eel+G9FAtUN/9vtLF6pvVuBiBSXPudGi4criiL20\noXxtk7V91eatDTAE5lB5pZnwJzOaSJI4Xoq8bqO5lsIt8jGGVU6B8I52j4TT\nXcmlPYvY08Xbee6Ch1Jvco0lrY9/M09ib+dyFsCPGwT5If98lkkHK6iGj1a7\nxG9p\r\n=roGa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICewfq2wHZZ7sBFKE2KqjqzpNBVIR3lI2jP105TaBwwEAiEAwLBWXuVyaY4EQQw7hFlljsPxX4pDKr/ramwW/n9at0o="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605792189-8bd0e477.0_1605792303895_0.899034340915382"},"_hasShrinkwrap":false},"2.30.2-next-1605794146-4a420e62.0":{"name":"@xdn/core","version":"2.30.2-next-1605794146-4a420e62.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605794146-4a420e62.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/QXb/mjB/vGJGPr6ALq61ZReTPBHVtqsjIXgO6nxbPuZzzPffplgE19DJK4l5gNaLOw+u5/j4At0kDSAWsM0hA==","shasum":"28df7cc469b62cec8c78c728a0c6f8670cb153f4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605794146-4a420e62.0.tgz","fileCount":169,"unpackedSize":647366,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftnnZCRA9TVsSAnZWagAATEgQAKM5vSX3bgDgzb/LVhcr\nSI41na0rf6k2DdycSKrIAzwB6HkS6iRDfvoGDWgoigcYEUeif9Be8gfrgoLo\nl/N8QXPuHkV8QRaVA7VL6W6Un0MBraf+RnwAtm03LYm+qQGfxbqRom+SyEyp\nVloNSBjvpZUUymaB+0otsy9h4KuF3PRMSTWWb1Msr7xv5hTbH1OZtqHs4rN5\nUCe3jotwhq1mU3vYNOq+ux9No82wJ58yQ99padWY2IwRX/J6UHnaae867Lz0\n9s64s1aymnIOK0RT58MlnWVf7aRwIOs+jO5Kze/TBN0d4AE6/auCuuW10cxK\ndIJswoP0PivEDbpI1lvevWWMw3X+EqVDvM6LbP7AcN+6l2ZyweCoYPDblF1B\nqYpe0+ZjeMp65vdfV/w2JzZl0UJBWwQgsvDakun9kAleuMUPYKV4iJB/UYCb\nkp8pNq5LD0F+0lNhGhFv2KtJQC/cWbmzQcIaxfYbBUnQOrevlL9EjE9RP2AY\nerA5zOzd6IKTrtaycZPJC1PAwu50WmJ+c5j0matF18KtPlZDiqreJhv/hF/Q\nDs80rZcwLtiT0d3W4U/EVv5i3ROaj2vfqx3KbiAx8/st1DwPH7ad5MlzGtdF\ni6nlM15mdkUt/i+9kqfAaQaSmbJ+A5TUKCX9VR5FDO7Qw5OXBaVV8SWjcXcO\n/SX7\r\n=WQ1P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEkeJn0DUMWjUa5FjNdAn+DUELfKaN9u9q1zRhUPbDSPAiEAyqxT+ZtASxEzGIfD8wz9zOJbU9htGtMx5SZorF+0Vt4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605794146-4a420e62.0_1605794264894_0.06286627112923271"},"_hasShrinkwrap":false},"2.30.2-next-1605795567-3fcddaaa.0":{"name":"@xdn/core","version":"2.30.2-next-1605795567-3fcddaaa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605795567-3fcddaaa.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SmH4RVmP7V+hbOYI4oRCqUdWvHMjQIicDwRSBxW39nIMQZDTLL6gTqAl0H862xn6Om9XBPkF2vPkpbXh9M04Gw==","shasum":"8b1540af88d0bf1b8d74e10709988b42ab7d40bb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605795567-3fcddaaa.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftn9cCRA9TVsSAnZWagAASlIP/3uvH3WSbpgA/oMMtbZ1\nTcAcc7yzLjZrd0uZ8M9tIByLG+bhtrFcYgr4qT99xlsL8+C87OBL6hruC370\nglw53gJKv8s0tKncuFs2t9KIS53gc+16J/CJfOK6SGbtUwe/o2DQBXvO4h7o\n/ydadwSRUaVLN7xgFbZEN7OgWsiuHjGKEXQzDvW2gESIOInO5so/hbsbBNk0\n3GuclPoFMefoCg/lX3s/c81C1xMYXhzIf8M6PHiudMldBz6rQz7/w15Y4ECD\nPghIshONrnZow9Skk2UYR6wsfl8a+jy3NmZ/z9r3p1ne7CLdUpQFD5HRGGs1\nDU9NHiQU0p9Bp3l/+ZGRfDnkWZTg75v9l5mZqwUFn/yQIiwBPAMoLB6zZyfi\nmJdTqRN2TIQ+w7utmjMckE/HuRRTWw8hj5ThLEovRn4S+feQYJqaX7q8Pknt\n53TzOz7iJ4D0v/chTlKki/ibO5MNsd0+EP7uf5b/l8yOZwaJdEe/mr3VThpR\nzvtVAfnNjgt0h/I2yfMq5mC4zFlZCzptfUa/ZSkTx8Mgsj7HKLe7zrqV2j62\navt+hv37sGxwvlJRk315dJmWvDBN7I1Xfye2YOBshdEzG8y8UoEXIOuK6+2q\n26hFDe4x35pTtm+Jq0cil9AWGV3hnI/iZhcy0JyhpLI7hjwYv20+ZqOLMOI3\nd6Kj\r\n=3/UF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/V67gwjrZJ4+J0SNOOVwMJimX80xMrwRW4WkefWPzfAIgLQPCRZy9J4x1ohmOAEuICst77bJPfdmJiZggHOoXWqk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605795567-3fcddaaa.0_1605795676307_0.2638433380673051"},"_hasShrinkwrap":false},"2.30.2-next-1605795657-8bd0e477.0":{"name":"@xdn/core","version":"2.30.2-next-1605795657-8bd0e477.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605795657-8bd0e477.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wf1vnmv+QtD64GYrKGFlkdY83KFuAnYqOzVgc00yWw8uUBZRw8mL3d1yt5N8BHhA5K51FCX22vpDVcB3td6qZg==","shasum":"0307e9c951eb2b9efcfe037b84236c1eb3026819","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605795657-8bd0e477.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftn/ACRA9TVsSAnZWagAA+lEP/ArFvu06ajvlEqdI1rWa\nlMp+faq9MViWD9yp2ZU1d9HZlNI12DaYhF+d2fTFUq3To6CF3xO4qLgOGPTr\nIeU9sHjfjgH9wElS+oiZdP1Ccr5MECyUtumRbF1IvjTv/UbDGXbrBtLqGONP\nR2EfPmW5gAnCMjLVhmQXjcHD3Ry3PFtLVVCHkcLJzMv/U6a6Yb3fg3lvsAmM\nPbcUYsLmCh6Zuz1CV7AQMQGtxafbsk1a3QaGC/VhaPorAOSdRjH8bJE2wLn/\nWg82LIUeoa8IWmEwUlHU9VhRYx59XPH0luAbQFc4Xrw7BxfC9RFNSjhTHnSs\nde2/EiEaAOTq5hwQQSeNBowESmTgBfQzyp3SUDLyow7nyDV3cGFIOuTBAl8A\nOScJ/EbYG29udxqV2tdr7AJGEtssHURF4mo55HZlyGBZj9lKyXhU3IMgv+i4\nhsU/6jAF/V9EKxFSv/86MubrnBkB14dsLW0b3VKeKq46ajB2LQTmKsWmIjsW\nhMsIUPzMxA73Am9xmnKdUsb70Y6qdnxkYdWsTvg7IA4MikHtVlEBftfOgrPd\nz9PF7A77yuqIM8xjHIcPfycfCc1hm2HVzk8Eu8GvfelW63O2bnCXezq9+4Gj\n26fFUuE0M/jrYpp0jMgnzFNLi8k4Sv90j5kyGgMlyMZbL/ffrfpAjb1Y3VqK\nok61\r\n=xrP8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8JNAL52Pn2SXkn7L6H/IyxjN6LGeNxO8ZOQUaYJzjegIgK8RjvZWWQhPpJF5bySs0682MVu6/y7UlpudZluEdtHw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605795657-8bd0e477.0_1605795775944_0.04206072384429449"},"_hasShrinkwrap":false},"2.30.2-next-1605795737-050798c9.0":{"name":"@xdn/core","version":"2.30.2-next-1605795737-050798c9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605795737-050798c9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-x88zN6Jr5WcyyADdoxga/mYw+H/oMIhgF4Eq/eAjaTWDGE/T+JUfOf6EDhSvJE2bXAxqOyjT5dmRWjM6ik4pMQ==","shasum":"d916965a9d8e5b032bf9c2afebfa0d738581cdbe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605795737-050798c9.0.tgz","fileCount":169,"unpackedSize":647366,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftoAbCRA9TVsSAnZWagAAxbgP/At6+FRVjOp3NB6oZecq\nupzHenXhqJXsxs4Jikakr6H5EA2TmFQaScgD2Y7IEUP+ZqRJMF1dkWO1DkaJ\niSFRCjpjD7loGxznQBfAXXSr6cJ8fsALugkVKYDsAzWj/vpKSKMZc2lTM5t3\npOqVAQMrSu5MjJD88JVmA/5IOiIortZ+lFtYZUzlEkQcQFoWHrnYOod9RoZq\nnTf0LfI2RZuddVfMnJo6jpyI6BFxZkENJ18bO3rZP8sQak47we66H/kMIWWc\nizh+sMTUfJVAVk2y5YZAXCWqGbnipwCcOpcXO7KTdDM80sC3UtvfapcSlWf3\nxZj8IOiakRfeTBzx8ZF2uVWt2bn8/pyPO37+pP47iEFdBmTWEkRl0dtlkelM\njNGx15V+3+EaLccitJduVewWu8T+5qYZmigWmRY7PYIH/mzZNYOec59+zbz5\nX59YNJ4pHUjtkPdPDrmY/FHp61P3Lo8nO4kDGlX1DIvnubdAnLac54Ge4Yca\nKqDyKE+YLJuZNmuvOJkbaWSXrvgKYd00LMiVbJJo9rHi+CK870ZmtLBOm5UL\nCNVrQN4Of0AK96qEx3knRadjpaXD1i5s+1v46WCVaNe9jaKclJy3/BFFsUv1\n7KN2K1p1VFq6klDGyi/mqKHMi0IOcFCgZ2gdL9YP7MtjFpYC1ZR2uRUcL/de\ntjwZ\r\n=uegF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcIlYoANHFo29s6HwBWeTVEsDvDDxLJtsE3FzTvtqSyQIhAJVg4UPvXUqk7FyKbPTB8ZrRp282Bnu4yOAomtt+oDIG"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605795737-050798c9.0_1605795867316_0.4184904416502355"},"_hasShrinkwrap":false},"2.30.2-next-1605796230-01562cc7.0":{"name":"@xdn/core","version":"2.30.2-next-1605796230-01562cc7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605796230-01562cc7.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nER5OuPxapjuQDTaXmRJTfJbiznqh53CUzbvPYnYUPb9ONRpBLAGLkVk3h7jiAgsVIvRfxCUNGvCSNJFhdkslA==","shasum":"ea0e5de4b53d58d44e4935720b91de1464f76ffe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605796230-01562cc7.0.tgz","fileCount":169,"unpackedSize":639550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftoH6CRA9TVsSAnZWagAArvkP/1p2uocY+azv2iot5V99\nZU35PeSMRYfoqZ9W+5TRfEFPrd9/FSU+eKCEKxpGU5pRG3BskC2CzOmAtImW\n8ajOX6+JNPNW5IVm8i3FZlk6sv1olAhX2iSPS22gLhBGCGPEkeY/5Aw7R4mJ\n5I0PPZcNrRqe121zCTFqfoctqF5OrtVmirufskXqadOmdGzwZNdOkr8fOCHY\n4pTTcJPf9dJjImwx0vXb4LcLmL++Qkc3VpTMOZ7RAH2HDxjS8+PIQcFAX+t9\nEKi08ob+fWDzzCxaGhK2QeU08vCo5SnFUDApFkq6nBza6K1ueLrDHTsadTKR\ncX4g36kWHVxXQTQS3MJHSi8onia7hiGFV0Wj04u1f0NrrSJTtaxp/1iKCAzV\nkFpQnyNDFf9MjDkRSm6/QBnGGcexi8lIi/Bp7UrYeYvSMo40ukh7W/QWS643\noSdPAr1JjtEjTK3CVsawQ4UslmsGHIqBPPTQgbDHPfQIK6hB6lfB+R5WTtAS\nDJcBd1wXP9lAGnn8joDjzgWkpQWofCHZYOzrlQHn8PYLdR/cbN6Xa7/fPG87\nllXQG4xXicqa+qjGlFQB6qjCbly5pLTmdXzlfaXGAc2HVLfUOc6PqgNb1pai\nK/WgUNDDucgLWgimO99hVvOyMwr/VRirW5aR3Hk4Vc0hW4ZJiJtgbgc3eEAh\nuGZV\r\n=mMKu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIALkD21Qyn8CU50d+L+gdcI3YyJ3lx9Chv51lSeUqJ1YAiBZxkYpyrwJpslx5fwR29jqlJp2AcvjxsCWhg3kCGjKzQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605796230-01562cc7.0_1605796345131_0.13521615560279798"},"_hasShrinkwrap":false},"2.30.2-next-1605796576-cf610ece.0":{"name":"@xdn/core","version":"2.30.2-next-1605796576-cf610ece.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605796576-cf610ece.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ytv5vY5qteA/yu5QmH+bzTJySpcPV4zEkaLuNyJMNHCukK37nzFnGjzT09BvQH9bDcFhzGvL9tM53l6UAbcV4w==","shasum":"62b34fe36652142e9c72177ed2eefec0b86a1155","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605796576-cf610ece.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftoNjCRA9TVsSAnZWagAAzSYP/067+AToSwYpvCURFdGr\nSYv/+0HBPSQOGKx9tjsItB+/G3vD/3BdYwIplr4t/VrMXlXuTu1haMunMIph\nriB27d6AFba3BX9myMIzNWRo7nvzoaJ3y1B/CPx67hLZD0T9JiQwzokmhWKM\nUEcqWoukNF+Jem7Cltfkg+W0ZK+fxOS0G8T8b6T857OFA7T6M4yw1i2WDrWV\nEMqZ6pT+CHnRy4C0AgkkhciJCgp54M6QNCQ/u+nlqc4OUcgv+kJG2CCw0P/K\nCZ9F4fykZRGot/t48++unG3YY0oavTq9H1Rv+Q+nZUn1GTizbTED50kuTcPa\ndaUoSj9curgxdfNq6xPJvHHTwf0z5Rq2EsE95fK4xLdjASBrif1DuPqJNlfK\nSc+ukwkp5rmbJeCrN8ZnX0xGHxaxK22XCaQENr9QDNQaPWLaX7FBW223n7sK\nxFigHJ5Ev9JS+V+LsTVRDihio2onOWz5VSaYmK3D7fscSV2rjvDEdcpWwdX0\nzz1ar4oIMKsx05WmCO1Ao1fMUBZDeZwPugb2bBAGlVu7PHRrAG0M3btoAOm0\nAN4GkFjhoJ0VDbXewXb+2dKSyyIJvnij7BvzudU88/JIKoO8AeQeoS1qltBq\nKj3/+hclV5ZUNWGHiYBtzD2z1QJeoTRs1SUiBzxiXks4Q48YMx6rPKGsAT1J\n3SOm\r\n=ihOT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIASa6z66plj7QUGvUkmMWdLX9xVCSWkBy9sHA0/ngasdAiB5WfXwbhCHH0q5eBnguoDv4pADC5YVCLorbChgAib3mA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605796576-cf610ece.0_1605796707124_0.6882710837561541"},"_hasShrinkwrap":false},"2.30.2-next-1605798346-8bd0e477.0":{"name":"@xdn/core","version":"2.30.2-next-1605798346-8bd0e477.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605798346-8bd0e477.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-dRCNNKIQg9C4snLEu2N8c6PxsGOtwqkdURLyFMTJAQvPOWep8qQtwusuYfBatYC9WnemDMmPBTgDbSHhEylnWA==","shasum":"0339fc2a94a27b39ac202d9c58f0fac6cdb9d604","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605798346-8bd0e477.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftoo7CRA9TVsSAnZWagAAgLMP/2zIWtoQFP83e006n3UU\nPbKJe5wNhv7RH3C+wIy3LVRKzBoBiF1mxXusADn/rM2rb+PGDbg0gofePoJP\nV2AvrueIiV/GbuQNFYiY57vP+fgyX2B4/mdfAYuxNPC5jcwYVTs0cCdQpDQ+\nYyzaXP4kOyPph4ii2xoUN2ljkUyK3/HE1rWy0XhLphV9/k1TuMGztXqsqnUh\n8wp2t2zVkFzy32HPWhhd2mTwoB3mYmk8XFjUVtbdzhK4+YB+LqGb2uQVZvhC\nbEJF/YedXRGvsBtUB7m0IWVd6IMXT02Gq4Zb6VaczLI94AVQ7JZ+QzCmrFTT\nBFD3PqF80UxQ149g3i941VQCWIWQOS8dVtNOwM5HBQoDF+tcu30xeVs15rxw\nmK4XDQqVLpa/xoAeyngHYouPDIUQKAq73Mz0Q/ldrLYCSkuoC5tM5yNZcDl4\n1BBM6VwT7ZL6tkTOCaBZ4pu6pGz22Tsz1e4tn+kHzHdEF+fpKeBZjz2DkADy\nUllvGmXZiCsKHJAl9BP5B1BCMivfDoltvZlyEI9uyVYSHwFYomL/n5EhMCQI\nKev/JGSBIC0GVzRxeRJbhIxOlpcSKpPSu5E++KIhSJ07yXEo/5aDLTWu1jYS\n+zLn4Ao6yyRv1xutJJQ11OQzACBzKkoaSRkn/mXeAuJlSB5pCVs1EvDcwtvL\n76K9\r\n=bihI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuV46qo9Yhaqox/zprE0CSelN8rv3GKIJuIJR+kPskswIgAg73M1e0Oj+dx+27popMsXFCtQmY4gpTDSx3npykj7I="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605798346-8bd0e477.0_1605798458792_0.7480048129858043"},"_hasShrinkwrap":false},"2.30.2-next-1605801235-c6e7a5a4.0":{"name":"@xdn/core","version":"2.30.2-next-1605801235-c6e7a5a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605801235-c6e7a5a4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Qinp88prZyaKj6BwO7fB16YB/bCotOpKl08lTPwRIMaQkjiLZ2UWdmJAAScXrhxR7CBmwF34JFG/+NleSoC/gw==","shasum":"ced5872187d53e08ce4cbbf416cd480e05ad707e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605801235-c6e7a5a4.0.tgz","fileCount":169,"unpackedSize":647710,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftpWFCRA9TVsSAnZWagAAYtUP/3qrrHftjTcWN5dOCBa8\nYArP64auKaCioi9wkb9x3hBE5PviBDt6ARI55lYEvDmcCXOy3r98Dwegsj7+\ngYkLedPI9/1tjJIMXi1YBfq01PSKrt7TK0wEQwOLxuv58nJBMhUNKYF5CrFU\nff2RAIOaIlh9UkyqM4ydhaVlqqOCz3d45l9JXM/p7f9Z0Ho7HEF2pxCQHyuK\nnnP8vnXG8M6eVbIcdrkvnDXM52TYBI8iwVS+nnZZXo+jWzIN39RMIYoEo0vl\n0+2aoMmxM62Zowk0I2MBGZHqiTARTriSG47dNxIYFU8SRRG16sDSPP+JIH3B\nsHveTJ5oTcRMAWY3QoYilnlacBsaYtcdnj5gpOtNfiMKK0aHX/BSIWbe+6ot\n40hH6Klb4mpZH5HPFiUDHoW2kfmpJKw+O+mjSTFEJDbobfAH/rm8g4r+v9L/\nrtcqwMTmaPK0b4sjN2X6U4xSaNcZfHByUcSaQaRbQ4aFZA+aKWQMN5ScxNNO\n/VXv9Cmh5M+lZ8t7iT1jY6ZBcleb+aLGvnRwUNBITBGOyUXP0ORB5Q1Ixo4I\nVKUU3vzm704zv/v+wbUGdmVtrKmKdLxs6pLlX7DU7MsicgHveU6owpDTE845\npVHzlV+TBjKmyPkeyo/xmkAzOh/5Jfc6SxnEn/+wMAqiuTeVspnTAYfF6Kpw\nlW2d\r\n=Fbu4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbGfVsMb12FpvFCGmjd8ft7RAmU6TRdf5qw1R4g5TXjQIgRIOVpyzzOFmU2yd1U7iiumrhE2AK1kqNzsKLpuQ1qUE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605801235-c6e7a5a4.0_1605801348444_0.6792342832798399"},"_hasShrinkwrap":false},"2.30.2-next-1605802915-603cedd4.0":{"name":"@xdn/core","version":"2.30.2-next-1605802915-603cedd4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605802915-603cedd4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-cCBrkK34Xs0hVmN7G93SMXJqLIOE7Ee8DuA1FxFqIkErGqEAZcbb0r9XoGrPEfKW18r2bMZ61YoIzaRC2GwbXA==","shasum":"0a924a3995bc04faed5bb5a25b56b7d3064e6fe5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605802915-603cedd4.0.tgz","fileCount":169,"unpackedSize":649378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftpwcCRA9TVsSAnZWagAAw3kQAJquqWYpr9H6o1vcJyHU\nDGiqjkaORwStT5jdtMFIWSBQeJ+yy0l1xoxu4/kMALqaO1orYgsoYi7oHShD\n8BLZIrTeUugLFqtnX1ZMaSBsNuYNHnfr02GreoP5WGPtd2ezg52I6Db5bRvD\nmVbvnpaVWTaXgxvDo3ov4pEC9J3dwD1oPF+KXQEKC3AQnpErPFWpD2ok2MmQ\n1Zw+WWNEatYGS8dTf41/YX6klSMXwrrwHLCFXMY1W5tYDgH4ZxkApYAFoNVN\nU2OezxjYMnLJi6Ltqz4PtzXjbu7xpJmgSeeOPU2bvvQBnwwBSehMs0B+Bwj1\ns4wcqVofcizRBYUX4kKe1By7czJhzy19syknqP5s2rZNRr2qvL0NEAW6fWuB\nvZ1qJJgX/zeVE3gqthY+XC9K1C/9zjM2oV9kCgqIIksOqml1OsaTrhVSc98H\n9+rRPzDI5gAHzVVnFqhdZ2f4aUjTZ3U231zWnykCzbHFk0zsGseluwWMKY2f\nbkxwpViD/9eqYQSz3/XiJBoD5nd6V754YjF6m3s2x9nwpO9mYOA3pQA5SDbK\nSXKBesSiCW/Zf9pyoyoxPqVCkvSYHdeVnFzsYpfeCnatgGi9j7FvyJCRei2J\nSU/GKWEaYkng1RkRO+f2S3ynOlS16FL9R1l2RH08MBFUkjviYuRkCJ7iUYA9\n6HLw\r\n=H300\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBekZNMSud3tubIso6eVVx1p6mC23eA7Jz/F1L1J9lxiAiEA3KavqbdJI4QZVcbG1RffdA/7loTAhRUAGdNq33P311I="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605802915-603cedd4.0_1605803036073_0.3395297768675587"},"_hasShrinkwrap":false},"2.30.2-next-1605804099-6bb1c40e.0":{"name":"@xdn/core","version":"2.30.2-next-1605804099-6bb1c40e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605804099-6bb1c40e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-y1Im2wmsNGC5D4eSZU5hdPb6c9hY8ZHQBSJHKMK0G3zw8iYGJG3slbIxEgFzrsu6rYIZUvgT7lPned8tyXpHTg==","shasum":"76b627cd1d0daddcc20d05976b5f382407e2d086","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605804099-6bb1c40e.0.tgz","fileCount":169,"unpackedSize":639550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftqC3CRA9TVsSAnZWagAA4WgP/1akjTCPfPgDJSHb0kYE\nGPJxcoZrkFysHirHVpv/qOMyDhyDWrnc0qvXtGqmPnNqhkwZFl2cKtb16Cb/\nzA/mg+AbKlDREDe0383gR/2sii49VT8Cq5dcgxQBuaUdyn299DSAdZAPJDG7\n96IJtZgnkXtJDrkQz9ut+BBpf5TVrYG2ekFKX7HZaDQlhAJx7XIRSy+fOk1O\nnzWvkvsrdMZ08raVaFSp0DfwMPF8CQ+7aL238CarmhuS1L0rx+5Vb0NTrefr\nxwLdFvbQW2pYGMpwRpeQx+jjOuk+wG+NIrj0DX8KtJkoTCc9xNv2wuppnj3p\nARk+Ufdddqmjtg/nudCsuB5FZahy5BG43jdmmUSChyfRVrxkEFzcboSRHnCY\nhApseMTZSSkETe/J4u7q+KtAJFttLMdxMz9Pj5WlRv9T8vIG2X0gWnuGjUqc\n5ISGsD4FpnBTMobGzi9Smk74gakrpPKbQXb/wHTm3jkAgGWg9PDy2kn6DPGZ\n3y3MD1lFBMR+GpJdAVpgNmicWCMHeJiQUbF6Zw3KMhjJsWjwMokudry0N/sI\nfo8k4gcO2DIuqbhQweuvkad5Ethhoe0eseOPaFHRso07T14d8HZr8JJrAqz2\nJp/81gR4kTW2p26eDrprtMABfGnnM5eu6Pj7ObBkJLkEFUp8mTQD5/i8wEb3\nkQHW\r\n=EOD3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDDxVFrssnJRmfQTvxY47nCbPBaBcDQo1AXu/6nTIAVJAiBpjAMeoOV2LEmdl21G6vn4d6Ev/evvzCHjzAaWnQR5EA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605804099-6bb1c40e.0_1605804214270_0.108945559786368"},"_hasShrinkwrap":false},"2.30.2-next-1605858578-8bd0e477.0":{"name":"@xdn/core","version":"2.30.2-next-1605858578-8bd0e477.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605858578-8bd0e477.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hwY7otgxuKBK/GwPH7ACLkh6/uU7/1Nl+OAOhrhC2Vs+KGXOUgXzRYMer7G63KDNBlJmpBvuvIn7u4lk/jiXIw==","shasum":"d6f0278e6f7a0691727ec3d21d615ebc424116a7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605858578-8bd0e477.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft3WNCRA9TVsSAnZWagAA1hIQAJd9/4ftY+hIpk6NR3oE\nkcfzZOHZ/xN4NfijXHW9RU+peoLyYKrjJe/D4MRkuslfoqqqgAXKq5Fy1VDX\nBgO2imbSesSC/u2/1see9177E+UJjpOcoxaVlh6XaJlwK/mX6M7aIkHuLuMg\nFBoK0K0Uw5/miA/XPGSjd6TcqE1njcbWWmCfPlCypIc8vDB7+E9SLTg5C9pC\nQKd604bABDnTLLDGVURUsndr+SOB8qS6WRZt/h5w5admVkphF2myU+sJSoSb\nnIy3KjLkE0ZRoYD2R5x4qyJ2dZEV064x4yAHPaZnew1lY7VNegYJpUbsRbdl\nBVDXe9D4ZxkuY0N+M7ZMmlrGTapq7R/l7AUCS76AUlImuNGjc2pVE0HlL0qM\nDd4GoEdeQRskrMMDLxgAks7FEaK/10JvgInPnHoaSM3RLNzPvpAARSEvJh1P\n/HGUF/cqO2aCKthBVyHl/dpK0ByxN+UB+UVrbZAdrm91mYzQF3GVKxzx7a1I\nhctdxe/Mm03eO4dDNy3De5ZPo4Sz2sAvzblMF78eQdDFh0humqDvBRtrrfPW\n7VRrFiZ9OQ3VDImNP9Xrx+T5MIvfmjjfQGoWkqwm/aj6mQlSShsBFxrpqdqN\nkxISF9spzWepS/d2sw1tGSeCqOfq7oyB61Mbl6SZ6LVXJsuk0zv7Zxv4Hfqi\nUgic\r\n=6y6R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrGsRBgLhYfunQZlLMAPL0ycXvKs25T1PDh2uE9xmXQAIhAN1bbtLD52tOKMi9IxRatLjy4oK/tTaSHLQQVa/l84vf"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605858578-8bd0e477.0_1605858700882_0.8511991221899557"},"_hasShrinkwrap":false},"2.30.2-next-1605861140-8bd0e477.0":{"name":"@xdn/core","version":"2.30.2-next-1605861140-8bd0e477.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605861140-8bd0e477.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-auckgQ5tIFf1JZQ7Dlxp6SYqEZmas+Qz/RPfi/hdyo+qPe2U/XTxodaWj/urms7s8RD64TnDW6ipUtNpWnBzAA==","shasum":"fae56d7773c054bfd675554f6db2fbea1214b7a4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605861140-8bd0e477.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft3+FCRA9TVsSAnZWagAAb9YQAJvUDt9wPcIN73G4MBg+\n2yRnJ/Se//V9Pujc9bd0B+rHyF82uf7o+A6QqMMXrd2r/F+LYjpePfgO04tj\nOHfUR7YXXQGpoROzyvJWpXmXLhrDwRk+8BvNERwmyw+kqnUuHDeUXiJ202vu\nVrTBEh673j6F8sA8H/ddSH9ws2S2m/i2z3cvFY/jAlNhtDtqO/kaUv0NtF2v\n8TXWTa0Ld/SJjY2HesEFgY0XY+BhtOh1bRSw3odoHJuRfglOxi3eqwwgVGL8\nhJXMnL/POQ4+qDgFcujtEdQ9cQ805Vi4MN2f0l4pT++QTLRAH0Pcy/wZfDtD\nRpz3KI5FiGUl/x4dUQ0au7a5zaNL5C9NerL4SPZQHLRDtu6CC1ru4IhyYwRG\nPldzkDSwcIzyR9GfwS3P6J5hibyDPxbHzLVDwXA4U0ed+5aAeq5jSAeW8fa7\nVO8KJ4a6gpiC8+fMlkHDPX2zUDMjT069ide56d3MQPRzEsE4wzmCEhLSP6D0\nehM8+2S9mS+PYcH8BERIMlS+vbxhmQeaE9zoR6apYSPyJ/8kDMbRlWjVLpA4\n7I+Cwzg2peMVEc9OC68j1oqLeu8dyxwJq02UEDgO1cXFm3+8GmdhJQ8ZrNkI\nFM01QBdZmpyZRmekvyoO1jGyzO2xa0qTGt1xCX1rx6nhGGE6kX/UQess3HoW\nZH3o\r\n=b0JK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWhAFTCW9YdbNfTzubViEJia/1z1ar2h0UwWZBDf9eCwIga1V1WyksS1ANvWE7DqvZkxkxsQDU6wgfSbOeltPGVag="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605861140-8bd0e477.0_1605861252300_0.27296917247796193"},"_hasShrinkwrap":false},"2.30.2-next-1605863956-7310574e.0":{"name":"@xdn/core","version":"2.30.2-next-1605863956-7310574e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605863956-7310574e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-I12zATZO72+eblwcumAXDjqvGIpvKhZ+tJO0/ttZ0+icd9pq3a6dComEpT/55HKNPYlU6mjkGO4esAfuo09SXg==","shasum":"03fc60d711259155489f60f2162a2e09686dd299","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605863956-7310574e.0.tgz","fileCount":169,"unpackedSize":649582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft4qFCRA9TVsSAnZWagAAVvwP/iVLTWmtew6BXBoJ0OIi\nTqs3hzkNvIi72he38oqmPG8dg/9m33fVpfO4QP5kQDbHG6RNOW4CUEZBEHOu\nMX7bOopUOOHxS5BTl3gxDdwh3fQ9eRBx+7/NkiJ7xnfZqN13FRjiHFH5/UzW\ni0XLblWmQZ0JidhvD5BZCGYKmQeh07HpglTUorq0TAZ70VjJA1dYTCMBwZYn\nxUEec0l7ing1qYSP5glSzGM1IY7hBzzh6YDuohcHXTXJIxl/1oaCG4BzW/sS\n5MDEOuLNcwsx187DhYIwzv8p3NAM3gSJvSdu0fYEQpktwAfK9bc1L6M0AwBd\n8dE1UxggvS1UfctIIB+eS43t9x4uG+aYnmZMswm9bMw6ENzAEZ5JkyJKe9Yv\nM+jniU9zI9+8XAFutCLyHJORijlY/pTZSUXOulUTvmPX+/AO8an5c1JgJ+cN\nVFf9B++4yimWtu9RI+OKdoT8/41IVJTsY+CzQiDC7MeixXOPpUJAPxhq8K9v\nxfhSg0iSbHhtlap0mqQq0o4bugcMRbUCTviz6+RMosMpvlSkXArhFQnAub6f\nTkFUYf01Ht7houmzReYgADi2Fllr9jXH1ss88ICD2eUrIH7KHSFu2Bsd0Idn\nt4Ar+mAv+n4kP/mKJhqjR00mj3Pk4KL+7/npOAbWHuOIU5zooA7RGynj0r7H\nE7CB\r\n=7h8/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHs7hKbbn0mtuL0KVgVBQJXWP4idYclyZg8nPKIPQaa7AiBR+7jXh/7234epYcUyEbbg2cP4SJa9WZVrIFhhES9Fbg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605863956-7310574e.0_1605864069105_0.4727382594237184"},"_hasShrinkwrap":false},"2.30.2-next-1605865330-2ba2251a.0":{"name":"@xdn/core","version":"2.30.2-next-1605865330-2ba2251a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605865330-2ba2251a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4LS7f9BWLEHyp0nl47T07WWGmcIYysmPGr/ucxvQOu3DI+oHZzf6ESFB+tkK/CdHYtI+xLiXAXUzpeekaLZl+w==","shasum":"247180a9399b4f2f080a9260383061c700c43115","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605865330-2ba2251a.0.tgz","fileCount":169,"unpackedSize":649582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft4/VCRA9TVsSAnZWagAAxn0P/3lCHmqf8i82h7ooroEc\n42NM9AIFaIH2pxwCFeeFbIr86ewtKGxcz/hbSwq5CFqkMwJruSTx6YsrTqvP\nwU91/4sM2+Qz1E0oQFa3b9UJfXfqnTLCjdIkWyHbHnpk5YxpCeqQIxPq9F6X\nXpr/SWyI0qFR97BZuMXY/q7b2Da4Iwmh78JhCsLgEEDAlexQrTfd3JRs1Qz9\n+4xwNyyOS0SdCa4NBoB3MMrcWsmXXXl70qrwdNYnfF/uK3SZlRQ1VPWW4/fv\nJaLJKac/zXiNrOf6F+kvf772m7jwgOybeTfh5IWt1IsY70y2t9sQyjWTSTZh\nlrBRxq18eji/D8j5CeXjM1PL2hli17PcNZC2xZG84DV+vnZlUcUvF1hcHayR\n1EtNONi1BUS2IoEkIsyqefX3JupRjqN+RH7vZGBG9lDNxJNBfgJFovBOXafb\nNG54M8AEEjLhNgWcEMK+kZOA7U+vIVxKoW6pAEd/0hLe/sXRpDQ9vmFuXydg\nI9t4sHtzrFBkNBC+9sVgOYC7rqMmHUDZ2wolhhbxgu8s1AV4hYotzTC02aA9\nTKK8Oeag986GqnTGH/lY4kDqfrZxKAA0fhJfEsSyekbBj2ITZJh3RkQCF7x/\nH5fQWLb0i99MKwCy9fyLG/sPqu+geFr3RQnnncZV56WO8M9jy9lRKaL1Rkdn\nEnne\r\n=ib0Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOqT2AihC0XQCEMwcS0VvRI3oMGeMOSKrSWJzkNggO4wIgf4TfJNfHhFoeyMjZrq6V7lKcsdd87xJjtYtT+K8jyaE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605865330-2ba2251a.0_1605865428502_0.905498341085454"},"_hasShrinkwrap":false},"2.30.2-next-1605870406-cf610ece.0":{"name":"@xdn/core","version":"2.30.2-next-1605870406-cf610ece.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605870406-cf610ece.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rcrhELev5Ij/1Lwf4vkx6SZVK0wLf4GXXEQNNFPYAsZFMRXfezrUam6hj4nSDO5NCSoF9h0Gn4xS9kS+xcwUHQ==","shasum":"f93fbdc10d5672df656a4effc46500ea64b880b4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605870406-cf610ece.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft6PUCRA9TVsSAnZWagAA5QwP/R4H6WwMKq8pe7QxqrVb\nW61mGqWhteIpAE7wl6HQOFMcDhnY2iDKrPL8iHLoa6ZwLT5E7SDR0BOSmHCU\nSpL6wfQxjcvLvHAaVqUN3fiNU47XNShGMS68YBKaW5N/rPN4kE7YvGTqwXBK\nC3gI8auZptr0FAxJaOtfgMuaCjHjTSVasU/EKbl+pleSsp3GzS+jcIpGhza8\nArmK5N3P2raSbiy8rcGBgXX/Re5qObajy/1F9EiJ6D5jdAC3dByBp/8IYaak\nHGrq3mF7iW1FveEorvgXgmMMxkDPBb2PcC/NTE87V6+y8EC2wFfeXhARv3E5\na8p830GJ7w75JPriWyi0E7Nb+5wQZFfdS9Kgtf1wtgJhVWd2atJTpWoQ6W6w\ntPOBaUcYg/GdNIKDR6ewOp4/BT344qG1qTOyFa/dQJVbl+qua025sIzGOmoA\no5PEkUP2WMhgd4ivBPp/xV1O/hsbW/z8ePr1ClvwLuZLC317bXuusBRvKU7U\nYThvamuW5JCZ6OZiOxXE1Eu2VFscDvixl4c+DV/b+4Fim1jIahMvwUxDOYut\n3gsOwVg8Td7QOunvEJjlO5H806nDxJZnhjgyvzgJOJqnatfZ4NRzHKrzCcxv\nZahQ2hYtHjquHrl0C5jSk19OSgd3+N3wnSWDmCz0dIORSxJvf7FQMIm6j7+Z\nbczV\r\n=RoDH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB9B2OK9SKDX2pHgKIe1RMfPkEV9ohYrvfUKfeGWyAU/AiEAi4NkGvxmRdDIXLB1MuanmBFB0htSW3cm3iUNX5UkuBc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605870406-cf610ece.0_1605870547927_0.09907779787761384"},"_hasShrinkwrap":false},"2.30.2-next-1605871510-f0e3ae03.0":{"name":"@xdn/core","version":"2.30.2-next-1605871510-f0e3ae03.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605871510-f0e3ae03.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tIe/ZQZGfpBbDFBt7xocmM8i8V5Obo14ZAGWMXZ6VhDkLegMwmBX0kIBerF9lclwl0a+XHCmbef9mohYGc7kGg==","shasum":"b1b086d272c8fa0e3a4f8d285b3fdbb43240b26b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605871510-f0e3ae03.0.tgz","fileCount":169,"unpackedSize":649582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft6gDCRA9TVsSAnZWagAAHJ8P/0HQ1eXhIDOMDMOpph1r\n8eRCinW8P8CJBApbo3ElWbpLKiaCCwxHB9HaiJ1wK0wHelhQPhxK7qI0lYvm\nBPefui97/vaTFDdgHnkWdqlsOW7mhU8P+q18EhM1GTup388KC7W2tqrtLMbE\nzNANv6bAtgu3VYjILkRwq1YG3wM8Hf5aBDuwfY1c7bN7N8Vy/rhptPgH98y1\nB7wn3CWaQqsyAyyY+XEPgoNeI1W8q7RlEoflCt+qEckZVySqdN7QG6tPRFfJ\nfWNTRWsrg/GULITQjjGkjWHylByLTyRVVjEyCUfByzRqirm3TkwTPEu/adaz\nYKdBPMcYVoMf2n6tFIuRlBlgoSujW/UjXMPSX6TF+1x8h6PwpCMUbkGM/l8y\nOZWct9rtXjGfu7/tx0+A+nMbUE3MjAMCvJO6OtgJYtthVXTmMXKYpRdMvCQ6\nmUFXv3rnLsfPtRVntHV+dmsDp19AhZkhvb4ZOdv8i8NjForVZ50LKCSMDTIP\nHn6XyHAp15vjtpWRjAhG30ewoqjpfRtmRlw29RFw+ucLZ1BCzPl7MG9iP06e\n50CSwg7cAS24JKufOYoBa88eDV94IV0PLHWrfMBrkkL4Gtg/DNMxGqPCLiJY\noWf8ZkN6MVTpEL8qfgHQRxnMj6RqUE6rYexp/ENxy2UlFEnnc50h3rS1jLyZ\nvt/k\r\n=UVLm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGfVPGTMV/8FRgXERBU6eHCyTjtt98HupZXehRCH6jvAIhAK3JM9xiLUzG5dXv0ao+OM9Q9DdhenOSdZAiKAE3V6+t"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605871510-f0e3ae03.0_1605871618434_0.7800544688280919"},"_hasShrinkwrap":false},"2.30.2-next-1605872430-e9660af3.0":{"name":"@xdn/core","version":"2.30.2-next-1605872430-e9660af3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605872430-e9660af3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9Lt0juw9xeRZsluUxzm76pDjy/Ikobu5IxPE/YPESr8+EnX53qFuxK+qpvVLOLskJDZjjytZTJAatUSJ820WNw==","shasum":"26e8a8580eccb003e466afca282f7e84ced4361b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605872430-e9660af3.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft6uoCRA9TVsSAnZWagAAd5gQAIMyMRMEbsk0N+C3+jQ1\ni7twx15BTV0Dj2HqDT8vHFYE05dKHMbGmTiW6rtMTIZHUeGxxGuqWpOHOebF\nsiLZYltnN3w1AtnjjDxxL6RBNkiBgPsjxJ3woV3hv/ua2mWfhC3sb3BmVY0s\nyEFfCy5ulFXV9xE9UMgpYLLyvh110pCBeKg4B0qYCgZVJJKptsVZTSlldo0L\ntbHapZF2z/Lbmi0e8p9MbwFT4vs2Kg3UW2tZ4heETk+T872o1zs9CTi0MW3L\nzzEEzgm3rcd7vwfVmSl/2otASyRuXEOvX9qmd9JUE9F6kqz9xDNYA68/CL9o\nD52tJWI648myoiFaIY7hOLLBxE1oJZgg9lEN93ydgUrg4g/EwG1VG4e6zXvd\nVZ9GRPbF6VaL9aOdtVjElj0LF9RjUgAYzdMMddLCQnyEyK1UBsic0mDYEl+C\nciVD82c97jam4HBAecDUBPA3aneum495vzQct+Usl83+q+3qjWEHZYsB34Zn\n97vhSrmueU0tuFwB5iU76okWwQms1JJMk+5BQpZM/AQM5NCFWS+y4j2X6Ppb\nfTMvgEPItDH5UEwq83DW/YY3OzFCMlJq/UluGLOcdzem1+q9TTwf/puC6uWy\n+4u4ijhc7tA2FpQlo+SmytlrmqLm+7usFYousEgxk/ix3Az8XVE8ns5beucL\neSYo\r\n=5y53\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqJSL1dc8IX/x+XrONaTHUWMtPSqE9xnY0cIPiFjDBQQIgE06fdhIE4EhiuYn407Hp9AUPqxXDQ4kNURWb1AOYKVI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605872430-e9660af3.0_1605872552145_0.7536404207068166"},"_hasShrinkwrap":false},"2.30.2-next-1605874896-0c72f9dc.0":{"name":"@xdn/core","version":"2.30.2-next-1605874896-0c72f9dc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605874896-0c72f9dc.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vI2HkF83FfoJdb3Gpf7DX6FTPo4T57I2XNq1OBN2l6ng0cu9q3yBPOeS3QuKUyVnA4khpgsfQWfnVgxTPtAo6A==","shasum":"3a903d4059d1dbfcc3120c35b94e07e124f5e7f2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605874896-0c72f9dc.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft7VPCRA9TVsSAnZWagAAlpEP/i9nAzop2qLe9r0Ga5gC\nbo58u8SZZsRaL/MlixX0B1q+ADSD1CmIITk0MJjSJziMYVsr9bA5/rlFywQK\nzTYeEOXpdwh/ItOpBYcfyuMnGcm+F7O1PrEetffWRfGeBeCE3zDiCmM/7QDp\nfyqQb4C9vrlYUru3ylQKQ+gMr1/ot5RvLBAO3nYovkv8FTWA/+oz4vF3MyCL\njZm1ledCrQjPKq/79nV3Go0+uIlykHJMnLJkTNtPCc7jOmkQAb1v/Yt82fzc\nmNqtNCtuDjhMb/e89pl7zEZZmpjRxTLmXUldMXYV0wYtVsnUpnZluHMcOSzW\nBsRCRo3t4TYpTuRcpMSNf35Kd/dHzOll8oQcf4B62ZKTa1pgKpGHePApS57o\nn7OggYkKJUIlvPy9oLRy+vd9/9BOTGDoVru4ImUuaRjDM8BTthfBBL9qhvJL\n4JsxdpGmnEu2PPVDYklr1JBT8R4Iz7eAsb4Z/wkJFNK7DzMJ+TbE2rbBbIyM\nry/ljAHjpablbmknQSNJNggr/ye1shU1uNriZBis1LlJ4SWP9BewNzHbwZL8\nLnEeBUIFqHpyiN+jmZfADxvowhY4ZJ0Gjmb/W3knEJEDyNCQIqBtXdNOs2WM\n5Q+tI5YIzCVdChNnvBP7uJ1UA3i4PNqp+qLO1j1fdMRdmIbD8h477V6PEVhe\nQXDx\r\n=7e4+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHAAZTm+x9zzEAz5v6GrUHNrsOE4iMFSm9sDeQttI8RwAiEAnmbkMOT+kMC63/5p46Oa7m9jcwZayEdM+nTHsudDsYQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605874896-0c72f9dc.0_1605875022271_0.5826570442507242"},"_hasShrinkwrap":false},"2.30.2-next-1605874991-8b4c9407.0":{"name":"@xdn/core","version":"2.30.2-next-1605874991-8b4c9407.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605874991-8b4c9407.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kOMMuhkW1ZAgP5eBMBVqhJis1ggRE6vRwixrCeuaxINnoV4hwY3mTM9bqK3QFJmeFqEC9RwAjdHw0qlxxMGRgg==","shasum":"cfcbf9a834533c97b49c3d0808149210aa28dbc6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605874991-8b4c9407.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft7WQCRA9TVsSAnZWagAA4eYP/Ay8GRtrkEvLie7vJiWv\nIK1k4DLdZAd/ftQQs90UJAOrsUOXFS70ULQli3QQbGXKHQTr1ky28xqB8Hwj\nKW9hNjbwd7KjZB3zW5j0zfmFl/hNfqHxy3ysLr78lNO+3quj4jIJOUDntM5O\nU50YI5Gsc0LbIdIIddY3+eUdQni68k3kJZnud345DwHNpPp8/4eyDgfLYmRJ\nRH0oTA03TLngp8uNd1Vlmbq5Pw7gV8rJuVU1CBCLCZWadQg6CAcYwje4AwQJ\nacZ6cE3/2Y/08+saEkTYH4ijqijybxiyVES0A2TjGn3IgvkPQuinTpaIp1lg\nhfqAObNkueedQBvGs/0OaqS0SyKXelE9uSJXDP3cUuyBgnq01xmF26fP0Vsr\n9v+v6vwvQtMv7W079SV2279k/99F9tc3vgJaivfGTiGBf03EVmMpcJGU4QXc\nAmxetE6veb5+mqTph/eF65RmM1/a991gIXes7Fx7PWwYcxZEZGHJafpGPnP9\nOp8D2xZcwFM4Ri4cXx49D8Iml3pB8EBLd9tG/cUZHzh55LyTjZ0w7dNuAgbW\n800dnBt8LBPS3ZK9QOgXmRHGX1h1YTiHH5o1PvM1u4B9qZ25EdDFRDh2AAMT\nzMHCETYvdMa3sPRbkLb9QSpC/hkwklSUyMBX4LTUO/CK2LTDbOd8T90iAms3\nZCdG\r\n=/WC/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWZId6xcK/e9XWGrpZ7YcWAvS/jXKLx02Ss7pio8SrrAiEA7oIYTKO4cLuujX9xqaxKHfhaL3HEa7+0ImCsJMp4Csc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605874991-8b4c9407.0_1605875087623_0.6005683260641965"},"_hasShrinkwrap":false},"2.30.2-next-1605875567-67179b44.0":{"name":"@xdn/core","version":"2.30.2-next-1605875567-67179b44.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605875567-67179b44.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-H7Px8b/lnQoiDr33EYsh/mc7MQ2f75Qi9oxf0cGKN+j+3ysYS/5qw3LeRcZkvHqqZd/dpAWaBGW/nc9xSZxkdQ==","shasum":"1c9037537f82d5f0383f4146954a4a83cf980a60","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605875567-67179b44.0.tgz","fileCount":169,"unpackedSize":649582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft7frCRA9TVsSAnZWagAAwTUP/Rgmt9Iez79vzutN4ZJB\n3yVCa8woqSP778m/iaEME1U0jRRfRuMBvlnARX4gmWjP/wmcvCv1jY+ZeNN8\nXaz2/WI06SrxMIhVfvDfU6AarpEHGJjcFxf6mnGjH+kt50Yv5cWDCv7VhabZ\nnMoOhJcmc8ZalscOUhcMDN8L8m8izGeHu/+3zbnHehCLvHtm/uyTaykf0fZu\nLIiy1cXTBtH52uk7/8EqOfK8Td2NpZ0A+eACIQluwK3GRvIBAMpVtDuCEwE7\nD2mS4nyxddc0BM0dmhxiE+BruY3FkmrQM6e0is/BDagzTOMrQ7NMyORNBFS/\nbtmyeshcCe8NqaqxWgyTIqhBFK+9AmbXHonkDvBB/TG3rKMmo2Vv7kWHHwie\nXjzG6FtyhpZGUoBXvFOfR6alLgRTdjcgxxLuwd9v4+KTo53VGl5FGsnLI2IM\nb/p6UMqwwUFfvRdWsgsj64XLSZ8XI0GAmTpjF4iZxElHk6RAmduAw5I5d0s1\n5ZWERIhQKmn7+4Tkzclsn47wgr32LkeowV921MleGcz2mAoUfYtOG9Xqa2jW\noRYvKP8Ht454pyQR7/5DyiNvCFCjFwN7fuXcA8IrB3Gqdqq1r+hzBxGlMYJO\nthfkwx6Pxe4Yh+AaSnlYz7RHVty04UgOaCKLgwHRHYtaj43USDyggqyYfP8i\nypm0\r\n=M/4D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB/Jt5clVBDqlujZFxKuzCTGgMupUCs4k5OBeh+PBwV3AiAt4MNXHaHc21bFNVeLEm7Lsv1B/ikZTtPWM8kO8GuWzg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605875567-67179b44.0_1605875690851_0.8473021611585096"},"_hasShrinkwrap":false},"2.30.2-next-1605882380-9c409b6e.0":{"name":"@xdn/core","version":"2.30.2-next-1605882380-9c409b6e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605882380-9c409b6e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YWEF/TXa666Kefu2Pd3z/P+h0uU0oPCUtyTghtoNIJe1pwRVDmiJDMM8Pya6O65JibAF2qWgIPMVPhAgC0ueDQ==","shasum":"50b3831e600843f36384fc7ac322dcd2ab6acd0d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605882380-9c409b6e.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft9JsCRA9TVsSAnZWagAAoYwP/A64UeveE+NNn2LVdfwu\n9+EFCgr/FPZdCEtM0T6iu9b87md0HEpBjX73axGw7vWcTej8G+6yBrvasGGU\nMfRS0kn1GT6Fc2Yl/p9jfjM3oGZSCBqXj3i6N/QjIlACCS206B0RcxYBDd8y\n96ZjfxnOI4OnhSvihJIfNRgCmP4pgAGq7BfDzwdwNvrG6aDMEZLWyzTeyLqB\ntXdLtsoEd1yhafp8TRtHhFdxaC6q8GVkSYKJjS3hcDXeJW8jKOA7rwO/veLs\nZKP9Rj10t4cFseLrnHdwQ9n/0f7xlht6JA/PB9mSHz3ZVNhWaBfWTQ65MGZS\ncYnsAPDPITWE9qswuQiigkCV4TVBjX8MfByeNDE4AqEOSzjIOdHM+QRuVE93\nOTuGBYwdxOg5ifEQP16hC6VKR80gAmeTq3ZrROtXNgGAkDhd26atGAMWK25w\n4DaHJPv7RWJ+dJ6pg81JT6TRO734X/Onq050oTokyw2iMqyKUULhcuPKREAY\nc5V5TdtmPJJW77BjB2WhLzfQn2YycsMTFxXZHxkvFETijFJ8gNghCn6/oFmj\nnl/3XS5pTl0CSaphqzVwrBrG6K+Br/TIiDEuGf5YbT8Do3aBPDZxQPUa2b9n\nE6Lqi63qvNKzZACmBENbfIR41djOmHFmgeL6pq4rMB+n4MUXnuZRvc/2tI1K\nwBV5\r\n=4lrf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAPCFTXAUT+GuE9R0fCLs/c5jLcRyFoPQ6toDGoyfELZAiBKTMV/ABrA03ldsDM0hepPpsXAHISNzUfjsqXU4OMOJg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605882380-9c409b6e.0_1605882476029_0.39630151884073617"},"_hasShrinkwrap":false},"2.30.2-next-1605884572-9c409b6e.0":{"name":"@xdn/core","version":"2.30.2-next-1605884572-9c409b6e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605884572-9c409b6e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zIBpmcQGi9y5QRg/rkg9OGzShMPau+nUf33b+IZzbI9i5uPujf8UHswiNmM3SZJip9r5ntlgj3clmhUWiqIymQ==","shasum":"727345b2f2ac77b59368b624f704b62f7a32ccdc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605884572-9c409b6e.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft9sOCRA9TVsSAnZWagAAh1EP/RPCTzFwYs+B4WRJCA7r\njCQUI7K9sZQ4aFPUbk595S7Wm0i3QzAaRtEMs3PNBpGytcCjkBVej2acF8L3\nDSgRndX1t1VFMSzeSkDyeRzRj9XlReLab/FhOc3uVx31ZKbELVEyGsxkSe9J\nkVx5dRWCYb0kFFIUHRskQAu5yoa1JWOkJgznklFV7/8fnur73ZCOJsqH7nLY\nnMUy4rZ70grUr/URwbXwLK2uN7EoX+Jlc+GrqrF0g+HZxKe9ghnKV6Jyy+pl\nTHTfv0V/u9bwrPZnwCyyXySjsjD3bZjKGhGEDa3vw5uEkmyn7X/Navw+ITzR\nK3wjroG6LLz58K0ghqoJm7K3HDzjlShoikc+rhgE8M/Wn80Ixel3yAkk8Zoo\n5rugT2FIPsW8HAQvJwnQrZcCq1LR2i8+pmPrb3PXyg7ww+34FbCg10jPi2xp\n3vZVOGAgAcR+1JtxWryORHjaJk4zg1k0JPxvfzm8LAbiQ4iISU/3CqmKJzfS\nCovc05WLFP1EXSoM/wJSNKlRU48YaIbDL5EH7JnmmKUV1c4uVfakzPi7P6BR\noUmLH8Eer35xdf7yn3fFYtrAJiO03miXzIRjBG+osOPk5U7rEB/3eE7//dBV\nOc9poE5Yvr3fbQxcCmWkRfowr35VnGcI42emj7QArI8YhCL5/m1MgljJq0FI\n1OOW\r\n=3aoC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA7SaaWb67QIgmBAu5eKoOwDjtx193bhDzXLCUD1xuWiAiEAsalrSVMbYHDoCKqtX1+K4t0eH2N3EhOhLO/4ih6w9UI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605884572-9c409b6e.0_1605884685623_0.27068014529188833"},"_hasShrinkwrap":false},"2.30.2-next-1605889537-3fcddaaa.0":{"name":"@xdn/core","version":"2.30.2-next-1605889537-3fcddaaa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605889537-3fcddaaa.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RPjSF6MKrxnxwrJYZFzX3YSsDyw3B63ugnYteLisgzpot5qhkc5E4rX1m0XA+IpB3E3nYO5wW3dlphJyT4Efkg==","shasum":"4640b85ff1840b94b80e088d8afbf0fde66ee868","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605889537-3fcddaaa.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJft+6ECRA9TVsSAnZWagAA0QUP/0LUtkAAPybvJuPnzSb/\ny+wmKfn4314qOszvdH7RLhH/2O/DLHeaBiillVf4vRUoWW6PTm1p/8BeYjL4\nJvTzMoJJpiAMgmYDd8WDOm3wHW9/lJccP/RMP2aJgPzUjm8vL8mWhXSDGMRq\nI4l3tQdZvRs4r+84mnHH3sdWigAdZnnC2m513+NJyNstj668Aga4efQI4NFg\nh7eS0SPHz/nHXBM2+TwjY9G1VE2gknOpk648iiYfCZyYKhIsWpd845oUqvcL\nxy/1csQG/mlEA7ORv+BFzNS1o74BWRdTQGIm9BmdC8Qf0kOY9N+IPUidjPbE\noLUb5AuIkjnpAOMzM+RH7QDRNw2WZthk5bBlOWNqZF4hbETpot3g8/KUi53h\nN4i7btD9qzjGkFYz1YA4hW5LL2mQbFwfYxJ7KBrQUAytz0ESGd+J2Ubkcw3m\nv20MiqZ+AOfZR6xhtWAnVsLMHe9N59znwQxUGag9w659Uh+mpVGoht33x7AW\n8EU6Qlh9k6ByTJMxMiQLK1frv5RXTIrVcjeDk3Bz2N+OhUkkIOKPInlFM7T/\nEFar32iqQkC0FUOgfnCrfscfW+Up4iTii3pX/QXcPRTGPzmt+czNSukirEzG\nowE9sAClVdk0+gT5pjgTuSQ8DeMXaSUpfKT3fD6/mTHVZvR6I67rkm+SO50d\n9Jqe\r\n=vJcF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIALMefgv0GcZcAYDQycYPaBoyPH9a5+pJQhYGNqxfcX5AiBK75IGRP3b8oADixg2sn4z5XPJYyJoLdXojSXd0bXvgQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605889537-3fcddaaa.0_1605889667305_0.35845957324085287"},"_hasShrinkwrap":false},"2.30.2-next-1605902721-7625b8d2.0":{"name":"@xdn/core","version":"2.30.2-next-1605902721-7625b8d2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1605902721-7625b8d2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bhPx5f8n3yBRA2BQUQdcRgLXIM/k8NcuK7DmT+QEa+7N6tyWADVDGFrmpaKdPVw4Em0kDMc7u+YJmHdaisgoIw==","shasum":"62c7ac634a2e2ae2cfa67744c6e754a93032590f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1605902721-7625b8d2.0.tgz","fileCount":169,"unpackedSize":638217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfuCH2CRA9TVsSAnZWagAAnbAP/jzPYyzIYwsczCfb4U+S\nl7fNv3orc+KDCInSXiceGHflIveXm1t1STEiY13U2bO7LLqSJyZTNWJ6GWcw\nUw08R0hi7UW9eTdMlJcuePhrTK9bKsnNq1IQjIV5egkiKtFdt5s2tebm3REn\nxS+evJ5tnenKZWIbgrpvfHjdk3YudULZgL6/k9Q8+9l8HkwOdtDbq0kWCJ3W\nGb1dV1jjYLuvGsTEaO2AVfuOjB2TmXw8pY16yPNV/YJx+oYr5JmTuFxdiOrT\nApQuhW05HSbq4is0QRwEo47j+Cxi5yOJpxyNNOUpnaBXVrv4V/3RhYVUt4zg\nK7+zbZPNYdXK+nsXAd5G6i/oMKdt1vyW6Fc8O2bVhRRTwFeEAa2aHjLONMeN\nzNHCgLxy8LngtuAiMZbi5xcqQpeuunVf0NF/l7oLcVmuiuyNTzreQqWgfjG3\ntmXoRZ9Tdrjgi67CVESVLfFEkNaNZC4xIj4TRGqwdcvy+yd85+3ZQYEFi2ef\n07dP/rHsF3QfpDzqUkiZMAXEfC3jGmNlr3oUdq/t7ehNJvuXtYLm3C08h73p\n6VHWzjIQs1XnAS8aAx7bFGA3Fd8zol6uKZ99jWqSCf/17LrMz0IfNWiSSUjb\nFiQLLxzok5Yxa66oL08DGxf8yA48y8JrQ8WYbtRloGUV/frOSIN8oAgNOYCQ\nPB2i\r\n=IKCW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNF4eUpvt93xcOaA4OLR7WEER/pD9Fw3aOC2sIBYm15wIgQFu6XnVasi37Ya2XcPShEh8HFcL68r9/cB3NiWHurE8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1605902721-7625b8d2.0_1605902837835_0.8785690611567585"},"_hasShrinkwrap":false},"2.30.2-next-1606073615-e6a86cda.0":{"name":"@xdn/core","version":"2.30.2-next-1606073615-e6a86cda.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606073615-e6a86cda.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Iae6XJxiWrIGWPkQ0OxQ1K41iuuEg1CmoWZp0E1HQ6etZigmXUQeZj6j+5bFInXzAM1n7U/H4Yy4ld7A6bIKbA==","shasum":"550084a1de001a83968d2c33f4b28c74c4759ac9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606073615-e6a86cda.0.tgz","fileCount":169,"unpackedSize":636152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfur19CRA9TVsSAnZWagAAufwQAJEkkfZi4GKkNsZOfmIE\no87jFqgGKuhk6/sLf8ZiH6FQi9ylsqClTFoezifWxoTOwFDP6qhBnnUxxHWO\nkrnxDy9sXtgjiR64Uh5sNUNdHzgGkZ67yeilyBj7g0uMhN9m8wJBQpnRfF87\n/UZ0Q9wfctChNJwtIxWf9jiWDku83+rODr+BBCXu7yTneR0ltd7HpKGFyz3c\ns8inNGWSdhPtVgatgGUYMzCvd4SOrDMK+4LSsYlazACtS0OwvLaAZ6F9rtAW\nGrTjnCBJlMoozJm0fcF4sAdo2HPk06rphqJ7KGhJe4HqFJcV94+dbZUISXD0\nG6TCMOPHDe7uy0rRY4dDsJIcuOQaV13NK5rlh6mUMGiK1K0rwv6jr8hphBO0\nu4lGyy/jDd8ZzWdycUOxXiacYcbByPtRaiZUS0g2m5dT0nXpiIT0xkK69UYM\n1lnfY40HSkSjCPstfvYZGz1ddNYZVAg4yFF6ayPAX8/mFx0N3mCHkaaZCdGQ\n+Q5G0BR4i7JGIwE0+IWyZjMIYeO5lKnUqqxUIPkfOg/9NPpkxP+nrBK8KME9\nLmdyeuw3T40tllH6e7FGHZ93SVUPsPq6SlTs5NynKJ1svh8oXWMVme0snK2x\nTDwFL77F1DHwdnhG7d8vMtjOeF3TuTMJkNIodqjV/3uRofXyNekqxNjcpUUL\ndBQU\r\n=qLzO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfwJeQd4x0GVXICbFMm+GqHorHBd+N1OL0R/AE8gcX9wIhAPyhTuvB6WJybAX0WqI8fURh+T7Xqt0h5REqMfEJzx13"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606073615-e6a86cda.0_1606073725257_0.568761186779241"},"_hasShrinkwrap":false},"2.30.2-next-1606073657-89aff8dc.0":{"name":"@xdn/core","version":"2.30.2-next-1606073657-89aff8dc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606073657-89aff8dc.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YZWxUbJYQ8jf36Q3XKY6FFrQ5V5mxvzTbhavmrDR096ewrNjZXxHFNhc+Dj6CpZW6eRruTgtdpYMN+7xsQFpOA==","shasum":"ca18fc6b8c4d116c297732fef6e221066b75040b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606073657-89aff8dc.0.tgz","fileCount":169,"unpackedSize":636152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfur2lCRA9TVsSAnZWagAAjo4P/iKDnFcYXvjo+1ZHx4q5\nvmPdlFkX83Ra0+jg1tVej1T2p7XwKVbVrMHcro2foXFiErQcvaCWwouZN42i\nj+diKviPVzxUN5GPVM2Xc6WDGeeM4NdAcZuPG4cCGFasHPdqt0pUFhcCqkKS\nYGrEqSqaJcKEOLwQ79TW+Hepbd0vFHkajnRn/Ew3slaAm5c5jLYJ49tSrBbQ\n3nKAf57JV4kZHJ2Aj6yJDTbcZ9B4BtbR+4peTCjz/WS1/2AHNBcNIkVCFFRd\n14qptrufVGkOve7wQEHUHmOa+xUrjiLQlbcAcB7KFr0Y4Ju9phxuPaPOAalz\nr3U+zewCMETVpeOrsA8QAguZ/Bh10r0WFys9aNPET+e961BBYqAtT0QkY/67\ndkoTKTpJz6Dq0lc53ob8L5KhornRCP+VIXffuDyWV42aXPZVicyW9DL3Iwx5\n57sYPsmxvD5lWvZSFHb/M9JO3vJu/P7WaUGUUmfF6/1W4gXkAF3HwBAJJhYs\n2yTlyma9E98aidHrt3uGUG3By29W2U8Dio7/WSyfUa7z3kTg5gUJE91cfKcd\n5OexKsku2EdgUD7+REURZAK9E18LgLqkJO/t9dsqu5VmihvGpewmCQUTrXKH\nSSZlYboCZGeHPk5Ipy/qoh65b/cM+SiPPhGIL1sbfKKuvE8XAJ6yI4L1oYOh\nKon1\r\n=MO4I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXtMsx8d21f1WJPA+7VG2+Y2sLKbNggYBF6deteTpXYwIhAIW05xlYilS/aLVZ2ueILx6EVreff1miZzWz+D77eYoQ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606073657-89aff8dc.0_1606073765062_0.45882278325991277"},"_hasShrinkwrap":false},"2.30.2-next-1606074318-6ee4b79e.0":{"name":"@xdn/core","version":"2.30.2-next-1606074318-6ee4b79e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606074318-6ee4b79e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mrJ1sc9Qc7Z2v6thlmhQ13+DIjFiYQ5LjY/WANoKZl3PfZJAsorWb8kDYo9Ta5WrDG/3ZUq3AW5R4ka1FrnctQ==","shasum":"4e2c28fe55aee2c9927b449940575a92a9bf3749","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606074318-6ee4b79e.0.tgz","fileCount":169,"unpackedSize":636175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfusA7CRA9TVsSAnZWagAA3lcP/3MI0v3G3k7si884FSYN\nT1l98v4hBRsFQJGqJbKzbSjuUbA4fslnkCRNrpzhzHBkZIphRkv4/sv+DP6i\njaoMzYwePDrcENzlJ97GrE2wdd37rsHQbdTVEmiyOi3/2Wfrbyq/k9mLxzkm\nMc+JWhW3ncU7hIEowR380zly3OJEp4RooaD5pw27UNC7CsFwBoFDBMRcKAxC\nxC+5Ex6HNmZh4Wi/bH5rc+V/H01kbse599hUxiOui2dpHXerlXO2F2rQB5+H\nB/hPC44/Aaujten1DrRhAyF/fh+5om6u1+YI0uNkBP534KE4KzXlXqJ+kWfd\nFT0LID3G8vHPDPUm2C9lMNPh4keeml6vVvVA7AY2H5uQy1wZ6u4evXsx7pFx\n5WjXIr5PN51ssTVbgmaeGj0zvxxzTfxRMIJynNmjbZfdD4JryTlO7G/9Bzp4\n4Bpggiv+XUVdzZFobaS5TpFRvx8stPOdhtjf5KJk4Se1B0L+SvUcduqj0VAg\n3u6uPs2wy48YXddkteHTwR0a5kjDY8craND3r0wlV1zaQYKVPDW6TgZOlnBH\nDbfxQ1GMz88ZC/43MylsSqtenLvyarVhSKmNbUDm1ZyscWBY7HOvOixEHWZe\n2BlV5ieFGK8fFYwLA756FPpKdSqjtpc0gE5qYLIYCi5Kd6Y0GNDjZU4d/YOw\ne8Ur\r\n=fhD8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIACzdp73k3TrPE+ZjKkRlSUENK+WitDacOOrQON/Ywf2AiEA+gyYKuhgO5rDx+waqK3cdze3szTK17XgT0772yUajuY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606074318-6ee4b79e.0_1606074427313_0.7396445001894605"},"_hasShrinkwrap":false},"2.30.2-next-1606075571-a5558aa3.0":{"name":"@xdn/core","version":"2.30.2-next-1606075571-a5558aa3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606075571-a5558aa3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-No9tw3nkV3y9ZCbQOADbjsINctTYNDPG7jk/ViMQZkj0uEdul5ojrP1P6M0HOl5i7SM7e8F5Dsl06fUnAXTUDA==","shasum":"ad3664180542bdab62b28381b02bdc4210797d9e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606075571-a5558aa3.0.tgz","fileCount":169,"unpackedSize":636175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfusUuCRA9TVsSAnZWagAAj9AP/1ZJTSgbLJf/fn87akCP\njSPwcO9TFmYXuIO+Y0U+lZ+ssE+mxZn6LcOg/gYfSio1hJFGMkmg3d0MG/HU\n4fayEpWdTnoxaRpevIKnXEoGoBzSB/46pt48bHpne+FQPs78nsEDV7ZuaJUi\nV5wJMeQXTrj0orO2ITupNXfwyESoa7pNoHz1X75kltVBADB9vqe7uPeW2Zvm\nALQVi/ONU1uBABZixJ1KD5SSqxTHjKhRVIYSleBg1ekRpXj5TjpOsUGdYQ59\nRPDp8rYylJz9RQECKd9kR7vLdpzgTybDvbXtt6SFe+L2vIvju4Ci9H4SoJ8+\n9xEpaiUJ9kvEYSSTHBoYXkquT0VyJxMbJA2zURXpjrHNSaEgGXCVAnyfElzH\nVahp9/IKNRLvBIN9h4FGQ9rDSQX0Kc7zjQ0qoj0UKsswn1Rpw5iumAz13CHE\nqkelVXoRhc0wxznnrUrecS8GZMuLCcEXbmql6mmpE9zUI6jvKky3rIWiHA3l\nVjq4io5sICV2726d0y4VMERg3j6hEFI5arKipUo8Z2mPPHJzbgeHuj6sUTj8\naCDeWyb1/eynnkGu32PD29xFFQYiSesNZ2ydUn+ARLV381fb9Do9TymxxE4K\nEy3I8svzNWcOzCzPXfS0T1LGzLK1TxmCT5AmvZcjIUgsDfbVxA6D5n1RudyF\nnb7q\r\n=CnLI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGsj5tVBqraic4i7GroI6QB0kkID4753ruflI3CBOjy3AiEA+hGPloNSFbpFSeFTaEczVH2F5dEr0/v/HimQ8Jq5Jqw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606075571-a5558aa3.0_1606075694209_0.7562487098087123"},"_hasShrinkwrap":false},"2.30.2-next-1606134594-e5978488.0":{"name":"@xdn/core","version":"2.30.2-next-1606134594-e5978488.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606134594-e5978488.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3K7cBQx+4KSMZSLjxCWWgEwl2ZfYgVo6ElQ7dVR8fi2tES0wnAmOplAjm3UawiBhcaHyxwGD29bi1Au6kYZ75A==","shasum":"c56c7890b291061d53a7567a2798bf3ee4c58c3d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606134594-e5978488.0.tgz","fileCount":169,"unpackedSize":636449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfu6u7CRA9TVsSAnZWagAAOmAQAIVnFGYoTNIsRPrjZXvi\n6m7vYtG2Sm24prVPEf7IaBIy6NdiWyXjj4n+sShJknAw1MypPLF4zSH8y0pJ\n7sEiHClb3VjCY9ZolAc1MsP58tomUYmovDg4qXKJBQBGkgd+yn2GMJen+tRB\ntw4pn+6JDD6A++ff16hQ/no0oC40/bWPjjn7cCK2GloytHWKMjviRlSm3msN\nDeWBRYmp8y7jPEYZpiS1JPwGSs/UVotZiM08maxiX8wgU1RNuRVBGGFzDFnU\n7p6AIfKkI2T3ziJdSl1MBu6sB0u3xVYcUAR7d1Pq8HISubPuSmd9xK8PJM9B\nOKOhQd+WM2BeFQ0LPJhRQ3pwqfUPbJZfjlyPEl3pAHlIKHQszr+XHG27TIZL\n8tAVwu9uFCA37aRtiB8HHCNenwY2prdLvwaxG/5M2mePNKBWgipyE1G08Eeq\nWbHN73Kdmc1bS8sJiEr78vSL1AcJS8E50kxxezgdXylORtaSMg6/Lqk8sb+q\nWNmW4Ei8M17DOjyME3mFNthuU7Z/ldbDuayMWdtpcw8hKoARbQGJdRoM7Fyk\n8kJ94rXQKpS45Lx82kd2d+gWt39+LtxEMtFJjHFMijs4Jjb6VkVwdq6Fk1LJ\nH+D8RfczWTQ0/jPEf8FHHDhjJPcKCLQKPHnIP5208GRnUoWfhDFRygEFOAtL\nW1Xt\r\n=EZO5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAm+XCktRph2vI7ruLMSmtqpBz+wcHqE7MJ6TEQOFaNJAiEA3tjEC1QYKIkw6Lk1DClOUudlQsbWdIdy9MVs2F4n024="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606134594-e5978488.0_1606134714387_0.6902507408288221"},"_hasShrinkwrap":false},"2.30.2-next-1606137054-3325033f.0":{"name":"@xdn/core","version":"2.30.2-next-1606137054-3325033f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606137054-3325033f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xm9vFdntAtPHKW7MmrVHfRvrsxdri+yb6+esvG5+3oj3/ILPOTF0eASgjF1Ejc0ZfXtBxe6Hrrxe1nv01jEyZg==","shasum":"b1234f40aa0b6f92d6cf257a4c8b5fc0d18b55c4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606137054-3325033f.0.tgz","fileCount":169,"unpackedSize":649582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfu7VWCRA9TVsSAnZWagAA0DoP/22Hl7kSxCktH4O3zFs1\njZN22C7VBmLfgtsxjju1K88oWc4//hP2ZhIM3/LXTvV1Klvv/WbJe+lHQPgt\nLXZ3e7L4gZW+PoIQEEeRwmJZgIo2HBzar2Dkwcl9X7rYVzVrnydk+jgFLQnk\nz5unlyTNxVAGTcFDEW01e6DFLJp6hGHMBNAN/De5AQrgt+zVv8mvrLSkHs1Z\nbYSRWYuyg1dIliBIZGwcyBP25x8dw5MCDYyVrTvdvLWIyn394Ccx58LEEASN\nll8IkuU0MzkAc3x2cNMFMFQhEVtF83ZtNnZkKOSqnzsBIHPsFP8uS9DwVBMM\n0SboMHZmRjPMWYVNrE3Z6l5XhuqGLC0AurchWd4aIjIJKvWjKlc/c4k69Z6R\nqmxB320ExLRul2nQXPz71op6536c7kqfdPji9+YMSh3H0T7JxrPDWtUXs34g\n4uTwHqlGd3ym5b2hri3ewvNC2Sqzt4KNBSpLE9ilDKTWgrxcii1NpaS+11HE\nJHC8stg57P44GR8f3jl9PXmkOz01X1kt74h3/LS8WGeH1225Pf0ksP6yOtyt\n8sNhZfLxBLfyL2cZnUjDN0bnyb0dlBHOdqESAqUtwg8/hajY4HWUzhuyDNkW\nF1jCmRSh7hgZdwv6Aks9pkEKneg1KOcAnk3fk0s//rzUn3XewvxOtKjfaePM\nnZpT\r\n=B5rY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID0T9O06AOYSBkH/AMtF6FhJYsgD4pF/WLuByXF61Ky/AiB8eF8qbxf2lJDlrgV/6tc8UEFfvO51wA3nFxla1hSsgw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606137054-3325033f.0_1606137174198_0.4816205636586641"},"_hasShrinkwrap":false},"2.30.2-next-1606139724-01635fb5.0":{"name":"@xdn/core","version":"2.30.2-next-1606139724-01635fb5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606139724-01635fb5.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-j6cVEwfSahcoBxooWkDtJq7HUSKbQ9UKhReccz1bwMLKAk/xTW5VQ7ShxaeiYtLe7tEaOlPqLP27V8M2XIlR4A==","shasum":"3531411b31fe0d3d40436b2642af42c1d768f061","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606139724-01635fb5.0.tgz","fileCount":169,"unpackedSize":638217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfu7+zCRA9TVsSAnZWagAAkEkP/3esTuNpEoxQkfJIpQkr\nqPaf/boDUXA91WOtk7Onj4UfO/Kmqfcr61Kn7ryY1vSfQrnjIehCKHMrYxFl\n7yHObTR4JozrQQcqd/W54MybOskrkLrM77I5T/i73Sesz6oDq0HVHq1jtJTh\nm43q1QPggCXWNAVq7IgmuJm/LKYMkmmB4mOD4h60OFtuApjS2G7C/dERqFV0\ndiZIGoCCY+0aZOk7CUbYLkzwuN0ukY4HMw7lJwcOnhc3q07ayzHbbQA+Hd7H\nikc19mIwzHk7vNqBW0rclEVcivT5i/x2c2FKjm581pnFhM9xrcZD7bce4hQd\ny7G6So1KNBBMHROV5MTJIC82QUt2qFIsQce1KjK24pDLtFealJyuhyPYZPnr\nztTU/M+B97W1ZjHKO3bPqyyV8O27EwQekCeRcDAtV1VANhczzR1WQyzSrpYQ\nooc673YDSn2zBWzkHk5E0si3F2xfcuiXL7Kb85TAaVJOKj+lYSh+Abe0zCg/\npXyZMfpT59I6T5wFckPWTJl/iqKZr3+nnEqbrZgWAREMTFBqymE4E1FBQt6C\nJDKm//jqgaOE5zimjLc0Wgc+mPCt7zvAWwTxgagaYW3Y99QohzafmO671gkR\nbJ1Ugl9uo16C7OWDT6hEdaySzAhoiiKgyTVaZMpxri1yfIE1RTb7lNlv1fXj\nb3Ek\r\n=o7K2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCupiTHRb2AVxjqZzpkCQEb4BEUOV2keLxs6E+8NNxG4QIhAJVSZQL9dvImqkUfoYKvc44fh0rbvnBMNDuWDGccu8S1"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606139724-01635fb5.0_1606139827399_0.48694725383728366"},"_hasShrinkwrap":false},"2.30.2-next-1606141571-c2c6a30a.0":{"name":"@xdn/core","version":"2.30.2-next-1606141571-c2c6a30a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606141571-c2c6a30a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+FZeYEYQGfPRIefmNows5u3LoOjoi2End5FrFr4fKZZx1f2V75tbGLRYzunpC9uo9lwj07ditj0mGlsH6PbcBg==","shasum":"c7ca2f93cf7fd6c7bfbdba72bbb7a95e9c6c133b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606141571-c2c6a30a.0.tgz","fileCount":169,"unpackedSize":638217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfu8b5CRA9TVsSAnZWagAATsoP+weIWYCiGGL0fh0tfBuK\nAjw9kd4/Ewy0AfcarfyBhYs8hzakSq51BqJCjV6Y3edAwWn3n/dTPfDtT3SR\nD1aBS2+ihXbgLkEwiOgX2RuKlIPpmWHBd1/mSiNNg5bJdwZvuK/g6NEmpqO3\nnS+a2nCphaVP3MlificJdWV3NNJdWzFBn4ktoK5Zq0VhmqmWXa+pDcjwotD8\ntf7q2izvB2vSO9pfM7nTgu9ATlQZFFnyag/p/4kJhSU0wfazNq9r0GwmoL5M\n1OOjzMlpLtv49tdtmcOXx5O7mGrAeFZh3FrtA0dLFmkBjRtP9g3HQJbVWYGZ\ntwCsBhaSnxazuRjd9M6YtCma3mnnmHQE2fG8yDsIZbGdrUKtrBCgA3t+FMv5\nX3vFUQnAcxthtpd+2Uw7M+w0ZitdWrww9mwjJkT/HVWWGIori4iQTjAmaSjN\ngP2uy7VmFUH6v3sciXYHE9ByNeV8elTcDP0bhjXNlNzOEYLBX6nU27BXUXFA\nQRN7rncuDpxvlDbTqtkiNUr2FZpXM4/qwIaMY9tjWaRmPa/Z2JYE3ZYokiK/\nGidmuumDzczZhS5ajemmqI8xkm9BfpXT9PVA4YN+3/OfYuP0N5iYWfihQ+i3\nVTMKDw1ApiqH6dJMwEWbJw8dT7hiPAiatc02Vflom4I3yZjCxMnVEhE3Vf8g\nQ2+R\r\n=gfWR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCH9WX2g+VgeLkkoj2gpzCniCjkwyOfmkNHUx+Srn1nMgIhAJV4bFAAcnMOuHucDBSWtKcv29bHoCgZOUSSjqSWTyi9"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606141571-c2c6a30a.0_1606141688459_0.4532588078905859"},"_hasShrinkwrap":false},"2.30.2-next-1606145453-8d03fcdf.0":{"name":"@xdn/core","version":"2.30.2-next-1606145453-8d03fcdf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606145453-8d03fcdf.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ht1Vl7E5jxnKjq1TXjn9n+0N4MhIos50eC7ujSeHUU/GRhzNnTsXgmy1ibrxFZ0hr97aq2aQoq+HfnJ/Sy3gCw==","shasum":"d9857bf22f9131ac33d46f893ad1832e82b977c6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606145453-8d03fcdf.0.tgz","fileCount":169,"unpackedSize":639649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfu9YdCRA9TVsSAnZWagAA6IQQAJn2qQcCGqKYrY6J6AIB\nu4ceg8R7orZRaylWKEivmDyHQxQNfqG2Ht247KAX+aePMWTqoPbtAUgdf36n\nPe533iwXM2oImo2yUS/IL8XA7v4JlBh1/Ue/jqdWMjebd8ZXKWmSVX8Str9n\nZKCD/Nj39eQMBCpSvDx2x2HhUkbbGChLs3yh7uNg880WVcEgVdGxMF2Uotbm\nJVclt0dZJNJxtefuSJ3gys2ubHiWc/RQquJFkQFl1UdDD6kkMHKRNq1e3mdd\nVqtgEDGDAgR2bO+yPbsXXInkQe8qwO/DDolSBqLH0bdffQfZ20mom0ea0qNo\nltCTG10lJIgUb+P1RNqd8Z6B4u4nU9ULiCN44X7MUlzOE0P9M7IX/7gKc7yc\nVQQ55R7mi1R/VdT2+SG5/52ndKcndOM9ZwVU4X1odQtbv2+0kIUq3LhnTmz0\nMXrScy3Hr5flJ/PF7We7vW8ltexxg4T4jfWSxcbYQyxmd755be0usCcNBqOH\ngMHos48ipMJun8nd0K3fMzLR9a9nXf3rB8Xv9xD0lkjkGCSRaEA3cELX9iJp\nNoCWUT0lqdL2dfre00oUm7J/c3NZkE2JJmIiZAWw9JY63TBz0WXVO7/xWzGO\ndL1xZwLZVLk0/IzTmpDDRk4H7kMfbrunu4e3RgeTsdvAvFh2MTPycWim1MrM\nlDWh\r\n=/wUm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+YUYnX4Z7uj1/NAYXOZJ6WPsD7EwStVqp9btwhIKKlAIgcmse/o+SXdSGAlqhoppBAEoPHkg10eco0F9tZ09luUc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606145453-8d03fcdf.0_1606145565143_0.4353160799144691"},"_hasShrinkwrap":false},"2.30.2-next-1606146957-ddcd4af9.0":{"name":"@xdn/core","version":"2.30.2-next-1606146957-ddcd4af9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606146957-ddcd4af9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-R3kcYN2JPRrW8j0sCBortEVQB42g80RTuegZ7YKJoIqSrPns/jXgbRExozj7IOtANvEgBRa6yN2ESAT4r7tUnQ==","shasum":"8970bcad91f5a9126759276ff49a9221738d4f52","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606146957-ddcd4af9.0.tgz","fileCount":169,"unpackedSize":639649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfu9v5CRA9TVsSAnZWagAAwh0P/jAajMQuBEoWKEqthDqO\neUK/QV5gllwCdpS0PC3pYz5NmGtq8o/Xz5w5BvvARdy2wU712+b2IymcrbbC\nlqm0lGAeOnTV970k3oGnBApErbaFqPaTiYgvyIN3FfV7DxAecW9LZpPkMcqz\nNvuRooduOSym20VRhsgpP2G/b+Yye2rD+a+lgFk1aufqBYQ/w/Og7PdcmA/a\nkWub/MBFbF8LNAfRoX9RtzCspncTn+cBmEe2W7P9ptJWeWWA/xlnbDif+I8V\ndtBRTv54fYcLHWVpup5AFjhouNhnH3uc1ohGcbglZlVgoDbJOepkjrrfKfl6\n26y5h8jcirqpucXWqkPTZY/yp4MKKhzIJLwkZlI6FVNg4Pfu4cr8xtcuS02Z\njvop5FZe9oXWzHzI511Sj82orfbqKo1tIWaxq4qs9EC1y5ej1CyiJProVhfS\nqs4DN8FwhKCtKW4i6eG1lcFU0ij3eHTejRxtkV7XB9hCDVR6BMkgtjJq8biK\nFcRTzg5Dyv0uUuDM2WkXSJnbnBLNGYaoQ0IV70l+NG0lCclPwsmBiVvlIlMf\ngqfgJRGwt0f7A/rzfB1nQZrtCiha3VQKq35ZdkJMMguAxG8clInnPKp4//XG\nE8qQHuCKjBHwH8Pzh6rHWu8sim5pEO/Ef3gq7SDIWTfaybKnjxFdcbpCKm1f\n07QZ\r\n=S/R2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/4XPVdqQTOxL3kbFYk/GopdC+LRsu3PLDoC49Xwo5nwIgcauLEmhQ31Y+Pl9ODtxtKrkRe/GUKtW6LcnLLlwUldk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606146957-ddcd4af9.0_1606147064530_0.42016456850811523"},"_hasShrinkwrap":false},"2.30.2-next-1606151267-a35c0e8c.0":{"name":"@xdn/core","version":"2.30.2-next-1606151267-a35c0e8c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606151267-a35c0e8c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IW/lSEVyIUaeoXJKqS4v6AR8+kyBKiK2zPp66IdbudM+8U5rpZS8y6Yqokj2qtt+kzYqYcguVtLXwWhY+oPBxQ==","shasum":"35fe072795cbc707e25eb64e8a65c0583ab8e9d0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606151267-a35c0e8c.0.tgz","fileCount":169,"unpackedSize":649582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfu+zOCRA9TVsSAnZWagAA8hYQAKO/vbP6GtzaLB60bq+V\ntHXOW3ETUkpNwH24PNLD36M8ASkT6yvUuPKYej7bZFcqQaWAGQRS0CJ55D0R\nJPmanmc/J2aPxrzCP7Ovkg2dHSv3M/amM6xA1eb8Kx90B5LQDIMaujMc4O28\n6/7HYaQt5w/eFVIJ4qxqx2J6Ms48MuWYlOZqqQx3dA+5u2uCOifojBUciWvA\nRSgeL3JRW2jNOJvjHzWKwEDx0vmyF+gtBIL0OgrXvuWhVF65HBjd8rEcKnJM\nz7vCyCpeH4gkBU/P56fFr7YDed8ahl3VN2ssFgWsnbG7ufi6VQyB7MmiXAvX\n2DCyh8fvqnjjvMrNBsZnRJY3GT84zwFCupnw/G7qMeuk2OItRBBMoqptoAfT\nXYm381G+FLwxw28mx8Z658f9eYuQ9z5nil6BO2vqhSNDH33H4rx9fMgedEf+\ntw65yInr4O3TwWVAjh3p9v6d/65D/mkglRM/7a2UIgucRrLBenFbARREF9Ht\nRd/4Zb46gVNUFJo7tzOtQiohyyUfnAwep5tZbCcaNkTyZs53KfrGUoj0Y9Q+\nye8RXsEXRiAihYinYfgzEDoF2HE2uxXy3R42TRs6YSdqhdfbZeZXr6X4D5UH\nrKpjaVG54T4ExGT4/vhHOOiuQU7BjT9m/g8opy6oVF74tU03NbiucGTzCae6\nHD9T\r\n=r4DR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGW5XCi/fqmDdCFAEnXLS1nsv1r4ZvHh+1J1tV9+6J2GAiEA/VvEk51l+n4X7p89xZx3c3evA0pZ/1pwTQ2VMMtpNtk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606151267-a35c0e8c.0_1606151374138_0.42943630273988664"},"_hasShrinkwrap":false},"2.30.2-next-1606157020-d0c4594f.0":{"name":"@xdn/core","version":"2.30.2-next-1606157020-d0c4594f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606157020-d0c4594f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ghSAyQUQmmUYJfPoXWdEit9f4eqfoX1EW5pKM4eixmHh+Mi59/YWMmybMlDoGwIVyPfYRWssbIoBM7i1TODU8g==","shasum":"23df133b346b76e6b4ce60bcb0bd627731f45e34","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606157020-d0c4594f.0.tgz","fileCount":169,"unpackedSize":649582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvANQCRA9TVsSAnZWagAADUwP/joqnS2E6QV3YWPUcuS4\nN8I9GJJNd4N5PJmwWv3snsICvK+RJoxoIJRGjBl5o/iDZzI4qk3tTG4wzPSU\nIpeTZgUvar0YEqsjnzys7OASQ3FZueZ1pvE85q+nbi6JLpOBXOEjXrben5tP\nDQcsdApIyBWXo9YhHpW5EnF4DKtZMCL63CGougsudIYxmg74pHb4neT8Hvph\nq4QJ/ooeuZVXOxUWavbzuQCN+TjUwMy4KGqsxanS28AEKRiSSOBR9t80yfRU\nphQLwFbuQpcDGjoWP01zdUkvLdXCHZZHHpj3zjtJ1j7HR4iK8bLK10PE6ca6\nkjuqyIlAEEPIXyMGduFfszd7FW1i8Lae4crlJslPlKpDCKivJjkqlpkxxs/M\nTO+jf4tO44kNzt+7ZEwz465CA/xYGB8EgTt86NjK1qpGX12wK9/B4/j/9PmL\nSMVCio5zQMDtVbzCAUY2i7kJteVnsmau8PoUdvCikUtG/y9MiEPrvK8YVXs/\n0+aYuX+Ct3JhJpThZFHOhT3XUPmtPjdMeoR6l6FHeQU/h0MAixXyc/wOSYkd\n709LK67XgJNBFw2IPEVk3KiB7taHnglsuFx4oNsRMRycWk99woQKIoZMpkTJ\nDjNG9460Ue8AsUHkaOAEzedroE60ohPRvfE7D9UBY3rJTyRi1OW33mGj1G8z\ngatt\r\n=n1uS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiDNthFb2y4CFLUSp4UXA3GlVW2kxxaZWSmw1zHYx7TQIhAPYVZN5oZ0Ju7mTyUFsF4ta8ZqcAytGq5/6YC1Xms390"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606157020-d0c4594f.0_1606157135216_0.41838792278723225"},"_hasShrinkwrap":false},"2.30.2-next-1606157993-6b474060.0":{"name":"@xdn/core","version":"2.30.2-next-1606157993-6b474060.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606157993-6b474060.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ABeU/ybyYq40f/ptozLXy1ndw4Y6CPjccisOlF6qSu1CM8YL5oedJwR6yc+kiJpJBkgbuVWcwC7rQQPIpFAK+g==","shasum":"d7f03b91ea1322b19163ffaace24a50a6fc02ba7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606157993-6b474060.0.tgz","fileCount":169,"unpackedSize":639649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvAcjCRA9TVsSAnZWagAA9JkP/1924b1RXIlDW7xvZpTs\n154NDEq7ti7yBUM5D1VrXo0YgjMXU3jh3UmOspsTvk+TWC9TjXCSIhlbbWIR\n3qSvdspPJfqnNDTDAgSdF1uciYaHr9E+k9FOrfpxP25zT2yciE/DadCl6VJv\nrgfBKQgC9V2AQZtOaMk8ZmUnNLQapBVSUunjJZ1bKavlHgDB9LJEIghc2b53\nRKh46MS1TrDRMWj0h/Tsd2EqEn4N0GUtm1wpylpbffDYjj8FHA+qDsQI7y48\njHfvivQiqCoOLcni1/VFCdM5/BvoV/mXOgRWmy7LoiNj1KQ/m+MtvuueKKPI\nHcDIscUwA5Vn7LW81zD2r0F/T+Xe1FS5AB56jYryt9MTXmqqfporEyz4OTp8\n0H2qpbSsB5VBjCBt1dA04KbDby3ZZ6vPnCxtOb46BjanRhXMi3kYc8gFAhkJ\nywnqQG1uGHGDrRxmpLN7+j39IPvakTaPwtJ8Fcc7kyOEb0YIiPSL+OZiZMiB\nWs0DXR7g8+HWFYjOXMzjhezcVNgrzCZ0nevQAe+SZSQs0yVxD8nRiDGcO8Ij\nV4/29QS4A09rCvUPL8stOHIF9a2E05jHL+RZ7jhqapMgmN6M+O4tZZ0TuIA1\nVxhyRqY8ExUkCASuJxtz0UpK/nWKj+LKFWTHvSEe0moDab3kb7prk5zS7C8t\n9cBr\r\n=0kCq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC5O1PRP0r5ETtJujlHo1aryk+RDfse0XfA8fUgGFEVJAiAF6C8c27hlWZsqtS2crSNlfdNT4c25VHyl4iZg0SwSIg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606157993-6b474060.0_1606158114242_0.3412344720141567"},"_hasShrinkwrap":false},"2.30.2-next-1606161755-878cfe15.0":{"name":"@xdn/core","version":"2.30.2-next-1606161755-878cfe15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606161755-878cfe15.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-i78QEVx9ISTOouITDgXZZjN0rugqTTqAg1rIkZynQC5PFk2k32RvDWHpISysZIcMb8bgzeNo8O3WajtAV+yx9Q==","shasum":"db75352b9575082058c8da24f2ef57b4509bff79","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606161755-878cfe15.0.tgz","fileCount":169,"unpackedSize":636449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvBXQCRA9TVsSAnZWagAANIkP/0oFoTsRpHcVy+wEemGv\nheMAyRS14DRxI3pHq3W/NV/ADwniqjw8L4CgZ3VjMcSXjQVOtTAMoABPldTW\nEV9NnPAbeNpsz9DbISjYr8f7WUvVJ9yZmPSL6zAxk2AOAwIXd9UfGYWhgiO2\n/qERQr7gY4dae0FcNVwikXGfoS2Mm18qMPU8XXTtwRd9KqLZJ9XdJvP1Nt+8\nMLfK+2V1pjM3c+gI7dmfRZyOT7SqVvz1L6TxpVI5Xp2smCmNTjvDIMCQx5ds\nOtrBoRYZtqE9EXt/X2epK0Zaag/b4d9xJYTRZeH8bLztunSEmx0PsJ4cLdtF\n7b+kRrLDrNz/2r1oyozDTMCJu87WNhGlQsb2wFZtFRi8UpOVXn/TyoHTJlx1\nNE7fMK5N26fuHRF2vVWma+8IF34h41fN894vfIoXJjpmvjXg9ceZnKvbL4cb\nnPmUwgnIJ3wMdCnjOc+sHAg/5sRLztZIMnjUp1YIBLjMx+Ln0EPWqWE6wO77\nD2y26RWdZfouKIZ7j4JpaXql/PIIWmUZtofgEzN3m1C7CLGb7BCbRirlHLy0\nFOD9LuN26smbVjiEr49NI1MhV+kbhtCJig2Tu16EzFis33AwmrpeJpST3Ztl\njbLjCKmrEYDoF1RfwtOgzQS5H4EvTBZd8apjvEfCNndo/2LcnSWRMIL8Ck1U\nGqyV\r\n=Pz99\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEqHul1Xi1yBjsFf74t2eZ6+fZe4vtEEiEn9sTfT36m7AiEAlVmqn5R8Qm/okgDJ7e2ZEqKUrq7kZ8vS5MDqH1WXXlM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606161755-878cfe15.0_1606161871763_0.4267332904783485"},"_hasShrinkwrap":false},"2.30.2-next-1606162829-0c72f9dc.0":{"name":"@xdn/core","version":"2.30.2-next-1606162829-0c72f9dc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606162829-0c72f9dc.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SP2LO2mGsM5bPBkry5bbF/tLbTQ0mZ77e7IBWGuNACZRGwWH/8uwDnW4U6jUBDvhIO7i/ry9MO4CVIXp3GYCOg==","shasum":"6f93dc041a123d28c321925fdafe29b4201227dc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606162829-0c72f9dc.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvBoECRA9TVsSAnZWagAAkzMP/i5kxQcVrPOO/NaOu1/M\n2fHOTgYsUqyKeQEITVl/2zEGZiDQw/yI/1pfu2EBU3cqd3FkQo2tTYd/ZNug\nM1b0pKPcCuh/bASrBzDJfkLEFID2+ngEg3EAjArh8679cNBFUwMRSSax/TNs\nr53IZm95zDkX7BuGKV2RgHAIjRDnvYGKwufFJ2kRUZVZd1U5Pxbk93y3y5Bj\nPZnB4FLPNmrWEKNLkV0ftAiFz40cfo9PB2Eq5MityUcbVYCNnoTUW7Odarfi\nzJC2idxaA9NKk9TdFYZY8DdAU8GyXMo/DX4rQHLxWZnHdTcvvXY0grFMS1mK\nYyFN3PIYK5fwyKXcz0KI0C9p/hXNT1KlOxrial6fOuhj1qvjdR6phgjcFYV9\nbSMhyJVeenNAXig3jOAYKnFYjDn+wmGy8qHT1hxu+CaOmViH09gKBrTvoUKu\nED0icAIS+w+1H5KmCw2+V8y3XvbK4iU1YNpO82JOOVCyg1RAI4UpbeGnOef/\ngx5AhiZ9hNV75mJFSOvaapblJ2ST5xWvZBU/q/yDaiq8FAtIoJD9OLg18WpX\n/cm7ZO/iHthUuAryq6oBw7kRDJaNdl7SBICj0hpnaKU7oentr7mk54/ovuSN\nNUJ2VuoipL/vV6ps2z3btpsg5iNs6JouBAuF6gT6yUYAgOivaGi5mritgsTE\nLtRk\r\n=R7WV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBFQOT9PwaM65TYSRmhcPANpfeSHtXSFpXBiG/y3F2JAiEAhItDiu1p0QGTrxj6U+6ipZth3tSb2LgV5NLtU+UyguY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606162829-0c72f9dc.0_1606162947320_0.6018644118710952"},"_hasShrinkwrap":false},"2.30.2-next-1606166242-a6eab454.0":{"name":"@xdn/core","version":"2.30.2-next-1606166242-a6eab454.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606166242-a6eab454.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-DBR4HZylZbskleBfIGVoQ0DPp6fHWiQ9PBqlhwVc+upeExcM98fL7cjnN5iI6zjXjyhxfCdRvcxu3+GUiXdPYg==","shasum":"d5fc0ca060c743f640628dbe392cae2f72733b12","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606166242-a6eab454.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvCddCRA9TVsSAnZWagAARt4P/0HdhWuRQNwDr/Lu5bOv\nverL43+DsS5rgGSMzTpLl9msaJ2wa67TjGB7OOgf+vXe6tKp9q6Xw2AHeNoG\nRqOW9PplD/ZeSTRyRkQsrEpkVDBl6w89viCTC3B0SzIgjBbsCvaJVd1ShmR/\nZGdCHwSA6fZBExeCji9KEL+tzPwHbHzeKP67QVyGmphelJm7r7uIA76ZMIgT\nqin4zn1+dMFFwJQIEX/fN432bx8IwoYleM6PB7+I6aE+MFWDHvKPO0BCP1ZI\nGmq0mYuI0tM9L2AXFQi7dKhTqmULMFPGFCh523M+ndejg1rTo6eciNzHaxrf\nKzcitzmcBgnlmo/nQiZYNXGcvG8dtbRbo77mjapUYPX5Z6KoC9mIOGmvwzyI\nHVc10hlwstIQh5jbNrWqPHwCgWTRhpXel4R2B2sasnde+dWlQl5+05zbSNbG\nuBTFaCtJUu8lzoUdgLhj9orgA9N3w2p0r+mf117H+pnS8csQzmlJaYnwcXm1\nw5xaMW9lkyCZ0aZrX1zgdwdzg/1TBKGlU4hLAn2mUxPKn31vRaLu2Hyn2zQ2\nownXfJIOmzUC72tfwIM5R7bKVmMw4cCkms7Rak/oLVG6n1ckyHQx4vzJ3KMI\ne2MlQPM//fCNS/IuTHWb+l706e7ySBpYL7pWLnpus2tLIf+YpReTovYaTtm/\nV0/e\r\n=KSD3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCel5hPcc9s6cijP+PWNj0PkZcmlPrlngZ8MFZX4/SlpAIhAOpY9TMu8OXS4ERsuAUBXQyGkIxgHh2AuCXB2incdeZ4"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606166242-a6eab454.0_1606166364093_0.283126405468368"},"_hasShrinkwrap":false},"2.30.2-next-1606207176-4b9ac393.0":{"name":"@xdn/core","version":"2.30.2-next-1606207176-4b9ac393.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606207176-4b9ac393.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MIFJ6YJoSH/iTtNLOO1Lph41jgjuPViCP0MuT2G/GOS4IdermAjt/svB2jeH+fA8/9wkk3Fm8xA9gAa6TQstFA==","shasum":"b92a8aac504d99248f3ca868d431f2e36686a02c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606207176-4b9ac393.0.tgz","fileCount":169,"unpackedSize":639687,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvMdDCRA9TVsSAnZWagAAoVYP/0mFn0oCXI5llMLhTOFF\nCp9I3FDZmVXPI3Gdjiw3cpiScxGvxxTrFmwWQDcq5usESXc45rasWdvMHpVe\n67IvUx0so3DfrLOxuGFXGMjSoPn4tCs5Mp+H8q91Sr0F/8/m6blaQg1yz+9Y\nWCiEvfwk8DtLO+CyWkPE61sgG78ldy0AmB0yEQkWT9JKZQo5t3almd8Sj+ug\nXvGvfRwjMPiaAvXr/grWMAsWjpMwYm4kMepwxXuVF3IRcK3udYZwD/Kavd6D\n8ccYHx/JIW91S982LqZas9p0Ghc+kTWX1XmjtecGZgNHmMYjLXw999F3bcah\nr1lPqOXE6RYYJgzfCS/dZM4kepY1aKeLptxCf28hsgzct2i9lnCFF/oEpOTB\nwsv1CfLBcmm6sZ4vFDnIcmtZOeazUTY2DseA3SF6GQIRyCclQQh/hgwjvfBn\nAkQG0O74V/b6lrxHGavdjEXFYC2RogEvprUCBL0PIikGWBJZQWMjjH/OYqGO\nA4X9ctxibHPAB4w6cVpevrchah85fGxrrZuIwp17P6FVBc/kxmrNyuUp6GwN\nfYBJB3FvrWAjzxf17yj2oAGPUsduLBcluvBYIaZjaAkvPgxInuozqdH5C8uz\nSbXRiNcF8UaOrk8DTmdaimsWeYcqNVCprASiupxMMZvO20HU7NhNXgn5jmy+\n83xj\r\n=1Enk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID7LARn170fm3PY+aRqGzfe9fVkiAwSmRLxYtj6wLyJGAiEApbAWOQD9Zf595mU/hg3qZ1z+aHagQ70wSUY8oMHxWJQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606207176-4b9ac393.0_1606207298379_0.3525324043836784"},"_hasShrinkwrap":false},"2.30.2-next-1606214059-d51524bc.0":{"name":"@xdn/core","version":"2.30.2-next-1606214059-d51524bc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606214059-d51524bc.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CS/MWiONl8a74ywWV8wwaQatMjl4hhfugcgGKnHe+0MEah/oXboPiSBxkScxKukTam4IJbukKQEOoimFH3yYNQ==","shasum":"db95ff99b0ac878fbbd9bf5e0dea89fb7ad35549","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606214059-d51524bc.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvOItCRA9TVsSAnZWagAA4WoP/AuCSfEGyafUWrxiW8Ha\n/PjO3b96+mUSsX8L5q0YsDWjTA2WI6xh20QEwETFapxTtBp7ceNJPDP8CX+l\nZVfpEfB1b7vfxOYGhZ6uvncVWirxHPlv8nha0WNtjzqdyH0eTwpbHh318699\n6CjLdb/DbGELiTDcZDwT4BSqWBJEBxIiieUbiG1at+DAfb//7ClMvXfUCmSF\nRPyche6wbumbQfZ6niiM8i6QPp4RHZlyf0e5vi3yR09s/6MV0Mef32LUaL1n\niC/SqT6Mv5MYYdQ9riEW93fU13kj/3WGFtcvoSF9ZObcCKFgE5sBRuSfHmx0\nVkWVcyPTZqxQlRWtHbvGeLWTuLXcedxdQogpnEzVSR+f2f318Jcu9xDdY2dO\ne3NLmfx2vSf3MHyP3pLpg89YjtDJ9u6vAz7ZOr3o6LfIqaXyGaNoIEjWk0v7\nhu6sEMM63HNAjrbw4PJosx1sDawhZusyEO3Yv6eSzSSnhVBzgndkBGGmcA4Q\nyzfdjgi5fh0w3cpEgjsVQ58nJez9oLzo5x/lEPuTklK2d2eGtlFrZYZFKtM2\nkBoTvVm1qTqSzDtv7aPSmdB9q39zurSMmmMt0wkkaK1x9swKKH88d1eCH+UT\n/qipcN06jh6aUUjpRrkz+kv0+1CefCwYrVNvvBLmlO8zTHOhcdDDVyubLZAr\nplev\r\n=F+WA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGGaRkxKPEMQ7B2fH67fcC05wKuyOu4Vx8ysbW2RLenOAiEAtzly4q6MHexYHwlGYcwJH6qKuUCUXsAUi9RQN1IDSSU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606214059-d51524bc.0_1606214189137_0.7431235634706923"},"_hasShrinkwrap":false},"2.30.2-next-1606215144-2d50feb0.0":{"name":"@xdn/core","version":"2.30.2-next-1606215144-2d50feb0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606215144-2d50feb0.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NKWZ+47E8WR68wXLOmCjCbaAruE65CqhoQZ8GG9uTV9BlsSpEga8PcqEVjFttFxEBLS0hHArR2mGSJ7wNtl5pQ==","shasum":"8cb8891b0f055eb3e24e929c8cf8ab2c8f75bee6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606215144-2d50feb0.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvOZUCRA9TVsSAnZWagAAOYUP+wYD88R5FzZyRRq1YgNk\ntfgE9ZNVvxmJJAkZlWMTTBcNofA8JIVZkJdB+GuGdTha/DG6AauC2MUvg/q3\nPdRGtc3kM9fvnE3KSB/F0tacaIfLWorOLlkxsz0T7r6k9IPxNdOVcxb+OxO2\nux+yGnFlhji5mgktAJBqFC5AKvq4Q5LwF8tj9Y2cqScYgxQQ7unGU/56M2h9\nZqdiwELSYYH38GeifDBynTAswS+NN+A0nv2sYPbbDJjTEMQuhTQRWuZ+9Cjo\noP4etLstVGnYVe4aApoLOI9atMQw5qGTIzA0IS+tSMJ8FX7J23ccuc36cHsy\nVti8T139ZEmrwSR8oELx/ZWzSxQ4417iSuMGrBJwaW2qwtjmVlgv8F+XlI06\noSrU/GSVYTPH74BTk3sQm1x1dULCk586Xow/3YyjQzRXzBHUPl+bmAugEPfw\nQbFswEpfqSLYHNVc7bHZp227vEH1enWF7LVxq/YwLx0IGlh3rK4vJP4z2Fo+\nTumsWzMtsZCo/NWoar5M68ioOHgmKwP3q4HYi0ZQkRx/vBrrelnD6zTv/+E4\ndmQhz30RDHPmuHsrF1Z98PKhyW4rJH9hARKDP6zn6qGKov5m6Fi3j+wepXKa\n6qhandC+w0uEXuGnQOGYvlXPp7WPFdlmcf36/of8AGAeIoIUBiooQMJEMFBL\nKdqe\r\n=PJKg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyVmclKEDFIfCDyiJ2t7989fCDz+Oxwh9oUwy1pljk/gIgFpi0IwdQPvBHkVuWao3pPkczJQXSJe1yxN6cvr+d2B8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606215144-2d50feb0.0_1606215251936_0.7249616715442002"},"_hasShrinkwrap":false},"2.30.2-next-1606215320-6d188fca.0":{"name":"@xdn/core","version":"2.30.2-next-1606215320-6d188fca.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606215320-6d188fca.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mfdQ6rhEAdn9ajVGK6/VKCQj3Bu8LK+KcRfGA0pJED/u+1k81+djEcZd9YpHqy6r4rUjRe7xYWEsvhgdUdx63A==","shasum":"2f71eafc89f4b97e8d57a5675e7887e4f9d62b82","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606215320-6d188fca.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvOcJCRA9TVsSAnZWagAAqCsP+wczjxs9p33zr22U7ntW\n0G5iLQ5qvVZYnImb2JdZR6RoGYTvbJU59K25TI2nKktdysOfAuLlYw9N5Dx0\nTjxavVgP9IwI78CJXtdYD5ym/uTK48UvayzAnqhsNOLkO9ZMdshwMmOGdKjH\nxkZm2iab5Fp4OzKzh1FHJAshSGw4iG3KNwM0wlXXJPDkyT8K36o5ne/ONDKz\nW52fVPwEZpgGdDigyN2FcHdCBKRa8MwHffhR4rQft/eImwquEu47LkacDdDC\nRIednhYjufAlOATe8Z0ms2zSKdRHSaJb/52Alr+kTzCN9IjlYED+pEFa+UgH\ni5Q/PXvTHJLcGV0ODpVQD2dNe1L6RH6X16qU3IkWiMM+glEVFrNg+DSeIci5\n5h5tVmcHuAtyAze6L5Pt3vDHrjc6+EvI7GswRP5HFPFV+g3ZlqyS065u++Xu\novx1tpGUNGVdPrlF2VQEF8OZIx2S3ABLLER8YLqH+Xlqf187zu4sbRQjFhGO\n4skOcGf+l6u7wd3c1i1JA0N8K+t/303Pjntfi7GD6tPYEZLRxFSpvLXmZBnz\nQkCuxom2OYAonkV4JQt+8SeS0mfKt5/qx2ueNm0Fq7nZ0LdNjTcnwXMLuVau\nScmWrIo3IWf3KJNjx1HYR1df5iDvlaplq7H3Gh2qB9lVLF59BQ5xJdk9r5ma\nA2hx\r\n=R/d6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICXB+zUCp2Z0uAd7sBunSL1Xg+E0Vij4+Co9v5fkgQNqAiEApjzMam5v0aci4iTzFsfqYoKSwezOedcsIr8ah02VvOk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606215320-6d188fca.0_1606215432479_0.4319101130977969"},"_hasShrinkwrap":false},"2.30.2-next-1606216332-219c5d18.0":{"name":"@xdn/core","version":"2.30.2-next-1606216332-219c5d18.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606216332-219c5d18.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-cbUardO3theWNHp4b0VaYinYEiE5oITqZ16tnhaKmR7TknVhxq06sKZDUVwgHmpX2CXMoxfGix3hrEOCRTrtnw==","shasum":"d3130c6b0751517fd75c03465507e9dcbfef0d33","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606216332-219c5d18.0.tgz","fileCount":169,"unpackedSize":636221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvOsFCRA9TVsSAnZWagAAQl4P+we2hQWRhMYEpQh4w7Tk\nMUNLpiO+pjqOPDEisVslZGzmJRDWQGuZBp8C3PcPPalqF738Bm0jIBNRk90Y\nv8KRuAMXOHnBVUKrmZTvIz4TS92uccrExRbIUZb+Ag+/lVLORZfWuZVp8VKD\nqe2potqCcgufYltVfoDZcEIDOxo+UTJFe6NvjetnEUEV2tNf/0U1T0lkwrrT\nrnEuAgo4sxCqKOmQTcdUwowMpEOtc4PTnJh4yuFISSUww+cZC2Qy9A3xKlCK\nuiSUrHlRcAaajckd59E/kxDwQhE572R6lPJ7RLalcA1UfKqzSqyj1yV/DCsl\noJDb4hfoe1VFbTQmGIwbURVTqiiDfp/iQ2gucs5cPTQeLlFJMF2r4f1kM/oz\nnKvEKu8aPmyvSePzA8CK/r6AQlsohvJRGiSAf+gYgM6vLoPDbQ2POkTFpbTv\nEhG4Twr6CWgyWhVJzeAUXsh/FAo11e/GTbGU7UiqEYuQ042C1d03ivkLlqZR\nJjWe10NKk3RJV2UMJNqSTLvbJLkvgn8atuF0JU7Pm8Eb4w/iM9kxNNn7lukR\nPTLiyI+FMHUcYgXQ9+SehmVY3Xm2G07CEuKx3F+bHA+G/eYAoPhrJEW20DdF\nTH8u0iMWZHDc6ZY95ZUjuNj/lv4HjOnzCy4fE0PzkF7b5/xdgY+gTc543o1t\nxtjd\r\n=tIKJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCl/xWItGDcoalPRjUPn2pYerH6Wkt73L4qlE7sjf7hswIhAJpYA+/S0+30GW3I9u7LnH7nAewo2kiz7ueq5AmcVKs/"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606216332-219c5d18.0_1606216453306_0.08019840987515425"},"_hasShrinkwrap":false},"2.30.2-next-1606216492-d0a5c1b1.0":{"name":"@xdn/core","version":"2.30.2-next-1606216492-d0a5c1b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606216492-d0a5c1b1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8dNP7o0G4Dbjvb0vpNb7sigz3X81d94tFA8FjwZKtsTgkm4LiPusTmYNOxrvBffgMB6KmrvE3lCZsTBPmoaSuQ==","shasum":"832b007f511bde14f80d576fc2a80649e0d33c9b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606216492-d0a5c1b1.0.tgz","fileCount":169,"unpackedSize":636449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvOubCRA9TVsSAnZWagAAEFYQAI0zfoFJWMCclvEID0At\n54yROIktwjwIN7VysIwgPr1dF/WNn7wQeMAFxvFvn/nemxK5o4S0ehyeU9Y8\nFFq1CQ+Bp3+9kk7NrD3DVTSaZEnbIMR8B2V2AJCVDewlKIAsW0Gl61Q8mxpC\nvVE5Igd9buuQKxqt2KWAPQ2w3Dtdf3KES3wXwTKi+HA0kdra+TGqjfKGqOuC\nZ4r3G1xes2Lohe2WAVAmampC1L3M5gGXSfiFKTvshzsZCtoMHrWaK4xBeobk\nRPRoMS1Tdr9WZOjt6lqBMyuAbALMJlNqcoKJfFwWZm4/HAZOXc+rk09gd9DD\n/XEw/G8GaC+PUA6ZrFAd0J96jiC3F83QyDHJ6i8ulI8tXaKbOSbVjkDWf4TK\nenFjv0jmHqYzPLxur08WFtZ36LEUsPN/W5VTXBQIMIIiMX1M6We9b1/C0Pb7\nOyXKwj9B3RH7oduevfXL2AopVtm/zc2j4hVzc56sDlhFH8M/5QsUz4B88U2c\nxGN4/OXv9vtEFI0JFg9iSCKrpeZPDv1lK31e4n3T4r2YxhdJggZwlCv5lbuV\nvcDE1GIch1fxZ3YzbKfMJyDiIY1M9P6yxJnvQBn3Da5RRcqBy49JEoZJwSa4\nQxxgYzSyu8MpyU5xOIAohotN2tQraCSgvF8XSavJ/MNmy7gVtTnkJPvnvGmH\nTK2b\r\n=zvuZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGEjuc4CD53l3BWzUcg9F51YWaEQmwUen0upXwn7UVNUAiEAmTCs1qpdHy4q9Tv8cCtBkGPebs/hlhBvDfiVlUVoTIA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606216492-d0a5c1b1.0_1606216602678_0.3708596313990742"},"_hasShrinkwrap":false},"2.30.2-next-1606217123-8b4e0328.0":{"name":"@xdn/core","version":"2.30.2-next-1606217123-8b4e0328.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606217123-8b4e0328.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8Pj9b60mFwO5PW3edHJkyKQvk8J20zAh4s6JORH4WcZhGBXV/VQWz0koZcjoa2wMQb9CmyeGGckTN49Suqgruw==","shasum":"4de60752acc484af1ce603b0fe2a86d31ad9af5a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606217123-8b4e0328.0.tgz","fileCount":169,"unpackedSize":635947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvO4WCRA9TVsSAnZWagAAjeIQAJ/9BcZbut7xNoXng0iN\nYbAlLB5kZ0rttNQuf8EK6EgipNvZX9XYssSfdOhPH4o/8YN0TRlo1v4cRvcz\nHdfPkXRd9PQJPoeZxlBsQF34r7lSv8/j/SVQU4qMItjQWuEUQa38arnen5/q\nT4Um9vhe+xwDn+1zIQqofhFx/GE6u6sIwShe5xkXhfbq7HqJDO7WSeumVmxu\np9pnIatIRnlxetqZj3uJQe0Fy2cPXVQsbQkoBTvFhVXVZ9Vy9F2Abm9m0h3A\nD8FezV9k0MDsS4S+PH24mZHKpNjHPh8eTmQM6Rh7qx0+SX5Nc9uiniePXmJT\nvd5pwF4KlHFhmb5tHK6ztaIVHKj44olnrIc7HNCvw4URqnWI0MmiUBYv9+N6\n8MPrXLyZ0daT7BFZo4LdUuaQ5xM5YlV2oqXE4553xMZGZkyj1aNk0n8yQEIo\n/++KBbRQkbyB88Cjka4YkbJAJiMW8meBHRyQQEXcVStRebBovPHYn2upVjmL\n59kQOJ+bzzVNhWclEVfXISVVdgeZ/+i6VBC7rBJavW3yo76fXn5RG6PLiDJB\nvyE8gJz9cv8j2assQS+Fg+NMKHv0FfrHOTkRNjD1ade1CdTkaBcVy+nC3Fft\nQvOsO8niHlkk9WLtdchkKEm7Set2nGFKf9gV9I7yI1f+Um+vmRKo0YFP26/u\nROqj\r\n=EnI8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCI2JKkIlYwW5KQ9mNAUncgKSW/RhXQgo1zHolpJU5+JgIgc/xxNKgUbZ0KJ7Ds4A09CfiCXF5UbYro5AqT8pewPs4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606217123-8b4e0328.0_1606217237635_0.16943729831635967"},"_hasShrinkwrap":false},"2.30.2-next-1606217678-3d1d5313.0":{"name":"@xdn/core","version":"2.30.2-next-1606217678-3d1d5313.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606217678-3d1d5313.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SosoOoCGP7UTNihc1cL1hhSQxJMX1QDGXr8F/wy+VFvuvGDQg2OopUZNoViruMzXDG01Dt9nZ5M9gcWlqD7Z9w==","shasum":"6399759a17f023520b3acf854f08a7665ece7bdc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606217678-3d1d5313.0.tgz","fileCount":169,"unpackedSize":649622,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvPBDCRA9TVsSAnZWagAALzAQAIvDZATNvxOsI9sXVSz0\niPZKztr/k01x2+ldxq3Mxot6Cl2FE/bp6IQKIKEC5hUBimMb+7Ev1Ipu+tO0\nmMs6lgpONdU7/uJMIxPfJvWM5uKndim7qNRnP2LUXwe7h0v94eEeBGbFUngG\nKbp3SrmR51xB0DorykHnJVBzK+bP9NcMq2H7/UZ1M3LEjSuO7ti45SkkFCCD\nAMFvBP3aCP4fjTWZNyygsN1b4cB7ME6EoH09GxVysfm0A+IMV8MWaLStFO9i\nNuwVwdajr3Fr0WPptpjkjNVnKXke3vT5esEhBSnnnRLucyBcGCNYafGyJIgp\njMcWKNNiGkTVGPEsKFAz/i9Nw4ajxwqbsY/3nGmQ2zEGMatCXMCjjM3uHTa8\n1sv4vyK1kdM6OEKl32kQ3NJfys0otgNdLJPNlmDd/TmrYLFKEwzETBkrAWJB\nOTPeeJfx5dda/gI20OTaacdiBbxHMV0ImmJ1UVP6/QQHmuOH1xBtYpgcLfRT\n2T5sUAQbAptCui22Ft3dwca0bJcA9SZMZVjtLaNpnM43peXr9VSXFt72PvxY\nCC85jwpX1PFbBplRtxaNka85uTiu/nijBmHDk46o57kQZHkCKwswHM1o75P3\nxog84xh6FH1Z037xx51+z2CNatSH8s7dHYED4khPYB+eqhmU1vvRZFlMd784\nLrxc\r\n=yfvN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCl+aHu0TQKI1p+PYnQUwYwU0dBrTKs6IFjIvqYK6h4wwIgXtbrOSd7NIF9KL8xfCosJ6DKWAXRQQkGnl/nkBPMlqo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606217678-3d1d5313.0_1606217795104_0.9852390006718321"},"_hasShrinkwrap":false},"2.30.2-next-1606218183-73124394.0":{"name":"@xdn/core","version":"2.30.2-next-1606218183-73124394.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606218183-73124394.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UJQjXie/uEZx2pqJx/cBX+6/fpkHHZA/acXtFWw9lO5RrzBi9A0RUH3P/o0wzQxPmZEeGTWzEN24ZSk4c6eFxA==","shasum":"3c0ddded0c80217f836be9346c4c2dbf8f8d420e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606218183-73124394.0.tgz","fileCount":169,"unpackedSize":636221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvPIzCRA9TVsSAnZWagAAnnQP/0Jbe+nF1ylXFFMbaaWn\nCV4lhblICv5PVgJfVELHhSuzF9617yK20BiTlZaco//OhZHqwBdTlOASjZsn\nGekW4o9hFst2RED/f0Z44zp/rxjhc1hbDINPekZ5TsxVtxzCscsG/4gXb74P\nMiYzSIaC0VIkiouDIs8SXH0g9K+ErcVtDGtJbmQ6s5RjBhVSXBhAGl7dVv+R\nUho2JtM6rYtVdP7hrWyT2pd7Hg/QdSm1VKd/hZgBcliSUBZCoKJz0H+KcDaZ\nM2/usRBSudXtxr8GXrVrl+xaIp3WbUeTU8AGLfqrr+Z2N5WxCPKM3IzkEgat\nEC4tWx7eBX3fWolHaKiUYiJf0YBPG5BQgAD2H07DmwgkRsZdK77VviMhX/Hf\n8usqjoiiFJp4MXs1vUA7XoBWK/4lMwnq069XtEVDcaGOUZn1dmDON1clLpAF\nsCkP0w3SD4TTPUt4lEHCg/qFAxQQTCIKHwPQdkrI/qrSZSeQxrvUUsrdlmLr\nL/+S6CjjUTOl76vFXCwYIXiy1hz9L7EI605OHtQXxAG5jjdF8vXphvUAd+TT\nGlVd6j+kAGrqgGX1LmPsPm3FjyMZeDTGdnSp2Z7NhvVnpNmt/NaizYMPJxyf\ntOmZlMbxuAN/P42RUMB+Po5vCm9cLAAdjH9vdH53wbRzsUzbMRU74/w4tVvS\nCRb3\r\n=1x0q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDSTo0HT1jDvBaoCdRDGPwGO5b6HQrysAwPsNqarW58HAiEAr3eEv7wdEzIF/ZvW7esNqMOEZiDsbMktUYQ6z3ajNw0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606218183-73124394.0_1606218290326_0.1779773282050543"},"_hasShrinkwrap":false},"2.30.2-next-1606223112-13466560.0":{"name":"@xdn/core","version":"2.30.2-next-1606223112-13466560.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^4.44.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^3.7.2"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack":"^4.41.21","@types/webpack-bundle-analyzer":"^3.8.0","@types/webpack-dev-middleware":"^3.7.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606223112-13466560.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-N4SlMs7BDM8z8IWQ+U1SqIAJtK3cBBzOG/mhYr8eCN2W3SzkRN7VLPLY8PLC/TTJWc93KwECFjT6R1QHcPxxiA==","shasum":"b7eb9011a1e59ae4db0ab30078c224e10962189a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606223112-13466560.0.tgz","fileCount":169,"unpackedSize":636221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvQV0CRA9TVsSAnZWagAAg44P/RcCfwg7LGXSRvMnlu35\nbjNXeJqHPxbSz/wGBoIzZ6BW7WSO1oXC2MLiwT9fqyCMOHXROCHSNsx5NNHY\nX7VSRfTY1rhiIQ6kPkgQ0NK8Fppuk2vfy3z/iuYUn/tTelVXYm6UUbrSxvsV\nXy3U71ZGqrKUaOYlqKSLMjhKoJIeKzhqF9JHFUHVZ3Ih68rFzCSNZGLRLlG9\nhV01DKLxH4Z5AmV5pCCR35gNu7zGsa3aTwtKd4EVJVOwiCuT0JAd1+bNbRoG\nbnDT7COqP+JIMXdL67RNVZgrhRRDTBLEZbt/DbqzKl8cpv0qRsIix4552tnD\nrkG1wPmA8ElsZF98Qftuwhp9WZ/fUkyJJjCJNDZgQazuFfLswmymF74K0Gbw\nn0zEij25Y12VgBKN5/HXfovwynxpRkhUDLWPIisM3OA/TE67uZxB1l2+4BDv\nMn3XxaBx99IaV18V95kP+4uCb/NZuDqen3Rq2S5kn38BBDiYP3QsckM5Q+6W\nvPpQcqtIawZ0qkecD9yusJxjXlKyrgPEvCx27cRj3H63rNB56WZpSKkVsoIo\nNsRxT6sj+Ev601bo0yv+/HNnpc5NjbNyJKC5A0frSeC4z9QZJ7Q4WX4kNk72\nDJ0QB3E60eawaan22zVu3Xqtz5X9Ks5pmUkLDXaKmo2ESDubNx7Ta/yK7vyS\nQ/07\r\n=mrAg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqg3fxm1+GFPVTH4su1rCLwmPVBDFYmpGSehBhZKkLwAIhANzyxfBaKg8j+dv8Lp0XOgjmUBmjUtNgrrC1rYBfmXyS"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606223112-13466560.0_1606223220275_0.9000153920997096"},"_hasShrinkwrap":false},"2.30.2-next-1606223136-9b227de3.0":{"name":"@xdn/core","version":"2.30.2-next-1606223136-9b227de3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606223136-9b227de3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-s2yFeKtlc1Y8+UIMU/7TQdZKq3+bjUKj0h1kgnEWM6ad9lpAHof4Y44kORMM899P8+Sfep01/5Xf+xdPPHKVAQ==","shasum":"b00e2dd8bbbe06c256e8c379c1e0b759a34826c4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606223136-9b227de3.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvQWdCRA9TVsSAnZWagAAuY0P/3gWLJJQe5jekUCMFEX/\nkaLYWQo9wmWM0+MhsSZZjJ6Ty0UYNL0LqqtkSiT9L9NdsQPk/yaxUlaQlm+x\n1elvwHW/PiKkkH91iggcYsym5I7TJnmBUz62E6Ea5Nkku0L9jszY55r22xA+\n33Lv33ip0X+gXWUg3aZEk7d9jExTZmsOft/4PYamqv+HTwEtud79KxmJH8ko\nx4/Ulb9bIB6PqC+tC3cy38XfVHjixtc+qraDs4PQlC3MhTSvsVEpIvGyFB53\nAbS3c5wLVr3WVjHBvIkPJfztm9V/yEn1+VGt7OHr8ndCZE9MW+DcPcW2isv4\nAyn62fjsHhJOYAZRWHCO1NrLwnY6Q898dp6yM/s2DJhyUrAN50gGm7u1+0MQ\n53lXpI2OXuXO3IzDV2DfWFif4IvY6AqTHM2Gn9ABOsaXTF2Z+8sl7pvkJ1XT\np3Slxp+xMvs79k4NYsfNtbws6JynI2aSgr8Dng8+N+siI6FevhWndS3reKal\n4ChTP6BR+0ucBHJJwmkcUFA+eVGXiNBnQIFyi/oHbZnhGMPh7ZpQh6tyUe25\n8GqVz6sWIgkGWyM3t7bHMyA/CWRuYhKD1go3R+djaja6ZHvg3vvJQq++EQ9q\nT6JB8gYMly3rlSLgfrk3d7CBR+BGanYpf+GtEfsuLpP6nq8e7FpKZgfXlHAI\noYva\r\n=fwI5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCL8LUaA5VeEyNQcB38dBNYyYIMemZJhVr7eUx/8BNUlAIgD7GKM+ihYiwS+J+9aqa9wAchO5w8GMGAL0dvHLdI2ko="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606223136-9b227de3.0_1606223260815_0.6502647578823886"},"_hasShrinkwrap":false},"2.30.2-next-1606224031-ef5356d8.0":{"name":"@xdn/core","version":"2.30.2-next-1606224031-ef5356d8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false "},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606224031-ef5356d8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ER4wjgavp9Il8O0tMni1f2i+RP0ofAU2UV/CXaTNwjwVc9SDeRUssdebsVNKqQcSJZO9EMGfNqwRE88s3FyRdA==","shasum":"2219a69bf1ba7ca67415df03bfa1afdfd21f5d23","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606224031-ef5356d8.0.tgz","fileCount":169,"unpackedSize":651742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvQkdCRA9TVsSAnZWagAA6mUP/1Zn9HSouPhKBDDuEvQK\n5lG5XqWJ9FbSJI3YFsxqYniGj1VapyopnTwKVqzZYR2Otg0cKjbuwzh7oAE3\njJtR1HOjQViyRO49ATOV4cC5/skK4sA1cbORzwW3zUEhLDkWkldXyzSq8sCG\n1VF7O/fV+XpNGSy9Y+Pg+nUrfh/Vd3bBvJ9zFRuX/eh2SgA+02mUoXJSEk6P\niq3CWxgwnQO3U4xPXi9qB33NmMRNaBOh5HxRH/hXEqHQJVMGSmSDXVzklb8R\nnk7DZSeFYV1W6Kt5YVz7QJ/w7y2pOK+97otqHm6535ruYqTttSMHF+MgMmVp\noGPqEyJIVHVgoWiSp7CehU2PsFPiWlX9Uk19Xj0ccD8tzOJeXCM47OLgY8IE\nr9xwYqI9agGhPALctjR88QnUA8tfVvmK0mmx/7u45x19y+ZLp+3ZhJSHMwaz\nDmUsfTcg7Utqx8rjnEG3H2+3INnb2LJZ7SWPTPlTHPm4UZ1AodfH2EnMPCdr\nTQUNEOTj4oKKi/UGmUPLJ8s7o0LWBQ0XvRJaWjqLj283oNm+PVAJI0cnd3gT\nDc7Y5HebpESzR51YKBT+yfL7FgdE/Fn+CQtwfZdKLG8ATRZ5pWJMntUSFUeh\nahGGcJZ+aQv5oAcX4U9u4iJWq4SZWUCuCo3k48zbFn2jo5adkAiFZWaHhDIA\nwUnW\r\n=zN9y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyVCB0MVZRQYATgJDUNBXe4m1X6YefjydX+A+FuDFeigIhAOhk0dVx+63JV2TR1/kHgCJbkzQoAcXQD4gCLdIVLiGS"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606224031-ef5356d8.0_1606224156499_0.18478651163474336"},"_hasShrinkwrap":false},"2.30.2-next-1606224249-d521d4f3.0":{"name":"@xdn/core","version":"2.30.2-next-1606224249-d521d4f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606224249-d521d4f3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4FxJqoBGLbj0/NicuRHSrkcAOQoDkD0A+19jAyJho7eSjzDeHQDG1P8XUxzTHHqkMcSxFHgTc5P97BWW7cIaLA==","shasum":"54c59afbbec015a0132618811f97756d5948662e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606224249-d521d4f3.0.tgz","fileCount":169,"unpackedSize":649435,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvQnyCRA9TVsSAnZWagAACqoP/iEwrANtUYsxy0H/vRy0\nSoVAWIC3VpMU4TqvuzamYigsQG0pFqh6vo8NnI367Vo9m4GeYFUC41w7EeGh\ny+7jbN5SNs6oOzsV81Brtu3Gkye4GsScBOYazpg4rvLoWjD7j1ZgQZV+no22\nTU5dOj2ulm5JvQ64GKqlsxtG5iBcI/rF5RrHLUMpKFgXeo55IInfPk36k+j1\nL9JHymaUxC6GWtRPkGP0WObC1M3K4mKzelzDTYV04s0D/ECgYBvyjR1O6HBu\nuzSIvdVEC1rVkHCQjofAFSr7s1mUaaryU13tVNYp6QX5NojqGb7gFFk80HZ8\nU9SQZugMzJsBoRdQxHu6HXSCs0BTBJZL4PnUpmE8SmPwFzI6dtjcpN3CH3qb\nTGX+MRHt+ITqgnLM0mRDjWZ5FhuINX1lz3BgCTukQhXjkj6N+4qgqi8A1Fwg\nDdaR8BRT4YCzkGGgxTivp91XQnEQdKbTDylFZOmiVjpQnIi09V20LyLOl9rs\nARp3/XWD3jAO6fAgsHf8D2LcI2tZPcqk7C9O3mNVMeJT5J9VDPSb2TVJAoMf\nScPJZcDuKfeShk41NXrgcvXseN05qTPimMlsvsBzycy+KQrT+Ala41RlEj+d\nUpmajWfeBn+sfDVbeS0c2fsOfw7s9ucqPytS4nyi+TzC64fyJvg9tVqz9SiY\n7S8H\r\n=x68K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVYyEjNG3m0HGiHR0mL+Uc6wf1L61pBqaImc4vNujVqQIhANmQFbK+bklEInpBFUQl5DBhfPm+LrkqBp4MLl/uUgLK"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606224249-d521d4f3.0_1606224369447_0.8742258247157699"},"_hasShrinkwrap":false},"2.30.2-next-1606224768-89cfdaa8.0":{"name":"@xdn/core","version":"2.30.2-next-1606224768-89cfdaa8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606224768-89cfdaa8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OpqEN7aU2+KpMZ+zWYB8MqI5oYdKLQ9s1P5EULsGsQ7p6pDYH6D4oBQlmn6D5EbmgqVqY9X8JupLeTrWiV2xKQ==","shasum":"a0194c3caf98b2e0460dc4555bf8ca55b8f20043","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606224768-89cfdaa8.0.tgz","fileCount":169,"unpackedSize":638491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvQvyCRA9TVsSAnZWagAAGogP/R6X4ekwbM8KY4J8QsmH\nm8oXvyrPbj8wm+eFRjyOryhx1l2YQM5+IKGbJCi4HB2kWZcSCwUpSrq5Zwqp\naoueNwLTQUzXtAybSskyJ596UgOA0odJfdRT6338kWCMnnww5qrNiDW0A3/Q\nTkztc0a0f/bfmSRdBmg/nvkcGTYesJbH8Kcw3zjDVzk58KNmRVQO6hdEB/5j\nm4I3pukUiwcsD6HyfOMVz+klZETXattOyj7OTa36K7W39Ew+nLVrRLfh4/JQ\n4dBRr0LwBIy6jWOqW5qUz0oA4VHErMAGhkv4Gv9b3BNr3BYIQobU+gdaJRv4\nXZKchnLCKPA/sMQmA7UD2ZlowmBDS+ajLBCrpfiCxFhMzvU0sm9Qa3clRxhT\njPbRQlq4Xw2fy9OCn65piWPa1vpIkjOXqxWl7OrvophWlOgp34ncZV7ggRnR\nEtoS1SwvIQHNTGUdMvJ1f/khG6eS3NuiJqPGF+GFWGEGF0DlJ5azaY5LHy+l\nEkQq/OGumrNAThviK6s+JhupQzEwYNp6EUymJhEdc9oyeNLrhd1Ci1NUiQeW\nzVZKzREaFXpiMgeO5Wfuo5MkrDSAVo34Z7uIcsrcsI1kTfUz3pLgwM0ge7KM\n69+47t2iVlrabkfKIo0h1xnEH2LcbfuGIizjmEeFsele2UNlwUoMQYMaeSmg\ncoUo\r\n=URNb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVfm+9hGJLO6iY+0+rK2TL7asJlBO06LINecOnDqxEhAIhALrCMxxn1vMIXsI3kAZB/PcmPC5PVO0M4A41/0YJNrc9"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606224768-89cfdaa8.0_1606224881649_0.11964853093965244"},"_hasShrinkwrap":false},"2.30.2-next-1606225391-5d0a4332.0":{"name":"@xdn/core","version":"2.30.2-next-1606225391-5d0a4332.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606225391-5d0a4332.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ex0F5xtIlCP4M2dJGmfGCnMuc4PJjRAHct608z51xbOWI6YzCKuD5224QOPe1K75+vEZgfGafuoXeiGMxqzkEg==","shasum":"092cd2c88baa63aabd69b3f02411bcd7289b66df","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606225391-5d0a4332.0.tgz","fileCount":169,"unpackedSize":638491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvQ5xCRA9TVsSAnZWagAANFYQAIJpSVnSPht2Dy2NeRxt\ndQS1oW9uQ6qdLyV1DbXLqd8UjrWk8Qjjw7nmWeSgvgk6m9hwbzkX0sjzfDFA\nI4oAbKrZVpDGFsIZayFKTsB5X5vWp/WT2sxHYqUKh64yce/a9S0GRxEnZB1R\nsiDqXL5peEvKRRnYuqN2iIrGbDdwrium+k8POXqdI6PjpSVwN1vR55b8VB/H\nh+E3fxErcsvp6q9g5S0xSwSngsI9tP2DgnNKWu567NlVg32qU3+rU8a1uOqz\nJNOGPSgt1G+h1uQ/yPn+bkVtcDleVe6leAxOmZJz1Mnj0Csoyrp6zNO0FUvJ\nb6X+Jm6SMJVqlJI2YknwM/gdAIN/nXTVBiXG42s1P5+rBWNLciskcTjIUySf\nQn1vBdUBjMr+cxL1+WasFGQJjWNPV9AELnwzbBGRiYnG/HTWeKkzooPwWbUu\nMknEjssYr+lKUp618LFIhFQokF4oXp98UR120wiqmMeF+JR+MZlTDntfk6sY\nhqmm6cUdQYpn4Fy5os8YNG6QXbEU/8fWktKIt2OoWhWOAslYKfx1cj2JeTqn\nGup1djcVvAqIXxSwfso4W3FpttDLFBa8YiNOyImGtngYP3dtlWIyVfV0xhwF\nTMT45xrHgVajLE7ahBxC/hKynutt4CWQ0GL/tcT0pvhBHFacvFs9ZE2+KnQ6\nCL/b\r\n=iNnZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBuq5E4Z+IUjHIeKa9j5/Em7/j1Sw4/zc06E22Sm25O2AiBnHSosDUnoPDv0j3T0CSVHGdGfraHEUFo7lsIcAf4zcw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606225391-5d0a4332.0_1606225520922_0.4969513187154522"},"_hasShrinkwrap":false},"2.30.2-next-1606225470-ba9c82f3.0":{"name":"@xdn/core","version":"2.30.2-next-1606225470-ba9c82f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606225470-ba9c82f3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1JErAKb7IK6bhjDp3FXe1r1XFWkkxyaxdHAJu4l++Yi7/aMarhtIh7LthShbHKAbOuub6rinMkdTxpQ0NLLg/A==","shasum":"2549e34d7a68e61fbe79ef309db6732653c9dfc1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606225470-ba9c82f3.0.tgz","fileCount":169,"unpackedSize":638491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvQ7DCRA9TVsSAnZWagAA5ZYP/1d1mDbUX6RoCw8V09eL\ng28zbSxmJ6WANg7XvWIpit5dCYAis5+9nrl1IkTsxbwbJMXaH2sEncrGcwWb\nCbaDCQJ0F3VmgfFqOR6r4V0FwZN1ZR0ctPWPWDtgVaWt6MxS1dHy5NR+Yy2T\nZijRXcjsC+cxjGUJ++GZSMILONV7FYEq6hnCFJ/+/rOzThhpa4fkTmnfxNfZ\nCzmovxJ58TjSpmacmRuiP9bhQXRpfWZR5yRRetNafM2TOHWhh826g4ErdjV+\n4s3a4879qPUzTJ8GwhENTpCQxiQ3812aE6lAZHZdRWCT3kmpkQO1DNLzVaSF\n+73M8LijfK22kSbkNBewIoJjNmd0W2oYRSReX1iRdkVGlgQvyNw9ZH8if5On\nbkVLNgAfHdsIE9aiybUmSnWImvyuJxqmXm1trwpqysLQK2U/CWuJYrWNva4R\nkizMu95AqMDNKWvPSk4JMbZazf7sKvJMoQVT24RhdYlENwDtaAfTu3UchkMG\nbuHf0JHyIe3MDPl80iv4JpnQ+rYdr85dNUGEOqvr+G3LRGdNbpre70Wa7rFK\nmANmZnF6ZFwOLHDbyKRUIDAC7u0waN0HU68gyc2H7UMLUpDzgFQoVgS2XqeP\n2uXgYoSws3ybq4T1iQ1seLUUXK0t6bBqNwr/bX0NmMiHJxpJBKzo9S9BK6qk\nZ2CT\r\n=hoz3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGODJNYjQzKcmzKbySGVhxP85xwMGtTQIAakDnsIJv+XAiEAsQoi38ZJjI0/60mfN97o22ILEWJDUtBnQTmnNPjQYMA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606225470-ba9c82f3.0_1606225603174_0.7015783321012363"},"_hasShrinkwrap":false},"2.30.2-next-1606226191-19c7a931.0":{"name":"@xdn/core","version":"2.30.2-next-1606226191-19c7a931.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606226191-19c7a931.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-njt1vnhqTMSBhXxETYEj2DojEfkA5hlhWNbSbLPSgTa4e7zNYLANaBDCHbVLzXRI9yGgzJZTqEOSVtQL9GBwVA==","shasum":"597a2985c1b0f49b5a585db9de211b63a803c862","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606226191-19c7a931.0.tgz","fileCount":169,"unpackedSize":637990,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvRGLCRA9TVsSAnZWagAA+coQAIGw5+/6Max5YllS+6fk\nvdUIp3oCLHKLdg6cawAKrHikyZ+AgcdK/14mom+WrP3AdPfyf+GeRu6yUtym\nuImqXox+jS0sA0P/RWb5P51E74D4jamOLffqTeMg2jR82yTqBzpjupERrbLe\nq3tJVWQJ9jZP3UnzLDVIzZczDDJiU8/JoxzaUA9L+ctWCuDm/2ZZaqUy7YVs\nMLRcrk/8WtfyWgdGrMGfCqWRNSUP7Vsd1Wh4QdV/BBbuKnieD+WjL0QYdjw7\nTwtqy4bM5+VFNeSFDaa9liJnhXFRVtVA1C0asQQQYpRKn9WVuGlABskVpdv+\nOqAzMGlBkTEPk9D7wuHLrmgyEtjSUc9stJ6L6ww+QCE4+haKqSlLXubq6w7R\nx48Mlpldp2d6BXNgtgn588aO11p7jipoIQTfDjV6jbvp8u6B7Dz/aYj5+FHx\nYKULhvF337hVNwV2t6Apft8vkFnapLouBN1NB58Y/fYWBcwXfqTiV12eYweN\ncOHfxoux2hVneV/Ug2uep+v8yOzOKu/LjQeJATNVDtPqbXd2i/E8ee/ZF6n2\nmaLg42ed+bpswFhRdXfuwWC/Ob0fVSefmfS/1MNl1mHUeV4VLTO31mbpFtbs\nZ4z43lI3/kmiL698DAGfTm9AnwmKbQrGJEItje3O/d2ADfNu8nzYL8cO9Nx9\nARk/\r\n=+r/2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICxtjnCri5JnnY5vY8Z2d/3zFH86MQ+JIWNcPPci6TGfAiAiYiXt0lB7VrazNI3gtz834444DnHs074/mcPBMD+FTQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606226191-19c7a931.0_1606226315328_0.8467949470698062"},"_hasShrinkwrap":false},"2.30.2-next-1606226688-2d86a8ee.0":{"name":"@xdn/core","version":"2.30.2-next-1606226688-2d86a8ee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606226688-2d86a8ee.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tYa0CsCFoLyooemzee5w3tQcEFyjYKmwN2h690YL50ILxsBwTuJURTqtVmrDcCYJPHkX7ElWcA+jjZhedlbPIQ==","shasum":"ea696080c758d1beaa0cc4df00449eb7406d1b54","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606226688-2d86a8ee.0.tgz","fileCount":169,"unpackedSize":638491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvRN5CRA9TVsSAnZWagAATI0P/ijs9iaZSO4FiwumB091\niEX0NXBsoEU6quB6YiZ7w7fyNn+jRdUuAg2kdOw1cRw4h2/5utGgYub0cx88\nnW3YFrB8AS4Sq+cRLSDnRcKSV/9tXcnMcvyaUpXFq2pULkUYjKZrGzNyMJld\nq8LP3RDvkaSM9BIu4qVkFCORo12mKjYxVfeeGgZawfxPn4JKlW8olFQIHoRk\nkzqUDFNPsCF5S4iVSbfmNF/d6Ju4nTvtGV4j0NHZUXM+Lt3ajotlRGL7q9ld\n7Rh/ZWQ1AMQyZyrzClfySFJnbJho8Od+fSYd7n5FT7Hdt5Le5bdh5CR2Bsz4\nIPDNX3g3EF1mJ9gdtuv750jussmEDyNrM90LJquBkM5PLKpIpGx1sNtvtCwn\nL3tIV/H1pzSDil1mo/LozDLfwTJmo8zZ8jJ8PSWOf8iLGKNbnd8EcoKlFVHR\n5bWJOx97RJ+SxjT8JLL1x+pf0AkBN/Xbaf1LIMiL22XTdk3t+JCdPdg+/qhb\n7R5YywVWYFgSnlcHGltz0EM/Bj/IUxa3b3QuA7BzIKeX2IpJBjtdO6IjXB7H\nf95plYBLcRI8vI+CZMlFcku1zg92/5RKCM6hZzSIjpMh5bpEjl6HsfdzRRtQ\nbEUqedvV0q6kV4XIIkEqPtzVxQuyOW0r1W+ZXjaAHqGSxVFAtTzk1RU+bh3F\nMQqV\r\n=Fi/w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEu/6GbOsJjqyua8XfsAaHRZkBSa3dBS0NLFMW11PhTkAiBw/5Ari0mKk/p61zvL1QOnz0ocpgiU2xXQ5isfJPcuww=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606226688-2d86a8ee.0_1606226809307_0.6196252689818478"},"_hasShrinkwrap":false},"2.30.2-next-1606227314-88cf26c9.0":{"name":"@xdn/core","version":"2.30.2-next-1606227314-88cf26c9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606227314-88cf26c9.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Tx1MbMzbFqamexmvHXceMfVWWp/91pJFZ4PXuRTp88w4lVJxU6j4tz0+cKGX6SIuBopykU2MGWBkO/edS1popQ==","shasum":"074a8c9473de539871996aef1c3638e7273f6b89","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606227314-88cf26c9.0.tgz","fileCount":169,"unpackedSize":638491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvRX0CRA9TVsSAnZWagAAvuUP/1LFECrd84DJYvXwTAM1\nSkvBxgZ8k0pp69Gvfp9+dAKUI3h/GYjzLXfy7L6kW7GS0051lEef9wR8q9o+\nRuUmjwQ0vgHSYjWFAgK1AJHHUXBXUUOq40DaJcdKCJsD7b7MM60tKE6caG+O\nuoRfg0kNtWMMlyNHFyecF7MxpIqzeteJHfsKHQx9ZIQ0ksHSBlHcL1R9Fr7E\nAyepqJaL8IOD/20Fzv+7GQeS6vd1DNkW3NecfNpbC3VSOQrSnK/HRLJII/Zr\nL5fD93Fcj3H61irVhzUQdIDHf8ebDoebGp0kalHAXayRV2Ej0KxlnbcZctJ+\nlSwv2oZJrZ/94Js/PPCOS6Hm6p5mAdSN26gr3Ni904JoLJCCEGtmNF0ZVatI\nGbR9driTOi65Cek1qtrPeeLf4zke2U58TBMkk+yE8+J+KBS+xJP8EfDRoigx\nlBUmAY1bgoTF069zOsxfE2C3OAQx4LuEoKYuoFqb/rvy/OhpVcNeP7gykJ+8\nsYFIkiipylq5rfTV4xctq753p6bz/LiENoGdba8se4k5WnaHoCQ046QFz0xU\nIZMymdtWyxzLX9OrWpoApO21HVSRlFCNDH5kgL/fDBxnPNm7RZyixqVxRwfE\nAm9kDwPpwoQceI7HPmeRc18yVotCpjLL1Qu9z8d+mPB0TdX5bcOSHv80BoFb\n6Mul\r\n=I0kh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/JyHMgiW+Dtjc+z7xG9n5ooLCNkWepQQ9E4KqyGSEnQIgDYY+BY/QJt3DN42tGWdhQFYiWrSrju3uRicIlXN2qKg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606227314-88cf26c9.0_1606227443755_0.7275101273305167"},"_hasShrinkwrap":false},"2.30.2-next-1606227549-f3c639a7.0":{"name":"@xdn/core","version":"2.30.2-next-1606227549-f3c639a7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606227549-f3c639a7.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1CzVEnSFcrFK8ZBNq9Un1QhtoGwth4ku9OZ+Z9mMSc6f/H8Hlt63Qi/4+jE587SNo3T8lkfrbrIZT5vBGWPdkA==","shasum":"54820f37d2bd3e75c2c6b2bd02efcee57cdcb122","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606227549-f3c639a7.0.tgz","fileCount":169,"unpackedSize":648957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvRbkCRA9TVsSAnZWagAAgDoP/00eLSI6lIltPrNKLbJm\nCxXnbugtPUavffXqg7v14HATANmi1jbso7KznmtPf1lRvQJw8kSH3tVni49S\nK7PzIm1jr/iqGaC6vWq2xZ/HWS7rdi5E31rEE1zmw+OzdmUtDtrHNEiWMWIB\nbsjzwhv+ksYniO3uz+VIxXLM2qpjSmNsKL5VGoghHrhdAdGyy0YGKQlgNq1J\n0iCfAqRVg+0TUm2Wyw0i4qDBbPVl3XZ1qfUSjqaS1fWDy1NQvVMRqxjVhxTT\nrF0JZk9yekqwAthfz8lHnZFTyJ0/h6voJc/fJvLSW3sY3Uqx6c7VO/5D1odE\n9NIEFCzbfh8bYhNoG6pun2z32WjU/St9ft9E0vxHtZ872P8MqwY0s27brWQQ\nQZGmCOQSZ6kA/z9pBUjQoxqv8DUtXa7q57zXFqj1ksEZ9JQUsY4R5vZRiJ4Q\nRF5t4dsoDTTuxHl9ydlTZeJk86rFWb64MXnWQ2bG2Hq/OToAaPyKnSnb62X5\nNIhXjNuCQfeVkXNY9Cdk92YIeHbAfEHeG8cJCsGO6L0FN3eiKFAOYhQgvmrf\nSOi0uTECFnLTIt7aBtCU7r7tph55ilzmnnpnzuAtVPFHsjtEXkhnctG2FVFk\n00k7C5uMo7CsqQsyoYhSizwFAB+522JjpIAjjqWxZYt+VIfGobRMNoLdXjf8\n/usH\r\n=x/5/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrAOpe7LRxllFyzO3OyC5O1AqsbL0b4T4pLXXVePnyVQIhAOnicSehJnZknc63FADtb1yBt6Uy0dc7VaO07pze6j0z"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606227549-f3c639a7.0_1606227684260_0.8998988810782773"},"_hasShrinkwrap":false},"2.30.2-next-1606227827-fe745ac1.0":{"name":"@xdn/core","version":"2.30.2-next-1606227827-fe745ac1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606227827-fe745ac1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XOSgWajOte7uidiYillLnBjlXmfYbQzfyU4myjT3vY9I/IPIPCTth97X8zextdxzFiulyQq/9sD8o1JuthuP9A==","shasum":"12660793dc96aa9c267ad47b776260f117c2ca02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606227827-fe745ac1.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvRgACRA9TVsSAnZWagAA3nMP/0V/tggtre4w+wUHOElh\nepGjw5FgKn9egcN9Wwt0cCCEvtz4tHspjS3tj2cT9/iRtJMPl0AFcuhc9VOd\nKF15eaNZexcgdQ0Efw9h0krhUhniUv8gmlcsak731LGyPCbBG1t+PLZIH2DM\nbvrTEtqdeDoDav90tGBuwEmFUfag0x7XkpLq36zgH+Dx3zYOAcCA0DUvGawh\nQhAbTIHPNmYZFrmFnbrNUr+/8T90KiWuCHGlP8Ywz7W3Cb9benXatXWWvP9r\noN86tnYXN735joDPYn01ktRirRoN2YCP408g7GLit/BiKIS4Ic29Neb0yPwG\n8+sN+EQ4wLQqB70vhR2K+3hSOKH9gFTte680P7r+xFt7z7GzPZk4DnXUYzQA\nB8vu8OO6gOdRhynbYXdhLCRNddL9I+fljsNOTa37Mr62GFALlZKAHj7I7kg1\naVAW65GaPbHTAjx/gzr8z7hSlLGGF085yBpfM6A4um9zJeZ11HlxDjNtfvDw\nVFjVC9/FF4XVK/pCiZybnqIH4K3dFyInYAWAWEdTJ4nWKW822QXlFigpReja\n2STfLFX2kz3nqA8F8gWs/Bb2BLvrjt/h+4aKO26zLNRTNLVF363/IanQ3Zik\nbeI1J9AFA6toBDmETUNVvg6ostD5gpswuHmbb3cqXItdN+xuVmY9b46MnziM\nMC0N\r\n=Nolx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH+qrJjbHsRsk46CGe+kRtMjr5BBrjU6gPOpf84tS7wVAiBKkjNwQwTVzXQ5bwBRJpB26bzNVv+PnzaNpYq6c+YpbQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606227827-fe745ac1.0_1606227967567_0.7601764428388085"},"_hasShrinkwrap":false},"2.30.2-next-1606228974-7212c53c.0":{"name":"@xdn/core","version":"2.30.2-next-1606228974-7212c53c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606228974-7212c53c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hpnPW6n9rEwBppETwatuPu5PPLdmvFasF8vBJQLV2/2UUY0cbr9vs4ZX9i3xQhNfXQ3hlO4JQIOn2QLE3hQqdw==","shasum":"3d4345a5fcbb4b445ee82643aaf8801a3806b132","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606228974-7212c53c.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvRxnCRA9TVsSAnZWagAAClEP/26VeDq0vyVZLN1wQxym\n/djtlbneJMUXLc4QFIaRqsl1WNPUDdkCR7CjcUzlsMjbOF6m8mga3jpjtXuc\nLVzFVccB+yvN+k22Mc6sUjezKx+Fn48k2ki1SYKHTskGN+7cCwA06VakW0zj\nE2o3/C8yKxwbH/DyF53KzGq/eKH7DgcWcq0FqQKQfhJ4MYej8iV7NkYB8dSM\nlUBy6+5KvWCfXWpCWlxex2uSirLX/VuGDJ2uonIR8ZwDKOXLpJ4ajXc7f+V5\nFJFE3XsphJmtAPykjZiLkCWgofmjEL4rtDhpduYSJZwnxJkKtDdnlGTTqimW\ncqP5tz69Tl5AcuKY7/ViDheN9jDw7XIF78aUDOlQFZI8vvIfMijPVOhhIWxR\ndmrpGqznsZqQ3qhH5LmJ0IxREIGmeRz3KfylK8yMDQ8s7Re4DaxAfcQl+qq7\n+IJ9awTpDcYyPaFQg7NGhaO5UExB33OOg/a4sfLeCJgROL9Y36Fffmq2dBkd\nujBjTWW2xYOzHqCVCdQ1DHpvULi+IFK7MmOGLqhO4e3nahk2SjUABJ/0KR0Y\n95SRuBONJ1Y45tJQO/3HTYlvl8Lw+BHXJXjiYv63cO87CKsVnch2s1IINk5Z\nCXOBzfyaXQydot4tPrBrF/6wdq7pZZSfYPMaRckySPbbcmzRYZS56naVEDSK\nYhxn\r\n=U8fN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDErGnik+puwusLKCCpbfpQLrIB3i4tdy9xbWNoqQquFwIgTKbgLvoUU4BGZI+IkoxVu682i5n5xPwjovFHxGJZY1g="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606228974-7212c53c.0_1606229095108_0.12066568305537184"},"_hasShrinkwrap":false},"2.30.2-next-1606230404-e15b9d67.0":{"name":"@xdn/core","version":"2.30.2-next-1606230404-e15b9d67.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606230404-e15b9d67.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uHBLMGVXtDVRMrwl7oOU0AheoeOJakktDFnMqfYleO3YDPWOMmnerzuCpiM3pkWmtO8oTd8jWExBF/THDIpYnQ==","shasum":"4e724a78699eab48d79e0b8caf047738e279ff2d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606230404-e15b9d67.0.tgz","fileCount":169,"unpackedSize":649135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvSIKCRA9TVsSAnZWagAAoc0P/2rV+o3Ko3RVR6c/P+og\n8YZTddwGm+OAS4cgxm2eORWzyQ6oK5SgLM0G9r6wR5k4AFzJ7oFleaObC4Rr\nPHtnZxXzT2w6YtN8uffIr3SjsdhxsftftIL4j7w79z4VcdN3h2eBGA/V1T2A\n/sWxAR6Ae1T5tnbLkIpLxTi6SGee3AkYXG74PtgvUn95KdyHtCv9mAS4xd+C\nfojrvkIppau7VQSiQ400MHDHL0y9S8MCtrzBi4t7wgyHLuZmqEgqbGSwT/A3\nZvatBuhBg6mljykpxs9RFAX0rZhkU6to7anlVqFgvhl667tVt+RIqb9jHGXr\n8tMd9trKKxuaZcoc/iFKlZlTdh/T9yaZz18j4cUOd7NYOckDU710R1IWEDRs\nq60dIV+i140AUM1OIfQSmZc6lPPENyt7WfbfvSEZ8rm6y0T+g2WCs3dAqODe\nh1Sw2HrklC8bN3iyKIAHerI6tQTTa7Ju/9W+lahN7xcpho2yBqijmtM1R+c5\nolR/N1k6FsjCr39mxoLb/TS68PKpN1pGoZZ7xDHzoHPG/YYTK5nF+MK58BeU\n0sITCbz/VHBRAEIOcXjOhMEluaV2kZvDpRZTfBsXvj79JdsmV3DK1w1KbBnZ\nPKHUywsti8ktKVSlDUHzw5SPpiBcuf1IfwJUyLmQItVgJJ7fuZIKoPYUoUHr\n1xj+\r\n=N5NW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCK4MmittNoMiqYSyL585hUNDrP83ynWQDncqKEkdadMQIhAI4FFQ3fW9C3ze3n2IEzi3C0z5x+6SVKGj2GaorMalmL"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606230404-e15b9d67.0_1606230537638_0.749162244165386"},"_hasShrinkwrap":false},"2.30.2-next-1606231466-7709a008.0":{"name":"@xdn/core","version":"2.30.2-next-1606231466-7709a008.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606231466-7709a008.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MSK8YePfeMJDhhgWvGWcdo9/Tf5zp2dpX/tD9L7pVf69YrtRAIgfbrM0McnZr2ukOw0AQcboMUjTyM8C3P0bFg==","shasum":"5cff0a50db762fab9162c42a0aa3f61009db6e3a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606231466-7709a008.0.tgz","fileCount":169,"unpackedSize":641772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvSYdCRA9TVsSAnZWagAAyiMQAJgUamcv/ZGgMbX9tbKQ\nI8SR2AmnpNlGNw8amnXnqHx/y1jq9kCSyNcZt+iPO3vHNOqQ/Wthl3s6C4fj\nmj0+SgYG9nOyMBuWlf4XKrfnY0OZ6EWbvpdXK3u4ZgRs5XoEvXdoohI/8BFm\nWwh1lxFiNznJSt7O0OCJ5YqAc7C1pmX5xX+O5Is/aF3m7GzXaoOGoJTm2060\nCWcVGEH41s1ydcQMoiZcrswHtkjlG5YhBzAKuh2RejXBhIpxu47Am4l+hDTY\nVLvkYatiMwee4J+hEz5BelyzJ2vawaaP0or2xWfr85SktZoTLXCPAE7aUnM1\nYeduCsFlrDkC5cYRwKF8Wxg6AN0UapJGPc0nd3JzKN/SvXNSPxIHW/jVE8NZ\nHJ/thdsnUA9ZNAAnqAhp3HHJsosLlhmbwMS6D0mzHluduJ6oHMUlb6V9cEUW\ne0nlK7HZI86GJmWFhO9TP7dwYcoIeD7KngIplfI4uGB3S1RCG+nSejdz4L/x\n+eSzgGNDOf1txtR6vFW9CD71ND+O0/svrZQQcIH2neU1vBTKlPKjlP5ch84t\nMrZ8P9n/QxGKLqr3JvFVfkcIMl2baA2LZDAtINJH2LenItn6HNgtzpqS8sTS\ncEg52fWKQKvP7LdA09MhTEU6G8yMqjavlGH7g19tP8cl3hyafuR/Xw1zVySx\nuG62\r\n=WlIO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC1nZ6eX7jTjMMleld/tIcizoOZ8RlOkCaRdTVKPD0v4AiA8dV5n5iyOCDjHVoeYQqqwwSpQsuKfL1n+4VLoLeKq9w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606231466-7709a008.0_1606231580375_0.2642539156034154"},"_hasShrinkwrap":false},"2.30.2-next-1606233309-62661675.0":{"name":"@xdn/core","version":"2.30.2-next-1606233309-62661675.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606233309-62661675.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wjOpM+dxlDrl1aUgJDmYkrQDHWEKRJEcgjO8MBcYJiT+Lzxx4vqNxxdUxpSMf4QaeiXMUZMGeOopv893V7Xirw==","shasum":"d4ed2552e5c54e2ce2726d458e74643aed73c4b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606233309-62661675.0.tgz","fileCount":169,"unpackedSize":649170,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvS1WCRA9TVsSAnZWagAAccgQAJcGSTlC+KUeuFseWvVT\n9d2gTE7+5pxCPhOYwONyTfQbbNmlTE9BckKiNJhtaAE113KrReohxrPVb8on\nvQTAHGs3YnQYtxpGLNfDoBPyv6jCnhKmnFmx1goUlDPRjVMPD6Zc+cjF5ZTN\nDYwhAE4Ot/LtM7y4GtQlebtr3h+PkG0gZfoz74WDtH7PaCutLCXQIZijzXB5\nKkUNX/nFdKmGzPoaVHB3pj90pdryPZrE0UIZYkMSYNKEr4JGCInKtyxuA/vY\n06raGm1nNe46WvxB7xEd4v3JE8Uzn4Huos65RfLze+f5RCP+dIgFIjGKKkbq\nCfwKuZgToDaTuLoswHnaUHWEseWDZKHXdkN6/CoWFVKeMbV03DrR5HVjQriK\n/i4FnG8PQWEkukZ8TKtJiTtvwfnSAkv4zHS1Tkfsa1PKh+c9GIqVrGt6eXyw\nv23veR2jKNHsvbFHrWZo3DstBcg9Uk+e3fIZfLu1QkEFUR/0Xwk+68LLHSID\nlOVL0rL1Cdae16XTpG2qKLvq0lUctbEKvTJbj4ZTM4qTw4C/CRFUV2tk41cl\nizxuMXofONtNPKmX8nak+WF1foNhquHWbGiDqzUdcVm0Ye8Z/pIzkbNo8uH0\nfPpr5NyrO98Ihxyp6MDUZY0pQXH/8zyJW52iRrtICQLc4ygBA0m52VOgnVgs\nmazI\r\n=LmKR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFWQ7flS9agzB9/oOVPOHf8FUWxkjpwINql+HbO9HHIBAiEAjexbfc6ee9sqGH0zW/slKIsBuM4YX3nb6/usFT9XCvY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606233309-62661675.0_1606233429880_0.9326618276949181"},"_hasShrinkwrap":false},"2.30.2-next-1606233395-45577a83.0":{"name":"@xdn/core","version":"2.30.2-next-1606233395-45577a83.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606233395-45577a83.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-r9NVm81eaH9KEE+X+VMUbiXlj68haNKQifrKvUDL+vIstbRCjPC50IDxnP8gToGrbyjH0uG/G6VyHB4UnSGduQ==","shasum":"b1e85f2613985f689d57cfd31a09268b30995ad9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606233395-45577a83.0.tgz","fileCount":169,"unpackedSize":649170,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvS2oCRA9TVsSAnZWagAAf70QAKNl981obsX3ozDAYjmO\nG2h+bz1qVd5/LY0yt0j2GrQ3e9xFuiq9sTS5+78Os5a3mGVlZe4OLAQ8vf79\n96nHqF8hNEyiF7t0R0GG2aQm6HclV46v899EpWtMjF5jMnj95sIAlqOnlTjy\neIkLQK2SVAoNhhGbSrwuaYrOci61pmzL60+q2GnK4cplSiY0XN6mWlY0fKZc\nbarYesg4LxRyBzOR1nQCEFC3Hauer2ZXq8ruupe+9LJhuhRfUwcDFk9SuvQF\nNN+aIFwC24OCeQU0naeoJW8BBa34Dbfm6KS/Ymx6Ku+uHywR87P9YR5gChrV\njVZM2xPF18aVTk1FYvWy+3/AklSgLFYJWDxSg87kh3/uDSJRxlvCN5cfVVFD\np4pd3rWox3/xyaRki8VRKWFXDWbpvNUZjpGq0c8RtP20pibgSpTXZ76onUR5\nQuuZIWfYI1lDge/xFllsnVRT5PYV6OjeQH5fdlWAaozPT12gUrZNuLnWkiPx\n8GQOxE+AjQ0TIJCYnqMOjOUL7B4Kuwkj7Q4w+5RmxNL8P42563amF/HMO/fY\n2Z5gWrbkRcm6DVZbl8YSfNBntafPXKW8KiXyPA5c72GY7Jq3EcvBfFUHbr/H\nrCdbRQnLKsaeoxs52lxphaQqEgZqVU+BCaX0weqUpd8Xjuwyd/1NbkeAY2r9\nH/ZE\r\n=Iptd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIChAwZIFwOkwnxVvc7ws0wCg0xs32dhUl+5+1b70rw1qAiEA3dHM8xYa2koVfZaXwnaSZTh2VD4UFdPLA0zqtusKIcw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606233395-45577a83.0_1606233511775_0.7254041894799164"},"_hasShrinkwrap":false},"2.30.2-next-1606234396-f30874d0.0":{"name":"@xdn/core","version":"2.30.2-next-1606234396-f30874d0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606234396-f30874d0.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kYPzTqRQUTDN1qshiDBd0XssSKsZm2playLCbbTMOf4XQB9C8x2q4IHouX5RsmIwWXE4trxdcEf8gavUJHU0+w==","shasum":"a00619e307d1e70dff3a52264f6d8425f2565e6e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606234396-f30874d0.0.tgz","fileCount":169,"unpackedSize":638491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvTGVCRA9TVsSAnZWagAAs0MP/2PMei219jwtC1S8+gLX\nz6eFTeNpA+OauCo5yKpBsfE9p2FNer/89Mj56TZXudGxMSXkhA8oG5YuYZGI\n4gD90YigkK7drFHbzfIn55pabrLIRib1QJWIu4Oayn/SUl7U6sI1jL7O2CsO\nXro2LDIPJ7LcEG/Es70OAB0TNmwfYt471fC3jINBb/Gh7NCl/oVxv7e34tru\nYYJmJcxnK3tJGp/ttGsHA98rSGkApV6kcBNue6uVHB8OiOd7v7fsutJpqxQt\nMqNL0XtmegJ/QJ62Do4xpm/yxh2KoHABtykJZm6cUrQkHYchjk5FTeNtAJGY\nwKYL6omWOi/472Yb9y8vDT4+srnj3bJEvoB6E30brugYVR9/m3pFfKxJoRCU\nFBlyzleAPY9G7BOyAtIXqp4I81x4XsuXKoeDYdMXLDSVOklpRTUmGlzRchXZ\n1CxTWT6fP1+arbDYDPOONZJ/AIrYSSt74BlbHylLOEySdxDnbH3oHslAF8lW\nlK9WpqVO42tNDerhykhu4EZOrtpFAHRCsvXnsCM1TIguZT9Cv4+IRfwEcbsk\nZrzv120B48PCYguGdeWTKM/Wl7/OnlwCad6UW2LP8aAbDGWDvvLRMolFULm2\nWFaCmkbLHfqHdypYfT2VtRFn1RfUQ9HH/6vBq+qytOeg4rZDp7KBDUtcxVnB\nkxEa\r\n=59KH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBpHeF7I5Me8I7c98EuutcUcNWnleP5fV69K2E0OL8sRAiBy9+8W3OkCh4dkftFZ+Z+VL2Y4wY75nkPk8gUYI6VnCQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606234396-f30874d0.0_1606234516409_0.6901250581057756"},"_hasShrinkwrap":false},"2.30.2-next-1606236477-f3d2d170.0":{"name":"@xdn/core","version":"2.30.2-next-1606236477-f3d2d170.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606236477-f3d2d170.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-252sacYg6qwXp1HIovqhJffqaxqjVQPQ6W8Jl7NgOltJL97ZmYWJB+qjMABcfVgDVHzROW6OgyAdAfHR75AEGA==","shasum":"8b2d1884d2ab78a24576ff4be8823383f40a906b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606236477-f3d2d170.0.tgz","fileCount":169,"unpackedSize":649114,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvTnICRA9TVsSAnZWagAAMrUP/A0TQkHsMByEZgs5ugaZ\nn4b8oXw/RRMCbcmAC9CbDYb6u78YYDP/GyV27o2tlJ0Q5x7wNLD9ozXY7tfy\nOSjWoa61IEYnUD6XwiDr20XTABnllTW6zRcl49fl5QdJ7/vBGmwb3Hw2UfXL\nGcqXBlMVu6Puox4LHDjFI4YoUUVtUJIJU1tZ2OY7ICJRQfaCIqOjZwLo+Rbm\n7/KjSVjIPC4D984dhvwM32yYjpfDraY1mAyUJKhTkUkjNW/mltbnB2iJVw8N\nrMiTQIXOjceHtDgt9viqZD53XfOzdHSUCLiOSzTUvkEn9X4sCypsfBCuKT51\nwdFc5AVobci2nncXmxn/eBWFMCh2h9kA4abogjEWe4pJ3koXI79fqrE+HJbl\n4As+zOZM17ImZtKOT4/j3bI9uJXhQTth9X0kv42M4j7MflbKCDH0ekqBB3nt\nnKFZuMp5hh/gxhReylRnqTs4B7bMl4xMv8DSr6+I/vkJNnJ9lDQgdxRUDkdm\nqscPS4ETJYvGhsRCq3Ey99LZle5SvAPpQEERi7boOeOoLj6EPsu8IeulHyJ4\ncIvtnpRs4Hta3Ied1cx1yuDcP+fEqGoRbiRRET0Yxz7DJZbYioFlIifdfZI4\nraRlLZSREuUzMydFudCUHRtpQIYdM4Ehr5v7cTOy3T0byX0qq9FgTMZfpgN1\nc493\r\n=AzXy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDV8cPF7MlLZT14+i7OIusdWY6RSqG+0kj4bKafDcT4HAIhALPPddfjeL6h+QR3fvSGkB7V8KRoSNHh3XczOh0EDeT7"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606236477-f3d2d170.0_1606236615847_0.6484975733931504"},"_hasShrinkwrap":false},"2.30.2-next-1606236551-0e89d97a.0":{"name":"@xdn/core","version":"2.30.2-next-1606236551-0e89d97a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606236551-0e89d97a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tuLjQxhpI6MKbofdUZ+q1rK7buyEATba1Lf45f4/EfEU2nONjMCN+MUBBKMiiYn7seuorH+gSlN1D3gjGpaoWw==","shasum":"2e6da412595a8c9e43e84f302d4cae81dc302ecb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606236551-0e89d97a.0.tgz","fileCount":169,"unpackedSize":648991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvToBCRA9TVsSAnZWagAAw3IP+gNmBmlnYTsmlREre2ur\notzMwnNy0anBSq8ikDKtgoJSTklL1A1KmBxZhoqFiZzv5AW4Aimx9zNMEFwz\nVem2GbcY85HyjtjV5Y1EWEaqGDQuyY0O5tohXr7O1Z3LKdaDFXn7VuVJjuYW\nkOtRcpPsWWsw6s65OKu6OkbMAXgax+uQ57jKbdIh+7o7UmaXTd/xEHHK8Nj1\nPB2g8dE/mNrNIweXgASnsJiD5yBv6v55lAMtz24EuySXjH377y4gk2yQaIjI\n4TSXpVuBjY22XYB749H+aCU438BpiPVdrLtE8V984VKyt4v2+dQ6efe74Ppm\nSH+LgLPy/7yLugQ+QUThvfoVOXoQBB11fQfOGnKRnUl68siW5Dhx+aRK83Y9\nzA3aGxW1vvPB+o9gem8e2nNQEExr2Zx1PdsOiUgCx4Bi2zE4hIlzoCVK8vRc\nsA46r/Vl1XsaA2F0AlOOVmi0K5DeshKIjPJlTYImzvLySJEr0E+HBuicg69m\nuzMgQQvk8uy99xBASVj2UgDBQap+fOzSYK0CQmdW7KMPGcJt9w/0xgM/WIcC\n0jGN7SGhNE68Dq+QSjis18J5y5O7D6FNWlnI5YoTKjvMyaCarlwTlzskQ19x\ntU0vHjyy07tuWBpLYUG93A3qV6CWvPd/ODvOLWLS+1Bn4Gkz3BGUX0mBmer6\nBUTr\r\n=WhT5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFVkyB5BxWvQEkPaDQ6RrCqun766e039ykDhzMQIJS+RAiEArRIh6P2ADM4woyYU8yZ+jWg98jVDPT5B/sWvt3nTArY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606236551-0e89d97a.0_1606236672940_0.047152128390227865"},"_hasShrinkwrap":false},"2.30.2-next-1606244582-7b1b52ab.0":{"name":"@xdn/core","version":"2.30.2-next-1606244582-7b1b52ab.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606244582-7b1b52ab.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tTXrRiMfZL+YkWAE6fDGDEXd08jpRJdZYvD3JEWFm5uECVg8wEx2SxanRUiu+Xhhhle1CF75EyVkGjmz8Jnffw==","shasum":"2745a88796252ff366a3cf1bea513d0136f93d1a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606244582-7b1b52ab.0.tgz","fileCount":169,"unpackedSize":641772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvVlPCRA9TVsSAnZWagAAYX0P/1U/N/2GgylbbmfWyq3P\nfAcKdc9ySOEiPUEBj1sOvV7WqGOaAh/1dlV8SuYIMab4haYWItA/MTi1SbJC\n/CeeglSzwaGnZ7K2qPGV+ztfMWsl7H8+Dioo98C8gMjhWLbduWnIVbrAWSFx\n4v4/Af5Z3eFjEKInfFGjnNESN/Ism78Np37zU6769mSDlUCgy1bd6dKKu6tv\nhRLfQcEDQRAT1tLIii8f9Wm7KLVXzvJPK9kM2MiBl+rLtwRjderQf72WRL81\n9Ki/Vw2fPtan++LVNVC3EqCxHL94FBKMyB1a2imMwTzA8VWQ/CRV87spiLR6\nCm1oNwd3z/mF5xJxjcLPZSCk3LCfL91eT5NC12bNIqyVHaLmPB9nUudWJ0iP\nSMXCwHZuhcCPwFewyr9Oi6VGBwSKWV38Y3Rq2AGAgmZNxXHOGwlOT0S/9/PL\na35/YdQuWzn5bMJBgnLxG8OW0gVXmaiirl3Fou7h/JkEj0EtZFfRaeCs1bUY\nABF3n9UACG7UvlTI6+LhZJS++cglf4G0XEIc611UCkeGxooN2n0OJBtF6icF\n/HybF1xHVM1O0/1N33ODES7AE6JmltrPR/N3UlvRDDHNxHA7tUirq+4wV/2m\nb3hh+Pg0vnDf+ydUKlQfBjccB/lfBOFDeyUDDD7eZ3zWWqhEFPpwKn5zjq61\nHiuO\r\n=J2A8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB7pyomlh9ZSMTjQ2wFjLbTqyiFurdxOf3jcoi0+lLntAiEAu6FyD7DQrX+OKT4z2T4CHaaIfD4HxSs+8lw/PdkaDsk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606244582-7b1b52ab.0_1606244686945_0.7420328376663128"},"_hasShrinkwrap":false},"2.30.2-next-1606246534-cb480be2.0":{"name":"@xdn/core","version":"2.30.2-next-1606246534-cb480be2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606246534-cb480be2.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-yahIgPCR4pa8IZ0nj+8QPsU2JawZ1qhxSGIoPaHg036/x36zS/xkozHhWWgh4KG1+0/Qg94aNNxI1x6plRtkKA==","shasum":"eaadcdd86221c8846c16756b7c4cc5c409e128b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606246534-cb480be2.0.tgz","fileCount":169,"unpackedSize":641772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvWEHCRA9TVsSAnZWagAAVTEP/jdzriIQeYpl/v2+RnBq\ntx6kxOelGMpwWUhS/Oy1N/CM2xMHnCdEFOM9lwtP+1b+kL20qp1am/eAdasK\narsmFeQVs1w+Hve6KkBca/iuR74r8Bm2/FW1RWJZZi9raprkyfSbAA53BFDe\nSag8Ai6/4kcx1dGBR7zxO7D0ux3XbK8oX2WGkw1gu6iFlwsrUEnz0UkWOd2z\nX7sAUVCb3Ws0NYcKbYbMQ9fuRiNXAN09DyzoIMYmnEA6U9bpnphyz1ASTD4S\nXbkU4hPbJIHo2fm2mGgs7w3+xDJEKJ4dU1h87z61P4DYvikmHtfEBl/uOXkw\n3SBPfmqv5QSfrLnEBmNKTwo3kJgDi1zXAbrQhjGv52JrIfsj9QPje3pz/o0+\nOWFNdFJ/kUQa/9e3ijvJwHV58UXatyQ9AoxBQBuHK4OczfYEVIA6IoRFyfN4\npaD50kQOqz4xyf/teHkKvd4dzkN0fE6r4eENON6HSdGb6otDuJhAxyqYNnJh\ni1WOXJt8YQA7ieRlVc5VoaVRvN04IiHC3ImaxO7cGcJ9RJ/m28j+Q0FUj8nE\npXvExF3X3+QgsYtWI/rhs6/cxsxNnzNsrW7OpE6ymj5j4d5ovLYYxTSYmgdK\nVsFddOqmeijEHZJSKFoiuwnmWBbGGXlhyt5bs7bpMwfReNksbz93/O7dCCg+\n3im+\r\n=SoLA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmt/Rz2oKCht1HxDaxF00vmNoolGeJm54dbyfF9pPoCQIgC72nNEoCMIFPwBgP83cWd0vvL1D26hPYn+QeL3hed1w="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606246534-cb480be2.0_1606246662982_0.27616679635341757"},"_hasShrinkwrap":false},"2.30.2-next-1606247254-b82f0794.0":{"name":"@xdn/core","version":"2.30.2-next-1606247254-b82f0794.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606247254-b82f0794.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-l0WmY1hwISXTnP5BC+JgJrnL8ZwubX9OhVC1Tsbm4M8dk49yn2i5quvFQO3Z3ybeTy0fYh1JmQrYpCOVY7ibBA==","shasum":"38123f322ab96cf728e10c7ee92f8da461f4a494","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606247254-b82f0794.0.tgz","fileCount":169,"unpackedSize":641772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvWPdCRA9TVsSAnZWagAAFxsP/0XQf0QKzweawN6NDaFP\nFGn9mKbUROlZJo11+d+bDtf8ihda83lwvfH6LMpygn33CGM28Fxlt/w+Cvou\nR5lskUGEODwLgpsC56edUp6kkzGZjGZBJPE5tefsJXUsJvI+bY6XZp9+6VD0\nH1yeXiHCPc/wgeVfGPaEDVtXYU3gWJgH4K89vKexK4/7RHyIA7ZefBYPV9Ji\ncn/hQNrNxxNOn97lfFp2mSfcutt15quuQe7McC96Z6ahdcYLCtc7eESSGL8R\ngk1nNLvcB+fdqyuhNNusN9X3yaxp2dbkxN7dAyMR+ewyifRts9sg17wEnz2O\nHEwpnNTtSFy6vOlDJvKSKCRpDy/ganJxi0jXvDqTjNjT60yrn4MA5YKh38Hj\nR92fJnWJExEY6TwmZoZD73mKQl03aMZjti6B0HdPW5sQ9gGcq9n4LEVR+h6j\n4zD3SuD5P7q88QC/fJsA0vOmfyIv8k3Xm+uIcvgEr4LjaBXAKT1DfTwJTS6Z\n5/6595I8XSXRrVJNXOD6/IBA601XIgUehUERu3D+6yuwmr2GST7D/RqALez+\nQ/v87aSDMgw2KkRNGHbKCb/d2T+4YlzQ4f71AVZAXipta6yRMZenVpA1W6oz\n9mGNns8ZuRrbPwCIKb7O2ke+Muany3+B2FPkKcSkgHNmSrqBjU86ThS6Iks6\n26VW\r\n=2GBL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjYg+PIiWyM3Ergwgtl6znU7wf/jIVbisyS0s5n/nNvAIgStUvbP8ewsZeB/6LmhMvYB8CU8wH0wyPR6msFR5cDsc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606247254-b82f0794.0_1606247388907_0.8550132072780645"},"_hasShrinkwrap":false},"2.30.2-next-1606248610-046dbf69.0":{"name":"@xdn/core","version":"2.30.2-next-1606248610-046dbf69.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606248610-046dbf69.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uqIIOLcide78t2PAC7GjWLNOU0C5We4p0q5Dfy/eF8rZUZ+4njlmYia7w6QBzfdtO1xPvYCjomQYk4a19uJ6GQ==","shasum":"3f084080293587491592a0d5c0f1d23860ccfa02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606248610-046dbf69.0.tgz","fileCount":169,"unpackedSize":641722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvWkXCRA9TVsSAnZWagAAhJYQAJtnQjb3vp27zYquucIA\nQbdx9mIduV54x9pxuG1S8Hb7v3Q3kEOv1/4x+UZsAUrbQkNf++Ua2XNrt8Yh\nQUKDi1zEJO8JkM/vhPoYqFob3v5FiTd/qqEZJ+dQoTSJEO+/oiVLzI1J8aYD\n5Td9N0EDwPWR3N06I+eldUxXrdJcWPYsnz56OYNO3jFmJuxFBElGLJBGD01x\nmnJgb5qQd68Y/TptD/6mjYjXn1YfL7lRFogrSh6VVr+x/CcWy0m+3TJQElcC\n9SB8+/RivZIJVOX/PkwLCYmNcoofZ9P/9OgoZRDXb1MGWMQaiOwJRTh65U89\nhOqmNlMXRNK8pAJ9EMgdPbHyf9rIHKwmwUovmhLp/fNQjoRqtAbT6Z56Xyxd\nG/14ypbC2XcA1076bWb4QADIKU07aeBLZn4oiM9KYB6OMGH5kRE3Hfyo0kBQ\nOwkvegG/cgwsyav0KAwjJrUzdDSxQGhWbUiZDvBQmcbOXNwz32LdiRZy6s3E\n4VJLt98BzHIQ4WsEOiDrLiYNhmdzBx+yDAn1NIGFyVnAg/ofzKfmB6AHo5ty\nLgWNWS6zXVeddPFz8DATEv0oqcGh4rdsOZ0qDajBbxpG6NSNzY8ctPw5SAdC\np3GHiQjtkt0gIojTG1XOJHH2qFy+bOxaqyzhPR+aQUWpCksi4yPJvLh3UCn3\nHqQt\r\n=Y9p8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCB/Xb2tuk0lx8auCCcO4FEKXrwsyad6ZaVwZS3i1C6AIhAN/uLhfdEJawHP9I2MqZ4KXdk3A3MihrCMH9MmKyCZQm"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606248610-046dbf69.0_1606248726463_0.5426266090558358"},"_hasShrinkwrap":false},"2.30.2-next-1606249017-eda2bd26.0":{"name":"@xdn/core","version":"2.30.2-next-1606249017-eda2bd26.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606249017-eda2bd26.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kMxZWTcRiCQ2KX1ITnXVVfASPWIIaSvGLjM3x67Y4uoDJ3KJuofKOR77m3UawZkVN+qTNWADMP18nqEwwUwSDw==","shasum":"76e3c51402e3208ad6c2ba1d2cb9d7ea98ecc2e2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606249017-eda2bd26.0.tgz","fileCount":169,"unpackedSize":638491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvWq2CRA9TVsSAnZWagAAbgkQAIeTlhIQvQwg7LUGNr5t\nN6zEc2uWVB/v1jd3tr1SED5FujtwncEckXO9iHHJXEGo6avFdG0TAhPqzx1p\neIb6W1+RGVpV2Ws4p58SlEDzUTt8GwbQJAMXPPAOIySdB3zzcwiNnRBO375T\nnlpGHLuOHu6FgPrf6HcVYr+QvyVBJDWhUHBK52HcdGQN0hFfPe7Fj3jcXKu/\nzcdMwo7V5xgfWHjkYtPOLamAXaElbWFX7EEcz3rrTEAgw8j53NsRijxLiyfR\nOzldRDDwOoX872uK6oIL/GuM95AGImOBxtS9dcdYqidIF3WDYnorJ1xbhBLH\n7nqwwO2izGPcEnSmVnbomddyRU4fOXOytIPelivIdVouTRafPXvZXYHzoc2q\nrCud97H9vcvaCuU8mmOOY5gexV/oJt9oHY661cfDntW262c0CLzZpW9Ootc2\n9+7slx6DLUkyGVJEhFXhs1XXGKQJkkLjBvnw6OOjIU3IQp6LbmsIBfMwFmKo\nya5wYgZEtc8oM8gq6zgw5JFwMSf8lunuugjxWXCsy8i4YN/3WkWR7nmZSgSi\nvRBCWYXoVluIG4QVatcg536YGHkSF8yp95Bc+Bhv+O5FI4fnOe596OFpCec1\nAo+OvG0RP/rlSlb3+DtGRyu2Vk3LPMZWtYZPf5YMJosONiaimc3GAaSeVE3o\nrmp7\r\n=OiBx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYL9mj5vQqfrYPlHPAI/00Xl0MXu6Zs/TjBcruoif4QgIgKDvkYu7NZa/o/5mhGVafaCH6SAsT5GAQdIuOD9VBMq4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606249017-eda2bd26.0_1606249142165_0.7765718431555875"},"_hasShrinkwrap":false},"2.30.2-next-1606249491-9c81bc09.0":{"name":"@xdn/core","version":"2.30.2-next-1606249491-9c81bc09.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606249491-9c81bc09.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MtjpAUiBHUn67xQwkGUUrf6FCPhl9NowRvf7g/nxtt8ux1zZkzRjojhwre0OFBOW+ZUQ9IvsMD5G8woIHwPPsQ==","shasum":"73d79eb900bf77c87f8953e8d594ef80b6f13039","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606249491-9c81bc09.0.tgz","fileCount":169,"unpackedSize":638491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvWyRCRA9TVsSAnZWagAAqFMP/1ohQhzgOEqEp7vzyuWu\nveSUJiJFlON1V3/YZREIigD+8JfQuCZ/IIhIlba4WBIfCPYSlyZ6lzhckOzG\n2HsDUzHRyuEOx3oKvGLTDpTOoDh+FT9pkR8hk8V9lObfRrjpYq+zlT65IXki\ntjNZETT8yfOslxFGyyD4CBxnW0uf7vPIGEIzAyLAtXWpmJHWg2V/V8M961uo\n11zSFult2t1QFkgSVl0hYrDcba/8JrIwAQ5pzycKEqAtTQ0DF650kBKf0ZFx\ntP6j1Yc2AlEmj5jnOdp4kGxZ3JL/Ba+hksGTxSIZ0Sw4bMicIprjdqHCsO5s\niIiWZs9bNSr5FgVXZ9UP2NuoNntGLqvtpXs947U6T6rd+vQv7/YDZ15CHBmo\nkONHeKyK08IMuEcDNy8QeD6bp7KWRz6k6fktcT8SuoxChbRHOwxvsDwD66Kk\nnu+l1OJSgc6P8Ngswj0HbER7YZYT+Sbb8wHuZgH5I3GeHDqwfuyanuej0VVM\n0/FTqYluk/AX5ACeYMkhCgV2tsLNm0aPjRPjx2Id1m2vrAizrzPq4ArsAMo4\nhIr4Asa1vt/Ea5Q4TGeuD+REzesfrmYlo+e0sVBE4tla0JvgEYVDtz1iFuBD\npyGK9kRWMnan/Icko2XbL7avLwZDLzyvETcU38g6JGFqW90HQgGXh2RXup6K\naC7B\r\n=t20F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG4dDUwe22upxeHL7H0RTjP3+JhlCeEm/FW9+kKkmOQkAiEAw3x/ALJJyVleJRWS/WTwuvRNPlv9vQUtpfRhmncWrxQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606249491-9c81bc09.0_1606249617311_0.349992372439079"},"_hasShrinkwrap":false},"2.30.2-next-1606253356-e4d6e32e.0":{"name":"@xdn/core","version":"2.30.2-next-1606253356-e4d6e32e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606253356-e4d6e32e.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-iiK0en/OeV9WsF5gfternAVo3XERuYlfce+uO0pTJL5ow592nTlW7tSJTZydv6dAYG/l0+1vpSswJNHYmTgLpw==","shasum":"29727c8429842811ab27c8aebb33186027279ccc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606253356-e4d6e32e.0.tgz","fileCount":169,"unpackedSize":638491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvXuiCRA9TVsSAnZWagAABn8P/RKVfrJjeum1ZL0fld5/\n9t+ItBWO5UMCWZSqq+JTyxXk/2G/8KpWgix15s5PxwhC5yVdARqR/WZARAVN\nNGXKwFVmr5fMFsU8NlzfwjWLbeGyhBjmQkw7MWq568JM6X9BwqK7PBw5hN7+\ndP1tP0HKSz2CiWAa9082+xksstgoCgr41Tun649567wuYnAIAXOKWUdgfzYk\n7YnvinRmotc7FJH62IOLN8Y3DbhbhqJpVFsIKIZCh5PSR8xg2gGKo60+PLah\nTsNaOW8dmRdFPUF87M/vhmAKwIXbf3IBKJd0O9bhpDCYdQf0TJhXGLoL5xsc\nZuZu3puKmG7ucYT5cBiu234U1hz6nCXQLLg/M/x+UclNSuG3x/jJQ+FQHOas\nSbPYMmBFaZCVS6ugXVKT4+le2Tg7t7nKTwA8hM1rHOqFqryaWyXP1BP+cgf7\nEcax7SPTf46sRYid8CeJk4UuH+WkaD7bkI7IVtOepLprWQkaRoi4RCm1x7C+\nnkgjPbJbMcLcOciYXBkO+WDWcrfKw4dxHnOOShJDAEfRM+eIvEBCLoIPZseO\nU+uOK0pQ/WRyX0RoT4uDrztQ83kKdGZbB83ddwLIvgKzJm95BFfdbszdEBwA\nMD6TD+CcPxFsDVFTN5uJd7/HGYcLc9MQrFKY8NYvLnu9In7HlWwwfzGpcP4V\n9Mo/\r\n=Gr3Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwY6gew0BaiNKRNPa8qdbBhqptPUU9H3kGZP7OrjKLewIgXYcLyQ6/K3KaUGU65aZBTwXvDwNdx4vVJIjzkFU8XuA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606253356-e4d6e32e.0_1606253473765_0.8490825844983154"},"_hasShrinkwrap":false},"2.30.2-next-1606260042-9af95bf1.0":{"name":"@xdn/core","version":"2.30.2-next-1606260042-9af95bf1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606260042-9af95bf1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mt2di9G9XgHzaKAywjSs4kQGvi4WMiX+/hX4itYKN5FM1wmSO9X1Gw2zwmujIultXjpOKPj35u0hloecREHrBw==","shasum":"02c0ff6f94f28c25097a793cefa30cfacbec2bac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606260042-9af95bf1.0.tgz","fileCount":169,"unpackedSize":649091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvZXDCRA9TVsSAnZWagAALeMP+waGZdw6+ZApAU8nStgR\nTyeDV+SxcsJvu0gCrSDJ5ObKxWdlajVZBbsX1PvGwba6ekdrjI/O1tOLBcZu\nlSIoHcOu73iWpu5UkG6dggZu2VNYdus/FxmUb25QFdiPyiEfN3hMa6yLP8WT\n/sGMXqQffCgpJnEJn+j8TkObRLa7jfbGA+k3CN68A64OxHfh5wUZV1d7mRVt\nPbY8bbyYmxCNM1F7t2alOlrYOw9ScGUTCZe8vOnp3Z5vPbOTis+cdFZvyR4a\nuD0o3dnJmDKVUHPimmWrvjgCDQIj7sBVgVT93TdEipNKqoSAz+c5CDbm0+0k\nPmOtg+Fzoe2ZUdoExmjkOgdAC5lwmU7id0ReOxB3YxCjk0bhNdcr/oJPQ48s\n22RTWtFIbA468nR95eX3XnN388u1BAI8EdsiWe0wAJFbNCCl6jWKi520rWxu\npBeAx3SN7VlymZwEoakJ3dCPXt/j2kFbxmwmV6GDhXDTpTSSWwHpWt0GAZql\nkmcTl8i9CvktsdCFenaRiO8zF65F5D0SH82hivc7LXgb/C56x8lKkwKVIAdi\nlSv8Qe1xEwGAbmTi7Nk7kMQVOtDnlxRa+JVJm+i9YCyQJV65RkKEVXmV9Rpb\nTD5BplYfUXwsmDLJdvjhaMq2AXnH7aQCMvfyvwWm7BPEyvPjm0ch2HhQWJsb\nNZAK\r\n=AdPN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJ0mJd829RSciufApVQD1V1PGZzeeOkjObgxLqiebciwIgMWFlQA+SoQFz2phBD4krldTdFASrhXV3SSOXLMt7Yh8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606260042-9af95bf1.0_1606260162570_0.6401318091344324"},"_hasShrinkwrap":false},"2.30.2-next-1606260406-b025e99a.0":{"name":"@xdn/core","version":"2.30.2-next-1606260406-b025e99a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606260406-b025e99a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-umNsnGDpmCdJdwJ4iIXXLs0eOR30rGT367z1hI5VjeKuLtzJAUlgqHtsAzASQH717d7nn+uR8e0q59znYy0GmQ==","shasum":"052de7156dff3a1c43c4db0543231b7621bee792","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606260406-b025e99a.0.tgz","fileCount":169,"unpackedSize":641722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvZctCRA9TVsSAnZWagAAJH4P/RLkt49B0DyyK4WyQBpa\nMGrL/IhTvBn/SXH6mnjbuUG9en9WU/NB3OGeBTwpxbFYPt/10Nw/NtiH5Br/\noe51c1/WesI9KsfkvJxqMgugxB3Yema4z8fJSXAlSmzDUfIFFnWjXW/YI/po\npGuFkN2ZrCehtc7+I755si5xKJZpj03RkyO+1scv2c1KTSm6ilLUisSNX0zo\nB+44ZD6CA4DKeSmdPi+GnXMuPClM15kWMJaT1z/5XAVmo56qjuH/5GYSdR2m\nViFWcwIYXF30s7eAodrJ5geqKOi3hNosRsUeB/W94iVXfOgT3sjXhFmr96BF\nHYgVU1YMIJIcqgOM98fCPFWs7pq0orNh27mzjJA4GDqt62nvIoYALmxL9hMd\nU3qrr6K+9m46Jp9SoV+2v5OAT9i/x092KLWRl1zre1gd5GeHUaPNFCbIHy8z\nxwwOfZDIp8gb4qXcF5r36HZVbVrWKZqlLpbrfhZL+Q0d1yOoRbBkSBs95CnZ\npVyhwy4Ky03ADIacvZ8PFhMICb96YuV/cR99iBPgEa1dgLh2dq305zJGcz/y\nXM58N8ebMGqCu9OGBCZDqw/U5I+hoqDj0s3Tk4YM1vPSa+PQpS6zZjo8htyW\nzGbUFd6HQivW2vkEaxXZ5DgoW8Uk1sxP+BXGzrJBBPjPdae8QIe8/7IATrV3\n7Gci\r\n=1oN+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCR+5iLMeQFxEv0IUeRi/ZFB40R2bTZLDiAqI0lifvOfgIgU1oIi1JTuU0raDuIgFVL0Fr0R2dTyie6AJy4x7bP/jw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606260406-b025e99a.0_1606260524928_0.28221024238253767"},"_hasShrinkwrap":false},"2.30.2-next-1606265886-6d5f2f2c.0":{"name":"@xdn/core","version":"2.30.2-next-1606265886-6d5f2f2c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606265886-6d5f2f2c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-y9CcAoD/f6A7Yl8w7u6q4wQfSFj2B43DEvdJCizcn6JECX7DkT9L45oIJJKAX2b9SdTZqljwKhrvvqiqdA2ybA==","shasum":"62f632f8764f213c60726587e56bcdeb6c248252","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606265886-6d5f2f2c.0.tgz","fileCount":169,"unpackedSize":641722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvayhCRA9TVsSAnZWagAAme4P/23d5RUDtw5gvBP52qH2\nHnqqgiG887a7X5V/YCQqFusJ2CRbAqS2109xsdPhpVqw+nMS7kU+lBnSwxC5\n5pEMdA8XALEnw1foTS8tT756rw/8lE1jzwGQHKD4xFMt/vA/oX+JpOwGDREN\nVHmz49N/WAwIFNgVVGxZiRUV8GgV5npt+lI6LoGflt+wklDZtKAJ1A8RQKIg\nlk2CKrwzLsh6Gpw5P60/5NoLZheDXNTpLD6xXqM57JLXYA2Yz5z1yNZ3txr2\nN+NBJhS2D/igekqczIn2qSyK2VnE7RwMLRX5ki/3w05wVJUsFxdcTT2BTIi4\nRZ+zNfmqi5njNEdBBlFmzljdn9tZJZlSgmi4ppfre8oOiNS7zA1y8uBt3kyW\ngIRxIPVqMSXfby96K6XHP/b0I6aimiDLuddVa795J0WbKMvmQKIhnUusOABE\nIjHDCWWu+7Vw9tHrzzESthj8BjZvFlsu7UmRABvzECIQ/ddSziyDmE8srp64\nfO3x8Twl8NiOp05dN+/PM9z63E2c2iE/03ynKYYGcMK6vcLtjd1z6q1QC9BV\nrzBbd/IwWDnDlehpC0sPc6FP+AtmsXsJl178aFRkbSy+Lk04vN1XCob9p9L8\nimznmY6z2Ewv7MQfmFxWxkllFN9qcm+BO7Q1op53k0B4cYc2y0jx1d3P36AZ\njJUJ\r\n=iN7j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcILgzUqasoY14KxAAkKpT0nB8Jd24CGnAkFund3rxJAIgRZ/MwMx4l4loEcHKBx7lUpI5VpY8Usi35KnoT1cpfuU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606265886-6d5f2f2c.0_1606266016437_0.8967878375328826"},"_hasShrinkwrap":false},"2.30.2-next-1606296469-8907e3a4.0":{"name":"@xdn/core","version":"2.30.2-next-1606296469-8907e3a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606296469-8907e3a4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jYbx8AGhcT4czmOEo7P+nLZSH+FgjSU53/N1VXu/SLttixqSr5NvXe8rBII1Rj8lg5bBU8XBvEj8bYKhGE1jbg==","shasum":"ddd7b648de64f44010dad793fed6bb451b3114ae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606296469-8907e3a4.0.tgz","fileCount":169,"unpackedSize":649777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfviQMCRA9TVsSAnZWagAAmGsP/iKLProuNz+U5yWla7yF\nPeqdtQMidGvEAO0oukLjAVtnfAHF2nJFG+ro5jopiyUOZNxmn7YucLoePAu8\nDTJrKWCJJbnGvdFL7dTCfC49jnEyZYKnvad5HMo2nFozuH6STZO+U42YGcDd\nZhHsYY6iMIzKaZZImJn5ajJz8JwlxP4upxZcrFIGp4/EX19V8wwo2KaRpITG\n8efjKm6pP6VTjXWLHdd4qhVFhg2q/DGYSSCLXbPmgcyqS5syk8EiReC0lxFZ\nRqluKW0MsvVBEmMcB+Zb2BFyHVeqXueRzgOHkbAdhhLaDANaee6lbGR6Kr7T\n4iDRLJOWkqbyW0mEVkpd5k4XhsY4SUMhB+FK+8snHXeYopU4xQOO6OyT1jOP\noBmW53vbKJMMfFf+GSfT6ivRYpUAe9wvjXRlVisXRrZayZ4DBLxxWcAzWWok\n0Qx0deP47DOIk3KXRdlE+mJkUuegwUgDlhhLphGiPhL+pT9Lij5fwbceX71h\npOYfN+oZBUuF3B7XzCgI3EfODBwaqbdvPSmwvbS6rLVQkEb5fDy4syG6cyk6\nIAJTjDxt5m4eFiXj7EfRZ31O3Lg7WWr1UCzYbCtryy4O3VudykANPuD6C/UI\n16pPffiQb/nnICsrMrQ/o3a4xC12PSOzWaFwKgd71LgpjLBVf6cIAyNfv0fY\nh0XO\r\n=eC8Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGrsTUnBhEYaEhav7aqD8S6uu4RKABfDeW7anzFj9G9/AiEA27GwrNy9JmzcJCXUIbZY3VY6JptBtLgNAVEJX1ssGuk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606296469-8907e3a4.0_1606296588252_0.94547465225882"},"_hasShrinkwrap":false},"2.30.2-next-1606301175-8907e3a4.0":{"name":"@xdn/core","version":"2.30.2-next-1606301175-8907e3a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606301175-8907e3a4.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3hhXB4SD2I0qbqoJxfF7UaaJVhJJvHzzHdwHySc5z8kSjPCZ8rG5t/nLx9wJAQwr5CMDkuTfnEIV40KDkVChlA==","shasum":"b3f2c9494bbd80329ca9cbc1d774a760713602dd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606301175-8907e3a4.0.tgz","fileCount":169,"unpackedSize":649777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvjaACRA9TVsSAnZWagAAGGEQAJVScyY5WpY3q9dBtA5R\norbPMxQalVc91y4aMeZ/heVWcYJhpSlXpfWqJTVhFRVga7j1vWi3DUAtb1KN\nKnHGRfZ/PYooWYj5hWhtMOlfR8RgP+qB0RDjozDIj6dP8dpMSK2yOaR62Qo5\nbfdXiR2urHOc8pTO6bi4Ug5asV31QNKp0c2cGk7ogHTcGpqNMZPfpPTkWn+h\nHRBzeuqHwr2wfD5hE1flkQR+llxkFKJOfh1nk6V7cdeVwsSfWvkq+UuNi2bC\nBEPogE1fRewMmnTlVn9Mrn7qgqsDofNP2KQ3yVm0WX4ISSN7qUfVZmjplyzz\nvEQBDRidIk0cznAA8TxBTlSHCZGE1Si9F9/kEOZsnP7569nCJV0DehNwnV6G\n92cHbJMq5QE9kq6gSfRGV3dWCilZp4QIXncuegCH/oT5bnHsNR+xTeV+TH3c\nTVvXSZmQXz7RdBOjKGgDL1i1vR0Vq7uzNoWp5k++uge1yxs47/TaXpK1eqHc\nM7h09YN5b/7GdTX5GaJNf7ygg/1ZvphdhuA40JXrLssnZzyFHPHtwevS5zXc\nwGtYa0ENCFLg7hEMM3XoMJUsLYNR31lTqX9RNW7APY+enR8rwLx+CleR0NQ5\n+oX56Pj9mfAcpUNl++R69CSk/kZ36O0j/geRW8vLB7KY23yB565/OTMszNhD\ni/SN\r\n=6Uvq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBQqxADED+TKEIcH6pbALYtOIPbpIq3ZfdyFkjl1s0YdAiEAs0jKku6je9697xnYayoRPomLpC8Zy94WoKD6ke2qKt0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606301175-8907e3a4.0_1606301311913_0.38632673084017255"},"_hasShrinkwrap":false},"2.30.2-next-1606306866-d3fddf39.0":{"name":"@xdn/core","version":"2.30.2-next-1606306866-d3fddf39.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606306866-d3fddf39.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+kRzsRQdN2EPGTUiq4KbArTAr0/DKL1+RoqXMKS3ZqJyR+Abi/pnALuOnPr5aILyNqBEKMg6/t3pksM9LHbE6w==","shasum":"385b44289bda2b561cd4fec302039dbdff381f54","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606306866-d3fddf39.0.tgz","fileCount":169,"unpackedSize":641722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvkypCRA9TVsSAnZWagAACFEP/3Eh9SR4LrxqDA6iTCjV\nKXTwrFddxZULdU3j71HGWGLwcJj3EfqO0anD9PLuAZUTx7282RIRW9S6NFEA\n2twCxbmg8C3m0xq1lJrPZFk7llruO6vRnYR31cIuooOLWq9f5gvGSOsc3roH\nQLa4gCUdLmjyGTzjRg+hqutXIwx9+A4ovMBtaEwdmda7Q2CHgeysV1zxH3JU\nqi/2Qbt54YHaApht8Hn1a7nS33Xs/9/7nJhs4Eksnduhkv0NSjRlaG38N5d6\nyuvxmt9AUHRDZEaVK23SSxu4jQnU3DHuJgXjwuz6VGhDulVLw/DM5Psh8UA+\nv7DjAqNmYVohNIRa7nyvOeUQfzi7OUetmy464aprtjLz4UOkRQGdUSs2+vPZ\nCjFbgQ595UrtLzsnJ82bM7PA59P8ccBtuI/P/++tuVWfb2kUIlIw8d5eylQW\nO+YevzrOXlCz5F/d2XfsfQubuWFD0mDCa57FFD6E01ShmK0jIQIri9HJtyko\nRMPhUK5puQ8wa1SDpU3lj9IIQLwCDp5flf/k75vApUcgzquj8zSAqOX3/iBR\nvZF59R/3/45k4ujvVVtBbsnZ0lIWrp9cz30MWQxhyuN13CHyydcmKPjWWOE5\nOLT30t1m9YgA60kCYD86p3SxAh84AKJGx1rq80XdcXIEoJHx3ovwUm//3oUb\nc0L9\r\n=wf4K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG6GKL95kNo/suRAznPtogDFczgE+b/iUunbCWFsQW0lAiA/Crz5kbjY2ZUDmpI0PP6kipC2ASgObYgCHBcbDjIMkw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606306866-d3fddf39.0_1606306985145_0.8682849167604021"},"_hasShrinkwrap":false},"2.30.2-next-1606326547-10f8a5c8.0":{"name":"@xdn/core","version":"2.30.2-next-1606326547-10f8a5c8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606326547-10f8a5c8.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FDBSIs3D8Jd3VZEmG5/jU20g1vJGJ9sKQI3hc4NVy5enzfdSWAJhlBFSCsfraxTXosITrJqzmkWNdqK5XnwZAQ==","shasum":"2d1edb0afcef52603e0f1c3fac73309e0dad5c18","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606326547-10f8a5c8.0.tgz","fileCount":169,"unpackedSize":649747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvpmOCRA9TVsSAnZWagAA5QwP/11Ya4buJqKcvbXzPmxR\nBS1HRYOLU5KaRmNzYK0hGISsRULX0h+JS60SunOuvfFgjyQg9C1Z4fpf7jur\nEHBdp7wMW3itF3ay7LvoXp70x0zefgJE1AEkeGxi/y5VuLo4Th+C9yVwUl6T\nwgAtrbMEZakAGmLtZlSZ4sKoattDLsN8JUjpkhI5Emwl1wTtxGQdaJn0CgEz\neVy1MKQdUDHjG6YyNByt/HyH0dZqrhVFtTZ/yNx6zsoMbUTv523hBcNKmmnU\noVrFaQ3S44PmOc0JEuDF2rqPqPi3ZSOp3tIyuOISWV+QZsNXhddP6UZddnRY\nHGOYfytK8ZWr8ntLOPD0jZTdD5x2oPpvBUfyvy79sI7lDp0b9inyd6a08RNK\n3Zu6KrY4E5Icd7bBTs2B8LVzRCvD5uTDh5Ja3BGee7+mVxa9YYTYRUkodcSS\nbAY7s4ssY9RGzZCsnScsfLa0Lrf5pyGhCpVglWborEuu+x5nr+qIQ90CpDih\nxPuQxsbj53Eil0pkDfF/FHbq6Ba2I1rZD9PZ4BlqoPFRtT2CNSCBXuPt7Nu7\n29ZACGfOjUJN1u/TCtHoQlfjhECtUT0X2Ider4tymFnn61FTGCsiJdORTwXH\n08js4pl83S6I3Ax1p2wz/01Jig3RZk4xbfmc0lZ6u7Zurqoh2/it/dQZzVmR\nHqnc\r\n=4tvW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICV6EEigrSCA9Yq1zTpzKTf/7V5MyVZAlwtZynazWswIAiEAk/qmPVH25vTyPg5J1+uZUkVrIaLwiETK2aSktSs9hYA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606326547-10f8a5c8.0_1606326669935_0.43283195787677875"},"_hasShrinkwrap":false},"2.30.2-next-1606339979-0474781a.0":{"name":"@xdn/core","version":"2.30.2-next-1606339979-0474781a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606339979-0474781a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-laduXmS+WEd57nXnWrfzVrBzGyxNdag5zTINfh38tnZ+XrpcieXfTBgHJXZKIT1ZeIKyr5oItDY4HsagIhCegw==","shasum":"1d8aaca900e718872d83c96224f8b286371f1c3d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606339979-0474781a.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvs4DCRA9TVsSAnZWagAAWuwP/20oaAbDmzmpZNrKSjRO\nMcDgMud2eKj1MmTCdJHrPl6i4Q6b0npN3leZ5PmC+i4p2TnIDB+jFzkyvi0a\nlU8qgPub3opt9a5UymrGuICR+ZR1WQiQs5J4PlKjUAgeKyJYBsk7aGr0dEbg\nPnCreKzLbSeNAUmDwoOmy9Qmg6RRz6O3b9+bwG/Tsko145o6XQ5501+2JAhR\nj8Xu5NcPDc6uA4J3Oi/kBozOVK23kXsZhIp671Ow/q1IgW8RadiuJuKTghik\nBqtUUsJSGthspBPwVBNGPHxPs2bn7uf0zvgqm459+wPwwwhPwgToMYtGAhXE\nsmB5hc3ayf883b5ZSYmi3j4oAy1TrAI08KqDnxlAV8OTiZEptwc4Z+0LLASo\nUFEXp3JTOYXb5Wn+mFtoVKyXu+F4akFaupxbU1+G2IWDNva68t7RJobcEzXk\nV5tzwHsmQgzSiYO6krBG4jkDfs0z2qQyIFWK/SYEB51aENOz4pRgVuZ27bvm\nOPVHh+F/WDuOyUiK70LffTiQINZ3SWFiDiFoex+0p1sRtaNIL7aagzOkj3F7\nIpurKy7RhCZvjwJ/vBbTH3inGEpNAK2bj7qCNmnv6MlAz8fzwftkykfu6lb9\n5hX+3nDaDgbbSWh8sFTL9XQn6HfbKIjouw/I14A1c3MJ12oq3It0SybSHndw\n90Fn\r\n=NeHk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICRu2shcxxL4G/iSx9NZzB10qsfreEK9N0uq7Nu+0JNrAiEAr4+v1LnVc0vqEvb+mJ0l7oykHw4GSnnqhBaDsbmNO7I="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606339979-0474781a.0_1606340099047_0.2572370143633653"},"_hasShrinkwrap":false},"2.30.2-next-1606340374-0474781a.0":{"name":"@xdn/core","version":"2.30.2-next-1606340374-0474781a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606340374-0474781a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xI96R4PffcF/NwVy0G4ZK2Iz8c9S60GK8q/Bj+DmGnxJhFbzNd6WDAMD7t+1JekgsX+f7mWvelVduOIC6UG8Qg==","shasum":"86f343986fc8f8da1ebe156c1a1be01a82283c06","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606340374-0474781a.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvs+gCRA9TVsSAnZWagAAkc4P/2ZzBPPVb6x+MEQb+Xp/\nyn4tMfkbqymxpw5T5CgwY3u1JPcFCnf2ulBYZVtPG9+EVmC/3lD12RSuKfqJ\nwOUFJg7sD36Y8cxLRgwPfNqvKf2XYDe9buAhKK+/4bjVi/QrA3twLZOWAgW9\nX0kn0Qln1I8FMnpkvo7r0ssUw8CFsS3vk8eE3mdm82Ke9ZPTAPO0wNTfM8ld\nYFjX5h0RLjQuQxU0ApD9Ym9UPD9O8Y2Dbho9Qfr7h77n7sugxB2xfVyqt8Yi\n6oClKDAwVqX9Abb8qtyMJt4K1T6KzO/0nK7ta4cBux0BzIfz3nrdpAFS55fT\nOlCqZObpBAuBqwJnpUMmK4lGMr3QKPYwkeQfYvCeZrvpQ7U1gFNPDYlkeJC+\noBW4AyX9fVpuSn4DI9QI6rhR926AcSikAbfUKuL85GUZVlOvDjKpBtSZh7Hw\n3evi0EMNvfef4FDuuDcdfW3O9alroU+E3ifJRfZHUNdNelCL1OaKxNcgWUYs\nGIEvzkAaa6Qr7+vpG1kTxsehseqdfDjX/ZMJusLWCaLGyl+W6QAIS7uKDwMx\nAmd3sOaTDu/Bs8EiiwnQ2xI1yI3CzfKLB52+HpkGdhnVFhmYD24vA+0CkaDz\nMNKUPf1W7zqS8mRGVlHwLwHWsgV6vqWFHFyoBrap/1H1RjXFXF4Sew1Puwh0\n3B/T\r\n=KTgN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBgUlokqkZc6OuyObzkwAfvwidTTT0Ov81qi5QFv3i6FAiAPo3YGqAxr4UkRBlfe02xazTCX+blHZobaS4cxdW090g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606340374-0474781a.0_1606340511779_0.4970294397917687"},"_hasShrinkwrap":false},"2.30.2-next-1606364487-ea656f0f.0":{"name":"@xdn/core","version":"2.30.2-next-1606364487-ea656f0f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606364487-ea656f0f.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-sifCovQlG32ZFKYpS+3bhBgYYzcF8MA6TDBAm9s33sFiEU/Dn+DFvrGEeYz12Bgr2eDXljxJ9wSDqq03HXnUbg==","shasum":"37a388afc2c47c47fc2832107d90c922ff2fdc27","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606364487-ea656f0f.0.tgz","fileCount":169,"unpackedSize":641722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfvy3FCRA9TVsSAnZWagAARyMP/R2BAtShoUdKj3T4UIZF\nkdAXq8RpJl3l1ZRO9LoCqM/FUivBuv4d4WaIF4fA1mXotzJOOoRTD7DctfQZ\n7+6KjX7RUuHXMC4GWFRvabDxDUmEGVK3esn13soCsh4FE36Aur/t250b6RkN\nTTUHGUubZ6ipZcJQ1d3LkO8ctF6pSALHi+nw+wQCB/nuyHvK4KWqd0y8PfP2\nF1xwvt596kLNbR0/eKtnDpBD6x3Pz/o8BqUeo5ixQpm65XsZh7/Wmk9HMlNC\nF9ZljgBHvOimhEJ9V5WEAyPcFcP4Ywf6bLdiSSlm66e3H7KqGAaxtrkjoCI8\nBxAtEWc40ksYB2LZvYRkUOkN3pV5XTzZOZaNPS0W5zUxuq5gsXuQnnkGqjWz\nMAYQlTNkH3zBvj/StO+HsG9HjgXndrCiENQksMy/b28L77ABnRq3g2S1qf3S\nEZuya7VsBIypeh8MS3m9IKUNITYlSP7xGkoWekzIS5Fz+a6+OICeWGY4wwUe\nr0tzkj0hybJeG27/xuHV5rx0On6U73D1FyqjZUftVb7hwlk/U/5Ciwo/KQaC\npGeTXptROgDDbQKQBoB0ckJsWCGV8j9xWLlC0MVweHYchAyxlv5fOyAdg2/0\nt0f3Xz0O7RpcOXJQHfdNBu5Z453MFjB1Py7vcvQmwzKG8HHjrSxlDhiHMmKc\nuYCn\r\n=vi3t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDP7TAqTDcxIHgBTaMVIKJ3sifWpSXva/Mw2/t5nc0cdAiEAttho5bGlMt4TGcLWEBrvuldT/u57s4Iuz+o36RXY1bo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606364487-ea656f0f.0_1606364612613_0.8229693896446124"},"_hasShrinkwrap":false},"2.30.2-next-1606387651-39487564.0":{"name":"@xdn/core","version":"2.30.2-next-1606387651-39487564.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606387651-39487564.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Te4G2gdgfPqLVCJfSKiqNpyksAl9yeyjfxzzzTdmv+d8F5AtShKZ1uNwBEzN0Y3JmvymBY/C0Q4A0b5MTIqTxA==","shasum":"6fb9c03e9173fac3bb3c2f30f4e51657b4e79cbf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606387651-39487564.0.tgz","fileCount":169,"unpackedSize":643263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfv4g/CRA9TVsSAnZWagAAi7gP/Aj8XtSAFIhMD0ckLfIc\nk/ADXhWKxzsxaWrcfska0FjwRFeOXLlBoKcl9yUROlKhVfl9d0afd9m2Jqo4\n3G/Zi4k58uF1FtAae0gNRPKPjW0wEforF3JfRjS2oqkqJhjH+zJL9DvmaoZD\nv1VjrlVkidDGDLDi4xyvKT5Q55zGR9k3Ta1ncKf2de73IQTzPbNsx9r2ziNt\nAr8mzwmaJyu3ZZSFuG1hrPMgSaXFisDB03OER+7sAdzwE4ZRW25Vjjp4stfL\nMIFcoOYBDvTk+ktgwqVxrHazaR05QGhqcdmaL7By5laRIEO21iJA7bFFA+G0\nxQnmAcG7bwr2soY3mTJ0icQKds8pxPv0lvILSdOSyppXXL0ce4o5snXFE6P8\ne3Zvn50QQ8DROE+TJQ7de2Eu8Gk5MByoHj8rizCD9H75NtMumsal2XyjPkwy\nfPs6daH+T9BZL1w5bGtpq9MqoHq12IkqBQrs8m60I5ZhhlnBkMETKDd5jYNi\nnnHO8SqJ3R1q8SavwqVA//fujjJYparQbOJhJefgyiWtSOs3qwxNpb/3unud\nOTbLlrmyFsvaOYZHahA4Q4bApA8dsdBRmxNf35EwNQGXB7CKQlBrVfPdQRzT\nPKeatP9CUF5dKnOmG6EV0JWBhMe78aRDqfoTj80l5W2MC1fYFREtSLJSLhDU\niGNq\r\n=Nni5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE+uWh21gooVc6JALhK1MIzvbmJ966syW2JzCd9b8d7RAiBPwqGFtP1oMZjwKN6Z7XLHdr6nUnqSG8VXSgA/fp3hMg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606387651-39487564.0_1606387774589_0.554392702058855"},"_hasShrinkwrap":false},"2.30.2-next-1606388291-53a438d6.0":{"name":"@xdn/core","version":"2.30.2-next-1606388291-53a438d6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606388291-53a438d6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8MOpRfgtp7ersfIPgqcQeuxi7P2Cp4R5vVVH4M8xLMtQDRhVuoTaRa+7AMQiXOp7QlUZadenFa9XfKs6M3wCyg==","shasum":"a700008ee4d7fdbf117b650a7c938c5106de138f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606388291-53a438d6.0.tgz","fileCount":169,"unpackedSize":643263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfv4rFCRA9TVsSAnZWagAAo1IP/j65fnFjEBipQVECoawJ\nXZQ9q4P6wz6HvnB2mP9l1fto1xaciLL/H49YHQSSn3sfZx/isFGNRlnReuHp\nOpAPUaJU6g1kjDvZ/Q+XWTcRwPYNfZBwiS3DsylazMzdSzfryPaK1WU8jT4B\nOEzu8wwLRd5eZ/ceJLnWtJmHz08HCEqPo1NbHMgkhwDmNpA8X7Igo6rU2dPA\nTTrkdXhp6CJnWEvndAXxK2dUjhPNDPumX7QRIGA0Op55Pn70d6j0NeWDagp7\nEMc/TTEX8cZpclHp2/E9E3o00Rot62AHXIEeP64bXQPe9TdEU4LYM5HhE6NT\nwjxCp9bv+ktTYLoVmvFV75b8RzcAsK8+t1x2rlJ2ii2y8/9Cy4B3K/Y9vtqk\ndlYTxIJ8DF8MEwihyNQG6Gv9mhvhfLqpzjVLoo5mXAsgSVYxrH0upBwFmnfc\nDV1fGlHALC+LFsWWHnieBoZxo3OmSJ9wKTsWvjpQM6yxXkKh7qXSHA4OgWH6\nsEwSs51iu992mvsA6hWKsZqlcR/RepRK8Dp6ycVhIQ2LLj9SM6NkxKcDmOey\nzKsq1fE3jxjIsZDwEQhnjoKrSn7TgPxSQJV3vJjDiUQmSCB59BEk4Hh2MnBj\nKZpyFJrMPC3341bPF3Vuu98ed3R3baXpJa7sXUkrG1kEM6Jr1mDkDXwTz14t\n37EL\r\n=3SFq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBlzh+PR1sqzOTExYwtdjsXaX15jTcBKYYccpXEh+Y22AiEAz9QLI/i2TTwVKWtziROECj4Fb00wkeDvLV5iC0kwz/g="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606388291-53a438d6.0_1606388420818_0.7079657870502829"},"_hasShrinkwrap":false},"2.30.2-next-1606395226-34bed290.0":{"name":"@xdn/core","version":"2.30.2-next-1606395226-34bed290.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606395226-34bed290.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-J2hO9eMs8nOpYzSWGdwCpUcZeDiSQ6/p1Gv+uvzHkh4Mpkqv5x+xi4LoTwvjuB7D2fdJk/7gL7YLzFGrzF62yA==","shasum":"9cc5205a330f7d690df07109f3f706c76552bf7d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606395226-34bed290.0.tgz","fileCount":169,"unpackedSize":643263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfv6XDCRA9TVsSAnZWagAAYdQQAIuPqLu2mor+ODM5ye0h\n5o5tLlH9C+wfsLqP9TfvLctaJrtlAOFMdPFSRw5Z8qgr8nyaJqB1IohDAAeQ\n63VOO8pVXUs8m6g7hxM5fLdf3uoMWyzg4/FZSTFIsUQzhhs64OJ7pPXpwwOX\nAMzMEqZ+qvOanEVyhjhtViSRZPZipmwyMKtBhtIK0BgV6Fm/0Re+5oIORaCk\nJCwfOam2sJo3rYBS2xcHUws75f+N+tx6PjYlZeM7aAyLfPsKnCaI3rJnvD4v\n5Pxi2YFqDYR1Y7++jCcF1B2THf6cgtp3s+13UyHxxgKlpkFwsCySCpfH7i8u\nsfzueEe/oR4JJcgXRGkFdUxZr4LjZIRMQUyJyMJQ7qNrVD2pjQNRoLK70WcZ\nqMn0drQkLeypYpXD13n2M0PpSQ+kiXOKn63os4JRaBPnyeQUDwIXVBTn+893\nVOSCTkLI2lRhbdma5dBgl0JJ7qv27P1fA9BDcKuSnDLff15zwMSSKzI4pPfm\n/GzBoLhI/h/nKh6fBCnXRL3w0zZnlij+OmOEtaqt7ATs7jzF1Wbao0WWPtqk\nKMywnVoW3NRM5UREVi4BnnFGGg5Y6hEgjYlRugXTkuma5BlxahA74WtXIo/c\n/1uygOJdIV3sJYVhs+rBg51pfLJZ+L9LiQg+eJqSnvuIp/4MIDoDTdtHZEHk\n9LMq\r\n=xFmQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID9pyHA0rkZ9T6c5e7MLirtCOgWr2hAc4hBJdrNStUBZAiBQvJBLjeRDZDqJ221TobMJHqL29rKMotyiwUZqqeW/nw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606395226-34bed290.0_1606395330609_0.9910796179934167"},"_hasShrinkwrap":false},"2.30.2-next-1606396363-8acdc68a.0":{"name":"@xdn/core","version":"2.30.2-next-1606396363-8acdc68a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606396363-8acdc68a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hJTJA6Uiw+cGi61YLRyYWiujoh4s7Ti7i+LJzvmtLsh1EtyeOQEixpf5weozlW9u6vvmzdhV1rVFlPxIO13Zdw==","shasum":"452639de9ef152a58eb0fdab0a74882da1a3fe0f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606396363-8acdc68a.0.tgz","fileCount":169,"unpackedSize":643263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfv6o9CRA9TVsSAnZWagAAnrwP/joUivE+CSWZ6tp9COAa\nZXvoHenkMssyhyHDKY4lmQjUtl8tPDffjraWmJFdaw3r80LlwTlKaXmzE7zO\nI1pJH1RpOyfi6fzbgf1/w5tUG14qzKwuzV0B+Kmzvvt1VtSS+HVJWHniYtJB\neY6l/g8pkZPsLVJy/SP+45lFd/eLzDMuJLNmR8onHp8FObsbSF/qa/t6+oJl\nXN0jyUb1qJyBB3LP1vLr6V8yWdnhj+es5wlY7X1CQWV5MDH2RwSQzH/kGMmg\n9LpnPVZUEZuw3kB7+3vnui0Yf9GmF0bOJMjyjofli3LVnLBi2lEyLocmBcnk\nqnB+kuUA8tukQQVjklm0PBRdXD203J37oaWl3a2foVkRWgjDhlKeLwI1N1+V\nBdw+oUjiWLe7DcGB/56MIapWVZ7jWRrPZrtdVp0JEQZv2ta1x+PFI1QAhLqP\nqu9ujVcr6QR8PFuoKhhUjTWjn+A5rCT3Dv93126o8U1xWXsOFFx/UOFQ3h2I\nwDOV+2cchGFXC5/dj6p5BgQDpk8q39DMCQRKolk98E2IRVCEoaly04ungWDG\nM7J2U6mH2gVKdv+z3xg9u7D30TWIxqh9jzLw3q9ZKlX6hMDDoideoMtRsPvA\nBToSTiYfBcKwQ+YusCD8BQ0Q9ezdaPXQaO9cUxO9NHQOOpGKUs7firQwHwKd\nKUo+\r\n=gQp1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHd1F97amLaA9r60Ve6zdjwqL3ZCbpKDGuDdW2cWff+iAiAPU4hbpsPty/nrdF4pWmBmJeHMetiEftM1y799kBqNxw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606396363-8acdc68a.0_1606396476489_0.0784772025298941"},"_hasShrinkwrap":false},"2.30.2-next-1606396924-f730bd33.0":{"name":"@xdn/core","version":"2.30.2-next-1606396924-f730bd33.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606396924-f730bd33.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-f8J+NAoGE7pg22Ow+YCLUZqQUPt82eq3cDc+s3D53INB40K/Sx4mQA1GDl666VZ3gjqPt4hi04RAd26BMBEfgw==","shasum":"36c6f49664efeb5302f22ab9f11f16c75c47e07e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606396924-f730bd33.0.tgz","fileCount":169,"unpackedSize":643655,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfv6x8CRA9TVsSAnZWagAAjDUQAIZNsbKBI3B3DAUZ9gAz\n2ggJoOOJmLP3jrO8xTgDF/K+a73AIQXpR8I/h60VSJKgymdKVFN6QIx6qu2+\nhVjYn0ZPYU4wi5klPften/LZ9vVJkiI0MdiZFCVZyuOO6I6jJBD0ILuKPoaa\n9ScPN9rOcEJeNWIrOZH4pcF2xUHtaBDpqUmINKKJRLxu488yQFARlKGaTyV/\nXJ9q9z1UlNCdioMhDCJvPJCeTDzL2X7tv/OVukv9vcWTPbCa357oVqnwGREH\nkNBqcBbfJNe8e4/I+Bm0c+sbkugEP2jFfgWUiClpvWrfOpRvP3ZEzIt/Cagr\newke0+tl3M9UA7Jck7N5gPOsUvooggc0uJMS4vvRtY9eY7l1olInqffRtlbh\nAwQCKr5i2P1uW2JS+SW2tZaG3LpzAjAQk27vCReQaN//ElfhMenuJoLcaYaI\nVh2PVb8rxeYyH0MDjIAnGclnvZmmZ/nmL0DAEKs6WqkOZyQr9ax8bhXcsN38\n4owwV2X8clRUfCfdA2jC5SybZ8emLDzABTJfJTargBXrGO3oYY6DEsEO5Kz/\n/JK0DRDbqG+rgBH/IVN0R1k8FuVQhyJ6u6K7e8cUXFvHuVZfu27abD89chG9\n6/EITTZNPGII5U0qpu3KrgHs4NI45vnHfjyay03l4DKa3m4ZqbG53j5p8Bqz\nSwmY\r\n=9yPZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyFQ2gIJAfyaK3T5sYVb/8r+qZ6M0YtnPOwJjPqbOGjgIgMBeUwo3YzHP11pxeIDTV3iuzjnQbkoCGA8PWgYlAbUQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606396924-f730bd33.0_1606397051657_0.06153440428709134"},"_hasShrinkwrap":false},"2.30.2-next-1606399729-18325b21.0":{"name":"@xdn/core","version":"2.30.2-next-1606399729-18325b21.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606399729-18325b21.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6XFjCOkLpzUq3osP+kR7zFo52xfhWNz+vw/gqjnjJILgpMbMX0UDR7S/MB1wTtER3OOzCMh2DksFvQkvNHUwsA==","shasum":"6f9198aff6bd2adddb66edf15732553fe6c849f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606399729-18325b21.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfv7dwCRA9TVsSAnZWagAASn0QAIiwYbeIcQwu5jwVdIOV\naSWjHCaANPKDQwK8+jPDuHxEXxFlYjKVpCdVDaShILhipPDadlALMSOCWpYR\nC6rXcyzZfnCo+NbnOV6YQan8JS+yjcRdPuUWXwXZ/WP0f9rBSptYDXBPsRir\nICISfePWqVFDbJ27XnT5BF7/ep3xTZh/DDL7K0jE795dJ1c/G+nLq7bpgQo9\nBMJzE7tbCZlwiF/SMTPYUhjJGiuopkV9h2xq2zPlAjugHsvC0+VTrMQfmL19\nztSio+bWNrEcfzxP9DHvZeZL8tpr+UMaeOw0Iwnn09FR8amYFjGMR2PbJf7W\ndShFZkXqE0IJ6C0DYExiPSXhY3tuQmSISrwHHBK/FlpPqLqENW/Zz/JiYEat\n6ZbNtg0YCrt0xlRDm8Osl4mcyN0kbO5vrj9/bWq0fI9eUAlZONGsSk+bUVh4\nFRFFK6/WsU4nKyv6W86Bx5DRT6+9nDP71IbBHPczBEbSLWQBgghKeDk+VyVh\nExUp80/dhoNGsJkMFem3/EC9uVqDNjkzmCJ30lD33D8JEpiUa4xeONbRjMRH\nVCVREOqlydCSGz7vdJnI4XSacrrxH//AA53N7EN+NMczl1WKFbSolWsSxiAw\n7vcaCYhahWJJkVH7oLxufeNngcOyzYI03bpxKpWQ95BdhZ1W4BEowkEnrCLs\n/ULn\r\n=6v7b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4hdwhZ6Pfo4PtvC54XegQ/WiPqzJW1mis32gR/cRwtQIgJ3vqwwp+U5cXQDdgkAaX2j9DEvUDt+eKOOInnZs5kMM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606399729-18325b21.0_1606399855767_0.33466102465932757"},"_hasShrinkwrap":false},"2.30.2-next-1606399875-f9e02808.0":{"name":"@xdn/core","version":"2.30.2-next-1606399875-f9e02808.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606399875-f9e02808.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tBVyfbuMcK3lHXu7jFg+M9DEUfvPHd08RnsXkUJU2oZyntnDfo6LyOSehsR6NP7qoEgXZ3cevUqaYXZyxo2A6w==","shasum":"f51747b5efa7b8ec294064ed1d95d08033b931e8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606399875-f9e02808.0.tgz","fileCount":169,"unpackedSize":643655,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfv7f8CRA9TVsSAnZWagAAPvEP/jiiD4Eg+r0ocYH9H5a+\ncYSz5/9tPOFneUh7wD0CcDjb8cr/pfkxnFCKPScmVEZ/jnYS5ob7U0Hr0BCd\nfh/gQwDxnnbRrRdGxycNO7Ap8yScx1PCnhS1Nwgx1QX4mgTy/EfSRfTanlGf\npLeGKikmOJbYzSvhJ45M9igfOb2Al+EmOEJmNq4vE6jf+h6SQCLOLUOLRCfm\nO4hzXcHaY/WLkw/+YyStO3rZr8mS5PVdANFp1sBxiAczyf/BNKIUzv+eGkn3\nUBAD2ILQ3YwXIMsSsMBKo/NDFTTqYaUD2O4uR6mfGDk3uwP0Imc8vG+5QGpN\nNVR+ewm/v9o3s+D0fpiTWcxQ/05PA59OZqfHsIs96POTEfdVqXf4YbepBXsO\n14I7FrepgJN8/Da9thTlGsj3HTmoGhYxBJf/VWCyUuoOBWK3U+E0ePPN6fDk\nTtbMweQZbUmhLorUH/akJLy10Ni9gKEBAj82+OdOjdsNWU8Zwi6MkXzqKLrp\n1oGmkQEAa8cXMg15BfqabJmdQtR+BiNDBQOhhX4m/R6hHO+8DjxTiHg4vbhy\nFFZQzV4HeR42X68dO/BqIgOUktDe+6IXvEA7obAUW+4UJruUweK6AaKfSTxK\n50y6vBxssm7JlDcbiblfNdPqPTld4AGtYSXpxM4XISKIreIqlIgojuHM51t5\nI+W6\r\n=LDnH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNc1bwwHfDKjskmSQWpPcLYlqFICaQt+82IbXLbWSPbwIgf9VKHCOwsr6GRev/2LMq4ba2nJQNrqsAW5xftA1eYsg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606399875-f9e02808.0_1606399995611_0.3428040092147777"},"_hasShrinkwrap":false},"2.30.2-next-1606424091-9fd744b6.0":{"name":"@xdn/core","version":"2.30.2-next-1606424091-9fd744b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606424091-9fd744b6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jhPcSxJvMkm/FD7YLDjslVjWRSc5rD9E0dwF2wmHtcfjmlOSi5XvqkpvtmdgYi7ZpyUg2OMI25Qu6StqxrG38Q==","shasum":"ee2a0aecef8d9481ab09fb7f2c4047d177033e9c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606424091-9fd744b6.0.tgz","fileCount":169,"unpackedSize":643655,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwBabCRA9TVsSAnZWagAAEXUP/j8mJWPid2LPfiIurXxN\ngyDucKGIfti4H1q8VVQPWvxktMR7TG0u7RXTgEMVaIlLKHw85uD4aQ8wMSjP\nVCDzH26/VAArhtdtRNSzksLibb/sKJDj4x/G/bvwfgvPdJb0gLi7ub9agGqN\nB4VdA1PTlkrUC7kUSZilPsaZRvHoyKbSrLy/jEBFzlS3avjbva/cXqGhyXxw\nGmEB35Exj1eBTrH2PQwySbIZpPCNy2y96HajUb5pvpS0V5iSKOcsOB6Tn6MP\nqx2p3Sx4RZ0Xip7RbseJSs2q6F7TI4Ha1vS5NZjBx7BAuDXeHlqxjyysLfHd\nNz2il7QBU2V1mAyWr+F1a8oaKSI3oG2cdLnXjmjUGvGeMSgyi1L332UeWVOO\nm9XqkpUl2wZE5RVW/Kw0uF+APvuQhxSx+W7ns9i5++mWUXYOcIcJeGIqVBtj\nqlqATcIJxfaQvozw+8XyhPvLhr7nNOD0Gz5bH4YbYEgMSKkZ8uv+jKaPAWYe\n0s/noIqi9zcVFq8aOYcuX5sd0BYMWsUyYx+t9dKk3ajT0B7Bk8a+j9ASO65F\nvSw+0UWvqoA/K66hiCWFEbfQ/frScENfSCtPJBxjxjwUnV8XWfkvnQMMdOC5\nduFZYXIMT9z9HzH8c2YJSigS9QiS1LCmqJ/MRSqBvY0m7DgOqfjbD4qMWSac\ncfqE\r\n=OjLV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBJ101Uji2DZ0YhvBiRS63qmzIu58SeEr/YijC8j9xd0AiAVaYAle2YkCJzeNcDkPwXk1HvY8l/mu0p9C/ai5M2xZw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606424091-9fd744b6.0_1606424218658_0.416747129307127"},"_hasShrinkwrap":false},"2.30.2-next-1606427045-9fd744b6.0":{"name":"@xdn/core","version":"2.30.2-next-1606427045-9fd744b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606427045-9fd744b6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wmDLXXDN6ZM4HmET8YRPd8owxamaB3/gAnNHHC7m+jjv48WP/bsRCj1fma6soQO75wLuw7YwF3Xt0wnR9+RjJg==","shasum":"5b72aaf664ccc2db4e8b79c463857455a1708651","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606427045-9fd744b6.0.tgz","fileCount":169,"unpackedSize":643655,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwCIOCRA9TVsSAnZWagAA1GUP/iXtMwGrcr+iQ2RIp/pL\nTbSGuFcIL3ltHn/67e5l1dTHgqsPGtA2UlEd2a2MlQ4qUQPUS3H8UjIknrek\nHZY+7++irPUO+y+nqIxQHTLvN3RDQVhPtGQLk6lQVYNvuLkgjKZe1Jxcvprf\n2ev6l3NjJsVdItVBShbMpbzigwHMiv4sTicfD6ImnsMWYRh2K9JnQBYgA9Nm\nHgiIJL7ym0KofZSdQsmRWm5oaqG7LpUpf7NwumPlF7JT7K4O8vMzH9vyFyAE\npYD/yjKgsy0ys1G1lj/kB/IqJ5toqttbYfM6irCYKqRjW5Z76VZkT1UuUAtA\nLRhoMoF3x9Edn9RRFfIEar3FgFyVYv3d+PmRXR3TCTX+oRbbalqcgD81EUsL\nxDexU4W060CT4lg93DiG2hgsHvzVjdLv79MYHrL4teZu0e9qxC/YQYfwVFzV\nA3m2aCXahhUDMAIVgtGuXvstIXIG6cPZPEnv7CSLum7g59iCEQnUlhv/sKIS\nwa18lGDuTkWy7ARHIIwA6PSk0j+3sBKehfb4jHGb9xsCAAvn+wZxmeB4Fduc\neOsaA5ISeps1dFsAi5+R6jUuwHLKDh17yRt6Cts/ebJUjmaHzx7cPlfYHNc4\neyEuMuCW950wSWjHAj9SXwkmOATN7B4Xnj5SbYHtd/Dd/pxmSCMbo5xQqdNf\n7/0K\r\n=01uF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDl4kYBhCDfbqwPGEyB+JgM+pBbk3oKSLyCAFUbtaC0JgIgTDceM5qCt2izZEKiWNNsWPDAOfWGnawcPAb1JCoNQps="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606427045-9fd744b6.0_1606427149631_0.5784297919979478"},"_hasShrinkwrap":false},"2.30.2-next-1606454535-f70a05df.0":{"name":"@xdn/core","version":"2.30.2-next-1606454535-f70a05df.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606454535-f70a05df.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-EB8W0YbbqmxGfENFMFWNmn9QIUhygqHTJrkwgQklaA3wOl47KYEUoxzP4BAs57zkrRgBt9g2XP1T8gVDtgkUxA==","shasum":"50799df9276610b93ec5ec6832adca22cf8f47ce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606454535-f70a05df.0.tgz","fileCount":169,"unpackedSize":643655,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwI2BCRA9TVsSAnZWagAA8RsP/3yFc/edrDph8y62TAKy\njXiRK1xfmVHnunY4yazCF1DPtPc4JTdNGU7Miar2UbmVEIQ6oRAdHpO589su\n749PoaARZedds96RMGHjWrq8dggtqoVBGDVGMAMfOEMNxF9ZEiE+9yhpjKsC\na0+/c50ijK9CYyp0+gI8GG5OQ49VuwhpPAl8aBMNTkNUNdXjt8X/ZU7mIABt\nsmw4WDcLeCui6eK5RLc2iyreKLajqgH8s9x95tiWkZyDis3EWu5bDqnRFO+m\nanje3C70jV5dtC7Sf7qy3ZOE+nDNo/ezyOriIhOReEU9qMUxX2ZJcyg7UeG+\nvQ0ntXlSlf2GfTqvZHhvY93X3wFNcpObf5UesO1BgZFV3Ra+mcpAKjMxxFAS\ndZDDACLUc0qQOZxnwr6DjthggVwkqI5MHRiEpDsw2B1F5TZhavgWxpvSVMSo\nIxP2iMtb5I6z7MyxUA0UHX8FwIKVr+X+TkV7iG/pZn/8gFuoJAsPRldQvMz0\nlwChMmr3R/ASWPegKf8rxJfybIY7IaSZFkZYdne7ixuJ9btQiRvj1PHy0eP/\nUEWTErA/t9/JkbAtHeSauAJjQwGnyC5hMVvIhJe7Pmw2bcCNTqEXFRbDCcLI\nIvcWa6ofKVWQCyBo/5TF9hm/jNCOJjyUHtctzyxA2M+2uozM86kE5CBWOGrG\n7+2h\r\n=ZA6C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA7hFna8GNPGPggctoSkNg7W8Kp2p2a8t/HhyU8gacCFAiEA8sgaoqTZZHNZMzuunofR82YFblg83LCeiR5a3C+Jvv0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606454535-f70a05df.0_1606454657016_0.12363047149745054"},"_hasShrinkwrap":false},"2.30.2-next-1606478305-6ef1f197.0":{"name":"@xdn/core","version":"2.30.2-next-1606478305-6ef1f197.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606478305-6ef1f197.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-s7XEq3o/KjvB2HW1913HEvjJAyfIumI20tBkg4J3JgJ+NZXA4j3bmHYPRJNBSxMy82A6kfX/X7dgHDNVDm7WIQ==","shasum":"3ca4e82d411a5e011bf2843232f27e8f4ccd664a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606478305-6ef1f197.0.tgz","fileCount":169,"unpackedSize":638534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwOpqCRA9TVsSAnZWagAAFgUP/0QUKgMoKRquxbiJ0hQU\nzhaU/4El9TzThQVl9cPQO8eNF2XEMJ2YlyOoxqAJK4pFY9KdcgNO1dvGHQRY\nq5b/MweRsSaCi7boR6fEBWgtaYL7V+mdwZUBnKnpgVyTo++AVa7Sf0tj2N4m\nN8iAAj3saI1xgVaMSYvOJKptI9Ki/5zNIBwMsTQyhKE93qy8QSsW+E9GFe3s\nqcMtBqLUK3FZTW/rY2d7sweT8Nyn0VZQlmz0GrHQr5HkkCzk+OqlcEWd8r6K\ns8NZ+99jaeOa6LDo4JBOcCPEtliLTnzAeRouLCN7oBSNTtXQbQhsv4SviqF4\nsd8ubhjHMjMw+JYiTuAPz1mCOj96jfcyYv3B2VtU/4M2Ku6Gj/OcjfCLkxyt\nOUvBnEVVX1DAW1hBKd4usHXNAHgMLsy6d8spPrWKdbW0DvWxxodkQ6lX51TH\nAOgMynmLb9vvhkdg6IMunj6KX3RI/a/lXGg4a16LtoeI8ltAOELMErsg3hQ4\nh/HpUoMBk5buPk9HlgwGq/gE5PMPnIkGDs+g7wLEh00Z1/x8k5t6LVwTzm6z\nT2YTiN42sr9C4py/3JXi6XWmXSoPHNaapmAtpZ7YluRlXN4UfrYwjW4DlG+5\nOkAc1UYc3137ggKyH7UUbsiOx64hYEN4TUR1qwOKF8dTAlzpj/oDFBnjLM9Y\nyX6F\r\n=OvlU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGQsB4WRBEX8xwsnMnrfr8sRqDt83lMWePNL2LLSniUgAiEA+29LMIr1YnoVJqhh17+MjfzZnlya1XcoexoWqhgfl08="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606478305-6ef1f197.0_1606478441432_0.5148806791953802"},"_hasShrinkwrap":false},"2.30.2-next-1606478981-809e6a7c.0":{"name":"@xdn/core","version":"2.30.2-next-1606478981-809e6a7c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606478981-809e6a7c.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ci9tq2Wd/pgDPJQLPPJ+U2bxnOKfjDYjodjoh/I/h3evmqohO7IZ+W2rTqBTORdmf4aBQhLvW1NwOzthyd7ztg==","shasum":"7cf560068b3d86ce319e7e1cba3265cb9121e319","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606478981-809e6a7c.0.tgz","fileCount":169,"unpackedSize":644685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwO0LCRA9TVsSAnZWagAAvboP/RbekQli8k41jtUZXUsD\nEKNjubzBPw739O8c2mbvAwmRof0zY6PEVT+LZPruqQrCtJSzGiSUmFORZ+vP\nzJ2h4FSG1Y6yd4x4b+fXMP1VI7kHig9eYne7tgd/MPeZGcmpQ11Q4+jhulVX\nxxe8q9gO6qdpeO03mx7bRS8dp38N05mzLpIpd2VeVuyMurZT6+W5RvFGf1P2\nTxoqTrwWmT9Hzm/hJFne3ONPbWXhD65QY2t2QccG8k8NkJNptHxv9ujv7RsY\ndORrxtpgx+CBLOlQ+0jiyuo7zwRF58W5YW+HKfGzitK8UxLbHKjdj5p+Hd59\ncmnzHQV49uQacLZMBi63Nb753sdxlFW725wyqwEADjRSfnrI+BHlXkgR6lTq\nNc6chd7zir+3gTW7vTcgRXAbjUwfejGh4pl3P9s4B1pasFMuoKXc45YCGq28\nqFHARrcNGjrgW2CQVFlnJWnSWJ1FXz4sZnqS/tAfy1WC4p7yZ7/bIS1lgbVe\n7tiBATtwpzNK/L1GjDXNox90SVYriIR4OQJpZgl8cldjmI9Vx61ojS+5QF9r\nIXoU64cSdJYN+POi+jGMvGvW0XVTHmfXaqPN73rL7wnMK1mNPG7MFyAiAuGe\nFT5YVDoKLsNLpRCXPK0Tt+X64gYZUlLF832E358KZw9Yx3B3nmic/tZGDi5L\nqWqc\r\n=WRk1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkSkjb97fhTY6MmMBJEX2sEmVmAauFw3n7xrzeo+Q2MgIgOdmHtzsJaMbCau0EgOjJVua0VvrDOGRwgZtGAbGBixI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606478981-809e6a7c.0_1606479114315_0.5244649074389964"},"_hasShrinkwrap":false},"2.30.2-next-1606483902-d38a4241.0":{"name":"@xdn/core","version":"2.30.2-next-1606483902-d38a4241.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606483902-d38a4241.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-WI9VFHMQIFerCNsFIKboAv1De9PL7HtOHTon5Z4hfdqcpxyu85cTka2YJP6JsSeGty0UpWgqRDBI6Dw0J+ukIA==","shasum":"cf55f6d7dd5c54e32603501f8febacd672906427","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606483902-d38a4241.0.tgz","fileCount":169,"unpackedSize":644685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwQA6CRA9TVsSAnZWagAAFUEP/jnXX3bDMNdbsNRG2Bps\npTPliBJNe3HLMtkhwncJXn1rFuNdDUJ312XXJUuwAPPAt8FvbEJEGVD6ahZ4\njYsGUwRmCC+KxOgs1jxpGGZh/Xy2ldlZvkknMrDBaYHmEdlUBtvQwOopHQ03\nTqPdzJxWPs8v5TSXVgOvLHGhRTyojaeCWejDrNMWEyjCYmgtRHtM0xE/lNKk\netOnZrq1sd9WsPzWuOuZUnmFKq+ePp3LRINXXW8ilHiiGKvgeQEbkzn4i62N\nZBAcp0u1T+Q+UJ+EPzcsdvDxfkeRoBrbRZJCuctCHm4qjjpP1Pi/1QWE2Scu\noiUOrbqtLDG+CtmXlflSchiHNhLQIb8Hntr/9OF1OG+UdGJVDl87PliZcJ2n\nK9vDQKjKofcCuPW/sDLixhQBLhI2y7pGuoz9p5GwmOJPNqpSeUhDGu0LWV7c\nQFUXwxXQOikYd8Ma0pRPwaiNPLjNbtVfmjqQ/njyZVocVDEjQ45q8cvnjUbW\nG+A8/whOdwzP4DaCpCEJyJy4doYj+W2o7OFa1g5bjaSj82igAHIg/LsxMqAN\nCqh2P1RPGZiRy0S8DGkqEK4u7Ls5oBWDrF0qksN4UmsbCx4AgfvodlW8iO93\nyEEu9NKsUiT6srq934iBi4nSdT4SVkB/OWWV84Uxw/XSlSRhWtbx31oNr3t0\nXL5S\r\n=306B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH1IuFzJPgRnnbr5Oig+VT+IFpAGAT/C9fRj9xEeUOD/AiBYWIWgHkGay2/sOeadNb/M5eJyBSxLQ2neTNe1OyijZA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606483902-d38a4241.0_1606484025736_0.6242175788212962"},"_hasShrinkwrap":false},"2.30.2-next-1606734800-1abe4fd6.0":{"name":"@xdn/core","version":"2.30.2-next-1606734800-1abe4fd6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606734800-1abe4fd6.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XUGwxTS6sIXXs5t4fL8TqgTRX2hcIAywgl8dQRpj09kA7NJO0+esx/dpa3TK/y4Nt4AKLtBiii1qByx7d0txNA==","shasum":"03c3dd9be9ce872996597f0d84b5e184680b33ea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606734800-1abe4fd6.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxNRHCRA9TVsSAnZWagAAwQMP/0Rb6qHOCstzWGLgDnvo\ni17CNndhraBNnNuP/W+MjvWtoRF3jRpNXpKW+qykf/01cehZxBs37480Genu\noGreIrZblRoc3U/ZZtLsuDLAZ8B68H7DDvPTInOTlC149Ohkuw+jdO2gJR4g\nXptNqJLcikSAhaCpZJQuIGu3vu/0PnZ2Fk0VZK4nxTRdoUFKZ0XyzYrpsQxI\n26z13OKy0mkoksBYDjLt+HdtZg4Jk6TMQTRoEi6fgWdFKpLvBnk/bfhvo45l\ngT/vTcHqptP2tE0hw4XLKNa3eKInv41Me/xdVdy/Ug+km1ZWVYiKDt4CPpov\nvKdcRw4jHrQiwEEtcc09wM7FPls+NJQqr68wvT9ZG7exqYoeci6pm5f2Rsyq\ni3Xmy++Mahm6Wr3uJdQ3MCyJhSFzSqarQh6w8ZrZZDrPv7221Y2fIJQF8hWq\ngE7wtyDhEdihTExOHG0FiL8GVDxwOaudzxmajMFHI5ww8J8IGhak15qQB1w8\nAxryp6vAhjcx6I6b6rPCWglS7ON7U9YKklW4EjfBtpEK56nthcFVvs9q5wfq\niqSI1hFg0g5oyZt95IDOCb8tp8s7s7M/acMO5vG2KNjv9U1E+XCog0IP/i3u\npXFHeidhkTAm4aPysLJjQI/j81Mm+6ZDwVeesmlHKsiRihXXwcEL6PDiJe9S\nt9f3\r\n=+egR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQQ+0XAvTxckAezV3/F+SsiHrLt2dHl9YFwT0pLVttAgIhALMsdqlTBovJsxcHwmWI8elefJVZ8zlbZEtDcl5XSxU3"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606734800-1abe4fd6.0_1606734918533_0.6582087248818196"},"_hasShrinkwrap":false},"2.30.2-next-1606742433-9ca77ac3.0":{"name":"@xdn/core","version":"2.30.2-next-1606742433-9ca77ac3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606742433-9ca77ac3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tPPEyPpmu4Vuz8Su9Nw6iXntVTN+ikX07dQnF9OZ7YDdfJY4VSGlnkzn0HXveodkfoXEmvoZ+VExSBacpgDlQg==","shasum":"014c28f78f9548319d2e29a25bc180671885a7a9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606742433-9ca77ac3.0.tgz","fileCount":173,"unpackedSize":632324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxPIrCRA9TVsSAnZWagAAcOkP/3f+62vb+tzY9aeoZSWc\n9MghDSQ4IadbuJ3ZrS1HZ7oQxOGgJGbJCQYU+fMoUIhMi2VsteZxhScEBOL6\n4BiSbUWt3XBNCAX9khukAT7nMOeQjOqUCMzRJ775XoC+05KyQxo4uUSplDPU\nBv2xRGdjaN8FF6W4I09CRlwW3REMlnV+SaMR5YiYYG5fNAB/FXYq6QhkzR6u\nvCdCLbOZXZHFLPDMVA+R9B3NtgrikNvcN70cONmZZP/9yILq3r0DcancuEHD\nxmcDmG0uP5FpXxVfyW1DKhIkNnSfzOIrqfmfK+pCYv1zw7tVk0WNxmWrgGuR\ndoK3ViCKQMPBS9cbLSVId6eLf9S8qTE8X1DhsQAblC6HHlKHZjKfSBiVLpyu\nowi1CuFBTsCxC22XkF+1Wx8nWawBmT91GSCQOlYbzUAdIBRpKXemSzqRWc9R\nmmChqF6fIuh4cCWfOWRdL7L7m9jyG+AiHHRySQF7xgCyeqGco3BA5NsA2OeS\noU4ymCFRURVHDTt1tj8KTbHdJpbjdCF4MGIMaZ8qpS45HyZTspI6Bq4aNXnr\nG/GPZAgJTobXs6O2dJ1+5arSxNsxAtsl2JSYKZxLjC1LRe2RcqBL2DbaSzSJ\n2KZKglOVEr8UK03l2wrhDDRu8HaIVknHLsWooIX9ixJ+4GqUJGkMWZ1lTupm\nAMCp\r\n=XzmQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsa8T91HEb3UUMR16Fdqo9abVcFAunSoyZy/wvkimtrAIgAtrkL2rZ+GTK0uIB4sMI29cdLHZocjEPLatxUOrCBog="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606742433-9ca77ac3.0_1606742570550_0.26153860776716376"},"_hasShrinkwrap":false},"2.30.2-next-1606743633-330fd6bc.0":{"name":"@xdn/core","version":"2.30.2-next-1606743633-330fd6bc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606743633-330fd6bc.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GpPC12JJtw3MFDmaLec2GVubf/4S+g1pIxIf91iT09IwLE0j6lumdJZ+p2598j/9kz4GvVlmdU7O30FzjCqplA==","shasum":"9695ecc232f6f200ddf2e0a54471f1f63e377956","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606743633-330fd6bc.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxPbWCRA9TVsSAnZWagAAgqMP/A5GSDRtdJfyPQ5ebYay\nvKVchGk3/c3zetMTfZdXtCERQO96wRFSzT+HVKQqlxkwpt407DCe8WCdKTm3\n97BR5jk/cFDLioJbr0OLmpePRQeN+J+NmvR+NCM+N6xWaMSW8gG+xCmn5Qje\ntWxDsrxSCoNzBAj+qJNn5iOiS5bL+GckHpyIJdZt6IlcK5aKoouj4eyK8p3J\nd6NIUlOlrExWO1D4iYXiQEKTfrvV4zmwsHbGVlHMt/N/g9CaXtlSliWd7pKU\nJCm+NvO/valF24ISImGCpOld84F1TFU7TC3G5qBv+86Dkl4A5h5JnlaexbRD\nrMpgkmnLkUdB+Nf3nI0BcNORPwXnjJm3WuDzT+rHrr7LveKqT83uDWm33YDy\ngBhR3hD325WeXgUbTYgl+Ss13IWGF8Xm//w6wXZAmxaUFcK91+1BSvnjev/q\naiC19L4Ai1MLPIo/TNg/Pbystl9VbERZAhMgSaml3CYQWICxP/6VGt2lV6K4\nZiQJD3cD7oSEPjCb7mztkiz/qVo7ZdaiWN5dZyk+Kf1T8TF/OlKX1AgWvdap\nd49t/8wQjOdQkUNV2GKrcysg6Bi3+Uw9GkATmvsON5s2T0TMyaQ3NfDAnGnr\nRsyTK9H2Md34B1GojDxoNHvaX+2nyhf7FfWsIF8EcZj1OQTdpf80y9jsWdnT\nIKj/\r\n=4YEM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGli8x3GJr0N+zswr41rvEs0BNgJmpKGS4+0qjgF1y2QIhAJYUfGpDSIUMkYfuMfPfcT22P0fCLCi3SeD5naFG57CS"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606743633-330fd6bc.0_1606743765292_0.1102552891194073"},"_hasShrinkwrap":false},"2.30.2-next-1606743954-0dcc7c52.0":{"name":"@xdn/core","version":"2.30.2-next-1606743954-0dcc7c52.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606743954-0dcc7c52.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1uftCkM9tubaJHI15f/9nVPl3s7T2qBb1JLABs1NTo+cOA1Nr60JvfIMBi6KMwEUa9RzIagV+P+DigW2F+uz9w==","shasum":"5d0920fde8ab7f4d417d06717d0c31e0c16c12ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606743954-0dcc7c52.0.tgz","fileCount":169,"unpackedSize":638534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxPgZCRA9TVsSAnZWagAAxfsP/i2bBcpddxXWuQaiC8/6\nunZemWLXomB4baEf5iKJ5IjxHnxK/cFu7H2DQ9TTw9TxdBd3avA8Qd/+vK87\nQ/faJX8jPJ5KCZcQqG4JJIIT6D0jnO+6VaMULPJRwG6V3xo2r7BGYlXPTv4E\nwZxpF80LBVxaDtkLGSCiLycmlsYpB/RFIJ0gZZwIQvoFHQwq1fEIKnnsQv7j\nIXvPnYLvwgui1/Hf4a3Iv2PSSinGl1RuHIflx/mUR7KHPDZMb8TSpXJG5Oc8\nLFYdNtIE7cxiysAaH+IUN5TgwNufjlSuNJpKhUrL3Hw+mFmfMnhRTfA7FMDR\n/MDKwkdvR6S6r+cCXSlLm4NFJuA9b9V8DqjrQzGaBpFYSYuqkwWYCDkcLQSD\nmjPMLj9rHWBCRuyeKFdpNP7a27x+KgRtI3URBlSkLk6zptiyvp+XMP2k+7W5\nFUK1twkMAYZGCYqW/pN1k629I9tjnv5cSlze8yuG0+3tQD5wLeXZL5EjeHFI\nEHAOcITtI1bzP1Owjj+NxFKCtA7G6uK+OqzZUESct/B7PRJwntGn1GW+MJMV\nlEMKGATFuRQzR9+T4M34lVL7cUPMHwDaxAGMRfgvBUEDpZ0b1vEtY68ts9fw\nzdK0sWWoTNN7dAre0d641im7zJRPj9lRFBFGjkV05mVHhFDyhokTunZ8SVfw\nZJBu\r\n=OnYl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAbP7aQsLDUxXMyvOVmbvuS+YfK0XIdrRBedgnPBhjXAIgP1DQE8hcT5UWiSSBAXHSbKut8O1Xx9EH8ffVCcRQi10="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606743954-0dcc7c52.0_1606744089144_0.08873969113491875"},"_hasShrinkwrap":false},"2.30.2-next-1606745667-3f1ead38.0":{"name":"@xdn/core","version":"2.30.2-next-1606745667-3f1ead38.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606745667-3f1ead38.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TP/LSyoCL6BWovT5PJL5xYesPb8LerrLv3Uf7nLt5MTjhZ/8dcA++6cE3I+SvBoE5T5WcRD9jjh/atqgjozneQ==","shasum":"11a8cc09e598258cd75a8d4e04af6cb632221a8b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606745667-3f1ead38.0.tgz","fileCount":169,"unpackedSize":644685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxP7GCRA9TVsSAnZWagAAyHMP/Rd9Oe3SZDcyEgaoBPB/\noMRBuYru2OyD60YJnOYO4puhHnpR0hiwyAoZ7DaSWWsvCKU6SVaGPInJ1O9o\n7OSfV9iV29WQjeW3CJNuyX1sfyqw+3wJk9FJX+vTeJ+2zGoQbe0LeYFD2C8y\nhCgpO1IXLh5ty+b6lKVlK8/fTijxRr+nspkWgyEl94E0oTofSjups4nkhssh\n4AVYWbMzVzk2DXq3YqROXrLAzzVSptTqfGQ431OuzJMC4cePLcQ6fmTOO8vs\nEe1aDMmpN8DVy9mWVOLcfiAvN6SedYfb1on+uJ4QLp1t1YBmsF680HI0Xlyg\ne0d2Obl/JLqcrvNLM1FYgEVMBj85If9ANu3sXPHQz07CuyVEinUuzJYjzzto\nfIFGJnYnJnUfSL7Ye7D1lM4MOevQ5RG1kimCU5ADBJUukn80cR8Hic1HFT6G\n+dTMKXZshYVAN1EpweiXgGUv5KDD0hoXR1l5jxKlmBq/7FA4P5/lsrAZ+JCB\nYADynP/S+3GuYD01GYkrXR3xnmTjm6mR5NOSkmzw9eCIqHT0zRC/o734K+HL\nxq55Eyx5qCVxxuml620x2TkORkbwsZmT5qKDdQbKR6ETLMQkbsjtYmH7BuMi\nOppZI+aYWnf77ZUNQkVA7HcJijJGS4QzxYthvGkQtOG1UAsfcOTyvRfOovu2\nOKoS\r\n=mV/z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEgtEgOP67NBAsP91kk3MOdLkSHaKiNvkD+V15UD16C3AiEAy66GoecrdKnqlRWKPOCOV+k10PzF6Rbj42xz7+p768I="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606745667-3f1ead38.0_1606745797618_0.5096818462215029"},"_hasShrinkwrap":false},"2.30.2-next-1606745888-33383319.0":{"name":"@xdn/core","version":"2.30.2-next-1606745888-33383319.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606745888-33383319.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6/ddCPOOfwtl7D4Fbo3HGMreFOSnvgDw2FTQuyxl+V4iO8+N8euGJEiHTAVYerwOBY855rhGd9sUOxaPm+oHwg==","shasum":"7a0de868a02bc1b31100e385b988f311034c531a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606745888-33383319.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxP+dCRA9TVsSAnZWagAA148P/1dtkWPp6vQhf8gRFAAW\n9jh2h7l4uQo1TXGGxzlGAGJMySQUqvVUzcq7kGSFrQVMBPBPKuJr/zWjgH0x\n3x4y6WWR0cJ0bwZCMoVVIHIuQ1ENEe0PtrP0ee9Z/wh0ACY1e/+fES9+912m\nBcBkQkFF1+NIdEauCSEJmLLO0Mb3uaajEftnSkn05/msPA71NTG++S+tWoed\nYPh4gtasnmavX9I2q6z1q6KhzwpnvlyEXBVR56XxyHbxMevl3lqzBpr9Y3bg\nB7qIYZSjoBOhBJhfoHweAACIcBdVxJg5Pym6wYE6NexfWYNRaYDrShFz4LVs\n8tyadyMmYQJz5JD6L3p7MzBqfiQJBHuYy512aYwlZTysKD5Cv5400K/stj64\nhu2zVPcCPTajaETf6OKn77rZXE/XEhrzU3xhqTrA6KQqoFfq4e9WbbZZRQA1\nWn6uDjZl56XNgkJLaGzm4bs+cO9pYQM2f+pHu5NJe0mUbSa4WcW0r9Ngh6w+\nOC3S33Xge012PGoGI+TpA1SKQ2/w5DlkOKtim8Vvc7884Rvi7gslghbJ+h8x\nyxUNCNOlnqu+JUT+KcZGeVf6TQ/iOBwG883QTMI5hfJaQ25n80Nf+Fljh1rG\nDdayR0hmbUgeukYP/KPI1k9/HiX05bATlRn6O7Lwbhl5/nWR/QEBAUYbSOle\nj0kk\r\n=BNvt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCHFOVUxtx34w45xxv4ASnXMD2b9GvySMBsneSn8mbMAIhANMiiiycS8ZqcLTXKbh9DEPuyTZ07zgIE5mr75r9ISuu"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606745888-33383319.0_1606746012634_0.904960652208167"},"_hasShrinkwrap":false},"2.30.2-next-1606746127-e4bf5cf1.0":{"name":"@xdn/core","version":"2.30.2-next-1606746127-e4bf5cf1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606746127-e4bf5cf1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-04iDlcjOknzJf+KwhfhBN8f8ko2OKKQjRviTyGIuhJeS+aUWT7zjQAYz3i02qWzgzjaJ9sq/Y286JbtEj7MWYw==","shasum":"201e0931ec1f458bcc585d5f16d28a05ea6b5a0e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606746127-e4bf5cf1.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxQClCRA9TVsSAnZWagAAyYUQAIeYOu4+fIt1nAFkKQCV\nEVzGPSOO58P+tqZeXzt2fE0GCd6jN1qxFf0VsDrm5MoOpYobTDzy0jqzbH1a\nNFzn+wJnU2MMa5gC3Q89j2tdYTXBfW507IKZgdzvkIsKzdgjviplzKrLh8Ew\nz94mviVgNJPv2IYeKY7s7AKXKchXslLDHqME/FfVH+5Y2NINHqd++ZkBHz8O\nn8otiWS7Z7AvVHZJj/RnOfCONkdwS/Tu6SBA/Yc485hXAzUbuMjrymAid3cv\nIu+69tcICc1nA0xSAukQPPKTYZtknoL0XDeQwDLpHUGlpsUHOXh9A0zrxpE6\njKiQCOGcI7QcaITsw0xbXTkbrrIgVVm6gW5IqY6T7AjmeVCUCKfglKlrMa+f\nG35fHC6d1fMg4Iopo58Crb9TcsYCXYJ7zAcSDgtmqW/u0nPSHAcXnPB6YqrU\nDX9uZQp9iWzgWqWiMHpRRR6WiDkDL/C/qVWisHprUkgYJL0gwfKNlM9pJ792\n0bPSK7Hts+6ZK+Vzv04l7i4glwZpv/aZwt0fipsdGxOoH4Dwto/9pg2n1q3/\nkunjQgv2/RL5RyDRp32+c9Lc2xNDWRZ1tBZaQcavxONybUm7IEufrjUMSFku\np2MHiEo/2HJeKM0la+/dh9nhtzdKVFIlzgoihIm33mCvdfF3WABAsbtRuxzz\nj8vz\r\n=7/7u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHC2xdY/BrxissQoeDkE/vJJTIlE86NQeQC/ncTuW0+cAiEAoV4Vc8vWt81pHntODGyhKJr5/ae6uNiaS/mqvn2IhbI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606746127-e4bf5cf1.0_1606746277341_0.597457369415374"},"_hasShrinkwrap":false},"2.30.2-next-1606751273-1ecf83e3.0":{"name":"@xdn/core","version":"2.30.2-next-1606751273-1ecf83e3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606751273-1ecf83e3.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XmL0bTsbnYsPMWsu1rLwc3CYLR2en+y+HpUUyxiLPIKxtlDNtJCH7yDfpRsjsgSmWszhFbcaIsBqMKsxju0NQQ==","shasum":"258ef674e07c15a9762ffb4f7166201536bfcb91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606751273-1ecf83e3.0.tgz","fileCount":173,"unpackedSize":632312,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxRSbCRA9TVsSAnZWagAAs6QP/jdsJOH8Q6BXpL9YILcr\n6uwjYVpKxpMMOZCpSOsVUOZLrcRRI0hdRRb3O4tkY6RX2MldYuCE65CElh2z\nm2IE0RUitLO+tNp1o5xvSAF3/t9qvur7HwOF49fPAJlkWGO4M6ZGJeSDptV2\nfUl8wXGalCWEvYa8x/qQaKB7aJnf2T1iU8t+lu7w9E1eFUHrOnGf4/BAwUVV\nz1KCrri94a3lil4/eMObc0BG/OTlnWJIhVltciSG5F19a3tXosnqwNf7F3gS\nddpYiDtgIGGqO4mJRH4t+8mOoydJUw1dF4zDQ19kCxYeHGs4uVsPfSqR3v2W\nho8jCfpFDX0OOyjPd93+2vnVLuuXeaeJbnx9FtJfD6mKnyg1e3tRAOU0wywY\nL8oAu3USFGIsdxP5uz7FJoHVegYX1c1nwciCLOYDNQ5Ml7nCYkaNJr/fQi5r\nYX/ubQXuH32QL0HSRGs8j3PEaDRyg5yHwSwu720SkC67ZBrnf2Vp8wqP7/YY\nkH7UWvtfD4TKYf3IykJU00MkpgcsL8S1zdBZewDRqtsE+exukndxQq3hp7UZ\nW7kPzgIv9la2Cd9Ju/4tmJzbeF8beM0WXNDKBvoWUflqtUaXAUr0gTu7YG4P\nLF8IsFn9WP+J7858Z6FctflLsdfKEVMGT+/6M971/hzEACEsN78W+zRJmnDC\ntS43\r\n=r+mK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwfXW7dMwikDyvcV525gFXB6aItG/mpksv2PxEgyLIzwIgJe8gE3lbmxb8jBfEvnUeOzSwC5rEMLsT+626QN4FNIc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606751273-1ecf83e3.0_1606751386533_0.5458904259122646"},"_hasShrinkwrap":false},"2.30.2-next-1606753936-e4bf5cf1.0":{"name":"@xdn/core","version":"2.30.2-next-1606753936-e4bf5cf1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606753936-e4bf5cf1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Z6cTa6OlW6v5kZjnJesdR/TzxNIkYBY33pUnp2bhJrgPeoFnNHAwyYf1/gbglXsC0cmlNgw69RHYaPCJsNwb/A==","shasum":"6780557c3ef7d500863e829d1d27e841e3504c46","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606753936-e4bf5cf1.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxR8YCRA9TVsSAnZWagAA0mgP/2+M2ZyJlgIijwEZpGtE\nYstbpkFfyU5vi4hvPfRUU0jZZwm9LcHH1yuDEFfHeeeojC+t3smwc96LydR0\nCNLn+AdEmZnQhfbJ/GD/191fGJOSPE7UpT9q/f95nz5RVqSBODoWoqT3BkWu\nTLRwG3j+K7h3CWvwr52WP7zgjKt4xARR0aztdiyTK49gjQu9Heneb8W8gDy1\nQWkLo33uaV1eqc7KZLAgHvEK1y4cAe7nG0D4Vvxjrsmve9Qoskvn0gzgUxej\n6DV/tIZVYPPZ5otUEkxsNPtWjcIfCAngsOlu47p9eLOq+Irn75wk89fXQnW6\nCSeb0sOcReJNvVOaeiKKUSXnvXE5ybVxSZo4F3/497cSTM3CoDdOl9K5ud28\n1d0Y6GkhUXCuSutqe6sDpOWFqsQvztMJXXIHRo8w5Ll+e9NTQ7elCb1uPRhQ\nWY86YmWpdpUrqhH9E8ZAj2vXWi+kGzq85J1EtVQvFjCBj8FaZUAo3VGL1dR0\n9/4vVWPANNAAn4PLDQOEMP1rQYudJFWe+rcQfUVtI2ZVodMZyP5JI16Ul78/\nKEOgNmKoOtUxMIILTPwZnN8dbsMYm+1ucmly8PkU9FozRX3+dKCqssjiQD96\nzeVhlJn9oLhRQfqm+lgqWmoKYh8loAr9RL9wDh1aNJYmvEaaeL7XSVKnikjH\nUbpd\r\n=uTHT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHKpcvUKhxNuHqHj6o6dmPeSUkkEmETtLXgmuVxDKrnMAiAmG3JkEI7SMaaq+qcXvYwQTHZxN4zH5OPKpi4rJNWUOA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606753936-e4bf5cf1.0_1606754071411_0.35771157665796016"},"_hasShrinkwrap":false},"2.30.2-next-1606765206-e4bf5cf1.0":{"name":"@xdn/core","version":"2.30.2-next-1606765206-e4bf5cf1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606765206-e4bf5cf1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-G2wNAN6yxA7bSoJlRLo1fHyttpk2pa9d6f58VCwO1cCH8SQj1i7V/VAXyI5hqNF4Gfrl+RZjVdTvmyAnBU6SYw==","shasum":"4242e5484457e20cfda7c9a7aa415220b9a804a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606765206-e4bf5cf1.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxUsZCRA9TVsSAnZWagAAEREP/i2q4qS4bWe16N1GvbWf\nZdBtQaqtUT4kn0CpAvHsX5po2hjfPBOWJHoNXMb4dpaWcJK0PGXo3bK9muux\ncVP78ocx2fJsd4aSLQ1Et2pLIk2YbWQG5bRh6a3fuDGIM1crFX++iIRzBneu\nOQqerDSo9fx5vfjM/tApwUGimtqkE57OgyFJTpgXDnKDwH8SpokLgSH8oTLB\nvxf4CevQMlvSAITfxlQrKPbbhN737uKWvtIK6HhkHuH2n0FDLrc+IO776BmU\nIDONsVngr1nKNa/Tdw0OcF8FjvAOPwenyquWtd8oL5VEfSz73SKfVjVVLr7o\nwC06ieNSxb+aAhQzRaxuThjayboVI9cDs0NmtXBL+wcJfbvdbAXwCZ8KRjZ4\nB8Cqb6MiQpJWmgVQqEBVxFk1xXXtFsta6gq3nV36i9+NMdk0BdfYUkDqDYvS\nb2PSnN/9T8gaL66HOY77pkRJGZRPv1Y4yKVOOrl/mNts1VjmHI2qTB93Ukq9\nzDsytvBEWoSGyeNvHs0YKrIZDyC7iVmbfL7dZD5DJwibmWAS/jQdaQGeKIbF\nv7hZcOKtvhJeQ4PuRHejpD2A+goVKNg7AuTlePSUuFiar1zLnlqyTTbbvTg1\nreH1CVU1bumxvGK2PnCyRLDKRvzU0KD9scRFzsBsT2M5Mb8umnmwab4nhw6y\n+1ks\r\n=JbYI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZ4idQhAbt1bODhqhLMa2advPIJ8DdVyniLjRTpbHkIAiEAkQoOxC/JJ/tF+zcXUqr1+v7Brt27nzdC2H9l6Do/eiE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606765206-e4bf5cf1.0_1606765336867_0.8350506478676547"},"_hasShrinkwrap":false},"2.30.2-next-1606766473-74222e95.0":{"name":"@xdn/core","version":"2.30.2-next-1606766473-74222e95.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606766473-74222e95.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-oG+TdHCIEtt63GdT4VlS5mb4zWIAidm+JayGzcQ2GxJQSO5LRkQY9/dm1LkZcZkn8oNMGqgQdcUb3XIvLgU5wA==","shasum":"5e6f085d88d2535f6588a81c9d6181d9b40d03ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606766473-74222e95.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxVAACRA9TVsSAnZWagAA2k4P/RfF2zlyDDinnLPPfl9v\nueEqo18aoXDhB+V7RqwIDrNO9heja5t8M5TFry9hfo/SUQ2eCQvX2aGeFpud\nVQWJKw5fFE9nzAYPhZSt6XINKi+OxbFEOU5fy0iqdLjMH5auerEQUq4M09Tc\nV6WvjH6sSNx99ETM+Y8IfRwbeX4oYUs7BO9Y3lKMDQQ/7iZUqzRnOaDj1WV3\n8eejTJC1LwOovzNC+5CceWaY5iEuNxA8OohKKtZ2Tyro7jo69a7+Xoa3o8nq\nrzRZIG3jXYvlwSCjlNpnAZ/y/jheoFymVtdUOcILTZULXDyvTCqzXy27nDQw\nDPY+clME4HgVJhiyszrT7kTGQWOeZcfgpWJaZ+LBkZ/vGw5rqxiFrA8dsW/0\n0iVytfxg7o2/J86ANXx53eIXqE8wMUWtcVJASxGKaiwhoEfoFMMvoBf5ueWh\n3xsroqeNC0P2fBBmNxAkfA/HPi+lRInH/yXJ1PH1GihahyqQV1IzR7cdH5TE\n5BsDuWkkO8sTJ4aywzFCKU9lGox1rLY0zxMqy0Jn6n7srOBQ3vRk8OJY447y\n8YGm9lXy8QLUENSc41mT1Ybuein0IKWBBIGbZI4eQevyx2EwQZG2n7RVdXMz\nc21RfOgX98L3uMYr1Y6q6z8v7AFiR1aO/D3ln/6BnVNZ+x6Is410y8639EFj\nfg9V\r\n=6LUb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICR988yR/E3X9NsoJArTJfFbwlhDoVZf5fxuulnhA+DTAiASVkFyMLk/IXCdNCTlHHXdU5MGTanojEJ8J0usKT5n3w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606766473-74222e95.0_1606766591627_0.15634539555991944"},"_hasShrinkwrap":false},"2.30.2-next-1606774038-43304624.0":{"name":"@xdn/core","version":"2.30.2-next-1606774038-43304624.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606774038-43304624.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Yim7fiOx+U3g6s3I4WA5/stBRCQ/XM1YHsTvkUHX03oJ/CyYgCP4qmSBHwJvawj7g2kRCu9eik7upa7DIXu+qw==","shasum":"33d3608aee8accd46ad5e1fb43ac73a9a93e2d7a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606774038-43304624.0.tgz","fileCount":169,"unpackedSize":644685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxW2CCRA9TVsSAnZWagAARgIP/2C+HD5pYVHI8rUzlJ2m\n8BrSDh/roODRgcfCHiJ7BeqwFDGWcpQO4zHhHKqebpqoQ/25NDMoixB3dVtW\nqqFulXoYD+m3np8EHm/1nUHaBVfOmwylSHAZ/5He5nyWhvs2W6Ef4jH309zn\nfaKk9AhxAhOcigISsC6bbLmA3UEnCy0LlO69eDGN5jAf/LDWPyiwOwraRorK\nN0meZjCh136wpSWnBB0Vd1t8cbJnOB8kACrbi9khmtVLti36f0aGqQu87o6q\nzpxT9PusByIu/WrI9AtVJYdjh82Rf09Swp+eGnt6WI57t8XqQb77oZ6OoAjA\n0urKZ8DCvG4ap6xdxRg492ua7te3hYpb19sN+xZWqiJ3OPg0tC5KSNyjBEHh\nCK7cRijET5PTTFWIRMlk22mDVv9XVncckW1GGnmvTlW9Wl7ttVvAt4rf1Kh9\nKP5CJeg1zEOKI+K7PK68fU/9F9ZvjdAQ1mXKNbyLnD+kam0l7OhMCa+sH3MY\nqDXS+EjwtDGiMfJHtDerSFucnRvFKOlvfT7hw411F0qqVmEAbDhgW8C5WGuy\nsFki1uWFPhvKA7p7GRvwIlBJG2U/FzHHWbmA+JqdL7PNm59sx4yyNU75Wj3G\naTC/UoRotKv9t3IyF7EHeEQEtfYG7Ha9nKdsexCyk8ASuVhqwFwI7/+QxlmM\n6rFC\r\n=B+iO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID/zmZ3IDIK0hErVuZUFzFqaDeT18sp+LEhaHCIYJ0DwAiBIBK9lm83r5ZQaIJdZMrp9IeFPXlTpBdNwG+nAqRSu+g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606774038-43304624.0_1606774145751_0.684719052730405"},"_hasShrinkwrap":false},"2.30.2-next-1606784626-8786b7ed.0":{"name":"@xdn/core","version":"2.30.2-next-1606784626-8786b7ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606784626-8786b7ed.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0jbCerPsVq70U9YmVaFfdCX/jcVJ7j0aXk4Lb+ABWIGtUj3FcQTC9v4kw7RVRajq5cm1ocY+u2t/NvzZyZHVpw==","shasum":"fbb5d444adabdce8414bfe29665f3a23e454c4fc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606784626-8786b7ed.0.tgz","fileCount":169,"unpackedSize":638534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxZbnCRA9TVsSAnZWagAA7WIP/i3Px5scSuN/TG2+knT7\ngAojy8mwWXOP3gaRLML+dWxVdzkqG5MisOPeNK62mS5qV4dhdS9Z/Dv5dLKb\npascLK1fkZjWRmKuAJztXcV4XVtE5EBAr8VoxCxiKrVYibiqoV/74+j+5mOe\nHSPd8u4gX5q+4cSiSAsLg8s3Xz4Oa3XtJNlRLPgYZp2Xr+B/9NyTbpeC2kFN\npKiBbTYMN8Rvv8cYdFrdwfxujt4ABvuFAkh94GupfcUqhuMuauz2FRaplrYT\njs2edYRlbxJz/fBsF6n86n52zoe2ERs52FrKez+qH6C/5TM7A4vnZDJYR/8h\nXy0Kk8aggtRKbuW5wkClnfr/GezZMAdHLYKh0BbBvDo5OtIy2o1EG9SOL2CW\n1VW6pdLCqmT0vkp6tEI9ak7lOXI3/ofMjJu6y4frNJEkChTjPbV8QeklV0ZO\nLU/IlVxvnw2lJCJaINYZGO8u+E1cIJhOyAOgQ4PNJf8wvgdIb1q8bdGCr1NQ\nvkFkjnTayea7KyuwPWWqe+EXg1zOSKkzNlylF37Yyamt8HHolRGi2ECjCdY8\nJsAVLrSt/kP94TZR4GdkWigKfAnvqUh4/wqySUGW/TRj4OVu+gYUZEgCLdSb\ngay1HN6DjGunBUT+Jo1yre3od4MSR5ji/20TuO/tsnJ5XzrhKTEL9hSPWfa1\nmdho\r\n=QcCo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmRYzBpZGDxxx4ytukcYRUJK+FmH5nIc/RidXg4X7IMgIhAMWnpfr+n/G8fQvU26NuRzv8mExmhsr+csaU7KJKhdiN"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606784626-8786b7ed.0_1606784742880_0.15500321449089727"},"_hasShrinkwrap":false},"2.30.2-next-1606785666-0e59d9b1.0":{"name":"@xdn/core","version":"2.30.2-next-1606785666-0e59d9b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606785666-0e59d9b1.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tpTVRq6R3nyY/q0/OnOaFCLOKHGm6KCfazuC1cJ4Cf7JvqcpHKJRge9s8mFOJyIxLzzDEWaBd3URqOSlNaTUng==","shasum":"f8a06cf81aa6fa8f1ab3be27705c150b3e26d34d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606785666-0e59d9b1.0.tgz","fileCount":169,"unpackedSize":638534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxZsACRA9TVsSAnZWagAAMMcP+gIBSMYQMhd9T8jdi5ZB\nu3wruc1q+zXaqu8SIIVEocZj4SHKjBk6ToPSZshD5LjIJKDTb9pzksyi2rbZ\nv+VY4yS1ISTkRS7uARuAueJ6uj7dtWqiiql/10Ux/jGK8T9NELWhBtTY3K4U\n344NYmMaVeCtPvdoHwOr9jaBFGG34qyFtVFLdFXMQixiKUIEVsldvtShmdmC\nGoBClcLVbl/QQlI8cPLkg43Ue602wq85kF53U/HNZdFryvXDHVAYz0JmnOh6\nE0HdkBqUhqbd/+hz01nVz0sPuAcn+GSiGjYNJSAP5c6odraxR7wM8kw8pGLx\nthCb/xrDQcmhgtDQCYtPXsUTj6C0vp3suq+ZuMeALatHgBXzZuOKV7GbVJVg\nUKl13tIzEM0UVFGHHQ+bfKO+svWtD2FYZVzcIRWKHoWCy+J75kCGEMJyeK+C\nYURLJVhJyHOpfscqgxOn52V+Ir9X1nnMnaBnDIE3E46CA7DDy3+CiUJ/wnrp\no+QEYB7qb6lJkxxAco/+cwWYozeKqJgQG83k2r3mgOVS2XbVH2mCvKINFQFj\n7t6mTp09I+u59E5l0umxnT9ANs4HdcsXI5e7Ibs1EaY+AvdWfc9cEGxpS/Ug\nD6YKpVTFLWhH/UBE5lKHR1O5w/PPjsdzi6dmiAYV/CQQ84Z31rf+VsyAiX2/\nI+gi\r\n=eJHC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0Hl0inEpVADd0Die0EoPTCydpR+tA/EqzwO9ySzBCXAIgMhZUMl086BpoitTaIg5um13vl9Anb2MBE6gs1pWnUQw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606785666-0e59d9b1.0_1606785791296_0.08961860673379185"},"_hasShrinkwrap":false},"2.30.2-next-1606808801-21a5b275.0":{"name":"@xdn/core","version":"2.30.2-next-1606808801-21a5b275.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606808801-21a5b275.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ug55VQaAK4Arw5Pp8T4a4GqsALZhVL5UyCiwdq+VHWVsOM11UoPn8yyfc0IYk5hXTmXK4YHCWc+gifUUrOw6hw==","shasum":"8dc56f7b9ba3581042cbb01be0455c6fee951cb8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606808801-21a5b275.0.tgz","fileCount":169,"unpackedSize":638534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxfVtCRA9TVsSAnZWagAAkWIP/R7uMNVnmm2RTlf0ohzb\n4iXPkx4QdnZwaZDBjUw/yr3cU6fIINsr3zGZoPqnHL5YeN1V7/ZVp7hdwLEZ\nT945eqkuXRmyZMUK1aEjeEKXxVTM0bkigWDzYHp1iMFaKf+WMm7xBGbh5dEa\n8SgPHsJ3NrZSjIe7LOyMrecrdI9nVMIXDL57Px8XO8I0klmj5GIpwYxnzuaa\n1CBvF3A0pLnT3b6FxCFu7otaT28mwJD2yYr76fpoPTR4myxhtMBojbwGQLhN\n71Hot4Y9Tb8nSWGMdqMPaF2gAG9H6sGud49kFmSdSUYFNgvSreJpHLex5K6+\nfUv/EV/cPLSYM/saaNccCP/9fapwx0Rx4CktUkj4tPuCWyMKpSAC3pyb5S+i\nPnhOWROEKVtqou3RvzSW3XjZH6GM9vtD/xX8GRfU38mXoMin3B4Z2SvGss+9\nQA/6gFumnlY5fL+pxixxhNZiuie/Is1aeeRK6ZqCqzf4gCoLmNmBqRKDdx/C\n36vav1Deig7vR1W+Z1is9FtAZxK/kwY75NJxICnxyrtPqOgRNArPjqQB44BY\nQHZQKNGvHRcxJyembxxRJB/tTKG7F9KfAJP2wnC3bXDn6cRM4OsEQU3z4Otj\ny4gYJ4v4/PKm3C8cBFr9RNOi5tqbmfXjl7+8Va/2nQtJVDGd04NYE0V1+J8r\nPreR\r\n=stGH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6euxTzhllA2e5nXF6nTcYq/3U5mGhAB8BanvtaXHlEQIgN7eRysBdH7RUPp+pzl+WMQPv2ydKReofMFsYjpukG1M="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606808801-21a5b275.0_1606808940640_0.8352069445305221"},"_hasShrinkwrap":false},"2.30.2-next-1606809318-2b001a73.0":{"name":"@xdn/core","version":"2.30.2-next-1606809318-2b001a73.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606809318-2b001a73.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Vj6lPep98qR4YBE/ViNWwkB8ERy5QcMk8qXr3kPuK4bTa67uGvLVFHOYH6u0Ubup6A9SEdCdm9UpQpLQtcDTTA==","shasum":"b517c6ef4bb3205316fe500e8d633f0cbea945ea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606809318-2b001a73.0.tgz","fileCount":169,"unpackedSize":638534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxfddCRA9TVsSAnZWagAACSMP/1e912vmE1uVqmjBb3Zn\nhnQQ1eEUeNvdOqo5Z/hTfwUwml329a3+fz37wGo0SN9q6XRmXvFm11kd7KVm\nRqwVqd/pbNNfsza2Szu1ncFStEZWpfvHfXvkakvUnLJIG/OBn0oNDhmkYOXU\n2Pp51AshG2f8suW7D1FjXLqOB6hHkReRHOKXTqGBF2NoEQbxT7mlUKnoRUNz\nIHkjaLNDCQpK5Ie2Wpv6RmHzT/IpN+Gm3DxF9mH/sQN2Wuw1VnkvEdwsg0Qi\nghcRaW+X4m2YtGyNP8eABu+Oj+yUjg9VNNgzgQe/SgsMvDfW8nhIHHGb1jih\nU2CpCnrdyL7Hq+Sz3TaMGlSuMD+X7XYYFSiHvj0S8YzNxcr4gCs3q0iJuR3S\nQYyuwr8qIWbfeJz/wBRphmnEdKiy9Bfk69ntv6P1jyP+FA6QohJK0fu7Uozf\nySJ5CngC5wrRkhaly6LX2etnma8APvPlAyNp0NuJfU0uTrReXPQFsDfJ4Jsf\nXpd7Pa37Dsb85OOp4uURzkMQ4HC0kVCxbSDNidoaZuZzI1MvPvnuUKqbAkMN\nZaJcMLaMI1pM9TphEgA9ca+tNIRAbvkRVeGai91MMEO65FhryxH3EBomUhkg\nVEpd8D2M6CQDY2viiLcXpOz2Cuiyg5sLiTjt1rCVzPC+34MJuls3ndewNiAm\nVGwS\r\n=ZQWQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCx/2L28PFaWzy0AI4iitQFpVOJqSgdVPTepkQO5Vbt6AIhAN7/nbI/ZO+awjPZG81vdTeAuzKKOSxhYsGutjHfI2J5"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606809318-2b001a73.0_1606809437435_0.39702819581537874"},"_hasShrinkwrap":false},"2.30.2-next-1606829607-e018547a.0":{"name":"@xdn/core","version":"2.30.2-next-1606829607-e018547a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606829607-e018547a.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rOLeqgxEuK/ayJY1wkmP3UE4j3nmOfVruKQB4riDgQHl32SJItps7S7XQ1MI1Cb22MmDfAAfQsknF7a9wE9Irw==","shasum":"e89d2ff7d5ef75118ece8969af6725c6ae1ebe2b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606829607-e018547a.0.tgz","fileCount":169,"unpackedSize":651092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxkahCRA9TVsSAnZWagAAA9sP+wftJ+SYEvQPULToy+n7\nvjZmG1AIYKvF38KPQ8KgbJDAX0Nvlw4JTTx/VjZpn7XBWT6QlNLLMHz6vV4j\nMTB1Q9v8Rb6WyOblPAa0CI+GwgRHabi6VaITk+7JNNyWW2Lm1+rY1HjQ7U+f\nwBR7py5sMJwhcS4ittj2ZlTJOlvN6VisKGGPgiQ+1rxqM2LNv+n77GLlBU8M\nQfc744lLnbggwQVbq9PdDoejR5K/fbtTUkeVc/2XdElwGhFpP/Jv74OVIfn4\njPTBDI8OZ/h+2s1UNVEzq0TQEAOSiRkjC10s0f1pYRBEk9E1M2DDxP4HjFKE\n5o3NTAhuRKqkF2oQ+dhPXXT0SkFaEjg25L51Y8ghiBTCJhAXGWw48p/Jly5K\nUFNF+A8k+VvwYy1pBl6j9Ox2LX2SmCxhGZwOe6iyeNceSeYbl/DM5pBte0qV\nLmPiXH8FGbe+QhPznQcqiwLv+pjA6hlAShbFaD+l8kgsD2MBn+ALktdgVyu9\n+Cox0LusnlWxnBeN72ribHtdakTfkmKx8IhZaCJD4xo2CxlOiWm13M7+Nrjt\nUz01lsqQg8fQPCrUOg9AUgk5+Z39PZYOSzcwnNvFOOOZdTAKzeBo0YacmrOZ\n9x94aGN5UxROAyWMESrPfOVJ1rBGqtnGvGVT412Q0IfdWVYoEUGdntEBl2QT\ncKnS\r\n=cKvt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCf/3RYQh3E1J7o66Sut+HpZpczfnrgenQkpf6W9JNW3wIgQvBJcxN5ZLnU6J9+boO3AFGaL+8l04h8QfKqhVexXzY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606829607-e018547a.0_1606829728187_0.5900117190164575"},"_hasShrinkwrap":false},"2.30.2-next-1606856307-6fdb1559.0":{"name":"@xdn/core","version":"2.30.2-next-1606856307-6fdb1559.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606856307-6fdb1559.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1DewGzlaAIyUZsF7KK0naYaAH+FU5plTjmAmiFxsb0KvIpNVTFaFVz2S7YmwrvG4qOff7KawLM13gDPes7l/LQ==","shasum":"b1ddf2448d6f9bff765d3c563bb1771bc9382c63","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606856307-6fdb1559.0.tgz","fileCount":169,"unpackedSize":651066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxq7YCRA9TVsSAnZWagAAgNoQAJ0XZCjSFv62XnXsXHAS\nPOWV6v+yPQKxiNJwnrc/CWutTUg474oPY2HfouDHceTVjX9FxsVe7lwblVT3\ngpjYoafsgXYnxOYXoRW4ER8H0eiLuAaMeiYyk2GCCeEglYIZZtTBOaL5lbEO\nww2jMB1b14JMZKhwObkTA2yLNEOzDwlQjiKlsOA3GA4A6oTGudRUoNWSRiSm\n1DHkf7LyngVd4CdXWWpmr35LoLX24i+nD333bztG3ugtlSDyGvKX+hwaC7t/\n72PWRat1gnOAlaWLBiscXCnaswYJOzEtO31Bs/R2FaKbkTNB//GS5PbCHk8t\nUSGbwiAzhEDaB4taSQLoeSE6uzsGCBrF/ZSSVumGcguTFOxh9uHI1xLN8eYI\nUdoRSOPBdpquyKgtQqUpItIBPVimSUVpkSomosexCFosd83n70ghrzt4AQGg\nvPzC1LH5mlZQgbS+RfkrLOtf7lFmEXNzRDmCwiKkYaIjIGe8SrXO5HigNKfD\nYq8nhGxyNpLUId9tYGfeq2ngNRFXo749GotL6rz0rIUA4TXeezaqATUIUsMk\nCaPaidgTpr7Lr9WOSBNAySDRkrcXwvDC24Frn8+GwWX1qxmWTKcAMUXnilod\nMaHCjRwmrrQevboo3D2X3Cd2+xAoM0c/FxxPvh0QDy6Ji65kBeSIkU2vswmh\nyKyl\r\n=3NPx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjB4NL0vDAsde/u2FFyU0ZA1M/UDBNzR1c7DgE1yJMDAIhANKsotZtUx4MKnR3j7OmCL81ahtax4LCbKD0kZYJ1wJc"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606856307-6fdb1559.0_1606856407857_0.7281775487279347"},"_hasShrinkwrap":false},"2.30.2-next-1606856317-6fdb1559.0":{"name":"@xdn/core","version":"2.30.2-next-1606856317-6fdb1559.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606856317-6fdb1559.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nHFFxspv8xPngP7gKKAMpmOSvjXKjX+cgcMD9x20yMl39okpswx8pgkNtuqICcS7N2EoLgkSxl3dUxiB7Vm3Qw==","shasum":"807b3ca978b962ca5d197b82db2ca478d1725831","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606856317-6fdb1559.0.tgz","fileCount":169,"unpackedSize":651066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxq73CRA9TVsSAnZWagAAm9wQAJsk76VfVHemU8VT9P90\n4G2M+IlDS/yHGSsgfVfWQzyNa5+Jn1rxXxHly9OTXtZ80teSMEYsNymJphKB\nALjWfNPNNWE6YDA7uH6zWsmpn0TRHSFgjhZPGZMVsQU288OgRrtlxkcHD+Fq\nrrnxD3jyfPC2VJKDHbG/97G3bytV0RXlc0dD9/U08PPuVwh9D0mljeDeh18J\n7XRd+qGyQgWDfgwiZbsQtxmimdrLd2l9EP149Y0CUo2wlCaJ++U8MgN3u3h3\nCupHetgMzFEcdEfPhFU9IX4o3Qiv9hpjRGP1xd8H9qYFlNCmt8k9T4Wads0T\nw7qHbnaz9nV1OMA+bQTggnu9xxgJWQD4odWlkpMQ3btB8lhpNbM04mjEiaJ/\noxNqQ1B5cHdCkyMWr6YZAcAq6/M2tDpE/8U5Ex0sXPrL2QB9hvjGtN8c/eqP\nC5vpLTPVpqBZyPALi5yRVv+l3M3mu2Z1WsFaYmsjZvhKWDN8iMtLKEiJhODm\n3riVjayCjFWgIETOD6q2nrR7Tp8hcXRsciG+vk5MUDcbUYwiWYhoeP+5WQlg\nQkvtKdklqUTH27aFNq6zxMJtOlp9LlJydPF38bWEHfkDquYJv9mSJACIoguv\nGW/iZU4nmcoV3tJWPgc8jwqtgTJ09xFgtdCEg9iu7vQ5wIOXPTlzFfdxRp9p\n7hD8\r\n=aBz5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBwq7N+39PsnaxtGnk5qP923COEfg30V950PKZHyAKE1AiEAz0jgdLMg4TnmZc1w8XfL7M+nhu1n7J5Jtk+JhfLCCOs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606856317-6fdb1559.0_1606856438980_0.4354982593311427"},"_hasShrinkwrap":false},"2.30.2-next-1606862059-fcc04a63.0":{"name":"@xdn/core","version":"2.30.2-next-1606862059-fcc04a63.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606862059-fcc04a63.0","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NTS+IuXVQMUDp1dI6x1XCTfayGQB1XuvTxikpqjQM4fzkGUSIngS8b/OcQrY1cWJBzJsiN7B7yt62E/FJ1Nyhg==","shasum":"55ee2a20ce27c13647751a0d2c109a66f8d834fd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606862059-fcc04a63.0.tgz","fileCount":169,"unpackedSize":651066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxsVpCRA9TVsSAnZWagAAFYwP/2BoAwwbDtqfOpnmFQDs\nD6FwX3VIl2b9WRWCDaJ1KNgxCnJfDmCuNRNWex09S7Qhp2aMXRDT5gGcxG/n\nZK8m+wrpYjrlYSiXPR+OR/NlCFtlpbWYC9SWtnHTzsh+yj+lkOM0FpfcMeWF\n+NODN/eBsxAFQGtWdzrKVG3rzNaqqDZFHJKgW6DpkepRDuJthVv8yUSPNaEi\nVriXDpKw3W39JBx4fKbR8PvmCU3NUEGPY9mdUvDU56uzd0fKqe4VaX/9qBt8\nQwgxpHWbfcAIu77FbGorX40VXzKViGmWhPwZWk4Z8zyxmDzf74euj15TIWJl\nzUVlaY/H003fYaDuZW5XlEsr58hCU2rqqgXxde5dsnP5do8yVJuCV5W2ELw/\nWg2oAnYWmFQEdBDKb18G+rTY/BgSq4Dv/eHup3xfpeTgjK3GOC0QvzyCvADR\n8mVQvcFKYt/N1NwpLGWa0SGLU2cuU+oqQTpAHPQp9zpP4zt4Zt9WyWkS1fTq\nUFbgXefei0QkIbeOGJtNnIYsM9ol/qcCx3jKwB6/PBPb23RDARvMHF7Lgequ\ne7+7oIJx7j5R1N2wwPpubSiMWDAHhWLcQbSbjBsEEXLgeNgV7JYqXW03lXuw\nkiu5Vq6HnaZjgOrApuRjHX8uW8XLAxW2PD6JAdajbtJp14gBYqR4GcykkAxX\nzTHi\r\n=LpdO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAjD37UMOH9WccfmXVMAl+zV7qwRKUj5nTH+S0EJY8rAIhAKGb7yl0RDpvVc7ukc25u23gEcP2avVjsZIEUsvRs8Hw"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606862059-fcc04a63.0_1606862184460_0.9532744601733054"},"_hasShrinkwrap":false},"2.30.2-next-1606904248-57018b3a.0":{"name":"@xdn/core","version":"2.30.2-next-1606904248-57018b3a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606904248-57018b3a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lYVevee4uJwc2LoCV2eonEP5g92tW1i5Pf44fh5WDC2lKGnhqEQgdUEpRgb2am6uRoL+wwUjY5Bg0+LXqILR7A==","shasum":"ebe649f9965d660178a3084c4de8101903de849d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606904248-57018b3a.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx2oyCRA9TVsSAnZWagAARuAP/ReKsnYUx9+eKOMGcf0u\n5K3wLMhRcPqpPei/sFNsRhorjQ2zCI639NuqlF366lkWMiOaob4kuawKHIlk\n0zSDfAUiu4x0Tn7+JiIeKyBgjn96aNDbScpSHQB4g5kH+pW8ejPj/U7asfqS\n3RBJf/b97bRPdNgEsOxFEbIbWfJKl7Gdldi7PfHCJ4yTBXm3SQuoORCPFAHr\nGTlLA3Su0oEkJ+3abuKJ5NDADl+yKpJ7h+4btIFVf6Zds8KYoCNLSpuMMQGu\nX3XDOX2PlJjg31c/xRo7V/kS6Jk/ARG0NorLnXo0wGN46K28JnNzWF9PVGy5\n97F4Z0gz9vGsmRIMvv/yKVlucPrCaVWzLQToxPDCbhB3KjtfJ5qgmLxpUunC\nlCIn7JBfgPpbI2H0EB6mhHBhTIFhssAyjXeLlvuQAnJkFGrAuJ9lljHpAM14\ncloXGeReEnpGdDj5+5g09HBAY6ksB//Yld7sFFKZx3aSdqP7U51T9ZkqmlYM\n3+W3tuagHIEy4xiH762cfXL+z0khsFqcJYveWeiFbSXp0w8toAcIdiPjKtp1\nqbrXH2tOIxMjZ8UZ3pdVMX1eWsUGnm7fGImsckIsE91cLlTk3Qja0mX33jlB\n9YnFpFaQEYjkLxlSLcn8lyZ6lVNaAvTc8pHKXjAeccnxV0wCuMHFvn4nhCrv\nCzKf\r\n=R3Ym\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEiMadc8do9qpmiQf9xD9W/5ekVPkj27u+YsiQbnHANNAiB9ycG3/n/mM7qW+e2RdkwxbyR+CIxhuaoMAmzQHTOF1Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606904248-57018b3a.0_1606904369608_0.29808702579204005"},"_hasShrinkwrap":false},"2.30.2-next-1606907426-523b0643.0":{"name":"@xdn/core","version":"2.30.2-next-1606907426-523b0643.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606907426-523b0643.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-pR68FQgF43I141L04ZM7H/7//VtxLS6CCFPrYvpPkgn4Px4HL/Pn7SW5woyXbLbTuUOSjT4h4L3OnM8Xt/gF7w==","shasum":"3fbf437cc845f4fc8193379dfe3830f87e8345ab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606907426-523b0643.0.tgz","fileCount":169,"unpackedSize":638534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx3ajCRA9TVsSAnZWagAAwREP/ics1ZPl0z+/hpSiWxd/\n4FHk08fDHysEkI13uYRzxU5+8npMFNuhKjhiJTPKbdYdX3KTfowu3YqRgzaL\nr9bPi9T0qcD28uhacpNbamxG4D8wAB1wkDvcly1adR+BOrJCKiETHvlBpFJl\nL/yAJXXSQxvMpoL6BTMKdamXeJ4n9hCDAJ+fv4DXJBZ6LBtO7mDnPFF/74eg\nUgJevm8HfDIY5p4sZL+/c2tCVsdqA24x/bH5svdACvXLi2VHYS3jxW7bIMpw\nqc91/6bD12Czc/ubUKQ52oNQjXHnzz9yW89WzOgimxAGqvqeSePqz4jyUrh6\nGJ0cNyn/KOUMgauf5+BomDMNOSfofJ347SHMwAId74dar4BJbeXNNGWDZQfd\nrg4tDuIoQcivhBFSYBoR4dQ2Herrh1BEAo9SmU0tXZQslKkXlFkFa5TkEPR7\n2jSkPx1L6p5IprZPGc7jYBYWtsRjFcvIkrPzT4MKis79NeXyrXa3sYbJ+dtM\n9t3TR9FfXaYNiqTtkAmBs3kPKrFddlOdhcfeiquZ6E+98Y5A7KjFrpe9y+Lu\nT22TH/E/6XF66yvNjIU7eXjCz02xgXXCv5cAheXZzxU5BnJtlQIKESPSLYuI\nY/51eg00eOHpNSuWv7Ps34Z2KTnXfxCtj4u8BiIPzsbVjP1h5kQQz4kTGAhL\n7paw\r\n=E0xs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiM7joSnxThfT4hNHi3RJNFj3tgGcaV5PeCRLtp6XSAAIhAIbkrSPaXPESz9ZFCqStK1RpQ/G8EsvACsNXMaGcqO69"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606907426-523b0643.0_1606907554517_0.2881546292208783"},"_hasShrinkwrap":false},"2.30.2-next-1606908709-9f09a702.0":{"name":"@xdn/core","version":"2.30.2-next-1606908709-9f09a702.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606908709-9f09a702.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0Rmbgh7WvbJIowY0xkgZzGLh0QUGbQ1YkjIOXIKZ8gREMIzSRrCqBFc0pMI6vhuUKL56QfuT8I50fVLf8AQhxA==","shasum":"cb735618b971119275e680cb2067ddfcdb3eb8b9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606908709-9f09a702.0.tgz","fileCount":169,"unpackedSize":638534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx3udCRA9TVsSAnZWagAAnNMP/RmAdAhkI5ZKLZHMCU+i\nfce2EoLRn3MakuRKzPuKSGDi5ZEnVBQXfsT8q3UpG7Y8mkvHyd3TnoFnumCe\nwCCiZVdy1IwaSLbMgg4Pwt6sPkFUAQ7u+e9bp4fNLC2+AdW4QslLgK+d4yEk\nRNWlVhcmyFm1Zy8Pg0rvKwFkzyIn8E6b25S/Tw0nD9jkzICLj7ET/Wgv0xnX\n9IOaylo3nT62NfMf9vlMF9FBZgPKr2d918/dPH+gQ2oc69IbeLxaOcrSBOPl\n26KpTV0nYZcAMxZqamG0hJa98eHBkuzEi4yRM4YeMbi/bGiPYw09ZQao2HjZ\n2HIwQW7R6YSbHkWcaliel3Px4w7uN1LkAeM+mY583wIoySmWsPLMZxyxSIRL\nEtWDSctAo3Py3cVl2KHkufVmXo/qvU00Xlupuvdu6i+VZ32F+T4eniWivlFL\nqQESxIq8bZCZ6EAtMXiuPhcldqTJ6dKR4yK7dFGK4w0lAJ2+ne9Z38GTHO73\nVFtd+sZHk149FlWjwzFJTH07N35/GdCVganx8YiyjBPT/VR6le3U08aXrQFC\nHMrrCNpbRxFf6sz8DcqKu4pOMGJWfYnk6Eq4+htfyyUVti7ZU04Y+edr8Jzo\nDrHXzzqb2u9sSqQyeYilt8QTlLTJLQj1WSM2h3K1ATNuiXYlRyqyDxJTtC/+\nXjHv\r\n=QHbz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBLtm1eBtX3F4U7M8Ciy21PQremvCwL9tIO7NXPHiyblAiB6z2U7JDJecQj5I3vKljAZ0q5w1sCxngT0Ovdn9ZIU+Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606908709-9f09a702.0_1606908829174_0.7385882307528608"},"_hasShrinkwrap":false},"2.30.2-next-1606909561-6166d705.0":{"name":"@xdn/core","version":"2.30.2-next-1606909561-6166d705.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606909561-6166d705.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1a38qd88BvtZ8VVmN/Kmotut/GrWGtilE3k2Q+1pfUgFbJ9rv5SA8AC32cXuuMfWQOUv1e4Y9y4tdndU3+GXog==","shasum":"644928de7ac4b33ceff9a740a34bd34516b95aa5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606909561-6166d705.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx374CRA9TVsSAnZWagAAdDEQAImHH/A3J7aTdqLHdm4S\nxTKQ4Bu0va5fCXD2zpN2bWkaSwGDEfrZnw9Zi7oX7TKfuxB8p6JgfLFjFL4+\nBEGvFiKFBbEIH3S1LzFal626yjg2dB7WAIke9hcg4zWvYwRcZPmxHnxGvuG3\nJCgui1Nfjpxq5TGL70xkAMKc8nxb/3FFqmEPy/To5Q6w9EnH6Aj1lFvXUjap\nkkP8p3N1mWx/1AeLTjmoQibBWVRB5h3W06fQaGe6aCgSbPLD026fPguYO+lU\nSSbxbR+nxLntwiLPQf+bIoT+QTI972JuPDf47+XrCKt/FibLT0aZNtbqruvn\nKFZ8VnAyuBMAuL1N2WYvjOzy4M5qvjQpR5GCM8uXHVaeWGHXjgyw5C0GPtPH\n1/OjcN3eSRJZtmcyirtg6rs4rnZCkAOvEqIT6rHhGQ+0sNXo2m3wcBj9PvN4\nb/ulJ3VvlyLvt176bxmRWjhqmFzsRyNxxW1OqMXXLMNF7R+xX5PHoNGshLn/\nPYFnflqHpfOxsHcVmTwBKXKAwGZDjFmyZ6eDXCKzbYGZsy13H8ZOsw6vu35n\nQ4Gkizdyuhvuwgz9B6OFg3IZOzuT4zOndwPU0Yv8FxmL528inYqAhelPB/uK\nSHGg8EDAh2DwNUUAsw6xK0Jbglf8cVfUPSvEIw4cK0XxF6eqxRNI4mVD8Upu\nm/Uw\r\n=xQAS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBQvb1ThQICWSClQMKYSvAnlrgyYqHIe43WV0l7Iw9qSAiEA0ZfkdaKGvslhxmm3vu28w0KlBQMUnlp+Y9eGPL700ts="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606909561-6166d705.0_1606909688123_0.11177757909397301"},"_hasShrinkwrap":false},"2.30.2-next-1606910350-bd473414.0":{"name":"@xdn/core","version":"2.30.2-next-1606910350-bd473414.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606910350-bd473414.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-b4LRsCa9ej9o/7AzXBacR/KeW3e2ikJha4vD7+tUASN9Byjjfyuj7B2kGC7xwCKP7A94OLMd7yiKHGUJTVJUSQ==","shasum":"96ea945813f5d2c5cc467b874db57ac9ae304437","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606910350-bd473414.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx4IECRA9TVsSAnZWagAAp3UP/iurWhoARPPsMapaIIoo\nzHy54zwxO2ISESglr06T6zHCuZpDIdGyo/QIofg2PtFjIRdv0IOPGfR4QZqm\n5SmTPRy1zF1jAqhx3P7BJDWTRuAiHzgJ1KL2iqcbsgCH4JIS1ef9cUvohqMj\nz/tPE5wr8bTNi5N/mh8f5aoXOIGbSbYHl63WkQvfuh4ja2477C0Ce7KNrkMX\nr7JN1FEQ4x6uKZeFaxOfHIVJKuk2CocBXMsQVJ+sJ4QGKm91VYTTK6uaQb41\nbViC7x9Y84Flh+N+D3t7jsh1RdSVSXoSnoo0oqKsLALeIw9dFWNRnJ31H/Ek\nyAjDZsB9aZTNkpq9bTK1/aXv6ARN4bHTWmpYXGqgJkEC7z4ooMVEkXl1sitb\npvKQmb1h9CbCQJAttKNPFp8Wfz3umZccsm15Xro9atWm1dMicFoXffqKy7gG\nxUxv7EPRaiXlfgH3s4WzZyYYt2b7Mfr4kJTbNkjxtBkqHj7HQVimTJaItY5d\nskfVS7o2LbaokwJXElTHJatKqzrN5c93+Z5uuuz8BL+CUmlgs405zUACMAXf\n6dzHrMQWbLp8IZKv9nirTZ8xrZjB0aC1VmiyNeUKZocnz5Ch1i4XJIAux6rN\nU+JKHr0quw+V8Zd8c9ZaTtqyzHWAIRXHxAxu2msos+eFRVDxl1tRMvwWr2iw\nnjIU\r\n=nmOI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCW1xhwwbUAbulXkovhxfxHVnAHzg69SzlvcqrEe6guegIhANEz3ACgJErpUj7QzDDMJ8qss+gCVhPzaMVEw3zMLCEb"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606910350-bd473414.0_1606910467883_0.1953172749755432"},"_hasShrinkwrap":false},"2.30.2-next-1606919948-bd473414.0":{"name":"@xdn/core","version":"2.30.2-next-1606919948-bd473414.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606919948-bd473414.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-aASWA6ZrCs27tKur1QPqASNbWVLXHNrjEKijZycEz4DhNklJo/SsP47vsU9vFxFxLPXZ2YJ4KKs6qAxyM6JDfA==","shasum":"92f1b6aaa2abaa910f3626eb3711028cd0ab20cb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606919948-bd473414.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx6eLCRA9TVsSAnZWagAAoIYP/1ms/RDUaZrUoFdOSYjp\nPkZIr/3SWDLs1sWBWbR28P8QE/lyxMbe3gC+TrvUph0lqqk5sy0CSqlpMEuY\nz/olfCuuRh6QwJiN3DubCwGfosJLxQHuFuHr5ll8Q67J99EfRiADV4q+K1gC\n6UsoghOxxV1IFqWsFwC+QPDgpfrIv5FVUT1idN0v+a4uPVXSxUBN/1a7ovNI\nONWTyH95AvO7uLCHXkTC0hq0LhShXqtkaFtUaj6F4uOULcA0xGbAqRqDrX9W\nglCbTlwWqBHiXmKdPJI5JvPGDf9LxobG8cGMOs2drWHAe0f4qQl3KYMRYl01\nfjL6Yq11B8ipIDnCdpEYueWREclAxcHNfa6w3GJ7lzJeoxEy3w5qa/jCSBPD\nQN2hm/BnoGWNYmGQ8SVKphtZPuI0oovQFzL4jJBNy9VTOLO81sJ4N+np4Rwv\nXkBuYkOxpUArphbVzFKhhLr7mwV7vIjXVXmDm77UnlcjuPnatyuLnxD0NVK3\nXwqbcQ2yBtWIktrCK0hYYrF5b6EUwGEpC0ZEtOxnXdImZufx/xmSynDhqeR7\ndm+bMaDf5RBqIhqJWTwY3uQiFuavPMPrmgozNYlg73v0BnfdRJAoxC/ZAt28\ni+NfqeJVmtJtIrQbjSGJKwvzxH7PJHBNnjyfAUv9kHEyPEENZxt49FF7E76+\n9/tQ\r\n=4XJT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEz5H/8vHn1DlohOf3q4ztuJbeuzH2ptbzPxuZhtz/cVAiEAgE7zI7bnvHMNTCBPT9UuVcAeJ5khXx3KJNSQY7gW4oI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606919948-bd473414.0_1606920074605_0.5400891937333254"},"_hasShrinkwrap":false},"2.30.2-next-1606920193-de66504d.0":{"name":"@xdn/core","version":"2.30.2-next-1606920193-de66504d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606920193-de66504d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LuWX/YOK1yi+1PqAn8/CDTs5cn8W7m+gZQFJY8Y2HKbhkdr/oM1XV34H4jGbsOCoYeRwKZK3Bg5eKBZKivFgUw==","shasum":"fe0481446b94639397d4614f014dc6441ce9a327","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606920193-de66504d.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx6hvCRA9TVsSAnZWagAAAS4P/A67w+vgMO1MmnhE8wR+\nY2zuVH3GUCA/Ho40CUa7We2u7atmHxnMMrHTNoOL1pJMzjH1bEu0l8tfTZ4l\n7zaB6zluOUTEjOjE5x7QSdosdtbjzUmBovtHyHF2xAHPDdTG3b9U9FUHBE/a\naB8uYh6qCJKKQbOAjynPgQJBn1InwBKg4LiTwXzOqmSbf6rY5MAbSlakLFqn\ntLRHyqpSgLAP0l6tL1r22+3BInuIPsdn1nzkKomCxMc9raKQOdT/9iq+v8TL\nntwAR/CQnoC9WGJuJQpKSFPQYr1RpHhALFW6fvjU1DuKzcnmSVP1MC/7wL0w\n9KByby3cWXVagVnYXaNIART2WaKw4uLUhUBWzKwQ4lrh8IzPs5QJHpMeBXA1\nU8is109eEGDrs39UNVjRyvW6wtsKLfvVKPwteDtM/lKMfi4eUMeNoaSRtUfn\nzkklQA8O5el3J7XUOE4u2HkjQUn9KC0ILXzUt2LXe2Ph2HnRCHbTVaL+cqUR\neJHOle/VlgVhKzkJTTpJBA0+TmgIhiaeFEZJG4lxbwAnMuxWgYlmpZCJ7+BK\ng8DOznPl1fVH2yiG4QtKdxd105mTE3mp5N5rd4U2gC5IAve2y0qBzSFhD7Q4\njdHlW0+pU5MEk0cFbpEMppLnPtGR4BuyxwdfQuIAWa30GvX2t5Rhn6G2zXML\nPT7i\r\n=eQP4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAw4JlzX9heO2SPVrSlNKgMe+epk2gFK+t8Qm3qIbzBiAiEAnabsbn42gBizfdHAqTo6bNcLmqzwfE4asyJxzqk5h1A="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606920193-de66504d.0_1606920302905_0.2631234325959506"},"_hasShrinkwrap":false},"2.30.2-next-1606920224-de66504d.0":{"name":"@xdn/core","version":"2.30.2-next-1606920224-de66504d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606920224-de66504d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ud/MCIB+AZGr6huKdRxnQlkfGAz1QBl+vsUBEv+Yn8FVz3GRVn+oLscHiYJ72OD8nZtqZcMxn71YvU1QLndZWQ==","shasum":"2fc32c0483c1b86bc64912c32be1bb2182d97586","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606920224-de66504d.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx6iYCRA9TVsSAnZWagAAgKoP/A3zLVZWIadiOCefVECq\nz+FmNhI2Q1Bw4EclfU0VdZ75l13vQmVyd25bNqO5BFeNK6DFctuDAKyqEx0U\n7amynDS8SrAuTghI6muhLBk5wMyzri9M1y/koM+t0czj0BAXtUquzSfC5Vi4\nQAznBUcyB6fjTpxM4yZF4HWOG9/MaiNyNs0taP2cHk0DX/ENREFAzY8yKqY9\nAA8vghUWEiB1XXmqz2XpdwVK/B6HebbGnqxN45mSNtAi52YHL7rrI3av32fJ\n8SDjc/icuYNSWmzSQJ/pUJXK0BozU/rx3wSESafNLE1/bMWUBMwOi3hXkcwd\nEwkMQjBfeXEV8/jwKgtlNeQ+rD4QBdpaoBNiswHN+hc6uFWOSN/nJW8JRo7F\n4aZYR3c2PydReWMIDaOCRL7ejrqLpNLz2bI1ftjSIWel+Y45p/1P5lsNjx08\n1naKhSOzJqsoG27t88hXaYvHC7ATmygLojmr7py1oS3am6+G4m89YV6w0Mqb\nC0R+ALKVpi8P0J7VLGi2i5NJ3SWeDrpKbw6Scu1EuoWPGowi2PBkzFvbcs8P\nEvDuHy3CD1m1CR3+LOdg4tIJdnHztFpcM6/M6j5C2a/xgld6DAr5ShCL9RVh\n46RyJD43MX0zZGaTN/NAnwZIqBHpMf30Hd6jE9PIfSx272N2auwWkYiOINAv\nNcqA\r\n=saDE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDRzTexdKELYh1qB4igjqhhZ19M4lPCKBCHldw017fIFAiEAoLl9YA7EIJVHaUYw492AgdkNl9D1Vy1pQRjWRNhlFJA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606920224-de66504d.0_1606920344168_0.25597171648721884"},"_hasShrinkwrap":false},"2.30.2-next-1606920279-05eeb452.0":{"name":"@xdn/core","version":"2.30.2-next-1606920279-05eeb452.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606920279-05eeb452.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rlP1Post45RNqqhBorbVAwqRJFnEO5e0w9ymhOldinLmEPYDnK7zd6KMTsxt+3OlWM4Kz3u7K11N4ODO+CbkEg==","shasum":"20e6f323176c49bef973256ffc64d9ca121d5481","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606920279-05eeb452.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx6jJCRA9TVsSAnZWagAApuEP/R9JZSyAVFhQEOUMiPlq\ngHer4MHnLBthxXrAWV7m85t5sR+lYUO4Qrj3ZhsVBi2HNDcPaVhLpMOoDl0v\nqMJlsrZSRwLGCm3tDmRUbQPV2KNy8M3V/3V79eCqJ7TOUgwOQ/WSUeUDVF1g\nEG3VTQ/52MuEBceHyaRKd3Slc+Y88c0haFzDkkHf2WIgXp4eHoQf5q3E6LnA\n3HDy3IDQF31H1W9Haavp7bvOnVqAQGCL72ud2piG7n6/lVrj1MufeI3VCkkI\nNRpEFDy2C4laZ2cA6AIsU4QqkthyyRU0vbuHXQgff/fan5drSwcVrKjsdOIH\n2E8HTjN/q8Rr7UInP2LYbBqWz1BxYd+cCrWa25TjYDecH2YK0AGhYZ46nWOi\nIhGkAQf8xqGJB+eQEQMSrm6/WulzGQ5X2qrEHzpEV8Gnxdd/yy7NmiQItkXj\nfHxySnIDiHrG1smz8WCSUh2n4tZWkKrZB4dqQ6uWmrU0NbULEva7hY8h8+Mw\nrdKfX4Q1dlyEf3V3P9f8ehlRelS90NJLjO9KSZdmlx34CZYjK733Uk56+w1c\n/zys0kRRqcPLbUlcocE/Eo76nbzCx/BUXZJlLCna5qdDahkJDAO9EoT23LNX\nh9PXP/QSPAis2wVyuUvdkQyyzgnbUkd6dmFmCIb9T3r2BSfO2GeiYG6SO7ml\nf1lS\r\n=wtMB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkwJt/+MI7B3fQZOcBBn8lexDyeET8t8hwSufrPoU4hQIgY6pfvQTotRn5W5clhvxXww5FxpG8jeUiDbVXhgxffv8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606920279-05eeb452.0_1606920393070_0.6064623676918675"},"_hasShrinkwrap":false},"2.30.2-next-1606921099-05eeb452.0":{"name":"@xdn/core","version":"2.30.2-next-1606921099-05eeb452.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606921099-05eeb452.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rRDbSgpkOdZLI05oSXXe0kzjyeBBaUg71q/kEJAyA7FamJebdm5jWsbWiWzYIts21r61DTmOoGUiLZlcTwbIDQ==","shasum":"5476e2301429bd66ac3b0cf643e05efb2e8be1e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606921099-05eeb452.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx6wDCRA9TVsSAnZWagAAw9MP/1Czfh0FSBkHrgbWXZc3\nx+yrexjI4F7YTH/nMu+qB2a52+bRnydDamGsSmJr4cSIh4KPzaVyk2DzCn1m\nQ68nfTdE8Hiod41kctBybtPB2JfXcED9iOM1dIATWZyJGx8XZ8wNpVr0cfGw\n26a9tt0tvDU1HO0OJGbQmtEXX7O6inJZekfHBNnNKJjbymPdGFfIICkOA+7N\n0mWFsr/oRShjTym8miHy6vL1rFj+3rQF4yfOvnK8MsGEmQUBi/rJpYiYvgme\nljhD/yDA0IdFNJxnJHHso7qjAXuBTvKy644iBLMFtEVAoTC6OabKOl2pyrq9\n8yI1KOGjX3N4vTQBDRFZZNwQ9ffIcLN5sH6IqtSMkSSL9FpgKQ+a9v/UuzPl\nOD4Mt/HDp5XW7ywLh+AnYHn8AIz9lW4atnIqE+dacgkQ3sllxmyTEkfOEaUO\nELHUr2xAnz5sHFHBepyk51EMX7fVv7t3kiGvhs364ZUeDDMj/vcUewhdnCcB\nJjfKlLc1ZU/Kh4MxW3GMf+rA3TcpwNZXNFLIDpWI1Z3duUl+D8xkF/PiS22b\ncnyLz4itQ6ZT70df+p6+idFO3XMcJOFY8h/XvZo3E2hgf1pbg+H5BNvrK/3w\nDuWgbAguoSF8Llhf6X14hHp0df+4FrtWDhZBkV+bRCn31vE2tLw0dHz5/0oE\nKQcn\r\n=neBJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtpDHI7q7vuVbWo6RQW+ijtKYhOBsRRrFhk4s7kXC9UgIhAL75uZCDbVJYdIqMHI1d/ZJ2oVGoKhVlpB/fOwpyY9Zy"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606921099-05eeb452.0_1606921218418_0.15587891015255995"},"_hasShrinkwrap":false},"2.30.2-next-1606927527-05eeb452.0":{"name":"@xdn/core","version":"2.30.2-next-1606927527-05eeb452.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606927527-05eeb452.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/VuFcuThKbEnHAOQVUmjMPFMtnYVKQX+nybuMigAs46S3ySnrnIGjK7wREYj4fLKRF9XZURbfNPczWHNAYfGZQ==","shasum":"86e2bb85159ce481fa64284c672a7691ff151da4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606927527-05eeb452.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx8UgCRA9TVsSAnZWagAAGwkQAIUmO+a1k7lRSq6TvgKm\n86juhXfqbIPez4hwJYMljaXmxqIQqatN+pS98Xm+oZBASunYDCzwPo+PnEt0\nKUT9pz/Kv/ILDhxONm0SXRCJZ/UMZJJPaErWkNIcYooBwkpK1EIj/tjquj/k\nAsQcCD2kqwj3r5bjsLFMQrcxrLVdhJX1eSuPBMcDJHXx3pg6M/SHWkOR7DNQ\nMD/Y50o882lG0Fl8y2T2LTj9IKbbStIHbkzyOuEuyKcztFEaxXFvqBKCHipc\nPT2A0tCXKODuZr9q+KQneTC2OXd0GAFd/oV28aH9+bbzY2/etx9iQZwiIqr1\nSpU5fbzbBiTRt4PsMhYYuMZL7nWeMg9W9LmV5ycqUsyLXKJa57mtVZ/rYoGw\nrP5avrY4EJTVWrSzkuAuHkE57MJyim9PZ5Qf4CamIgb5DaYfBY81XX+b9XBj\nkYR85AkXvthhkSn4rgXG4Fs83JTjjmQGURS5o6kWomBmtGqjE5PM9INTZuiy\ni1ZT1c6hkQfUCWjsZ+D7PTQEBFiyjtQJ3YnA1RJSJ0Kjm/546uIkvfoKHq1I\nEAs06RUyOk00bcYBCi0WQRjeGWpzAEWdbKe/txyGWj7VibylDCQ+rk4fuo9b\nyWTo2WS5BTcHl4fxErxsFm0K2pSaFiK13pbLNld85P9Oy1z/jK857hn2n0ks\nDvoT\r\n=qTil\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDocE+1unfFm+ueMbIRTPI4S1l3Bxt4/l578olIZ4b1QQIgJaNFba6iwYCwVyUNw295NTpXvZ9ANHgMF50NzV8Q250="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606927527-05eeb452.0_1606927647922_0.28461934147993095"},"_hasShrinkwrap":false},"2.30.2-next-1606935782-d79f3129.0":{"name":"@xdn/core","version":"2.30.2-next-1606935782-d79f3129.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606935782-d79f3129.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-HhFvHEwxNj3Fs4Naj+a0z3W6nlnXUgp2D0uoyjdy+Rxl5LciZBvvTOzfqaHRPpY0SakMwe8OE50Tbr7/xiW/fw==","shasum":"2dafee4472e495880f534ff2f76c15afe8865975","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606935782-d79f3129.0.tgz","fileCount":169,"unpackedSize":651066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx+VqCRA9TVsSAnZWagAAwIcP/2UR+XtTqfkxxmhWPYNE\npHxeTUqidP0EfKovrhG1zyERjBZwdBnhyvIXWrdknhlN+n/W8sZ6cAJHYobU\nG8hMlECD3V8Rg8S3g3dV0lEWO7GK3GIsTm93Hnw+aD8M3FQ8nF+k+e/r5jtD\njSSVBHJZvvS9jn/L0/TMPyWhLBGFGwderF0ZVMhHZjyVIPJarEySgczXC5nz\n5OP8FDLOh62eV+5+mJ+jd//lj2tJquZuX01y6MARfYJBGQyCMUIBPt/EvjXw\njhRandvcXsiwmRqXa9dyIa0mxZTiM1i6SwNLOWZnwxlGJm77gDdfoYk95A+e\njndfGDYQAdovLcLbmIYejvgJZgjx7ou2SHAUMjCyBNulZfyuLDBKcHmOKjrT\nv2UvnERcxiVVzG+4f0mKf+bInupRrEs1bWVYK60U7NZSj6fK8hhOxhhZCBi8\nhkFBspZxRaSvQcm6ccDx3yEplsucj6lsqaZuTVnZ0S8dlB2M4NKYGXebx46p\ngKqF7f2aP5GhxUUunCT3/xjUMSYGiXmCG7gASZotraNNAEb8/8w8iVCJQBoT\nyT5i300xncKLqBBkpoKwF6dpFhQl0nsTwLKC4bfdhzxdSexfrFDLcrBrs4ct\nw+Rv2Nh8aEdZqqkQJfFFW+yPtZY439AEBP7J7HXWC2r0LcdWMc/Ae11LOy8f\nwwxH\r\n=Yxvn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtsVO+yRHX3WJtLhB08bnPOjmMIldSKXs9VO9JBQc17wIhAJ9pa9SB0Wcofhm0uK9OlpqICIZ8LF7OCe5nrRfgImYL"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606935782-d79f3129.0_1606935913371_0.839443322250643"},"_hasShrinkwrap":false},"2.30.3-next-1606940707-9bd954b0.0":{"name":"@xdn/core","version":"2.30.3-next-1606940707-9bd954b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1606940707-9bd954b0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kVyVyHGXu7wpvjbtF5M4HaOVF0eRXz/cBNskrnUVBqbVvT/u6oQE9YDLVrEyOA7Ye8z6h0WkQjoCFnI5peD47A==","shasum":"1bca8b331c862124e34fe1c328b2e60463f07f1d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1606940707-9bd954b0.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx/idCRA9TVsSAnZWagAAZr4QAKDUcOqTM17QerPj9j/7\nYrnkEYDJpTSHh53gGvCSRqxrAQTnUTAdcZoxVlhsPP5SuAoZKHhZg30wxr8S\nFlSF81Rh+NQrbSHO0fS9FJRqAgh7Ei8wWUeU5mJC3cr24DDkURWj+9be0DXO\nkfshZrfRgt56AWVZyzAiHHbMXXISDmOrrkAlXf0eaJP9Y4F6Sko/mF5qdOIu\nJwscapYHA3iSYq+maFiRbXU/GUkWnuM3fH0t4YxL86oFMAmWMDdXNx7qI8cj\n/mlAhZzot+UxVTx7iCcMmXJgu9v8zJsILsNsUSuQ7aEOFz3L45eeBY8Cvhf9\n0ksrxDrKSmrOLqrcnHF8QKdi5rO44UEQ4Ka+xk/ibmXgGThPU7ARJmaydHvK\nx3iDXpc75eyts2HgTuCIw5OU3K5XilgX//9Yer1SYh7tt/m/bCU0G85HPsnT\nw0kLs8Ytpuewk6J/4wyhDl4egaczVLN48Y05hSdU74wXF2YCQu5D3os5l8RJ\nen+SXMDMpP7jluE6hTR+D+GzUHQJFWwH8Ok+RT6gjC64J/AIIYvhHCMn9ywz\n3lcj7AcFggB0EgHVPOTcE91PCFKmosKXq23WfYl5ehmt+wV3gABZUTmmSQrR\nzFOh6P/xIa0lCxM5XWQTj2th1hNlUWi2ylvOMg5m82ZVA2AN7/wGApC7j0JW\nTXlo\r\n=3ts5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMNxxg8L2dBkQIUDBaQkgzjNde85ux5R5rlks1wkT0WAIgYoY0JydoXxCLFvf5jNRXGk7A2uI/jjZjQWE9MKPpxTI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1606940707-9bd954b0.0_1606940829231_0.5113078132912299"},"_hasShrinkwrap":false},"2.30.2-next-1606940726-b77263b9.0":{"name":"@xdn/core","version":"2.30.2-next-1606940726-b77263b9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606940726-b77263b9.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+EfJlwkJa378CwJJF7i01+0JQjSm1CpjhtY0jS2e1u+ZCn3aMJ4HRT9pfcUek6h19wvZFtsc6X74QlFnIuYo0A==","shasum":"f2981da0d81a5d19b4b0f45d4a6e7d5d452768e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606940726-b77263b9.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx/iwCRA9TVsSAnZWagAAS4EP/0eFX8deZMTrdSRsnX5d\nmNRpBDXlIlmRDKLXds8aCODeLEPd6uuhr8CvgYKzrYPmvESoJ/eRHbz6Hdhf\ncc4bmFGM/M6+ZkaMCvK/JBjjfLeSV7xC53ZGjjlfPnGtuGIa00uANKyEIwdj\nMc6jjH7Vcq38nUycaYdgpwkvS4i+gA8QqmOKoJfiBygdOIP/kDES/XIW1VTk\nf4/YcNT6oUzd8orGDpWSo39i6G8zSbJ4hIqAOx+/jjazTHuH4/hIAZUpZRkj\nlulLQLqCwAWhamYlv3zfWNTUliqsi9AXa/Ib7xWNCpoyz/5OhFQXvdh6DqGU\ngR+Mq2QEACZMjNavEAtUhgmBSMVnV/m1gzgti5S1HHnKDS28P73YEYWBfgO2\n5HIiPdKhoaVtV+WhFV/p7EDKmve3PaNa7d1gN7A+3GHh19J+HxiN02k4wdcQ\nvytSWnHJLiA3bGArGcu0EczakV8th4KcYceZ2KhjuBtbNE0sT5v16qmsIX//\nP3PircSZYJjkQtAouelv0jvB4pE+kc4HswslHgSh6ZrsAI4f7XudGrvUJrmB\ni4f+juGAwUKq3YsNjXmgip/7epffkKcfVlqueY+Y/12VRSyAZgvK9qA2XbUM\nfscixTDa7VTVPkWr2ZqyfVOQYX0i90UA+AT7Hfs2QSOuKBJybXizXR5zWZME\n1wHQ\r\n=1tTk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGV48lICwAYsznFGRsC9mMOlzQElszSm+CSHmmKXLG8uAiEA0DAPvK45bf8U6evWJQe9uxbgDvnLUXhOuhxYNpRL4j0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606940726-b77263b9.0_1606940847936_0.31614842451462755"},"_hasShrinkwrap":false},"2.30.3-next-1606941435-580de42f.0":{"name":"@xdn/core","version":"2.30.3-next-1606941435-580de42f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1606941435-580de42f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JnKyKXKSMG1npVrSGfM3vzJp1E4GFsykYdF+O8+gAi+W1NVt0SLZ3/mpcIoJBSy7uxVW5Z9IxM7Z5kxHvxD41w==","shasum":"4b46f136c39a7bccc34203b0fce159d308a7e1fe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1606941435-580de42f.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx/uACRA9TVsSAnZWagAAAdMP/18PO6af5MRvWyoGqccM\nE3ME1hZFFb4f+EwP6eQHDWz4WD/cUNVz1gjH5kf4aVFXZND2SCAb5/IqQpAc\ns1Cz13HSz/k+7Hzfgtr740pCVVpOrFDWSupWVy+fJh0+VhuwxgeZYs1I39B0\nunFPV7R5cQ5GZ7lz3SqWWjCt4WfaL9Eg7K0cxCHDyRtAj/M3LJjsTo6d3BZQ\nqQwVIL1iRW5SrGcaFEyEQUVc/S4GpqoDefmBtPaJrktfGqdHrsTLhdgP8Jqz\n9Pa694F9C05F8PznCyuQ8XWYlQ0klgFATzTRK8LzAsK8csFKMvmvnzD3W0Ga\n340tcAEfJdN7CAxB0dCs9tPxpLbQuI6rOlXkPyxrMApse11M6hftKWfrCcAd\n3ob5hDBiWrxHYRGRLVwX7ez5pswTBrXrc6n2vHIkiWsjUEK+INhsp8yNb2sb\n5/EFeYm2Bsvwgslr0h029XWd5VTlA7kVM9MYaAC2Ay7sdGtADiK1cfZz9kZZ\n8THh4jilPrx/Xok7kYI2PlXuXYazvwOi2jOwoPWuBYiF6J94S+GhceHZ1N5t\nBcxaHNPU31ZG6Fw7VgH1Wy+Xnwwq8qhBfjFNP2/6enF2g4Bpcod2vC2IJa1T\nb0+0J+WRDZT0iKwtXIfMck30y0wIi4juI810+wiaJVZkHetVlhtRk8vOecIu\ndknh\r\n=qBBZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChetNZe6x+JZ1kFCAvnv7W7Y0UhMu2irqaPfLM8GwHvwIgOvZyqcrVb05OhKBOed4GcH8OA0cELrA1M9EHbBuflfY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1606941435-580de42f.0_1606941567732_0.15678657773600002"},"_hasShrinkwrap":false},"2.30.2":{"name":"@xdn/core","version":"2.30.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-l4K9Tn4FrY57KFMJEMqhlVha9cAs2g09pMNTt6vQMAmAOPbtIZDTZyhDl0H9BXj5i15c5UePT9W6DwtDB6n19w==","shasum":"a74874b173eafe1d97be80bf6791936785fcbcd1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2.tgz","fileCount":169,"unpackedSize":637978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx/44CRA9TVsSAnZWagAAZ9QP/0BVp0mjQCwiI40t+v16\nn2iqIxVuNrPXK0g1c0jskwzBr3Xo6f4QzoTfcuWbHXxqFugknUYDNBnQohzZ\n1wd1kxwcPKrM5gFhKgSamP0/qdmNrlRkwMYyiHB2tTLdtWPPa0Gmnr4OTP0/\nrGyXClKX/zvFcvM7kugwpYANWy13BWLJFl00t4mo6w1Wj+MMvr6APMvxGbqm\n12hi/HhOSyleJvLyXVmAxUxr04VHRZhZvR1d9ihIq2oYn8bj67MV1IfisgvK\ncbnAeCt4DFQWDsQb1pD33W7IgdpKpgOBb7lpOno+h/zPAUarZVeugXpWUi75\nPRzB23E9oBfCoJFtzw74dgpxPtplBo4JscxEBFcnp2H5oVP/QGB/uoFVvVVd\nT6UyDP6Kbu/B0ekrSRZrqxm4/kk1bIr2wgH5AogAqBau4RoPUqW7M/JZDdRI\nO35Xi1OXhWFN7mgf42rSxBlCTS0vizpfmu7KCTG1bypGKEuFcbv8RwuQQECM\n25bRQzNWqNxcsGGl7UlXekSxdNY5gUg4F8z52uqLkqWEPwTa42C4nk+AEqU5\nVrqkqv3Aym9XK7w3hdiJ4thz6nBX6DBTdpGtYFZQLcfMCwSpwVcYmh7pXL+j\n3aH9JIDZHVtLWebgQ++Mv+oJL1Gp1WfgBUFwD8R2PyzVVO3Gm5nd67EnzhGt\nPQMK\r\n=ohvY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDyX1LJD63Ur+LnuEUzCjwas8B3vCy298ttAp/PfnPflAiA+eis8lEnmSBdKB/31wCwC3KkN1cWFE12nbXBvGbwddQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2_1606942263955_0.23707537804983692"},"_hasShrinkwrap":false},"2.30.3-next-1606943566-00430898.0":{"name":"@xdn/core","version":"2.30.3-next-1606943566-00430898.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1606943566-00430898.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IaVlMU6zwP5UWnn7mMKWt368fYshbucZ/i4KksCxcjtWD2tIUhqAcU2j7ZztYuhsA7lGuHmb5GE23oRtxCmUPw==","shasum":"09b684c664d8b525304a2a4e896ac91560cd89be","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1606943566-00430898.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyAPFCRA9TVsSAnZWagAAxV0QAIveWaa2JgNplB5kRVEt\nplwBPGu9+JVUKQg0D2zaZeoGdakJ8wxNtWLe5k1fZuclNusekLsQMqHaA5RG\nHngzHmlxvCCasusQcI6FzFmoRlWrBZLN4fjGd2eoKuUZbGG/7GB5cdzoOMtZ\nIYldD5C9jfIDsf4RXCRD+Up81dlnvuXuW6Gduhlk0pDO/YiDqpmv68j7RKKn\nK2Z8ZWUEZWr9wYtncvl3kHrRK4S5q9ORXpwFjttVS5+PE+v7UH9Z0wSwVGJY\nQD/7faHlST9OoZfpIypo0XpX685ST43t8QT89Ocy7zNUxj4jcgJo6IVB3y+S\njSvN1Lg8rlCgJyvf5i3XeJfUta9U9V5y2mn0P7lya6SUKG4S0njEDJ5Alu/a\n2BUQHkb1G99YBWNwIIJQuhL1AaizPEN8IafimlC0Vfm5YSVIEEb2Xg01nxmR\nDdsZwO2vGZtJrw+ptY+ENgCN2zs9ZV5g+iqaYn8Yyvnd4qrtJQyhkMpYZQXm\nxsmynZU/Ur2kWAiBDokFb2ZPsVUeyvdSj2+qZhoI23P8XiXfZ9j/waa5C49A\nyT9Py+SGZlQHMlHAHa+eqLhaeDKO+TpT9WIAHAx15nuFmBzI/BrYOASiabK7\n0uzK6h4IkollvBP5h2JA5SFby//jZ+HyjGKvgF2b3W35fp+W6tQthudHYfB8\ntZJT\r\n=qVJM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICAm1G4LxbnvPjLH92UxNIqwcpS6L7SF33sXH4HR2bUfAiBRNtIlbHOVOXro4HrDIx2c6pRnkfLHH7Ero/qbwQzhCg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1606943566-00430898.0_1606943685146_0.16165804000646"},"_hasShrinkwrap":false},"2.30.3-next-1606995022-98023332.0":{"name":"@xdn/core","version":"2.30.3-next-1606995022-98023332.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1606995022-98023332.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-cypKVH2BEwvxEkKWjANpGbmZs/TsJPp8N8Yf+1Oam9zeH2Lg+0N9JCe1/iRPMCDVHVYSa6DkQ0sxLQPWlZXG/g==","shasum":"ff7a486688c31637b4009dc80644a7e198f5d940","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1606995022-98023332.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyMzCCRA9TVsSAnZWagAApK8P/i0/P4N3/0ISR4P5ja+J\nezaLLoKKM5maAX+L5QqvIuhNI1K1WF6lnjnhlG7xEKI+NVqa6OmKIBNKka8b\nPfk5XemNwqc/X43jvRbIfADzeXXSmJdPVDQclwHY97h7sS3wiIIlUEJCB0bw\nfQ6I7K6nUiBRAbZBfci6liT21TcTBIqF6qXGkXszzePC6BRxsGMlj3L5Qfis\nUI9NIMI4jhdl0Rh2efNucp55UxRflfld9YT1aSPqo2nob1L0XIQpGnpnKWFO\n1l4RchBeZwYUdDXl0pEAz1/w1Nja0vaDj0kSyIRYfEq6g7SQziupCkyOJGcC\nE2dR5hSEQW8B4ZsnSFA9ZBGJBgJ/+sPM0/OmsLKg9sVtQuZoC2S9raYauGyx\noCAwrjXfzmOtXsYgRh1iX8xkD7llUT5nj56QnT1o4+K3TklMGhTWMWZq1wnL\nmYAcr6k3u1q3lh31zVS5J9S/mZ/JG9G3U1eLZ0esvEpo3zZoPFszQe6bEnLi\niFoqYwXevRZDbSQaKfhe4Lg3o36PS8LBm7GtQhokbIsd+3yinm/EEZY0+S3W\nWxPWvetmWQTRVlfpXAIdlMvVgPGt4v5UtDMBV1bcdfEjfLhOoXHJ7oY0oKc0\nyhVRdIPPAKU2I+nk9AD9OuTounUx7ADhptUp5j3oVTf4MkPqw6D1wsprqYm8\n7bzC\r\n=qfA1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxYdoKkW1KI/9tLiKDRxX2IYKh3i4ObVqAWUWB9jb6MQIgResvsEV/l8nPyRwArKbSGhFyUWxKh80xRkq5e0UUd4M="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1606995022-98023332.0_1606995138088_0.3151929294261846"},"_hasShrinkwrap":false},"2.30.3-next-1606995211-d9560aa5.0":{"name":"@xdn/core","version":"2.30.3-next-1606995211-d9560aa5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1606995211-d9560aa5.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-L5zjxktn5ed9mCdb86XqptyfQ8brOaQJfvKa0wOeeAXb9aLcYu2HFvf9jR36n5yu7DbLwHhId192ZBz66xviUA==","shasum":"8f0673021aa7c1e04ca591f86e74dca449bc8f02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1606995211-d9560aa5.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyM2CCRA9TVsSAnZWagAA+EkQAJd5lIWtRCmlSp0bGj6Z\nbxt36grrfmOhqu+9N60LZdVFBJsNh7PLfd0l2X+mJkEyQ1Uxogu84TsKQKPo\nSR9jfHgQtkxwpyQNv+aVq0272/QguLda97exkwk1+BlXiz0Qu2eE6YUkEC3M\n5VukIbWbYY9R/B8fCsK+Z8RBySHfvSC15ZoycIlF5BBAnmJeiwmjCSCrv/F4\nwhAoR+MW2VJng74hg36srGqoKHOkbR2vo94sVijmZkjcNyE4umm2N44yvu+U\n29El5si/R1F22ck3TTW8LoDpfbQZcXHcN4npmtldn37Fk3RL4pLXZA6fCQzl\nYFLo0pdyJp6lOvaxfuTJymLnjpkWZw+zYx/pfxt43HAtyIzSEqvjB5XGhv4C\nYNQROxRmdMIIu3K+U9B6gUDfFEz3doBBZRzbVADPo3iiLNK1Pbcu1brGkwJx\nR9yhqRpbVadcR5+k8a2l4sR8Gou3a1r7GKsP+lCqhZo7URi+K4UelRz/Q6xc\nkLxsCav1Ww/gfqUcM8mIeW0cEB1cUH3yBhZeaca0tneZMd+81PQFdTXW+fYA\nerYKEK7WudfqkyjsU/B6coJYiYORRxa9dn9F4explM/MxmA7piRSZtjd24RW\n2PqNbH3LO9TiGx40i+3DwINB7YJcu3WSbGAEOMjVr59OQzJbOU331SUg+fX5\nIADJ\r\n=sUpP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuZwc75ZmH4tnqV/jEL3GYjueew20JNfhIEkOv+5S2nwIhAIkS7LBFr0uZfItAjpv3nJBhNLU9HX+2wBWGhfmMc+kW"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1606995211-d9560aa5.0_1606995330211_0.48752607900873723"},"_hasShrinkwrap":false},"2.30.2-next-1606996603-05eeb452.0":{"name":"@xdn/core","version":"2.30.2-next-1606996603-05eeb452.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1606996603-05eeb452.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+Ls9JSVHOLSJEvLzNVuq/eD8BGeiZYOuWdD35XlVbg9p1l436cNRbgW5zmt1UZptTEu0Ppee3KWTXS4VFDaohQ==","shasum":"65588600cd945c61fc586287dc20074bf00387ea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1606996603-05eeb452.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyNLrCRA9TVsSAnZWagAAj0oP/RW2BI8x7rp6qhSw7QcA\n03iaPdpmVj7rPpZ/8+i4NlAf3Gk/+AnK2w/cW3TXcgg1SkRj5Brft2xU8gFi\nHPLJlTfaz6gqARKgu734l/AJ+cvCQvQOuM7KDBaMk/B5395q3Lwyb95I49Vu\ng325T3wRqoieXD3CI3fckaf7gsCwim39XA1+pHEAVhKD9h1QdAAW5oUZ0+ID\naLcNwtdQl+xL/ck8Zb5tt5QNEI9WyGGLtxpKN1dZ1jedhsWs5V8kQDOCL2Eb\nJOVgF91Nl/WDFBOgEb/vqQbTsw25ohwcmf9qNJ3ScGcvus8Pk1GehVYzfdH7\nHCJJIEZT5eYcOlaawbbqHpdIH5FthgSqUTz2UkmschjNTudPMvPbOb7Q3V+O\nP7Ua4DXf/8lG++8BrVrwnIh69Z/rNS02KTRv3IGvx4gznLzB9X1jf5ZnuJUc\nHrf+eIWttoHJPwCnVvVjYPKuUB0H2/oSpwCK0x1Xxg+iZ3+pTrqq6TInzbR5\nWr5YHOuBYzzjQa98vSIA+BQZHCTPkxg6o0Vkidg+wK2F99X+lek8vOJWhMuL\n9Yh/iJxEsyt8CLQJssp+jYVyZDz61KAfaWkjtJK1i1/PqTHZ1J7Wvr5zHk4x\nWRt6eJd6vSRu5ObIoWiNRzRPEhAYfeRXsg7RBAH/ec2zihBw9w3+VzMmTfp0\n7NS1\r\n=gMJT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3jSGfMCPY5U/ZXeXDZwyKT48n6ghNIKWmITtkvPXKGAiB8UV6ogBYN3dKOzu5ozhIQzTrfeOODI6a6rOE60EQSeg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1606996603-05eeb452.0_1606996714479_0.3129289153695367"},"_hasShrinkwrap":false},"2.30.3-next-1607029718-e2da972c.0":{"name":"@xdn/core","version":"2.30.3-next-1607029718-e2da972c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607029718-e2da972c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-R9USCtr/3BWANQ3D4Tdk66bC+1vB/JAESHcH/v74lyTxgP/pCndZ9suyQQJu0CsQNAm3jEqx7DXOFE5JDX52Dg==","shasum":"a2cc834ec0d11f59e4b8f3979fc235ce7451ea76","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607029718-e2da972c.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyVRPCRA9TVsSAnZWagAACi8P/j4xq44WE4irs2nouWqN\nofNJzhJRF2o6PZLplQBfGC3ncv1LENmvStNPlowY2FHyD5WHyqOEntunGhHv\n8Zla2cbgNVcs1GrrlxIzRJHCuv5kTEUMYncZDt2BGWixjiAmV51bzukodtur\nDTDDKYFdv4irrHGxVEpzkfvXmVhtSo8O/O26+oBF14qK9rNTE3qi0s2JaQQN\nBlB4rhrOnYjlYL0kkW310QC1ZWN6v8g8rj7x6TAKW+cqQF9Q+p4FQxcYcX5S\n2SyhH6NQqyW3pmZXceEMgY/bC5cqTF5ooKtiJWCmS0R5GKckySk7SM4oHeSt\n/R969Q565DdR7TrsBEne/52BxdHkYyttQ3q80n1IfdBuPkuZzpIueqEp++lr\n+dRM+Yyna13s3o1hpAnMJHFvUa8Lkx+pMdvfogs9CFrymRNdnMbXkVtKmF0E\nlwi/ur30SbbDDzNAN4wSzKxMJTrgZvqViu5DlQg+vGJzU07E3tQjIKj5w/vj\nDIPlzgoPmOdE3OYv7pciQdskLaDFJy0BNcLQnbIjKPd2wODut1xNnm27WpdT\njTPT0/J2cbsAlHVN1YH0fMKBv422iQRjMJRDymrIV9upehOn/VStQpzVL++A\nxF2LhyODFO51oCG2u2IQR8hRJBkELNiYx9bePn/rI9ZDNgA1O6qAzHtJvIgE\nBtSa\r\n=4DCy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDh8O8Wpd1s1RzoWQ8QM6SB3sB6PboYbhJ7o3I8IZ3GdAiEAqr3nuONJqhQlpRLtrSh3hOnGLW/mp1W6DgMLTTqBDg0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607029718-e2da972c.0_1607029839049_0.9845785465426735"},"_hasShrinkwrap":false},"2.30.3-next-1607032074-49dfddd9.0":{"name":"@xdn/core","version":"2.30.3-next-1607032074-49dfddd9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607032074-49dfddd9.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-StnL7yT1g9sEa+LN58HuH1R7X94T/ORXZX1v1wO231XjcFq6qm7rSOgHR1Emkxw33mxjHLuEarvbfI3L+I9zGA==","shasum":"a53de1b16b3b754544bcf3fe5ad48c6240b81352","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607032074-49dfddd9.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyV2DCRA9TVsSAnZWagAAtLcQAIgrnr3KcxMj3RRrm55N\nC/5jb4aT7BRnRWD3dkxIiRwdWaPFF8iSYfHdlYI7bc4cw9PB6RaQdcg5F1Xt\nS62em9IyM8jyJXH2y4Gi0RZxLPtYplEDT4zfmYwGud8/YJrliYofILrVkmQ4\nVhU5hQlyqNOvLmJp55Qyim3ynyfcRFmVS1BGwge/s9nyRumVnCKphD8ssxRk\nI9OIF1jYbcHhxzTNssdZMB8X8S282l5NojZduwlYODbMELP8kwk5hrafzIvs\nL8BjAGGEFoX7H5EPvr8BuCM2m7rIkS5bHudzMcBdiFcD85gNb1UmvGYYp/xM\nWjdJX7QZGdI92LWv/Om5XFttwXezORawgLRN9XY8Y1p7m5WOcKCwgBvMKtWG\nji39lkMN+alrFAiqmXzxOtM2JCD/nDRJ6U78Anm0DNzaFKqLt8EAUtXK5SFa\nQEcNTRFssJQuzhqMvj6BnpXwo47JCoa3HUY0hXU0mRg48D26CVvG/fj/C3j5\nFW2+9ABlRbQhN6Q7l8xlOs/PsSNlyktXNWd5XGuMtAXSqb7rdRDQyU/L5poC\nT6NaAWbRvcwAn3S2XKgme/CRexrn80gsBi8SFp2PPRLpSVH8xoew79bgBFLE\nYFIwcjGcwjbIUzU/OrCZ4JmasMscu2VadTaTT6/iyMg3LIzWGjF44xS977U1\ny1Tj\r\n=baac\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjReTECgwtoqCoCofpfqj6KU9QZPfFwzGj9m6TVwwhRwIhAPkTMt51DDQmv2KLViR+iU42G5pA1rt4gY9emkET0983"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607032074-49dfddd9.0_1607032194802_0.32367810927047747"},"_hasShrinkwrap":false},"2.30.3-next-1607036154-d0efc3b0.0":{"name":"@xdn/core","version":"2.30.3-next-1607036154-d0efc3b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607036154-d0efc3b0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-PDQ/GZDg33zt1tcR8KhcHEJHbVEsoPZnVW6YxeBFKjsf9rZ6CLCoYhewSzHNw24O/EVJWWebpuhrmTit5RjunQ==","shasum":"5accf5fbdaaf2874dc710298f9291bc3d134400e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607036154-d0efc3b0.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyW13CRA9TVsSAnZWagAAyRoP/A0BO+BmcUFayBgUUvSI\nS31sxq8c3QvFf+4ksO0m6YXgmOYmfU5nBCKRH5QtGUG0OidGYmXDKTrpmdfd\nnvodM+apyvLF1ZmZjDrne9ADcFlbhw6aIti9aYX2XCQO4nPSXPzbjdNNA+FC\nOjDQw79mMV3CE4wDBB/Ncb95qpO2DSgMICKtS76S0wBRULSM3P6H6Ym5kcJa\nliSDDOk6S9bA7PeggecoADCwVAauorc5+c7EjpGAqRg9vEJ6oAajvkjwXmV6\nKLMG2vwrH3vUQnuccjp9P5zxTopPSUNKXaDZd0bZtRj80GnhBlPN3j3SSB1X\nqsllW7OSwxZpmz+S/aIcwNebTedQ03NsC0u9+U88jHrMwFUZ46yBusDWh8ek\ns6UsMyW3KVzTjVEQ1rG+3/iD0tOoz1BqxEjoe5CBHmHBIIDRcn8TVUAOh03y\n0r75n5cKCmZQ/jit7SXjnWI5wm0JRuQN8Y9eKkGW7ZW/gg2AmQd3xgz3XuyE\nWjdpKmjqsGAMWanVsxeAB1mwL1CSHLXHHuCeVxl2ohGZ4Sj/4yRqSAJ9NiDi\nit+mgZ8OdIoTPNuLrwmME1qRmGnmfLjDikiQuA3/cm6FRNGl1l1IGu7cdKAr\nZyE+cNYt0hfV3tOYc2f2AcXchizBWyVcSTbJCBoJyDZH8M9B7Z+DnH1+rhr8\nWMr+\r\n=oz9D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHOWizDdBSCwym9e1abG7KDAsfNR1GOOKwalIp3K9BVxAiAY7nhtie2LzHMFRO0EaqbsuKshj58lxTcGyZnzR9GjFw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607036154-d0efc3b0.0_1607036278349_0.17729159738690758"},"_hasShrinkwrap":false},"2.30.3-next-1607060525-a61922cb.0":{"name":"@xdn/core","version":"2.30.3-next-1607060525-a61922cb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607060525-a61922cb.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7ah9qj+cPMlCldp4RRRoVXrcu+PDlf5HJsB5zY0QydyFC80E7Iljo1ifs1OBY50JnRxMBrGs1K8DiyJ0BKG6EQ==","shasum":"4e3178e800fa5e2a13eacf707764bc243fe794e5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607060525-a61922cb.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfycyzCRA9TVsSAnZWagAA87kP/3WmZQgJy5IjLrgd0zvK\n689a7MN2m4OaxEmWznB8hlLDDXXiU1cklDnU3MB3OWiLoPNHdXF+g5R8G/jK\nAnyLFps56jM44sk/Ij1KcoNIE5ccGp2W2NmOJl16VXzfgP4KqBizaYiuyv4q\nbaetzMWghVTI7OsZt035vwG1uekJ86lI+3m8Kd1EK4wjB1J/iVSG2ZhYnrVF\n9/HflenvbkTXD+/IDHN6uyTr3PeT9MvVYEyHMeZEtrouG3dNrxauO1Me3zJP\nGAf4usDwYJHgfbdIP3TPCMKZdIb4Z4NhdgRGXsVGXIKcv3+LcKPwwJwV8MvH\n0y0oZKMGLJL+XwbDq8RVOkkmTvOJxPmfECMis4w7Tg9iVygGMvLWrb/4ThSk\n02tUtFAjv/5XG1b7qTwBzwI/MTvTyDCO2NscEkwK22aU/t1Kk0bI6AZF7v6K\n8ZwlHnaHkMyFUbDQIqPyybePEjQ/1e2Badt3G7e5ShWWEmcj4GAGgEx/25dK\n/CEUS0Wsb4vxgIcTeMJIyBg5Xs8AvNIJ9E4QJdinvLezUhJENm/e/iEtEpMv\nRVog0kZ1IMTcVu04asKXF9lzqUbHYFWkjC0rzVsJxZ9u6uZRmePcs613AXa3\nNoVsp/hvBASzTHA8IJMC761go97+xxwmBz3xxHgqguDUVVP/1MxdlNkFmlf1\njfc4\r\n=WSiR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGpYD/Fqv/ZYdHnpTJvrsa+SEOoldnKmVZw7giF6NcQSAiEA7m6117irNewo1fa1cfg3emjXDLRb/fXHxDitF+nuUSo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607060525-a61922cb.0_1607060658478_0.7552199417205667"},"_hasShrinkwrap":false},"2.30.3-next-1607060891-dff31a88.0":{"name":"@xdn/core","version":"2.30.3-next-1607060891-dff31a88.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607060891-dff31a88.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nHNDVz2MzO9VAPG34a9uz4AbI6Km9VMpZ0IU2zBf9QKJf+x8c+jovbWW4/3pF8+B7KaXBYrxUD9L92JRbc/R4w==","shasum":"b3eb5fe026f6bc7262b5610ff9acad9a89dcc006","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607060891-dff31a88.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyc4PCRA9TVsSAnZWagAAPdkQAKRvD9BR+m6Gv/AWME3l\nT9ehZxDLLd0nlWCRdiDIrCBWKUsgZqkLL9wmT+wm6TWKHFp2mC4qMgFtCtG4\njOzcRIq4/+egOc3eL/n7mBZ1VVpbdtHL8MI+dyLfmok7NPE7A2BnOeMQZRVm\nOUKbxB3N54YhCiQmAQF5jD/6E8tj/IWSDxD8DqAgpI9coWialULyRZCURNjG\nGz7FA1wBBvO3w9aKo+7YgG18BvhTDob0slVuoKkK/P4QYSOTI2IFAhvLGusv\nhTcmaghJ3tF1zHsFV5owPk+ItvMWjIRU1A0yanUqmfXQ00W71CGhx3ZcMkaz\nHmoFP4SUCWdf7gZcoSfr2HANL0+56TKP4LniX88xKUGD4OAPArauhur1xgFB\n3SclaDAWDP2cvuUvelo/c1AGq0XdlL2IqmkfWdo+jDMeIIcOCcTkbKIWgpLh\nh5JsdhcHs82K1h95BS/D0Vezqbe7+f89YBKwSJFtYHEnjvtduwGg/mZhzO5P\n0xfMiOOoS3fmrVPH9ekpA2n5zHm/bevuwyUSW+rvfWm0+myMsMhOVaGt+i94\nAxHFnv9gKzpwFIoFvSml9/+brqV+8feGSSE3bUJJ5fSMMR+CXqXS6NhxL4PI\nU0g2g4RY5OxLcTqi4dUpFD9QKTk7Dp3rAOe2yuQ8unSzf4TKzXuZmCaU2iYb\nqUUW\r\n=27qh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGfXUIbeYduPQNJHrbKeih3AwAoHCH6dQvCJ1PtnmB19AiA4Uz+Ut3RkevCbCDAuJBLoI7Ke9aaKLQ+K0OXuBJpwKQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607060891-dff31a88.0_1607061007280_0.04199278589575739"},"_hasShrinkwrap":false},"2.30.3-next-1607063086-6a4f7824.0":{"name":"@xdn/core","version":"2.30.3-next-1607063086-6a4f7824.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607063086-6a4f7824.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zpKsWkAp0EPmneNV5h/d1NdoeOKLOZ9huR9zu6rcH5iRHktD+opRc60KfZSCN/I7c+xDz3iOuhtDUcwaRJux8A==","shasum":"59bd69e8104c5fc017e3d58243d7a9ecf2036ac9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607063086-6a4f7824.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfydaxCRA9TVsSAnZWagAApr4P/34SDNs/LvXhbWeQmvGH\nmw8QbHNVnjgw88Tpi4jRFr7yDbRP2WsvsRdCn0CxkrjkefeqsBLKLQ0jWAjq\nvSrG/eaHsCNeLNVUbk1hBx6N0YSGlkwX6StXv06ev12lDyA8KqUEHMT2VvSN\ns7ILXDWI8vY95T+b4AqeO5CVPvXH86NSAEnsD7uF5tizac8pKhNXcwNSvokb\n8AffrqvnavVvxutg9SJCHsWb6nmF31aa5PbXnAByUPvlTHdmtbAcOD+/5e4s\nHsD7SZo9XQGTdnaaorf7LTxoe2jdZPLv2LftOlmo9FpLEZCMAN5I+b7zEN3g\nbqCjJOq3SjL5EAusrEY5kph/nJ2aBuX1JiRdszestdVz+Qq12HN8Lc9Bh2eX\nwktWiLzgAwKcRomIOR6Vwnvco6fgE9uXq/NZvt9VgWI5+7oKSAdatXfnBtki\nyndy3P2L4z07h+6yK2mSG1Podq5awimzzUtcKg0yYPFY50N2GVfKTD95UD1i\nBUkhA+fUpC8eZ7Xb8Zv8it094KRUJ43KwCiXjdGANS0Ouhy8VZZOef5LCgMJ\n79sbJrZgQw1UtwK4cYwOTPV5dRFI39x/5OtXJflQYkhiaVT4h9G57Pj+3xQC\nGt4ps5WFSMLrer9PSvJ+IKnoq/oL8TSZwKCbuejYSQN6LK/rzOE3PqabYZJe\nzI2q\r\n=X2Bb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDp/tW9Wt4aS4A4c7ZpfD1OhAuq/o3ybWpYEwCMjw2RQIgNCPoc935VNdEceoLz3jYYiD6NydMYwcdpKzGtDaD3qE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607063086-6a4f7824.0_1607063217032_0.17763702254859237"},"_hasShrinkwrap":false},"2.30.3-next-1607065296-d55ec1e5.0":{"name":"@xdn/core","version":"2.30.3-next-1607065296-d55ec1e5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607065296-d55ec1e5.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-PRQ9k0w+YIa0GtqLZC1qOkgLIT/4EuN8Msbxali7v9TJPeoR7pR6F9D4NQQXnEPXXweSDYBH+nCtUhRd2EtPdg==","shasum":"ef21f8977d35873f26531a3c294cb973ad18a585","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607065296-d55ec1e5.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyd9MCRA9TVsSAnZWagAAYzkP/jIlLqXgdcTXvYvelEas\nr5yeO1VR/20npHNCiz2PBDpGXlwaH6TXyMe1bx1adEzy6lM5fSIamkz2esqr\nIPnUnrmWNQmDkm3/9jrgDiVD7FQwCFuuCeTncCUjkhyp+SNuZ61SK/gK2t4x\nvwqCc5IA+iiizpdeQ0Hxdbb24kt2Qqvaxbc2RtWuhAwiyBWAHQYDt7kCnKD7\nvulDCUUnHtAqKKW/wA8KeeXy8kpkk7leVFuBix2eIpz8Qclu6Qyz1Y9lhqAo\nh6R11+5HCdiiB4BCNt/XyrViA1qXNjEoIZ7R9l50JFklIwd1IPr6UsYOSSzf\n19cCe2Hr1iQiIkFgGaxzUnGExtXDcFOBUM4ammrZ8zBak0n5kqIlihfGqYPs\na8epM38tLbZMkneNxaOXcpOQn1OqlizJ3PG/kHC0zy2j61iyToR/ygxMiwyF\nXs+cPumFjG9hZ+MmvBbjVtpjlw8n9bctSYh5ZpDtJxtdSBHiUae9DhmuY+Qj\nNLYXzcPMymvSFv9w1Yz7qNievIOBkYW2CmGUOA5Mr41pIRPSYbjJmaDII/mk\nQ9oVRHsGU6Re4AAf+CYnY/4Dj8b3oNN8OcISEwzuupRqjrT7oeyVrHzag4Pj\nSFJmDieYBCQb7dmfaosneWWtnzyI8knDqssJfH+jzPRPYHky9wkK4hkJvRty\ns4l0\r\n=QBJ1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaxrB2Zikt2RqoFsot7bxLef3gS0ZHN0T6E4KqKZgS0gIgDAJR2UbyPHeiRdvjyMcbv5L/OBFsuwU7UkrYFOIUFsk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607065296-d55ec1e5.0_1607065420168_0.752035382948977"},"_hasShrinkwrap":false},"2.30.3-next-1607090686-aba2ab9e.0":{"name":"@xdn/core","version":"2.30.3-next-1607090686-aba2ab9e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607090686-aba2ab9e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-a9XHAWN4V6UHhf7+LaINaaVsdvlMbK6WaQ1LQhDOhI4MEoJjX48C6EWMPOaM+2nsPq0/Y8x9FVfUKViC53u29Q==","shasum":"2e3701bed6208dceb528c0fbda15d6c18839852b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607090686-aba2ab9e.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfykJ3CRA9TVsSAnZWagAAXXoP+wXM9RYQOzSrGASbY+hu\nuQFwUh+16rpHRP6fpOYpo9K5UbS6WJznBvqI923PTRFgwoF/eFv2hpPNeY47\nJKzke8HuWQKD6DY2xAzF8bB2x039wSFTnINAuB7IjrYTneAo6z/mIgI7jivd\nCSIpcp6XNXAwzgFgDJpQqMxdq9KErhZmB7GyZH11FBoz1rFOMlPYL5QKrvq8\nS3ocupRg88oWrXLECt3K9WNJDnugbX8aaeR+csnpCQllO4lRcgyQNwkqxdcb\nxbPoJcRLArbTM6eKNlj3bY/Ix9QTHCNEgX19kN8Pqm/GMI8DD7ic+OUYv7u7\nx0hPZSj+SctRWpfQ9Qoqs6h351ZtG1Z+sIlJ/aVJC8AVE9OGCpGtQQZggbLy\n7C/bOxBCJ8ixCWzC9DAmDE2caYeF9No6NYL29j6pv1qJEXB6NJHFzNM36riW\nmbmYHagCsQMPVe3Gs5gObpgJ5w4+LiAAdw86BEznrBPwTiS52W3FPbjRY1bL\nMKuD3Iw+BgT0Ax/vR9YFEfMRvj4HpICAGb2NSpa26dDOaEqbXmu2ICUAx8wl\nnGBI69X4zcg3Ay+6QnF6qmOvGVyN5xo47iiZmMrb2LD7FiFoDqllPA4o06Sl\nqYSkhzD/YkZYB8HiAESW4zFHt98HDTw5UGbPROsuMxjmSsOf/B4yFdA0bUbp\nBw4x\r\n=MEVA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAshKYQy0bBwpC1ncihivkRIAldU7dtwO014IcfNhAFgAiB119YQcxJYip6TKJ3e2ImAtn8pwPb9Nkq579BIk0JwWA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607090686-aba2ab9e.0_1607090806727_0.2098072333343699"},"_hasShrinkwrap":false},"2.30.3-next-1607091445-721559f8.0":{"name":"@xdn/core","version":"2.30.3-next-1607091445-721559f8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607091445-721559f8.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-dGPtt/XR5P1kKBX08z1+T7JoFAiCo4EvTNiHCi2E5AYwY5yBMLjfBGrj4rYdmimWH/yi9KqwlRPaM9664Rd8rg==","shasum":"abf1c00834356c194ed1353cb46372a684273eb4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607091445-721559f8.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfykV1CRA9TVsSAnZWagAA01kQAIyGsgG07mwcEFfREiP+\nQuPEAjSgWTH2Zk8uWNjwqW5wXu812XYg1SwnqLc3MJcCcZBBXVVOjUQxZgbD\nRMp6f18OO0EIxH+o9fJmWvZTEyKsy6k38ex+CpIBgnHDIcomfZ8J2WW203Yc\nLKqeSmhEsstShb8NLllV2RycB/HIOtULSAR+4neL73zr5fbe7baSM3KahUir\n3cUgvAyLGXX98m2zrIKl5V3Dak/z2ZPOCIXo+T6IR1T5AtWerP3NVqd6gJTq\nMG6W5b5Ns5WtkWch4bk5o7bP+ZHDWTOd+yW0v77A4pfNBY5Ddpd3fOd0CKcQ\n3ELVXNfsyizk8ED7WPgHuuTP4eYmzES6QQHiGbc76SJx927e4fNUPJub0jfg\nzlTIsFuWFNUTIxIXsHAeV2Ow24I4f4J1GRuePQtmC6ODU+fQSAP7HKcRkxhl\nGn+cw+aWCAtv1EVIWntyz1dzanDgkbiikxI9TWUZ7ogM/voT0+FxerwTe8R0\ndoqLZpTtJ3voW4f7RbU/jrRMArOFArWN1HXnh4w6LdKNoS8sVwr9OAHwFH/7\nH5ozN3Q7jO3zmYMM3tej5UuXqhZONaq/3TGkFOJgxKhQmV2LHm4i/zeZ9+Qk\nhyRjF4StnPjvrvHp3NLquYu2CrfLeUG+tdLaV6L5RpICCYi3Z337/1VCb453\nq0Hj\r\n=dUqp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMnKgJY1e1Szj+3Nz5+wy9MrcpnBAaUYBeGkh+IR0QXgIhAOtK6culE9ZaSAGP2ODR6N7MQH9sO99NCKBJCBTZ19LK"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607091445-721559f8.0_1607091572873_0.43806271966209853"},"_hasShrinkwrap":false},"2.30.3-next-1607091887-579ac520.0":{"name":"@xdn/core","version":"2.30.3-next-1607091887-579ac520.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607091887-579ac520.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LhCRVrM/wbLZI5gVxvsD6HaxJoIXLKnJYYdfBhUJliBpdN17P4wvmKihvsznshDcJLareReCxBwf3KS24KUUqQ==","shasum":"e31bc4b66483fd2b7337f657a6d28b541f0cd244","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607091887-579ac520.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfykcmCRA9TVsSAnZWagAAWx4P/REOV3wVBUYarduecsmz\npV/6PHHI5y1L1+EOhv2q6zQc9NvjO4aycbob6Pf+RRoDQHd47kyuoz0crGul\nvatJxa3emfqtsIjuYgDd90Wqll8LOaFO0hXYX+r7kEbEMKFBVD+7p+V0C4kF\nHlnFsKGhjE9qTXHvS2U0OIWJNcYSk3/VyVPA6pdkXCDX/4/cj+BAGAmSWChq\n4shwu5YoGgdnqIxDA4W+QeVGGdu7fb2FcejdBTkO2rtERuPIv1jm1Lz7qyNK\n3+veRSOeNCMqkYrDNZMfn50eKn1coarG5ImjHNIcnGq+lcMWhFCCTdc4qdj8\n8rJW+sWSHZhtKLrGVAuSI1vvWgtYudyzn76NKiYrrDegk19pTBxVWsqVSmPR\ndV1SOwQEEvVqtSy8QKZ3tCVyIWrBktUBNc3RHWJrg853N5RSORXTYP4QIlJI\ns/PTC08XI3RVAy61/Aaot5bE8F/CzikDan2rv489jdHqJYO6bHOCoEsNWiSS\n2YadxX7HhCo8ClD05wbmiflbDA7jaCzBeoMa6VRYWZxp9/xcJssxQKAA2YXB\nlZ2Wl2t2xIMwRjUUBC2rNzTaHVk9b+82XOkBuN6TmYylJepqntHGSGhrmUdc\ngr5U2dQnzVP5APiPwDulMNsWNrLu3VPheb7nes4zQv1I3xLUZoCC8PChmdQW\ncDmJ\r\n=SZAk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFAXuW82mf701eSOu8DzEFAYLw16WgsmHTx8Z1E3/QdIAiACNER5qURSaD1xclAx1T68oI7hiPZ0xgQBdG1XYhAjpA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607091887-579ac520.0_1607092005521_0.06274361817018348"},"_hasShrinkwrap":false},"2.30.3-next-1607093069-559cca3e.0":{"name":"@xdn/core","version":"2.30.3-next-1607093069-559cca3e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607093069-559cca3e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3k/GlSSoXcNw6zSJgRDXr3BitECb05ehA59Q9DznA6aRHMwk8xWYrIQd8Q7FpUQGElZ6TqFg8HUPALZdm/m7AQ==","shasum":"9a35c535a9867ed25fce201027e6ce826e0f23ac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607093069-559cca3e.0.tgz","fileCount":169,"unpackedSize":651853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfykvICRA9TVsSAnZWagAAkE4P/2q0Rv4RGO/1ZlVbwnk3\ncdKypjIQqMhSJIvrbBqJdeUaisxzCjzgDh9Q8DkCVRPLLs7QA5GoGWFr4kJV\nG1cm/ik+4dMK+0yzsVAWIdqTjnepzRtLm8rRqiBSnmQwIdkPJcCv/IbxaWbC\nKitsaHJoR2sSeNdxS7wGSQZsUxMxrB5QEj3mbuQ/RYlQECHO1nkOkhvq6mCx\nad2deTtUF5m5PiAb00ZEVSUIuOWd4Ro+NVlSF0MOfBIHqTeJGx81qOL6vZSm\n0nqIuXu48vfzdh1Es0T80NPFNnDA7Sm+/m8LBcAGVzC3lmaPCbc2R7bXHuYt\n0acj8s5DO8BHyzMRlHGLRrJakm/sjnwQfHT/Ud1muRpnEghWRVgXpgwGYVwZ\nliFqzc7hDI+ZAx3ej/vN7gKDg8z4NF8TCFKRyElDoRsAh/ExliyxbyHvLIrC\nO/yTCBU2JjC0JREVGMXbih7HjJ8yjZCS7sQiwIk6cBHcNcIwdAPOtRAK5lXC\nkEkgmT6Q1Yoy7p5sKfcRMDePk8OPpkwl14e8eB4wKsNU5uoO6qxz0cvHetFU\nz/4bG3coJEkAI+Ref+CP8HlrB4+0Yc8jluRDLJgSOZdMOqvbwm+Gkb3LljnF\nm0cWuGTvXukVkhnbeGwso604na3+8PPegge/k/iIqmM770tFg03eCZGKUkdS\nkidS\r\n=jrTE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFHdHfrwVtBY0038aMt35CoIMC73VgnKI0riTxjJxtPLAiAuPsro/AiXftPTq/nDo+FRkOMWr9NrQr5cnb8ukyeP/w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607093069-559cca3e.0_1607093191382_0.3147989936226474"},"_hasShrinkwrap":false},"2.30.3-next-1607093345-579ac520.0":{"name":"@xdn/core","version":"2.30.3-next-1607093345-579ac520.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607093345-579ac520.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xhpT3RHYfB2NoUDtqF7zdFAyifDRW9INOlnn3/elra/uvPbU4cRaCrIImXgJtoytd0KMx9eZZdtGD2eb5T1B/g==","shasum":"0f6179be743e8dc74b8fd1e7e82046a1f73187c1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607093345-579ac520.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfykzMCRA9TVsSAnZWagAAbHMP/igdBtku13tYR5Tx5W15\nGb4okNE++07j9jq82saSBHryqWSo4Q3EI/DZLL55jv485OkxohnHtjLpW3oM\nUeQ6JXDbtdzNsAuGkNiA9alTDxyUCRkRTj8hm6lKBrV5SidRDIKLmwfi2/4K\nYKtGcq7T5QV2X5eOOkJTbgpRBFlvGxLYKBjAVC/97j1UhAAsQS82n9sjSQr2\nMk0ZgWExUtsgAA5GVhNtqHMd6/g8cmHzAq/DIyZqgL5RUGq84Yd5E67dFmtd\nxBEQ0KwiTJVcB8p6K0iqa+rpCK4biNzPRwEAk0pSrudi5OcqGTxhAeugCVQe\nxHUonUxEowTU2yJQ5xlmnW/st3DD/byOHu/m7qJaCE76n/2SF1RxkyqXmi1X\nC6Bn7savZjYUCHGVAlLtk5DZJ0qo9KEUztpWV8+rsuBG+Y1VwaeDWZc1SYlK\no4tIqyEvRUAeenRqoxMg0ry6TNUYtYhnh7qdV/jtCBPS9wrOWv2xKyL1O3Hf\n+AiYceeZ1uMR4eaESc3gqqiJDw+Lv4W/Nb7Ovb7DWlHZpHloBpft5mJKKyDo\nWTrdoZARiPTh/EieVZk6dBlWj5aZyjLERCXXUKCjXhOKZSIJbyaWvJi1GlT1\nQPi14Wn+deEdlIXmSu+7WB1J0h1Jz7KaDHS39zmJlxw4urN2A0NDJJy34Ipe\nzHQX\r\n=2gVO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWzdkrowtDk33jdhQAWsJ51ToKPd6dA7JQd3pmLdEfngIgGJ54vByjrXbhxj4QBEM/zTYDnfqUuFsrQU7dAuGaznM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607093345-579ac520.0_1607093452406_0.9404434047514212"},"_hasShrinkwrap":false},"2.30.2-next-1607101969-d9826209.0":{"name":"@xdn/core","version":"2.30.2-next-1607101969-d9826209.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1607101969-d9826209.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SOxOOYV6wLnR6tlcNtKsMoFyEMXUQM97dLqOVPAvoMJK4tXI8BVOSvxCea6B/uAUv9uKhzqhDq78ZPVXKeeO6A==","shasum":"eb0ad43401ad9de72cce28b3cb7def73bbba8825","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1607101969-d9826209.0.tgz","fileCount":169,"unpackedSize":639317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfym6UCRA9TVsSAnZWagAA4OYP/RcC34OYuyXBFR2TqZm2\nQmZULxNE7PgoQ8TYyJjkFQv7t/WvmhzO+qT5X/2gQ1yqnODpFdXO4BFkXiYo\nagQM2mmP0IVXKbcHlK/d2lbSKWhwHFLEtu0iSUUeHYDswTyF1+W01f4cyJWO\nfhLWQk3GGtjxdN2hLXhUta5z+90CfOsQCF7Mdi16Md8FiYuvmJDxPglZvXBX\nJy/Wl0HypSf82zIncD8cUFLXmvxLdq9PyyDXPZXTuCjsMwf+u++QfwG6t+b3\nFR+Rbg/o0aw/jfKL6HUucPDnrzkBxoX0izUaOVqEfusf9IWY35sfXFB4+fpL\nXkPcy4M74KHUFgJQTzEMq2TwPhU+vqLHpQ7hHsoV/54LztgKDU15Uif4XJwP\nGo2xlYt0adkc9Rc7cFYmbEmnrG7aVA/GfTPj6CGHUMuZ/GE68hrzF+4NK71p\nzX4WKMZHdtMPkTtS4MHUEBUtkb8sA+WtsiEBkB84cr0gu02ZYUAL3eNqa+QA\nXqpmu6kHxIXKqxbUFA5x+LuGC+haUueeCcnTBBuD9rSxQv55BT3eSfBTbTPD\n3IyYhooFxtkRcBEBN8Pamx1/L7qBT522NftIstDG0l8tbvmXaqmZU1L8k8iR\nPFeFZfL2A8Ren23irTtDH8GVip2q9lqBL3B7bTb8Qt3kcCTfOl9lLuq57yU/\njKmn\r\n=Q+eE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLixFtP9MMD4UL1dB3iMUYEVIb/Q5qMw1CFSYHRHRdmQIhAM7B6opR3G0u5A0DvxxG+qPSaqzW4HxFAqbZTutk8/ov"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1607101969-d9826209.0_1607102099350_0.8436431360216252"},"_hasShrinkwrap":false},"2.30.3-next-1607111481-cf5d1333.0":{"name":"@xdn/core","version":"2.30.3-next-1607111481-cf5d1333.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607111481-cf5d1333.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-EEvopeCjuCJB0JAA+UgZuQ+KLuyHZDZ8WOQFDuxi58hnPvGFOIctLe1Far82O8LtFni5usCjUrSqxM3GuQEgCA==","shasum":"0e5bd9d362ccbeecbd3dc0b36c437e1f01bed767","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607111481-cf5d1333.0.tgz","fileCount":169,"unpackedSize":652139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfypOvCRA9TVsSAnZWagAAn8QP/jcJUrLqIoyjHlIesGMS\ng6NyS35rJWQTG5r1/piwUpyXjue3LUO7kzW8WG42EnrJalsEK2Fo1s072/2C\ntOPUJ4nNTioHHFD3TQyWBsddS82xJBLMzl4lfVm9RcogvKSttl+4RVpw9OHP\nMGMSQJx2nnLT/h2J7Oo/18idewbGhnRJim3pzE8JBelDxZflmLDF8JX8pgvS\nGO1FvyN/pJ7lp3tZKYFAp5F1yLZTQ9Qn7vikTt+mgmo1dMCogU7l7PNwyBTe\njXIbaaaSFFXEieY4Z/q7phfRxOB7FYv4zCMFuFK4RxOLEccIQlHeKsao8bp+\nc47lRpT8BMvyGHS/j5wpRh5DfGTx4wXj1LJ8D9+PPSIP+iWiu+YRNBEMLQLP\nwTEy6UhVFpFxJzJdDb0i7PXF2QHZvOaKPSp54qM9Q6nm9gwiPpJoD/kInBvr\nW2DDBwXeSgJLNZ6nlZVdAf0JVhKrU6pinIFJGPtpQtqClv78PIUl86MzZjph\nswKgcf2OkIJdsOJyjV7/sHG3STU5QekNvNA2q9xs7Ze72eGOq6JAy9C0ROhO\nzCDHUkQPu7UZOVsGiKjriVw0zq+83T/Rn3k4Dzj6TjTDsJcexzzamHW+OUA7\n+idDGr8Cy+hjnc2+1mo3kAd9PwWMoPQTWCQ1WY+zaHdp4Jft971PP0v4c5Ga\nUFkv\r\n=6O9z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWmw5t9AwX6WdGBVnJqRyUhXWtKP/mWfq3wGAKaFcW2wIgIwGQ4z1L9uHe62lKizCFjjt+1RmxABvTI7QeI/2Xc98="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607111481-cf5d1333.0_1607111598890_0.7993088184351669"},"_hasShrinkwrap":false},"2.30.3-next-1607339118-47482c77.0":{"name":"@xdn/core","version":"2.30.3-next-1607339118-47482c77.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607339118-47482c77.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0IOjQyVrIkweS7Mkh0c6xvVzZcGnibGR7XBTyh2EQ0/tV/AHJTsIrePS0vOMvsCVVRH+XSdvjzuMXGMyWNV5pg==","shasum":"3ff6b0ffff321c1c300b744becf7a926f407ec47","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607339118-47482c77.0.tgz","fileCount":169,"unpackedSize":652139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzgzpCRA9TVsSAnZWagAA8KgQAIu5C+nskWK8k/xiUUKB\neEypq9N8ZygWQ7SacQM2BK1OUSLFDopSUcfze4ZHJC2SOcKF4JMq6PXl1mJW\ngCVhwcbg9O5qPSm7HLwfdMe1s1nvAG6+vyWuniKMpeIhTnYLfpsW86PrgFMb\ndDu0/Fc5BEk1loIIIGHLvBeIrUg+Aa7dckOou7Er/vWS8GexsWZfoRYyp9en\nAqNhXXRED2zLvzMSMMwFxYaF+qanvAFGJKa3jh4C6wGR1YG4b5rzBGeOppLK\nUXsT7eJUvl0OVeJy4HxWnNggbFBC/BeKiH8rmxypJ+YH0FRKZyGmqzpTSwl2\n74MmpwFyAmJxDNTLXBEb2aJ3Oa0ebg5HpZnNHE3UmY+zscrrg3XGxYopS+cy\np904Ex4LMqRwZZdo94YqwDOzxtgRPbLzyGgIIqGl4SXJuOcbmHZjG6u6GhgH\ny0SvFkl3fcBZWmbOVVnhzHmN1myosLS/aWMKRmFcoQSTcCUCopvSTuikde08\nmCcHJMt5wgzbU+C8KXjjsPOP3jKIyZ4682bEjPG4hICJPZiguwh3ti5cz8IV\n/Hc1Ug+E7+w0F7K9CFRrnW3Y4gh149teAHCxJDpAoxr6lAXGYOAtf0/cPy4G\n0yISgoOmW9nfLVl8S7EFa4UqtZc1cYQHi9xqtHxNYMXbjjUh2XE4F0Ciypmg\nY/6S\r\n=xa9P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClm2mYVLZDmSwLEdVlskfzSWHSEdeBRol++ILxLBigygIgEMW0EU1k5nmA7icyNdJLHjDcb3HSxZgyj2rpyzLlt4Q="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607339118-47482c77.0_1607339240589_0.8433146763586776"},"_hasShrinkwrap":false},"2.30.3-next-1607341377-db21a60e.0":{"name":"@xdn/core","version":"2.30.3-next-1607341377-db21a60e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607341377-db21a60e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gVh5poIYMhwTzJnqCXvmYQldwS+hsvI6uoi93OVpoiE5ecP0QAVVEFvsgNn2tVHetn7usXgsfqGVQal4dRnNAA==","shasum":"272c123bed5d2a44d610fc842ea4a3cfbb2bb770","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607341377-db21a60e.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzhWxCRA9TVsSAnZWagAAW/wP/2T+HmIZSPggxyM0NDeG\nlahVH6/F9tK2At3xONtrRod7EPOCDgouixtozuNc/LTcWVbWihvNNctS+O3l\nOxQCUJHllx1ObPzDvxmA1yh6zKjDuC50g4IoYnJr+OxU1BEGXyQJ1LiBJ1Kr\n1d7Tl2/mYGv7KRgtTvs/MkciOIxhb3xg9KgsqyKiIMF74KIkl7NGAqyEaeZQ\nH5ZIbXSTn4Wm+vuodJisXnyb70qZegteR8UVP3BMNxaE7p88HmnA0eeDo6By\nmNAVvGOsDsNybIyjtW6F6w1UEu8xJymZSeUpM5jyhnbhEXf3BDQVlw4PyGoT\nnASnBwiCAim8gkw440FblbN6yvWZNxYwcU76T+zYfd68nECkBTL1o0SF28dT\nHeBk+2dNDxM4BPeNRN2s40kXJDNQZ1vPSt9JU6UVUu6HKq04khq6LVPSIq7v\nax2qbRhcvQGumE0a3/eU6mQEiGMz/YaMAVyuu+opJXTU80MnNjxJDGW9Nxna\n1rGv/iTFk/NYi709SjQsgAefB0wLGBLEv8nuubYcYPECjLhHoIb+fH0mpwyN\nef4kBW96hEjfAZ41czmalc0YTpeeCmOpysk6tGXdGtfMf8HuHhxRrGfdiHtw\nVssiAXD9y4fPp1oQug6zoLBmC6gQzVrgMJZmT2VRv3MnyLkIKPwPtUckG3lU\nAWcQ\r\n=YaI3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYqDaoRkUfJmYpMuHys0zRYTcoANuE5BR18rNvbQfB4wIgFJZS9WfXsGD8lfmcFhA0mhgNLrHJCH41a8EDiCJ85HY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607341377-db21a60e.0_1607341489188_0.3687996246297307"},"_hasShrinkwrap":false},"2.30.3-next-1607349437-49cca36c.0":{"name":"@xdn/core","version":"2.30.3-next-1607349437-49cca36c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607349437-49cca36c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+zjPu7HXxM0UiRewkYjZ8PwkUnJG/pagwkuJQSrEFabXG8eOK/lSlTf1QiVvZxEqXYCnxoMXfIXabG7ly5OTXQ==","shasum":"eaab8a67585baeff25b72309fd5747df58a57bde","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607349437-49cca36c.0.tgz","fileCount":169,"unpackedSize":649747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzjU4CRA9TVsSAnZWagAA5MUP/Ra0WVPUQfrp9kCPdkeN\nuAfakOOf31qpb88K2oqjQYr+jlpFgTfe+/o/KKvVvk0afG7ZKMb+X2QLTZo7\n9maxLJ8fHVKkjMXoW1pyc/Katp9G93uTHGsoMbqr9i8CRtTEaJ26akDP9Jkh\nXk0DsVDmmhe1w3nXV0ioB0MUzFDs58ChqYVzAcKdd431RY+8wlJaOZP1+ebA\n0Vn7PD8NxzgkVzobiHfriQIyXGAaapdY3pPrnNybwT3NaxUGIPbmLXiyrbQp\n+Us2yH3e31Hul1fzzhG12PYPcCjlXMT04v0wpGJm/9qZAzZn01NJCAolsl5Y\n6S2eBa5JRtal0+XQXf7LqLl6IefQ04/M/1fBqi83xR1xU2sjIVIqqaBv91xN\na/eTsSI9e1dzsxTiQyK7M618L4o/Ks4GKQG2zBjD4UCu1SXAwgNbKdqBpmAU\njAvlPsbi2PKFXw0dixfp3oLwftFnApfbIvi5Sc+WPvGnTZZj1sBS1m/Nf3p2\nuJ1sC6uXg0BtYF1lC1fZf0wDYCFX0D9OU07UQGxqO5nLGHN1xHAYSKWRPmYl\nPR/6gnbkR8IQ9QkNgK0L5ZtX878FCc9krmJVGFIcqmgLNvQ16gwnYx8CZwwP\nNH8bOtQ4gX2UW7BVNfUqm2jb10VlFbQc4jNhit+lj42kW1RrAXu3V4BRd6LQ\nA2wl\r\n=WEOB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAC1jZYgNXGZCsj21EbayYwjKRsxXzob+UvUIMIMISsbAiAD+UBdJ07Mvo96Y4/jE5cgH33HJZYdqhD+tzHMFwuXhA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607349437-49cca36c.0_1607349559442_0.389664584456501"},"_hasShrinkwrap":false},"2.30.3-next-1607357734-579ac520.0":{"name":"@xdn/core","version":"2.30.3-next-1607357734-579ac520.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607357734-579ac520.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SKmNRDFXFy6eA56w3FUGhPzkMmWNBkzWkAXgHAIlL3vLI0cD4XSpJaCggzETYpFEVAodIMcdacfzFOwIgSe0ZA==","shasum":"d4bc2902e563460bd2a2779316f3ffc5fd067873","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607357734-579ac520.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzlWoCRA9TVsSAnZWagAA2NkP/jEl6/ej0aH3i2l6JX8I\nKWZyijG5vmL6tEsQvLPn5jg1Y1HAQmFcryg2cJ1H67Y8eFcyaXuqshpBM3KM\nmRxVTID+8bMhl2zOTz3ZhlD9iquhQ+mfXJom3HPm5OTVhWTyfRQrW6LWBqnZ\nwrUOrjxPqmIbYXC6k9F2GPYSQui4uSgMYdA97XVGNikpQiPkcCSp5b2Kb0QY\nSdt+hQerat/4bLB7Xu/+rjYzLA2JCBYIWrEeE+6MAaDMchA6ZghBh9vAt1Zi\n6OHOGvU5vjcfTKXkD+BviUDK9X2x1DVqlXy6jWzXIDVfpAwByqvGZ8DTEuRF\nBvLRG4G5tH7gvNF5giFTGU55pmydaZq9jkJdlD6tvcnQm7y2jRUKAKmOfmbh\nZs/dNhdKM3IC8iBBHM0OO20Wv/7FFNvhhlWW2UDHGnx1y2KtshxCInEZ6iXc\nJhCgzrrgczzN/2dA/KIqUB3c3KYNBJav706t8krMLEirkivY/YJ8YC7ZKt7K\nIDaPXSu5G/ApcE4oAyBbF80mzwBFx0bN1O0FL6eFpOup5q7ahIpYmmGOajy/\nGzWBbSbp5b6GJEekLFTljLiCzKAAzKMkMQuDWzbHsy0b67R0c/SwBEBKiVdR\nw1aEaw4V2CsWX9yIySp0ZHP7Ki5UhQn0dhgOy58RJVEM8ltt3V3mRklSkJFC\nUlWO\r\n=NqUf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHUURCU43OMVIuWbwpVxqvL6FyXDQdAn3M0+D4g6TPswIhALameR1SOMyMxjClkOHm++LbuvSMT0AtijnixStLBHJ6"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607357734-579ac520.0_1607357863854_0.49259655777489897"},"_hasShrinkwrap":false},"2.30.3-next-1607359484-579ac520.0":{"name":"@xdn/core","version":"2.30.3-next-1607359484-579ac520.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607359484-579ac520.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-DTACPG2dRWgmnMxwyWRVdilaJhy1oFSI9nFuquh2opd6NwmFTAi/d936enQo4aea6heC6o4XjbBdvz88+5k6Aw==","shasum":"d712cd0188407ea154382b16af8950c21444ad37","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607359484-579ac520.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzlxzCRA9TVsSAnZWagAAwqcP/1PDmjwoORAMtxpyGkBf\nCLCu83ZLddBfETbwrRYa5NL+xitBsDWOMIXxdTVDFZjpDue3n+tOJBY6m5Tn\n3G7lwT+N538FB/5khHKZcDR0QUFGqlGVI/qC11CGdxI/iBE7L4J2qu795Ngi\ni4cpyXG+Nvwx5JIMh5S3/RomZAjxPTupQfgFB3iaXoXvflt0W75UjjZq+vHf\n4rfLbJWwnhreuS34vaCFfHbWvjgERFOQdWbWmqG4liT5XP0b9E02hmwMZASq\n92inIOvKaRLXAtYgM8wtv8wSYBjHkt56a6rxyEyyCSky4zTZ/9Y28JEQ+PgJ\n5VHrrSX7RFkFGTTN28FQa0by6MSfTMhymazdRX1N2yfhg6vdymIcGiyJlrST\nkj4MLZpyv8ZiFtqoSlLQrUWMpB+dGW+3SScHRyj8Rs56rnEGGYuTA996IPhl\nUEl6Px+nE1bgmf199t+URMnTg5DctCbfStY7aRBlzPBbd0LPhagYrhS8Kw/k\n7kbjgKyxQpDGltq9QLeJ++gcyJCuwrJxylUTgFIBrs0taTlEuQKMMrpDVzZz\n4FTVK9KMQm9kpqq6ccfc+McZ8c+azHPCSCzVXggitBywW8s3WXCL3inMS4+a\n2ZnX+Di9W5C2h0DV3mslkiUESJlpx8ojBe2WoS64SJRKT1l7Wlqjc4jZY6W6\njKlk\r\n=1ywN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBFt3xNh3A3i3HNLywKZUNxuY7UN9DxIewqlQEXvbX/CAiEAqd3ahlifGB2Oc9xxQVK6GFgibWAr5+RIJSO/987YxbA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607359484-579ac520.0_1607359602833_0.05946685462938506"},"_hasShrinkwrap":false},"2.30.3-next-1607361800-a7da6be3.0":{"name":"@xdn/core","version":"2.30.3-next-1607361800-a7da6be3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607361800-a7da6be3.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MK9lPD77+ogtxJRHLSmUOUKG3zpb3MjcND3cpWaIZp437ujpshvlea66z+v/DtxSy+pXHg0fmYqLDGTj/bUWMQ==","shasum":"70c6b297da49cbc6402bceed9117ac4220495853","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607361800-a7da6be3.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzmV9CRA9TVsSAnZWagAAjsAP/21E5TKCJ186yrsksPEh\nq0CiiDbZxpXZcqrlFerFYkDO7J/xijgNTTd7zYQGOOSpLUo66X6UREARnBms\nMt7cO9vcZo6oTAtagNLWhmPIEhIqXQk5wBIZAQBiwyj+qrT1pjq/JbYW//oV\nqLK7OAUXihr2Mn1NitO0DwtfsPnIOyVzSxBGS/WzSEjP+1tNiXew0pmk2Cq1\napO8Et8EW2oc3AVXxcGk9/PXhk+AcfBpBBVFbg6DwY1tqoDB4MC5FVapfN6u\nNtXz7uqyK3Z+Ez2w/L2Lsg+GZtSv9wBk4mBZ6/XUKrNXcDNHg9ecxQ1KnJ8O\nW5RShHyyh4nKatkbQo+ORPk0Lci5ofxsv7KCWxgBbuYKj2RS2duwFFvWc5mn\nIvZcxIXkt10RaEPHSBOCmM62QFdxpFtLs4rN8dmS3+Tf0fYkIQp4LTxd8ja3\nSVTVDx9+h0auQh34l4En0A3Z4ALoEpizezCLQZmEVV2gnLuGpo3NK8mkAA+R\ng2T51ZXqX6COrlpekvFUu5Gkb06zkl7Y/6xBTnUPNY81zICdPKPFqdt575eL\nYPIoBg3zQ79w1WBx5TnZmIri8TPaUdCakTUpXHHREDB+lNVvguZiSKoqNdJA\nJSCKwuS5DDH/hVnhQ1vEcGLPqOHOf/a2yEvdImjM1JlLKe2CFF8ci0VUU83z\nmDpg\r\n=/nMF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/Nh6G5K5kF+x/slutXBgoNgZnNoZ+tcotv0kR5+C2SwIgOUOdTKWZQL1fisYz1etcR8n1WKAVGVEH2skzMBc673s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607361800-a7da6be3.0_1607361917046_0.0859163271087997"},"_hasShrinkwrap":false},"2.30.2-next-1607367706-04a7387e.0":{"name":"@xdn/core","version":"2.30.2-next-1607367706-04a7387e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1607367706-04a7387e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kzJHgHFGRgQ4Rl7hl/8dg0eFEyhlhLtNhzTEbif6KKuXnT9kuZ1NmfzOBei1ZW7VKhYJfkWNMuarJb4pkaUlZA==","shasum":"04b37dcc18e1b44bd3de6e85047f742c00580db7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1607367706-04a7387e.0.tgz","fileCount":169,"unpackedSize":639769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfznymCRA9TVsSAnZWagAAcBwQAIsM7gPc8ja8rAN0VsMB\n73T+9qXSRELFUgAgv5YLcoKTzWR5GvMnfL1yBbTnfWOTcrxBAeiniuCZ12JD\ntmwrGXX73NlMdtNtz7kDemPZYyT/6wJD4dEp+YYguxyZIwVZ/JcnwR6efL+M\njRBo5k7VH03jdMEuuzgVy+2yoVkRXkU9eqb1CnrkBqujF4pJv8j+dl5sGQ/Q\nhox6CUsTfs2uBF492MtLQbsPRafCViqvqm2OOnnDXlLPoStownxFrq2C7xMu\nAXlRhdfTszlzSOf5JRzY9TS+7s1cO0ZK92FeLwLpulvPW7iPButXhDzIwe8e\nD3w4D5eRGwBsOzqp3bAML9laDB6pA+uVuMaG59keilep2uyeAYe6e7CEeVI2\nTg5poFcN2dr2/KfjZLKeSexvMKbQLKINGPTFmY6aI4E039LSxFsbgETMmMmP\nKy1y36dkOUIaZ9OD2JaCS7v8TFeYHdMuWaAeYH5DPWeZOnC2HpLWsFs+CpHm\nXXUc2xTMmEsl2ZnSFc0632A3ad/3yYHwci3655Uus4l2oDumJB6MuBf6jrK0\nsmjRFdwq2uzog7AGPwbyZqnQvCfsRStVc8an95sRbKZV9OoDkjrEkkRxbatQ\nmawUkoiEQACKkYde6CuvUb8IEddktss0m8Lo5ScKGjKPmzcRTkkCqM7SgEVD\npzFN\r\n=IO6P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDffpylbBI8YMMzaxJqE01le+81RqU7dZsq7H7V8B2VAQIgLTmyOYg3S8WqbX+liU5niE/vsVxBFZMgKTKgyPGTBGk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1607367706-04a7387e.0_1607367845662_0.2048107050189012"},"_hasShrinkwrap":false},"2.30.2-next-1607373864-1d1b8d2c.0":{"name":"@xdn/core","version":"2.30.2-next-1607373864-1d1b8d2c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1607373864-1d1b8d2c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-fHF7LmoqTQ7zJWS4tDbLj6AwEmTYMcXfAfRxoLJ4Qhk6U/XG41SF2cwlu1MiMm6PFWsooNrirSE16OSLjr2Iqw==","shasum":"bf1121f4f3fba8627ca8795e48f5fe9187ae9261","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1607373864-1d1b8d2c.0.tgz","fileCount":169,"unpackedSize":639769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzpSkCRA9TVsSAnZWagAA0lMP/2bRjBl7w1WwNt8uFW71\nd2vgauIHrmMYSfitFaPe9s7zIxW8sFICdMaTQFENJYpp/DxOP1uRO3Mx29/0\n0oi3zPy/aJvs1E45hXq9erfcT744o6RaUfBW6zJPXJJZ6q24nCdt7ogAi2fV\nFKAaTs547ao+Jc+djdp3B/SXAaCQMS+2rSl1owp6FG6k1cTW6BXUVljLT8BL\n1KJZMppilgXL3jibKMYwjbfX4QJZPYWwYwkSxlhcz1qwAONhVwYiGUtXBfOP\nVGL4PZNsi1lUx7wVEKmtI1BKxNw4vUn0Jhc8bolmcWjeJZuxU13apM9+eaH5\nC6yLSq77VYhAbkzfzccTL/CzxVIgsFy8776LEfTIdYEDhxqNi1fyNU8vD7mh\nfipO3mVuYUwG2q9uzaJdJmgAkrJ0EKTdyE4GIGMJEsgxkKDrq1sqQsLjINRl\nUwt/l3ACIKTf+UefGW4FRvsJXa3v2BUEigqxGg5/5t7enwx6xFST0vdTowby\nClzLpJNFWnW5vFldsFhSb2oOUOEuPQc58i1pN67QmkH0HJb3v4XsZ0zD35GJ\nnP2SthoxTfjJqPyhVN0M65SYEqujqVXpJX6738Ajz56EZP5/JKR5kgIrit5l\nJXxg3YBr4b1HJRFWnptqJg3ICLWQPyWlaF2cmlps07dul/4Xpd/VrjIPJjkL\nPir6\r\n=wEHb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID82QAZNDnpiS7z/9bdEVxmkhY3/XZOh7nd3vchib/pvAiEAj17iOB85fg1DYVztu9EXrhUtt8k46InZhbsj6NEzQvY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1607373864-1d1b8d2c.0_1607373987755_0.3055869021513866"},"_hasShrinkwrap":false},"2.30.2-next-1607377641-34dbca27.0":{"name":"@xdn/core","version":"2.30.2-next-1607377641-34dbca27.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1607377641-34dbca27.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6POxHoPRsj6WTgvw/9G4jenU8SEodJPjksgXohrJ75yS75ul+/Ad+XVNAcxJhAyVrqAW0l8Q2vQJE+xsTruMcg==","shasum":"469d4a195c4e2c33f4ed739a42fbe0eb39d72c21","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1607377641-34dbca27.0.tgz","fileCount":169,"unpackedSize":639769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzqNnCRA9TVsSAnZWagAA1ycQAI8AhF68U7u3QhLsOx5Q\nOAYIZ5xtIls5gqYJo1jL5jptSiomLSn7sl3CoKnrfxqYjNwl/WyaE2bBIbyY\nPQB76v/7a12+CeAyvWV5WAnfLVkqQQ8FmNGDwKuJggsv6MEHLkXInsxIEglc\n9NjyVv2L61Rdhgxlt6A2rxWdoTVn4EMcM/uXdOvCAoYAH1s+iwJNU84GteuL\nTTUZbA+t3cI0EN79rmc1jFi9sri+ef/jfH+CDMI432JcHR/+KPLXv7eYTUF7\ncA9vnCD0Dy+Fj+GohMqfgDtvOmMOaxC4yXi8/n0m2u18KYVIFcoQa3CyePh5\nrM0fF2JaR88C1ptycy+UmedIc+p5N0BF9Bns8aEohicYbQ84dBOxVtI1c1Fb\ndiC3NmZI3z1JztgeX10e3u/9EcKFgRaCwcSTLCx5Zt98YHdk5azPqrocsVBE\nmLy1G9fd6JUgUfmVfWDw2jbub/QnQ2ykZp2yEQUe/o4qae0+0FGyXEbxB70w\nV/KFgZdUc65n2OwGu5G5zK2YFqaasRjORJsCNwHkP9LhK7/Mq3tZZtJyQkV7\n97U+2a8nnxDKRPzBBFy7i/9FBkRP34I8unSGxLxBFMwk2CGQXH+viXNO39WC\nhXjFEgNCDegjdm3lFSrfKlN2/UXsYSQLYfD2zGtf7Udb4qQgD3DSyQJ2jkT0\nTJDg\r\n=JdAi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/VyGC+uqfyiuAhzFS5jsrB9JJiiyEV+c+2GmU3jTEqAIhAOeCcN8XfNS5nIe5oEgoKoU7NchZcmgk75GWyPeuRd+U"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1607377641-34dbca27.0_1607377766685_0.14462392066772156"},"_hasShrinkwrap":false},"2.30.3-next-1607433508-72cc812c.0":{"name":"@xdn/core","version":"2.30.3-next-1607433508-72cc812c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607433508-72cc812c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-AqkEdcB7W0PqIrRAywl3SngNICwRmz518rUYMTgWGFgOLSnC7Wo1PK6YWrQYIsF45P4lPW1q5gDAtMlN8WXl1w==","shasum":"8eff8133b73feda4a9b1348a7646ff6ffcae9a78","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607433508-72cc812c.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfz32XCRA9TVsSAnZWagAAU1kP/1j5L/zsfewDT9KjJpzv\nt9BP+oDqalkdb6jlj+VkROhLglMoSuSr5CrUZx3DQYDB0GReNwDfi2URchqi\nLsdhgAAsPAeSvjazVehCVN9Xnxn4hL7bWQ22H3hJhQkKcPW29L/ooqZaQNiU\n1OCMdBUxlczdlXKuZR7jU8Y77ckUtYhfmxFsuJndB4VIOuwAjl/AyEMijJD/\nL9kGxqhew6KqPp9opnkfbeK6BqRIqwOBlKoJxR2dXgVf3iomM2bNPJ12HEcE\nfI8XL9M7W2EGpzmWsAukp1VazuXzzwdbBEh5FGC3tihRJqtyVcJXxE7GtTBV\nap4KSIUgbZr7rMgL9YSXtcbrwRqFlTO64mFARTB6pyXVSffwVv1vcxg2dOFs\noUSIRcRK8NcNfKIvchA8/sk53Nlwwwasv/im7L2GiLnHbmcMw90VsnzgrSdm\n0C68P9yHw0G/+93MjSbxBhSkY8t3y1i8rad2kOzkYGii6iQZfZe/PShT3kLx\nWUqtlb2DekxSbcibPlIfzg6AxJDbOIbMGPrKjrJVi3IuZMlmEaP9AA9XRD3q\nXOjApqyzoyhA7CBDOmV10VEDLCLzuUIr2ecBByBw8hCN055wkS378fZN4cQS\n7zGFi+zmuxR2bQoYi+0s5TMinwn23+crO47r1yTcKZcGKEFWkLJoPT+aVi0w\nHlVS\r\n=sg4o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEnwBtIeJovF3wLUP3I5YiFupWSr+dCysWDx27dcjvlbAiBbWs4cQxASaKuuCJ5qi06EgUmCdoc1y42JmhhQCJHHRA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607433508-72cc812c.0_1607433623000_0.21547060831812592"},"_hasShrinkwrap":false},"2.30.3-next-1607435329-8dc01657.0":{"name":"@xdn/core","version":"2.30.3-next-1607435329-8dc01657.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607435329-8dc01657.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4objSLNeM9XwUzdXPv+z0iDl0L8cZpSM145U1D4NvXxPgwL5ap+yD6vLIGmCML1seWGyQblIauvdCv2/GUh/Ig==","shasum":"18e362e8a3919a35e2e9fd7cae07eacec3ae159f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607435329-8dc01657.0.tgz","fileCount":169,"unpackedSize":638534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfz4S9CRA9TVsSAnZWagAApB8P/3RA9DxQ5VEVNaTeleop\n0qB3PUWJ5UflvoBiRRCIgT9g4YPjJeD7XslS93YdsN75rZQc56ZuDPMRMUQe\n0PCqc3NWmdhDBaPgnjfjOmfjcM0+jSd6xihNOUWgHDNVWN9mI/4DB5vTysFB\nTHOAN4rx8SRvtpeu7EaYQ5d6f1ba5taluRZolMQWVn6ujkK4yweuhO9qJvQH\nb2QNoZbLjkW9Z0DhMcAWJAp5Z3vngNTOHCG/qCIYNiDj7Dr7ywErXtNP1Enk\nxJc7VsB2/y4tZGwzoJAK+OKT0GNpieGOM6IZY/wKvpdqUaL6tqukBlnZnLeY\ntfkKhmh02hfztaDnJuIFPQ9aM2y16Mzvt1luxmMCMO4QvXyuViknizxmlJaY\nUhDHF298H4d+ujRbt2vXqW/B1s/5Bgve86mZn8M6Wfs+d1Oeyb/l2c3rqZSW\nOClW78vD32bQqiTyxzy5Vj6PghY+2FPelu3zvlZwozC8XtbnrOJqWzWo79gb\nQlLYOPQqhIbclRfQ+5sBhUp1aDTH0GOimrjhs+jLkNjXEi3SN+5SLjjCLjbc\nygl+GNmbecH03HG+e7E5NpL2Sc5PBemqWpon2XQG7txiBrzVx9s0v6Lo/5PW\nS309unBjjfWyB4k0YSG7WgsSZOVjM4EWAL1QRvpMabSLaI6oSX5ma/yVe6dd\nvlpq\r\n=PXTJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBj2B0IZCcmhTdVSbHBCDUqK40jX2vb3c4qhI1apUv9wIgBYhWklzqK2hNbrguElyPlKDnQ/z6S0doYIF0EI2IccM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607435329-8dc01657.0_1607435452538_0.49519926423549365"},"_hasShrinkwrap":false},"2.30.3-next-1607449081-c24ce069.0":{"name":"@xdn/core","version":"2.30.3-next-1607449081-c24ce069.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607449081-c24ce069.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4oE8Gz09B2QQERKl9EKWYLCqU2ytnpdDVt4GDUNn2Xa+ct2RidAi2FOJXHbrIIlP3ceekNqnww367++PJm0Tog==","shasum":"fd28cc010ba5c393b98e7f6814a6576b813f55c0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607449081-c24ce069.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfz7qICRA9TVsSAnZWagAAR7YP/jP9O4S2Xni2BEOzQ83L\n3XkFtg8ybzwpYaqTvx1wSUK5Py6PcT1BG7yvzd5oVRIadhLYaZfRaHORE5SK\nZEUZID8ldQBqFzXWf8FNnJ4My7WEM0mCfCgAVFJaG0YGKMCCS5M/I8voaJzU\ndfYAMGGUkPtyflIBFUyUtPxusdRNhp+KSd2Yu96ocWexgesmZB9B1Q5eTCPC\n0BV7+3s78g7TDFnwv48l2HZc/R/p8c0UWuPtjeMSqjLbpldC5DdWcuR1IVnl\njvnNoUJLxWcwtB1NpflsOZRSKV+4XV4w9/sKbYOMjIk4/1eHqMG8ZuTTORCA\n32VOfAKqTpbJws4nSpXTHPppeOkd6V1PDNE8srYw9Jfe8Evj2QAVOhx45Vkd\n/RWcMoIJw8scpOvIE7NhEaYcgKT/zjtjXnkI20oN4rYWbqJRs3OwYf0TV86T\nE0Lp4EbgRJKQ5iP3OAv9qSCFLpQx4wAg721L1q6TvHhWfYWJiV1AzF/eEdnm\nVknKPk3oAQz0gAvFXW7YaAHITbIFnUYLKu7O42C+WqHpGT8pksVKt0NNiLIP\nK1BhQ7GpkhhC6VIENwhiscSs5e6HGFPTqs1utBv9SoXTHWbsPt6kzt1N1g58\nPAMmWPP1Tsg6Zoxa2UnopXdU7oIWiAYsomJvtq4YOPl7n6U1rCdZDzpMKAjN\nK88c\r\n=kWPk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGHuNN2wpSDTDX8QbMPL4/k/XcYKsfJ3bJsObxCyo3pQIgMmoDwscZ6Zl56F75ZpC7p67pwbl7O+qB6cALqUAxLtU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607449081-c24ce069.0_1607449223970_0.12079368545440872"},"_hasShrinkwrap":false},"2.30.2-next-1607463092-1162d135.0":{"name":"@xdn/core","version":"2.30.2-next-1607463092-1162d135.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1607463092-1162d135.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lEsTkmI46KVztvbHQfdVuQTo5YYzdsvqgHMx2rz/vLRJWXKccFeoWP/LkpO7V/wd22HIZ2uBVn35tR9H0LjfYQ==","shasum":"708c470837a28b59da7e3ca573d0796a7524cc65","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1607463092-1162d135.0.tgz","fileCount":169,"unpackedSize":639731,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfz/EvCRA9TVsSAnZWagAAPJIP/AsoPwuaSqFNEilWhYCT\ny9JqWONQBNfK7mmyfChJ03ZIdJ8jxAN6iGtqfW/uniyYBpVQY50pJpTj3rl4\nCWtcuKRbfivfSqNBlSVqIWtPJDsdUsYz+dKSiFC38oGG7kPNALsZWizRASul\nouUXHsK0S5vN+YybkTiM1CuhDksoC4CWMEgiMvCP7mm0h6qHyeI69uXfllRs\nYFmc5p1HwW1du6juu8ou1N7jqKxRa+UQfMxMg3nV6gyQ3NFPcYeXWCDSPZPj\nuvAdmhFOn3FZaN1uuRzDd9JwbwY+AC7c+kG4mmOd2vdZE5fNr3tUUv3FvRf/\nhg1a/qmjTc1xqcb7ghhefFEWRyt/0ZFnVm8BeQqWO6KjtEnnxFIqawrzCOlB\nnM5usAVoJac+30ybLN6O17SHdtS3tzrhllk7fpQk9KLLy18dZh+G1xTi/09a\nhczigeuoY2SDJC6/zk4gwP1MiwO4y17Tn3VDzT9pNGUiPEaW1+5gHyDL2zQ7\nE0LtRvH5vrQXe24ERLeupLO6kK5fxd8p717LQr4jeEkd6bvRg7IWZkaGdAAt\nSDwQuy52v/dBJ9UsLrPuVMT0x8qGdvn8AYI3z7ui+hF5PqHaLcIKV9JWr0R1\nTtErgDlnjGryfW0QeajRkxlQnq1jTkpZhdTJNnJPSitpO/SaEuWWHuCTMrvI\n5rvK\r\n=gNKU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgIGSUBR7ClL10MqNfn0j6bsNiq94bd0m2sD5flU6mOAIgGBg7BzY5rIHdBZzvUxWzb7Sk8Ezm0uPJCw3fSu0uFLU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1607463092-1162d135.0_1607463215187_0.4561753061885654"},"_hasShrinkwrap":false},"2.30.3-next-1607512886-d05bcd38.0":{"name":"@xdn/core","version":"2.30.3-next-1607512886-d05bcd38.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607512886-d05bcd38.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-L8D+DUu6DqYxOZxYJpaIWextY0X5uIUF3IbWyhlbiZIQ2sbT0jFgQPFxGxY9c4+aOaXf90Er7hiPio6sTy8i4g==","shasum":"9ce7f57f189ce4c03b464b13bd0a07dec5a6c6ba","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607512886-d05bcd38.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0LOzCRA9TVsSAnZWagAAKLgP/3PqEfn6WMPEbNs2muNN\ni/YGu5HLLcm1OZTanVXEf0AvE+6z/0pa0Zo9Rb9n3fGtGTmQpS656NcJdUxl\n0TzkDyqBMW5M6WPMkSxjc5zFpZ72FPYj2bHorDEVVqbmD/xIayf3qRnX50eS\nl+YK3c0lC34MSBK3uJxpLsB/f92lcz2i3hiWF3FWAv9UqfInmaZL9biwxDAD\nDsmQyfVfmDqK1cLGaiZmuoRRttnH203izfRrT6hbKw7nGfSzce6rs/4nr37i\nvGdbKBkx5eX36CnihuNBm1eLQw6nwTiX5XN8F4/OokkgFQvFYeEe7V5neIW+\nYlvlj6lR4qiHavceCXCRchxWWfNybnHfk+wjWWSb0OkCH5EPou/7eXxRjPLr\nE60EqCFszaRpMtamOG6fW5rWytW6iyl6yvOZ6Rn3MaYc232QUBUighTWnfoR\ng9z1nxWbBc7iCJkqjpMOqsxstnvlmK1rzQnq85v9Y4CUlmUCGrHv75w0z/nZ\nv4bFbE50Fg/fYBSWMxv2fLyDLKFceDRUqGA2D4Ppgc2Cl2NJoLH02+U0crjD\nUkXcMGWK4XGi2cqKeARrQCRuWvtVVtUQVJdcepmXVtx7B2HprnLGL9hvpWhT\np8/kFfEDVbb49B2PeRYneQdB+COJuRJ8li1L40XiRp7/ewD7pUYy+Q2IsGk6\nZ5mt\r\n=6eXY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHDEhB+MhiJPt36MVJZWpdbyp1HWr4DGuxnryfYp4P1cAiBrAN2qTG4iXpClRLot75cWwWI94MkqAKjw8iJ2I6jtLg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607512886-d05bcd38.0_1607513010628_0.8083019524693986"},"_hasShrinkwrap":false},"2.30.3-next-1607513272-e9539c34.0":{"name":"@xdn/core","version":"2.30.3-next-1607513272-e9539c34.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607513272-e9539c34.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Y7py4XEe1P9jkNJKAO+axOW8Fmt1xQjcZ9DkfcSp6vnERBLGHbL+5UnFH7qZNCax/dgFqel1FX8OWsufJIaROA==","shasum":"22cb0a1f7c0de9bf1ae721a4db7b4801932c0130","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607513272-e9539c34.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0LVCCRA9TVsSAnZWagAAcJsP/2hXTbbBQTk6a7HUKCcx\nHm4VRV+yrM1E4S+f3a+3kprrBkwZz7ZTu0V0lC4f69bsBNlnNw9sJbYUIeR9\nTo4JmQGf9Bkmteb83XqA8pyRnIYGpQFJB3uGzhrBfFWjibljrQWgHnL1OPLv\nAPhGlV4T64cIcAF/jLCDPmaYZs/SZ3JJTSSjTtjbpNf8omxUDSsBDr83nEGV\nkLNre/L0OFe3SPkK/oTCqMJsV9Jo4go3IYdU8I9PnOCHQq/JFviOq2e+yuVv\namGsQ7RDPGdg0rqoZ5vICJlCJgNXhYItN1ZWgsAs7OJANrQN+aGzAe7s6f/G\nCUB6Qam6if15PN6Suq9tTk1ywq0dpd97c7Pt1Z3qoc7or3eZT7em9naVAJ/O\ntY5BKgNETYQe7heIkZCBGQXLiOq1p0pwyD9p/cXWoB0sI5G2BFW4rRk0vBlP\nVg95b9/y1iWJTenV3lbgR7rieUypljjjr+zbB3lp2xOQqx2hshJ53KVGPOsJ\nS7ba+ByNusKMkM0cWZC5Y4Ny5+tvLuKH5BDYhd5eVPRTW2FBxjNZyZPgIqq5\n8/vIQnFs1PB2z91PurXAVdCTdKrE1TCd9b0uMYWLbfqRX6bEv3qt10EAEd/Y\n0N4vPjzLHBydZSvgFyvs3I/rPMNu4E0llcn4bNAhwxxAOdhIbPZjwSSx8VTp\nV/VT\r\n=XIc4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIARB0LIuC/107skobozVjKTt8q6P0xkzjY7bVwzV6ljkAiAhmnGbuflTi8Z/UdhjPuYbw8+x3HFfGh9iB1wiCjPeXw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607513272-e9539c34.0_1607513409909_0.26758951083778837"},"_hasShrinkwrap":false},"2.30.3-next-1607515523-9ff8e5ee.0":{"name":"@xdn/core","version":"2.30.3-next-1607515523-9ff8e5ee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607515523-9ff8e5ee.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CibplE+7J5EFtBXfuN7Y3alJZ6Qk5u6WVd7rJf2A8Zp+vetXL+VSWRwjgFaLVVNU81G00qibCSyiXRRuZp1v9A==","shasum":"9f7635cc93f01ef6e10cf8a976a029803dc1a492","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607515523-9ff8e5ee.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0L3+CRA9TVsSAnZWagAA4NIP/A4iBEudS6EArPfNXcPf\nO9apQXiiHaN6/XvflLNlh+XtP1unnIWAIz8rmSZLh6l+bxrO7f0jzCsb9iH4\n5NaF+sdslJoFAEMhrHAxlEVRUCR8QHcBSR+de0rKRDQauhjvVb39OQAT6id5\nyKl8fj0hPuyyO24nXwXSEUv5Rw5MsdPum0/9KKmYxtZDoSX2QYXLmBnhpKCP\nnaPHcIdhpSb5u+9tjBQHWTLPA40GDJ18P8MFXWXzGJvq9Z/SYt6fS7Djdi4f\nB5mWDV8+PZtDxEbB2Q7WbU9K9s/a7DIo3EihyhmwAGvr2wcYgVYBf6X36YdN\nI4vyY7Yyd4taTxdSLZyhpwFu+hkUabJVbDsQBDCgh/1G7Rf6VvW3TRC8oTwF\nc4I50zMTn0MM5pwPtKJfz4KIdVxHfQBB8oeP+cjbB03N3160Kt62vTx1P5nt\nIGIYHNSQjRfRokfhIrD1CYnLwMNEZ/Fs+O11MZf1WtwZsu7Zixg2Ai+ofS40\nb0VWojGIB/vshEwWjX8mrfaVsMqmVxnFWnqpVbHbzQ0G6Fzerw8ZRK7sXk/Z\nnTrleo5Po4UBbx+oD/GfyhaMSX2BEep/l+DgL7YvtXdyvYuKNNIHceoLhJqR\nyqJzvknN7tkBxonLfSTXA0rG/ClhFZI2yemOM3fDIxEPYbxCdV4Cyv167K1J\nUKCS\r\n=4yN1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA5NLAANSY4Cpf/LDHtvOj7RGsba6RHYM4+MjGX9V3HfAiBTUskqSW6qYlsHhKfXzRR4Y8enEKD21rK7AXYYHfKDZQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607515523-9ff8e5ee.0_1607515645920_0.16231385490549077"},"_hasShrinkwrap":false},"2.30.3-next-1607516970-e40fe00a.0":{"name":"@xdn/core","version":"2.30.3-next-1607516970-e40fe00a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3-next-1607516970-e40fe00a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kfwcj2K40kvRaYZaQ8FFcmEdy07ctpku54GS1udEU/al/f/6t+v4ztB+ijMkfOQ7WV8Os0W1/WxlnDhYU3xyWw==","shasum":"d66769967f492dfc9ac81b0460f9d0bd58b257f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3-next-1607516970-e40fe00a.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0MOiCRA9TVsSAnZWagAApV8QAJ/t+DHVRXy5hKL6Uw3s\n1ZR3lu+Ns1NJswxxREblMxgtarLLphVQJhXRGk+lUl24TXROElbRNMBmialU\nu4ZMBj4uBkKGyLSmWhL3EKj/ORULvxtfW5ho2eKT8yxwYww9YGh+wa18TsgJ\nZnyOSEM+/FMfZE8+NBMpa4ZxGRuNxXUAjuBNoCzIULGXxpvTjthsHP55sXN+\n0/KczB8hEi66mwCWES7if/WscEJ/d4RPAgHUqJvNkRpYU6A5AqwqyhLlk5J+\nJustErAc/WgtppIbXaqLyrjtzxG3Y/a2NT2h+fuGDFWofRgqmcrT5BCoC3qu\nZXmjvs6NZjUQ/JBlOT8cti3D7jocFwrWpzB5oSdPE1cSdv0mwKNGE5fGs31Y\nlxcTKlrnE13kyCnPftpGiFYkFjWqSxCg61ypEpLV3LJomds+BOC8KkqbdiXJ\n7GR3uRow44VozhMFyrWbtpl79ElO87RbFG5mOU5Sb7LGz+4lawpWa8aMLb2o\nv8MRAOYLDvP2Uqt3au+NGNzpisUEkzzj7XOFI3GEjLXUooCyvQ/TevN5CuVP\n1PMtiY1EFN+p10XMYugD7gf76XXZMvdmlQSDs1ushrnQRkxyuaYhbFUE1vKK\nJWOGWINgZE1hw6/m6bDXGHlJ4lwWORoUbFGksEYoJnERcSj2LwRrJMmFrYDq\n0R9K\r\n=kjRF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICI1AlDrkP7rLzRqyJY8L6NK0UvRVdupBv6+4AuuhnihAiAjHoV8ns1JEOgm9sRC5KOk9HBYXIELMptKLWPJWxFyTA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3-next-1607516970-e40fe00a.0_1607517090387_0.05603930271949098"},"_hasShrinkwrap":false},"2.30.4-next-1607517102-836b4d74.0":{"name":"@xdn/core","version":"2.30.4-next-1607517102-836b4d74.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607517102-836b4d74.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zsJECuCQH9I1PPfsJawntvsNXAHq17Co92HwCsf8cvMYnHSb74YmYXeR3eQo62nrVgvzEroCPrSNWzSFCZwX0w==","shasum":"95deb378f0ea4d75c6f2214c73b7dda1c73c160e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607517102-836b4d74.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0MQnCRA9TVsSAnZWagAAshAQAKNkRZXVTy0DwEcx7oRd\n3fW2ihUvzaY9EZC+a2E08EFiFX8Edk4pFMG4OuL3veEU756tje0bIM647fOK\nUYcdvb7L06+ySKrPNac4OG8nI7gArFoA/+Rw5f0b73xAwhkw055qLdZYk6Yy\nG43HeEVQhkkTSuu9vBu+R2vOIN7ie3helTF8LqUPpQBlmrngvWHgngNF/nJn\npM6DlAe7qj5WIIdL693BxwcN2/e8OGur+CCvMRxxdLZo45R7uia7svG9bybj\nMkV3vCcIApFI1k7p0FH3nqMv0X3sKL6ViYUL6da1Ps9OedCFTwAnyqvk8MT6\ngcKBPVtlOsXX1sITGX2vAahuvcUd5glzfpFEGkB4VhqIy4pn6nBtaFPOzaD6\nlJ8Mkuo328/cOz1DP+LEIETjOIP7KZ9uqStuxthbvbKh3CCfNzhBEMXD2YCF\nYfeEQToUnNT3Ngm292ieOAqiRw19JfkGVGgMbigrE1JamodAiVPeuK3auYOp\nvqgBP1xalyuek1/pBVPuEMJo01cthrfIW+5+4U7avUveOZZYB0IDFmYdWCVC\nejA15ia1evu11l6i4cNhWWfRzQhb/C44TFCRsLyDhEY1pwvU57eqr+BsfiKv\nM/Kskq5xCLyUREQZA9K6wZ8IFGSgLWcrUrpSqIXE1C7hiKGxKJIyfbgSurQT\n+Hu+\r\n=J7yE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPbFHoFhz73KcGoEXz4mCTvYoz5acwFmYC9Ep6QCTtLAIhAIZMnnow27Z1VZcJLDotRHtwHEEzGaP3v6WFSrR37s22"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607517102-836b4d74.0_1607517223050_0.019292092041942377"},"_hasShrinkwrap":false},"2.30.3":{"name":"@xdn/core","version":"2.30.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.3","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-BvhUz1djbRhsQyKqJI3/mCAXEbd8Bq68nNqhuGAttc37msxfBFuOOGL97IoKxjVvUMOt0AlduXrDHpDXdLHZvQ==","shasum":"3fdf4840bc6b4ca45a87a9e47e4ee327b59e6140","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.3.tgz","fileCount":169,"unpackedSize":637978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0MxaCRA9TVsSAnZWagAA7FAP/jvEnKG3MqIkabPsI+yu\nPHb3WUL3YL7cePOkwlUjB1kypy/wKSBkZ9Oi2xoQb9RgzXoflhdcXhZXQ9wS\nYNL88+ZIUuLzLeOAZ+WUDSFVa9Rn7G8Ul296jOBdiSgRNPI56vF+0sIqh/MY\n0v13VOP9sbpw1Z3EDcYMNMARh11Kgiv1zNtnbG6bfpZywZuuCdHsUUYtIaa4\nX4wtQs1xvMzRrjUmP+hpfc1coa1cJ2cT03/NXQqm5tdWHLxnn2LgdqjE+AJa\nRUAmwWLTLlwuwk23+p7zSk8hci5/5TvCRPScwgE4Ouzski7gvVrRGWIrUK5z\ne41kLdPRU3ugsPcvW1T7DVnJ2Gs4LxiJOzm8UHCosO3/nzmjnVPMxaBc8fXE\ndQnq/jcDXrAZst+YdBfd9KlF1dxkt6SJYwhQbEkXPzuoDMeW0wqDEMt73fdM\nWA35Fex+L4t5mBEVeJlix9EkNkfUu3f7aFZqhMutwR6yHdn3BNkfB8CAcnZb\n5IiTUNyQzG2VFYByZuvUVnyzjDXIe+FYb4yfZATCtyqUW/yCAkqa0sHDtto+\nmBr67WOQTqBFMtk/TEXaXCuPjxnu62vuuBiBE9gdpEbyG2QJYAd6aN6wbFya\nsCAbo4pEz8MgZAkTRch/HyfIt763jARlhNrGcTr20lcCTInAwjW5vE+Gnd7X\nR6GA\r\n=Uj4w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBD/9217COqijZYfhHaBjBOmwGeEaKIxayG1be1+44itAiEAq+g/0Zk16xju8a/S6RR9stVKv+urtnWu0kTLr+khs0g="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.3_1607519322121_0.4544159300207036"},"_hasShrinkwrap":false},"2.30.4-next-1607523716-7c077106.0":{"name":"@xdn/core","version":"2.30.4-next-1607523716-7c077106.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607523716-7c077106.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kVrUCrv94YIF6t3kciYqc9jXgll5ElIHKdDFYm4peE0hVbl1KpgZw7orX+NxxUphAiAnIXi75Y0CiQu7XgAo0A==","shasum":"9c401ae5c3b926643ec1669e47d61b6d548d9927","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607523716-7c077106.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0N4RCRA9TVsSAnZWagAAzV8P/3/sg4Ho+B0BoMRlKo+6\ndTZcUkQsWVozxlDGkzWN1xRCTckw7kVNHi5N9G4UmKqaon+q27Knx1g0Gc3o\niTx/6MP7BxVaxmphX0bj1fDugwO2n0QjXBCE5wwh0ue5Lsed6HVBNqP896qp\ni+wCZIxLmRgfYNANGvVSh6/unsVkJrly2qcOVplLOORnH3no8fP4Woc+hsXL\ncUVdd5dUCeKGUTQezgRB3KCO9qCCtLUaAHDYpwGfL6BMnRcqfbzHeDGQVHy7\nVjMV0AT0usRpe72Goetfj+nSbCj3sh0fKGn/xWQ7PFVQtOGkd+Z1m6+IS2i2\nHeflMeTufRRUyoNp4BaRQ8AMXSyvKiCwfxLPk17QrhhwYvH1Rb5Wk4HMvpy5\nA/Dy90LnHRMXXKGegy4Qf3hM/Li+X2fA075W3nZUudkiP3ZulVk7EX2U7whC\ndT2WyyScgCO9n/qfppTWR344SNpV3wsF2VPkoIE09Vu2IBs9AlyUUccjlVSS\nywtMQaHySHrxyUUDNGf8Kt5C0sSYPYkTi7QYcGmlXYEwnxoiT5rVitptBq0h\nzFnFhvx7+sbOzkWeNF0Jaq9hRxZQuWEE5sZbsiILFE5xs2sEgcN/xBmp8WYu\nfDLiAcGZedIv4/1aUyV1hlRgSXKyIMhYV4mkl31kAMNczYF/KwWD4k4kQHY8\niyAT\r\n=A/Ij\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDMvQh/ix28swaaT/FECOHJWFei3Hy5+moC2Cb8kbdazAiEA8cUG9XoRnpDTdoVj2sTTLy2/pFrrMogNTNm5R0Cso50="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607523716-7c077106.0_1607523856878_0.25329499626972374"},"_hasShrinkwrap":false},"2.30.4-next-1607524587-e12d6f5e.0":{"name":"@xdn/core","version":"2.30.4-next-1607524587-e12d6f5e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607524587-e12d6f5e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NiQMeexl/wu3Dqytnu/IbGIqs6EsKwaf5Rd0laPDm+FWsKVpzEHjFFhKZA2hsS7C1HNzPG083qcLvT0ZL1V4Gw==","shasum":"a7549c05304b358d292b85e2600acf5c171b0804","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607524587-e12d6f5e.0.tgz","fileCount":169,"unpackedSize":649747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0OFlCRA9TVsSAnZWagAAX8YP/RlBlk8e7/vISUJhAohp\nFfSLRzV3Ku3UCDg5wPUulAYgdsX1dazux/bEVlKMtHiO3YPwu7JTiI/EoYun\ns47p2N/PhSfuZn5Jb8BeHp+vFd9yEVc90AsGet264zle0vh3zvPZMAx0+3+s\n/PHcBMiu7UYCLPmnXYPvQ2eV1GBAdDRd8erSEZohdf/T789FYoiqqNnpwzna\nm7547mPstMNxBwURe8UBvHS7wSRH3q5myWPQkYueNQlpINdw81zQxHh8rD2y\nEq6Jd6M9+5Ss2jaL58OK6Uh5GNXe0blTnKL/vcpyRJn95GtUntXSosTcqKmV\nZYt5mrelcfozNdvZBTIfIHeQX+/Us+f2zAXh/DuAq7Sf8h7N8SvkSYFbvKLS\nnHjs/VVikF9YZrm+GA7OojVLp7gPAUumoRn802BXA01ufM3uLfi5Q1ghMSES\nNl7YEDs0i1+lBVDiOZnEDZZljz88ISGt2JxEMZpeXLG44aHaUwQGbW7Djdh/\nKZZ98YY2/6SwyXfQjPYAnIe5QUmjLZAq4pE0C6LQSHrc4c/8fxcUu21bQQMQ\nqv11vUhUO6dZvOvVOi1NdrUdXKFHPTXxNAbYq+fyrLseSRAg5hPjLUnyOSMv\n0KNMWOobqA9puOVP3kkg+cwYo+w9rE+JFQOU1BxbwSwe9ZiP5ApZuIwFLlOz\ngkNl\r\n=pwWG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7Xy6jU8XNm8Yd1BuxgBPoF2SgyfsXLwlYVYCzD+72oAiEAqHW5QqAkZVafy/II1HSIMHeroCcEBHNfOLENfkkeZ30="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607524587-e12d6f5e.0_1607524708553_0.4550284239903313"},"_hasShrinkwrap":false},"2.30.4-next-1607550472-2cf4049f.0":{"name":"@xdn/core","version":"2.30.4-next-1607550472-2cf4049f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607550472-2cf4049f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-dCFisjeVMD6nOL2ta2AnE5dfK2ANxzra0AaGwS1X0pJZZR+KCLR30Vrjgg0kEaM+bOXXTXIWeXDbY6qNYdPo4w==","shasum":"f8596826bd7f131b928b4a3dee62987916976ea0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607550472-2cf4049f.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0UZ/CRA9TVsSAnZWagAAiCoP/0CRbqB6Sja7nfmRfLIm\nUYuYrI3eL4HQmc7aMCwd6AHNgXEfgfl+7VGkEOWp2+eEvE44qP2AqXBhnqZe\nHzK3eg4bsvSW8Mxush/bwqMmM4WueYZDrphbNmDuOqFhZ4RrtLsI5MNfAXW1\nbga60bsaWWxY9eIUM1mJaNLOz1Tm+Dz/8/WqAKL5SC3J6vm+be+ibP5R9qt5\nSAZLSJFLURa8iJkIS3zdkpnptwMam8uqFTRqw/Cu/aYacRztEXIIaAb7rSnj\nYAsf3CyIuT+NT1hUNy3JSoUotyIvNeOQUzCW3cljmhi8KbDKyhQQkkJclPhz\nnXgPKeetFt/6qVxVCbFkC+ZNg4I6lE7DNhtMgU3ltcq/+bpnEPE8plVwUYif\nej2w2Oij3+/cL5UU9UDDot9sewAmNPbttWwcmwYSf8sTz36kbpoF/aYI7mIE\n9lZ9ij5G9/XXqBMSQwhXdigqMb4Wo7Tt/xNZVVCRa9c7onEan2oX4ivN8iBl\nXxUkxfv6Zoev/HJBDsf/fRXWvKCUvgwGPfVBupyu11VCakF5o3HDmfu89lw/\nyiMAS8afeDLCzsJZc+YktmnGMEuQFBzFGFyHCtDWTlQUtBOE1mUnJTCzidpG\ntjCnDgeB1+1xmhGQrem1IUrqbSWGONFHToRE7ZP1SsHkQXd0tRUXNDM95wBL\ngJLf\r\n=I6H+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFu/wlJvomuQ7L9amjR+gQ8/GFufUrPBt1Jef6NrtnVQIhALIhooj439tyUUcGc2hTBNqdNo83cLCXDv5nScjjZYdu"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607550472-2cf4049f.0_1607550590742_0.2261015830505706"},"_hasShrinkwrap":false},"2.30.4-next-1607552312-fba7ba12.0":{"name":"@xdn/core","version":"2.30.4-next-1607552312-fba7ba12.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607552312-fba7ba12.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RFFYWLRFv9dSXUvGeHbqSeur/XJdIRx/WNmBYsL1D2p/bOnr+XHML2ruRdSBDaVepDq1GBipbL047lmCeslDlQ==","shasum":"8875c614be2032dbd275e19408abbc06a16dc53b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607552312-fba7ba12.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0U2uCRA9TVsSAnZWagAAmdwP/2hV1w9QHwmimi06fxi9\no9b9qGz5TfegN1oPx00DeNiW1AKnxPMEhDn3Rn3q3SxszkbIidxoOS41HwK5\nS0djSZfENZNLsA8Y1aWDAd+PiktBrzZ6oJ+J5RjRL+H+1IwTXQkXx6jtA4Lb\n4tIss6X7JGhnJdTIQbKxuMW1qZmVlzotVzQPhDsI6U4xiulQI8pyQdcStNLN\nTV36Brn2RtA1ywFnL+e9y3VDVhqRUoObGsXBKBAY6JhGebcfnGHmfYZMh7cP\nT/druUL/8M5Uh/CWkBRFhPz8nrdKJloEiuTB1yoQWkLWdYz4GvFOu39Jb0Aa\nG75s0sbEF84OWJ0SnNS7/BEnb9LFfewvrkPEnxQz0ZVm/DTf0sM/2Rgz+QlR\nH/brzk29SNbQJLsB9Lx4YuUe5m/x0kwokWUU9GSg27QkDEKzTwFZwDhYsWc2\nRM05FSO0bO1Hy87D63F8N0fS4oUWT4oh4PORI0Q7HKHgnJBkG/+ZWz/UP3JU\nmOj3oAB3n3ISd/MIQXvNMvjKUQj6JsmWssUooas1ejaG8itXZDr9gXS/h8PX\nkp87C5tkR/xQKJlYNI/FX01iwERwrFkfQGoRkovRpRIGKrH3vrUTZs44hlsv\nsvFXTtVdzfD5QdvrwS1FD73QqBITMzw8H1l9mNyNv5LoIUigz2WlwJOpoT0n\n0vnH\r\n=XPfr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlivotUtlA2r5F5BHeWkUAREikzhXVDfBdT5EEqvhssAIhAPlD867lJPTzLGhteySBwifVIDRBRyH5HwBScmlD9aUd"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607552312-fba7ba12.0_1607552429402_0.2969020670229279"},"_hasShrinkwrap":false},"2.30.4-next-1607553436-bfe76dd6.0":{"name":"@xdn/core","version":"2.30.4-next-1607553436-bfe76dd6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607553436-bfe76dd6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-B4yp3yBvo3vQbOY5puFmxZMFYbqkb6X4NyDlsGH3eId0l4NtNcYgzeEl7VpGjmt2swB0Ty/cHvQmQ1W3mhnTiw==","shasum":"7bbe2f7c2d27c6df0ae47a80410bd062067c00aa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607553436-bfe76dd6.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0VIVCRA9TVsSAnZWagAAbkwP/3BV5w+JRsGtAqQmZ4yV\noxdfkEUY+D+1gFdVFmk+gg1OGv/k7UwBrjR1Kt4V30nItKwxC6gy8qooe9P9\nnbPn1nlN3sfx6aI/upYdHxBHD6VA6/x8HIx5tbnfNxYtwmSR5wtQOq47+3qh\nkU6cSiB4QZ1Grlzrc/x3PKMgRCs0IXiYWvd8cU6/390f2I09A8aoN59GgURs\n49VwN4w6a0gcsnFDnjpO31RqADSEwF2In206iIHB9kJD4iYJXoazk9MCsDtc\nQ263izckqT4YDn5rg4333Kv/HfSGCchS+KE7dSa/rGrCQ6JHXOew9QaGSd1o\nxFKMcnT4nEE8zLb90lC9SSEAEW8Um9mRFlXU9KuGRt/yIX3EBkQ0h0yJvWVB\nQLLPusv+1gh9ttL/ouEZfIj+QM5pSM9sEmTHpVSXevTXXbmRQcyww2tC/gM3\nzDlzYfWr1o1vX9C8Ff6+Ipl+L8QOSNQhoUeAwLTnXlb27I6ZtbNVm8A66DRD\n8j09Q6HpS6RSISNTWbRc81Qad4NF4rarkhHN7Fbt9dXfW8wycyBr3g+OSBao\nniz6UFGioz1MXzMDfs98/wQSeTAvQXDWNMRldK6tytT4U5Qao0E4ar4nj1MS\n+z+o3PvyuNLN3WspbgBh0p/TbgHZy1xc9LSSgX4ra5vtlbaPljBysN2M9TKd\n490s\r\n=7a3t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlbckdGgSAlVModgH2bra+4bzl2b3lEEPWv0s9x9oEKQIgczWKtJslQNvYQWNX7UkxyKmt24p8UUsCWkEWAbWm38M="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607553436-bfe76dd6.0_1607553556985_0.4068203658573042"},"_hasShrinkwrap":false},"2.30.4-next-1607555016-f51a073a.0":{"name":"@xdn/core","version":"2.30.4-next-1607555016-f51a073a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607555016-f51a073a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2Y1Z/ybjEQjGY4fhwfSnbFcL8iO4jYFIgQmm8xfSYE2TX/ef6sKAQdNyMmZKTxXeWJh10XRteKsTO1bqwdYFxg==","shasum":"a91250a9c168bc27fd4f012f678f74834c75714f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607555016-f51a073a.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0Vg+CRA9TVsSAnZWagAAMbwQAKGpVn+YUTcYrUeDpMDn\nhH+NE2zEDCqf0EyGU4/kn9YbjdIbw5TJnHqe5zIWUUUf/g2fenXb6cNvxZ9V\nZMzhl5VFHg1IZX8x42BciRPeMEMY8CbdeKHx0N4MWsL+NF1qwEoST8gnFwi+\nwyLCb1GnpeIcSk1r05IgLB2VIrJKaqELG6d9UzR4igmQC/PLbNacMVzbXdtE\nnCc/dv4OP/cbz4YRFhyEq0W1wXTyTDdQZcI96soOBq3WrPSw4e8d8XEP+QCj\nGD4TYL8hqiq7rWhxFPgRnObtykLj/WRx1rGKBSsoAYSC5dAeFcdPuj+wi6Zf\ncvs5FmMotg2SWXwLw4yQsyqSkLs1cM05UNaK+Znae8HSUYYEh9nh8RURJ33u\nmstvS2GrB20FTpfbKiCoUtgZEbVIPCV/4r/gfzMR1vWpW/zqZ8bCETRStC+I\nCgG40SWYpgF4Jxe0M6v3XBKcdxk8ssQ3miU83YfVIwjBMSEKVHI+7V+viIrH\n+bOJgihxVHjtcScxPT+4b3USX6DGlLO4DxpeXUsahoegpn6IjG/IwMFxaMBL\nOV15gX+jvblEuPEZX57yJD4TiuwNbX9yp+F27ICevj4ioslQUx136mr5UrHI\n4tVAEjD/e0yFsGJYM0kMUC0T0Ru3LIbfJ/jraqUFzzGricQu64zRNMmPoTF8\nMMpg\r\n=2//M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8fLqOWGHnn5oc7ImxCblXW9NVyidc8uAfYOGRKbYUQAIgPzikyPBLCXKg6YD/BoIt54lH6u+tIt0oPcP9CjxuGOc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607555016-f51a073a.0_1607555134146_0.5800003151207391"},"_hasShrinkwrap":false},"2.30.4-next-1607556592-2f08e9be.0":{"name":"@xdn/core","version":"2.30.4-next-1607556592-2f08e9be.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607556592-2f08e9be.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CX6S5uQck1wKDpQQ7HMLz2uZIrK0V7E3zVYltd1kvEsiMSxSEg3HxP+qhmZ7lhCVqjE8obx5chV2g3wc84cR1g==","shasum":"0b560db07513520075dd9bb9283158faf8a5bc3a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607556592-2f08e9be.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0V5/CRA9TVsSAnZWagAAXucP/0dVk942fLAOQRuJLLLb\nMTLtkhn1h2gYi6M3BLbBHldLrn89TH5NyUhTHHJjH2NRKYOmZUDnfG7lLo+Z\nNy9WhH8/sRYIbt8+ZgDZ18mRQFZ1Ag3/nZ/RAlf2v35WOS0urbusixCsVoCL\n6dQZXKkzMm2uoUemJekustkrcxvepRGluXxQNC/cKluS0wA94OFEZwdxQ2gI\nKzsl/6PYv0iw35Wyg2es/9sn4ukiXneKw/K7bL+nvr4Fw2uHghS5bRsk5jlR\nEc83IoglpW9efvrg0TPwL57avcRwCna4QzaH2U23rFPN7oyRj+9e4vbNJFog\nALie7V8FE17Mgi484Ztm+AnvVYUBo+/6RpXSZK7oa2RQnWtVlPpQFI9ww4Yp\nujbhyEbutZ7K6NglPMYkD9F9/+y+U0dIvO+U18XLjrnAGDxJPfTIzjmW1DNa\nOYBjUbDIQQXOupG4YK+apyzNMJsQFWnGz3Up41GsQJNr96KUtPpe738nkoXb\n6zycTP5udggzlxEMXd/HDtq6T3+8ilHFVm4EI0Opguwee0kckc53BQdLjrX8\nC7eQLMR9cBZWzqjcp0UXuvbjcViwxLiq+D9DRe4SpeujvcU/z9NOM0I84vi2\nGOZxJgkxhgcPQIhAI3MvNIYX6/kMzLwUtuUjJex+A9dwXZDj8+3yCfyu0RRG\nOZeq\r\n=pAXt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIERDGVj4+QhtlrgfP6f4Jw3ydij9tW4yfbiNLikno3RMAiEAlbnnH4ifllhlDYepY+th5XVDs0lFuZD7Tva12WhdrZo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607556592-2f08e9be.0_1607556734937_0.1447588843061729"},"_hasShrinkwrap":false},"2.30.4-next-1607600861-4620c21c.0":{"name":"@xdn/core","version":"2.30.4-next-1607600861-4620c21c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607600861-4620c21c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tWGhDwQWyp9Ltkt4y/3jWVY+wgDcgFONrNsMCGKz3VB9pQwmLQoMIUB6LUU7PFgxAcj3qI/H3lSwL0J//hwztQ==","shasum":"835456a0fb39168941bd10581c4e3387f722c01b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607600861-4620c21c.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0gtZCRA9TVsSAnZWagAA9UcP/2RBJXdrhLkgfD8B8M6U\n0iBMFA248GYM00mPQMgVuoRo9FlQZByhJsUkmlzc6aIGrSkrb2cdAMwiLszZ\nF4fkJSOtlAgg3rhRh2ySfh5YOEJ1PZGEGLi5ijTen1l6Cx6OGqw6Hu/YW6ZA\nvp2jgCRtzUFICXNtPbPJyOQ+pVH/50ksLyrDZJXvhq2gGvi35i8I4xoTQErg\nklwPQq6FJWRD+L/2c3cKO/fvcgYiOAhS82KNFtNNjlG4AnvIyV0Zt4/IlX/K\nC1vV0kFVi5xo9PzD12mQaQYcpewmvF5CHhliGqu1d9U2VjnvJ0ZWn6a4At0z\nloIoa99iZEbxdSWapaFLLyZEiGqiwGjDL9Ku5hhwufWbyoeMQeajZathOg3X\ncIt4XHNhJB/rkGkomKtkJHKw+GKysp59dSC2+KkVcLDQH1SmhHFdIeEuaJBU\nj9Sk9LcnILCLaQy46Qzvkv9OPoNPvu3l0hykj0O02/P2OblPIAeqiqpOJFmO\nhP+8qmPIaW8QlWrrs+dcG6ihEKwPMMlzMjQ6jDX//gBZnQDORLNoYJvoAcDv\nHY/3J+N2kwf6HILqRpdDYi4yrJ31JbJW7GVj5R4vTNCVyatjPk8Bxmt+tjD0\nnuUeLjJLhcmxyg4Ku9CB5Rc4L7cWUZkviHQgkUC0pFhqAm0Xv55jYvB103Jo\n2589\r\n=xl8x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSEU0CFTMSJPgKQ5EK6BEJPhvezmWBG/G+pz53EjsG9wIhAKg2kaSFLOy4I85RUZzV2HFQvOln/BtSoJNe7RnPHauz"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607600861-4620c21c.0_1607600984847_0.2876753151384497"},"_hasShrinkwrap":false},"2.30.4-next-1607608791-86d4d0ed.0":{"name":"@xdn/core","version":"2.30.4-next-1607608791-86d4d0ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607608791-86d4d0ed.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-s6v1ARacq6BgrSLjLpIKSWg6xvhzAWOMja676UD40tAha5R5VyXHugQrt0Cj7IJ35dijT/fMMakfuXmhiLYKEg==","shasum":"c29460ed1acb4d55781ba9d1878b0a9f73ba5524","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607608791-86d4d0ed.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0ipoCRA9TVsSAnZWagAA10MQAJkKedOef2WPcYBkoLgo\nWlfHW+13uXMGDWIGBPXZ6XLx6LBoffB9Qb16Ah6PcmonUgq+i8umnIQI1s8C\nGjoKt+UB8oeoFGa5oIeX7OBBRpKiDThsqYs5pvnlbh2c26OpeNeKi2ZZQ/4O\nH+6LHm4Sw9UO3S1W9sHWmf8JNuItOi5rsnXk7nZvDPe1Oa+CXFehuZZKyl6T\n2zneyiWvWTEal9TnhXHLMOAhjOwUv6GzsTVg4fWaOqhRlBfQemaG52Hfgrdz\niEApNap7OqCVgLf54wEKZVHRH9kO5BTaV/MGm4dBjL5XkCEDYyOC5S2VvCjX\nT7uTXr+db4m+LpE48xN7bmuaUfWrpRohPh41aERyw348E6Y1Ey3kF0OSwsq8\ni9eIhWR5V16fPFmUpLGOgOtDJfWr51RAlpR38a6e+zV+jI1R+FoYn6WT2qw0\ndzC3Fo+VzAOOCUVYVNX1XDJ2dvDMQX9aOifQs7puB2qds+dF7mHDYJAgzQ7t\nuzsaqoJurDnzyf3KY1dD142nbNKO1fInhAZ59NleNBV+FqgPGceyi7OrV2a3\n65kbfcU1J6icYe6y/VSdmbLtYgUNhRaCfA78lETshOlA6lXrTe1uZiNpzGSz\nrujaVznlp4EghudnCKkR6hJw8ROqmBqDhRqXaGfkNcewaFzmfZc9SU3OWQoJ\ntND4\r\n=DYnX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBMN5zd0vHDNrUkYt0ALE/5XJw3DKITAPGtccHU2LWq9AiEArnM95si7Q5RTFT2a3Gw3Y8e5vhK1UQ4MSGE3Xa6RGIY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607608791-86d4d0ed.0_1607608935609_0.9023566767855633"},"_hasShrinkwrap":false},"2.30.2-next-1607614386-50f42e25.0":{"name":"@xdn/core","version":"2.30.2-next-1607614386-50f42e25.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1607614386-50f42e25.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0fc2dhHVw8g5fBjDnghpxDXrH+gdvDlbmtPNRLFt8DMczOu76IJW96Cw+F42EwJ2ZM8X+gPCI9IwR+Dcu6S/1w==","shasum":"ff98ed5087249ba09759a5b5211f9ee7064d1f32","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1607614386-50f42e25.0.tgz","fileCount":169,"unpackedSize":639811,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0kA2CRA9TVsSAnZWagAA55UP/361ccSPMp5DeKwHEOW7\nHM6jOsiNsvZ7GggK6aL33QTLfL3S61Rn68JJy8H9Y+cMbRhjVymWFssxWijB\niK8WVM6Xf5AvKT6a31aM1noUDp9+AY+eVqIHB+WZ3F1XBVUhn4Gtgviaeyuq\n4bIh3s+CpuIQOZfKT6kSqqx0cb77jOY7FwLFf9Sf8C4GwYDEcEX0TlR2vQNn\nHngDKrTOhuj0AQoeuHqzeMELa2qDHhc4swmGlTdkAjtpSidyhiUB2nbjmPwq\nBcRdz7hCtAtl+8Am27aQVg5+S/l288KiU1pkFT7Ls0+2Tq/P2q4QCWHb7sO1\ntSFTWAkuAJXo5DyMkWnUdwATGhBIcL26xErBQ/BqQ346I/rktUKoTNpB6ew6\noQySEp86hSpV6Eu0Rg/aNeqthlXWKEoL8Dhi+VnhgtByzXI8ASj0n3wQp1jV\nKpCf1WBuSle3B90tiont0om2mY+HCqy3DkEpAaSOVvPBKtNn6lFEY9UZjxNE\n0W9ph7MiMdvUIT3JnTL0yjtn9xFapM9IlA56RvAKuiUJm4EziVCjUxTuM3lr\nB/UQ3B7iSu3Zg8ZaZ9+FNvWkIfX7VN2ws5aKjjsVFzXW4n5lXRIqU6VMHxgr\nNUzE+0t8234PcilwyIzORGYj1gTqXETKum3nLBal79c/lcgKuhwQurH6xQOb\nxq0q\r\n=MqE+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7qGLcrEzQsSK+L/9eaCKZ46NP9az1y66PqoYXypiRWQIgZJ9TCGDvNdiMromb3kOmnt4+1yLhiPKTUutszvFmr6w="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1607614386-50f42e25.0_1607614517564_0.7383180166709011"},"_hasShrinkwrap":false},"2.30.4-next-1607617432-7d64068c.0":{"name":"@xdn/core","version":"2.30.4-next-1607617432-7d64068c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607617432-7d64068c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-71uY/5l3n7qjZljj088M0ld1KQRL/b0HlttRsmBoSp5X99CWNF50EdEibVlgjuoSK5rZjX0iGaeaK70lXFZYJQ==","shasum":"c27b79124e8ecd7311dbd15f7e6db64b5fb85648","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607617432-7d64068c.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0kwaCRA9TVsSAnZWagAAMhMP/2B9iLiqurig8RT/LaEV\ntHUCmWQmJVl6X1QaQQGe1+jLoZAWJ0PfnJQYo9uR8h6wpwnaA4SjFU9iEL2x\nibLUrvTBQ+2MuolLYRb3yeI/dwY1gefEta/tya4tM6yxUlTgVLr6SG6CQDRP\neT6h9XJf5ZyHsxQ4mQdxiCY2+OS3CXYBHKldrrxHnwED11ArNTJaGwNdYCaJ\nTqGOpEX1/EKFp4tXzUgu1tgTW2w1SQAuspAhZYn1tN/3tesqlzkKLbqTTKui\nPCgpbV7xEGlFXzVTa26ePtCOHOWYV4xT2Xz8plBR5ccAmR0UlDlBx59bgJDa\nH/nep1sQi2hy++GdIraTTpuBJhIKtrlrxpKcZU5n/H7MsrsK9YDlcMayjj1Q\ny7xughJGWWFtrApIFRqDsVaY7PHcU7/3Utv/FQM4u9O9wcE+c/U4wRYhNHzA\nl4cZRq1TO5EQkcKGA0siYZnkG9XKudQk94dkEpGgSW2f0ulIeHREmmC74/st\n9645rhI9P+jgUlh8g1HBCVOTjIjbY9ElmAqcRiqV/dv++92eaaZpYPYoYFi2\nyqi5XkgRT8O5ghfSv42XsWYelqqtZBr7/poiWn3rpjYfbUAzJOrHqHt88JwD\nSgJOTdTpwofzHL5O1Spd/8p5SNItecQxfpndusSTkEpYfHuPV8BseySJDKjo\nTnJF\r\n=FteH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIECwPN+US4RnOz0I9ftyqjpVaG/hMX97KkDVYQs/Uz+mAiBWNg1EpBoXefCPtCbJkM1v0aynJyocTi3DZqMNT9aBzQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607617432-7d64068c.0_1607617554817_0.4800578024599633"},"_hasShrinkwrap":false},"2.30.4-next-1607618169-7493a449.0":{"name":"@xdn/core","version":"2.30.4-next-1607618169-7493a449.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607618169-7493a449.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/w4P0/rw4h1i9RlAGAo7yjzcvDJa7Gf0r7cmQjNplV/U7rdGO11L+eomeSYMZNQZlLqdIBCcxYoGFTIn4F+7nA==","shasum":"d8726c8eb189ec00dc903d84e658175885146f3b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607618169-7493a449.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0k7zCRA9TVsSAnZWagAACyQP/ijpAsEAA2ubndY2RZYM\nAhDuCmSJkq9BNJdZbS0bjegGJpHF7tzy9x9frESL6lELalRfh8gnzUuX7f/n\n+6FnaXgWFL5FdjP8fWw7rilHoJgk0YCkJfJbQw1cHA6Hmo5ICmLQy0mYS5A+\ntTd8//jhhN32oK8k+MM4O2kl/sq5fW/DTGlqxqTOI7p81i5g4FSLFRdeM9sY\npBkVUkHndYrRRYrR5oO/9CS9GlV/H9gjX2Bm3FiSx6awzbDXoeycTna8y/CZ\n+qBmHvlCTpRl/KhbsorXlXBWh4FyQ19J/vvLsx7ocS346928OPQfG3R//CJS\ncXCje3sM73zAPvPqp5qDCKNA02Y5wn2p2cPM0Y3YdGVq4k/y2NxyHQX2CqTw\nY97jeLmoawtsOzKmU63dco147bzac/RA5lCOMmfmu3OoU3UU7uBZABPyJ32X\nbj0PrAlWaiGWnjO6nDMZU/Bgqxe+Twfxg11rhiKSgxtlD9RgOt8PjIIvMRv8\n1RYT3OSGJxplPjioUKWXm9mZHD9tlTrhgnw5Peh1VVB4JL2zMqnb7/R+Nkca\n9QHiFlWuW1PPxTIdDu7hh2sGzbogq3Vvx+ffosaVKfL6aSx/Sl9Nj+faISb9\nqTnUPdZHDG070sIgzcvu/3V6F0em/vniDql4HNiLf21sLj2jJ5ozip8vi5E/\nCpuK\r\n=L7ib\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDC01Y9MP8FvHyxrPBTf6upj4IFhyoW2jjKE4MQy9itoAiA3/wpciD6Oc0NNbbioYAeSvfzsLO1otoCu+jQoJz5BFQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607618169-7493a449.0_1607618291179_0.9951364909631857"},"_hasShrinkwrap":false},"2.30.4-next-1607622444-7493a449.0":{"name":"@xdn/core","version":"2.30.4-next-1607622444-7493a449.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607622444-7493a449.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4YqFekf70agHA/kbkQJPhMaJHshcg2VPOVjN5SMPCtHQiB6CtJE3FnyDvPhNXM/7cytCDc/qBtUcAu3WuW2FRg==","shasum":"e7aaf2dcbc938599c29ac631c9133fc0a248dc62","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607622444-7493a449.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0l+tCRA9TVsSAnZWagAA1ukP/15FgYE6TD3J9rLMZg6e\nv5UwZC3HM49wcsSnXBL0I0A5Oxo5PrzMxQceyGpTlR+cI9uUGTigS4yNLp82\nqHcH+1iaXZoUh1mexuGSLyPmIeN3vfnDe0dJLmAdJBbijpFytT5su2cZ1FHY\nD2e/R51obuI3Nh8KLcSTGcH/+wroVY2Ey0V/8gv93/r/4y7Uh8KbtxsuK3Au\nIl88fikv27maNcIWVKz/mG3CM/y2mMX8oq5Hu22G0FxOSwrv81kREgiymU/P\nAnUHEfazEipopxoefjLC81aOVBa6OA3gCjKbrja8Jbq/ExoU0FqHMvgeajjw\nru+tO1SfBgMS2zkmaLfrG5PgvmCsQ+ExhSc7ku0/W0w42u3/CsPxp9nuzuWS\n3SlhSGp4YYhpUK7r73VwQ+R3VVsi4eAmiPYPgUarWL5VrHHOe9gOebcpwXZP\nw7u/wwTq5TyhlcgOJlpvLS3rnagtFZWNf6sTmNryP2AthP57JQe4zl+Fzvcv\n4cpT5zO/a7EyIMJ/K2LhfKt0o+gzQrDzPyuGgQDoxvoIUMm73pRlIVpJzWej\nNRO5fwlJmTrsawzXnOXPLQSACcVj4j1y52iwvLLFZryxQv0P4Fmx8va2TecT\nQhfKlIMbRdIt8kELp1ahHIVoalAGvg0WBZMVMYmf7143Y/vuax6aU7PllvzD\ngvEL\r\n=Ofha\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC+4fydgfGGx8ZS2DgvM5NpN6vWH9HX+qWa/JRfXRCv2AiEA4Yex+vo/xmDDDwiLYxYW7U2k00aiLhCp5V2xlpVhm4Q="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607622444-7493a449.0_1607622573033_0.1280298118593639"},"_hasShrinkwrap":false},"2.30.4-next-1607625268-8308b630.0":{"name":"@xdn/core","version":"2.30.4-next-1607625268-8308b630.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607625268-8308b630.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RQUKFWi1N/+ezDKhfnf5SKSkfh+sHixDxMXVsY0Mp/JtfUA3w9hQq4bMTKYi49VsatPH0/PEvUlFlFjPvUcgxA==","shasum":"197e800d43320ec592ea3d8b989d3caef5174742","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607625268-8308b630.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0mqjCRA9TVsSAnZWagAATQEQAJgy3EZAdoDpsFKRVPeK\nIjICHHVmKq5KP3CH1nPO3X6/enLNye2Ye3ElF1Pw/uBcG+/dPMhvdZklPDZX\nbdGrlxDHpvw5jR9H2PUq5CNGISmgdw9ZhT46VsA7xh4ihgrAbJW616gSdzsW\nk6LYX1TUp5c7xw0N6azLPZvYsE4Sx3rYzDtfqZVCqN4FfN379u0ZzvVN9awb\no2jw3yrAV8Cg9t/2mCu177dj8ILzE+7e1HgLuUkHeVrUQ5l8lL1TnLmJgVL/\nIbuDEZpRU2SlUh7ZKzXl2SqbT3r+jT4UWPGpt7ffw8URE8ZXGKi3rVpa2aQU\nNMRaf8xsjLg2xTtN57YG0j8Jp8VtIGtgxA9wxv69wu/uNjvthBbrYMrN5+wZ\nhnJPT7WeYl02cvA5RGc4mnQsTka3YiKo53867p+bNz8svl5+dJeRTDgaffPe\n7bosgoqAZhrukITZrqEGtJTaLLiNjCTD5EoImYpNbxMX+M4OeiLe1S2rDIVk\nEZsgQqZGmAeL9hEE57YEtMnNSprLXv6s4Un7X7fAT33lSJ5MtfRh2yanARam\nP5r3lntkQ0S3JI79j0XErTm1NAXsntaj5syXWZTPIO1RlwiWx/rkwjt1hMCi\nJltA91MTxb/1mXwKHadNeBt1QyPQjlUB79uOTxAwE3Wck+tSonz7Bj92eQyR\n8gma\r\n=phnb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEcFu040ppj9T18I/ouUu4YL/IsBR680lF/rt8rINwvnAiASFvKBm4tsThPlKn1NNPi9iy5RZe4RmfsMa8mPSQgdEg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607625268-8308b630.0_1607625378271_0.1939194426357853"},"_hasShrinkwrap":false},"2.30.4-next-1607626288-31a80cc0.0":{"name":"@xdn/core","version":"2.30.4-next-1607626288-31a80cc0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607626288-31a80cc0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VEfBRP2Yujf6FVn6hdeT9NnBoJ0p0SsLI6t/MJl31/1wVgLPYrIc1sVlj1DTW+W95q6hWbWiOHH4uLCFO6ScqQ==","shasum":"fe4bb2e8db5eac86c39e703d159096502759b53f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607626288-31a80cc0.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0m6aCRA9TVsSAnZWagAAgisQAJZXMX6uqxbz4Bal1Xgm\nKm+Cdaqjbw9TibFGmDzM+oLMlmWCBkzKRhqzs/InBhZjbnxM+XCKf+jyB+bT\nKZbj/YmqgzUd0f/cvkwELdXDCvSE1nZRf/F3QgLggC5Rwz4QBf2rip5C0EHL\nyyllz+fWVWj0zR1eC0qQDYhGGv9E/26mDFNKwE6Cn2VWG1e+sC0xmkZKWyRY\nJ9shbJ4RSO4UvllbTDctt1lgR/vxG2OpdxHgfQWzVWd1jurP39wXqz4l+bv3\nlMegvekpmP0XzrHLDV7CeBItv5eiDikdW4uvyBhyzhy+rwtYiX3y335t3KZ4\nN59+e13nkEBwgG0Bc5PEeUab9ZB6UgJalFU0DBP32XRp5FB9A1l85mRC3sJB\njRvJIa6WuMVhicEDDAhtw1EafVAy5KVUaw1xOJzwDF+I4SZIpnA3qg+X1srP\nrp5pueoIOJ2BO9zsTgEeVNaT6XKJiL6p4/Z81r2IBruDRAQ0/9g54gF1ZLBk\nK2ouuzCw9yYwvXf9szZg8UnGItvpvIFzDLltLfymDSrX+YhTb8XF2sEfheCd\nmkqsCdZA6ZkYXHHcjxEUWanh/RrQy7WxspzvXMPjyk7ITwEfKPfIBhFf+NSv\nFh8EVJM1cQhZ3g6GhBWypjZDNbdT/twO+sXcATI6X8fN2o80roek7pTYPgRJ\nex5m\r\n=FYeY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDj3WztNOQ94eAG3iufvF2IoIuOfukJ4A+Biiu70ClCtAiA5UcZvkJZiFMW/o8F9QYXtxWGJyahoMa2Ag+kFFDMa1Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607626288-31a80cc0.0_1607626393838_0.2389837843488123"},"_hasShrinkwrap":false},"2.31.1-next-1607628041-0fadc1d3.0":{"name":"@xdn/core","version":"2.31.1-next-1607628041-0fadc1d3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607628041-0fadc1d3.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TZ4CJG9nbunqv9fMyyXPeixroJ24Rjl60KtSTqnlwvHZ2Amxa9uG0X6nfUsxdS4GZ8sndK1XdYYdLFxAYYqNZg==","shasum":"054d12521a58c0fbe46dbb77ec2679b36318b3a7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607628041-0fadc1d3.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0nV4CRA9TVsSAnZWagAApDkQAKHiSMJf1DNM4sy55L8S\nXRG/rlV8A/mvV0jawd8hMqNAIYUXp4j3/K4bctyDXQMQtreVTW4rhuKEt7NW\n0UIoRMgW9QThHYGlsyJAdLaR+pAX/69Yj9MSvEpH4irs0MQ1rd/IcT4fw+Np\nFSOngQhdwP2kEW7DtrB0fwtaPf0iYIr2BbsjTuOX6Y8ue2EP2+SFIF1ZVGWV\nSAerk4JsWrVnqkZKzcmrLeKjAI2tlRfVGLxD7AvkDjaGEZJ0e0cTn+XPieZb\ns3Srj65z+mZ/WX1YR4QwwnyeR4hxhA1Z8vWef/6TEVHgAjfbaJqiggXyUKcu\n7pjvH//25M2gJy2kSao4a8fIZDhxaJ4e4gd5zdogT3lLuiakFYrRsg4FJmeU\n81PK3rhyS7TA9vIzAfMMdel8A9YZEuUnpJjgch5UqiY5mWy9K37pLHxxDOcN\nU39IuzfmsuLEouCVgw96CUi2OPy30bIQpHx1cR23PJ0OGUviE0/xtuz5FQGq\ncUnL6c067ATZUTRDm+021BE69sd0Z40XmF9+dQLvphEiBuXL8auTWqFamOd8\ny4F7+tE7/m0GbbxADZ4XtaGzVoujXzi5a9R37U27XBs9QgpZJUIfRZQ3609E\ngVrU78nzxyxFPcxBVLjS2Q+HH4RZX5dQcMnDQ8uzpWige/0NrupKmcQACnDk\n0+zD\r\n=Kz/H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGxI1alU12zLd6TIk5rP27yihFcurelHbSTKaVdHKaKTAiEArCYIuz4I1mp230Q8WP9Y1YLtSJrPJoGCTmR575arhTY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607628041-0fadc1d3.0_1607628151744_0.3726650634146491"},"_hasShrinkwrap":false},"2.30.4-next-1607628828-7e78e7a7.0":{"name":"@xdn/core","version":"2.30.4-next-1607628828-7e78e7a7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.4-next-1607628828-7e78e7a7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2R3/xT16/I09isE5ND+Iln4MOvTCV8c965F9IqdCUC2bGI7hWSFWvbwNHuf885/4e4MU6VDNSe+BGg2gA0rJuw==","shasum":"7d23725962d9279721e23e40ef7689166653a24e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.4-next-1607628828-7e78e7a7.0.tgz","fileCount":169,"unpackedSize":638032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0niJCRA9TVsSAnZWagAA66sP/i5S9jZCuN7ReThOA8uU\n1qGC5IvkfZoUkjYUAKX3u9ebOEWdg1OFLMI07hxZe0kVEJ4ZSm6z6tJAQ9Qw\nbX19lXPYT7C5wQuruznjWntp4hhwknQSOu2+R/hxnReT802a1ymzK8UbqQnJ\nnBh0rQtndHMSA3rSgOm97PfcQgli+xnYa5/5UIW2Vq1oYa5QjPXaDbj1ZW2t\nusY1k0BGLdo8oQZ8+hfUdXN4tzG7wvUD4pmnSCnveCtO7VWLymEK1jsz/nMp\nn8JX/hDusU7K6ajmjri+yDSNi54NqnfWeMBrzshkngAbmADEPkw4omAV5uBD\nb3zQgsOuwVqTOfSVgV+ofs1Yk3c66ZyOfRhubkHISeexJbQcNDhn09j+fZR0\nESR0iWM3ie5lnGQurvTB9qZ2XDQRq+3wYYW3Uxuq9k4nmUqahj/thRI3brze\n5xhbRgj/F5j77kIpN2MaEv8KZPeE4V/WcDlXoCsx8W20g67Gf8at8MJBYzrF\nSJ/VO4PdesodytFzavI+B66fwfYUog5jeiIja8ZwqDrgEAboSnPk2zV2V/lg\nbh2m3I1ISmO3+dFPj0Aj5pHEVBV+P6iqsP4ONFc/wh29yG4lCZDbV92astNZ\nwSaoA6q5x1nzWjpFMMY6T6KT9w4Sbff8pMeos+TV0FtpeY+kSkpA1S8VVK7z\nYdAM\r\n=haYt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRJPYti1lA1VqGkQOr2hIYup1rAKkEEBCGzdzOonmcGgIhAN97FInFOCIbjo2YiyDDGVjc/2mwDYzF6KQW5aU2FCPJ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.4-next-1607628828-7e78e7a7.0_1607628937138_0.6021456916664667"},"_hasShrinkwrap":false},"2.31.1-next-1607633034-ed60cc16.0":{"name":"@xdn/core","version":"2.31.1-next-1607633034-ed60cc16.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607633034-ed60cc16.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SMEHwRe3L1h2sERxGXO9yP4tfNvJ1ZljMHc9D5EirlzOJGcelWQI3KqUtNFEc85pKWex2gEIItvEfuqsQLB3EA==","shasum":"4717ecc85b94b3b68a311f32f7ab1b355bae956c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607633034-ed60cc16.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0ojzCRA9TVsSAnZWagAAA4AP/RsCzaTD+RvGMFJUe+7l\nq7Tf9YFYiJwjLjOGNVY5dKXyn9Oxfso8hQupQx0ycJ3dXE7UkhY15o3pqql+\n8ACtFcubQ5AkmXzLdsat/ydpiE3xabNlJt4BKxk5hbXPhPGEf2tqmmtHOQ3c\n5RTIKjqrze93oJyFRHLHyLqx4RYhkn6rLWsBCkKlTjKWOPDuwZUH2IZJ4tyu\nMAJRjTg70AAvh3CFTKOy3BlD2Fwo0q9XRxQnI9ztiIxEQptCxWv0Hv1HQP+G\na9oTNFmuWlbYt7e6u3WKND0Qab1TFioApgK04zHZDLj6jWQGo9do+qGSmudu\ns8Bh3RcTpP9wLkK5gj4umed36hqG+kK7u5CSlph+CCn/2/dJQ+MqmIDu9Zur\nLQKUe6nb12YNiqrPTATL50VjQRBobzI7NtqCeKqxqlIko+0bq83BvQPcznfz\nGzR9gxqRfKtCVZJS9RUSSNhBU9pKObAdk1MKm7b9aKmO8WFNp4PDImtc09rn\ndxuuTLbabWWwj5KyaourQpBGhazTuR7ppPhxSxXSa80GMXRrNhnmPx9EhCj7\nN9lHB/2UEiwDlF71npejW+jzZ9a7QVem/AyYlLjQK3omGdSsWYceIT6rfkXB\n9uYxJSLaRcmX13xoarZ/kAITSjiAOFBiVAClZ2XGzTDEwqox0DfxWivZzt32\nleCo\r\n=MG/H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG0tSeljKuq37oqlKQUH1HrxeDmmXyyXZPMJh2eA6TggAiEA2MYbUk3KjrelY5TKvSXPt7ZCeZwVmwFKSc1VCT3X6kA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607633034-ed60cc16.0_1607633138693_0.08327857331293731"},"_hasShrinkwrap":false},"2.31.1-next-1607635372-9730ab60.0":{"name":"@xdn/core","version":"2.31.1-next-1607635372-9730ab60.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607635372-9730ab60.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-no4PuynHz8rCeSYiXk9cpUwwSbwnEfK5F/aby2ddlaEz7VqhcEXccwJyy3lMpWfaGlK5sjbcN5GGG5cMfcUbHA==","shasum":"374f488058e367d99edde7981091bda7fa4b5073","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607635372-9730ab60.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0pIaCRA9TVsSAnZWagAASoUQAI7OBeUuGccj1tfML0ML\nAbiuaAqBhh4RitlX3nGYO8NtlBywNj7t6t/ZoWdmJsJ9dFga+ajJKWqR3vXv\nU4JqnVqFJrxLt7aF+Q6mxvDCqgAyPDb6a1JHt7X354KZbrFyE8qlH71bMgAc\nIjOu20/XraRXtByt2HwnuGmMzr8cjg/egPziW8ESqZ4y0HvFUwyso1jGsb5Q\nKUqdw/Eu4D+lP2/X1TSJjJkMR3GVyiOyOaoUv09s3cjISJDDSr+/rFU7xouV\nIscoXBTwUiLgsnDHUEc0SbfxaBumDjB4fghJ3aatpBbUY1w8nZTZ44abtvmO\nCcyRmS8NnvkTWEilyN9BS3izjRtusuXmft+khf7GozGXw8O161MZ564k/qgk\nJss1wYRZ3zw5k/cWX07tBKyavT+DYVaYAlXywfxLxH558lxFXiJZrA1ocW+W\nkOoMKoojQIh2CxDTNbDWJfjwqmbzbyeeU+sQWg4P3B0p74QAY1s9/S8p3OVD\n2Fg4KWmOQe8mVsPSzATHl15VLUMRu4xSsOPT00pBubbDQRwAmAam0cCmgs/v\nlD61VsqD1DaIcqpCQOrDUjw9T3f2JcnHRSR/AOUoJAGJOfEZCME0YxdA7BQT\n2c93OotbPLMV4+i3KfQof2f+oPSxEZ5gEeHI7aH4/xcfOLKzQMu405FDv9ol\niuJP\r\n=9NvI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAacNriVgkPljzq/IS55np+AmhK5JwtX9ZlKZ1BiHgYOAiAKP5haN1eL3lww9bx2aLMsKZvUX3QzdufoDlwWzvzR8Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607635372-9730ab60.0_1607635482180_0.6605282687551577"},"_hasShrinkwrap":false},"2.30.2-next-1607636416-cd801e00.0":{"name":"@xdn/core","version":"2.30.2-next-1607636416-cd801e00.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.30.2-next-1607636416-cd801e00.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FxXEERN4+EnQCraW6JPoJy48HBwYZm52EWhsS6A/qM4VQ88Lv50bVNytuOW2KXywFv7YUsz10f+hyFx79DPAbg==","shasum":"083056f0da2daf5aeba5acbfd45d1b7f7a6aa353","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.30.2-next-1607636416-cd801e00.0.tgz","fileCount":169,"unpackedSize":639829,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0pY6CRA9TVsSAnZWagAACn8QAKSKY7H3R+LxdCmQ+6Kw\n6TWcFdcRZsioxrpxl3AaT3qWv2GJMpC9amiVRzRBbMuhnX6+cJNbqTj/KFNL\nMNzk1x6y39bBhuJggJ4kU9GS3W3tHP7KGbRJ6IvXMMnI1u1/YS8RjFoEBCXz\nN9bL4nhaANrgvYm30NX6cxntOUYoZgAEyh+3LyfkP6MFqoHo9RgHFHXBJ7oN\nmUHr3QkX/1C8NgAk2XtW/JCWNaUBrVlNPZolZ7yjU3xSt5Qg7odV/eo7dHuU\ndmiA9OBXTxMhcZgBCkO/d12G998EfZt7nVrxy9hiN6JLCUGYYuvoE0Co86wr\nI58ziw5dj/t2uGAj4IfPteTdV/vlsuM3Isq/XgGgNBtKQ1i0IKSGRO1yY+sE\nfnDK8BgTsuLm8T60xGDfg1MCIoqn58bvNJ/81zaqH8cs9pLHGNUNSArpYlS/\ncoOJ7vxuzJUjydlXYMXZNbTBUkoeu4PS85V9JDIFjH3jWm0OaX3Y9iIxNh5L\n2M/0UBJoB+79TMxsCstQWUbuSib86nkJ1UjR14XWDo0xQ8XTbq/DyKG0L6H1\nYRpK403YyETm4Eq92BeowGU1CV+wteCKa71KU7KO8IZgilzRCJG8nHy/Ulnq\nzffMIyv23PyddLVnqYn0FuaY/LUx7tvK/gaZzP+nsUqhbPl+0jAAFTgV/KNc\nS65a\r\n=sAa8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBdFrY2EEZ1yzDUIgSSL6HmSZlVUIb5GlGydpjFOBlqAIgPD5mv0Qkcgr1MPwPXhGrOj0P1lRaSalO+/3wmwz3HUs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.30.2-next-1607636416-cd801e00.0_1607636537690_0.4719129736086829"},"_hasShrinkwrap":false},"2.31.1-next-1607636756-bacb6c25.0":{"name":"@xdn/core","version":"2.31.1-next-1607636756-bacb6c25.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607636756-bacb6c25.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-d3mxbuQP1iU2JeqpvY40FbgBCTMaMqpYx2dIFI5PvmGENrDBxfOcC+hy82AXIUaSjW5CH6hE5pbkJHpxGSTy2w==","shasum":"fe17f3b2915ecfcc3f7e8c1da5831b9c397ca3d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607636756-bacb6c25.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0peXCRA9TVsSAnZWagAAY5MP/RNiYw7ZWESqsqTMA9ck\nNLqmzn0V9vYtCqpTm7nTzC+hX+wQuAdeOqXEHLQFEwy2Y4s5cL8Th9ev+2yD\nJ5ZJpFTV1KQrNT6BR5QaO1UNOQClMTRoWoiUPai1g4eo8GhkCBMFXZJJDcFU\nsOEW0keqfGkuJxDAG519rFVxNW8jb2lKeDL0RDALB9FXMyufBnzJ9XeAJnev\nGS34omPG11oBW3W0vBtqSWiWl0Ob1zhIp42Rq9eLtpciOmsxwh9FsFDtypmk\ntuQYo1LFpL8VCvkA/C9aetDfztPwrW1hfJnP8LrrbjY+Ilwzno/m8CcB/ypW\nfo7E4XxNSvsxXw5NT4QYoQ75OPFWLYWYnbiHBmc5ZEPvjIZH3BUmJwkAKICO\n6aYKGkoRxSwiMLnyG3xhre1QN0w4pg0eLsNnxEre+E85z1b7Sn2E6/ZcmX0D\nL/vFog0p6M2cBz4yH7aoedmwC26jg49C3QgCMZrWQkn0hKgyYklqCNrKjEkL\n9MkpewIb/0+j0ZKZUcENANkv5PIgoN+ompgKGcsG0Rf7aqlbBGZKwSVi/6kZ\nFXszO5HQbemrgUPxTeVrXUmWXA1yFXE1M4ISxspEIXIWuAR/KY9RRUYsIshQ\ni+NjTbsH0TctXZ7QyVj3DPg+JG3iWRLjaApYYthZtoe0Mmzblvra8vgvf4mE\n2fOt\r\n=gMcs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBGKmBP6RTyTui2ifh93VPcaShfgFzNzq/yJfsq+xBfWAiAsasrM0XmWgzURQyHJ7jsiN3WRXEiPykRetmooDHjUvw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607636756-bacb6c25.0_1607636886558_0.3607444169701288"},"_hasShrinkwrap":false},"2.31.0":{"name":"@xdn/core","version":"2.31.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xwX6ErRl/1vkeucreiQvFrGho+DVtTQg8kH4TR+YosG3B6Nnx4TMPdEBmnAqQEsJ074EjAK40ku1iCt11k3GWQ==","shasum":"b7d7b928c1a921eb28121e7ae3b1fdfad8e5ef25","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.0.tgz","fileCount":169,"unpackedSize":653449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0p0fCRA9TVsSAnZWagAA4ZsQAIvzVOQueZejw4DaZGoo\ngtSpGmFfXf+/8018f12rObkZ6V/4OnT2U7DO7j0Y91fku72jsKf3Mxxlqx3K\nWI99/9v8Ft1qQ7aH67/M8WhBhTVNa5Z6aNDV5hiGHRQO8bOeXQeeN3ke2DSS\n7Av4O3wyib2bWxnvMPSTYpxSnqqI6e5J/3Y0bOg8i4BxerQjzw6GumDBz+pK\n5yxShO8/SCz6GRnrOgQ/dKqGLlTBfZsj7Igqi1rMCcBL7wb6OIzF+1IvqFTh\nTFfvZgInTcpeCqvmrwS+s1tbBcuyBvAAJ26Gbmk47fczlBxGtAN7wtpfcWHe\nJhCvxsk9tgQsEp5CgqPX3dhSqwL7UnYLMRTqEYk32xMgYz9e1bGxa+I6ktc/\nLA+4reuWwfvfxzuq5HNAT5vvrMWFvBJk3xQcPf1nbtLkHMM3kn1NLBgH7H3M\nYmdSbNy80epi1X1EHFSHY9ojX6YHyTMdPHYs5vTVh4qkkom50+qt43OWZnIL\nrriGOa7TU5URaMuT44S4h68/nTXR6Yr/bRSlqokzblbZob8a4Zr2uhLBjrpB\nVjr7so33Ov0TZ3AYZVumR19mMsgg2TOnvAc3S6vIn6WZ0STl8ZzjfT2P9h4P\nc5mraEeU7H4RTWsqDOQsbDAlMQToEKWXnQob57BUi27nsWa4YMBOcOfnGnGZ\nCon3\r\n=aIVN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGAGq6ioU4w43q0t8LLkK0eGBbiQ1ef2XxbXJZHzizXzAiAaf4NMg7e1300w842M4CjoDXjuNzt0LFpPVFqzT0crGA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.0_1607638302896_0.46380215026898375"},"_hasShrinkwrap":false},"2.31.1-next-1607687730-e330ff72.0":{"name":"@xdn/core","version":"2.31.1-next-1607687730-e330ff72.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607687730-e330ff72.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CZ3t+Fs9Cnwh9mSWgETiv3jciE2pElBYctK/5iEDUxAUyKVY/gTPwho+e8g7Isyl0DFuMJvJGaV1tWbFAjj2vg==","shasum":"11ed39776bc806ab238a8ebcbfb302e4c81c0898","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607687730-e330ff72.0.tgz","fileCount":169,"unpackedSize":653797,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf016dCRA9TVsSAnZWagAAMd8P/RkilCu6HyINGlbl7w4Z\nMBsO5HalXCVSPNOiPtU6uPWCi2TL57vUXG/5LMsZoI+MWOiBZdFR/WuAZZSo\nwmTMhEPpfrpP2YtW++FPsUaeIoMiYGoSUZzDKwMhxwJ5fE8TTLbqd/Yo6F1x\nZRB4Qbzr/iI9ia0O6FWybIrCVBRXmQcKHR5cEmJAvB05fZTKamhE0kSuhc0P\nZSFmc5FzYOk5vlr74GwmFt6FD1TPnPMmbSZpjwcXboVHc18yPzYPYPJNJCTa\nm9wMJbT8Foo4zitmZIAFV67TlIqSl3sNdXn+DqegZqZEZU68JmbThAlN4GIh\npQqXVjZQiyi6un3C3b7fVlYnt6n7+Z8Nw57/r4RbHxq+4hvA1TgPTZRYNANa\nZ37b1CRuXhOfKAdUTUdHIxNvDMkz4J4n/oro66RpdDmQtahApN7wVsO4uder\nNGTor+7WMD/J+eQMgFZg4OsUo9RsOsIu/DDvmfQeF4jAPtinlwFTov4uhcZh\nSkeuY8VuJjzNIHhgZJLTyaGnL5uovNj2sAjwIZmDl+K6KBp+CUTT850ZFc+Z\nyHn7PnnYlery2um64nvmf9NTzkD8bwxuI3RT3VHTjR+V57pNI0WlCpTypJPS\njenCfGnAB0d1JJKLj/rtY1lBw7HuXutFQuBupHEkplL2lNaWm1B4DMC9KkE8\n7oLB\r\n=QNhi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXRX+uRW8I8XY65s7AmVMLsNfKRnZS6V7QT6FA7gcC+QIgGv8JseQFVtbtSaLQvlfmy2DSNNZyyODc0yg9JYqGx3c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607687730-e330ff72.0_1607687836509_0.8026726410576588"},"_hasShrinkwrap":false},"2.31.1-next-1607688185-c86bc913.0":{"name":"@xdn/core","version":"2.31.1-next-1607688185-c86bc913.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607688185-c86bc913.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-805R4I4TUEJfdRuObytQBBdrcpH+PZjPiKQW0Pi309srQw7Qd3qhtqclvpy5ZFI+Q80oXBGUWm518JfVpUiOLw==","shasum":"8aac45a54ffd34fae3405784ea9e9d4a87eeed66","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607688185-c86bc913.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf02BkCRA9TVsSAnZWagAAjM0P/1/sDVDRoD/OVYkQmEz8\nILly7N8TkOQzPIRrcl29thH0uQWP/gQ0BSUt+h/tjX1n+brcwVRsN0M1pAQQ\n1Z/eYJllQtbJ5piwi3b8RO7jAjX+c/bQ0xF+Fw+k85lItOjmFsujWBK1cGNR\ngeiDNNjnxEsGY8YtIZ5Hji8N0+/3fBfhwfbTY5qMumPmz/LRtFUmHUQfmDwk\n5Anqoxyaa0qgTEaLzQppWd9e1KMH58vjoPnMjuHAefjDlMMfdVwy9/SGMtxm\neRIBa6TBkDxPowUZXkyQ6CJXA0WrlYpv5Z0JV0NCVipti3oN+dQLkzWrVdnT\n0qqaN2kIvC/kt/Dq/bBCgP7oOqVWU7s2VjKcUN331/fQh6VMro4B5m220hLR\nR69vBcQZtHFF2DOQEaM5x6q7IhxtkAakZzPpL1YkVWCcoZ1HXDPNzES9XPly\ne7Fx62ecYQ44cWLRyZ76dPTWEg6Ut4Wkw/XkotVXpakM4DNO34ke9LpFBw8S\nwtIxlKTTUHJSV5/LxU6RVEJlG4rCHgHXlxlMTJTSjegt3kXzGUDtY77i5js6\n3kKn52vquEJ2r/G4FZCILstM6NfGc0PZnTdddBGGYaC2ee+0vQy83pU8XkMF\n9Vixmymkna69LQVWPjCKmCb7bxt5HYyPbKMnuZ7bPWRL3RT/+DV3Tb+EbP6N\nqe2K\r\n=wmZ1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqX+SIpcst6BLVd7SU+BAvDLXmLCCarQYs2YgrawzvqAIgRFbbk0MWprkrI2GVZ7bZfGnkrY1dhLq44rjuIDONgRk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607688185-c86bc913.0_1607688291921_0.021466925744165533"},"_hasShrinkwrap":false},"2.31.1-next-1607689275-e084f4d3.0":{"name":"@xdn/core","version":"2.31.1-next-1607689275-e084f4d3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607689275-e084f4d3.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-BAgmmpfMHADKc+rAzwu9mjyqwbk498hqY7FEEczE8j8pLDm0pJQyGTgu3YLWUTz79dwC55dUZRRBQ1htCKNf0Q==","shasum":"29e01be5f49dd115b7b51652ad1cf0a3fa9a0906","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607689275-e084f4d3.0.tgz","fileCount":169,"unpackedSize":653797,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf02SiCRA9TVsSAnZWagAA5/YP/Asc763QA1RTXDJ+ta1B\nGXgWJzcvHEXXRw2I1a6h4FiNBJegYYab4oXnmR8H/t3lVvprQbKCUmECJS5Z\nTq41wlm/OmhH1bEyytJeZBHQXdAuH95F+a2MZ4J340mM6YAG+zZ1LfnAK75U\nUXXiGXQ1ZFuIijup5VYuDh9JaWioLqw3ZIGr8Vo4TJDE+PC9m7Ny6I4pk3RL\nzAXZ9KFIGoTbhqdcHYukVzpTgGsVzsR99HIoP4A0L6JcPIZpVFw1TtJTKFKj\nB/AQN5bdTCCS8jcZUHJISBt06ntau0eWvTwInnP2Ytezka/Wg1yk6in/8H1J\nuvORMs5imVUDarXoxHP3ehkGnEIhvLE4oH3U+Nkqx/5WHf7FvC+/TcrUHV56\nMv9AW7lcy8B5vMNkhqLdNRkymtqGAlKs5QRLdWTaIvQXMef+7wg9tvfVJMVl\nI3sodYIvCUYoutricwlk+xnBN9DtJMtvcCRbYj5kRSxdOVutWR9LJ1xNYsks\n61rtQyyKyZ8C3hgsGj7ySiDGZIIUYE8QbIPUXgtfFNpvd4ckrg+iL5PVtC9q\nONUNOYeIPB8DJX3qaDl6gNMt0Eb+uYApYtAR55ovmKsmqdyEEJTc9EyaaGQA\nKVU6vPYfXnziKty7Oz//TcopEKibypsjNgpI8x9SZrC/LH9KQRNjc7r0OBla\nSYKX\r\n=Ea5Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmfT4waeYRQQDyrxu3nmHejH6wN6WF5AzVswfvP+nxDgIgJIIOZoh0LYJ5+sAorDkOiE2+BuX+PQT1xBNaVNyvkSQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607689275-e084f4d3.0_1607689377789_0.8519910605914758"},"_hasShrinkwrap":false},"2.31.1-next-1607690195-8c68b079.0":{"name":"@xdn/core","version":"2.31.1-next-1607690195-8c68b079.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607690195-8c68b079.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XKlib3eN9neop1rmp9l6VgG7GGomzCJY4RaiCfCsck3ULZHF60mmN8vr4nOO9Pdk1oTnyUwebBzYcpziEsjZhA==","shasum":"bab491a9100bde6a2f7bc83bb79074060c5598c4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607690195-8c68b079.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf02heCRA9TVsSAnZWagAA7KUP/iQKfvWYDrt9rEJahBFd\nZjhvOOoB+ck4fklqVklJgr0qDYbnKe0O6qAzSAkedWI1NlR0fIqRMM2KfOfL\nW1BNeUlYasJMDR3N5K3bzheXozs9TB0+/DC9fUZ3O3SWmPwoopUtd3+c3Jnp\nS/mtzpuaNwelsgsl3D+44YcetGx4Bo+++ORqYerxviqHfoH4+47f3nOYOd/F\n1klpLqY8avBO1IClN18/UBVS5Lg8thsk+gnRunW9zUD7xBBOazkZME0Gsa2G\nIoNPoiDTEVRhfL6OhB5bqNayKt8MIPmQGWV6+HSZ8apn/XBH2VEPlGxbEHYc\n1YmVXgr/Hgk2BC623bNpRlfEiYF0W3Ln8wA0UbcVl8cRGsMMvL5zJOz/5EDb\n17H4bKFoS1v5bahrF3qm28uSnyyqUNkQH7hEg/4/maTSYBMP02QU7S3bfDSz\nm/WMzc4woevOayZBNYZM/lA1R2q35hPGKHl9dPuvOFTrE0jRPS9G8n660LtW\nzIwa0q7ipJoaHrnvAwAk6FuioOD3afOH+pxF9c3RUfjC/juTpu+/dqiSUS72\nI6CYLb+qQlYehskBLWnOWvMsfqAL+xOoLAjzgT3lOpwzORrIw+GHc66p55Yg\npQG335ZRgIV6jWXjc29Un+KzYpK70fWPU0P7BGQ4SMvMu1ETIRsxRBtVzRk5\n3XCX\r\n=zi92\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSCbdc0KUp9mcPR1hDmpMa2bMW0xP9CNfcftvtnoNt8wIhAPA0/Jhbc/yMK2eh4+KN+Z7s96rSXOH2ui18QYJDxTLR"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607690195-8c68b079.0_1607690334170_0.34612815588683277"},"_hasShrinkwrap":false},"2.31.1-next-1607690667-7a391e85.0":{"name":"@xdn/core","version":"2.31.1-next-1607690667-7a391e85.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607690667-7a391e85.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-b4ZXKdihz/Ld9z4v49nOVPyxw4NYNhgCIqUF+SSiyCCR/pl4vDp4d/WafTZPwnDk7VJEQwIMVLc4fk2sKqBnXg==","shasum":"bfbd0cf61c0799a488e9b2315dc92bb84603d4ad","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607690667-7a391e85.0.tgz","fileCount":169,"unpackedSize":653835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf02onCRA9TVsSAnZWagAAv9AP/R7aUewIh+BvA+8XbLfe\nwzKF5oiVTMP4N0nCUS8wg0B6w6QYKWDavdS7sHxVWQ4hO9Pu59vAq5L7zZO4\ngE5euJNdzOJGks9RnBKmrbRHHUc5Yne4Vj1nD+5Ezav8DYXRMzrCtG0pNhm+\nO6uzxrozohLNniZVTFGrOoL8Z4XgHrkX7U2TAHkWpzI3ODtmKAiQEyYZVZSh\n0BS6htSlwQQNxmc5QiwQxBfPB9dkH8O5Yl1br5DOzTW0LbPSyXhIdwvXsr+0\n1XGvrh+ggh560E35SUlUlvfRfk5sTLXbqEKSv/DMwcgGcERLlchLGW/jH0K+\nFdLaqh07AkYXQCN1VN0duDjqEOMaTND9wsjg/o5+I9t6rwDaGLHAGwY5a8AA\nBSQAx029mwfzjZjR1uSFOk1VnvsvTzPzf4PVyV3a2LHvlsVz009iKCpAF0bh\nmAtZtR9FTgXWMhd6cFjQpQWGGjh30+FwFvfRr5hwgM+2O3bNARLyyn/jaLWm\nEAHNqXSAPV8p+SDEShwylajxWywbaz9AcH+mD1qpEPpfaH1BpkquFs/l4zP2\nkKeGckWnLb8Zm8R9O6fn0T96Qr/DqT9bQ+G8PCUBGmKGR9iICkq08jqKpws5\njozYYPclY5cuHFelBIi1KfIpHEb8hIXczi98NOFBEikrk1qIOg7INSckpskA\ncnlk\r\n=c4jt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBVWL6pU746WXKTTvSc9eT3NetmOzzZ5Q83mDnyCpIm5AiAlVUgRUh0mfGQ1/3UL/0coBQou2MN4QVSIl43goyNIkA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607690667-7a391e85.0_1607690790469_0.7404884562651717"},"_hasShrinkwrap":false},"2.31.1-next-1607691240-24a96a90.0":{"name":"@xdn/core","version":"2.31.1-next-1607691240-24a96a90.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607691240-24a96a90.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8513p4bZ5HEZAnvNdwWQZYAbDn6roFI3DKSSIe21O5oYsGTfsBFeV6qJcxIL7Piegr1QQF9DLc9NLwXsbVtPww==","shasum":"028e64a46962dafd5051af9219d79f60da84e089","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607691240-24a96a90.0.tgz","fileCount":169,"unpackedSize":654571,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf02xSCRA9TVsSAnZWagAAa1YP/1I8Fu8oMzq5LIsyGP+U\nybB4YctYXYky7sStAIala7pNgxHQTTtqEH09l1Ab5ACOPfT2RGl34Uvepv2g\nULfh32A9GfFWyCGf+EK5lOnY07UnGdL2viGrPB6jOvg7vSDNA6iaCyKy/D4f\niNzR46bQ2wSac4li5QkHoED3WEQHWmMndwlZ91vIxkeqofEYs6Bbwlkz7j0s\nV2q4xl8lZyjEyol43Nk6rhVVqeVaokL3j+dYYgWRivXXXzy/77e7WKx/zKt3\n6DO3KeaqVK+kS8TL6WR3xsOPsPPQcwmF88xxw8FlPlUQOczkurJFd8BaZEAM\nxIdYEOKU7KBCehzpFL7SE3xHdSXYlPGRBjCGIes9aE8Ny+aHIswtnyLHQF9j\nArtztFX7TcKYwZWB7iGnAAmeleFFuc7kHR56Ijfj/GEz4PSN4YCUHD2/YGsU\nLqruXbzS7ZCcS2pvoUL8fvKjgmpUXYVAGKHwRJSz1ywoxhQ48w6+8YM5CowN\nyFqIEHy3ISqdRtErCzYX1m2Ns4U8Lel20j7DZCqLU2x395TBEc8RkI8bmwS8\net4LPfO4z7qU055QkAFF1ATLeZ3Az7K88P6wsACRzfZRZUuKw+7ptUHzxiwV\nXklDXEYUGN0iSHWxiXIxRr9nG0XE92zPxIYdRmNLAfB3TI5p4zN6jPWhD8+5\ng9fs\r\n=quJ3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG5vNzC1zBiWC65LTSob1FgSM/zyCuKPR4q5/Zlk3lAwAiEA1WtCLe2GjMv0a8lDDDMv8rhsHHfDT/upP+X/2hyr0xg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607691240-24a96a90.0_1607691345743_0.4275427321528109"},"_hasShrinkwrap":false},"2.31.1-next-1607691858-07af2548.0":{"name":"@xdn/core","version":"2.31.1-next-1607691858-07af2548.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607691858-07af2548.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-U5zPf6hC9AHit3976F45E9PjfXm2S2HRw/Pw9NBfkDl2pvuGTfYbTEX7RcvlFCoHcSA5Gpcy2D5orvr4vP+JdA==","shasum":"0051e5aaba290611b21004ad4d2020b4e9289489","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607691858-07af2548.0.tgz","fileCount":169,"unpackedSize":653503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0268CRA9TVsSAnZWagAAkwcP/iU6BrbDvk438WQb001I\nI/8c+8628ScyUDt6TErKtRNatGA1+9nXH2fN8DMsPzjuPyb6bRUO8wlSMEQJ\n56jFuIs2d+UEZ+cQVDwbvzqbQYe+cS8g3CxXmmEBEImvYCXLY04ILToelXW9\nfU68F4MbJw+ncp+Og6ZYrAQ2MmFm3eq1QzpVc+tS9LzWUk4BqiOpKY324jU+\nTD32XAzgv3DCEQPrefcsngXUGR8MJ1tf2I0m7Z/NtyTR5NOxOLGCWiEb15Ff\nsnWhbdOO+qjrov6+RG8rxMIJrh6boEZKJLS8d81DhlDXRW6hdcR8VjmmiHPk\nHG0Zc/nvgS+OWjZdImxTRCU33QLyqk+fpNhxBdmO6cmrzLJJ/jBdyr7T3lEE\nLKndkgmN9mcPXijhf0UG1p9TMHgMlIf0MgtjJr18QcfSSuqzmId1kUgmNIxJ\nsIawZo7Bmm+C+AMIFznfkghHTegggzcQoUjgpDFCqrA0X6POHZB/rad9sWXQ\nYRdpRwj7dK/CxizcZcJ1q2SRwEHdNS0ec9bCU4k8ZLF2+vuOUThMQBdF853U\njovEGT4FKHPdQEj5kEjDGB0NQIcsEgUaI8HSRwgvqgOBtuwRxNSkyySE27XL\n/QXvc2bdrRSrn8s5RGEtG/sNtq8j5CMHhMakd+yQlEZ7ytxrDwPag2uSmDy+\nj6yH\r\n=lnjM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLodLHPeqNuQ+azmYLHFMR6tlqJHONSNy8kSO7LPkj+gIgMWia1iR3GdSot6AClf4gizaxwcg2f1Lw76Ffcku4g1c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607691858-07af2548.0_1607691964010_0.9572749015122064"},"_hasShrinkwrap":false},"2.31.1-next-1607696063-9f0ee0e0.0":{"name":"@xdn/core","version":"2.31.1-next-1607696063-9f0ee0e0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607696063-9f0ee0e0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-oom28d6eMqTynd0IsH5V6GAJIV2Rgpsf7xZvPv4BaYoeeVROu08XovcwXLxaWQvz6/Bgan7E1V7K6nhZJEU3Pw==","shasum":"abcb7b2fbdd01c41c2192c54086ffe003e88464a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607696063-9f0ee0e0.0.tgz","fileCount":169,"unpackedSize":653835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf038sCRA9TVsSAnZWagAAPlkQAIbsX3JLaS1rj2Vjg/A3\nCFQDhrW4tFHH5dHq7D/Z7tbd9Pj4mak5C3a2Vbe19BOO0kT0nIZJ97g6cTcP\nBu/BnaOc3iS7AWtzLkVKFJged0q0ZU2sUkv4GSm9gHZI8i+AZjV3lXCnRT5T\nqIVXUZsydf43sj/re7ISRS1jmtSHKs/wiINkBumIGupQDt5UuXA4+TwUdOo0\nZE1qqPz5z8dUCLLC9DDX++G0r2aXyV6i019HFDNsTsTUdHxXzZgvc2VY8tn4\nZpHVsUpOwn2+L6RaGJ59LNUc2SlxtkGDmQlVQUEKqWELz+8WtS2/40RwEF2s\nRLMYvcdLJowl8vVRXNviMmucvV1OML3mk22yCmp91M84LJvKGcSe+i7jMuZ3\nOa3qGDPN0XyZk+Aznm/BbyURnApXffn3jpsKWiRS3f4Gc1UhdNNZlx2gEQLF\ngseqp8yxUdH48Mc6DEbaNtq8UeJbFuwuYFWx6clsg7bbVuOnlDiJ7uTH3Mjx\n3B0TdeVwCnkBb4D3HSNDDfX+TG33ED7QbmBmIFXx52J+d3ajNnF6rccW6mqz\nKIkRjqZZWlAkdQ0uAkZYZziwXN92azqKsOzJhthCKwoSrrZUZtWoFuSoXgSs\nW3O6EuwDPXbH6GF8m4nkvNZYMnzT8RFprjIc5y/ZHXVjJYs1D5/Wjq69MyeH\nCA/I\r\n=4Fd6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLejIFqDKPqFRvLNnr9Y7RalnIWd7FGt/RVTUbr7UB2QIhAK+qchqTsy02nBPRcj/+4TzSyX8uNBfYAe3rJbeb2vcE"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607696063-9f0ee0e0.0_1607696171944_0.6920420565518102"},"_hasShrinkwrap":false},"2.31.1-next-1607696325-8e0e88b4.0":{"name":"@xdn/core","version":"2.31.1-next-1607696325-8e0e88b4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607696325-8e0e88b4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-axRZCWyxtL2IqyPAkbHJPxd+LzXx4TsRZnyLPURFdFoJogp/Fzr6seCwgqCsPjDQJji+6NhMUQxcFvBM+H2p1g==","shasum":"8b461644aaa73bda4f81c95ae15b2b002eaefc3a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607696325-8e0e88b4.0.tgz","fileCount":169,"unpackedSize":648656,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf04A2CRA9TVsSAnZWagAASb0P/ApyzHLwxzahA2mYz1q6\nLDgh0gxPZDuudVQfOslGXbZiLNWMTcBVHQy7FkRYRz39gfzjSaaQ0/kQ1i5T\nszU4xnhPblKfuozEomzXWrNvMtSo8NNG8Zaan37MtsbdC+GMZ2AOURJKnkL0\nlNgTMRuqbHLHC06TmjM+DdvzWMZQ9NX/Eqg5IqgWFdUFyNUiAKLRQAmn1FD7\nGTIB/un3DuNi1ErQKfpzuYFQMrNlNBAckIakPYz7vKVdx8ulIg5i9EolKfVM\nte1MrV+f6WcbI5Yx28esDuaeHEklo16mHtuLKuRA5Ha0nSQFzzLgvVuLDBZD\nGdfV4gLXs6BbB15fBxizWXnASE4A41yylSl2edIoZjwNE+PuCLYmHt7vK5pP\n6LkcbcBj4fgXwlXiubhBELEPye//71R/RWG0b7t9UecbclYWRni2LjyAAEvk\nsN09qe6uXwOvHaNeP63Yb/VXe4ywECc46nK1Ny/ZD3fD8qzqgkX4VSO0CRmB\nOAQqXWd+xjh2tHfyNtDqK3qMCAIY/WxvtS2boodbUVYITG7U9+YTwJeRjf8e\nyZBHgpIxshyjJn8kugREUe/jEOFg+XMoTjLj8wYrnFSIg0p5pr2iRf3gjbf5\nfcxcSkTKzxQxiPT5JoU8Sj5x0KW+o83VzRjTUcjlJZqD/KO+uz3LS/7G9PQ9\ne6lM\r\n=v98d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHypB8gymNEvCYAVFQQp4fz6qnpkUxn/7wWh5rVKb8gxAiAeo4Rlq0+DIRDd2+eWiB6n4G9suler/eLKAgqJOVj/pQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607696325-8e0e88b4.0_1607696437558_0.9856794610259818"},"_hasShrinkwrap":false},"2.31.1-next-1607696470-f71f3b54.0":{"name":"@xdn/core","version":"2.31.1-next-1607696470-f71f3b54.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607696470-f71f3b54.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tUwjcQCpFpwQVeeoNkbtuo0Aa2Lr+lR9T3A4qd3QjHNr+72khq7kdOBw7n/oS1EJgn3b3Zkgo4N+ESfsOglBPw==","shasum":"6e8dfa487536c17bf94766d127646d42446bd3b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607696470-f71f3b54.0.tgz","fileCount":169,"unpackedSize":654903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf04DCCRA9TVsSAnZWagAAOx4P/1aVXzR4j2ZP1IvD4mhH\nlAkph01aWoPaaLhPekNrY5hzBj465tFVB7zze06sqYTTvWE5pNqZJllfqlSz\nYol8sN1mIvHSHlM0Tm5cQfioC2rrZ96bcn5t8rpcpTYlZAs0j4os+6isRYLy\nixBb8jUpu61JpJ6bq6hM9fjl2yr4WI10mYzCMelCGAaZsnk5iyOM1QDb2DLj\nFUqqtFaj0ECuxGGz8xcV89C0n0TibFQbguTS0Z6zj/qYmKJKdNfxkkECjh6W\nzPS7yk9lWVha3EpUBB5efhuy2Gqq8RoiXnDXChTYTXltmj/l/pKqbLCes9bb\nEVp3y9OaN1z0tpyHyacUTf5DybzQfVJgoERs9SRwqJop+ZlPHSzvXi/MAzHb\ns6eAofjO2cuY0/ovysHdzxZouCrauNTyurxnBdj7f48P2y8+LUBtf5KmduN7\nzJOBGoy6l48rsK6X1IKDPiUwT7qipSdJkxsgP3Vw8xTUFpek1cITdiyrcG0G\nhthGGWY8+HtleyWk7jad4MAjOBU9jrcMW1fWohwg8IPbV7uQfsqUIm5TXaPG\n0jY5MXWiLD4EMQlWKG8GMHcHsBD8DjLph8CYOgcMRG4Ql66SnHdTcmPZN15B\nvOmduKEodVBiY0/uM2ikhmGjS1ay6bHLg9LfGjQr1DNv3DTLs0/w/gy64psq\nIj+a\r\n=b4JW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAD84rVsLiMUXs0YljWpf5CRxkoa7FF5vGTgYV3XWlAZAiEA2QdkhEUcvsbtaqd6lvyomMmwtj5Njmwtmrs2gvoh5mA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607696470-f71f3b54.0_1607696578015_0.7304602442180335"},"_hasShrinkwrap":false},"2.31.1-next-1607697018-fada1fb8.0":{"name":"@xdn/core","version":"2.31.1-next-1607697018-fada1fb8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607697018-fada1fb8.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5ygtt1Jtp/DlVylQM41sJo1OCpaItf2jriVdmzDPCSWhplv3Wrl0/b3r5CM5r15nPwz11K0lKcvwZGX6UVYcpQ==","shasum":"00f95e9cf4f9006bfa6e2c606187c1a02b018270","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607697018-fada1fb8.0.tgz","fileCount":169,"unpackedSize":653835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf04LfCRA9TVsSAnZWagAAGnMQAKA/madFmYZlXfzZ0YlA\nEv5vP2frhCMO+/BTb1hjcs5inkuY9cuTfIz4w+E2V1orvdbKYaUME84Y+y21\n6SQ3+IJD4r/eXzzexsE4pUVgrQJHjvwDQphmNe1JrJQv/dmyA6RvQx0D9D4s\naWuU+U5yWEFmR0b4gggaRyIA2YHTA+iN4WhD1ttiIpHNL/5KXsaR92QpGIVq\n1udiFHpKUdesuGsj5uM9j+N3au6xyLAeBARpHLEYang70B1JlsdYqjX+SIbe\n56M6yKi3aMDbtL4ayX0PEYa2XSP45WWCiT83nK1m7iHnhBz7aGPMtPerFQci\naxt+r5s+Qa4ekjeSLlMYF8w9th+Tdvbg7D1HWHJ0jpwgGwJf+4N+KUivuEWm\nBEtzLG6n8Y3DGgUjguI4k6f9pwlpNP3mMbH5Ym727Epe+p319GqRoHGu80GG\nYHKtZd4+9HHHiM9ogsVet+gsYAFFH2iXFqSizGT7kaRTX42FBLTZ6g+4Q49Y\n7D+20WP3/JxVmN1CV337CoVLs8i2K90/eHGs7scsAkBiw6GAEU8yDoHM8QhG\nhUFzFX7OuBDnnKvpzuwNUZPTwo034mzozR+n3JGTUB/RT/z4xqXhfJ+oS4Zi\nh6Ks+Db81ZzYVZaSRlnZXrVP7u5RdWSIf1ITnqj84cAA8JR4jlDZ8Cc24YFn\n1WbX\r\n=5W5g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBsifcsv9qhr+cKJyPJATDD9MfbTFGxMGcTJAAd1Bi0LAiB+hmLHUwm/yh0O5lwxIkJRtxYqKyeEkODWoN1XodH6RA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607697018-fada1fb8.0_1607697119055_0.9409812677427367"},"_hasShrinkwrap":false},"2.31.1-next-1607697051-9c6d7e71.0":{"name":"@xdn/core","version":"2.31.1-next-1607697051-9c6d7e71.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607697051-9c6d7e71.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-l32m6JXkMdKkHGyMuH4UYODCFW0N/jnLbrkk0oD/fAB2+JIM//3q34qM3lad8mjIWQlESkNeecLFinQlpJLDNg==","shasum":"be81b23f5bf7f2b54fce46b43e522b341e728472","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607697051-9c6d7e71.0.tgz","fileCount":169,"unpackedSize":653835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf04MWCRA9TVsSAnZWagAA15QP/1WJKf6AL5RL14rnho18\noms8OSW5U6oT2HS+z4qXhSIfDH9ckwLV2/XgGMyYqSlZfMiwxWW2C14NwYBA\n68VhRy6qbT/6PZqQysucIJLmADKkGN3GKLqkknGPRsXVpC9i9BOsz2l1zEpA\nbxXFGEUNIIT0QB19mMXsWO+cFnLtZEqsajLsguz4NR7nwxVd1VeSbeLxa15P\n+QZDhJ3vBsLopTvgV6ShkPSx0NR1s1KDw9BgvwuQv0O8f8zbuPHMy3bINYPn\nncz2BXZSPUFmq3QcoZ9wF2tQfm77BQEuEC5aRptc9DF1e8TVBz3ZNe9S/sy6\nDqkT/LKY96Q8Yot2raOb7GINOTH91rMq3UqwoeQKt61TvGaqHd/jkpYH7K20\nUfLMX6DFR/zOPCG16gfVGTiKAKFqz0bO+nEhPQfu+2tRjbsMJZ979PTJGdwP\nKC5kHoX212wMl8lJTcovYtOnCa+k+c8F0SVNyE5pQRK02uTUYmRQn+wNmQmW\nkrMxK2qLB3n4g1ZJoius3V7+dXKM2Dgo7JkJkF5YAkODzcYBQxiOVcJQKS5T\nP4Rt68jTCqgSc6Sy34RVLMv5e6eFog22nxB+rfgFtzwX0d5Ov0C7FahFdZha\n9Tr89RDPczV9KSoT0+r1NMsVY8BzV6r6ADBmx9pYTnf3ND7dq17pfRK749TD\naPIZ\r\n=2KtJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1sZpxl1Yvybz2YJzlE8brYjyk5gX22elLC+D9pQPZTAIgPSE+UGKnYTdBF/ECh0vpEUvdtgEKilegSEj1/OqyPaU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607697051-9c6d7e71.0_1607697173971_0.03456783336662128"},"_hasShrinkwrap":false},"2.31.1-next-1607698811-41ff6fb3.0":{"name":"@xdn/core","version":"2.31.1-next-1607698811-41ff6fb3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607698811-41ff6fb3.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hlFkbDgeLQmxqBRUjzEC2c6TC9x8Y++eo/bShVG8ii4CRD5YSd4BdAC9oemckwpJZ8jdoG7j8dWYNbn+mi0ywQ==","shasum":"230389a5d1d9d280d17619ede143ba7fc7492237","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607698811-41ff6fb3.0.tgz","fileCount":169,"unpackedSize":653835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf04noCRA9TVsSAnZWagAAIJcP/3NCBfTSA+gXXXLzmNNQ\ntaijxaNhxvU1ZqBN4rqxlTg5t2oSI3Qe7D3XhbBVtVmyyDqHcw4NHb9eA22h\nETcFt72BY/4mQIENo+gJIGZXiOkBlfCOzoIEkg6FMI7F1YRiXqcjky8fk3dZ\nWED3+Vex246kfbO2h8hGyF13JTrDMAtTpdWc12KJo8O/lRv6akI5O57RbhZz\ns3YmC/wjXHgB55SvjlOuSnKK72nIaC8YZmQxI6aMRYhAp4df9Ex/+mfZFB5p\n4zk4/uDz8RhYm3k7L76IDIrk2wnLux/KME7O3eVzdMOt/Biq0ZseO3onc7QT\npO2PXWtU0Hf4SICGJYl3/abUK3b+gw+CN4PKt7rROD8FwZVRkh+GiuWVAKwB\nNacSXqlPEaBlhXDS1S2VluGAcaxFkUd/nNOEwuQhW8SZCRvChj5kp3R4E4Z7\nJya446i8cZtWeSEU6BmFblwaYS2bnj+iX0lBH/UnTHmywVyVWKp1ITETHoof\nrPvftnah0hJKv3fLtOTWtO2YRw5F47wa0igoQ22/Q2OEmMT+mAte/ej/OL+9\nsP413UewdsGePxI/46xnN/m4XYSNvg4PvaPvOhVeOt0SiwEV7jRscUchQvPs\ncDfP0/hMiuW3ZtEhlgG8f6g6poy9j/lHar/CsWeD9eWEiyOcRxtdfiExF0No\nFAoL\r\n=hNac\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB6aElMM+ITzWl7JCytsy1+rDNJYhsnXC1KZCXjam6OIAiEAvBsNpT+XTg2RiiI2IU/SPesFC5Rwqp4dBgyHrvNuwwI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607698811-41ff6fb3.0_1607698919963_0.8096659149390686"},"_hasShrinkwrap":false},"2.32.1-next-1607698887-456c7271.0":{"name":"@xdn/core","version":"2.32.1-next-1607698887-456c7271.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607698887-456c7271.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-s2zmZk7fHe89N3MM3l22uapC8kCOhqyGTqSq59kG0ZMWFxB+wz2uB4sHnp1M+XlCIrgVcaYsbaH6GLcCWQ2wFw==","shasum":"e8b5c3c14e28b407ffaf9226b2b6949861553591","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607698887-456c7271.0.tgz","fileCount":169,"unpackedSize":653835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf04oyCRA9TVsSAnZWagAA36gP/14fHPs91WK58PkafrP6\ngHHvEvac7fyh6ZiBcLmFm8uTdE6r+wp3PooMjU25X0B9DvgaEFsaMeBLJry0\nnbFXSJI+vuxM9lGLICBr1Flyi9tmu8nj2Jfoh7yJ4uvPChuu/I4tmOqEdbYf\nyxXG9PbnlpQm27YWJIAUHPOxByTNtoKpbIpvn8myhCuXUnWnhtavYBBXaaYp\nK0rBnarqicR4SaWybs/0K1imoibX0tb+sjhRVGPd7Ov5FLbSsGbg73tHYs4T\ntI8tgxYnb+kjxKEi/S7DkVHDTLXbQWNyYyBhF3e6795/3PD/jFUs6KDCshRi\nwI/2CbcLxYCJ2ykVg1q+i3+WXrw7HR8cnWgUjSDB79A8K4pXTa41pL8lrn9R\nrdRO4iWaKBsMQ2jqsf2Y4WCB5ajjHP5HJX/yunpxpggQ7GMFFZn3wuT4MW99\nJF7Ox9tQyNui8ig1vHslUpOjwXXxf6b9WtCCwhR7nZ4UseY6zECLpuz2jYCs\nBR4v9aODz/1Pzq92Lb8OH6GBSwpb71pjGfCJ9B4Ea9sJ/x6NC5C9vnmvEPrV\nq8Mam3zsLHuVn+7sbj7kM1DmSl0wloCNtZajFsegKP0G4nImlTdsPFef0Tft\nDyzfEw+i+zHEg6as802uzNS8/XLDH5XRos2fcWSetw4xP7qwRd2rt8bGkkyA\ncyvE\r\n=Cy+2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDoH7cCvL8f1sqqxaXFpoLXo6KB2AfLHhiA1O2i8WRggIhAKELEvzQSV6HGDWUBQZuRXWBcny6gDMiZZQnqxuOs8E1"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607698887-456c7271.0_1607698993302_0.12019912431124857"},"_hasShrinkwrap":false},"2.32.1-next-1607701421-53f9e9a6.0":{"name":"@xdn/core","version":"2.32.1-next-1607701421-53f9e9a6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607701421-53f9e9a6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kgZ7DWbPVOvmA0DHNjrJl4KzT8jsP9nP4qRuK4R6Rb1Qqd00FhGT4T/jUmqVlk2vbUt9x7ucwjNqUmkOzhALdA==","shasum":"964bbf4623a67869dd41d67faffb7c754901f684","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607701421-53f9e9a6.0.tgz","fileCount":169,"unpackedSize":664919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf05QdCRA9TVsSAnZWagAAwskP/2EI8URCdVKFIxapZRDC\nbHYJEAfGOjbP4HYuz5wuUGhZ8CJNBucQBMPdwATbgR+ml9M2IWjKQy6UrOOm\nBwZO3FzT6E0FDgUR64lwC3QhvZES56XnPgG4+wxfoPrOmIWP1MjTxJYGtG2G\nNcSUvrMOMN1cFLzI1NTZ2sATLoIqEdoZfwmvqVsjRGqnQ2BmZHYXjxOZ0HjC\n4BZeWm+oum8+LYEcyt/oj2uCkxHeRfzG6qPvhpyYE/fAzwxn098XggvrN8es\nQ5Zve8xuVGC37shUsWx+E38Pp6sZqkMBVrTnoUCFShJVER1ta3dozW1qxfkS\nYBQQlWVo+wqVX0NSFIebl+AGRKPLrX5SZY/20oZBJcEQhcxIbFmREdEAwB29\nmCYWN7ptp3Y7rWWitGkjr+a0X6M48qv6kYlxiGGTMVp65Ab3dqjtSb4EJ7Xv\nOWB3Wxu3lcd0/RCbgU1n9CZlcufX+/33SYVfBCZIKLnkSX+Zb9H8M4d5IULu\n20JyU1ZL7nF6xKPOCCV5oQkMf2Ob4irxUxioUuknRcD9vFAtPTfnS/h5QU1X\nNbIRJOGkm8YHvGrH0myuSunQVOzTIMohrTDOHlT9y5k3gyCSO+RgYCg1Zj31\nY3pmsJM4MZ38toIzRxNIGHGv7Cy00nIRoJckEmz/g5gPsLzXoI5KU2UgDVfo\n80qM\r\n=HWHf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFKJlafR20I7f0yDtYSJh5WKrltLQkifxpiDh6iANCs6AiBAjoS5KgSL+P3F0GFcGOxXZbTsYDbXtnEFHWJyuvnWVg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607701421-53f9e9a6.0_1607701532865_0.21952848107059642"},"_hasShrinkwrap":false},"2.32.0":{"name":"@xdn/core","version":"2.32.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zXUWyUG/7tqo11bXbA0qtKPV1Sl+kmlJg4yKNAPLZUsbjeMa0z2ARPWMbbySmcyYE4Xo2aFVLvPJhddLekSvXA==","shasum":"1b58e7034c7ea9320d7dd2c508f2c066f92094f7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.0.tgz","fileCount":169,"unpackedSize":653781,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf05w0CRA9TVsSAnZWagAAey0QAJ49wLWjTvLQmSjWzjOB\nrBIu1/HpngWYp0Ib666YbCoiwhlTW0s1aPW6iTzXwl/HOm6j9PL0BUoszlkE\nWsUyLI9bDoYGyJCvUM0NmLcJQ+BE3CdfUrOXKp+GEHqe6egDJuLjZCpIamo0\nNM6WccORNU51F68d+rgd/XsPTK+mJBx+Gf+BGtPiULl5NC2H0+/vLTKvHN8r\ntXLHvKyQPqOxp4xP51iSpPRUMcCEC4GaACshrbQYDQJbSbfszOBfu0SowqZJ\noyFjIB0vnWMAfbSKP6FhpWzpHKsbTj7u9rLwIgPU9BrbywULfJ6KjvHW3kUf\nGRLV00gPx1cn2vgMMCd4etHNOauy8mGDJFk+z0PmS6QUS4m2lMb3dksCTUoH\neIJklqO0uYraTkM+msiSNdUBggJiP0ioqDCV+iNl1jeXEGgXBfELviis3Sbt\nS1Gi1vQXpxd1JMLMSBZbA3bX+ft1eaAcvXBwlpNrGZTZ0pmDUPCsAsplNDNE\nTSDQd8GuQq1NCG0Jn8cKYufTznW67EaAC1W8zat5kalFDorLECdWDlqbf/xR\n+lWeKyZi3w5zu+CHTbfcQiYLjlyp2tsFq8NCuw6AkzmbVi2x97CDJDzovC9d\nzggU6aTm8L/EFN7UFJ4A8oBxp0y6pOiYpwv7Lr7xcFn6b6JxIs2wRD9b9gvG\nHr3L\r\n=oZ86\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBHDNI9GL9CIqGhg0BgIQZ2CEtI/ZY1Zypam/lKm1PA3AiAluzroaLRRUhInw+97mYHRun1+8xPtIwZKtgd5cgFCqg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.0_1607703604354_0.8356977250860604"},"_hasShrinkwrap":false},"2.32.1-next-1607704971-f29917df.0":{"name":"@xdn/core","version":"2.32.1-next-1607704971-f29917df.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607704971-f29917df.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-H7o5lWCaH1/eZ2Tmom1tnPW5w0ckn9WndAD2c5sSVj0YblCTHu0gR43kdrUbXGH+eWYWm4lMUnmxCNY3UgnVCA==","shasum":"84cc878c59faaa13af8714e8c9ae2946d84d3aed","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607704971-f29917df.0.tgz","fileCount":169,"unpackedSize":653835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf06H2CRA9TVsSAnZWagAAoSsQAJRj4yjkolkFvu2B2FiO\nuE/Mik0iXTRPzA1/n+2C+/Y6tY0A89EMkVoC9CwEiQNdBRbV7EGiuI0K19yK\nef5KdTrA2Oouz+i21DgygRIzDnbISTIwtNe0DtHZ8ly9n5I3XUIXmesR+M1U\nkItSQuIPh0zkxlSxmKnelhMFMqNbdlPnMgsRByJncy7YtX0lJ2gRnw3W1Zi5\nduXiKamzzt2SEoqnx4D5N4vMQ87ye0ivk76wGqzQIm1m3BNXCJcKAiD/FHEm\nFT5+zQCFxd1JK+xPOWKIH+hIOF/9wAR4eLeUoe39Xf9eDt8oGBhEv+t6jE7r\nULj6pjjY2+gAi1VHhRlS9SyU/wV8CSflW6/amXcKrISIJtU3PGpjVlqtO2kM\nRuMMHYXUeBU91mBV0qlpy4ZklJY0FdNk/VtLQR6FCybCHnV2X7A9BBec+WPa\nNjkp4djxnmMTq7L1gHXHQp6H6+AfhASJpkOtry8/zvLWD+4g95gAyAVqHjYd\nFuZcIKwnzZDwvedVgrGOTYHZbFLM6lE+eKlSvLa5B23JXA51sP8Skzzoem/C\nV5Vwuj12dmGGd26Yi6S9FgUHEP5O0cyMiraB3+syexhfQbOhQnVATxkTvRc1\ndXVajIlbdvbzWdOaU+vPV12IsFJZ3EHl/+IRcbzNdUmht/TQfNT9d3mVgni0\nJ6e9\r\n=AnZM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwsTMYsf4hUePL2bfBRTAtwrkcbhgFaJmSeZV6A13sgAiEAv/NYEM0eUpyUGghFrl8kGcf3rfR3BGZmRlz9GVAmTSg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607704971-f29917df.0_1607705078216_0.31267487164005736"},"_hasShrinkwrap":false},"2.32.1-next-1607705333-488a3532.0":{"name":"@xdn/core","version":"2.32.1-next-1607705333-488a3532.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607705333-488a3532.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+6d5SHcOs0G18qr6pZAEHIHpOWXljui8BgIaELC7EJ60UnoXtsnrFNgQQtwtE+Lz36QCEIB9nEYz+fsLdbXOHg==","shasum":"3e861fada3e8b3f433a0b4bc5026cb3b7efec378","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607705333-488a3532.0.tgz","fileCount":169,"unpackedSize":653835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf06NuCRA9TVsSAnZWagAAsWIP+QAcZ1mNEm9FUqwD2q2h\nbvh8fBwXg15oBCfhnhWnOnO3nYumBJm0P0m9cKQ3st8TWR8LnVes2+ZTNFpo\nWGxQNtHkS6ks4by3ns495i/0O+4qvm2FAHyNBEy8qBPMVvxjkIOp3U8tmIWc\n/NQAzw0xA6rntTBUgOBStWGJdYtzjSUVBc+wRPtsZUGtyHCbfh4bh0TNYR+6\n383TrSoB7LzEqKgc/FHUNgL+Fhz/d0fD7fZHrR6/qqhKReaNCDEvzsXEqRdk\n6ExbeCSmghAG53PJ225GKD0TdOR9WsCJAqePmtFQH14BtNoKh+24rYpiIi+P\nPEkCqzO+gmzIEg6s9/hWIlzOYE0Q1d7SgoK5iz4Xkaob3KDIPPxFlXDylaqT\nggbIdHvwVeQ7+INcVvgTYe1hW6PM0DWUc8ByqjclQVi47wQoIr2sFq6hXTbS\nq9L2mduOOSZPFzx89zlP+W06tztAQiaD3ccfgG6Y3YvflmF/hpn249XirIwH\nnPkCria8ZMsYe5bBwvdB+cMEHUGkRVPs7c/lIManVPeMEptYcM0EdWmEZ66O\ndb1DN6QLfce2Kdgphvd6KVOSyZgbPwI1XCwiTr1VFmd1E6mil1IyzOZViuop\nZTLcosPvF6Y60F78DFRa6N9c4/sQobKFUGZjbeGTgXwub0Qw0hb6L4s4Rl5a\nCZ+x\r\n=oQvv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBYDPZnwSBRZgJWodtFJoX4b2gouAqAAcneCxh2vPQV0AiAlD8zpJqyseCFGj0e112mfJmfiWKEKkgBWYsYjKx+oZA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607705333-488a3532.0_1607705453956_0.511283328273846"},"_hasShrinkwrap":false},"2.32.1-next-1607705763-3e196b21.0":{"name":"@xdn/core","version":"2.32.1-next-1607705763-3e196b21.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607705763-3e196b21.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ofTlkQPbOkFrlhZVnjAyrgGPu+xaC5EeC+0a3cA963K9fWIsVhB1BobLeQwYI1OrpSsKXGi0HwFOBYvdZw15Fg==","shasum":"6a572a6f19ae6dc6d8cd005253ebe49984ac1412","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607705763-3e196b21.0.tgz","fileCount":169,"unpackedSize":653835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf06UWCRA9TVsSAnZWagAAVuUP/AhK81H4MQwq8L6uTlur\nxvYuJOUEnyaee/2osiTxvEaZAulcq0I5eYHlmVH3YKhuXEVesnyZIItaz9tJ\njEvsPchXhxP7OQmHBCF9gcgsubI952JOr5jDYZ9d8OkUlUT2uljUPTqnRAb5\nNhZrKvReZW1FoFjChH477SXSAmb4tmDOE3no2zD5ixewnlySbSNW/WVPTAbs\nS+ino8a7qGdjE0dRlaDzAeJcTnYzWPLfKIJ90g+lnO20BVlVpB59GUSEtdDm\ntYhWt/qsD3MY9rcsgT6nAcQXSxOuL4pItx2m74gp48lbjFBILPDc6RwvMS3O\n3QrAbfPSxLBPEP8ljg6/gWuQVVQ7TI+T0X+JKB2YK1D7h/H9jYTadj++buHb\nkRTSc/RF57DxfUqCURyavSxzWG2So1E4gViRPdzxv12uGXfMgQkhJ9KTIeiw\n8gvervtRcJJOn0o9vnmocX4Qrz1RsSQgUFO4BRgwXJWOMfeAeCxXbXqiw8pV\najgqoUuo34k2lzzkKqXllgLjbjyd1gUhfrbM9xhGN+OGSn5kdA1hvmYGZVGb\nfD9fxVJnsKEZAWIH/OC08OBdxGwPp/o/+1sIH/l7OAVzo1EAX3EmFK5me2bv\nPlgX3BdX1Emqx0xm3sLOoOwzrhUKDhIAZuKvRbrk/khU1KZ7iM2IFvrIsHIY\nbJzD\r\n=InJS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCv76A/5jdWxsPUjA1CHsuBNemUivOTVN/AebP4pUZc/wIhAJHzKAgcop9iNcKhtZYfstSsUs/3R8KoV7J33xGiIqhE"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607705763-3e196b21.0_1607705877878_0.1956795997288494"},"_hasShrinkwrap":false},"2.32.1-next-1607712516-6956b4c1.0":{"name":"@xdn/core","version":"2.32.1-next-1607712516-6956b4c1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607712516-6956b4c1.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZujAyA/SKHVeivZXppvdIa2QxE+SvLRuPfvMYrhXtnR0XpHToWYGD1kUi6B4wU3PJZiY2n7+TIyd6bMJydaSGA==","shasum":"1b495d7b764310823834512c441c0890bc093cfd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607712516-6956b4c1.0.tgz","fileCount":169,"unpackedSize":654903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf079+CRA9TVsSAnZWagAAln8P/3ZC868fdRH25mOGdCQG\n8yDCoWIQahcHdSwhrMAww9fweUkesvxnq7NdwskZibYfeObP7wCtfPvVSx2b\n9QIkOEy46yiCZ47v86txiYY4OZL2Ik2tb7zg0qNxig63fGmGrFuiGy3oUtCJ\ngR37kHSvZ7e9qnK/vZh/65PF54DsX4i7WEf/PFyhoftEItUdeceSXfImXSwe\ni1X+38Fw7oQH9lyDvbQN2Hv5BFXQBjJYgJ32SeAasZ5F83TJZrrtLlZsMMcr\n9fuLMHD80uV+Sc3L5wps+hq/8MKgsxJ/Jh9DkhUwP4V5xv4nXmtdG5TwBtVF\ncvpz03pkyIoTNCeOzG+k+sxqgv7rWkh4+OQwILGlHzAoOoPDPXPANOaRZJzn\nXkGVcnEQgF3v8w+ynqtuDm+XUl2141j0G8McTcP2OOO7BIX9ezqiLo6Ub8pG\nVU2GDCJ4TR3Dt7WZhepjHRmXWOzERpVOgutYtS3bEAlhM5hfmDsdozBzg5Fx\n6IAy+e/VL28tAC9ktwT+s0wz4MDqZyYa5MQ0fXJElbSjvaXJ/HS3MbPFQ5Au\nOokpBBUEPA1IbsPJDJ2Jvc6i3XKT8/C8hfvre/Im0yx6Lb/YElcu48t7imKO\n+DcBE3J8erGJb/pZaCpOFR1BwrW1nGp1SliCE+7V9O90en1Q8WndhBhHGPnG\n5WiF\r\n=6dTs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDy63EWnP0yDTgO7XUUPdfu9hTDvTwokRY8miYWbgDjNgIgKYpkPH0trbSo/qLs5Ll1xHaQ+7PK1Qsy+D3fN+RnmYE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607712516-6956b4c1.0_1607712637615_0.27980926313120524"},"_hasShrinkwrap":false},"2.32.1-next-1607714702-434290d6.0":{"name":"@xdn/core","version":"2.32.1-next-1607714702-434290d6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607714702-434290d6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RBNUFBZ1SCI6Eo6lSQscYt4eD1BD+anSvRchn+q5DecJxPzH8UJlefiAaHZ3d+yhcYncVTIFXVfgUuj73UUeCQ==","shasum":"77aadcbfc92529c2bbc2820d2b5d9af7a54b04ef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607714702-434290d6.0.tgz","fileCount":169,"unpackedSize":654903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf08f9CRA9TVsSAnZWagAAFvEP/3yDNGofe8HY5k7nSF5c\nUQnpBX3RGHX6EHP0RFDEqlykuKsIn43dnA3UJVyDsZJMQ+EesmfVfle2vtAD\nqWL4R6f1wJsGdgY5ZgM/Ec4qCtP0AtXSBF2bDbnsAejFfKdz3XEgkyyoQYmm\nvCDS0Varq5/M8cyp6Y4uxapDViKS4hIX37gtoF/GW8JpGmnfuMuZTRUo7eBU\ndcmpNRvK5G1zHgmdTYSKGuZR/Woc/+ZbI1yQrvLEPjSJ4UMgvTBqPYeRlNjd\nGOCb61YnmA7Y9IkWDXBjWmCGtRmXqje6uZZmDM8PAKH+afxoeSImlG4hODYv\nys0f0kA0llY+uKCGegtSVxz+DB56iImjVLTpdkZm+gOfSTcOVh6oDNZwHYa0\n9BaxUahUoAdyJg3jyA7ARhFxHYw3IL1nrHThzgBZSZCiC9sjLneLN6YhTPD7\nsCdoyY37lWIyjV9nIAM0Ir4nTUy0/2maW3ufXKTStgsFG+f1XrdL4VyLEDmQ\nw6mYUcj13u96jVd6G1nAEsrP28ilOg3E+LAPWBTzzHPO3W6lp1CUIG39PW4J\nQ6Bb7Zct9a2uLb9OEm4kWlqWCKSJDzXGMIZ/LqHUPjPjkzE89N5FWr2gaUcE\nX+9p8vevfzlReThd85hP3LBUdOl+zJeBYKnbH7h1HEmWLKq8MU9oknckDSli\nq4Nb\r\n=mPvF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdCOakhaVWGym7UJHw5FfBSnAakBO9CZhhl6RMEjNx/QIgRiwgE5dDF+51niK9AInJL8crrfVWDXchO2Zy8q1/V7s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607714702-434290d6.0_1607714812591_0.46236295015068296"},"_hasShrinkwrap":false},"2.32.1-next-1607715878-061ec874.0":{"name":"@xdn/core","version":"2.32.1-next-1607715878-061ec874.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607715878-061ec874.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RYsfXG5or52MtAwXpPNZLLUclzQ0VLxUGL+oLzMZRZSXO7L95p6i0YDI9OKM279sVjoI+8BOfrYH6qQRx28xBQ==","shasum":"f2900cdac0b1645c1eef7376dfcf541b9d946ee2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607715878-061ec874.0.tgz","fileCount":169,"unpackedSize":654903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf08yXCRA9TVsSAnZWagAA+WsP+wSvHfPdifubLku4Ze8r\nlx6YktUU1B57BPCQ2n5TZHv73FdaBf7H5uugxU1jw+zLT2OJyytO+zdUSE+M\nBg7gqX3CjEdMn8fMArpdE2FEzWtDUxWXGBgxwCwQA8bcOy6EC+4yB1XQvXrB\nd78y6LL2YaWDTUXq6nDwMbeA5tzW7JfRkEEbQGuyNpyuv/s+0DALiguhD6Hq\nn0TQXWYhz7DA83eG+hpeiE446PyP1HFiL/wONxjQiw1P1QGXaU1q7Td+bm+S\nzyHbyys3lVazPIvx1YVO3xj0Mzs8vaLf+tdGdyscPykNS7wiA9WMGYKCV4tu\n4z7qqsaqskSh+RPRf1rs0pH3ttKYDOB8kzeAKaIZ25sqQdS6M/TxTHzZ50Oa\nwesVbolGCl9cBhqq56njAVb2zD4Qr+hYe5SmugQCbwO7v3A89hxsKTFb1gVA\noQgswH5H6KT/OfqUd1PpuQz1sScMnZRnb6eUk+8qnyR+mTUcJCy9tH+/yLWn\n56MEdyDsBuIgLs1Vk36uoNHnJ+EU0Ol1fycG0xc74p19Y8XgCDDI63iwLx11\nev7qfkw3eRBEwGoR6Rvy26+ShCpD9fR0GaKM01aMc/nkk6Ajgsqum1pqi9OW\nVl24hSOcJB1T2j9motO3ZyeOj71rZnfOb1RMuJcDMT2bFAtXh7jyMVe/EL0a\nw/Sv\r\n=L4en\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVVJeB3r9IZ8uHVYj5WLzjYYjI2Ycggr6YRKzKC/OUsQIhAJzXgppmkuxFWhbDcH95S8b5VTRSPdU+RVjBn+4d0tHh"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607715878-061ec874.0_1607715990756_0.7199952637520917"},"_hasShrinkwrap":false},"2.32.1-next-1607717334-4165be9c.0":{"name":"@xdn/core","version":"2.32.1-next-1607717334-4165be9c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607717334-4165be9c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-86MQ9g5n2x7jtJBVvYRFcdwAOg+HfGwojHPBuDjXpI++0SmaE7krgYmc1auh6xuSP+ime2cWnprvoOTqZIbyyQ==","shasum":"4fc2b4dd67e66604a329253bf75bf08341be9311","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607717334-4165be9c.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf09JDCRA9TVsSAnZWagAATm0P/3VBYNFYtoz6Fpb9R4gj\nr9nU3zKPM7cLeu/AUt+fAF9Ha5fqi+cdC+kgviov1+o3AgRpqY5DRU98ugYO\n6qT9VOX1/DVxBGZZC1jwp7cCG28s7ot1tnXa2S5BsrPQzkijkv9CluL0yG/O\nC6ysMK4MKz5yqqXICGcm4UzTCmiOVfOT5iR5OytawfblkbpCOTBK3XILtSmp\n40++YQZEhWZsCZtoXeEsu8NeMb/qbtw6f/PiCk9eggJAmc6ItNV4x3Q1GrJn\nbBRefLxZcCHBXultaBXGNRVoMR0WbAzyIUEdg14/KCCzX+jw3fv7pX20Sk2o\nQjpJipf1mDDHDltPRue2olkV5lzHJTSjkw8I9Bz1uhuHop9Y8UGMUXwtN4GT\n2hiwGqJCLj5b2ZRnfzFFdgZnZ2NLMfxVpckS1Uywx1dXdhh3jP/N2xUv4JHn\n/CGsyi/r00Mlv5gAcm4ZK/sxm5Ztf+d+1XZUOde33S483odOCdPZceekS6U0\nGm7W9z1QBkaHQJm7ki5/X3pL/VINaos+xEfvPir82fz4NeQdl7Nrj18ucN15\nk9tEdWOiiRtRsDlASB/yCVNGhYSJs00NQvV2hcRok8bYOviEpjygmh5oY8Tn\nIhjIrgMybr+Mgwaizwgt9GWSqwDFcOa9sBBgH3kEF8uNDG5eXWKl46kY8VXe\nT6oD\r\n=vEK6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFW+zFQ8x1bpGc5ArfPxiYEEka4wn1RXeZw3WailaA0bAiBXDnr6wolKP10jn9p7fdvj+ukcZbzpDZ6tU1h6/0gVpA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607717334-4165be9c.0_1607717442298_0.5291752578055839"},"_hasShrinkwrap":false},"2.32.1-next-1607719277-4165be9c.0":{"name":"@xdn/core","version":"2.32.1-next-1607719277-4165be9c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607719277-4165be9c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-taWqhS/SWn89F00m5ePG5C/yHZv7+jcF5FtJIHL/JLcRf8hVNz22iP5Y7zfvFuxENRb6wbYlVLPRZBrqcn7rBQ==","shasum":"7c4f1f606c5fbde0ea0263d5d2e77623f37e9eb4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607719277-4165be9c.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf09nYCRA9TVsSAnZWagAAO1cP/ivCnCLKRuFoR97Wkwsw\nesMp7GV8AI4L6P4LbQd1nUqMtRookkpnD2s1bA6weq5xQMGtTS7W24cvWY7Q\nSHkzhZZZzXQ/sx5cZNfMoncMgbS8TuyNsIaxU5ju+YYhloCKb0kca3Zgz07d\nmPcMldEXDQlJiNgO+ZyGbkqz3VR/G2v6lutKEqTx7owmrzhLlVFKYi7gOSl0\nROaM6wgJAbZ3DZmcyWZJJPMNCiTe8MkSJI6/haS9pRYa48KrxDHGjygoT0WY\nakOw3HzlU0eSo5Y5GTAzH6ztbm/iTEOME8fLXz32nCQCvcVv0kMx5M2Sz5uK\n3PTdzUr/dZuKfNmZFTFR1iQ66qG3lPSovhOcNNMKmKplJmn3WKf2p7LrQHge\nMmrq7lTNl4fRZEX7sYpkPATNZb45V9DNbpc22QE0gCs+QG5b1aktTe3gewWR\nOyhALrQ1IE1yehD17xMpmnMsGpNrq6bbJ1KKGMpye6o1W+kNiG5ON3D/AEyW\n68jGAxut3kIm6K4BmbLntR9KFCkoIO/ICbAUMzt4BLliwGgFzCvAn1twSPZ7\nqrF+yNKs1cYNHeJkxFvwlMQE2yjdTJYuwpzlMODjnAh5njnMa3tEzvkN5V0p\nWu4TA0TgtrmeOHb4F80NJwlTyBrDU0m0RIMdfRaPZuVP8SSV+F0CWBB7fTYt\nalGN\r\n=YjkW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF2CgOV98LJBJwD/RXwGduxxTO3pvS0UvymfbIP6F366AiAgDbofDuliDP1DPS5kcfV6LVa93iAKtetsIR5kThv2eA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607719277-4165be9c.0_1607719383586_0.8573875212289495"},"_hasShrinkwrap":false},"2.32.1-next-1607720585-71aca485.0":{"name":"@xdn/core","version":"2.32.1-next-1607720585-71aca485.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1-next-1607720585-71aca485.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lknPp9b/J11a6zc2hiT3FMOB56HBFhwo7sUrjpIl/penWD3c4zKWtyPwAZw8MBjZ7GvATVtvFc3pObA4DcsMMg==","shasum":"2d6975c33fdc0a24ff0b9438e869e10711ed645c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1-next-1607720585-71aca485.0.tgz","fileCount":169,"unpackedSize":654903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf098LCRA9TVsSAnZWagAARVQP/1U8wfRU8JzV1GASCpYG\n1ZQS5ozSYUh2m/tcnqvYdgn/sOUZ2S0taNP+kU/NULwRdmuDpP3JgnLlWYJk\n7JS65zsNaEKpDgC/uEMeOpUNwo6zWqqQOLUC/o81AtwEoUpe2cpAbfBlrABF\n6N0KUlZt92LMjYjgnX0040DROr2lKz8c/SZt0GIYSTMsmNUK6bYWlX6iP2VE\n/qocepfl6OdXfuDiOqN0WfUdZ9wG2DPzqoKL7XlzmPuYXeSJzWsRCYE4c6+d\nBVySweHb+fcuV4shg3Jqqv4JvCSwZbZh3yyXRlH0DXDj4gxlEI80U+kkKo0X\n6UWo7T8N+mShUHodW+30gII0I+3WJz4Y4pNHwyzZvanNfNhyMiyi6llHRihp\n3ajMnD5gQHK9fiTGMdAHAgEd24mqABE8/RBVI25w7cKf5Eb8uDugBgqPTu6B\nIXydcQe57AP1yPzZRsOd+KIkFP1fHqQ3cwfsiQyJetgvGupdsAgbAR63tp9B\nriuFg/ZZVMdOUPr2rOBjfsIBouOrKb3NRVcyqZoktWhjLxheRwYBURoFg9KB\n/P7ATbpbw0IpAP4XdZG15DZfwZsWzlLnCkOrB3eDQewfF2LBKvaICj/9OQgF\ni8dBam8Zyl1oK3ozmYl+TX6oF2NU1atxV+/PIVjX99LkZp471qH37DUNRqHL\n7tR9\r\n=WguW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVu3NZSsRZW1s4Ouj0Cl0T3c5G8WZUPkafzud3bF7vOAiAkTcZO7oHr5nImTdQ7xOQ5VuOVU0TCa8gJlbGeygmhrQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1-next-1607720585-71aca485.0_1607720714382_0.3542906275128952"},"_hasShrinkwrap":false},"2.32.2-next-1607720658-d946f598.0":{"name":"@xdn/core","version":"2.32.2-next-1607720658-d946f598.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607720658-d946f598.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9G96aUqNJzulhC+KiyvQYgivyo0+sxbKl5EnVEwNqqvlHSqqv5MXGVoUPwz4n36SLWdOmtz1Zb3pn6Hsmvjh3g==","shasum":"ac963a5c539066384ed57cab7e5f3c3c608f4fb1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607720658-d946f598.0.tgz","fileCount":169,"unpackedSize":654903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf098+CRA9TVsSAnZWagAAMEgP/25VaQQmp3ptctmYl7jU\nan+CWSpTRKWnQvBGx7V7xa/PFriaKcMmaOOh5O0uhUPsun2bSAxMc/8jheUv\nWdfOUc8DvG532Y1Hq//dvqIzh1QPJSTsbhKXjY9Pcgo3qvFRw6kuPcYF52o5\nxckNceFDzRiQF4Kzj+oKyqPVNyoIOYoqZiwL2sOaYUO0Q78yMWnn3E2vxCyr\nAvb3Y3UAFJPuJOTe5mhf0zvONAk9BfqHzHBXae+D+icho44BdT+53gDP4g54\nlrbRJ5/EA8n5pOGX606q59UbL+9QgT3h+FPX29bVRGrLK4X4Pr068IhsWCru\nnZf0gRloynVq5gTEFRPrOtdc+ftv5EZowAqz1uhw6ChZqiIaL0MxzoIHhvUk\nuub5V5lDLBDSOG2z0Xyi92LiX4AMr9Cux4lpuwtbDF61sTNtWuwNOR+58sTo\n7L6ZX4A08I+Yfkw/eTDnze+yKRAicCr8Nr/OWnJm30f/MT3BWQMi2sWzxitf\ntm9ZLCMLDqhUZE8HRr4Bnylz6KQQZ2aLIDIDhLSULpWUki+2LOQlS+v8eH4h\nDwsBt6HyLEOE6jAGsm85Mfo3s6wERY+C5RSMeW91VyXU3QxK2YGrNpoQ5h21\n4eYQS3I3ckOkMAkGpD8JC/YOMIaOK5obeWMzKGrWDA5NHebM5stQKGxnQgoE\nF6yj\r\n=0vKP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTY8HQ1dUFI8qjOiTnDpwvqEwC1JL5RRlyg83+PVDLvgIgAveDFNXjIMOKAYSdkaFnBKwyXnrDVXv8BbCYmzsS4zQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607720658-d946f598.0_1607720765411_0.6560448574889552"},"_hasShrinkwrap":false},"2.32.1":{"name":"@xdn/core","version":"2.32.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.1","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Dvn+cJV2l/D1pPX2Cn7SraIiBUeYuhsvcRgpfc2sDWaMvJOVWAgPmX6Ht/Le0EBsxPNiqIcraZAmg2dP6spCOA==","shasum":"ec7f88ce63a4aec79b077fb7029898c565c2fc5c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.1.tgz","fileCount":169,"unpackedSize":654849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0+htCRA9TVsSAnZWagAA7ccP/0451jpY5cIP1YBjeAbP\ng6P616uYCyPE+8CmEi/qbBImfLpwUyNYbIUfV4s/n9gFomO4lkRpmp5qQwGl\nlgyF7dbX5XmEEKIJrNr2UQ5AFLfGBk2GDVRroQ3vMQrnXL7qCFOlWiYKZjsB\n18MxPjz6/IERPqJnPg8BxeIJdZNHnbC/x7s8WbjcheNTkp4jdWPG7gQMZ0pR\n8Ox6tW0S4LdG2rx5HboFSKOrsPsNot7KX8shyxy+xIhvVMjHvBZVvwCk+ruF\nOJo3A62gmO7NTkUP60Zs9gugv/JjCWSRvpj+c9loNZ2YyvSXc3AbLygDNsAV\ngV/+U7ssgzB1nwwuJUwMzVwEt2TyNJQw7LROYYOubB9FPa70I+u/2N8IBdAs\nlgKcVAOprR6U0r2UYxCsZ6SEw9io059AgirzHwPp7Ff2XdChuArtea26ztJL\npLPTd8zjZz51RDE6Xgx5Sk9+rl7S7tVr1MeTKqWRT+tk0zorjslVoC3S2i+d\nrmHiQeCgdjRzNoWLbIS7yoCzXoIQWx4wy9QQlEo+ppkhouciaZiIAwyGQvyC\nNALTOjxBekIDIRecqXcJ/RXHgZXMwnePQuMXAqVK4135Rlh0ObApdTcNqV/f\n/8l582ZVphM5FcXXb/n81Hry7ge2az//eE09D3lcJAF+QflB+gNJrEDn1MH2\nf097\r\n=ZgRW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICY1+XwSDxT2D8IfnoVR1J3CBaLFfblbYOd4dg9iq6kfAiEAwEUU4noBlR+rKBlrMluGza2n/hlhKTvVu2ynztXfQ5c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.1_1607723117078_0.9221639918505173"},"_hasShrinkwrap":false},"2.32.2-next-1607936112-dbf5842f.0":{"name":"@xdn/core","version":"2.32.2-next-1607936112-dbf5842f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607936112-dbf5842f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-iKdRqQ9Cpau5Pk5ytzshOYObZpmtA0jOBvBe+fQdRgBBC8r7QuUvsd/2noYApUQa4cNPBvRgtSlzUsVsM8RqCQ==","shasum":"beacb21dbeeefd2523855630cd48cd8ab43549aa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607936112-dbf5842f.0.tgz","fileCount":169,"unpackedSize":654903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf1yjaCRA9TVsSAnZWagAAfjgP/1r4pU4sW54P5KiNdrNa\niNMLV9l/yUu+uV6e2+OJxtqB4fn83NNX4GfWvPMpda7yUvu2LYs8HzLZDaFh\nHn7Wfy63kw6SK29FhyItDbNSLeET2dXS/S2i5kbym5eUzep1YCXfhCO+5fpQ\ne7RKEH5Ibd8fY7BvhJ9OEoidSCzd95RHwk3LBSgKuqrWfSX7GqMK7Jmo5XSn\nQ4qHyaG7Ei0ZeDIErgQBBfkINNyoxKEnwD7dBDUcLu+sawgRBbDlhRGLsziZ\nEmHUrq7mF8hsEzqkBpbNYuAyMINGNWMe+Vqqlgk4pAuUb+9eN2N3eFUz+aly\n01JE46uKwu3zwIhmHc/vJvvkV+OE4Hx/UCENqmyqvDPRfob4XNySEsOnyt3+\nn9loZawAOnxhkdbUOvp2HGQu9Cdme29yLG6yfA0ENEciwJjo/qrFM1bmn2+7\nCDP5pypPnpz66J/xF6hNe9bZ7AYuYixGMO5nOvAawp3hH8J+QIGZALw8DbdU\nFYx+tsh0IYaFtcdCguIlecJMdkgIFN+uMVboevMn2fqkJEK4le9ZFAn6Aagh\nUEVB/Ws4QdectfLWtmmGCFwTSceUTaD9B+gUCkFJ/rbYlKJpdui+q4cdP7OC\nm26X2jMvwMQ3c1kWqNkG1qS66dhA3U7y0FnMo+KO2kBrKWS53jMBejdG2Wa1\nY/rJ\r\n=WXbd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAP3QpkJhp2j08I5IAZEsx8wuPJvrOGpHobei62UFzj2AiADomAmAumy17aPfUxrZCtAz0bl3D1GHPMlRWBrG7Cbbw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607936112-dbf5842f.0_1607936217302_0.6433226603272022"},"_hasShrinkwrap":false},"2.32.2-next-1607940357-a1de5a51.0":{"name":"@xdn/core","version":"2.32.2-next-1607940357-a1de5a51.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607940357-a1de5a51.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-pzU2SZ4yOY6U10OhzSVDAFBTsRg/dH6NoFFOOrPy2r5rzI6e277UrW83I/U4k81YkAqdNlZszsL4CJEicvtv5Q==","shasum":"75b973afb545d328438afb6c3326b67c8a9b6dde","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607940357-a1de5a51.0.tgz","fileCount":169,"unpackedSize":666036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf1zlwCRA9TVsSAnZWagAAaXEP/0zYTf7tb85d+zqgl+j5\nhjE5iteEsd9fu1PeXd888i//cfjyH/TDUWra2ggrSAuhx/XGN7BBKO1ySUxL\nQ0Qedvxqux413wNqSn1xlzE6Ay/kIXWMOrPxR+OA10HYXdNm4v2JecjG9/u5\nVVcsCcPxr7/5R/LkMFhxhm2nqeNagvtLto/nhlGQBPpJXIsZ6un+nLklwIMM\nLUGnLPJ0yNXUkwzlG0kuWMJZkuHnB/a0uuDKQHbkn4ZkMEnsGtw1WVWl5Mfw\nzdAEgCvnAqjx/gp96bho5ugWPB27+WnvRe+5k07yzK8HzuBP8jSyYdESKacD\nJc4wUFF414bip7SgTQoixuLg4uAd30VxWWx0SHF97byomlYLifSsURA85hno\nNbOrB0TovTW0Y9HOmNETcW07NpBFC0bRSKnLHr3eHsz88GegrOHlv6vPtJqK\nA6tcHlnyjdiTZIKN/MaHSDJkrPwXOSDKWIZBZbo8peQttSPg0k5nU+2vdKR7\no8HEbWXrhCX7oJ1XzlptlR4NjaPz2K/OPYZzUbYiHJuX7I7k0JFSMlL7xlwz\nHn1FRps7huh97dcxBBAqEQBTlA0z8W2BlqLm1LxfXSOZABPcvsxXt8GoT9pL\nRha7laXpdJNQJVfzOfOoMJWS+20yhiXTvBFjuCnJaUzA4OOg53cb2Ph/HiJQ\nPNsC\r\n=NIiX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBRw0YxijQ9mvpTPmNL5AkqhatoQrT9u6uPwlDU8KfdwIhAOejJc01IiPnrreJVTQArmyDokaQMIgWZKKOMjAe+NNq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607940357-a1de5a51.0_1607940463727_0.5063900517551378"},"_hasShrinkwrap":false},"2.32.2-next-1607941267-c1faf96e.0":{"name":"@xdn/core","version":"2.32.2-next-1607941267-c1faf96e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607941267-c1faf96e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wW9ZefbpWl2x8Egnirop3bLnuc41DKCIA3H2OUq6di2EI9Gvq/Xs1kl9GpDRNbuq15Vov0Gd581+TP0+jtEbrQ==","shasum":"b4aff395d9378c3cbb9fd80b7492691d48eba634","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607941267-c1faf96e.0.tgz","fileCount":169,"unpackedSize":654903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf1z0ECRA9TVsSAnZWagAA194P/j9NLEJDQiKa2RYP8oZ9\n16fzXlaN075VsFq/MjGz+sVGCnsb//PEdry7PV5zGbKhPRM8QiTWHlsegi8A\nLPT/F1+UKdJqhJUXHt59xvGnzIdq8Va7pjU3k9nkuaCwfW4h2CqjwEKl56WD\neZUedZveGV7XHP1w/CF6jtMKPYCdUleQMmjzVGYNf75ndup7wiBHSa8UG+9W\n1QzMWsShyyLV+XXoIzUuQDfB/eeSHmFiZUNYL2o/smfYYk9EvGcYrcWqIS/J\nzaaPzhoDbRCJpjlsVII7AXcmbRsIKuDwGSHH16P1YCRuzGmewc0pI8Ls9N3I\nBSW6QB9u3t0MWFcLhfcpsQO/GOLkgbTkB6QBb6kmNscvTBLq73HYPCYpLSTj\nnO9ukCIWzZIEMjykFkpw1sHBeEa0ttTzfQJKmQBVgH0Zqu91aH0zAxh/es4K\nvcbqPZ0QRXSDuzvAtt0YjrNhxxSyloFYy5Ge6QPAR/r673MlMcAfeWq/I7gb\nRSpA7EJxFRzrBUMErZrnfAu/V8xW0igNcrV5OF9uq/qX7J2McKD/0JxBgTTB\nk50b9KlMmfRD6aN24uogK3LdROCZptey0JGgfNN9X8l21tQLJSZM0N/pxl+I\nfwtSwydTkmbLi96O77Mzm8BJ+UFm6ETnqH4+N1RMXWtxIRd5rNvtEpYcnY0I\nF8jP\r\n=dUK4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFgODIB//DheOXWeUAk3ZfwxkKRyMZrkHyVVuFOEtSKUAiEAqPqoj6oqbldjR5btbVuaxFBaEKZXBpuuqdrmKpsp+KY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607941267-c1faf96e.0_1607941380039_0.9103620601886224"},"_hasShrinkwrap":false},"2.32.2-next-1607944586-973d7b0f.0":{"name":"@xdn/core","version":"2.32.2-next-1607944586-973d7b0f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607944586-973d7b0f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MYEBydgcHnAlLnTx/EpEVsHobaEpjwaVFK9SH+F4OVVN6+QZPu6khz8qoVmUTRUNkJ8S1Slmxz6+onHdR8vyig==","shasum":"ce6072bc052fab0292e5c29d5ea207d11ecaae8d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607944586-973d7b0f.0.tgz","fileCount":169,"unpackedSize":666755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf10n2CRA9TVsSAnZWagAA8/QP/jvUIr0uP/E1VFVHBm8n\npMOi06nZEN4lhGIQHQzaJgO3TICiBB/DvQScUsLzHZgiZnlD3n8jSU7KOf7k\nIoAj4wqeVV1Nl+Og6Ku/DTCXbs6khzBNDwrmWkJaOz3R/3z5RUEcdw0bPpmp\n8WaM97bxcQ+JTI3jNccSW5y0ncO/kZxhlgTlvGWOvebfqvhtp36x6meb4/KU\n/BnScTLV2WrEJV0T56h+3i8wUN+P6heu9F6IRrkjxahkvsipNQEkj2N1tMu0\nZ7PKQo67hjtcdf0Y1Hpf31+KIS9TDe8yMnXG2T1xI8uRgbKyQB4j17eAxICy\nwqzypkEtjZko2IQSJR7oJIMvlZ47/bWmUEFU+cEkRUzy44gNw+6QYyEBaX4s\nl2Bhn2vys5evT9IgpMPFhwjAc5bnkqM524W8AyQgwd2kkYkADEd8WjAol1PP\nBLQ+b/k85D37J9Vt91pMVcmztTYo1M2BwtB61edUMtM8WrnFVILSHQT3+D2T\neC8iv8BtTLM0Cflm0+V1ur0XqgUKBQjlfss0D6NFNSB2vpALMeyEI2a/JTQf\nXbfkvQ18GxcITF/OwbvV6NzgEBBAlxRoFefdkdDdJxFyFJq6NO2qfel8tlut\n5omYhWcFIcc3UEdmeW/CV/PF1oB/b31fHze4LQLyYmSqv6V8HQKLKU2JPxfn\nXuSw\r\n=l0NE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4MVbk2k0rZFGiQxZyKzXHYaMA4wyqDGt8qXx6Vc0AzgIhAKQamMp+unpAGtOTvEd52RYafmXLSC4ckermJ4GFMlE/"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607944586-973d7b0f.0_1607944694099_0.49022641409722834"},"_hasShrinkwrap":false},"2.32.2-next-1607944802-6397f7a4.0":{"name":"@xdn/core","version":"2.32.2-next-1607944802-6397f7a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607944802-6397f7a4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-PDaJlRTAgkjnyFwhSPPqMeYtzwja5GKjs5NjOplam0WyOECMsSbc4g8fzKUokg/lU9Wt+l+k6nnWJgzPNmajdQ==","shasum":"14fa42d99858efc903c45e1cb5ddd75677f552a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607944802-6397f7a4.0.tgz","fileCount":169,"unpackedSize":666755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf10rMCRA9TVsSAnZWagAAWKUP/0nAVY7HFI5tofY7ob5T\nw7FWVCUBsQHRgHdi5j7qfTmZxBUqw5fsDKqlI40Vz99TPOwcfvE0PWe1R7xV\nAR6rUqhmzt4nOvvxlJayMSkD6IhSq8CHwUXxlL5mCvTit4DuOp/y4hdWkm93\nPXmnbuFjNcZ5X83Zc/PxAiRI+pdcwugl0dsXeiCOgjgvlj5PLstijsq1kywR\nsf9l9DiXyGOX5geFBw+1htwwhj+I6FbkDg6w40wx6HPc7sX6EQlD9awjmJU1\n86KciV1j+qaMTxKCqEmDvmBJY2WXvG7m4A5SdydgIZw6DG8Xg2R55yOlPtSb\n5sozNGkf3nWuOsRu9UfOSo7ral7Rap2NXgTQRdECdCYSwPtr1K+Ceu6zCgbq\nt6/sLydhXByItqDnMV3B/5RQmrx+vhTyGQFw4rZhRtRvuAWPFRNt/W2BIKYK\nFJKTkIAThYqCMzOA1b7GjrOFmDeZJRlkJMqkV0ZWGCFbgTLd37kGfH/oSMeT\nqtyrhnGu5Ixv00kIblsyrjhvkUaYeNTg6i/B8qyDJbOPszicUxfKsdCyVp/x\nhAvOgHeIX9t01BPs7cElEVuFA0ycMyF+eEbm1DkhNXTJdJ1XBsXgu0hcupNm\nM0pGss2PsMph9cxeeW5hBMTkuC6CApG89Uy+ZfnACi+mof1PFRs1zZe1GS2e\nfztI\r\n=dGWm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4Ojy8q8GmemDxznsotmh2my/TZ70iiX/MavQZMRJbhwIgafX532r6vy3izMoZpiZEmCTkXFCuWsZ5Y8H1c3hRKhs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607944802-6397f7a4.0_1607944907279_0.7853115786086535"},"_hasShrinkwrap":false},"2.32.2-next-1607951952-15540a8c.0":{"name":"@xdn/core","version":"2.32.2-next-1607951952-15540a8c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607951952-15540a8c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-JhshSLWnMsZxRAplMMZ3FZCnSPowNoabl6oaHgT2r4tlsncr+2IJjRPSIg7Yym/hDIZIDSpXCH4GRQ+7pzploA==","shasum":"4f10799ec169b73c958965e02463b6f597f2ba79","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607951952-15540a8c.0.tgz","fileCount":169,"unpackedSize":666755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf12bOCRA9TVsSAnZWagAAxX8P/2Lfi7lUc3L9A3X/ERBG\nvftBwSu7uWrN4zdhhcdjbnWGIFvXPg0u83cS3pvOHKsOt4Et89Ne+V1C+/3a\nGQ+kIATZharg+YzL+8dZM1/Evb6i4k5CetqjzeHbKBzJou6Edna+ofgbSDV1\nXkrY2hynso7ibyLcAHkSeeAV4pNXshG9CqaiAyPfLY/YxI3tcrSBL0CSW0WK\nSuY5zNyFtsMzDvAZIgNPd5huCZ6XwJlyVc+11nXMHw1b5Xr6gTsGB2kfPq7y\n4/Vf1f3gY3n4HW33hTaOUhywuwwZgMDLCelkStaS0rhG0mXhKc2u7MeOR7KG\niDQLp7woFTbt82N/R0EbpJObvyB2yxNKMLhn1TRILtlvqW+JfdyoTiymIrh/\nDmKT2isZddVZGpfRs0w7lkudsMYvVpv21KQHLK6ATqaMiHqa/fN5g/I9v2VO\nXo3j749jJoSar959sYEzA/BLQASxzWWr65GON5IcGqK0vcduahzC0ngZqtj5\n8ceFAKULwkeHN45KdG3ESXiQxau3GfeGENnISEoS122XNNmrzBR80hgmratg\nlv5KAqf08K/aHs2GbzX3wvC4OSdImTi2UKKeANpsV+odCS3+edWmrVc05gY6\n6X2W/V3UPfOsrxIjB2Ske4n40NHtTt6ENeCUyFXse2iczzswKB/yJ0X2sT/d\nPWIm\r\n=z47e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBPCAdsXpbGGc2iFksh4Mh2kuenSySvARMXJfNv7ge5/AiEA3eVUnCUx2GjCdE4u/Dw+5YbU6Wu5UYLcUAhzQ8qHHkU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607951952-15540a8c.0_1607952078342_0.6215903089128951"},"_hasShrinkwrap":false},"2.32.2-next-1607952037-358f7e06.0":{"name":"@xdn/core","version":"2.32.2-next-1607952037-358f7e06.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607952037-358f7e06.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-d7X7dEtesr3yEJ1Be+Su3inSa/ktXvPcBTlXwjyjGtm21j0LqAPGpd+Hrn1NThufiszPO4w/rwqYCSyYWfQGDA==","shasum":"9d77ac39ba5e28194fcaeb98e277ae0ec121eef9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607952037-358f7e06.0.tgz","fileCount":169,"unpackedSize":654861,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf12cZCRA9TVsSAnZWagAAu+YQAIl8njM6/c8oCOvCfe0l\ngq3EBJfyCtzZayVp1qU8XXaXnWQxgrW28/qPc/hnZmIw0VhhWA5Gjk8auKNK\n2v2OCE9C9ofT3A5VNQX6ER7dYTIW0VMy8JwBw3ugUoM1spCnZOY5H8KEcRa9\nwhw4uI+8TQdmNwWKSNqkw/v+F3uakZgCer2b+ya/mu3Qo+KNUk36R5+/FSbJ\n92WicMANfSe6ArmljSEnyKXbtDg53bPBPYir7hmCTM9q41swb9PucFxMaZxB\nrO9FaBkk/AB4Ck76m7CNiipO0WcaoGEksEob9VPpbUkefS96DAbsIoHyuzgI\nZnQmMZGhRqAog3xLraJfNTFjMveNUzWwYbE83UVNr/cfp4SkNz9wk7tt4Y47\nifOfwE+aJ8I3E38TIjIfQCn3RAvjHOSV+xJNfT5+rAV0I+K0crmezQl1z7uF\nxN3tf4xKLDOyIuFrcLvYVED0o0imcwPWjX3Grc6fST5XP7A7YWIm81B3QWYS\nqhSJYr1JAFEwEmLCOC+m7wTxOxFX0La7R2JuLYArWcYN9TOBft/dZN8QBvkl\ng8cWGeqVIDeJ+PP+LuBFs9x7e0QWvPfe5FDLJC830iL0PxnCMGn4beqOGNkD\n7nJb/E1KV1pVB6ufT1uT82QLUvvm0ENfIo7JjJcCpaknWgORuIoCyXuIC6J6\nzane\r\n=BDrR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEyX6XLIbdtb0Hjfp0ie0SZG42cR9fElYp3rhOELQVLLAiACM3YfM3aua2qSp/bTv4kwzZnTEFPt0dJDWCUozlw3ow=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607952037-358f7e06.0_1607952152531_0.3858899538906122"},"_hasShrinkwrap":false},"2.32.2-next-1607952972-6f121a94.0":{"name":"@xdn/core","version":"2.32.2-next-1607952972-6f121a94.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607952972-6f121a94.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-x6dOEPwPCn8HNjVwsqYbxofM7NPES4PRaWvqAkQqsjsPmr+18joux92bHTa4Opf511k1jYsSAwH0lOITVY9GfA==","shasum":"e6d6c8881c13910898ab175f5239868c1998e97e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607952972-6f121a94.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf12q3CRA9TVsSAnZWagAA9NoQAIGJy0wllkFDeX3jxPVU\nc48IMtESU1670qTq2jcj8TOVEwkQ2nMpzEFc0FlADrijvVvKQKmDEVMObbLv\nwzJoTWOfm59aMFAtyP2o98E6uzot24l57EUyx+WIzO1L88dZhTqQrWwlTTq0\n/zS6QqqqAXmaLL29eqtGGyZabBjIMQCorN/f+K1TDccvfYgjSM9BTG7Pmut4\niSEny2MHA+G7L4lrVpoIuzDsGY3WmZMswD17f+UqtOtNvkNC33bDKupBsjSV\nF3XxYHVL+lVVqycXXYqpep7dpzxZkBIS1eOu03G9RHORVZIFUBqSVqbaBs6X\n4CPjeiY2ff5HQRXOUwD7JwwBPh1KDDm/Ju7EHfHUyvIotFUQHYoFmsA8myT3\n2rhuyaSeD8zP2YBq/PVM/jpEsXgFAAACQ+mvShYEx+N+NQvuyDPkfQeaEr7V\nu37YIRMJgjw5xjIAnn+o748ov/yfZqKoBhM62kmYXcVtrvEGiYj23glGmIBQ\npt4yJLNB8XCYwdynZCiVTinF2k2kctzML/oXBeNWnBD9k8cILX+mMRCh6pXB\nuWXdVeUIsCkj5P1UlutwYKApOocUp6MKzHrQTgxW2VT+A0k6Co/Op8nIENF5\nmTHCm+VIthWngwKbii31LjlV3fw5gBRXiwZ1HBuaFvxsRGS4T7BTosv5+SQw\nPMQN\r\n=3ejy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAEWQgWBSx+JT4SzjflMjIsgG56TU4yqvN6tiYJAK/ZOAiBVitHVPEkltdzVadePm9Dtu9Imrzy3ZuR62LsYQwV1RA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607952972-6f121a94.0_1607953079170_0.2633670239469146"},"_hasShrinkwrap":false},"2.31.1-next-1607957576-e48e52eb.0":{"name":"@xdn/core","version":"2.31.1-next-1607957576-e48e52eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607957576-e48e52eb.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vc1HtotgQqx9m9IFcIaBSPCvtkdUgZ3+eSJXZpAv/l5YCX8rtrpxfmzLr3B84o5kptFxCW0MzWP3eRqW1zCXWg==","shasum":"70086122092d198115680b2f5342bb9032aea9e2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607957576-e48e52eb.0.tgz","fileCount":169,"unpackedSize":649000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf13zQCRA9TVsSAnZWagAAd7MP/1ukvy100yBVYyz0jIG0\nfvM24K+RnE25GG7Fk2XGyT2sOrZFyT7OWgGtXRHkhXSbmzT1elE7AhhUKwlg\n6jzW//lZHRoA9+r81DEVucvBH8YKMSrUIG8u/KzE2DU0RvuZw65TYX7mz0cg\nGBqdX0oD/8xqBUjwCGKWJKzI5Iehumqfkdt3oCWwiuavnxbotpMg8ux0eJqw\n+bcy1GirI8Lc5hgJ8rYd08XrAyAx1i8Jv+9aaD/Gcz9sILuq2oopRpAtZx34\noILLBNKUrVg/wMx4Mt7ekLMbUtaQ4ifGO8XEofehXqW7iMx0vX/RyO5OMbA1\nsn8Il0b5A3i8pYVrOvzpttuF+zBN/YRgRt2/yToHiZtbcGxKWRUwlcEt/swR\nBRGIwA35OUEZYs9UAxddtYLkr37v29HqqOXkUCXVA4u5xQoGEfLEIEK4rSrE\nAyuvy+VdDRmFJ8dh1I25jwe4sQIen5fhcGCgUlUki3gKuabpj4FJRPX7io0+\nSUM/qNQs7rgKOdX3fqP/U+XRuZ9If5xfov8uTtJ3cq8fYlDB8v2NEZ/CVw06\nxLKYHn2/FPBiCDsw+oEaBUczGgt6pgs2kFOV+a8T6VuKFpWJiij+JXLDT1FQ\nVlFlSudYVFYT7j8/6kJnNkuCiRSGlTHLPc6UOKns/zSx3s/a9Esx33oT04js\n5+D9\r\n=/X4D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFQ0mMPvWC58sHLV9h3i+rcc+TsHZSB8jBaYwOL1AMqQIhAJMZXdRUE6CLZJr/y1bg/7MV5QwUJXA6qHvYh0BIWBJR"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607957576-e48e52eb.0_1607957712289_0.27754657178472697"},"_hasShrinkwrap":false},"2.32.2-next-1607958276-b7f6fcc7.0":{"name":"@xdn/core","version":"2.32.2-next-1607958276-b7f6fcc7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607958276-b7f6fcc7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wEPitLUdMSkMegK/jhoFyA6ZDXekeM7t8OzIEPpcFj4EqGEJlrPQILKh8fryJfxz6mgPaEFTWwaNlw8RiFIybg==","shasum":"b329a6cce78f3de3321a6643cf2b50358a066b11","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607958276-b7f6fcc7.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf139/CRA9TVsSAnZWagAAtW4QAIavnG6UtMXS+iy/oSUe\nu5p9EQbXHVGaA0fQpVCNBLpC/bH9Kz+nMT0mwgI7jjFfHRAIhIj+OhKrj40b\nJO7Me22/XWuArSptiePYokeMdIqRo/JEOR7lf/9rmWRT6pKaT2b+QVHNADoH\nTOYdi81lzKurXEiyoFOfU5xlutCUF2FMl9Uqa1I+pU1IPcesNdpStxDFqx1t\n3vg3ILm25pbmyLoMKqntFEQKJN42/eDBnVo2e62EfhueG2e+nli+TjXdTVbU\nEWvzLFbyvHCJSHtHwtGNJtZ4UQZ4TOdTlq7E8Ja0JSlbJ07IZ8KL//zPjdnv\nwFy5J14RJpzmZ1CLm+NBEJzpnadbT8csRH3h2kcQ1rX3pCZIhjdgPKtC5bfZ\ny0J+1lgTQ5iyCZ+lgMyiSLz1xh9ANFSi+NZda9iLopnFQnXu1tjxuXsyD8n9\n63F766rW4vLqDvu+LMYlC3YdgR+JoD0ARB9FsqsKcnVUtMIcXd+ZWjOUyzxa\nPixzrK1U30gB1W7HLNe/5aNHc/+C+6laj3uSVTX4633a9eKir1QA5G+DC43y\nsdsMSM4pWWMq3MGbM9DIiyIdVhJb6DlsRazI072bFVvCA0VUmu+NrQVr/0dB\n8RKzPgOl2ZN5fDY2i6HVAqaqw9QqW2Wv29btYVBm3niXT05axWMEyj+BLIei\nv+LV\r\n=4218\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfHU0EMhyvlCxOe+f157cAhs+6UKBNrDY/j2+fEes2wAIgXWc7igO0oxW2IEWdFq68SG7HdsUciTdjtSfhlBwhjzs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607958276-b7f6fcc7.0_1607958398858_0.14091300231450665"},"_hasShrinkwrap":false},"2.31.1-next-1607958315-6f557338.0":{"name":"@xdn/core","version":"2.31.1-next-1607958315-6f557338.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607958315-6f557338.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hNGN38pzhCnlEsaYxpbCdJHH+9w+smlxxD9IStzVvau2jB9DR2gx4n/SevPW+PszDj12Hwz403N60PQEwk6ymA==","shasum":"8f89d956493ea126ecbc39faaba5e2786813b97e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607958315-6f557338.0.tgz","fileCount":169,"unpackedSize":649028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf13+bCRA9TVsSAnZWagAA+KkP/0bV/88xkGVvvWUdLKza\n3Xsks/tdcqaUhuBBLIwit3AASVGcdtI7yCpyYnvgyaF0wmp9mJuivasX2lFs\nurpcddFgFw3x+s8kIzSfk5qpnFcSr5OP7YXSyl92QFr0zKIATAi4/Ud7erSf\nzvnoY5NZ/Nmt35hSVIfMSFl3qYLQretAU41hS0uXLdKVGurQQH++bX+hK2V7\n8C1B+muVgzBT2tZslJd0E33CqyvKffvh0hbgPMOpPy+/Xbfc2hcWipGCnRtu\nzQKHYVsaWj+a5rPV96IBQhb8o43MHdDoO+HVYHLMRazlrL4OBM52ZKfI4IDb\nPz2xDgw5jtAfk1cY7I4gZiLzTG0gwC7oAxdo8w5le2Krh+R/hRt/VGzLN7jd\nsh/K3r1t9db/5UwtIGzDVEe7FJ1B/M4INCGWQ1VBSOVi/PilB6myyXp+LgB5\n5Mimbnw6v2XYGfuXTAyMakLg3c9h5JYXoDYDE4MdODQuFNKgFPqTXCPtflHv\nntMgopE4kbfpJyR/UCPVhmhfQp9CS7Q3fzD7udnO7otK1ZCyb9TaKJzAypP8\n2mJuQATOgnqzMkaFR5dGPNjaK/zVnvDT1vsMpPcszrI2RAJfXRtilhp27kpn\nfuLGdhdc8skWQsAU/QKMAObeuc15v6RHe51WUY1hug6xDvupIsPjQoL/6sRM\nLpCj\r\n=KlHC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICOsamOy1Iax9wbnqYtK0/9bkM8Qo9yHjK80+S6msZuyAiA2mwsOk/cYgRCbBthD2xcciWWXl3tHGfMf+ri+h/+mdQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607958315-6f557338.0_1607958426859_0.7186651467610916"},"_hasShrinkwrap":false},"2.31.1-next-1607959352-6f557338.0":{"name":"@xdn/core","version":"2.31.1-next-1607959352-6f557338.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607959352-6f557338.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/JPyXwIeTKF4qwNMD1BH0N6qt/qZinEPon9ZgV64Tg0mP1/UnV39OKWrOfhuSJePrN1qbAB62YZPMShPlx93hA==","shasum":"35f5d49b2be0ad3c1f7d5e97206a68c142b47da4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607959352-6f557338.0.tgz","fileCount":169,"unpackedSize":649028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf14PBCRA9TVsSAnZWagAAIPoQAJFKsFA9mrPPqmfKJZud\nwVIuDSb9IJtcP43Ioj5WIfnbH9jILo6A6ZSjcRCybyp/qyrNvG8+6GEmLYfT\npc0Ng0ye6bXbOFh6iwUX7YUvH9UilYaBRI7ARPDXBlgNfEjeZ4QNLdvnkcLr\n6Rv+6/SzUDqlrCoUYdp5H1ppCZLGfTXS/YVvqiwlPdFGpJXIbGu40+BkyTAG\nRJS2o5Xn6Tjp7pM+kAaltbQL1Atq7RTWTEjg5NpNmL5lnsQDgi9rLva/CJ5C\nuiL30XH2T6chOWObMWGNS+BN2rfqY9PfOvUHw8vLh4zuftwizhezL1KPNdI9\nNiLgFYK/L77ZBpXNVuD4c+LCrBLzWb0XeryODmJbbbhw5HVVpUHWXJmcsqoc\nWnuR1i1yZAd3bCAsJGrYJdedt1E23foMvZtloMEnnFVJvbs7kkhwEBt5kTRD\nzsA80E1mVMFnYmpb/HSKjh7ik7bXoCrdQjKze9MqSLe3IlwEuK0isxtVt/ko\nAw0LDY6Si+POI4fgCOUjy+55RQl7kFlAQ28TSinmU1YwDurfN+pW57BOpXJS\nOxIktlcpRJmbo6TgDuEozgcNXzilqq/PMZ7Snh9SsnnRqkUX2CnBuoqsf/L4\njJ1z3LPNoC/j+T1RAuODCQm0RlJ6qGxfEgqqDp2CHMeBuWKIxG4fhapzA5Hc\npRhR\r\n=HWQ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYXbqkJrp9e1d5tNkAwOW8xCe46N6dtKUkMyJD/lv0GgIhAJx7L091Xiq7qY9xjwTM0uNQhAuKb4Zbr0MsAhAlRktw"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607959352-6f557338.0_1607959485506_0.21250854704216593"},"_hasShrinkwrap":false},"2.32.2-next-1607960134-24b0d71c.0":{"name":"@xdn/core","version":"2.32.2-next-1607960134-24b0d71c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607960134-24b0d71c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kqjQI8pe/LsXSn9pHQ8f50ls317QE62tYBMNmGdtVjjG6wgPmkPewyWOY5oPVzsIJTCDJyU/QEkIP7gzB2siGA==","shasum":"dafc9e3dfb7e1bd20d10787320ceca8678740191","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607960134-24b0d71c.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf14aoCRA9TVsSAnZWagAA5zEP/3DheDu+RMCMNl2VoxZV\nRLIwURRleA2PuQsqLUmWm1RTDtE22GaVx5V8Lq4gkJq+HQLy6yk6yBuEK1iE\n+ucmWJuzEWQT1+ctfi0wDJ5wCjNZPxf9UQfnQ9/+xCFe2tNEo84Rc37op8Sb\ntCprVaqsxw84JLNe+aQoMeBXAcT+zUpUi96nwc5nGLqCLnQlIjCf53nVWg5Y\nhkaPSb3I0/SCRnQ5Tgok0HJj7JHAKfZKCHVmvhuBsv/QuRX269IPXoFSzlrY\nIpL07i4ndjzm7N0cbcueFQWAv09W1RmMcHPTVufUG/qYc51vlX2QiENhlRZP\nShgDDUELf/x21kUTI1MLCCs6G/rVeDEuGkZ2MKDU59vQ69p3MTEh3k1BejIW\n3C8UfFW8EYcfLwMV8AY17VJs7QnF/q0QUUlt6OUvj7/Za0iIzAGYKbpFnNan\nR8XLCXeyDZbc1OaE4yJVIaz3kZGkja1yxI6AGulKz2meNA0ZiH2juPeP7qRr\nqCEppTOuH82gZCrHi/Z0v8UH2BJH4wc6QBKtHxpWwak1pdP2hAJ2ulzy8LI8\nR5DB5kH0+MDN61DATc/GfgVzpoUbgtcda/9c41U+jteW9CHrBnDuEpkQTfVO\nOtLktQV3zNXbcJYITq5EUOiCLztRjF49rhESynP76Tdg8ii9slEMGPQ3vNtN\ndZyJ\r\n=4dyl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF5A7AHGkRASWammiDiUKcx7zCEqnBusTooZmb9+q5ILAiEAkpaJpflYKZtZ+/Qu4/TwksABDxGIjSZn3bmxxqmDGZ4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607960134-24b0d71c.0_1607960231511_0.8367270136560112"},"_hasShrinkwrap":false},"2.32.2-next-1607961083-852bc561.0":{"name":"@xdn/core","version":"2.32.2-next-1607961083-852bc561.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607961083-852bc561.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3NGNmRWyCF7moPn5pqcCu4RH9Ss/ANw7+9XVIep/361q9kZo/342r4EmaEpT1Nxo7yKIXh3ZgU8XEe2GVH+ZPw==","shasum":"ee8436853709e5c3d4f5e2d3329ba2be7a093ff7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607961083-852bc561.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf14pqCRA9TVsSAnZWagAAZrsP/2pEsDczQNEklb8geLCT\nnbsBAXwbEIc2pwhD0MTHEY22C1/NFdKjJ4DbmoCAoIRAjGUsfcNPcBEe5+DW\nWI8+QU35O/i+biCPWQQ+pWcBJt8BYQREVEG8fjJL8NIUoRlllF32sz0a8aRc\nAxN38kS97xWnuCKvRFYNPx8nEgVboFbS4SNoqpKyANd1Umpzb6Y3CwzlzQbG\nG6risIBuMftdCwK30BF7tiaqVzl6uy84t0QRdbTOkXYeYBMxr0IeZ5r2QLDk\neatjkDkUnw3XQQsDcjSE2lDxNG9c6S+B0CKmu1/nkrGaS8izVzOjRIwMp5Kb\nrWYV1/a5tMg9xaTV1Sq2AcRhhRPYfp3rhtvlEYU9fzPwVhhOtCP8muSowFDL\ne+AaoOgRZedH5Ba0esHyVpgI1qk04ezyLCddC5Q4TWWxT9HPq0z/ETY2QLFW\nVpuO6JBuOg+gLq/IrlN7b8bnIvP9gVp5iLi65ONGoTbp0ZcOsE2R/E3ugzo2\nwBThXp8bJumPpxB2D2guJTXQ8IEdtDaTEnkFNuGzS6qY28aUJKCy+APYTeRQ\n1pSD/ydTXWSW8/jof0X2sN8tFndBe6mFjTeUBfnLhwqYo7I3i3u6/x7kifjb\n7fo8WzzxAjXx5KYMVrESUS6KXlifB1Y6Fookzv2oOOucXh/R1nUEV98vpbhA\nIIkK\r\n=4FR1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAD5ravP9P9Aah1X8QE59tqMGHWdY3wHmaNArAFUanAaAiB+mrfoCXp4DQ9s9YNxHDOSzw9kn+MXKAK1DyGiEQ2QOQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607961083-852bc561.0_1607961194011_0.8031481198827044"},"_hasShrinkwrap":false},"2.31.1-next-1607962569-26d8e4d2.0":{"name":"@xdn/core","version":"2.31.1-next-1607962569-26d8e4d2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607962569-26d8e4d2.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NMDg2i1YTQxZgS1HmDvQH+9mdjUb4SINAv/wtz9x5Qdhqs2mFmBavJLvpQ0vLxuEZhp+18FljaOkSJlVXvfCvQ==","shasum":"a0809e9c95c2831a5a802373e600edbebe55f9e4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607962569-26d8e4d2.0.tgz","fileCount":169,"unpackedSize":649028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf15BKCRA9TVsSAnZWagAAYkYP/2ZmE3YnRIi6Ah8EFqI4\nYw1klLNCag01cu0NXSN8gehigxSeAYH8OhS3Fy+NDTFBRH5Ys6arTHAp/4Le\nhLjo7BG3Fe/qGQvVau6meIBc4pwhLDbLtwS62NLYkkbEPKNuRYJTAc3kxml3\naQyFzhzhT9m1RrLUIdpLNJg21HYMvSwvtVQXpdbZq+W8POaGk1akkT6ooWFV\n8yM6QjPAN2AJW8/wTcJFl5KDV+G05sURJczzAvCbGAWrRiJe8u+LDswIkYnR\ntsGAaq0Nd6w6FEO6ow4+2VezrpY0xENZzWJkZQBJyJcR5HRSYgehFrif2Col\nU28B7gTN+jte5nZlEob7TGuBrbQcqKfv9KnX91lHcAM+H0qaZDSy2Z++FiHo\nSf/Y6Q4ji4/d/rjLBtycGQO6KCrtpJY3NyTkV+tEFKAYtzkEVRXs7RR6W+W1\nf2Xv/2OXGiU49haMy3spAIooxCAzucfTEAWsNcjOGkMjaA2U52QKRsPG2TkW\nBwgEVgscsvyJQTr9Jqw2iY0u3RCYllSRjI5B1ho61HcJQm1d48oXQioX1agW\nbwElrRjx4eW0H/eRB/7CLxGPnL0BkrbgZMUFzAbgfQ3Fc+oE7xcUAYOBqTVx\niwUDCrJ23GAC3EHu/WV/NM9NNcV16xKkpFcpBwOu2uvlIbXH9FP7xMrl7eCZ\nbAky\r\n=/Pph\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrj21NoxU6bH08M0hskUjuPRYKf6gBlLz+KtTSwGTZ/QIhAMYSbqLGPrVSVN1avPOBX7AKia6L2xU1XKxGu1AV3u3L"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607962569-26d8e4d2.0_1607962697802_0.9343296466523725"},"_hasShrinkwrap":false},"2.32.2-next-1607962772-c59ba19b.0":{"name":"@xdn/core","version":"2.32.2-next-1607962772-c59ba19b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607962772-c59ba19b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Yu4svNdeKCGVaFAQdcrGKDgJ3PsUFBOl1ogp2go1S7CDBMFn0cTSdXneEhEMhla9fZa29/3OAjnujP3zMwX1vw==","shasum":"4bb3046db514af5cae3c176c4c19eaf3b84e5085","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607962772-c59ba19b.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf15ECCRA9TVsSAnZWagAAjqAP/294POEDM+kCJAeWJmZY\ndTZiCVBlXLhlZZNnNnjvHDDDuAHqm9mlfV5xLDKo2mRJtHaTumUXc20oJ+Gs\nb8dNYrwgjH1BIefU2QnHrtD5B7DVZJA22zh5bgQfK5BUcenREF2UzYRnSfgq\nrbDIBhJXjc2F3F1ax51xECdBKaW3lVyu/N3kRSlWZVAamnwVudMyh9OGPfRM\ncX7K9TZZy7Gx+ptqeekilw7VTOD1uit48LF1E687bv5SeBMMdyf2s7cOdu7W\nrNkQuF+4R7me6Q4kOewZc80cB065ogQ5Hlyxo+5/85Q/zlNv6M5JYH0XdTPV\n89zP7galFG1PF3iRDwIWaYEQBejSCdQwbxcE4nEYMU1yBVc3RkxZfY2onnPk\nfgzRxkZ97kpNxRiTPMA3bRECHfsiSRNXSzgbR6ntOP0i1kPbKQw8pAuArBij\nHBonn6JhpfRBKqEgXP41BXF/yc0X4sB0ZwL9mZhFzRlVnvzAbpK+rSOFYa34\nDAl+MJrJJdDq43lV/WNXaFgCbM4A2mzbRT3bpe9bFDCM8LRTdRL1qAS6C7Dj\nODdfDYbcN9GNDKkmyU5lvBZEmBpC6aKt6KhVQBxKFHh2878315+PR6aLrmFH\nu80gW2im68CZHHBsYnUS5L9rIVZI3qBwDuv9HWUACFbNSP9VeE6ozGBlytel\n8LJN\r\n=u5YF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEZetVTgjQ6tgYPdvT8PlBDawlTzrl7JvoozDfYkFAqsAiEAq19SSwJIIq8EWQdxEOB6iGhGpZn0K6d7S1mh+IQG2l4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607962772-c59ba19b.0_1607962881892_0.03910700828813307"},"_hasShrinkwrap":false},"2.31.1-next-1607963703-40c18b89.0":{"name":"@xdn/core","version":"2.31.1-next-1607963703-40c18b89.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607963703-40c18b89.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+AEXh4HNeExQBg0j3CbDS2WIBbdlHY+uJO+bPXbve7215Eah6Ifl7fAeEDD31Y2RMV2tdkJW7XIfsM5ybQj9PA==","shasum":"b60e94225135f47cc8090d22331193454775d87c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607963703-40c18b89.0.tgz","fileCount":169,"unpackedSize":649028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf15S4CRA9TVsSAnZWagAAD7sP/2bd91XMbXKt3tWDeXua\nyeHSr8aUFFWO6vAIakGsi1+P4FKiKEDafEJ/qWeIDsj6jC0b7CWBOfz7sEoh\nPcNv1uI5VlZWXQQhkwC+B1sfigMEQe4KtH8Siv1DobPFlGpsAO1POtMyPvwg\ng6D4RWMYXZK0sdbkzvRTKT2+TgCilChsbR8ZsfX/M/RlvvyVM09LDEkUhkiE\npMKZ/bIwpHtwyhZKpO2gwJN/sWMBPW7CEV1qgg6N/faJ0yCFh/jsmwuZuGgm\niElS7DweHb/bgxnyNqT54wt8SolVX+nboya9CnXvZPtr+yGqP0LWEoZCJabL\nkHtj8YNJGwLIqYQyuB0d9n2brPeliHYSg6UwRXXdElEx7ZsNUOUTHv8m5DWF\nwRmdWksBYBuLP7cirJOgXnB7xEa4I/ZU5/OuQqG+VnmSVij3p5XTHIp0NO9f\nGsrk5bnxW+Vz1JDF1DwPwXQZ9W7CTxmj39IJyP1MVhz0MAKl2evt43BDSrxU\nrEWV9gvRYTfrSnwgCz2kD+Xuni1tO6+rOEQ52uR5b2ERyz8WpQIBbzJ60Eos\nf9BCU3klszSw5cd8O2z+YnzLk1QiJmK3N0lN79BPGfjDezTR4PoyU1dypIYL\nst6W0l+pkInRGW6L4dAL2OX4/p+1mv8d2mj3PPqwrtnvnABPky+c0fM4vo2c\n8Gqb\r\n=bX5x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAtp0SF579sFUuW7n4bBXdg8+WhdZg1Q5jbq2ekkfeNNAiBrCV++uukz2FG8CK9+q14piQHSmY0cL1jJpa1dQdi5gg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607963703-40c18b89.0_1607963832121_0.8453098238966206"},"_hasShrinkwrap":false},"2.31.1-next-1607975140-0c1c69ce.0":{"name":"@xdn/core","version":"2.31.1-next-1607975140-0c1c69ce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607975140-0c1c69ce.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wxxX77n1fQ7dEOkY4hCxjkGN9VS8Vr4vaNmi/Bx6SOaUMQVghgwdZT/ippYLT3E9EQNmO9XpBhG6/zuQEsLMQQ==","shasum":"8a3db2f1dd7b8d017c089ab1098cd9db68625f25","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607975140-0c1c69ce.0.tgz","fileCount":169,"unpackedSize":633635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf18FjCRA9TVsSAnZWagAAqmoP/itebY+dZ0eRW6bwok/1\nWxrdbTgywY2ci5Dy/RaC4fmX4aDniCpJfJ4lDmhz7zaTH/orLNBlPFFmCcrG\ndiIo2A/EcKwKlcpI1MZTDsBaqLaDsWNGtpc2UzAF2viKsktgycfERv4IQMZU\nSUeeaFjU/zlRv66NvhQEN6hPsNSj/Dg81SH9ImOpkYtXPaOSxmt9D1cz1sYI\nydit1QBes390ezdqAQjR1CW9v/b7Oa7dItc6c0RXyVXih6sOeI70V/I4UH9V\nGgtuOmHSiwnmNJ2JASbQEdSx2XbX91iDJwiLUByAtRcuVGrdVaC+5j+eTmbU\nsVvX+B0XoTgzQWevuKUyfRuRIILw+kEL0okAH8jfP2t/J4mT2grILRSbHN4m\nKjVVYJJeITqvI17YoStMn40hxdgOx4H+oqp9/6L8U9UZ9ijjvMJnzq6kjWgy\n3R8tox0NIV4exj0zTA7X/UmfO0E4Bz4a4oA6mk4VPa6Et2kinENuU1Y6Dsk4\nARuAVcoAFtj0bhwAvRlZoenxcbYOL6rg+YlRRrqAWp/T/EfVTzYoxunIN4Zf\n+1riN3kwr4DzG9BWi1aFn6REnPxugNB+RCX06vw+R9FngVFs/XV4b0ZO5kVO\nKU8tHUBqLz2adwDqKIHJ0DD5e8veufGRrqYpyHz0DHxWKrQUHotHUUfBJNHb\nMsX4\r\n=/CN/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGnmGUW6Li9HBskC5d+idjyz1QMEwaLdG5J7MMKR4jIwIgQJFFHt+QnamZQtZStN0ow+eRDsl43MDcjmigQO2jNLs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607975140-0c1c69ce.0_1607975266986_0.7752819943324616"},"_hasShrinkwrap":false},"2.32.2-next-1607982223-6c0079ef.0":{"name":"@xdn/core","version":"2.32.2-next-1607982223-6c0079ef.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607982223-6c0079ef.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-G++kcapX77BqU/zw2vZ/OPV0INfCvps1DyI2NTmgWzIUPMAPrJTHybr+CmThdCDaYWHr7h74KOmh81ZmUakV5Q==","shasum":"e599fb9774c3a7b109339541ad626ec4cbddfb9c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607982223-6c0079ef.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf190KCRA9TVsSAnZWagAAGtsP/jpYLyz+3byULtmip14L\nim7IjCn38JQQDFaVFgVnyfo0fdrd7ccoVdwWLlgwj2pi7FI43sZGUfh7tN6T\nUjVBsYATxBzI+V2Hxstug1ZkM01jXZaykJs49cEY1IgwMnk/UkwrU+m2S2NZ\nmpl8srYgA/Yr+Q2nN4yvyXN4RkkjYExoAURQo589+k2K5oa5ScMrcWIqYS/n\nIU6whtE2aec8Qej88Q+PCJ8eCMwdrisCtq7zzc+9ttcYoYfxsKTGquUZs8Fh\nxU0Ix8A6rP6chNF/iNYW3xYC6bMuSlpYFVDTDyuWCbGgubDvg10F2HT4XgAj\nuRNr9b4wYuK65q/ODAdhNs9jxqRiwRIhYl1OuuPDS7ipxWZPJ86pGZBYyVuk\nBAD+qjSWabVvxPubthag5VngE6h9ZxBGRFSdul8nGFS0Kc4GWmniFEIJkadu\nlsPJNWhW2XnFlFGuLI98tFrT2uT0UQseNijuH04BsG2dc0FiXzlnciLL/+b/\nBq8XKDXQZh5saW1/60GDfGwEMMgHvHIzpiOZUVMsBeJIr1RCofWHLK5xTeU6\nPcENde9IeH5iCAjjj+agevsWVicp5u64K+CW0giQhpNHyJIJeH3QU7Io4RFc\n8y0iPXPwFAorzqXjrDG1JBaiXq2oWF+msU4zcbbfwX0DrnXqPQw5GbUMah2x\ndCCv\r\n=p18b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHGfpaz/BH1Nfc1iUjbJNu4Yk0J0pHOwIU+14rG4u/8OAiBsHnJ/Ow2dHJHia713D8Kzb/D4fOUkiaVElFs21lm7Ww=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607982223-6c0079ef.0_1607982345439_0.23208478443874836"},"_hasShrinkwrap":false},"2.32.2-next-1607982888-4957c5ed.0":{"name":"@xdn/core","version":"2.32.2-next-1607982888-4957c5ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607982888-4957c5ed.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qn1AuX4Mol7AbTY13QmHU0afA34DIhOd4MoMd8x+PmvXZaRMdBhSNKF7swOpl/uiUn12VEIYAbybkb94Kh22ng==","shasum":"d18adb45acd1ddfc0d96f60bc4eceb4fc0619a70","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607982888-4957c5ed.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf19+iCRA9TVsSAnZWagAAVcUP/3Hnsp8PmTChnb16JYtA\nRCLGGJzZ+ZX87viijstx1ZppJktXWnpn6zjmb5xaWkN0xPDJEXq6/VBwQvrc\nPSpgTCJKp21+Qb4C1f5UC+2qzgh8JzrAz82XXO8bKlk4sQogQAm9rOq/tM1i\nKRdE88Bj5ljrfbR5WSnDhrXswC7uxsK87nFVd6SAY9oXdZ78w4vnDXzuDvv7\nE/yFYB3PFZ2Y9+I/9jMo8SRhz+QwJfTFaory/AwBHODS0CZGRpi++heUT941\n9O46hk4IdPXC0bX/jdSOnfoPRoFYYJB18eTj1X2WVuW2lpmJSGkkbpKjdNTU\n47du2OPQbfjd9jfvQVIciQHaLbKkfrt22616VgglwwZH/fni7BpUdTy+3lir\nXKzsIyz8ot6YW0JYjSYLze8Pm5SAeT71D1+HcGi40DCeuHQtypuWIzi7TXk8\nFCYropKuGRn9oOghPCP/RCcDhzXqsmT01T53mwAU2eYVBJWeag0OSmhX3XxB\nbCazE0DeeQqaOWuCEFGGxeO7tIYahLlEQJ+QMPiRczUPx5T28jOFznfLwYOM\nvxzGvGe8VMbKpSqGQ0cJ5lUtAeOZyziyQtMKHPbM0HLenMCT09H6A8NFSwyz\nwXKaQCbX2oto/Sj1Ru1Y2XL5Byj9+93FfUJATWQ8VfS2gfYSEe3x5yy/S2a2\nWipT\r\n=iLxK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjvJUkvlrNjvSqgP1L39Gx0HJeMcvFUY5S400bCHvkcAIhAL4IdlD3hhiX+C7CWJqQ1nRXLGQrsb5HX/orn7AMylSx"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607982888-4957c5ed.0_1607983010305_0.2539323560531421"},"_hasShrinkwrap":false},"2.32.2-next-1607985622-4957c5ed.0":{"name":"@xdn/core","version":"2.32.2-next-1607985622-4957c5ed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607985622-4957c5ed.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-fYt3e8BeauQqG91OJOrMN6I9PonyOWFjiKxzWT5ZdB2kMPWhfREExLQzNoVfKEPPyJ2qVmTHaGmQ4le1vbuOuA==","shasum":"17d100f8a86a0638c7cff5f7af597e98e3563e92","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607985622-4957c5ed.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf1+pSCRA9TVsSAnZWagAAVrwP/AqilIIJtxMow2WjYlps\n72BnbfxiHKh1CJ3EUCsHZJkhspaxB9784/k74f92D1UfzfefK9TTQyJHAhsI\nZGa66iWnPCwTkzW501u8VDzBLYbQH34ta3eSxc2krTtA2HKTfQmKuPB+Uame\n830APFjGm98osqA03tJaFaopXK6DRkEFdTbOLUnWgaZd6kXLLl3+ZvGGcgAf\nEVuvoguAzClDXM9sn05gJ58rEqzt4+4l8cyG1H+DsOLV2HfmacAY64r5vBn/\nocY2mJXZeUHC0ZEegvS+KV8sAXiRpgHKtnP5QzpB7Z48X/9ilur8iCwSQd4y\nRfl3j8x2P/ila27Hxc5K097hJEPWo/VWQfNrZThzH2HtlMRMkQDgVFwMD2gd\n/B3XviRAZTMD9sfQGkAxtJdm9vwvVMEO2QGb1oMLOMF4XNGiIlzneV/vXbkm\n7J4ZKR0mmaXwLbm1qJ3SOqT9D1u4t3T+GnPq8aDavWiiRn5mAhb+w6eBqK9n\nN92re0WLBV8CyFnuI8QuH97q1USqd12Duj61Vd5ky7pW/tp1FEMsPXNAQBAy\n5L3y3T9njrANdA4QqknAnN+UD6EgjYAZ2zUpYiKXzNdRrq+jmdKEpEaC5NSP\nCz3otYI+Fpxj0UmyhCb6EMucyMHCH2rchZUdB62I1EWS/+APNnDNP4FL7tlX\n/9Yt\r\n=xIyB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGKKWzRkNWgGYMu7IDy0UYv7g8qV+/va3ch3QZLXcmz4AiEAn/rKsM8AwKNv2fm7LM/LKTYtN0Karhwwivt5qF7d7ks="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607985622-4957c5ed.0_1607985745469_0.34943696784949685"},"_hasShrinkwrap":false},"2.31.1-next-1607986904-d0d62e43.0":{"name":"@xdn/core","version":"2.31.1-next-1607986904-d0d62e43.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.31.1-next-1607986904-d0d62e43.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hLG4L5TU5kqTqUjcenyUrT9yCwcP0NH86GVIEh3TGwvNv4rM6mGVmi0OoERmMBYCQBxTXQSSX201/3J21Rlpbg==","shasum":"fb33df6abcdcef2b332a4d31bf273dd12d3ce282","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.31.1-next-1607986904-d0d62e43.0.tgz","fileCount":169,"unpackedSize":634497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf1+9WCRA9TVsSAnZWagAAvs0QAIQr6sr2L+tPbybOvzpx\njzL6N2XZs1D8aYt/ibpJLIWOYro+g5/i1VNr65aMfX/qmpSu2sm+0zxHqiMf\nhCyGt3KFUwl97iiCk5eQaLWBBMeLBl7QbXtbel9+rQse/7o6YpD+VXgcA0Jl\nkov2Ej1NHHlUnx6/6/KgKakxRh8AB4R+UkJ3v1m54GHPGf3d8IMkjCLGznEJ\ntPl6osTLm57gxgWuEclJwIgn1ZPg7fL+9kb5E/O6UtkDWInDzxR32WbevwLS\nOJCY0yiwELJagDJWEZS4SyNJJ7cLAqia2DH1aLREwM7Wq6+0YRWXA3NLns/y\n8ihk5m9UQcTvP83q945Kn7GLJEw4eZJSUomuCsQsWV5oXNXE8ou7UX1eKcDa\nlwgQcSJh3hxzAPFhDumV/pcTlcq7yD6rimQAGlvylYjD54LlwTRXECqdsgJr\ny8ngZ7/Sy093tt+SGrJ+xtrgYxohSLFtm19p0nyXL8vQCZoUJIAxs/DmQeMV\nbFz0NjiqpUjQOfOo+dk72a8uv1yI+omlzgx5whPs13D3EUqrN+OXj/s/iXGa\nJS+Hy/dvnmOiPte8NoikSv/A5qrtyRvXXKjIQKQz3vR6Yh45A64BkMvNRVoe\nHq/8r1bOXZMj7purNKA6aQA0q9KWy0UvDO1873BQCU4xJG2WDIKbXxWsrpYo\no026\r\n=CXnL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGV3+PftGB0JqWK9wHPuR2IgDpvjp0we/WAl5vZ2YQcVAiAeD/Xrhk/CHa/dksEjn4nTHd95IlkjMgk3YRlDAVN0aA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.31.1-next-1607986904-d0d62e43.0_1607987030236_0.29913080718503493"},"_hasShrinkwrap":false},"2.32.2-next-1607993767-ad0d322d.0":{"name":"@xdn/core","version":"2.32.2-next-1607993767-ad0d322d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1607993767-ad0d322d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-BpCkfHSLSYo3P1fEdgVPXAHqAlBFPKjqeZtIuq2xYUw6DdoYuNHhpU3NKHiZ09GfeisfQyIJNN4fbgG7RJylnw==","shasum":"c7c38063b6a1b8f48661d484219bfaa854149ccf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1607993767-ad0d322d.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2AoRCRA9TVsSAnZWagAASZkQAJNlbXTxYwgn47G5e1oC\n6U1aqumlfDDPNj0guJVyYCdW0EvxxA3XZHLiR0jIT5CnhkJe6gxRoekpYMHN\nBBeiXdNcGmDP3uWQBwWVH90H2DmX1EXStqMMCQm2GqMV/yhfrz57hcAyxqwS\ne2K6oo2BwgdPnHrzzW6vwoFib1UMeIUa+HQKBr7v2R3b/xpGUPSwf86z4OaX\nJsrFAnMsDvsbck+QHn/gCG8PQcLaHJH52PUc56cOCKGIqhGVDSEv6nlefU9H\n0Mn/X9ZCbbIbVs0DOIseyIqK6Y0UoRvoSbHz7i8O7TCtHhPNgPTktTD7ERS1\nRx45U55FZuyH78F38FFCkxVO7J/AKd7s93KmcOBwBHOdr8mWhjHKgX2rmxTr\n2fgUA1Ew8okdX1ad8W9OpyicpiIdHzuYcKeI+jZPm++j7t23vxSptVYaPJiJ\n/LezrZ7lr7IOMF22aFesoM5dGoXW8Bv111jsHahOjcEeAuj+TidNcKme1/Jy\nkCCFKH0OoDhcoXBFMmyU+hvnhbBcXz9GuoBPEMBDWbOhpMpEUCLo7uf0vw8z\naa1yrQafW4QshYcHYGXpowGSUJzSudFaHS2IhlKAVi1U4QF0cQSNdWvWNmOm\nLBv/9+ZoubUeZTsmCGPnxIQ3dG6OpXZlRUKEmJ7nJys11CNHEH0hYbremhEV\nSX+T\r\n=wkFh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfBaFDc7zOXJweVsp/msheJhXaKRjavqCd0CGkSLjMXAIhANi5S2LavlM+ygIAcCjlYxn58O+LlNzQrHQkEuDx7jrg"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1607993767-ad0d322d.0_1607993872340_0.6501109207807867"},"_hasShrinkwrap":false},"2.32.3-next-1607996913-308e4320.0":{"name":"@xdn/core","version":"2.32.3-next-1607996913-308e4320.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1607996913-308e4320.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VUTEG2v5DLWqfhebx8JPoS2HIHmUM/89ArppdHUD04dPqtJEB8MCX+/8inwfhyzKiuLo8n6/zsvg00RvgNYJuQ==","shasum":"69ce19160a01f1996a74793c00b1545211bbf95b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1607996913-308e4320.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2BZbCRA9TVsSAnZWagAApHYP/2H1BV/7fWMbsDtiyVnt\nxYI7KECzXUyCMhTyBOyc7raEVMon855kKLyN/x/KF6KJpyTHChrpkydvpu4J\nKHl7idNxEcrDtjQjawrykwby20kNWhIIQOty4s+Obc43ROZSAqq982jwWzzW\nu1dFLmVbSevqmirr+sglO7PhO2oO27R1AHSr+kM7ydM28G5/gJ+H5my614h4\ngJKrfYef5AN2J9g74RZ4jG7VehrcBVN7Oowq30Fdvy5eee7E3PBsAY9hu0qk\n0SYU9T2tp5sGsWzRv5SfUBTwMbq93OsknIabDhQmNfQmyrjXYxgBzvK2/SwZ\nnlBQIm8ghsl0UQsq6wv/TpgSBi4WR/V31M890PFFFJfZSU3HeAPJk9igFG9L\n085OnTsujZ9wqoOuPm4aDp/m2Rjtf2rCn/sSuOBfexXJQLUfhilZuowgcRDM\n2VVQ5nXybPt84szLRVB4AKHkV/doIOuoAhMaVxWTzq4bmyquK8pqj74HI1vq\nQaO8CfeL9o/t+3GMaZgmGb7TIaFQmtXzF7vrggBaO2CGl7DZVQvA8SvOyaWp\nwU7h45uu2MX2vi5YlREDoR1Y7XGBAeOt4KdS57Vx23ew4Lp6ZH4O7RrNb9Gu\nRsMQVzsv3xe4WJO9AAVieqqJfr0Zh8k/q7/M1lFapReA3gQ4jaUcjj0hw5xH\ncvjl\r\n=KPEt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyzOIZqUxWSbHdJNVQGq/F0QDZOLyOCxh3+POc8lvjCQIhAInx0ksaaVi8YK9J0kFKFw9Rz9fqAjhXNo6Rl1+TMOfy"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1607996913-308e4320.0_1607997018713_0.8474321917465271"},"_hasShrinkwrap":false},"2.32.2-next-1608029931-07fa1aee.0":{"name":"@xdn/core","version":"2.32.2-next-1608029931-07fa1aee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1608029931-07fa1aee.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-geSxn9x+ZBpupCAv5vornzwa8grfkOlo20sX3bkjwBv3NLfENtxpRC8VSp/7P/fr2SvLDdUuNnkLY3edTox8HQ==","shasum":"daa2cb02e077f99c0057435565473966af11b6dc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1608029931-07fa1aee.0.tgz","fileCount":169,"unpackedSize":655197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2JdYCRA9TVsSAnZWagAA0EwP/is28Lyfu4YgpEwS2wEj\nZd2qqotCO7xHNJ7/X4KwaSLcqSOrMlPKVkjuTcq4d9/USgdPbwR5dsBD8RLP\nXND3MeElZ8iPmgIJNTTljmGULqRrw3xsiDZm/LhzdlFm2mUDZtrcrpgMR4yF\nOkTJHKz2I0cQCt4pBFRgmwSMtNUo8SuaA5vVcEv1tsgotNjfvlJZu1n/GKhz\nbUqHmUxRMQxZwTbhVH4nKV8Gh1aO7XNQyuLbqo+MY2okwgjvdZ9PxPHeaRY3\nO0xgfP+AbfMgx8KBguNdkVcpDD+mRdbgsdCCuUd3LGlsPrwgLlhxnm1R978R\nGSJM10XSb/S8cr3L6Vw2kutTwcwgVqmxhtENEnW7SoLZVIpUxbKGayL7JAaf\nnqgrTy8J/MN4dh8jIHT+j0OZorEaiHO3l9E+sNZvuYvI/Xywqxr4qNV35E3i\n/0/XmdPzd6RVxXolfiYPyaDUYjYcKMBuVrNBhycvJ0eyTLlp0HidCccKfqJL\nsHTJr8KwM2QIEO8y+BOGef1Jo0lYtKMgUzE7rm0U6LdDlfjG0Lev6Wi1gqqN\nag5gkcWlK60aUL6JAlxjIM0WNfqwu9nSUw2JORpEkF2iEOga5havLuA8SIVh\nXSo4F7L0z7AwSJ0/z69tl68L9WdT5EfaE0S+l4b/D9TtaQH1hhCckjW76C2I\nEjV2\r\n=E6sL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpIMyewusfBC6kiMzuDwtu5OU0TI1AW5cw4mb7yqBtXwIgLmDbo9A/kqP8krPSsEYWPBBPGY/YqGwVWeFHYv2nP38="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1608029931-07fa1aee.0_1608030039625_0.185649621078799"},"_hasShrinkwrap":false},"2.32.2-next-1608035029-2b53c85c.0":{"name":"@xdn/core","version":"2.32.2-next-1608035029-2b53c85c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2-next-1608035029-2b53c85c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KihiIGUro/kL+AohM/CcQBaZsk+bauyxNhY8EN6epk2cMR7+N3IkkJLSc8+4dEmgiJ40exZ0YiA65eXnrJZiLg==","shasum":"52cf114b307450e2be6e860aee9b91278c83154e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2-next-1608035029-2b53c85c.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2KtGCRA9TVsSAnZWagAAW14QAIqaFQBz1hlpZ0tWy6Zz\n3MjCorO0q+00WLkKMCd+wyVPK7M5je1+Ji3KPlY1M2dje2q9uS1qpR/fnyH/\ntIcR5msXaa+vZLIoiB9c9NwD0jmIRaGOsMzAPvO21pN8iyIUXz+qoJ0GFna8\nttDr6830OCFipXSCS32rMI5+QGjnWs1zI/D7+0JmPu6HiOwOAZT6mtPEXlin\ntkw3o0M5+vOlcu14h210bmseIrhfglPDgSnYnTE5sYcXqPBQz+Jmxq++c+6P\nXxKBqLi7Yfrtt7/Vy9o7kVWgUa7iNfU1BnBon0JNJrYnWL8tlVGxK2Mh7gU/\nR8N6N5lxBsn6uRbtFgjyZuiFiIODVo422jncnR0IWi50hyi743YtjRlvubEd\nQoH2JUdTddiCx4K4rdpgp7zxfKXw9bwg2ecYXUGzprz5/WAnpoaUi/1Qe9ds\nlRIYL3WRQPuZrD3FofdATzM6aGQiNz/xsUu10qplvfVIabh7UE6WV/CkSp2z\n3XRlEzpQ1PC2ltzgahUdGnhm57Q5x9YlKgHS44pWKvVxebEty02MD4FsHV+q\nhjX1JuCClGYyteJZGIXeLrU0o5edNqu+uPf8vO3m17KZPfq1yvtxOryqnktw\nA4nDPaML9rvYCU5qkyzHdb5IgRKSESzYj8TRJo0OoEtY3HhhwgLeuAyMCNsz\n6Xfe\r\n=W9YM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGq/24DZehmNoQ9D05rGis6gnJ1NLIv/UqKv6+PVNpFQIhAI2BGvil40SqHFnRzxG6RJ3I2AOiMKOGA0FtrBjzyMc6"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2-next-1608035029-2b53c85c.0_1608035141457_0.1483117020729665"},"_hasShrinkwrap":false},"2.32.3-next-1608036288-c85ac393.0":{"name":"@xdn/core","version":"2.32.3-next-1608036288-c85ac393.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608036288-c85ac393.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-F8Jz8AeYSnvuO8Wms3ecuXG6t3f1keBDwNVO2/CPyd7Ka+N6CNl+V0oQkOI1UYUMHie4+p3mu/ZbGoRVCVYjDA==","shasum":"2bd6e3f2775fd5699db27ff59c0368295aacf7c0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608036288-c85ac393.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2LA8CRA9TVsSAnZWagAAp1QQAJu13f3EvVFHkyotMjTN\nx0o7NRE0wUrQ/Jwci0mQV0Bsm8jioyvsL9pR9HEnIe1gkCP+tWTOslra79jW\nbAnRpO3XAC7e44WqrmEBAMPTa8Gk358LSSfb/u6+vR3AMUuMd7BxVGP/2utA\nZRUvzt35LGZfQmk3o049+ts95Vf1DAWfmWjjcs+oLfuOh93CX8F2OQbE6ss4\nd6nGuGBhnNjcF60+FeIT6E1Uttcry+Jl0KgUELSRB11mc2+2LDdh7astJKqD\nOKSntYpvfeTcWq+1Bgcx7ObKDPi/LZs/ByosgcoqWFlQ36KeDxXSaCeBDiAt\nGmMAfGqoo3+fQ8CsdNLLkM+gOkDWDk0aJuXERBfR9zbh7SORIjel7lbe+zoZ\nTcQ0vA6aRSEODt6OqMxyRlGnJIQI1nrZhL4BoOrcMumFHmPIJ6Fq4blHPXmt\nHfLp2DyAxGntRSqj4z3Dsf+n61SKVaAeNAjmo+CZn3SBPoKRWr2GwDjK5coL\naWiiyxsjM4kEsuih0LZ3yPeKyitZPUV9kD3UD5hzTm+tECdymbVuwZvLCtUG\nAGR6e2XJYMiv8KQJnWS0zmp0eNUeBWiHy9ZAXCrQVzlLqI3E3i6IIPur4Mzn\ndWFucGYbTixO7tubYKz/TqvcPWpTp2NhwyqkyJtmIUJaML+6M1xkwOqpf3FD\nKJ2Y\r\n=qclH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDb1oQt6Y1lq8FmP6US0rVDrBxmZiM9me5nJIILRj/WbQIhAKHXA8unglI5qHHOWAbh04+O+3u8sSyqFMj09ThAJRRx"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608036288-c85ac393.0_1608036411949_0.471726380681853"},"_hasShrinkwrap":false},"2.32.3-next-1608036987-a4571c62.0":{"name":"@xdn/core","version":"2.32.3-next-1608036987-a4571c62.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608036987-a4571c62.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-dHh3xws+LYhQst3bJoZ9cTNGTYQdd8avZBdPaHDj+5Yjzhx8e8lGIvUukr/ykpodWkoHNsw/m6grM37bdFjzbA==","shasum":"39c0199f7d0b519b1fcd8a0e98509bde8426ae51","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608036987-a4571c62.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2LL6CRA9TVsSAnZWagAAWAgQAJY0Bjm3y85gUDyhfrzh\nU8+ceozEv8Y8EKcbHgZ+XMcVdJMXYgP2pcNA60UNNp7WZkDaCtysTTLuoAkK\nPrWLEWDGgYh8Ga/1YuUeXBmISRJt7zcUDg3SnhPCAyINqudp4uY5QAGIoz+s\nd/MsS7mOHUodO8Qu7Tt32stA35H0kDg01+kseOptnecOyI2TC6ChbfxRz42L\n1fkrQ0TVqKi0xWhEOCNoLOPrwrFHWQNvg1/gPUFTPHW4JnO+6kHf13zAgT6b\nR5297mQyz0OmYNCtEpaI0mrRBHfsef6mnW2h9ZmA0QCVB/ufrFHmC74pEM4I\nXo79LtdVYJdgAqV3Z2CNnXG2jibcWYIDcrgodcNyuqPqEcNKy4ekYhfWwhly\nC+GYlJw1Bbq+kGOHlW4RJjYAbhD000W3+a4QwN1o+g9/XdBsYfeSzLVT39dS\nvMTtswXHDsUQx6VnR+hv/3mt7dn4i6pdJWCkxcrI5XWlrcrQbgela7VLPsr/\nrWG0xfdRe2vbnKo1XMhjY/n8FNpypCb+TP1R9sNSqUi5eQxY+NvZYarIm+cm\nIZWULv/kkj4eOEgK1GDA+wRpqVF5TlvnkUoNeW08Dq9uGWI9Y/y8SAVdXhwE\nWMepfFj+gOk4CSwE/KmbCJYriJWRBO7Oncwm3OdMVx6b8wFtOwbTS9EeDF+O\npwyT\r\n=/VsK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChDOK/zechgwf3nv4W6HzXboP9EKDvEPZgVtSz+AYALgIgfBawFmq/lr2yttngeQ6w7YvHTv42/PUYHgVB4ySxMxM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608036987-a4571c62.0_1608037113571_0.5844679027029753"},"_hasShrinkwrap":false},"2.32.2":{"name":"@xdn/core","version":"2.32.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.2","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lU8EBztJKDtCXPPn3vxvGCCARgZQ78iaL4i6XgocU0v65kzj/OO/95omyNefb+EZVYDLzKYWeCipwSx3KTyoag==","shasum":"035f483a905019903850f5ffd0fe6ffe762097ae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.2.tgz","fileCount":169,"unpackedSize":655863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2LUbCRA9TVsSAnZWagAA8EMP/2lk9jqnwZfol2ar/wiq\n3uZMEyx51pAr5iNKtG9Qj9R5w+jdsg7lQjqgGBAe/kYFmqL1Sd9OOGD43Pjz\n5Sv3XP/bpKQw4w37ZFo04Dqn4SnHFjhqeT+7D9Aja5oUM1gmNwhYQermpbfZ\nv6H3/64r+qAWrdFvDaJ+OR36axEpK/YwcHjGIBuplNztBuEdEgEydmunccar\nF9zycOqxr35kS6XcvUb38lPKMAOduf17VFg4YjVcIII69pTRwtVA9a92WEJJ\nR84ZHtNBS/jgqzXuIeBxfxYDKsDGhl2MZdnbZHSIdpcFIiQ0QKKM3SJ+VHEZ\ny9E/EmWoLOXv0wj+ZjGYnmdXKM5/QHO3qbJkI10lMkCQpZ0M1nBr9KUUVPv+\nKsprhcF/jriJN/0g71GQ6h9ns7WYKMlBehJ1pC+km0wVUgT7Zug00+G4tzyx\nmZqFcgMe43J9saDwGx2bANLgF5p8vtGpeJhYHrm1M/OuTM4wwtlQZ1FzltBe\nI89cf/x9P6AhN/6A0CS1Xa9UquBWwcIRUhgPM/Db05rIMa8r2IRW/wJdMcCL\ntY81gGo7dhu55Gl6FpV4SyHXGBZqRvXUxevQsiCWQ5dfRABIAGfZxzNgJ8De\nmXeaT3iK707+ASba8vg1hDIA3AHnE/PoVUJs43ukFODLIqIGTMi22yYLXh+g\n+TM3\r\n=HLL8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHNb79xRhYG6SRBmZGPIFGPpLkeOg2ITNIEpRL3BeS4yAiEA7Lz6K/lYQzaD0zHphSCLzh1/CRkeySHxf3UemxV6sgA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.2_1608037658482_0.39947331518043394"},"_hasShrinkwrap":false},"2.32.3-next-1608039440-6efd4c02.0":{"name":"@xdn/core","version":"2.32.3-next-1608039440-6efd4c02.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608039440-6efd4c02.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-s3Kf2eM0tfR8nkb3jtzqwivccA0MGZ+jE4mba32iG48gD4pzpWnOEK0cVVWt5LLUOcEGuRxSjPYttN/Uaiyc2g==","shasum":"6f859f15360c8a2778548b209a83850719c0aaab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608039440-6efd4c02.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2Lx7CRA9TVsSAnZWagAAD+0QAJRcSY2jme76A06Cq7No\ncqlUlcj3lo/rNRCuyZMt9G0AZ/D3hAygl9W/HRWH+CETwkPq58d9Y69/P5OS\nHUgomGzS4sOXvIpR89kPDbejifl679RI7aOh92QmiWvOKmrmpDAfb9Rre5dR\nthcQ75EmBK+syt8nnA6mQ2cHDMsqLLsvmupmGP89n9NPyrKuCS2N+1oHVGp5\nFrbgg+9Xvhi5oMu6lle6BCB6Z1n22gzLxmMs3lEVKbhwGxJ+fnhDsTRrqCQG\nAkCCfY+DI1F6tivbDAYj6ECWV5Rp6GnM4/inCXPjmUyJgoSxcj2g3GAvKs6d\nyNGOA+wxfibBAvcwNMeb9r8ZQPqYFVtx9t9hcPwSC1BfSd8zY6M3EFpLTmbz\nMJeRR5Q5TAETI2dgiugZvq1nwCzaUP6LMrUXNu/tXO9h0dwAvfvQnkKSWVC0\np3n9vuHwRNPD7+bU94+V2m3CXtSZhz4Le0fNI3idF2lDpJ3QzeN/+CdPhmg5\nRKRnpPsWpYnBDcIfsnvHqd3V3ObixHS+fJDQdYOhSRBricQYzIUQ9o7Wrw/V\nE6/NCgdZvgazPSpaF7ya5GumGzeDtCfFbAHWimE1KAd6x5fFfxV2lWIpIhkO\nojmgQ6EzgyuEH9luUzSoVL7pAzjo080cRzDmG2xmVtgg8d5BZLQkFTf2LY27\nPPZ5\r\n=hN6Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGXs5py4iSO3fRrnyT/8nRzwNbALs0hMDhe7toCD1qitAiEAjqXvaADLMm58iMSeZAQzwbgyXh6CVGRNgZenbK7MfmU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608039440-6efd4c02.0_1608039546936_0.9125021605993884"},"_hasShrinkwrap":false},"2.32.3-next-1608041026-b2847b01.0":{"name":"@xdn/core","version":"2.32.3-next-1608041026-b2847b01.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608041026-b2847b01.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wxbYUIAk7MIoYu2QK52Gwv33C01E0B0F3WFAilZK53KxAF55j3zcYZIcOVkEJZ9lHWEti4s9QkMakjqvpCgsig==","shasum":"31b73cd570e7915597ed38fa1a66cea6d990a040","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608041026-b2847b01.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2MK9CRA9TVsSAnZWagAAUV8QAIo5e8q0JaMYKNLLgce4\nXagjDst7HsybKC9L59/IzVe/8aqqPM+JNeH5FUMe4PgsfA2nEJOR6d5E89a3\nKKM/aewVct7quoinef+Q38U4mfxlxr53CAqe65MT/5k4djQH2aNAbr/EOzdV\nlMiT0jlNbfs2n2j7qPcPmqHVabfUyXI3Bhj7jYs70oCqWKD9Eo7YfiJ19m2y\n34E4KuLqJigd04AvFHK4oVNrXvAGVl99YWrdUhOnFuNL1bDAf0RFW3k8YJJ/\nu6DbopiQFiqBQIGokqNEs2QN4xCPYkBPjeSG2cspnQS0QTfUf/ls+egkAH+8\nMFJqQgqoJW1h7u6Z2nQ0EQ5Pe5hsTSt/09w5vso9PQtvZitZCTfajryyDYds\naTeSoLhJsqHpI/0tcyYeRI8QJypJWZcJ/oE/JmgPD3d9pBKcjYPq4kSLe9xr\nAVAUnVjYAyE/vTuNA0BE1hbC2+tD+N98scw/g2kpizgL+VMtC6S0l7WPK0/M\nbCg1BpQythwnOBWncmUDtfDJLcm5LqrR13Ui20/3Ule3k+UgAadD9vZ+3OjH\nPpJa9b+n0EnJBM1fHMR9ERDOcvBmIO3mCxkS/AT/euA1yYaniyNj3DHrELSx\nyJ5uQKYA0OmzYAh+orsdeQX0h+PwaQw0E0dhibX8fjHIkJ1OiYUo2PzGcAC2\noP54\r\n=C4HQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTeVOF8x9ao6CYX07BZLWTnZSSUjB05T6bUh7xkcr4sAIgU9MfpqgdRnKzvyCsVcm9L0bVRsqVnn6fR/WiDG7aUv0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608041026-b2847b01.0_1608041148966_0.15804232697815346"},"_hasShrinkwrap":false},"2.32.3-next-1608041346-a7577626.0":{"name":"@xdn/core","version":"2.32.3-next-1608041346-a7577626.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608041346-a7577626.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-dr9VwcNAZv9kfvyu3Gp94Wngmbcn2dFdDCX4wH8skN/FaIV2aAaUZiSi0aONSOvzxGJuCPoJo9xyiJq2+EcwuA==","shasum":"3d9b441f25aba304835ac8d9c56c737d9a5a86b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608041346-a7577626.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2MQLCRA9TVsSAnZWagAAUr4P/2hIXo+KNa6WT4g7AuyW\nTWnG66ZzlwIhPI3bs7ZowtXnTTnC92WJoXTBSjxFMuhJ2Q/f7lE/MS6Ha4t/\n7ky5VvilYqP33paIPKuft2u39o6HlL0pg0YowZLD6zKK4YI/58FRIp/fuAFk\nDB9+q5w5O+3H9j/zrWKhsmXfBfb7eLKlxfuKQVvlImK20sJDciitDDyoLPpX\nRGYCjdtkXLeMNsJ+I75TNKitbvmmVkUOLlous9DM03q6kSQmhY8xXLu8HLbB\ngKxkdNe/j+g4TplGFtvYge4do324UNqM86y/lPZXyAJO1iyKfWbaHnBrC+dz\n6xdw8qvD231CXppcbS/Dc6AM0U0uEExzgmuEbuP2RvL3n50TMQSRUdQZ633O\noQsuDgzKJ0LPUhnu9qDk4L+/BWmq6ZE1qYEsVUCblPkrq3CjQtw1JrGsJmDX\n+/tIV+zAHlazVY5w1zS0LvDbVtUG6clCy5hFkwY7kYsT5gTngLopZXhpNzIA\ngEmEcbGQLO7Z8CeyYhlU0G5MpRgg9rbUTTeMG7iDqA5NXqe55uET9vuNUQbV\nYQUqSi1/+mW2Mn5098gdyAmNL+oIQnl4+aOWoU5llZOM4h/+ebzU973bYEym\nCQHIcMzOR9bwhfvsQsSya/dMhTYpet12n5ZgavXhfF5j8cs9d5RR54dRbPDA\n0qdX\r\n=Cbcy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnllyY5Wlz8FGQ7F7ZwvFdvq9Miuimz38lElWEG+VtGgIgA/ji0plCqc4i7YRrDHm2vAlURh9UD6t0MbIGUj+W4js="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608041346-a7577626.0_1608041482889_0.033128400557189464"},"_hasShrinkwrap":false},"2.32.3-next-1608042160-2ec6cb3a.0":{"name":"@xdn/core","version":"2.32.3-next-1608042160-2ec6cb3a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608042160-2ec6cb3a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-D+y0ULcQQfau9K1Z4Mqepom/66U6m50uc19yyHDsIjIzb3WBNOWgV1bOtRLKmYVhfhcHQ97cfvA2YIi71m9eSQ==","shasum":"6eeba752b25ae8022ba7f63956c1e51cf2a795ee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608042160-2ec6cb3a.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2Mc4CRA9TVsSAnZWagAA7S8QAI4+rkvylTTu4eMJgLMf\n6WvaRBkRGU/hlBnAYbV7GiiuNK5Z/AbIdEWWdn23keA/0Xrhmv0gXOjyOuZB\nd7egI2hTTVLOMxyF6J0bWk2Lx0eUiUKqZX/usD9amZvCkpUX5jJItIbM15B/\nfWxIbVjhmPyJdiiIpQBedzqt0Ve+X71cyunuXwC+asTLIUyw8QPLQqcskdix\nlZ7GMK0Ftn39YKoOjvNsI7DY8mom4gyJOTkTDkt6H88id03jx1aX+Mn7Mp59\nCRNrEqacqZr9Icn6zHbUYMN9Q5phbr+1QXsRZR2qL3mm/XTz++4dxMCeOOeT\nOE93rXwFV5aHRQvCOOF5YRwGFf89XBxv63iZuknfbcvsH4g9R6zb/Ewcn1LA\nuMh2yAVUQLjm05EcK48zNHofVPBxeil+r0/WzT8c979H0A3aJrNlIYPmuAit\n/tJNpmUsqVBDubeFRKRyADGY9uma3ld0u5q5FOMZMPIX8AtuLjdplr2stMbe\nFqAzbDpqbOeMFoCMZdTiLOW/hHiJnDPjZzX04Ezg4nbQ6nlZG82dloM6mkA0\nWZTi6IfGj8OJJzPvr6rBSdUE/2BmTv5Um//9WyuUtyCWZqHV6b6tDcnhOUT8\nsfDj67/u3fEv7QpVzI/O/cM/QHD1OrOS+fokv5mUuusTZ37knDbHGmB5fOgV\ngggs\r\n=Y+DB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpK5fRo5rK9SW1uoSza68Ni93uYwoJlJn28Fm3FairCQIhAPsMbXQgmoXCyBgBYiU6IfUA/NyEb0q7bM6MB3ME5bgL"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608042160-2ec6cb3a.0_1608042296364_0.35718149626891127"},"_hasShrinkwrap":false},"2.32.3-next-1608042765-7e7a0b1c.0":{"name":"@xdn/core","version":"2.32.3-next-1608042765-7e7a0b1c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608042765-7e7a0b1c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Pq7jJ9jX6KP3ZFquLnBvJ5XyMzf0qWBVbqbw54NziJuqHPK99XWmU4jnTYEoLYuoe05ScvE2oeC5YBzKoJE6Lg==","shasum":"3b1188505931e474db7b66549ff3cec1fd3554fd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608042765-7e7a0b1c.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2MmFCRA9TVsSAnZWagAAF30P/2KEG3rDA6MeMkWUGmlh\n/4Y6UyOP+vqQ3JPBWnbXpqJi8yOUlYnAijJWgFJ7S2DuTAWUMsiec8K+qYVg\nFhnS/dVEjAZ/CX+RBUQ/rr8sQGB5GuW/zLkKknmlzU00omp9lYveL32tjfgX\nrpo9avs2haPQ7P106SUISSELkIzDyj+FzNNwBf8vgBM6dfiLKkpVaLg4AZHS\noW08MMX2tBKB5lRbOrAWg5BktYDoPTjgf8/x7QveULn9TxmVNpl2QfygtU1n\nMZIRgqtUKdtgC4dHMsKTyFnsN/dwJcgTATESXs4ztEKWWQv3LBuzkdcRLM6l\nVzlaKRaWok1Kk8blU1ILh5q4KHYqMn/X/qlu+P8zoCMqK2u+lCcZYr5hnJJG\nPb9bJagDknl8vrDkfTG2RYhNBk8LNdwaCBxJHQgp0FNbfm9TLKlXxgKtL/JP\na19QA+V8j/CmDM+jh+fHt7VPq4FXRjNmD/Ky6dJwqrPlRNU2p63FKaUIQxdc\ntx0Cgzd2LW3CvfFrS7LxCZzFPcBrA3mr75TQ+/phjwKSawB58Fv0cnk2ACRg\n8kYonKzUamkSR1QOQ0UJkPUj1bwahsjP0o7PhMBqwTemOvb+lLWuUUksvqLY\nenSLdSidiMmp38OixoYt3bOiPWkHj7ARNxGxjO59fKsxBCKi/D/i6rXCXHtH\nGP8a\r\n=+f6f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJuEtgjT87hrMw565Ea1WPqJIkfeWwy/Qv6EDKeLlZsgIhANNy+OzV39CYtV4zE0tBZBrEonSzLAbxGoRzjYhc3BJG"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608042765-7e7a0b1c.0_1608042884426_0.16308098891922218"},"_hasShrinkwrap":false},"2.32.3-next-1608042792-5ad1aad6.0":{"name":"@xdn/core","version":"2.32.3-next-1608042792-5ad1aad6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608042792-5ad1aad6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rWUw0Hdkf8sfxCg8aAT861v9uDsyfv+neINY2tqWEHHYQ3E/YkUC2zKp6AodCPPuZIboZfRBLpNDXzSzzKLELg==","shasum":"073972df827bdb0359e93e348aa9c26c4cfa4512","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608042792-5ad1aad6.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2Mm1CRA9TVsSAnZWagAAE2EP/3PRjY7n9OyCFxeSU7eu\nmekQy42a/IhKLovKnWlyjxR85rcg3WTWvYy4F4me+58tJlWFoaABdSUMXyL8\ntdJWb/KKtATGHOWYQ5fpMBNMa+1fUoI+lqBZ4DrQu44E01X/W9TeKl3DCQhB\nxOorYJXp0v3EQSnTXgDLPKMMzzNxSRltU7DcPDoxMKxEezop8M5nXwQEekgq\nDxq9yvCXQgF/c7KahsGi2Fe+VDf8tEqcyu25kyhigEk+xWXzSzctsBxSr5Ez\nl4LFjLl566e2BjrKJsLRpXhssV/0Sc3OYHt3t7DsztoX8IuQdLrQqCuDe+iZ\naQQC91iFA/05OJvD5tCUDVqC0y6aQx8x7qmWrE7POiqyGDFMjPR2jNTNYx03\nvQwXED7cFQR4Qf/9DGzYRAsX/zP4FJ/6r/D+HdBJQGxdgbSS8/AhdOy0x0PU\nqcg4457YmxF2JJ4wcRaIZacDzCYPZeEinHUyz2McUXYx9vMgeVsPpA+nyqhN\n/JVunp9XQMO+VqX89iTCXl00RdriEwgC08UjiPFlUIPAKjEV9HXTx5L9/PEw\nGCV9qnBSVIc61EPWESq0KALP5TmbS0CT2cIhM17vV1PpxoK9MAxWJaIYG896\nKP6AcSQ8tnpcUZodqwseWlD5bs2pKZqnK3OQ4xppgp21zy+xHmy+PUbVOyDT\nAyAx\r\n=7TQ5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHADOFJWlMyg5SHzRK+lyY8ifJIAZ6Mx7B7kklDGR9bRAiEAuTe/geluJbdGcNWRXx2LIYpqC4J8rfC7Aui6DhoDrFs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608042792-5ad1aad6.0_1608042932892_0.7072891590713128"},"_hasShrinkwrap":false},"2.32.3-next-1608043836-1f712470.0":{"name":"@xdn/core","version":"2.32.3-next-1608043836-1f712470.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608043836-1f712470.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-An7u/Ri7Bb3PbmEeeVnTBzzzKemGFh1oKjVyxe18hrMbO7yGfXwz6mB7fcoimOW9L8l6atwL5EQ3Uo7t7elZ8A==","shasum":"0d6c944aec2280900022be34dd7e90bf85cb3df1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608043836-1f712470.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2M2tCRA9TVsSAnZWagAAkagP/ioMMMPFRi+TIZJl74to\npY+Vvn4GRP2erhFFfm4Tsz+cangTsphvVsH1RWsv45bskcN70LdUrnVWRCfA\nUTUhAb70R1xcwFtn3RHw0EhwvjzGc/H9xknusU0uRaYhWuMCkJMDDuiMNoiw\nXWxXgjz5aHWEX23eu8lIvgRsQSSn8U9wOmRW9puca3HJOJTWc05QDzWXA++A\nropppBil3E/VK5ANYbK7g+6mHu/8EkWESpJ4jSrl4kmo5SMSJYDUXLNbGeWc\nDVd6S7NCEhfIOf6LJ+6q1MBRx2jr26b++Qbo5x2ucl67le714y1kak9nPt3J\nLMlf1FhJd5yAEKqUjjFNpV7AoigoNM4RLfEHOlwKClzUm/WlgRfilSzx3r7W\nJGt1m7sD8XYefRnBDYWX0c6w1gFUc8V9wwubasFB8wNDSgl+DJSBB+s9B7EL\nQCKjlUM3j3ZRWD4mdA9IXvtdEeoJWGNLL1Y56GkrBJ/m92/swUxc2XAVm3Xk\nztbkBjbuZGYqAXz/TV7J1UjBBxIiCXwoMfHMAMI0v1sxYsoRN2jWg0EcbN0A\nRCXmeHGcekFJ9QrWPhNrLR6JfEt83zJXQlndyyVP+Mkeuw9B1tFqGI75eakf\n74q2bfgRphkbokQ9kaKLAVj3v0OpXeHraK6Eyu4NniMlnluhZ0qO+UotLAYN\nZoRT\r\n=sTj7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCR93dt5vZcp76upxN7RzLCxB+roXiu7i6VWivz+erDjQIhAK6Lz+gfiKvyTr7PKDWs/gESZLGvs9wJTp2+k/EuQAQ1"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608043836-1f712470.0_1608043949229_0.5121265480544959"},"_hasShrinkwrap":false},"2.32.3-next-1608043916-6ffcd0e0.0":{"name":"@xdn/core","version":"2.32.3-next-1608043916-6ffcd0e0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608043916-6ffcd0e0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+63/nvhuoMhmEB68mu0Kkrhyv8pcaZtZUUUscezz5kdiD2oh88TfJsdjI2fv3n3f6uHrslluwzEgrsZ514Q28w==","shasum":"ee7f4be7d4c0d8ded5176aaae52decb9571b198b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608043916-6ffcd0e0.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2M33CRA9TVsSAnZWagAA7owP/1bHEqSMqAjT9bZ/smL1\nRCIwtpPcXHuVUuRHq55WFVrygXE1vHo8U1QyyGmBwp+hSBmrOM3qGYxBkCZ6\nAs8QKpTF4gGjIbHJ5rqM7fW6upOCTAjTdy8ttxcYD0zGx6GeWgp9sW+znJBp\nsEKWPJQ4L9w0t1BffWs/VUlNm5H99VQR8EDn/SJW5I6q66BD6H5w2VN/sk0a\nqip746jFM3fcE/nA0OMUZFqtWUHLJ5DJUymZ5zangYcPIM0W+xW99Vb30SEA\n+lJLDB7rjT+K8U5zCAnxnWHESMvmOdMnQNo+qUCpBJ4dZlTvNifDPugyKQ3R\n7nqqozg3ChIe5zTiufipk7DrGmcq1tBvEFx7oOVgEy3p2bjL4SOYbKI3qwa2\nq4y60otoTfq89ga9jXavF5ja0CG0BpRi/5K89YBrdkVxi4wW5Ss2wPMxR3Iz\n8erIFA7qQv1FVICzgWjQ5pYCvtYuBH01/KwKNlbXr8pmCyV+8tCVFPrMILKL\npjjjwwZ9r8YPpdi4Ja7ao4np3RLrjdj2L+q2cA2OQ/oJ3S7LSxMrf2sBJiBJ\nDVoSqHIT2H0bH3jxQIccWPJhykyY3nf4T/PXhnL/xmVJyNzapOiKtebNqkQ0\nJU+47RAPCO4/2NWtFCFHnaHpigH3T8V4zwYKm9nD+JsgQQzxihTZt1loe8zS\npXjf\r\n=RRCi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFmZWM7v5p5g4tpHg8rj7At8nTcT02wn09lfhK0/g3MbAiBIZLHKm9cCQ5NE3Hi38Ly14eoqUAFUUC5GhJR9Ol9cGQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608043916-6ffcd0e0.0_1608044022732_0.4576099247105274"},"_hasShrinkwrap":false},"2.32.3-next-1608044120-8a10bb60.0":{"name":"@xdn/core","version":"2.32.3-next-1608044120-8a10bb60.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608044120-8a10bb60.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-L/Vpkys+EslZuk+0rYOdUQVo/m8/kq8w4HU8qyk7DNHT3VvUCsViBKtAbQl666Cc1gOh7vSyy8QTK1WkULV9/w==","shasum":"e25e396461371ef4fe43ef882ba301bffce67215","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608044120-8a10bb60.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2M7QCRA9TVsSAnZWagAAlTUP/2eElgEfVvzH+V3c199c\nMGLzrWe46UYdVlWQbvvqsGVZKV20qw8lqHxBW+CSUIHD+PSqARw6TZC1e2p/\nRmm0iLnfyGYJJldHu0YsJNz4iYrhisECf6KZioShdpnRX/8IrSNR9X8OFVr6\nj41Qp0vXxR9Dxxuqa7CYq7Aa0RpEsToFQnsBSqs5Nmmq3uGE3UaSSaDhCh2p\nCV3ngJU5kjq59auph97ppoXqjj/nKmuTOhaY+XKNF1N18a75UV9wcUD/IH9c\nT7FL9Wej+/vcG1M7HdkBcxQs41cm0K9cuuEOJ33DOxYE/Ro3rIyPwdST2Wdf\nbjpK5xTC1ZJ/XOQ1N/cNi4vUOu8prma0XA3CuKC3G9nXjLJK7oUfXV20T/YP\n/2wb+aRFT+XTXUUHjokRi1txK8PYqPLZ60QAn4If73EHndk7hdj2+Q+TMrFA\n8YJD93Crd14XIWWW235oq9OVQSKUnqoFRsOcDZhgdHtYbprxqGT9G8h3Ljbl\nUEM28O27B4B3MKp4O2YrP0DtGi14kUc/ycuwGz4WkSDvg0XN0wKVb733Bnpm\nSuysiz5biPi8NP1v5am/+bMY/8CPE3Q6nQ+/tyJo24IcfRury/Xg/xjQVDL9\n0vcO/1tkdQF8hN8jVytZ+QVqMbOx2Yy3HJmMgGke90VHogVmaSQnowrT9jeP\n4nLs\r\n=r2ZK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUx/Ximh9ahZRDR2dQb75yMCvVKM0a4rbkskqqI/9JKQIhANH8b8PIqsiHYWUYGLegAjKdv+Jx2TmSieBWMbfHLUip"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608044120-8a10bb60.0_1608044240427_0.7158733100850685"},"_hasShrinkwrap":false},"2.32.3-next-1608047089-c66cb524.0":{"name":"@xdn/core","version":"2.32.3-next-1608047089-c66cb524.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608047089-c66cb524.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VgP//UTQI5HECxBnXHw0Dle0KIguKJkm3fGhaF/tM5yma7SnrSHne3smZCO+Sgpv3WEhXTJiTAegeOpWS3No3w==","shasum":"9b8c0486bfe42d0452b3b490f0b955d0ea19a93f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608047089-c66cb524.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2NpuCRA9TVsSAnZWagAAy/cP/jTnMcAEh3qxMnONqgpr\nW2c0Ty/4SEOx1rYzgwi5ICtW+/xmY7Lc+Z3fDy4/ixLuXvm1seTupydPh8iv\nED/xoDI3/Cds9fYxhni6MC/dytTWT37P8vFp83KJdOud3zeDAlfnNIxQrpPU\nGUFQkfG2ozqE+j7DT+p6ga8fNdaF+EJ7HBbzHDSDCFz5ZDHxE1WoTlnkfaYq\nJo5n5tpGfQ0zE3xoaEKWjkXOYog0dh5yhCqovUgEKA7gOWIsDTF7ez80uoA8\nv+xolvUc2K0yEey1IrqD2I5o3GfZC0HT0iiyEhSwqlYaVyLBkRvdocRzI1DW\nNgrjt6ZiE8MO1lbkN/260KNqkoO9sMOrBT3pirg9IJ1BEA2kmvrMS/NbVhzT\nFSURBW6/fZs/n+eMHglXnUQWy/BU7RSWYzVLXZ2Jsq2yGBjzqc1fmBZB2F6u\n22If8nMeBphrZAjEmCKLYTZp24eyaGoApBtjhVzWkx71Rx/s53Hpe6vdT88p\n3Sce1mJj8WrO/DRn16SSHTkM7gBChCTmYeQujaYeGedVB7//6KrYTZX+XUP9\nZk6R6xPQ0OxiR64Xj9kysQfLullTVV+5t6CB6bSPyvSto400LknLBIh7fPXe\nL1laNoXRcNgrYlTFfHC0y9Y7iL5ncowRkePGNmmWfst2hSXUcSHekxCdlVew\nzF0v\r\n=MwPr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFrBrY609X7/yyszgd8VpxDzxt50KdZdYsdE+nCyuAknAiByp5LXhWu80YfJTQUVo0CWwiwDf60rHbxL4463sS15PQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608047089-c66cb524.0_1608047213880_0.6478043764024979"},"_hasShrinkwrap":false},"2.32.3-next-1608047166-921e0330.0":{"name":"@xdn/core","version":"2.32.3-next-1608047166-921e0330.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608047166-921e0330.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-y3nvdk2RJGrPuwzBpNnwBc0G/SzHdV5/HTFT4qnL+YU5DrJ+qbYkhAwhBSZYedPRdc20o0ACZTfL2A55lJ/FWg==","shasum":"8f9609f1317971c7b818e94aae049e2d2dab6c1f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608047166-921e0330.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2Nq9CRA9TVsSAnZWagAA36oQAJpOuScFZht+ttV232Eo\nCD+L6I9zH3EMpF+pvfcoz2YRen3dVr1IOrYUMpOwVSGDrGKHv3FweEkqzKKN\nHG8GSW2OIypAheKfl/sKatp7NAXUhQHFy5NynXXMVUfYobEYkx9litshc+Md\n2HXPHiJFPGoEhPuL51GIOWiO2kl8LO6mYicsYEpGNbN1YqZOYBAsHuO0y+RI\nN63pdS6L1e+YVoFUO/jOQdk0Soy+vaBVSnY5RygPYMd1b4+nF05npbNzBMIm\nQ2l0S4EQN0l7joR2Sf1G6UbQGnhYItmjxhDKR3XVZlm+NxwZX3WTV7SyhEIp\nkqMYqHOX7GwYRk/cJfG9SONqFx9511Q8QtgkTM5+dPHplEbn1BRQNUxkyUZ7\n65SN8jmNY2qGercx0/6pNk6EVHUrDmGDsxnNgnlPFxzIx0/o45QdAnGF56u8\nP5WNcH1A+GAg3L6VY8NNDIWRYr8yVCicPtkIISuWw1l9JMVexsHs4nxOBB87\nf02y7o3mI+KJuw1lurU57bE0dbpg99tntdL9ohvnd4LBC3XrSieOd9Nv8tU+\nEzRsO4tr5pYjwK75ZIoPWAZ3DCJdjrEwK4uKbJoU32hFX6zLVAr7PKSa2HIZ\ncwwWVqfe7leMu89UzwZ9P9MagLg9qkWm6La1tImBfs6qa7HS9YgA50R5Zfqq\n9smq\r\n=13m/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDy2y2cgAMkNC3FCytfNe7Yd7EoaAT7sdQAQ941PnG/uQIhAN3CJzyU9RZ1tHK4uGdgVpTgRybYRYMx2Nc7RacxIsNV"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608047166-921e0330.0_1608047292523_0.46616405836528063"},"_hasShrinkwrap":false},"2.32.3-next-1608047341-5347fa9c.0":{"name":"@xdn/core","version":"2.32.3-next-1608047341-5347fa9c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608047341-5347fa9c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MVxekOyxoMMJsEy0nnMC5Pu+S9/+b0uzwLZo1S3+sPMkjETYq6ZTBvnER7gnmNKF2S7Rc01M8diDL7oNctMhig==","shasum":"f4e3b0f7e366a59fa7ff1922cdb0c180cb4aed37","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608047341-5347fa9c.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2NtpCRA9TVsSAnZWagAAndEP/3kMSOaC7DAX4hqZJUgb\nPUDfhDFfKkbTvYE/SxkDd56PrlHGiTeuf1D3kAg9kc0OapfeW+mSqYp7D/kT\nGhrEsdWCUxNafJ48BExjt0ZGm174/hgAdmiHjd1yCIJKQneuenURIOhucV4q\num9ciCiYyDKVkpWMy8urQ9C+M/JNEEtqkAvJO0Dc9tiZ8rC9ci2O27d2kVEw\nbyA0bp8ayI+AdN8e5jSK9MXsTG7U83T2y8RF7KkrgEIKo0PucymCMQol/ntT\nsMhjPVyGtNCFYI2geXRDKnqOGjqPYVDLzjzQ/Zp/R5B4E1m02N1zu/ONp0xc\ndIm0R/OoLXegii4klXfSeEYNEaZ4+gEensbFKFhkxENQ+ebEE3W/ruedz0A9\nKARp2ZW7tVJkl7B2KUH5fz+KEcTTQVIX1vdqkdEBkmOWFobcvoUepwyphkkq\nXu9hEEBpvSfgT2HpQ7q4djdGkuP9uMDHyTKopdMpedno+pBLcp2PsZ8pyC7s\neYHBVKhUUuF3TqzHvtt6rnd6yrpuoIzsoqKP2c5Wu4VTsDoy1DBqgiYX0pHm\nXAKO3laqZJqCHu6/YLkjo6sAXRcdbWOrGsVzokg4ybuHQx+ZYBwq4YAUtE3C\nG+6CmsbqpyzuQZxpNZaeFONjNrze5+umqsELJCiAJl9dOHM/diO22tix3Z1V\nD/Th\r\n=OLkG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIXuXnxz5/SFYy8xe5EQqUtUwNiS4H6V/64gCA/QLq5wIgC8TQFVO/6ptYJusR6LpKjVf4P5F90OgzTEt3qVEQgPM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608047341-5347fa9c.0_1608047464510_0.3191691776967891"},"_hasShrinkwrap":false},"2.32.3-next-1608048083-7cbe2792.0":{"name":"@xdn/core","version":"2.32.3-next-1608048083-7cbe2792.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608048083-7cbe2792.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-G3rYXluniX7XkakDee55yPcxOTIbrjQ0EypcSjiUCl1X3ZfeHEPrTpQD9KByd7xAjt9vmZasOmiRFiDFcVg0nw==","shasum":"b097198f39e92485b72dd48eec62dfbf1bb4eb5b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608048083-7cbe2792.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2N5GCRA9TVsSAnZWagAALA0QAJ1ZnpX+sTiigCWTBENr\nvik6t9tWFp37FR3KQflOM1hfco+DfrXOmvJIl7PHjeGO17nV/tIzgKCh+URv\n+8R28FIRPJ+GiP5rBBPSBr4aktfLyv1Pb/Q8M0r+f2uhl1lwvAAQQiYXiZCb\nYgRog1KbXiCe3sDP3bi8/6eOWqVAJDCt6mGljZSXS8p47Vp2s/NZqZ5mHSxw\nVj1mflRLoI5FICShGFmbbHJTJIYws6xkzjE2rthsIw5jbhizW4FC4PJLoSSM\n3yt4wrZUbhHlkMsrdIrUjutu7V7VlqvzQ78gFAzGeL95BcVFxSI/tG7JWmhG\nYAXtczy00yaHgK1FqQFEZugvM0YkgjpMEXvuFxcb0BtwWifDG9vKH+se/9Yi\nDjus4XikNp4ZbfUKlPrawduezuWHXKlSKjM1gyA9OdZSnkuA9G+zZzuMt+Qw\nD7boJZvW4ewtDDXxYjjfvNbdEI2S3VnrOnvYnKNnkkYkRqoIqW6HXOVwSWkH\nL0WoMlKngCl/Njmdzd/hzklWR5EfueVvTVhUYDo9NlkhMQuFYztjGmjjH8Nd\nXOLnFGY0szO6BBJ6pR4xiVeUb3hAKmQ7RoHGaeEn7rP5Y0+cqBKklcy3lTl6\ncEe3a9pci7gJMvb0HIJHF9boJssB5ZTRwxGJKZRlgBIoVFTXRGuZ60aIsdp7\neCXq\r\n=pD87\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzwoEq6Msb8fQxQ/MWg1teWiDKQKT8u2MC53LJnWo/UAiEAm+FAQwwtzg9OLdQVX0FMJEuPm58oIYRWM+xDacgDXZE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608048083-7cbe2792.0_1608048197914_0.31926990225755003"},"_hasShrinkwrap":false},"2.32.3-next-1608048285-8a10bb60.0":{"name":"@xdn/core","version":"2.32.3-next-1608048285-8a10bb60.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608048285-8a10bb60.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0mvR4SUXa1IKC3Qm2e0txlfvlHxeGVAWep4KtEfuRq1lusun5AIGylJ1sYmqpElF53Tlhcw6nTEDrAmk+E5wAw==","shasum":"dd9297b910b096e47711fa94c7112f40201ad293","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608048285-8a10bb60.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2N8YCRA9TVsSAnZWagAAS+EQAJSFaGvT77Drh/UbmCWa\nYTZrRxDXMNEksM/vprcHzpEOXWaPKMZ1hmlQda2YDwODqYFKkWpI49LcqxxJ\nGr7NGr4jpEixi+X+duqr4KKIN8vlCvNC0zz68Juz2aeyFkNVV+rP4QrmM3DM\nnlThvxjw2IXUSsTaaL2w+yCFLdm9it93T+7ur8QNCkJTxmL+bgJ5zrAwsfTj\n8Nkby8aUC3C6xGPZHrn1QfIUL9fCkmROBDOWyHhfBEUgvWcHv9et39voxNPk\nDuRdag4LTCoG2Iarmxut+6IHHpMpa3uvlD0Klv3SMfR9c4rtiU3ifWK0d0Wy\n2wjNiD6X/ebqj88mL3U7zjlxEH68rk35OCvx1LhkXL+giIjasbRa4rHrhF5I\niLTedD0G5zfJlAisntMiJivWe1/FdnX/JCwnKp3xEYJ3JlqH68YfVM2260i2\noWumql6CMUt6IGz3jXSlzVMJOz3RE6Uj+Hc63NkXRc9igEuGbH1EeLXDnHqe\nyXRPefKi+L1Jl1Nvq+vRfaoWUbHZhARfurXWBwH3lozdQanufhKm7zVT1HNH\nE3mFQ//Vn0rfuQpMg19II7BKZlNlSDCYW//9d3M4xtkuT6M3mPGgCmkxsSGh\nDrwDki8OMW8ZXI1xPl4EhVeQaCKIEUsV6vhmtdTT91NmQmjI6xkSi+Zgd03g\ndD8x\r\n=XlX1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqrJEDA206MtrbNskdFgq/bM+Jugu96eLHP6MrDtSMsQIgJ57jGrx0w8M9xVvxf0KhQlloWJdywwk+lH+sB5FwFUI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608048285-8a10bb60.0_1608048407759_0.5889739052053777"},"_hasShrinkwrap":false},"2.32.3-next-1608049415-8a10bb60.0":{"name":"@xdn/core","version":"2.32.3-next-1608049415-8a10bb60.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608049415-8a10bb60.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3YO2M0NwWAA5BrrnfiPOqEbt4r/no3QnHcYPCN0LjTeDKryA3Tb26wbBXuSppHxngUVJaFxYm/2wHXJyv4YAXw==","shasum":"d691cb5e25c2ab86c6feb6e8b953760463ca6999","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608049415-8a10bb60.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2OOMCRA9TVsSAnZWagAAWuQQAJBpDJNVzhOvmqBfqpQX\nBXcTc4vgTMG4pd3MqrpnU8170gXH9AkqLgUDJQwZBqdCDlIKcaikQht3v1Pk\nz61CwZCz/atUv9OS2AQk1AEWDZtsXv0O5fFpSpUDsLiTnFMBFfWbd5BGFrCv\nzkJnbctM7cOosn7z0rS8hsHdEGuS6gFnZukASvAeWx0eYSdTM+W4svsnzIrH\nLn25JLPf71WhmaX/YHxm3KfY4WWF1RzoD4R0PQ1QDG9XM5LLMU9iQpRD7xNm\nxLWRqisGGqFap3Kl/FwcZ8iGZV7zKB5oORz83SwA3IoBuhEwAEolYqmTllnf\nhdnRf8YvBhLDgmYRbpgzOkH5rVDrqtoc/zT0bEYoBpnjtlrUy48fyBuy6a2x\nOl3uMKv5+exjGQ5Lr+vrocF1DX5pO/OYmDyMKWGBEIHXvjpdSkevwXgv1VM/\n5mgivf6V9JQCjCTPG0cRY+rFueDSbV0Uqvd9ld4zK58KEuIB6jUCVvOe5xMF\nkZKKfEKFxFAn0XDkHxCHD7i6xDiAJzruVMzSdQuOrpogyNImmgB3utYF7SY+\n+tbxJGzZDHGooK2c5ZU/cifj53n8ZsJa/bbQmgg+wW1wQmOYfP/qOsKVC+hv\npKsLbXmuEnyJ4yzhVxbuK5QrGeesd+oKNrANtsm7AOdys9oBoBO6on27Zvfp\ndud2\r\n=uBNk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFJoJOil+nQINFveCceYz4n8MUzYRjJMRffdYhlfK9RdAiEA32HXp0FYLlVcDIUqL1/k/X49Nb26//8IldLUIHI9Oq8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608049415-8a10bb60.0_1608049546844_0.8443056654062733"},"_hasShrinkwrap":false},"2.32.3-next-1608050790-8a10bb60.0":{"name":"@xdn/core","version":"2.32.3-next-1608050790-8a10bb60.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608050790-8a10bb60.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nKD256nWUJ1cEghgBoe0BFeEEqMfcnNDBhqqgTcn+Vp4y/3qaaE7xwKE8Mr9ktjOLA0036myjBwiRzUkXYeSpw==","shasum":"7591a05c4a26c23f4e79b9c8d590500078cb6622","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608050790-8a10bb60.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2Oj1CRA9TVsSAnZWagAAdCwP/Awy4yY1mJshTEmHmSck\nNH774QpJwrjTgf7xNf0kqd3wMCrnl2Z/kFLFnQYmhIhTC0YYzin5NjwrrPWC\nCVPRN27H4LuUSJJdSNfS9+QP6vVvow3vw/6lWllXmC6uwNxIq2j8KAerakzS\nP0jDWmt2tjgEACa3phLe7PvJEq26/HwMFGQztQfZirtEKDSdXodkrxgg8STc\nsrM268ZA9dI72iqFFB8bjFaNQF0KC7jsGeb0R9rYY34/nQ1XAcaJSEedvGGZ\nbRuByuwFq+4gPyo3YfhplBaU506AFiJ0LAi2WzLQW3pyVJwmTLsUsgEXZ25N\nm5Gvx/lY47+5N/+3i291sRnUM2A445RreFHbfkFneNDALb0nJ/VzIOGtcCdD\nW3MOQwplDjPX606g4oVpeUvBpE5ClXAIgDEv/KpxhwUSaknCH8sj9K+KW/RQ\nt6IeCbIxhcuYAC8P4HMYqaRckvb0OlkeEir8nD3Mp+WPTRRk+AKst4GNN8vl\n7BgT2F1g2MjAkrSZbp570HBuyflgEfDgVbQZa4tWthpi03so4jjL1Kq/XlO6\nyYP3ac9BuwdBUBnGrqFEqtluMLwKEo86BJBEOOeq8P6yDH1C+ww3lnW7EgzS\nDRTun80FZI2u2g9Nfx6FObJdrjh2Ov2WS0+Bqxk1Vot23sHp7nwXyfzsIBNg\nW7cd\r\n=gJ6m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMqFCTmgBfQe1hDzj2VvbLM9ut8o1ZUD+jmOtXCNdO0gIhAMe90WPp2OLhzv3mV+BZVREQualw00XSPCo7TWr/QENy"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608050790-8a10bb60.0_1608050932597_0.1106277777451421"},"_hasShrinkwrap":false},"2.32.3-next-1608052491-32097b1b.0":{"name":"@xdn/core","version":"2.32.3-next-1608052491-32097b1b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608052491-32097b1b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UGQZk1YM2fzZkgHIhTtxHurWD4l37IL/+AEwP6CYRh/fYKOlLXZWDCGdisRJXFzdSrd9DNIzyHzLF1anBy00hw==","shasum":"1c8c4de9ec4165b1cb4e5b229caaef9b7fb37f06","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608052491-32097b1b.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2O98CRA9TVsSAnZWagAAsswP/3+tlAqe0hb1+lod+Zq9\nFsHQe+RMgM5DMODp5/Nag9wb+dVzL6tMjmZ6bG25aTlM6314fjzfdtmF+wuB\n3XP90PDO4VtXW2FspHZG/ntCCn7zIxqdUXKADIwGL8eKdZamOE3TlxIMEZ59\nup/rezO+0yYL+aGR7VV3B5zrxO2zitL9LKhvYEomWMoChI6GTsKdq4QzdosE\nGQYEpmLF53WbQvB4XRW4+IKDcCX+IhE+91T/0VapEgfgab3pZk6z4aNkMnnF\nmWnP0GgyQsceYkKrPAul33jziGh3OGaFJ04LbylU6V4BGQkygzlYmo5zqtsk\nNv+jCRUlikMb9UFLQY5nNPZRXtRWNCiJphbGoNnXXmRjyiJQdfRx0wPDGEyb\nT25voghdrvk7BfJsYKWo3fbeRfzWrf9hhjbpt00A5MwVZ9boZqLZ7CCGT0Rg\n5BOZGinpE6m7/xPhdRoOyqXzwdWCe1FT4bG31jyq2p/k18m8fhXdfzzexxpy\nffg7mCAdqog8dTVqQiPQ+VPZ9L+nJ1F/IqnVWFyAJ/v2O6XEiA1bX5+DTWNj\njKioXuP41fUsq+hRePCLNzuKl7F3gtcljMvAlIHyiN/r4pbTdOtcrscRGlE1\nqLESngPCrCKnYCARCDyzS2W1Ypec45wFlAWZ8cLLWfkOpFOuFy5aoK8Nn+hc\nKUvH\r\n=s//d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCa2cvfiGaOjnyXjSVaUQYUMWjOyKtD/8reO19E6wqzLAIgRlGUOG+MUMWGofoXGqa6R3YAE0Tx+milwviN91LAqsM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608052491-32097b1b.0_1608052603584_0.1413822274410763"},"_hasShrinkwrap":false},"2.32.3-next-1608055281-cee788b4.0":{"name":"@xdn/core","version":"2.32.3-next-1608055281-cee788b4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608055281-cee788b4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-iWjE4gYqsNS4C/vuMdzB/1idrIDm53gISmhKYD6fhSLwIauIkuOzk7hdRNcXU5c+qQ/3GUCmfDjLEZCHVobX+A==","shasum":"23ec62e557c31aa18afa8845c0cb540830fa8d8d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608055281-cee788b4.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2PpuCRA9TVsSAnZWagAATpQP/RzaaPbn5Sl/JovGWGHw\nTyNbVusYjS8zZD8Y/wZ73asGfziweEFCPpDrgw3KnytCkznZDpLbYrLBY955\nLXJZflo3eXYTdF1xg0bb28C9TcZy+vKosIKKFG6LFBHiw0OsXn5WAjIWp7ZI\nv1v6SEI8liqTT9/JOFcwhsDCrvJyBnO3poJMZCTNZOOvt2+B0bvxm14XXhBq\nTHwEGHs9oqVEhqTfxRs0HdJ1G81rZoa0W59nZSOVdrsXZXcmEuFcP62ZyY9i\nRIchiKETsIP1m75lvMGhBIun/6YspvtzjqSDShfvR0AIPiRay5ZMB3yPezGX\n+AUz1vWYcq+UTXFcgVul8VqfdGECfp2HTVWDLo/mWRBjog/PI8lc4QA3E9G7\n+tcQWVstWM0szKCeUOwOXUhTpEasLXMW7xDbwX5X/u/KK/cU5+xssOUhyjJs\nRSTUdI/DiHFe5xt6Ad0H5lrudlZbnSxpHmbwWPmihvW58wS+ntCesRwHqxs5\nDTY5zYz7V7752hKp0o8LuhcqSzWlsGmu8XZ/bqGO4wWbkKB5KfFoR61GmWvs\nBZjsnFIvMUP/66Etow2mHZI6eq57xAGX3rXqfAdIA0P01i7Z4e/5T1rBAQdm\nWsFH8auBNIhT5ysbt3iZb87Ia/F2EYCjpuWdo+VGjOLoEAwY4aB5fHACWAZt\nJ45l\r\n=Q9n9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG6hPHFsbW0tOFmMEN0RBzsRBmZzCLsbijzqkZ8WfEzXAiEA1Gm6LT69FxrYeAcWrsixiJC+WuiOGVhp+1DmRg7xU2c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608055281-cee788b4.0_1608055405527_0.8858050542235332"},"_hasShrinkwrap":false},"2.32.3-next-1608057783-ccce23fa.0":{"name":"@xdn/core","version":"2.32.3-next-1608057783-ccce23fa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608057783-ccce23fa.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-EgsXGpF3XqIMdlwmyuWCT0rZnI8/29+gxuvlD5Bscl0jua7QK1MafnREPBwafBms0NlvbgEMFK3HryHIRJFHZg==","shasum":"7d9a5bb1db9c6cf7cbeb51efc8c52e9183e810f1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608057783-ccce23fa.0.tgz","fileCount":169,"unpackedSize":635749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2QQ6CRA9TVsSAnZWagAA+EkP/jDrHG+j4YmEkQBLGDTh\n1QWNFum41PKs2cVGqHmyoX52IYj9YmInYfou4DOw8fyEpSATMTWvleUDatLV\ny8Rs4XB1+CDgJD5Cbeq+hMp/kmowZWGuKCgMKgxzmKEFNUWn/S2ChgfBihfC\nIQo34yatduuajKmFUpz8vKj9L4uykJGnkTmejfIJOJzHX+1LDrLvgM31IQQt\nvHnTxh/L5awOeqoDqEOKtUUZKvFP9ObIyP2dJpcv8dL1+pMolvJqofivo/+O\niRcVeuUlCb6pH2AczXpA6rcHFDinz1DYrKRACEVsAY/k+0mop8Gc6YY/IoI+\nQvuySGU4262CZEa634TftOwxyRbSPA4Pg0yaaBNZ3zviJhlZxtsJ3E8b0uxq\nFa0ZwL3eWk7/d8WWswFjozziNA5DFQ53kLlLhFzynd4IrWUDUqt6S9s0bFYX\no9Adb70uMvcrSMMb6Z+InGcRNOBgoJsBdik2x5TyzNE0RTTRbIIEE9BowR8t\nc269YcnPfaycMG0MQr1gXAI6s+8h8AjnNyfPZ6jOdBXFIo1oN4TzY6V9dyHU\nTWwEa0vELCuHuXLOsgAUYwperRoP9Stc1SVvvocyLi05UgfvcGsP3qV1QOcX\n60Y8PUKiWegkxXMWgA9jxVx+sxze/RC3mOf6GIyJP+AwuPHxAJaOsB7JNJrT\nhCyA\r\n=fH/i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfqF33i5WhRZnzzMBDkJFR68+eUNp+Tk9h8TN+2GO1TQIgS9SZ1Dt8Y0UGZcUyVeRqbKBGLQ2PWTCJ6kMV3SizRBc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608057783-ccce23fa.0_1608057913962_0.006186861665983701"},"_hasShrinkwrap":false},"2.33.1-next-1608061455-ddb1f2d8.0":{"name":"@xdn/core","version":"2.33.1-next-1608061455-ddb1f2d8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.1-next-1608061455-ddb1f2d8.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-auA9DapAldvczBl29YQ5uKtoArApj7XgoDQoHmI68O/qfESZDmMssmqJXpfBzyU+vX/1k8MVjgMR7jMOs02oqg==","shasum":"17559c9760c97646a71f72552c8e42ffdf35e05c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.1-next-1608061455-ddb1f2d8.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2RJ4CRA9TVsSAnZWagAAxhYP/AzvRqO44zOaPLY7SK/u\nkLT8SPKnWVCV2aa4IPms+3zEasAmaqhyO+Coxyv2+fZEEwVqgKszdyHZGk2L\nQ4WyUNerORAhMWHQntlOJFqmlIsrwk+Sn/dT9gWYOpvBhLWSbevZjYQiWIxR\nd/ONCDyyamW7AX8xo+YnYkdIYPyHetQS6Kx0WVYKACq8QpkbjVcf49cIMx1F\n00Etx0DfQuUxl381Fb26aveYefmGk/XqHi/H/RtQ9WP0Akv+QmjABDYGOior\nLOgnH0QEd5+PBYdqZFuKw/Ndz+AcL+JO2mNozGF3daY3brYDi9kO020JUIjC\n02xKsmAqzLNy6VQLdb6+yrfiGDUuWvsBbmZiE4J9XE5QAt8Bxq08TWK0i8q6\n//mDNEFsgX4DEQQb1OBb8k1OH7hPZMcxLR7DrJ9AKXCJP0NNCEe5LUrZ3E1q\nekWpazrgAKNY9E5y7EyZO3R/btOFx60pr33qOGBy1Sd+tLcgqvNXsvT8w6U9\n0Jm1vSYHPiALeOGHcbUDTHiEL7pEgtxfboa7F0EqBDLRCqPUfbhEJ/05jMUz\n/heBo+gbXJTlOh1Skfl2O7ga6pZCTuTwe02D2jVy2wlME1pqHRZe4Y/ZliS9\naDRR0eOWGv2+wSJvzcC1IQyZXwbuZ9HDLkVlJaX4kBQRcP4gt6+DeQ+/k5Xy\nTB8S\r\n=m3xO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFcst2nPgDzR0zrn1r/og9tZOD9aGrxe2ZInkDKKpyIYAiAtzLdNTPFz3kI9pFCKlZmPOe97lYb4i1psLq//sVpNQg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.1-next-1608061455-ddb1f2d8.0_1608061559849_0.08322482393689867"},"_hasShrinkwrap":false},"2.33.1-next-1608112092-f8b6fea7.0":{"name":"@xdn/core","version":"2.33.1-next-1608112092-f8b6fea7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.1-next-1608112092-f8b6fea7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tu+qgDBdWX0ChVidFN5hDP0XAcmZhFYaMt3c26DVDPudB5s38QL5pTGw9rFvsmsFXLNtM2WMn3G11swuNmG0Zg==","shasum":"9b0a9c238794fcf0295a592dd301af2d89186ea9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.1-next-1608112092-f8b6fea7.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2dhLCRA9TVsSAnZWagAAtFMP/3LK79OBqOQSR0N7pfEr\nNg5QYs/UZkYP/XmazfEmDXo6O6V1DOcPoX2rt05kn5RSWpZY/nvq2ijQ1Rdq\nRJm0ZNEbefJl2C0YR9N/2lH9H3SUgGzXXvHTi+HkEzOs4tfBzO37rvAO7VaB\nFBmDENTA3kU0aF5To1eNao/LcrujiRzFpznp0Uxd0NiU/9uJwmg4YhYfowzY\nwPCNcALpjAqcV4eQhL8QaVzroYekNGytpe6l/dkDqggZXyi9uAH0EsdXMN/Q\nr21FUObGr4Ab0+ouMN09tu6akCCtN9yNo8RF5Zgc9LD9Juop62s7v/0Ivsm+\n2SXPpH4EiUg3DFKTD1MAGRAHmLsvnp0lAt4ty0RnWTnwdNhQjQPkvjCVma0Y\nZpD7+ttlg2aHbC5NqGR0P+Y8+WQ0aLU4zf14P27AT8lTj0y64BBsF5qE3Pdb\n4nADIk/x6NqIiDaVIRWN/7RQ5A3H6senEONVz57JqYyhFIoe6N898Iw8u0jM\nTvN7LVondZmAEiidNmFIA7Fk6+SmzsNARdCMepSgcD83WavFndTi2f/p1Wuk\nwZ+zNYsGJ9eLjDHHAoueaV9QxWxZr5+Gc28qyVKIC+nLHJi2VsgNK6Yyewrz\npmMY3UQv2kpOJ0ahh2FsgdxCq2i7U3/PdrraQwz0e54/r5Y0VBGp+IllGsgO\n7/yo\r\n=JrWd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxksmt3EugiH44DZ2P8Pmq2FMYszMteU+lg+lXUTZgEgIhANY8Kferu3VO+ncUT6K+MAmOsUXeUxfZufXbKlR3vtjn"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.1-next-1608112092-f8b6fea7.0_1608112202714_0.747254230644131"},"_hasShrinkwrap":false},"2.33.1-next-1608112638-345034cc.0":{"name":"@xdn/core","version":"2.33.1-next-1608112638-345034cc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.1-next-1608112638-345034cc.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TQg1PPpjZVxr09FW2kNNGn39hub0u4551F+Eu6jPcSQRZi1tjVfuX6oZ9PvNdmLp230pRd3Eed/jasGK3AJ9eA==","shasum":"b77227cac0d19f27989d6189e32f6bdee63f88d8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.1-next-1608112638-345034cc.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2dqHCRA9TVsSAnZWagAASgUP/272/zfUwwiR6C+P5YwB\nxnE0z/LJrm7JhXcWYwT6Q6YTcrVHetaUtEjEqivteNEuD18gPLADFE5kmbtg\nJKUzAuZEQb/KUoNShdRbBeUieZZRHSLnDcnLb7F5lVXRh5avbGg91+T9L/gD\nloGUxsLZKLS6sPQYW4raLoE7/6Kcszpfy0SKu8F8ALese8QZesl+2vyHWIMu\nPjer0thguKO0tTW6ykZtUHF1CmH0ADMI78p4G3gNFyUoDpRlOUQs0wg+tZiH\n7crXdMBttuxD/O8Y3cHT4QWHVc90oo1wf0ZIG17PQIz5zzWNh5v6LUu8h3Kx\n+5v7cswK0qB7v+XA2AAMBcuABZ3WopawCYbc5bKksP/F07AmLybONHGw6Pjq\n9q4BFfD5rNrJPgMCfPlNgz8Rq3gnaQIx03HNeBBEcJFUzdgn2em7dfE8quBT\nLiDnKUXXk1KHl51EBkG5X6+nZEo99C4q4eljd93Xs7ZnnLdQA/0L+r7VYxbs\nf9YXNEHW2J/FR2JK3jH0CKm+RABpup4+mRCNMB+a+DLhaHGwgL7q8EQJxNRV\nFb4cWRw+ixhldFyhCHMLDkucdmA4PV6Y4I0MZ6frHXqxFv5ASLZ1d4hQwufb\nJSlAblnC5jLnGwKjZdFgyJdis+uCWljY6917bIAWLN9TBuCazMuCONSqocP9\no21z\r\n=oqUA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVojsYf05Nmz6LUCLX7l6VqUgu8UJL47Edun8WdUi/FQIhAO0+Y2pOYgyyH6QWe4AiMF0edi8h/z2Qb9jDlLEEUIzB"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.1-next-1608112638-345034cc.0_1608112774417_0.3159459046572952"},"_hasShrinkwrap":false},"2.33.1-next-1608115772-3c88132b.0":{"name":"@xdn/core","version":"2.33.1-next-1608115772-3c88132b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.1-next-1608115772-3c88132b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-J5tzh5EkkeDAaPGhRe4JyuMQLL6BJjrTzAv2jCabvAKVw8vADEHWPMtPcrFvEJP/BZNKFMDO0at21OcY6MLSwA==","shasum":"0e10cf2f20e482f97ddf6f50d1d44eda6eeb7bb4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.1-next-1608115772-3c88132b.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2eanCRA9TVsSAnZWagAAiOAP+wdvhyTGOAN/uKLdHNuc\nSJ1cbBA9dJOVoCseTUQ2Y3RK6n4aNHb5affZIMpWTzBB1KPkxm9rWHx0vhxw\n1+rw01ZzLJuT6yqxn2qiGurWZmMYSUzz/UQzzrCAnQRs4zR8T0jvzStuZGWb\ngmlSBPJjxVGg1unZq2dPsxYuoZ6rseCQH7+uz4sSs9dqYArQtwrocdCU7j1o\naqTJPA31ZGGNrCpRfVgOezNxvn5N0M3MUBpBPlQJR8Xv0SNu3CZwZYyvUsjM\nPk/EG9Hnnq+g+Z8vPnZVnBtXDBACFXDN1ibHe2jwTnMtiC/4xVw5m4FF62tp\nBdgMTobIIqI/8StQbS60yGPEDS4ffgC+9IbTp9dP92iH3tDS3qCt5NnFmwkN\nd9r02J9L4iwBAkqlKEg3MSF8QbG9VjLDMktNjm1caTeG8Vx5oAkH7NyzgOWc\nbWpEsVhe3Bc2PiqjL5B0W8LdUA703CnF3ej2i0/cG+LtKxj0ySQ4uGVzWQJn\ni+Q37N0GhioK/TTuIAZ1UxtO4RgQTqRSdxfcMQWhBFynNn1hkDhP6gYn5G9h\nSHjQlziKmfyPv6TmrOXFn+0fGLyMNkdVjql4nBtT8agyW4RbZc5vPfw37tu1\nCCkOk3LCPvENUbBZaLmjXxn3tR5VfsphxugLeEBFuLQANnVul6BR6ja9QDg6\nnaDE\r\n=eyZy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEN6BZk3+9Nm4ziK7LY2cU39LBFut6irXG4rkyCKX5PgIhAPfSzlV8TAzU5759619n40rLElruLF8xxZPOR8zrFmiI"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.1-next-1608115772-3c88132b.0_1608115878732_0.7458592353055127"},"_hasShrinkwrap":false},"2.33.0":{"name":"@xdn/core","version":"2.33.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-k4rICHcb/puksAqzGsauqOI588Hspo2RvoPyoh1rhHVdRRBqLOS40IrJQV81duvJEJJBLvMaqAnytz6S+I6YbQ==","shasum":"339fa4472484c6ac17aefea4096a81b41e3b7c91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.0.tgz","fileCount":169,"unpackedSize":655863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2fYiCRA9TVsSAnZWagAA4+8P/1ZRgehscARDr9X8ad58\n7RK8OfR/pZoirEgKDXJARmC5oDjX0G1uPL1glMWKVsYQ2RG3tQ22L/926F9F\n0Jlszmsy9MhkMSm47Z104SiGv6LnQ6822+Fqak7wewg5Cg6JQXVt1391WpP1\nf6IGD86HXXgHUXONecg5iNBjj5Y09/xgOO3o9Ww02jiQ+YRCmRt74Rg/c7p/\nF6J53MxhzFk6Ab5JC3xfIIGXBbRVBYBwRA5I+z0KLHiiHwArImulJS+gURkz\nX4jDfT9abwb3ua67SMy/geUvaq6RfW/jBK68J+mV5xW/ihHS5Ihivk+BhP1r\nFdjlGGhJx7gD9qUPaMGSIfzabMPyVl+DMtG7X1XvOJb7zIs4WgOumFZa6Eag\nbegIXq2AZfTzk5+2FNj10R52XgsGTEviAKXmKAy9bRf67whSeytTkNWMwo5Z\n2CgPJ2t1vvsqYibPKy8FDPilvCFbHV/TVKrWMVMkggD+2AtPv3tlbhKJNYQw\nTC8zIhLu20gPytPy5EIIoL5mhRttcQFyEM21xCpa20IwNErpZdhTsggFQVkR\n0DKowuNoqsUthsMh9x0pTcczZyl1Oq3O9UPRso6RegUH5LK1K+XBaC68trZI\nJkOzbs7y70TM4fhXw0IpXsLzzVfAHmfsIOElkCco1XFxyi8UjLqvuzmOBU23\nLtWZ\r\n=rR0t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHnXW33hQkMGQ+VE33LCnA7HOOVFVFv97Cz71Ke3SSo6AiEA+FT5g487TkX4sG0ffXjiCoDrfO2PJBbeM9snUguGSK0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.0_1608119841919_0.7456536618641116"},"_hasShrinkwrap":false},"2.33.1-next-1608120558-3c88132b.0":{"name":"@xdn/core","version":"2.33.1-next-1608120558-3c88132b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.1-next-1608120558-3c88132b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-jzDYoNMu2rrMDIVaXtB6UAbKcQVkWC/SrQMaCPnUY7v4UuiNz0E54FJvHJeOycuyzvngcFAwXkYB+aXf5PZWGw==","shasum":"ca16330424a1824b5de69544f32a358ead508738","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.1-next-1608120558-3c88132b.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2fl0CRA9TVsSAnZWagAAd28P/0j6Je+cAypJp1ARD4D6\nifPm8wAM9ZAdbiWkiJDhw5x2OC5yvd5au2Hk8DBAxrH9PVg//cHimI2Xbnpm\nNnKYCxva5bl+4OARTbD4molWwhP1DIYwLg23spyqR5nUDA5kf/LaGmqmONtZ\n63MyFSQ+0Xy1pY8BUv5laiYC+bk71w2UjqhFX7u9+SkSvK8x4GITJFU3Pexk\nPB/GHyYsO/t8O2GNdXA2Suhf9rWWhBeXISky/2OzoIMtFLdbTq1Kpgg6vcff\nY3XxndxmzbQdF3IPmjW76UGUgYFlWc3Xo/DMnbqudbn7zG+jgcuQcuCcExAA\n5sWYjddaC8PruZK2LiQr4y1gT/PCzBRwn7AgwUbqr0YtrW2qFDHOcFzH1iWk\nlWmvRtPf1veJgU7jJjBPcIE5pjuhHiYjpAZM8W2Yd4uzZZyLaLNbUfv1Kze4\nTWpGUp9j3F2Ese09nmOD+Pbbv+B7AYCUVh7ydrSiyEseLvUcS4yWVyiZzFmN\no6qzXYyZFEnH64pk0wHrRPctb2nuN8RF8H/X8ViwnATzOxAkc8Y56BkNoBdq\nvzezPWGSAZiScw08i6i8cdv+5sMmxgHA5NVKLepzU+itoks5Q2cgRCgz1f9L\nUNICzxe43dNBqOkGqAjrxDNCsb+PGGNHPGtjwfVw+icRLltmlrERViF+Qg01\nNmeW\r\n=bkBF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCizkE1mdWjU+baLJVxDrhsTCYDz1GSaLsTBK9SdjdqvAIgPUW5izxyBpRwQHE8Ymp+lmu2dtyhwA1ik9kMaJFQOXY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.1-next-1608120558-3c88132b.0_1608120691945_0.50413444089497"},"_hasShrinkwrap":false},"2.33.1-next-1608121221-6d09bfe4.0":{"name":"@xdn/core","version":"2.33.1-next-1608121221-6d09bfe4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.1-next-1608121221-6d09bfe4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xCBnTcpgoJ3yBaW1sJQmj0curz4HX57kImXRiMRKovBC4jOWWEHSFZPQ535AWUAuEruMhthNCw+css02z7K1fg==","shasum":"ad76869e1f2b48bcd4287194a6d7fd32569249df","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.1-next-1608121221-6d09bfe4.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2fvwCRA9TVsSAnZWagAA5xwP/i94reQu1PxI5fGlGZ30\ne6WohVUMLI5a2vy6bJyoCOYLc8SztYsWlIwE1x5gul5r9dAr6prQGSqA0ZW2\n4VABrCZ5+CBA/C6M2I2pPJb4kNE2XV2CSJs0J5UUihJY9z5OPUoGlVH0SBQN\nPIrO0fGEWCD6iFWbfNKlSfIhym5/dpEbVfJVd68V4PgCAH4iXULPB2Y6LWU7\nks8GGO44S7YX4NHUZlhaR4mWIL5ujVAQCinzXccAvqC/cGiuGK/Pt06yglir\nDfnq084Ep1CRTVGJP8KcrY6uLYRFEDO4JxxDSv0S5Rs0nzIgRjRTel1As7lj\nY+5Y6HH4On9a0dSxao7Qk9VmNXFp8yLZkWFg8TOavXmWKT4gPPhIDKJJcAvS\nfAjASjdqhcwOuP2qJx/KER4fp7WxTWfN5EbpKcQAgx/hTiTsrWrtY4hsX9DW\nsqIDnjHAYHaJ/RfkutIPGb0WHRSYpayEWkQfdeqRvTAR5YYelRC1GIJvlOmA\nsLmwR8DifGtkKpe13qwE4FnHHoF7bCzjHjS0YaTpVmaLBXsevxKbjl2ihj37\nqGp4nf72XVcquj4cNeVyMpSvdNvbv16KrLe96zCQuKLsFJ7NYI52KuPm9tUw\ndPJ10qvM23Z5aoUGepFqKjGVoWlRIw8qiZcZpxEAhnVYKBD9yHoUJvKwIt/Z\nhP8e\r\n=EcLD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdotkpZtOviPPWnKX67V4oqOisYp15WS9P2ST+YUp2UAIgVsGGgRh6cseTTCPm3vXTFXxZ3+lXePmPNJ57BOVCDqM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.1-next-1608121221-6d09bfe4.0_1608121328387_0.46955888597554596"},"_hasShrinkwrap":false},"2.33.1-next-1608125131-59df05ff.0":{"name":"@xdn/core","version":"2.33.1-next-1608125131-59df05ff.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.1-next-1608125131-59df05ff.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LeJ6coKvCRXKIXR/PcYjpFGFmYKWN1zpfpqy0ja5BLcpF/fqst97zCkEXRtN3N1aju0ropifQtGHSjR5QmaMyw==","shasum":"6a20ac66ca127d3e872365707d77eccb25ed15ea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.1-next-1608125131-59df05ff.0.tgz","fileCount":169,"unpackedSize":655917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2gtICRA9TVsSAnZWagAAhmEP/jBDgcvktePWoNmqhuC8\nnbY0/4hkMAq/msNV2FBRTagYJutk9Q3DKQnnqXrVGzRH7akEfH/7BGOLBjXB\n2zKGZwXlH3gueShLiLCoW7fYUW2FHCjagMhe7VR0GDFC9ok5VjNlvHKuTXs/\nj8mXethcKLt7Tm7aftB0V8dEoI8jBJ6+iwpXdq1ctN83UrhKtievObIdgaDD\nIPhz2QmuV+wqa/YmQYmZhOcAvplxjTRnfHB/KnnJ2KiM8yk/PjcW2ClogXMb\nLZNamxf1LJAXrOYA9/Fpxaawgu1rn+mOACC42855YqOqLEo1qayUlqhPsbT7\nk2DAWzxCKWWaUsoew2OGuovEPvNQbYQh5Z514wFspWvVlUFPwxa7nMbzeSX1\nnyiPafcZ6xIjXLC8biLcPI8R0mfTMKK49n7ELqMbm/BoFyb5vC59l3At/zR/\nTkAlkyc2xLWdVFw7AvQTSIZoN0jmhM8r1JzTOkYg2iSCeEErcTgdzuakrp59\npwKkAbgfjYInXxE2Xz697Mz05EC+ixNIE0nwLoApJMZ9eKsDj7LrkvO7XOiX\nMLdO2s1Eo/pF05QrKsGdIFPJahmi4vG5VKPIUfktUNXy9gXMpB0uyAfAJHbA\n+goYIz2ubiJ6f/VrCEjkUM6fXxrJJTu0mRARoLQB8333GJeRumdSopblXwZk\nYLmL\r\n=JSvm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPoAKm6TTp6Bp8hj8w2CJkITyxOsTIHi/b4BGbQAd7uwIgM9KpO3Va8nAFt8FokK3UKGtr3q/2atn+GGSqVKy32L4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.1-next-1608125131-59df05ff.0_1608125256287_0.1897004473021815"},"_hasShrinkwrap":false},"2.33.1-next-1608126216-ea30c7c2.0":{"name":"@xdn/core","version":"2.33.1-next-1608126216-ea30c7c2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.1-next-1608126216-ea30c7c2.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-84Q107DfSXtR0jpT+o4f3+BJ3dzK2oGpF0nt5e2xFaSCPaM4oAKREeYREzBI4hQcbu6A4e36wh3Z7xTicZsFHA==","shasum":"4c7096d633af78ed00de833874817d9510fb0d82","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.1-next-1608126216-ea30c7c2.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2g91CRA9TVsSAnZWagAAAiUP/3EbcHhFsDEeioJXZtfU\nmUrR4FVJ2fqt9gze3UXPoaU3QHsZOOd5CVICzqozgJaH+0XTD7yuPYFUas6v\n+WPyfatpeSRv1FUkFXNRjoLHoxcTJjJEWthDZLeJCNUa8DsxYUZp4IDh8Fly\naRwh4rlt5FZM3P1RtEajV1RkAQgQokSqJRycqXul810biYxNNtLu5B8AFFFs\nRvp6M5noj9YzEkpoyOVcCUlXl1oLn2vaTnHkHnbt2ANzEeWEPko8T/3Meiux\nnePAbacbgp7n7W6F9SQNGtgNDPdK2h6p2E9CVl2n2PfhgyYE5qVKI950Ijzn\n2A/EqPb19n3rroojW1TWfKNTQlzdcDjQp+bwUy0phHlN3c370Qg4WkHE/qM4\nuU/hG8FEQcTaJ9U42/fD5paxZRb2mGG6GwA1aqdX9rUU3npXsqKvDT59WZXT\nX26eoXBUD6/xxgezaFhpnLU0wB4yTOpL3LT2LHllz3FS6Z4pe7WQsveqerCD\nl7C6JMSRrxTntJZI6zoPngY/8PNy9+YOJWO+jAcRpEeO/PB7CCadyAQ3LD7z\n9i+n76PpyEPtZhfiWWXLGxyLMjRsFkFd54mI6m4g4KfNreuQWOBkBfvED79X\n12yPQn2liFBztcvG3rFTrc9PnjOwAI0OxRObu7RJimiOHUkP+8D57h/7tHL2\nP2RB\r\n=WpvF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlpv82LTeuY677btCfjNxf+ilQmzHvAdoTZsAZ1OE9oAIgKprWzr9mTWsJWYYfLuCCAt04vRvFte4OaY9YyUPHHiQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.1-next-1608126216-ea30c7c2.0_1608126324527_0.3756786573442872"},"_hasShrinkwrap":false},"2.33.1-next-1608126527-1c76dccb.0":{"name":"@xdn/core","version":"2.33.1-next-1608126527-1c76dccb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.1-next-1608126527-1c76dccb.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kDsR3vM+yJx8Wti/FLAQK3coR0atIA0yrYJaN45ZK3C0QCB0eotlABBa8hgoHAx/sKWKoRfD5649Mp+TutCcvQ==","shasum":"431325bcfc8aa00751011580f2058fad02dc79a0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.1-next-1608126527-1c76dccb.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2hCoCRA9TVsSAnZWagAAeDsP/0k4Z9Hk7XCIezTtRlFb\nL/ir2zjt1uILFjDHAlQpipw9dQWdFgAbk+Qi5fMsWoYMT6CN/TZeft5YONVd\nd4AiMscfxILOBHwfiI/PegIKPrOsrDiCq0QqCL4uH1sMLo8tBpcVdGgzkJjX\nC+dz4yCT5akFaZhlWtTbffvSk/IZ897L2DLwGhii+v7JYMExg03+JIc9OPN5\nWFPV6HleebZDlqQI7cGjVzZU/B7oBviPx/SzR3W4ewWuUcF9rNFK9jb91J/p\nFGfqP6x3M4K42PbkFK2vrKxJ3kLhv4dPIVbyneYh1SNjIqqN1GkYkyM4klOD\no5zp9nExASUscwf8GQnJY/DFmCCbi5GTeTEVLnI8ntvoiYx54At5ZRDhCHxt\nq4iOBgtA95bxMZ0ZES/ru8GrGbzi0npbSf3vT9KWZ0J3lm2PJgWVbEETtDRK\nesarF6kZ4641gjLxVdxhd/IT2at49Jxlpw+6Mv+kuHi28DhIpHXjbspoWzUb\nOlDhVLrMtznxLM794QliRzYe6r7jXQyqGfIWVpaZ0qsd3BifNv3rqb34kB0E\niTk1UegBFhd6XDZJPW8k1BizztUW8EVu2UF4wtU+ut5PcVfKvdXJUcG4wVAH\n8vDAuy+xnLkU8yO2x+V1pTsAeEHddB/3j8K1FgT0cVejwxNGRBFMGc8M03z4\nVwMu\r\n=7di/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHm+LwKGYM1g5/ueanuGNH5VYjYPacO3BXEvvlFLfkNQIgEfA1y3dbSG8Ln1GxnFqz7f3TQSQOeRP4winmhFGGyCQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.1-next-1608126527-1c76dccb.0_1608126632130_0.3368142587392582"},"_hasShrinkwrap":false},"2.33.2-next-1608128839-8f6fd916.0":{"name":"@xdn/core","version":"2.33.2-next-1608128839-8f6fd916.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2-next-1608128839-8f6fd916.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-trAUoFL4O+TLcbTHW7epmQpMJyzPpa8yHjSBzBYt5uLoL3JspvLqH6JzWGijofK+dmPMS9yOSQY938eF/viUTA==","shasum":"4e86976d1915fbe3e79c4938b38b2c32dfa3c6e3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2-next-1608128839-8f6fd916.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2hm1CRA9TVsSAnZWagAAn24P/iIDTuB6BM4unvZG09Pl\n4aknaxeFAH0MLry44TCvBSTbc8Vj9aeTvZNq4KqEJdLy/ufD69gkCi4nrepj\nEvq53RDM6j75vc5V+SUGZm7h/XGa+hVH5Y0hJpCuj0JSy/g8CpE7Q+VqAdu6\nh3q9YRI3iADEt+4SIv05wDnJ9k+P2Xnmvl0Cfi0AOaLnTUKZe/TMUhRDvR3D\nAr20BeQYsw6X1MmY7ISwhR1ovvnZn4702OM5393Zk59J0RyrXhGNBAnovzhD\nLOmJ1SaIPdLpfiySxhXRnviOZ1jqzSF3mGQtj5mniW1KNJAmteyvWsCd4+fo\nhjCL22XSUDKuqZhpb5a1iuMBI5rc7I3/IYptzjuLI4wxS3TP7tGwh5ysU5wq\nd2uG1YBg6fG5ZDQNJtmslWRLolKozP60ZlYolYv6Dw2k5Ewpw9DQQKj4zg2b\n0jXR+eRZQfE5rORK47eaiSKe/Lfr61iirN1p7Tq86aOBpyHSN4C/1xB7K7cG\nQwo9MxcUNurUjfTbI73sKAF/S7XvzuLBN5S521SI2e+4bvFnRW7q11JSUFoV\nLIgsYojnDZkZxu/EG2K7FL6rOpJixrYhF5VQRVB3OWYYK/HD1jzA4a1C8IKL\nGrs4HYigtJi6RZf53Y5vYFWjYjA7yy7yelVc1lN1Kj4xhYa83raPj0iJHhUk\nw1KT\r\n=bbKe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEA+BtrAqkBaCcbOrlSHF6ZnsOXxgWrdmhdJQwp8LroCAiAo7UJrU5VhU+etDdMwgr2a8FV9Zwv0W1OYNTkCrtjsvQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2-next-1608128839-8f6fd916.0_1608128949160_0.8276689383453155"},"_hasShrinkwrap":false},"2.33.2-next-1608130256-8f6fd916.0":{"name":"@xdn/core","version":"2.33.2-next-1608130256-8f6fd916.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2-next-1608130256-8f6fd916.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0jiAtl/INBzG/F9S4FjFsegTSmDMCJBjIw8gBRQmlkDVfrMpyGNpWD4HYlUWaM2VYyHHOm3jGJdR8ycp/MIhAg==","shasum":"3d579acb11aedbcccbaf165a9b2f1be4066b212d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2-next-1608130256-8f6fd916.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2h9YCRA9TVsSAnZWagAAX2QP/14HoBeMsPJyl075/dQq\nJFm4fnnNPSzZPFSfsjoJwHbBX1clU1EN/oJlXFP2IqlkIyyhMpHeZL9IS8Kp\nvqGux51wQ91ioUvCRcGUAG69Aj78hErT++h8fYfV1NZKyC2fkXCrJeU3aPX1\nJQYj2CYPuqQqDqne3/TaQFL+Z0S2NCrl5Ni5T4X68gFeNIY+Qy2NtGLA6gQk\nQzLiykZzEfbO9ZkSimwauY2eTa0ABvwfkgCPN5jB8Sm9Tm9VfoOigFJwgCap\nY+1v6pkIc5gkSO2UCeomJ5WfsTXq94RvUYHiBL6kZSDslc5yECAK8iSJBMCV\ny+C630el3UzRkmiqtdcnxkw+pMtYDQyKWXrIK4h9W+6UEa3ZvPnUBE83WdAC\n97Ny9OXRjh6tFkhKPlftk4x8KZAJrJOxqmjzmySntvMMdWSESv+C9Eqyx6EG\n0sVRZENFIsvxuoottXuBOR9YhxUJ32MWsD2K4052SAOeoY8Zw1WEu/zZXFHy\nMKfjqeEjAzf2ec5OSBTNJfhlteUd8jcU35nFvewewAVWJbKbCaZqjRFWQFch\nihr3+BDTV0kmUgRgOjnizC+zL9YOteaVRInI2jRJfcYNKnADsyx5XquAUWGU\nppSKrhDp7kHjcuu0iWdzKoItHdOspQmQYZx7RZzXcrFtwfNM7TZ1Trh3N8VP\n/WMh\r\n=ZjP3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1RI81TLpMDmVLcy5Uzy/Aw61qm6EpnBCzuKsBMRMySwIhAIHn5MedwkT0NUhQeNvbuSKgy002cMwVJMpaSODncGot"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2-next-1608130256-8f6fd916.0_1608130391679_0.3212294047935893"},"_hasShrinkwrap":false},"2.33.1":{"name":"@xdn/core","version":"2.33.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.1","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lZSdU5+TVHfOPw1Ocorx0bnB61o+6SDihd/ckf9gbzZhEA3qgB5y3Z6Z9cNwEEkHDBfum92uDZ9C0+EciOZPtw==","shasum":"d99c759c431b6e0dbf6e905c87a0f2cab9d25376","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.1.tgz","fileCount":169,"unpackedSize":667742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2iYWCRA9TVsSAnZWagAAToYQAJwBXxA2KAUSHwGZzyyI\nUEg10D0YiCdQdAeuPsHf26MkbxdDqgakIOz3RxfTGqLnYSIqHEyF37Pd8Iaj\nHpd+J0GIHkIk47ygjx1hIu4xQb7YJT4kak7zvYoYEt6pc6+M0FyOKQjCI5BX\noJEXf3Ad2EMf7Rbr6j07sO2BNqROA/HnTqK8FWqoWlI9UCoIJaPqNXC11ijt\nI8B6ylfXYeszJ6erZpz7yagOkhfbW+nPfeqSo4NQxJ0AqSolkSiVbi9nGrWK\nyLhlQyLWITRhT5Bh9FRbHu10Dk/MhbY/ecKNcHlX8VJWuthfPsYJ3Sw5Mrq9\nW+hatBzTxzUa4Pjry71NnWGhC0gJ9zUgplFEpS5buNNrDNhPcZ6zOZY74Mji\nUD19FBN7LyqX0IzKS4x1bFK4oGTvkV1vuG8Q6Wb2h4zaXWXXJ3KlhkSFwwWz\nVtZ4VtjjVvp58ZBkNShaCtV/TBcYKtCcIGT0q+QHRnCo0mZBoAQ17xsH4kYw\ndcheM7qP+a1gKOJ7W2D/UF89WqIRL4fhaT/jNiBl4HWvtFIaZUxQjKBzIt4O\nB0YtVmvpGaw2kvekwcimmn+Qz8sGxybbAY0KezwlcDscL72gwhU8uZlnQCSk\nd4jdNTvFtAFv/hJTdJY/ypybnTQ4r9L8xhahuoTZgvvMAnWCtk+Tfo7/v6M7\nHYGk\r\n=DCgZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIALvLuPoj/JUpl2UvVlohaVZz1rMDuMFNoUS1juBnBJVAiEAuq7fT6GEqtzpnGdinkvLOW5sL1jfCl2+J5Cr7tHBSfU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.1_1608132117977_0.21744610649001883"},"_hasShrinkwrap":false},"2.33.2-next-1608135242-f0696638.0":{"name":"@xdn/core","version":"2.33.2-next-1608135242-f0696638.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2-next-1608135242-f0696638.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ITCQUdyhlz9Y9lXofEU49eXA/bMfief6guKfP0PROqjqeNqT+8ioDWmpbxdzUTvEa7lz2KRaS/m7J+lAb2/LZQ==","shasum":"d6fa8ad60b0adc1e60c9f02d27fd5f07f514faa2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2-next-1608135242-f0696638.0.tgz","fileCount":169,"unpackedSize":669361,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2jLTCRA9TVsSAnZWagAACJMP/Rtn6AB1MPl36hooNq/c\nlejRyzE9Clp2cO0X43bXprPhzJiSgV0/yn36JOkhAIuqzP+O/lA+PBuN/wfK\nXwBanKTdfLa1MLo/0rQCnmH6iMoSPxm+9bzMDCC//quHI6xo6/HmS+Qds82U\non8za+ebRdfozHCkTT5tm9o3OtnlKfItuVgVauh1pXiQLrSVsSas3S3FytyA\nOk7sp3CyIp5nB7+Cf4sHIxzYbGFMjLrL6R/T2iLi7QdbyCYUzXk26fcqueZf\n3tKqWIPtUs5hmM5Ty5H26vGl18YqZsCyt/rE+VrzDj0YPq9W59vvJvVHmGfb\nYk+N/1DmDZKupvIIwnFGuCqPQrBdwskr2edBUqvxL7Kd77bezNTPIxSSMbQC\nSBjp1+qwAGMZBPuCPwyay7vftrMY8N8uIlBsldUy5vc9FKgb9JiCb+E3uOWx\nGQmhR9wFQLaRc1Kpi4i25sdMeBC7MWbKCDsuycFItcU3UMZpU2EE1LykLqJy\nnoayFOXrVmN3s4gWCqCACk7DW/cG94hrqVgq8h87sZC03c5aocY6JIBQ7ok5\n9re8UOHkVAt9gALoGHPmQUakU4rBwA9kiP0gNKoytqcQmgxLMAe5kvOa0EBF\nlBlvo4hFZFQ4YkNx+rlIqAGEsL+ULybNY3dRDS96hpcv857XDT/vIpJXQA1N\ntP6Z\r\n=wyDr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmo733S1RHFmfuQy53P9P4yxYgCxFN/uHhW/3P3vJxlQIgOvzyZVnH85z77UquHXLDEX10lBbGzTp7NL84BPEV8DU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2-next-1608135242-f0696638.0_1608135378600_0.17148172650221638"},"_hasShrinkwrap":false},"2.33.2-next-1608138916-d5e9477d.0":{"name":"@xdn/core","version":"2.33.2-next-1608138916-d5e9477d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2-next-1608138916-d5e9477d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RERQt6ocyVgw4Iwrbp+vfvFmHDv/8VU9krRejVkB+iuOgkGLJgE47rQJCDMgQGhmAq5vAR9ew1Wl90/KaVGGlQ==","shasum":"2704d30dd8ae9c6373d703d7f7ee52e9ccdf760d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2-next-1608138916-d5e9477d.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2kElCRA9TVsSAnZWagAA5zkP/jPXXU9zt6wn/Eu15roh\nYAY1hgM3Nl0a1gtwvaqzt7eMEv7xPMNbbDtt0NDCxnnbDkeAAN4qbSorb0C/\nn/ikaQNYp04Y84bUUdeXaoxjTqlvYK7N/FtTqporTwVobx1tl5XbJz6Ki2xz\njY9iggBpGs5x9uwQg/MneJGg++Z7jlqlgiUtowbJWui0fALBQoWDi7hPTxv0\n8AnBeFU/raKivZtDN3HIKZdl5JU+HwDRr+/mAmWHXM/tWLWOdCkGeOnJwnzK\n3mhtt6FrkF3hJOkANRgxilgIIyfRpfqqJRUQT994p3bL2H7sGk057RnqxiUc\nvpMfQeNIs3PUL4EAJmqizdOwOMGmkzD/ErmMgcftezd9gx/BrsbAEz+3gv1d\njvcLVYhEK2WF9RaXF2UYK2YJy5V6UqQfdiU/hs9KaDyKILw0HPaXDuumHCt2\nDrQoedT+ZTvQnPn8qgcfIWQ4c3tqJIzp+dzglyDmGmt/0duv1tIYioYgCMZY\nSg3CZeyE5P0cmSErV0Cv8xGeNk/1o9kaNZTmbjAbluwAMKFOGFc988/XbiuS\nwdsrXQr8fumhS7/Z0c7eBPhhrgKMuUIvL6PNAlfb/Y2Ye2pgG3x37iula7CX\nU/gcGSrkchMDTIJdwenionH/LM9oWvAObHAYIpIgpscGr3EJIkQhs7TEC03A\n0GeB\r\n=0PFD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtM0i4yCgAMlRcYpOshI6SwJz+cWC0saQSncDt33mwpgIhANN16thipoVmhzohg9bl0QxFrsnQEj+0F4FU26+X6yqZ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2-next-1608138916-d5e9477d.0_1608139044657_0.3405786436974687"},"_hasShrinkwrap":false},"2.33.2-next-1608140836-4c6a5a27.0":{"name":"@xdn/core","version":"2.33.2-next-1608140836-4c6a5a27.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2-next-1608140836-4c6a5a27.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bKAWi/YMe3KOyua5gN6wRTbPC9NMFGEKXRdGfzIcL0z/PWmrj50bGJKyMK1fc+OkK+kOF9PaFybW3ytuZa5PQA==","shasum":"ffe809711a18074c8397c54a848e54ca636f59dd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2-next-1608140836-4c6a5a27.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2kigCRA9TVsSAnZWagAAUTMP+wecOjqaCIPI7nA3A1Nw\nTdv9s0/H1xzRO7CUQu/8Ej4WQAvvl2yVLrr88Yliucq1p476ZokVCrURM2T2\nDJ6VpGSWDNHc6wkJEnhvRbvsLkbXERr70h21j4igKeNuH/zY8cnCWS7eKSaq\nV+cdhzhEPt4KrWXbHTpo8wrvyE+HSCt+afl+mfJX9TjydPIhQ906evaSoNSe\n5FVGEQo0go5d5DjmNBsxpuy1Y8/TmqL+H/RFS4x3rtGlkJ4A/nbQo5UkgCDx\nS93CcIdEJkFaRIlhwTwIvwWo1P8000kV9HFzSRdEaVKIPni18kAdeZCWG+1F\n47pjMEMZ3EMMlG2VoTJ6lTHRdYSzu7qpo6p5pMrEeD1jgz4ZdzJzofeLGRPw\nTzlpxDDCmDPeLTX6skhtfh6bBnNDecm2mS0UGN1IGLS2ARjFp9koFaUKoBQB\nNTkNklmt1pNTyHtWIDskCr7RjFgDniaPIjfooTCQAjbKuH7+ktkgg3I+cd1t\ncbWSas3SnXrWjNggpayU19NdNW+4OA0nagLmEVkvSnGXb5+FaTlIiniXcC/e\ngYm1RgYLN5J66yzjgxyzFhOLpzJ1Kvmfq6O6IF8AKWvyJAcWjFmVYn+hbCfk\nrqs4I/sPYVVBKdSTqyzB4as0FW2UNoo6ytX4J7fynNVkfusBBuGKtv27EcI9\n2S3t\r\n=ogii\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICeY7FBDjsZoVyHf9u8xPabhb8NHNxDJUCWpmZ/kAMhLAiEA6cXXQABrjasS19U8B+7h3AQi/NVwtKrbPiqsRRV251s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2-next-1608140836-4c6a5a27.0_1608140959461_0.357731954454253"},"_hasShrinkwrap":false},"2.33.2-next-1608175365-501ce721.0":{"name":"@xdn/core","version":"2.33.2-next-1608175365-501ce721.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2-next-1608175365-501ce721.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-BMd2tN5bArzTUJi64hJ0oukr5zCs3ud+x5ZQCsCr8Mm0NcxQxm/ZwTUv3lpdkbjJfCKvgO2e/qWGzSIm5hLu0w==","shasum":"8042cdfa78833b29c57a149331485ff89a7dd018","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2-next-1608175365-501ce721.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2s98CRA9TVsSAnZWagAAybQP/1GUxDE1jvF+ZW3OXDy2\nZQZZ62DmQWPP/6fqkJdB/d7ueucoG3c4p82NDN6i5RyHa0xDDn28g2UCgRns\nzlvxiz4t+QIaUaLxxkiAS4uEKWwDn1vxzlL5KDsWW8AUFlBgl3c4m5MIqDl2\n6J9uxnokL97WXeD8/9MdtNQ8MqPY+SlLOT8ZwhylDdSrqgEZ/iX7CICr1xt8\njyh4ENwDtlrV94glQI8ghHjY3Bdg9OwJy1eF7gI95r6AIFhkpfCKhzK2CiZW\ndLDLqJQVbV6c1LDcg34tmyDOculdAl1L1A3VjQ8qaCHUsxPnixd+ahYCfoPh\nlMHskVW9Sj3Q8EWvYRmzSTUGvUA01vONP4FJZrBQUOQxIW8h7WrSVUQp9jCW\nhQkiOtMHgINfeljqJ9dkq2w2DZXa6Z1/BjM3uGT/2hMo4G9zKC71UWgMZ6Us\ns73ICDorItukeGKfT6rKn10EHfkEoJV6jzZA+B2ynkLLwKMLFPaMN/+penL/\nZ8lWMhxmObPutUssxjsrMUh8tXQoweDzvraRBPUGecTkcC4qszK484G0UmJd\niGnpDO7CpJ+lHxgAvGSQ0g6tc3W4gPIKX+s4Zx2m1R9E1w8oBQBBpAcGpCQv\nVxWrJJjEEow0K89QzXyleYd3By7kGrdtkoACQ1TwBVziiEaNOeHBiUxTMgH1\nf0F0\r\n=9eJA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHS6rG0NbHwDCGZrR3aCdm2oM2PV2YH3fGVhUYv901ANAiEA50dRXPDSPDNGJ7cIVZVhZHHu3iqBSS4viUUdKws6Vvk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2-next-1608175365-501ce721.0_1608175484173_0.9817366859970869"},"_hasShrinkwrap":false},"2.33.2-next-1608176934-e9719e27.0":{"name":"@xdn/core","version":"2.33.2-next-1608176934-e9719e27.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2-next-1608176934-e9719e27.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-18oSi2tGtPdXzYhcbmwcVehBBEtd1Qe3rHCg7/n8L/yPIEHcHdptR+8aJmRGwsIauYhUpkIV9h3lKZFKK4iaoQ==","shasum":"cc6b988ed9e7b03e5906eeeff7434758c4b8a077","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2-next-1608176934-e9719e27.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2tWQCRA9TVsSAnZWagAAxR8P/2r6nOKAUt2tcUALxcqm\nuOWCu81fx1x2vtPJc2ywjpZX4nVr8PnNwuKo5dUag0nWi2iImbmP8tSCzJfl\n3PKruk5lzDenLt1fzIhC2BiH8O502aFToNVzqhxsodzhz4g9q9W0PEaw3JPk\nJ1BVZDhjOYR+r9IsRwhm/QbUaE9MevAn9R2oanCqX1QvrCZl+YrSynvLxFW4\ndELak0C/vCn/AOSvkKJSYug8F1etf1p4MWYiIyVMi01vU7L1usI84ajEKD7f\n4gIo2Xjleqg2BS3wRdW1uj2VEuLXcgPzz/cl8GB+wnW9AFVQa7VpXdGUfEa+\nTt3Mv4As+MKLYGRh9nyG1bBK87M0WNXryFEBnSEjFDQVgq6w96jNGZT22YZx\nrv+4QPgVH9ld/EPn3znX0YG7UDigG8X9WmQapK28i8Yu5fE5OTLXrqtg+CJD\nctgNVLdYlpclr+hIWQdcXm+XMXoNW2jMIij6Y2zQY9vQ+x4Qmgrwu009hUnf\nrWnnAX12hblAOfIUkvAgLiZW+Qb0gxOYL2VJN71T6WmTy1OoKQXaY07N+OhW\ntkMBCLXbCx/SRvy3GGAjzYjzGBwU1EpdiIYPSqJhzW0QVTS0k4TTRfhciiBK\ny3Ua1XcSUag5t0nAKPbd3wkBpn7g4Tbv6i0qlGL4CUhQKaGfQLWiW8ITFD0L\nDmlM\r\n=TLiP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHkF9/v/DVEsSE1cs8fx2valyQYe6uY9PpX7YHUk2xeAAiEApNHj2LskSQMX4m1jGKRGLC/jPHhZORUMyu4EHOm7LwY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2-next-1608176934-e9719e27.0_1608177039802_0.754990411227985"},"_hasShrinkwrap":false},"2.33.2-next-1608200469-e61d7e58.0":{"name":"@xdn/core","version":"2.33.2-next-1608200469-e61d7e58.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2-next-1608200469-e61d7e58.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ithsiwAWWm9Vbysn/J5VicPPi0fKBkXeOJJMjRXkr4EGwSuHvhmtrt3UULS2r7E/vDmPtv2SdtusyB4e9E7wig==","shasum":"070683c300e27151527e76c4fc0aa19ec84a8f35","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2-next-1608200469-e61d7e58.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2zGECRA9TVsSAnZWagAANqsQAIJUX3JzHsPCm1l5KX8l\nPARAa75lP3tXa/rlBte0jos1+h7+qyy5udjV9ild7Qrv/6+kxxnEcZDAgOoF\nofQxWLDn2mL0H8MBZ58EK8tlwyP3Y+qUm9d4g4q5zbzWA4ahYbIbyxlA/NwD\nY7q3PAXZgfDeYdj8iyvnfBhVcq5csVTmhxArMD3NBhBl8ko7XvKAgl0jdlUG\nfm/FDwiDdQR9Irpsd7w+faGRgD51Wznl9gWbf/5tCMdR3QX428Gf7gsUi9oO\nTGBWUPqXRyS2QrV4KnfzSiuFTfZbAQvWbmrp1Bj+nkp/5usvEKjJ2drS+SD/\n28+DjwdRYrqAVMw5dmfbB4NYt7X2ZZbqsaa9cxkCnb/H0LEVGoOoaRypRGtY\nqTH0Glls4NxxYqo4ecqmJobH4bzfOQEXYhXlAWuWVy+45EaRSuurw5WAhTXA\n/FielN45ZdGohYFavPcecG2pm5NHiiuS0L24946R89GfWplcAksg/8oM4om8\nLRCx99ro4KEjnzN3sudUCwS+U0gwRZusKLfnQyG92FbPjxg8KjzHDFbXZhGr\nz8Nre/5BVgxR2lQ+wSOSzNj6aDj0pP2zOlqccbccK5DAdCjoAU4TJXBOmgEw\n6XNxE1cLiTOD+UIXnKYnVhBxHD9rz6WsRQjwfmLybNXEiR2eFznYPZkFkPSN\nF/NJ\r\n=ebRH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID7c8+BBhfYAaQ3Nnn0AwatdaV+ChasPVZplDCe9P8gDAiEAqy9j4PHB8lUOQVpxWGk9+4NhDZYyguUZEw0vejd7itE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2-next-1608200469-e61d7e58.0_1608200579628_0.23544336334720106"},"_hasShrinkwrap":false},"2.33.2-next-1608201574-e61d7e58.0":{"name":"@xdn/core","version":"2.33.2-next-1608201574-e61d7e58.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2-next-1608201574-e61d7e58.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GtbRNp1mD3qWCPN0Dt6KKWMdZFEvAKLAP+1OeYSGP58NS3GNHXsf/5ZDqOEuxXDn249ZCgCp6M0uJKMZbxM+Fg==","shasum":"2cb8cbd4a15868a6aa7373dd1b8716bec167e648","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2-next-1608201574-e61d7e58.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2zXmCRA9TVsSAnZWagAAgGIP/ig9reAsXZHSALddD/w1\npr38Li9mYI5VaNAPrIlfO6z0QtXRmjL70BA6m3+4W09DYK+qs40XJ+4vL9pP\n9dmoyeRsjNt4tK1IThkWyNHZfcANX6ta92S6xRycXJA+dQmSwwg1UFIZLe4/\n0iCWfxfDD9ETQTQ7X0XfIM9f0am2BdZKskYDTFCV5omPfYsgfPkGQb1AsZpz\npidsfI5uFZqFAE40P55TJdFuk0y7pfKXUa8ckBKgEF3BoaHsbW+xK7SWYnGJ\n/lae1ElqXAti1bYfQcDixjumImGC4JBej/mD6xt6V+alyGEYxS3GIejpRZlD\nqh7oChna6HgrIxWBZoJZaEvfMZYB98cY8+g53TEm3VW0hU0i0aA4w+iQfMhw\nh3vyyxHMcvpZpy/ThvHL+2qfSzPWTPcRRUNXnLwGSyiETB1Au0s4oKiyaFwt\naxlV4oI5xP4r0ZS7qLw8JklcA1rE/hpVpvtFH/nmQRXwlwVIyIh2H9VgO7Yu\n3vSZwfdynsC2SgxwmqT1c7+nQ2tDmqKcz8x+jA9LA3C+4CHMujs3Y4KQXSdW\naChm299wY+afvJsVEOKxqt1+eqGcV1IWlIeC223hamE07FhUpB2T2kQDdqmN\nEKryjbMspf8kkc1faW+SDmS1/VkTj1wSW5NBMSeQWuuLI2LerNiVV/0NVw9V\nRyfL\r\n=0add\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAWKCdesjbRBYJ1Ai6gxgYDFRfdL7m9yjI46r+M8gKu2AiEA9fqiHCDgUm+n7T2giT0fG3LVhmHPH1xp2ihNmBAwLE4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2-next-1608201574-e61d7e58.0_1608201701565_0.36386353737765287"},"_hasShrinkwrap":false},"2.33.2-next-1608203172-1031d9e1.0":{"name":"@xdn/core","version":"2.33.2-next-1608203172-1031d9e1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2-next-1608203172-1031d9e1.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-csiuG2jp1xpmw3ZNewvKIJ+x0Z2EYeFagBT5zCq1zWEqcJ4AUZd3MxdaMhQ+5m4WBNUcI9zFgTQqD2J8yoMjcw==","shasum":"08ddbf8fc959a9b99ba894d2f4b128b5e81455f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2-next-1608203172-1031d9e1.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2zwjCRA9TVsSAnZWagAAPtkP/jwFBQflj06mERKx+2bf\n7HdKW3JAslVU2Nd9tXd6HXNmvt6ob8MKpaXMKpHVHmIdmqJI60aXTL5F+GrO\nGWyD+AVV3yEhxYL67VIqf4g8q1HJrKG/+E4y0/pOmVxg2Vop8OzMCp4QTErR\nyd307NH0lZYhxpjBMzF/hQXNBXIKzskozVkiBCmOrejKjgbMG9uMaJYwiww3\nzYfFJqOU8OyRqFcssi5fQwNLpdYUvHNzthxsHGmCLNBPBa/HX7oF9Fw0be9d\ni5xpnigC7TkNQDrNrUxG5Zk67Hpx6wklo5/9yJ5oGOuAG+0rJ74xGC6AV9Ug\nYaEwD/mk9peEL5JBnPv74p115xBLCzXuLh8yI28Del+MbhFf5O4fFVxQmCIg\ny/zc1Yp8glwgXMyubWbmXuIo7MQYvPYamnhkCKGPJVr+9GCLTRtrQNVFv8wN\nRO5qY5W4tqHcqBsR3Gr+cb2mhLUPFLwmK54lWFoDciXeFQzhjZmTuvnpANFm\nio2XQblv7FDZhLA7zKP33R1esxIy7imRMbhsJGSIe4GiqujTzEeZdqae6HUl\n/TFR0G7ahe1VrhgIOJ4uTMOx/R22qNvgRFkKCKFfaFtit+gyU6W8NN24L3fG\nPGPLPi4z5VAalGTqVzVuDesGJTz7twDw1XP9ynbJ5GZwfEiC3F1SLPnU9fsE\n0CJh\r\n=FeAV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDbW6PhviIheNZTa5PCpr+pNpq6boV3Mmt+c+EJYJqsDAiASBear8Ba1ztL0L6HHDJzN+atQKQu5HrIJfvekoHBmcA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2-next-1608203172-1031d9e1.0_1608203298786_0.7375088800655296"},"_hasShrinkwrap":false},"2.33.3-next-1608204470-9f2b3b55.0":{"name":"@xdn/core","version":"2.33.3-next-1608204470-9f2b3b55.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.3-next-1608204470-9f2b3b55.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TOBRSk9sKCkMOZhE8J0Wfnwt4nwHDKTpd5eOpOzkR/5E1j77IK2J9eh50hyCo5A7J0Miw7hXFfgsupBZFoIXOg==","shasum":"c2fcc2ea556a98c420ae389862c238861144ecb6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.3-next-1608204470-9f2b3b55.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf20ElCRA9TVsSAnZWagAADWAQAKBmGJnL1It4LCvo5Xku\nhWy843YwI143EX5+pXXwwlThmLBGa5ReOScH9r1vOb75HEGhGpEaaGYnRyOx\nG4i8ZvHS0LJNnACWmbSoa3/+iO4lB7+XAWFKKGYQvVs2AKR69oW3bPD+vkL4\ngA4p5bA2+KFOgXBYqWCEw8KNhh8zLEOtz3HobmifziPPKVo1MdWj7Bokx2LH\nj5stTxodQEzUF+37X1z1+B3qO9F6htZ0NO/MUpJpTP9HlPBz/z+lLuzmdaCQ\ntT84y6QR5m1O+cJG9ilYpsc2M7pdfbZBCvt/FmDKYZP5gOBGcb/GQbvkndG0\nQ15HcmdMnoxnb2nnx8VXFkCGqbvRQYrxvWsCxpflS4gOXQHh4SwNTpV/pkCh\nbGoxpSxE9CIYPoNv9x+5Hlth6X7dX7VhEwEZ7g+8WECrVE9UEVsZJJKR8p2G\nd8yNEKxNIeE6U2rkF0NB6md0pT0K9SmwRyJUaDrTocJF5PvycvlwKAia5F8r\nWtolCq9fhMOEeQUWFreY948/6+ywMNe8P8FbLmRSCQSSSZBO8bEb/wCMneLK\nL5fBDFhtUarmqzqszbxAQV46A+zGCw47f81x6oN+CoYwxMDCl8CheIfTZaaO\n5TgBeLmsOfH+RgtTb23jVFCYyWo48StXVqFnS+GlNTDuTOG3pfBaGtFuKnl0\n9k8H\r\n=OtJT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHs623Ne+NBZj7Tlj1K35Amb8hcqZyXBij3WEtg1o4QhAiEAnVYKBIVWdFSZITbZVCm5Bp+WlFSq8Bfp87D90tPQp+o="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.3-next-1608204470-9f2b3b55.0_1608204580949_0.46390527766698386"},"_hasShrinkwrap":false},"2.33.3-next-1608206118-be25a311.0":{"name":"@xdn/core","version":"2.33.3-next-1608206118-be25a311.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.3-next-1608206118-be25a311.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-M0SHDqPzEkCedd9tj4rnT4DuCUXXVFKG9fZj02r/K+4tPNtf1NqHF/J6as7mQ84XJy6XvtorhmVH5cWLTa793Q==","shasum":"b4da10808d8088c5e5186b99415a371acd07d461","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.3-next-1608206118-be25a311.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf20esCRA9TVsSAnZWagAAC14QAKNrM7gAzcpJMhIH68cp\nGaPXPrXmUjWCRsH0DGVD+g3NvsmT6o0eaDM2SGjsqbRuXhPlRddw+m+/JsSM\nInvzcpCs3QvTSDDLjNNRo0Sv/IQkGzZqDt3m0R4j8EfOXZ6JVfYzRLMr4rCd\nQkxr3vwK28zp8tZMjDyuwsw3Xr94KcN+QXBcIzAs8evVfmOIRcBAsB6EDLhG\nPvmZXvUXXWXpby1h+1dh0ktQ9pt8A8zrCJI/m3cEpBdbNZ9NmvnzJ2AfCp+X\nplvTkzrza1L8/I7Ci62naOoyof1XLdYz8DfRDsSOqDPiWVGhP/HRhi6RZCsX\n0QZ6JYSTzI7PhJuHYcPio2lNv88Kqc7nJHAAaMkGeq6AkvYnIPCFkreu4pcG\ncrGbkPVAiSgpsKMrWTVAll+i+RowinudUhvmF+3WGHA5F9GXfsxFqFX8hpDT\nnvbvJScmRHuH02uecFA2EDRcKnez7Ym9latciKsmreBpqlIXEUZ/46pkqBTN\ncna8jsS2l1faf8V7gXDLzdJdT5ghFL49ZvHnLBUZUs+LoFJkU/Aaifn89ngy\nmEUhb2xuSMaf60EoNeh0txP0be+PbdUn0JvNufxvZslH9FCZTw99EDGr0sEA\nAhDsTZj0DBXX5yGSBxEfDeG0EFg1K64wqSHOttnmmAhQiP0qdzMz7vB4ce2/\nWFd8\r\n=sI/C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDC7JkXFhqPEZuZFlnZvsYwRu+JJycTZK89NYW1xK1auwIhALmYrBuPcuXh/TA4TdW8ZqJ8RYwtdtxb9Suddf2fxyLX"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.3-next-1608206118-be25a311.0_1608206251657_0.6853452952345904"},"_hasShrinkwrap":false},"2.33.3-next-1608210925-6c0dfada.0":{"name":"@xdn/core","version":"2.33.3-next-1608210925-6c0dfada.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.3-next-1608210925-6c0dfada.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SfQd0cXRV5hish3550wa5hCNF/s+FaH/r4p3WUgLCG+900mgfmOW0juiVILMDjrPL6wc12BYlRp9vXdkpZNYRg==","shasum":"c423b90044e8babd7b7a8e4280c8b8acb057ef3a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.3-next-1608210925-6c0dfada.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf21phCRA9TVsSAnZWagAA/60P/1tb+/fe8STfFhuhYiB2\ne1pC28/1wHmtdbRTo2FghUIpPl5dYmCVYtYU/1lo3LEbjBQultO3UmobOW5t\nq9RQ1X87lKN3Y5lMl/UdzEb9nM/45/PNrBvmCdQPfpmra9fSLeUHNIaXle87\n7/k9EC/kdTdFiuawCiZdis23SkXsM4fVUoQcmaQCHpxthHZ2nzwA+AadPkZ2\nvDzj1rmFWEbR6IzztX3/imJsTQf5Uiwv/hjfljqr14oIhaKpkHCBjTUMySj9\nSHoKZl0+rGLT7iI/YBmOkfURWBTr928LYeXkLls5TUUYlCoWvvcx28j9dFZ6\nfIX0ZLV/B3T6OHDboousfOe1HolaxrXW7hcxw1Sc/RIoZZ5IFXL4unClDqlf\nGdmeANHgkJnmYNbhhYosYrLU6lRy/FQhX4Y5wKR3AIuHK6G8WjYI2S4NFeAw\nDANcozFn28nTLr/imN3QZNEMGTeRFwFtSPW0OX06Zr2Yr+9l6EBBaXbuXzdc\ny9HX/o96u1QCU+xRIsdXQIqva58cyajuLfQmrIkQA4Lmp3XsMxUMQRIKnwGC\nSFe/7+3D8FGnCsXIP1+aokKeyH8f7RW73yBv44PgtPsUVMLXZNumDtfHtfto\nDLAUTRDzCitZJaBCrDhTqCBnouHVT5LJ0wQ89SX0/sdqv4toySwnSybp7N1o\nU8w0\r\n=Udb0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA3UzUdVG8BDQvlHoEj2l+jbgtEoR8wxDpEctKwG5NqgIgMtyG9YXjAVdXHa3RX5H76MgzvxhVddaTLWLEo0aFUYo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.3-next-1608210925-6c0dfada.0_1608211040484_0.7357899694373395"},"_hasShrinkwrap":false},"2.33.2":{"name":"@xdn/core","version":"2.33.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.2","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LI0mFfo43mfCXSQSxkUV6vJYohnI3kY27xwHLrlnZNhtekwqrzSjAiaEIQfnqOH33QnUwdr0+EVkYdsrH3LS8A==","shasum":"10cd1dad87b0bb9a2b19b76495a7a9aabcedfe19","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.2.tgz","fileCount":169,"unpackedSize":667742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf216KCRA9TVsSAnZWagAATH0P/i5UUUpTGCrloB0g9RZ/\n/7CllU3l3W6bxMuBu+LpGLGcYfUyxIVmsgRCcAXUK5ulSJkdiw65P3CnXTgL\nCzOIqZx088D7kqb2oh7nNsgERc4O9WAFinJHZ470vNITu0wEeZr/tO0ernYe\nTMNxyGV1JOQ8T6HB7JXRfrQR+LmecLVGMjmepPFk2DaQn99EbtfnoqpyUxFx\nxwVNqao53UsGCyS2VH3/UBs/AXgGYYjnZqyYeAz8Dk0hvYKuPNxSf8Z0vtbD\nOyQ/4gF9zdHHI86e0lwZPNRu2bDmbq3SasJcml7idKC2ctp/DFp0BWX1qcr5\nXa/tl+LVsx7JWkbvQLNBPllLPsLPZ85Xg0ZixJuPFcpudHEbw/doQw+AYmUV\nzZ/nUnZwU6W+kUepy4sJVpJP8arYNXRhFIzjtXHc8Ko8lJenbSCH9CCr2zpL\n0CXLAnHAAEgpW0g6/dbXZPtpKrg8IRqBRNfWKVU/peEZ5Mbt7v7F4ICyu/P5\nkqf8vQCkAmg5gtbwDG3a+bEI4x1yEvOmZXEYigEiBZWgUeOnrJ5EyQJ9Ym2/\nSVZHHGsigOyCmDfsXtnLllxjRW6KRvrGKgdCLP2QOaak8L84IZyU73qOiz+N\nghGihZrTkB/7Yyl0le8bR6DUQuzOkdKpkb0mqwRunRQIIcXK8SblzN/XpXpQ\nSOLk\r\n=InWa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC9AQ1ru5OBlG3SAWEkBdMdLr1ziBqgcxSnSlq1KFpSbAiEAinhcpvZU4Q78QFvYHyzY3bwW7zppVKnO8/V7m5E43kc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.2_1608212106052_0.2912135941553169"},"_hasShrinkwrap":false},"2.33.3-next-1608214108-f2be469e.0":{"name":"@xdn/core","version":"2.33.3-next-1608214108-f2be469e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.3-next-1608214108-f2be469e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hJUfCAEHPs41PtTrXi3Ht3RhZp5Qjzg9naXGeHyFEX4WPW5S14JFymxXemFUoqTZH0xOWWbojrpjhte+g9XiEQ==","shasum":"92a4d52022cb423ee8585893c8ee23135f76780a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.3-next-1608214108-f2be469e.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf22baCRA9TVsSAnZWagAARGQP/2VKfhMwkJmMwwkawXxe\nL8rV/EswbH7pnc96h/bXhO1tpPqM57GvaUIV/mu4qIPe7BP+fybI7AbdT4YK\nbtJSqKgd+e7K+kaU0wzuA0dKqgSgvbLyna5FHKhb5WZgTEi+sxtkgcT2HtEm\nTFOOR1H0OddprvVuUbOdjuDnHtPXtRMK/BpDlLtZTA+4fY7vTBcxtzJBvxvg\nkhOEEqojyWd6xW+pdkgmzI3Xr10qSRQ/4Frd0sAs6uZ3BgJIkDPDC4O2ka8C\n7ZYkVJj1DoRw6ndoSHqP0viosVM6FjMYSGv25fLos5sPbI9m0qPhp5Fd9i9z\n8YWqCo8xxdN11majVbpY7UHMn1GxL2UWiLf2Rc1xIBYVhvAy5WI4yKyjFw7l\nqzu4tNpk4tLP0PvGGBg2b/SkWXVhenRZlpi382H04u7a9QrxoIWfZq2hpBqL\nHJ4l/yoREQAygcd7Z7jS4Go1IH4TjRWdeKOKI4qs8YJdiynFoja7j6hPW/vz\nmClC5KWkRDtDCmggxRZL6620t8aouUHNYqgyweMleXKZpUX9jEknEC+qJCLk\nWAbTcppEVzEMDOK3qluhJef2tQ/ZqcS7S/qagrertkH9Dvr8KNvvlQ1a6M+0\n8oI8d8t7vuuyaGcD3NjEXl1bjC3dggj1sPt3kgF4NOWkeJhZIsh/bVpffpHe\n48H+\r\n=poPM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEL9QLUuwRljYcU0RaSz6XIXjeLD0xxCyINe1agiu8x4AiAxW5jwPB94PGU5edCrrBw/2aa1+iIo3cMGoMrk7zhowQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.3-next-1608214108-f2be469e.0_1608214233924_0.415373563665824"},"_hasShrinkwrap":false},"2.33.3-next-1608215550-f2be469e.0":{"name":"@xdn/core","version":"2.33.3-next-1608215550-f2be469e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.3-next-1608215550-f2be469e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Iepsf5VU0stkqcujT78m6oNh8BGPKmzgsSHRxAL+Um584E4JqQ+z5lD+0cmLotpEOg04ouZplW2w4+/9Uuxabg==","shasum":"3354545036ccec6db803e7af89cf5f9f58a4f160","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.3-next-1608215550-f2be469e.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf22yFCRA9TVsSAnZWagAAsIYQAJ61N/eAcFmXAxS97Ype\nXl6pgsKb1gKLdWm4dsYS5tkdRprOimvfCtZnNiHeOvZBDiBzM4sPcygFf9qS\nvBWerA4o4z8GWrMEVd26oJI+UnKkyBkEf6w2SKPUwt2sRF8eA1gDKuA74tba\nBZLparwHsQcos7cxdew4PcTb8xJrgSpsuXimyudbB2dvVq/zlJvbkjlMe3Q/\nZQeO4cC5l529+YKcOqjz1j4gV1rayb3+wW9pDzVIioretKyKe/gSS7EsvQgG\nVuYGB5FoBrQA16odb/ww7P9KSP0lGcp19m1PbSMdbzLdFaesN1XztBfo5+p6\nE68qXnEcOEY1mM2jibneHTJgNPARB12EyWuZ79mvdi0VNIcB9TIMoORdy/aW\n0iVhvcdjAwxjCxXwqRXLgv2QKa+u4bC9dLdisotOKC7KmEYpVojp3og3gJIg\nhY+kDJtpdcRXrW9k8XTm00RUYsPnUye2G2Uq0y7hB8TwcIk4zf3B6BfqxMcG\nXjErpN24Ljn2NMSQBuMFqXLQLPSFxcP4p1SW+hC+bbXLH1xBCPDdJ3+Jqtsm\n3EhUceRYEQkF2QxkOS5pMXnSiOhj4V58CjhYilnUCBBwbE33NNYlEzx5wlJY\nqJKAP0oAa0BPaxO2OeOEQF6vZaz83VO98mMi85gx0379ClaDJNiUi4tbauV0\n6bWs\r\n=011i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAR1ZMkVTSxRcNAKMBUc2L50mv0UZseznuMK8nzEX2ygIgGwvWo1dr0NyhhnF+9L0l43jbe3H02XHfkl6f/zNGPzo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.3-next-1608215550-f2be469e.0_1608215684833_0.028031100331384673"},"_hasShrinkwrap":false},"2.33.3-next-1608222257-f9260e66.0":{"name":"@xdn/core","version":"2.33.3-next-1608222257-f9260e66.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.3-next-1608222257-f9260e66.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-knyqcZgE/1Z+eHGCDxJ2BkKY6CZrq+GzaBWwHwWFq+4MN7etCo3UwJPkIO5ag01UsZlPhNXdjr7sFU0HYrEUTw==","shasum":"55ab035d0ce298658886843098e45877d6ff0931","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.3-next-1608222257-f9260e66.0.tgz","fileCount":169,"unpackedSize":667796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf24ayCRA9TVsSAnZWagAAx1kP/jTGz3GEOuTkub0P7tle\n7yeS/zFFs2Jvj2pmXnb7M0UARoR2NOsUUy2t7ey5a7jNo90DvGGQ1gyT7FQx\ng1iessuB7DIII5XKHb5g42B8u3K0XRKD8AWOVpgEnRXgJHpJwLvO77sEKjl8\npBDRNc0mGP8LjxGsSn7PTQkflTpQ7rPdhw7GcYFIx4BYTk1da3LapI2Bv4xP\nu6pfbApijxRLS9T9p2XrA5GXfCxwj1baS0KMAOlKxcUkPjUyTqpij6ijE+dw\nFl1R/dnTiqPzeHHj0dqEUzmpTCfsqmTXXu4hFapyJC5peDrtX0FnemfI1c+6\n4eN2Dmq+FOKNlyRc2n+Zz3X6WO2y/+QFzN3EOkPnOORJIOknaY/fB3rfNkV7\nYlgujolbwadWJ63G8Jc4gUuOAYA8Ka07x0wqh9JoywKDgIjnBoHcm3d7rU55\nc3fIwhVC3Ke9902VAY1n6KIiVCGSnYx6NOxrwj70oa1WdGwyPRwDeWJIxnYv\nRfbTOgjkI9ezsgbfgaiWnbPVFQU21JaszSmaw6QiGXtntOrXEOsBQUNEVK6n\n87MN0kxZw1z0rcD8FnWWhgYuAu9X2n+QlOKFcxJ7lO8iKkPK2MnkQdLmVq2P\npdRNiope/R4VR060k9lLmwDlR2PVfChpkSLSFkOdR72hVo2hYe2nObz+SUXx\n1Qjp\r\n=sUaK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCy59VXp7ln48Er5Rfs5zFodkYapFwFlQw+5jfTcbWCOQIgbsWOoPPQurj/4dMhuyjM0RyYi7SsBkifsBGHo+Thig8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.3-next-1608222257-f9260e66.0_1608222385675_0.7531000870845481"},"_hasShrinkwrap":false},"2.33.3-next-1608222666-2c1f1b94.0":{"name":"@xdn/core","version":"2.33.3-next-1608222666-2c1f1b94.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.3-next-1608222666-2c1f1b94.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+uoqY1aJT59tOi5um5AUCxnbEtoGoi5WZXKiSunhQwsyCQKBGyFIwphg+tQLw2QHgptiaOmXlt31cZpNbTkSfg==","shasum":"c6ce9cc0c207fcedd8be966c7d31345c51124e65","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.3-next-1608222666-2c1f1b94.0.tgz","fileCount":169,"unpackedSize":667913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf24g5CRA9TVsSAnZWagAATQcP/i7FM9d9ZuMbeH6HD7DS\nuRkNNEEEmUk4NOpyEyNDNXN4CABeAj6ON2yTIN1AyUQrY7z2wOYkDjvF1B5B\n5NI/21dJHnb2iePjd6pgrnpGIghO0ycgO3wGMa+oW8k5xApds+8VT9zCXUq1\n/slSiD1lATz8G79P43HXzTqbA4dyw2ibnzRWiPG28/rI7KUHtmgQSEM/mjfy\n1ZddM2beZmPL6XIQgRXDBfDHhvbskUr2a9vcO0Y2s8h7ucvC35FXIzOLYrAH\nONe6wZrlCVSNCXmIhsRFO8Omq/KEMez2Sz4ykt2Rd4jKNwGuMPbdwkU8iDhO\nFiIgPjSqUBDnKUHNtVaVopgfcoKVee7DDAu/TJI/NIy2RIxvcg43JXp05YaH\nt3iFIvWBvp9zf5NMTfGZNYmN8CRqeIr0pLbe2gjaEu15Ttz6UYghEQE17iPV\n2HoyRO2gxfhYDLuaBG8zcCklcRC7wfDAzRmZS5m4G6hySuzS7imAw5BAHiN0\nXgRpAy7CLyFPTA6NHAGSBrXuw9+tFAdb+iBOQ9xqrlPsQtSfvjHNLIHG31+P\nKtFPXv/+mgX+pnhjQXRiOnVhlLAlj2isPkDGbKoNnB2TJt4ty3x0Av1Ek5Jd\nrVS7iJruP2OCbGqQmpMxa0fKMjsM4fz/QCKNK1+HbCwEfWnUZxaGi8bOZGqJ\ns1+/\r\n=T8y+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBh/kPbiGFSHDS6PZi0+y9PxNG7twJZz/midbav40BETAiEAsXthP2bMYokiDbRNbbz+4VHuVA3JvUJFMMGEkdRVEWY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.3-next-1608222666-2c1f1b94.0_1608222777354_0.6074826977419905"},"_hasShrinkwrap":false},"2.32.3-next-1608223390-4a64ae60.0":{"name":"@xdn/core","version":"2.32.3-next-1608223390-4a64ae60.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', 301)\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.32.3-next-1608223390-4a64ae60.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-NzjRolefLA4RYJE4GE34GELAsbI7K/HG2CfKCNgjMYXzSiD0Ng6bxNQ97JO2hPgQ0hPMAZrmLJ5yvu1rMkPkiw==","shasum":"d7384a23217dd402927b633bc3edeeeb1b1f12eb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.32.3-next-1608223390-4a64ae60.0.tgz","fileCount":171,"unpackedSize":643566,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf24sKCRA9TVsSAnZWagAAwQwP/j9E/YluM7m6D/oe+ZID\neSRJgN2kmpuvQMSG26zBTFUicZpO8zAz9KAKgqvwBBRbZDoNabQNOXtcSfLg\nctIgmqoC12T0JchiFIzwqydnoZ3XqpoEU+9l7mGl6u7ja+b22Nb1BuP8UCtd\n0CmyYY/vfGy7oCNZw1xiY3+ahhdoLyaUDF6oBFangxhu9HyEn3YjbUlBXLd6\nQ7+s1E6l8Pn3r+cntSP3i0aWuX/DqEaB1Bay1x6ZJ91frmPWeom8fLvEG7Ny\n+BiGC25kbaxxmzHb5Y7gpGMa671D21nMmcRRl7D54D6Rj2xVAPCC4oDmyL+4\nZMeb+cHQFHIc0iSTAMzRuu0IgXSQDygb4K8yo/ACRZsCzR4H3+yXHC2safGm\nxjEwfMd9lexZE38cGpuCkQ0cQdaGCZhocdt0GnARy5hll6KpnEcnxK1lRhPa\nY7FaSe67henyVYKRb8NgWJPXZCDisybWMV/DfmXag24bEU/OtiBHnC/ixymp\ntAm+V8JK7RPdGUl0JhiJFQhYIjDwfh77UKr47d99mzU2gqN8jqpEH1+N8wfu\nks5Mlq4EmqmbaMgNzlH9MCQShUXtPX9vDXBvcuIEwXpObooVjO2jW+Ws30vF\nJ3JRaknrBag3iskiJDyyZOPczmbjwBbSNIlvlorSzQ7iFXCIRVs7i8++38oX\nJoq5\r\n=YWnm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBL5qwD0TLxjtiK9eDfkFe16/FA+iifD0U6r1YVeV66sAiBDXSgYI1gt0rnsEuSym9ZElh9CLd0wuShTDRvghTgiBQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.32.3-next-1608223390-4a64ae60.0_1608223498340_0.23199079138145362"},"_hasShrinkwrap":false},"2.33.3-next-1608224061-8507e4b0.0":{"name":"@xdn/core","version":"2.33.3-next-1608224061-8507e4b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.3-next-1608224061-8507e4b0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VQ4uSgFN/qQvT8UOQBe2YM0aqezMzKqWe50+zZuGF9JnrZu5K38LzopquipjLtfm9NfEMbsj5pv+/wJGS+uCIA==","shasum":"f82ff4ceadeb946492ef84daa5782bc53b01e2b4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.3-next-1608224061-8507e4b0.0.tgz","fileCount":169,"unpackedSize":667913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf242qCRA9TVsSAnZWagAAQ3AP/36dWM9FYpBMJ4vf0McH\njNL2762PP7M8gRHRrjTkfAe8S2wAs6xl9b0RjIoDwKKpKDiR4RoB6DMQ6pc5\nw1l9ROIgSjX9+5TeFDitlGCLEONIYOFku8j2G4uVfxhlnzcEehdqMAfsia9v\neleJcspI8MWjUbHKHo3KC91BC5DkLaPGVxNlHkmlnHkBYy9Fy8oa6WrHAXwE\nb0HdgOzHVTOk3gvh7EdG1QQN3QseM+3uYBOkGNo7wI4SejSwH60IyyYvxnnw\nWfeeNmXFVNsEE3Da0FyXg9QedVc8Ni46KjAOTkTUQW7TaeJiWtE5e88TSR5y\ncQ7CHKDp82MSxvJgyzdVyEp8jHYJoUiEMNftKk48HqojFkyIJUBXSL++EzUA\nTtt5hIHcrorNGbFGlzS0gtIEz0qvgHrZC2w6R9rbhXX1Bci75doJsMq6IEWB\nluAWAFJS41gJvda6cHC3HNu9QHD41x7d014YRPJHTJ+8taeAm/MLkGAAIz0a\nWMOlkIPmF6ccewK6fkA3+EqMDi/Wkm0D5Pm5BrQIBH83vXsgDpEi0/HVyHuF\nOoH2qxD2krh2/pjEtiEnuSyvwB7P1XAO9ShXpJjp+NCIceDhCi/v8/89tWFo\njqa6/H/NM7MKqclef1zvd8ONFoJ+JuBCKP3r2GGccv8eppSfFua1hHfJdOLX\nz75C\r\n=P1Oq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwk6MWCwEIRoUEU0oy+rmWkBu6nzz1rh2s69qRPnn3NAiEAqgKplbRRxmzlzNbpbLxz1kvlMzXp7BE5mYxGbXp9yqU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.3-next-1608224061-8507e4b0.0_1608224169894_0.9645854791477018"},"_hasShrinkwrap":false},"2.33.4-next-1608224200-7531f6ac.0":{"name":"@xdn/core","version":"2.33.4-next-1608224200-7531f6ac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.4-next-1608224200-7531f6ac.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xsffdNhyT8F2MLgL86T+XS6qHcMifVDz4sYqbE4dGWZhqdUj/OvRrBxwclTlMW+6Z0Q9dAyj+nEgeumFtVNh0g==","shasum":"c925fa5d3482366623e4933603260c1ae4b4dec9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.4-next-1608224200-7531f6ac.0.tgz","fileCount":169,"unpackedSize":667913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf245FCRA9TVsSAnZWagAAtpIP/2lfCwqXnp9JFF7qi9eu\ncbBpLzlZ1rr75z4wM+wzjJmZPO8Ab9WKY57FgVBf2L99NrHyP/+s7PgOlMWO\nrNwWqyExX/tCTWGvodgYk2mlDClSQXvqcA4bLiVACF1lxgNCuvVK0c00EHRu\nv8X/9hxLV2n+wPVLc9MvWzicEXPY3zOZzdt9lFCVB07CxuPHKHNXPX42UxLV\nj6IhcO8HL6XyfE8ylBTqkSR6UEPTJH46DWbH0avfGN4tk1MRTD7cUEZY6JbU\nkTCU0JhOfDWEi53NsBdFBXdw7cEao+CyhulvoPuraM6LpgD5Fxv4ZEduyUxq\nRFLt0JRVjf6EkBo+LNQtiuFNWMikUZ5W8iFFfydEv600RxuerQBuQ5R5/3gy\n1ewgCbbyNe9DGb11T63a8cJ4YY7aFAVuQ/K+2oJMSINWFGJXY++9odQyJoF0\nwGHqU0Lxb4mVWCesSfd65dNF8A8zJarmp8lFv25hRKr3fcRYKOTfx8KkQq1T\nT/rbY3O3NBNq2eCNKhYMXA+L7iw4XIg9OGXJZBzc51ipxCY604oMFzZBkjQl\nI873AzpJ45GkTeKTtOLN5TQQlCsuPErTMOTW3o9VlThOr6/vjIXtng/IrkWY\nXhqd5nNNmwt9kFLI2cedzSaVMA+gHmTYPJ509kzSBwS8kSWpl4bX8S13+WLy\nkUTn\r\n=GH+2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBmzDpYDYZETMnNjspqallFos+yWTC8w67n9KktsUMzZAiEApaakrvSBv72nx3+XFNy+vk076rFLd7wtZb9nBJ8IjSM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.4-next-1608224200-7531f6ac.0_1608224324261_0.7793552492036817"},"_hasShrinkwrap":false},"2.33.3":{"name":"@xdn/core","version":"2.33.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.3","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uLfNcGf8kc82MSgeSdhjuICQhnZkVw/L0wn+97lQdNySV10l5XL3e4K9KkoPiivWEa9g8Sa0gfATYbF0ZJuPLw==","shasum":"126413f85b9d0f2509c0854050f88202b5547058","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.3.tgz","fileCount":169,"unpackedSize":667859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf25MICRA9TVsSAnZWagAAuHwQAI5gzuJMFrZBv92KnOiO\nfeAT2O88IrZtdBEcBvlEEXIg+bZPAMzJdb9/eywUcsOT9RfS2A1DDkRFsPPY\nzdaF2GshW9DdRBCDFwozmMKn4Wupj7nyq0EVECvL3uHSMGxdW7r5AG9Ac5ho\nUJKguI+/mymK1PAQpD+4iC6OaY+YruPPamC0s4G7edXli88a+/V5Jpd0DLUi\ndjU4TzXznLFfBjZh/Tfg8rUgxKoGSowE6ZQ9e+Acnh0vKt4wsxpJkti9RUbe\nbxvmzFIbGC37MlCeP0VESC6GwV2sLL/y4mk4FQw6EP347+C0CcCKEYjHCiEx\ngpqMtPFZIcS7/+EcdcycD7Ob8LzGvoVEvAL+B8DN+dpMtKwYCfcAY56rvPuN\nLcJSbFPmTDvRWwc+Se08EVsoY9/zZJP8cOm3Zh3RMmwec+tcerQ+fku0Gbim\nFuK6PeyheSX4IDnDMV5vCJCmngfuxNZAXB1efIPnEmmpdI0MmNDzC6wHrGKR\n9bCWVw8NUeQFDmrQ26YeJB3/2iHApbUQyB7iu+bI7hS33fkbBv5VT4fYyHzc\nEiwkPJzr3s6mt2IJ+XukFbYYmi4d5NZ4iHHakoCSBXmzIeb9a8+lL90PNQiJ\nuvSNHbrthrwFXvNtjry0hnldP7o8HvcXqJ/PAvkyBdgaQoJ3pAYr/hJ0Pq1n\nmTfZ\r\n=Z3lx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHq2IKg5rx+51fhreSgMAIGM2DLfMTaWwaTkV9XjQlpnAiBESP3vTL8i7clY3uwVxDsFR2CCu2dIaSRgTVRaWgoFsQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.3_1608225543963_0.7235192061839031"},"_hasShrinkwrap":false},"2.33.4-next-1608252872-8d3b9435.0":{"name":"@xdn/core","version":"2.33.4-next-1608252872-8d3b9435.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.4-next-1608252872-8d3b9435.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7V4Bye9feDTKC0+rKmUYp1dNTzmgEfCDyRgJ2GM6OwGa55Wmne3XtHy17pzSLnfIBvNt6xkcnQuYFz+7ynOFOA==","shasum":"12ad7d456b5023ef951faf75e2234ebfaf2e9b04","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.4-next-1608252872-8d3b9435.0.tgz","fileCount":169,"unpackedSize":668015,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2/4zCRA9TVsSAnZWagAAxckQAIcoVppwX4i/uFqs8RNq\noyVwQzX9QpniD+s+KSlTU5ZSC0JmVTXJ5u6GjfE8asTREQpJNbWjR3JMjZhC\n8Y7ToLIlXniMs1JgmenbsnAdYfDg3JTmJgoyXvj4tDiyq2q2X5xwIidqQyhd\niuCKXmx05H8kRbYJVcCkoxLdMqyAMy6K2Cob8Dw3ry7b1dcacslILwYuCuwE\n668NT44pFIFb0VgMA0XY0ooztUlN/2zc1Q3FWHIEY0puxJI21mevBn0AI9S8\n8EU2z0jLfAsR5V6EDoBnM+a8npC1W6VAnKdE2A5i8egQVQHXAkoA0zBZqdQS\neOkXq0aQCog5yENYEp8a1AnaB3LB1FCnLyyVysZws/OdpOcaGqlrrM1h+klw\n6Ova47ylZur5Fvk3Opr6dX5BeUkSqOHBBjlZA6yDXoK9IwBTMUJgsct5CADR\nQh54BfedQyKMbE+fZ+FLVmnvOVYJgQ2Pfq7kOYcv4HIXj+WvjLBosVTqGtos\nEoJbSfY2YslT3EL86z0rYtvb9Q4mljbhhnR0hfOIwu0ykMNPCW/OEOy0KtnZ\nP/X4u6ute4vd+Gikvm9Xysf1XPuQFzmRJ0fTlxWeDQwYOjKeGjZyvY0CeVqk\n+eIqRovO6ogHgiSe5zN75JTh4RZ2mw4bFxA+g6s8Hd/kaIRkJLq//lKrGPp9\nLXD0\r\n=dwSP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICaERZjwAgWK1GkP3VrEfPXsge3uozIwpwydnACOfn9fAiBgOMWR7x4Y+y3guLQ5QgnOKCMpwIAIsw+75sjrZbk4Ag=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.4-next-1608252872-8d3b9435.0_1608252978591_0.5626649649250703"},"_hasShrinkwrap":false},"2.33.4-next-1608289305-33ace1f2.0":{"name":"@xdn/core","version":"2.33.4-next-1608289305-33ace1f2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.4-next-1608289305-33ace1f2.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-n7v69S0TVYW7tU+/SSks9ME88y8xMsYAK4O7oQsCu1pFKRkPTA278/E3+zxDrWiEU6qDcT/xLbpM/PSEO9770g==","shasum":"9cfa41206b5ec8ee9e76f55591d482a8bf5860e7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.4-next-1608289305-33ace1f2.0.tgz","fileCount":169,"unpackedSize":669478,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3IyDCRA9TVsSAnZWagAAy48QAJ+BKfS3xOBe2Now/kmO\nYSAM7yZR62M/rGvl1L8nE40BJUyZ/daV9eNl8R6s+w2d5CXmglAO5Ovj1/gy\nnx4tkIyCLkMa4VZmd9FfAa5dnkpJkN5eS9uoxPJKg5xYMVpPkqhXOR91o1PJ\nBrHm38h8FHaPnGWZ7CrL7sigFpB833TJgm+8B5KdOrJODSEuhlSBO9Esz0LV\nsEulch62A0Ov8ECE9vmDuSgcJoW9Ag/kS5kq30DDqPXmOoE6Jgmyiz8E5xBl\nFHZaF+PvhNsYCrqFXuktxsjPjJlI3CYFipGuoQt9hRKeTj+6UgKRJvVLgduG\n6vTxxoWl7jkoFvnGmTRc/jaHFMCpeDWNv7rhtmuaWRF2nFPf1om4aldb7QP4\nm2uJK1Hpw0xlb4ZXFt8tKnZTsZqAw6MEnfc6mBYOZtenSGj3/wmW5STMEn7S\nTJ5h0768nlqX6YpLNO6WpBEdD8y15mju1fbp7KjcJBmMiM/QxSWeOyV3IWLW\n75LE47JMiIFH0UsEwc/xrfcDKYHYMG/kotCuuaJBvgFfCj5QLQKLbjf5qEt1\nGYooWvWCUUtYasM2qRYGvFlPj2HMMvriYDAwMWFSwe/vBSXtZ7NR/mZ4OWr0\no359/9emvb+IdKFimQjUFC37akzx0RlBstJAe4ebML6kt2z7AQ324JpMVshX\njQJR\r\n=tx53\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLodz9pyvELRkStRUkj+LC2e6dBxjbIvISo3/r25T0lgIgU03R76LAM4CXONSp7A++Mr2nAcZBMFJKWDkVajFxZmw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.4-next-1608289305-33ace1f2.0_1608289411168_0.2686506488900109"},"_hasShrinkwrap":false},"2.33.5-next-1608295665-a0eabebb.0":{"name":"@xdn/core","version":"2.33.5-next-1608295665-a0eabebb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608295665-a0eabebb.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-foFFZtBV5f7PgysRhCDavAn5V7+4aq17eZFBoJf4iBfQ18TuNoaDdQ4kwhFND8l0AE6LY3mJA3HBOmqdkTQfuQ==","shasum":"de675246d80d5c8e46b929f43ae285c088c9fc9c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608295665-a0eabebb.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3KVmCRA9TVsSAnZWagAAFpEP/iISH4XkqC/vbnl4povC\nK8mpD/yOndCEtIUH9+WNtwKJqtY0UIvqL7s/XBT+8ws99rUS53hsh1Axt709\n8M+aXVh/Dw+qRRgKtFDpfiXHyKjuyf2vtllJ43iQqD5Xbum0eNPOsRE2WHjK\nUPvPLxJq3jjKa5wkIyixMKRywpRzUgDGRzbqx6XeSiQS0sGPQJf6OdsqB9F4\n1p7kKA7wo2EZsZtq4NBTDBCFe58o6856GA2MhAbyQn4edujFzOuWLIcMy69M\neBgONxuWL9rtDSleyrs4idsBwHClA/Vg0ShE45Qs7uuzE6R/kv6Xzh0JOoGG\n8w5oYbP/6Q3znQ7VFtrH7Z5mb3G8kZizVvqJaHuuw+u27yRJlbqgwWMIMebI\nMs8MncHGV0dAPA7o3dJK9BDFZWhBRGbVeUfSMfqLymutRB1bYDl1ayDWwUrj\naY/ehS96evQ12qxCAQZGdEFdge9/iTP5hbHFu+J/vWf3VStAAxxAjTRiRKKq\nkurlu0J2h3bGemfhS5piU9nK0rJUlHCqxiFc/kiwbyhAz4Lq8I6OLm9qxUow\nAd61i2eQDMFsuhgoMsUB5hzRNiYYrsZR68zrTa6BrVmlvXwq4Z0IM4leCifm\nfN2Dv3tWgvKFlY6UrKgyThTpKccCYTvxASC0CeNbvrgS4nYL+3zCDtE7teB2\nUyRR\r\n=s3aZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6m5z/33X6fnpE44vsECoCQou6ly4YlE7fQ5DniQ5PLwIhANmw9+UGZRYmTDwYERIrn1Ifwc8JYqwdXUORSW1jrZ7b"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608295665-a0eabebb.0_1608295782273_0.09869448196999508"},"_hasShrinkwrap":false},"2.33.5-next-1608296907-a0eabebb.0":{"name":"@xdn/core","version":"2.33.5-next-1608296907-a0eabebb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608296907-a0eabebb.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uAA/qRAw3xS5zHLeypn/51OjDzSNjX7v0xyec58r3Msv89fLQ5duSOIdKs7dP+YVBQq9QZF4GvEpix6zJ02Ybw==","shasum":"9eaa786182df21672dbf97592a22d71db77a7295","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608296907-a0eabebb.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3KpGCRA9TVsSAnZWagAASAAP/1dn501nA3+dTOMOnMyY\niZrHWEJtEMZszuzWiUt/zG68QO5nkOlGChkDTO4oIbEccUwtnd5l3QcrX+83\nWuAu7qGRP+8Yjh+FyzgKA6BFm8xXuWj81PDqQ8H2EZrflbeX016EeLKIHmgr\nW0nmXEycFI7oeBCV41l/HJdVukpoLS3UL1CrmaJlSMGcm+T7nDL5G99E8qi2\nt11a8OMWX0sXn/yeYF7oyihstSqg9tBRmorXbHwSikKzPY5tpX5eXYd4Cez9\nmhbPt6mPM0uVNSAQ+1kJCYAx9/CyGDwe46NCenHwp18UH9Gjm+Su6ffh/ujT\n2kkJp9LAhq5b1ZuPvTLExic7fat1RpzrqtSShAJRBy2IBQb5nOrwy1KeExAI\nse8RKb2VB2YiT876X0QRUD1jUsDm0NQh52s7trYYqgHweHqRWg0iBMLc+dtE\ntTIal+1RmVGttuzBDYVhc4YahbmJxqHHgIPuWYgyS9+IGZuC02tlN3KKu55M\n31WObcdJ3p0x/bz+nSQ8VLfYk91wSx/+GJG5oSYRKHJ4e/GOe3ByM1Ts/LFY\nJ9qAj2vR3Av9MzIUN+zfFLig6lRf4ngpbA2NbG1uUUfTn3+mJ09h976hxs/W\nJubYyEucPoF+B+SxpWRYc6sd1Jol/D8A+K2UcuDuqWyR0LVaOXfwsbLfKsqh\nA1Cz\r\n=SHxp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDz0hST+PDCnh+PFu/R0dKkyY215s5mO/QfsoGUhieA1QIhAISKE4ZpkMsqlH4aWwOR3JOY+GiHryKTrlcH6u3BFrzu"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608296907-a0eabebb.0_1608297029890_0.6825692666352681"},"_hasShrinkwrap":false},"2.33.5-next-1608299095-45a1f58e.0":{"name":"@xdn/core","version":"2.33.5-next-1608299095-45a1f58e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608299095-45a1f58e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-B5v3w2V+qKVnRFiOGAICfSrOC/6/A4S6o4KbM77KGz8ouEgKPYbrdwLzwpRdxrSVBDY/+jWaTnapEaXyDM55kQ==","shasum":"ed5f358b1800cb0373fc6d0906d15530c5358ef6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608299095-45a1f58e.0.tgz","fileCount":169,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3LLTCRA9TVsSAnZWagAAqZ0QAKKhMT6jqnYIGZpRgJJ3\numdMpdwAUp1xGrgfJBepzMSc3Fi/hbW54NIuMc7JY90aQzNq1fA8s+mWR3cz\nBvTkDkraOrQJFQN1Cyqz3IsK9BChyP9JuZhOSxVoM5ST9RLVaw52W5veIp8c\nX3osbbev8KmOgSnvR2bddq7fkVg3coDuWAr7ZdswBvFrO5rwuCZwp123dfj5\neC21/+RWyYgIFF952ZNkFvT+5vEj9HQrUXoSmDejW8NHLyw/9qZyoLewhpGt\nuU+zikMQXZcBTErI4pnq7W6DKivUbXIS9Yd2k1MjEDSz5IT7kg08qA5NLG4S\nD+2n1R4pyTSK7iHgdFM+sQV76JbpKIa2rAjhxmlNLeb+OnqfvXYucv3pEcNl\nQtkoODVswJmqkAQp6+7CYAWuTFrBfMeGK8TGmA0b+BYf9VggjHL0XzRa+wLO\n/puFpMNzjEc/i/bFUaOGsJJdTKwBerbnTcG/W269vctakGv74sIc2gz6Pe0E\n1gTriSSqBnrsaxixpB3klGS7uBowt0N0tkA60ytRPaM95ljv4qje3Y0tUrXW\n3I6/eAjugK4Q7f7u1bFsQ6kYM+A/Fn6WwBwXcQgnWycydjepv1Gte5KqJ3t3\nn8bjnL+M2CHdu3h7d7UQ/lAEY8z4i/XLpgE93npoe1D0QRXh0m+hZRMVGVsd\nRjvq\r\n=A6Gl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCA8PwY7b4NcQH9r9VE4rOWYWs/zaoUW8ZO9IWvAwaRSgIhAOc39547h6AgUAdS31CLsdKp1E5PJPS3/mbU5s/vqYqQ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608299095-45a1f58e.0_1608299218727_0.7200579636290452"},"_hasShrinkwrap":false},"2.33.4":{"name":"@xdn/core","version":"2.33.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.4","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-S/nf5hPo4Jqc1MP33ZGRTHMtJt1PwyNTfYAtoyeqbtHfWKvE67xqtakPFgw8SoUBT7FzRD/2W3KGfE3dCJtQEg==","shasum":"962500c5f73617469502a70324bdaeb310515f0e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.4.tgz","fileCount":169,"unpackedSize":667817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3LL3CRA9TVsSAnZWagAAhpkP/35vVIO6uhpli+iKpqUZ\nD1CUuN9SfBJpvU8nWO2EQ9ymDhYNt11z720iKxLRARY1RT4naw1shKz7m5H1\nG9vJsCrg8cmlAOD1cp761TqT7FebewphHDLksxS2XLIN2R/JTq/kbc3Op/A4\nWUEG+wIx2gyfaQzT0qSEG2W7wZqe+gTqBsPjyergfOIXUUscKFJqLVcl3vZb\nk3kYqWMwJtSVWPaep/C6gE/HgaR/rZSFWTWuJKkHaR7uQx+BI0oeZvf5Rhaa\nIUFRNVgbuaA5RJBerKeMj1gKzf++m4ah5P7EFdCBVdZzQAU+GBvYMiheI5eW\nyeIANTKVwSpL84r0vA1K3i/VIwsvW7lbME3pBcXxzg+jUVKo7AD8LrWyP+o5\n9dlU6gbY6S24uLu3rUOOexL2xkcoks+okzHPnDqfEPHlfYX6K1yDzl2Y4Ga5\nt81XHX59P4A3IrydEOpEuLZ6pSsKyURIOR7jnYe9dRpNuWp/MhiytXYww52g\nPsE5/MpTW1roF/loqoUj91Xm8LkrVi9RF1PXSOxw6NJNi1rf0sd5DEgImCYr\ntm9fd/HB6cqAcYV6czcxCHiQXBTfV77+3urrvyMnHUTj1f16PtnP3nfPDT+Z\nyXA0g2fr3xP3DBC88B9hlHrKCeqq+pLnJBuR22qmKm5prYK2e3rH79m/AuUI\nTw4f\r\n=7+fn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEUPNY+BjBfsVDhQNHBC24CplxRI32k3NNdRKNzWf1fhAiAw5ycGJu7VOV08ZlH1BUTJxIGdG9Y31Gu6jNc/dtpJVQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.4_1608299255163_0.3863496454610864"},"_hasShrinkwrap":false},"2.33.5-next-1608302141-80c04811.0":{"name":"@xdn/core","version":"2.33.5-next-1608302141-80c04811.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608302141-80c04811.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lEvjD8rPBF6xYyYK16SvfusnnhGgGSjFuDzVHKuqyoSlJBoXNPl/l9Ieve1cWiTt93du06NHuLLP/cPvCSO8yg==","shasum":"425046d329736f7bface1be7d6fc6e96dcfb3d42","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608302141-80c04811.0.tgz","fileCount":169,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3L6+CRA9TVsSAnZWagAAOUgP/2PVnInK3ne3PWL0qMxq\nbzGEEyK35AnEfNiDWYWh876rGxUBMHhCuOiJazYijGynMqIwqaA31YQSRWyu\nDWzOEtjzfazbh505ADchMdiBg51DJ5xg6JyhT5nOLKBpTurXRzqRqkIWhfEA\n0Ym1pSp7s3iLcAnmEc0SDXOWgI71HJn6L7KHgv+Gx0jBnuamIMfW783g/F9Y\nUzWPiOvcc44wkn54vkuZV8uB4IcHC+Z4cCTCd2ia7EeuKFaSTiuxqMg7RHHW\nFbGjiBkPQnDvc8kqAUjTreehKgKoM3ygm/NqcUSbuYxE52pxfBl5FwD5mVcL\nlIFcNX03gOyxyzCrvg3fMfWIOzXFE5Kff1sbSgQ/R+LRHAWiPF9p3nyNcH0F\n3r6lI8/Ao5M1OVLAr+pt3bDG78t9raDex0nLkDkr5euP9JMxD/QlKBtvMUhK\nP+RjzE7gohTnwgyQSg97cixX0gaLBEl+5lcS02cRalE49OfCla78i7TbpjmL\nUDe2CPg8ZeGWFiT+diRc8/RYiRwe8N+eFoWVJ/dL47hPpoWZB1S5IdtGvzRF\nStIW2XsP3NhG2KpGzX++5wlLQ+BHBYbHqvImq9C5WgFEexWjYudzcrqj3tXe\nrLCIDfyftogweJ8OBywjPusErSsAJcaLrqLKaghdZ9zA7iVfCraRKMyZVMK6\n+fp+\r\n=wl4z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDG6sIKECakXn8LQvEN8au3Me8XYX8ALPMK8ZFaI+TvKAIhAPY8GqNDgvCeYLVxxGFZlWo9F+5a1ZnHC/lFv1pqdmTQ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608302141-80c04811.0_1608302270094_0.03803606202247556"},"_hasShrinkwrap":false},"2.33.5-next-1608303377-0201f9c0.0":{"name":"@xdn/core","version":"2.33.5-next-1608303377-0201f9c0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608303377-0201f9c0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-dgEGyQhg2p5csXF2UxAYv1MzKCsCSYChDK97GJPQjlj1KANjhkSMpLkIJZPNDnpbTgBgXGdO35yOyrtE+xciEA==","shasum":"18368ec3965a28af8db83300f4f597c0b9af224f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608303377-0201f9c0.0.tgz","fileCount":171,"unpackedSize":655610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3MOICRA9TVsSAnZWagAANX0QAIVQpDzzj1Y1sfSTNqyG\nkzaikB87smmOmk2Fhb/PnNdIp6+Mn5qJp3wG0nkiaSHnvVlP+1Jc8MpvHEqk\nmtSxabldUiNAqdBo91ls7LKhMHzbPlPmh2hp6DBtdE2Yu+owJHmc/MGOXHuD\nqjpw41GDxOyiM7hSOnfCajrDb9FfbfFhzM0wEo5kIVezDKujIpsBujisja/e\nnZ4tVmlMcXKbuzntDxMg7+xUAvzJCv6u61PU6nc0YRTXIHPBR3JM/+tMn2W4\nzgbvSnW+iUAvnNh64N0Bp3DOlEOd3OZiu2OdueoD4cApvRFzIQaK6xCp7Io0\n1946OmvTIxK0CbbgNDGCqRJ0wxan1ZoZFAhRqZKk9RdMWsTeDL1lxlDephHU\nDTxl3eeEuwMJ9lvK4nz2oytHFrnp3hnV3DewOsqcanBZ81z+77n4dOfQ4l1b\nLyEc8pFEb6WRp8wkzIbvrdDM7KFE4oVvlZoPOyhFZbgn25LeQqIphoxM3oxo\nauCGKIj5WotDcpiLfRTXnVIWMDOkdNXs49HwPMujX0kH2u/jeUi9BdTJO3u/\ns9/4jGMEulpRkNfVtznJzgduZaqrHGKcM63jsaeojxPtoB1gYrwJnesIaOza\nE7mP8yv3dALOtfofX5a1DD8Jen6U49uHj2nKxgjn/wNw2KlTnGzYeC3+QFiM\nxWla\r\n=eoyD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGyJwpfcydK7e8LkLbloab6rW6fz/2UuJtpTuIykqA28AiBH4U6U/KwUfsBuUP4ORNRUhiw3H7yqt5zR/m5aYPg4yg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608303377-0201f9c0.0_1608303496173_0.9612830021739649"},"_hasShrinkwrap":false},"2.33.5-next-1608303515-812f4081.0":{"name":"@xdn/core","version":"2.33.5-next-1608303515-812f4081.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608303515-812f4081.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rMxEVwjZTZ+oVAbThbjj7+VVil6SkciJPx8OyZqzw+8GLNVsSifP4OZtCKIYqvX+xgtxowq5lV2UloxiwHrGSA==","shasum":"9a43fb70044de78d01690a64c402817e7c7cec4c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608303515-812f4081.0.tgz","fileCount":169,"unpackedSize":669436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3MQQCRA9TVsSAnZWagAAJv4P/0EpDJLwelzdjiWQ1p9I\nAEqTb2Qz7GL1jw/YERGccsCj0IMl9PhKwHdR96ID5KmHpd3AVKp5IseUTRqy\nVpgLjhJtmsbODmI3z1dxYbwmmYnQjUTfCFPlgacsvyAaYgnTWlFzlVFUtnW1\njXyy9g+tgK0hurKA6kwUpP2wZ7LosAx7RWwScZZSredlmJ9M2k2jyJbmHzT2\nlaN3ZfFf5Tcyum1hyBKtL2/JO7I6G9iHAjQ8RoVP2KJnTEQ3u6T0ujAQnnck\nohjzcQlBP4Sk3WQdEUxf/K+TSwpxOofaupZ8LtNh10Xz8Q+1Al+GXTWKvzy2\n6ikF8g1WYhluquDXI3nx2qJIQ038yMNiAUjgtZkgLp42exrEOJ85uy2l1CDB\nW0KTgqqLE80qkvtTIH4M+JK5dCVNrNicm+/uImrRQjBQFx94QGHjKu6fmED9\nv8xt7sMe8geCXItTEYobeSIaI2ROnRtZF10+cOtg7RbfpknrNAxhlDeRx/9w\nVp1ByMypbji8RLqMeJwDuAqJcXCgq/ek4eYlv9VTIlEmJNwvHFWeqWGsJHgY\nqYV6ofdmbjabvXRlZruAuZ8ry3Dm/nX6n3Djj5qc2864P1IeOzxvL4BiA0Zg\nlx3lqRkcv7bcbfZTf9hTRfG1WsUc9tKE+MQM40Vn+Y1aLG/rFDkj4utwkyGm\nHwSV\r\n=th3F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCN30y2l2z2DePt5yxL7yGDtnNS6+Ni5dsBtSJsab+DfAIgZTl3JXvTH3faRuRFTk7Wsqn0cMRlxsRIx4ZpdbnamE0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608303515-812f4081.0_1608303631666_0.2639199577905176"},"_hasShrinkwrap":false},"2.33.5-next-1608305824-f89e5e37.0":{"name":"@xdn/core","version":"2.33.5-next-1608305824-f89e5e37.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608305824-f89e5e37.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VAkmaHhq3cgAf14sA4bbdZuRxyZohtntqhLfuZIEhx2v3Ajm8ai0WUfkOD88ncocy+60k8lURPVu6y6LAiiSWQ==","shasum":"a0842d5cb384f0cb67a950999a51c4d6ca756527","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608305824-f89e5e37.0.tgz","fileCount":171,"unpackedSize":655610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3M0jCRA9TVsSAnZWagAArUgP/AoCmr4IgyMNTlkmknqm\n4YAFzYzD753g7m6acrsygTQeKYdAy3/4ZUXyl4/IerTbo+lKQ9WTCBv8avJq\ndnbgxl4xDA2mOAZ9swJBrWCysi3/mpkUNJEpZOOv44vRjfRAOqo6HK10vWLy\nKypRwIxXXfX8jed6Co2vfw2bhdF1zEPFULLRNN+iLsIuGIIkBlZvKyu2ngOA\nYUaAe3QMnCO/ZYwKCslx7g4DR1ggfuMF7WHFKP0Y8dJWSDgUF7p3VRldvzKX\n5K2hAPCmRepAfAWlBJ8e5PfrxtXNRSyvY1ZDfrC7V4lCrlCMw9o0j/JvRUHb\nWhU9Jxp5nkwCj1OflMoqTB7ei2oWlap9RRk8x3/I+GCiF4W2+lMSE3YhjCsq\nAmQy7PBq8tIXh1a2rYZYTI9CR1LjoF8po4PrmFLl9h0Rdto6dF1Hup7/qRJq\nzDFyZs6v8kncF4londeuBdu6MTK5uWWKHJiBlqFiWw2lXUsb8HXXBWsu8ziv\nJOijfWXQastP2lsK8LVH9WS/JZBZc8vGiUhqiJwi9izefL3BCYMehpiJ0snD\n9UuayNpoV88eC5Yn+PCXcB35v2xCv83grm8BGSQRZeram1RfuJhjOvL47bjg\nHU+9cAR/xatYQyOW7CSOGs4ZM/PeSgitlIL/H07VFYpb/galVxro7sKnPgsj\nDaLe\r\n=w0SS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1ttrnRQxWSwaKhzTfGYstly6I9yWBX0OFQ7dSj5LyrAIhANEP7v+wtfJH0WKS785JF8bSvhaKKyk8SYnTRFbo9RlM"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608305824-f89e5e37.0_1608305954594_0.8192339485463984"},"_hasShrinkwrap":false},"2.33.5-next-1608309114-d5e5c6f2.0":{"name":"@xdn/core","version":"2.33.5-next-1608309114-d5e5c6f2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608309114-d5e5c6f2.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1LcvXfP4yeePwARBdk+aqrwtsxsoqL06uM7rwGP/Pvu2OpRgTDRrz6bAkgBYRB+CD8okFnP/AOEs/e/XWtL2Bg==","shasum":"4c74ff0bc26ea3b0165cee70a1bf11739624c3d5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608309114-d5e5c6f2.0.tgz","fileCount":169,"unpackedSize":669436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3NnmCRA9TVsSAnZWagAADrsP/209lWOt+5NPHjpS5vkD\nbbcqd6hij9VwtHimT+c8sbQHlkZ8TmlEyMp3X7ILKf8n8Qjf/UGRkpzDXXRb\n3GiwWtYGJrNtf7n+RgUhl//axj9f9sb4BxtR7OEucKZLsjRKXe/7htmDmq3E\npIrQVoa/1jlN3ax0PUGumQSASKNCrop5GiH9heH//QS4D+ttHWupd49QR6Gu\n1YbMdRPqEZ8AI4nxnz6pCVFXQbdkMwhA+vSY7RjA4NefBHVK6MrTpeFjvShU\nELJCSQlfKWWh72X/cg8ClkC7E6j1eh4AeJLP60P1HjfiDbuZNeXl5xK53I2E\nj6SbS/UPT2P8wLXWQ5QhanK7EENnqwfJsKOxJRmcePTa8EJ2GoMk7RoF0FDs\nzoG1UQk86dYo+ipYy93Fh0YRIRf7HMxBiJCCnC/xWBypesxa7a7R8SGNzeam\nITaqtNtXgxYWeC2PfNXfgnL5B1Uj7NLRCYB/5aYjBhpUPpncp69qzX7ReCXG\nDzDrfAyXXwY6wP1w69NPEJzibFLgZDa6HBDseu+0Ik4idp2fNX8qy57dRcbV\nGd7BgmHcd7zjogg5POQwMqJPnWHo1Q/htOiMZdga0PevR7bOXiqnHF3+6fze\nbntLwPKyJNK8C3MlHrvCVhGEjDDZ4FMNPEAgcjlkOFFoq3GQ8koiIQmim3t/\nE8o6\r\n=x4Yw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSFZ1XB4wcfUDLw2a1KHTtKJSIp6lEnzRrMqEW6OSFzwIhANV2BvP8JhQ3mIVdCfbb0ylYfyxVD1Ye+rN8rh/10GLd"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608309114-d5e5c6f2.0_1608309221776_0.04753118236946152"},"_hasShrinkwrap":false},"2.33.5-next-1608309537-d6372d54.0":{"name":"@xdn/core","version":"2.33.5-next-1608309537-d6372d54.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608309537-d6372d54.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OuukwyJAqAu9aTaJg9Gwxib2f/4TthdREFc3ypDsR1qXRZn9K6pK3YdTkF3JbeDs0TIIPzGzIfr4J8F9BvcWaw==","shasum":"a215c50280170eeb2be6b3e9d05edc2277674ed9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608309537-d6372d54.0.tgz","fileCount":171,"unpackedSize":655610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3NuTCRA9TVsSAnZWagAAJd8QAJtojjLywXQflKF14Ciu\nEI6VVVPqG9dl9ToKaIDOxmG/8bn9b3axnFkY71RS1OpIiOZzTFeCAT9u06RS\nc23Fb999ybY3NKeRyIcTvPBY2m1bumT1OKTs5IqEi6jTaiZ9oWxKtyaWcqI3\nWQRv+T57xRa4Vg27sA3j8TqT4t9LbBB+zXmJ1t0SBbPvw3k/7D+N4NumZ26B\nRklLrs8igujD84AUMdRg3VfTZznCbARE8FTHAaqrPzGdvjqGeif8BpWS2Jqa\nhl6e6SfdUiUT1ine5Zw3rVBR+7AF08Ge6+d1PywDBUnxECDoXAdwmLm50/B2\nJ/0fYpptAOOPickV0Qo7i8+VyvJYSzr780BwTNVKpb/Szz9j/6whQMkO2tmk\nRIKC4I083zpMCI8UvMI2e2LjnP198vknuMFoLd6NZLOc66KtzK2+uQisuYvo\n2PTONo2Y8v7x1UC0rg6Xzt8atyy0OknDyl3joJ2fbWp1H0+ugsan4APsMiiU\nY2uewhZ1QFnTdBH0cCJGuZpSOCn0wkdjUCpQVe2N+5z0wrvfOLZC9+hzIN+v\nlxFq+GxGp7bkeb2LTCB3NU/c7ClYqCViVkVbxcx/d1nk0JEIwzAICKUF2DUm\nUh4p/iw9Ly2SLiGUMJ4cwK7evkZGxS6o3kuBOU8AhI4vbjwzj1P1TL/8ijw/\n/gLs\r\n=QLrV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDImaI5dlPIYduZG+mkX/Yp6W+8YUMYguoLEJtZ/j/RAwIgDVJmUi1Y/Y8NaYpR7zlyTNbkvgyKEExKNVxp+w12rXQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608309537-d6372d54.0_1608309650692_0.5364418516774234"},"_hasShrinkwrap":false},"2.33.5-next-1608311618-bb1bc7ae.0":{"name":"@xdn/core","version":"2.33.5-next-1608311618-bb1bc7ae.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608311618-bb1bc7ae.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qbwUwxmrrKVHISrrbCZEO8FEuY+SGNmgqwk6c2hwTRdgsAqkanapbwuVRor9Xx2Feue6apaRnBrJTVh94/MgGA==","shasum":"6c4d9d9d97c1bf2f6c31635942c64da796188d06","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608311618-bb1bc7ae.0.tgz","fileCount":169,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3OPOCRA9TVsSAnZWagAA470P/i5jlXZAQCN8U9l3NiUJ\nHK8ZLtgTeNeaYkBhFIo6tM2WLwV8hwA90Op6S/cpWt1lGF3eGh515J1m0X3E\n/Dh36GlHfInJVrPsT6xjsiB78Ae+NIrXxeShW4aqibpuXaZRPkQLL2WNhdmJ\nbwzTbnHScjxYsVoaVfZG3ZBh7a/6qREXGRQj2/63+vx8D1k78m8s9sq9aXsC\nPgTeQzhBha3PVQat/p/tmSBhYQCkx/5xYoxpj9CQaUJVN8uTmI1Rab27QsBl\nyxdDhoAJj1SItNVuSO5B4huCa3YaXl3+d9tVF0F1tymSxHJHeySvHNjZg3sT\nOT8ivtrSSdFtTY8uq0WzwNvwm27xD6JP56OaXD1jaDWa/KnZGKSCI4ebKNdp\n8Oj6jLyoKFzUbyqcB3Npka1+fLONXQFLv1mXd/OvIHmMos12h2n5B9grc3pW\nDx06QZobWRkBEgCYbNywkvV50pmYJgrSbO2QAXvqgHII/71CHcWT8frf7chY\njmpr0WNpdCIfsctu3Vj/SHSyJHijkrKhvi4FzWMXmWSoXc2sAlDbQNeppzna\n7mtxPSFNIoDhN4L+jLU27Bw3ALY2d4TXy7f5zxGZB0rFacTm1JqvN96NdYFG\n08KH7+ClBkAa11FJt/C2NFlKBu342SUGsD5g0KBvw3ytYlkNioKEHfu+qwqK\nOStQ\r\n=87Rp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEbT5nO8CkkAcdkW6HM/HlhDX5amquDjRbMeFKBD1WBgIhALPkKEYdimJvs04n/rZ2kxVYdUFDwImvwZcc6cU6Vb48"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608311618-bb1bc7ae.0_1608311757457_0.4884671962422149"},"_hasShrinkwrap":false},"2.33.5-next-1608316295-e478ce95.0":{"name":"@xdn/core","version":"2.33.5-next-1608316295-e478ce95.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608316295-e478ce95.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8BK+fPf1IyA59kHV/4LlbQ2gxOdx6YXBC35i74HYoI8nd810JJo9nool81jyaAhMXL7BaNHJB40bjB1GY1G5Qg==","shasum":"2e13e4d7aaca214001e455330afc768500aec79a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608316295-e478ce95.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3PX1CRA9TVsSAnZWagAAVwsP/1vJsymf5eDLGlqQYy5F\n4X3sy37S3g2wL1fCWRmbvj4vMHawUX4WN9KpHKj6JEHwtIrp6aZ2fwmKwpW4\nt2YYBtOb8pWrEgXWzoC9GrSLriXNJiuEmxTWkV1IwfCS7wnqNqh5C7Aki+OW\ngdxx/1GUohLl39K+yQpVTo7IVzcK/s7028m2jRGR7uDrPcStxxJlYBjQWOdw\nBnmEVXSRTu3RMfTHhaJjmtEFo8eMrL8lX7nrqJcPc0cxMaw3+z2lbGt2Bb5U\n7s24ICYCE0x6kHeRiJM1X7gUPKAids5NUTm9IuSJCpISGJxSsoqP7+Zm25SA\nWJVr1N3EiJ8ouHUsvQWlRRpTZRJ22sdrq62pvhDbrX7psfqU3l+8hcoaVq/g\nVkbvQr4pv7r42+/PxuMe/GtyMhnGTkid+gjwiUGuhSzcUS/R9qYy3gOP8uvZ\n0zzwpf3szGhzAQ5cOZYl9zD0xB7PYX+xImclKZeIf9tnIbPv9xCFC5vuxwlm\ncmW1bVeHD+dAycpYk+Pwzxo8BWe+oLWsnn+LyuaurzQtrEK3GtQg7J6MwIIt\nUv8wtsQDewu1iTvjnbcXMhB/05evx6cLaGYClDaDNLpicw3kQ44s84aygW68\n2r3gfxDTVbjKbNuUNhnJK4a9hCdsxbhk/Q3kmeyRjo4RCrGKblVd1UVewwGc\nhrHg\r\n=sGm7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBuL0+1drjVWizBeEKhESrp0P0G5DluevrL71Dbc0xgVAiEA2U4FFCZtJDXusRSeElDMRqQ2eaipRTiPVa1/cr9a9Pw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608316295-e478ce95.0_1608316404630_0.4280151234900773"},"_hasShrinkwrap":false},"2.33.5-next-1608319923-e478ce95.0":{"name":"@xdn/core","version":"2.33.5-next-1608319923-e478ce95.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608319923-e478ce95.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Fxooke8ZsDV3bGhttsJVhUOX9q5DuzBKebkJWfa4zuhvMoR/zfmDgtEX6Kxvk3uhhqRTi46BeRrKo3z3lhATYA==","shasum":"9a3301ab5ef7e8f121fb757d34bbca0ffe850b7b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608319923-e478ce95.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3QQuCRA9TVsSAnZWagAAul4P/25XoUsB6DzZ6rw1Pm9Z\nS/QEc9ltYFVuTjQD4uLkCc4IYKRpF07JUsL0531Hh4/tZzvOkQzfpiZjNSX7\nqXtNFMbDXNHTltDgCCNha3IvxJdJKSaTiZv7mewfiKeRBFL0QBxN0B/FcRFr\nEPlQvDjRHYdPYcwA5TKsdela97fXl/Qfir4PpOQkTMb5wgTfCe5AQwhbFki3\nocaQv8b2F+4Tk+fg6SsIb+xc1NaAQimG2NXdjknANQrs+L8bgrusO/bJeKw8\nIukDCmRSSHlqe69II0/b2BCG0/WlR1TWpDbibSdoJxXq2YMTqLJN3VcBU1+q\nDlkvBLnBDBFoq0LWixBs+vVCyOZSRxFXQQLR7ZuFHzz19U4h+rbG9i14NvK3\nxQFg/rDcPMtd9ZX9W9pnaVZiAHGIKRmHsl6jKgJB8AEfH0t4ZJaRx6dHzJTD\n1J75YEXDaV76bohWj+fGgEjM0Nucq9mpuR+aQfSlPiB1DRYKFCKCOIHGJYig\nqu/cPgLHCwnIT+cPrCk421VjET4NtQZBpEdEE3QOJTMqbzHSoWhCt5S3zqHw\njo4kqO/U92SNyIme/OjNMBaAtPjqxLhn9sca1FC7u8HppKfsHX11aBEtshw9\n5158HAPi5YxhbjvUGXJSTwYkgVdakUUQIjB7syj9BA614k7ORrUzBZSgfrLE\nDVMU\r\n=kvkZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDt9gHLCi3wXn0c0dpUvNSOxhNQ26BikUgdA+tTOU8y/wIhAMR4RAYTEuRpUxmGMcSrg3vIIHh/5du3RoAJ3/uZakta"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608319923-e478ce95.0_1608320045891_0.86564380654012"},"_hasShrinkwrap":false},"2.33.5-next-1608319948-0431d01c.0":{"name":"@xdn/core","version":"2.33.5-next-1608319948-0431d01c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608319948-0431d01c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RVeOqnIj2ZKBm4XZtTZt2Fta9wKeXFMFg4OhHCXAa3F97We3Q3UryVvWe7Fkid9tu0d6GXdwGTLJwpojnYhz0g==","shasum":"c1ff5ce46d5ac0071ce5c46f0c65ad0af919de2c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608319948-0431d01c.0.tgz","fileCount":171,"unpackedSize":655610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3QRACRA9TVsSAnZWagAArQ4P/3fc5KAVWUy9B9jaREDz\nHMt+yDU5NzD6vHML+sunDAPJX1vF5v+JfmxiBBqtE7Natsnws8f27iuZV+rI\nfJjVbenZ5eZkHgXebrHJx2NIHcYu3/TQcL0mwN4SiQYvlpg6N4xBudo6I7kf\n4fLCjbl/enlEDU1yAJ+fm6WQY+BdO7MXdJUOU5w4EFS3Z+I1HGoQizgpMIHT\ncTyOILtrova21t0bMjiRQmF7P0RJsePYoUhFqtPkBpIlCZPsf0jrc7VQNsHW\nmAJb/Tgjxghgk4BNFomxAo6MU7jlqbmfolUkOfijPxXb78e3s26BBhdyxC8Q\nteMe/7mgzXFldXqXPJbHuHo6FKTZew8wNagM/m937qWLOT30OMoIgXxVM43s\nTLLc7AZMvcNmjcxZ//XpWz/8pS9bCyQg6d/XMFWmodX9nsxcUN5m+Xpk09AW\nsOjX7bnS6drwcqEVsHfZOSuGA5vu7LyuRGvI/RViJFUkgqQgaSTGb+6F20YB\n+dMlUf3ajE3GxcrlzA7v+t8bP7X1nStvs7Vb9YYcGsVWfqOYtMHuX2yySZfN\ny+k/t4b5E1lG7FMMD+dErNQPLOJ1OXf6lch5fxqLjYudVP8aae6FkbBAJo5O\nJR4FW29PM/ckPKeLNti+1FPEU3xvYYBr+xJ6nIL+SlcupUi+Nhie6JU3wiEw\nv3om\r\n=sJhB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcbuOyvKDY1qKr/bkEdkeTVBYMzJt0ILlQsBmZKQTLGgIhAO/tpnY6chWuD0fadrJkf2ZxZwPL6l+oc+SRhYUKPoiF"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608319948-0431d01c.0_1608320063563_0.6810071772596931"},"_hasShrinkwrap":false},"2.33.5-next-1608320425-0431d01c.0":{"name":"@xdn/core","version":"2.33.5-next-1608320425-0431d01c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608320425-0431d01c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Uy//3p59beSRAc4zmlGig5hca+lZ9cGVEQm8rtoQgzwuPHGo8Rrd9dhfALuNKfPjSMuPAoVfeXtpym6+pH1vsw==","shasum":"5a132ddb784c723374fb7d9ef4ed3a09a6aa81d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608320425-0431d01c.0.tgz","fileCount":171,"unpackedSize":655610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3QYrCRA9TVsSAnZWagAAI7sP/As8lJcwX8gegxfEbGrz\npwwdN/xQJPUH9rtmwgqTs/gNzabQu9XefFRvF7RBx9gaTRmD9sWSYQE4n8dH\n2icKQhK2UlsYEZGGQ0ac6AMOPVh0y/Xgw9a/cSNXcLWnFCWR2+VAyT0ya2WT\nQuI/jca+7R2jAjCbDf9gxTDfsGmFvuERRx7YatPdIyoZh0JJl5UR0VWQTwIP\nQ7nKq3Nc+3CDGlcNuqAxi/9P7/0OLeZuz53fp4KlJI6kLAh4708Xe9SaEdzU\nA24PhD/NeyJph0oaaSnScvg5m2jJF9J2VhTmW1cjzj7EdG4JgPTtnvAEU2ws\nS2y0HTl40AYjgxpTWLSSS/TGRSyXQh9T4s6cV+i2vnLTgZ+KJvVAx8Az/aa3\nuDedpR+acbGJ0CXikdN1tvJCXq6BfrYaTrbe42p51RZHXXPCAJ386CJcvJCz\n+OBEh9lR8a7SbgsG/ot5ExXKCNf+PtKxMRKtI9mrZvtwdtSg6kgP4N2vRUiM\nTWLTSUOvKQsun9dODmWERUhd+K+guyGcdzbWjngYRI/gt7lEU2W/e0Vf8FWn\nKXQi0BOx7ViDjqZaIX+QBmxVVfzefLeC2US/yRI3SMkiWKSP+QAHvrq7pvzV\nike8lKvRWRRIzTq3f4kHPyN2IPzTS7Zbaeu6A2FmO2GXDq2ejk6Ihksdtbhb\nNngG\r\n=X34K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzFAmJCdFpAjZ1PEEYZb3tPmcHHI7FhFJjdVMSf51crQIhAKXWcHRkdraHVvR/LFO8y4qxm9OlDqYYhu4q1dILfUcN"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608320425-0431d01c.0_1608320554638_0.2905833217779126"},"_hasShrinkwrap":false},"2.33.5-next-1608323882-4c66a640.0":{"name":"@xdn/core","version":"2.33.5-next-1608323882-4c66a640.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608323882-4c66a640.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-HcuQZK9jGUYVLW3Rq0M9ZbSsPa4nsFwRn/D+3+W1lJ8He9M6CZUbsseD8fl4gP4obB0W/Qlj9UqNOfHKqBuI8Q==","shasum":"5ff9b7499d9341ae9c01051373fe73afe75fb758","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608323882-4c66a640.0.tgz","fileCount":171,"unpackedSize":655610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3RO0CRA9TVsSAnZWagAAkDAP/18mGLIz0qX+gextUVpL\n9t9Im/OBgskNqYrHuD9NF95icyOeeKKJY2KTORv+9alZwfHwXVqp0B+rVxXF\nMAVVGS5yuMzvGB7S3E1GMeSjlRSPpJJeKy4nfUjhEAncChqJcfnORhFGlMxA\nSBFuGbWNHjsgWpE4fBSI1JyCLs+TqyKoaAb6qev+VbPjpATtXDQFlhC6UNDQ\nn7PzbzMIpK0K4gUiEnmufU843GBK//oPc7moSvXmji/o7FA2ve+JnJKsbGT7\nuXaD/nhEKQRWNSR2EIM88xh9bZAmj9ntFo8Pt716UbBzvz9ePJqmBrY2UHCn\nIl1pXVRuKp6QBqhA4fQMlcr72W2JEM+d1i0EgBtEbkbONzM64uYurUfQpzth\n0t+/b78OXE0Y3Scqjr/MI6Mwez5atCAYrxsDH3ieIedWh78IkszwL7Miplwy\nrw3vrhk45iYc9U4A7+EMAFnp4HsWFSgX16gEnvLeQm+ilJYIh11yVuuYiaAB\nHLxWMjca2rXc/72UuerqN/zmk9QeBsulqyWDO2phz8GD6+owbfD0shb08fvo\nEdloDHoS+bt94IaKPOf2WzGfGa+fWgQFIIOzGccBFT5ZIA/JQ8OS9hapLXME\n7zDE4fJcnbVYZJxX52NnBeFZgYhZKZZItMTWKXEeSvc6uznBpAW/A9QFF1V8\nkvOv\r\n=i9oo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPRa+IuwoJZa+HZy0CfZw9rPeSTnjwIYoekobuizYL6gIhALP1wZhxBUW1tqyHud9r+uDIRIEjw10HBPuLrIp4n/1x"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608323882-4c66a640.0_1608324019946_0.8911511983875327"},"_hasShrinkwrap":false},"2.33.5-next-1608324861-3156623d.0":{"name":"@xdn/core","version":"2.33.5-next-1608324861-3156623d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608324861-3156623d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KGldNPBmTU02BR4tI7GlY6lh1ySukELftVE0ISydS2R928sGB1oYsxHI1AbaqGHDqai+CgoFXyPAyMG+Mqi4EQ==","shasum":"17517f8d74011e409589a7a547a2eb54b7227d92","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608324861-3156623d.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3RdpCRA9TVsSAnZWagAAj1UP/266X56gF/cq1Z6Rm2wv\n6HRQEWa6Bd25GxnzpFfUgXP98PJxPrt/epfJonbm0Qf3o+XC14ry5rHD7wY5\n5O2H5Lj4tsF86zBGjKJxIQ9JZffoQ1T1MAxmnJ+0uGdF1lSvk45rhPswj43x\nKfC7ngXXDqpYKU5WxjaojuU1Asm1rS5GcKIm14QP7nyuj1/UdAcOtJJCJ1It\nIuaBdSQd+2hZVovfF/jtXySl+uRwbKU0Ak/TbuZmFQr/X1CgFp3lseMpEyi2\nWN0g/dAeNH3732SRLr11yAdLmUDOEQb1J75X8xPJCm7affy5SKz9zRTXHKLQ\ncHiJniK2OVerR2BAEk7Q1LxyfYo0vluKVuqvsKb6cEytzic9rdOv3Gj9wPol\nsBb+akbVjJt7u/AJkayzu/HOV1DunwZF9KpoCH1ZZpRaMTyLJHXAisU2S3aa\n48W+HqGzDx4MTllXqjLlO0bUYeVXSxZIJqC1YLoorQ9TGAaMJr+mYy67RVlv\nuiyK7EPlhQjOTXyyS24+1Ug/+Cpv/yG6LW7YuMOjhdsyCYWxES8ovu0zzNuI\nWkyqXJUhM7OhQtZ/giLf6gv14SSqI6QwY1tdcHCE49EFM3ILzVKgb2OhYyVR\njIkv9KC2h86QfKPLTfTiqLJPsgRXFzAcZ0WEH9xi8HRQ4fTZ3tB6Bi46uqd0\nKlNF\r\n=h731\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDildcHp+sjVPMuQDmXsQv0DlF5qfoHEYOLlVvkwY5dBwIgeVEE7uLSOmLGeFGg/bYxkTpK7byiv1Jtp311xTCtPw4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608324861-3156623d.0_1608324968630_0.9037921256286581"},"_hasShrinkwrap":false},"2.33.5-next-1608327686-05e2ed67.0":{"name":"@xdn/core","version":"2.33.5-next-1608327686-05e2ed67.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608327686-05e2ed67.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CBt4IV5boXKKHkgIp5sBWLPkGKD0oDPAKA+ATYSUnhPcpK+I0oyQQ4/6MRHW+ZS8oScBqNFuKJXrSueLSQ1XVw==","shasum":"aaa934442952a8ba23b7255844215962c95de0c2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608327686-05e2ed67.0.tgz","fileCount":171,"unpackedSize":655610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3SKVCRA9TVsSAnZWagAAmUcP/3mnqL1c1kJAZECkUBsn\nR3g+T9ExBU7eGSHzBTsIILeo6b0T9Cafhzt7qBHZSO4rcEe6VQ2HaKfvB6A7\n8e7vNbgGs19KazIZrkvcYcw7t640E5IVP54izPvJKdQs+yg0yhp666sLhm+V\nOHmipda3bZ6vhAW7H6/s8Gy24LFXJH4hoElIvYw1DN27lcxsMEIpYsHFFEOm\nRAauQcDSD81yWJF+n+sne33wgPx9Hy4Ezw3sIdbPG37AmlCPpvts4V0PVMsh\ntWAAERR35APsKxB08gEVsNyXE9UTrqVlG5B171zN5hQkZFaEQ7v/mK0MHpMS\nL235ODRNphm3rRYWtj91xIIIr6NOyJrSWCGxUvrR6sEnevxYjEhPxUCJCK7x\nXnY6KHpcrF+fQ/mjSmxVg+7hoQBeI/7FkCFiZ9HjAYJV36n0ZK14Kff3bB6P\np2gTDo24wvJYdOAV9yLetmsiCL1+YfpZRqZmxQtP3UPjO3nopSDmB+XVEHi4\nEkOyc3Uvr7argH8sxTkyVSAWjVjbcxmlZZdcQZSTKlecsqSK8ZRoDdDkwEXk\nICSSop2kc/HxUvYyPrPIQz20Rq73fB5o7RNK7lbatNgPyKzeI15yzVVLbhXX\n6diQMUU15nQw/94UqIY66XnL4XyVvBDPUXESMzt/ZW3j1kyMb3/nqakC4QnW\nYDWz\r\n=dZIm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHcEp5KsPHiwVJdiy/5DVaeJ4N/4fgOxdatQxob6jv8wIhAOH63uiwCXfEp8f0h4BjMPJxOVms5D1Owto9nLx4BUoU"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608327686-05e2ed67.0_1608327828493_0.14236453265086668"},"_hasShrinkwrap":false},"2.33.5-next-1608521678-583ce108.0":{"name":"@xdn/core","version":"2.33.5-next-1608521678-583ce108.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608521678-583ce108.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RToBT/c9P0Rb6NKTESNFmUFSWra6hAq8x3+hhPr6/F2HdQLSB1vWaW3nLGplG2cCcPsiBvhcDzF24Qu+mS2OwQ==","shasum":"bc28a934bc5e3bab34c80c9c4fb6484f9f4abfca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608521678-583ce108.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4BhSCRA9TVsSAnZWagAAiFYP/2ARH1UwYK1o0zsFfQ5G\n3mMkYck7IudoVko8HtN9ONNIwVzpH4D6RiKQgGkptbk8E8F/zP1+Hv+zexCm\nQ+itnhCrUtn+nkA/Z/Li9xVpQJmryDVxdgroPgds9Rs2KvsvN6zQ0mNZWoMq\npTtpdY82JXyGsj//EdjrbFthS5mipnXMrbIFyhXLXirbxwRlARQwqcY6t66Y\nZB07l/RAuXygylpko001iERHQNvfhHf8Ko8pdUX+BO6beZ6A/tZxrtFH1nBy\nR6kL4PPJPQWjosc6T+tzMenN+XJmXJfRlKWjHwpdme5HEPiHu0sVd4xfDxwN\no229GIWepIs9nMB1XpAnOS/heGgtAC70igK23JKxj6Mw+402HKyOSB8+N9u6\n/bWRpTdmYAWnhu4uRQDLC++kBwMRWBIAy/qh0TAx9b7TGiCrPtPt4ksjPF5y\nFwSHqp13O6TNCF3JXcjTzLakRNerTkBXCJ5a1Xgqp5u9Fqm+u+c/7fEiabVZ\n5hguSQnGmerRRagsi/wcWJIlICnVJTHtynfVHOf0Y5UUOx+1Cr/WTjtZMbQt\nNX4/MsV6ATyE/FfcGMi5lOMxchUz3Mqafch0uAlvVXxjsH7qpuEWjOL9W6St\n/GPkchK4LZnvqJJ5JamMawr7t4GfY151vEmxVuIltHkn0+Ug/QizmaaOgLKc\nTYNL\r\n=tzuw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFsWDWL39UpRWsZtl9BnZRG+SkWrIqu88oDXWs2x32dlAiBjHmoWChSEm9xqNMGWPVLFQmiCVZfWLivF83COGGsmKg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608521678-583ce108.0_1608521809584_0.3325158661173524"},"_hasShrinkwrap":false},"2.33.5-next-1608545000-e716a252.0":{"name":"@xdn/core","version":"2.33.5-next-1608545000-e716a252.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608545000-e716a252.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4gT2lMnM0ddgeeTqOjs7WbGGo8kSfiFpAep+Jt88KwpleruT0w2qCqFGyX9xaxZ+XEvBu9DkF1uH686OZxP46Q==","shasum":"94e29ff0bfcc7d471d9d13ef2ff46374b11ef082","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608545000-e716a252.0.tgz","fileCount":171,"unpackedSize":655635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4HNqCRA9TVsSAnZWagAAsIQP+gJ/t1uNDANkgl7DKkd3\nB7h7UEJFrRiKTxn0AnZra9RBBJpV2FwfDaPHblWn+jwNnDWJp/K9Y4N0xB09\nirRLNK4x94f+YG+k4MYe+s82IWLbeCjNLrI28MikhuMAiJ6D0R6pTs7dc8KL\nzB0QlvdBBENNKUYt2XIuUfey/kUKxWMvWH9UfTdwoZKJtSsVVIFBKmzw2CQV\nXhdvq/LHNpTup0rusRG/7A31MvHjsQhleH6xkfaHhMEs9iBhv+/i2diWQ9YT\nfEetzj9oGijAQnD810ph01xIAutrkIlbj8Nw5tuQ6F3Dm1kGWZ1Z82ExF6Gj\nQGK79o5PWd8bSKIQaEDwTZ0aWWHQ4fpPBK8i+XUN1xqT6Jm6woHXNYzb+P4e\nPnLPbBtI3BnHztu96oYx3lKrRa6FfDLfdJa4vuALt6AILXQkBw0lHwsPP7jX\nDEbd/jj+O9h7g8JX4gFAcDEy1fsl5CvxNFeXH7/IPegwNQ4FR7eF4+EPS97y\nvPBtOG57xvWewKs+WXTC+8OdHmGZfhNu5yktkJ4fVXB1CA4ZH1kSsxvcw3DH\nIqW9ABMIzY1hrgReOTMPXDug4RlvWdlFdMmpgTaPPmPTtWae3zVYxkpz66O0\nbZtUE/xwN3ycsJpDmwvI+KR1elWn6HdJJ5ka17xxsjt84BMkPmqCYqCw4HME\nyGEp\r\n=VakJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkhixs8MnDXCkh+WL/XNTyjhuf+BUrc0XXgP7rthMD1AIgLinTbLbd+6w6PJqXfhK8fmbLpOUVxQ0l45qF6qYE+Cs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608545000-e716a252.0_1608545130333_0.6000681801792616"},"_hasShrinkwrap":false},"2.33.5-next-1608549179-a4a9fc0a.0":{"name":"@xdn/core","version":"2.33.5-next-1608549179-a4a9fc0a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608549179-a4a9fc0a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8vhviBmueHNzPSnM9yYyiYLH2IVA3/SDBG8O+LQM8jIFoH/A4JEnlV1qo9yQCr65jhWFkhvGJ5usiDm89Povtw==","shasum":"91e722d12bff6d69f548750788abe5d53cdde955","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608549179-a4a9fc0a.0.tgz","fileCount":171,"unpackedSize":655635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4IOtCRA9TVsSAnZWagAAOWsP/jrE/WyKA2SnRwh9h/8J\nWELN+7d4AcMXAW27hL6hhphM44jKlEjbf3Tw3VQro5yXUVbTacxjoKKlLkFg\npg4ppW27i/N/l96TeySl4FFvEla2/i/WmABTVcv+v1GdWtY4FNwz7/44oXNq\nval91HpNavjNGBEBaffGwC0jWpAn0ncOXRx2V+TOWaYvOQzSlATbiptI801U\np+E5cJsDbukIlxv6/jfrgSUmsdPBTtFHEcjACWueJWtr5DhCBt15L0U8JVsq\n55OdhhfX0o/Z1LHB89iY3/aU84en152x1U0AaCMlOfuhn+AxuKLNVKUSE8Cc\nZfKiOOZbLJhs3qiO9XAFz8MYvle481q7wwOZr84En4LVGbmYm6mJoGwWoFWI\nBpoFuZiaHBksiw2YZE+2ID1mBmYUP6xFsmmzm9gbKgcCLXn/cei9oK9m1aOh\nnLwRPbAahz6RCjVk+FMMuMnVef+HsP3dDz/VajZlvmmejZdeGsF/g7VllQoJ\nSN4no4JG0PfoF54nc45el8OKN28vhiPKEcPSYbFmwpZo9qAg4iYLwfCvDgVc\n2uArFAY4Osy0Nkrn9inQD8SCtvWQVdmkcSkgRk+x7diSEqyhe/JkXwEieYHA\n7Dc7rwimDpgqyHhbTaPlxgz6rM06zS+qaHR/+yZBAdqsyF/pkYh0bw20FTZX\nuqTr\r\n=oRWh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkJEdqvG81Ghmk+eZ81/Jn+S6Iuu0T8ng29BZ5nrF1ZAIhAJAueYfqWhBqOn7R2pFZoTMBsBNjwgB40gPOJdFR3bHE"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608549179-a4a9fc0a.0_1608549292714_0.18465344053166155"},"_hasShrinkwrap":false},"2.33.5-next-1608551757-488574eb.0":{"name":"@xdn/core","version":"2.33.5-next-1608551757-488574eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608551757-488574eb.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LfmlN579AUB80Rh7/VLcP1yVg4flg9CuDRNs/UNM6Z4P/HRRqmPXhElnv9eInGjnt6E/QR1hNeMTr2UmR/pksw==","shasum":"525bd851f9bd374e80882b4fa018cff2edeec852","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608551757-488574eb.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4I3aCRA9TVsSAnZWagAAsWAQAIQYJe4EuZtjgEUs/IAo\n8dU2X/+UF7LS5VtHpn0OMllPRu9izVw/zTSSoJOjBUDsX8sATJXCn5lsG1Xf\nxiGnTOBXU2wlLIIvKZXe6gRgdsM3eUW4vw+k2Gyj1yriZxRS5p7xyM8Y0iHK\nmfV48/UC71TUbIKD8Fzyrqg9bPMIWhIfjsFydxB1kR10yjcv/PEIP1OiyQWf\nktt64IEmsXqzVa0fX2JTQjYSu5UqezLuu9QJGUQd+XZuB6PzKrkUnJaNOSM7\nwErGJCkO3wsUXV3DjyKLquW6sejb005NmDg9oBBfH0X6ATN3Y4JEkjlfpkib\njZFos4akhxsFrZysXCMKOc1PwJWfMIfQdc4+3vfnVSWYDUmddEV9ZPdjuhWe\nnEPVuce6WvmdHrovN/NAJARV73W0EscooNirAbqA+efnpI2NffDTYfVp7Yyz\nG0O5RpKlBiqSx4sZV0catEN/TYg923ii1bBk8qRysZ7BamYNPtL8VKZ7OSHB\niWp8rywHmiwm/h3uw+DFRjzjgpwDiagNoro0uirn6y8Sy3sNpqOcwgJ8Jeci\nlopQlNJAg6CCW+lMS2XZCfcqO/fE5h9jGH+H74G/qjs/bDJ68p9wwjIFDQxi\n3UqnqHgDrUR12gvoKQnwR/X08ctQzccbUBzY9cfidTfisLNasTgNa+sthkKX\nn/xL\r\n=J6l6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPNLJkR259gsbqKNNTA2QZf21ORStaNfhXV6E4j5Di7AIgNmiBA1i7ZACNFZsSnIkXGiU6BMCbTmYc4LEHMsc8ORg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608551757-488574eb.0_1608551897667_0.8306352930063288"},"_hasShrinkwrap":false},"2.33.5-next-1608553542-f0652012.0":{"name":"@xdn/core","version":"2.33.5-next-1608553542-f0652012.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608553542-f0652012.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-sfK7xf7XxDFEbSTHEskQ/pLEHJqJ4qFql8xt/04Kzr3ps5R6o9Y0tu1YYHRtViMk+DmeGbRPoDOk4Z8Q+zQIVw==","shasum":"bb11c46935cce7c105d1674e3ad4e605f2f921e6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608553542-f0652012.0.tgz","fileCount":171,"unpackedSize":655635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4JS5CRA9TVsSAnZWagAAUXsP/3L0ZvcrbB2y6IdU8LrW\nAqOd4QF3Qscx2GUYS9srYPDsAyITbqAuy3BOiZWprJAQImFT66EAuOZ8inGA\na5te/SU8EWEMK6o//aGPTJEFaHXACLA5U/zq51a0SlI+BIjxYPtI/pwrb2Wm\nyG235fr4cKxQFo8A2xv/4lXT+E9dBogdcqABdnPDE1l4mAGsYao2XeX+zQqf\ni7LkSYi3LdM6JrS0F1xjWU2WI2XRYyEb5W0dp3xOY1Co7nijQ5kcTph/+bu1\namqHRBmkAzWBacgq4/Pj3/tXobSGrQkbIM9Ega3SiHp6kXogZLL3ybEwQjvi\nbtcqdPzlWPu+opzb3TnYVRXoXsoXRmDGFq2iO/u7mnXTO4pg9wkVwd1T++1E\nqB+3bJzO5bJMZPQyOf37HVi4eOrtdK7pau+Ws3Q9z87gt4N/dCnpYowyYShe\nXmhxmWIir6onIZ2YMMDTxCC5p+RbwPhfzhML4Rm8fvNzkLFTFr4OeVVcEI3i\n31d/3eXP2Yi2PccjSRdWfWtrzxxus4BrJzVZ+NoT3MPzYYh18DaUdHwXOqo5\n0q6FjFRVCHc2KBr4gWqLAhRV6IzoNU0hr+Yrlz03nlg+deZ92eHBeK1Nzgja\nDTAelmBLPjjzubjs86U9DlyYl65IUWiiaBxf1blt3u8fdKv/qDl3cwUf5xBc\nnzur\r\n=cK6n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEdDGhgoP/61ZHPS8WksxdIQIeS1Yx9FNWYxuCoKHNkqAiEA9eMxN2Zriz1FnT5m1YrOrNkVt8Bu81rhS3u6kb0AgTM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608553542-f0652012.0_1608553656572_0.037457401212482644"},"_hasShrinkwrap":false},"2.33.5-next-1608554053-c16a8c82.0":{"name":"@xdn/core","version":"2.33.5-next-1608554053-c16a8c82.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608554053-c16a8c82.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-U86z+DkmybequTa5QFmwjtuz2BFHdZXR9m53wy7iIWKhKHXUxmbkEskn3fzCT3GS5rsr41SdNYi8KB09/oetZg==","shasum":"2d2b7b2b9e6db5bf05ff05ecdfe09c9b17f844a1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608554053-c16a8c82.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4JaxCRA9TVsSAnZWagAAaSEQAI0tFHP17ZpL3eqYTKpo\nR7CL+r6YSw0mYvmA4yL+Looto1NvDF2JQWi/k1MWDUDz/Q2IJA1Xc3ljN9qn\nEplJfxLR6FKB7qgRs47V7zJJFenqsucZpVVyoJKRIxaXxtgvlCndIP+zudwF\nQFq45e9A2HVEf35zDM0LZdhg2XBjL2CPSTknBrjOn3BkevbaOfTATZ6Cec4p\nEF8hgWnLuAunJ66nQvWLjxCcpYj9chp42sH4geiFeN8phsrYRp71kf+KvBOl\niAbDzq6oEEzHDQAiN5+JTPhkzwecFpQ79tu4E7qzeN3+G9f1b37LsQ7QwcmC\nighW/KyrDhNRiTt+VK8SOnmt8opWgxmv8Gvz1U+Hv+GzzlPp3gyfE2sOOlp2\nS0iGCNIaH7rM1lU3Pas1Z+EU1cnalIBTJQh2IclYIH5iOxWT1br3gByqr8ay\nEnpvDcyc7cql1GMDDnOGTtZbZgTHadnhKsrhYICsrU+V5EErmFcIDYikmkrB\nFX9T8e/CeCv8ETT/1z1QLiNOsERGSmX0ndqvAUbYOWtJnffVMf6cysBYCGMT\nM/pb01d9zp5XwcL0NaccPavlMAqbM58FJrV171HgImHucPhtAM8ohTUCsGpN\nMm0nU3Q9kLXoaN154kTnhj+N1nfAqhAsrG8P6Uetq987VGJ0nHh3NRLIkzlT\nyCgf\r\n=mfyi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC4KW4gKrqI14+OWjUCk1EQVtVULYM+i3SPulWeCJFecAiEA/ZtvnkBgmpFHKcdFGe3irfMf7O9I6Cnl7vSJwbtuZJw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608554053-c16a8c82.0_1608554160542_0.7669800274673269"},"_hasShrinkwrap":false},"2.33.5-next-1608556530-1e98b508.0":{"name":"@xdn/core","version":"2.33.5-next-1608556530-1e98b508.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608556530-1e98b508.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/BlvmnuqyKikjBtIMjwnS7zeg483myslskhWR+njMpyw4DDGCYX7F6lIV53basQSUhoJU6A6ZV2b11RrbKvcKw==","shasum":"25dac29952a4a95265efc7aec8a9cff40b070a5b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608556530-1e98b508.0.tgz","fileCount":171,"unpackedSize":655635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4KBhCRA9TVsSAnZWagAANS8P/1mBvbVwBPZpIUf3ILoJ\nptTRacaQ2ZT2XfphtAS3+6GGOhhWs8Ict+sgnlqk+Q624yPcb5UlSrCC8Hqr\nYITEMbNNY6zCgCXKJgSZ9Xvh9X1dWyy7KtXkWSK+d05lJb1aqSvGJ0tV/0kH\n9ltdSrlU4Tx+OXiM1Bd6+Q8RyXnlXO+CDTN6Kgr8FPgq7+FmBEwYL+87h7dF\nbWF+8JnKAtzq5kOIh2sw1a0iXR8lEUL/Txc4bZDmf7Zajz4USBxh2DEXmOy1\nGHG2FiztwBHiJaiGHol9wkL3wM+yunT0Frgtcfa3PpeBDOh8ClQwytckHmWM\nbVgAKc9OIn0WoYoyqCOLaShgsS5+HQpt8N6oKb0YYE8eQ1TBfLNRtMQlMNst\nAZxaWi6WibGshor7sh59I+59U8/vdWbJv0ylEr9Er21gV7hFdxrz5k5viHJ9\nz+2j9zqOvwBd798G+MoYR6jzYolqTDrlKl7NIGyerSnvnPszhhYmtBS6jD6t\nod9MZntOSiia11WFpQhD/NDmFliNg3oQiMbk2ZQADyelqgegF1So6JTKNkze\nPq3d8fXj0v3ERVIGOFJxGbyPG9zYdfTiWdcQOKXvHAiMSMAz/kaRNmUyGmjt\nta/Fdb+I5f4Gtzcv2c3rhv/bRdLD+Jy9YEFRXKgCRnwE0vCvrJ3bgztvWCBh\nVjWb\r\n=KX+m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNfpJ9z9doxMZfyGjh/0FS7f79BR3Z2wH8DT+0abtzhAIhAOV/BEDui+H6dEvzrrZr2i144dtb9xOinYF2VwJXE5vd"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608556530-1e98b508.0_1608556640792_0.12903868815200492"},"_hasShrinkwrap":false},"2.33.5-next-1608556692-5426d52e.0":{"name":"@xdn/core","version":"2.33.5-next-1608556692-5426d52e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608556692-5426d52e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FkZ6u1zqz2YdXlq/Y/Eo8+zxE7mVKmW3cir8Nvd+v7DJFy6mXEanpm9iF+6ahL5cNLWHOxOVGRFQuE8frQqRVg==","shasum":"0ef7ab71e8f89741c40eb33ab482a9944210181b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608556692-5426d52e.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4KEFCRA9TVsSAnZWagAAurQP/3xpPPMUuGGFJOs7WkbR\n48vJcTbZ3OQfbil3LX6MEurPT52A1qW815Qs8QA6u+bsnVN/VAO/brtMVAlw\npXMXP2zibJcdbX5nPR1ou9JDQSysprKniSFGdmRR4AQlKnBZR70fWYjQndEB\nR/jTw46b4YdElEyhspwf88dk/xIy2ftCpUZQhOc+2EEKjoINHJONOSKx+Q3J\nkY/Xs9c0kGMjzrTLcVmsCaEVs0p5SAVuPL0UuY4etzANXWIjhshRcRpVhJ77\ngnW0hYAep6SZe6B1nHiqxI3fQP5ADcuWH7o0k/5JfVHVI21pwdhsZDU//LOK\nEWJtKtrnvRLiCpuWIYEwcKxoUCbZVot/XNPzqsi0Fs65CNCDVQiqAvC8e/7i\nItRMlYCcnlhWKPRn8O/8KmhZymuEZUVc2PA9FvxZwzhSQ5R3VrskN5hOXDp7\njsxxhhFDEp9KkzEi0MAMZwtuh6XoFYNtK3d4Bh73eqnptc7WUznLHNlEQyUx\nD983Fcs98cKw4gUjlp4fdH6pGeEbLCfcBZGVDWqcLikWNuIAhwS+td0oZ0Lm\nuvzKgjrdzpxDNaAQmneN7iBkxwtTpBlzoi+yuLU1gacA3qbixeXFTW2ppnkW\nQlJjVXaGrtMrxHNNeC6xGwvspVLOvgrc46h5PSl/OvvEqZhLmNNT2wcTl2vq\nRZMd\r\n=VA7i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCH34dpBenIH76DXyRM9WJusGjPCbZFjHubhD9RpVGZk8CIC238jVS+GgLqXC3jl4xZIBJlu68eggLPGcq1tlb2Rs6"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608556692-5426d52e.0_1608556805253_0.4482954944338333"},"_hasShrinkwrap":false},"2.33.5-next-1608556727-0ed5e217.0":{"name":"@xdn/core","version":"2.33.5-next-1608556727-0ed5e217.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608556727-0ed5e217.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-pJMzNVAP44bs5RDyHiUXawsPPKSAeDolP/rYphhAoRfvwhwLp2dMw4rS8vOOwAvog0AuaM6o0X1TXL/G/VOJfw==","shasum":"fff7a592df8ded1e0ea40a4434f013289970e328","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608556727-0ed5e217.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4KE2CRA9TVsSAnZWagAAujgP/071zBpQxdloy4oZn8UK\nCc/BQAOwxIIMeG81IZCxGFd8qIQb8e1DWRnxJSOuJNi5Ek1NIqWWLkwrmcUe\nwdshXIgH44Ywl3h5f4VuqJ7/qIUMxxf+vcNxgJFnWFW2j5TxXrwgWt+9XWNc\nKYzptUI8oyQKuvoHMBX/wt8I31U/mL6OmZ2ihSHOMSRrpDTvkQERqd/Foj5E\nBeLQJxH/fEQXpeTTQvmDdC21fq8WrmGqX1H6lSr1KC7s/9UC3/laYnqtTtGp\nDcaFuASaNJRPEa2gBJUq1/VMDWtNINY2yIhwB/Fii49XxzICQktffTjYVBMh\nRBJIWawy5nAFRtuFrtBSh8OO4DuAB1WPFcYmSVo3vUA8MBpD4ycnmQpLIsSO\nd96hcvB6JenXX/UEBmWj4xrFWD/3me5R1fZIFYseEH1DDr/x0WpLKcqHGSxQ\nQAsTLhPYEpEVOJ4u2I3oFkoeIkfpOTqy41k5oexzHHzRAH8xFTYHAGOoJJ2y\nh/E0HttzlVq7FmXtfReMliJlD5bKZwNu91Rot1HNkOQgdZF0qQDfGa4mOAPv\n9eeqm70+8V0lpg3L/eKQlaCwKU3ObD3Ywkx26z6naH380ZHbBte+8N+kGpvs\ngVmu1mOT7ruExhCkGlxYbYQdYK6xUKjbmWon5HX4lysJzOdeF5EMVdZwj2Xy\nESMl\r\n=X5Sx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfWzN0bulwpaGep3V6TDzWYUeFEQmoNu44hy6cXdT/AAIhAKWNUkoBOdXmj4kHnZmTqir5fgAcGpa8Erb5UboIpLyP"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608556727-0ed5e217.0_1608556854247_0.8271704491371017"},"_hasShrinkwrap":false},"2.33.5-next-1608556768-3c5ab2c2.0":{"name":"@xdn/core","version":"2.33.5-next-1608556768-3c5ab2c2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.33.5-next-1608556768-3c5ab2c2.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ez6i37e+giQf8PmV3IN+vewsy8V8i0KGhbRFJx4wIf2nwsYHMqwNBYem1DfcE7aSvkGA3QkxjsX/ym+U7Bm2Cg==","shasum":"fbfb03334a5aa422900ae8d24fa43805cbb4fbbe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.33.5-next-1608556768-3c5ab2c2.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4KFkCRA9TVsSAnZWagAAdhQP/RhGzwmX+EKHrPrU/eXq\n01RvRN6X8ju0X9yJBKPGwu7ql9YMBFDfrm87CWFbeMcgHsFlcPXsnQ1MSQVL\nxCbxmOkH9zurdjSEqHgRNZN64K2FJRH6evV/iciYNvlUqkdlr/JOpyNaHWU8\nsHdVkG8MQEJd1VnGhLQmpsfTGY4+qDP9LoiEpnFdgUnE6MTiuzYKsVycHcWp\nkLEz3rx/BXjK/zwU9Wg086Df1PnQIzSL2jTMB4Y/kX2JUETJF2C4/OePovXI\nSEKy4fzaXm507GFU4rcdPaKOONPmX6flR0LL5wawcE1ZypnzSmXUPuQpiFdU\nSUZV9S7n6sAqvJhgFZ46f1O5pOCBKrLJmBHHN4POb2SOtWwASAKj/eoRqTPM\nIICVOQQvUt427l4T63Hb/RoRzgHTeRL60ulr8IIj8U9t7RHklxk3B7bRODAS\nY/M+mX3N06v8B5aZvGBUTOTXhn38grJl7yc8JGN2qYN8BDDuZgRlUTTY8oaL\nFuCtCMtKHjiAm0cvyxZK/MBLTrWU7RheT1Q2RyfBjUMv/ytRBg9O1NTsbDEh\n2bLpJOJvNztb31g353l8/XB5UbRL82mPAelV+EyhAH0BrNNit7O7O2F1Ov3s\nSMz/plGRTtFayuoBpbwFQ20tmB0ZSXoVaXDjuQOPhgny2KPTjLg05+/ORs5g\n9C/e\r\n=I2yp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGOpxQOWA7yem5Vv94vwoqdX9PWwg6DkrXnbeSOGAVuQIhAN1LNzEfpjTDPACHDBB3lU88OaoRUHBPyE3W8Rb/j1Tk"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.33.5-next-1608556768-3c5ab2c2.0_1608556899554_0.7515860006397439"},"_hasShrinkwrap":false},"2.34.1-next-1608557236-7eb01b4b.0":{"name":"@xdn/core","version":"2.34.1-next-1608557236-7eb01b4b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.1-next-1608557236-7eb01b4b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-F8XVoq1puR/zkTW94/30UtPzRErINXyrGDfBNiS6PVTT8RMDDn5gGHzuhFWZIQnlOlkBfMtLqkjW0KNKaO/VWQ==","shasum":"cad9fca7e49ec34d0f8900b8e58e349616691849","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.1-next-1608557236-7eb01b4b.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4KMiCRA9TVsSAnZWagAAmLQQAI1bMPX/zcQH22HPJiRX\nVlr8ejcJLFE8Hb7qAKrNc/9TA+/PrROqeSrfg1wxQ+Pb/b3NSU14QzyT0Ljf\nHhp9TPiUQrHqc7ZY7M+0I+q8T4HhiEr8qwb6g8P8M02ZmKUtPAXoWVrPEe+d\n9YzTuQT8tkpMJge+8WXeoBktfUzZFp6npGEJSZT6zfTZTxdhj4nTbwwcbDFs\nVWHfZaXvgfwxpcObBioJdlZdvMN04nh2b/V5jyg1bxLpEhtnrWIJs/D38wm+\nymO2eji1MjX5y0OBh/7dgXak/n5dKns/R9V0Tm2pVU4vQFgDAan+CuRggQCb\nuS0BYc6QqluNFPFLWqwVeureHtsPIPBKB1/fmpFFKQI0Sf4zc0n7VQiAbKfV\ntn9MuUz0Le1uMrytRlfzInXP9LbfuTwxGlymLNdhrDU96URgCaMzfqE/FVmX\ndy5kzDK9R46+SLakHn71uhwSyLQYmh1LiyqQt/+0nrl4VNPnbLbbOh2RaFpn\nCxwQNO3Hz1xsHGUe1vpQumsk6QFkC/HlLwTvrz/znkIQFj8gysDMsNot7GId\nZK7r6gg2OtGLfqmhn/S70hFA72WkOKHdiTUCdzwJiuafTKu4uzUJ1E+mK3J6\nvfiVnIN0dtyKm01cISY8uLfD035OIfFJQQpZrIp7sA0VtG4NQTkK7O0MEVyA\n+Rqg\r\n=7XhR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDm783t7MXeatU+EPU5Bxh6IxBzCfVqIOZXn2Ti7qjyCgIgc10+l4bZAABMMNeoNehLbdkdZQxSht13ezIHLJ0orMk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.1-next-1608557236-7eb01b4b.0_1608557345578_0.3480542801430997"},"_hasShrinkwrap":false},"2.34.1-next-1608557252-604a0597.0":{"name":"@xdn/core","version":"2.34.1-next-1608557252-604a0597.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.1-next-1608557252-604a0597.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-scPxahsgGCImMcWbRp0V8aAXErunYPilqZ7L53n0uE1Dz1wYU1eTBzu15KLMle2pfH4heyFa+CpUbiDfK33WHw==","shasum":"4631743166741e24a498cc6e2a07abeed2d3ae35","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.1-next-1608557252-604a0597.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4KNFCRA9TVsSAnZWagAAFNMQAJTP6jdAbOsMPgCjrNxM\nB9vRt8c0sRYwIBv06TPp/1DrEJ245ESH36M6wzjB398xQuO90kVqaC8+8NW8\n979JqrOah5tn6BpKQEYRuxBrUq5jAHHWsXooRprnukwhhK+6gABjQHIdPguZ\nIi17gSSM8vUztPUzOurWzOVKv2vJ3uWmPibxoYGSmzhTlfGP4vDufMPFGkkf\nCN1C8KBoMdZp0X05+Y+PvFtinYFPEVMt1ylMf/FXgd4B8O/ajCaWZ43fXwrL\nTqXtwkwSNiVWlIZaFnmSD4pesr3ScY70Av62k1HYnvkwZk9Sbs20hTbUKizt\ntVIRsHnGRZqhwhdxJPPOFNNp/5Hc3YKsaNhiLXJjXjgpaQq3u44C+AyDkxkp\n9bRRDUJKMwDZsTDUZhJ6eD0w/TvzFUqZor2sdkxmMqloQDAvG5MKDeVwQLSr\nO7L+ONnHEdrxbuDHE9pmh9SHd3Oexfb+ZWtXxUx37BuYNaDnqByX/wwY3hiK\nEn25rIjwHB2l+/bb+bO0qlFa6ME+V05B+NSwDZc1f2n78Ny6xemTZDKaEr6F\nf3Zq43dj43b3YuVntf7DAc2B/BAZE4wuy2T6l00jELLtpa/1Cje7Dc1aiSE7\nSEI88m5PDyHcrr3OR0LXbsmtDHAHpUmgv7SwJvCMuLVVY8Chh1K8c/PRBGcJ\nVJjJ\r\n=Mhq7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlV4TzT4C6jIIvNVVbcgl66WUjZzo99yxo/aiB4bLxFAIhAKa/dUMNfRdWDD1KaocMoeLaYa/Z/LrsNRiImZEg1yKy"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.1-next-1608557252-604a0597.0_1608557380620_0.18672991092521363"},"_hasShrinkwrap":false},"2.34.0":{"name":"@xdn/core","version":"2.34.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OC9zpAtcPwKf6uuPj5U9eh2YfBNGXmhIdlaYDupR52Grkku6jTXbSnO0upwJ0iM94CdhDkFRpqJE1wUOsw+2HA==","shasum":"ef24258b787c76bfdd659ee2b2d1f2d3a2bc9f72","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.0.tgz","fileCount":169,"unpackedSize":667817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4KPrCRA9TVsSAnZWagAAvQsQAJC0WT/LPMn0z2p3LNpk\njsRg53zpf33/rgkIM31af65DYg2RkokRMvMutHf3bJ3e+do2GgpmKH3SWkpo\nq+s1eE4HE4q5x5GBycyfd42/x2f2bVmCr5CFpbeRL3kh01GJ1cSlxkWmIEgO\nAa80PpBi4C5F+eN2oIbB2wuDxntGCrM5PN/To35eBiybYho+baVcNvhJlvhl\n37v/ooPbXH22KpA7NowDXkcmSAqaBZYpOb7y87Cg3Uo9SGgY1hSIrON3HCkZ\n7VnzBR+PHgX+UtDbkdfM02Mxvb5fc0eE8U2uyBvQyY+w7wgdj2Cjkn//DnD6\nd5qdwoK4jp4OHkk5ptqPn5JnA5okQH8Mzj0/HC938elsSe3VlLN6m0Z0ZXWn\nQ3kAQ+jM6LrMUAIGklm1RxFNpDfDbMZUm14Goh/DR9qluS+GtKLxMqaWZLBr\nKrUro0J2z0wTb9VCizW1O13oWGVC+td7AHow30V3PdhXOD5bE0yo5gNycCiX\n3OhCEo8yBIy1R8dRD/W3C3Hqgmjv4e0fLhrhSqi/DR9C9G+GhFgljib5XepN\n8cpIc1VQ7TM4FOFmW1kZKi6byYkMtVQ0FcYMV5zhTpOjdNKBZhx4o+YyrH4v\njebeskjKqTcEo7unFPpudH6nndkXJTINJycjrkM8X+4VIwYl67X+gExcqzgZ\nwVQv\r\n=5n84\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF4BCrrJzlnOau+KFb4Z6c0JeBWdhxaCij3eMMUyGUrsAiEA7ILzzm2SdR2Q+XX838P/PusfDWN8i3ks7BRqEpc96Ls="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.0_1608557546771_0.47951735160189757"},"_hasShrinkwrap":false},"2.34.1-next-1608567275-604a0597.0":{"name":"@xdn/core","version":"2.34.1-next-1608567275-604a0597.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.1-next-1608567275-604a0597.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kvMWbF00Szwu6eFj0+HHJ2pBhQyBWJwPu1+zWo1vyThYZmq1wrqadQGd4+iGEoholn7vUHGez0Bhy6qz2ZNBZA==","shasum":"f7a5b3eb3f6ab74712d539219a9df584d8b7ef14","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.1-next-1608567275-604a0597.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4MpiCRA9TVsSAnZWagAA96sP/3oEDkYqjSe0DHe0jasX\nbeTdZrDvF4xCGegwxF/DCZaI0RwxYVtwaKP+a+b2dndl3CpFNwgqgwBDFwtm\nMXwzMmOa7OcVtdY92sVLdHW/G6NCriPtfOHI4JcI/TFCZEWbBcfBAzhEiMBW\n+OQpGhAO+4qj2xEd6WAk861pdnGHHk8uYl8pK9dTYYbtkbJVKil0RFPqiWGy\nbMxnSeyswc3TWGDbyZsRILxo9CRtikXLD9WS0FP6C6+XYdUiWFQH6AcUoOrh\nlxl+4qIyhXkmogzAz+q+WP3q6CNz5y2veZ1D0vhmnNE+ajiNM2ol9ngCgCVk\nta3uz+4D7RJl+uTZEcylFkHxtN+ySyX3lAEqi5MqyuHKPhyCRNQyUzPnWSMS\nyzEExMoGpsstzW7BFIyZh4JQu/oKUaO1QkwuMekBul10ttjbK9HmeW5LWZR+\nkDFVsZ12RW+pHqBUW3ENYSJZ5Uzc+Lp3ZovuCVUgFJuD+4MbmQ7m6vI30IPB\nTILop4blOwpbl7pvIC2X5pdauHFQSPbvBLlBk/ih2RZIYjSfjarmSu3yfDij\ne7F2nK2apmtn2//lJt45A1wAH6MeGDRZsRzrdM/nEItUDQMmpit5LUrCO4C1\nEWqz6knFABWXx3FqwwKB+77T9lz3IWKci9SHIGzSqbjNmfDFOoESuHdrduvg\n8dkW\r\n=+tqD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICWTZu6EkzyXQiEh+F67Gpz1HAPnrORFQIsId7BttzQ4AiEA2ih2x9aYPs1JkNBzVVyLTc39X0UA6v20IPPCdumcDKg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.1-next-1608567275-604a0597.0_1608567393603_0.675273719859409"},"_hasShrinkwrap":false},"2.34.1-next-1608567983-da91d7bd.0":{"name":"@xdn/core","version":"2.34.1-next-1608567983-da91d7bd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.1-next-1608567983-da91d7bd.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Y/TWpjuctNjp2iZBaapHlnCZSuGmrzisXVSRe2wThLYqGYlnstbjtr1zVc0D2LmfJvlWBQyDt6nYX9pfSY0jfA==","shasum":"4a6e904ad54e3be3363b46a7f21c4fb5434eaaa9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.1-next-1608567983-da91d7bd.0.tgz","fileCount":169,"unpackedSize":654672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4M07CRA9TVsSAnZWagAAwzIP/2YrYjljMLcgyYrjq4fE\nrNH7irSly5oi8nSH0EKvC1d+MNhWG24MqFjrPb2NZLUIQHLBdDukdJFOm0BH\n0VIrv+3YptNOpwy+0mEg/5ljxLMFlrI2MeI5RzB/9AihKiDZ/QVm5JT6qS9p\nFqwKmyN8TsSAKhf7gaLaQNH/dlPdoYaoldZU1sWKH0qLb6pa0hpkJ2HvWBBW\nLxBKoXZcTM43lX0i5p5nXXarJmFE1qAbvRapQBjmIAjiQIzACyJLX4aG6TQx\n3pq4QxOjPhr1kZJjskSuTlDdQBoexk1Bjyi/INQRcwMzelONiPExjTjhkGHh\n11z7BYhdXvlag58DufSfZBMeEcyvLKmDaaV0JELXq+xIuohSNYpFhwcNd75T\nwV5b+STNhxMRDNPDAgrWyP/i/eis1/ZC4n/UQsed1KIUGZEm12S+nGYb0HE1\nV8TYtELZdbnDGweEl+dUOLNoWAR/jSEEK1SArtE8NkeFe2Enp4++deI4pUwx\nj1x9BPg6Nyw9YWr2Ib18E/e5S/NaTfdRRcT8EqspNUOaIENwgcUsxEzUyFS+\n5n9Qn5y0MuvVWR3ak3VHokCp7PMJ9zMeAZHLrRR+1gWUb5vqSW8ssHEqW3iV\nZKwJkmo10NWf1ZSA/fwXKC2nO0yU9YYRhhKM/faNRas0LkHGbk07SalOLxf8\nhj38\r\n=dUNi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFPwzjHqAN3KkZNcdPIOZ5BRpmqF22clYREqLh6NgmlEAiEAvUSaxxIGl/5tuYODD/mLnsXe5zMswxA/22rDrtlNNcs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.1-next-1608567983-da91d7bd.0_1608568122433_0.3529436433762685"},"_hasShrinkwrap":false},"2.34.1-next-1608574672-96b6a2d1.0":{"name":"@xdn/core","version":"2.34.1-next-1608574672-96b6a2d1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.1-next-1608574672-96b6a2d1.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IFVGTB1WsEexgIRwoj0kKcy3QK0XmQSq6WlQhXm6TV/eyFc91GO92sVotf7vtJmaHIvKsPiCycYAwcUo4Tq64A==","shasum":"e5d0ee7d8347fa7cc48d1a4bff4d9fc1053b77f4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.1-next-1608574672-96b6a2d1.0.tgz","fileCount":169,"unpackedSize":654672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4OdBCRA9TVsSAnZWagAA4QAQAIVe+HecLV/YbLP4W+3f\nQymwE9IIPXgCxELF+I/67Z20jxUB5tQeUxXbeaaLgZbeLn6C33VrdHLkXFW4\nklWCgILFluGSLB55QxCJ3Id91bvQTTm17Z6Rt5FA6D0l1N4cj7yjA3G3H8hl\n5jyZbbs4omAwKM9gNr8VXObl59ecE1klH9xLgSLzzs2kmTtOROq3VSBgBvsG\nzRcRzbO0apoFq7OBEfREwZvrpy0os8XlaW2cwzyySm20wynKCccAb9y6IXZP\nLSIqrlnvhOxeNILND0bD1PNbbxlTX4bx6/NqVzk4ip3W7QYTsNuLPV2AjvH/\ncCQLf2uKsIjWFFBcFv+ctBlzlXS5oIdyR0M9HdjSfBzRaKT4UiiRtFVuRUic\n1h5CKk26bixZ+vBxwg/gblyVPw8Mn0lD9PB0Neqe9m4lOITBDJjnevMV8hmv\nAbROjNxrIBsgTQ9stcapuGv2XQjR1xyhUZt77X1jqd3JYI951SRIflN94UwQ\nLXeEw7qBWdF6JWfcO76cgKAhcoPrsZo0qd3M1o1ai1jMdPAW3+bYCvlOlIDR\nitiRbHL+DvH0qqnKWKnSZ1bWCW41MsfMdAC65phU4Q3Ec5+Mt+rtoryrjgdI\nXSY1wXTk3c+M713sCvjsDrA5QaRVkMiipYjqIT890F5Er0yX3vUS4M5BhVQu\nI5p6\r\n=RXTP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8zR1gofn99ym0OtvnzJRXWHQluxz93SZZuSlYB2hz9gIgKhaHX9XlYY9/Ei390Slv5eEB8ipT+Gsv6PNhdNn8r2E="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.1-next-1608574672-96b6a2d1.0_1608574784226_0.077708507920766"},"_hasShrinkwrap":false},"2.34.1-next-1608574978-80b9a077.0":{"name":"@xdn/core","version":"2.34.1-next-1608574978-80b9a077.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.1-next-1608574978-80b9a077.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6AUOlC2iuEHsR+e00AYBXKb5495cQM4nT9oVeSC5srUurnxjZ4YNtyMpGppIYCvGiqh469xaWtJPRpYSWu2e0g==","shasum":"c41a5677abccffdbb826f40c07113bf320e6a8f7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.1-next-1608574978-80b9a077.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4Oh+CRA9TVsSAnZWagAA8XEP/iytQtjQr/CUF4cNSECD\nEzI0JUeIrzlWDB6nmOutHotWesx9+ahdOBHo/bzRvyO3+ugmxQIhJdoj/8Fo\n3LeYeKRRpTdzWUtKJ4k9ODeYLO2FZx66mQYgqGMJf3kk680NLTa8by6xnelj\nHnH7q4bdr7acJU/EDip2lR8AjeEJNZiTsk+XbByotNYygxH4qRY/JzkUL0L6\n2OCVahqPEo1tzqjW8w3JEtj/Mc1ogA99nkVTvYq10wHRnm84a8X/vbwN19hi\nh9ibpmU+GMcZDXHomt2LTXUzybP7meXQrBDyZXfnE0pqAucs+o4XCgn9bp3Q\nxDiY5gybEPu8WUymbCgt/uVEJit+x1ZTfN1xnjPtmnj1sY/jISyHrw9Ys7c9\n4K0JDjKmmcMQRbJZb3ui+XgockcEAQZKy2q+jr5Wj2guRdCB0POIgXrqN2uH\niGolJ2hqEbeSo1i//yUpiNsiVIAvReBTEiFWChitbDR65FMzLwXwo33HLx96\n9EcUHrUnNgHEKkPYt6J8WIOFmJovVwqp1l31zx59eTg5fpi4oB/vNm3KOlYw\nXfn4+Ahwdwdl5VPPtet+VTGjh4grB5kV+dkZAyUM5oJFMBJizUbASfzwwj9z\nR9oDw55U8VPzAf7T2GcJX0w5cr7JuK0oOEQy1ei2Ne1we0Ue8tC7d1yll9OU\nxU4I\r\n=ClIK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIApGGTJYEqb76r49dsBhHmksSX2MNxwTnIdsRxaw7uYnAiEAzt0xR04RCAmOEjf8LgG2nZr9sQPT+iLko1lnN9pKoWc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.1-next-1608574978-80b9a077.0_1608575102324_0.41116161751418656"},"_hasShrinkwrap":false},"2.34.2-next-1608577558-7f068e8c.0":{"name":"@xdn/core","version":"2.34.2-next-1608577558-7f068e8c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.2-next-1608577558-7f068e8c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0vyeC8ItilwWrNA2KWerzYZfRYEBTy3twSdbRDv/t7VC8qpT21rIRddZeoNwk3aJKaGIXOQVwGxik002/tulyg==","shasum":"30af7edf3a8bbdaeacc1a37c8f1604e2bd12f768","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.2-next-1608577558-7f068e8c.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4PKXCRA9TVsSAnZWagAA1iEQAI2YTJhkYjnaUCdDC9Od\nm4zvRpJa0BU25NYEO56K8Ds0rDgjutCFf2xffehhsTTNr1fJUXgtWsUuNnk3\n+0XMZcVSXnX/xswal15is2T6e02dBOIMwFrYTycQpMw8gjKwxzw4PjGy+o2c\npBigV0iIZ5UtkC4mmYxr6bYPxR3jPC/2yjUd3RIPHA1XQAEVA9+5xa9CmAuU\nsH5tBkrRrwbxGDEno33L7OHOBdJnF/QSaMfZOWYc2Xmx6DAs5whMGLmvCsI0\ncLaQVqqc6rD+9zxs3Py7TKAV2uNrgt0TZD/ps9v6acR23SeAYCyYetRxL0pM\nNjYX2l+gpMSs/uK6CbX4twccGXOxoudMS/J5R8b6vjHKP5FECm61HxVNfjyN\ntbQ/Ydkj8i07EJib/Dv+JaUMYhjhPnmGX/KbefXIFCNpOqVBvEbeZTKmLV+/\nwXmIAiYEh60vl+AZib3YVrP/lMn6pFSPe2q77ed93mLrq0Taj2V2wZ2cVQi7\norHPDwUp89b31jaZRBkdjmeqp9E5AABPax39roAcX+46o7O7vxnBv4W0SCgc\n9rmI5Cr2Jw55hOl3uROsPdUBGgRRpfqUIXiPJu0rMaXcBymyt69CHj6UKx2r\nDdNRvmlEtcY2bWiYL0H/AaUcSvg+8l2u+YESYJy3NZWKuCQQtUvk1QZQY78N\n03Hq\r\n=zJbf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXplXpLDO2uYASNsZZlj4C92Qe/BqAi/CCpOw/W2CKhwIgVmyi6/ejcpfi2ykKs/iE0BikpnSQutwc4DZtmjFHYBI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.2-next-1608577558-7f068e8c.0_1608577686407_0.9822990379909846"},"_hasShrinkwrap":false},"2.34.2-next-1608579093-7f068e8c.0":{"name":"@xdn/core","version":"2.34.2-next-1608579093-7f068e8c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.2-next-1608579093-7f068e8c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-43bukxVBcnJMw5uCvDVDkEdGSxHJXRC3URslUY6Ige2h2R1Fd0LSfRn+qcYxEhdmua3YWHTULVOlxZonGEl03w==","shasum":"3752513373f9cb3d1455d3e0736f4238f84f69f6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.2-next-1608579093-7f068e8c.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4PiOCRA9TVsSAnZWagAAnZUP/RTj54WsrfUdRe4c+yE1\nq+Eq+MUAz5nVrEx52j/Z8P4rpBa5124uPNG6kfNsfNAs4v0rRfmDRUNyjJBk\niiPSUy8JyyKD2IDV8kHmNBLGyUlCVe1+1L2HlZsu2bsVKhzsAzMfL0VDsPNE\nE+jhTggPZSUUJGtviVg/TLlIvKoVgRbS2PJ2XMZjD2C8000p0LOzfQ/5QWAQ\n7K2TagGS+NU3YCQ5qevEhrMGqQ+bbFv8TPRfe+Ad5UgeKGYHOCvuFZv1kYAN\nmQlsHcG3r3Me+gEiM02yCbXnO8285p6wWL/SHIMxbpeKxEIHDle/YG9bd/Va\nx5n6jHfJTxUAH4y7m1O1gWsJtReinjTbqceTQ+oOIwy9DtfqxozRWzzn4qFv\ndltSAV5Am2UVQ/YZNqkeSVbIPXxr59jLlRiYURgiqfT8rVhgIGKMNC+Dgp2y\n3BfJnbxx9Bwas3WWhl2U86xRljeFA+vYFIOl25XudP2bHhID3BHjvSDMATYK\nvhhPhatRQnc0Xcr175MIv8KfM435+XuWCOM4WC5SvMByXf7S7J2DsT0m1y2I\nPuQB95T2IZdKngqG3OS6u2zzBEkdcqOFL5w76CFVsG9epbHTrrgKASxG8wWc\nJ7hn4EO+zLH6Yspn0MmKJz2ConIQKWHZAKoLIQWiFRk+0TabPyN6ILaSIbIW\nv6PK\r\n=LBrF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH4y2Pd2nZApWdpk0WfrL4xGbF5qOIOFLqtly6SBf2beAiA9tRoVlQVxy2loU3BYmDKek7JzX+BOvGJ24HqcgR/M4w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.2-next-1608579093-7f068e8c.0_1608579213719_0.26790827423435926"},"_hasShrinkwrap":false},"2.34.1":{"name":"@xdn/core","version":"2.34.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.1","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-oaCsrOdFmIjlNKBGHTjqlZx/U4rSzuh/hbYEHIwpENBztoGmDVn8UDpsNZlGdYd4le/pbd0riwgibeF7C+10MQ==","shasum":"5aa9db67b8e7357f2c97f10a781fb6c096f0fb70","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.1.tgz","fileCount":169,"unpackedSize":667817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4P93CRA9TVsSAnZWagAA6GwP/R02UlKA/q6uOX/htiqG\nhWY76yD8GcE9qhnmugd4Lnj9iKN7GncK/ItIO95+DUMY4RHOtKwUHbby4rYX\nyTPzoUTlyppD3ywLb0fcJlc+8QcN7FzdJEAIZ/1HtrcyXu/XanYfVo8QB04g\nvx82npMylOhJylrQMA8TQPgqgh9G09zz2+GDbEjoutOg2kY4w5UbRi/14x6v\na60QXMNbrXgeEz0XpZqEYLnJrh6Jg9FmRPs2njaZXJWdlwyngvtOI9wUCuo6\n5vZSIamT84ui0cERu1WMZt/QmD39+WTe1zzag+rgqaAXyrF0k4VpMg2087kD\nuE1bg7Gv3FtX9APL5nH8j+jwl9qOSolwQkgO6awg6Yf0dSd+LHljz2e6bpL8\n9ulUl+FfqpOMGInt635jUe/TVyYeS7NK6XkQf9VZ2d9J4J7E4mkRsVo1U84o\n02Djv9+jspLOC7uP6Z3JElcFACIW6++foBxnqg6HgbSucTD/1zm8ZurTldl3\nWm65dV6LjezYi4B9hdqxagjmU2CL6SO6lbN27R1VgxhSA42vKmSMK7gXQCoj\n69ba0mQwzh/ynZm3hkgxJfzZnStYWOfi+STBYbQ28i9mEH6qNhmzMyeM6YFO\nXcohW+J/KGeQgfMH5pl+HPNjeMBaV1kFbrTsiHrc8nOvB9E4GCSwQfCB1RdW\nwssp\r\n=WahB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBKZ2Cm7DP+qeTC106ZsTbuPedsH1jtAaJesy+/bXkURAiBg1RwJmTas1RXh3yhYywdlDWY72toMjWUO96L8uboKDw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.1_1608580982585_0.01885933614602897"},"_hasShrinkwrap":false},"2.34.2-next-1608582524-c27fec12.0":{"name":"@xdn/core","version":"2.34.2-next-1608582524-c27fec12.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.2-next-1608582524-c27fec12.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6piJIOmECfuObJJe4V+ATknTIPWFuuQuDbca7aXGk9BkaBMFP9a7XOa7+dlDEwFiamdkfQ90R+tkhKZ/yoSHDw==","shasum":"0624dc419fbf803e497fbdf9c2c81764f53e7c8f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.2-next-1608582524-c27fec12.0.tgz","fileCount":169,"unpackedSize":669478,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4QXoCRA9TVsSAnZWagAAnioP/2uLu2bEMRU4v5Hg4+kt\noyC6SBWgcBTdqiooYt8jgi3qkRXE8aiOS/kfmogGCOGNLF1oaWVMExecjY4Z\naWtvg9gwNfEQoQJL84POJ3WnxhLRqGLhxijq1TrPAttiGdz5ozmyKLOxj7oi\nlOaEv27eL+YDc6Ijk+rSZqZDn8FGMF4rVS+5P2Vk9eJ1SKCgud5ht+eDMmkA\nGriexqWXgMI4Zm1vZdw2rkb+zQPR3lwKxzQkcVoVw2Kir5I2iDpBV9uWyQ6Q\n+aUK4BWWuX8TgLT3eZkbKvEQBmaLVtNTLYMg+kI0d/9XS3dBeuLFKMC6u0e0\nCXn26aFXjUo6oDa9tq9cPu3b9a/ga1cKWnVxzeGuZ5DOu0PGOVqoTZR1Y28w\n0AqnwsytKPCt32tjvugIKx3GZ48B95j4E8/xKIyvHwXzRtL/wNYbF5lzPs1t\nKIJjjDoH5rIflrTlsbPqS80sgMxpKHiD18yFdWkP2C4f9X0vasEn4XZelfAH\n1T6Fj9KdH201o2b3u1UdVsDXHmpPXJ+J6MhXfdqArHhVt4v+/J9/ymNC88xy\nGoao/N64hdlSk+/kqvYjJx5NHWd39cZSfcbe5Weu1oDMYHWoUKzL8i8ptqSW\nZb6VPBIcFW7sD0nkY5PbZE+SYuy3cKV5qYKc5MDw9XF4jkf62SStQ9eGEA3/\nyyK8\r\n=8khL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG1M/TP5hkfhqrvfIQNfalBDykdrKBZzzcXE483Yd9ivAiEAk7QOB4+SG7pOxe9KMJQ4UVRGWVUgHrUVhq3MFmyg1BA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.2-next-1608582524-c27fec12.0_1608582631495_0.3259350245088928"},"_hasShrinkwrap":false},"2.34.2-next-1608638583-2e360a24.0":{"name":"@xdn/core","version":"2.34.2-next-1608638583-2e360a24.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.2-next-1608638583-2e360a24.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VgQQlESoHbamLQT4w0WYOVeVQZ6UOmbeMig3yRURcvSdF309HpWBy5EXEHHkDDi/vVRGDPkINWo0lDIOPhLe5A==","shasum":"f138802574320181cdf3ad5717963deac6020b1e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.2-next-1608638583-2e360a24.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4eD1CRA9TVsSAnZWagAAZj0P/09Dzs8P4PcJGLhd/qZA\nRWCTrsyi2kB30C86YgiImY6lXjPyfAc/nqa3phj6aUq9jPPgyTIIR0Pc/Uqe\nXAA+aCFEqUMJWuWgBjRXcRme9t694GeVloT/xLvwlxQ/hjwfred0cdsIAO3x\ngtaLV4/NXCzg0qH9ZpiIp64Z0un8gRt7gjzyHLl48V8tJBhyoBTlsc0km/z1\nYV3WQ/2mO7m7gVzODM1jGJrxKxFg6VCLW5tBfny4JICZe62/ji2tbyShaOTq\nH2zfFTXDlA4YnFEw4QSzjvoHvK++e91aTweJKMVhMTIqBBu6P67xI3iELGmK\njRT9emKUXpRqlS1wcDL114W+g8ZIB6Axn7JFJ8o4RQqwMiixtnEfxIjDJRUR\n0clH4OYLa/vqpsqVDQEqmX7vRcVoIhfs64PLtYOVgfELh2WLp02J3K8aKeiL\nQYZSusUmDutAJPrCWB0I7OfnV/iaPbRKMywczZJWCEfCtkmPxiuUKNFnMBcQ\neYMYqp2EXl6oFTowKiKqg3X5B0vq3A68uXKxS7o9bCmP8J1Qgw0ilRIPfP/8\n857+1J8S6cSVo2TcYDmfVWFviu3npetqlWwXloPgpdZNYEXGZjpqSce3z9gz\nGbKrGSuNQu6YwqJnxZPivsoAmtsPQvLy3z/7jBkCWBvNwmbd+k/tn4DX0rBC\nNwgM\r\n=2YtF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDddWVsHqOro36CZ1HM6icre0xMzpzakCbZ8LlbJ060ZgIhANg78gWJaTHMO9MJ//dvE8pKL4EFjSUMmmwP1ThhZABM"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.2-next-1608638583-2e360a24.0_1608638708442_0.4610230441982677"},"_hasShrinkwrap":false},"2.34.1-next-1608638845-b33724ec.0":{"name":"@xdn/core","version":"2.34.1-next-1608638845-b33724ec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.1-next-1608638845-b33724ec.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-0+SuRweOsRrnNlhYj0k7jzPDsCT6JVvoJCJOt3RwRWJ7LB2fIWNOGbTdb/KkscQ2kDWtLzJcS8fVIMoIvkdn7w==","shasum":"f7b15c513171a609a3e90acebdfdc6cb59a3a0fc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.1-next-1608638845-b33724ec.0.tgz","fileCount":170,"unpackedSize":655482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4eHsCRA9TVsSAnZWagAAkJUP/1QWbisaPXpDY8RC6yp9\napx/OUBQ4md5W3IZLeklY1cKhztWrOiG28tlQEqKr4FvBbtHImOxuSZqx4Ff\n/xAYiW0vqkJXqMTsC6xa2pc1syqHb/1+Zf+uwXFx+x/jU9IMJZEvZK+UJ9dF\ntiZfRinyb3Glvw4sviGQBvfcuWugZKiEV3m4/f5rracXMCNRzAsSB3mhVFhg\nph3ooH7D3hUQBBib0TmXce2bLUV52WLJcdDoYTKXk1DsZXHaS0ACtoiOWF0d\ne2voH3x6/gAR9zKPwFWODJsgPPn2Y6RASlUEYg0o3kxxMPBfaj3FnxdbO1/q\n9NmOHTgTT5jPGFJ0o9Cp5O9JIF60wPl+mfgHLdNzmL6I0yzBIPc1yOpCoYHD\nEtXFvkguchz53mjMg8MSPXJESX9Hdcwfg/fb0huSfVRc/qtzrg1y0GvHsDFW\nkr9vVwwHaox2knRF1HNVn1331mAjU7RHe7DMg+nFfYVq0TRlYudF8gb5CPSm\na4/WgQSxA66jbMSYiAhAWpxrDTYD78x9Od7aehViwfiDzpocN5xZ22kAOY2w\n1kBR2R+eTtTlg2pTP8flzPASF1VEBdv+m4XlTYv4Q2XfALPKp7vPtpmjz1q2\n37KDJSnXeVlluR8m4MUN19xexm31+ijJFbs2B7uyl9sHFHLSpSInJf9HAkE+\nMckl\r\n=OW2A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLj1nh+KHzTwZ9ePoammrp6L3x3UGBAGboivT+RSdYIQIhALEQHi5VGucY+96BsEehqd9ihVDgzESBVJwHR76Xzk+5"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.1-next-1608638845-b33724ec.0_1608638955391_0.638443405143843"},"_hasShrinkwrap":false},"2.34.2-next-1608640758-0adb248b.0":{"name":"@xdn/core","version":"2.34.2-next-1608640758-0adb248b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.2-next-1608640758-0adb248b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kozQu+x3c81ulFgVqVPCV3WNEJXEInLKGvHjrRgxo3wBtEo9fNnBKTnHDn3wSzCw1MW0w+ZsHThlrLt/ren/TA==","shasum":"cec41c89d584dad78614b01908b055e88d0030cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.2-next-1608640758-0adb248b.0.tgz","fileCount":169,"unpackedSize":667980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4elgCRA9TVsSAnZWagAAFMsP/1xdQbA5q1+hOWXP3D5B\nzk1vEZeEWKbWWnZKCGW6HM3FEM0rgZn6vBVwbD+xOofALVUUPzXBruiyTV48\nJdDak3eC0Ouo2bzN6vs0wN4UqEDrW+wB7KU2kSX2TSLkNGvw6iQOLu0UYQ6r\nWPEqV9Bkm427Sw37NYyoI+YNbx1DyZoScsKCPInAA63pWtSw65gsFjZLSDGO\nAtuC3KpA0MjqicYe92ocsZ0xlpzIYmt2JaEkxjsAuecTaxwApmbIN/js0FxD\niz8bLR3/HN/141sHD77QqC1P2zI0gGriNMajXYDxh3CMi6qlV0f/BRWDb1pp\ngFt5WuaLZMr/9S9qv9/0thpQwjHZOj6log6ajqwQ5H6tWwjuY/wfnmYO8tni\noaQHLr8kzpaFOUIcBevHZ++9T1n8+Z11MIcjbCRKszLg6cTL6pRS+5EgDhpX\ntjZI3/iQyoYXDvgmnnYivg1KZZ45V2lHCMatUmCzyuU/auw4TKWBydbTZV2s\nc0fOuuQ0ifpY0ISRpLr+fRfCLwND2txWf6BKB3z0TKAAaSvRHnaabqA9tYMm\nxUvTLVoysY7zXsPiR6UdVw5lGC3NEXBZWHJVee9edouE+GKU7u1EGwKYH3i4\nffEdXTh0DCElL3f7XVYYC5SpqtwwTJvp5ygkNKSTHzR0pIsNs08Xu7gu3KA/\nIY7T\r\n=Mv+1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnNBctGtLUOZ2GzjTWvMNcA7uHKdVsrFI3Uhw5Ss06TQIgIXPnscWRmO5ogwHrXXcxJq5PYu1gl8ri1ROuPXVRRDU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.2-next-1608640758-0adb248b.0_1608640863414_0.03847001398685146"},"_hasShrinkwrap":false},"2.34.1-next-1608641834-2d3670a2.0":{"name":"@xdn/core","version":"2.34.1-next-1608641834-2d3670a2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.1-next-1608641834-2d3670a2.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Rnlfyn0t5muxPyqfASNmsHblg6XQn1O8ug5H8hVniMecDpuEyD2z/tTQZvvRrsncji7MvRNCqqu9FpBms2Il4g==","shasum":"758a496ce84a8698db6ded8d4042214d45c62910","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.1-next-1608641834-2d3670a2.0.tgz","fileCount":170,"unpackedSize":655482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4e2XCRA9TVsSAnZWagAAM4kP/0PL1EAAECdQenRFgzm2\nFNHHOFX/tflqrw1rt5/c+2ttEIkf4u4MyOTl4xrmwv+tqoPnzBpgZaPQD1N6\nKaq/mjtIC+K67Xj1D4GLbT0uNxqiuKpEmcRYEuCIfdGjCK3uCum5tsqfrfKW\n8VLfeD5q6mTMa6ZqyM6XKGT0ZoW2D4JV2IdnvmgoZULzCuBO46H7fLpvkcIQ\nPFl7t3EYLpgiblVTsWMfCty05twPPmON085VExRcGnY8wgajczOYqur+/FxW\n92RIm14a8Kg4KQ6NzC2def+gAvivbsaRihRT0amskFasWe6rhOy4jPeNpLqw\n9kTSWjJk8mViXgLN6/9zgnFQ0ED5c3cW9ANSJp/ohM6wxujSr8UHQOLPNgoD\nmN+3pJ7ar5wxkJ8qooG6EiHwpNsAb9TDu9bReFzTMWOi1xGB9vWNioo4WZbg\nKfXv9SOk8wYVQbu0WyhEh72Ex271IzHkijIo5m+y4bzobAtuWmHntnTOtwFR\n8gl9ErmQBUhLUP2GN/Qx4xR/6wwHSqoO2gdZijJj8gMliDsRQsdH1FUomjMq\ngKSd+EDfoTvQA0FwQWUxV/b9rMTw8l2t4ccoz15qPgUEYhWzdaCwKqIAW50F\naObdEItS6ndD+6uGmGya6ALgzUSy0vGMYogXBWM06ixg464G5FIF0yIEfmmd\nYL9e\r\n=l0d+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFjHQnxT9qQloLBzsk72zwrkhqPStA9vMKA6ZiyAOMARAiEA1/D9NdztP23k/E+i9eise8aTgsqk50l62Xk/cmjzQjU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.1-next-1608641834-2d3670a2.0_1608641943150_0.006329318186930388"},"_hasShrinkwrap":false},"2.34.2-next-1608646576-df6ca815.0":{"name":"@xdn/core","version":"2.34.2-next-1608646576-df6ca815.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.2-next-1608646576-df6ca815.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kHtuJurUzjvYfogxByl+vqbMd+uP/5ioMqfeYoP7AGGQ23vHa3STDjSzZBNsmFHImaodOjB4SMjRtDYl098qnA==","shasum":"2aeb504cd46ddce5b09f520b9a2aa66c10df7a03","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.2-next-1608646576-df6ca815.0.tgz","fileCount":169,"unpackedSize":668116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4gAtCRA9TVsSAnZWagAAcHgP/AxfMTFvZDETuOWRP2ib\nPW29xd3GS2VPp8fIlDmoNgOiC5CqkYT06cPYQs1SUPDapq8RiriojCphRT08\npp7uo3s6yLT65AApnx+7YjnjHVD4fId5ZiUy9NdD0JXPYFEMUvi7h/AyY5v+\nQTDRVAevzztrtjJoCVYlfKYY+h2oraAh1Romwmwd30gULL0hKwwCk+bt5QHB\nj8GWgp/GZH2RYLeJ8uA0plqKIL/KI/cFPFdVEplnmTybtWj5KBDuScc6eBvm\ne9cED8iLGNjBaWPVU/jXUlwZiVIveN2hEdKMI2UWZeLieJHLO+CxuA2qa0Xt\nzhCm6hkwlATNBgldQmqumcgbGBmZAbT1oB809Ug1J4m/8XQfCeL/Vpb6xv6e\ndk5bvJHPXjQZDJ9c1GIdRCVW2jSXfEyGyBMKj01GOw0zqRJiibxh+N3Hq3YB\n1i0OddNI8FzG+3a7hDT1zjKIhhH3H/fen7JCtWYlbF0TtbQ0OR/Uy0Qy2D+w\n8bMjY/LuYR+2vzislfUXNOQssyYupyz0910mTQiE1JkakfDPKyhwkDrAbw6m\nle0kL7t/MGcNf/aHkpSMJV+MkQRS2WSBKoXyKZzdqi9WJuDE6Ktidl/BBDWu\nXZWoxIl45CxIm41SOqduvUselROCHkzkAEUUu5lJeAB6sKryLkxILMLEtbwP\nAQOV\r\n=ThlG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6Nnp/u85nNyCfFLzvHlV3ijDfm0H3pKIaBNJJhwd/GAiB43KkpCBiK6D8Oiei4j4qY9EnNQ9dg0bcvGWWUAzVQKQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.2-next-1608646576-df6ca815.0_1608646700923_0.28646817504849387"},"_hasShrinkwrap":false},"2.34.1-next-1608646688-e14b894e.0":{"name":"@xdn/core","version":"2.34.1-next-1608646688-e14b894e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.1-next-1608646688-e14b894e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-x+zKgYOVr17HXw1qOSkRUxrcFsLoqqcpPxroFMjWVgwvl8VmyTB2DnJn64td4OSAxPS2fcWGkUO/HSNSckYVSg==","shasum":"9014d3e21c2a704b3bf332bed718003aadd2c18b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.1-next-1608646688-e14b894e.0.tgz","fileCount":170,"unpackedSize":655482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4gDACRA9TVsSAnZWagAAZYYQAJM09iv5FlJVVGDyJ4Qc\n8EESsIED+eygfVibn/kQ3GifBspmRhNSQglZ/mnm0BsWy9gKIf7TKWHGV0aE\n0OchyG2KlreWakgT53ZtW5dN/Z+Ysbkls00KLlev0//nI4A/O9t2ANIyMZ80\nGh2RHVf6NTjlUPsIx1HbvcyvEWPNlqy/iJXFGfNYpWIVy/VCgMvBq4WEZvz+\n38LOaq/K9AvQkwtMjl5xv3zNBi60s9uL6HcrwhmbivNfsfLehpKb0l6vdNxD\nJhax6LDvagIchJYU1otZNkuaytp3ZN1IxmEyvLaY7ZgMdWMK7gYRng6VEJIi\nlQBTH024xFbOnU30+2sEgR4ZYA0/HJnLsZVD8lrlagWsb1vJ3VlHzrsuQjWk\nE8iePJQSOKkNh8t9U8faBV00dpEO3I299BYKXtAz1cekYkpKQGVRPP/JJ3Ea\n3tJ/pQADrBkrIKKJTwsaJ/ZJghgE3MkS4wjVLZlYoQ5rYle6vZPGxWRIB1I1\n4EGec0879DLvMq2ErQxE7w3Gf14U4xwpG2IdrYMF+0DdgTwNZypcXsFYR1RP\nxuskxADdeyNlaFb1F1MDM8DFEjJ1XzmA2nd3KKnBGYog7iRIIX+W1xfln/DW\nPRedU7que/19m37oEbnwTFqr5uNtawi4U4iaDCdL88sOMY23yS2zTuermtCp\nQ1IC\r\n=5GHD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBlSy+cslO1ety0lLrFa04liYjp6TdOb7xKEFXV5nZp/AiEA/1EOpYjjA0EsfPfKjcodbrRT9mcbK624/LyL5+MxIhk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.1-next-1608646688-e14b894e.0_1608646848295_0.146737601767728"},"_hasShrinkwrap":false},"2.34.2-next-1608647696-c605d79d.0":{"name":"@xdn/core","version":"2.34.2-next-1608647696-c605d79d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.2-next-1608647696-c605d79d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bxl83Yh0Ylfj1QzJALMsdaOs9pPbTKN+ziug18tK97etCjbKl547aWDCq65mxI7tfpY+gwTy7cq0Mwdjkn+HmQ==","shasum":"26e3d44a4502c536273f44a9f75c6f8b716a7d8d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.2-next-1608647696-c605d79d.0.tgz","fileCount":169,"unpackedSize":668116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4gSXCRA9TVsSAnZWagAAnCwP/iJ8K+sYoljsoUC4Nyxw\n9BXfvon5tNcqKeA7BoJQ6cZTE5SeHSlo68D2C2OjpoGxanYCTF2gr31GaCQt\nxuPFZ4t9r8lMxt5Q8n0uUTIMkVcWFTzBu3KnnDKR03M57Nk+EDZpGkK5DBY6\nEk794AuCGPaLR/jT2TTf7fV37I38aUJHNIh2k80z0MGf9xG+3xoKS9wZDYGa\n6FA4Ujl2eKGqEIPbIB0M9rKGKFd9XU00xhpHVovX1PF4KnT3Utluyoo81M/E\nNWu1UZ/pvkK1hfdkzaqCK7qweTYCdOqfFmVZtR+3slO2Ji1RWUYBZkTdj3DY\nZeaLWI5ipyw174VFtjHpX1B5+J+LYdEJrnp2vZQmxcwcKJFBGk3nZZWPtbuo\n3kKLa+vnN0WbkWsMV7uQuN1/9VGGnKB1NaLpPvNc/OqkBhF9Resrhg2xmG7i\nTbijaB1QnvJuR4UVyeChtuuKmOubgNt4oJHPek7ZO2eVpnouCtz4UnLcIj4L\nvopmLBSa68KJ64/pgpcUF2tDXOFP1+8rYqVrGq6+6tRW99cjrIaNWqAAHucC\nCD6m1D7uC5pjtf9L5x72RLqQHqzis+ZP+e+bHZZGLOoW1JOBzNpoPi+LcLGu\nXOqxiD3ZIOXnwYLGwUqV/au5wLHBzAJeuHjGC9BMOg230RXM/+pgdIuI/LMc\nINPQ\r\n=emdd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCR2FgjwyS3ijO2o81rLXcNmhc++xucuqlYu0ZDA0y/5wIhAI/YaLNHBgc4NxWczAkMd3zPV1KneskW5OXdWo+cd9GK"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.2-next-1608647696-c605d79d.0_1608647831319_0.82481952156756"},"_hasShrinkwrap":false},"2.34.3-next-1608655236-63597e3f.0":{"name":"@xdn/core","version":"2.34.3-next-1608655236-63597e3f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.3-next-1608655236-63597e3f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wiQPahrIg8Iy3WkST6wEaNEVOXsygBe8lOris5ioV4DDsDhh1IKV/x33VHva6eFGvyuQTIjo5i1dORIQC7ERGA==","shasum":"1784e1ea605322bb922caf8105106cd2f120541f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.3-next-1608655236-63597e3f.0.tgz","fileCount":169,"unpackedSize":667871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4iHoCRA9TVsSAnZWagAAJTgP/2YXgrUFIdK1euFDb+cL\nA21e2DnwRS8bYLJ7KNtQjDlv/X43n2FoYIuN1XHb8sn0sVdM/x9Z+1y2qvPs\nz49c1/VXJHi4WW57Qy+8mtWnYQ5cu0AH1JtMXdbw1kQHSdqief6gNqizLJgq\nXKos4JdgQ9r3lDs+FH7MLxKdjyBYpiJ8MvGjUbKY4WPCAgIVFJ006z+RNjcX\npDEeeO/c4r84fFQ/y0X7f9pcvaNL/XtVQUBbW0jJYcx+WaI8g5qQw46pprpE\n0g+BFPzdUU62VAbF768wyZNM0J/qvvsyi+f9NuYmhWSbsWQMqVASVF4feTsh\nwL6vQNNHvocME3ieWJZtJccvk6YTOMIu9LtWR51uQdO+iKFtIzbi6WQVKfuc\nEkmZ1Y+3xtvD0R8KXRnTllvb3eZQ/Dm2kaUOQ0AEToXdmucvRtihApgTpPnw\n9VVEhAjlQ5gXRsK52JoA3RoO7sdAmWz6fWHkJm3EtPsyTP/ufUzLjbrHg1T6\n3Zml0zhv0DRZlhkLV6B3pf498LNKPU+0pH8M/2HtJvMxV5GX6a7mMKWsemBa\nEL6ym0+37txphDnAKtewhPF7eYg7/3SN+3TZVqA4Nol+6RcwtSFml5yS0KqT\nrero8LHpkiNvX1Y05Gi9rTEa+ST3LgtT9hZP34BU1SqSNjS0NP2ldbY+ZPG+\nN4Cc\r\n=4Lds\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDgOGZ9OSkvPylRaTYCq3KnwSxWxv/5TGiGMzDdSc8KmAiAhe+53CJntepaMZWvUck2BU72rH7J5MnCXQJrkNlwryg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.3-next-1608655236-63597e3f.0_1608655335780_0.5821574349889811"},"_hasShrinkwrap":false},"2.34.2":{"name":"@xdn/core","version":"2.34.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.2","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-slZTYKUx9y+L44uV9gZ583QUGKRuQ3HOp+IsfP6UNtzCtZEnGnLPEUUckxYLve5gH6jwdAT56dfjNremJzxZrA==","shasum":"0190aecc512f29383326ac8183157570a14c8942","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.2.tgz","fileCount":169,"unpackedSize":667817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4ibWCRA9TVsSAnZWagAAyNMQAIBdRsTtC1DBpBSUacEf\nXrP0Jvy1019C4xC2rWd80+nVmlJCPhXuSSLE+YF7CA+Nw0X1J7FpqaHTdeHo\npTfKb4m/gdkBOIAEwE/3s47x0YQHTmMYjGyWNjBGAv12qFfwzPcEv1LoTuDy\n1ZnT+iQOJIAsM8y99z6nLyDsy5/N53vtVzwFGNvL2klqdnGXS2H2ygpNeCwk\nC/eHjrUbCez7ZNvVNRNE3lixPVzFPMyQkK4/SAOWDgn2MnwrKyfnRD2jDyLs\nWc0c7JzoqlTMVA/2+FCp/SIZlLsQHYfx2n+0A0zzyqdo38W2NkH8hreVl8Bh\nlzKeHbanqYkGwN7/rt9sTxzJcJIeNCRAYTE0bnGvXKt10L2YnrresNUCiZHD\nxp2Oo0MuWCsMxj2wEkkkNXl/f/csODHbTHHSzCZ8s9+xBd6r00THY2OsQ+4r\noyo1lHnq0PGcmis4pX0zqnPt4VLjHgPyEMcu1RMqWpjX9MsQULKpNR4clHtZ\nQU9mmPsKIQrrjbfGHWC3WevPcTYg+8NtjXZtIPr7hHAlC/QKFyoVBr3dDhxK\nwKwpYyN63p5MAogVCHDVmVUEdMExhknwU7Q4xjujn0H7fD8RiotAsJYKhCzY\nRXt/cBF2Edejl3Tn6tCLqGHQlokIIHV/wi4evcadz0vfgJZxFs+CNtZeGkuL\n8lLr\r\n=RuIY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA5bVzsYAsTtAyksjFvWeRI5aNxElEmGRY6pn5lR7q7oAiBUZIF8NmG+FdtbJwYlnyaRvU1mlyFyP6DEpZi96j3FWg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.2_1608656598042_0.2116799566425489"},"_hasShrinkwrap":false},"2.34.3-next-1608657055-e827a337.0":{"name":"@xdn/core","version":"2.34.3-next-1608657055-e827a337.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.3-next-1608657055-e827a337.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-L9/Kv6hrJenJZkBgAZF1pRLXzz3PDQXJEXr5oRMcdyemWnb49hyZ0ASqs3DgQsi2816eyo6icIQnPNJRdU2tgw==","shasum":"b8c88b3cb5b40c9b6ae43193d36c63bebf0b9e74","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.3-next-1608657055-e827a337.0.tgz","fileCount":169,"unpackedSize":654409,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4ikmCRA9TVsSAnZWagAAfgsQAIsI6R+rQuLoagAh1Obz\ngwbgDYuUz5hnV+4dIp/MQ/i9WM4/ANI+VrqSdTy5VeJ2oHeJ7ce6nXtPqHLi\nRqzoCpG1dxXwHORzYta/OguOXx8aeMHh4tNC5TDBQ+JMlgH2BAYjMpUBBjcb\nRRcY/KklEC3K3oScFbK5UfS8/kMSMmzujaadG0vQEXkFtR9Y9EslOBY93fOD\nihH5JeXbbFeOCzE57OwsQXeEPgSKhEfaWAqCifZAl4dSfl/8+VSJDZFXKRad\n02jJ5ZqkJhwGAHKpgAgm0jiPQEM3WQj3vNJZS+q+aABTBYiJTFHQ0IeV8P7z\nkJNPZgKjS+RsGF4n0bxClnVRn+B7exR7mW9aTQmP0ycjZI8MmLJSrXnrF69l\n6OYs29zSUaBMAbDlm4BmQTUuHVLsugCezB9q8/5uSq/QXvxXfNQCsj8zgnRq\n68MB2cObeqrOx3VABq2aeFcuvIYFhh+5NxltOv3dw835bS8Ct6F9E7NC9fHh\n6Pq5b0gIAf8RRar1gLp7K5d4Vm0qBAqxqIMzqnGhYscMAFNNduVNHi8FfW2P\nVMjB3PSosTenNg0FOSKFvOuyGMHKEHMIvzQF4DiscNX7/zxSSlCic/RGqods\nJ6K99N3mFS3w+NZ9UID34JJ0Jaa1koFWisTrXaJgsoHpDleLQ5yG1MCIGDYf\ntBGB\r\n=XnSD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgj82siIzfVOL5g7l3YDTu4U7GKCfmWqAnaHAIfSRs7AIgJf4WDV96SK/HIf2/7PRQPfQg0qgZJGk5GklBG+HALRg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.3-next-1608657055-e827a337.0_1608657190258_0.5166168111895486"},"_hasShrinkwrap":false},"2.34.3-next-1608660816-a74c132b.0":{"name":"@xdn/core","version":"2.34.3-next-1608660816-a74c132b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.3-next-1608660816-a74c132b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-sgjAvmru9Zc1d5LinbnNxv+1TkQkVN/znntAy7lAmBRcmf+DefvKKzUeIAz9SgxiJq2xCtSp69VGO+LhMd4L/A==","shasum":"402cb366615396c09db6198daa837e0e53c276e2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.3-next-1608660816-a74c132b.0.tgz","fileCount":169,"unpackedSize":654409,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4jfRCRA9TVsSAnZWagAAJvMP/i6k6FLM7z9DQ73+iM/K\ndm6pnv/o1bQqr/b1Cjvma2AFgIhsZ78fIP9r7VDFfsvkU/HDs33IE/gDXT00\nGKgrCrkWVrKI1iVXOFpgmISK3UKvUE6xUFpCD++2DrnKee2DBDTg7Gkayy9Z\n2AeFmY9JlMdxgb0/h6yrdoiByo/B5ggBOuYiVtwKL/NxJgEzbwXQFo+IMkPu\nj7u1UYq37+cBS9rgc1th1RAdEQFliZn8gqxreUZBIqur4hOYXwNYAKiiQCcz\nVl8cfYg8CScd5zMS3ZOwq5GNOIQJDFXoKZ7BL9Ukdm8x8xNAUmYSrGb8et0G\n/Rnjt4DiEs9qW0Zyiy/fKOWilCUT4XVG0x5JVEDqWpN4Q9i9+JcTqarDBeNV\nRxEJxaYrcWClX6jA79iij9DcHdFesEPYZH+wsHzveCH0peU+9HEOQ+wFiQWV\n8BejuOBz8sw6q8sj+AC5l1wNGuwb9BsW7BPRKswe9LORKYhGInqKsH7633lv\nE36YBDOjG5EqmV27aiW2bCS+o9s3ercTc6aMTmeUtXhS1mD4nqbWttN8LOS2\nNWAwZ7p4sNDoCTyMGFq5U7ShpIiU8ixAscXoTSfSJdZbvOcHrzTphmDogzbJ\nkwFqeBLeVS0Dljt1M4GvypaCR9avk/RSxwxS1X1mEbsguRuwOWMN3zqVfv0j\ntb4B\r\n=pYZn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSRaif/uhvvvJak/g3mkgrB9iSWGf9rEpxzJng2gBdJQIhAKphFm0ao7uxiMTxip9FghgAmBoo/1qz/Elm6ywkY03F"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.3-next-1608660816-a74c132b.0_1608660944196_0.6375362695276634"},"_hasShrinkwrap":false},"2.34.3-next-1608660895-67834941.0":{"name":"@xdn/core","version":"2.34.3-next-1608660895-67834941.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.3-next-1608660895-67834941.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XVbc4+X3PvsMueRe+AMtY3k5Mfmb0XgNR5r8ro+Ad6b0uOYQeHsidAZSE1IWEiPKZcEVifQaenxglhiCDN6FIw==","shasum":"ec6d489990451da8360a69900f49cea1764c92b6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.3-next-1608660895-67834941.0.tgz","fileCount":169,"unpackedSize":654518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4jgVCRA9TVsSAnZWagAAusoP/jmKS1Yq5k/5bEnpBvUp\nU7aC6kr4QynQ2UkLpdnNYnQvIdPwWuMaQ6ktHjKCuefBjgiUBwdvNLX87TKs\n8d5Vchu9mLn62IvlCE7MyIPfB49a79zvzdPYwHneeAmLOKQOz+zQ9NXCNmx8\ndH/gzRoLnwvU8fLfU8A1gzMcdj7lF+scZKU9V9ePTIm/afGOPLMX5xYGlo0+\n7FbCm1QSW2L72viwCNV78ECqog/nFoRCO7f3h7oiLHFReBXcpyHdNJAzSGpE\nQjrYyAxkto3Np8dPaDW83I/qqHnX20Ywv6LmxnHhXvgFiXkDJ32DLNovjB/O\noC1rDeo8FyHXN3ZIF+Y6z5nEm+sSJ+9VsHE7HEGOEhmRtkjhnDfV+i/Wmil3\n1boK55zRfjkH/YJcE223k2MjEHkvD2GdcUeaDj8xxiIERXQYvtV3a4NEtehC\nNb7kZAniaN9wsjdAlrwf+r+vFYfOgMkuiLDrcF+A+BFkOzPgaN8RYG1gWxZt\nDhv3v++oFWP/3pVkS2J2cGBu+Rk+6cvpP2WbsAS3Bec218/jZYSIIBuN5fV5\nS/pF6y6RwHQ5VM+dGIeGnFWcFbx6APupOx7ZudcGjKbvuVAVsjDayPHvGpiY\neBxaVOKkO5uEzr5lwJrr/LfdjFiFf5BdYKZCTQ7MmCXiMl5bPhFaDdwDuOWe\ne6NZ\r\n=oO7B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICb4YaRiDpm5hJjC09j7Z7cioRNB1TrONufM/5N4p12uAiEAyCfZzESLdW2dN5VVDsZ1OCHzKxoVrdkRjd7FbjvVxBo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.3-next-1608660895-67834941.0_1608661013174_0.05248491208673367"},"_hasShrinkwrap":false},"2.34.3-next-1608661233-7d1655c6.0":{"name":"@xdn/core","version":"2.34.3-next-1608661233-7d1655c6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.3-next-1608661233-7d1655c6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wGqvAmTMHRl6jZjnoFnnhTjizTTuKUapz68Ay+QAvJwzx4+gQtvQudifWCKq38zUyljhXUl5s83f7hVce7tbNQ==","shasum":"8e2e9e7c6c4d19be5bb597247febe9dfc718a20f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.3-next-1608661233-7d1655c6.0.tgz","fileCount":170,"unpackedSize":655328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4jl4CRA9TVsSAnZWagAARWsP/AyVJ+5/eAOwcvcnWX4d\nOgBvgkCFP92bQqc3X1zem9nubhE8Dl8AGOM0O9o9DzD5bEMZTlWotbOF3WCf\ntmm/JorSVODrXkl1cXJ4oKPnVhWubdf5Rh0Gt4X/LcvBCQuqnpNlxSknysR6\nv0iwF5GKzHXMRDy5VjNX8piZ/4fk153wyW5kSa5DcX5OB8w/ZObuCsN+0TjL\ntSga0lFwWQ0uD57Fhbs94iDO/vo1CIhr/xC5u947ajAWJdw/kZ8ylT9P7WF1\nA808u8dMay4c0cyezWHZcKhZaYYkzCMZ2ByCn5YpPtJaM5aaRX7NtOexHtdb\n1xw0hNLx6WLj5HJhfOFUcRJBHDu8GDjLY8N6w7oN+zBjJcRQEZ36qIQSrVJQ\nL0vK2uaf0mMxthuTcCneXoCJoUhXxrAyTDonb79s+eNorVBLy6G2c0cMY/sy\nslDx3oU8ozTta4tQwvgiEYayTu/XJq3QxicfvwyFp6HLWry8m86qq01V+UWA\naeIL7OgulFpTynMd2q5w1N2nwrUIZMXyFoyeDTZaVIEret2ZfQhdfyMmsiq0\nH7bT9ByGzcqi6RXWnGtbxnPGvqycGjyvKsHhkEei4w23Y0Q9353ZDPpqlJYr\nEaqKTxU7t6GM7MxXzhfcIcCwK3WnuC3/o1tyW+mBZaAn/mXDd3Jl4OGAWfin\n/wID\r\n=hTtQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxHjNkZOszSgvj2B7OqH7ZljHh19S1hiQPh3pBkjFYHgIhAOS4wb9qo+mrDuI6BoZ0WVKAPGAB2KRnaXAQH0J5U5KM"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.3-next-1608661233-7d1655c6.0_1608661367800_0.7568400947102156"},"_hasShrinkwrap":false},"2.34.3-next-1608661416-4b69d8a0.0":{"name":"@xdn/core","version":"2.34.3-next-1608661416-4b69d8a0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.3-next-1608661416-4b69d8a0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UriPj62aoISgvB5BiQUsl2NW0qE+6kN2waDUmC629u4cGbxncDpAPO2OwXjaKP9fqvAnQo7V9h/0Ri0a0lVyXw==","shasum":"3ff07cc5592165a2ed54896430b8a3633232ed97","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.3-next-1608661416-4b69d8a0.0.tgz","fileCount":170,"unpackedSize":655328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4jorCRA9TVsSAnZWagAA/44P/jrBKqA1FFGlimqfj94P\nZFxcQYbn9bI2An+SBv/dDrwLt/gm69HodSRQm9+k9xbrX5p4igZ5U/GeBkcX\ngg5w1fH30eIPTVeittgqiMTx2HMRBgv3Ua498C3Tluq5IIV4bJW8r7LUiz8G\nzGexKbJUwF9mbVphZk4a1etQsdZT1RNddZu0oJXVLStYR9jNdEvv7MvMuvO0\nhdRSdaL46W1T0v4qitIHYlJ9t0/Widrol945pBwumJI/KusjYECPvl3DMDfh\njn2NG8RzsBSSDJq/TjdvpiBgPixJXhz1HGC2lm2EPg3yO9wcJSj1Gt2b08NG\nv+iQNM9qE7xi+GIsph3ubbtwJw7ri57yJWg2jg5YclRbmwyNC99STCkAqfEV\n9o/BKEYp3VDpB63qfccnkmIye0XfI9prgRyg2DOvCe1kT5n/uQ3+X7227M6k\nDaqN7A46Mu8IUbTbe0zKZ+a8u4eJAU/Qq74UTkwwVDQDZUy5dTWawa5J3P1x\nFPpRDvF79hT0SdI601d/nlpt0MHyTkJXP00CeiO7A7iBpkA3y4Dgrh8VfZ0g\nwbHf5UQBRqhUQoZTwsAOR6bJ1srMhFGvHFuE5h2CJGQvfo/8gerEyVYtgUBg\npBFgjQMTS2Yx8hVw2nCGDhTviCndgMONlg+h78wKQpp5wcMYhX3XzKf/mQqw\nuh3x\r\n=qNy2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbtR7XaVLGsJtfeSC5ZeHQAorV4qB9HqQR5YQ/xJnYWgIgCnvIE/RzQw5fD0YIgEPxSpo2RO/8Fadah9YN5ilft9U="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.3-next-1608661416-4b69d8a0.0_1608661546508_0.1765216799153424"},"_hasShrinkwrap":false},"2.34.3-next-1608661567-22de7542.0":{"name":"@xdn/core","version":"2.34.3-next-1608661567-22de7542.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.3-next-1608661567-22de7542.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-sn7RgPN3/Yov3Ie8sFNW9NaS1Do4tGiGB1b43CSv64jHcotzkPiwcf5SJkLkWA+qAoC9Aduko682rxCuvDb6gg==","shasum":"34fc7f4af6c4dd678e69b2232f78aa712a8dbdff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.3-next-1608661567-22de7542.0.tgz","fileCount":169,"unpackedSize":654763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4jrOCRA9TVsSAnZWagAA5y8P+QBYvenz8R2M1x0QKcvJ\nULE7d964GHkGVdk12EXfDxAwgZ7ZcSzV7mkD9J6iU/pPztZKFeQzmzDkkvww\nJBUsb7RBjgzz6MekvQ2wBkN5eQgPWH30e6HjAqh8qg8z959eKgAGC4ClbXPo\nhqchb1Dv/qkbKM9rOUrI1/t0eGTL0rJbr3f3tBD0GtE35oKfpzGDjz03Csjj\ndU5h+Z7u512HF9tgr9MmWjS91n6SEK+9U0kZdNzPfex1busMifUPKeQkcyWl\nE/FiSeiqGZws/W1hsLlBN08ZdEDYlEU0XsMh9P9eYr9aLetewsBElgpSlwb3\nABw86Gi0f1BhE5ekgrDmBNkxeJ9MZxn5A4ePXuBJj4pC0mhxzLSJTv5DRCZi\nhcnWmMELKppX2mmfeE2l17yOfmxfqoVsv2FGn+Mv0Ow/L5C32WShu38kgH2n\nFQS5+e5+YZbceOh/LhEM621W1LEDezH7VVrwskmFsYi7ZgyliVL1CgnCzFZt\n9Y2GHubVY4G0gZIdIwmR+pIVDh5xw3721VTp29S2Dspo3VQFYtcRlQqlQr8a\nyIAKlatZ6aJwSwbEg9Xh5RjVj6edKy+0433QXaDv3wWocrrBFMHywsei4eJp\nmnWiNfIV1RFudhwp4FGhNXFAeu95cd4OEd4/SAmxnkCW5vZ/TtJw+QWL4vwf\ng2cI\r\n=dyXL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlNflw2p2xScUsDcKhVjar+O9wpEJRamdkhdCZZeROmgIgBsqMjK2dAYXrP1KNOTFVgHfFp5tOObeARyL2/4t4QfQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.3-next-1608661567-22de7542.0_1608661709698_0.12781553066093765"},"_hasShrinkwrap":false},"2.34.3-next-1608664432-25bdc688.0":{"name":"@xdn/core","version":"2.34.3-next-1608664432-25bdc688.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.3-next-1608664432-25bdc688.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LSQTEa4tNPbW+WWoOB4YjCQ0JmaGPTcL+pyoZhR3GXbvAulQgQKStXj/OmKzXwBfplvVpLdLPoVNzRoZLNFZdw==","shasum":"6635e5b32ec01f22b96fc2d1f576e3b46e2498f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.3-next-1608664432-25bdc688.0.tgz","fileCount":169,"unpackedSize":654763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4kXvCRA9TVsSAnZWagAA7C4P/jAxL3R8hrik9+3VExIX\n5g+NFHpOTM1VJEZ7ZRYDEHaEExIr8xf8T++reAGyuHZNv7JRzREzIahXFTB/\n2eUrXzGcdiVFFYOL5TbH/2OTt2E/MYD66EmdMavnmZV+QRTtrByqWlb+NVI9\n7Cxg90vFhgCtIwfKqxyrJgfCzlZEUxbJdnCk/TJwRzmxmkqD/uys9wZqIOXh\nwbFwayXy9GREKfQG6zZxXo89kJkO9cqGBijQwC9W0ycQUPQBhsSctcvcmPdQ\nzJx6g2INFx/TcAkMNllKsTCevQRVZFGmaJRy2SraTUHPFnvSq9Mq5HJ3p1ab\ng2zywqxqgfn90aXAT6+Vm6nOknbX+Mtpx5y5us9jnzyt3SMRUtdPSQpWFPGO\nOGJopMBVuGOQj59Z1aaEAot72I/f8H51CzGPnlWQWt4bvZCAapOi1tMVlLJi\nKV4DrV0XylNO32o+NO35vFkzx0O5ntS4w3R5VWNFxJBlSZz+dD2k1bKfwjxn\nUy1df1kGbgf5VI+HteHDEUmiDJc+TGE1YRbIEEGZlsMvvqwlAAuM0GuMWRjr\n5gcmuo1AMLmAw9GNojVrfwv7DNJdooF2Af1bJDKTGYRKmldHIFxZnYGtC85J\nYKUvrM4qJohCqaSJGDzMUwxd1hOKTqIG9Z9IwAbNr+OSZBH39xfxzYXRoEbW\nIetP\r\n=ZWoT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDdpF6SuB2pxnGF6v2v+j9QG9Ujy1Qyle6WlB5PjnNnLAiEAyTh8xD6BUDbL0rToGtpsCUnLymE0xvh31C1cZMGYbVM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.3-next-1608664432-25bdc688.0_1608664558775_0.8153933494059975"},"_hasShrinkwrap":false},"2.34.3-next-1608664547-786beb6a.0":{"name":"@xdn/core","version":"2.34.3-next-1608664547-786beb6a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.34.3-next-1608664547-786beb6a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RYKjDgCRU6NxBBetkmSxI5jrhKDhlNC2JI4WKv0isexzcUD1ttnz4gqYbGbEsVf29bu9HiYOOBS099iNeBsW2w==","shasum":"beec3d48ace8ba843f242d1b7110fcc7edec8c75","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.34.3-next-1608664547-786beb6a.0.tgz","fileCount":170,"unpackedSize":655573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4kZrCRA9TVsSAnZWagAAoAsP/j1ni5rlV2m/tf1yT4qs\nze3sBx7K1kZFbr0vRqUaRvuxiR24OT+X682tuy15PuLkHIYL4MXpS4qEpjTv\nFhMy9vq4Y9Dpnna1KY0Td+GUifTEVVmiRPGYiqZEJo0ge/TVE14cAqhbweiU\np88AeUJUyQry/1nuvVN2U6uqtUwTvVe9znXH7+KbQQR2GudSyZ/a7oQts9nZ\niakPdoL86Oh2eX2jrlfUwWv9q9CEa/e3Ae+reagsL0I4UsDIC0U8bnEQ/dyc\n1fVQ5D/ahqXhxhsG0+9H+oLbStD3TMV5S6j8vGAAra2fWyIMTi9T1JW06rpd\n0Bx0k41Ani4LWxAzE/6npqGTR8uSd5FpG5eSqAVlDdg/sDEH21+0JoUa++V/\n7yQhhLNZn3AhntdHzCOG9A5s0/FifqhR/rnn1eQgdpmCncTdmIev5t0EgrDX\nJgVW1DPNC3rbF0QgrtKpXA//EKEZiRHADJumdKWqj4OBS5JPKg5H0jW53xVN\nRO6ZgQJbBX+ubYbtxz6/GKByd0B9gBTtQde0yefG0wCJNqeAr/c2YKc19rdb\nHRQqqkAv52Kis6Kyyh7AAeg8BiGmzirpJGOKBwyY032FXRfcfEqYemwW9ZKu\npcm7YPvgSKZM6bNbfL4lJob9jvQezFltRLM3ZIwKqE/6lLTUP8DkkAvau6jK\nAiwK\r\n=tO4D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGo7r9OJrk6mCQN+DJkoTTs0KThaFUtgZrnnGYysxBgAAiEAiFXAoAMgXFQUgtKHK08q46UJBgwpqJ/N6m3PImAqC9c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.34.3-next-1608664547-786beb6a.0_1608664682766_0.24611628606765223"},"_hasShrinkwrap":false},"2.35.1-next-1608668211-5516a971.0":{"name":"@xdn/core","version":"2.35.1-next-1608668211-5516a971.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.1-next-1608668211-5516a971.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-t6kpY1e6o54lkZCdH8HubCroahm96ecjE9ggXfTqA67mSM7ijAlQbdxzIsZKqGVIqOiqkk0EwjrMsn7SGwy1RA==","shasum":"e0f295e529065e019c73bc6f50590878b2af2cc2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.1-next-1608668211-5516a971.0.tgz","fileCount":169,"unpackedSize":654763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4lSnCRA9TVsSAnZWagAANOoP/A2d8kPTp94DqqGpGz2G\nKOgQ8+CcqOpo5J11KyhNyet61OSRVKZFUl125GgGSiiCVx+pJ6zw6enL/CCH\nca5QjbFlXSEZgx1B3Ku7/ZT6Ievguut+fsDNUXztgUmd2ohwnhAngwSlpHBd\nsHA+Y7oOs+L7yd0Rg/7MLl2OFWgPGm3lcgIAdtMUGWHH7sXFqUM1lJdc7tcf\n3Su163sVJnvw+lYH+tzdxBXYCaA39eA9rXcmUT7gnY5ZdDbXE9Y4ZEDmqrH4\nnwcgAjva7jc73qae/ZAZYtbdYer6H3QrpW7MC/2lBt0YbVbz3MGk8Lwva6lT\nmUx35WQw9f3wv1gZbyIg6v5UhZFNja82Tc2HUYijkDuvY7tWRztiJoYEkmrP\n8Ue8vKI/SdOEjeJrtr7l3iG+4Nt5F3SI+TW/0AsRHkiIWQtX7rRHqATzymxC\nmML114Ripk1/Wtp/mgLhXgnuzxY4sMEQaLGLOMynWvK+GEavJiuaSO8I/CGw\nGIIsBm3QXSo+CEoa2cbC74pFQkJIJofjXE4nvNkEadN+cv8ASsWVSa0fCjSt\nMo6SbtAIC+EvpYM7mhaF+xVkiLNsJL5zlwbwhzZokETc0eEL903LMdLNNhs/\ncMHTSJsuKLdw/q2iSdVF89ZUeRkm8tr2HmIgNC8hj9nprf9Pq20BcgJnx7qZ\nYS3m\r\n=C5l+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHNypfYU+I1lwUgfkUmWNpzfP3NFwWrrcQZCMDsCJIddAiBC3Wh1zP6oMNGTTfTnpbqGTh0vLB/zfltE9GYH50eZ/A=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.1-next-1608668211-5516a971.0_1608668326523_0.7176943901133797"},"_hasShrinkwrap":false},"2.35.0":{"name":"@xdn/core","version":"2.35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-inEMqiIJcgjH+7loztyvV4TS7T/B0WLeLjOAPY4s0E15fQkTkQIpQdiaT5JEEXSknSH6XD7VUBT6srwplpC18Q==","shasum":"4f6703ca030a6c9d07c1e733e89246dd5b5740dd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.0.tgz","fileCount":169,"unpackedSize":654709,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4lXICRA9TVsSAnZWagAAsIUP/3QX23h/vjSk60jRL5Vf\ntCQqj/cKP0zmoNjoKJoc2SU6IsjqlgCIc7YOOSoaMYwNhMVWMeO0mRgvLfLj\nJt9xgTGy8vUgS+nUNSpoVD+ZFxVcMH3x4a9QMswIKi6zh6HsAOgi5gYO4+Bt\n0iuDCnY/V7nNZCJBBZos/9RvhAabliMXfk3Z78T0J0XnHg8UScT9mW5cm2ql\nDBdF+QN/AI7W0S7TeHhKU6J0ehJoIeFw66AxOB08jF6HYms3MWZSzZ9VklPN\nyQ7SnySBBwcImFymzSSAShYM3Bw76xRjRUyzqnYrlOh8mDEhDU24LzKE25yh\ncOznHySzGZl4osLRVEwLhXFXt2DnuxWbel8L0z/SrXKfG0ZsEAGUWX5CZFSp\nppVMBcAvHsS7btZpFtvGpklRza+wNUgkjNiObM3sE+XOXeo1MOQmQtTvmaxh\nu9G11Km5/PUuxR/08gMf/wl7Qt1qIcKR6qVtkqVtH7ZUNn0E6Fv7ekjnI/57\nWyVNiKl1G2xkMRiq3hzCT77mTxL5iBulKKFxWlzZqBZY2jPsR3T6twU7Jgms\nwKlmYm1IOYr3sGldbBj8G3sBCJzNGocTY6EF202/VAhz+KwI1ABUz9csbq16\naE2gVUVysy3kCENGOmfhuX+JRDz58RxJpRnLF7cdom/0RIgh2mKCwE6y4BDx\nvlCO\r\n=4bA5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICv3nFfb7DS61fiIeIebiErT7lEUkMfywfcJrYhR2M3VAiAKQQXiR93H93oak4yZ6FsidBzihlAC02pYphGzoVWsHw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.0_1608668615587_0.20766975616239303"},"_hasShrinkwrap":false},"2.35.1-next-1608713168-5de4c05c.0":{"name":"@xdn/core","version":"2.35.1-next-1608713168-5de4c05c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.1-next-1608713168-5de4c05c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IWwdOvkW6T1Zj3wKx/yMs+blQeUTGfh2KppL+Fbd7fE42g2T1AXnWDuaeGol6jLUmZIzhEP4oVraATsBbLeIMQ==","shasum":"d12c4a8f7c5e7185ea72e9cccd671481fadcb488","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.1-next-1608713168-5de4c05c.0.tgz","fileCount":169,"unpackedSize":654759,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4wRBCRA9TVsSAnZWagAAx/EP/iWDR2B6PugUTLoKFF8x\nfV4K4sUGGn/57uy7+KbBwzVWNllgX2Nhxwy2f4kkq1yGi+6zeK5MB1LW6986\nUy3tCLWxYzMFjOq5w+WhQzqKngDmmtTP9tsIkE2yzsKTGbOq5cWH4RAIhnO9\nz0iRPgfSZbT7JSAW/3K0w/JvAksdEHo/GxnWf40WAw1i137Kn5R4mYnSoTVV\nFm4702aBwjCM44dlMrMpa0QGNh8AKmdRJ1+cQtph4TCEVlaHH1IxyEY7A8HH\nD0sX09+ZOS2Lvb3wNOsqwtH09Hw2HJJm1pW1juNXZNPsZItEI9xYAMC4etRa\nbpMRd2kRt/AN1bcock8YNKH9+Kp6fB+3yOIIQRwo9RMGIq6H7ou1bRw7lksl\nbk9Isiui2cM6G1LLJNLxUKqmvQ5j0aVLghvfBsJQTNGe/ZZR1BowyQIOgZJI\ng8oUJ0ADqeRg1dBMJtDjjffaDNeTYi7ZwFy8WYL0Dm0WBtGisJPiPq9VdmYO\nGa/i3EY+q6QHan5aZx0uPxRoJmg4D1zgsVCZ6YvqW+wqt22HdwD3yVwRj7SO\ndLyUsw1z/1/IsjhTbJjqSy9/LmHoBPT9O8rypBwwNfnHO29VS9oBpkEeICPX\nsVyQjyRcEnFQSWl+X0M8VO6enUvDZKdcs1ibGqqj5GhqSqSfPDaQHE2OPAAG\nwwv7\r\n=iWky\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA5nvus/IUbcXWUKjNsYenerK5YmHAzwTmvtM/Q+c1wHAiBJbYjKr/4eEjHXcET5zTj0K1WcGwPwUpwfInwaqtrZMw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.1-next-1608713168-5de4c05c.0_1608713280393_0.346578319236182"},"_hasShrinkwrap":false},"2.35.1-next-1608721052-c42cf456.0":{"name":"@xdn/core","version":"2.35.1-next-1608721052-c42cf456.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.1-next-1608721052-c42cf456.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LwzKGs7p2rmyfufb4amkTWpRa3d73KPjZcDWgJuSotp8IVY607r63V17QbZTCfxsGkvfDQ6PZ30ul8FmaXUjrw==","shasum":"ba419ad40468b9a640416bc918e93c7a87c2b8b6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.1-next-1608721052-c42cf456.0.tgz","fileCount":169,"unpackedSize":654763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4yMSCRA9TVsSAnZWagAAwV4P+wdS5m+lLyNBdjKMLOsY\nHIrZqorYJW0hllKRq9iV+V4RqiRzmlPSvxEkJvy0my0aklFymmIUCyE4dpJA\na8I0biUJL+bAq7D3DVjK1iru7lXmQNA7gy6vakBXaeoQdm564lvQvZ+Vt4ak\n+dlQy1MUAABYImKajnlpSno3mBwREXE2npC2bu/+KL+51FYKX5EUQV6tOO+I\n6A7ldXjOheNXS02iT8dqJoMMi4VJYOq/d0y1hR9KsdCGvITlB3PnUAvO6MzY\nCbC+42Y9XiUKcERQHVM4yXu5jT23eDGJCkz2koukNNA25A8ndqaj96j/JVYQ\nrdn4+NZsW+W5gM9LUS3a+BqWi52kwx1Z9kyOjLGjIvsa9qW6u201A/Wyi/+N\nVjnsSOuyOMqWFbNSuquxygy277A4Dsfty9xqs6J/vIqYD1hb4dPo4e38zjpE\nFdD+jJzJMSnYbYoIyN6ICmd0OS5uNoR73LRjqWsyWvMH0B4lzUNHe8YIZa/Z\nlhzWH1xiPmHZ/jsj5RHb3AMT8E6uP28K5/GZoaWKB+U2/2TQMqVzFZSdZ60C\ngTqYmc/whAZn1fW3imH5O3v+40Y+l8HDlom7p2iFQd4rJNdVIi/VrcWDuQNi\ntiJBQxBkEgmjwX+hC9JHklLp07eRbUMkRddMLpQwl2Qb9NN5uDV0V3MFY9Z8\nVF50\r\n=gQSt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfP9vrDc4JyjxrFXmvSvZWsB0yrL+s6ooug6Xbc0Q6xQIgc9meKXcGQEg6wM5pfUS9V711wIAs+8m2awvbuqJAxFE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.1-next-1608721052-c42cf456.0_1608721169659_0.7072980229906385"},"_hasShrinkwrap":false},"2.35.1-next-1608721086-64201d55.0":{"name":"@xdn/core","version":"2.35.1-next-1608721086-64201d55.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.1-next-1608721086-64201d55.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zuPiiFsLWsCZycBXrxKMlOsOKDVUj/h1XaagPMbKSxa2N9AE/YtiacFkOTN7thgChtt9QMAHVkrngMP1gZuXBA==","shasum":"2a3a376d835a006482d143cb24f947e3c7300dec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.1-next-1608721086-64201d55.0.tgz","fileCount":169,"unpackedSize":654763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4yNLCRA9TVsSAnZWagAAk6YQAIlhHt+credqr4vom0kX\nM6GOthhQOhqOqLNgAgHLke1KLiWaKLvunpaWcBtfF8NKW/25UZ1z74aNMG4U\nZkSpuIFl5VZCpHXcLKrnV1E4tNUlZQpNx6LtS5f4O4g3pHy46d7EQslASfdG\nsInTh/0wRtTQy/blrXgFVeTh1QvkXBozrNXhaly6JuzUT918Ftu1kCnNpg5C\nKmVSB7V7/BYcPcktjkaDtGrE2nevbwkuczReptwaVoJ1ca/W/Gypg6TbhHvL\n8TsxemPUZ2QYJp3hgPVi0VBB/7VtXbpS5r/O/GfNPew564heIdKUG5SlJOxX\n8KmjGWFN6vm+cSfeoGCJUmaCA4FeRuyKMBzlTburfHRMdMX/1at9lR9b5ZxE\n3OCTpjZgX8lxlcv3maT7jBcMhCHJpQguewLA1GTr/zqBeL6Hod4AKvwT4ilr\nQE1KRW719By/BjGzNu+7Ob8Tp+giy1dL38uNlbQdJDoSoT3kT2Ov1IwZ67Iu\ngbWL9YpoVmAciugam3loNWA9laf1WHs+CvZTbVfPhdmKCem4g+C8+1ktuTmp\nlOHKV8eGLcJR/e2if3awYh363pteiOeYJUHydP/URikWvA8uwEwp1WMdWG9e\nKm0ET/lOwORMDnXFfatfp00TMKuJi5t6mOPMzq9Qk6s06Ym86XqHANJwUeQ6\nlMYH\r\n=nBQk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBzG/AgNo9XXzxVAoSM5BCN5xgo5WDj/O2KbV12j4u9XAiEAjxg7sgZL8WfbGscQA7xg0LsSoi6b3hBqki2ke7bx3LI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.1-next-1608721086-64201d55.0_1608721226344_0.5067927454902847"},"_hasShrinkwrap":false},"2.35.1-next-1608722547-b43f53c6.0":{"name":"@xdn/core","version":"2.35.1-next-1608722547-b43f53c6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.1-next-1608722547-b43f53c6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Z+ArlI9p0cUwG4GabsZcQuVBSiI8grrTme+QoNKac9DP8LBiXH4vxS6gu4rVFFhr+GhS9z+JpV8vIomOwTSWgQ==","shasum":"85129b128a18bf31b20f495cb6dfb2dc98edc4dd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.1-next-1608722547-b43f53c6.0.tgz","fileCount":169,"unpackedSize":654763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4yj1CRA9TVsSAnZWagAANYcP/jIRcKCmfO9ewhUc9koO\nIuMehfKRWFYRwyiHPmqch0UrD6Eeld1R2q07aiN5OZ5RP9QIj+D8DS1gBlfw\nlAIjAQ+oYfzEVulQ16aMub1zyRKoo5MDVCxvWXvLVYHYJG/tU/54y70OncyF\nDbmzkk1zuiKNURlBysIDH59fUvdwmGCRmXOk17IP88zMBlaflZKEeeP+ZHGj\nbteYkpALpNyq/dVi3zCI1oNs11/9AQ345cIOz9ywe6ZkMvDdYPsEyWm5y7Br\nNQZcJjhFmIs17TYPFTGqxJNpaIxFtVs4LL40O1AWtPaw6j4NsnIGOEMn4A8W\nQCdp7poJYSt1Q88oYmYPRFUMbSumWlZkb5fJW5LJE0Tkh7OK5W1oJO1UmG5X\nJeDjH9ks0NI9JaKZMCzv1zvLo1MeSYwaOgbMzdMIaqttFn1I/BD9j/Dp+tZ8\nWEBdcsX1QSacdfBThloaoR9ZszQWw+zijVdSXJbReewW7RU9vM7Kl9qI98Xl\nOKc8Sy+eP8+ZeDpGh6iVo8aO7XDF63oUC+5HNfZYUln/T5UFfwdJptt8o/cz\n7riqXVAN5P8fPVKbva+nkwyaLHRBKfEkq52xzV478XIzsfJrgAsVi+Oq49kj\nmoTtuGQSeKmX4ZfxAx5+woCSznCDNqYlLxLwWX5hyaksU/j0y8j81abK0/1r\n+RQr\r\n=RkKL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCO5IWcXMMOJ/AsG1GymkjDFPMYsfGUJSvKhi4iGaqjrwIgRQ/91sxLgZv76oEU1jg61pUveQXZpXP3bTjSvGeoMmg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.1-next-1608722547-b43f53c6.0_1608722677279_0.7441982062754751"},"_hasShrinkwrap":false},"2.35.1-next-1608731993-cd4a9f2d.0":{"name":"@xdn/core","version":"2.35.1-next-1608731993-cd4a9f2d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.1-next-1608731993-cd4a9f2d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zI1BXJFrvND0V+5rP4XtJFYviRIDze12gOdbmjcxaycCc9p4o5x/P2KoHr8wVc+P6jUbvaZ9F+8GhPWOVy7OkA==","shasum":"f2680236c9d9732c9937fb723aaac94630152755","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.1-next-1608731993-cd4a9f2d.0.tgz","fileCount":169,"unpackedSize":654792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf403aCRA9TVsSAnZWagAAw94P/2n/Bzy/3ZYEugH84b+O\ng91afS8EbiYnejsDH8N5FAu5tx0nG55uk3fY1L0ZTGpOKmeLPsqOBQU7HBVL\nuFF++AYIcwmooXU59S3pywe/2u5eJjCq3Ys4bN04WqdfMIInRHAFtPY11huy\nH9Xz69N0Zu6TktRGP8+XrXbaORc0m50sFyJHCqF7R7V7WFnSQHtNqzwIS+TH\nT42DfFHRI/wAkMoiJ+pPB6J+W2M+AsBGqxB82H//zAyIy4woyGS0P7yb44B8\njaOh2sEZhAr7UUe81Tiv08jqQdSdGG1IpvGQF0/aaQtdVz2XUHFwzB8gw3bv\nyvb1wEOHDtkykQq4pcVQv8qYPSAwNOgdf2hTRymU5zeeZ3lNlCh8qCtdcFce\n/23F4+nV0YgCKsk2U5vOmkovtjb5Ch5ItOLawP5OMRMoZf9gqAAWmTbV76Pg\n30YxWflWQTS9J202JHEvfSLPOdpbTMVW6Ul1FYV9kQZdcRQxNxUMry9GvKYe\nP+/Nbr0xoUFybjXvxHd7dr8ZjskSG/qx9otUrA1IZ5WlImseQx4Z0Rp1fVC6\nHhhHbOV0I27dZD2Ncac4qFGEDll0veRoz9rVeapgBzTI51S0pvZTRjdGKqkd\nFGhsDbHcHxIrweNA4GnrmciqMdBP5rkE2k1q6OScmEG+T/HS8f/yVuBqyTHN\nNQ5V\r\n=Q2vI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+/UkunfJ0GrZb3k3NRGaN787i/m7iwHRciyQnQ1c7DwIgEeyhA9EWIhBimVbrnIa2WmG08F1Juw5CMy6kgSBMUrI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.1-next-1608731993-cd4a9f2d.0_1608732122012_0.8202871643525593"},"_hasShrinkwrap":false},"2.35.1-next-1608732307-51481f4e.0":{"name":"@xdn/core","version":"2.35.1-next-1608732307-51481f4e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.1-next-1608732307-51481f4e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4K8JbwZKXd3INPMqJP7yacVBlRYf+zvvRpDv27pW60R/eTzCGpz2bi0JxAQL/VORg6soDjo3slRbTqqWEfI/Lg==","shasum":"393312ba74ce724d6dbf2f4d049a5008a36352d9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.1-next-1608732307-51481f4e.0.tgz","fileCount":171,"unpackedSize":655523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf408UCRA9TVsSAnZWagAAqaAQAJA/xThjluya8nY33d5P\n+ND9jWDx5uLa7IcaJ7IaKTbZBv54/VUBsYiju95h23rJ9xRQnTK/CxEFBmPO\nxPfIzj5Z7oWmw9wzxt/0yE0Bca8u/VFPR2wPIBUddQRL40SiYy47R7JUk9zt\nfuQ9P6NApUAQ6SxhemGDnCU/guLZYYvr3Gy8Zww8vUDkGj9zrAeDXgpFGdaS\nfW4NJXuVJXhBgOcHN344MS9J/P0PVnDXe0DDQKkuD9HG+gPR/glSipESw2g5\n6Z0NpiYXtYE2N5jkSgfm4C+XQoOWtE5Ao9rB4bn+r8ifeSKbHV6/UKodxOn2\nHodMr4GwQv09P4rL+0CPy00qKPs2AcrgMM5t7eGGBdL+863wv1nKOHC0QkV/\nTy/8Mr8qUhEEAwlZbgZAFdWf90aXDWTo+kll4PbMO0DooJLlBGnOga9HD6iv\nUH8oXiBf58A/cgH9j79fIUvcesVLQv/BRBELZbRBspS2joCiGV6JCswUW9XJ\nM8t4JxRqK8BNxySOVVEMIxB1zi9dZ5T7c23LRiKT8Bz8ZAS/Cj1/i5iafncd\nr8nFoOBE3i4jaTUtfpcPAGwWXC9AKVtuNR8IidyMVmZ7YJiNh/v49DAz0ebI\n+ognfswjQ4DYHChMXtumE2qVTjTtj4FYwFoxv+OYEgs2aGY5x3K8xeHoarnO\nwk7m\r\n=QWuQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5RfppI1DlPAvN4uX72Z/jCm1Y9f7/n9OtzFrVccH27gIgCBtZ2XppYIekYzXFtXPx2bgjQL18kxlgZs/WxdMBaYY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.1-next-1608732307-51481f4e.0_1608732435600_0.057422104015611986"},"_hasShrinkwrap":false},"2.35.1-next-1608735581-3412b538.0":{"name":"@xdn/core","version":"2.35.1-next-1608735581-3412b538.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.1-next-1608735581-3412b538.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nTR3eJJ3HhMt76LtW4QlXBAeU2tDA1YZanu6wZvazDTJLHwev8g/y/Gi4I0SuUlyfI4QnuKoW0tsijmGbHqZbA==","shasum":"dc0ff9786209fd3b5fb61b890f2c25662589b236","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.1-next-1608735581-3412b538.0.tgz","fileCount":171,"unpackedSize":655523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf41v0CRA9TVsSAnZWagAAUfMQAIfQWSKKPkhDFoHCIrCb\nbMoGu/O7hVSBmBnL5sSTmZHWhb2OI7ZmRQotczbtT1GdRHw1gQyGCjqF5l5X\niSPraqbIxsgzlSO05iUkvCEHSOjO0/H7NKcLu/54vz1E47s2FCdUlvQe/kPE\n7P4sOYlPG7Ep2kkbDROsnFSUz37/UhyuFdavvFn4T+o/nkCAsNPm7oLRR7Sv\n/CkQfTXHWB8QqPfpZDITN+9ldDYx4bxZ0I48725xaCEE+VUL9gUFh4H2EZvP\n3hDyYeXKDoQ48qeACmJn9sqQfwsc42FwUT5isW2vC1IafpIWjQBwKp9e2ceZ\nvrJtuwHdYV4e9HX00uSNI6X0xjaU0h6YDnhtA4SmyKrclFVqZX4qdRlPPM1k\nyjKLvLf2gjtGzqR0sJcwUAQpKC6DxssoHPm4gMgZz67XrMPZ2xgaPVNYtIk7\nF18H1GQy0yDFi6meubpkRui6SMIMYl8MJwSFkeISrVhM8iP9P5yeRrdZYfgn\nBHX0Gtf7hAOUyxmjaSZnCN8GKIWTFj0j39cJd4Ftn63qp/IxYvXTQW/6pvFi\nYnGGHedCrmq3dv01cu7tSh0c8ovYqrPpvGhUswAzFNJXQ0XugirsE6Bh0Qaj\nk0N8L5Eyvm73Bjx+Gf5naB6g9VlVY1jcBj1rJaMfDjIGjjgLs7iCVL1Sf4Tt\n5uIk\r\n=gFrZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCO3UgWbq5BCPeBpVtGTX/DMrPqIJgBhBh10qdD/gzLkwIhAOJ6sQaYc2Hy9duYJv0dpkEwP/qiCRasVtny5oriA3tA"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.1-next-1608735581-3412b538.0_1608735731145_0.07597557773856045"},"_hasShrinkwrap":false},"2.35.1-next-1608736187-23834867.0":{"name":"@xdn/core","version":"2.35.1-next-1608736187-23834867.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.1-next-1608736187-23834867.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FzLEZYB5yASkx/iEer15HPFDA7/kC+1Qs9+qexL8BD64XX/26+g8IVV3tH0T/1mhzRlM8lfNO0a+8SHKkowhXA==","shasum":"511a9f8fad1be79a26ee5421f6d0e80b65ded68f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.1-next-1608736187-23834867.0.tgz","fileCount":171,"unpackedSize":657130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf415BCRA9TVsSAnZWagAAdB0QAKLfzKC6iJq0Q5Izk09R\nvin0cRMStmYt1qrZknUjHI+pTtg5VOjH24LeT8dcJ61ZY0ttUjerX4VA5p1X\njOac7mqGaPTRswlB8nl7yiqbhuZO3OULJydCl7xCxDbgV1rR1ZJrwrRRSAgt\n3sfaOwl2CIGnLtY8Tfa057KBSAoxmDa2cT2yRl4lUaxXY8YGOXBBFsMsEV8u\nlyLu8IIUZY5wtEQMHGhAlktIQ1GU0I2RDOEhE6bUdmmyENr0Txo449KTKpv8\noO8Dks30fh+qALwTUOSnYYOY08oCLNz4FjfhmIDpqAhybKxzkR6BkxqItgwq\nb0jShEmGkveXMMP0SNkBSr+tJNQDzGjHjuc+A5BOMzobDLkPbf9Z0Umbqpai\nGaGgRl/8vwHWBKswsEuegeLpoGz7d7n/xuUhTE6teJOI2Q57TWzHw/iVx/NC\n4xwOgzowc0KRKkL/UUOLow36GgEJfiAGS+3zaRgq3LJCQkTorjKy6NXyz9er\nrBbHeyYwmh4jSWqL2q1QvodcMTsG/4O8qKIk2lyqAKuqB/DBRW8CTPLxUzWS\nL9OK5r6fYUR5CKw8EGnh9pbEVSdGqQ4X5qiSAwYJ57q2R1A2MYFIizFCSPzU\nWQc5b/R2E4w3xYYZ7ErU8eglHdHqwLsUHo+QfjxRcZL92ladUNohfzeUzFcJ\ncBQI\r\n=w2Zd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCx8bDKgl9SsJhNtGCPg1gAluKy1Fc7+4IFQ7hKsMcf9gIhAJS3luz2VnA1BSNYDjNJLp3d3ZvvdwsFf4Q8LiW4OlHi"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.1-next-1608736187-23834867.0_1608736321052_0.13098340466029912"},"_hasShrinkwrap":false},"2.35.2-next-1608736652-721b7046.0":{"name":"@xdn/core","version":"2.35.2-next-1608736652-721b7046.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.2-next-1608736652-721b7046.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rLt08/oKxAfIbB5udDy21O5zZ8reZdIlZJ4/HeCnXGhAiUuqfTystJGdi8hRRBzPAm/JmBwQtWfdnJtfHy4Gng==","shasum":"f89d9484aed4ac55309558b7f0028696acc61709","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.2-next-1608736652-721b7046.0.tgz","fileCount":171,"unpackedSize":655552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf41/1CRA9TVsSAnZWagAA7zUP/Ak/tvb2VZiNB0ryx6du\nCXivyexuIx0x3UPNhl2avTkhqRJRlflIx61O2FftG+Dv5LTbqb+aDZJcDL2r\nUJd0dI1SFLqB3LTZwWBHQ0oO9FrmffGPz1No5yygF29QOGmgQIyvh5qOQN71\nmWYDl55yqEP4WXwYeVYM/yjoSeZ6v1AAzIoCk+xLDi5GmwbQsM1EawJ7cR8E\npYtjVgtCj12qbqLiCrgQGOeyKjk9PIhjpL0bJ8m4855LOwWsKcAYRkJ9Aqu8\naWpFvaKkv3DVtIap6rALReDVhatvCux2wNmQUFbV+KWABEhXrUPaCVlNRQEv\nhtrM03zM0B+ULOf+wqD+U/XIkRPiGzQD8b4BL/oJgyWhylPKal6ya0DkMzDO\nndPBZXR5UYWkjZPQQVOtWKFRAHI+Y9sbCsEBbn6uGA/U+IHtsFTtGtsWFE9I\n5N8jGArX0aV7upGxwV/2ohrGKv+Q6UOlsTvJkAvRbaOBqMvPQqWypyqefRD+\nv6zp5AH0/t5HRHxUuZucC2fIknGjCZol4Eno1c0XIjIbUtMfOUCx3yPYRKP7\n2zJ25gtnDwNIOnjgWuRVUW+EkixtAkebBWtXYSHaz3KEdDM/BIOokJt+Zao+\nS0Vh80qNYVztwlVqpNZKEIpzCb4gBLhiySF/kMx5Ctj8zYa2exsuH4vDMVu2\nQNNv\r\n=mJW7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGJd5KkGMF8M/feVQ5G0znxN9xGAecN1g7Fcrr5A82tIAiEA5Q/qpjuLwmgZvIYE1LzG9e2ROLBCBCyTSHVacosQFEA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.2-next-1608736652-721b7046.0_1608736757231_0.24298202639845234"},"_hasShrinkwrap":false},"2.35.1":{"name":"@xdn/core","version":"2.35.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.1","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-t2UWDGFxiY9lV0G2okZqcIV/0ZLUyf8Ds/OnDF2Jd4MZ5I+iYpESNc8nvLV2yAHepZL/hfe1xaJWLoczQZpDiA==","shasum":"dfb024dddeb0a366870cdf566990dfeced6e4908","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.1.tgz","fileCount":171,"unpackedSize":655498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf42clCRA9TVsSAnZWagAALycP/2rFSOojexv+t1ApaE5G\nOT4LGlQDBkHMKQAhQ+xVlSvTP/Ul4u2/+Wci3AurrQnV/5OKPdg7eNG1Oj0h\nWMCu3ZZSDJw90Qbx8Zmnjf73nHWLrNElLMcb7xpDm/FqPpHhIwI1XQNKajJw\nSvXT8YOHAvFZchA20WkLdVUS+y+vZjqBqn8fT/P/E3n8N5PABiwpnqyZ9EO0\n2B4g/ZFragsv02qE4b18g9D9E5UqpwQuOZHIOf9BF7Bf4YFka2Ghn2pH70HQ\np7VClOi/GL4HVDuNSoj2CNpTZEcb9cIXWSFQ+LP96VF1ZVyQYIbHoJdtPeYh\nQUyKr07BMg62ZEoziUAvompUC+hkU3kf86xQCOPCocFy3A2sobHiUphzG81U\nEyvh0QoqvH84gxe3Nqfd5tcgZ5NN5mudrhD9vkxVnx/BHRdcKWzT+mDI5PkN\naxEuLNqp9p8m3oIsuQQK/1H0UXLeFyNV3ekf3uc8O3+CAfvfya1DUDJiIFG/\nGRDYAuTJCMX4xCrzh1OrUtCy90MJeLGJNtfF7b0FuAJ9k431pvFaUtUEhmKu\n1C1Vk85o5Rl91v1252THCB+up+dtWk/Tmr4Tafxt9pOSP+OljEpB2I1AzjhV\nlS0zEF6NF0TvzEG2AWdq3C1qIgG5//weNLlxX0uKWkEH2VbLzZhMMNmf8nib\nSPEi\r\n=McSv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICsBCCVm42cbLwLxcHUWhrxxSzD2PNlD45ub5x/M/bBEAiAELowlcxL66tg5W7tR2dD7s4vwwyu49CHUjkmDSsIpYQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.1_1608738596441_0.911818390708603"},"_hasShrinkwrap":false},"2.35.2-next-1608752410-87b4c6b1.0":{"name":"@xdn/core","version":"2.35.2-next-1608752410-87b4c6b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.2-next-1608752410-87b4c6b1.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rP5g81Yh7tH3poS9iXmQAkmR2ze4cGteu06ZufhT/NZBcI2fOc7E9hrrWMYWzhqWszdu6d8ko9nLWWQ5mbXexg==","shasum":"c5463ae478c157168fad291b185c4c9ae14fc2a3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.2-next-1608752410-87b4c6b1.0.tgz","fileCount":172,"unpackedSize":656362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf452WCRA9TVsSAnZWagAA1gcQAJlqbke1upjBtpYPAtsZ\ni6ptnoNv2LenllD7wy79eX88WG7B47KeUqU26ZVhQzrTFNJFjzFi95UpHX9g\nw6CsQZaqzNe8+p2aHoH3EFy2bavh+a0mpS4hz4uEmy+PE1/EZ8fo9D0pFbqL\n02+UIsM9Ps89NTwSy4hbjuWOFhp6v/JbmD7qOio321u/FO+iQ/PpCckV0YIg\nwqp20Y70SR3f/FLFJqPhU9W+UG9dgIRI5CUZOtUB6QMKF9hwdg3DAPHO4IXe\n78gcUAQfeOctAyB1Vc9Upe/rkrJH52ebxd+iioQRRJnDf31J8H+XhBGsXhq7\nKLKO9Hdgw0S4d3c5bq5l2krcYiywelUY8JWFPWmgOn7X5sitN96094wjPURl\nCAH/6T/lOp0fJcUC+h1Nv2puBD2vVk1VMNl40V3zD4gc5qyFdKnWI7xB6xom\nRkUYHLY4F6TuhxYXlKgDbPySUULne4rMMgOYNHciQ4i9CcSDDNQpIMDWLd/i\nGmGstz5vmbL1RNP7EOvJnVuFstEBKJSYIhb//7XI1dFzyAJrF837uwupsVDF\nZ4wDk8A8HUDN8L2WYe61lthkd8UhSuZrkRKK5QKVnYXuIeTpzs/s6ToGdHfU\nqIRIoW85X+aaCQN6UqBOouaI+CvhuZ+syAtmQqEHS2n+LqsQ6oTaso3WkrL0\nOwyD\r\n=i0+8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCr71tvto+a0Rm+7LeZAL3qCLBCsbjwQ4goiWfDoDMCoQIhAM13MqFcC5GOP/DV1qwSmOaBlE9KVOcbwBqFblkUWiWL"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.2-next-1608752410-87b4c6b1.0_1608752533784_0.743878702854236"},"_hasShrinkwrap":false},"2.35.2-next-1608753253-a5a49b6c.0":{"name":"@xdn/core","version":"2.35.2-next-1608753253-a5a49b6c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.2-next-1608753253-a5a49b6c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-c4bQxmzaJCOkHd8Kjjsoh4BG7jL9iOVnnai9dSvwhu2FwH60cpn1UX8I2k5ogegI/nNFp1CQYb3+liJeKNofvw==","shasum":"85d3b406dac6c0a3dffc91263302e2b8256d96d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.2-next-1608753253-a5a49b6c.0.tgz","fileCount":171,"unpackedSize":655548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf46DTCRA9TVsSAnZWagAAnkMP/3qscPrZeSoatjqUTuvX\n2jsqsCXwxN4ogPObTp7Oww58qo7CWXo0k/ILTH7Ix7D+MhUQYjzX2bh8ofZB\nrjAnzEUstwbG/6FfK/h73VzkGRHgPdlu+efznsRsKwK8kNdZfJl2e/K83Rqj\nmrd9kWJk6yTHzjZCkMCrhf6NjTORbjZa9yVk3NfrrrDAzze46Zwn4XUjlfem\nhVwFskt7tY9UOYjHw1n8/dkw1Urowe8GHWw1dLoYdXINGhzz+ZBSd+YnBcHd\nCtpsipe0AdUvJ/E4CrJltbceEAEwGA74fX0MzMX3388EG35sTe6V4JuMRvdg\nnz07YB4VsY2ziEYV/1Xi36jFSliqu4hi1pwfHOxJH8COJDV0LdhdkR0QnLmc\nFIlCrQ8kxnJ109OndIZpfRtRzCoOfvICl6tVATk80vs4H3tuJF1QE6xRlSOC\nXLxQaPJMbfw/bwjdL1yo6YI48fI91Pxo7qlRPIIXl7xNeigeD1d3CjM0HB2t\nNtqO32yB/yRqnvwuTHb4u2rmY1qPJGv7bEER03lEdcwn6qr0H4Vzb1wm2rtE\nfyAqqWrLOuzaldVTnjS9XdeM0OoWv1vYl+EJZgC5I8XHYVXsQCyaqjmyWY3b\nLs35NW+PLXkr0tfU4qByA1lH5uknNiwBHmmqc/TfX7uk9j0eQ7BaRNarWFq6\nxIWe\r\n=fAZV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCN4HQd2E4jb1ge/qZu0aPkK5O0VudBJ8aGDKlWeFRuzwIgOEy5A+melJOvZdhAgZLodsEUwWydRd9m9V17QVy4ZjM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.2-next-1608753253-a5a49b6c.0_1608753362753_0.42950124121910904"},"_hasShrinkwrap":false},"2.35.3-next-1608775333-cbef40b0.0":{"name":"@xdn/core","version":"2.35.3-next-1608775333-cbef40b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.3-next-1608775333-cbef40b0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-O+2iiWl8A1WKXcbboGUFhaY5qU+Jj1GMa+zWVelxiuxfr59lFi4gJ0j0UCrU9wBj6+WNoxoq986YSC1g4cePKQ==","shasum":"cfbdde6a6a56c1552aaf81a220bdebf06cc3baff","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.3-next-1608775333-cbef40b0.0.tgz","fileCount":172,"unpackedSize":656362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4/cgCRA9TVsSAnZWagAANwsQAIBNVPur+imsltQ4KQvQ\nO9q/ZPvogObXSU8ro2bwbxDEJQhrhaIH4sMtazs1Zqin9n8Mzt+DWRkUb4Ws\nTs/WyPa8t/YN/2Fcht6d6oOOpSo3dgnSOXBPBEabfJRVmiHhWRQgOhgie1EY\n9mMMITGX4BETV7AsyOcdT2s7yAKFCx4LLGn1DY7gQ3ro89iJDGMflfe6IBvl\neaQHF8Xv3A2B3njHYkcBBYdPisd0rSY+bRwVncRhabTrTxm+c6Ns5BjeteyW\n1/vczuenRONSNpdgwfNvrDeMB/8+fsUSb8KoxnhZfJkt3rnVi2ORzdcHayju\nRpF7shXOgj0HP8kjc+fc5yKoHKApvhlhyQLHsk5D5SHPTBocj+Ng5tftMfRk\nwO6NTaP0pZmj1QXhct2gKYsPAIu+ceNiY/yqoYs+fvaKQak6nKmapZwB7XBf\nTm31jBB7+a0oU+k1X0hR6ahnStWhT4kXWQP54hv4+PmFex1UiVncEEW2hkS+\nt14bMfJl9y63KNFWI8Lzw53cU0Twlo3of665Y3Jy2CgVUpPHoKGhPjNHtkKa\nHYT8iX11V/5+Ra5drWKpqXrZJHuZB0eg2opxCzyFEvf4d+J/20DMkZoiGNmI\n3DJ1mL3y9czBQAmxe2Ifjb9kgtCnEwlwJh8CAK67h8n421OFNjkuc+eXFvm3\nuarQ\r\n=m5vf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQc6sAO73vH7Kl0smc9vw/UqgwO10Ehw9IqMPVeKEthwIgKzle/yXTtWX+oo1wLICVt19oaSwndPLnR5uiwDbJ6sU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.3-next-1608775333-cbef40b0.0_1608775455536_0.6183857778127995"},"_hasShrinkwrap":false},"2.35.3-next-1608777077-cbef40b0.0":{"name":"@xdn/core","version":"2.35.3-next-1608777077-cbef40b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.3-next-1608777077-cbef40b0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8gqgZT6+938FXzDnsUvF8yyTXk5/2iB296eGtpqdtflaWQVB8TEw3VARX8U0N195LMguxoTvQ0iJ3f5XoC9y6A==","shasum":"79a42217f343bcd4ac440889ea7dce96c5b388a2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.3-next-1608777077-cbef40b0.0.tgz","fileCount":172,"unpackedSize":656362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4/3vCRA9TVsSAnZWagAAyMAP/ivRzPJ4kGHBO2JDlKpF\n1VRY9UJCBh9RM4ETpbMLlcCDr/5jIrdOm8126YsyCgkqF1sc68CyTikc4bck\nOch9lNkirDT7EqYGozp+AoWRThGfwrk4cYvh5gXYdBBzPXYGUwuXP3mP2kvC\niXVFd1MPK4oZKobMeciJXxQzLdDCSibvfPgan6PynU+QJuRudFqjvU+/cCKt\neJ5FgvlT7rHfmMowxS9N8aWNhybgXxkHHD2YdsQ2LsczRb05poDjPTZCfLoR\nyzfPotCU+adDNQ+waU4Nt4dIa3C1FPxeSTECIZOpGP3fksDKYQv7zUhCc5Ij\n+yIm4qsYdeCTL2gy0xITHSwhvmEWyd5mlvs5ECBBRImlfJ8aPVUaUDuBTRn3\nWr7hesmFH2V9KWH/+f7R9GHGWpG1o02IV8bjyMtGW34WKYNLfGhC4ykGfKJU\nPTbqP2jVQ0bWVMWc8d7iyfHyvbrFTb+V2D1sl7yjsywRE7Lvj750M5/hI0Ol\n9GtVWrYLqcGpkQul/2h7gaO9mozurGNWEgrHtYPFAeM1D3YUwgx+tpk2Vd8R\nI6LP3NdGTNHq10TpX/1T/67czIefwcBJ5Z9rucRa9fnxuP7RPG6GRvSBoB3Z\nRaU1ct2axM1C2Mb+mk59g9IdmJA6zb9u1vZhEmTOJ+PLAq3/ypQrqgVI4oPy\nRp/N\r\n=q44A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDTqlP4GBN8AvksYiFRONqg9A7PLJkGQagjC+wZDC9kGAiEAuesCe0p+3gHURLhtWTewYr+nxJPPQRSKyI74E+b6KnE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.3-next-1608777077-cbef40b0.0_1608777198646_0.8327443896584636"},"_hasShrinkwrap":false},"2.35.2":{"name":"@xdn/core","version":"2.35.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.2","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4CU3uinQbTQzHTULuXQKb10R08ngaIxyBNi9qp6ah7l2TV8QDWcm6gujg1GKxIi/mfjNsLBuDQTFE+vllmagww==","shasum":"6717911425b013f5ea05dbe42b256fdde5378308","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.2.tgz","fileCount":172,"unpackedSize":656308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf5ANfCRA9TVsSAnZWagAAVtIP/3DnNFiwSW+OE+3nZXgj\nkqwutdkt/kGgFBDP2ypH5ocibzguEdRVXOTGpz6NlC8+bsD4B5CDMRTmzRAC\nTNZtYRkPCyFuXiFQwQDvjDN0DxuisBh/FzoWqeBRkxclO9Y8fVQswgwcJtp6\nZ/aT4eCA4semDT8wIyh4uWNWW+y+DOkGkSvF/Gl/2c67MQDEygqO1k/nSfDc\nHkLbLvkSWsxX7F3QoXwvzq/VS+X/AkLfqUuSDnhQLeLg04MOAu36MMlL1hLK\nXKpuXUtJVIdZS6W6UnHRJdddsMDKwayolpkulekUC1krUqVSH5ncNGOKq28d\nal9v5uTvbhTpoZq2fdDlt/K3MZxo2GNPGJ1mRbAUAxVE5ABZdGz1oXllIRSb\nBkmQ2M6L+8YoyupRhnGI78c1uPECLPY07OovI+ImbVu7cztoohF0vGYapDag\nrmzKjCda3JbqvB6EpkYAoX82lHoTCTsSwKVsbX+5nyFWy8FjnLLaAAPuvl4w\nLttjaoMGCnYm3l5uQsdTl6HcgpuO11GNT0/TU+zEmL940PBzg0nHIuyUU4nf\nHfsTUN889fR89GtbMGxOBGiNRUys5YSH+/VvxUOEahlU8qNunnHK/QPIhiOm\nKxOPP7qaidZcdwjgfjhpMWrmLcykYqWMdRQizO6iWv9Jgx0TZfFvHQJKK8W+\nW+Ad\r\n=JHx9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHssjy0k9Csfhfnu1aXYu39We72iQfbiHUDzyp1xpHljAiEAtFavAoN4X/XSY5o5FWhH6VCnj5/4X+x3RfLgxHlfzJE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.2_1608778590481_0.22494715836785462"},"_hasShrinkwrap":false},"2.35.3-next-1609168353-5d1a8c8b.0":{"name":"@xdn/core","version":"2.35.3-next-1609168353-5d1a8c8b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.3-next-1609168353-5d1a8c8b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-yPc8WXZe0g84jucohrKJBOhXO3eIS4Q4iS2f4IpCFBzEEsRRCP0jQ+gaXT6nudc12NQdPp5H6I6BRf2YRJ0KpA==","shasum":"cf558487b20aaaeb2b2e817015fd9e08a0adf066","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.3-next-1609168353-5d1a8c8b.0.tgz","fileCount":172,"unpackedSize":656552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf6fZtCRA9TVsSAnZWagAAT/8P/2hBhWEs9sKIY1Tuar/X\nhr9Dpmc2nkNtUDCJHR/BmBMDlDnbpMKoYZ9HipkwwoqGHWp6F23ekISK+/Nq\nSSWhQHkuPzts8kBFWzeQBPxKhikJFsYaJMWrEsddOn3KGwgnMUof0G8k46bc\nKqR8J/kV3Ems1opN/JRu3DuuEU7JN64v9A85bjPaPS6EEUgAxJRtpP7ANoYX\nzhT92AYezrNeakR5DHlvN/xhhHdS2NKCGpgv6kGOlT2jFrcvanNyI8mAqf8g\npjzsWj8KwvoSR3pcX8Nn7HLTBOtsCMav66OSZE2rkYEutLTx4QaxE8Aangw9\nfUAJh0wMkvfmBmrukHNfSmPJkQ8mLRPCRho9TQ0mG5Lga1aCxV6RFjn2fedR\neoBElHiI/IBqDKKn4w7/gnl7VXWIZVz4wXwYMa5IZIcgaQeUDk/l+EQDGD+H\nKVvk82V+B25tLtcuVVIOP8IvLNYpxDNkjG2MT4HNkk4Xxv3yMbotiPgKPjFR\nY4rUHgjSFMDT4eoPx6YkGyRBvUYAUzfxxHxyABwndlzON8OjGbNofgbFC64X\nMxxo1nA3wlNitxnAnwqyG33dSYFGkrKf6pkKbp7nDEhUo1FeROhKUU7ee9S6\nLZ8jTtdK7G8FGG57c/K2B08Zh3XWtkwcOy5PXMu+fKI8QeJ29xr/zOMAHet2\nqWjg\r\n=Z+q5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAwIGAjUmJ9QDXCzhM5C5ytGN6aJ/7DzUBCbw3zjqtH6AiEA1dc1tMVZVeZX3CuwZAEpJw/MnaBVskhn6FGn3Xt68WQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.3-next-1609168353-5d1a8c8b.0_1609168493118_0.5202732488465773"},"_hasShrinkwrap":false},"2.35.3-next-1609179863-5d1a8c8b.0":{"name":"@xdn/core","version":"2.35.3-next-1609179863-5d1a8c8b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.3-next-1609179863-5d1a8c8b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GjKRP7tTKj/22PD6PLC1vNPvD++egtd3dllYY5rgOK4usomjrF2UGe1eru4zfhuITxA8w/rVpT6Lgw5go1rKhw==","shasum":"18778eeea8931df9a85b82fa548a17e310e43b26","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.3-next-1609179863-5d1a8c8b.0.tgz","fileCount":172,"unpackedSize":656552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf6iNaCRA9TVsSAnZWagAAVnoP/1JxgOLDXs4F+vB/A+dQ\nvYs76G9uul8ReHRyL/btL/UtDaurWAv0oeDIMHNz1UnKUIITjNwcL2NOv+Vr\n54ZhMDwJ1OfsEuXUCZheL20N+A6iPD5wkX0DPN/M6YE+tW/UbCYVyUscC7U9\nr5CaPmLqseqraQi7b8o27cr82+bKdyMh3MdU8FKPZBbAYC6DwRExdy/F7d6y\nMKevrow1V02YPh0vmwjtbbcevu4mr/XLC2Qxj5/tQ+40G8XLRVIBojtQiK4D\nof+ws6AxaAn9hmG5n+7FxASlmL/k5PejOn/BVonWN5QVdbGBhZixCLFSqIJf\nzwu9VCox1eQb5yf04Y45YhZebMSz3Rja94O9LM6rsTySzS1dgQLA6ft/b0N2\nwRkfCJFi/KwwYC2LsidH/Eg6WAro0etUulsa98E5jsbcPmlsMwwQYHNrk5fn\nc/ehkyW9xRKX19R6NaWb+68ktMjVHCNBozZnTbbWWxWk4Q1pKun243Hr4rxK\nyVb1AcnAvfZOHluds5+QMUhSqsUCBKogrwOnag+2mn80RhN5lyYLYQMJMP0L\nUxmGKKMPBF6ci24o3oXudZbnym8DeQjmx8ZXypWFPEub1gKoFP6NiMP/+Cf4\nMJwAPRT81Z2bg78lJfv1vYZlVrn44y9nhAAPkYd86s5SlByjhIPVbZw5jE2L\nN/z9\r\n=6q1g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2jto3YgFlHDMZVQDwxNKLuBuYkwHYXh0RSmiITVkhawIhAKTIM/tNDOcAZELWQOkq4p0p1o0a4E/j3N77i/XcO+wq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.3-next-1609179863-5d1a8c8b.0_1609179993755_0.9551495654653199"},"_hasShrinkwrap":false},"2.35.3-next-1609182300-5d1a8c8b.0":{"name":"@xdn/core","version":"2.35.3-next-1609182300-5d1a8c8b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.3-next-1609182300-5d1a8c8b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-v0Mv7bRQLAljuL9CblaLSEU8wRnaJu3sxruY6PC4OYhEbQHCHnJsXprizmkRgAUy2Opv3edrNnDoopm4ah4tbw==","shasum":"2f28edfa612d07209d0b815bbb3292c94cd9423a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.3-next-1609182300-5d1a8c8b.0.tgz","fileCount":172,"unpackedSize":656552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf6izpCRA9TVsSAnZWagAAoRAP/09/Jsx99t1TNgvIGgAo\nDa5NG3QLT0TL/Fi4UCgnP5mTKpm+fE66Ln4UX1MdOd+oCnaT4sOe7CASD2oS\nk0KuW6oqWSdth6wY29jGjVefWwWUUjVvfBz7v7uQ9CPErDWbmKjVubN4N3ye\nOJJCesxpW/8fjbcV7Jc6GolQ01ddjaai1ss7bzi38BBzfLX/KMXOEu2xBavn\ney/xrXsuZBUQiUOeDfCIICv9JaGBCfnT1o7pv838ACu3EicZ+F4coQEAwDcR\nxAY3l4iPnM+M0e6L27+8tg6yauTMrd/h6NXyFM+qhz0BqmEAOA1w7IoJQyxD\nknYkDMg3/kFAmhKOYcGdUNPiUSWHanAxO6YnZ4YAn6Fg8+4mE/UN/eelKzrC\niexsnq+nZDdC+3TK6Ok7htkP2wabuxkCXzReNxONmS2c5IJUgoy7PuCmVCxL\n/m6Dwv7u3NZRMv5DVFoYHmsk8ijgVsH61fFbkBjpwqKQOs53z+5Gq/eED4Fh\nXB9I2L8shzAwVfLmG4hbYS7A967s5v/OpI0O1y/evmO+N5Zm9q9sYkWq7O6F\n5hzf+arSCTXcGXbhpEjD2ei9bc+oChrV7gGgsghWNbk8z0IANquzwrgQ1gvt\njlCEELhhXRzKclUHSG/8haIvPKFsn+xC86CUAvnFUxchaEqLNQIM5aPifz0z\nqhcS\r\n=uy5+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHz0Mz14MJpyugSaRF+yzZz1TDSdgzmDA7Ihcln8phggIgXQlCcST4aYgOfVIMhgYbh/4gI4bXb8j+XitNHALzknE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.3-next-1609182300-5d1a8c8b.0_1609182441250_0.10418210977302667"},"_hasShrinkwrap":false},"2.35.3-next-1609184825-5d1a8c8b.0":{"name":"@xdn/core","version":"2.35.3-next-1609184825-5d1a8c8b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.3-next-1609184825-5d1a8c8b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-feR1Z8GlE9tnWmCfPpYxXj8dZCeTFny9ywI0U9wV4RcGrUEiUISwpIHV1Z7tm86HIRVonNb8Umb0VcaMJzp3Eg==","shasum":"b689edf32ba15ffe85cb718b5cac4345b3aea896","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.3-next-1609184825-5d1a8c8b.0.tgz","fileCount":172,"unpackedSize":656552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf6jaiCRA9TVsSAnZWagAAnDEP/1Z6xnVBDwy2JB0Wiqwo\nu6MhulWJK3kQeof4Z4ECLFbazxnFvvf4O8W48TbichAU/kclmh5c4jnL0tC4\nmZEEXagkSI4EYS8dn+CZlW2FQNYdzEnfyuMutJoYdTFUXCC3fmIvfHZELKfP\njl/ZtafBDgOVJQ6y9urC8HyMlVIvYxyfMGAOByrS9zty2LCZUhoPsd1CBA47\nJp/G95AKITgflS2ljiqx2m77KWRRqlW+qR0xG/MHTbStl9GMd5mb7qyhhnmb\ni3ZWz3ZAaM7aKceWatP2GOz7URO9XQ5WRmThIASkY+iYn0O+VhFVQUJISKap\nNLfjL69LtLVY/xJAg16BKYp5dx063tqQ0zDsDF8LDZzTvX6Z6lIvSPHJnKr0\niWAU+RuhEWe1LC3KUnSt6ACvo2vytOdY9SiQtEwrXi1ZcoMov+SalyOjqqJC\npy/SZ1o4JWBGyMZ3iSQCrM62rWq4JhJRKvsicySlxMsRAZ4NEsw+kKnHnUWH\nPw3MMEBPDh7Sy4BPlD5aqGWWqson0ECyPFKQyM9kzYMEZtfwlEEvmYOiO+MI\ns4kDw0Yg2k/luHq3oqDNG73eeHjgAxsZr8ZQfmZOjYJT//9nUA6PO+21Fnt+\nsri1Brkg0Ap3gB88JQuCAV2uYs8WBCQb8cTjG3fnRR5IYJRL+W4faro3Fa3M\nj5J9\r\n=Ftem\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBel2oNL+G/UViPfPsRMBDbvYUnTOt6KMG9kw7W9wW0AIgeL+uD67Popdlc/MM2S0UWGfFir4SNgAfOD7qXRWvJDc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.3-next-1609184825-5d1a8c8b.0_1609184930291_0.587284916764885"},"_hasShrinkwrap":false},"2.35.3-next-1609184855-54158853.0":{"name":"@xdn/core","version":"2.35.3-next-1609184855-54158853.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.3-next-1609184855-54158853.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vB9aY4pO/Yf06lnuoSZCdk4TOg3Eco94/db1ugLkyr3Mpt5iIP/IeVWlvJFKmQJ0aBxHPchh9W7g0M/CLqRiTA==","shasum":"a80afa2b9a2165ce2dcf535f9f366f64075d50b7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.3-next-1609184855-54158853.0.tgz","fileCount":172,"unpackedSize":656358,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf6jbgCRA9TVsSAnZWagAA42EQAJ44n/hjbMbp7AQpyIft\nJ0CsxFLN/kBtYbAdPdN+rBhevGdDdDeq2O7FNBkqs0wt/0jbSseYNIzIiRBm\ntTR5sh4AAPe7tdJGpWxlhnFlNpBDO/IaZuGbb/tW82hJGKDa/y/lyxepf2pL\nXzqJp+/wHpdrBeZei3IjpHbT981i38hpMfPbDlb0NJqjIeC0wvYBmN/yfXi7\nk9xvQ7iNmO+N7HU52RQamrIKSUwokUZ+3MCAqfg0WEXwDAj9+iPSILTuOqSj\n74qCB7DTmpIEMFZGxUeDBGtCr9N6Rvzsi/1tmYw+pl+28b0WFNXAAmtPvN+y\n4P3eSmS4A8LlM+4XuRj5t6FUK2qbJdIKyw7TggnkhKymQ4MnSzezCRqxFaia\n0LK+MlIQEAnTl2w/olT2YjL7s84WUw3Zt0cBuEh3l81ys+UxS09XQDttr7s8\nGYD814Qu/7VG6wmqH2MuwOcS+6ZqhxzwM2xq0W+C6d/JvwbKbJK2icDREoGh\n1z7QyJQRuASpyh17x7HoSf6URXpUnzZcxF+AQhb47AB7mMEria30iHt0q4Lg\nJpAXTGWzyctsIjawHB1ET0Kb7k1+r99Hj0RFm8ywUMqUceKfa7Ij79Wu6eZi\nSdj2pWnyZfNgJywiLJijX7YemzN0i+yWSXIJolXj3kbKghfDQh/+1nWQcN1b\nlJJN\r\n=9UJG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIngb7WOuN0U7lBFfo2Wi/FIZs7yqoxt1BmIuYcVKCfwIgNWoABmuJpqeBXSu/UfT3jkNaAF983CjwUtfg5q/BO+8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.3-next-1609184855-54158853.0_1609184992036_0.6870791639786697"},"_hasShrinkwrap":false},"2.35.3-next-1609186613-f8c91d9d.0":{"name":"@xdn/core","version":"2.35.3-next-1609186613-f8c91d9d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.3-next-1609186613-f8c91d9d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ncOvz3e/TlIUkGZ1hl+g/SUTQG3kOVdoW82c4Wpw5VrIhOP2kl7kyO1xXlOFX7uxFfrEOo3+VMUNxiEahzrJ3g==","shasum":"8a65af34a2982eadf80e7df572ef9a72982e8a30","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.3-next-1609186613-f8c91d9d.0.tgz","fileCount":172,"unpackedSize":656548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf6j25CRA9TVsSAnZWagAATDAQAIzLc5+C0H4IV1KffCh3\nXP2S2ezpOi44RSR1bBWzZW9jNyj1eewKYE/B58a/LfLWrvD/Uk5oUMr63aLO\nPkMf0h8QQFA4xTieyZ0+tDaRUzhdVOMGN0NkHzXkVlBCTsBFfUfxh5BNT36J\nN5Qjmqqc2lx+ScqN5IFSNv8jwYhPoOHQlzcvnQecM6q+2u9fmpdn6MKZs9T3\nvWIUzJ1yfsIR/VvdccDTbGIPZUlwvB51649rZzoNuP1qgEqoxJOvQP3IC7FK\nISfRTj56jRvh+h3OOJF3R0w0LYRMEtPfuAt+cEFg/h0aM51EhqA3qw3V2lCG\nMW5fVr0vBsxS7WBEf4v/I6DotG2F6GCoyjxvevza4M2OdN91TaN3JMz3OXwo\nBwelmw0DB8Kw1Wm18f9YWCirh63O+Hv2Fock29bwFRaR7G6v7MeQn+HhZipd\nZ7PjOhcYnI8h5fLNszPVLWjZ+2mP63PVF1FdoIXNjft7yVneaIxbTd0LLmrV\nrdSLy05ZbQ4OdvP3yKRl4i+Vb77rywiB0alUBYhgB0itkDpkHP+W03nvSw3H\njOuh7ZHIQ8lunylrSVb+CMjB1xAAlC0QcfAkGGfBpk4cUlcatiqRAZJhoYaW\nCY3YNrzAq+SdzAUbKioAJU5qf83HN8yu0RZ0tjxJs32quQZS7m1QjRgamWbR\nOlea\r\n=ZmoW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPRCU8di/qcj6OSYIevjyWe26mEhW3e3mYx3zDOE+4xAIgD1Kr3+MkPBUlvYC0vWZyO4UKenDwu1XsLxnoDBREIbU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.3-next-1609186613-f8c91d9d.0_1609186744716_0.4126293909715055"},"_hasShrinkwrap":false},"2.35.3-next-1609188692-ea33ead2.0":{"name":"@xdn/core","version":"2.35.3-next-1609188692-ea33ead2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.3-next-1609188692-ea33ead2.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-k/YCNtKu845LgmdE2CxmR9bGRPglM7JIZbprtePAuGZ5JpJhVAhHKZTOhyVOhwf7XJMP4wlGuBXzv0LSgFNx+A==","shasum":"c71d8ad4923bc4746ca13b63c178f2af0007cd37","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.3-next-1609188692-ea33ead2.0.tgz","fileCount":172,"unpackedSize":656548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf6kXTCRA9TVsSAnZWagAAfNQP/3HCKMYfwtrWQIJV0EQi\n1V9+FOleky1hYbK388i6BIcyBVIM6pXaNHJpPq5U49ndwLl5KSg4EKJtrrvG\ntMbE6SbmsUqMdKUHoXzMo7jwq3ZxQxm7hqfOXZGGw1aqZF7SKbSQxqBy9zsF\ntNjAA8k9lP+StOX+3bIBXprDeRrs4pXPHsHnpnNTBnANvvNnv3dhmnGiJIhL\nWr830Rh2F+K1m6nM89FIkWmDAnSMQdrXXI6dvexmQdcAdQFTOl1ApYxPL8Il\n8JJY18AjmyLuI1rDY6aHzKgr6Ap33VXX1Rh9zUFK3sCQfnV0gKKAlPsQTXd/\ncVUoUE4vUMl+94gqkfsaDwHCWbljdpxvlHVljw9UBWmO8mnEjDQrNg7ozaXk\nkR/vwBGY2383yt8nc0fS1ZC2nghqVAgD0PHKWH9sp+t0z2Km+SummcRnuQwW\nEahWgGhtoAU6POqsBPoYsXZEfheNdz2kJt9rPfq0tDoO+FZVrqFyJWzDf8ZR\nJ6aZOgFzt0VzHrq1Kyvwa2yN/AnECPGLRtlvlXvcN0cckdVN7pF3fOa6oF8J\nrc7oU2TsyBexCi/BCyWxKtqvVusqCTtBSmyV/8RrI+LHMGTLbro1qhKRaN3d\n+jj+Rt0sWRwj8yhilOyUMJDARu6y8K3sm+0NoxWcXop4XsJnhqleGqwsIs+S\n9Twt\r\n=3L6I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGk1wySht9JDqlWcmvgEW8+03sSsBTS5E5BYd7UpHk+OAiAGS09mkNYBRDeZZycnH6o3n9Mo4GPHoM3JJ7/ILmMOtQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.3-next-1609188692-ea33ead2.0_1609188818595_0.15398366004962893"},"_hasShrinkwrap":false},"2.35.3-next-1609260701-f8c91d9d.0":{"name":"@xdn/core","version":"2.35.3-next-1609260701-f8c91d9d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.35.3-next-1609260701-f8c91d9d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7kuCRycBMnBRa5JmI7r8iXk4FRcORyAiHY/b9+fHYs6IlHXc/fqDj+3vB9lB91Se5OLNdVSlqw97kenkGoISww==","shasum":"4128759eaf2101931922a6d2910ffeeef7b17d2f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.35.3-next-1609260701-f8c91d9d.0.tgz","fileCount":172,"unpackedSize":656548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf618hCRA9TVsSAnZWagAACuQQAI4Lke3qmaimkua5weHr\n5S6usB14aDM9e3YjZ9O7p31cHL7QrJ4j/yiglsMc7WpoacRTJMC3MJao3bP9\nCSzkiuRqC65Y/pLgwEWrWKCHh2gQzmxK2J4e5+LB0N3aEfEbbLYf6NkcGvJQ\ni68jcIpQgNUKLFF7qlanUxzadvHTLyeaMGZBDgg4r+OcVIGYx2AyCbVMQpJK\nD0GzYKKFZqxvM9IGFoJQTqjkhYG7WjT8AyzdMaHap50e7AcX4uwto0xn6ho9\nBhviGT9rXCtXx0v7VJLyeCI9vD7ap2U5lRFQggxlx5f7DvQ4xnW7I0nUU5vv\nKaGkvmOW85gA3Utu8gyguC28QTOcqh8HJTQEe+dYQt3bCbKF/dG4n2QDRHXM\nfRmQHQJa8IEF3rjr2E66WirUKUMtc8oh/X3q0IBFQT8skOzKlSdiqwB2Ehdt\nrYD+2UiWQwoB0GWRQFwuRKCGmvCVKQpS+yW4y9KQ4vHq23yo2X+VAxB7D5v0\nEPiez+3y7Kc1YpV2VipMpC5bACW+ldwKA5NiAX65yi3RFkxzyOiORtRfIl93\n9bwOEMGUzDWj0NDJOg/caLYW1+z4stma3h/cJ1X8V8PaOebIug4u2nGaW2Vd\nnJ9eQ2d75dr+fFLHb7ETQGgppbiGevxsztlybAPUBd2V8zzXnzWIBEZTI4Pe\nwV1A\r\n=Swby\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkEeGZ+WUCIrYlbycVeK14x+KLaYfJRkmNwiJXWbKBuQIhAIYnhoiDlR0mPAjuI1nm6OkKejRmYtZ2e9AovwEfFHtD"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.35.3-next-1609260701-f8c91d9d.0_1609260832545_0.8073090942893437"},"_hasShrinkwrap":false},"2.36.1-next-1609339912-45a9c94d.0":{"name":"@xdn/core","version":"2.36.1-next-1609339912-45a9c94d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.1-next-1609339912-45a9c94d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1VWVCJx2slcZq/KO1nBffWue+s138TjAGM8Xb1erV0StaCb05oOw9+SdZ2LKKV+KilSabx9j3DJlE2rXEYskMg==","shasum":"f4eed6791de50619d94696195228aa5f75880b71","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.1-next-1609339912-45a9c94d.0.tgz","fileCount":172,"unpackedSize":656548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7JSHCRA9TVsSAnZWagAA0QwP+waEiSlc1jqvZYUvwdZV\n9LytyRLFjMBPFmk4Ng5EYk0mAMYVDQK/Y9kmiGBy3RzRFUr9LvBD6E3AU7FU\ndphn0FWFVm/cQsdyr+QrMJ1m9a2ZPaNM0CbTp/MTLiK9eBNsfb9trTFb4M4A\npM153EwLJS8PWD84G04gvQyDsRDy4r+6XJgYch7Z4Js5Jj18gQU+dz0TmI95\n9csEKG77N5ugJ+c64JcaNrQCchKmeHhcWVGKuL/3brLXIcFmcbBSP8NJBUUI\nDoElP2ErEN2/macWtR/95XEgiRUgJY7fnbTEDpoTJodYwE7/lsLPwCZhrEaP\nsF+XP7DhjEIV4f1q/CQVxj24TTfPQBTsZZv5LUv0XPB48a8T3qQE2IMAuDTH\nTnBwX7CUa+49UN0teWn0JYACGDKXr2w1ta+NnkwAr1f1Fz/WBA98QoNopiUX\nP6AWQ067A+x8Xdw6HKJ8OlyfTTrMedR2LU9NB785yd0s+EQTgR2rUgPQbRS/\nooASx+NEoNF5mPGnLJAX85MvXVvZKndPr6EN9m3j69OMLnnJMLqUxp+HCOtr\nIWiukBAReY54y7T0A3URsNcn/AgIzrdTZPAlBLvKF17H1n9ByZg5eWkBBneZ\n4aNjOvf6YIV58M7Jp/XomxR/O1AYGWU5Dn/O9jP3iaNWeD4ZTTies+q4J99E\n33uz\r\n=eu3I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEb29aWFWC68GT8HJug7o4+AN8byCxFMaHyU2bqA+Cv3AiEA4q1l3aWUzBlzEY0ivmDfBh8mv9A7JHhvVAehLy+LccY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.1-next-1609339912-45a9c94d.0_1609340038361_0.44521969910823356"},"_hasShrinkwrap":false},"2.36.1-next-1609341706-45a9c94d.0":{"name":"@xdn/core","version":"2.36.1-next-1609341706-45a9c94d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.1-next-1609341706-45a9c94d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-32DZ4OVJ+50p7xcFEI/8uHI641vCD6OybLQSbsKOmZfHzUVMmq6EAaGt3QfHVLjWrcJ5yi9RZO6PlYUcy5kZRw==","shasum":"a9a7fd0bee73e0a0d17a592bd8874de75eb2e792","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.1-next-1609341706-45a9c94d.0.tgz","fileCount":172,"unpackedSize":656548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7JuKCRA9TVsSAnZWagAARp4P/2UVdydw25zUIpM7fYC5\nyGo4dffN4O0lOQ2s5MKNgn6l7SXnB9xygQKqqcqgWlP07K78nBKyN2HU7RiW\nwyPmSnu0bdLgZpMvAgFYAUO20Orh4bdTKZqJvz7gVEhDx5u9wR3UTJh6MMS5\n8LtdJazOPIQmlgpjjnnZYHa6Qzzsk3UovKTyJBcCKJWDtpwvs7/W8/ZvB61o\njmoBX3nFJZjJ6AJvoIjX7BQg16QuVioXCBpPRnEJVIl8Qxu4AyZYvSZJM6ho\nmPMNNjYb2qV0Jaqe+w0vzoS6kerBaaDOe/WhG62i+uCiWLW8XSylwXeG8nD/\nshMhmmGHBZ42inmu3PpHrRNixb9rfa/e1NQvJCKgTY71rdlgblLvmVyMBgOb\nOC0rOFPLJOT4KvJOBMw81mAZbqWSLgcJT61MHHF4vgc/QE2b85oH4SSm3j1f\nIn3ZntjY9XyVc7pNNUMwh/2AQlYN+In5uSZ8h4GPXqL4MwVWtNXGPoe5Tr3C\nqYmX0e4XdFZFenKLsuIOgkQsfTDNWCPKDLq/BABzFxtJmEB0DhuZ+n8uzNO3\nFCvlvAzwbQqX0amq40ZSRRRajL/k/2AncIkMnfmCLNhQRnFymVzpt+ChtuQe\npEl+i4k5cdnFFo3R3OpZqXZ4j2f9VtF3aJbJEm5gxHKz5anI/aaI8ftV/SKJ\nOvAa\r\n=QwY5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWHcBeTJptbuxGyOLeS+HEJARMOTpiWpLQoquPlzYpYwIhAI8QQathJ3zy+2CTWvbShFwCqp8XXseAEP2n7nFW69iI"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.1-next-1609341706-45a9c94d.0_1609341834137_0.7555694350509181"},"_hasShrinkwrap":false},"2.36.1-next-1609341954-12f562d3.0":{"name":"@xdn/core","version":"2.36.1-next-1609341954-12f562d3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.1-next-1609341954-12f562d3.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Uw1Frfojow0eqnvIvWOZTL73qwmKZlDvTLF/8oKdHIKkzDZhQ6N9EN5PsxE6oX8UfayjGMLTNJuoGW94duP7kw==","shasum":"5a4e8d721b4f17134bc1b585fb848fd3fcd1ed53","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.1-next-1609341954-12f562d3.0.tgz","fileCount":172,"unpackedSize":656548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7JyRCRA9TVsSAnZWagAAm28P/iYQCJuKSAumUYl9di/S\nxvERQfETAaGw816Eug+h0L94LP4hHMOWfMcXfFdFkYBWOGVAU3HZ/Ydb9YGf\nLfcgTUmmJHAFRgMlw4rkaMPBb6vN6zEy/DYVtOssXOS9bxy0uy7M+ijKRM1n\nt8tAHSDuPVzPpBBK3Tih7UzGQ1v5odBT8fnss/K4ZxAm3KOCsIO2l2fhfQ2/\noDADnfUomGHSFawcAfs5w/uBd63Uo+0QTRuLitVY6sk/NvBkXV/zEYtYkJW5\n5tuUH+j2/xXfLfNRgC3zWCnjZyEXX15zmOhFamQoapqGpWgyikkRwsN9lb/L\nTQycD+QbZDxzF2YVzF1m2IAloffghU7VGfZp5yPF4Hc2Z5SoCbTKxQDIcK5h\ndXFnhCONfPBhOk6ActMoe76BGmfW0W+3Pc21SQD7A02U7bXw+DCCKr/1uJ2m\nNyCmDVTgiO0KV8DKpZMHO6iIWEYxtCtlkxoDlxAxe+swCkG1HAjUw7jW0cHc\nANqgmoaipGHGEasG2mH5ZJWMuKxmiUPdPap/X1Yd7Cv/uaMLHv5GeH6o2a3q\ny52tbLDC5l6XWbbFO2ojPSeYaJFvrM2piU7boE7DOsEKOtDR7IOgiV/dfG+9\nY+BcjQQOcsn1DmNZDkEWIzf8//3getOpRoLSDHMVQmjZIbtRZT8B9MQqipii\nDLZW\r\n=Vg3l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHwRzg64IQj1xgDfYkoqA1GJ1h3jodV/xnWlRVpL7kGAIhAMzgeb/ylgoiWCq97JnpbDk9k7GM8m7dBz9QU8sIY7k+"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.1-next-1609341954-12f562d3.0_1609342096417_0.4915586747859755"},"_hasShrinkwrap":false},"2.36.1-next-1609343079-45a9c94d.0":{"name":"@xdn/core","version":"2.36.1-next-1609343079-45a9c94d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.1-next-1609343079-45a9c94d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-i6u0CCNIQwybV4KavtkquSOTBgnmLqCJvriJaNJvwGyZbodyID0BdPLcolorj29bMW8XAtKwoTEhp5XG4lQbmw==","shasum":"d0f4595046e740382811d046387c3be492e9d05e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.1-next-1609343079-45a9c94d.0.tgz","fileCount":172,"unpackedSize":656548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7KDZCRA9TVsSAnZWagAARrgP/1mJ9+OAAe6WqRYnZsIa\nztRttmNcACyHPbmw+HPncypxgIGrISLqxruWTH13QCP/BOtn0KYcXh1fy4Qc\n8kWQRD7INrzE5kGa7NZ2j3AHlZ4hsvx6mH7V3G/D9qhzFxTpkQBPzB6txxSk\nflix5b52lFZzTVkG9EPQZabvJ023xQRuCK21NwCNI+EThwCiZtnQ9+KFYEPt\ntmKP1Ty9yaB7+Os1a8WGHHMpA2GuxCq2sh7FgX58wupmmAcFYL2Xa6yL4QYy\n4f8Z1YCQTcLtFdlwlPn2ZRyj11XxDH8I1eka5MfrbDHFZhZavEsMBsDahFen\nOr6hI/u0tRCkYvNikvlHxymZ20umTAQ5zGx7KGs1hoUdUhwnU2ENK1cPwL2L\ndX01exyZBRAG6wRhHuSGtOzULx+rp9HhPizagJKFVw0567UIdJdK8mHGGPmi\ndrhsPghUe6JTm2mKEH/3DI5C3vNrKGCETPcvhHv10c1HOUONhV/DFGi0tvXP\nbavqOyD+EuC/fm3VdoCppxiqn4FEcjzdRJargejNSwgGcN1hy3Z3d/WbZuBs\n0kV2v2bRQoXaDXY4o+dW1brt6oXOsetmkyKqMYE0RqUgDjM/poheUWsQ/SUA\nl8g9PxcZr3JmqPM8djXlk0B2EHoKcdqzznuKQBNmjbwrsi0r/dOjKsr7+p7O\nvKIx\r\n=cXcq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGIsgRcfam/UtjiI0+64sJNv1FrrO2meb2wvWbhdAy04AiEA0YZEgFl9LJqfw0Q0kyBaE+IzJzQONuEj+BYEakLRFNk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.1-next-1609343079-45a9c94d.0_1609343192983_0.37605301306693906"},"_hasShrinkwrap":false},"2.36.0":{"name":"@xdn/core","version":"2.36.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KWvR189JkW1X2sres4V99bdlWAK7nwPbmTFp3r/Fi0g3+GvIfzmmjFSEC94Z76mYjM3UI7CxrHIvRq+/WCjYsQ==","shasum":"708e53d528b18f196ded1c6e7f7d49f6a649ed45","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.0.tgz","fileCount":172,"unpackedSize":656494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7KdaCRA9TVsSAnZWagAAhqsP/0FSPSscU7dY+YtIuErr\n6NWnpSVgUjoHsKKGKZlo7QdcXdUq03ee/HfYr2XPVajYJzVND4mnRc9XPRl8\nscwdJD2kYgOCwJoSe9otuhmyJpg5nnu8WSJigPJ9rww3/3gvSkyYN8B0JM8T\npPKkldBXj/gfIulhVnvAKgCo25mDZruMK6Lr3s2AgAUFyg3F3LeQB0K73Llz\n3RjYySoxmSJMd3f1nC7NdIfioCykD/rsdfWBLaVEHP0+km9NZhqOT0I64Zm6\nTn9SDVuD20fZjsdvb+M4pAVQPbR0K9W38KZiJJq6gqWjsZaGhkbwwpXGJz2I\nIFF0+KhOU+gpnPaHkeH/FIOLq1HEuYv8mNAccBUsTP87kdlae4MOiDx3+w+w\nwDUWtNWR1Xtpk3GMvo1TEJ8GBSG0po7q0o/mVHhZL0JPl/jqche0rkklrQlk\ntYMzjLgjXEjGcQOdiHEJccHMjqpU+SdQGqiwL0VOqWSBNYVBS+aKOEPCGeMG\nkH7c7YI/WuX689XpXGO491ej2BzQkWy3+CwBeL3NCpNe77H+k8HlJlJpy0GI\nyFtBd0/NKAbpWz88tuf/efztaCHuAzcpZZ7nBmrD+3MirdAQR/4k2UdEQW5a\nv9VhnrYJsS7rbVt3Nd0ZDrXMQ7e9waYSVArqnWRjBCWbFPKaPMjEJ384CxHd\nDdkw\r\n=48wT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCqURXtj67wYI/Ug0oNHep1bTNHdkz+2Zy2xmdMGpBkwIgaSD+UcDrp8s34fMC6fpYWD8z8eqENiUKz42Gc4dAC/8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.0_1609344858053_0.5746647170717434"},"_hasShrinkwrap":false},"2.36.1-next-1609353465-35c2ae73.0":{"name":"@xdn/core","version":"2.36.1-next-1609353465-35c2ae73.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.1-next-1609353465-35c2ae73.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/GJ1bfbZcdTJYMwvs4M+Aja+EuoEkGyosDw/loHGlDbnP0kMKk7JKMw114ModG2+RFVFu+lBeddNvRmRS/agcw==","shasum":"8f68f187fd4a04879b3e202a9df55f36c911b0af","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.1-next-1609353465-35c2ae73.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7Ml9CRA9TVsSAnZWagAAO2EP/R/50GB24cQvkdhceyJ1\n4T4bhMdaLf5Xq3v8nNdohWSqP/jthCIZyYoSg5Qk0UoiOg3mbIyoXm+mrX/s\njW904+U+rF3jXVLgW6vXgG0O0CSNH55EwNWOi+WgDeTNlxkioG/t3sOq9F3Z\ndrUdEPnhQ0DTStz/BbDfJJLbWpnZctDxQC9YsJcybLCnmh6pH9qT9jKEzyPj\nDZzLsAcz5fUJxGTXCxW9bimofvgBAOxTO6dsqlysBy+Nym5D/bISKR/DXUsj\nyMDUEwJps0a7dNRU+bZ9QTmI2469q2xosNCBMW3qLYHCBXAio2Lt2fpqGEgE\ntpV896e87ILVXVsfUp7bbHbgMFHROR9+B1A3HpYh3o4WbpxR3a0+OUIkzvbG\nIJA/nZ3WjMurrB3KJ67XpFZ11kqU65W8CAgXCZF3EXj9K5iiMIcOxyffHvov\nPZdXYHAyCQ41NRanmbAk0QziCvTT3s3vlWHIFl7pZWFdIrwEfcjA9683a4BJ\nP/DgQQ860S40LokD+vlbhFqId1/H/dWc8UqMefT6t5rT4sUfUdTSciwTvsfy\ntb6Mmky173+gh5ySmjQ7SRiV9XxU3FpgPjs1rnCjU0fEX4+IECt20sOZXfOF\nw9F0PuKQ9Q+IXU6TavjOXSB77vCRTLCVNm307aq3jBiXZ6eMT0acse2FJf0c\nVSNd\r\n=icSD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQS21kgjvlLzDXgoMyrqQ0ag/t504pwLZD9jtV3vPljgIhAJkgP/ExgCuvhwADeMPr4X4iLW47+UUrPFbhornn9X5O"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.1-next-1609353465-35c2ae73.0_1609353596798_0.13113050544448224"},"_hasShrinkwrap":false},"2.36.1-next-1609354696-db6c193e.0":{"name":"@xdn/core","version":"2.36.1-next-1609354696-db6c193e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.1-next-1609354696-db6c193e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MKWzb+kXsfDCj135EIQOtFPV6Hzyp5En5YMJdoYOMv5XxgT0NCW5oW69wvFTA8ELoo/jBH1f82GBYm+oThCH/A==","shasum":"7ab2071335f9874d6894f0765dce5e79f5266c2c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.1-next-1609354696-db6c193e.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7M44CRA9TVsSAnZWagAATFkP/0+m0r5o6J2hNG2hEzNw\ntEJHRscuvxp9zh5tn+5ws1w8XTlM3m4YGYLAPMp7KWQAC+naJ4sEGI3sjNHH\nkdocL9yMdMnNMUGQfu/wQay0zOUNOXn0Q8vzDTNXJEwk79iedfQkRoTC4SHF\nBQSRLl4vgEaC0iShwtm8SAjFsnXm1amXZfzN4oLQUbmwRTN0LDk+TrAktc9g\nReyFdrKT6l3kXTo+jXQawF8wi6xbiZQ+R1OmBrriEVGnctd0hJxm7NE0LW8k\nCCYq49eVuziOR/S3ygJn5QT1baTJ0HwT6ZhLPYsbu4rB1NKWYJzqDPYvxIsE\nN1lY2mA37ENBH/ej5l/8oKB37D+5MSH2lMIQPg/2OOlit8lnFUSeRrPHnbw8\n7mnDjV1K3TbyP3IS+dXOEkgGzoDcJgx1GFTy5/cvHjCdhAQanAevtTB+NFWN\nVfUgBCsucIznYbWwnKqfUnMgwnA1SeTBNeU67iLoNwP+xhH/GlVwBvBjkr9B\nJZXR60YM8rXf3BZl+dJucsuXwYdzettwHksKm66bw95Ogux83dZDR4CkZ6CE\nrwvoN5cvV/XnkfrQSK3IQwJDWKyKJbnrLIfMTHUNud2PSVtPcWj8LSx5waui\nxS06V6PnHawBpxcO+Iu8F0EOPeb+8Y8WoWOt63jLQFNu6PewhVU1a9vzjabS\nOQv6\r\n=R2kD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDn4eIl3elAsx+Nzbxx78aRvuNZyS0j+uBgUHmIhjm2VQIhALXdes252ro8X2z/nYO3ZkYTVh91ccVuQWtQ0zq6fMu0"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.1-next-1609354696-db6c193e.0_1609354807560_0.5823157650999695"},"_hasShrinkwrap":false},"2.36.2-next-1609355383-2f939fa3.0":{"name":"@xdn/core","version":"2.36.2-next-1609355383-2f939fa3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609355383-2f939fa3.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IruRI5A+pq2RNPgJLfufHvh72Ke+roLVQt03bgFa3SZql+kvtdl/vxn0L5vBOv1VOprsFN6K3zPuR/tf1JJOQA==","shasum":"08fb10277778f4b49af54c6ec3b9643a1216fef6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609355383-2f939fa3.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7NDzCRA9TVsSAnZWagAApGMP/13XGZu3m7EerKCGQ58F\nRlwJMeQ+cTXPVSyBNGDJktTlyYXO2OcjzwDAUN0AA7j61QDN1vgAR7UPQekI\nzftzmddRpaUMb1UHqjX6NkqVwFGnTxECV/ri63qYY04ADi9Velxx2JXRtUWq\nXTi+Adxi2aYe4z5TdqeeJA6SlR6pu+evYldAFF4sg7xf2RiPo+pPBSQtZ3JA\n/IKnWkrBy/UjgM/ynYE9nTueMNT/mzz1PlrVMVxigyvonDOFuZCgUSwUqXMF\n1xfLaK0bhtqmEBMuDkdk4nLLcmbVMepvMwgVhOp1hTWGK8FkkhEsE/cWt5Gk\nxw7BhyqydZ3fRSJl2ZCijiMqUBTWRCwUdrNUPpJfGlqfFzsboVSaPf9/ZpLl\ndwk/AQFLnO47VLjL+jas8gO624LCbtWdhejelXwBkmUZe1DZZK8LUWmHy82y\nPBGrOFwnhpu6TSGUm7B19nZ+twy7a7z1hXRYjkNNWSNT1L2MPXQVI79NEVFW\nt56/d8S6vz15oZWkrFsN6aQdqzULBcgfv3LxDCzK1eCUnQsKT/lXIDWI/ess\nDAraSvphzIVCFYcymQSQErG6A0GD3H3ll51CShEYjpWixK+CIU3QUWOu+es1\nYR9hVBkDx0VGB/ZpWu7yAbHr7nJF2Sppc3Rfm2Pz5+i9okACiedp2ESKfhju\nvj5X\r\n=bHth\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXNJ36/2QE5edj7Bi16FDIueC8WVhfhwvCoYaFElyDwwIhAPmHDw+EIL1vcx6thnZ27+0Fh7nbmW8aRIGYYtmHYmbO"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609355383-2f939fa3.0_1609355507292_0.3568919853620576"},"_hasShrinkwrap":false},"2.36.2-next-1609356608-2f939fa3.0":{"name":"@xdn/core","version":"2.36.2-next-1609356608-2f939fa3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609356608-2f939fa3.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xGMHBjjerc1gJA0/kr9UY1RKtgRNM7plO/m+8yAARrF19OzLfE7M2Oes2RXvCTCWWwFGLwKyuwfWuSun9vPx/A==","shasum":"b54ab9de75d95adef186c8486b36654ad0ef467f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609356608-2f939fa3.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7NW/CRA9TVsSAnZWagAAvcMP/0aWJaRc6izbgWncHYEP\nMCUFstfwWNxqhUkLpsUMxpdeQ4rzhqdlnbWWJyiJBH7mipR5/MAzfLF8ZMPs\nIWuBzPcxqwR/U2J9NGt22Ic1aRmEJZhpzG42bLLJOG8EVXBJJ1Kw0XRtB2r4\nQgkOTc8Z+zOu51Hlv2xCDEneqov4WHWiebxF+vJkJy6Eb4MomK4vIgNeTavr\n9hl9pIsI+rmnOfXdJQ4HpN2MDZs9uLRnZqei9EJP9yyfur+oiKdBTU7n+eDh\nVVpKpZAloNDbxwwAdo/7Rx9Ay8q9e5F0x+ksU9IXrNs/jKz8VPoOIx7i405T\nuiY13rQvF7+YhLAxLzjF84gap3izuaUzYTbWChnB0k6Lf1bhhULGK+/9gCMP\ndnLXYQq8L5o00iYYauq8UcJ3ApBI8KhZX5lQks2+zrEseXOhPEWNdvrK1fuJ\n200DYeS8ymGAF+RrH13Qd7S9TMme0diBzM6ZfYECCo/e/GmRglilCcv39p74\nsgBb+OxUxw8WtJuVvcgWVpao68JUE3rEBUQSWthar/5WekTo1y2VWc/Py3ll\ndqa6BAXwmWWsATCkVlKgCI+09009/X4nVjudoDh8MMcptOG2PWt/JAKwbgoy\nJtwNCD3GCpAud+FV+W7LhLe1YcOtloMwJ8qfrMO/l3kMvMhl0Aq0fz/4yI06\nydEZ\r\n=sUnh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVroJftr0CnCjsRqGtchhbrNlN6AZbNFBP0ouI4uvXoAiBNkZWspoxFecSG1qj6NE6XPTcg45jR/kUCGO/+V0Caiw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609356608-2f939fa3.0_1609356734698_0.3749593389108612"},"_hasShrinkwrap":false},"2.36.1":{"name":"@xdn/core","version":"2.36.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.1","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4O0cLMHtzHGM40xfBi/X9eO8IElx/Z7vhd6vhz3loQeCWLYwhw4+gb6XjqbRImQ2HzKvhqz660LAqGjxECsGXg==","shasum":"4b5a97c6ef3b3b87b37787b50f24a40a091bbf21","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.1.tgz","fileCount":172,"unpackedSize":658523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7PjiCRA9TVsSAnZWagAAvCgP/iFeGHq5u2dL9O21XOMW\nDXZZ6Qz2T6lSAWh+/MsBJE5uGtJ19fNH5QPybzDc8i5fqY6k1dh6wDPUW3Oj\nE8XD6Fl6XSkonAU8EcrT9qnBKHpN12x8Pg96eyKP4YXZQO11GXP7w/6roAUW\nCFONLsLzHnXhVHHC/EC028Q9cDvbWmh/ykvglZL4EYSzT2bG+6wJK7lUBXMS\nqBTGZ8AzjcfVwKGn46JpoKyH5Gkvo31aIPu+v0m9W7PaFlGoEHLE6XkPIo8F\nRj6+1uDrxVKVe7G8wyUdd5nHyq9Xpv+o/UgcRQerzU6lJWCFCQYV6uhIO42F\nDbUKvgbLfocZPeMrACHEBbePsr5FyXfyTea5GSuNfRoddYU9tuNFUbtj1Ze/\nMy6w9FtP33Z+S8e0PuWDORZ0i+ekQ/WQWsqacNagItG4I+A5zBTpNXpepQ73\nKBIKsqXWPma/AMI/7UxQGvEcmuwcrXFR7LjD/0BbN5Iaqod4l7YgfeSOc2SM\nOXfA9S77kKOX8Wm9Eh5XmQ5bxRNM2NVqDqILwZVSTjoyPw6Kxe0bTSDrkbjJ\n0KtOtP5qvag2swPE8fNmY1wRk4IafnFMBSmQGxVcaBuW4oWPUuj8xgKclhSJ\nqSS3P+PIKVxFQlLSkCgmkna81W/3nSQmVdLvI+1tPGvy7FIkYJxm7geNHrAg\nuJw5\r\n=CY8X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBpN7WtAx5JqXsRgj1Y5PxiyiNtgjlRPllTw5CAlM8UwIhAIGUnAru1ks82lgwpblheF1rtsQJdGNU7+/Y6btFzjyZ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.1_1609365729691_0.28126036621659156"},"_hasShrinkwrap":false},"2.36.2-next-1609758263-8f588ac8.0":{"name":"@xdn/core","version":"2.36.2-next-1609758263-8f588ac8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609758263-8f588ac8.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-fHZbNq062klriDw8Y38rUGwCAm4yH9XmWlBUZ1X/r2ifZNX+gsBTNPV/DNGCvJtfr4vbLB7klKvrA4hSVJCK/A==","shasum":"bb23df5e625a37a16c9eeaa4ff5789832cc7357d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609758263-8f588ac8.0.tgz","fileCount":172,"unpackedSize":660184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8va3CRA9TVsSAnZWagAA2HQQAJ4/AJSgpyXtfS4ksuMO\nbOZfvGDqW5BlQDlC2dQNwlsorpDUp/aUuJAtURHxvZsfFKKYV375+IzU7Hr6\nlLl937KWq6L9JKCzP9zxhv+GRI6it66kqcONlMSd43HFaUSDcMZW2EhWVl9t\n8y1DxLqwb6opJ/nOfiDexV1AJdvLjmdrnS/gKc3LUcIDiwrWF9DTxDfggB+e\nC2EBA2+C/NHCOQ9VRy3L4WY8GCc0rb8NqQg6RaguLtTfVPmbi4uYI6TnWy/6\nYKby9ICRHjV5zC1kYBBbaegmmYBG94uM/rvpXSeyWzi377RjsJxkbR0UIAwI\nrYSUkAN4tgBd9WNUqGaXmMgLyMHRPb6h1eR3mT9nz0n01Iisr0UcEd8XxJN2\nUu6Q2nGgCKQTpd3hm7DLoy7sh+Aoyuw5IRY96HISif8lMfhkwY640lgddkwD\nQsi4Uf2t8ARQ8MFB1kanJbgUus8TuRYYvT4rtwJvv06dOOk3G4zNWR84joRB\nlUCrz3T+Tmk3m5SuEpJIi4sp2P5rv31pKxNQ8G7//2PymDcsYHPNPgTCuqHM\nl7vcuicKhEYmkOB+1M6Slv49+cVKU3Dmzx2EZQyglEzaouLSSwruML1KhhbA\nSyzy5vR986BfnWSJ65FG5lVog5Pz2NMMV97ZNifB/GA3Z0dpIAh+5WX0l8QZ\n1OaH\r\n=KIxw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgIg1WJ9+YPNJHp43GNqfnlPfF0/DNh5bRsBGLXHuRYwIhAIusY9y1y8lmCTrnrDtPaxEmiJovlfllZGCXvs3CtewF"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609758263-8f588ac8.0_1609758390763_0.7194257240106354"},"_hasShrinkwrap":false},"2.36.2-next-1609759946-5a922564.0":{"name":"@xdn/core","version":"2.36.2-next-1609759946-5a922564.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609759946-5a922564.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-r/+UhQPczslniAvnmtY74ZbPGXJ4g5+LO2TpiMau3wUhuKvzg2Tfb4OhmX+yuU2nel3Q1iy7mH3GjrMUY5cLtA==","shasum":"6f8767aa4781982ea16e3ada10012001acbbbcdd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609759946-5a922564.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8v1aCRA9TVsSAnZWagAAwKgP/321Rc1vdwV2TQO/a1DN\nEOU1+wnyOUuQTykBjelc8eSQXEP7LJxHROOMSB472HWlAynYrMtkZmYELJEy\n2Pxm8SW+p0rBjTA+IeyKxIk/YOYFLFIcvdr1mJryuClqnhCEzTUjPmqj5knZ\nV1gkFfp1fqe3RGPiWmrCDnDOpSHHHB010+8oRNEynwewaQB2pYrM7tNY7A71\n88JQxmjnGyqAOshF4Eli+kihSjeWu8hGdzynzkTWn/2JEg9JbBKTKGxXyZpJ\nf0DANoBchckkocr8PBa4R+qA15MyDgmTrvG485mvL2rb6ixhLkcxxArmo+gt\n8Cj1kyMK1mDxkrNS5Zqa+gcBOngue1cMSv4hZJpgMHP+Qmk87W6NUDidVNbb\nkaD2iI1JnSkbDCbmVKsaTjzepWDazozQ0aSZZd9bM8ZFbqaNhHD0uv70QdvI\nWgAwBmbpfjYTOGCp3nY8ySOtfJTBx/nCxcyN+aE/lwEMWM/UbvHHL7X2N9z7\ncgxQPsrVpCYjTIKSNs9GPzjcewPSki4dk09YCcoFfKBytue4qzZ/tKy9oGpr\nMRaORmUahn/P1Hf+mbQAOGfW8IO6RGFtmk2iRvUn/dEOWXqS3IDK82OQI1yc\nimcPfdPOTCwO8q/iHz3raDfccGyhToeZSVr9NGwLsRuB/PPgTgLpqe5eO5oN\njInV\r\n=3TaJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDaNTRtCLlEZSOPbAxGgQ9s9XDdr4ZA5VVflIj2GWcctAiBk+l3Mop8cr9erZAxg8pbsxMpgM3c80sXtEwnlrbrv4A=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609759946-5a922564.0_1609760090019_0.8091135678416055"},"_hasShrinkwrap":false},"2.36.2-next-1609764320-34b1906e.0":{"name":"@xdn/core","version":"2.36.2-next-1609764320-34b1906e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609764320-34b1906e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nAZv3zlaGuB5ghZqOonfaMpNLOdfZFtzDr4kOXygdp86M6qPsFu0W46E/yT9rGV142hh2ZwYkeJOc1b83zsEUg==","shasum":"6bc23a8df00e692479f6695833f02ef2fbcc8700","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609764320-34b1906e.0.tgz","fileCount":172,"unpackedSize":660184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8w5nCRA9TVsSAnZWagAAJSEP/jcjimGgrtPjwnXwnPLp\nw3pzBj9Zf+CB68Wvs0ksBiTWYKJQG7hswE8/HT4eFpqGKzjjtIsLOYstcLgq\nc8lplbdeBHmuH0PkEkffCqNV2CM37f8tkGoWRcoFXD7lmt6pnn+Elk9eDCh9\nzWeMdimb0r6cikVDyCaldPjhbLSTe7D3hYlPNQQME8ckPxMaKN44+lHXY3bG\n+Fv5sEHBtFKU5oIWaEYxxjHwrYKGRaUx+qwZkeq1quMkNk/xWn9B9Uozqeww\n0IeZmQq2BR+zfrAvHH5d4TSrXzi7SCQbANfbHiFDwBSYi6Gqc0sOKmgulank\nXFhLKQoit34cTq+ofn98OKOXbVRbcKEhRZ0Jws8NEWUQ/xyLdaIqKTVLfAba\nnEpWZlYfyyla2NmykPR7McDhI/eXHqibytaCF1S+5dWjqmwP0Ea8FQUCm/n/\nCraxHJSpOTfRVCHBISvepELSgUZ/G3iveW3QNAnUBJWRGghsVQuQ57Gn1anf\nFJ/WFuCFsgmGhRy8R7uktoPmg9v1tJSfDJSUVcNBoEcuAEKh/5RCraDX38UD\n27xGARugRyRbPBYmjTlF+RYiRsqOGfpnRUaYCAN8o5AmlAN5FGJihd1OUxSi\nwVaBlLDxcns/cxaj9YwegdV0b3ms6pCV2SwL9c16opiGMne5EngH2v6w9WeI\nEKP+\r\n=N6sZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDClhUaS3NsHv9Epo1sv1i8yvz5B1NaIYWXMsmlnzzd/wIgBlqHrkvBN16trFWAhruN7pXLISe3YX49/NdFHFj2nWQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609764320-34b1906e.0_1609764454834_0.7304847179958485"},"_hasShrinkwrap":false},"2.36.2-next-1609764928-377de9aa.0":{"name":"@xdn/core","version":"2.36.2-next-1609764928-377de9aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609764928-377de9aa.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3TRkgq8YbSYQXUze10vKL3hpOcSYLdFbRTbfhN5TxYCJJEXeyGBWV3QQ3wChpgYCaJjglQ6EvrkUysjP2fkRxg==","shasum":"e0878c275ed05a0e3fb6e39f9713fc70dd8f5238","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609764928-377de9aa.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8xDHCRA9TVsSAnZWagAAoxwP/iv425TouJB1bSwErP4U\nYuV0hlh486QU5+HSNXLdm6Jcu5+ruwpXniGYLYeECiHxP+PZD8hp3zoMfofM\nKomGsSncT9TLWxFPfR2r63xhuRcOC0yR56KvAJS3xzxBGyn9bO25x2j7j/Nn\nAuAhTZbmmXvViK570PLW6B5E+YzFeMdJMLWMGZVxNlTbXyyrz+/QdGr/PSY5\neom4CvULPXv6W7JWzFCT8AfgkBfHcWwyUkfHo0W04zxMe6ICUCe8fxdh9XVy\nx/ZtC1ptBv2Qdzs/oOqF88fepzV6Fcnk0Bal8EKtENgaJM6TCz3iAylZoEpj\nB3t8Cs91axBur6GCyEw0Uved2GJVi61uwSFxj7a3RRPY3rL1ijAEHEpv+/7D\nD6nkfa4ZGHCq8G7m0VMqBBszezv5XSxJg88ay8VDVRBd/f3HKO3YV+iXsLsG\nLbiZY6Qxf2XziftDcAwsKPRJIffTKWZnHRc8xPtcinK6cgfq7SgzSN7mOLJ9\nb8n9l72Ks4x8mIxGjlbeo7bn2vAaj3F1+MF5BDzCJk7JuwcVcecCAwJexGpS\nHK87Kr+afhHflQFnoRprb/rq41UHx4KFp7HFWI/rfcfOP0d+HysDr/PzvTvD\n6tJFmrFDLmx+aAT2Sq1X+80qsAI2TO3lNRz8vslNStyF5c+4ZPL0gy1qAoGo\nqzTh\r\n=C2n0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEUkmcb1wfAivT/8BSMhgVrYPGKuW51eMtgBywiGZ3nwIhAKZZW+LGEDtxgngMWql/4SobNCgwymB29XTRhrv9rN6q"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609764928-377de9aa.0_1609765062715_0.1743883509256714"},"_hasShrinkwrap":false},"2.36.2-next-1609765560-85002dc7.0":{"name":"@xdn/core","version":"2.36.2-next-1609765560-85002dc7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609765560-85002dc7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-l9AbRiqoz4SAHw8FWE5NH9zhcWVrLOOKX57Tq4178zUkbTrLW7FslFEy+op6hTBe+Dh3a82EdpSWxhhFto+sdg==","shasum":"9b1970d29fd769097c24080a80205c522e654166","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609765560-85002dc7.0.tgz","fileCount":172,"unpackedSize":659032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8xM5CRA9TVsSAnZWagAAMmYP/3RyBUXDCr4N1uxOy72l\nnE742m/K3X8EI+h1WLMzKL6S7dOUv3Jd2rEbk2QfKC+M11oK3136vkAc3pcj\nlnOunTFjj/8hM6z5bIdJyXtEtY6cbymin4znmUOmwfOl0702Pp5w6YAl2Cd/\n9mGHwGpKsoosKTbYVOCC1HHDgcfQnlIBV+vVpNdXu27REVFEBiy5htD7AlHU\nkhk6z37+EqdbRHaEfic2PhLUnsYtKWPsz/di93KaWBEM8RIBiZhFEla/stNn\nZCMX8IndATn6IVZAZos9oUVIORh41FV075HW/qtb50tPhEjGwMOaJPSgsM/H\nV3Bydm+T23IPWZWT+gIUSdpy3WZ0uzeDId+uHIXT27fGGfLcnqNwqJQ9a89w\nwNdYGMgx8YGGmCxfpxY6bxIEJ6u9Mzz4BSFTJO7ByS0W4bRt2buRGfPafnyO\nlyVBMMOIRaZNK/XauQxHYN2nH4rALwkWeYzXILOn1s52MzE86onMWLjJPJ12\nt2jSkIsug0aaKZobnMidH0ozOJYeTXBYzVjkti+WqtHHJbdRH8CNKrGto5L8\nZgH6AOAEuL87YSZaVo9y5+F+NUMUY8k0Um2icnMiqTyRc76gNvv0g14rUMai\nvVmJL7dUu16i2/3myt4S76iqKOfiGEw424GoEYsF/IUD9uqLjVw2sqhhilQS\nH2jo\r\n=+3Ww\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE/yEauMv1IkiNv1mM79/Uo12ztls939/3s1RMlvQcAKAiEA7Rb8iLgKy38zsbPYdDqK5JBBRQDAn12eSoG+lmivdc4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609765560-85002dc7.0_1609765686350_0.8431535343934564"},"_hasShrinkwrap":false},"2.36.2-next-1609766562-c1bcf807.0":{"name":"@xdn/core","version":"2.36.2-next-1609766562-c1bcf807.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609766562-c1bcf807.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uI6bUL8sQ8AzCmGMZEa12FS2+a1JwYuq3YYyTl551QREJs+DLj/tC2wEXGc0R6StSKkHmJyLOIv9Y1/E2pozPg==","shasum":"daafc647d057b6f8c599bc9311a9d8be31a93fb9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609766562-c1bcf807.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8xcSCRA9TVsSAnZWagAAJLgP/A1ijc1AZ1BdRjpaXDLx\nO7TCAexzsYAXFsLI2G5/Nu25UpTzLuPteAa1tM9GIBjNzA2fwrv20Aoh7h0s\nLRXCS3EML+PQuEHkoar2O6R4Xee4GIDYcd6H6iMxTkUCUE/WfsWlJUUQPVI5\nneo9I7YKEmv+r0Xu+zRahxf56C39QhnC+7QyEEO/o0lilTRzH+9Lvuj4HrTE\ncXL75b9g5Y+SFpzbfgjAwMMzYVutKQ7b5imD9gZqDsVNDh5rH7zCeB9y6hVG\nfxZTIrzuwxohBv1rTLi7cm2CgYSL2ePyrf2bROj0yWL1lcwhm+gqs4/23N48\n3jFyc8HN7GbTjmZi51HoD0TCXyUSXUJ+f9afTu/Vpes3309tUP5vB0bMPLBK\nfmfLuhsIhz53A9x4YfMdhpJDlDSMStq/fcKqUlnTq/l3PhcDe805NSdZi0Y2\nEIC6TLbn7FVngJGe9nWKUvqT7ENTsCSlLv6aQHjXgpvmpuOiGAo/bDj6v9k7\nEEpAEzrfV/6Mq8WxY9Vl2ggzs9Ekf5dKgRX7rW9LqS0d/KkjVFPS9qsiqPPJ\n0DvVEKqavmziHxRdGKpaoiAcPdRpABHCxcPNRrJnQDAAUyHtGFFCCZ/St7gq\ngL6JZFJs7ClkNGDI3kdmvQs2jXpCjpzuXnJIOCOkF90TOHkwPiIwDkixh8yo\n2dhu\r\n=g73C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNK9bXyowzCvpoaKDKw/+rjv1FTXPurYgkkJy4yQMGmwIhANYbY0Tr0c5O6V2xsE9Qp+3CgHwZbPfYxzRoIYTjDVDR"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609766562-c1bcf807.0_1609766673964_0.8092847069087921"},"_hasShrinkwrap":false},"2.36.2-next-1609767036-34b1906e.0":{"name":"@xdn/core","version":"2.36.2-next-1609767036-34b1906e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609767036-34b1906e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-L8RRyks1MPEE55PzoaYaiekGRJBk74eSxV8QHFHksboYBgKITB15BWz2H9xgtuhzTYYxFXsU55snpA+TFiAb3Q==","shasum":"11bc55674ab3d6beef12a227fe1aa24da9a13f05","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609767036-34b1906e.0.tgz","fileCount":172,"unpackedSize":660184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8xkBCRA9TVsSAnZWagAAO9AP/23BQPIIE2DhVt3TlV+a\nJgL++kIBS74l9cCyB9c9/u/jMW9LGQgp7KoG3JvwWWX2/VS7/m/Bhwza7uqm\nb/RhgS5Qr+0YT5ytXkfsQqQtEuXrZpKuOi3baNbD7rrkw+3O57qhtZf9ZgOg\npkV31gKjyhB79lzihZ2OORewqwa7OBQtcNFogzDbuIM1g4zBvUAeXzqCgYpG\nRDw4KuPD8v6S/zmQiLCahqJYEBooefUPxICixRtsMGb+q/4Guj95kCG1un3d\nGCgfRdU1tiMx/XTBGaEljgXcZN9cSjJ7KYEQ3bKU+RgARAA7okjHABKLN11R\n0YwnKxolwXXd3IIrJnVdU2csYFHw9bLSzJNna2zrPvJHlk07tNu/tWIWAzxq\nQRRydhEnvQujSlSJ+zdqKu9NgzxTb4EepEN0MIYGIcdXkUjXIbM1+jlmg23M\nkd9tp2gghaXOS6Gr2q7lfpZe9c5NIVipIkdqU4oYa46VE8NadPoyFO5+BOtN\nawrlly/GUHfowmKUyDwLr3gfslq4xoTX/YaAo/jIB35sFpDsfft0roGfCm9N\nsvA8IyXloaTJgZUv3dhOThRrqBdFLGmmT2AetdWeWEm7d81azqD7kKOuP44p\nhctDNe8GQhARhL7iXSxc/SL4DjSvWc59BWm5IqZtLo9jeQ8bnUVU/YMTg6Fq\n62go\r\n=bGl+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE5u7GcNQamjPZjHCdt+TAHXtADb6xHfeygl129b/s/hAiEAyDbTxN/3n8XdETky+zPnErfi1u6nK51VF+mQF1x7NHM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609767036-34b1906e.0_1609767169317_0.30697971450366346"},"_hasShrinkwrap":false},"2.36.2-next-1609767142-b07777bb.0":{"name":"@xdn/core","version":"2.36.2-next-1609767142-b07777bb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609767142-b07777bb.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-T4UexKiXsq8YO9HX6IA7tOxBleRQHv4QP4FMxXo3PX64YrAUbT6q8qv9CP4mTivIYCV2vz1jRNEd6oEn/Wfz1A==","shasum":"2249ef749f93e8136bec8b624151a75b48dbac35","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609767142-b07777bb.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8xlrCRA9TVsSAnZWagAAYvgP/jt6b+3ZUR5uCD+zgKCd\n6H2LuhzgSQ/zc7eEpp1c9Z/O8XcdFTMfhJib4lVX8r5gdhY0se24A95pb2TF\nTDuD9+IVDEUEgnf4HdqMonL/AtxaSNH4+U4nmJ/JXTNy6t8QBQvdFnRNpX/w\ncKdvyCyptXOeT7x45OXv37Z4OMUVLsKZbgJzYq1AH3t8Isx/lXUNJlzQvyWF\nmGVmdz5vKGCxizuSuKN0XQyLv/rycifwjXrvVmp/DG6OkFFHK+fMcldK5JZs\niaEZk/tzYxBO0Ey3aGyfn/BLaSHE4faBk7g90F7lTDyVoIRbBUGuGasysiju\n6La0dq5RgPPuzPQT3nLJzRuiXXVX1kPMA9hqNyQDbVdAtuA7DfIVRdohOAkD\n+U9mewcA02dpxZM5GMfpBQwynOAE9DqVeo5HmNf1LD12IBIgwnKZsU9+wZ7O\na8IvS3nJ/zKzsvdxYgsi6Ug/POGjGDCAfhdwxhTDb80UuAeLinQqd0mwB9Ue\nGJw2uANK1HdiLnsmm7K0wfh02RJt4vO+hX86O6brh+J/1GdmG768wC8XStQB\nV335LLuLWCimhixqRxkjKLG98gCNfUukqCCnnZVJD5FE++YmFqklPymZbUIA\nfFX5FetwKw07drAIbzR7wsosArGviIeS4X7YDV0sJwvXZDaZzPg3214q2ZSK\nvLBD\r\n=PymO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCJBjgWUHaoIS1YX+tcDRH7V3dSHb5cXTm3NJ9prcSuwIhAMakTnjZ4x4jphqXhieDa9Kxrc/OM4svht56cXwNyxpQ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609767142-b07777bb.0_1609767274699_0.20348194195881208"},"_hasShrinkwrap":false},"2.36.2-next-1609768294-4e0810db.0":{"name":"@xdn/core","version":"2.36.2-next-1609768294-4e0810db.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609768294-4e0810db.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-G6cdl+41Uo8aukjjlRcXKujFQHUA3MUhchMOpLCcwHARSjSO9yDLidAJQjgJiORzeSn470TG3g0+tDJWFOSazw==","shasum":"bc7dfb868e0a11a20767fe7a0c28c17e59cfddce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609768294-4e0810db.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8x3iCRA9TVsSAnZWagAAXUcP/0KjgZTefi++c8bgt25D\n0w7DC+C+25J4WudsfMYo8wDL1fLaNsHbZlYkA8WElp9LMLwTEzg2t7070Wj1\njhgUb4GI80XxkT1JFI+Hhs5Zc0pWLaVQ4HFh7l78D0zewzihP122FZWilC3J\nj6jsTVlGZ8Y4Oacjc6l5W8r+0KPgMUKekn2R7VjghVR30qlnJKGETMn4vOVG\njI3BQEsjS77DBedMdPT+zm+NF6/3N4AuehlGgUnOol5PLbk8zvgKrO5XJ/d8\nfETACBmsAjccm8cDP6zZ4VqkuAoOnUaXIP6tyuM3wBadVqWzoO6EcrwkH4AZ\njl/QytPqp194WXcmjwjTGFh0Zshcm9Z3x2CSs3KZWqCA6pCgsleR9b0RTzFi\nKrzvf73wkMRo8Gv2/J4kG0FNbw5jYuMqj1jdiYiH1xLB0w/wHoQHKc6Lh03a\nZIqFVJCw+ePJpbLlQTfxHoFsPKxjrLKC2F6EzjXlJ6xDunRk8paONRBDAUzh\nz8FeGnOvjl51ulpbD0bzcbOd/aBgSOXThbNlvClq/jb4hTA4YqXVrumbeGd3\nMJLyRWTTbnHJPYgAzIK/BgZFkVSSDMHU2WFu3dWhBnHQkhgJ1uLuv6mgOvm0\nqKzw2N/UwyljbVSYiSGfqvNa3Xpe5eQQQVhNsBZOrsN4mVmQhiQsRgrCTkJ1\nhPB4\r\n=kYnO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFFnU3fLJcvQZstcwsip7pyEJyqk8FiGdEAraYkhuV/5AiEAg0MtTz7HKIQbkw07gD18gFu/1243mmXsiKpzMjtS5E8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609768294-4e0810db.0_1609768417736_0.8612081269360241"},"_hasShrinkwrap":false},"2.36.2-next-1609772224-d27530b1.0":{"name":"@xdn/core","version":"2.36.2-next-1609772224-d27530b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609772224-d27530b1.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZVXx2NgDc1npcvHTxB51RX/PxwPE4D/i6SskwrXhuKirhdbpekDYX+0g4smqTvPs+gHwsPly1WdSMH6snXEe6Q==","shasum":"fe4ffa63b59ab238d7219b78d6bcd06fecdba27d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609772224-d27530b1.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8y1PCRA9TVsSAnZWagAAdxgP/ROonWXI3AksI5EnwEQW\nJ/qQBMmQwLlj5H2kR3RqlJ2L0L7Kl/N4e+qZ0KMLDExDt0KN62IhQz9iTr2B\no7cJ054yD+ehA2M4OCRf46Ye2n1iO2UUFSJN7vIDW+qpekSgAafikzO4WcUJ\nf8xE5mSCwEC2UGcdOb4MKSG2fwQ72/NJqS7kXDxmC0iwTd5am6b7xCo4Okng\nzCLxEsLmwJEqpQMDwsB+juWQq2hOKqYncE5i45HmRoHWjA/lgF+EzlvgdQZ7\nQxx0Ww8pXrMwtVcwm2VSe/ZnDTJIzrNZwZkr8dUqnd6NOi4S+TR+UWNO5iqg\nvoDhURO6lA/5nhC1Vs9cjoMPUOPGiZy4evez+CezTgqKFGu9w9QGUjpO697N\n0zuGn492TAEcrhWEokhkVRWNen5bZKHxjKkt/FcQvbOxkTT6ksj1NadB+RRC\nwNVGJNMRqcTyWQCgxPCwqOlAV0wDfTWHb8ZnkOy8H2bh+LTngOmOpSpzKvTX\nZaiE+9U75iIjwJG2LgLXX9xhO54+iost8QXNjTaliNDeCKBx7/HYwEgW17gB\nF9yKJaH5xzWLsoqhnxQWqsArBzUvbxvwPflQACaQKsczIlKgeUCChdWE8XkN\n90dLOPQQqocx54vKRZprJGx2yBS+zPxaOY4r2/bUmKn80LVmHub6+RgXPsIt\n8ZQD\r\n=7b+g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICfaIpEjHKeCTVvPEgjkyT6MOwaSiu5dJlwNpZUW92P0AiBMPbMY7QyEEygpOxS1MhiJ8Y8Z3tjA+rpJY7FJt8sqbg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609772224-d27530b1.0_1609772366729_0.19576353096757937"},"_hasShrinkwrap":false},"2.36.2-next-1609776562-649ff1a6.0":{"name":"@xdn/core","version":"2.36.2-next-1609776562-649ff1a6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609776562-649ff1a6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hAr56ARt0R8E3ewsGIJyOyrSi22Kyz6LSDPNrIO6I43/TTx1ZMTIjad3ZfZq9uM0P3MlNkDK4fupGJ2dBzDaaQ==","shasum":"621f1b0204dc50434c03b9561c58d9df5e9b9961","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609776562-649ff1a6.0.tgz","fileCount":172,"unpackedSize":660408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8z49CRA9TVsSAnZWagAAkDcP/3aXZBDmY9Ajc7+nz+FK\nOqDM5Jher9Ix0AidGWXNISC0T/a+xdMQlz50hJCuFFLYxSPTZy/mpkli3Jeg\nxO7fyXhyMjFxys81z8JtJygymokluBCEERwJviP+5zKC0Ps8KUVKng3evp9u\nMiIChsMuwIGF7KxST2+KfCzEULJSCYIjEwJpqXZo4X2YMES0dWoLe148WgFw\nqQAJ7ddadrF4HGadn2SZVXRpPljsV/Y3sP8HJSi9wqFTHt2l2YcKMvkevJ3/\nBfiuVnmkKqDhY+/YtmyxmFq0li61vNvpi0lWmHJGOCz8tyvqFilGYQpUe1VS\nZP7rqVQOKFMuC0j42gESXOcmDuYOTd7zBSN/Fe9iIREMQdQsOpbIPJymWLl5\nDuFet758UeKMo3EXRNDXe+oEHJVD3MBSUGNJpw7abljHtPC0PLXqilRd5365\n+kiU9nB+xdGN17wVobSj9E2pZ9fpo5JvQlqxX0W4jLjUfA6QGddoF/e+TE9d\nmzWA7MzVCet88h+xk42Ybie4/wS5lmq4FIxBtFQy3CNDFQ7/Ht9C/8yA4TA8\nCKL+nPlv00oiPjg1JbiWIAPylC7or7SsidSQs11gVkqhSvqs/GebwXIMqLw0\nA6SxR+NP1qHDNsnW6rLzjLGVtrEM8vPgK7pOIrFCK1V9sjz1r40U6Tz0HRzM\ntTaR\r\n=dzoB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrimdp5QJAl5BiBBVLZnOQiWPvTWIiDaeHz871GhgIbQIgaMFqmdW4Hbd3advXwJxn8gwe2yQ8hrdEpRdbfG1W8NY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609776562-649ff1a6.0_1609776701124_0.2607880525610071"},"_hasShrinkwrap":false},"2.36.2-next-1609778310-35779472.0":{"name":"@xdn/core","version":"2.36.2-next-1609778310-35779472.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609778310-35779472.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uv5TBdn7tTGYb7HmBI538ktpLoTzPH3kH8U2YN7ZkKK3OMiwnY19LTD9Rwgpo6R5qc0/yuleQfdEERnRwDEQZw==","shasum":"5995044cabedfbd17d39176fbcb38efea4dbdaaa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609778310-35779472.0.tgz","fileCount":172,"unpackedSize":660408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf80USCRA9TVsSAnZWagAA8QkP/AgWDjJhG7BihxUKS9Lh\nJbmoDpW1LIXPaCPoTKoChJrKC3A9saDGt5RDM4IRNoINIdYgBhf7PqPWJTiw\nhKl4d+DBsgJ7nREMztsiiMT/74Kh4kHnr6hvdYI6KxJFX6cYACcrfgwkwnB5\nJvxRe6PGDa7SsjB1Mjq904q5N/EXb+D5+KtpmciNvDuIXbp7xLDt4Al6VQYj\neWKxM6oH/AZufALxCiJIwHFwHrjowdPqg0/tOk1lfIVMenVMx8wyP8WsnQ5J\nCUoIxMkw3Hx4cXTPAkvxhBkSz5UwX2HI0L4CZWvgXOo7lTtVO3LOPNloSsXk\nwh5YhfmwLISy7DOgJEjT1eP4aFyaTNq63KOpILgeWmb4TFHUyeSkQzjsjASa\nwa1Ld83sKtKmoSe7Q5zEbl+bQo1DFiMT5kwnD3X9ExJ+D7c1opKyxZC5c164\nbpAM/fTS7PE0NwtuDmmOQqGl5i5eobUQcl/wzLpsRfx0m/7ggQCBwcO9BB3s\n4NJvp6JWX6TYyyFspXrhS3He6iSzYErA4Bk3HTtqnw5VZWChzU/OooerrCJd\ngxyxN3Qvn+tHZJz1A9aWlLhKnvgKSur/528v2RfmkMCTCZztNnBZBSUx/i1H\nvW5Rjl4glpBLMniqskzaMj4oOs9+hYfJTdfd1uQqKA4ipSoLSlWTrIyvudMH\ngRri\r\n=kxQI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBoKMcle3o3cld9pX3Il8mj76aNTPbvNI8Uia/ySLlFEAiEAqZLdFP9+giVJeUpDahmwCBKS3jrXMXhTquOq66m2AlM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609778310-35779472.0_1609778447969_0.9196462282376765"},"_hasShrinkwrap":false},"2.36.2-next-1609779472-2110381f.0":{"name":"@xdn/core","version":"2.36.2-next-1609779472-2110381f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609779472-2110381f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-QKx8OVHOrCy2Nh+fLugQu/ynDiTlyOj/CAiMknu++wu8FYdAdxpwhaKNYq6CtEpZzVkYuquvGx/Iqsxd5AcoQw==","shasum":"f616eb37bb020d4a6d80df4e395699fcb394f155","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609779472-2110381f.0.tgz","fileCount":172,"unpackedSize":660328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf80mmCRA9TVsSAnZWagAA9b4P/3gSw8RdaNHPjrESIQMk\nkHApZYCk6CkZteKfJnHsIG/FRXy8SDUPgp/+6JlBgAcwMyWp0ZJO3aeMg1Oc\nrntk32eUwBYyVA8o0WFFSfjOvBg01GpYewLWaXA2VqlauIyOA+8xtpPjxyz0\nZxKC+5/4VumabXLfMYjlk5ckIHhA7CKa3MNrmahhZfoXM57L5j3rgE9CwALQ\n3xKElQYWCLFTF6OVH1UE2Q9gIQgj7vgoPWBqg/36C8vDEzloHWtyKknNEb09\ncJx8QLTLgeHCslq7QR6wgQDzg1TS5Q2mvtkfDE3NnwRS75gqaYK49xBsdg0p\nGQFbtqBDXrjiL6eBiLRqn+5POvtQWXa/MblO26sn5f5kxSOEscuO045x9Snq\n9PVH1xTfkG3lP0ohsAL7tPBfNDTygjmP2X9bFTJ2GmG9/7Eci/TSLfdmITfo\nrX4I96I+EzuzbR7JzsAtvvpOV2iKIOz8yVRvO1HL4/owiIB2QIdBgf8HWYZn\nOkwXCmFJjCR7sh4woB5dwg9aTvYYMxLZQE+TUMy40ABqjVMluFNXDRCnIMVA\nS3Z+Bki1NjeV2vRxOQOy3oiQ7BcpJTGu2CpRmqmdaN643SWdetrpmpxF2xfb\npfaG32Li0brMNh/Co1eiXyCU3J5mNZLKwwXUfHtE3o7vsJRHE9c/StyW1lkg\n72zn\r\n=pAt4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHImhMnuWzkTqj4lkRjgeRBppFY3WY9/g7pSe1msXaHMAiEA+2g2XD5w0dk91eKcrik2GEiwMJLseU6l2+ED6auE4bM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609779472-2110381f.0_1609779621990_0.3757102297395012"},"_hasShrinkwrap":false},"2.36.2-next-1609780332-173bc48c.0":{"name":"@xdn/core","version":"2.36.2-next-1609780332-173bc48c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609780332-173bc48c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9/fWjLQAM9/MpV+34Q0O2ccJeyKTG5Aqu6f8kqKEUu7r/FX1SNN0pkVEQRnbL5khs2HVIKj0ll1iRyBFfdWACg==","shasum":"d78767cd85288bcc196b04a3c32c4d4d4a5d0e63","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609780332-173bc48c.0.tgz","fileCount":172,"unpackedSize":660328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf80zqCRA9TVsSAnZWagAALhoP/A8lf7KzTYIT0WQDH8mY\ntgaNtRvMGxDa6BkuJtv5veqScBsIh/01tD260f9GUI8cAQJg5ZoqR2G6156o\nsTJiQZUK3Xo6B7A+NNpLm0QSVhaPSLOJOUJNnFFzuDMHqvo192IoOzFbPCWZ\n6vV8yQoU5tV6GFgtu75CkBVIJ5GujAV5l5DJDVmsORmgQzc3HSWWk022trlr\nKzJ5ZPclwhF6cneX0u3ozKJ23/FtRQcd5y7ACwxf4pqObFwRCWn15K8RUeMe\nQAYEWiCclMYCnRv2UQANYdVNGKd1zehcCLZqUaJv6drlA5hOvkwgKwEBUbvY\nOuWQAxYFZ08HRJogKe78O9+pjoSqG46Fiqv01EeosA81kBUATI1idx/BbB1U\nCr+unw04FG3OwHR2NosCw7Jf6I8Vbr9rdHmJN5Kk7qgo+1rQNPJCefDKb6Tf\nK+V4QT5dPDq4RvPvQ4OHepG5EivlKEJNFr2z0ZRK+NnFGuXLC50WjPHmtWCI\nNPH1RSHcbkKo+eliFTOxXqpnc+cD+6TjuwOao1XaeiBdISvVOkOrhfalxIGu\nnX5k/yI7mJSF8ab3Z+q6YG2vmFcRb18PyWcpznDdcOwENArRAjIo7z+aOUX7\nRlXZlVKcYG87kpdKX+TUec+OHwgQi9BcCc8QtXHTatG68vFaOsxJiN6q2jxm\nHSsF\r\n=4/vm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGxO9i5vmlMblkwEU6BbjMcgkMwxYdH4GneyffG6Eq33AiEAruWA77T2Q6XpIIz1UjFfBCmrxUjyVIERZcjQTJb3ZZQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609780332-173bc48c.0_1609780457490_0.09662683081866885"},"_hasShrinkwrap":false},"2.36.2-next-1609782322-d27530b1.0":{"name":"@xdn/core","version":"2.36.2-next-1609782322-d27530b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609782322-d27530b1.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-29MdT9YuT2SH1qMyqLGKh0cHBA6kYGPcGARomx1FAWAGTnKwvrKTl0TaI65MhXcGooqi9u9kR4ewtwyLRGM0Ag==","shasum":"fdf7c30b0837f5981eb7fd32a656de6eb8f1a536","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609782322-d27530b1.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf81TSCRA9TVsSAnZWagAAXLoP/iZQw/+Moz01h6PdUqsO\nUDJLGBO3sbvRvPjvh1rg5x8FaM4zUNeRJ7IrZRYNhGdpnYm+Tmt2wjiq1BEv\nV6EjHjG6bqfjV7SWzVxA1vHY1cKiwH9EDmWpih/oIR+ba47zDlRM4DSalAjM\nUbKgdV+A25ScjxM/ORkKE6sRPaXftcLF3ht0+FfT5z9A/Cy/SMRvgRC0d1nk\nkgSDOGsVD7BvOeEMnPAAcHQ+Ooo3Z1+xocfz8gJ5Ip5behzOqGw0wY1q6MWp\nW0Ws91ugj69rCnXSlAwUbfxTsrDZYcwF0/Gfi0S9ARvesjAMSkuwnjfqltKE\njQIZYFSqGfRdk1leuqn7w1ezBl+2F5gWrWyA8q78HoNoDcdIKXpWYinAzf7T\nG7TcIVPJMY4Jce3LdsmdGriW2Vsbg0wvZOHSFWSOmhd55WYCYfhUkDNur3di\nqz3Ju6aI/HY4onz+gzvvIj7mLJ62fNjz8SBghWoz6vb5VmvGP8Aip3jSMCeM\nxoz0J1h3ngIEM2slbLwFnRuGxahfkRVME1946WoUlaILKk3Hn+xsgdro6wxa\nu1muI7j+Q9xntnaswG2KFnElnuTJAuPKD0/VfMjfmDFPLtlBox4kUHqxtCy3\nEaJRr4L2OQYl9j9LrW9xzvncSNWoLwvmtqFEqQLBVJr0AY0i+XfEjgOIpspN\niPtC\r\n=7L0t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICK1PJC72LsGZMyhsIM4Ck69dzLayWVL5wOsGMuJ0vm/AiAIqwnDr4MVp/uowZmOlbpgQSgL6ADiVymX9vNhdpeZ4w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609782322-d27530b1.0_1609782481511_0.430437553426505"},"_hasShrinkwrap":false},"2.36.2-next-1609785170-be6a6494.0":{"name":"@xdn/core","version":"2.36.2-next-1609785170-be6a6494.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609785170-be6a6494.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Fer8n70N+Sn8g0iCgGxMpyX+FE7naJ6rsRcjpm3VvL+DvfmkFr6Ms05tJkcBRrUPBVxnCV7HnxA4ZjQuQR7VyQ==","shasum":"0b8ec072adf106d8470dda8c7158e213a15d296c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609785170-be6a6494.0.tgz","fileCount":172,"unpackedSize":658577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf81/NCRA9TVsSAnZWagAAwDIP/jmco4DLwlyfjBFIihdw\n3dqtVJbGnn2rPd+Yd0yBpktMqZik2J4GBoR5rV7uxvDMtPseQhFiYcv5WtyG\nFlaIG+PjkXvBgiwJk6OoejyxNJCdYpvQxCx2YlSWui18NQ3L0eXx/ekInF5y\nRiKnuN+V+kMz8FNbdMaNqcnFlE6LKYQY3kv0FGyrjt3kMT9BJ4cFiR2MmpKC\ntDHDRJ9yf5nmRKna2vE/MHWmLMZxvh8cHymETYq5+btOSmHWFR10+NzM6o9o\nJa7Dp0LZz+yLi2rF5fUqRrzkIwhsfTdHyFMMydWw2DD2y8jEIVr7vIP+xgaI\nfKj5CaH/Bne/eqeLXUIl+BV+cTd+KPSLZR1GYINDsgQkfMAhkCA2CqRFLyBd\nNPZMQzmFOtIzmf7b+LNSfQte1ThFZJj6+Cb2Ml841U9rM4kTm9hmCSUmxlt0\nNPL/U/cjC0okXNhZ3LGJR+PsLLZWq6uA/L+KRjJJpPuzkWZoTWpOn42SxmaP\nAt1TODga3hp3mOdPZaYJK74axZKuxwTj0pxt0CL50cA2Ou6SuZoCF9DkiRo9\nBWHQMQanP73ICZPljaH8EP8Extmllz9DBjJY85WFuhz0g1eVy1ulg7sOBWeI\nwX6UVvS4IfX/S4i3kpquVVS2c6kR6aL4sGomu8G8vaSxKR21XfdnNomydN9S\nOZmF\r\n=1IJO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGwsYuxQxcMwUvMjt4yf0YCfrxG1/ILdKAHYrsqZduJOAiEAi4Fv0VcozXKz1cfRM/YaROHZfEbGZ2vSp2uLkzf6b0w="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609785170-be6a6494.0_1609785292301_0.6297779678443103"},"_hasShrinkwrap":false},"2.36.2-next-1609786762-f49c471b.0":{"name":"@xdn/core","version":"2.36.2-next-1609786762-f49c471b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609786762-f49c471b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-T4IPUKueq0xMDkvKFBOWs6CR8jO+TIyO5z/wfaTYd2wEAH+BUZih+114anTm7kNoNCEFw+ZoeX4yUfNtCAOO6A==","shasum":"41857e4f7d1106bfbe9c9bceb402e157f9826ba8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609786762-f49c471b.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf82X+CRA9TVsSAnZWagAAKIUP/jse6zkWX6PA3CQPYqvv\ne+nPS3Zn3GnFIpoZh53MK2guZwC1mOD+Lsd9rjF64DdJyAbMiuo2DbuN29fn\nkT/wOHnnXisqxOBl48LRbVU7xZdkAJ/Y+sC5UwAuYqgrOJzIwo7F7/LJIVAU\nWhePt/iIeNvV6tn2Wf8xar5jVK5aqilnXIEhWNyWFKbz0MGpF+HuK1p9rP+n\ndeZIKlBfjmkHPGoiforXspvALxl8Dunny0ddjY2VFnMTil89ya5Et4Hke00S\nGghatgAGM/8tLz3wUK7L5ULXqbMEgDm9pFkHFRBO7JD+suPYimc7lUxfbPXc\ndSDcwFVmtcz4Xuf1kf9wPgRD/1wykl4KBbqQdVapFPAPo4DofaPS72W5FVjn\nFu01uqzGzVpd7Lygy5/+pmNo3HyWkPdhenNrgeYSYM21zT0ygAt7uCUX85Xv\nXxykoPQh0AhZo9nEqAM6SWXJHX2rHMjMWOm1Dw3NHIyzDr1/t/C13h8f9q81\nUeEfbWn08fMEMglcaduPu9icZO2jQdu84913usWbmtMA7u8mMjRXJbr2h1CH\nlFK1ijyCzzpAWc+vowEwr7c4adQhtFSsDWoNFECxloDqFoLL82kynuIcnmaU\njSia2OhsNfDALfp7bNIif1mjxceyDyS+lGEBiZ7TNcstRNuqh/RXZa99m3up\nYOCB\r\n=RFh7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKJaj1IYyN95ODi73obfRL856hzAatBebUt1JpdwCtfQIgVIPh0nIlTghSeOQcoE09h+2PjgYTXAXcnPCj32BMoro="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609786762-f49c471b.0_1609786877280_0.7241937501995268"},"_hasShrinkwrap":false},"2.36.2-next-1609786819-e88a7e2b.0":{"name":"@xdn/core","version":"2.36.2-next-1609786819-e88a7e2b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609786819-e88a7e2b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LTUMmnPIX51YZE615d4misFK5s8KpuZdx95VgfXVJ92pS8j0enyh+zCHaADMVOOQEt3/UxAWnC26M78/rLyFtw==","shasum":"8240323bd0aaf23adf44d0a70229f4e415e83ca9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609786819-e88a7e2b.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf82ZKCRA9TVsSAnZWagAAKb0P/1f5owmSMWZgbKUAg5vt\nH5rM4X85vtuwjkZfMtUQ/oo3pmZZEBkYI8IZX9+F/9vkNkcl+mpiF4fb5BD4\n/UepFcL1tF0F4K44v6xU2NsRu+hTSz4DuzuxVbDUXFqRgvPy3vVqgkGvUOjT\nZv76GYN4OpPKBkFjoysvrvMBRkWaz7imXf5B9fkZkSxeXKJlCAvnu10hsxZ6\ntuk1JBZ0YSlih29e8uwUKKlnd+j7Ps8DmnsyKHA8vqZ0SWa/WG5AsgEQp+Da\nexIfw4C3ANnkduhRIYoA63/bv3W1D1BAVZ/FEz1lqGHmjSvuxUAwYNK2BKjK\nuNqxdovFHdocodZ89ZmFVhcEAfvJNqnK7KszugsNL9nxWEZDYs+jgufVypyx\nNrlNBXtqEb3qFLMphxAg3tFEfZ6D9Uu6xVV6YiraSL35eXJRCa+TKlWDL3SM\nuVPJjF/XzowRFDVWblP7zN2iSY4Y4XHCvLnJR1ZiE8pC0oD6MOLKhjDhOQFo\n2RFg1iPCF0szLwOpfgXq5evaLlMjTgWkGsbiMNHKa2Q9z96ISvvXxf/NuxlJ\npvlzht5gXHWwccMnqlF/LpCf2dPdsPXTrKZ63kzvbSki0Szp9g5nh0Wbmzww\nyPrpJn6pWRrVLommcfPDxC20O7nFFBJ4/cu8UXd0HO2tg0zVPKCNJUcM+NnF\nVfz+\r\n=iS9W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcaLIoBFefcTYLzP0MG0WY42CbehvZpIPTblfVWlTI9QIhAKQDBGpvOO4ns6KsFsKGDRhI10hDSIV363Jyix1t0tZH"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609786819-e88a7e2b.0_1609786954252_0.34372741537599105"},"_hasShrinkwrap":false},"2.36.2-next-1609788058-22ecbc9a.0":{"name":"@xdn/core","version":"2.36.2-next-1609788058-22ecbc9a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609788058-22ecbc9a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GfzGNg8gtQQnWVBlm15kFhcGnpJuEki42t4hyyKeFiXGheLQ9j45w9B3dMV0KMLlsDkrq6vykYOer5pPWXBE+g==","shasum":"458569e581b37c67a9cac20534707b7425e17ef3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609788058-22ecbc9a.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf82sMCRA9TVsSAnZWagAAtBsP/2AlLeWB/kZ9bN6g35+n\nGIhGE5nQ/DyX8oCvQOU59KBTOMtdy5LpbsFcapvXinsyVWL5tLFEJDNy5OlM\n1lk4ZhCJmYCOHWJGR3Fkvasots7Df73bM7P+nbWURsaPCrvd4poEWftQv/y2\n4I5ZCpb9AkI4NJo3zcYNOoPy0bcV2Ob5SUiM/+h/R6AXztT8v1+OVQVxywW9\nYRupwBA/I/83cCOCIaWEC4hIpMZnQO3XO7CjL1Un+A9e9ndnNGrvZVG6FPqK\nx8wDUvx8z8sjAtIvy0n/G7HJkiQ3qkavELZpeF/cVYnbzzdbmtDLNwOgqQsx\nqc54jyOSu4oDb2DYS6YAM2OUXKoCNG4P8WnQrNZTcXrlxzm2zuc3SD4sqGGu\nNID/iITFxzL7s9fA/RKfcDJgBkFrkfys6erm/bIYPEYQ9AzAfpNXa57nuNr2\n0rPEv4c0GN7IQ7Mnh7K90ntnBUlyX9uArIjKytd9Jjr2VxxcBxozB/Zi5jFr\nLgPqVx0Nodap+Xk4NToWLeeC/u3jPLkaSpmKWo4PGFFUW7VnAO9WqkelRKWx\niE7Zcg7VhnEeXAhNoXOg/SZbfUxx73H21gy6z1IHG+yXlReOSYr9KbTzp28O\nW9c1VenEOAGBDLNnLU5zw30oQCC+uEnHm0pUachciYhxSPwHi0UZCpiDXAOM\npA6j\r\n=dhJY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbA8spGUdgMts0gHqzWPjr5ex5385Gz+03a5X4YU5xXwIhAJwIkdDh2ZjLt++kH+D/TfPUkoYro4GyQc5XIKVUrsOw"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609788058-22ecbc9a.0_1609788171343_0.5006758617119036"},"_hasShrinkwrap":false},"2.36.2-next-1609788567-7af451ee.0":{"name":"@xdn/core","version":"2.36.2-next-1609788567-7af451ee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609788567-7af451ee.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UcNLpaRH31GBICJp1WDaVbWz/KU9m4AsRZdEm2VeHkO9nB7bxvj9Zh91CxkmQEj3OtnDCY3tQ2y0ysypMC5JMA==","shasum":"7d05457e1e8ce5b978a7e133ff8cfab84f1d16d0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609788567-7af451ee.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf820dCRA9TVsSAnZWagAA4cQP/A1MXgz4NNi4KeKrYxmb\n4VezkSYvobv1yrBXg8eas1zJb117z+6WNi6TVU2JaH5CPpkrq3xigm0C980b\n5sAcKmAQzz6TVXhvStWV68IJX8Q0vl4PyDFBAl5WLO0Sz1Skoj9g0/GtDgRM\nK7v9/tcBwRe7LQT1AvNGcX6EZVOZ4PYl7ngTI1tTeKSTHYRgrxAI2uDMu7xU\n1SBMbErUuQUf9brJkgYPLqkBRJCm1Yb+yC1KoKtOqZQP6Oz0RftYfn03/5Yc\n7cQs8HgX+d47AwdhCklW9zkrR4FYmFxko+Y4SMB3QEezt51C5m9QmcwJWGQJ\n7mz8dEDr/86ixbsuma36lnry+wFOoPQNgZZt5qInNaqgWyo3AxIIYMIF8kgk\nwpHyTQfvn4WUXY5wFZxYwpQ/UAqEPJ0Le1MNR52auo7x8zcHcBbRszEnQ7Im\n9q0WfN8QJxs7/7tEVodGTi8MoqTVKo7r0P26TpnR8VDwyWJVhFvI4iyCeKdU\nlwlmeu8Vk3s4Km9G3sXFyVb7CWYcBUrT0ytqeoGYyYaWuL7h71wgXdyJAQXg\nUUvR4dnbue/CYcIsI6ziNmgs1ArSA+utrOHeZS6Gxwh2lONykpjKEbeZcJIS\nZFjWxcmwQwujr6ZVxx0JHyB48AXyXhsSWCBLO+cgXjYZbjdRa/IYBtqjtdYE\ncwZ/\r\n=bGkv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBBhpkxSxhUsL5Ez8o60+9KAQ9/nttBXzur4pE9q1dfLAiB0FHLCpnhS58CBOyOqJXG3zLlFq8BV+ldANqdiDk5Mdg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609788567-7af451ee.0_1609788700585_0.5756184803888316"},"_hasShrinkwrap":false},"2.36.2-next-1609788611-dbbc4217.0":{"name":"@xdn/core","version":"2.36.2-next-1609788611-dbbc4217.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609788611-dbbc4217.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-aGaSWmtomTRoJ/5g3zquVDdvP43oucY7vjVOUrLNHS9mJYtsRyvTYuIciXaQedsOoq1JNlA6nvhOhDz/MTspqw==","shasum":"4dbfab7b5e8e2e41bce7049f6e9d5d716f7bd339","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609788611-dbbc4217.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf820yCRA9TVsSAnZWagAA6nYQAJtlNzNhMn/f0z5OLa8b\ntBsxPfylwBi5VS9Nh4YzoRAGzMtqzVqyCidcp6xFIZjGNiMaG7B7iicQg069\nm1kupuyFnBSHvh5NVwcKbwko5QVMcQH/SyUFkJGeJS1rWkHz5mf8Iuh4STCI\nygT8YbnRR7z845a0wCXlLBprWLvb/msmLdO28bq4df2t8NBz/wxVu8ZqaPiW\ngs3obQhMVrWPLE/rlHaM+JybGEWyjuEtScY1dYZd9XHSM/gbJS5HwK3hdp2l\n2co1ymuUQokjFPI8s5fcGnmoZBoU30y4fCLOBTWfaJ3k0Jjl53TpgusOV/mF\n4NonmqR4SF4N0dle2UH4O3fa2EAEYyvlGv8hzNEv6ugVdwUGS2fQnD4+LPU3\nC7EoTXGk2IEmrN0BCLR68/cRVg3hFWlFiLbRubx2Sgh66CBv1oCwQSF1ODgn\n61//+BjKbcauiisfwz+D3ZlGuyhAu7wQE5ZhGnNOYl2XFp5BxIp6JDeAZoh5\nxr9NT3hjwkwltc9AIkvgbWMJI5wkYuuw4AlZD9dEnmAf+zM/QQ5euSO/4gYX\nlaJXN/wLkB8uV8guWiubyX38tMfG6SZT79mVO/vxd+9ceEgSilFAGcXgj1TN\nBRTWEM7w9kh5B0A/risQFHKBjJW99tapSxTkr9lPqZ4vp6vg8uAFADMad36i\nRkzl\r\n=211U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrT+3+HTBNR9I4QLT41DouSG0mOwvk7iT3QM5rsjjp5AIgT4rhq2HgXqTnljkdLz/rNTcFX3EtZKQV6cd7AqPDR30="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609788611-dbbc4217.0_1609788722130_0.04677708613951426"},"_hasShrinkwrap":false},"2.36.2-next-1609788700-c3f154de.0":{"name":"@xdn/core","version":"2.36.2-next-1609788700-c3f154de.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609788700-c3f154de.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-W20VHMoW3ytfDPzbj7ygJhD6UCdY+y7l+JIx5eBoIyZsr69QaiyKLEBYVaMisQqHS4TDHxs1Te4Gm+elGLT0lg==","shasum":"11cde49b72a6003bf160e4a3b0cd7149f3247912","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609788700-c3f154de.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf822/CRA9TVsSAnZWagAAGkEP/2uyY6AFlC70eJqvcbO4\nODQ/mBluf7RpASPC/Vcv8pvfxpx0+oQFGs+UXHkN0+LA0QKu5e0IKhznei7F\nQTiU6/Txj5y0eGBfxb0kvvtBxsPknSBUekmvj0LfzqgAWTTggv84K//v1h8d\nc29Tpo6d7QvKnA6JoYes+aRDaWzhqco7fack+6FQdiSwKqWVdd2bOLl5uvY9\niEeGt8QJC8R9tcx8YOj7xR9kLwJP9Z5IoTP7XiJOsI8reSzDZwTz7FeIezEg\nZuMWYFqQEVnrqqqj3qbc3sIyauefWmM5LxHj1dwsBVqpo+ki3u5c41UAMdOm\noLlCzdStXpo+7N70ksSFv23cqUzMLO4HOePeBcf1seEyVJ2M14QfCaWCOvJS\nx/LdmvQZZvkrKilWuXatnf0XdpQZlArxVy025cTZhUAwA2H6dJc/wqXC5kht\ndns8oP7ads31G5b3IfUHEwH9qgke/ErFeV8IpjgCN6wdmwGuL0h1eH/n3S3r\nXnOLrft0maQ6U9wHN1vOt9qKRYUFSOYSed7gfXdQY5kKcBBKVAmQy95CiUXW\ncBCSXe7YcCqUual78JnXUjvuArK7J/RSy/fYs0/ThougfqmFSDLGLJIWJ2ls\n8GXuOwlrU3BuGtvn6vyOBuB0F4jzstWHesPs3fbE0st1y4RdIrz78Zf5C3uO\nid+r\r\n=BIEk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3XN+wBU0V5e27VY7JPZfc+9TFsqO9Py+E+pflgNwGHgIgA7uc7iNysLmTGF2s9iyBu8k//8WNYhFOSTJ93tL10M0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609788700-c3f154de.0_1609788863113_0.8379705302986338"},"_hasShrinkwrap":false},"2.36.2-next-1609807904-be1239fa.0":{"name":"@xdn/core","version":"2.36.2-next-1609807904-be1239fa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609807904-be1239fa.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Xf/oxcL2oOs03N0s+IwuqhPt7JkaNUpoQdug1lQrzat3iUB8wmKCNdgA0CjDqNee5q7UiE3ALY1N4tbkf4yzxg==","shasum":"024e8db2ba40e3c070cfa004498e29688a0181e6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609807904-be1239fa.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf87ipCRA9TVsSAnZWagAArCkP/Ra2Elpdbx0khGRdBIm0\nem95bTPJ814POn9KQ6DV33mwyiIkFxLkRxLbVOHjLllZ/bAI7C64puPNZbY0\nZoBFsf/d5O8GvQwwKzSwaTR+DlCuVKHdsnFc3B+iwmwI+3I4zHn4zPh0k8YO\nq1O11fO2zPxgiQtt08wOfvwt6m84j86/i1DXhnswehyCrU+07E3rfElwCrU4\n3zhJfmPGBuDNmsk7e3mArWPbyhtSfu0yM/n8hubJUTU2aFNxH1YKdFqsGATY\nSUHiiPS27zO4NZ+kJBY5oBD2e/XmPgbGY3hGEeONMi2rv0CD8kuuKztqWXSB\ndX8+9SwTV3iznJtjzxEgBoUWuGpKvytZZsUCbSkzteHpUuE3lfeMSsHmO445\nhyeF//qVNtaCm6N9EU3my4bXaxtuYWeMdZhx3Ae0E4SEL3HPm7xxF8sHHWRj\nL9EJy3a42pMZKhPP+s579PuoUIpQZspy69YCh1WO+/q695oUv+Jdexqvfp7s\nhciz7hGwIWbqx12/hRPWxqYSVv7wbfBEb1urlOY1nj5jJJX4ymP0Dg8J0PUD\n0U8Syc6AQl0YHHByq/iXyYdMjN7Yc98DVYVnugYur5tR+L3L6NwIxIBK67Hi\nWt4G8NjYGuv7zwZpyYHtnjiCmhV60EssCHxBruHQwkvNPPLSzsGzcS4IpsTR\nYjZq\r\n=eVMp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIrxrL/42a1e5fzT4EYGNaR7YyKxvGW8bf0ttE8GOWMgIhAKmdmyzrpXgVqFZxitz0yPcY82LxTLHqOsvTHc2HakD0"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609807904-be1239fa.0_1609808040675_0.20161177407995146"},"_hasShrinkwrap":false},"2.36.2-next-1609837080-490e20ee.0":{"name":"@xdn/core","version":"2.36.2-next-1609837080-490e20ee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609837080-490e20ee.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1VGF2UqPZD8y0sjgjYv7//gtAP0bdVkbUWOsi++FeCFr3kivXWLljnK/mGXlG+F5NzAgIka+dQuY7iSH2ZOPSQ==","shasum":"2e9e3705a70e7278036a3fc8f6f3b7ec8537d680","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609837080-490e20ee.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9CqcCRA9TVsSAnZWagAAZhkP/0MzyBopncWG8iuTwS0O\ni7hFjtyYnWVknpj4jHq/bwNpqohuNeVveYYh976R84ty5ZKl4pDyAd+cSX1n\n6l1sGg13vXNkcH+BSl00xBTROtOhE8/Ej3RfkhngsasOPYrOe77srDa8ghxo\nDv639KaHI74Q/aVysdU6IdabiKkjv39241Cz8633t8bOTPs56cZK1+r0NTVl\nCR3j36ZGTomz3eofAHes8MH8w5xOZl9i5lFhJ/nIcVISkw5JOhCLk8/NC13i\nxugD9tSh0YOa4g1uRj51XbinB1qZbMhRaD3D1lksa6NK25NFU8F8hlAiRxDp\nBAo+kf80URV2Y6BzKe96WI5Z4G7r54y6QTjHCZtX/6Qt30kaq//NVvmQUnqX\nxgvZyGpMBWiIiMQbmJpICMBpm3QLk7wvZBcaCYK+sVkywGWQURzYc7PKGiYK\n9Qbq4h1LeIBD288buAHT7FIGOImkMZlDdrkBHnydUURTx8+oP1a+gQDuszpJ\nHWPAF9oQlqD4mE5kZupzGKz1seuGHEackRMjzZWJMpwbl0AF4EVWJEN3cQZI\nxtafeOcLTAw9xwODwmNMHXjbs1Eaf9Mf4/mjkQLsCnWyc6EV76llIi0heCon\nMinp3XDlbMOKHlfSo4IpM0WHKorK+rI8zfFZfj497KKKOMBRqz2A9FsMNBIm\nQTmb\r\n=6Wgv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCEccbenAmJvHmJHMH++sCuOBOICEQHVXgpKtKxSVHXgIhAK9+N/+oJSk/VKFtjJHmTQ/ab5kwZ8pgFm++3eob/2sC"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609837080-490e20ee.0_1609837211333_0.8385780858107779"},"_hasShrinkwrap":false},"2.36.2-next-1609841654-ff67b460.0":{"name":"@xdn/core","version":"2.36.2-next-1609841654-ff67b460.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609841654-ff67b460.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-BcPJrREVV2kOR1VVuJGQ8KYm9c8YEVp6mmxFG2vMZgqfM0Lo21S+Vf7aWFblSFel6wGgGhNn8T95GmcQqibSLA==","shasum":"e3835f03e713249501674c6af437587b970d420f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609841654-ff67b460.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9DxpCRA9TVsSAnZWagAAD0IP/R8fsS6neHfckHqEMQFA\n9rL/z0ib/abIX7pkuohI+YtZcBaCtM41VBTjtXbrSZgVlCiVuRRSG9lFlrFg\nEYXHB7YHCR22TLKkPvJ1h5rQ6wFUF5raKc+89ty5iRWWe1cgUvLW2nOkIukM\nznD3ZCSyP6zlu4AQioSGNMNNs+DPtI5v7rndXatbNrCl6tgeS26kZ4UamjnW\nTEqirPjjyW2Ba11RBUtJO5GFwAJ/3BdnFZGFT1FwSsIo8XMGW92/8E9Gnusy\nr9zbw2DlXpTicacLxdGAuYikrvSQZRQCgPRhB+j7ysoBxicoBrKYqngdQtA7\nFoTLigIfPBR72bFvm9Z6ppY+14mSIEZCGYfqVSt6OlVmdrAnzJQjP5ZnWbkF\n0k3D6ErW075QoXzXiRdprD3jRHZpifsLotu6UsIe6xPR0k53lHXla4dSbK5E\nzgK38ykPiWvxIpWg2Cm8ojIsoiyckdN9f39C/DkyOTgO/S2q2r5zT1Ji3Bd0\nM3vUc2j1t68aeH5y5ffbrbF+s2cg3pcxrXjyOytpTCynlnehiImBMEv47/DN\n3kSTbqpb75BXMqq63p2X0AXm2ZK0LEsBBtPL2LP7ALL30m8RUoUPuXM0AyRG\n2e1odjD7kOTdB7YCsikx+pZQFcOgtu9DtLO0zc5w0aihpSBBgLxeqFKuX2vF\nkm5F\r\n=lpzK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHgAWM2Rwla/muyaHCSdTm+t8/5QEB5Pf47tOPjeF87cAiBFNrA7n8MqwYrdOVDRuq3njks89vKWeVy2+Jv0zkdyFA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609841654-ff67b460.0_1609841768711_0.8320673901894389"},"_hasShrinkwrap":false},"2.36.2-next-1609845820-70f0ee96.0":{"name":"@xdn/core","version":"2.36.2-next-1609845820-70f0ee96.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609845820-70f0ee96.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-L1JHqLyQbK2DETQIs3tzB1GxkaRCe6ahMxgeBjAkddO3AMup+DIkiAW2rBSgEDz+wYDPrROfrHhfbGSVswwaIw==","shasum":"4e75f486cad2c6c7a654bc253ebb205acc719654","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609845820-70f0ee96.0.tgz","fileCount":172,"unpackedSize":658930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9Ey/CRA9TVsSAnZWagAAWaUQAIuFKxFzWCsgg1qrMdYD\ndt9wRtAz0SGKmjMcLFzetV8MEVR3idF/5qsYb7Z2dlE4TttVYp++WhJ+EmdM\nmGGrpxAs9og7PTerPuV8hoWz2+b/vTCQtlWjTxfilqn5UHFGQZ1HohGFVr5P\ndMU7+sR0iRFtZI23MkE2hyNywJ/CriTOB5Xcar75cReGjPVGoHwF2f2ofb4w\nGAJwWNTCcpq2o11zcpE8CTwutWs1XAutG/e7BMPam/zT/d8yNHuf5sBN69Af\nSp1GszqFugNY4JqWJ7fJeDU+SozjMlrOjJQljn+WAZy00D2hm9NBJuQ7dSM/\nvh42PgcATdtdptd2DpHRL9zF/gsOyJNRmmAbs+mmCHmGjKiXjct6GqIndnF3\nSgMy8srFAgboEFA+QrnPO/t6TckyLQl+smddc3UZkMFsyQZEUku6W0Y0Je5T\nezBZrpQ1+rCxZuKkzGmTVYV7TMEvthnAKLl67vqKLwN8bQazkWs5r9/mtpRS\n1GIdcpOxNxA+rcvhOmW3EGkG3VXlGH/xJvAqGNKcawK7q1Yiibco6Vih+bSJ\nLINLi+aTvRq22umrqe/zP9fgs+kiv7VcBnxm1z4d1XeeSd+SIMRrM8Q2DpmM\nZpV4T1aOwhMHQJE5DcV+9cKj34LixQq7aYrlXnriEzTwql6hGC6wUAGbZQ/C\nNhLc\r\n=CPg6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDblU7zNeI8s3vLCrH+mG/0gM8a/Y8inKHmoKSuHWWZGQIgaVIWOvul4ubkt9bwSKe3UfWMrecOi55L05lLZKO/sl8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609845820-70f0ee96.0_1609845950606_0.8209615117415339"},"_hasShrinkwrap":false},"2.36.2-next-1609846275-490e20ee.0":{"name":"@xdn/core","version":"2.36.2-next-1609846275-490e20ee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609846275-490e20ee.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-vAuLNbiWh82p927Om5ZkyTsvZAXKYHEOt5Dp7apzbbCDQ+wMmqQ0kJNGyy6Ft55ZilwwqjvCm+IA21fjwvjKuQ==","shasum":"1392acbc0aeecf522324686fd4c5899f9464acac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609846275-490e20ee.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9E6NCRA9TVsSAnZWagAAuyUP/iQ/E4Cy9UV+L1rnxQ9h\nfO/i7Ib232y9sTfQE2Af9xmSEE0B7RGKiSGoSZfSDn8fxGcn5kPJtmFrT5T+\nMVX7bjynoSAzVf2/NTGp4P/bJBWd9LeUAej3w5mjlqMVAJdwKU/nI2GAcln5\n04twGsTH4Kc88SRrg6SApMW1WVZmV5kzkN/l6Zb8o2W/y5mSh6w26qjeG/3s\n1hAIRmruprPRtWK/DKKFYbGb1mnyY+My2h8EQq+D3KL0el2ojNPQwbxQ6Yf+\n4Y+thqxoCwFdPCXncIa3OBwBr6aOaCfYdSBJS9Qm4ERDz7gWwnAuAahXWPpS\n8nlAHT7By82YL9etcKELP4AKZmEfP6Oy5OxJUs9yvBkOtbZPgptALt3se15U\nyovdN/qGWjrVXNGtWWJLMVAk2OVpZubcI0kfB0SYBUuOGNduV1k3WomJomdk\nsG1hlxWrMvKzP+T16SPI01zUU3XpnBAWkdoYxCrgLiL/mjZVh4Pm/QGJR0r6\nKhsMYEdiwm5kOpFQlNCT4gpdqasNw2Kdkjj0c0Y2YNx/P1UdS7i6Eai9/t8K\nbwYKUaNLbgNiDFI0w5nLFWNoGsTAi0iFwPEWarcJsakQh8zrf99MuvOYkD0j\nvLmyk6o2Ea6qI9dY5WwUk8v7d0HXGYQgfHQg1BhH79HPntM9sOF86f0s6O4M\nLkG+\r\n=VrUb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAXP6GkNRnTVHNM4bNFc28GLRmyt3oggSubf11cqdMQ0AiEA0WDjnz8dfl3JfYZ0DGI7vg6Q42BDlfrddsM8gJOXAhs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609846275-490e20ee.0_1609846413235_0.19750431948669722"},"_hasShrinkwrap":false},"2.36.2-next-1609847117-5352652a.0":{"name":"@xdn/core","version":"2.36.2-next-1609847117-5352652a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609847117-5352652a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZKac/VEpE0hbtmnmeKrIAx9j4ymvjY8co1pCcsaRNGu+q9Isx6uz7ygyrskDz/LTJIy7hu6gO8LGLatD64fmDg==","shasum":"421d0c937cf3c657baaa12196a032cc311acc808","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609847117-5352652a.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9FHQCRA9TVsSAnZWagAA9DQQAKGH57W2P0LU0BQF1e2I\nO7f2EidyxqXpa4/8zfI7HYXOw5tm2mcE7t1zy78jVWJJ3bKL5n88GOy0D2JF\nuDVtB5qLwgRJWAM0E6jvjzTwCBykEhcinCSGuUhRJqa9yXnAZWBTT+CAooCA\n4YjAVYhD2F4BqBK5kqKxktAihqUgZFeweGUofU2UevGGh/ciO7hYl2Uqclvv\nXiHMuRwQt1XeAnH7QEaTFjJggkQ1sTebMue5AN3w60vfAMRmXAf1sBq5FKRL\neNTxhZ8/FEASuZhPJSwkgfRRvXU5Pe9SXecsBFKxIbPMd4FF2gsKnGrFH8ex\n6c6gvSv2DFKO41oQi1MB32XXcAXOFNaU7BZsb4+7eDf/rkcuJAMAVxlwHbMV\nUdZ1tXbQthxY3d23oYcBiBGzYQipMDnCiUK4g5x98k226R3ZgzTg97eLBbcB\nTkCq4wi0LVpSDfVlPT/3QiNIlbZqcBexjGH/l8RCJPooybEWt6BlTcLH8YlG\nq6xQWGkpX5Vs26kF3/DmT8m9WZd/jbub7LbMn/bF6LyO+oMlMs098QtRKOkm\nF9kGuE0LnYcmEOvtSxJEhqPkY/hSOLsd7TRYTQKVhuB5336pWy6iZZNfRUN9\n1MXObI2ZHW+m+JL7AKRaODPVZnAkuygWnYAa8vcEIjrVx+DFHfb8MPWMSdd+\nYBcd\r\n=9mzT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDFbTXqUWmgJ7/JsL4OMIwc9evBmRSfMDEFmjbRJUUMfAiEAn0661oeiNrJfEtk0a6lBmM4XX0/t+kbflbPy9skuj78="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609847117-5352652a.0_1609847247473_0.7068389562366442"},"_hasShrinkwrap":false},"2.36.2-next-1609847217-9d91e49a.0":{"name":"@xdn/core","version":"2.36.2-next-1609847217-9d91e49a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609847217-9d91e49a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-uAYJaK405B+1NVlPU439KsxlIRAeg5QZRwnvMjTAtZSkXqtdOPSfO8ySGfbnfp0bDpjQyd8XYobxA/Y7XCJY2g==","shasum":"0b69c957d85a807ab1e3ad423b7bdc800fcc8e80","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609847217-9d91e49a.0.tgz","fileCount":172,"unpackedSize":659504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9FI7CRA9TVsSAnZWagAAzJEQAKGLzA5Uycnrrf3HZkY/\n1KVQ+lOyiQhsDrGow3LwAPXdSoUeKu06S/moyABqtrMyAI/Qe14juHuiJGib\n/Rp4/NcOCh/beK7AkUC34qtfmx/U1j8vFuuzTSJfRLn7ymLjd3LB5wDGOyqr\nDOkO3AcllWlwsb/d9V1rc8FY9/CTB8T5gruIQL2pQhJTA3GUC199CE3uQnqV\nKOk57HEvCnkRMd8C6QqrfqUjTLyPOr9FjfpyEonR5I67gtyPnT9wUN92OiD4\nD+d6G0IBBCKchKMBihpeuRMFGjCZouvhGddZmOJluF/YoI4rDB4ZGyEwdoRi\nNn9nTJErMi6YbGuZe0z6wjmy0kNEcOMFHa5BS9Ceie7wFv1BSwXy8dE7vrTa\nXPck0xbXashZDu3C1+FWLOH7ivyfKaJvaRy8A01YVbtKQAxVvwPM42flMNtS\nj/He0+pBi7wZTF7TxMMo/lfFAaD867phu+NP+iqCI/FJdKmYtw9coLCc02Lb\niSmBK18qVZnOuJOs1Ash09DiyhfXdyEbhkS1+9Gw5iFLbmFHy58dYai8Do1s\neEf4uf4Hwj8JnJlUMhCk/pHVDE6V7vynmslRWQpuV0G9wSq08lkSepYG6R8Y\nKlq1FaFAA6peRMR/ZeG76q0Ty8xOa/etrnrPR1pFg5N7uOxRKZrKAdIA4vmO\n2XWq\r\n=Mrh/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCU0Dh1oR3SRKUztJe3Nv9nj8Qr3FVhSRcxNWyKDS/SywIhAKaNtw4x/t+ucjeWZx9x5H5gBuTsjzuMNvSynoiRey9Z"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609847217-9d91e49a.0_1609847355141_0.78096529140558"},"_hasShrinkwrap":false},"2.36.2-next-1609847271-c447dd68.0":{"name":"@xdn/core","version":"2.36.2-next-1609847271-c447dd68.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609847271-c447dd68.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7KxIKAqfMZnavYr4lTVOFs3Na9ns4VF84x4zAhO6oPlBEWO4bSlpw5hR4AdglBZ44HkgNu+GGdzq4lxj0jpxZw==","shasum":"552092940316a977dac905fec10257c9ec4d663c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609847271-c447dd68.0.tgz","fileCount":172,"unpackedSize":659504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9FJnCRA9TVsSAnZWagAAOsQP/jpCtRpia5XtMmerdOt0\nIcz4I/GDkJoBRxs7dTR7DESsuH7qqMNcx3R+7NyZlh1aeW1+M2nLg1+Cwkkg\nZmMlP9ZG9jt17vIA5HqNx3Xeh3lrFgnq8hZxLBDSZRH9TZwT36Gn9WlUGvlc\n9baHD+/vSk7XfERpwZ2G1SpxFtcoFjfvdTV6TiUoZgRyrBaF/7N6riEpfMnl\nnbl75WuXLtdMbOS2ZgmGm+fxmaN5MnaNXrjRLz5wLhOK44ciaAL4Le0W6XQU\nwGs8ngFYiZDNesrm2gmGGhatrrlaL8uRYKjy3kvgY1iozWf0YqoTVI1S0m7c\nUuRIQonuDw/q6Tt69z65RUfXuJ4h09BwX5DBWBLHRsLwSI75UPs3OzJ7hUzD\nz77UmcraJ0ZUrywZ64MarbMJSUq2lr61jLnxctUSzAtCZdmSE235xSRx8ibx\n7R85HRQKMgB/S5TtB4dvaB3stPyfo/QyA+G8kvOKT6So5eTFXzV5Z9ExY7c1\np3B9+iGKQ+t94iEBHM4zcNqOjtEVfcAGZ9PKeXRKVB9aEKQKedsv/UcCKgSu\nggXICvVeAlHaDpuNgbmADY7QAyCe/x08tva/7m0Y7Tg78ZOAlY9N2u8UAFOG\nkhJJKl2z34QG9pP9LIEok2+2/KuP+DxZs8T7ktqzqtMr5NGgw98FtPKDf7jm\nNHWQ\r\n=nw1K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEYy8joS8q/GIYYiuo+t9zaSWH19BHaYSzbnNlYZ+VTwIhAOxYE6jq+k8ywjp/c5xXB8lK6nnbjLR3Tu86TtNOV96B"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609847271-c447dd68.0_1609847398432_0.214111831636141"},"_hasShrinkwrap":false},"2.36.2-next-1609848771-e9e63405.0":{"name":"@xdn/core","version":"2.36.2-next-1609848771-e9e63405.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609848771-e9e63405.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+1Co+PgmoJsvQOAD7nN77OaOmbfGhyvPXVmeVdrebxa8UFyh0ckStSCinFH8Q1hQK/Ql4BcfgHlgtc71JWRsKQ==","shasum":"23b2ec3d50d9d0e62ce491dab5fce51769f39d60","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609848771-e9e63405.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9FgxCRA9TVsSAnZWagAA+/cP/R/hApONivJSJ/G4d9WW\n40XYraMr/Hm1r3AEsST1mG+axI9gJiSR3TQaJOK10jE4OiXlEY7VoyopNCuH\n8D/iZUpgs5Y8Jw5Et9jOGLPxvu0BRo1buDpMqYxXD4OhJW5ioXCRIZaOvRrB\nHBzPR16UJYGN4EDbHcxO51lx1VEK0M1yvHUjTGO5ngurYB40ZQsxgl9H0TGt\nvOSgtSAv5AEariGgfzfogK3AimBLoXLMGkNHwHrdVVgJNIhCcdx1QnFZEhpY\nLg9Q/B8+sUobZ83ahhsgIBWCWTf6ANHUw2AO0nGBc4Gu0GbczJp90ZhPraIz\n601iKo7wvQ3iVBnJpIb4HGU1xYowtgYlSsLnmWqKWs5ofw3lhpGmR8LfB1IR\njBfdlm7FitwtYaFX1hAyNkNeOLpeuerNsI3m9VBGqb3AQDIsd6bzmzqaxPi2\n+98+9duM2S4FID6xpYTkS2uex70GxwiXRigYVKJOiFlk9D3BZ56Cfp6U8WJR\nQKdSC66ucc1xQEUjwTpm7h4N0CkB4wGTImTUTN8eG06r1eBeR6bRiUHq3sNA\n7gPgFOrTYFwib0JfuY5Vb6kAn/YXyjKAdoPw8VeLC8Dw/ftnkVTtyOoWHF0/\n4RX2UQCqZcKwIQy0x8HkP6ATNRKovUZZPW49lfS/cVvsB2pv5cTD9rNXYok1\n8E/W\r\n=ixUr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCysgz95Pfn50H1vlppTrXuk2H35nHOc7qzEM0V6UWajgIhAP+jUIbXVeTuRQTJZCRqV7vDqufPefVCtQQQrYJ1TY1K"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609848771-e9e63405.0_1609848880749_0.25262556245391976"},"_hasShrinkwrap":false},"2.36.2-next-1609851992-8e3ce2a6.0":{"name":"@xdn/core","version":"2.36.2-next-1609851992-8e3ce2a6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609851992-8e3ce2a6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wEV/fblhnjm9tZl9FPhiZjMk8pbCvjmL+ZO9jmBX8eOjCVgE/U6guXkUylUliJxEvjYTS8FXa5eUGTBCz/1Xmg==","shasum":"fb01b6b320e081e98afdf42b3081e3c613d35833","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609851992-8e3ce2a6.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9GTICRA9TVsSAnZWagAAA+8QAJqY1NcP/IMBpFqlpO+M\ngZkNvenAe/WHZDasGhkz/EGJfDWgSwJG0G5BU+OeK7b/Hv5p+d+/kel0O9w/\nGKmGQ/0vwY/D3KVP+jM/AWcoXi+rh5dEXnNM36azFhIhXTJelLanU4kQpoXx\nKGCZQxhBRmfmRISB7YE9Q3Mi7EQbJzU6hwXdoVX749AQHl0Tl7H/LNBK0GHn\nOHPJaqEc+IFXfIVMJ6PnFcUVcHnetUpHtPLXUuayoHuPnY2tY+QNYeFQI+02\nWlXT8NjvW8mGVkl7WshgFaYx5VLWoZs/TeptYT7Gafc7m+/hTC9gJwXS/FNe\nd11PpekS2OP+NG3KCX1KqxOJ32y7d+ncLyLW4PLGLjY2o+MDFGJ/qYgC7+eU\nOuCfOgOXAkNN0+ZBDKhzPbYg3PVEkeinkULs6+chPBgSAhbLwfFdDSAwDGd3\nVFojeY9jKm1H8JViuLX26W6mieQNXGQaa7JNONlnNeR4JtKqtg4BIhrxLRKC\nWZLwHg63LKRNNIF5iVC/v4OBxjftT1NsybKtkuL/uLg7+agbJfTZY0doo5O3\nwVfQnsb8tX1qozo3xJZxmIQg5JkO0+NVObaCLLSPFMmwI9f6lrQWca5JYeGL\n9ZaTCxacdKF2PEoQfdYpPk2fLuoZTqnLv6FuCZAxllmCCauZ/hViCrHo6r53\nCLqt\r\n=xcVb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD17m2fUYHdRY9rGcY86LE57NAZxqasffgqBR0D6QYlSwIgKCIwPyFH1a9TP2pKrNwb+nkqVUDdReqCqpC4ou+W4Tw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609851992-8e3ce2a6.0_1609852103791_0.929282950311624"},"_hasShrinkwrap":false},"2.36.2-next-1609852368-d37eaac4.0":{"name":"@xdn/core","version":"2.36.2-next-1609852368-d37eaac4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609852368-d37eaac4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-PDtnkDnrHOpMpTbNMMeJSFm0Iw9K49YzjjB1UKMcus2b3LjFNO9JnVlzZIo9LCi1yHi57cTQ9RTX7uSZsWPjRg==","shasum":"7856deac6f2067cab08d7310620558413c6b1306","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609852368-d37eaac4.0.tgz","fileCount":172,"unpackedSize":659706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9GZNCRA9TVsSAnZWagAA6acP/1/dAgxnGvS4uALf8f3H\nVRn8Bj80ck2rOeZ1F+rfCMRnuehJUbSyXd4K5At4foi4SD4OU8Ki5L/Kd1JT\n1C4juZ8hA5XT7OL8U+cJnfRRuFVsc/Os/COgPEbgErcO+P1ja0bQhsOMA536\n+74ZG0A2gX0EcdJHERS+0xGl0OhjmbStXo61Fs3atAAPD7t82myGusCtr/Ii\nLoC7JTz4qxKQJMH0YJOV24ZsXRio1bQpSTCh2qqAkVvQ2YgKNN94yfiBLK7q\nfS2vKi2d9Leh80hlb0qK7EWrPRkXIT3lVylATK8bZhw47jcRazPEByg1ev/P\ndBSuOjmp1+K4A0WmGYgckYdgjIE6xIoAQlfqhiAO/AgXkfkofL9WyoAyGw4L\nlrcOJZQZVQKr80zv5Uzz1mRzdogRzEf6n4EEB0TG0qQjpyeTfrb+bvuT9gYM\n7x2z58tV6snQK6AK1Ymx+S6StHP9XhMaDxncscsagg34LHf53s/7DPRly28T\nsPP1Rd3bognqMkXG4geGB6Ljx5F0I0UquDZotxWta2y79nc/0UAJP+kOytSS\nqzzkWfLwyQCA89H9Zn4B4hus20y0xpAwxDh6hidRo22W5zFCcrkXgXy/D9Z7\nm5jNga0D/6OWL+At4Fe8QUor1Cx9wUvDm7QdCQBG+42n8sh6aH99PHbA2o4B\nKLXd\r\n=j4Ag\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE04W1q7AFVzFAGWAv3AKNXoGxvkUHDMNIX6IX6uvfLvAiA0ExgJAFC2SSaNKLmHTEkkP35fVCWl2kHtPVJzji7xcQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609852368-d37eaac4.0_1609852493021_0.6469831175160639"},"_hasShrinkwrap":false},"2.36.2-next-1609853584-45c51d9b.0":{"name":"@xdn/core","version":"2.36.2-next-1609853584-45c51d9b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609853584-45c51d9b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Z6iLIYra2OlBHv+4OATchpLxDp7hhmCp4/hERj54YQlAblW8F1KRWOPhaK5tWYAvsOR2fg9bMhbydlmCZEuVog==","shasum":"2a695aa6ba7f8379c35299d54dc9ea6c78a85b84","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609853584-45c51d9b.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9GsCCRA9TVsSAnZWagAA4U8QAIxOQ/AGJ1FZTFony7MU\nmEplMN0akboNQgbblqAY9XKMQSMaQWKNhZWSN7yf+dequhijIyy6x2q6nImJ\nIdbJixqPBiINPxRXWBqfQ8XHjrfIFLiU5X+DDuVNR8QCEZuxag6ecXFJf3Qw\nLanXQ1b9rP1npVuLrBnmkCGAVT9MCZ9bmhgPR9agrUwpBgLKPg5ENsBTM018\nWtQGokM63P0/JktPD7wGYQiWe0pfIEFnwJbgpjhjDyGEm63pIYshbQUi/tWr\nzGkc4/afKqyvKa9hmpCn1kHuGzq7/H7xzwJC+5SWY4pnfiJjB1XUEbdKgarN\nOWWU+QOzAlXMUYIxsRhfyhc1rFzx2DxK58+ZwHjZr6YBkQ6VqSHk4NbvNFfY\nvr9NdXfK0O7ysf0pm7ppFBlB7Nb9cRpIv/bk6IHOL/W2oa2fQBg45XEk1LcU\nRFYfiqmO0G+AN45TzifjsxJlFSwZW0s2rDVuFmQtT7ZgJM/VD6bS4+WbwW/p\n1AbOs0gN+MOCc2G5DD3+DEEit2a0TZHdW4d266ORr347+DW5JDYS2Tj1CdCc\nIjYXRJE6wt5Kh9yCU6RuSYdBgh/MjFaK4gBajdSjafaCMV0e3mDZKieZBDQX\n7AgwbxdKcNumjEfmEVU5sSJV0pfh2cAQQpLu2GvuBGVt4sZDWQS2/LEEUAO+\nA2Pt\r\n=b7St\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAL5fkVZDAEOVqXLWIWuq2nsDJn92T4lgw374XhkW0XmAiBjPGyx92MV1DNeKmjzuYrgm04JPC/rkFvfpxwFUMPtBQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609853584-45c51d9b.0_1609853698301_0.662667358157131"},"_hasShrinkwrap":false},"2.36.2-next-1609853649-41782c04.0":{"name":"@xdn/core","version":"2.36.2-next-1609853649-41782c04.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609853649-41782c04.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KmFqKj5BIfoS2Y96Fo/QAIqDm1YtjyM7bU3lIa50a9q+COOvvfWDy54PAL3cEBZ+e/C/HX4wJlDH+GneuSxbpg==","shasum":"21ed5891ffde362e32d5fb4b2e0a69dad7fd4b6d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609853649-41782c04.0.tgz","fileCount":172,"unpackedSize":659706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9GtTCRA9TVsSAnZWagAAy3sP/31BlQA6cG/TxQpdy+G/\nEgKrZimKA3R+hjgDRTHExsryHQBHj2379nJuL+c1ISWZgvVMtQdpjkoe+9fR\nVZaRVctZC6+Km95JO6ruXB6Z50gn8akqUcGaBDnQdZum1OgXuJxnV434YFZq\npB61WCl98J302zbaaGfCOck4lIEC8b5QSjamXNUX8TBPdqPXgL1AE3n+dGx5\nbjMu9Lws8RbyOIbjMJ1ayEDjTFhdLZ/mB3R4jt+pX/9adesoz4hiwHCTAq6f\nH7zRjwr/IVIYJ5ksEBo9ZDCmIhTdAsBdQxlsJMt2yugNdNkQ2R6djqH1wnJe\nXcTrsaV/D+ghDnT9sNs+7G6XITErIWPBacaf2g8jD3pplNYMaXrTYewqEWDZ\ntCOu/gGndDK5HI520ycdSYA3sZzcrl2+FKje7YfuvyjmlEbSYYOOgvSJQQkz\nz2smUB+p8WZ7/8B5NnhWB39pHF3IV2AIGsxO3ti9hw2ew/I1rA8BlUTSwasH\ndvT6qfCnbEzN14r9OHDZ4n4EypqWS8cqMxMochPI39gCSZDEpbcChsfMHljt\nRAFZUUnFATkDjZZyFEbhroMn03ReFeKU8fnPx4/iUyeKJyD+dmptwWaOGAyM\nAS67iPtFHOSQ/zJzNFRCSfVj0YxSE0hiUYZKksR+vTBHvMzEmamhh1owR2jj\nxVT5\r\n=2gQz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGlVJJ+CAJprTl/SCwfOjMPWuL555YFXo/41cRaMCljOAiEAtzhL1v0Q8Zuq+2Z/A9GTQ23ko5MchR32z0zaey/XukQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609853649-41782c04.0_1609853778675_0.9146037710606367"},"_hasShrinkwrap":false},"2.36.2-next-1609854293-8e3ce2a6.0":{"name":"@xdn/core","version":"2.36.2-next-1609854293-8e3ce2a6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609854293-8e3ce2a6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RSBuKM0ECM9F3qZLUp80kuRXE+fUc3eD4KpqUy9xGwGddkN5WyyLWOz9MvC/ttLmZKzCLLUA8DDzx3x2AdpILA==","shasum":"8f7908a983436d80d9873102e5ea318fc75e6e67","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609854293-8e3ce2a6.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9G3YCRA9TVsSAnZWagAAf0sP+QA3TJdx+vhAxjW4lehH\nX2rUmo5KeabL0h3RDhzn2uOzM7EbckzJUZ8G4g7Mxe8/Cf/Iez7BEFK0xY6r\n4XPnev+LnTet88Jw5OPbmR1KOys6Vb/k8ee5Jj41Di5kFCcq7lrCFgPAl3ea\nlXuNqhl8gYgLGaCJ4hiTNRRYw2R0s66YyKkd+FJ0NBNxB/RvgcX1k1znHX/o\ns64189VIImXuI1+ZY3WHHl6w68qVwU7ux8PE67PkFSRW4oeOFv70JBt68HD2\nd+w558JRZtg34JZqZv7pNZdjnjIQZow1KVFQWvoDCQ3ggrnJj3/8p+XxK3sU\n/vHIyGsVycqBdus2e0pWdwpfsYnesulQ1gV9wfpiNKqEXx+JGXmaEfHJYAxI\nB0GZu+VEK/GEBKJzjZlVm2N7gABVy1pr5vNwCLVRVf/0FUhiqI6vdZ5f/W02\ng/zylf4i93hxchVE03q1hRv5J+aTyyGy7T6oKoQtWAQ4nEGPPRzB6MEtOK16\nYKyeADPtHLjgdi+jXgXdlA55ABfUR6QY05CsRdsTVZNOpK278rJdiPnRlArY\ncxR+YXiGKqQtXPrqZGrbGsEOP8iBXycYW1IBTGF6qm44JtaPyA9m8bzxAAK/\nrATXTiF2zTfynIFhgiv9LagpFRhWQR5oiV59Xk+2HltNyr0sUlSIia7yYcNr\nPKzj\r\n=jq97\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMe+uRtgCuanSlLhW1b3JRo/bMbItbHp5rGj2ppAlaawIgeMQmvoC594C2uigDV8iMakjm6lJbrgNsShd2XJMfL8k="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609854293-8e3ce2a6.0_1609854424014_0.707438873736635"},"_hasShrinkwrap":false},"2.36.2-next-1609855613-b9796a4c.0":{"name":"@xdn/core","version":"2.36.2-next-1609855613-b9796a4c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609855613-b9796a4c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ecBJq6/K1gmWvROPMXz5nBfWeIZs0rQuANonW/U73rK5MpkCs8LyHb5jxaPHFFF7ZOCssBjPmToZ3aj61onS8Q==","shasum":"f45cfb41ac5336bd6c2cde00b1a8c88ae1583f66","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609855613-b9796a4c.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9HMBCRA9TVsSAnZWagAAk+wP/0CQBqnuKjF5ub94DnAw\nwY3So1akTTvsge5YJhv2y3x3z6oq45Se975IHIB+vJcAQTg5HqCcycOXFCIJ\nlHauVbm8KbeZxQ7iYZtndcHHE5TcDxdQkuskbJ/0HNXcM8oWr0w40SavS4+X\nvUkTubjLIcJQ7pI2IP48Aj7OGbqiH/AYwVdpAW42KPa6p/bSFnYnrgpZFAOT\neNGcX9tSTPvtc60ZcjmZJlysXBwDPbr9WOXQfZOdIAQiXzXD+uQpSbyTbz0i\n7iLfJBldq64MScpTCmdt4x2XqKQ3PgCneNgHTbXWH5pRC1xgeD2NoeP9y8V0\n1i2bhq6I2qX6J/TrMp0H79y4IMZ2FhsisqnkAX/NaaybW2txyY71r0V5OKeG\nhxCcmZZOOmXmEYcB8z4vYKEIu/Mi2YwZTtb50VWKaI7rWTgNdKIYdW3S/8zL\nZcWMNGWasKoZcdIlVbt5MxDHjVmVD+yJ1bIdLF9lGVzhRyXliqRcruKZh/mj\nC9BNFrijcJZMVd/A2l0rIDwez91FvfleYr2iiYshqJCpmMgg7BDM05Y0VOTz\nO/8K1y5msPlpHuAReuNdTlXPU5W/2oIYqSBcsYxc3/lxbODCGzRk5exnNflx\nUX0nyUc9rZAXwoQC5lb7OjJgTmjnFXoteIfIixxWv5vt5S8apD1FKtYmm+K/\nj5BI\r\n=DyaM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClvrodLn7B3hdt/HhGntVoe3KqbNTO/revS6WhtqR5VwIhANXluNcRpg7uA2IWiyuBjJ9kqp3KMeASjZQFs+S7Ttri"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609855613-b9796a4c.0_1609855745179_0.9250191799742018"},"_hasShrinkwrap":false},"2.36.2-next-1609855697-6dfcc08a.0":{"name":"@xdn/core","version":"2.36.2-next-1609855697-6dfcc08a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609855697-6dfcc08a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3PjulxXDFcnBGVAbocywPE1dmp8EDcKDxlmXrLtdXriMRqw/rXsSszVXiYKpXsmkCY+n/uAVjeke8gjZEF2xdQ==","shasum":"befcddb37e0a4e68fec7b6cffec0f09ee0dfc39e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609855697-6dfcc08a.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9HNACRA9TVsSAnZWagAA4TwQAJstGBjJZdkDwOfxxID5\n554pyVj2Yrq8WX1t8iLx7Kq4ERUcRh1JYsFiBB5UchK0PPXwOmcGOYmeti3s\nDTMkWVedga3jomyWCehOWi4uKNfJ/x+50iuBKhidP0W643nfsHsxo36i/7+h\nltHijNQVbKYP7nqe91cPbQD0Rr5FgbzWHL/3y6PMqrk7jOP+KGVKv/GUrrnD\nsY5JHokv85n53FIoTOjDCE7m7mvgRzH94AS2Hbg0s9eC4IRP3IstptjWR/4b\nY5BjKLnilQR53fkVWcHE/flzEsQVu4I6vv3CJ0MYuPQImWo7GyRTL3uS5sIc\nYjhjU+dxOoSBaxTjLF2WIL5e9E7mg1pAeKARjARplsqA3rZLt5A0pczltKDu\nAw4vq6P61Zm6Pin84l1Se/rODkH+JsGwMgWedcMiBwz2HERQr4KEtMEOc7l+\n3OCIiCCU/pGQ2+x8GwJRgJzlHJZhlLzAzEAHqffI/s6Wbx9ABGYS0nfpWVOR\nAINfXJa3CsIwaCpArA4zqLdzjoGSK1BN9ebvBphjAHiK6WrkBtMhGKCkJ2ea\nSIZlv34KfaBDiB4zrdg/uEm1q8o7jZ5OukPqGDWojSOq5fAhCCwGzKPHmXGb\nE3+/mRutMb1Febjw4m+pz4SxQA+jeLQmTz12Bgsg4uBeRpcAHRb7abZ6GRI+\nKpQF\r\n=kTSA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICD7P3oAcBNvZ9mqnKLR/dgWsDZ1YOU0NAaD4I8WVRZWAiEA9z5YEyu50dCH9wLtUeDWsv0XdEFNFf5zNA/Fp9cJ2o4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609855697-6dfcc08a.0_1609855808157_0.7951762761892409"},"_hasShrinkwrap":false},"2.36.2-next-1609856853-c74ae068.0":{"name":"@xdn/core","version":"2.36.2-next-1609856853-c74ae068.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609856853-c74ae068.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gIpsvgyTp0tnpqv19lonDrnyp9IdQ1r8ODtqoFgaPlDMvdMPwzRIIzm2AQBnbnhYgAG7V13D8wC2EAlsqut1rQ==","shasum":"e7e5bf47280e185794767415ebf9147417de3adc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609856853-c74ae068.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9HfQCRA9TVsSAnZWagAAPAMP/RgprisQht6ghtI6fsVI\nz3NxCwEEtXWvTQ5cC3fQmMwlle9rD29l70KA+GkYZTrX3ZvQgCzQzVNU+miZ\nFsSzaHKZ2FCJLMoKM2TtHdnhnpt+sTqTUWPLKP65VE1RmfnzNUJ3DsIdd2mF\nn3yirRZPhpay/kKa95bHa8Zy52dGMEF/cTk+as6EsIy0KUYbElf44jFZD6xR\nuR2L29SirOvOycG+Hro24dAvlNOBb9G92ZgKkrDXWCNECMM04U/uOXxaQj7A\ns8R9UENrltppaRllg7MzuEGLDVyZohiy8p905ZBMmsVYDQ57BfYRABsaZkw2\nT8VcwxQQpuK9Ub7mDZMZ/XhE1fX8bABDm8s+tY0zqs4JvwNQBrmZvtCuQ8jm\n2FeA/PuZExDasKtGg1nzqZRD2equTtmUchWNVFx50Jm0MgdsbWHScRqY7YjA\nLp5yFjvn/599CiVYeSNa7HLiO7YYoP2IY/I6ROwl123C2XLHgfSMpaqxp6qP\nBHqF4OIeJsFHdsXzsVBwqJ9Igx/LT6C1w1e6mJAOpOVrnAO7nbi2f/QWkBCH\n1IlYZobSezTys7YKJueSGrcJorHNyk5i7TeLq837swrkbmN7GVx732yXW6Fk\nqz3FMeIeei0x7OXomQWMntpkfaGmqIa1lMqkYnnBQs+deFgTEwZkjltJ6ovD\nPUp+\r\n=X6Gl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBCNL1Tfxi7BAogttOiCavTYHRAM9SoFXkCeWupK+rQ1AiALfMSo0jRlcYwOVH9PyylVwQRndlgSHhe6PMFeFwc0gg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609856853-c74ae068.0_1609856975898_0.055507835457226706"},"_hasShrinkwrap":false},"2.36.2-next-1609857536-8ed169aa.0":{"name":"@xdn/core","version":"2.36.2-next-1609857536-8ed169aa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609857536-8ed169aa.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+OazPrQSqp1kH4IYGwM9aJk9fGKd5Enpo9rg+W+3Xs7+9YDKxnr5eaKjJtZcFLRORQ25ZD0eqs/Rt3Jy6FxxNQ==","shasum":"fee7766e33cfff9555e102b6c4613f2d1d851160","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609857536-8ed169aa.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9HpwCRA9TVsSAnZWagAAibQP/3IOziofgiaZ6wDuGvMn\nLuM9rHKVzZ3uzrsa/bvtXGU2dRoZ8AXc/Jl20NlgBAyIk63Zhikz74VyGfb8\nFjvzDC4nDD+e8OmJYXciQnVjSwwn5pmOmPEHwVbc4ipU8gLWtTqoEGJFLiqx\no663iM38vqsy5Qc1E6DTGjsHFbyF/dVzRiIdR3rVzT95LbgD3uMnaIdwZs6e\nPboEfJ4Wka9BDiwRbv6/9diZfkBn8UYs0PtZyyS6EMAXjw3fmguCA+Bi/ORF\nh8HS7JwZ+GlTGRFsZ2DQjDUFmIAiErb4hp/T7wXOcO6ZoJ50AtZ/fs2ZtwHs\njhG0YLxs5CVZH1YHTo+54hDoeUBhLZzlnACwZUE+uXd2HfGHL0lHC6nPrGHD\nddwFfYSZTt2x2KBix8pLW/srkTXeEiw5rOTHH01OGuL++5SPsurUtishFUH+\nb80T9vffGVyu5Rap6MdmiyfH68U0yDWmMS/9A3Q8YjqpAGgJvpOmpemPCM+3\n1NxAyyoh7gKtXvKSlsijQ08XfRMfrh7z34rOg0P/MvRDfwqN9curuCTkrVF9\n/8jxq28/pucopstv/Ix8V8jRk1hcJQgnx4pqoJ4p5zEpMHsXvauFhz7ws3Q/\n/OCcLLv3RpHO/krOdTwKD7VNVkfYkEBIOSTvVY0TdfcZCPEd5h0sCUaorGyd\njx0t\r\n=90Yo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEiJcoYktBTzJ006i3EI1wtMOE+ABaGlEKTA4bdNeNXyAiEA+qCVEbs2zD+KleS75pAVFk/lTQShl/NJsuy2Sm9yfkI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609857536-8ed169aa.0_1609857647583_0.6235677054156159"},"_hasShrinkwrap":false},"2.36.2-next-1609857826-8e3157b6.0":{"name":"@xdn/core","version":"2.36.2-next-1609857826-8e3157b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609857826-8e3157b6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2GE9AafAga0St2+XaZxSfoOJcJGrMwBw6WAB4EIjPcCT41HZgHR+fQdYx/4sPlmz5okPkEEO1wOQLpvldSKQ5w==","shasum":"51472d37c50dc3c391d8d21de07a13b5ad9c9451","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609857826-8e3157b6.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9HuwCRA9TVsSAnZWagAA0pkP/R8FA9mEtJorUVC8VWSL\nF0FPLOq3F0LDz/ujy3TEH9hDPmqUS2qfixAo1zB7tevpepcKIaoeM/WMwcH1\n+SGfd6pPsjAw0KxXK4nqRMf9M6POqetNY2AOnoSZMf4eUXG3dcX53dlOPIw+\nEcVdf/vPMHEcpLQ6R5sIlK8A2I3zUWTvwI9wQIZO11XYLaPzlPZ2Bd5hi1QU\nJY3PKW4GIzTj5MLqaI9mWKHBaxflMKStIS1x/UGw6ZNs22cO0NKeXQ1yWNoa\nzh/+hQRmPXGeSH3WN6UdEAynUSCJkLuiRuF87XO8kVQoVfsDIRFKbmCdqyCV\nP45RsQXCmOg8s20P8Plzt+RZ2pRd7p06+jnSxQMZvleQvRppfVviy5lDzUCf\nVjFVRTA1ZDx/aPmX3IqKRSNkSw4Mb/r8hHPWkm7kN2cKcP5SVhlUX6dACfKZ\n5CPIwjAg+zOsJuj7Lq3gF1Xk5GXUcYu0r/TX4vYF9ab15osW3DUXKJxXqjAV\nH+YyBwspuO1XPaiIaQGg7Mip3EjlisjpvoGIMrwKLzl2FXzg57UoV4I4oDQr\nrisz/hyqy7OWAkkmQ8+bDFTOWl9V6SpsgXFcCTt91VCycZWGEWQgpN7a6saf\nZQEio7kSmbKZ2P37ylBeftBtRnswovw6pFI6QgwfBJv3fOhFT5i385EYRkO7\nzh7z\r\n=MQkQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBU2g0Kz0C9uP6lD+FBNLX/v8p5ZAMJUacI4DTBp0laXAiAU/CoiILY3XO1VxZ7FsQcDPU+jbDEf8+ciWwXOr888Fw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609857826-8e3157b6.0_1609857967295_0.4466748083138232"},"_hasShrinkwrap":false},"2.36.2-next-1609858005-106be636.0":{"name":"@xdn/core","version":"2.36.2-next-1609858005-106be636.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609858005-106be636.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XwH/K0zlB0YCP1nn5tFJntqf3/Cg7X5mngzcg3WLP1J0GMzI6tOgLgz3G0AwT+0Zr8Jq0OLpirPs8Wnv/K+qlQ==","shasum":"4abe27832b6aed3aa1a712b0a65e47b29dbae917","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609858005-106be636.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9HxJCRA9TVsSAnZWagAA1tMP/1QbiURDBRv1zRi9+Vy4\n36NrQyOZF2TjQOykMVb2wyo3XuvAGxu3vFqYmVEwxz8Mzmsn+u/2aq37t2On\nvB307ka7ekn7rY4LS7T6K6cuW5FJ2+NLBqAQvas8w8+XflTuAgPxcNTZhOYM\nGpUYs8cbli1602dcC/SNE05XMKnabJIU6PKc5t7bPLDDO8xgD7hTP28W1OOP\nRKiI3j3yith39ZNR3HIQO9s90efJsk3CimKRRaDtqEBozVkeDgbuV4o7saTL\n/6pB9OHTa5wBkV8Mbe4oNo51olfCsIA/BH/AgMXfa2aKCKOjVO4E9yF2w1Ex\niU6yv8L4jwXU/pCRvGJydl1Wqz+0PEW5uORgBTKOiv6duEOcJ9d5KTsWb4iv\np8hmaBz9wZfCNBR4YImMQVNGOTSaDzVdt8GkbSIIWo7hdCry5M+P01pp7xLE\nR54reTqD906Qju80j80T3yqJzl0OsqITXXN0IB6hEl5NbquRx852Otan40l2\nM79s8y1A8YlUEXsDqwZJ7j7LCThMlDVIBBJf4gEp99kHb5wQ70iKnfDh2BVo\naijVxXoydOOXjbRzAJvttaG9mFn/+TQ7HX6xS5XwsvKqDY7S4j0eUWr+z8pj\n8IaMrvtXuOdvOaxbc7lFnzzBzCDW5LJXj7hSymSIliUdcgWjc8zzSsLXicHr\n+f/m\r\n=GoxG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGWKrwtjJHMfEc7Dq7DxaES4SrdNNN5Quu3wzl35u+BmAiEAtHGw02ASZ5FJn4WpHApgU5/MEdl6+g2NHsjyNfVaivc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609858005-106be636.0_1609858120831_0.9217049102578279"},"_hasShrinkwrap":false},"2.36.2-next-1609859719-07fa94ab.0":{"name":"@xdn/core","version":"2.36.2-next-1609859719-07fa94ab.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609859719-07fa94ab.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-cUlEQpOXYN+pQJN63HiXCsowHwdYP6/lWSS1Ejtnn+gq4Ae7jGANV0NVSFkxoaznhyr+zjTiNQVExI2sqMCdxQ==","shasum":"3a93dab455ebbf5ae220918d07c291c845a07e19","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609859719-07fa94ab.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9IMfCRA9TVsSAnZWagAAB3EP/0JolQGGn/rdnsUPatuj\n0oC2K9i69ZwZLyG8wnd8E9MgWonfZcXMwxbKIcHFxDsGufAanxAnMevcLABv\nCMLP3aR50GM77D/wtZPF8SqwEQXC9D6P0CKkrUaIUm0VxTVIGEbpU7HSv6m1\npKI0o3WccSqJ7ZhqoMhkh3Q+U/jPgT64E6LrWm3af+MnyVHf2N4iwY1BiwCW\ng8P2batLnrDoJOrsmsPnU18gT2wc7FQmp0g0yDhOSZMGsYzt4wd8VSwjnwZj\nSkNagEQvrJivjpZvIb55ATwrmJp5RFDnvnXXHjROe2/lyAX+nvQmQUmwD3Id\nOvQFviWF0/Y60Bqkegf1lWJ1z71MfhlD+FagYlptbt3FX2pdAoqOkLSEH3KG\nT1aDcRFaRKYjCxABLHpbCpQ+D4R3EZyMTk+cQXQRMTW7KV57wc6KtQNE08wx\n2Wi+E/5N6YAbDdIQHHBfpLuF7FW/kLq4y1bdSxF+w2rvZ3G6hqydHQpGfgiw\n4vCqEtO90e4nIdBOa86u4S2izUAgnsFsVq4fS0yqD0MO+Ty5gd+KmM02ExDp\nkEmDmNMl6HPfzPg0jHC4GJa+nFO5SBYLpoqA6Nyu0bcDKxfPWfu8XEimF9HT\nYBHJ4hpF02nCVZqayYSeouD00CTAdWOR07YrUk+uvmJiLIvzZzqsvyo0Uzyf\nRw2r\r\n=RQaf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC636lDSgHy22KTX7RF61RhPg1X/Ub+A4IWA9UbbdaQWgIhAKUmAxUvFVTuEHwolijtuw1sB7o/tq55n9U004UDR5Sn"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609859719-07fa94ab.0_1609859870543_0.5082937134774974"},"_hasShrinkwrap":false},"2.36.2-next-1609860132-de7da4a4.0":{"name":"@xdn/core","version":"2.36.2-next-1609860132-de7da4a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609860132-de7da4a4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qtWmC1ZjpTvEfETAav5oM5oB4E0MiVeVuxEUhWw/Sr6js+CWSbjFJBjhdt6CgRzHNf+/OVHkV3eZ3wsxPAtjmQ==","shasum":"c85dc0b64536355b7661103ee317846d57bfaa35","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609860132-de7da4a4.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9ISnCRA9TVsSAnZWagAAt2cP/iwbxK7QoRurabNSM8p5\nS8OXJGCa5IP7KDM04nwMJraamw+zq8+pLBzJhyccfOoA9yQsmUqrFzxjnRrk\nEQH3m41HwnMrEJe9C9t0dSyFOlSJOTBoRhMoumAHWFdhFzqD3LLU+USBPzoN\n+nCTyoefgs/JFEdRWfYfVwSbyohGYbxauQKkvNgBjN/UnCnJuigw6lqy9yYZ\nANfvknXoM/Sn8FZTIHmYjny4RyRo6aHIJAd7auWykb5LA3Q7C23u3Mb/Q7QB\nsaTFpdfwaG84rJWiXOull3dX8w75MHOW3AsyN/SQKMoAUoZXAIc1TlL3CoI4\nUhsgUe3qUNhGalM5G/h+cuYTwSZaaE2CIyjUpU2+a4g/SZVI9fZotrLYWeRa\n7r+yOkQUf+NCixi4FFnTUMKcCpeUZ3nN6eFUMxbpNouj4ev2fRCyW9rC5iaW\nLGegS6LYvi2dm/qFtnkTdPoxsldyk22v8eA+Y5lDjbcpChw6tX4Gdoavz2Kl\nXSjf6fwt5lzUbVhxZgrZRhrjMZq9pf4QOAnwCxfhmjiskM3Ew6bwJuxdcPw9\nUJY2t/SUCfDm04xRcqiavraArAe3HkOKc0DEI0J9+H2XlaScAPVb21/nFGP/\nD7HkWQMV/Xwbm0nx/GCYsfwPifkQLUE8L1M6Qyxs0iVQ2iKKdz5mTVWO2qZs\nEbOl\r\n=U3uu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtZVgUpiLG9GfkkFabuavgOX+QOBJeuJRD/JLktecMigIgMwdhNANrD1/OIyNcf7JwVYhKDm/TG4proaMaXJLqtys="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609860132-de7da4a4.0_1609860262655_0.337750377579358"},"_hasShrinkwrap":false},"2.36.2-next-1609860205-729190e5.0":{"name":"@xdn/core","version":"2.36.2-next-1609860205-729190e5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609860205-729190e5.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-C4DKFi2XW7KDWEik2AccPLHwo3dJU49Zr8aWlThT6erurGqzKJ+zcplL+FsHRszHb419jMIkhIrTtcavCIhACw==","shasum":"3a46acdf53b941924e797262deba9084fb34df1b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609860205-729190e5.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9ITaCRA9TVsSAnZWagAAF9EP/1rZGENjR/rGy/Rho3vW\nCWs03a34mWFpZ+sMA3xoyNYhsg2Bhqj3pHnLkpAMDcah+dl8ThJYIMlcrswF\nh3B+Jy6/UISWsNUR13Fb9jTEAJCO6ZJ+R55HXWMb/2P2oVxT6oBauS69VDeV\ncMQJCDKZsPftRh/GvltqZWKKv2GmN9gEZ95LE/oMVfqj7iVnZIT7m9ww1hr9\njT8IeLB5yBKmG+IQPv4vrVvBOFfOageS39VhLJR12bELMtmy/xLw5aUSwe7m\nGSerzSaQJaEPME+rDQmMVXFb6ySN7X8TKf9HshrLYAG1Qt/hyuQe9bGt07Er\nHz1Ren5P1z1UJXdz/cpMtjCnCkBSTD0hG2Dm6GK3JZpeRwvyWckRvXIIMDJa\nUq+mGqjRw7N8PcyD7383PToQy/9jBIlVu1YeLSV1XqnJdO/FFydza3DO8Dt+\nsxWGO5eZVBSsF0OmxnlGZWmzJIhDGFG+v2x8FcBhP3GbqH/cm3RMrC/+24n9\n5oeV9wbLCFjMEcKb0koPHUQ1QdBFyzfOIBJg6jDAxEtMjp5iOm4SFgtsVb21\nGwbFtcM6rZZpWK82KK0WtdB7D2/he/in9L44PhqyFQpsBFQNU5OxTH9xa+sG\nA2flF5h0uCJkvBpl4M9Fm80ZTKBNiu0jhDGBr2Jzww4Z4SFVJtcREWdwP09u\nimuc\r\n=Q6mx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA5JVKMmE8NqAY9dvRig7RPUrThPZntFnAfDBPcGqspvAiEA+H1+QXhBCxW6NKaeh/CQqzYORLx8vIWBW26OQQnC1ZE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609860205-729190e5.0_1609860314152_0.8457381199179561"},"_hasShrinkwrap":false},"2.36.2-next-1609860209-7570eb1c.0":{"name":"@xdn/core","version":"2.36.2-next-1609860209-7570eb1c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609860209-7570eb1c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-goRo5jzmfRv8/H7Ptp1Fgx1cGPSO88KQ9jiWCZ7SD6b3PcrZYBflzrhARuSK7+De80DNXfwP4Ax1dovg5rPKjQ==","shasum":"17a75f78eae4528a32161e14cc8181adf04bf49e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609860209-7570eb1c.0.tgz","fileCount":172,"unpackedSize":658909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9ITsCRA9TVsSAnZWagAAXVEP/2mFuf+8O22x5wurLMIz\nnF3VEEhRaIyOM/DnPcmsoXjCxy7ekqDAuf7yEpoPKnjklTubutAXl7zw/sc1\nmOm8LwlarBB9ZmPml3rlAr8VxOqVZINRtQ4jmhFyxlCyXuR3Kb2poNuYYEEe\nRtIm/9vuCiZO/SR6rg19UdzGjFF746Pgi6piCSXZHav+H3szhz7g3ZqL9jMB\nE6436qj6qk++20jL263oIcSf86CfSIdYX5UeDp5Ctrb9K+lv7oVpBZkA1Pbo\ntMmPM+i9knBZU/Y3oVOQt76KddiGiRJBKBDluVk+kQaDJXv9aWyVOtbo2rh+\n/WToYBrgTCetXZeDrebxb8/TPuzOZZstvx32q+QiiydBCPY4g61aX7MyfIvM\np9utUzoSUPpe5yYX7ZmMWuBHbiiBQI3KfDDTqHcgOeETQOl61B94+t4NT1td\n/zIOhswC5Ybyg71bM63eoum2bDQSOCyegCBZudXA2t5IV1awwxWSsmz5LBRE\nxZG1u50ULVdt2HxSt2Wz9Tn7flqDb5+r4KoRwcqIFBbA6OyJ8MNPlGnFphbA\nPhLsTmGKVtqvhdE4MgeVLT/di0/Ce0jfB5l8L/BQf1aBKmqqR80u8GOgvDYf\nnO7Mlmv+rlaGUAX8rpD0R3UhAvttygnIrJve5uE+Rcn8ZOlalibvMqWfQwSN\n6gcY\r\n=H7mR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1WVXgV7oxomXnWbyyG6uw0vpuqU6/UsVd3Xcw8L19sgIhAJaTEffoPKenQ6guj6Q618SqoJM6ifny327lGVvsxuTn"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609860209-7570eb1c.0_1609860331512_0.5711369907888302"},"_hasShrinkwrap":false},"2.36.2-next-1609860971-acc34b9c.0":{"name":"@xdn/core","version":"2.36.2-next-1609860971-acc34b9c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609860971-acc34b9c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Qm9i+x/FgUVYexn7nZ9LRR1i5OJsF1yCvrqVXpVRyDvziZSPHq7xi0/uZe1Qzzu9TPKmmqk8uJNHlnCdyyPViw==","shasum":"de9050fe2976559705e1f4f2948a163867842204","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609860971-acc34b9c.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9IfvCRA9TVsSAnZWagAAGxgP/RwUg3f2MVeEen5kCdf7\naUoo84A5ZX8MZuFNDk+IIMtrroXYdM4ks6HpWhY1fRtEM9Tx1pnA0RdKhSIl\nBBLEjoA+4uPsFjxe92OtZfpxRg/Ps7mQJ7Er8JmCfYJ5IlPocEA9iocFFObE\ndaLEFdYiJw1kxvDD9eiyrxlS/LuqasNYVtTxukDIClNkO9PJ17GLlkYJKtxJ\nXAeTGKIhlWfag506uYNNTLYQkkZ7GCCKK2QVssevENZJhzpSWRb31Jh9pfnF\nz6pC/vmX1VzJiq+XkC0Yk+B4Zufx1Yk4DuBogYxm4ChvntpQg0I0pc9wG0oy\nVGCqk+/w/Q1xucwNNZzGizeTmnWmt0vPulaapM6OEOXrMGPkpENoJAyMquzp\nrr2u7epe4KqVTJ+KLmw6uz02Aw/2LiCPECO8nQO8wdSYp4d+N+740Vxa/7+9\ndo3OqquzyFXrr0aA1/S5Ip7qeK6DYb77VMmlQglcwrRy0xD1uR1j2RnVAsRX\n6oIGuIPmxMSmahHJMxD0z1hBzL999JdIHRoaLD4sUJOvi4Wyvxe7avxxHY85\nme1fcRJqml+xs9wGILuFJFLTSxULCI/Sa/vzef+NFP5Z+f7zohoJMh7DD1Sv\nGs6pk4KbQqmA3HnkaxfjtUjFH2XBts1AtfFBwRYh1MieupdAzWQpWcir8vlJ\nV7s5\r\n=mYhT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9KXIIYupVpdLMfvm+sHZwmMTX1d/CizeEWwMsTNam9wIhAOQm4HsNWnYr+O+YEYBKMlXankhdBc6zufzJhoGDjo0R"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609860971-acc34b9c.0_1609861101586_0.7317141210958036"},"_hasShrinkwrap":false},"2.36.2-next-1609865823-1db5c4f4.0":{"name":"@xdn/core","version":"2.36.2-next-1609865823-1db5c4f4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609865823-1db5c4f4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-E9wRG4/JyrA0lAMcZxIVi4yRf2RS8VPNhCLuNco6N1cHzDbsp9iWcTj8KCos5AyiaxJkRmYR6DkfKVmC5rY5XA==","shasum":"5f4ffac9aa82fcc4110b0795428d804fcf469952","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609865823-1db5c4f4.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9JreCRA9TVsSAnZWagAAra0P/Al6ElIvV77pBTfR5xOG\nqoKul/dgJ0IuS4uFzG4DjKFoqxTMSsh52TH/lv/1ViThcLNCBX3LpvL3y4S4\n48+YNmc21HI9eyijFtmdXKr0rUIAIxbtWYCJ6lSNqWWGfuAC2tNUhqXFxrss\nM56H8xpXNXg0BQYPouKTv1EIasX1FN/zljMHtkZMb27JsRMyA2pOe886co1L\nsQsgcThMuqHc1ZrtPpS+NQFGDeUUTo0crla8oG8YbYMN9J22ynyAT8sCLGCH\nDQ8fFs1+XS0OnmRSkZpSfQDiTxTSYtnDF4nHNc+sK/gBzgo87M5f7YOVtzkA\nurIwLKkTd6OHQa3D/VVh1WFQZNH1+g7oKYXgOTBlZIJgosWKEKU9XmtJtdBz\nX1YxMqWBmi5roaktd9TIvfhItAyML17RXGtzJkO0LIYAsJiW8ob35TM1oHTQ\ngeRONpd+VphBSeEPyI0Ed48uJQJ6oSKU1Ib61leWFlN0OaWemWDuINZO/Aal\n7rtlDb6hkYuoFtqw6IMdwKavWbMj0qMzIzOH1wOin1e+UVTsQwy9BfvW+/Sj\n3g/333oqM3F0VrcjGFmbW85WwF/kiFaaY6zWmkWrjmk3f4Uy9GMXn4+9S5nq\n6TSUn96Jn5hgn1uFE54sAFRK9tPJWtSG29B3QRwrVLVKtwcrD2/MV0F+Yekh\nDJ8T\r\n=RIN7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYPGBBDoXWEs7uK/N3W54wvQznYp2FIcx6+n7pBGZ79AIgPjn/xWC3HeYWbQ258mmTZN486s4fcoEMURlSGDf4pYQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609865823-1db5c4f4.0_1609865950082_0.3029641329446411"},"_hasShrinkwrap":false},"2.36.2-next-1609871980-48c894c0.0":{"name":"@xdn/core","version":"2.36.2-next-1609871980-48c894c0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609871980-48c894c0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mKFxVBFABA5/QK7Gq/WjXUsAojVb3G5U+jI/gNRv/2NMoFGwkWCudSX/ufnamZznbM7KlMiTLxUR5THMjgtrLg==","shasum":"23c5b6bf09be1f49a153ae28d7d618ddeb53ad54","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609871980-48c894c0.0.tgz","fileCount":172,"unpackedSize":659522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9LLlCRA9TVsSAnZWagAASG4P/2eomUB2j/8jsA74C7Y+\n2b4T9ADfEobd5G+4G4Hjvy+cHL9hWFuuq7bSHbLDCNWRb62iLnROJpr/121d\nOoVYCbNJrV9e3pfYusbeKMlfp/yDRhLRQaMnKragdDOWntB0a4TIWmvfK3rx\nBmblyYWlk8mHMXiQbGshmegzwpyLVHYYJcSFU3ta5S/AveR0j6Fq/tc14Lx1\n1VJbQN5BdfMqMjZQE7FUxdTB8lMO8QHzYMDrjoM7gZD5Vv1OI0eepRY2JiQ0\nm5HLMuuzzI8vHb7KiZS1upUUAqGpi8tZIN5kTcG5YogyHeihwr/Jmg+04ywR\nf6ZOpWBd0kZBpJdjWjx+p44fO64NIVEFcz644UkxDFjRSJpvOHYCVpSMZ2Zs\nX/10YyEk3w/GQ9B9UKmC05q9QjkNE6j0f/iLD4ujrMAcgcwRt0uPgc5AGHOF\nE/NJwNB5+GcOE9BOonkkVw+rQrkWz4SgQY/7jDYQsjpjD771mb+LfpUJuBAi\nMLrOuRbXmAnJu3ISy0ZBpVml6YDRY6bU1sufPwJcf6roX2lyrXfrWscYHmxn\nRXzDAdb8pvEBIQfY4QmLRjSPt9m8RH0kI3O0iy8UYzxAQ+C444ldKVcV61EV\nPqXwGEW9J1hdhOB3013O0g+LRax96wt/Bo9iTx2P3W48kZ+GBdZxzwmJpV7a\nHx+Z\r\n=e6t5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBGEgFNLl4iagaiAht491QLI9XWR/IWZxWg3cTrvlUM1AiBZiUUHylkl4imJWne/wbY2KesMiMWqI/siTT/XdUFZ8w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609871980-48c894c0.0_1609872100857_0.569599888565786"},"_hasShrinkwrap":false},"2.36.2-next-1609872133-13d2cbae.0":{"name":"@xdn/core","version":"2.36.2-next-1609872133-13d2cbae.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609872133-13d2cbae.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-86ghu1Qq7U3Eod916k5YyeFf2uY9iO0PamcF4iWK0NYOd4MWwUvm9osgQD6lrH/jW+fhg1N+471I/I653XyO+Q==","shasum":"43455bca6389b03af440f192914228a6fdd9a92d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609872133-13d2cbae.0.tgz","fileCount":172,"unpackedSize":658930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9LOLCRA9TVsSAnZWagAAugAP/2lbAvjy7XFW+ZzI1gPF\niukyY0g5cvYxIp1WPxLQfICusPg/xivyq6KoR45qPmXIp3fgvBtSub+PyXJ/\nkdTNcCRtc8RrZ5Tc2q8mWkyzW4wwyjuCeRzyGdKC415eS/cBSWNn5UdmqkLu\n9jQKAQqo0r5rdV5D7H8coGdkj98XconjbsuN6yoxwtHANQlKMt3m3TtXDa1h\nlPbPrXBX+DPJjpAubyJYgV4EWj4l3RXN5UzlVbktgKu/I5wsqTTRnAZSkOLk\nWZwVgF94k+AKdNDsKqk4M3RjMt9qs5ZmV8IGSZu+n/tIU2loZ53p16f2BWc+\nD0f7bf7X9qtNb9RLPjqV4NHBKDr6i3isMq+bz++5a68884JLaGEg2cROOY96\n+lDr1h4vYQT04IGup6mLaaP3yU7Z2X0g6eVU2nc6p6MOwX2aNzA6/W1oEaD3\n2gY9BCTZjRrn6qDUAVFpuKv2+TI8bRoF+mQWacPMGDTqnVQYWs/jPN8KBz+n\ncWsu0uF5eeadI1eXKQDuAnnNJgD0FTNTgnuGcHC7YDXrL8CZRdGTjiaEo6R5\nagqbtGUbVlavBpxS3VYW45poshP3ubsx4kBO24KXs8MfO1u2xH2txY6FWuXu\nEVHiCLVxjDRw9I+v7gwQlVrDpNNxies7u2XqEG6pyBycq47AasJhGcReJxnk\nYlhf\r\n=Sa3m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqV92uktdUu09uLAdDUjSC48uZ54zn6XcfLdnza1kY+gIgUN0bwCHHcQYOoIzIX6aHK6vOL66qSvUvudW4qv/iqVc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609872133-13d2cbae.0_1609872267244_0.5059554747612605"},"_hasShrinkwrap":false},"2.36.2-next-1609872963-e3b05a7b.0":{"name":"@xdn/core","version":"2.36.2-next-1609872963-e3b05a7b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609872963-e3b05a7b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4lRmzROB72ugQS8hbRqKtNf1FE7YUwn4cs6c81RO+Ofyn8+EnsiX1LagZfXVvycrHNNG+XoSvVszlI0maDBiRQ==","shasum":"267d157e2e648d4d9a6b96f781a0325352ff72d5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609872963-e3b05a7b.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9LbHCRA9TVsSAnZWagAAWH4P/jhrxNIQJ1rWk5j1xx6z\ndb/NafFbHYo4pYftGrP5qeXZ3vR1GSoyIOyoze6Oz6pYNzMhPrlgOifOp/Wf\nRVItR/XQI8nibePs6XkJw899eGE8bOJv2jB1kxWu4ua8QoASx0FfytTDJaC+\n/i5CEddcfjrXWOedSZOus4D+gyJG2D0OM2bYhBBINioF3Y+DzxQydKxF9Eji\nBjNws7nj+2vhBbM5PcP6YsWRkZTGL/NrPCbHTux8OnIREA0lrwyInXEia3EC\nm+KS98UVAxwaDb/fjvFMkQ6gNODMaM2aMNcO8KsrNKBHlEfEg6zyHVyPBDU/\nfk4PF+AbqpL3LAkM99ifASi4hK4skyxcKnUKlX3r2UI9qJskpe6BnFHef41C\nry6T012QLJjxZrVHCgbiyrGQFaGua7IyvDagff8IqEzfUdpc6TDXu6Iv8OO+\n+d726xuA2Slp7uPfXmBDLEj4xGW81rrgjR6ijfwcRe7H55rct8MvLCUOu5/2\nHGifDLYbApFsjm/eDxmh5Alx7JfDSsE84OS9zPjftG3+yY23X5FcklQRBcMQ\nZHml4GbWtsMI63TbHOFWCkxws7Xfg1GK4k1PlzUDvEkPNBJqKXamjXFFha19\nWjwh5OOKnmktLGigtfl+I2W5Z7lW2MeSQkL+ybpA8Rmg/5Mfg8N9HS8wIt5H\nJU02\r\n=SkxV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEeUkP8dHRGwlLI5naPxBROCP2zYfRpuf0pYK7pc/AlDAiBXKNTVdT5SsxwxLEh3ZJq5RA6GtrE749/kyhJxFhWhBQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609872963-e3b05a7b.0_1609873094448_0.4344384064453266"},"_hasShrinkwrap":false},"2.36.2-next-1609872994-a5d5fc32.0":{"name":"@xdn/core","version":"2.36.2-next-1609872994-a5d5fc32.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609872994-a5d5fc32.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-U3eJJAiqlHHD04y4xOlaWWdRnyefr97seiV2iACBGTCdUPmIfn3ww3Tm6i3vtEqr9NVyzxwriBwm1YWJe9Ne9w==","shasum":"996c0736b1baf2d9bc88263e3bbef468b11ad778","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609872994-a5d5fc32.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9LbiCRA9TVsSAnZWagAAJgsQAInfiPrqemS01EXbrNh+\nrM1k8l4pBaenBhSHdTek0w4qEb8fdR3/6g0eqWAwLrjJ+3rCZlI87efUCUXx\nGDHIsJMnDaREO9uYXrZmD6No5K+ZIB2XmZ8ET5yGJDI8jvKk2z3dqsE6AwXf\nLtbJ20zKbkV3E+Z/hwunN8iM9tWPMxXVfeyW7VBDFW1mxlXhEK6dR1RAHlhE\nvq2Vrs8LpWeymSAbWGHWI8qsjyapfm79JL1XiqEO18WF1V6l+RHqgtu3dSL4\n6rDqebW2uFmFI13ZF2VW3bhqZ9TXle+ZwYmJAKfNSVJHYvFdsxHCGGjt4gx1\nuios44XEFLT5MyF2j+Lee1WoXY6FVqPTJJwj+Ek9VsDRvvPc48btog/wxew6\n0VUZXVI2hRIPj9oOmhaU/LmPK8axSCwu2oBSV4lZ6NXjR95YIUaa+BGP/P7u\n3f2nH1+broboemdnq9OvouwbScqYQoab27xk/CQYFKbUAcOrP52XcdFE7Tj1\nIZ2iBePtg1isFomu25XOdE435Ew3vVPUwvRocJj0dRw8DzMsRFO0pO3F4x41\ntS1ykmMU1yh36dVDGuZBHiqGunwJL5Pm8QFYvM1zw6lUD0oAHA9hQrKbY2mm\nInzKn/3ZNEq1XeW4NqfPIx2kXkfPJkifqBDRX4ucBU10xxHYmIIH759wq3eA\nAy6x\r\n=/ow3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHGi57hsDSCOnNR8Ay6NahizQrf48uCIpzjPygPO+QaAIhALvH6vXdoJQwDX9mjD7rhITBXo7RSfm0zjwOgIl33Upn"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609872994-a5d5fc32.0_1609873121603_0.004039607224857633"},"_hasShrinkwrap":false},"2.36.2-next-1609873075-0d49a037.0":{"name":"@xdn/core","version":"2.36.2-next-1609873075-0d49a037.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609873075-0d49a037.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-2L9gh2Y7FCXXYz5r5rSsr42b8mcuFXTm+ky/sJE8N9up5QJ2XBNa09CbyMGVMqPCbg2sOnLfoqlHK6QnPJ/YxQ==","shasum":"7f16fd0aeb878568dea51ffa485180876fd44515","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609873075-0d49a037.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9LcoCRA9TVsSAnZWagAAp+wP/1V2q2ew1taU8STmFM4u\n5vguicfrzy7G6o2jYqIxYGDSO55RI18SlMszGSM16RRdpm55pigEwiS/5L3G\nXkEIH2/e86DqxzSSD2JPcuwrJ/WYfeTU456vn7CJsWdVpudGv2eaflWTGH2I\nEd3Xa+AQujzrczcxBcTvy0Ur256P6ZGZ2Qu0ZgcOZvddrk3bYAachqV9Rng2\nOLB3Xu01RzKyG2kOH05zHtuUQiykCTjQrZjNXVXycC0yAXKl38DyzEp7MlKk\n33p5vKQUn5nmnHIK1ZZY/C3NcoiEpXKPJW9JW6iZr35LIv+JozexWBZb/4Ul\nZNefYKnwh20E6LYKnzTUjo59pwnHb7cN7jJP4tsM9Ofu12ny5wLKEGPx3Y4K\nPabzlQh8zg3eYRGQ18/SvYkfirhy0bAh7pW3HRVtTKc5s7WHPLBzw59baK9Q\nih/fp+DoDgrLEts0yZFV2kdrAEamSpEtzlQBZRgP8iJLw65TpsGl1CrqWobC\n7VEElf5NMMeAWeQ7R6cqBgMIHU8EfD2w9QGV9wckqMHklJlCA4Uq1Ndm9Nxv\nH5k8+NIsPmHK7g8AVrkeXEv10I+BTDVRomzD77avHtEs3FWKfxRbvs6KZLmW\nVJKSMHeiuRc2BPeZAtSb9uYZW4kJ0kYh7BUe3HYKpzH1YFjGg7CFGSde5EAf\nMxDX\r\n=EEGq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFqu9nx9TDrTBN5wvgn9tFWbZfIFmd2CgdelnxmIu5pQIhAPcBU61bSMFgh6aeYn6ugLQB6AxPw7y4QvxmSiFtiqoo"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609873075-0d49a037.0_1609873191551_0.010248337909920302"},"_hasShrinkwrap":false},"2.36.2-next-1609873233-0915300b.0":{"name":"@xdn/core","version":"2.36.2-next-1609873233-0915300b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609873233-0915300b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TvyAKM712thjAIwHiXUR4Wz/aKYSRVal6G3ZtXd8FA28lKI+bhE0CwdkfAa1I2TfZ6qyy2gbe4hrpJTR3/9EOA==","shasum":"551f304b5784de3b3eb0167c0a9469e035333475","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609873233-0915300b.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9LfECRA9TVsSAnZWagAAjCEQAIw0XOxGlbjBXWsaNnfP\nA958tMmPPehIMKjTh0v34pnp/XNpIq65pK83OCDs5DyDIH3i7G2i+5KY4i+A\nLin9Bd1ZZwXQO2u0Gvr66jbi9mV6W3Low8wE8/hl45xzEmvsM0dHrjgfhWQw\nDQKC5do6tu6zUgUKLGRELJ0MSCVuxwM2x1l1vHZPoJF7rSYGF1v/ilmzqAn7\nL6glem2XPfYgIRrr3swqetYEwPpPZi7dokk3ozx2nDO24XO8GB9NwftRwWAH\nqS5FHspQHq9EXkZ16yzdqeg6393hqn4oRaQJUJlXF9T4HVFkcXu5YXgtc0t0\nB3L84llw661EkjEzcQwrXGVDIJfmNHe+cpWUi/XBfUBt9wbHhBQxme1qMbfT\nQQTclPKHT7AFCaWhqpWWss/f0/S1r25KJfyEyKeYy4TeEDeTL3W6+5pwmj5Y\n9emqyQ1DdZkV0wpk3Z2qGCc5QPT2+0ws44E3skVyELeebUncgnJPRFEtT0Iv\nzBHiMw03M7ZuHEcmFWm88MI9Y3oxIUQKntpDnkMec23D3vT05Sf7kVZ9dNbq\nekapPFuw/6YQGyptWPico/uGkh5JO8qB9UQaSkpfnVDO+W8GQgSD/+UAev05\nd8LxyfuV3bchcBbjdaWW86DvUWqmXNR/lmAnMLAiAa8Pnv8XoR97ItZ1H5HE\n4oP/\r\n=lzRr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnIvLTZuEcieZKV0gJoxvcqz02g5aJ2wYfHjnNTaoTSQIgbGoPFh23jjKKyLQhxPIc7ynVjnfQuYHcOwBpyP9yduA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609873233-0915300b.0_1609873348111_0.09516723519533965"},"_hasShrinkwrap":false},"2.36.2-next-1609873237-5d6cf7b4.0":{"name":"@xdn/core","version":"2.36.2-next-1609873237-5d6cf7b4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609873237-5d6cf7b4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-iGKk0jXFe/MdsiFK/Orfp9ty1PZhZZLY6ZsP0EPYWNSsRqH7z+vjUqNsQUJzYkXS43OV6gMklXMwnLrXJem0CA==","shasum":"7c18886ac3a9cfcb1885d7f0dd858e2f7a8240f2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609873237-5d6cf7b4.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9LfhCRA9TVsSAnZWagAAwHQP/iG++I0dQeUi/nKbnCKN\nRU6GtjAOmYDR7pxTt/VHmW5cNvzKlimfgrC4S6/dszgOZyAN2HHC+NwkxzOL\nEqSvslJA6GSZ24lXE/jEbUHKXwZGpkmGfks3fK/LocfJ2rVLrTiFUx9RVa42\n2D43o2QbhCcd9E2yqLqL/59VzpcmEcdchK++RdCXHIfHSrE4daTRi7I+zUO8\npt0/seYWBwb6Mi/ZTvsPLRwc06iSkmfhBJq2jzaU7CDzB/fuUHfTNNV6P4zR\ng4qMWA1rQ/yEdnOvYPPKA2ZjunTaB/clGnoeR5pH5v2gg+c7/AX7ryZA1Rsy\nI7WXdMU0DT4r89QhC/yHDkB7rDZ6A1U70qX434BCYi4+pkp5rvz3kTPkElBp\nJ9hkluwYBFMVDZ2mucltuH4ky73ldrKCeqI2AVAMZE2M6x93kP2Bu1dGJTzB\nyrp3jh+dl94vxISJ20Q2RQlyMI2LmoflRM1d/J2ad/S9K9b3BvNIG8FpROSc\n2sawLzVpECHRbMjTSWDWiE2LewSVQJOVd5XjuLn/MW6I34hb66yxwrYrk3uC\npIuKTqp1/VMNVpuM/5Kkt+/NPVUbgzzGmQnfoBYig8ggJxN33pB7kJxGEoFu\nsfb4Dti1sXHD7o3wR+WCHazae6HFjw8XSx+Wuap5/S7AotY3Cxtq6l9tgVdp\n7VT4\r\n=IWmE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDNUKsg8hSCRVzFMvFj/V2IKY2A9RWuynF6LwfgHw7XGAiEAyuQF5VSCa42eI27TtzlTQA3f/t9bee62X9OqaLEIVZ0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609873237-5d6cf7b4.0_1609873376471_0.543520919382108"},"_hasShrinkwrap":false},"2.36.2-next-1609879788-e1f2cfc4.0":{"name":"@xdn/core","version":"2.36.2-next-1609879788-e1f2cfc4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.36.2-next-1609879788-e1f2cfc4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YdkBjGEyP857z5BLnNyqqgUsXYfoZtYqz6wZiLhdzpxzchAtNGjd1rv/UKbxNNrbFP4+jeKZhkhwmUisAZtCHw==","shasum":"62cda8253d46b538c89ddc88f7e5a7254616bf62","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.36.2-next-1609879788-e1f2cfc4.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9NF+CRA9TVsSAnZWagAA054P/R5ljpOSGYcf25WRvNxd\n5FlYdS7ateEf6LbHN34isiNTWdelSQ8GylpVb/GaAM9CYp7PWJ8GqctCrOJy\nelke5G3QquA7LAxAUyA0Ji0LT39VlB3DDaY13v9nFUMsDUyPG7AxhwwPRRjJ\nZVPLo6qEppFnTJzEacXXGRyvZEOwKgPwdatD2rMquggUJT63RGbdrN4OH9on\nyOrkc9t9z0ymiHNl/ncKX7JZNoNEYuaRgy7JfyvWE0ILe8vNEaJxJSh6usNA\nxB3hzj7EzjHh+xDZvUOSBFEZ8bYLSkTWBexh7D1xL1bKO6vRP5nHr1gm3akx\nYhYkLYb/JmgaFvGHp4wOiE7nRXypjeUcQEX4bRdbZVhzuJADQ8gcvCigner+\nvSkP1uG7DPCKS6004y7BR3O+cQErlPu8VXXdROQn1zyBCSC2N5A3wA3/DQES\njdOtkNHUztz4mRtTxI2739q97XlEHnqSOlVmSBysuXdIaUonooOQJFNaTjoJ\njQLEiXItPmS/mUuzSx2RR6G7BAjtgb3m5hIHWEaAfaFC61/L2aiiznf662i9\n4EzoUq5NAst7bx0uhKLMTGBsEV3VOKXMJ4qXbbL8fxqGWCw6LKf3NzN2Ax3w\nHK9jb2td83W+nIlz7WrLLpd4549sfc6Zl6hapdSUEMMXHe+zPrmxZ79J4v8M\n8FK+\r\n=3X/n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8YzPevEIiQUT7S1T2ka7FXYSZtT2kKhG3xmP5awQczQIgfExy6FvCAOtdjC6RuynF1UxsL3dneLTPe1kc4ETOaEk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.36.2-next-1609879788-e1f2cfc4.0_1609879934109_0.6445990911694734"},"_hasShrinkwrap":false},"2.37.1-next-1609923256-54216903.0":{"name":"@xdn/core","version":"2.37.1-next-1609923256-54216903.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.1-next-1609923256-54216903.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9I1ZeY+YQB8wGCawdM1CEiS+G4lO8IBrGAy2dJ0fh+xjuvz38s39Cd70zux5RZCrqhrfdvYXhfX/SAX7N/0KSA==","shasum":"8b7a0317fe3a0e1a9beba0d9fd4b4187c9577e74","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.1-next-1609923256-54216903.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9Xs6CRA9TVsSAnZWagAAPCIQAIbfe+RHaSS8Aj1hskRV\nsId+4BI5ZIdFRyCmUW8OyNj6aSTH8XtG/LHOl+7UEVg/Id135WpGlg+lDcFT\nFj+95ZMPW+hdV4ONuIVuu2IO5rjkLVQOgg6CAqhHmr75svTu6xs106/ItXe1\nMRWaVDFrXDECocSlD5UzRB6EyrrroJjBVBCjozJd6O5gv7XkTLBQFRQvVC4d\n33qW8cmJ7p1+fSh/zlMc0xdORhT4ZQPXhlha4ag4I0DCU7PHeToK8xGYR/RF\nGZn9iP/2sn/uQpJtRMjzjQRnN8gjjQSiWvP4VVPI1UUyZgdw7nzTcje3MRd+\nhpQ5h8dELB2NzMZofkgjEqT7LNZfLN7HPY/MANx17UbQKPYKafDeUJaq04fk\nY654j9ftF+g+SfBYDAPsQt9/1aYiYs3iiKLOi3K3gWrtKXUdPY+IRpCExK4K\nKO7kZxamL0xu1JfHWhQ6Ew73QyH4KBQaIHCS1PU6HIyrq1Iwhoet6PhhXfMd\nJlH1kMi+p0Y+H/Mv53RrsaJ+CfyTHRzgpW7KLWfZOg4x8MO0IH+49S2vPF4B\nd7Tb71kSh+EMIAMBifwwzbZnVPVh5Z0HU1EhVbfmsQ8kla34uIoY/bkCTT8I\nnNiACP+Jg2Mn+cBjUAakPzANnUSIz67mhC1K+mCF1XnZxTJa4wB6gs/RUiKU\nINCg\r\n=TfXS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDs5Uy3WR3gzy5R76sQbnL2WjNnoMFTzum0C8k+dZndpAiAgE5r5UYGXAQjWIeMyolJXWaVLOD36Yo6Hg1jO2iRnOQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.1-next-1609923256-54216903.0_1609923386204_0.6393765775612976"},"_hasShrinkwrap":false},"2.37.0":{"name":"@xdn/core","version":"2.37.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-C6s1Ifz5qKdExb2qOhiRVc7mTujoGHbpA7VapziBqc4J1JCAohHy3CktOYFGbHUnR7p90ZuVuodOAqnvrd0BTg==","shasum":"77fd26ad7c9a72d79a2817265e834880258d61b5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.0.tgz","fileCount":172,"unpackedSize":660606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9XwLCRA9TVsSAnZWagAARU8P/iC8/JX0UwwWoAjgMnOB\n5B2V/E9YOg14f1c9mbN4CzkJ77OwgoWPikhkh+UdKz5Ouf7sEz3V2I1TAdFg\nwarKaPBohGc/LlRu2zItEIn+wfS6DBDAg9g+1SC9paQgKcJLanWwiymcoA6Y\n8xwUVcY/wWyodHrZgNzaq+6UVnL6NesOeR5ZsdMA3Dglez9rl5JZR+1GslJz\nbPsksl4hhDa3GfsQwfbRn79N7WXuLjGR0b3Kriu3WUZJeGG/BhVT6lvMXSJ6\n1wiW42uMzlB5Q2wzQ2xoG19crKYFys4FcHPbreiow3qwgYlGFdElKJXkEZFX\nBYm8QqFgJ3Cq0xt4eewdYjp+axJOHkcJMei3sCyHh8HUkX3jERwZ5GszdtOX\nYrH9WkCHmHzWn64bc4EOxxNK/+PlRnoOB2Y3WDg9JE5KFA2TPv6zUhJ9MErI\nYPYEMWwRUZEuZNM+i3+WiwufBbLVtypaiie9/ToHxJ9QlleFe2Zp4Wt/zPEA\n8G2y1/WV/+0v1MTGuEHpr/1mFK5+LBayib9mS88MOl2HC37QkTQ/5h5a8Rn+\nGN6jb8RWGYSZIiKTSMQogdAJ5O42WPN8rX9Zk4aEb2B6SBvAFnNUF/Fo7NMI\ndMDC2kjz7sDIfPSNQXQln30omU1CReilwHcoiONEA1yHdEYUgTXfZ1+nIs44\npNGz\r\n=tRGS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClVcC74IoQglV18Hfxzn5Ydu7lyR/09BYOQPB4wwl2TwIgF/eCcTyye3X+NAgr3MTmgNbj77xT3m46zUepp3eAk4I="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.0_1609923595026_0.34849906672309405"},"_hasShrinkwrap":false},"2.37.1-next-1609928096-8b395e64.0":{"name":"@xdn/core","version":"2.37.1-next-1609928096-8b395e64.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.1-next-1609928096-8b395e64.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KL9CszSe97XE+GCE8Ydw2U422YDcn0ynP7yj9drgDBSYXvjWcJDCgB0ig+uApP1qcHGDPcjRyMQ4jQ3GozDacg==","shasum":"019a98a6351abbbcb3f52226d59b7a5821110c1c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.1-next-1609928096-8b395e64.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9Y4qCRA9TVsSAnZWagAA2ggP/0qJQSXdxERrBJ9rOHlZ\nXAxdzTSLnPhWqB2RnEgbjw2KImgm2DZpMmKCgtSizcfBqaMVZN1riQj+ZBDL\nTmU5xLs8O2U47WMKuB2IYwjQfZPY9Ru43mt0aXP+xrKti/81usIQGG2Qj4G5\n30aekUnLrVTCE8uG2wp2Q6nATiaU5HC8kkCLqgwNBueWRGn0MNFV5i3RAd2X\nLuk0U/au1UPEd3IlK9+Pa4o02duHqpbi7zcU/Chtgzq21veWof4o8uy9cP1o\n4HQyuEikUsVo4YmYluSggnquThtPEjKshFzhEJiaKWDoCGO8lYp1hRg6yVvG\nFly/c5VB13ex0gfqn3mPN8uIkpaPn6yk/qTzsDZxzDNcGqi93Hu04Psyl/Ll\neHw2ZHRn107teVY6gatXTHMk+tw4GsKBG4+Y570t7zHTTyzHrZKHYQLeofng\nGg2ae73NP6Cd3ux7ttZY6gyoHmKFGFOIyb5dxnWjYlClkYRwk2DsoTAZ/4R0\nkiAckeiFGVQEGkn8h4fl4Jp51gkXq83YC6gQdSHo8OJRxYLScX8TGuefWXXi\nkogrhbXCeI3s+05bQDryXKyHtxFAK2DQLZuiZVENJUdm0e3gBVttHtHhj+hD\n/jYXz+VRGQpiI+fOPAVnOgidOAH727MpCeU8Oae9auwkoeBbGLBQk4DwFR+8\n+KEp\r\n=M0z6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9+0I6DKtdWfxiINpJQH8AQFNvWkjqbiu3vnwAkIcsKwIgFe1ko/ngQJDjkipDRFC7+bnz809+BQVb6JJX1RHXTuE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.1-next-1609928096-8b395e64.0_1609928233564_0.46584400559617434"},"_hasShrinkwrap":false},"2.37.1-next-1609928261-a5d5aa64.0":{"name":"@xdn/core","version":"2.37.1-next-1609928261-a5d5aa64.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.1-next-1609928261-a5d5aa64.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KJvpu9NaborAMoKXgPelS++IsZBRl/pvSbXiLFW8IsHh39ZDTl6dQZ1v/W8O8DvP1pTdKOmNWrKFssUWpkAG+A==","shasum":"90499306a2ebda2acc8a5c435d8946add7428c84","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.1-next-1609928261-a5d5aa64.0.tgz","fileCount":172,"unpackedSize":660660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9Y7FCRA9TVsSAnZWagAA5yIP/jyRTIu9LdjylO6KDDEk\nl45xRQCtepdCWaoddkqpvhrwmiwEZY+wKlEPQEachXFQc+Kz4sooiiS085or\nY614hbbXjnayTNPgjpC0r7A/21rpsn+0iRUFOXlyyM8AZtXnuy1r1ahVcV0F\n0g3jdvEb4gwTN2hn2u3nAikyiirYsITYJUx0MKcxVpyenlN5EAnt+mAXxil3\n6oz7BCmjrU4kbOZwAMzOD/HDeCJ+REl02Ytc3YVCM+QCSek/OZswpSx7gPFG\nt5y3QhZLwMPJ7FQ4Seql9EHfqnkSmr4zuaCerXQqVJDcGDKJkSIbjiOhpfO7\nqm6eNRn1QuQvwUZhlEP/ZxFnZEqAU4px4XnEyyOO3IQUn9YWlIx92F/+htC5\nTh5oSBSPo7t9l2FbCUz6V1JXN69fSXKEfPvUpbBBhUlQGy72M9VNvroj+puh\nGkIrI86cwbPLJbABgCINocnWjooh+RJ8zcSS9d+5eVjWta3mvK3RtlDIssCJ\nm/DolSw33plnYeg3+7T5zYeLGZVpVZ8caGduzYJe1sexVC5CBuivd7zm9ZNI\nY4RsuRAA7avagQt7/fivs89kVkJH2+aY57NbtqWuBWC3vccBCq6jjjPe58xJ\nGYnl+rLyQxhjPkjOnng0w+u4fqP6sS++ke2eOTeB07YGecwqzt3E7kLLuVUm\n8rmp\r\n=4AHI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEEYLAYlVEQ+vb6ehtkJGyAPflaqe1/jLCGO97pBVC4mAiEAwjlbrwOPnxFrAjKr2x5uXu+MYy4/ujVUzTdVH1jsxPE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.1-next-1609928261-a5d5aa64.0_1609928389004_0.09661323075703399"},"_hasShrinkwrap":false},"2.37.1-next-1609929467-1a33f113.0":{"name":"@xdn/core","version":"2.37.1-next-1609929467-1a33f113.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.1-next-1609929467-1a33f113.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-AVjcZvk3M0QyJqjUFyJxXYhCbme5LpTRsA4kno45n4U6gLT5/7HTt1QS9Vu1qFtkXWhEy02BOMDDV9Z44v6oWw==","shasum":"c2bbfed872c1f1ca0e9e875fef2bb59f663814bd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.1-next-1609929467-1a33f113.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9ZONCRA9TVsSAnZWagAAYqsP+QAuTB35H7Vgm9Y0cv3R\nn2yC6iItrfY+VGriLdoz2GaUjn5I4/yEQ81HIDdFXChHHFEnuxtasfZ6K++h\nNg8rT85ozR7uBIFvDSGroqk1s1vzok1Grw0aKkHTdNnRtv6Vbi6Z4eisGst2\n9XeCq+qSmNqBoNwMwzMqpJDb+1pj0ejJXhDDpAIMnDJdPoDXkd9ukVu7a/Tu\nhWLG6Bl/P3VEq7fBITnwk0B7t2iUkaFyg6cQbezX8wO/OTqStVXqfG1C2lkY\nydgQqMXMkKXsE9Kj2X2gszwqwsujJzI4Le86obZdRO6qtnm3626k/2wK2a0F\n48h3jURZxz5+cowL21cndiUjRiMNDwm9/sILOxaT5BxzgSmR1CFjE01gLDdu\nLMqrYYC5qXNm3ggQ5n62LZ7fe7XH9bTUn247bfcuKdc/r7LrjBFMM2wz9dFu\nzsKYZvSRWMKUIc/SFHKrBCWRoJ17VCn+/O8OBF0o8rh/xbVF+U4cZJ/oAR0F\nWnJlBLjWe039ckfRCP/6mG43ZmVYeJLDC+2ved6an0w56RBgQYh00tmdvoWY\nUAPVCw1k/ioacoXkG+FLOuCRoaAlzQaf7mSkumntDdifnqkt7KObRweo8SlE\nWVB0HOT5TcLJBoCMD1cU1wApC7hWBO+Yx88pE+SicF1cqKQrlq4ZcJQBUizH\n1IL3\r\n=ciMk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+UUcsSIINok+Fjh4IiNYajULYP1nJHeR8ho19PLx92AiAGFHl8SU0aIB+QpCsjDJ3grCRSEIrwTCrutId6voPcfg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.1-next-1609929467-1a33f113.0_1609929612644_0.3650689478943334"},"_hasShrinkwrap":false},"2.37.1-next-1609931011-18cb286e.0":{"name":"@xdn/core","version":"2.37.1-next-1609931011-18cb286e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.1-next-1609931011-18cb286e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+Y6bZ04gUuPBIftgW+wmIDk0nk7mOngOI87yu7BA57U5EUu8fVJ2N7rswkLBkMImFmmPeczjN8DAvYndE72f9w==","shasum":"1fdcba372b68b07c184b8e6f2411da4fd162e5a1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.1-next-1609931011-18cb286e.0.tgz","fileCount":172,"unpackedSize":662535,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9ZmNCRA9TVsSAnZWagAAfTgP/0cZ85A1cOdnXfgusfCN\nfxy1ulj/VJ9pPvSJGgb4IVsBWJXJVKeEjL1SqdArDgPvoKjKa3Y5M90Fu5vt\nkKq89LrA11a+eFiTjj+GQAgAv88d9V05DF7fdtc02mJhSNrPxkQOV/QjtCNN\nEzVZUglK0DaL8B59JQDlS1A9ZVW2poM+KbwkhXYkLJ6RM7Y8pKXLNdLnYqEd\n1B+lUVBjkHDcjpYU6XeqOMTPScJz6IiAwaz7qtR6SxCEwFtbfDE7JjQ3rTEt\naJj4YZwTpENN23HHEofUaLIAmoMhuzBnW1GLVV1DipgeFTEbHok6d17scOSJ\naEKZZZWlkyf32F6KS4MqfDSfMU2ULSJvBNLs9HxJ35/cKcGTHeayh60G9Zp9\nF1hCWFI5lnt+FJfblOdN25wKn/CfeGnrXeq/ov7ThLrMxw+uiB6DiazU3g8u\noVIC8h7aCEDSqy706ij7UUw/+KQM1/ZiKl2Gi3qCSXh3hvnO3qmvPCyNbKEk\noHxIyLtpdRtxK1TDLCpvUnWaT8ZXXS95rTLXzZmqgjj3yTR3OPQg4TL39B7E\nIatIwNntQ7TYkvzCDwk1+1ivfLYdABnq6le8axskLx/3WOBSITb1dkiy0hrP\nX5OAvH2Vk0xxTuFuLmQ2YUGurn152Gc5zwmKLIEo8wSMMeDOqj1ruYRX77vx\nVJue\r\n=C0oM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGAn6OJoIEHQvk+B6O1P6saww6luP9fV4DhoI9rz8LBAIgWtlMHrALRs6YfyjpQA0bCnyUPnsYKhOyriuVM+8/v3Y="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.1-next-1609931011-18cb286e.0_1609931148843_0.2023694512199159"},"_hasShrinkwrap":false},"2.37.1-next-1609933315-09e01ee7.0":{"name":"@xdn/core","version":"2.37.1-next-1609933315-09e01ee7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.1-next-1609933315-09e01ee7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-aQdTbLwpN0+q5nlUNppfN10y4r/2XPZCmhEihA/nLkP/VVZhj2j5aJ+NnLJqD9OsghHeIWOq/e/pPn48mOq0CA==","shasum":"1867752d67392a9fe293836c6c8cbe24e9fa8f0e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.1-next-1609933315-09e01ee7.0.tgz","fileCount":172,"unpackedSize":662206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9aJyCRA9TVsSAnZWagAAuCIP/jKQcwb6eNZXSbIUCSpX\nbg21pjHomdV/DJtPjtbIj9mnAdVIb3czP8Hm5Fgwnrl8MIkAObaPdYO+4WET\n/S5OA/v3kLm1nIfb855Rx+5JWY0a3EEc4tPIigu3qujl8787B9ZfoH4xw7Dn\nN1aMz3UObCyR7oicjReq2Yknr3SsWSmqhSSx/ZNdKUs2KO7yfxuheHqN4OyD\nOTzGiujQtZ5HHUkm9v5kcXJmbCF6FXYLkGZsd8VFFmkXjYAnWZn0evUzM9Qj\n+PCXSkmVp/2agx83joZeknMS8QOTJPsWI+weeICwIr7BIBpFaqySOqNOOUyO\njXf5g0wSZQCk5aCEm0SHWn9JW3mFon7JB4dOAEcAK4AnlhXQDXZjdv1YNfXM\nvjaJ0yU+ji6R38ovptiXnviIBIFOv2OwxFZxpc6KVUzB9Ohhv5YeNokguGtA\nSRGF5klPVM1b2oeyorKtkfSILQVV4LjGR61Yv526lGw4HzqoNnCAGKwsmYww\nVwgtqgOtZeIJ9IWVEBCJkhVivLLzwwvgQSPyztSk/NdWKtigAd1YMzruplsB\nZFOqWySshkcfYPlZcH0yldA/nAXv8OFMjeOHHarN9E97Mcke6BZioh0ESSea\nr4eDv/t3MhU3T8yFtUnHLik87FnLBTuLZNjTvWqlbhouinWiXH3g6ebswM69\nevrJ\r\n=HUJu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEk5Xa9id1Z6tPVD436NEn2brWclesTgqb8BrXalCKFcAiEA062TYhdvOP7/MWP9lxLyBI7+vnyPprtPd7eV4Pd8U/k="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.1-next-1609933315-09e01ee7.0_1609933425798_0.7580848108149345"},"_hasShrinkwrap":false},"2.37.1-next-1609933978-932ebc06.0":{"name":"@xdn/core","version":"2.37.1-next-1609933978-932ebc06.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.1-next-1609933978-932ebc06.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-onnRdcKWl0U046Gqs4JJypbroBrhEHb/rqDTSiU5RgKaUqMJhQVgOSLx548eY52gPZHpBcNE0qFsGC2zDPDDNQ==","shasum":"595410c8ebecfc78b2c10879134b86846fb23d6d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.1-next-1609933978-932ebc06.0.tgz","fileCount":172,"unpackedSize":662206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9aUhCRA9TVsSAnZWagAAppsP/2UwNHtZNp+G+3CHAK1Y\nNdP7ei3PXTVSJEJfuaR46gc1hYmmjWc+bFrLiPk9XLtsUgVJ0FRDjLTNN4fk\nMvtZXG5qHHerMzvNm/IU3ds4hdKLPQw8gz3wZ4pgvpMe74+uQr0OHcMDyFSn\nntw8lLnnkMeI2RJqglLeZWleeHZ8MQuLajgCgUbllI5QQqGAw93sMX7kHvGm\nXmAguPIM9omx59wVP+2T01IzMavUjf+CwGQfxEBFBrpT5/aXVg8k3Orw4iUl\niDw+BbeM3yCQsrt/E0gE8nuGcVUdK868ndr/jWZIeOzUphQO78wNFk2PUERU\nrA/GojDUHD4XtzwXzgFpfzhmBfBZ+MIR1yZuVKL6HLbuzfD4z5Z12V7GwI+U\nhC07XqVGJneROf3qvfJK8O2bLaqeZY+AnaOYZoUGBE447VcbeE/gWSEA9PxG\nCsrdJn1RqBg2broyMuNycidvmDUJZYKi39HUXxZ6AHc5UvysXhzNRAN8t0Kl\nS/tOANZAUPYiWXUAtIW8hr1jBIzt2HsBUdeMdbHeelgW6+kyx5M3J0439tYO\nPwo+GxrG3Lk+KwITURF/mpuE6DkRb/znR652MrHO1yph1qo1/q+iwZkGSwVE\n/50AvzPJeZ2aB1zFSI2u06YE592XeQ7VMYATF+vxvCkwAdcKKFt+pGMh5n/T\nY3aL\r\n=oBGE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA7zrekpUnBhTYC0bBJfkOjFmYGKQWWzEUfn/z/xL0i3AiB2Os95/oIzAu8s+qugXyj1QpOhHgnlhDZZ6bYEfi457Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.1-next-1609933978-932ebc06.0_1609934112616_0.2032998215525259"},"_hasShrinkwrap":false},"2.37.1-next-1609936179-d65f6b9f.0":{"name":"@xdn/core","version":"2.37.1-next-1609936179-d65f6b9f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.1-next-1609936179-d65f6b9f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LMWUFQCqRbogepu0VT4O+z+J6KzXYW5cHBJfizKHwRH/mHzxr7CdbsKjr3qjJfQ7ub6sa1C58sLEAauVqGDB2g==","shasum":"d15de9ec13fc0d41d8effc1a18678a6957bef451","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.1-next-1609936179-d65f6b9f.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9a2vCRA9TVsSAnZWagAAn3wP/0XZREM1fNkURaTI29x5\nBuPK8cKoiLCRX+Bn9Ds7cI9b/mZlq/C7un1L0MZPjLu+2qOTyi8E+5wEan3Y\n3DXwJhi6bgrqlIVvGgCBcMiqG/l2Eb+A5A9xkTVOUz9WPY9KVENzD3RdInKO\nAUpl56dpAffXxv4pQEdDhC36+yk5eDRRkvzYkloUNullHqzUC+UQ+LdQeF+m\nqj+96CEjsiD6ftFbOvTTjE38855c0ct6UX871emilnZeNOO9X78wtJ5zwzAD\nnd/nQwoDeXQBWW3Ztnb8T0w3rzL/4tAcNZEkqL2uKkWUWW3Dx9iwQKaEnq7s\ncSSU8UNf03mU3TUYXiEFsi+vxzXGZY2zphIqQoIDTq0/I1QahzHmpakf6t3e\nUpRrEwWoSnuHF6EKPBYBuTJdojsDystMhSKO6mM6eacErF2dV+yICAkDQ3hQ\nOWPTFWBv5LHwi30m84arP9A1G+DvB36qa67vH2sO7hOhFDoTpF9hfmTLkvjx\nNnqBFAmlAWNInHxdsgj2JdeAG3VxEivvmBzeBox0gnz+CRy9idAg2JeGjRM1\n8vjg+9jkYxjNNOtJ2aq+16S0KD02d2VwwZChHnul8CkMdf++U0F0lZl3YCNI\nZjKcCvld+Pz02FZYCrtRWeZZkDKv04TNVVyCuEPNIqff/jMiB38ypuSIivAH\nZRIr\r\n=Pr7k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtgT/N3b4Vh+BijJ+TMTYVarJk7fbaMa4LBQYMgk8u7QIhAKqH7DjmU2ne2COyZNgXV8hjb4fgJ5bW/tAKdqk64Dni"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.1-next-1609936179-d65f6b9f.0_1609936302555_0.5371132373945255"},"_hasShrinkwrap":false},"2.37.2-next-1609936396-59417961.0":{"name":"@xdn/core","version":"2.37.2-next-1609936396-59417961.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609936396-59417961.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nApo2zh+bGwGzaOzdoaT7p9zJybomLmVCvbJAitts8s+vndEexZzCk6nskOCDzWFoivS2OaGUfvGm1rUC17V0g==","shasum":"afd19a71e35cca1115f4bdf4d6446b1ff499680b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609936396-59417961.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9a6LCRA9TVsSAnZWagAAo2oP/1KZK9B20cL/WO7SFeA1\nH0F/A9Kypcb6hLcsZoKAioIqHorLx6pDT885wy0aDZVRnzZ/JlTPyRc49y5U\nVIJeA1mFEI+Rsz7u9x47jT3f5fn78bKJ3IQmZR60rQ1hiwy50gUdRGyKqZw5\nv9O1badGci4QJaiqlF2MGG65yY3iIzF2UvUzUIof1sMcmnjqgOoP4d02Lx+e\nGdDS0QBHXlmpu4RgGLlFQIPv+QterTWChgLv6aCJOptSMjIeekd74qku622l\niZz3tkyf8IVt5H1jFdWk5xaQzT3mtyhCu5To7q9h86jvhZJZFHB0rcIoHfn+\nQg2t4u9ihaU8eIqR7cR82B9f2SH5rdHRORddvFQUTzbc+e/TiXXUvNaixf14\nyJ96YoBPJvGsIs9v5kqWzH4pSQ/qmtzWktxv8Xj6cY3NkCYtX9X19QTgXgsk\naYhFDfxZzk+ga1M9V0X6a12tvyopt6LPlyRk9I9A00Qw8up17rxlGchhsKHG\njdu3PlI82G1iBo+tvEGTXwe+0JVcRw7IkpPVRa/L7Spb4MdAYWhjka3gmDUl\nFmuokfmptqH4T2lJZOUmN7J9A3y+fcQ8Cyz9D13SQFuBxIbdrcSwCY8n7qGM\nMJnmJlAfCyEL0Ue3KSkAEm5awp5ku+zRfdZIVQHSJBH6t1m19mSCRhjxYgJS\nMAX6\r\n=JSM+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICVZyNhQHMKZeVP3MfcclRbqQn6FWiQrG6rMLvxW2sQuAiB/N0R4XP5Kqd2BG+p2sbFI5ZdlYKacWXa3pGJ/anRhrA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609936396-59417961.0_1609936523291_0.35204976153524803"},"_hasShrinkwrap":false},"2.37.1":{"name":"@xdn/core","version":"2.37.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.1","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-yxhBfpM97z7Kiik5gNzrePhEOyXYM6WBFOubp+w4VqfrblGcVKdIPa3BZ1Gsv4buzAYsU9+9b/VQOXHeEkNrYg==","shasum":"dfc187552800d917b06132d65d7c73e2d41248df","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.1.tgz","fileCount":172,"unpackedSize":661650,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9bktCRA9TVsSAnZWagAAro0QAKLAAV4Xl2VdGkSGKiaZ\nA4gwarp3dyHIYBM5jDisp+8SDhzqLCF1OcF14+IXq0omrlOeJCjUdQdX0FlD\nKMfdK2wQWfa/3iXBTQxfZXj/AvXCCw24LSF8jYKO0E3eAgS3j2m+vmLtpmqR\ntYjOAeDpS+BPgCBzkPMUnvZgy4o1qgai4AY18/lrx40yh/Iiy1V53tJVJx3f\naNkHkkdpjYceOsuDnz9Mv1A84zjdUs4IBI5W91I4GQj+VdRMUwCm7bLBHK5p\noxRGe7l2lFgCRweRmkWB9rOUR5b27YhahFemR9TjTkAr0U85VMsS2VsO7ELc\nkq+VjtHIeulMiiQKpC8RM8VIxFbyo1rbH4xfOP5sz06ZeBxveY9sAO3fFe7O\nbfhscXWTq81KhL7J7YmxSBuPvAXt/gCE7+fkYv2SnOEy1uUWHty7Zkbd8vvI\n6av8WRWoUnuF8EHJThMk7u7ErNOHQgV3l8gKpADJxcTe0iNbhphpvjy8SmGl\nrTTfQbWxBxNneg0cqQHY8OWQ76YckqG0nuqU7FTOKFgfTRrbjKnl/Z8jDgL7\nxyFQHSRAuCzMiu32ksWQLGw3wK1jbS56xHeV2E50K0u12XNAqyD2zPuVsxly\n0w3vg4OgZtS6zMelYFUeZFlTaN05vAWDft0QRK8AnvIyS1QjpzCLazmsEfjZ\nIU1N\r\n=+qZq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEbE2EbfoEFqr2eJo0lAruirGavZHimGZfJEuZ7XEI6QAiEA4GLQ6HdJ7qw1NtoJ/DMDvTW5Ue5Jyldy3AP7rwOqPUk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.1_1609939244979_0.5207796011294406"},"_hasShrinkwrap":false},"2.37.2-next-1609939303-947b656b.0":{"name":"@xdn/core","version":"2.37.2-next-1609939303-947b656b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609939303-947b656b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xiJBEhRxYz7h1tJkOSmkTTsLENsoagV8qeiHTOBTFLdif8Xlkg01AW/jUW2Jdcfef/AWKt6m12m+B8OuaOS5jw==","shasum":"3bd12fb43985ecc3b4d77bd0b36d0c8a46a0ce5b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609939303-947b656b.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9bnOCRA9TVsSAnZWagAAqr0P/1goG2/zboofOZyTY+nG\ndz+829pE52sdnTIKsnadpYaawo1gYXaBiylMb3YnIiAP8VAam10HjTCes4Vh\n/JVKaMk1vzv25TvTehmnvufkhj4GJpijRvDClsvfMVpmF5bpkAKjgXR0ixIX\noD6DHFolk1odT6nWx2oyTKwLEF5n1E2PTKeGNS587zK/ibeAopjm2gpbJlvR\nMetWZLcrd7lSRUGBdB0HQPbcCyX5ff0W8Ug+Axxl1+jnxvenWOeGYv/hLMAU\nDQn4AwatoZkHW4LoSZU6tU4I8w7s6nfa78VD7UMtdz2gN/5p2aW6boM/UXJ6\nGLBpDzpG1YzJIJx4F13ZQCk8vFwSXmDSYiWAympu2nKCD9WTnI2WIjAAkwPF\nY4SU/zjxOqM/C8Z9c+hRt/XfUhOfUj2RgAbDQDGj4Kdc6zsspHnp/BWZ82p1\nCXcUz6FhYXa9Or8Lwvytsnet5R+jOVMoJzVQRz41YDgISOawqUMOicSbELx5\nn2MR0QG2g8DNeqhMtm1BsMZS5LGeEm2P4WIt5UDGtzG4SNULG+867/vlpPk5\n6l64FD7hURv/uubdIxA9IWDIGHUieFVZdIm2Ak/rOr2t4mAm1TzqoX133bJt\nLisXJd+h7bViWijpaJTyW9X1iPSyLeoBQZ++ml9saMtbfWqzzH8QZJRrqpjG\nnvYK\r\n=1MFv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICwBkO1XD1ISSBkxJuTbGjH9et0OcgV6rTvypUYP6P1WAiAeg2Zh99Ho6Hx5twURqQzqreJchgmOCYCGhu0HUaIviA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609939303-947b656b.0_1609939406081_0.26717780303866956"},"_hasShrinkwrap":false},"2.37.2-next-1609940770-d567574f.0":{"name":"@xdn/core","version":"2.37.2-next-1609940770-d567574f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609940770-d567574f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mvuILveDqH/EqxNGbDolniZi386BXLKBRlesYketcghZDwq4E43ea05lSwsMbcrh30GN3xxDQLI3FmsgQW5TJw==","shasum":"664b81943cb83be721a9675ea9b0d90f08aa5bec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609940770-d567574f.0.tgz","fileCount":174,"unpackedSize":663654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9b+WCRA9TVsSAnZWagAAsC4P/3MuB1SsdthY8AC412QF\nTXEXj0mCuTwjVnHRru4Siw/pzFFvGmNWD1NMZTrkrwUUppirnmkmwEhfNDaA\n1D689FLYc/ZUP38trzspGuzP20kgs3sjaScH680PamJ4RpM3t0G6JOvrg0lf\np2BEyGSI5XyeR1gl2zR8/biBmTgmfv0cJxu4y7NIpqMjvtcmJHE0xJ5bQSgt\nIEuaQlErW19Bh+J+2TRvP5/W87sTNZ334SnDAYXeMzNYvPDPZ+LtUchiQYFf\ncb1CdgYJBbjm+g6o8ugHwylpDpObPDku8PeUJpnrwLG2Xd8p3leaFiJtpTvU\nWzmH49Msyj6GqOZc7Yg5yFUog4BFylwkfDQLBGvWvih6HKDNdoPkwxwMqlSC\ncCGq7iG4V606blSITZmy8vV/uYj+2RX4ZIpiM/8TNXOCgNWVpjfkNeEm3V7y\nXn8cEWMuEZA0H795fIFstSg5i5DaAqBuI1xi9b0XwJI30h35tqF3dfNomzIW\nJpstAJ/zHZfjoCwv/rIVrnYHiouVkD9Ek2123Bt/UBL2x/JwMk22QDFRaMqW\nh+VIR/iSe+k1qunz8YBcRd2E60vlfTgNjNpDog/Hr7JEaVUxGm+yDA52JE8Q\nGEMn1xo7D6mL6VVR1K6XFujR8tVicp4xfKP71qCIVfr444ROfDLI+Iw4a2rC\nFP/d\r\n=gyV+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFJCtu4GUBng/eipWlNVIx62zHX5R/mg9C7vgyApXB0+AiEA//j2eYoG2+qLnMqfb/REHF+sqU5RgGRNbtpfvpFcv9E="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609940770-d567574f.0_1609940885798_0.07330604870798063"},"_hasShrinkwrap":false},"2.37.2-next-1609943014-03296cee.0":{"name":"@xdn/core","version":"2.37.2-next-1609943014-03296cee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609943014-03296cee.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gPjFQacigSXLTfyy7c7VUnboc++8FaoH7JK7gRXZALALpCsuGvKT1EVxG7RUIUrq6dyZ7NX0w9oQgTlCBO9NCw==","shasum":"b49825183597b7e8ba73ea21dc9483022effb7c1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609943014-03296cee.0.tgz","fileCount":174,"unpackedSize":663770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9chYCRA9TVsSAnZWagAArt4QAIicduQcRWT9tpDPbJRs\nVCx4X1uk9mns8E6MijLE67buAmJQYvtdMDAXRGD65F8RRff8C2TbkqVBhKsn\ncDX2fHl9tIxmRN1rZu6xXJT0qlnIMgBccoSWSCYXBqgNVDkZMMKC3VzJA3aA\no3XBBb9kNM6DeBhu6jsqwVf3Ms/xV8fXa+LDzK1RD1qi9dXtKAxtOjxL0DEq\nl4NLRlsp9pD9PpyfqtkLUxkZnmsRGqSLmmLaxMMve42DY1qVBvwm1Q9GTcVl\ndvlFvo0J0cFqMfriixElB9GStIkDCsfypLbc0KWi1N8XHKuHAODKs+VjukE7\nsmGXPtU6L4eXAmmBSj0A82Vw65aCf+S4eZBEk1Oe/cRD3KFW4KqdAFYkcftX\nZb5g8M2y2NLrpwWJM8irjmOtCfutjmt/y/ujYxBbjQM7pIVXkAfN+fJbydB+\nxi56JiQi0gsIhGlYd6yYZBrg+0C/HSK6h08Aa56jD6b7t9T6Q6tIwqYVydxh\nvIy/Jqe7hRRXmhNnwgXHLfICpl06y0nQW6jSzPQp3vo1LMVqVBDQQnFZb8cT\nz1IH38nXW9ZUtmddGHyBFeGB3PbxWe1fCQ3S7om8A3zmuRO/N4yYUGDA+1W9\nN/BCIwfA4DVxY6w+DlS80eYkMs8LmBfdew+OxVIIZD3lMu/ZF5XmTsqUPMge\nzG0+\r\n=mLHy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEcgkSBZaqs0Jl9t3W+NsoGImT3Bc+IDDIqemNZMyk/1AiA3yKx146CLeLUlnZQxNJFnv0gV6ADG99TMaCLjoW7Gow=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609943014-03296cee.0_1609943127931_0.5154508446983017"},"_hasShrinkwrap":false},"2.37.2-next-1609943714-4f1f2b2a.0":{"name":"@xdn/core","version":"2.37.2-next-1609943714-4f1f2b2a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609943714-4f1f2b2a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-w3Smaw2ksKi9n4vZubrOkGZnNY5kg+Hp4bhH/l2SlYg7J35o4AcYylf9LSH2FqBdooSmhkRhNkC4yPq2zRJLqQ==","shasum":"b0cdc75af1a7c6ef16a7774f674e190e76ab5395","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609943714-4f1f2b2a.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9csVCRA9TVsSAnZWagAAUVoQAIAi8TgkXPa5L5o2nRbg\n8Rw1ebToBAdHFhiWa5XGdTNPQX700IRQM2TMF97weza/doETX3tKwEsqG9Qt\nm9v5TQbDAYKHnMAny7DVvHHqqmHFaga/ZElgkKWEBZ8/MmhptnQicMHL3dur\ndqKmECJb5o0MPFJzwPAzI+vQi6Wiqkpt5p7Xy+nEapmlEz8cC7GCAJiWDc0M\nxe01Plqp/4mo1X7dqLg55LgQZQQvqpo+o0xtX0ejF2IVHvghP3GJ/1sRyu3t\nVTMgMdpcIUHIgXXeAG0I54WKJ9iBkPU1kn8DaTsUJiooBAA3h5r4BqOSSsWs\nMXiIp1Wo+kIFnVh1OBHUVOHQs6lu4/Y+klLpwav2nQP4VWxiSTkZvpQ7yh77\nBtm1HrCPfbViEGbXfFEPsjn6v2znCetC/aTVxJYqRwrrla7eoVOeJGtnHRdH\nIUY7H8eodajdsLzdiyQrzxhOB95BWqV6cGhxcFGkHtOWs0g+8RZwsK2Y34nk\nW8tj4rWxMekcphpBCZsfbgyYZQNX5pGRY3y8fwH/envOUQM5iGyoWLp2ptvx\nnSNR6h93YGSaymrA7o3pGVaa+m4wi9Y6pDxu/pHfFmcnwzU8bUa7LpyonoJU\niWIo5abwwrmSYLOIbSsdbkFQ86yXl8UbZSjSQBxqh4MJF7rUAxlArz+/GbpD\nX5T/\r\n=GOE1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrfefMvg/Sf8zgMJ0lACQKvwIaNC06RvBjwxQflc7SMwIgIj87xJzi4K3TYI/61uNHEvkR7i+zOKcEu65IiwKkDWU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609943714-4f1f2b2a.0_1609943828547_0.7559664548093648"},"_hasShrinkwrap":false},"2.37.2-next-1609944019-83616c40.0":{"name":"@xdn/core","version":"2.37.2-next-1609944019-83616c40.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609944019-83616c40.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6BhkDsc3v5gwoGr6oC2+p1vXx5f4jkUo/fjlBA01MxYmXnqJPdI+8CmOfNcBs7AU/bsL+Ruhn/LMh9CPgDBkJw==","shasum":"e6ece717836118e6b0324def900f9142e6bafd6f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609944019-83616c40.0.tgz","fileCount":174,"unpackedSize":663770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9cxGCRA9TVsSAnZWagAA7bIP/2cKX7RLZo/BPIWCWDk1\nJQ77Qv7+VLVWmzHvD/9HpaTeJzkKzSU/4Pp6TTRXhvNL6V+PGDt/iHLBsyw7\n8NaHMAxWiplL3TkG0MTk/mHs7RNsFUYa0/9Cqua/WsCD5/6pxFhUiEa1OlPa\nUpe4mAO8+3rdPH1c6xWhuu1juUUIMQsLcXZUef5Hi11q5UWg4P3dr/f1cKY/\nXcN4Qx02PPZeAg5QSXO6m8UXeQT2+DsSLnOwlsRKlB3ME6V3ndU7gSzNNGxt\ntpvEevFGt9qFxv4UIEsdZmYu2vjen6cx+K9hGPNVgfOswPQSnlTua240nt2W\n63eRJz1IZns+6gsL+K5EoQ6lb1CXBK8Mc9IlblCJx4igTaQkYuNu2GlypLxl\nsKomPvbjWpck3uhpJBtLIjXOO+2icTFE3dZ8FSBuN8b2nQkEqb1QY2IeTOxT\nJLPutRgmTI9G6IJ5ecWST4gnCEobWagcsectIDZotk+3JM/L13p8dJqwqMR3\npihMdXjiuKQUdwxLMWJPzT6h5fjEJZ+eFfhXE7llp+VvGVNsAgJKqWms6Ijo\n9ZZJ8x2uFXt8EykkCxAd5kvj4KZNF9cjOlQC/22EtDIZD2VmHXwf6D0DAud+\nP5u4PZrE8q4xvNingoLDTf8UkvzQHpuw0mw5vue+7V/4M8SdukJJKXuf7Wqi\nPVDp\r\n=+iRx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFI+SIqKc3o5V2WoAbjnrn4Nocm5ns9xqUOQeGRcjUyCAiBNzig7va3ZZyMQDVd+ibznVFf2MfQsyrrOdBul5KLYuw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609944019-83616c40.0_1609944133501_0.5648790030102697"},"_hasShrinkwrap":false},"2.37.2-next-1609952817-9c95008a.0":{"name":"@xdn/core","version":"2.37.2-next-1609952817-9c95008a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609952817-9c95008a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-CgGXzThbWAqKujP/8hcamo0kWCdZnynfwglKaDYZKTM55t/1CMuIaL8eU+96NKGwXPgGsA+WQGG/67AfBHIx8w==","shasum":"9d8e059b5671cbde90b3da6b4f55e40c939b9aa0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609952817-9c95008a.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9e6xCRA9TVsSAnZWagAAqYIP/i3kuPzemH2CZCFMzROJ\nfgteHtDOw+QrpKKSAayXDE5rrgNoYP68ZRbQYwn7pdlaH4sbBo5VQQ1XCaiT\nK3/jx2683a6fpW9Q5ucyOFNSKjaViTcdkdGYWgkmiDez0s1Y6bf1kmhAWuGV\nLRofVBFZ8ywuM37QH01w+w/YsbaquFIiZjNpbUdDqLVW7xKE4s/WoRo6GL9m\n4oaUQCIuxjIrl9rM9MzBWPL917sSPXr4n07OU6zFK2WiiI2PytEXoHewOzKw\na3LXhY9NPYI4rVTwqeW9s9AsfbCN4gUAGngkzqaFupFNDd2GT8HQGVhR1K2w\ngoRg/vC+MwSPzoTYSd2D+rabbWrujIsxRJCrddUwxIudpWBLKR3XyV++UZlq\ncaf4Kx2m9sQGkfs47OP7oJGhHdGuzu2sxsfy+U/qavpr4hmfyDb1wIkPsMVq\nquLC1AfGs9CS3oXY/cH3Raw6KUV7/vIfjH3Vz++MycbJjExXMMx5xSa6ZFwE\n2rHScmgYvuNSQ/kuSuvabB7jL8WzwNoXihJhYFNLFSs8iOBrNutejORP5t2l\nWzgv2kCGmGdpIZIYYWAqkB2H2KQdBZV/cZrKQ6qePa+cGmJClacFe5StUqaS\n0SGhViqsUZYsAAZJgcTzuV2RV/mwjrx5SJaagkBMJ0jr683XI0f+SMJf1k/4\nlGAc\r\n=05Ha\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGONSPnh3fmPvBb+6gBgrnxPuHMwxkMexKEwJ1k6UN56AiEAhlyjY7e6Q1zyYRkDrsE/D/qKcuWO8T6zL69FSM3N97A="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609952817-9c95008a.0_1609952944773_0.2699478285675634"},"_hasShrinkwrap":false},"2.37.2-next-1609953814-5a75e404.0":{"name":"@xdn/core","version":"2.37.2-next-1609953814-5a75e404.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609953814-5a75e404.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ed/X5QQ+rGo8qmcDcIWnS1OFQovl3+RKPa3jDYJwYGe8U2Pv15QJvvyfCPEBGZJ3eneAGATdv4FpghkcEIG6/g==","shasum":"eb2ac5e0e03141ed8932eaf37337203978a31b3d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609953814-5a75e404.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9fKCCRA9TVsSAnZWagAAw3AP/37n9glvWMILVZrt6ENm\nEFAcbAinSyKKFhq3cxK6fQYx3QicrRwUFinegYvtcsILRcCH4xk+6tJEMsvU\n2ObB8gm69rC5+Uz+FnqqqagHnVDGlulXTFk6i8/fKldYKnIT8zya4d+ZVPdw\nGXFnx4c4m3mUSPR21SWgJ/RdcvdyKHGsNW7OrzdcZW+yP2uc43d77VtyRKJ3\nlmi00ti6GsAgqqldd0/wG/A12uaAkQWZVCaQjTJprRKCF6ZVgKD6bUh/R0PY\nSfYk0dKYoqv+Yg6DUjuPA523jjEdAzPGZxz1OHYyXX34+hKNiV+DF2RG66MO\nwQdGifCREmo8e/rv3pAZeZOL3fEBkN1Fge8ND7kpk/rxLVXJOmOgas723Nr7\nYZM8J+TDM0T+IlofDyIkoErjtEwTwkD7tvvBTHDCbeJ5zcvfNZIc33nGlVu3\npwoSkZVoHFbIRlNIi3MLNQRsSTsAeC5NhrkpFsY6PdCAb7XS/QcVXdniIGfz\nM6CwI0c0JoO5/xGLd+/eWGrD3IBUmOYjwlF6MpNp8StDqScl2qbd+oFtmdn+\ns/y1GBlsYRUhiU/8Qpi2dhEeLNRuEc53o67Z8kPP0BQEKMiONf1DRd/A0vb5\nIfhMvurvv36uLKrT6LLmk4A1nqtLNIDt9OITDfFw/HsV87vm8SeTs2POsG2L\nVqCI\r\n=aI7O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIASY/JHTIIx0jeXc0U+Sab8Q30/KFL/N0Mq/Hv3YxUbcAiAJqA0McJumSC3SAJXwUzFGMkerVWf4bnKqng4F0fWLlQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609953814-5a75e404.0_1609953922209_0.4774649117773171"},"_hasShrinkwrap":false},"2.37.2-next-1609955030-a5844b51.0":{"name":"@xdn/core","version":"2.37.2-next-1609955030-a5844b51.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609955030-a5844b51.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-d4FohP0s9I5iEvQtiY26+FplyV/5wSgCPFN7w6ybpROr9zqebL+A5tGddKgJnXQ+L33yZLOVc1DUC3fixn13ig==","shasum":"341767d1b5a285d944377a171a9fc3912c92a794","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609955030-a5844b51.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9fdPCRA9TVsSAnZWagAAEJkP/1AKFA7f6xLV8FwPiq7Z\nYOxggqDLlxkpgCvNTyvTRRtTizd4PDrmXuQ9bBgU4oCL5n8R+HQxee6okzmj\ngID5NeSognl9LjuxcShNYjKamohiNWCdsyZD19Jsnjirxd1J3s6DqTselO1T\nE4L65gYUHmckN+LGqHLYfNx7TI5HrvAgEuP6UDHxnqsKSTxtzGOPwkh2BcoT\nU/2vbboJp4qW98Eir4UJre9E+KOsVmyoqLznDAN33ZCDHACYy7cKw0Rye56C\nllhPuEcd0T/YpenuRv2womOGFkO8HjCY0QcL5fXn1zdvvdqM+Ya9ikbeHkQ0\nCJ+dRgxJ1/dp9TjcUG3eLkNmNrM1cc7EBpyaWtam88FbFxTT2e3/6SQAxyCv\nec3MnLA/EV6dKVW/Bb4yyobdAui60qyxp7woaVI2EzfZv1I1fcb1Pl+Rtg+Y\nsmAHls1B/zhtPwcbKlq8/MmvLHumD/FCVhJaghEzVojWiVGKlruumeSWi1ll\nAzEFmqAfuFqNMKO4NlshlSjE8w++pV4BGDdea/O8Yu0dG0gk9CO42NYttWUb\n80usex7dKHJVNLJIz/79KAIz2zbEryEdemHlM1H55JYx1GMPKpyipQ+99IzA\nfDlSMr6EJZj745GwqN75glOTDpg5GIhrTIqQIKEdFLzBdYKmN2kZLhrkIOrH\n6G76\r\n=grzl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEvvg+v9xTVjZLz13jkYv0rH2oVvv78wGcaSQUjEZonZAiEA5CrN0jx7lzN/JpfBRc3L4/AkFuAKBblfZmZM6T28KAQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609955030-a5844b51.0_1609955150882_0.9154712236899774"},"_hasShrinkwrap":false},"2.37.2-next-1609955304-9170f396.0":{"name":"@xdn/core","version":"2.37.2-next-1609955304-9170f396.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609955304-9170f396.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kFXN/y311/nR1EXQy9HLdLeu+BqlJ9+L9KK9wgL80WaYdbCL0/QynuG0wSasAbSblY49O0Ac/eJzsSU+kGjaVQ==","shasum":"3f63016e58dd3edbec0b3cb9723c126f0d353448","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609955304-9170f396.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9fhmCRA9TVsSAnZWagAAN2MP/2wQ6bSuFHXVW2j8ZJpY\nS6znFHri45Ls4r9L4JNPoxMzHuDeQMGUPp0vLu1RAmAZ3HN9wXskOJlS3TCp\n+8917Y1Z2FLXp1NWhEDZv76/N8ZIKTsUxkamA+TvBBVuTBYkapNN8C7bxnr+\nSUfU2Q2pBy6YKnxi4I2Sa7fHq1nrpYvsallC8tWJJUlXYt/W2AK+M838AHS6\nUiUpvypqLLN3ZKaemk5Y8WE+1WczTh6ksppheWGcgSXsWR7mzCjJRL+Ubdku\nJ8uKUV8nUbexFV6uR1M/NOQIEZTMCWZVLYxale6P2sOxlnx/cXcF2VA539JW\nNNsv/j1MWrrptGpPjgrhO3RP9G47/iyPQLBFYlv+eLtDEvL6MolY/piIFdXx\nevg5wd5NuoxC07uWJJe1WZXL2UeswagmstFy17Orrhd8jUWjO4r3bbSs/sCg\nfG6xlu1pvNJYmIHWsBn+fvQpGnZWf3puAC7WcmSNrp9muWBbCWTaxnjU8WLK\nhlumeQPe78tIhpDaWdFE9WzXAWPjryuOIBiO3QoBPf87XTBaXLLfYyL9ejHW\nA0Apn2F5sqoTu9sbgfvQsx3qJcZRC/lK23U7XuhtP7ZAc/19FRznTCQ/vZSx\npqk/YRwWPQ5nswj+23Mb7sLGjJUZqXrr45Zl1IAwgKlW9Gk3qiE2ThGgQEfe\n+vTE\r\n=9Mqk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFcEoHk+/uLXOcQDpP3VGHz5oQb8390lKzYlsIVp0SZNAiEA5rignqNaj5wJmYIZ1u+tea4Ouz9BxNe+dUhsxflp3pU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609955304-9170f396.0_1609955429859_0.8695404192990335"},"_hasShrinkwrap":false},"2.37.2-next-1609956119-5d9480eb.0":{"name":"@xdn/core","version":"2.37.2-next-1609956119-5d9480eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609956119-5d9480eb.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9eX1vuGiPD7xish3Fdh3/xxeAQQEvAEwOb97Gg2UCR/FYcdbJd/eavl8VNdBLd17OlasuvInNZ/I1/XXQ2yHUA==","shasum":"ad7b8f5ab0300cb2de6cad8b8ed55bf54ca9e2fb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609956119-5d9480eb.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9fuLCRA9TVsSAnZWagAA7CQP/j5Ju8KwaQFeayPBNTXt\ndZIHde8aOrioFoiVIe5sGeQvHuw9h0Zm+3VvIpWfy5++Pq1EZvNXvJfCfGNe\nNr3uIMjm8wkCj8E1LFEQT5VdmxeXXXX2+UuvB7T6jAfWjGLXbhdMHKe8nW5Q\nKwVsyD8bm+aaUNHp12SNELbic1Zq7E+HhLSi1xDVlQVVqfUz7G4kUF9RvGFa\ngn9F+trtai5zfXu8XAJiM9jaPi4AaHeujyr2IFBOnaVv/YEUoywsOG29H+Bh\nf5ZvWuM9zca82X9W8ohtkQQ9o/HYJ3dEDWPufsEN3mZg2fYYH4BDZ7qVWRO6\npYVTE30KNrk6q60oLhxNbh2vXu7Iy5xpBnP1xobYa5Mv/fvjbigCGAPP6KDl\nDHSbAupL+vCVxIHnphv8bl3ozQM7mmbTVSrxCBU1C080SP+9R4Z8gAE9AIcd\nK3Ln0I60FhAJRGv4B1vlOppP4gVTvaXwHQKvOti7e+7HDvJiUullJ9ge5Crh\n6eIILW6PiLCHa7qTmUXpCkgs+jYutNobdGifWF3SWcnUG1DuCQIvCQPkwXah\nyEH0K8DLJVvpMLc/xRRXh2VgXCTNhFQunWxCY6ET139DPcW4MmBa4GweLn7R\nu4DmmvSIopbd/gSVcwA8twe62fSMkxd/EmAr7yH+RRgH1IgF8h1W3iDClH4D\nNiI4\r\n=c9xZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLI4/hVXEFZiT98VpownK7Ik1ISh8nygm0Zvnkefp/tAIhAMJZVqkTH729TGdjlsAnvs5IxHTBbvLPHiJe/TA3wL9C"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609956119-5d9480eb.0_1609956235173_0.22894356043031294"},"_hasShrinkwrap":false},"2.37.2-next-1609961856-44607629.0":{"name":"@xdn/core","version":"2.37.2-next-1609961856-44607629.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609961856-44607629.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LbI6TV8zERRxpnzOKjj3KWl6XmcQZvMBZyzc0mrVR2S0XVehwE7+j6f9lsyam/+2S6G49gleo+2DOZEfPerLtg==","shasum":"6000cc969f9ceeb108246391b20c1e5c5586438c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609961856-44607629.0.tgz","fileCount":172,"unpackedSize":661981,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9hHxCRA9TVsSAnZWagAAfjcP/3AOzboKL1azyNORj0Qc\n1ottt2Bpv0RFrVXs/fCMOg8Q5ut7JmyZ0Rsf1964WE3b9J5ms9h2w3cr0WZr\n6MDBuN9ZWhSNGq6qxG3AyVod0kgNIBBCrj1PedvBJuxEk/4yykflWWJStM/s\nvbwxz9fIv85GuPqG6cfZKMr5OIUw1oNqc0mU38ASzLooTFx+o9z40IsDS6dh\n0HkNpN31s5WHsBLLaSYrWcurd3V1IbXyXautnhnHt66OmVbJGqqSarS/gRcV\nQ2hJfS524wmiOPssv45yBfAC9gEdQ0hW+mV3OCSoMNkRl//mSQcyv8xR0OCk\nSyZSitfcDcPhxDz4tQI4ANZZLele80NduCaS6Rkk680F/Hi8DmxyvgPSfUTD\ncvFCATU2khNQukSIhP6NbUzlehaffH31pCK8B66pDeKHkriXysVeTMQ6mpqX\n3hgdYT79sTGi67AitO64fFazzB/lg27nOp0rOYUqYj6If930FoFmnmVqZuTI\naTnXo/8h5GwGXN1s0V4F1JWVnIQwgnD4aymWXiRvq1E5vbPmRv8x1HvLY0rM\nJ92fe/X3d8eEOjVcqQYYx/Av+0ftYBstPA8RmM81fDJBXyosZYcTqmGwVDHf\ncct/K3EJRX2VuNWriCTcYTywYRrBU10Z4Of4YO12Wk5212+hHm84pOp+onT3\n7Zs7\r\n=d8LE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDak7Wxp66CuVJGpha3UU27zuSUo9uzNgC99PsgNGyEqAIgar1GcEt1zTiqGXl9lrhKovBUkugavK419innju/CorQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609961856-44607629.0_1609961968901_0.44031416183762007"},"_hasShrinkwrap":false},"2.37.2-next-1609963301-4f1f2b2a.0":{"name":"@xdn/core","version":"2.37.2-next-1609963301-4f1f2b2a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609963301-4f1f2b2a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-emCoOwWCHGrs1G0EyONwcVam4FRUa/YzMOkk1kZUHu6IEZvmcZ31BJ3YEmWJlf8WOxxvUn2bgu3C0pl6GtUu8g==","shasum":"a2eb1f46f8d9c84e0fe38529521fd3c780b4f511","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609963301-4f1f2b2a.0.tgz","fileCount":172,"unpackedSize":661704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9heuCRA9TVsSAnZWagAAfz0P/jW6FYY+B/LQiO7zt6UG\nA4VIOA82N83Ck9eN2uPvYEBpIU6gOdu8GI0BAFj02X9lQ7JCynncg0bURMqH\nlEPGxse+AE3+8P0kagLaWvfuH6nCylSziFslDG5X2htVKGCy38xXV4rqvfd1\n1vFQCxuVUVN0xNgty8A8gezJA/7p2bJ/r6PW3KxktYOzUTwW65+2ce2lhayf\n78AEZmb+7Zzi3euMajE1ELP90Wj4+nEQkV/BxojAunpLWrPPlNqG+gYNuzAe\n709dHIAiX9TFkqhscwQ4aPkWnfofPWYee2tTWzihh0eIXykoXjxI9ZdcrX/4\nCNLkrptZRJoAoSdp2QcjIkiDHTtGpBSJLMUjv4JJyTM82tt/z6s4c16so6kB\nnRGFhlIGPJQbf4qzzND7HHXEMeSSDWCAOC9mZKFaPMBTWy8Q0NQcMeEDkRQy\nSAHCem2LZdwkIkghY2Da0vMe8IGBa0OnmdNPUL9umie+0hOYCmk6PaIUPk5v\nRKUmxTJRBr7v1ncSBSco6cA4QPmAej9GA1YGrL/KL9v5N06qfdUWtAM0zXV4\nkmI/4xJ1xdF05aoV6OGlpE7WNg5IFOB9y1SY/s6nSjjsnnx2BawyBtIdXVIt\nQTdCyIfHeYQ+BGRPqfurTrRyOR5wHaz0UCeOMggIKWBgs4VabdPpR+76hyGP\niMa3\r\n=681/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB5g4jvTUU8px4Kr43Jg6kbErTsiOCT335SSlcoXDb+mAiEA79DpaRQmXq21dAQtzqxzgcWoJBzaOdmeaq5IlT+9NuM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609963301-4f1f2b2a.0_1609963438150_0.0834069686599852"},"_hasShrinkwrap":false},"2.37.2-next-1609966044-f3935d08.0":{"name":"@xdn/core","version":"2.37.2-next-1609966044-f3935d08.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609966044-f3935d08.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8XmQ0BlZYO7yaizIdHWcAqtkxCoRO72trGY5cFO1mt8fvXVPfQRjkuHcBKwTpl2qBtdzXtp37/86bYJeeBEqWA==","shasum":"caa1306afe41087edf79b8f0e67dfd21b3f24e05","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609966044-f3935d08.0.tgz","fileCount":172,"unpackedSize":661981,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9iJKCRA9TVsSAnZWagAAR1MP/3a0RQRsn8bXyiTr4hIc\n340fK2WajH7PEUN6aJn/Jc98tu4MGivfAGvHhu2If3MQjJ0QdcLCVH0fuI+M\nWW/c2gw1WbWQN5ENPPGtYfS6d5+dekP/FupRjX10/07TsRlfsPNcj74dImlr\nMiCV7POaMi3cOzmKX6QN1c5O0qins67xnIRnToeaZUQaZd1ai5BNT9kogzVs\nAlqLPpJrccSvydZWBrp1DyTe6HcO/INhKF7QEPpwGqjOq0n+yEfKWb1fb39R\nzzpDunCbpewvhhS9gZtM2UxK111ZEacfPiQttKfTPVk0xYWbD9CVwZ99R+eo\nxtN9x53bgfDzb8v9XErlgre5Y7g7mYCgE+kBOGkyCb1985gKfaO/rFDX/c+r\neYdnKP36VS5ZOb7CHSytMB3MX+vJ1mNai5oZhZfCmadP/T+tPmDbZ4AMFwvL\nrZ/rSDnwPv3LYPeHbH5Rf/VtZgRWilLXo992ncWE4LhDxbqyV2aRuKBFNdai\n4MCf0w9L4VLhx7HfqJgAkvHwcetP57hRbJFgdA4ye8GfQ/dUzOYFg5JrrMxd\nhP2knUVD/EtJ5pG5YdkZxdIn8PJMcyIJcq2QzXQEa9i1Yd55oeOxbJO7R7Xr\nP9wm2z8jZ1ajxWQbRPS6Gr9zSNE/3cPJgttE6+G3R8BCNevly7Lh9jq8dm69\nRLQA\r\n=E4QR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAOGPitXi0XC5+mCHc29cFeVjgQvQCQf+cFAIUsjW3PzAiBo3YtMUnBkiX0cBDJwI3UK+d9VcyjXrGIX14RrtF+heg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609966044-f3935d08.0_1609966153752_0.2602173161288124"},"_hasShrinkwrap":false},"2.37.2-next-1609969301-1f04b787.0":{"name":"@xdn/core","version":"2.37.2-next-1609969301-1f04b787.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609969301-1f04b787.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-RDfWQPYHZ13+wNXkJM/DJV6qcYedpMjBc5RIYgiLeizDrwjsHLwGgiwAzBpRRcd03MT7mll5ebJF2B8FkIWc4w==","shasum":"e99b87066ec05d20c44a478f206859147a283b5e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609969301-1f04b787.0.tgz","fileCount":172,"unpackedSize":661981,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9i8bCRA9TVsSAnZWagAAYZAP/0KjUR9D2ezdDIIJwJWp\nYxoXEd/XqdgShZA7IO4U1beXoFbvf14Yk5cqibZ7bMN2+nny27716Wtje9lz\ntD1UsvFOszjyGEUNZRvy82W0iW+dWxtWO5mJWGJWaWvzZr656HzEy9pfASPn\nefTMTghC3BQAi4BL1KQJndiu3+uef9zwn+J3ecnjth8Cx5FUaTrNX5lf/Q24\njRK9rx49JCbV1b6TKs8j6HxwJDf8Inx0txWH1SONV9EoEknOLc0hDyNFQVDN\nxJPVTPDT9nx/dlqiOJ0LEu0ODyxCQraMs/nF7spchh/sLW5s9iV51EZeZmpD\nlKXE90axBL9z4U+cdFTPAeHyBfqi8Qml1KN4G56YfBpVpYDuXdE0NO0poqw1\nEJa8rm4i8eJ+c6q4tFW7Wnl5xBBYeGrbLAdD1rLk6/XQo43o8shm/UTIH85o\nR7u/SecNmVn+xH5xObvlaEYJqhXHVTE7ALssiuw6zL6b5lCma6pgsRbdeBwT\nKo5xsLIgm2ZSoxOo8BNkiuRp0kkLsfQRCmZf7YvFhFxVfdBNFRdqjNTrQdlX\nzixYhB7hy6ENpqjNFUEWZdXHBMU+DZfQtyjONhtc7V3N/R6zBeWz64NY9PpR\nkinL5bVTXFlGWSHnR6dQYv/LlV2Ojdgv2JVhix3hdWcQHzA/SRpDmyH9/GMU\nY7pc\r\n=va9O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgByVYfJV5Or68MSrOAK+mjlLqBR+lGrYMeAOK44cxOwIgFXq1TrCd06wIFo0F3nffD0JpwnRUDjFryE85PmpE+Iw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609969301-1f04b787.0_1609969434943_0.8871407312066544"},"_hasShrinkwrap":false},"2.37.2-next-1609972133-91236735.0":{"name":"@xdn/core","version":"2.37.2-next-1609972133-91236735.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1609972133-91236735.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Xr1oOAuah3N+lMcLGagKpTyN80pBvIoQVRhpKe6k9tT1aWu62SnFiaGQmNcwrJ6Ga72j4dkmuTenWZNBJacBvg==","shasum":"d77cc89ed039b632820df34808080e48aefac8be","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1609972133-91236735.0.tgz","fileCount":174,"unpackedSize":663770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9joWCRA9TVsSAnZWagAAkjEP/1Bb/zrw51JzQQ44oVrp\nJJOK69PgXPNKkOyJ8PEbhO0SLr6o//wpe+b+XsKl4RTQEbYsVZYkB7JyV0AZ\n8UEbG9zm5Oipk9gvzI5nKDBwehgpW/G/C3yL05itP/9du1la+/IRz6iSrgu1\nbLbDJUj4+oBXUIIQO3ajBXOblEq22hedjQ4xwbiPVtDVD8vxJ8KzkFO8S0v4\nfu97/H0bKYGAfg58XCfNS3z+/TQRbrmgOp/rdqCuCuzPPb0nx++bS3fcPray\nQXg8/ZNGXc+4YvgNVXrk6Wijd7A5KrCZ17vtHcNnksKo5fS1Vv7QiD9bo6vd\nemyHF9FfHOxXDourcpPogux+fjV4BPlvrnqaLGmNbpGXyysZ30xnr5+e7z2R\nBZSSwS5EZxYuA5M9XbGweWNfwoM5+MEoj5GBifXuOGPqpMvX/r8sC4WMkxxK\nJYiptBzUgz/nwjZg+zGDlqggahPXQdixvfYc6443Nyq7yUpubp7GX9yvOfZd\nhty6qft9BK2HGsREtcu0XALe8uCaFKcjAik2m/yncqaTKQdYmMMrnd+utzR2\n4z3ArzAGGq+yla1DhyFOuxNg0t0BtJrDaep6fD9QK/f1+6Wt7IS49UTMRoFU\nBM9v7YD5q1is65Zccal9E14ftwQZzwa5NGhCEyfI2IIKgO7foO88uNky0Pys\nwYwd\r\n=l3tS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF+gFUaRGVqXdG3CnCZjdU08yJfQ44fv6aPPLblDfOqUAiEA4datjiamnqB48MUi+6G+zPmvUUDiZDe01PVkmAc/anI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1609972133-91236735.0_1609972245997_0.8571336863861458"},"_hasShrinkwrap":false},"2.37.2-next-1610016235-e374141c.0":{"name":"@xdn/core","version":"2.37.2-next-1610016235-e374141c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1610016235-e374141c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tndOfaRcw5j5VP2WeedupXRA1Sfwiu7qbzFJu+z9HQ4MlhG1W9xqiNTSjslHVVoiPG/w4mADoB9/D4JKV3u2cg==","shasum":"ba4e69194aafd6122943d2ab54a76a890a852e91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1610016235-e374141c.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9uZyCRA9TVsSAnZWagAA8AQP/iuR0aoxSvkhgTFx6RHX\niqXgPj/Ze4I0dnfJUvErJthtqxtRnAlAdxwTN0wyM7eeT3vAE6TeLWrmTS8M\nqzwPNxW01JnsEET3h6iV/lufAIkl3Qe+iaz9KrRiA8bU+nucFNg2tH3DX1Oo\n0DmaBu8hCNIFaAg7HyKKeZyQt10qB1Y0xCXw9Wv5ylvggHA7hXaWQYZremX1\nSJXt8MPknaTFEe//DuXYZJjePq3MFkrqKS+PnWEWwLWEiWKvDFcYaWPQZnDl\n3WNJM7CtW6YmIpSsxklnSAoloYbtGjcER56IP5CE49cFjgV0e4mhaxPIOAvr\nBMhntOHnegCRPs0Yo2kH6pIApWB3sB6wC5omFPun7ucKBRQhHM7o32UyjAxT\n0gH5jPTEru8DUEEJr3g9cKbrmO7KaHaoTgl5Aq8VDaT4qS0Q4+cwvguUgxrX\n5A0nk29gyLxvEctGg0+jsnQPMzLZy8PgKTtguB4n/UO758+/vmWSzEcd5h64\n4t8hUY3skiVELhlY0kscLCLqHohU+vrxGJKIb64vWITKBWXNJvwkw78Kurd/\nsYQUgotmWwOf+8SIq3g1AAmp8pxRd40srGwkScCPpHSfhZGEEgx/vipTDkTt\nQaZCTFg8fchrG4wgaVr4CjPqvmDW4HuehvFoOcyCCAyNj3x1kosRvdRg2YEu\nYb6N\r\n=r3f1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxIjE6c4FXhBcgVVPeIi9SvdI0vkpqD/xZ84JOTSmGZgIgKQnvxzKO02fdmdANxaM6DKql5Pg8ka2iGRg2U3kcOcA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1610016235-e374141c.0_1610016369618_0.5536872985249943"},"_hasShrinkwrap":false},"2.37.2-next-1610016633-dd69919f.0":{"name":"@xdn/core","version":"2.37.2-next-1610016633-dd69919f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1610016633-dd69919f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MHKrx8J24JgJwTmmUgtvNlGApPAOa6ssFdsBABa1UErQhSyoNJNDakWqHDbHMyYp3l9apYXYKemCwINr4TlVYQ==","shasum":"88de9d2c54116e8d5ed2b7943a99902050c7953a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1610016633-dd69919f.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9uf2CRA9TVsSAnZWagAAuz4P/2f0ljCTZ77gHzqwbmGM\nA5IbhT3Mvr57qRPoCIFVIDmQpjuUmxhS9wGtwRM8Z+Yd3QlmVwF3jMkICxTV\nWD1IA8//+curIPQVsn/eAbdlpKZDB+76uaTcwK3PPxUORAfNZdgB+w5EV0b2\nHc8ysyrdURPJmN2n0OvInemHhpD+cFwOdyCgdc2QtA//m3hWIILNmOJ53c2i\nsEPgPSYyKx7RLK5NMZe3j5tnJu3YLiEpOEb9kSMVXDDDhyy4RGLqjj9SrWQU\nytB99idkveJVpq6Jlea7HuPFRnnxiK+8kxPbyxdLfMrGFVFXYGkF2nbtraRy\nP189PGROH5qX9P3XxKiMXtlSekqNau8loW1VthWgN626ZZ7gXomWEUbzj8HZ\naHObKGa7rkl7vgc2EQ1qMTp5VTGD2S9ThhGT1r5JzYVFNQxil+CvV7bBx2J0\nzhjjhIyKFucFAJJC0mvsMwL6KeOJwYZ1M8QmpkfIa1uZxrv08z7HY8WYPFFj\nJsD45e1c8GuJYsbINjJfZfarrw6ZJp7uQLwkkUZrhC2lv6jGUeOap6PfVDLW\nS6InkbKp+C0FSUjBfoPYmDILR81JfFcLJSTuC+0kGZ1MlqwVAzlHX/2PvSCO\nt33oCKVmXUBzIv5anQY2cOMECnnun6YWsyJ4+ohvSpIJuXBO9hCFTI74SD6B\n/XPK\r\n=gHJh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTNC3d764zvqtoMDa0/lPBQ8plUkuefG8LdufkDVzfHQIgcmfh0YnEcx0YmL+tKazF1Efmzdi1kgVQ6veX2fZztPQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1610016633-dd69919f.0_1610016757982_0.01596830714960573"},"_hasShrinkwrap":false},"2.37.2-next-1610017546-cb4d18a8.0":{"name":"@xdn/core","version":"2.37.2-next-1610017546-cb4d18a8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1610017546-cb4d18a8.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bQS9PkV3+arWx0/mMbcKAcXU8zEO+XDMXYpNXESeFFRJFSegew5tDGZCTz/gNyYV6FrsewZrSUC+eRXAwqjtjg==","shasum":"6d89913bac428b5a1b2bcecc59c04ff48ed3fab0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1610017546-cb4d18a8.0.tgz","fileCount":174,"unpackedSize":663770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9uujCRA9TVsSAnZWagAAIdgP/0NqUnWDDdfmh1kyNVkV\n2Ov5LWL6AqYoGdiqzz9nP3Q7nFVFv6fdLwcrqg9sSbY8jhKm0V6/UapxVC45\nPCXy4jrzyN4oBcCnuoUycBwjiWukk38LWLW6Stxeo3a1woaBMLusOcUwgUQ9\nPLxuheH7s7PMYfepCe55fEt2EgcaxjatD2QXYHyRq2Zb54LvLsHPJE8D74rP\nyFbYbpWhOKf6ZbOAwoWhh8InjhNCONLnsr0kCl5MIYLnTiycw6UjX24tjVnq\nMEkqeogHOkkzSAd6H5mmLF0dF973VYVv5tWQEJkuAp4TD/xI9BPzFGFV2Ra8\nkOv+eAjVrYB92QTN4ijjSZ5q0e6wOO1AdhbpC5XPcQ98fnRJE9e7R2o9Av1L\nl1ROp0UKMWYrqIp0yYGTFo6xbjbSyLj/vLElAjewo4g8ganT4WtFrIC4JTWo\nzYK3bpUygwicmTNuSRWRVraSyLLAq47lbN7Pm0YHPXiF7jy2GQtPK+pcxM/x\nE64TadR9+zRkBjUu8aVf+xhWpyLKKnK/cVYa7Xy/CoRQoBExkg3eLTbkFqbX\nnPTxc7yVXOPd8ra3qwU8VHuOMMmiQhPBZZeSVLsQ0G8cfWS1S+N+I8jGIBU9\nnUKVsa9/S9XTNNhE+oOnTEkDBj090bZ1mOzrkg7Tgv3vz+3m4nekvE85bMRb\nFeze\r\n=CmEo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3+Agtbb7Y/4Pjm/SGuUylfxC1RKuoJKAt0CpDilVeSgIgWYm2CSVfri/tDuYextCqNUlNdu2nNs5ysFLfzC6m6HM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1610017546-cb4d18a8.0_1610017691321_0.2912150878917277"},"_hasShrinkwrap":false},"2.37.2-next-1610019842-743f4a14.0":{"name":"@xdn/core","version":"2.37.2-next-1610019842-743f4a14.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1610019842-743f4a14.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VD/SEjewCKOmHWOayyGF+a5wuTWAdJdek+N1mjit6yz7fWp2LWntwPNtcm6UHx6Vzd4B1fjep/G33m1cJAC2fA==","shasum":"4a9cf0f0037717c5ad9f5cc07a5b66aaf1254e54","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1610019842-743f4a14.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9vSGCRA9TVsSAnZWagAAca8P/1Xcg+Qm9WiNuB2eC3SP\nwUSkZ1L33kYZe/BjKm6QxBbXjSfGcNKEer57Xu48ytJeWApju3bIBVQeehSo\n/PLwHIA7cQCScxGmvJnIzUdXABgkVwxqSx8gYJUAgGBZ7MNjQ3nLyWTvDOy8\nWX97vb2owqPXnzrXBZqv7NVf0OX9SuFBIuHuiWu/99E+3U6xrwHvw8psKoUb\n+f8fvZMh1S+dVCD6Am9vaI2jNfof3NlW6mQyddhJ6dP+d733udk9CN6KEZro\ndPYZHJMoypLnVaUc4rioStgac+a7BDpALdBM3OiTR4UiLM07pP5abQQjbYXh\n07zbVzMY7Y+KzhX0rX6VOo2E8NsVxlPVkVf7jVvG2feNAeTZTjUh8QNreyE7\nXG+QM062yCzidZ/GBtiK7aobmHdokPItW1g7syVA/0US781s4mCHOXY9c8I3\nlQnfwUD/5hp2Spi//GjFRQawOTDo4fpEx4z29o6jPDzK+7kFSbDDZzAauM6+\nai2pkninBB6w6uZZ0uOOvqgWlDT5U9rHHEIvxYNanvFhVsSI4tOsUyxQ3qpj\nBXb6K0BPPrq95tP2k37MIdNqWhfM+61MZbckSGMKL53PTle8NvIFNPP7beD5\nmIkAAK/w0LqjsqhDAlKdhkrLvsH/IqVQ61Hw86UDi+wFX87rzpvHJy2Q+YmJ\njc5e\r\n=NlAH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDRBMBu6EyF/PdQVFqii8L3pZMS7mTswYJaiw1OsfjRgIgKKZGaW5KDBuTgDtNWhbQzuGN4jIkBr/RLprUhHXqA7E="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1610019842-743f4a14.0_1610019974279_0.6967388751527999"},"_hasShrinkwrap":false},"2.37.2-next-1610020705-ebd8272c.0":{"name":"@xdn/core","version":"2.37.2-next-1610020705-ebd8272c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2-next-1610020705-ebd8272c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-1fJuDFNrdkiToSv6kR5+GAx6tuWRaZT8CvJOdraK1aFVV7Pk6spGiNUvdkOgc/uH9aH05JJS2Kl7R5HbPXyzcQ==","shasum":"dc19f8905c29cb8f9898e4de4ee518a89290af73","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2-next-1610020705-ebd8272c.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9vfjCRA9TVsSAnZWagAAo7cP/2mlxuA+MOmPcJwyNQfn\n/GTVdASh/rUWU8vUL9pZ0vWzxLv6r76Lk4w6gIIL5vkxpphUMm2fp+jcHOJi\npwzSuojX3AvFf+F+5As5Z5kE6HZ9ZYERK2FVsIzUCGUTztvhdhjQ0PZwotb4\noaccMkMjCI4RM4F4oE0sMrSXrO6W5hOJcwskyBZQucTTpo7Q14wxEyLpuI1T\nS8eDBmWaVEXQTPPs7B0g5SOEeHNJ+To+YRVhR2XpPT/d8SopxI5EjzIRh3G0\n0XixTa1wJUXRBJRvIauPNvJutAVDrEah9iRpbDW22ex6hVUKquPWzHczJCQb\ncpE7g1RPGldLTcQHmPGiAXGdr/d9rMJlmgM9lZ/sfF5aCpt3iz3QsMdo8yO4\nX+4/gQ9/r4sDET1FwnhvE07pijUd8DBcMtAUz6vxNuPimMeSo1QH/rP9MTn3\nG+Y0oOMgdT6RgGMuqHxSoGym2ETOMX4E6Q+S11d/n4A8Rmo5XnAgxDklZ/E4\nKVEsoebayifsBwbT0Lz9IdyLplta7kpBJOjrBxGM94D2VNa6E5Rt8UHGSo3R\n9Z9SghAcj6ZbCezX1tC0OfiVutZb+nc9ke7bMsBUZfbejkrgurasKuHnBsiw\nZyHf5G3IpwxNelvkZhCJG2Ulmt37aQdoTw/T3Tj1BMamHqYu7CMMaM4VUi6+\nvvxJ\r\n=4Tpp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICorGeUjrQJ18B7H7e/IhYDnIbX3do1cALHjAjNwyCynAiEAqmUAClFoANr7V+i6rm3t13Q8etAZIRSv38sEscVQnJ8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2-next-1610020705-ebd8272c.0_1610020834558_0.6274678129185443"},"_hasShrinkwrap":false},"2.37.3-next-1610023337-59e72c19.0":{"name":"@xdn/core","version":"2.37.3-next-1610023337-59e72c19.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610023337-59e72c19.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YTl+GLLSDjPZp5JelxI/YYGtuC2fQp5m4DV0EKdbnf0Pt1OeM6AmgGarNwAwZpIhzV872KeoAFUZCQNIql9hEg==","shasum":"b1888e5ed1e6f82766a59ec9c1c9cf64d5d296d0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610023337-59e72c19.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9wIdCRA9TVsSAnZWagAAYK0QAJ0d8TYMolconmE6mL12\nZruA+yaw9cnlmTj5onXUhAp8h5blry2m9qQsItr+dT5iDqF4XFtblALjzPSZ\no4jk7NhwsDQxcU/hR36rHvkXor8MggoXtqHufdoQl/zq+NuguQO4fLCjG95I\n82Gz9LeQmLhFqm3icmwWpm5BZStXXx4BBUAZBXsDrS++nlHbG0Kh83bY6V4M\nP37C1K/TQDGv2Fmdy8jlq2WZ0TH/KnaVZ5EgMr9MB/H0reVXjnSxEIH4YQfE\nFrChvasen+ga6Tk8M5QH+W6KdvlBx1vnGfaLFbm967PzTmzGCM3uUSF4Uamb\nxGF6pnG0980UsLVi+OUJk/tk4Q0RNpdc4xQZDgQ+DQTQ7L4ijvDiEDaYTHdk\nH5WYa1voH/9XdQXMZa3LADOCxxx73K52OLvIdY5KzWl0n0OBtrpU6HfVFfqA\nj5vSb3/FRSyznolCa0uerZ0rQ3t4oj281fOUm8QDgpNceTbXeRhthYYVfPRb\n/5gLrOXd+T3Uf1QL/G2bDV1nsTDmma8bktXxLPhqOTNKn3mbKSypMC/MZwg0\n3gJs9vLrnUO2bzvH++Z1tbPkUBS9AMRWDXr3wzR27Lp7GTV4vwKbU2WKPH+w\nUPsfK8X7pUfwjOwLJmZ9Ov1iFKOfVuSyHfKDmILAQ4b2E2+bb9linaEo4K3I\nxR2Q\r\n=SkMQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQuxhSCaABtvMvYtSup0l9l6pEnoOFc0lYE+WnKj+k9gIhANxeGiqT8/0/6Qw9EJ/e28W4zBbvlbUfOtMlc9p3fDgd"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610023337-59e72c19.0_1610023452989_0.9166263135184647"},"_hasShrinkwrap":false},"2.37.2":{"name":"@xdn/core","version":"2.37.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.2","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qq6cNPPoAOPQPA60jO5/106CTkJZ16gyy4tpP0MZcOtaeAUVIsvGjsKsw1ImJLuFujVVeCh7nXK0alyraNvYBA==","shasum":"064a164f3e44121247a1371c267b94773a729c50","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.2.tgz","fileCount":172,"unpackedSize":661766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9wOGCRA9TVsSAnZWagAAX0IP/RpIYb/VsglmQ97rixQQ\ns9EIwxYSGcXtzMSnun+9f5cSiGfLKsgH5nDMUDNItzZl2sIqTTDoAzf7lt94\n7Z1SOwxCRmeqQiPrHz66EmCMior56fKJbtO9MHpAVNhwYFP0XM4QF/HCQL14\nJtTcDFj8QhvVUjzt0hATaxyC14zPRKRaaplgCfy3F0T7HraoiKlGVf2HpVp2\nG4uBvnc9AO1IdHw83wStC437SymSvRUPwnEDP1J4vxS4K6rtcs0T9grLKMh2\n0AjOFUKWx5DAT9DHsmFPk1m2+EAdd5hPNlkHO8XrNdNfCzpwgHTCLuyQgynA\ngYmQi4qD9Q7BHom3G+v1HOcwHq6lCXJTRZ8WpsUMHSDFNrX/wqJ6L90lI04L\nM4czTbHbKYs6tycPsq2rlUnZsHRG6QjOqc54jL8EU5W/YVN19Se6Gqf4fLy+\nwxanhT/pgziFWgPcmV7kYvaSqugNsb2rFZMly8e6kSYqJjp5DzqkRxqXWbCP\nV+0bOOKgdKez+U4QqojAUy9u8koIJ9g/7M5YV1wuuN1+nRo4WYDTOfQpvkst\nTOb8tT55k8FOrfN2yyIroWNBqvpmGrbx8JGTdV2scUPiNkuHZleGLoG5+BD6\nRiGi7aqXlevNUw2qpmDmxNtlQAOFW3QEFUmPLZeT30u6agtIn7ifLmyuF3/F\nXemc\r\n=/LvZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRraZVkkBBQVV/4KBzJ/VcINbNam+dRJ61Q9aWHUz9dgIgEqPx9KNiNvFsOeQPJUjR56Gsm4P/baW9+40CZ4DQspQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.2_1610023813421_0.1747658055730199"},"_hasShrinkwrap":false},"2.37.3-next-1610026220-12874458.0":{"name":"@xdn/core","version":"2.37.3-next-1610026220-12874458.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610026220-12874458.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-D6Wqy1Wy+bkP6LA498If+jGCIawHRkY3Et06Jzo951ep2RDIkHDWOL2Q1kK8wu3foYpfCYQL9sL16wPt56ctMg==","shasum":"b71451ffbedc85e73424d030357b2b709db00140","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610026220-12874458.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9w1sCRA9TVsSAnZWagAAmggP+wYgcXE6AqfkXdw6rQ4V\nrvFrugvMinnJYi51f2xJg8UAwlRcDOrqXQ5GOLlZIprS6g6EI1LconXR5ZEy\nm8rwFREBXe3e9ujE0ZXC5Fiup/G0524ONd1I1ivroT2C7otRQ2zB7Y8DmE58\nGz79RI30EoTbLFhFzmVczhXvGRECCNylBq/xjKrRlSUYx9n0pzqCVqAwmNOC\nk1PSasviOooedl6yRrq0r9zSLwSA04DV4QJCzTa54yMy+lWM23B0XnHICTYj\n0K7EX8PYfueDk5JGyhvXJHPAJiTzdywCZObYcovZxzhTlSYanYmVPcNmDJEi\nu9NP0HHHhi+ZY41ltGjCKtlh2l1N4JlrYaSWF6eNFZ23SssVqViXQ0OV5qLG\nr5Y4pAU6DH5w2i09rPdvGbhtnxXAY9iQoFpP2XpPhC+u7TZTHfw1iz1b0Bfc\n8qWKJA5K0dP7rf24eKc4sXWnujtnKyBkfet/viHpphCQY5snVUtY5G0JxZPF\njC7pPvHL9haTPrFn5J+P487GfM6E+CLORMoJmIA6PR5hAnD8+NP32bh6elhG\nlATMD3qBDa/05LRCy+rqnwbblfTkpyD5xmEoK3So/Dkf4cc/SndCao/zQsE1\nzYfeVjR+iNGTR6uPyXie6KezoV17w8+rK8wUpUZYMBz1gwMJBUuLBbGxMlBj\nWh5c\r\n=8Ndc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFl7fTBk2USpV1+RjV9fO+Cdktxu4/xdFELfnmBVnrjQIhAMOJVBxjba31RrFnt9Fy6Ekhca1K96HMpdk4JgzKKJUJ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610026220-12874458.0_1610026348084_0.43037876275882336"},"_hasShrinkwrap":false},"2.37.3-next-1610028043-5b690215.0":{"name":"@xdn/core","version":"2.37.3-next-1610028043-5b690215.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610028043-5b690215.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UZXKXQiEJwmOMPZwHsj0c/TEeXXbvMxdSdULon4fyFMaeu/idCYMCkfzjvrOD5eqnE3MY0r6MjX18jHy5J9BDg==","shasum":"79606851c02cb7575da71f4a57ab3aa61410cb08","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610028043-5b690215.0.tgz","fileCount":172,"unpackedSize":662322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9xSTCRA9TVsSAnZWagAAOeMQAIrtehOu1Zck+L6Qe44P\nkFFlmKNCtJsE47A4IWNo0WKvBpGpPiAALZlxFNRrEqH2I3PpCmNMWDABC9ZS\nI1VjuqYKrubfla4UyGJ5jXXZyf3x33QCFsyZnMfzcOa2J0SLAARpmc48Kv90\nhWMwNuGBzqUDvCM1eaFCbq1zdl3Z4YOPdNzySBxLQ2Nq3JvgO2j7Mw4JEsLq\n0JWZtT1PhcVB5foc8s/MW6+N98WsWQgalzp23+KJuls6Uk6s5RNlCzYR1iQL\ncsChKxCcDKV9ug89brYxZ1QY4TI/8hYjNEJDWFnZyTAyR12HGGxoQ6jW6wrF\nckcjPVqs1Z4p1pDg4Dvi2HdK+bJIUIO3CuYe6GfOPOdZUUxPwMlawUhw0pTt\ndsIE9BJkP1Z40PTBFcr6KbVh8An0ev+yqXAUqClFmL6ohCCh+6GWdqV+JndD\n1hYcMHcMT66i8VN7nolVO2dW7ApqWEhRBZHn8Ri00uGMQPjtKbX7699xc9xT\nnlW2v1aeAA3MXBLrB1AdRlyS2rKYuoGlGL4GGdS2cGNzzGXBV3SKh3OXuYJH\nRFAxiSxcLaDrOSpN3yGoDS4s04QkrEre8tnPVi1S5m8C5iLR+IPoufn/AT1m\njLSfUcXX7l3k+zR1huASmHp45GieqI5geNGtyR2pRzaZoE1GthOR1TbUvdsZ\nXyna\r\n=YosJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvhzW6hou7tN7RiGY9sir86LxEhOpyOWHiCIhwKwwYWQIhANcW3V5TKVg1hLah2y5pu0HH/wG2TCi+TLpG5jA+63NG"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610028043-5b690215.0_1610028179166_0.48004198843932255"},"_hasShrinkwrap":false},"2.37.3-next-1610028210-894a1eba.0":{"name":"@xdn/core","version":"2.37.3-next-1610028210-894a1eba.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610028210-894a1eba.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IEWS7Xb1U3qfltJTQz335ONKX9aBAAbmzHHuwl+78T5SG7oZ43w7F6WPYB63l3qoft1tSSFEfzcj4gzHhn9uvA==","shasum":"59df81f73004d05a2c34f8b7f3bdb58aa4e6fa87","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610028210-894a1eba.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9xUoCRA9TVsSAnZWagAAPFwQAJHJ+DkrLRnVhw0FkJJ1\n3ydpFBaYWMzS8h9DXmIo1IwjduFh2cvHxXl5OcBuE1zlVg8eFDWQK5BVdPnf\nKojWgGibCmF/dGqboHJBrWA2vyRG1AXGNGxnJgFRNhNWjVbkff8gOHxhO4FF\ntsuM+WIF3WcHEeuN7YnrgoqHrggBZ7YllmqlUvFzFRbzOa04vmw+tbN7PMvJ\nJM4Lv56YPx6NukJbyBrNpp8PcYVpmIxzdlOAyCUXvpKI10k9Q/Ie2+kz9NR/\n8SzKE9vykr7nbv7YVj3ycNExAeYplxRC+uxVY7SG0enAD5c5ysjuFtk5dwU0\n+WnS95wuOe60JprJdjJ5eQs/Fray45mQnmypkY60UobmNpw8KZgYNLXoSTF2\nBlEZcSlE42f0DVb8qgcM0pLcXfghBdd/7jGRFuzdRJ5HZEakmuzX4y2Sx2on\nxi0FDjgvsiTwSCuUYBG+0AGgYyE8xvSLlK2AERM1Rb9wkkw7oRfWYBLNt7rP\nn+16Xf8d/cM6T7w0h63eE6vB8RVgk73NV+5OMsB/+i7GiMhhWUv0sLSXk1sk\nu6aK2zED4tvMvsYQpe3+NOjjmtV4BlB9a18ydHXOVLJ1KVafs7535s1qEuws\ncaPcJM7U9ceRTNbd75ULU8a5mI/5Q7cvvpJ/6mPL/RfMU+5o9soJ/Udd3/gT\nk0fH\r\n=WOzK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/gphRCaOZQEmkFo8f6YJWoUdkJ4t4FvJLNZa5xl7WBwIgANENBtqsucNfWxrBbWanZAsw1eh5QEhM0v9Z11jnCUw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610028210-894a1eba.0_1610028327780_0.7915609638276022"},"_hasShrinkwrap":false},"2.37.3-next-1610029354-a9cfb447.0":{"name":"@xdn/core","version":"2.37.3-next-1610029354-a9cfb447.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610029354-a9cfb447.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-7fy9oP8Rc3HDBB/eFLn5yUfZmSaUIbzWxzDM3ZNjB6UeUHMNWsblFJdlwjFoS/OvlpBXbeGsy26gcRUTCLJpOQ==","shasum":"9f27251996dc528ef69f09083a4e579a259640cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610029354-a9cfb447.0.tgz","fileCount":172,"unpackedSize":662322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9xmwCRA9TVsSAnZWagAAOEcP/17WiPGcVBNSJFr3Zx34\nAEBYApDJTMi0Epj8dOV8uDVZ8uqIbLtXPGmLAAALzp/79GXWpy0VL5bdNepw\nsoFE8FIhENvnXeNugVyWxdbRBLejK5PPP4cD4tHYG3l0120s3CVjfLF27fg6\n/KKtDj4c0a+Udrpd+8MfO5Le1CWI9HrUvb2j4DzRiBydMmjKORq4YmNSoHSx\n9YiRQGn6qIVZjr+Z5Tuj+bj+yl2Rhel6R1EBMyHK+vJEJzJg3XdOpp5XX/3i\niilofcLhkNx4nzcCBY/7UjlOTFfDqHTEzlGs2q4qJvDk6+Nyg84J4MZGOX/w\nhw/aqI+ZuruVXA30Spu2kgs1GHE/9cgOOJ2Lu3ebXg6Pf2szNyvkvFqErhNI\n7luSyMueNkRiQrRTT5NRu38haae2bQdH5RruFgJlAJ2mWwnqGxhR9eiT9fsJ\nOgX33KVFCPK5TOI4T7lGJLYxmtpWF3yzjM1kPCYeGLzhlO3ZlTrPXEBzdfZt\n8oT38VXIu2f8xmpEoJ7XchFagLQI+i50xWLZeggHFl6sWwEPCB6tu+ZNUF3e\nWOl8fziTmYWrGEXhSjoWQnIzM8Two1Qoyd3wsspHuYgJgKJEzIZablUG7/d3\nvToGLlMK0s8a3x49mqC+OvzDL8jcC02t5Aw8k7S1FP5LqVtb8Xm80cCv05Wu\nzh9f\r\n=LWA9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFeWsaCoAU48bd9CzWvHESb5rvhiDgV03aRmal5EW027AiBzqdca7JR9GgcbNImS/noN/l9zBXNJ8irgi19uX+atJw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610029354-a9cfb447.0_1610029487307_0.5140424061230386"},"_hasShrinkwrap":false},"2.37.3-next-1610038994-8d640126.0":{"name":"@xdn/core","version":"2.37.3-next-1610038994-8d640126.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610038994-8d640126.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-cfD3FpcKtNJk5n3j/2of0NiamduHbqn/IFjqOAIXhrwbXGLF0VrATYHVHt3FP7CANJmMfTu5wTBLbXLMZj1pHw==","shasum":"ffa6d648603739786eaed60046cde2aa0314eb57","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610038994-8d640126.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9z9WCRA9TVsSAnZWagAAgm8P/0yZQfIl4FOlWo2ahHvo\nFZWYJDH+JN+AKhYxsmLbuz+GYoso1fRfKhGK/fP7k3D4dtU+qyLsvJYnMJwG\njokipAopzksMAQN54m4NQZJiF/QIQwvShwo08Q6GAGOJjg82GHzkjYPTMJaj\nCfLzJWPM6HwP22tH8KloJYXQmq2epTOirWqurpO3/Bmig2SsgWWbxGau8sUA\nbwHqkG1C1r9xyh/B63zNzIBmWhEM6NW3XDqX/0qJUeC2jlKj6JaRUhCj91eB\nKXPmoKPGhSOPj2dK6k4TTg1Av4IPWTGHxxSkIWRT/YaOolMgCaHVm5jKFAXu\ngxiKQPVpkt4oayPbMhsoAwYq+dPtwvDRRWU0jw11rub4HGD1DF6BnFiOCYu5\nkPbi9Q+Jt7ePIw9NMN5bRuu0+etRvFOlaLDhOw1+mAMMabHovUTbcArGDqTZ\nWgI2+VtMnf5jWZy7pnwbPwl/t0PT7BVSonU2uA7d9qFJT6OqTbkAaImn4CMA\n83R/iOJV9VYCHkXQuADBNlDQjecbZshUrONsp00UhwlQYJrucrMj/ltAs02A\nAIxMNuSc019Hde0ypcDcuvrOv0zK0R9SIp12kQ/0futL4yjAkenZQApp4Yuo\nZcSdeS4Tw6KdZ6hhsP3Ty63MwFZm01YrPi5lndQzWs9JSc8dJaEOHguc0MmI\nDDA/\r\n=AUbd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBsXdAZ2h4yJKLHvPWx+kDmJJKyRSoUEBLWYRVMstfUKAiAeXvLPvcwfAHZ2FH/q231DwlPfVtJygnHFRTCMXzMBlw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610038994-8d640126.0_1610039125343_0.4762939429634614"},"_hasShrinkwrap":false},"2.37.3-next-1610042634-545f8fa7.0":{"name":"@xdn/core","version":"2.37.3-next-1610042634-545f8fa7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610042634-545f8fa7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rhcX4Jjst4KsvtmaxZ4yh6WmR8CWKoyk22VbcjCFz6MSP92Qzb2+cey/CrzxZG6UeG5gSFhz0omUPBqEctczbQ==","shasum":"2c989309f882b30657b77b99743a4bec76ce5f97","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610042634-545f8fa7.0.tgz","fileCount":174,"unpackedSize":663770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9019CRA9TVsSAnZWagAAmyQP+wacpZZMav1EDz0KCMHH\n3IHLIvGySZRGh63I4gcoQacbkJkoWLQg6/xNev0uIM8SURqqRfHiUr06o59L\nvwXtcx50Yezzhi1FnRTLk+7eNM8LMgDyEoOL2Oibt6Z/hFuvrT/kELk4D6FH\nCMU8b2KEUTl+UcEKdI5s2U2AzPJydSovdgZDzzbbTaxQbra6uM5MU3slGBIc\n4blawi7t5v4LQ3MJXDq/vL+t5jcXRj4etl+vYXvF7/j25g4/FNff6AC832eN\nvkkvS4npA8+JRk95wTzXH5tpGw6sZHJt/YjJ4DJmWXLNjolJc/3Y5dOhVgrt\nKgRXf0+r2s47WCaMG8c3K217fg50gl0yxhmr9KrCk+uVqCAmjwR6O8lohyjO\nkwqkEtcmAI4QLHFpl0GEWObov28ow3waAyHjmAftudCzXurD4fUWKXLLjRYg\nVnS3EMahcNc3YYX3P/tcIoxbfPsmTolnTyX9x5/VmizVRD6ghEfHewmsWzuy\nHJiI9fpd+ojQ/k8Bsq4YUKy/kJbbXj7o487qRJUYj8OJk+qreVTLf757birW\n39HOKIzZwqYmXVkjPceBKJ8eIt2ZNGfSkxmqY4jHmPkV5NliE4WXGFiDkKbp\nBlB3iDBSp80didjn40cXHaZjcFay1sO2XkzOAy70ISettbmn8PaU6uD4zitS\nNo6o\r\n=kl21\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG+i6Ut7XsLH3u9YoEFv1swlwa+cGMAsHQOSnRci+lz3AiApVf8uJ8/jxdkLH9uzvfF7zQM6XaSnaUfpyGqU+L34kQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610042634-545f8fa7.0_1610042749214_0.7428781175579398"},"_hasShrinkwrap":false},"2.37.3-next-1610042728-22ce179a.0":{"name":"@xdn/core","version":"2.37.3-next-1610042728-22ce179a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610042728-22ce179a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qPJ1WvyXIk5DDkUKrMdgaOx8chySMzQFNDLuR2EX6BiE6R2zgUVNm71PVXPM/Odqw0Iq/lWnYsWaFTEYtFQGZw==","shasum":"89d09cff4655a66e788bf47f1f453ab9cc25adb4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610042728-22ce179a.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf903zCRA9TVsSAnZWagAAVV4P/iE4zpAp4W+aStQcO75f\n1KzCHup1YhGU6Ko3aBO2nlTnH9TyIX06QOspwi2pGHZuk8zCmMyDTpsKeXTV\ngCq8BlNpNM/xgbJw1OZD0Pm9TYck4R6WRim93XcHPp/PnimIfOJsMV3zBvl5\nbB6sMi29PyO8+a9WKLb5fDvl2Z6hkYH8tLvGfSKqW8sj+M+UCzr5slo1bieX\nwVRIifvrOu6segqSj3cRRCDx/lG1IY9dX3vNySdjj/qhORxSHbuXTg1WsXAV\ntd06jqD33B/gpdioQhIV8LIb1PUM56feI5U+5Qnvj56d1iuAZsteLoaQKN6u\nVsE6mH75YPwaNrDvrZCS6pcorW62737C3KdEgZQpTGsxHowhilkfOtzmXYde\nacD99vAsQnXOFNbsCMH3znLugxi8W1hvDdSgYNGwLNF3ySm3qZdyl1sWGJdQ\nqoarKO0OLCJxewbKmKG/IfvCpZTwDwj7wmbnKQbkEgf2+cOtKjktW/sEF2yJ\ngrZuoJqw+SrBo4bQI4VO8/ZcooKeDJsCkTcozegHiD1LW0iq4Lgh1jzCifHN\niP+bjBzOaU7Ve+35M+Os4uIYLxiq//UIaZVimsoTq1c+MIszwvqlxETGURfm\nv+jP0ecd4KfBFbrVx1XxXUC7gdySusLNMFpODVM+6P+UB8S1clAfC0K+KQXR\n0oxI\r\n=QSlS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC9KldgrkcEX97MyOnvA+yWYFMhsuEP4d3RL0MIW/IdDAiAf2rloU1MbpmBcvNRCebxXXQrls5HIqxnxTvxetNxoeQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610042728-22ce179a.0_1610042867310_0.9569875946461752"},"_hasShrinkwrap":false},"2.37.3-next-1610043956-ffd00afd.0":{"name":"@xdn/core","version":"2.37.3-next-1610043956-ffd00afd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610043956-ffd00afd.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-N7muWfqwRqAAudu3lSw5LrZMRFT/WgdoSr/8EvtC+/Okf8yctahrWMk5udH0lLl6k/hYZMHqTn3xP5k/ckDi3w==","shasum":"7f930a7e296e5ced73054f459f8c57ed8fc585b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610043956-ffd00afd.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf91KiCRA9TVsSAnZWagAAW/cQAJQko3uNevr2ItmGcd/y\nD0Cpqnn+AyIP7wICACY+7Ki6Q+tuUC012eU7lZYzpNKgrp3Mn+f4oP8MQqLP\ni/XgNs1FmZt3ZOD1O2dH/rnaggGfoA6FYyU5IbNQkXZONHJHdmcoB+leQ0sT\nRdiLj1D2//MHsnWZBsvHJXKQEFc5m82RIB6WYzQc87X6FBVGVqV59CnmrSIO\n4qLw3+WX8AYyuFHgjSv3eRHk5LHJxAwFZNJ7A7Hcgcuv6BXECbGyBNlAN3Ek\nacaosTyHrBGVVQCFTbwifVRrPXQDBNY6sDwgl1UAUlCkuqzo1qc2TboOIVLP\nM6eUrfs+vBjzoMYSwgtueB6W4FX/xJC0rsxq5XcoCFQt3F7CWpaHBzKvRaNB\n9dpnYNuje2q60bGkpZW9vTBAsL/2e+PKlZpP1MyzSvzBwkJ9xjH1scI5iEAm\niHyv8e2er+SC7r/KJPUTgIQ2nlx5CJ/20O6pFwghPhIXX1Z0qSdLw+2bhzP2\nYiNpCj2iXJ9ZoStNdWfsm3/bHZ2Av5FEk/XVTwy/UFwlFpo0odI0/h6WUKJ+\nH29MnGW10ynkHLCe0MAqAx5+MGrHAy9LtCq9unpq78DBoyn1ouUOwZt+f6dN\nq/and5HmQcNh7hek5q/s2qqM6/BczvVCsTHc3KSdTYgL/ggSBW/bQyslRwfI\n88+Q\r\n=OKbG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA4uMa8x9F5rlbPkteyQ/9l+BPCE0XAUB5GBCvQFOll/AiEAksthSaK2jc7Pkog/GbKdASdZiybSaJclRkZ7QGq3IvE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610043956-ffd00afd.0_1610044065401_0.7472183575773659"},"_hasShrinkwrap":false},"2.37.3-next-1610044087-6759e43f.0":{"name":"@xdn/core","version":"2.37.3-next-1610044087-6759e43f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610044087-6759e43f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bpQACCH7UyTIeVvQ/MH0qHFB4ErLsN8NUj4IzL+72dIYhlAn4qcE/KyFIyRI2HprAVXaaKbKnuunowXxzxru7g==","shasum":"60824d762cdb5303f44347fcac03117979263afc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610044087-6759e43f.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf91MoCRA9TVsSAnZWagAA+AwP/0515SxKRRttcvm1gytO\n+EVGalvlqr5UjA+SnvP1/zhBfxY2TtPoNCyhS94he4E9qAlbYPPqYnAAXQaw\nOtlaJQAovRZ+Wz6fbj8nHdvZuki5EUm1jx8qo4i4tBkWRjjaK9uMpFC3LfWr\nCBt8Gqnmh+HzAlWk6LwnMp1J2xLwMjvhEN2tXibJfzCDJQmc4HQjeOWTRxj3\nsZ9SesGmZd3V9yt58WUbDgrAwjkyZt7OcTp20EpFDpUpKRtWKrEujj3sa6uZ\nxOg7x6QS/qKGewXeFNM7OHbmwocuu4WLoYoe0KzrVjyvbeB6wUZwqa4NOxwy\nxiKxPnn63TT2GhtL1mdaXitASV7zO+5ZTZ0+rMuKEgOK/bhLMrwWicjOEH6b\nRrlu6CT3x0GrDkZIwiu2PheLZgYjm7XPrMfOefP3jnlFahATjvbEuGEZE7G2\n/TWdPqn9TIfunZRXv1aYNNR//xaRDI/a65W+RLgQBNQpMYGo4vxzAswjJety\nmTLChpOUHpdF8QjpnkPsOStyDzMHtf1W3tvjsvL8fMM8kIszZThwmVHqj6y2\np4ZvYqPWfR9ya4RU09VKA1Zh08SMwjcSe4smiZ6gxVRs0BbS5ThC3UHh+K8S\n6xM3X+2XUINx7+Oi0FSBewdaxWXX06Y1pDLNvYDagWcY3hp8Lm21QaZQuOIP\n16En\r\n=d4dS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcxoCGOd36AeHaLx2/oJFUjdsAn9v8yFZosDcA9RqAyAIhAOVxCZIFiW2DPoisZaQZPTcNccbCAQy1oP87MRGm87Ff"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610044087-6759e43f.0_1610044200191_0.3857337849607183"},"_hasShrinkwrap":false},"2.37.3-next-1610044204-545f8fa7.0":{"name":"@xdn/core","version":"2.37.3-next-1610044204-545f8fa7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610044204-545f8fa7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Ees9rIsPMGCHow38F/P5rxAWGvZyCrzbLhBPYfghhIO1gsbiqwxALKmz0pQ0/8qk2YxdReqdpHhRJwdC9iuSGA==","shasum":"04b081d600c459ea6d5c612b17ea9172c4773ebb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610044204-545f8fa7.0.tgz","fileCount":174,"unpackedSize":663770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf91O8CRA9TVsSAnZWagAAir0P/2DTH2GtYXzX5m1+aSRW\nK3KmJz0nej4wPxK/5UHVddTlvhx2tFYNkFTqYY0cBQwdXMOn88oIesqG/9Xl\ncEXF+St248qKH2b7iQAZ0GHftfBIVrG3vvbiXO/tFuc9ncRLboog5pD/3aKM\nGz8pD97ACUnc4lpq8rMxEwrRpevomORfsU38rW5joIMNHs2JtLI0MGH85z7p\nVr5PCF0RUcbno4aZCT02QNTfFLpZOrFL/6jKv0LJLD45AoJWI1mc8qK2x0na\nTAOHd0VvTvQJVmb5Rz/d5UYmxtj0d/GFCiRDm52jpfRdImZqso0Y5KxYQWRc\nwU0QFvMXTpzp61EFDEmS+ov0p3frDmMDomeYv2X6JnFQLO2McCpWCJXJSHJ0\nzKPaRRnMcjuu0iMg3Y/f89SYuiwQMqmFMhviA7mz314GpiBlRgTT8ofO/y3L\nytFGI0XjVdwsl5o+QXk+XdfaBo9DuC7qZlmVeFwf1ibLOWnZ5SqHE37t17r9\nHFYlYLCiPgXP8O3ll1lNQtG/Wq56yCLqWOcQL47l4TrRmh36MYMcDm7PcOAY\nXIB/dB4r37safrRxiYMe0hbGzSeMQ4tkvCNzQshRFnKUYJ/4JXXYhYpXXBNQ\n6tnNARtoSlU45W5ARlfhvZB1g+/gbe6a4EmzIXOenEmjV0ZnEMdGPReHfRVb\nO5T4\r\n=QfEi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlFGjkSVVnAlNemsL1wTGpdSnNHRzlHfoN6kUuX+bowAiEA27sy5M2gUsbhAVjbp2WuUDeu9SpfzuK7XxkK9UN+ZIo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610044204-545f8fa7.0_1610044348246_0.41306837041485966"},"_hasShrinkwrap":false},"2.37.3-next-1610046738-ffd00afd.0":{"name":"@xdn/core","version":"2.37.3-next-1610046738-ffd00afd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610046738-ffd00afd.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-mN6g5VZCye0k7fgpKgkQb+mX9jhSg0tfVPlVHpzzZGjYidZnaMYhGggQSWlUSmJFZFDTXiC0IyoiNERIFHuntQ==","shasum":"634d7a6c9c573de813c7062fb9b0423aabcfeeaa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610046738-ffd00afd.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf912ACRA9TVsSAnZWagAA14MP/0sfOYQ/xw6Amybojjk+\nCBWr/yuHtSmVW8l2Rn59RatAZ0njQlyz9my2eLYoD/XOnK+tiSHmYS/wCuYT\nGi8mGZCm622THDbY6QJYQ4VtLMVtN1woEnbIRYocw2nUBEN68ppYJ73do6vj\n/Fiaizl7ziEeyjXwvqeOe3p2yEMyAWC+IQZrlyUzhVKcPnXErkNbKHyZfQCL\nHrl0tgbo9LZ6BW+AY78bXYlWtBlPr0vv7b93IJWledxo+VHjK3tQbZ7MLRt1\na+uSIxb9JN3oZHFWpSmSOm/1we5LtmxkrLRKkZdEqa8W/cCx8s9DCbGbI+Af\nxgy/0gQkg5MzfrinCGmBadxsALBHQ/udQmq594GEbuODviLdFmp15mf20Qw8\niwCSP1xc1NAC04+JI3B3mg6oF8L5uw0r6HhkxgCvAG5HkVLrborbnnR0OO8I\nZ1JhLdTvW1mKlMGM9IW7hN21zbcqsfpCh9ttx5Ws7YQElSvyyI84Gz/lQlss\nwag4sCzkhEYC2FcmLeu97Kja1isQeBs8YaKsqpoQHHdPpWo5SiE6L4t0bwWX\n0FJedQrrZQrwKoO+KVM6lwWcsg702vJ3Il/x4/qmJ+/PyCRBoOWWdQFHwBJg\neF80gpW17YTauHw9uyXAk9t4uaP3wBOot2/6NUB6ULLov+jrpTFOOFEaaKJM\nKcnj\r\n=J0OL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGoNepGuJzXoAtve7BvSg6e0h7qp8z01NXS2Kj3R2NmlAiAzAXNqYE9jViS70a0CsafgriRasdaSCHKPJ7BPwvtqWQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610046738-ffd00afd.0_1610046847564_0.338184183185712"},"_hasShrinkwrap":false},"2.37.3-next-1610047463-ccbfacbd.0":{"name":"@xdn/core","version":"2.37.3-next-1610047463-ccbfacbd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610047463-ccbfacbd.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-a3zXAwQOfgchgwcciHEE0FmqgnhOwNOHxCytC26uCYii7+v4vqZIAX+/ji/lfGvTgZgtoMZ1V7aRRXCTz3ATRQ==","shasum":"d0d40c76e07bc50922d449fe6b4d609d6a464593","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610047463-ccbfacbd.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf92BiCRA9TVsSAnZWagAApP8P/Awg61pohcpCO7cTbCwP\nvRFkIAv4Rd8pdor+VQYH0HuhvNF7Uz1F5jfN4zJ3ZKLHJlsndvGnCTrc/5IC\nGbj3iTH8WqRMFG4rOBDNNov9HrUSeKJpqj2/lJ/Ld4Es7r4/AegHirnpZp8A\n9oYMHsoAj/Vr5goStFh3fsOi1PaUkEOCzostOS9n/FQxDOzwOuGyYDE21rjo\nb89zMjkAJZ+I6tFqXlAXOs5+9/atzVWpjnPe9zfKfL1qTIHYGUjm42aRP+2d\naxEZVRLs4F990CLh3tEPwIrT4hCi2bqokyGFhXiMfDpnVMNVUrIeMADfNaQa\nhnhLSad6WkEbNMOF0WJLKiJHIQtzNwZEBzJzce61g0012mizq0YVw1o8Vz2k\nMISSOI4UAQtJ6gmtArY/sa0RI6fNIE23nOoz3aCnOXHafPoyEVN6ahCwhTi8\n5AMpIVXGsSWsVu7+yXDGiiJq311CHwm6Lm9NAk9wxmK7qybjKd4vTqSy378r\nBVwOQ5HRe3wND9sP4cUMSXhwJ8LSabk4s2V1SvxLJBENXZxt8khm6kz1TYmv\nOmjgV9HLzkSe5Hg0VQdGRW/scv5sEPG4nEYGt9LsrP66NH19EcEPx0i8vR61\n9kpQ7UKMzECQiSLeKmwfQTxmuILxKYNQ/HPrzNJ2uIiG8IA49RFGt8Jgm31M\nUSAt\r\n=WUH2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDAFWxV+3L4g4OWflxMMjSQai+j2Wp1km5lt8ZR5K5c9AiEAxWHh7sWfHw6LZd8iXbfGl/9+3oz1HhskjFKbdLLqG1c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610047463-ccbfacbd.0_1610047585546_0.7361222574488357"},"_hasShrinkwrap":false},"2.37.3-next-1610049298-d6ed1e81.0":{"name":"@xdn/core","version":"2.37.3-next-1610049298-d6ed1e81.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610049298-d6ed1e81.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-PXEHu/xtRbmDYzcwbGNHKYIMV5L1HmmufN14qzQLDTFdBrOM1zxhzlbFxOBcrR6Uhb5vr3l0ZhdR4CgR8LRP2g==","shasum":"a22d76c4ccb2a0cc5733ffecd2360719117c35e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610049298-d6ed1e81.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf92eaCRA9TVsSAnZWagAALz4P/2fmXDY9QkuGoHAsJQWn\n9F3QC3qlRguDCxxxwAJq8BkITpEezGR+OyVMMVNI0r9IICcc9TfTdTZgBmy6\njPeX5eq2woipSenIlN4HzJZUk1CARvi5HA3vcCDaZfkZk2Ccu2F+qK6YDKYv\nkg6m5tP/kFuLzofy22X43vrVKvUhiqHB6nxHpGe4VVCIeuiFloraUp3pDzQI\nMW0iox60jgreaevRKi4O2RzfhoC6sYHoFwJ0ZRR4epcOfWqqTnzmGTcqyu6I\nSatORFOY4Ek3+/RXazsxJ8anY4WaZCtIHF5KV8oLtK+pax9RGxQyOmEYnhs9\nqofNRtAWq4F2xZuT2P8vJ/MiKhXQPB0oTqLSDKiFaaeODqr1/Hqjms0RORfA\nq4xi11pnxShQjMb/zE4ysq6eRAEC6A4PxDnhzpTW5LGVPcqdQteQFeA+rOPP\neRGwTXTojE+zaQlU9OSe2EgJQGHSjd+57mlUuJYpxxBzK8PYnfad+cKBv2FF\nsc88TFMKjXvPbWyW/o73kyF1RoRfR9klQQbWBE5WwZvjGuuSgIvt17OD6Znd\nI/p2C2KXcGwE9ihk6ePcXYvreQP7kup1RPlSf3GzS2A2R8lYLXH9COZqUj/V\ntuG6YoB/bodyPxUVwvAmRG+oCVJyeiDPykSC3DkOLedNRqRIIeEMxIVbScti\nQdrk\r\n=56LL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVSWSx9Hcxizgpt0nA7D7IVz8fiql/R3viI5rsfBMPtgIhAKx9qOoc6MOPyFySOWRD3xS/IyraVLtXPgkZcC6YuEiL"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610049298-d6ed1e81.0_1610049434379_0.4802739605145976"},"_hasShrinkwrap":false},"2.37.3-next-1610049394-72bf35f9.0":{"name":"@xdn/core","version":"2.37.3-next-1610049394-72bf35f9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610049394-72bf35f9.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-HAKETNbIfbFLI/ja/HhjUkgMHGlJDP5bSEfC5TLgVIVrDxyiS6JKMN/z7Nkw0Ji2tUfxUSKy5D2+OvzgKilGdg==","shasum":"2e567ffe5e1202e2070613a780b72166fc4698e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610049394-72bf35f9.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf92fdCRA9TVsSAnZWagAA2v8P/j/kow8zmv5DGm5tKhU3\nQIBiXL2CsSXwRLPesAtNlIB9BAxA+4W2gD1dbhHUWu3S/OFCpaP2IwgUkefZ\nvU4FKWkNFESwCEnRJzITfhXcnX3BPvE5EtNxQRDkBMedbyU2vcMUowed9BrW\nYnKPQd4iczAFBanA+9uOmpz/35/h4RVmaK1sqzjapCH06cFacEh66vKiLHdl\n7gf/93+5lTflTc1TUzwKmuIy03MPh3i44S503AUiwgLLe4emuLk1Qzr//Ypb\nlHp5hMTjf0ie2MFeYSQnamDelPYIfRU+Hzv8j3+JB0ppANPsMlySLkZuH9P4\nqBxcAKL2gEB/kHyRfcw/Bmbefrxq2/EJmos7s5WuU5qVKVqN51GjqK33505A\n/J/Rnt1KiMCni4lgJMWbX/I3pSH8NPgiP/aD8n0HFRVbYUM5JUKorxZmAqJN\nzqwicJ1c4rGFL4k59A9+0moUt4ENa37e08j0rRUXwGBVgzS6dah2iYe69yhZ\nG9zK1dUnfVpJsvfBzlTHKf7kPfumErQuKI0nnW4vAqWwrchCU50XZFQ5gDvN\nwu5bOAwc4Byh5m4hWpjWTImmOPB/g8uDjG4/8YKLYG26fiJKg+s9Q0CwLfjB\nImi4LtY4vh6dk+VCV1BnRw+BvYY5sPqdiZxAXGw6Ob+yo/07bN8Wb/O84F8D\nX6DF\r\n=+gVA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEKmtYo5/ZYBsh0ZSSWjokcNqMKpYqeJb/t0ZffNkaf5AiBigX+qtEgHWAnoJcVd02U8ARVgLhl72lA2K25kecHscg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610049394-72bf35f9.0_1610049500510_0.4208827216648712"},"_hasShrinkwrap":false},"2.37.3-next-1610054495-1a29e48a.0":{"name":"@xdn/core","version":"2.37.3-next-1610054495-1a29e48a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610054495-1a29e48a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/nvYePbTY2JkG6GkYwkhTfHlw7Yu+gCdlqtGyv+BglLur0cROMKKbJvWWrL1RCEPu+yxnfDnwR3TmvoLwcpH1w==","shasum":"173cae8133f837c58f91388d756c8feaaeadf992","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610054495-1a29e48a.0.tgz","fileCount":174,"unpackedSize":663770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf93vaCRA9TVsSAnZWagAAY+gP/3hLwT/c+Vv2tEkWFsc0\nSh+CptGvyK3DXNWiWCbxs5YjJAv15R4vC5dzKnij3SODYmqpwx51nfwr9DXu\n8CsFwOs08EqoVLjm3/3QV9ijTzKXsqCd/Sk8c8JbPRc5kXi+usEzDiX9xbMd\nX5iPCLVkqJgDh5I2xbHy6Y+48QS3DZxLVVVL8he1Vx8CW8lCu0BVpFE02dvE\nKynvtl/w/Gj6LmXAVSPwP20Gb4Ldic2aRIvztlyuzlRAbTcPfrKQbJCBp6SL\ndgkU/kkOlDYMU3RvdUowN6m0lfTOEEStsAj2PKbuyyWMg++KrwPBhSm2+8YF\n7eu8YCPcYdeF4thdr+HilGEVpAvXcbZ38h0PE7RYQW+UWW7ni1naaBn8JYX/\nznlvu2GZLaRCFILo+6ryO5YomMCiPpQpV/jAFVhFudCCRaamm2v3Kt0ZGSfE\nq8/RUH1D9aahJ/GHvHFgQXMpFUoR0o91LlsSjNT1xzPzv12b/VN0tQocU3nA\n8OFRoNqcg/fU9HKEssOYeDCXINMmNxMEYOULB7wyK5YcLYtik+wYiLY/jYCx\nZqPgIsZrgEWUO546o7GQ/155CkB0H6Xp98+jgErkXnZZZVasplY4aTE/vrR/\nHKg+8Z5wS0nu7xeM3k7jzEQSAal77si/zifexOcS8KrwUOqiY+4SrPGJy9xq\nf9+C\r\n=5xvs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEk6cqkXY90zIuUrLPRQu25cCauqrhEREsXHX8QH7bl8AiAUoljSldbJgb12CF9eKmmyQIOFvREonPDNpwtTn9zaRw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610054495-1a29e48a.0_1610054618028_0.4259841756644416"},"_hasShrinkwrap":false},"2.37.3-next-1610054618-72bf35f9.0":{"name":"@xdn/core","version":"2.37.3-next-1610054618-72bf35f9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610054618-72bf35f9.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZngRuydLafl3DOTSNSyxOgHBC3b6Sp1WSqNfm5KtXIaM2AaRwNq3tNljyff7UsIocszwTGKEqWA3He1a9tnmIQ==","shasum":"943ed01458992c559dd339642bc5bc37d636ab16","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610054618-72bf35f9.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf93xeCRA9TVsSAnZWagAAiNEP/jTpcw+FpNUg+z9vUAY9\nvQ0w3KWwQh1HiEyYHNP4oOYODKHcKiti6WXANdXm498cDkn7Y/zcaqXon5dB\nt3xEQajGLmUyh5lri1lDeI7Fp5gTH8E1QNTAn1qCcmT5ITdMgzQjuwvE2xra\nv0BvaiJauuA3phuS4ImR+B+37RXyyHTpVE8Jm6hikTz7m6wSjWds8BTcyuyS\nBHBoqdLgfrkoWP/DquhaoIj3oB0cNE+54CfjwVLnXUGSN94CTnTKLxjzFGA+\nhB1HbSISY9+70f/jwGEyLQe8Ajbe6rrjxvlzzCPQ6hflEUk/1FdOgXgXGffq\nErgqXUoX+MoTVDXO04oymhOYChzq7Mj2lOcewy0FoKyhShXi4XK9Lm8I2sh2\nxcnpEhlqqKFFghoa//b0pQflkGFuH3uX8GBZuS8yY1QttMtNIiWPRqYvImI1\nZA+e2L5UOtERvBfkeX/5r6F/hKscPvemq672efNP6uXN7sGL09mzdkILkDw3\nZL5AMqF0N0217OhvM2qENwRcmP52VvraPt9QjkBQdjLff3Q3/U4IL2F1bQMV\n2cCs4JSotkVaH4lZVyHepotQef1fbT7nRwxeX7Z42axfNRymzL0BoIWbCXVl\nVNC2z7Q0X7NIgr5IqrIMX5pRxgvNQEqEtNz0pFdGAJTiZRG5G0cFk++zCa//\nYPts\r\n=QNAw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWKwsR0HT7vn3/biT6EOhBRC6McJg3iBvlC4DCQOEwKwIgdRyXx6sAZGQllYQS3TyeruImEQFNqgQ38PSjkfsTOzo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610054618-72bf35f9.0_1610054750301_0.17351949127521737"},"_hasShrinkwrap":false},"2.37.3-next-1610097679-7e177d32.0":{"name":"@xdn/core","version":"2.37.3-next-1610097679-7e177d32.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610097679-7e177d32.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hgJvYpOBO2O9MtMmfdrccEdXsqlOWXNz0WtcXmHfEGsD5xk7WYgJekGz6lhq2fpOIXrYwikRF3iC8JMO96mJuw==","shasum":"78d89965c6f194d548dbc394225ca395af942347","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610097679-7e177d32.0.tgz","fileCount":172,"unpackedSize":662322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+CSgCRA9TVsSAnZWagAAFJUP/A0kUKEVhFgkPPjRfuUn\nSO6pqd20vXtOioR3KmzLvR5bYQNVCbwo+zSDzYESkLmLe3BeKTZDap+EEIMD\nfN8+u0/bBRupT1O+vWpm7O9UZVyWsi3Ml1tkZhMGtZEvYhQM7izjNf/Hk9tz\nWPh2nh6zUZtiSlzvsRzAkq0takXd+9PLJaRrsLHcMhkjXDMSzg63DCNNpzbu\nPbQka8enjZ2XEo9iPVDfGWkithIxlakGGRxlSid8AsZfjEbU4Spw/V/nc6iy\nDC+hc1mK3o8EjbYoRKqdNexS0dPs3mnuXrPevcC/z/0Vb3WRhca2Q8AR1sxU\nkC9ZXaQ1Lv7ltu0xdGhIDE+4s6UQ+32xqRWTwr1GFu7zkFVJgk4plsEyWkwO\n73lkaRlWAPuz9pHCjRHAgGzxE7tKyG19SRso+ruOQWOZ2xqWWqF8HW7p+27y\njTCx2vbY3Dsw59eZFBjagqMJcxOeeEvEFX57c3EROVqLBWci/6UnSp/XgIcX\nGl5jdFpbdJoUv3qJGvYwy02u5yz27W4+FgiBBVKACatxm6Vetkl+nLX/Dno8\nuW6Y5EVFQt9eERUnqHXRP9JgXqNDmKi++LW7vD0GWThFMvMR6cObv8pxm4Cr\ngoFjYocz6SVJNPuWDZ99v7Ln5ElbJVqc02k9Jote3zlyEE42EZYkyDJu8Xqm\nrNIk\r\n=3Bca\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCr+KwaLKtfUaccbP08sMwY8+qiGXliM2MQDEdDf19bvAIhAMoc4kdk9KUY+ZeHRCTcsQj6s/12QwqPiOYSicT01+Bu"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610097679-7e177d32.0_1610097824349_0.8798646449264336"},"_hasShrinkwrap":false},"2.37.3-next-1610101938-92f5851e.0":{"name":"@xdn/core","version":"2.37.3-next-1610101938-92f5851e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610101938-92f5851e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-a0SM5fT8L4J2D0s06NGE8186dnmazadmkBWQcOnbyDEs5Rv4oik1F/hy+hOZZHZ6F7t0RwipU6U/Lq0twh+E2g==","shasum":"c17b8d4a10a71fcbde764fca0f35980001460461","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610101938-92f5851e.0.tgz","fileCount":174,"unpackedSize":663770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+DUbCRA9TVsSAnZWagAArBQP/issK0BOoJU9qf7aXLQK\nlZOe4NtuD/g4UNJbrduGZ1mIy+D06l7NRRU84+zRs3BaR+jEHm1dmzHCZD5y\nx4NnNtoWjIt8Fwv4U3OZBKXcUj8lvJ+UpdZCIzyhJ7twR3OS7GDibVv38lNw\nFkz6iYM4O7IfBIlNXIKtWyJt05eOw4kbnNaI1dJSkPc/E18Xap8Lgx3Xs5Ma\nFGT1WHE+m0a2VpzqIMKvRrNIYO4yvI0Eb2DNS4j/dQxx0jcZ6yQhZ/VfYM6H\nBIqNOINx1hrNtVbhEW2p3SvR+Sprmr+bXv9d6xkJawwjYNzmvybj4DZgwoGk\n1ghR4lVbHAsFY4DbizL5kUeLZ3o+XiQ+J0yyBh54H+M7hT3S7wyJXnqAM+fR\nl58vFY22WBY5MaO4MkkXCoYf7wYde1kgZ0nPVSDldoPOtIz5DEhmWK8rG4K4\nkwPskB91z5HUVt2HKL2FRAfSHF6G+r/qxhP5HIkmi8FYT0yqhxQWgeVNNopo\nZQMmDdv/fdt93SRwDKYpmcq4xmO5QrmXOS29YKOGCE5A2KJltl7Vq1tHWWar\nHoITr67EBvHwLrHeT/ifezOHttNk1XtNjd+K7JbUxXwr3n92YHFXkBfQjykZ\nMnTb7/hgaDR4Y0XSYR/acolA89aiOU4JxwFAYwptWBN9vCk2lfRUi0Lrlhh5\nYyEB\r\n=9ChA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2XZdTEdKn4BRVH2WtUqrvc3LtlSTH4XI/NVsnk0wRuAIgFvQA/1YLfhpw5JaL94MCCNsrWZJmno9W8czkfZOKz7E="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610101938-92f5851e.0_1610102043299_0.06298912286588143"},"_hasShrinkwrap":false},"2.37.3-next-1610103239-5063b792.0":{"name":"@xdn/core","version":"2.37.3-next-1610103239-5063b792.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610103239-5063b792.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MIgoG4gZQIHNnp51ZtAK/7aUr7cH4ELTM/ebItPsOP17OVBCW2kAh55cqj+B8gQni12P7axs0FV8M3MsHA4Kyg==","shasum":"c636b391c044722696ce2920613a1fc1f99653de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610103239-5063b792.0.tgz","fileCount":174,"unpackedSize":663770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+DpPCRA9TVsSAnZWagAARAMP/jSei6C0DAyh6F7rs1mj\nLaoPKO6WFBhR5CsopX86Szl8kdueKWLQzmO8RRUQKakeZZgodZyQqLcemqyu\nGKdTGgFeQPMgyovr073F4oTuyED4zYkDxDeOMYrm1McEb4fCq6tvPRGDcMof\nJ7eQPdlFpC4vKOU+/Fim+1Ic1QsSWlmDM8sSnLy+WPNmjObdr/1GT+x1YuJr\ntl39SmJfpG9rgJgSDEsnIWYTuuZ/KzJbSHMkLjhdJU99+tfb1ye0WezzZOcM\nT4GBz6Fng0YCQCwvS/P9eV7y1ob7j1F+Epu6YuP0qqdOOJYFxh/rFdkfe0tm\nAQwISdqqWkg1LwIRfFgFhgjqAiHO4cr7vDuY69J1/esfqkTVLZOn6Agj/mkF\nyPmK9F0p+kxufBSaJKl+GS9/SeXDnSgESkRSxNZVHaqYw2FGLC2EzbCpAjA/\nrm/ex5ps45uAfDZHn12PYQVw4YOOIWxug6ggoIlB9j7DU4blpubGBamMYw2f\nvq431bWtVsBdxvQNYDLycouJXLgBjTA5os+1xVvBFGqXlxzWBltwESWb6f1V\n3w9Np1jDOg28dqQeDnlVny7+PKHmgIg9KxjDACg+RL7wALIoBni88XI5kU8m\nfBew0J7b/MPim1B6MonhcRaESHR2+1vs3YE9RlX5WFesin7OwTgww7ii3VXS\n9NVr\r\n=ZwHi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH0CAwKpPzvxo4GiIUh5IfvbUPrpFghDHLPoSXwBpu9aAiEAhCZAqvzKFD4mIbztONxjazKoNDE9B/oBzv1JZPzmJt4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610103239-5063b792.0_1610103375037_0.05108695738260449"},"_hasShrinkwrap":false},"2.37.3-next-1610106325-345f8c0a.0":{"name":"@xdn/core","version":"2.37.3-next-1610106325-345f8c0a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610106325-345f8c0a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-LOoka0eRjWgu10lfP/6wAOK0elFw67nfQmS5YTGV1NC8ZUWXVdxSWvppW7YQl+kOijHxRvLSRanaCoqbszOeSw==","shasum":"519c87a8e478fd8f5250948522a107dcbbe6c22e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610106325-345f8c0a.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+EZOCRA9TVsSAnZWagAAtt8P/1vfT9jXPn5VkCawT7mM\nRNcTPZ7uStxPTbE2odKNEefJwCWV9CfgNCUbjAkLjd3j+weyF5WDmD9Cfxzz\nkjn18LH0d7ZqZkYle1njVoq4CuFkLFATpLScZ0XsQkFt08zkSCoBPSVX6fpC\nRs+8B+XXS8BWB7YGZqb0dgbDx+i1MDNFCn/oCO63PAT65fSVVRe8/MmGO4Iw\nqwNqPVhOaUdgL2hDjSWytr1nwyoVo1kSmNkLyMJeK/oHzZNi57WBNV4uc7JJ\nKhxzLbd7EPjMAsNvCbW5f6y+1bN0XxHk5TBSWILA3hpVYhH2TWCnkx0qxD1k\n86p4ozF2lnuo8y4wAM+QiEoTxBpiuUHR+U2XR71JSSzMJoME8CcNhq+YljeR\npA5o9fFdsDkeYX7VJQGKUORMUcYC49dVgxbmw3ojx4MOkpbPXk+fK2ndD6FU\ngCD9TQ1MKztyVBPlXgES6Q3gcE2EMZK5GvQxUuOZ4BO4+2GTXfA5BkHv/iKR\njAx90puHydzauvCSlPBKySe9Z2GvCSeqal5DYjiNXJ50TeciWg55nYcshLSV\nvadampnD0+/CtZgsnbUSW4conxXR9b6tjDcgNDWakd4NHcU3QGA26YZTqKlc\n3O0g2T3hZuA+5FAb9Jw/VRrHOh4/e8JRBBRBITQjJ/rHNjZqiJJUhipzLU6P\nUz7I\r\n=F+Jj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcmz8lrGdBgP3u9r4svw2OXi012lzg2IoqgXuDt2KaigIgLQCxI4Lc6z0iYm/bBOdGI49CKHI274mbqckhWeGJioA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610106325-345f8c0a.0_1610106445628_0.14415217886948928"},"_hasShrinkwrap":false},"2.37.3-next-1610108509-17db7ec5.0":{"name":"@xdn/core","version":"2.37.3-next-1610108509-17db7ec5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610108509-17db7ec5.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qMowq8U9C5/3+jWlQgJwR1L0MKn07piGAF+qc+snIQ+G5OdxkjuVEnJA0UnKIM+LIjjnce5GFFAl1fT+fifNGA==","shasum":"c0655785012bff423ffb82e0da33137fd20075a3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610108509-17db7ec5.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+E7fCRA9TVsSAnZWagAA48kP/RGh+SZ7gP4kBATARZGB\nBJZ8MtD6VzZ1gYysjRAspUeGKx/vY8IV7GJfDIKvfzg/D/p+DYql4Vz5huXu\neW/DndhCnS6bkdu3jIrmQF58jtHZ1rWSdmWqbnsTE/R7rT6BgCoN7jnvfGzk\nNslpspuIaMsAUfZVlaBfSsdxKQkA4PdWgOr2kPpXTTOnAAuOqh6pQKRYUsbv\nefZz7WXsaiNDFtXhjHZubqeqE/8jyY/zV84COlJyM0XSP3qR4vma+NnyIC00\ngpylIhIXK7NzvvvbCk8EauThf5H4GYxH0PrsO75kV13Qx6gXeM3PTZDRzz5B\ntDPWd9fi7tAcbGtR8o37U1atVNVdADcvhYeMW+ShOtV5RCcWnBiXWEbkZMQ+\nE6e+ZhlZOFw0CiVi6ibRcoUWPVhhcqO3AkDea6udojmL8gq/yQuLgaOlLucQ\nsl/GDYEX9LLADYpK3SrOL3A8RT4x43xdtHPUJ1owa+zNAH8aTzGITFiLMzHd\n937ou2AOF49MxplpeDrQnqNrdutM7aBOc7vwl8c6ziYX/kQS1x3eXHb0TTPO\ngj1ZBISnhJsuqzZ03s3J4C9fKrIqaZF1NEe8sl7tMIOUlEgU9rT1TWxj2OqZ\nYrU431a6VMPy+BPqB4l1EGGQbVvFHnK2M40cQzoZVVECS+7kuEYBwQjPtPt+\nohRa\r\n=AI2d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDY18WKLStEGECOLbL2XSgY9YYPTgw97gk2H1A5Y77K2wIhANzBooOc2U2fHnTR21BrFX0d0OhBsBhTiT1ficH5vTNo"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610108509-17db7ec5.0_1610108638909_0.5292234102957456"},"_hasShrinkwrap":false},"2.37.3-next-1610110107-b8b3c2e6.0":{"name":"@xdn/core","version":"2.37.3-next-1610110107-b8b3c2e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610110107-b8b3c2e6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tXK++AZ6FuG4s69R+jcZWexUOufnYoGf7y/UNSYXSDQ8mNP0fHWalm0OA1LMPclqsri7zo0nOBKWkreRvPD0rQ==","shasum":"cbc84eff869c9cc66035506af37eefe8ee47d537","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610110107-b8b3c2e6.0.tgz","fileCount":174,"unpackedSize":663759,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+FUkCRA9TVsSAnZWagAAHzUP/j2KgISgKae7gzAS/b1q\nERCt8PcgjkK8CrILHRTd+mdPYMWHDiCY++UHjxYfldXdK/fBjqq4nWP5vo6p\n4pbvVsrranL8clHsnnDeBP1F2qybDigmmp60WK0k/ZfpNNYUmsTL1rxrfYJl\nUfgOod2depiCMi9skY5BQWf8BR5QZQWUmhc0nzCmL3fcDzosDgndSEWNS5/L\n1KnXSjP21w8Cjx/BmEDfpKeC477ia0VhEx7IBOBIBLRd5Y5zcr2imKQy6qN6\nPLebf7uXooLgIsSOmLrfciFIFY8TUQZOhjm4J+Cu5r46ygkbw/wWDuYSSJug\n+4lPPq+CRdDgKpFK3tUt5YOPd8s+lEExD8m2aDKR5qJDisxGY/B6xb4hgLO2\nnvrZf/NNnNRiE7V7NyowR//2L3QU0vonpE030fFwLWnFjaAFpEIiLXEB/g5r\nlm+zu0Gj/h0qa8iX6eldcdFOzwNzLNoT+TeKhXPyzGphP4RE6pydAI4t7EAj\nYDMvqkDY0BwmavT+wFsQzAQcmODzcvK5ECLGd7tkaa5X3XrDScxJIakSzu64\n/Fe78vRfCE8CrAP1uk34g18vE30m5nhZoA3HGJEdz2sikUVcpUQcNDk5D/Iq\npJppc4HdgRCqGLd9/xZndiHCzOltqtThun5xBg26eWZ1qeFvyksEnngqxqMg\nCGpV\r\n=vWdN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCr5VD+nehyQJ5af93ZjGNrT0JV9BF+4jn/zDF7s0McAIgMxhmmmjlcjdy4xlF4DC5ratVzBX59tgidEcDcJR2Rkk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610110107-b8b3c2e6.0_1610110244228_0.0532434541002913"},"_hasShrinkwrap":false},"2.37.3-next-1610110295-602dda2d.0":{"name":"@xdn/core","version":"2.37.3-next-1610110295-602dda2d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610110295-602dda2d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-R0RisIOObd5eNovreRmAilBvF9iI/iGA/oCuYP6goDf3+orNStsUd1hL53u84Cu2sBz1Q4ixz3X2AcWWtP+v3g==","shasum":"954087065543f77c9248c74a3a75a1ed654ab2da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610110295-602dda2d.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+FXYCRA9TVsSAnZWagAAF34QAJ1ts7svlpK9Teusj1GZ\n9m2+H1DkcCu73u7mD0irHdqm7GoqyzLdc1VDym/AjY7X1HT94CZqdyYZ1CW5\n33hvYEWdvezS9Lq2FdMG881sYt6yToHL/rEXpKwR3nGl6exxjUTGEvvlYCrj\n76mgQYithwBpLIFF4ra3ZiI9BoUFQPN2qighB/Uo2mmKFLVfFzaLCCmmXnKy\nuxd0slBzm/aDzV+AdK7cEnGdLaCJNybk0vB+1G1k7zoAmyfXpKGsSgkOYzlW\n0VwNlUFT1nvx9hKKpTSnDYlOKq5k/G5+a7OLLZboEHFF+h20F8uTy0W6V0fe\nNYwidb1sQENpUVqYu/hk424H0yHSF/WGxBnpZRG+m4NJ0d8Mz33KWaQc4QTI\nCNw3wh2JUZpq5e7sADti87HaJnhHB7hv7wr1ZZ6TWVITmkkf+phDukpTJu3G\nVawi0nosw5cdwFLLW7HI1ArFISsRMPc6faxkKBDg2vnsQnm/dYwGS1zBGdQt\nqb8T+r6TxBjkg7yQdXvKwqY4qJ3PBZpbc2ftzQtrV0iKNTzg7e0XHqzU3gaB\nmUWHwXw0dG9/4I93hLlVOFHkeEnPipGBp9tPbrEFeZuvxWyzk2DmNvZaWsWg\nDbE8oImsR2nGgg2/eytT5GAshWzu2UWirUraAZKkHi3c2fIUb41RkMTVX0nh\n93XY\r\n=sOES\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDsYmzxL23UVwGxDgoGR6rS3Rbpu92yvAB3bOhlVnT+NAiEAy8sm6VoQHKYL/npkIwcc24tOoU8szMZTbM1dNa3zpRs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610110295-602dda2d.0_1610110423542_0.3963405627248995"},"_hasShrinkwrap":false},"2.37.3-next-1610111677-114dd3b1.0":{"name":"@xdn/core","version":"2.37.3-next-1610111677-114dd3b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610111677-114dd3b1.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6eZKnV5CALyN9QTt1wegwWcN7dOV+eltzNkMKDCgMeepG0wwaY0CyQPkjLE5EagPTQdHLkcajoflhbfWm7wjzQ==","shasum":"79fd5c154799ec3576b6224d2873d8d2368edbac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610111677-114dd3b1.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+FtQCRA9TVsSAnZWagAAyS0QAJc3z8VUkw36278Ef1mo\n/ocvfKkrdwsK3y+14cwJtrLCwx0Y0sxffq40puiHhDHBgx5DOnoWsxvic9rN\nu2ZWoL8OBSncPLxKNfH179Rmp84W9yMQIzs4KWojqiTUBwd1bo30vHQzJgbe\nAKPKDsCxhpWTFEZZ+zQFNm5GQPbpmbtpZOLr6G8V8ghJVmArTMrXPje1diml\nsIW3DKchfP9pd8/k7Pf34ni1yWBs86x8oPqrDCT/jKmCoN2C2r/icQwesxVi\nKgZqxzmcZ3IxtGLAIpVgVxkzKIbae+6ZrZvu46ECwRSskYvKTyvvAc2dqv0a\n93Jv51o3V/tVzHVvC3SQmtGQ/1SlfKyid/spU1jKZPHF8gfDBmj7QDuFMzb0\n91FXqmQoKSAwygiS/EJzPn8MMMGzBVHnOUJ7AVjlormK/QVPOxEQL+uyLTl0\n5LCDGjqJPJYb1Xs4Fu5h1wrlLSFfndTtLLzfO2JfHN4atw00H86epmZUTdrA\nRKIcktwW4ApDzjHoRKbfZlZLsv2VFsN1blz0jrjdh6ix+nvfApBCyC/rc6/G\nB7JAQkAMe9l/0AHWfe1ecOWb4uK7M3wlKh1IragK+BFCaIK9LxTCt68GQ2B3\nq7ZEDGSp/xmCSO/zUMP900yMQiiXbKIekF4ZsPRi9Pi94oZltsQ1csyd5Dqp\nOPop\r\n=beDe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgHP1vK59ccOsaF/+Q21/gRDlRXSb0Yv8ij1iPF+C/KwIgAPocM8an0R6IAwc6KZJvD1dhz/iaFVn9M8i5Iap7qHs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610111677-114dd3b1.0_1610111823594_0.18048511135511558"},"_hasShrinkwrap":false},"2.37.3-next-1610111788-7b69e5a7.0":{"name":"@xdn/core","version":"2.37.3-next-1610111788-7b69e5a7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.37.3-next-1610111788-7b69e5a7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-s1vT50+8AS9CEg8/K6wCrEY/8FfREDHiSxfzU8GQ5P1koQkIif75VuasLcceUqm3TtueRwj2shBWo4LnYZKfSw==","shasum":"3c919fc21823ba43b8c313eedbeb100440c0d815","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.37.3-next-1610111788-7b69e5a7.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+FuzCRA9TVsSAnZWagAAvBgP/A78XArkkR8DcFnR3cM4\nt253DXcmNJlnjn4lTIPrrjTrvNj0DO29GaoC4MdY42cqe9HmIV1UOJMxgfo4\nI7oNCLleq3rloYJtgpStlmyFDTMsw5xnXdYJ8vuFP7rcdnGODo/xCIh5p038\nYpbXq3KuO2YuCWZoyU7EPIY03g9z7g72bk8r91kP/ZV6056r1fCSFvz3rHvD\nt89NrmyXClOGWWGRlbVq+kVYo0Iyit/L5OMSF3X9dn+qs5BjUbB9EvFUykzj\nqKNBouaof0X0usQuKesYOixCFDhNdR8D7mcsRpqXF2Z2p0SaBnCEdit46XUQ\nXd+LX5LV/+MVSf9czbV8KpJSi77/I/YkpfMrXztTZxg0hrwZjyJ+ibZ0OP5J\nwcnGk4T4IKPP2GWh26zIf3eYRXZjAo5D4NfLMbGxvATMl9qV+6QqW0/+VEEB\nEfiu0xYgDiG2CsUCvbxXKDIGOCH12sz6au62CjpX3KCEQsZDqNnWpBgEMgDp\nIPOJtvXqiirZq/tkgjlrHqbZlAZRDv5AWXFfBrS6kJmHizAgmTjBkcCLz7mS\n9sdYsgn5rGR8AqiIGryDpFx9WRZXe4nNgm9cf7aNg9/Uq7ddF2nGUd84SPZN\n/JMjQP7+1Cd68CjeVH0RmQbbcZ1+bN1T7veq++xUQqeh2JA9FOjVmqHf+9sh\nMh8C\r\n=78Oi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIASqt2l+28vBAikDXlHkNTvp5FiGmOf6Z1Uw4rxNJtCtAiEAsDcVOuu51fgU9vmcBGjM9rKh5Be6fZLc/hVZeIGzVTo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.37.3-next-1610111788-7b69e5a7.0_1610111922485_0.45186181294681305"},"_hasShrinkwrap":false},"2.38.1-next-1610114597-4a7664a7.0":{"name":"@xdn/core","version":"2.38.1-next-1610114597-4a7664a7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.1-next-1610114597-4a7664a7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IQAR/Euj6H3LfG3rWR/+tCEzlANXzCSiHi4+dsVh+q9eW5STw8KJO0PeLXXOd2/aULqSMS5MVDyFNjPu0dSz3Q==","shasum":"d727076f50b8b93bf7a774e5c8a2c2d75e14d344","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.1-next-1610114597-4a7664a7.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+GauCRA9TVsSAnZWagAAqIQP/1RLQoHTwOWHMJendlj7\n2zPOgf5r3BlW1a8MmwHXKHAu1Wo+4co+WiPzk9RM6u3tMhZt82xa2VOI7Swo\nXonqfFMZaW0lrSgK3MZ7qqAJYj03Jswzb2j3371GHkTgedhYAmimIB2lCKtF\n6JsRReC1JDktuSOGUmsdaoT99PBKor7qcBsioncy9xKBGlKPxQ22Nsif5SCc\nA+iBtFo9mjtavxtzAGr5JycG4jM7hKy/7k2DFtwUaBi66bnczkQyXMDb6ec4\n45tDPjTldegIAmXNBMhNfr34x2vW9z4kPISYOddykzkOCQxelJyPjj89Cqqu\njRyKAfIzBk+HWtN8xAUz/0QW/J07qrp6+qZUSM9WTKOMpLD0vQNRDdXF+Eka\nj2qE0GP+H4h/ohdZUWAUexelqrUNsju7LG5ggq1Saq2wcrZzKB4XbfUkU8yJ\nVVfhoS9O8PSmda5ZM6Cn3gsrfUR0hXerz8cLSCfv7otHxGyb33P7vWPjwbFV\n/6Psb+DN2P+0YQdyWE0ll2ArqZRHEwJ6uAKGW5doBYmkXdB+Zg92YKolmWaY\n4gNu1/3JvWp8HPZhggxA8Lb8wPqJl6Kkmf8uXKU4nJwzWAFvcMA8ZV2CLHzM\nkeyacZjyj5IZowpkOmHwfV+395km2SJLf41DjvElo2kAwiZNk+cfyIbYJLnb\n4oLn\r\n=G8+Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDp0dnjE2XlmRb2v4XcDI9nJx1rW6zq1T8bbzICD7QTjAIgG8A3s+KP2IhJ8bcSbyiw9TWqo39GhTxMZhjjpVvwpsI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.1-next-1610114597-4a7664a7.0_1610114733746_0.4362772665857364"},"_hasShrinkwrap":false},"2.38.1-next-1610115336-83f84839.0":{"name":"@xdn/core","version":"2.38.1-next-1610115336-83f84839.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.1-next-1610115336-83f84839.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YbsKz1RfiGowDd/GCgEKz3sG7ka9UqbgfjDXCPg0S6EPW8vFtFZAXYNEUZ2aHDCK7pP3rSuqi/wVFE2ZiXS5Jg==","shasum":"9d6957810500a37bccd0660fa5fb701ecd119860","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.1-next-1610115336-83f84839.0.tgz","fileCount":172,"unpackedSize":661820,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+GmUCRA9TVsSAnZWagAANfQP/imXv7u6uaV9KyU8XsHG\nfn7swA6YAXjQdtN2ldGNPfmswieXvSoFgtrcP37x80uT2IAzfFv/aiXN9kSO\nZZBE4kFDenzJHAiRv70TySBrr59Xv1wBF3dj1uKJ8n5S1hb0lo7aaTplq7FL\nW1Q+oKUvmzz/DkLKwo0RYyAMNAWNtdyGLOzXPrtOpQicQS61XwIh8DZY8aiG\nLuVL1+w3+Sk75W94Yz94SC2o0JsDMVmpMagL5vtKmrtKTVdRAynMb9e1aFEB\n0pbLrF46LGgMzfnxvLWY0xQHD9z2qZkDLqGvwj4NKe1sKOf0Nfjefp7DIjt1\nOFZRlZXZpmN8pyETCWNQ6r4Xoe8NjBtxNnwj0ndb7RutscF5LDABsWV8sWrb\npwduXleTvn5PftC1lR5AJQTuHxVBVEHOqr/WHu+XHBRJuo4jQmoQkQ1GJIt9\nIV9REzh/vpwf8Hk3zjBV3c8FaH0kIVLCWgPrH1zcyEoADbdO2nRNNBeOhgBO\nmZa62tuvYyrctR+dDRAM3F21+PlaHEd4k09KS0WZ38auhjy+X0mlXw6oWcsm\nC3AW+bvV83PkHIAjV5hcy+YWTqDj5DiPgw7cNILpDYLT4nIga8/JzlVLRPBW\nNCzSXZ4lEIC27YUJsVQsONpP9kCWiGpl60gP/YEL7NrQkIpsMRgkoSTGrV5B\nbaXP\r\n=C7fy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICbly6QWFzxea5+f6DD1zxjRSGv2/xOWHlt5k1/skWFMAiAN/iIZJDoonN69yR44rtzpEwTZnqEG2wICKopWa5hm+w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.1-next-1610115336-83f84839.0_1610115475811_0.796920698443216"},"_hasShrinkwrap":false},"2.38.1-next-1610115776-abbe1397.0":{"name":"@xdn/core","version":"2.38.1-next-1610115776-abbe1397.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.1-next-1610115776-abbe1397.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qUu/QHe95R0YlctJQOvjpaWOexpcnocRQaKCjmr50XW4Em19mN53XiN5dxbhSClXAG9FaDTpfXQsWxt264jfIA==","shasum":"0eba7ee6fecaa004209904e276dab8853de661e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.1-next-1610115776-abbe1397.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+Gs/CRA9TVsSAnZWagAACPwQAIVmh74mWmnMOhZFkRcC\nMgJ3gAQarz04IVusNfmw5GQjKU0wM9S5+KTz4+pj8wMSwtB26mDt9r2onuK3\nOjIK9sTuXmRLNqJNTPnKgOC+bS6LMbiSgYGJSCw73lzI+SNl80IjxRud+jjH\nTQBf9pAkGs92bKSDP6azMcx6bKkOaNPTpyQsgA8MmedjCTeypWZ7zZuP2QU/\n7DgGXulSmlFAWbJttDkYPvMCx5qWkDBggDXvl96t+1a9gYyNoGwthwv/nfTs\nianNvEkQaCZMtZo0W9yk/vh62E70HT76VExcxHK9rcN9GVS5hIqg/FcjaWRD\nFlvz+7sgqkz6c3IhURBgT5v5QSJe1nyu0fln8+HrGcKezKjTQ1tIAqRRBmea\nxqDLst2oUj1gra6kNt765YjdbuLgmanJRHyjkM5Amu3QAyPWKPvbGisD93RB\nnlU5iocmWOv7tWmmVXE8s0PbWUg1fRE2LkuIV6y/RV28WFoZRb13HdBFAUVj\n5suTYzzJI7Vs5bMHUpOHH67+I0MxFEXCY0c9Of6Ye/ahQWcD6wGZ5vl1aw7j\n9gcmFf+OY1EWI1CEdUx0u5019JR1hsFVa534OMgBrbn+DyvuGTiDdJumo7sR\n3Cw3PGRg87kOa3E2WmD5MQ+CFsBGqlsgmQEHUn8TU2MqRE7Pw2ZLYQ9IwrRl\na90a\r\n=f10C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFzzRQ0J7GABJNwr4xaETMUebmKK0EbZlmfEzBsfzGR0AiEAvpPICkSyD+XdIXCMAWSfxN39SgdJ+sdWw+i8j7bV/7k="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.1-next-1610115776-abbe1397.0_1610115902779_0.28970229213772325"},"_hasShrinkwrap":false},"2.38.0":{"name":"@xdn/core","version":"2.38.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-OpJgGDJCv08GQa15y+N+Qnzw1Dk4nyd+U6X0GMtErXLHIXN0+rNE/4ommoOtvwcqG/bMIHu7hEYkEW26tym79g==","shasum":"fd75465c8c47e905bb90e9e537fcd509237ef8da","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.0.tgz","fileCount":172,"unpackedSize":661766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+G2FCRA9TVsSAnZWagAASzQP/1NUnk4bDYOLPHoM7+Rk\n1Zbt/Z48HX/AsosP/TWNz5d/jeKS1PhgKzJHnQouUs44w686lNI1MIAUl1Ts\n/q3H3EczdLjNdk+kJb/7W4lD5QfCPLSGT/nscgZEqFy4Yei6C3EONq7ZQ4w4\naVt04bZeV/d9HNTu/1567vgzfkyHqpFo6PuEAF67jMq6H/42oSoAHd0vvHS8\nxpy+T2PD5Gn/RvIPdhxkAjrIH8rZ9QZAIvZeE1/LYZ5X5rsJq/EqxkTyKw2/\nXalU1UdugMBGLauML7dFBvfxMEdQIt/mHstHHhyjl6/N8BKBRDXKs5LPn0KR\n676T3bWAmI6Adc2UwQ+pGjhCA476X3uNQllHXQJyO8JeKVHLAQBZm6z0XqTq\ntxtjKrNmSLX6THIbfoZlFWtdr6TaF+MsKbS8ifmMtcZp5L7CEWDRCNE+N+j+\nm1Hxi9q8SQMYqX1jrdpfRbl0DjQ4FAWGQXCY09RSwdT4IbgNxvOvJmAY4NHz\n5KWy2uVVhmOD/41s8jGb77qPiVOhJAtxG6j1sFRL2rs3lWazM6eus2a7eJDd\nFOMjSVm8dCHU6sRhmMg456Hyse90rr/f/REWN38GfepS1xqsgxV2rzXaHMkx\n/qCTM1oOIG1EDl+r1eYuZi2QnsQfFNuAgiozZ4cbuiDFIpGYhdjQQaE/W9um\nQyze\r\n=uVgL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGKYEjVHvZN+dol+CMzNgybamCzCrw8aXTDvTnuJ5QKjAiA8jLLtiqu8xVZOgV5FKu5HpcDMd6N9ng23otITHRyOOQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.0_1610116485118_0.2787608308427063"},"_hasShrinkwrap":false},"2.38.2-next-1610116516-6aa33fa8.0":{"name":"@xdn/core","version":"2.38.2-next-1610116516-6aa33fa8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610116516-6aa33fa8.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hsgjLAWl6py9hhcmP1Ag8xmHIwLgODJ/3MV1fRASrsn6Q1NEwb429FeUk7OvRbkoAHpRH60XsQtE9KgvAekocw==","shasum":"f31ef8151475dd9b6060e77e920edc5b58e3e69b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610116516-6aa33fa8.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+G4vCRA9TVsSAnZWagAA5UEQAJCEeRS2NTTUbpXY708k\ndW6iHOIfTyFsLYcqbOHR4knpEXtps9JDrQFPJchN001m/hXA3QGSmxJgo8qP\nnSgVNPZvTv8fklJ9Cetz9dHq4nqhaCGGyK6IdEK/IS+NrBDk91L34vXyjNrw\nDlARl8zCqAzfrKB0cQhcA2tzR4SCrlYE1IrTMd+L8TUd00uzmjmfAGXo0ysh\nl1uviSDFqIHkK7kHA5M74qs5WldwvMjnuXqA6vUwVXALvG5bOf2c/bHqB9Iq\nPyYjutlonjsn52ug3JdecMIyuBMy6LTAbjdxviGgOfnaAjtUkxamPsOAZHJJ\nB6JXgaDRl0B2uwBnteKa+hewIILBoRd+Gny5cwOKzjRBULoBt2JQrg6ycjGo\nEBPeCwRXlbkO9Aw29rH7Xn7kRoUipDN3k+Rs7MR3zoRxAwZIoFK9sk/mDv/3\nSerEnk1jWykIEk1UlyxHZVI7L1EOLG4hotKGTY+Mqn6FzTODGNPwQLnwb/UQ\nOjWOMJZPKdr3QGH7Pshl+Na23ffYSX4v+uE/Bhfg6i5LUNFctonDL5j6fVKY\nYMibVRPHK31i0MFHSXeXXNM1637qALGvai5eDG/mNlnDbs5A4CFHSwjwsHZA\n32bEOrrLMbO5pLXCKcZVfbcCDgImIW3McjlVqphuEl34aDjHix3eeRmZ5YKA\noXhy\r\n=gm9U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDM8CA9+KGdohBbIrs/3xs7nuQuRXRIIpgGNPOdkuuZaAiEAhpgfdmjRmWn0z4WpLy+E0f/bl6aFNUviI9gFI7Ut48A="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610116516-6aa33fa8.0_1610116654877_0.6054865800024873"},"_hasShrinkwrap":false},"2.38.2-next-1610117076-2d98ad2a.0":{"name":"@xdn/core","version":"2.38.2-next-1610117076-2d98ad2a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610117076-2d98ad2a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5w8a0mKenDKzl6xynUxDjSreDPmRjQfw3K5TsLcEcpaLok8pl87mB8AuYxnO9mhAkodbZG3opqmzCzoGFt7vpA==","shasum":"9e806aa0920ae49ab6614969b6aee153ffd0c0b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610117076-2d98ad2a.0.tgz","fileCount":174,"unpackedSize":663869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+HBGCRA9TVsSAnZWagAAVvgQAKFd0CnJ5DDcIQNj8OKI\nz2xs6Ifax9W41M0zG3loPi4RXSVzwxN0k1CkrD+GMBWik5yiRKHV3k+7EwFX\nUj44EQnT/Z7g5vlNQo/IWijx4vqT6LvstM6VjUKBqfPVvVeNbdyFzElboDrw\n5mVqt4T9ccG04ipsALDB5+B1LlPPq6r6JASney7KYK74ACA2+YPKFacb++fp\nE/fmnBM7aNM5qrQwv839uNj5PrOWzL6ZQdL1981DTVyftcfQlMdfwibakJGU\nbZOgnlR/Aq7VC5uIAvgtJ51ZOMQwaXasoF7kCnJtEKK0Oz2UWyfsaEXITHt/\nWmp7e5g9ZvFVTwuNDVUqJcEybqs7RGN47w/1kOK9di8/GEEKWFuRB9Ii5u7i\nbsSMcD9ROMcQDiHwlehJ0ZKZKOXUmhnouC9b93egPmGLLENm8/DyqC/OVP71\nWxDN08ffu3KnZLN13lQ6cJgcF+faHNcYKqO4Qz5GABGsqmkgPED9DPMuvH4T\nDB+2m/Z9WXJp7p9gTNX0uF7rvk97IVst8LrSz8j7+tDpNa5yDE0oQcwnJszr\nD1mbu1TAtzh95sBVLLidBL13uvL9YqzLVCsEqDmpjNNnfCkXdV9+eUdd//0H\n5MTy7GY/JEb6o10pDeBkZpC1w2jfjVyxUvh4XFamYP2yo591SxGOBpNmq6/N\n568z\r\n=PtAx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEy8KZ58aJtClq3fUKHx774xdsEqraXtbbBdp6EIRBM4AiEAwExz7L96DjMt/yS2r1vf6jFteL2he/Zj/yi2CnnPfjU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610117076-2d98ad2a.0_1610117189464_0.8165861373774586"},"_hasShrinkwrap":false},"2.38.1":{"name":"@xdn/core","version":"2.38.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.1","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lCIGSoya/vzgQLT29ZNsuyhTr6l8Gr/+H7AfgMSjAb32FQxuLX8hfSPilwNUIwAiibpDEpMZyxTYRRulXAFYMQ==","shasum":"a2b63d4c7cf913790cd7c7e4f6d61b64c9582e87","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.1.tgz","fileCount":172,"unpackedSize":661876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+HL3CRA9TVsSAnZWagAA3/4P/j/fiXiHdfeRcRYt+1Rd\n54X1hO03KS8+2PRH7KL8dr46LYdDXpPZRPiYND3xzDKCCKJDF/FsNgdR8JlU\n+8RByU9boA+ydGJSR6PFMKpQMTmW70ww3cL2WLINIzmssz953PkMetZaFsQO\noqYf3M2OkPWhL3dsWfDqLeEKTlZkGp3FfZi/+AbmISMXNA5xdVsgBtpsDzh1\nMAu0ntCb/e2XF4BfC97HJIUcwnWxDP1zA9+pf1W46kjVvg8OY6KeEzg6IH6h\nTNHZTA5uuxsiQStBIyAj9ANHAnPPU6/XkRWl8b1ZuGWsxfo/7AFzz7STCC6H\nwCXqxtg/ULCL/O3GMgaCtO86V1V3ho64csEVixH2yHl44Y+crVub5lFzE7tt\n00YJjNrxybPQX53a/s6OeIkwS8mVuERnJtkvO6kS6imAMcSNmO/wKxiOQ0ME\ncXq8G/AyckSkI5NZLMTl1OA1YnC3S/4krJm4VnVNtJHv4ZyGKarF/kKjtH3m\nk45Q52z1XAXaw81kZhxZeQpLE0ESVdEJg2PJrDW5rUxI5CnKQ6z090T2mG/O\ncCqnK294TvPyF+F1h5qtEaX1/alYM/qYhxCg4oWm/Rr95BaNK+YTHcXZBPvV\nQKqk7RUk9mo62K5n59Kz0zgKrm5YctMHnQclPr01lLpSEbuqnRmEIZOHEFGa\nFY3r\r\n=eEhf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICvGxlrQwKzn0VQDXT2x4VFhjfLn0MeTgMiuKvriZ1p+AiEA1SkYWKOPv52A9vCO461KOCvDV4fxXXsd+1erqIQt2EI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.1_1610117879455_0.16478906659019987"},"_hasShrinkwrap":false},"2.38.2-next-1610118532-8be4ae4b.0":{"name":"@xdn/core","version":"2.38.2-next-1610118532-8be4ae4b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610118532-8be4ae4b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4JDKlT1n6MNPhd5tPYnImX9oQPG+pIqlx/Dfw+xfKFytG+k+tJWeuTyfIvJWIbWxNHykVrdGo+pA4VAoUO9gcw==","shasum":"1fc349fc2873f8a15ba3d206072b0129fe1e1ec3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610118532-8be4ae4b.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+HYECRA9TVsSAnZWagAAweYQAJx3NIi6eZ/0iyqnG1SS\nBwoAt5w1Lr2sfIn5YMw/Z9GjMvm0A705y+qXumcU+IuU30c7bMI3yWH1n0vD\nxUwPBfU/j2QMbX7wBwhE0QTyYezZ80EcPa/3O6p949+5a7P/Y+dLWBu23TaQ\nWLHOu7g3Je6Qyu5PYu/wOEzdEiUQUZX0s6XBVLptTsupukAac80Y1D7WAAPy\nKvuWukqQ34IP2hQwuoKFZJ3Zdb1UOV4wZ5o69lzax5lepWOK5lw6isqDyI/r\nRiCKpzVAeSCIC8KSoqs8o0uvIwOxGQi5gvj5qczYHyTpBduF7IIoy6qoUP8U\nkdUOBgWKgVoBN8JkoUvjoN8iP71YQbq8WffuMnXJ6zUK87Y7suZ61aaBpkei\nsPsKvRld4FmE406PFngPUZTqG5+JfjRW++Wqme/+pEIrYZ3bxBBsP9Fo6rnS\n4E/kc25eUcIub+jArA8oybJfZ4GKlF458BvfmyXcwdYkr0Y9wBw2aUxl8cMK\nO0ZYZE+xDIAjYw7x+qN4Yd8yBXFEuqds6y6tFieEEAtCgadhNj3MsMJ5LRj5\nmPK8siL6UAZi+mMLlQrI0yxGzel1Kd/7sGjD5HsEsmppfdcOCBl8gPAMYeCG\nHlytulpZBDQHyUUz1yd3s3TnXMv3OsWzXNbgdAnZvRySSxMvNpmphhbY6dmc\nK1tG\r\n=GHBg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyOuFjFd2Sdy9b1IGrHcQUhZYba8wkgNgOAflCo5A5qgIgWFGXtakIx1W3Nh16UYP+zFSEwW8nGlTlMNZHQ/VCVsw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610118532-8be4ae4b.0_1610118659532_0.9215858132907073"},"_hasShrinkwrap":false},"2.38.2-next-1610120295-1bbe5725.0":{"name":"@xdn/core","version":"2.38.2-next-1610120295-1bbe5725.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610120295-1bbe5725.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KIRmGqwY71EorPpCByUrFOLb639MKhcLSxfNxXNeACNFuNLjXkJb0euYEjj8QyM29DPTW8hrQMtjsiWLfLMMXw==","shasum":"bd09f53e8e0e69aa886635edfc80dda094090cd3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610120295-1bbe5725.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+HzaCRA9TVsSAnZWagAAfcAP/AyYhYcWaB89/MT0GYNm\nVJHqxTP0Z8Raj67jKDUP1P3w6fsM9zT25IgB0JrMuvCulmz7xCk9Zydxm66Y\naxJlBj9R6BDBtV8fnWfza+lCcctD5ZiVXdolVZiL/Dph2DOzOp/6cK2CbEci\nnzsRc/Xcqcf1DLKSUXPbcUS6IPjCWTBsNKP/6yi9yjC3hYFSp6Popki96VaW\n0UFdyevxDp2LTw5tSFIG3D+7UfBj88+erpcUmsZwDnMYo2VWsjCfBYJ6LFcT\nLu4m9ykl66NWybeGorA9aht9VCFHpqb3Fyj7ya2ErySkNXdwRnsiutK4+zIB\nzRoicKoErzEfm4Kr9y5fqsLoJzofceRh4OhMGqQC3AFd+ZEkr9v53r94lwOS\ntFvUVUuAG46CkDAW/uDJc8Ct5ru7X50ULmWProml6sOipoCXSqOP5tbySWhM\nQ93SnZb/0LTqiHRkZRpkPbSbbRmqkpkngNMNUZVNb6kcJQ03FoYTJa+K9fKk\nU6meqkArSS9MdlEmFHKwHXMso23u0qvqrJ/S++nBi9jHHgCsFIphIz3tPpVu\nlRQ8QjJGixaT2rU4YAup1F93Ydf1kWbTA2tybYdRBtMBqxyAv0MtlO5dzzgE\nMcESp3PvTZKd38QESYYXJcDvS1uXRTdG3o6xqvGnkWf9/ae7kJoqfJA5L34h\n5GRq\r\n=u2aE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIALk4GW1ZkU5kN12pEP0/MsJc87rva3awI20rxvZ8uA6AiAVzp9EvNnxyej54OaMeWqW1W6TJFmzCgwsIuqvIXzb1g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610120295-1bbe5725.0_1610120409787_0.03874885475118206"},"_hasShrinkwrap":false},"2.38.2-next-1610121100-0a999978.0":{"name":"@xdn/core","version":"2.38.2-next-1610121100-0a999978.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610121100-0a999978.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-iMcoHwMGV2XIZBoBlDlz/by7LkZ4b7gVk3FaF8ltOGuBYEhoEnd3lv3ylgkRkLDasodMlknpGcs3iPQ1gOqd1g==","shasum":"ca9589b45a31037cb40190838cacaa3eb761a299","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610121100-0a999978.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+IAOCRA9TVsSAnZWagAAsq0QAJvDqoviIbyxfSwKG6NB\n3vh/oSC0ALPQwatvPEpJmWvjRezexAogNxGWC62VhYG0fIqLM8seQqTQnM9b\nWYP8DYdSOEChmyhDd26e2FVHeS9/W9HbmzI3TqcNuaB3zOwjczCpTUzUZe0W\nQYJ1Xov6b2sfzNH3GzZMoUAMiEjmhejbLu9J8CnM1zcHcfa1YbApNPRZwmBB\nE02ugy1U8rCctf5c0etafjx/nBTBrwBe7rXWcpDpMkIhJEF+f1jWnjpnym5d\nG4I1l2XCUSMLYKzPOfsTOACbg90GW++nGeY7pz019xIN/gi8R7VpffVW5o39\ncK6bIMSnZ5/NNkJFwhAveULFtusa94+f2O1EblXq/ujgALwQLz94ZDHrz7Cn\nmsJQkRL9MAgAuFjOkVDSRhQvjo5LDgyxVNppa/zYhjxkox4xHETBZIpjqlAp\n2Snarm0ukn5meTmXQqoCJE/fKjnfxeLldh2z7FjwLbrYo0k1gR5w+zojOpeN\nfPrl7rjK8WbreE8jLyXCBDV/2+VmWAbGQbdOEOSmyAd8xUEwZJ39f91Iljx+\nEmRPskOcgRdOhtGQgPy/hk6nAWLir0p/mRAUsgp7m0RMvfhZlevePofqTT3D\nuI98aEz6rJNFHn3cI00OtHbdFJ4u+4W/H70RrfnlgA5grtDwGtuLfTGXgYJ4\noc0O\r\n=3wop\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBJyQXVJ56cdK64CwVm/zAY4qceg8cHYUiuFFLzuXdBPAiBc6iaKxU0U1+ZiLhuZoyMAVel95UhjgbPOg+gCRXVQTA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610121100-0a999978.0_1610121229587_0.2624471779127113"},"_hasShrinkwrap":false},"2.38.2-next-1610121307-9e46fe6a.0":{"name":"@xdn/core","version":"2.38.2-next-1610121307-9e46fe6a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610121307-9e46fe6a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-02VKyRAGY+xyW4fGfWz0lK6op3YlNve760tKRqDN+JZRSlp3GOfnVt6HV3quowGKGTmFOaq519AQF3lcSivIRg==","shasum":"7f738acd31a2dff12f17611c472be22db589c056","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610121307-9e46fe6a.0.tgz","fileCount":172,"unpackedSize":661930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+IDdCRA9TVsSAnZWagAAqgEQAIP8UtGQ6SOL/jw60EHG\nFe6lM8etnbKeAngCHgu9fptD2Jwwsd/vWSoLC5qbq2zqhc8Sko0GIjkLGq1N\n5H+lD1MpJ9g0Px1DLMIiIeRl6EGWOAXMmAtCzL5nTKBgl+B+Sc//pca+m7is\nXn93Pto5eOszQ3b50C9LsiRxnLgg9tYrxQyvq36+hZ5Wu41hY7H2xc3Q+ONU\nnAe5T2fmB2cW9/oS9yHil+9Ecx6NJ/ZgreY+pSrYA9Tv5At77NbEtoRhBbQR\nsR2uJO/NITpJiFnSKTZgJm2sTuiq9b3nJMQcY3z/4JotynPaV/N7/gBkLRwY\nF9a41Z8iaPiaJI6GjcTqKY2xIRBziOmixpiAuC6Bpir2udRthWbaPAhUEjFs\nc8GHDHPRvC0BPeO5fwioNQg3/O2aogCwRD3CFnX4vgdV5wtWQtlVE8uiEnuI\nLdaJeq8pmdXmE87bNVQVtQJ3FomZMojADP0dXh27DBitjjHM6Md7AnJs5aAD\nSCpaGfjdU4GcB4cijfC/ZGrQi/orVAL+xMWq9rzC/WIL7Sfe79pRhVjGdIoS\nXlOG/JRtrAdu+Jwh0yqfcShtiITcKY8XCBq+QqrtU22xY/Mo17JTGOPaTOIP\n8LR7//dh0jnLFF2QO2XiC2QqeTC1p4wLTcHGUMIjVY8NUtyaw60a9RyV3Ctr\nLpy6\r\n=GMuY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEFEK48AHCqFq/tG1/LbDZlbJnCubVOobwLCcgQsRYPnAiEAtAaXPxV91Bdg7SHDO50IbrREHafzCgksCJFkrtWVyCw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610121307-9e46fe6a.0_1610121436844_0.772435124710724"},"_hasShrinkwrap":false},"2.38.2-next-1610122542-a4a1292a.0":{"name":"@xdn/core","version":"2.38.2-next-1610122542-a4a1292a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610122542-a4a1292a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-EXhJ+S5K8pbMkgT+Fwn8bfclTJCZqGTe8YmhgkISQM6Fyd6DeHbwKWheNWYzYzRArsxwa5xQh9pfHnGGnhGb7Q==","shasum":"00f628e5dc84c47bf0e7db26e7ef9342761d6ef7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610122542-a4a1292a.0.tgz","fileCount":174,"unpackedSize":663869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+IW5CRA9TVsSAnZWagAAztMP/2wgZimHDKOFMvIRGsD8\nxqffzk4FrVzHk0fX1wu/zZUvLoEPop8dCl2Au32LbZ4ZQ6NCoiNLoA9p7H0z\nCyQea9wz+p8hSvVvqrtVjaONnY2TgYo2iF6AqpuWBB+xDa5s1desSi5L+UP3\nbPWC+5WkqRrUApXXv+sp2EojgfHfL4cE8/5R3kk0ta5ba7lgVIIKmduz2Lrk\nFewXRmJblQhKQ30vlOBHovbvD0Y00ouM4+MtHTN6qVoAj8WHWoDYxSRxppcv\nfmlbnlqLr6sOn0T9uF3OjsN9smQuvR6E+g0yd19mP3gx7pIvWMZ+GQLxw8kD\nyzpnufWsIWdSF7RtVNAJaQttsh8SjZ4eP1A/oWrpv2oh/HZC8XZzvVyQVSIZ\nKu0gcE1QitTzVo1LDluRMyGd/b0fqGx6cgHREo0yRQAp4g1MnKa+3ez+tSXZ\nHZ3wZEACo5czJ2EpXJ60buelUuDhtmdyiSCDTFNF+3Ux86mc5Dyper6+i3o0\nXFKqppy2vqB2LBLbNvpvykTDVnwuEJV6T2uaAMa16oLRlwuoXv5QVhgmPlpa\nsfsyRhZD8npPmRgzJDihulRTk5WJ9IhW6+ETXkSMbpVdGLwL+yUkJKNM219U\npDPaVndBPXwncItahP1xR8YhEaZ1Kvy2pMGTb7fQdTCSkhow/z3XVauvd7iD\nSEtd\r\n=P7ZG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCducmExqDsze0o+D7l5aQH7c83QLcMUSvmduC8z7BjPAIgIjLfcrooXpsp7PD44cELq3VGinAuMGpw3LSeFlPpmzw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610122542-a4a1292a.0_1610122681276_0.4620085660343751"},"_hasShrinkwrap":false},"2.38.2-next-1610124430-6b3d570d.0":{"name":"@xdn/core","version":"2.38.2-next-1610124430-6b3d570d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610124430-6b3d570d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8K39z73bB3bPwLcArZnAKa4M5Yp6+M29c3Py2KieFJiiYOZLy3S/dxBDNDlPTWWKdDzDgUeDcoZgsAJtj41+NA==","shasum":"3548e3a3ae538ddb49f59f65587b08d1d41ad7b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610124430-6b3d570d.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+I0MCRA9TVsSAnZWagAAsLkP/0MuQXxrAgfAmd4NeROp\n6wceiafagQuWDEbsHv0myJKprEjcjsx3g6yx0wcqJQ17Z6IQ99nP/OXA9YnM\n9bBCVkQ6n+Fayq00PblJolUaF/nQ/NnmJERv50KRuqQUfZuNu4VeC9J1/xGc\nwPp3Eljz4V70SLKEn8ZHI8EmqjeBafDN67A7S+BXE6vfMrgRfVDGAW0nvKdR\nke/TG40AgptJSFXB4A4/cFVoRUvNUi3fQcf8dOYdJ/5ETEsde9E0BGP7nphX\nAW4FUt0apUowTdZu64pU/0Z5+bh4Ck+ZHLyAHBmVSe4bRFNaMfHjqHWETmUX\nhDd+XjrCusw/4B8XgUxhr/OFFKuK4UKcOVn9FosAheuljr0CKqU2WQq7aMzu\nB9VEvM9zYzRtxieQ+n9Lrbs/CqKiPlNjkJki83MlZTFtLK1XRcBtHQ5Wqrb5\ntAvolMEiLNKFOf6CeBI3/Rp0Pi3qgU8HbeQroVyz0zW96aF+ChhyDyvsPhDs\n8C1r07fYZFnSgFN0T/clwbgbWw45qIhDkA6qK16Mx3qUnLyqi2SaBWV3Ne14\n3vRYcxfSBEZp44IDCgZc6rUjR/nWWJEbD29dY8KyYVW+pf0IE4gdblDGeTdh\n+Okz6+JxKUy260ziu7AVA1OHJh3ARJG1Vzy3EX0bK8FhV6hzhkRcxhGAE1Lm\nXI/E\r\n=tF8u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRXEJCbYIqhCMADtabQRPo/hhaDLmTc/XfRK0BpWY9tAIgEtXSrchheHsctZCPCO8xnNSS6vDtJGOy5CHfN1sg2J0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610124430-6b3d570d.0_1610124555167_0.6873373425630529"},"_hasShrinkwrap":false},"2.38.2-next-1610127424-a449f5a3.0":{"name":"@xdn/core","version":"2.38.2-next-1610127424-a449f5a3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610127424-a449f5a3.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-eNbaXQAC561fE7/qLFouyaKjqRB2nCbYZGvvnk625HLBBondr3kDm1va+SP1jHVKPQlf9cX8F/kbCA1KR8v4PA==","shasum":"8613eb2cf4a9e986e971f74b01eeaf9ee6731441","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610127424-a449f5a3.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+JizCRA9TVsSAnZWagAAz6YP/iOlQ+sCf3BE0v5nifUp\nBxMbAI2JJ26XmXI7pGZmyZdNTEEdRXZskfSXiw/NAjEawh5L7VuMNEAa8Xsz\niFX9gFsGnhwjjVCrOKyWBXraPLW2m5k/1WY6yv/hY4foE4NWmAzfjhiGbepO\nJJNb5kHFCKPbvZEtZNUnp0Alyv+BQtJ19TyV0TfVqUmUHn7XZjNrwywkyVoT\n9TS+hyL7zm1/LWKYenSqNK607UIFdPPkI+oEVlR/cIem3hjUUw3tpphea8w7\nEJhHsP7F+yaCkJtDeDka9L2RNgtDRRFB0MFWOac60HhvvhSFHk4Dj4p1pO1V\n4+mhIqMOKyq5CaRXKTk9l3cwcVgRkQ+j9ycO00XLRJRTm5KdZZvb3NrC38fg\nIrMrkpWOOu4TMwJyW73PLNXZq+AdmDo+BFV98FGQh1gk7m5KrQoupSrFphG2\nMKW0sLI/8EfzrEIecoWByCUe8c96c6bQSn0hKJ7/v8VxYC0YjXaYXqMBVUzm\nEYoHQNhxBHYPj5Yevli+H8wsRqtFEJDxmhDX42w/1te8uhcrarJgeVeLGqGI\nAa0rot8/3WHcwDo5gWFKfQIJPDcDnSZqJ2sCgmUYXmAgDoZtCRfq1fA+OvCb\nBreBM7wpIM8bJASsnNYK1r0JUfyh6cEIN8bzYY/fqx+NjoP+Xc11Xf+SW016\nrRSz\r\n=Wb5b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIElHCj4SHCZXqHezhyZFFigEjWPLptyXImYNuq3rQSbpAiEAlgW/dWiB2JjywRaqyXcYB3sVckcDwQ2Lk1ghooL41+c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610127424-a449f5a3.0_1610127538536_0.6808423322324131"},"_hasShrinkwrap":false},"2.38.2-next-1610129843-a449f5a3.0":{"name":"@xdn/core","version":"2.38.2-next-1610129843-a449f5a3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610129843-a449f5a3.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3lacpBj7243sbVSNNu+LPSCUcl0TIwBbnKgX7JFopbqpXsTgys9tttVgsSoGwY5TL20HgnBr82pbkuXh7LpGnw==","shasum":"c207c1c087b16575b347893fd7295adf3b14b9c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610129843-a449f5a3.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+KIxCRA9TVsSAnZWagAA4ZMP/0cYYs/jg7envT94yQ0S\nMk+6q5T2SpNqq5iMTGxNEQCKc7s2cKk8+mSqhJSdKSR2pGOJhplwPhPHqWjO\nOIDWx32vqWp7n1mYk7ysKgXS/LpJZnE6sYukR74tyDR0v3tpMZxipmcgwKuj\nsAKg5j/PyVLGp4RBrYcVxGep7fPcDS4xpnMbO4Nfvyd1Ry+u8wvIhkpDS70F\nw895powPy5l+5X5z/+MFTnEqAtMv9Mt6GDuuRRuxNY5C8wv5LuORHs3FLxVA\nUZZwV2WwUrL6dEEHnOvttTON9JfF5yQwlDwwgK8Mg2X9+BK7T2ql188WWrdV\nP5TcLaVdAr/9WTESbABLst48BejzwTN4CEkBxx+OI9bbNhFVg/hHKAqIOo7L\nKFPkH+VyDBJSVdcUrcnOFDCqp/xbE9661lnWTCXzfiCxTFWB2nBOJ+/YvdXG\nw2hTlus0epdMCFVfpeiIiZ3hvtSg1OgFVhzplJMzDkhNMDxjGFB/aiCV+XU0\nNv7vfUM05DrSZOAX6f3V0s5kQT796cI9oDCiRuwYKQ/WoGHR47BqY4CHaI37\n6yaN3MWqTGVvVheQWHg6ZryfaGGfD2MTsJQiK7mfedfVwV1O6AqOEfg22eaQ\nokYwhtwV24jMa51FrkEjWiq3icb+ddYoYzqJ8pwikFkt48XpFXjEJ6Q96RHC\n5LzG\r\n=zj1Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC0KtNIrlKJ2dkLpMKFRBoSMwuDjlZKYgl2aZjUTpTP6AiBj07f+ZYop2Su8rtxmNvMvKuqs3M0CqK5b6iWlFasxKQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610129843-a449f5a3.0_1610129968576_0.6833039627418167"},"_hasShrinkwrap":false},"2.38.2-next-1610132867-037bb31c.0":{"name":"@xdn/core","version":"2.38.2-next-1610132867-037bb31c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.38.2-next-1610132867-037bb31c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-m2DsLHkTq2GfcXLQalO18spVfHlJEDSjfVlMFOXRf2VU5ZqcfEFwtKqzv+wd6E+HhW5ukyiKuVbEEowM3f2pBg==","shasum":"4aa2c3e07c5a6d805b047bf656d61602a0c0f389","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.38.2-next-1610132867-037bb31c.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+K32CRA9TVsSAnZWagAA258P/jKlrWk/l+hxK3bnRxVB\noV7CDZUhrmqG32u1ce9ijw/h7B3yPAF0Ni0nWcrH9bv4bIBCXw0uMG8fA64a\nmhSVuWHnXzmIJeMyZzLJ0w3uFeOerCHk+AKhh85YQKopcVOxCRBS9xttzhk2\nWL566CtCjsUQwt5ZT/jwWwIOXO3+66Q7vKWm8bPGecXXY5MbMNhzLKCWdER9\n2xUwvw6o5mCFbuIPzt6YuiLsHt+FSfNZv8/0SSD9QQbjAe6B4RLnyVYWhIie\nqdMwgI7wekJu2F4QSXZP2XkwpeDwRMVCMkLKaiRHp3ImmQYZkQA5bcvvqxN4\n/f5aoCgX4qljQiHDI4jx3Xin1fqaenoCw/ghmCK6zvarzZwW1pgCsiICK6un\nfRzi5lBoSm/0YO173Af4jwHZaFl8SjizBLDT/HJTIUDDMt3QaRVOl4RRElXS\nlYCOKTpgK2f4R2WxutKmCPvhFr4Xzb1b0+yw27Puby8X6KwFPVB27Ygs33Aj\n5QtzUyuLJmNmpYUIbBVLXYfQO25riArLaCmrCje1HBGwLFw53Dxlc+c9Hfwz\nG4FfTfLdvd+Bd7yypkc8On81ttkmlBw0rwHzRv9l2NXOlqnRdjq/zC3sNLUV\n9cDF/9L+cBF48WOoSAK7i8g2F4HbZ0i0OZZltwfMWKFJuz6lHYWIc1SM3vAw\nHirm\r\n=h4Mi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEPTRsZs0U7wsXfFcC5C0XYgXzqIsutQ7zO9zI4HVDa7AiEApbOCQCMbCebkndHbVOoiI46q0ajghgewsPZmSvlQ8qE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.38.2-next-1610132867-037bb31c.0_1610132982093_0.762254004124977"},"_hasShrinkwrap":false},"2.39.1-next-1610132984-05f88d31.0":{"name":"@xdn/core","version":"2.39.1-next-1610132984-05f88d31.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.1-next-1610132984-05f88d31.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-68DBY3RhMJL6A84LcxnsYg1OxA0wMoIyIatin3wTwTHd+STXT3e74sSIR/NQZavfjnsZBSv/NllgKkCn3+YQFw==","shasum":"c37d789680353b295c10f52dbc792b6a9d626030","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.1-next-1610132984-05f88d31.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+K5oCRA9TVsSAnZWagAAFdYQAJPq2EBycr4eWEUh8hey\nzsq36ZwiW3vQ+k19mexsQ90zngCAmF8Rc4bNspXKlLfkBzFGnSPPzSyi70Ju\nLvkmxQHppIvy9dr9iWoytKnlShXvnsimGBuppeyYPeLq63Mp3J/cg6d3Vmvh\n310sRriDhVwb5EHRdv8H55zM9+6L6cDPDnDGAyJuakJA0FsEXUw919bHtyB4\ngd+0o1SHgzPH7HFT9Xts2N6ldoamlfCccsDzL+hYGuKKEWbowjxdbZds955E\npZxprehF5w578nyvuJk7WRKugHAJTJgDK51PrjbjsIJWQvfhc2Eu0VKVxRJS\nBreP3XLXvK3P8Vc8atyeaS38hmZ8mQDhl0OMGMCsaT1A1Zpt0R0UbxNYImi4\nKEwt/JdIDc+RdWTeeiTyzzi2BuyvlZgEkcqBbA3J7HvVYOwC/ogtpFIWtQEL\nRbUJkKYy24zzvUqMjLjRLAU6Ig5GqlDhYPyUklKfXeyyNM2APXaduLHuSeWU\ns58OBUYFlKmUr/tED/dfYxR7WCVnyWNvy75+dhU+AQzDUy2YbnEttPmI7C5I\nzdtnMg3vFzNJOTYikHAMM8mbpi2rEJv/EZH8SJzHejdwxuiNHSZh/nPRI/AJ\nRY1w2tQ3g/TwiyQB/J54idOxMkkTq20Yqydrg5lf37P36kbdRVw/oajQTR7K\nTVIB\r\n=78oP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFIbvNWvEHugr0YkkiOleqI2rluunFLQOpD1cuXXvWTkAiAi6saPmfV3P601cxceLP0LR1MOOO2tyv1eZCNdAUHAvA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.1-next-1610132984-05f88d31.0_1610133095490_0.019062037738457827"},"_hasShrinkwrap":false},"2.39.0":{"name":"@xdn/core","version":"2.39.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-6QfrTaCI77aiGLKgbauzNW/Ug1cr5IXZprg4dIxVUyyUqpQ8LHYUW8LQiKyeu62Vytk/HEZww58mCcbr0PH4mA==","shasum":"b31492e073d91a23112fb532dae815cb6c116750","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.0.tgz","fileCount":174,"unpackedSize":663783,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+K+WCRA9TVsSAnZWagAAPnkP/0qOjrN+wHWsxc8QC8+f\nD/tLdECpdnBfcaGZo9xsm9HJhWTmKz0mnWBwnhvfSnD9dSQNlfri2TjQEELb\nQCClL8epmMIOWWgcrvZi5Je5ajo/TLWaMq2VqOH390kBv1laf4IisM39IhJX\nIG6ANBEppmYFIuCRkbNs7xqrRwMCrBjHKNkFdH2a0kBAFNSQNa9+W8CkvMKU\nukTS/2ZjRaqbwNsJqSzgUpFA7HJ2XRkNfMcwcoXrtB76DyfcBwfAhp7bGJsP\nb2J1xX7UGF7A8Hf40X4aN1b/rK9SJUp5w0mBpwMOUmg7xDJ+82laWn2h6BUo\nFaQmcUcv2hH9uqietnSXmT9df5F72Oz6xptumum3IVuKaB52AvKvqN5gaYc4\nimfXvKxNMQ/Vc4PI7iToQMOQjzrskAWLnU7axJfUgHDhzR6iaNmkfOUyYyky\nZUQT0IQdogzsLFz0nnjI/C8mIefpmku6jW91tjuQx5LXpLaTdmhnROni4lxN\nlmK7B/k5ltwZtKvWickbMm86Lzz0y/Q0mRo4FVCIS9TLBgHpoCxKqHHF/2v3\nEC1x5aHThFmu3/PpW/3ZEOc86q5psyKQuzfTswMXdC70HKmmqOZ8pYy07M3e\nAkAgwdb8YLT8VhQzQa+oxYaJcupqGyKalB82bWkvi3KrnP5ZKj+u/3qK2a4K\nyclC\r\n=2lus\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRAln0xkDSvaxbgrT1BIuP5cl2MYOHdVwv9TEWwM/nDgIhAKYfwbKFFLfb2WCD1B6fGvvA84LLoparEZon+vNpxBZJ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.0_1610133398267_0.35353402933205613"},"_hasShrinkwrap":false},"2.39.1-next-1610357692-716cc09b.0":{"name":"@xdn/core","version":"2.39.1-next-1610357692-716cc09b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.1-next-1610357692-716cc09b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-sj3JLq5PFSpLQDiodSFR7YDnfYp98b6oRCTciN/wCz+cpWhYq631LQ3EempApOccr4qJ5AiE7QBkbvJeOYEs8g==","shasum":"a321a0f8e9ffc18dea97949af7df0d87409123a3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.1-next-1610357692-716cc09b.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/BwxCRA9TVsSAnZWagAAJOEQAKE30LjmQ+DX2N+yyPNE\nwpySVvhCeQt/AXg8MyQYx4Ia5Ehnkipf2IHjWDtmO5LJwmPAkRxYA4+U/F8K\nTgdSZSUlP7pa3xb2+8B2AS34nVY1eR6djcGhFnzb2n+0daNxkVQepaKp/IUd\nJRltTnlMOuB8azcFWX564bT94Suc0fshCvTj7tt/FtxpCmD6pl0pSXdAQbGw\nMdEH9pnkfr6wJmg/5RebuMcnUPsFIiF1kV/PkrWUfVgnNWj1nYx5WcfjDA+4\nsqVHtmErLp8CIa1p/VK6gUJmY4b3+o8Hmle5k7BTZxE3jkdUdHEWl+9t9c12\ns1JHX4jgYJ7tz58CBY2+3XgOFNCWNH2UhmI+1tVj+K2wbjI/JzSd+8jhBrWS\n1s3c8Qs82YUP8tIvY60EqiqOmDuUPiV+kzbOc+NYcvnpXL60/4rpzgIhh1P5\nmB0tcoEFnosCLIx/EE6Xk1BdM6yAZ/hwP3tiHR5+n9yy3cbmUzlzvKr4pA3W\nNGDLN+XRTH7WxZEVBXrRqeOmkFISFOxRXh4EmrB36Lz9XdwYhs0Z8L0Xy7Lm\nj2XB5oX+jyyr1bq/PCH61lBMq6LFKEeeaiRw1T3KjBSiouTEn8a+3pAodP+j\nIQ7LRR724GrPM3JoeB6aQZp+ql6jJdHJJQYCjJMXXmevk3WAubfY0HYHnfzS\nBaG+\r\n=1c8F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGKrnlgyGfVe+3Woyw7eSzdubI5RW4G5CObY0bTKId5bAiBmfDdB2emVxcdClMmpKn4VRmqx//DJEWjO/XwlDJWfcg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.1-next-1610357692-716cc09b.0_1610357808366_0.25709018251334137"},"_hasShrinkwrap":false},"2.39.1-next-1610365307-a8ee896b.0":{"name":"@xdn/core","version":"2.39.1-next-1610365307-a8ee896b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.1-next-1610365307-a8ee896b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-u0FuRRQvJVDcrqMXyV4RStEDV9qR2EbnXD9rUCdQqk5gdHtOhTBFyUT3ABeTH6T541GAfA3VX2TmDvGzC/KIRw==","shasum":"971c6f7dacc2ce2398e095f371efa3d11f4fba7e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.1-next-1610365307-a8ee896b.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/DnrCRA9TVsSAnZWagAAGhgQAJfDEfDtiKxRwBcqUNu4\npNdlZCiWkN+tjKdZKaPBQ21sx/BDiegB4gUN1puU6B2Q72NlJ2WHW2CNKaDh\n8zY+Dcd82fyWuzhUwymBdgSprSEWq5azho80w+fbeodOkE/AZY4HSMJRBNr4\njrxjwAcrzkqHn925+moZUhj134CK/tQKXx/gzzGxwyikAiM5YU0S/PN1hYZ+\niBd7qo3GusvIDRL5EmYti9WNVqgFslcd3yVqkhfyqIVTKuhpF1gv9ozUupf+\nJYbZS9TYCOOh2fAoD1s7raDjRB2oyFxZdMfJ+XmGYhp5YRc55q2s3GkRDwyP\nUvNN8ZeqhrpTzWqP0kd5z1c79RqTIY19+uTnvqUtOHn+FAJiSOaPPGrdPSuN\nun6ggnLLh9cWFNSctx4Tlor346IKgRKIKLflVK63/9UcfhWBRv1IMHA18FU0\n+6mWLea9yABTR72qvsCgALL8Ds3TssTZDmFRWIX9mKvAIyTrB2zIN6cCmMVG\npXb1CYtCFe7UM38SzWfhWhhi+6szOLd0QfzKrIGh4RlTx67H5sXFYBMIFHr8\nsPyRSFj8AvYLGZLxgwj14zvNxHbd0day2O+YIzU2A4giltM7KXQGr4Z/vtBT\nAnUmw6BHimH9j7fA9Lp8LG+YlHkczmSZITju0p5UgfhDPwpiVdWIKxqnomfL\nwzBz\r\n=CyaP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBzNyA/dbupBRMK2Fxt5HzeFMoV5MwiVZY9xUyfpa6OlAiBb3rCAmnI9QmfA4IrEOma6iG6SLD01Opv69SgRcW6e8A=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.1-next-1610365307-a8ee896b.0_1610365418871_0.4084930564091629"},"_hasShrinkwrap":false},"2.39.2-next-1610366040-85a1a6c6.0":{"name":"@xdn/core","version":"2.39.2-next-1610366040-85a1a6c6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.2-next-1610366040-85a1a6c6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-H3FtKmbz+R0yKT0KzUjDOrebguXmJUmxJqSbJh+2QOKa/9oZKSXqYaCb6ZrpZgH6DXKRe2yL13r1x6bSByB/Ow==","shasum":"eed582d573f73392bcef833fd52965c1ccda4dee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.2-next-1610366040-85a1a6c6.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/DzDCRA9TVsSAnZWagAAhWAP/0YvojbrcvnQiuPu0BKx\n1779bzBlT/5Q6nHLdDQbxHnYgZH+Id9FHg/I0w97P/AF48geTNhSJJBnMiXB\n/d9D/2uPcocEU9MPBjvX3SH8i0p8yeFAiO2630kXS0oTIUM1vB86fsNKKghJ\n648A3sszJjymwblWhmKvIHz9Btwrj20pCTApVPoJmMqbh5O+auU7djXxW4Pa\nSFlLcSRz3E+Na5ymggvo5RLDdwWyY3tc8U1Zfh661p6DxdaoxNRw5147pv2L\nHMFGz1sC3a6TYIAvI+xTXbEmF+N3c6ddDWPi6mwnVnE9g/nYCiqiVy15QNzy\nTa6sgW4uOQWDQiboiUU1o8sTbqN4rk5KYIzl6++K8hkQ8V4ffbxcUMj0+ijO\na4HJRJMhQx01cS1ev8cuUYr6NN9JQmAF9j8vyDyV1NBMPHUw6/UTe4tvi497\nHEMBhX//eTqhmnyaLFyJNxdhJ+bQePtL2O9cD7JTrPLnCP0HY2+N8sFVVKNO\ne+z1S0j9yAL+284QSVXLzfp1R3IgH/TwUgJlDmfy4Ugr2idqPWt1VSzm+Y5/\noOiwfqlKiZySZk3MPRQbPyWK9zEbiO7Q1qG9GBpzxh0Qan9fIWlGA0ZSqKAl\n+hVzcMqCXB11gtcFuJbi9LTy8jr2kIjgXQlHo9O1uKcdBanzZFSZgSPrg21U\ngx/C\r\n=xhgE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICXzJWtpDZElRMn/8QyZaOrH7tjCQN8kaAvIWaZW0omGAiEAiooPXVuIfHRcPsPw9KMvzzYbQ7D9jcZbQZkSxO3Q2PM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.2-next-1610366040-85a1a6c6.0_1610366146609_0.6861986038696144"},"_hasShrinkwrap":false},"2.39.1":{"name":"@xdn/core","version":"2.39.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.1","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5GlcAX7C84tOqyRLKzUgGh3bn4IyeDfkwP1pfWF/upDWq/9C4sWliRXm884NnBraJaEoJbT3hawxB8aFrY3EZw==","shasum":"d501e545a04d355ace8dcbf875e51d4ed6b3fd1c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.1.tgz","fileCount":174,"unpackedSize":663783,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/D3cCRA9TVsSAnZWagAA4vUP/1yxb+QfvKMoJaTSvlPQ\nFqd4HZu7DCioFoAIBUh4Bry5vcFow68Qso5nyn/Lj1jchQkX8CXa4rPC3OuU\nOU9JRcdqeVunDRLmUsg3Ih5VRwOzXAkRDGdzryr6Yv6/FvQQ6RB+OYEX7WZ8\nGD057vHHhALJxv1AVXbwoJuNIdpnxlpffzYugfhMwLGqtCMoOZHw0/ce0Hki\n1jTj8vTmI3C0I3HhvKX7vB1ySsC4jZ0QSgcO/H23p4hDhmFNOl+Z3jVvwJkz\nUNYJAV9eeeYJSbw5hCEILwYJ92DOPa5+xppRfCJqwOG6VPm73g8n1uP4Esqf\nHnTXFNrHyF6jbo9mOmzp7LSRiQX7MjL0uThfvfkpHxZQzQOp87d4HDY6alq/\nousi5mfT9zCwDWwuu5RpQCfG4TRO0+eFGTXn8pNhCBkt+6ID03k+zx6ZJgCC\n8zzIc7QwrhgS0+gfWeJ3UG5BeRJXUf/6BH3AoagXvn11g/5LdiNGF4+smhad\nSx6vpn4X9/4uWX4jRBOGyVCTN1fKOzfTZzdf7HL7I6tVUg019dqcQvZqz7HI\nSHqSV/53F8RgvqZ0B+RsSz3jV93N5DHPbFM1BT1kPohTSLzPn9OywT9Jzy6w\nicV0bZcHSvxJJYQrYCWEFj9yiRWGbengnrZgcjcJ6FfhyOy5eKytuH0osasm\n+0RW\r\n=uURA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDzzNnG1Xqa2Lgr4ftieAV6s5GkD74a+4CIB4KPSPP9aAiEAlzBxp3ZgLVmDJt3veBu61ZGI7mIYEq8czVP7FnbNC3o="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.1_1610366427975_0.44529514795010616"},"_hasShrinkwrap":false},"2.39.2-next-1610367601-eb228fd6.0":{"name":"@xdn/core","version":"2.39.2-next-1610367601-eb228fd6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.2-next-1610367601-eb228fd6.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ayxHVrOURyDGiUKCVRhKwnZJuZman+qKkQAnzdA9q1lZBAEGXHF3Nr9OEdbGl26M69zeowGnLx8heLTFIY+HCA==","shasum":"5ce246ab00be22cf61ed7760b53fa9692ff0ab59","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.2-next-1610367601-eb228fd6.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/ELiCRA9TVsSAnZWagAAbk8P/RNtsRTL9iMiacwDD6qy\nrE+JquSwd5JIwCKtf/bLwU+ViTuuRqrlFe+bUNCeG0mJWdied5KBWBMunfzw\nhunZhNa308CePRY58edQiborfN+5svR0McYM6FdSHLx/SHbBQFKa0Czu7NQB\nCpsw1rgMxQ8P2ncnpiVys3ldHoJ1B0Z/TPzS3lg+isX2m3RDyj88bbgPfew/\nweruGJ91jwWXCzpJrEW5LZWGidnL4mrr17lXRUWNL+M3AxpJuBC2YPOv1b5u\nE+rADJAjjOuRAuUl/5HxEPGR+LCxDam2ENs/ttHKbWw5RxztKJlQSfZU8f+8\noAxrabqpUSuO6vk2u9dzuXpX3O31eAFlz5OjmYBt8wxGpiQyvF1CTUAvphYj\nr+wn0TiJf5h3k06mJcZ9FV2r5bQZsK8FVFUfc0d1hbGlu65hw5itd5MC5nqR\nnWUyRf1rrG7LelZd9XaZmI/1kK9bQOB8eTuIQSdUtImrUOysark0Jgj9Zs7K\n/1pb0a1iQBdeU8+7ZyAhsXT4ONJhmmPycBSWIlnm9UyF9IoaEAPLbAdIODtE\nYzg4HF94mFsooCoFSJfam8gWanFWsEe/LyqJ3xY37XvalgGR7sa7hfSsZiPA\n8H7jV150jzdc9v3YZk3nN9SnL8zCLP6WBrjrlijX/uohs1wQk8Z/Ax/yRphr\n5I3t\r\n=kFN4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDs0n+pSY8jOy7E2q/dZlEWDzTBDkxkMS6C08XHv/Q2HQIgDBceVk38+RFH4QBHU8qo1Ouy1uP6YTYimFdTrMgDvyo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.2-next-1610367601-eb228fd6.0_1610367714018_0.01775353073370889"},"_hasShrinkwrap":false},"2.39.2-next-1610368698-f25e1d08.0":{"name":"@xdn/core","version":"2.39.2-next-1610368698-f25e1d08.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.2-next-1610368698-f25e1d08.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-m+bc1E7wHnv88fwZT8ZMVbNGYTl9Vo3obKw6JEHD3NXSI1XtN1Dc0clXDr7wB9dFki6a2XDCFnAvqd99Y6WPVA==","shasum":"cf2d2f10848ed472be1df6742a291f884db26002","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.2-next-1610368698-f25e1d08.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/Ec2CRA9TVsSAnZWagAAGtoP/0hWVa8hB0Nn0Ntw26nG\nkuxYy9brE+WK7CGbBPOWZ724PV9FEElX84/IAY1jETetewMIvptG4QqzbPks\npmjWlBOSPyMaqGVrEo+1mLwVLFwIWwq7wVI2YtRvfEYIvA7aoH5eubOgXYPZ\n67rsbi7NDZiiWGeQQ9cN7TxkYt4EK9CMnlYgdSd3bW4iswhJauy6bOUsue5W\ns0s2GvZ1ndPFa8VHR9J0TkiCPmkyl0DQedlJ5kqhyE0+KUyI7q4Kbr9SGsWF\nyHPE60rPyz3bDwf9158sI3wOQXzL6SY5yuJfC8cm2+Gq8JfZRWhtQC75iDhI\nOfom0OwpmYsaZd5Qiac6FquyFN5KWeYE4CVk7K0rLxJUeMc0ki0XOugqMm/Y\nIkGgk3dhFlesYUQjequV1FMRsu8vv6iBh4EkXtV6+IpKuT9VahaQ5gLKhLt+\n3CLOaBMWI9Vax3Afh6Z/XG5RbSzK3i3VDQsPd/YGe7J8ZyVtdeC0ziLWQMNU\nvTKXuXn747I26lboxIwpdSgPhFvdc2U+NOiOVZEiVaHLIb+rNZR1rqDZotCP\nWDhDVHLJxp3k4bq6YZDJk2QNWyrG9+vE52y2UqwYdG2Gv7AFx7A8vTQkgUWS\nAhe+zole8KdRiE0TsSbVWHcwWqPDf0NzVrDXoS4izOlhsQcLotSR0+22Q7bw\nnZjl\r\n=c5op\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5SHEbgcE1tUikrRa/QHVJFLE0J5NCbveQPF4x/C5ewgIhAJ2MyZqQzJ2pBbPVL83ufWBRK6czz3iK+8qKBXSCH0u/"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.2-next-1610368698-f25e1d08.0_1610368821446_0.051925474626575596"},"_hasShrinkwrap":false},"2.39.2-next-1610369344-08a510ec.0":{"name":"@xdn/core","version":"2.39.2-next-1610369344-08a510ec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.2-next-1610369344-08a510ec.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qwi5knH42WY16zaqI31tk21/XEIZ4/TmyP3mB77lt8t7LKXWpruPAFaL6rNJ2JM2V1YxSh1xBCivkanqy1QHeA==","shasum":"9129cee3172245a82beb42da833e8de067a99911","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.2-next-1610369344-08a510ec.0.tgz","fileCount":174,"unpackedSize":663837,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/EmyCRA9TVsSAnZWagAAkhgQAJ/44qH2aIbarVQq2lxt\nSCvjHo4h0Ymz8Jb9MnzCuQt7v5oUO2fQIoVZeJGu6ch9tRHJYk0Kzc1J9HS8\nFXUOIrk0T4eWsd0w/OikYP2uMjLaThwuwXa/fGX/mvgIqVIRrPvqyjo6q2S3\nLrx3U1nqhKkWDzlAI7xCusk15XT4yNwzglANSue9J9BfikQR5tZ+AOd693wv\n5Sv446IjeJEK+ufwdcPl3SGuwloIJ8UCpkQfuMqpndiqseQytCXnPYhxWG1s\nSSh31Hfww0OR9lZWB596XpzTXlSdPx1D0FZKueGDSMcDcPBq2YElD1IO2lDI\nZxBfqs6cbVWQI9bbtbPFNRiNF5hzkRtfpar3Ud4oa+A2CfchKkq4SEbJqaDR\nb4eco1ZRJdhAXdBbgk08dEzcxvd7ys3QQ3xO0tkARqgGYXvy2XgksYEnnHfZ\naokSx4h/32ZTPRuN6abf2RWv9tH+LHcqURcG7bgyv4RnHGFp+fL9a4lmierF\nw2aoOPkeKtTrGgmiY8SJc+5qZo4EPL6bejlDc+2+tcWQnXBTpAA0oFfAwAs9\nd75PIb2Upj56KEG9zmKKhZJPjC5P2VpYYLfXqWY45i0Tz2XIGuT09Z3AJd/o\nrmByM700BYoj2H+Tn9sx6qvqSCtUg6hPngr5CrNbpVk1UuFguziY/5dam0t8\nmtzu\r\n=GPIx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZWkMlR428UAHwLRNFid9SK7VvS4G2MNIU05H0eCkM8gIhAK+MtVkV3TMwLANIx8El91+JXvimzLZnJvyLHothXQk5"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.2-next-1610369344-08a510ec.0_1610369457884_0.46188452754357456"},"_hasShrinkwrap":false},"2.39.2-next-1610369583-1af7f612.0":{"name":"@xdn/core","version":"2.39.2-next-1610369583-1af7f612.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.2-next-1610369583-1af7f612.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-F1NjD/zD53vwLIwPROzJ2g0a9X2qyH52y/Z0DwdHx1JtbRFwL10q7/cnOp3LaWHbMq/AgmzrHwWSAVjJJMpOxA==","shasum":"9a07f3c534ef97e9c272f58462f7cc7e6b0baa99","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.2-next-1610369583-1af7f612.0.tgz","fileCount":174,"unpackedSize":663840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/Eq2CRA9TVsSAnZWagAARKQP/Rue14t7c66tM1p4GLTV\nvcbY1XgGHeqMR8JTSRu9X5gGw4QqSrOXXnTFGsdPRwLCcWKtftaX94mRA0h9\nETnIEEISprIk507dvRa7+bouPIEF09Q+Qy0o4JWVkScWM1bYKVEkfOTsy+N1\n9oT2cjZWVZhVtQ7lFetqkETGL48+o9nHJLSwDUTGf0t0ZdLbL+v86inqvjpw\nWQjIDsV79lYVxSg3iby6SnbOdF4hjEc+kUocFaf/nfc4G/GFe24b53oVmeS+\ngISe/idlL44072nt5aZjj9DiwyD1H1epJibtEQC42MrapawemWmpivVxMaTo\nWj+0iAOK7U7EZJcljUG8H9Dr/JdKq0JcQRDpSL6uiwBLSyRmdtLExXwWnUnH\nuDVSMeCR77mOJtEERfLg/DU8zFi/oZTtaelXiz7/j2sUAIZ3iJUH8GLe0Uw4\nf/sPCKXm+d/LodJ8GXhqLGc0y3OSKuo88SuXghOD+UnuU8cS5WM8YC+T3FPT\nxhAHYTmNxgJ6PExgguwwLj+SO/NywV4SO3LUUFdbTwGAY2kY8A1RQtEuORwL\nQSPDIoSdb6hqHaItD48zysz+l3JMLyXmLtGBJca+t9WaELfIcvCLq1yrAybO\n3G0BfSbpCdZrLGfPKBqIBOHEbRIllC4RCh77RCdu71xci9NF4lA+gEHHSTlM\nM6eC\r\n=OPCw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYtigs4VSgtaFmxvL17O7gvGAaraRfRRWL8hQV11SM3gIhAMdXUkMLIQ9E6kMzP2lCeR3Mcyzpq1Kjtq2E+2t5d0mC"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.2-next-1610369583-1af7f612.0_1610369717143_0.5761205997115646"},"_hasShrinkwrap":false},"2.39.2-next-1610369634-d80c51ab.0":{"name":"@xdn/core","version":"2.39.2-next-1610369634-d80c51ab.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.2-next-1610369634-d80c51ab.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-R+5njLj6FC3CpNO1XcnwZsgvYM9NvUC4oVbk0EBhaJSdhsUQ29jG2cvWz+LlT25n6z209P7CHvHxD2KFkgGe1g==","shasum":"53d4f5255e4ac70f4899a81b7a35f1f849ac71b9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.2-next-1610369634-d80c51ab.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/ErQCRA9TVsSAnZWagAAwK4P/0FD59fVnBZ4qhBYcF6w\nqe/Tw4c5xJdhdDvPPw56N5cyfX2YDt4xV3ChDcrR0W0Dadgx0Q4MmFKNKQxe\noiwElCr+QHA8/ZN83cVRc2pjHly7m298k5kLIa5s0pA4nNI5NpUsH7T852/T\nR/tyv9NiM6BVcznZuIQ8tGwCPPlGzzMF9qWz5oAnGPomDsYBU0ifqN+BijuP\nWXxj+l7l8OW5sdBz8vujyB1gJFQp49jq1dfDBQTW+mMFRgNCwQ4euCFfwKuj\nIEPzk5dtuQOC3QgqbDimB2pt4dRas88srK2PS0LNU2Uq3+L5XSh4/UX/FzFN\n9T2cy4+dj/ALVv9NwkJf9nZTy/WUVX/Euxb5hZblL1j3q8RrV7o1XTLgOl+o\nArkWnLagPDUkFbbwVXeSj1soBRhXGnghJd0/6P+FPMytcw9lW03n2d/Y0Fi9\nYnYgKF98LqS5q4HVMYNW+G4I1LUoy3dhM11IDOwLqUnEwJSnvgRsvIwHsVWd\nU+gm47eEINxHE5N6ZCIBQ4m0dmnEIGkFl8Utki+Tp2Atl3xV5ATdTxdh9vru\nO3rkgdaMKQ3sudtW39md+VW4Jzdh2NI6ro2+hLTfcMzc3jS76PDvTmteNU2H\nqv1bNq2fYMjWNtgQRwEzbaEQ+T+lh0R+cJ4X+GSEFRPHTvoN9yj+pExli4hK\nOHOm\r\n=k52V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBog4DPLtS5rjfl60gA94/oQhmXD0BH1xgUN8MHdqObrAiEA1gVxgvDsX+jQ9eWkWNAtZs4Oq9NtCIbESHYjutry7Kw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.2-next-1610369634-d80c51ab.0_1610369744147_0.8064007724780486"},"_hasShrinkwrap":false},"2.39.2-next-1610372310-9d74c31e.0":{"name":"@xdn/core","version":"2.39.2-next-1610372310-9d74c31e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.2-next-1610372310-9d74c31e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-quFBsWA5TWr36Pxzdyfj5dczGEkPpkVECGzb4DbR9Z4LJ9IGaZGyRkA77vP43qsgYtUfidyxw12cMtauIsn7QA==","shasum":"0c10d52aec7ab9f3f4c4f99f78f064649a2bfc83","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.2-next-1610372310-9d74c31e.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/FVrCRA9TVsSAnZWagAAFroP/izz0N2bsNQZuQdh53nX\nlYXysDQHLcrY/Nr/WDClGoJgCMbATvSvTrzs1MMsZG+IG5SgEuwg1Vec6dVg\nEPFYEvbmNxkelZgn22nLjWAv4h+DwBRICH5HthIvk4ZLdfbl14ElrNKJu1nI\nnZTy/jedO9WslJx4wdHlZwWvkURnsHRcyfchlZesFZYv41sWSmHGu8V5anUE\nEKf49ZRIALz4I0cbdd5PqbEgQBz1fQ4NVT61+c1wdmO2s8wta3E7YR+uZxvG\n0sh4YHx8ccOc2u4aIa4QMT3GjjGViuwUUZA8HIjMvj3ECAURpjCRrj0lFo00\nlOFnb8ZjPromtss6+U9bwJwL7MMFlj8Ea/OWwLb4CfIDeHn9IjWdu0lLEXBQ\nz7dBgtYUPP6lZChzhpTxR2/cafOXyWbMf3ymwVL4Qli7prPBK+fUiqp78w/9\n1x37RceiRwtEjoUDXJanAIMdl4bbbS//S3+GDMbEWWrOaV/Ljn3OqF9vnrtP\nXvlASquftdGKEDCqfnfzw8bTr7z9VEq/rD51tafIrS9Es45AJ3/Xuz9B9Dc/\nwYpZITDrofSar+IUPLctypNti8XdQjH1lxX4si9MlnsniiW2plOuCU/rUTWM\npWyJ+K3LCp8A1gF+X6HEvdjaG19g9eZiXMGxZaBxwQk+4gihQhiod1L297qS\nJQV3\r\n=DXwe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICAHP3h0zkLoyhCPUfutlKTOEQUxhg9xu6iYjbtrBbMsAiAkY+8gzzqb8Lxz0q2UVFAwCf6paH9P/EF8fCpwEUJv2g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.2-next-1610372310-9d74c31e.0_1610372459383_0.6739319109376685"},"_hasShrinkwrap":false},"2.39.3-next-1610372389-f2a20d9f.0":{"name":"@xdn/core","version":"2.39.3-next-1610372389-f2a20d9f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.3-next-1610372389-f2a20d9f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KYLp4pQoaE4xKkqdWd7fo/7ooQnE1pn1W9404yxplv48a6vNB64SVz7+qQatNQy/43z992EIE4OuKHl3wSmmGw==","shasum":"b188cad4e9fb78e1abe1f31334b31d9ed18d71a3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.3-next-1610372389-f2a20d9f.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/FWWCRA9TVsSAnZWagAAGzEP/2xXx5yRGu5BmkpYUzdm\n7WUN8DCRmy+uBPXR5qhZ3bpTIbU722JRxC/fDKOP1BmeSOaXqIScWlelKDqN\nY+gny6Udm47FeR8NPEc6eVDQOWQk4D08wS+1gqHfxtUz2S1UkWmwjagSHd8E\nqvbcTm0J95NBoiioy5PvEpjhwcQpSW3gieWs8fiWtat+gV8OBd3BTwk3iW3r\n54XEuJdbg/KvQJL3jrFzrV46FU9CjhNFN7KHesQF3nUt/nP/bbKwshy8itHo\nKAiJSmLFYPcDU2GjL1Jlwsy/+WW6ArquFmvs/HbAVhFHZJ+I7RTNDfkaCMan\nh1sPVcpk3qef+v+rmzaCP9vcsTn3ECf2temUqnsEmlWtWaDJg5K7HsF6NGnl\neUc34njMnqUco5jtJVqIFlQBho4WEVu3mVZ5PFdrpz7bjD9V+wLHv5sHhEpc\n42s0DnvbGTIXtmvtn0Uwquk4/51teWNEJ6tNMtb8/jd6lUfcM9h+pDXEaM05\nKZecge33PbarwePC6YlWqwMdS3X5ByhVliuewOdbjdRfaAnCl9tdRmngOqsm\nwb8OrI9c3THCVxsAPHO29FF+SoucfKgXIks7tbGzD+tNYRkyYs8VJhJ0NhA8\nCBZXYqFwyml6oaqDbUqBL+BTXq9km/UKbFIEv6+reEJbT0+JRfGHGzBG9ar+\nvPav\r\n=rmqi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDa6bwv+G8s0ZkcCErRb6A9Q2mrTg1epDYI0tZqsCmhFAiAEaxyF9OX2gytVpT2WdAgqpjg0sk4BwITovNWHdtIOJg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.3-next-1610372389-f2a20d9f.0_1610372501456_0.2979678870970843"},"_hasShrinkwrap":false},"2.39.2":{"name":"@xdn/core","version":"2.39.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.2","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YThW+aMP9/BmzEH/HusJ0JPiVPCkpZf4yzfRbXvSCs4PB/QxCB8ICElmR0vVGmrh3COd467zOWuAkbWx9Op8IA==","shasum":"7f44f34acaeaf010b8cb3caed1bfcde7bcd6ddc7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.2.tgz","fileCount":174,"unpackedSize":663746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/FkbCRA9TVsSAnZWagAAEkQP/jgB/saNdBv2ZVgIu+VL\nvqhH8Wa9V/DJh6M6FWQoy/N0wBLFlk8/qTe/RkdFjaDXyq3T9+PkLxwGrGsc\n0Q+HeSU9NtgvdlZGqY2Ibf8gt8pMA8Oi6QCEiet/RyluN4BTzVz/CDd+jv5A\nPiPeE6jqBQzeGFZv5LOrb29d6RYECnEEKKAiZ9H9W386K1eLWWAWcnnj/E5x\nKOtB0HOeqBW1m6AjRH7C7LACjb62rSj/PBolj3UQj6dtS/ToKeq+K14w5xdO\nKE40mIMEpgdAospI5d5oQzEZ0RnUP3/KG6uvfUgbl5V/RO+QGfyocxmofg9y\n/ASqJqNcMqb4SaT4wce50M5BZvxAXyT/Ms4zaO/ujYJs4c9EzQpwikgeOb7l\nA0tcdHcIjQvjE75eWyI9bUpWzExmjiEjWYo5g1P3NQjMPiWmOZ3QlusVAbIh\niEYmRANzGxNsVylOLKxEeDFI6xTFox82YC1paaIzGHtMbTsxt6GjqqTKOrDr\nmX5pc1UJqZ2C7KKOaPHoL+ZLmF97Cl69Lzx8pwre4jLPkFl0swSCSfdTX3Lb\nbXTJvpfU0arwjl4fle6hK/gLVKJO9Y0t7OAVvE9ts14XcIJp3QbjUIcz+HGi\n+KtiRE0JYO5Qd4cPBPrCccjKeP9SNWCjBHRVoCptmu+6Etm2PtlOrY/7WwDl\nQi7A\r\n=VFVW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGWK8ppTrI3cB3pAcIb86nZDr7bammi7FG5QYrk4CeIOAiAoBPq8w7JInIVe32bMa6vEB9DU0biHGiT8OpG54KrJvg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.2_1610373402902_0.053131344849651985"},"_hasShrinkwrap":false},"2.39.3-next-1610373773-67de61b5.0":{"name":"@xdn/core","version":"2.39.3-next-1610373773-67de61b5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.3-next-1610373773-67de61b5.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-a8AAvY1PVbWAN9vz+srm+WfgRRqSLK/xU4r1O1wqMwSKEAvrOza6CCUOtULGVNtvgA77s0gJY6OgPTI5lBf8OQ==","shasum":"e36441c63ae68829fbcd47b51cb5fc25bb07f138","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.3-next-1610373773-67de61b5.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/FsJCRA9TVsSAnZWagAAjgMQAJrcRlEIXveZpGykteMc\ntKAPSB0rHwdXwyViXn6B9ti4YeB/481FNoRWg1NIeixhkLT7tMMCHbeua0KY\ne9uwG8HdFIk8uv46kOdnaIN2ufhlKW67znPFKiX6j68TwxoVmHx7DPDdPv5Y\nsWozHxosVp90wLkJkPOPOw8a+YouepiFxoQPjD+3ROafBVFNiLzae5Bmfbty\nY0DO5X5rotTLcDEAJfvsxUmB5kCCvYKqZg/6/46Fj50CURXsrxhPKH7aHRwD\nWz7UavayduCvHwXFF0430LwRoxriQ737HMbOzLN52tTreiy8hFsE38/l6hax\nexyjxHwJ+pq3Qfkz5fuYoB9/JmCN/GdBkr4v5xJEroCw8D/gDmirerZpFW0p\nOPIMeh1fZiijAHEb6KDCm+sbJ1tVksjQRJq8fjfwsmCq3iFSc+GqV1BA44fH\ncnfd1N+IcFzW9MCyUzGFXIOPb+MkjqSS6bYEkUBGkfswb9JAR8G806syNuSH\nrDi+/ADWZH0be5LpuvEyThrfLNnsujmW3oCoz+cRtTcq6hMIz4nyPgMvVnyW\ntMMZaekK2U35Elg3V7xign2tvNZ8VhTfxSgbjU/i6T+cByWYkXZ1kdmfF7s3\nWA+pilPehS1Wjz+1daKVnFkCmJGzQd0MpUKSz8EJkJ1QZJB2XUyQ+nk+VMFB\naUha\r\n=M+2X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDY8p2M6csgfbRm6/OpU3QEb03VmVVBbGOEKhFYFRIFHAiEA/3nNbR+WrVkdJXahAyv87MpuHMoUbOXooXiBC9rRxio="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.3-next-1610373773-67de61b5.0_1610373897037_0.717387568750486"},"_hasShrinkwrap":false},"2.39.3-next-1610375533-e2371fe0.0":{"name":"@xdn/core","version":"2.39.3-next-1610375533-e2371fe0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.3-next-1610375533-e2371fe0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-P7NyCWbjZgviPSnbMfQF/ebYI3d4ucw1F62ZIyHpWgSwc5FtjtlsjQqJlXx4gIz2gKO8nXk3v+ysaxX8645Xjg==","shasum":"e80d5a22eb1ae068330805a246d20e0102c90f89","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.3-next-1610375533-e2371fe0.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/GHtCRA9TVsSAnZWagAAYnQP/3+SbI6ewfUwyJpS//Wr\nv9MnD5KuqC6e16x4RNSTeAnis+REmQHg4lPnTrLnVMecu1roz1kovuwKVr5s\ndCuBM9gtepWi9+uhDAxNzxRwvRgsDJpHDlyB1wlPjAMxKisqIziecli/I9Bk\n74Maa7GgZ1kriyh8tnuuch2XAibzYy5a+9OGKz3pcBL/ca1bpPTRN3Lhpn6R\nDFL8FSOB/jKZZ9fQcHM79BRddqgBlRgi9Aj9o5DIxlMsh/GOldf7U6i+wnbk\n/7Uwo2hS47zBm/aj2tqn5duoKWhtNQXXHoN8eVA+QY7RNMuoFcmeMAcusyEp\ngvnOtOqaxmFdZPbqBKf8DQOZwwHIRGmt1CaHhaFMyHHV/glUxnWb0UYgDTw/\nW2tvmssqIdFQ2Sw6Tem66DclMzmvGrBK1G3CzWZwW/JKChfaqdMmBdnHZNHn\n1+lLxtkS8QuFWRU5Kdxdfl6CuirVIPB0ps5Br5RRYSQMe8pImaJg/5847KBV\nDvAmdTtPz9FnFW1q01At6+yll30flk2HI/p1NmnVpvVFhs3RINZiPIJIWhQe\nOHg6oUO4RHsJwztuW3C0h65PcR9a+0wwd/pZgMEkmFsbXotPMaMWFlECSf46\nblWXdEVkx/Ypxuj01RLYWlq1pnx8y/N3RRy4wcV/uiWsG46N/Cq1jyw5eLEr\n3u/S\r\n=ApIM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFHoXfqT6o97gPu5c92B9ss5MzI9HiBfUsVBvF6j6LVIAiB/oKhTdMX50ghDU2LTJiS9I34/6WMq7VqJikFZtbxKvw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.3-next-1610375533-e2371fe0.0_1610375660279_0.2854979689530508"},"_hasShrinkwrap":false},"2.39.3-next-1610376118-702f5aaf.0":{"name":"@xdn/core","version":"2.39.3-next-1610376118-702f5aaf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.3-next-1610376118-702f5aaf.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-r7JzG7lYaYWIKigBNWa8q528Kw2W/JMXHHxmufqP55Govlfxfn5bMH75YbJunlPU2kDv+TtNiS8J+S8xSFB+4A==","shasum":"e085255506cb1fd3b923dfef32dc1bc61c48c1d4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.3-next-1610376118-702f5aaf.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/GQkCRA9TVsSAnZWagAAQlMP/AncT+HVVqh8gPvcyu+J\nldN4k27HfgEmtCepegpfVwUrIHXYqoLKocizFSMsrGZCyCsP/pk19TPAQAEu\nr3GUd5fe3RGOpXVWxB6T49DxGI/9UPelK4Ow7G4AvbcFHGpRiSVq/odzFGNo\n0nbZt5wMI0n/U15LwTNhY2E/h28B3b7x4tgtWi4Wsn3ih2cvxG0iPGcvLbYP\nELCydtMIP5fGJMk+iTq7zPj4RKM3MTZ2l5bhY7iyv/jSqeBfDuWMXQ9AQ94u\n4Re4hdUP8T9CeGDadNeBYXUxH3gs+RvfIRtQ6JB8gfVhz0FcXaxGDZCqskLV\nznwImxr0PNQQrVir+f3MtvKXd55uriBEoseOfPm4OvCLwB5xPpL95fl8zJOB\nrC0OLD2krJjcxr6sV4WjWZG4e8GgaHfGs0Fr5mV2dAkionR0W6B3c6IeL5Om\nhDI2l9EyHIWKbyJwz6AGag4dTnL8A+MKjGeK30+sVIhfzMBhUu2GdBpJ//LE\nDhxIkhenABFt7O7FGiOfaq9lazwIoPQTt7Gpn4b6IZLXKVExnMiqPSWbLBva\nseXzQRB20zMNqiXSubY00ZrNd9Xvuqbf8Me9mGRNms2rcsYkcUvtW/+nTjCV\nETT6JnDwm2gS8LVF6liZ1O6JtseStI2M735h3z2bTNF9P9pTHoaZ8e3KBSMW\n5YVU\r\n=d1EU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzNsdvVqFmxT99jVBqL/cg+/WWpxV3nowENJG5adc8rAIgGigt4+W+I6xsumfsxBe4g9P2bhtgIrOHkWJuWLLLYqU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.3-next-1610376118-702f5aaf.0_1610376227557_0.4962924904488746"},"_hasShrinkwrap":false},"2.39.4-next-1610376834-75a39ea7.0":{"name":"@xdn/core","version":"2.39.4-next-1610376834-75a39ea7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610376834-75a39ea7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-zHZ2aIq1WbV0udjAg8N79h6wS6LNZEozY2sLMkc8oZu3YgdTFq1HXp+o43s47KQh2BhnYsarn0T6Uk1u4Ciilw==","shasum":"886d43a19aedec2870cebcec1850f332f309daa6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610376834-75a39ea7.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/GcMCRA9TVsSAnZWagAA35wQAJiOpdFqE6xb7KY/UwEh\n+Q7jrQ/H3lrlu7aRdbVppYbX/5sG8d6ODnEklazdJx+ki6aaDtYROHv34T/f\nPZIuDsGlEw85b+BXujgZ4GivBQV7zH18jDSmI5iocaB1YzKIjVUuTKRf0GTO\nxp9LAa8cWYCpg/2WYl4njtwHuwcyFpTjuP61fRYI839jOeq5BedujeDUKJEH\nxwpW0MuH+Ik4EuJqxW0ycckUwMhKS9Ml59hKdxhSi98wxqVF/JkmTBV7Km3F\nG2yY5MWislV1xd+q81wsXbwOYRFs06SUU/kHyiSkJBAMbpRCLlQqTXD+ujTA\nTmctIriiR8WmprwOwZMbNcX+uKhPj0GtcXtLIaUaFJ7QIN3H6Uc5nEJ3Ot6u\nN2ZTADa4XTjyYL8BsipxO8C7tPv/nzxPbOtu+qsqu8UE8TB72ctjEzQimsZO\n2gqDW84UGj/Z3/AwaQCiqk1WUVfslmYO1Tc21ud4zzuFts55bb0W6DdewuZh\niGfS0KuiaeDwOE9rues5lWAwnOWoBDVeUvpgoK/GKlI+oJ9E/XGfdFwJ9cGc\nAF0yWM1Y5l2qaUWkylOa4SK1zjrjUJzILSmuzSnhXfdtr8/TVlV9ZkcLdxmx\nM0AeNBNr3hRIPcEWGm5VZfuiHvlhMDw+Zcr/4dv4f4JRdwTCpBziupxrxEc8\nqbQg\r\n=0kmA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEXyt9masDA7Uc60T845PjlXTHdF6W5BsY+7LEqEb7mfAiA+FZfgT0dgDg1iWjXtQFyim9VaBIhvdET9lnrTcF+KYg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610376834-75a39ea7.0_1610376971993_0.5558151910219853"},"_hasShrinkwrap":false},"2.39.4-next-1610377425-3d4ed63a.0":{"name":"@xdn/core","version":"2.39.4-next-1610377425-3d4ed63a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610377425-3d4ed63a.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/mw4Q+iogxvUtRkNeO5WrzP8aYBPKwuD7SGf4QkzvSpc3SJvjQkWcnn9vhtHOouwPHZorppSoJfT00ao/wXVTw==","shasum":"1302682e3568ba39486afc61342a990e5c527ce3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610377425-3d4ed63a.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/GlOCRA9TVsSAnZWagAAQ+oP/1eyV4RLZHDtRWG+03PV\nc6MUACxgW4POCQV9xC95n4FT75Zth47aj1miiYbwQsrfe5yQnqodfo0KXwFu\nsExP/62asHzibcDk/ocmF5+5Ardr6dqdj1eiF241ksDQtySE0CwHMfC0eMMG\nauZOSTm4IpYhNQ29ixAKYzwWKJuO+hFPCPgUCIh1IvV70hxXSHnqBwNkUTxU\n4z71au+xCQZsbR8WifOxCL8mUd3DSk+krpMsCmepsm1j+vVcJodorZjKkLGh\nKund6TXlEJsaoBtAzyq7tnjHHS0+1sYK+Rp0kZ+wE5h9Ap4qs0U7ca8ykcmP\nZuxud3FPL7szgiWVSJ3rhlp2bXJAWyB5fx9OGfbd3ezW92u5478rsKRQGvE5\n8fplKhj9iPK3XMNiqE+7KUv7MWDVTqM8bjhipkjE/UeOdgBSWIbfuCai5Xne\n66qrg5e8xftsgYh3z1jAHSItvHi5bVvFo2NmcvzkelFhykAVLfeoePxzJH4A\nypwCoKELr2CrlxTerrldT3yULP82bZbs78eDeoDEjnWTJ8R00HJpTz34aJ3K\nAdco5VUHZKN/gphviu92hPGGQrX71bKinTLNqRQG2QMUD0yXpJ0A9c4799Ra\nNe0IVBenHGfB6xV1dkPx1oWi8tB6lXpwkc2FjYhMcf1Xl2sKlcda2KC4fRj1\nj9P4\r\n=XKOy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHMinYrcpNj8w05PsUcbHun2d2SSiOqXl/ALRd6vSpVWAiEAuJruU/rdN7mB2nj9Q4PhNkVBKDjckhSF8ebJ5wtbIJw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610377425-3d4ed63a.0_1610377549723_0.41187206612034877"},"_hasShrinkwrap":false},"2.39.3":{"name":"@xdn/core","version":"2.39.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.3","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-MeVk0kdQr3QR8a9qzvI6ZYijtWTLSvn728czFK+zQzdjX/E+RK/VHoHAyODacLnQeYHCZ0+tnTM4QY1+IywYXA==","shasum":"80c0f17f34fe617f15f4c88dc04881e676daf719","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.3.tgz","fileCount":174,"unpackedSize":663746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/GqFCRA9TVsSAnZWagAA7tQP+wYFgMV03oCfrGyuMzZO\n7fiIkyLeZ/qtb/0QKaqXjQ7OB/5OMj+1+Gz9j4eAFhbB55QIGO2K0gQD4hGB\nrFT91hiAwslFnKeGvfERnV1PiktN/ZKlQB+5CAbb8c4GOiJZ8+q7PdyR/4Cn\n/KMgScw2g/CVpp8GgLd/1oK1H+dxgft4zFq4bZLzRxl1Vmh3/An2CSuctmRp\nOqWJYCPom4BADuoNIuKxTJSQuVJxIvMmpif9OV6pf0ldc0A1pN9SRB6ymi74\nPvxQhP56melqVlMSdXdGmFe3wy3II9H8pHaKVdbANPA0iE1ZAweXvi2AGDio\nCJkcoNw8BJr1bqrNdigS9XpRMUkBzYp6g1fvf7tbpKIS/zrH5YhPwbw3PK8h\nwnseygIEIg60dncUs0TCF/9bXd44J/62J2YCtg65NFLb1PE3PU4QG2X7krqA\nBjmmSIBAl8G9iafVLd92d776VuOdZtLZVLC/hdfWr7UJU68l6NExnICRhvJU\nEtxBMWqhgqsxS6PCX7A316E2lGpx47VmGDsJWjoT1HSYpl4uxXkUjWciTe7w\n6XCwFXiS0+0fa9rpggShaOalgGwPgadibeh4CEibFBkznkop6mhDMartPYFx\nwLWihrjbw0QBg2cL5IcHfV5nQxPhc46cxcPkpsg2sTozKYbIsogKX7rmhV0O\nB0K9\r\n=d6w9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBXGF6s68VyXu2L0ro+zl42kHw7qIiHao1DhxhSVSSUrAiEAivnEsvAqxis5GAYq31Y8ZADMr9dAWmr/ZyDcPquJJdY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.3_1610377860603_0.8093981685537659"},"_hasShrinkwrap":false},"2.39.4-next-1610381328-f32db9ad.0":{"name":"@xdn/core","version":"2.39.4-next-1610381328-f32db9ad.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610381328-f32db9ad.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-/z/Yb7hoYPCeaohwTwEJ3U281WqXMFIN8/gDgDaQIvPSV1VE0JDPv7QpveLhh9sf/Uy8cNPbV0DDB9NuO++GTQ==","shasum":"484488b6260cd1caa12e91d9fdbe48b7a647de5a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610381328-f32db9ad.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/HiECRA9TVsSAnZWagAAUtUP/12lIuxBDhImViuzFnMe\ns+GodM0GeunBVo4dnx0iejyM+MsEioNm9dpxohmx0gv7aj5Q7+kFPuWVNkcE\nN2930exw6FP7QstqshZoIsIHxPe0r7FQ2vDVCX4Do8/lkZUGPMEmsoeOso8W\nkvdLagpPXem13CCKFeUrO8TNRwQW3jjrEMw2Nslh0ccxNtPozC+orrKtw3r0\nd7KtB3yQOUA3EcC5bOk2bPFOSCG6IUfPuQa38ZpWaJZk0PeWH6pLLTvRNx/w\nFkL0VH+bg9iP/6KHDWdx6DVaGNn3IG7Q3wtkeOWiOY6pZv/ctrrNAlOa3b1l\nSeMoDT4vOKMU0arsqz2cr7Zo4b2fjRI8vgYH//k5iHM993jc000i1lmVn1+f\nJxUa4i1VWUI6RxYPkHTxF698T9VZSzHhYRt6E2mMh9+ol5IY5GA6TdRUcZTJ\n+n8VQuEFiOmYTsiUdV/VUwcyazJvqpRCalK5ab6qIIyYg3PfrrNuowTXoDIT\ngqjtzHWPLKW0M3ugklBl4bm3Dd2Fi0c2Rq5cORmFBKWZAtYr1qIMBWiQ8wQM\n6eA/D8uByV/iiEwVs+s/DzdNEIgTPXWxSnu+kj6770Lhb5XUMp7PjZD4AMWM\n+2dfr/6VPhGuCoTMT4dsifvk1E2YZSDFkrZRld4mHujoiS1/dSOznQU7A6IA\nl6ET\r\n=57nU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDhDswiTsNiN/+0KwjICqpYI+IfNardKRAIXt2VAsLz7AiAsP5vca2VqhwPfdhCDJw3C+Q87aW8R7zFVu+Ln6VVMiw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610381328-f32db9ad.0_1610381444175_0.16746350151298772"},"_hasShrinkwrap":false},"2.39.4-next-1610387919-d96b22fa.0":{"name":"@xdn/core","version":"2.39.4-next-1610387919-d96b22fa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610387919-d96b22fa.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-9Ra0BC2I15YWywjweaA6Z2Ibi19vCTdx+ezksioakctju/znGdRXF+k/H1WTPJ6OGIV2gWLWga3I+GFanYdqCA==","shasum":"cc5fad05e1b12af9c933c3ffaf4a65488a00a2e3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610387919-d96b22fa.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/JJDCRA9TVsSAnZWagAAW8QP/iSzOud8vi12Pmm1KsqN\nw3Hay7olwwECXIGKOAI4EDTu55IbvXwkUmpXTzcENbFu83JPjJ9+V4xNILSu\nGDF/jkMbLJ8MapXi2JzWNEjkhVxc8Jmnjeft10V+FBJPg6iHOmvltw+zUTXB\nhqXmDekQyCojMbi4tf2MN5ARTnqgwU5BHtL/9anJo0dTJZ9ouHXsNg9w1g2F\nn+PBaBrjMT4J3phbzV6WzhWbEYvGgIKm6ch+4Vr46HDRvq8kV3AMBR+QItdC\nAZ+xGCZTESU8hVOLbMJLCAEHEPgL6ZdFQvPCb7lJRSsncQtEEwDECczDd1B7\n+mjrTMEK53zTWQb7b9hNWc+qZ40OpTPEMNEncBDTsMaZLxpV1Yy19zm/aglE\nK/3z2ki6CMDvAF7qjpcmnTjlUH4LIFu/tMSY7OujFsmCVkJ6Bw7OZd5wqhBi\nlC/RuiZhzFUHM+aF3jczCovoeWzXwjkv7BCOeplIBj69wN/0uE39kzq32JWV\nDecqHsx9JTHIXjUhsdcoEmApFc6Ws+29mmuRExT9CF4RUsq+YKFojt9m8EoL\nZNdVBV57OS+jTw69obnrFgN1CUscW7W/0FxDNpZkZiqtKRiqZbMdisHOtM9L\neRuHLYN+eznoDxmAy0Q04mrtbcSFi63fYbGCtJVjapGusqiwr4N2guUWpFyS\nV7mY\r\n=XaA/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvGojw47Aqu8I3TTFPcFxU5o2+ukwmR2xxAIFvVpW3dAIhALkfimTUG+NDFieXfxV1DEhW6Phc36kQuYfPHa8WdLqP"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610387919-d96b22fa.0_1610388034338_0.252724234972624"},"_hasShrinkwrap":false},"2.39.4-next-1610398806-cc080287.0":{"name":"@xdn/core","version":"2.39.4-next-1610398806-cc080287.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610398806-cc080287.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-fWORk5ss4k7csYPzsh61S+fl5HeXMPKsZawtgln3jZBO4Tac+KpHzN7t1VTYF4+Ok5/d10Hk+QkFhvOvolWsFw==","shasum":"f01e631b41c8d5d9bf0920979be42acaa5cf7a2f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610398806-cc080287.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/LzWCRA9TVsSAnZWagAANhQQAKJinF1L8bGY6utFlfeP\nNZZXD2X/GZ7G7XnSPEWnF1F0pGZG9YNoJst+ZPsW0p5NjK05bdet0Cr9H/Wz\nN84WIaSDqHSaXyIADdKSBT3GVxYEAErB4RqCqPn3dTm4HPwf5ACJa3oUenBW\n3jmCdM8vH1TToemCfvEEeWbg3tZBbYwUpRr9ZbfGum25UNPdMFDZAZFEq+zX\nhkWaLsJvjfOaIFXtftUwsgRdxdcocQLJTQ/KNOP0DLJYvYg1SBqsjI+kx3eY\naQAsi6MPtgc3TAL5x3c0bHZhIAEpbkjhK0ob5QxD5a8pFSWs2SCtnBek3lYs\ncDyq6NoqeuQBoW6RKFaeQ+g8nYL85YFrdmOdoSD7XoPwUplfAdomRSkzh5hB\n9BNJA9YIxZF+hEcAHF4klQZNS8Ir/UZ02wOjtWsIw06NCQszHP1JY7N3aUAM\neVpX/VBHg6X5xwDlfqgbSMzNBk/gfd8ET47ZvNsE6URoC1z5LQ/4xO0Uga4v\nu6ZTqYhdktfimg3hdz2kqlnOuGDLMsksWvRb1nEKOBCLRi5E7SxoIaSkCYi9\nqYwTFzkG/FGXMP3fhMoxZQjYzDu97cTcmv9s5eAMZcSRroTZru4m7suV3OC7\nbAylopeC8HroWOaiwa/daqGRI5TLE90joegm+SR6Wkcja0BpejFHBd/ODriP\nC0vg\r\n=OoxE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHyb9/+T4Kt3/AS0cIihPj2NTr4k8mdiz7arUVjAyCVZAiEAnBjMXrdVE9jX3mubzsyBbK6BsUZFOxb3A82lv7If/lA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610398806-cc080287.0_1610398933954_0.8743128511561511"},"_hasShrinkwrap":false},"2.39.4-next-1610445230-0bac9898.0":{"name":"@xdn/core","version":"2.39.4-next-1610445230-0bac9898.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610445230-0bac9898.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XyqTtFOjFl/vrUeQBmhcqRbi8nZ/LH2N6JS5nk9DpS6XwJ0o4Q5NwWtvv2RjfZ1YXSsTpcr9BmljMYqZT2Vzjw==","shasum":"53849dbf6c2281fbd59c535867e3e2032183358d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610445230-0bac9898.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/XIjCRA9TVsSAnZWagAAbDgP/jm2MDTC5DpUTEdZZG51\nqB1c/rdDDl13FG/1nqDRyYyKjiuJr+ayTKNfpXRkM4FZgiLnl15/zll0fvqK\nTc4lbIojVnFgszzqUoCSVBIwKzObtWM2Fm23EInDs3Kfz/UJzVtgYermCJ7P\nLRkqbbz/LLZ8Gosm5tHFsmB9zsEbRjuWPFM3PTj+WVtZN+SZfGakUmID89ch\nxic7nlSWx/XqwROM5eAnHaVxWKYYbrzBWkEXH5pJ2+SPtyIHeczCqqFpkEOS\n/JNh9Ys6CThre3Fg0Eaos9IvK4VRitGuMmwUARogzCTgBC4klqf9FeFPNJW/\nchrumS1Dp+LJhUqhhVgEqAOvGI2W8qSlR3KOGWU1d+Nw+TFjuPvQq1NsYuKA\ngnWjTXNIRSLt4yBV6ychnmtSgxmaZDgMXbsO3wUdjAhCSm/aUOzXxZvLoONc\n+Tgtd08q1t09Cv0+x4u/elypccrNNr5ZZYCLfFF25vHza0YOrPRL42fJGbCp\nLUn4Sx+KvMiOlDH+pf6RbfSImiO4VSj5S3X31GchjdK6W6Lmh0JFky907HhX\n2bFanZ/O4oIlBXelB0GmgolmXXWei0G5M73Y2dh0Z2O+iqleeUdFNLCgJLxb\nzEX6/Hw1wRocxpktCqod5KSU2+1t7Ky4IGo0+Xsf6ORu1HtANz4QySblQQUa\nd0AA\r\n=/2e6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChaZ6wqt/RXdaXPdjUo0a/PeIfrWPXmQNdjj5N/6rTWQIgPVAqsrcinV+tkqgGVNankGGwjORxsRx+609ww5r7k0g="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610445230-0bac9898.0_1610445346864_0.17249980063486037"},"_hasShrinkwrap":false},"2.39.4-next-1610446358-0bac9898.0":{"name":"@xdn/core","version":"2.39.4-next-1610446358-0bac9898.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610446358-0bac9898.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-bORFxS2g+37Y0SNPnYOlzskVRh8lOfjAEWE5VXACmlawZCwLOeMgLOPiEvMXEfEo+H6Inyp51d9EtGGO37I/EA==","shasum":"88c6ba9863e74e7f99136b04c493ae482edc68e4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610446358-0bac9898.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/XaGCRA9TVsSAnZWagAATrgQAJ+YLbvhFzUYJXMrejNu\n6+QyCrvoYdt65FKbHZBZuhL6dDK2AwRh81zPhOCaeyRnwNNdcDGVlp05Mdl8\nMPqXbrstETImfhwy7Crdj9Pzxg9lBIkPJvENiZPCcFWNoJAuME2tmv9xgsMy\nXIiHIbuAbJOWCt6msEXcDrTuhWExi9lV/BKbf+DmkELfMiBL25tDKY+owL5M\nXp6CNQM0a1RjpcX36+hMA23crzj9EYIpFNnTXl0q5KGxQ30nCf6dh9TWne48\nbNI1+9hypPUU2GO/j2cY32xy6q76ls2hmnrAwsOyIHR2F3cx2m17xuxw6BS2\nge5Ip25hMQDVU252fgFFO43FzYm5qUZglUVU8M5odUG2NUjhTmgjDbVjxRtU\nt0SQEwJlYhQaa8XX+ViOQxHhhCikkXuzGn4f6R/a7awWow6vbsrvpYBa9mlc\nJ+QyOEOltmfxxYKut0u7LX7P6InTecYeSu/L3r0COsdsH/NsnvzFAURKQlfT\nuU39Mxv076I7fmyObphUbeudWql9Ro0mUNzROn2UsR2vppLY9mPMr0GBx6Fb\nu08HCgoqpoLBY/59CIsyxPUY9cCG+pMVhYEwCd8+/iMozYCGcJan+GaKtvdM\nOnoXDRkeebKKnJYW9eMP44lfRstc8CuMuPocyLf7Jb/+8P5igLRhSL247iho\npxS/\r\n=JceC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQC9qBkNoiO0zIAofi5shPgbURby7QbOk0gHAXT3XMYs6gIfIxC8NrKE35PL0IWtpL6X/QiyiVx8NNRomjYYIOSk+A=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610446358-0bac9898.0_1610446470270_0.17811758887790297"},"_hasShrinkwrap":false},"2.39.4-next-1610454348-0bac9898.0":{"name":"@xdn/core","version":"2.39.4-next-1610454348-0bac9898.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610454348-0bac9898.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-5ML70W7PR8IdsB2akRXr9lRNwleHW0ml0Z0NIRkcWbL1ScoqidTAbKoRVvE0/M+Y1sPGs4LhyPMGWBrSjt9yEQ==","shasum":"603cdda62f978c5fa662ebd154eef12e8c9221df","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610454348-0bac9898.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/ZXRCRA9TVsSAnZWagAAD18QAJbdPECmUM5rBq+dIpMt\nFKX/ouTGgcicaqh9IZZDWAJpG0Nt1q7NRZ0du2uKeXSL3ijeLxSVxW6lcgzj\nPcIHOV0WJasQgLX7KgcAbl3cHyzURlyaJz7ltbLqmrXeAuLem7TECblLbu+G\nBjlFBdjyzOqzV8eMYheXuWMkll2vJ5sk9hUk20q2oyw/2vS2HTPmeQE7r50T\nUlSgg3EdDc9Kkv/g5NOOX5FI6go+2iJYh17G8oNlFlL4aMORV5EoJmc1na+h\nGf39f/engyrFqJWJhIY7Bkb7ipDdkk6yga2u/6Ao+kx1wccXLO8NZIXgbPvg\nOycvfFsRh09RfhQhYC5iXPFnrQsbLht1j1ZclxZo4rfDY1BQcmXozpAGSFDf\nFjJ/M0rlrMkDaihrnkEZBYSHrMie0EIDSP/8noi31BhGy/no5HKFmrh/5mSr\n77U+kSKmblz2c/fMbDpxbdfXp2vZtdeuwiO5knE9jbEsK34WTIchtxPuxhw0\nL5NCX9dh5yl7BDYm7DGObtr3baJwJRuBm//wQzT6uWeh0Pa1FzQkEALuyx99\nqtCB7Bb8rHi7L5Um2B5Ze4TQsMyvDA9C3bBfuggzADtWytVANc77WimoZFmk\nYwf//4HYxDB5lSXmL6jcNafERq2yR7vocZHHd5CSMD0gqlVqYqDrBRiMbf12\nr2HG\r\n=hmFh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC6vVZJVspwnYqP56KARAxvwbLnD4u4JZa4+BVveILZMAiB9b9g4SUllkQksuW2G0KJQOgALc1PFsgW1j0ZlfuqyTA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610454348-0bac9898.0_1610454480456_0.7203957003867851"},"_hasShrinkwrap":false},"2.39.4-next-1610458048-35730d9f.0":{"name":"@xdn/core","version":"2.39.4-next-1610458048-35730d9f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610458048-35730d9f.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-FORjy1Lqhrnsn2RyvxVsB/XobNB/wUAeP4BL6Od7x4uhlZkqrCvsbkwbZMwWmEGWfWgLAlmV+o0WtMs8ClhUPw==","shasum":"dfe6b3fbc43dd7acfec522f3f18d62819f62ebf7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610458048-35730d9f.0.tgz","fileCount":174,"unpackedSize":664203,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/aRICRA9TVsSAnZWagAAJx0P/0yp3nN8t6QpfqX6sBoA\nbQnMzcSj0E2hkPPJ4cbc6OXWyolMVk13gex7/kbxN8lHRweTER1u9ebFub7e\nhCttKLLWsOJ0eg1scx0meL8rhmAeMh5Z4jFU1ReTycDewHn0k2Cqvh99lDLR\nldM/mi3Dvy6Zg/wtXNL9dulTYvm9/+lxeX0mdfY+h73Mbzk8y3f1a/ywokaf\naWA06S628nfWarbdqeNT/bI1Wi5QcqftPUr9O0XenW1EYice1yiUUXkMkuWh\nSE3zM+b5XRyPwrBLTQRy7i8jxpZebhfJ8Vj9yYuhkU5/9XaC6QeMmQvIYS5J\nosB81Fu487oetXaQEuINXCMGRgm6rYPAJC0gVh67uW+aKKEctozodneWjspR\n/TF6XYgUrAYRddhzMxdH+e4usHiH/LiTIlMNV5FmGdHeMtZv3gL0yXwdmaJ1\nMir2TCrc/RtPF/0B2bFw9hE+R3VcTeJFOTSTzkBKE43M17rrETTQpC2Yy9SC\nh9eghahEfCwTGjiLDhf5czYh1edbgNPjewamocabXi3A98suTQ9JVgAyUViU\nQEM65LAk8Q04OIyUi6UOXt8tLPJBnn3hHSpN/l2lPN+DKs1r4VsMNvIrAYrF\nrSKyhYMg1IRPacRav2qx/m9EomjU5O2ywaI/1EPsm6s+kFBYCCfLMDfTJL8J\nkhLN\r\n=ESFe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0g65wUg19dAAmjstJCMnDRI4WtyLKd0w3Xo0iO574AQIgMbpiv5EiHbukWH775+MswGQY8f54yWMDNw/OWbu05Rc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610458048-35730d9f.0_1610458184317_0.12960002029685436"},"_hasShrinkwrap":false},"2.39.4-next-1610461943-ceff7603.0":{"name":"@xdn/core","version":"2.39.4-next-1610461943-ceff7603.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610461943-ceff7603.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UzZXUoLANfunjkOv3eQlGgdmCNAKbRhEUWKebidE7DEbQ2DSfqo5ZcaL88M5d9fIPS3N0wvOSCfxjb5Tl58WDA==","shasum":"2279b335ed5a3b8230889bc2ac457ee4646e22e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610461943-ceff7603.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/bN7CRA9TVsSAnZWagAAOhQP/RUr6OIfzWAXrtRIF3Il\nDZgAw7ksK3feTOpYLjKOtpNFklR6yupAtgadVohfWYiZ9QJMBhRAqD46GvXY\n+hwiAWOPkaDoHr50fXOY/f/zyY5yijzvAqsKPrK+QzwW5AzK2o2I8Mt2aB3G\nO7afAFXJNZc/rtdUbyq7DXaIQv4fPlVOgiI4YN1OOatTC1/uR07Sfn5UjnLu\n1Yp2BMs6c5bcf+9oWlT/ewHYb6Ybn/GZps9P2Xk4elybK5bBduM8/25IkgC5\nDT7Gr7I+eevIKnqxrigQASJIAdN9TjdXyjhkn8H1xsyDtLv1oSkK9zrC8bf8\n83O2qDExPcPvXxrYBxZFfAVZMRrGp8Ay46mzHeStUMwrv1hGgtkvjDQ480Nc\nlipG+ZxNd3F6YY/296Kw/YjbaDRShoo19mfzXbuDNhg9PHyNSI3bo544fS0C\n+jkjDArHGFO+xcMMHQi15G7pkRYq6dOOc6Sok3659pp6vJk///WpejUZ5nrI\niSbuA8mmvH12VQlT/eizidJfy1WbsYxBI9p3e/wu64xqz7e1qTTq7Tl6zTEp\nsaSLWdfNNdMJTZCyLhTAPPVNyY2hOef24H7qB93KzYM+UnDXVeZoNNeFnmb8\nFvEox8OEAAL3WHOQp7FqxogAE0jEZPDxhiQ9e7yBYm81G/V2qM1hyIecuMTh\n1Npy\r\n=2cQO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbTsbpj1Nojn7YlVV8SlVp9CQ+VdL6l1JoDy6GMz2nUwIhAOd/u2tXyhhsJ8zLG8UPycjZCbb4cvVeF2gOS/tBkqJq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610461943-ceff7603.0_1610462074194_0.20513423493270078"},"_hasShrinkwrap":false},"2.39.4-next-1610462423-4268d45c.0":{"name":"@xdn/core","version":"2.39.4-next-1610462423-4268d45c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610462423-4268d45c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ULQeOGwJoJ1gx0IoSErCcGO3rEkhboseNEQoVOiwuKrNmWXqi65XF6AsGk4wkPMmF/WD/nIn/AhYHlm3t0CfrQ==","shasum":"dd51f30d2f016e22f2a474b0e7949539a5c31ac5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610462423-4268d45c.0.tgz","fileCount":174,"unpackedSize":664203,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/bVFCRA9TVsSAnZWagAAnoMP/ilpw2/k8qy4VTG0qBiV\nznUmX6nRkbFWDZVqW1hQ30gh527qng4rblFJiVR3YwtdcMUOCaEbeMAoq8Dr\nnJt7FeC3IDvLPt10CyUvmml5VWH5AXhnpe1W2sDS7L2QTy/2FbAbYPaiyEM1\nDlaR9NEYNKlwLsDbogf07taV6le5hGMxuQTxoicCFavuAGppSjPy6O/f8KdJ\nJwHD9uKcQifIcxn29HcW6mvfuFNLzZH7i+LOSJeFiUBfjJjSFIReo7A3772K\nNZSTEngA0GJDj2dbd7SYj97lyJp4mr+zCMo3l9a49+zPd/8vNSIFSkT7ZAVQ\nmtDUGMOHL1jH/ULsyGVXu05oyjXyKVoToPEwDu5eHx571Auhu3hAzeQCz4qn\nEhy6/GGTcTotAwvG166lknTIOmejqqmX/IQXMTxa+sK/fMXH3Mc/rkR/UvqT\n/+O/1bG2JCpi+tvaTGXAsj2UK/s6NJ/rLjmmuyB46Ca6dKLhT22PNChW/NJ2\nBbq87DNE8uyhch2Pvd8mroL+KlnTKq1Wun5C1ldj4iW5+5FR9WegmHKNqYqy\ndwnJP6+71Y0xZ6FE1Cb8i5D+Z8JtmhuKP1fj7KzILPBOhskLl1FKQwKoQSq3\nYprQ+bASajJSEQXdVvQtbX04uq+B95laVU6tzNWnMaNnL1PBow//oeaVS8Da\nXkFf\r\n=j+bG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4AE99g0siihPyLX+9DT6oTyvNmGUYCiSeicA3C7J+EwIhAI+hb/YMAbAflRanYMeF5gUTTxpU8BEaFBbi5ZhO5dxa"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610462423-4268d45c.0_1610462532574_0.21089894122011543"},"_hasShrinkwrap":false},"2.39.4-next-1610539074-999d50e0.0":{"name":"@xdn/core","version":"2.39.4-next-1610539074-999d50e0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610539074-999d50e0.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-fn3FD2aCLkmPpKXa2AiuHdU7H6Q7Zv+VVKpmEdpL4z7jGJ72tr9YhCxZAyB8vF5oU5R1g95df37LBIrp5w3wcw==","shasum":"bd93fec6fdd41a2ac19654b2fcc649d9ae0a44ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610539074-999d50e0.0.tgz","fileCount":174,"unpackedSize":664335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/uCyCRA9TVsSAnZWagAArs0P/jUvk6EzlZ8hv1mNOqCW\nm3ss36rXIFs1Uo2kxWhGPgHrzX5P+DqjlYUbbhlFw5CPEzIMBJaIEmgyphxC\nWmJEndhZK6f/66l4dBCohTDSpdUe4PsJ8nTIpkJlGm31G5Fe84OpNryo+bnT\nufyPAFsmAIIuCumymOaKzSXPG4/Lt+31LO3M3IR6D73XdO7Ek8sDxr2+uLKt\nUAOz4A5rMVVnuf83wko/2hLZeh9kI9qm3r2LTdvQX7fC6b9YlLhXNR6socAZ\nbPkwDs/upFqFyLVPWoCua2JoFbIyUya9BoUBaZbX2Z+3Loam1ojCgy+gSAyj\nY0KN+YJfA7ED5CPZ68ovWsbRHyOGV7Ng0T3hiy2vGQ21bLX1sPS7UHZOMV6/\nYPORvHcdaok68ZUuLbi0XCzb74aZ0Mw2Dx55woLeeLFGB4z+iDrQp1vZxRhJ\nTufsMV4wxoaEZXoeVwUd1nJP+5WpmTPXAp/T4T0aqGuwGCjGaPkj65OCq9Gh\nlZBX8ChhjERS9gh+EKHV302SEqsUJ10I1Q8zDSAI0o9WzPnLKLua5IPSCOA+\nCmiFQm0osA5zDKAeaIjjoVbYrp4M3pR1tZLSWNg6ZKDKNZPGE51j5fRa4W2z\nyJ6gLekDgmZ/bsmq3eYLabxCNFMRzfDKTBJU5jTn4UtxhH4KzKe1Ts+5RRuH\nknwC\r\n=ziIk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsVxcgf7tKkpjhbNr08n+i79beBdCwkyfK2ExegsXYCAIgeAR8TPj9bI9T5rN0/4CT/2Bu0u6tsQtnv8woaY9IJHo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610539074-999d50e0.0_1610539185872_0.4905435409441341"},"_hasShrinkwrap":false},"2.39.4-next-1610540266-024b9151.0":{"name":"@xdn/core","version":"2.39.4-next-1610540266-024b9151.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610540266-024b9151.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Q1ZtNXyzfSBo0CdO+k+PPP5Q89En4HMoxXdWv3OmmkZ2WX8XOBT+Ug2xcdcm2/FjVx1VWZScX9lZVnft9g/LhQ==","shasum":"5b32d2f01f2805c4f9b987b7f0741935e04d920c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610540266-024b9151.0.tgz","fileCount":174,"unpackedSize":664335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/uVbCRA9TVsSAnZWagAAwsUP+QCmSzc1RB0XAWSp9aKx\n4rXFAZdYU1o7VHe9xNfE6ZEnRkkpveB/nuIcRN3hdssSn8egzi32qyLrH7ON\nVkiFPSxw3b8HQw5Xkn4IcL6t9XtQADhZsWJAmzEzCr+ajqEJltemKWl4LwRr\nYyyzhBaJO1kYS83jVU3AczBGi9RHrhnpU4eHVST3IHD1/ap3EWOTAR5r6qWj\nUo0lnIUQ8/F8RhbePV1H4UP1K+sq3Y4dL9FoAxWZMnbcWv3tW0sZPb8Ekt8E\nyVHgokRKNsoyihP4lp0nYv2EzV6gS6EDO7SwjdalPpQbkzj6xpx084107DoC\nzVxnzS0fCtnsBt6xy+kf4W50nTgPSU2uD6FTqeamynKbTdES0dvxEsN4LU7O\nAY8jrxn5gBAeIi7BMs5wUXS5F7ww6WjKLCrjr+jiLHnA76knLxSfYQ9B+Yzf\ncfufvCPkmsJejEp+B9Aygfoxm421IeKtt1Pw1U307AEQtR+mx2cp6Q9iz2Vp\nQwnTgZNC9BwJgEZh90yAQwTToY31qYG+/eMzjdGHOcctD0juxo5rgpduyiY7\ncgFbVyTdfp2lT9trv/ecbZkxRM8T9S6IzcuxojYFYzjuP7aMBrSsRhtQmTh0\nYc2NeRPztwLibbGiBIVT3s357gHDNaQNEEWnSPZnOfsO3hFaXVYojq76k9+D\ncPP+\r\n=c+Hn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFusWzbCKBWgYdsY4D5AXlS/E9wz4P6ETburNuaKmU5mAiBHTE6ucLnzfGUSscBbaa2uHjaqUrkpBH61F91xek79Ow=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610540266-024b9151.0_1610540378533_0.5572364532092777"},"_hasShrinkwrap":false},"2.39.4-next-1610540359-5a18d3bc.0":{"name":"@xdn/core","version":"2.39.4-next-1610540359-5a18d3bc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610540359-5a18d3bc.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-fYWJsNAQynfrU9Q3ACVzUuokCpEzeobnv3FTAXX/9dO+ZFLVRHbes2Xd8iPDgh49nxnI38kajP6dZfLpHIp20w==","shasum":"caf1268b7dc39efc2937e9613091529878ba1dea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610540359-5a18d3bc.0.tgz","fileCount":174,"unpackedSize":664335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/uW4CRA9TVsSAnZWagAAIPMP/REJ60S5ywBpf9KLkp32\nH/7Pvrkc0QcePNuaL/6jmK6TxHTEDp2sW3Jw6NkFqGPzEaYT+n/s6Jpaf2j3\nb0Ml8phveZJRHBgzpvNVWqphKRXRP4dwysOkqqAlcrZQb8wJiwhPvUk7FGCC\n8j+PFHjp9iHtFvPnN/Rbyx41mhoLxkVhWsuZiRX/TlnFtO9GrUtdw8BDxn7x\nFFlIKCaijGdJ3InXGaHGe/lyqvAecAbVBxhyAvVVFchZ/fDsGQrWp+NCFSqv\nxgfzv5L353afgxNq25GGzfFLMW//2Q0iKXTl6wPqJks/GKf35j9jKEdbl4vb\npcOH7RPLUiq/yx+7DyACf6ed6ARzCZ2ShazdAKoTmRx8mQrfbHenIeX6Rh69\nKKb6h14JHBs6w9Wy7W3uS7dvByIxCg21MOY/uc3ZhJjmz1P4jUdr7i/Vu/4F\neLJXnZfGYzVBVCeUuPsb1ylKh1DZ8NIXFuDEaRI04WsGrbV+707ITUOAB4M2\nJ+qALCo/zsg3tEnyrGnHRtOgsz5De1Z6ivX9GV2zFqKkTxXFYGwneEklJOf2\nW4pgh/EoWalFlS8Ye4U/S4TgUVQEkTWV0L1Im3nXEX5vn3wCCGafYHHlQ+AC\nLkBZKeeJh8Zd9qNA8Jf1XoP2MYcb9mSFWulG6+/8Tdyppdl1cVXIqzUMkxHd\nga90\r\n=dSc9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHhiljcsraxeIjgox0qPCSECzPDW/nd2HUy34umdVRguAiEA18H7Y1/Vv9SY95lY7IwbITgXVoUz4meuqN1oKZY3vxY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610540359-5a18d3bc.0_1610540472250_0.8867081734601443"},"_hasShrinkwrap":false},"2.39.4-next-1610540589-72385396.0":{"name":"@xdn/core","version":"2.39.4-next-1610540589-72385396.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610540589-72385396.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-3Yi7qupTwpnJk3SObRmMDD6wo5V+Ynjto40LthgqxSIv13MyYOuEY86GuOW3Kz88Pxr/+ddTEt3sxl+mBi+ZlA==","shasum":"c7b40610611a12a852767fa552411583707c6356","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610540589-72385396.0.tgz","fileCount":174,"unpackedSize":664335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/uacCRA9TVsSAnZWagAAlEsP/3eibDJwV9EIZfnuOyHA\n+4BhiIhwDM5BaGdSDhJ1iTpPWl7lSFIt0VzTpd3DIOh5SkwAnw4lS7GPnP0P\nNW38XN+5NUIK8iTdtrz3OTWWFbVLFvcu9l9JNNUCsyQI4DNqXhZLWCJGgDnp\nJbLiwmFPV2XGeJdx4Bg6eSO65uRxtLdCC3J1XjW2oPtlmQ1jjPFsKF7TZzzR\n3Ymvp5FEKw/dT8D4JkSTyZ5VJb4ebuOtyZtvEvLk98JK1pro1xWe+0WavofT\nzZfyA6AL9jGZj0Gxh/DmJ4HQgbojEm/YJ6kRcppZQZkeZCwv2ZSBot33bkBu\nzftP4FPFgtuFk65n0idx/iORugFgD68gbH6sKPUuYoaGFGKiB32/rogjRS0O\nzQH8IGMRDb9RdB1j4v4UDyDBNx7hg/FfnxOXvMZzkQIgdZtgQUez/YILXDIK\n7h738IrFmql+fd8xyDGJ2uz2D2W6MvWXUYZW6aknzqmVORTJCThnocivkVZ3\nEqiiXIiBq8T1tskAxbkU0KB1bMwZPfnT6x7fDMCgy27rU9d+XOTZxAke+6Ru\nJjAUEol3AtAC+EeEJehY6nS9mity8KO4952jm1/XOqhU6zRXD6UZtuiAmwxK\na59h1btI5ntTyROGndZ4R5bAD8Se8cFXyCV/2pAeqGVPziZwvwemIjoIelq4\nAUU2\r\n=Zk8x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEAzuNoYgjmN2FTTa7z/o6xq/DKaYJJ/IR/TMQVbiGfuAiAeUIT7RY5dzhEvD42i/L7SDfGHXwyZ7seMoV+ejn0JrQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610540589-72385396.0_1610540699570_0.8790310488119091"},"_hasShrinkwrap":false},"2.39.4-next-1610541051-49dd6b9c.0":{"name":"@xdn/core","version":"2.39.4-next-1610541051-49dd6b9c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610541051-49dd6b9c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-mXE0UXSle5Sqmw+ZK5nXCDb/KzpFbe5BnKpezFx67N10l/2uogn7rKxHZJnkXOiO5Q+/gtVG1TI0OIU5imq4Mg==","shasum":"339c03793d11abf96f511af5cc341ea6d8092556","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610541051-49dd6b9c.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/uiJCRA9TVsSAnZWagAAW88P/jkz19PLcluTvI9VpcjO\nZxAAQXoiokgc85TP/QE7E1frMeWylHwQCJRdUGYEccfKB+Ui2S/3smv8Qhxe\nbEpkLaMnFzjguIbyDkfUrJSyCbkVf/lZBvI8Av8FbNleVKTPUDnRX+klt6LY\nJHvfalQoi5spSM09NXLdQDNeuF/2d87d+83gAMoTO6h1oOFAdO8VRMzcL7/L\nr3umLd2F6liJwP5vsNx1hoMU3ESmwSEioajSTGdXGld1W4hVHJMbkyVWPp4v\nwP6zstg2qUbP+08G6GWq30gC8Oz0qAAJNtxWRj+b7Zj4PlpFRGrlYUwxChyR\nkZUVhpNHZz6Cjo5YSzlU1XSp61meipXQHcrDKIQoJEoXNeKOhbLUAJ2eb2hy\nUaAoZZVSJz+qIBPAM5RczEpHzDMJdE/hwlg4CKfnwvRym72lZ6EV2ZNkHZQK\nuEU2z0JTFJtfXPe80aN/BnOwoJFNgGRVP4e4cUkdjGCmfdsaEJDCJVOovx/i\nUeSpHaTs1zk9DogeX6OlUeR/c1IbaoIx/u+olVGXq1HtVfuBAiqA7+zKlnZA\nGehnrXPf/oT2acXbIK96QRsyrXxmCEHYMQs1WAloi3J01rRsvrUJemzrVFVp\nNOFaPzlleMp+xuDi55MSaBOaO7tbCa1o4DbtlcD9E1rEOl3fm3i+e/YqOMfw\npK+0\r\n=A//s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiFuXSVGbB5mwaUuzYuUfeKrdiH/y6MY7533ZBxV+zCwIhAKltRmI2ZlKi6G0OyXPyE/0GSPCAsTA5yBu8gHRUUlwb"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610541051-49dd6b9c.0_1610541193152_0.6754003587564656"},"_hasShrinkwrap":false},"2.39.4-next-1610541612-1a90c150.0":{"name":"@xdn/core","version":"2.39.4-next-1610541612-1a90c150.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610541612-1a90c150.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-eBRc1kLZkcgJjuqWQuXJp+Wbm38xZAlXvbxj0iRW9k3pwxbiHaMjr/qlQKr+felAENPcfCHAwevz+is0tG76dQ==","shasum":"3c61626cd9df6b8b13a87c387d2ad9ebf14e2b69","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610541612-1a90c150.0.tgz","fileCount":174,"unpackedSize":664335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/uqxCRA9TVsSAnZWagAA16sP/30P5e+2NeyJ6TqTO7Jx\nhX2OLp08nwD34e9a9tE00nmHUS/X/IARW82ItCvgVUzON+Vgo8XQ9INPALIa\n1MCc9vwQ0drS0kP/fmTOxk48rs4cPTAlIDPlv5uw+5MUMreqEE2YiZja8NoR\nvuArweBSSGX50Ll3ns1hc+lwGXmkeFLe1bomujNxgFKJCzcI305eK37Y3kib\nPD8oJwBIvSVYYy+kkKQS4eUZCrQr+xnA32ONRa8suCn9LUc1lVA0D1Sdpf2i\nKKvYOKVbJABZa0fmSOtImw5xe09OaLXJso5BjONG5DVr+6+O9JuCo0E1W3HM\nqiPt65A550zGGgQNo4Kh+UwRwup7DTHQa/4NYgy98kJs9e6NoxDQFqtx3kBc\nppf76TFaVo/CEdYsl9e1URCt55NM8UhCVPhtckaJ9nPUCrOvrpL3PmoSMFCO\n8Rkmw1dA6IXwmkRb4qtMXulba2zHLq/drDKGAqVGhWgdMeuxGeQqDE5lNWyU\nRq9lsD+w1/nEtN5L5IMprZLHSvBBZM68cKF7e3Jo1G/CCu7eGgEiY6xB6EMV\n2h75zuHe2Fdi8OLBRh6tUEmAqfhSwfS0BI3GaoIL2VDpRCgaRcyLgZrzwM4y\np5q9g3WAilRX9lEhkySSUiVwqWATmOtmCk/ZDKKifnGqQXL9/3NWJ/gqE+kH\nnZ2E\r\n=O/TX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjePySkqFPOGNC3hrR8HqyFgUryi8zBBDmqQiWjIJ5wwIgK49F75kSLiJCmUOOHmwyihvK+oapQBaJ0HPfL2Bakew="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610541612-1a90c150.0_1610541744795_0.8168403827585649"},"_hasShrinkwrap":false},"2.39.4-next-1610542475-49dd6b9c.0":{"name":"@xdn/core","version":"2.39.4-next-1610542475-49dd6b9c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.39.4-next-1610542475-49dd6b9c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-eCE8bF+xmcgFR/nDyvf1qh108achuoOPcnD34nkf1iJPVeDsWtSlN2epKx45Y0sqMIE3uoIrSXHJrYw+ayJu9g==","shasum":"c30a4db9cf02aba3259b16466d79d821f9c3c6ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.39.4-next-1610542475-49dd6b9c.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/u39CRA9TVsSAnZWagAA4wAP+wcHgtd50GpNcwb7+coP\niwtOlPVqOy3J6Wj910M7irZNsOskhnU7W4EXztaenoWGDC3eDbPoG5QOb8dO\n6smphOnKzgHWlJnM+jm4M+E1nCLCgYx6cQV70qN4ZChqahB+7lsUsK2omHKb\ndBxsCTphxMS5LOKe2WaNMov1M3xYvVdTH8gjBIFiYQw/H2wpda6FNFmxtTHc\n1MO5nN6RjAJ65U/JW3a5yNkpz6GQNnQWjYrj0zC3U9SRTak6eu0aAvU6ZGgW\n1GrKOZEjKjARzcEWvEj8mcImBrzhS2fjV4KeUd7bPjrFkzHEmA8w//+T5g33\nTcX8UoO2CHOPXWvIKqD2Wa1VRZ2YfqozWju2u3Ps4Tq/7JCFM9mItpYfv2qS\ntOPFjjE+ry1yvRYDDS5egX4Wqx1nW+jopuRvlw2yR2xTs3Xymtzz5BdFaUDt\nq3z8LIissWKSpZjcQvUiAH/FbLz2xnRi8lyIBPMb9/1aRgfarQaDGHDrPyNj\nvQtPMvd7zuzFHxHdMOp6RH6Iv++Ey7yh8AGxm9mxafPocTkdV5bQEtNglOlJ\nNi9pjTFHuwxqEIzQ+xeotSIsTflJI5BLctU/yWr1TF3oLk4IcwHlBSCLmAA+\nw8zfRPsl1QFG8ixTPcsTZvOeRDU0XDSNl6gjACB9azSiHk/Rry5t0af+iQ05\n34ap\r\n=Euk7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCly/ybW3SVM9WbdP9uAq27A6OWeKaQhIJkDxcMIpBW0QIhAL4+6gedAn8ZPHxbPZURZeCdcIIaufByvlEm9LpvFpoF"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.39.4-next-1610542475-49dd6b9c.0_1610542588744_0.05856999575502142"},"_hasShrinkwrap":false},"2.40.1-next-1610542522-7fe21e49.0":{"name":"@xdn/core","version":"2.40.1-next-1610542522-7fe21e49.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610542522-7fe21e49.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-zTda7Oj892DOvBt1ZJSMywjDxy+GGeAJqxYHd7Buk2ThFX6WnILI2rK+oIZncigok2MM7FXr6cnQDvZH/17Urw==","shasum":"5de2f943ed06b262fa30a4e60356389b133a9625","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610542522-7fe21e49.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/u4uCRA9TVsSAnZWagAAcCIP/1saOdE4P8lnO5f1iCIR\nWavuwACrPoADw7OZPQmrNH+LXn+dLapusa1b7YVmva7UDCniQHOkshVmQRmM\nHJDYKeOauKFn/d4Cy97Hl8peXJP8Wwnbb1H6pAMZ3734Wxx5BbU3OBy2XJA2\n4gSAjS7Xeb9RwmM98I4DR7Ww/7z2C5thlUjorcSE4bN+tYaIU0/3j+H+47Fo\nezfpIlZNGbjixhhVRHP8eMI0gBQNsJzgiIqOXTPChWW64t3vi1fpsJQVl+y2\nbIc38cS+iLerxd7/M3AfxzjoOslhs++VNjRkyG7X4yQFrsD9HwhT0pKl8XGC\nq6xQVduZHqognJFeiPNFyQO8RFG7ZMxI3EP18cDcJhTnKsgg+mEPKbL2Wbas\nkFS8l4C2W343PylIcjZ5h3IOclwcmwFD0+jKJrQQZrPSr5dLiJQAwtQ+4UG1\nh5RvzRoTNgnWqMexP0hOyRY4xla+WG3GInb5AnsJer8kXpbCS34TLBvIn9jl\ndn2qdl4q/CSHAJRoJJKflYgPfJ2UgOZ4HDFHyAbrCN4ohTQtQLqr7mzNXwnh\nRedPjDIFitOEaAmMXAalytahQvhjHVRBb2hu61U5WZJrXy8r7b0y2CflQJNm\nYrB8xR8x3RJ3qCFCxeSKsbJlA1Sn724gdGvrpdjUXrcO/qfadR8Rdurur8fu\n4rZF\r\n=zsCD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBYJySzWEFI1mdDGcWc2LL0FvtLe3qkag0ZvjxNefeqfAiEAxThrx3AMXsIL1YtCaw5UIJNUlyOA5iongWO8Qm4S3+M="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610542522-7fe21e49.0_1610542637578_0.9197260190492638"},"_hasShrinkwrap":false},"2.40.0":{"name":"@xdn/core","version":"2.40.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-crVUDPgZeOkY8lIR1xLxGpHTcQyNCHqXoGXHBt/HOA57JvrfZ25uXJx4jFodPQ0f41LBUXOxF0jnHE9i0b2Vuw==","shasum":"57f874b16706a52ab54fd8bbbdf3cc1e6bc79164","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.0.tgz","fileCount":174,"unpackedSize":663746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/u8fCRA9TVsSAnZWagAAFIwP/iZplMbgoE9mX/HEt32P\ngazbllpx8irmdehktlvaImpJVpSwbjoTcsR7mwCl4x+yMxcuflillGvJ0RoN\nsExyRPsT1qcqepcHNwPvDRFWJmZkzUL1174wqfm8V+bdSe+tv142S/B2x712\nmQ94zSNNkaeCYxCOGJtnvvkDUraS6lSXaJZq0FEuiYUpwYnmcmyVpcljELMu\n+3aBMwqiu6szhjM0wvkwq3bt1786ofRfQfSZtbpLUSGZ++JCTt+XyH7pvp60\ndaxEEqZto0dG5Q1XGlcNL7FdxFJrccgPB+SjnGViYPyPauvtHNmwGfjvRaJP\nCkidAiHS6uQ5D/CUY2HYBFgiHLyaP29H1wUjftl1X5zPIU7c2rb2DG7KaJw6\npfx29gDDhqHfrpjA+rt3+FxL4SL+Qt0RXEM7+m6TZoM1JM8Odq4IxwUPLXw6\nj3FYEy5+cszWRiWHtqAHCyX8yykC+BkEaX8Dzz9zrg6Nr7SCGap+wTSx//eR\nCrneQ1Ssf626ne7Fvu1T0k+6MEr/KG88vmmfnzlW7ZDYpVbp6tGilWmMVGd/\nBUMMvaTjCgndRuUhNJ1VndsJlC0IrwSkvNu8+S1eQGX2mJD2/Is2wJsbf0tP\nWFfuupRkVWxnTQraDT1xjR+i3wnvO0MVL8o4tdLfJPkdO2gWR2sUPx5sOqsz\ncppP\r\n=K2cj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNwMVuKDhWkpnTtIb7uvaF+6+G+PzKmScAFQfH0rLNiQIgCd5OHn3YIxBBLVJg+9qSohJ+0rP9YhNouhM25ZDAyVU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.0_1610542879043_0.6505781240799553"},"_hasShrinkwrap":false},"2.40.1-next-1610543905-304a3166.0":{"name":"@xdn/core","version":"2.40.1-next-1610543905-304a3166.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610543905-304a3166.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-ux8qWrVfJN3Z5mUdAyOV1OumkWYBnAPCrMWzYGvoEi/+lIvS10JZ4vrxQ8zdqvkDNT8L7/BcDjYZySo9ncGfkQ==","shasum":"159ad1b8dfa75ef56b41b7ff0bdf916db11fcfac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610543905-304a3166.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/vOVCRA9TVsSAnZWagAA46MP/jMHwiBxS3btPeEQsHam\nfDxFPz0O1K9Q5DJ2nmmGqsKy48hS42tTOqHTgF03AGrj6YRMCylRdpC850dk\n9E6lv8O3Bagls+ERkVXPNEJ1jAYXvShZqEjUlYVEXaf8O4tOr+tCGwFiIgL1\n7Y2xLwNjxGcXAD7O8jVeFsU5yPTwwvHpJV+NrOd+bJP+QsaEH/BG/k/xCWvo\nob+10df7VApJl7Ethi+zGvtLvH+aUHaCkA7Qkh1peWQgkaH4KzO2YwPfbjig\n0U9WIpYME65AoVMvS2QcXVpbSjVqUR9hDfSU80DWX1TYnedeMm+sgkc6GUD1\nLfvC4vDkq3OHjTmVGhx4Vnt2wZTBLNDs+PUwoH0vkdUecm/MZW9uRVG43uT2\nfD5L5kbVlnmO/0JjDKAO+LCfrLXtD+eI3OrEaEAohup7iC2IkFiBw5ZwMTwk\n87JST7cqjcuNf0p7QBje8VAiTWWG+3u/Y+i/9hID2J+C9lkO8be07sRZj97T\njfT0GdgBxbSrLytUnm+ODIaamlVZXySSyf5syMf5LZB7bZWMYjZKC6OGKV5z\n7jUxBSlAYbTuODCnxCa2x3pJ4ztu+bpimoBr1WPZyK6hCVCL1EtcGiQ08vHk\nCclTSXu4KF+XVUZXcia4XvlWuiYZNih9lZkhmL/zPD72lis53Hzf35gGBt0d\n2Rd1\r\n=sMuu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGUS0Ozo0qOQTNVboscK2nUXbRnLOHQbNnewRZRmJcG2AiEA7gdc6HwkaMp7JCWuDf8X1f43Fr/kumSz9OodyR/lzew="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610543905-304a3166.0_1610544020347_0.5783252264129852"},"_hasShrinkwrap":false},"2.40.1-next-1610543937-89887a95.0":{"name":"@xdn/core","version":"2.40.1-next-1610543937-89887a95.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610543937-89887a95.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-V/qZT6LTy4RwLR288QkBwWcZESV6seNdSkfm8zBNcHlHR3pSYgZXSi5PFHWJQzHME117WgBf2CidIQVVoSB+Vg==","shasum":"e165f9f07ef08dd9d0589bc99c566b737c4e9fe2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610543937-89887a95.0.tgz","fileCount":174,"unpackedSize":664335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/vO0CRA9TVsSAnZWagAA3VgP/35oeLclHD9pK6AMhJrq\nwG1l8wDQDf8G6m4NSSVAVVuCki6WZGQt9peZJ6xLLWi2BThBWOeknd66l05l\nm1uuukbEyc8rAF+3g9aMsYwGgL4Tks9hokinpCMGjLgdlIA4h17kyk8RCtou\ncJqAcTHUoqb7xj4v+Trhm0i4uuzC9bhHhiCZ87+J2p7qPyJFNOEHiWFHsV3D\nqx6noiK5v9SCggS89yruKoO9amR61Wh/0tD+Wd04DR7hAZsH9EuERdlHMDH4\nmCnt0VcHS2IgUJqxjLxRC5hEoKA9/4ogje4nwRhU4jIXqB79BS/E0ihivDXk\nWoqVJhHePNZD1vcSgyKqSvicKklU/Wx++Wmb0dZkNRtTVoNFVhV00xdNb+04\nxXL2W3VJieORoktbPtUCkIuJ3A8fIdj0Cg/d9FslIuZg/jrjmEDKFb/KVLaW\nxq9+g9hsc2jDXA+nZ70j6BCBIIlJaUW7xcbwdprHt2J1wNE/zHdLOrl9qaiy\nqsF/l35tfkw2pWiYT4mmgxuSDQRdIUHsoUtx38j5iwyosa9OqBtSs2UcW4xs\nuog7y14/b9fhP0AV1kuTGhp3nuAvj7QbvT51B3j/EKKPluyOKuCn5OZKT1lC\nk0Ugurvf+Pv+DH0f5UTTOu2k9TUGEI/MnmZnXMLWRlTVERP2Pg14JCvKqGWK\nttGc\r\n=9pHn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDX4U7rPmhm4VeiNHdr2jP/eY7DidZ75vYR3MrPhRWe/gIgbinYbhU0E2qnjBK0fkfZ0GoUmWHl5WcgRBFOjRM2FBU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610543937-89887a95.0_1610544051499_0.9312248761200996"},"_hasShrinkwrap":false},"2.40.1-next-1610548543-89887a95.0":{"name":"@xdn/core","version":"2.40.1-next-1610548543-89887a95.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610548543-89887a95.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-/2L8c6GlkQ6xiXg18OalPLMEUPCnvJxLOMgEh2yrE5utSbVPvoi9cQc1Ix+GGkVGo727YB4sNCIS1L2VcF4Zrw==","shasum":"32e651ab0403feaf40f15d0c5cea42052c771f8f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610548543-89887a95.0.tgz","fileCount":174,"unpackedSize":664335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/wXUCRA9TVsSAnZWagAAyJYP/1j1p16+M50WGyrAJYgd\nHsA3XpjnEgPnp8DyiHx/09iv+Vpe1KEeL3iaoGxoQQjGyR6+yoWvZjFf62cr\nunon8+z54QR9jrQnowNuKxqIFxLBg4UPgDpCxlSychRHIInCZ9C6j0vnjFgg\nO0LwHBLhWKWBCYMZCgE6M6kHyDS0LxbghG5tw0uMMFIdM5/VoYr4t5qdjxLV\n3e1G/tIIe7BffahOtgz5sYDD+eLWphy1FjBC/UQ+kDL6/i7TR/pYzt95F8a2\nzMTzyQHWBv2y31Ac2k8DXeVrrmFjUYjRrcvk8a8+/hzNh2dE3hPgJkdHLmfY\ngmzC52xsIkzJEEz7Yyl4MST2CnFgH+Eu4MfqO8i0VoX4hSNpNw9Ai4hTFgAn\n8hBZfQSa45cUpdwnQ0+8uqWChmVwTebz1IxZJQfsULkkdVV5iukK5YuFeahi\nUIezm07qy+GYVO+WSG9LNE3hgwhonC8ciwdzAoRnzNgRIB+Mo2Tpx2aDuUhO\nK7h65R7CRtTRlvClomLfb4Q+PtZgy6NSA/xp7IDeIs4RPyDnkwCrf88PFYwu\ny/fcFbcGGDO/cxUdoj+WizA4YErF/7+s80VwrVUeCdBjqy8ohwuA4IE4zhj3\nk9ODX1a6BsZvMLw6kg6vENpDDnL4bDZW5zQQQM/fnV7Nvj6S0v7apvlkuh0L\nPJY/\r\n=OCfp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHp4pQvNt92IZXSoCK3fB28Bk6h4QWOBBOD/UMp2iulQIgNrWbyGjdopF0y86VLec9aAHkH+3+3DUoECgQUoXGfa0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610548543-89887a95.0_1610548691372_0.36595452487887314"},"_hasShrinkwrap":false},"2.40.1-next-1610552674-304a3166.0":{"name":"@xdn/core","version":"2.40.1-next-1610552674-304a3166.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610552674-304a3166.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-o7KZJkowJvMavVnTFd1qiVBp4ws8JM5WlGuJY+S8Ba+0DRxaxTmnRpzNVffhNPRP5bf65Mt8UfcbjuA1an1qiw==","shasum":"1c3bf9b2d9e9232b61d598b5371134209af7c92b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610552674-304a3166.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/xX6CRA9TVsSAnZWagAAB3cP/0GNw574pqZy7CtDX941\ndQ+Ft0NATxs9nx1HiaBWY21F/zQgCGJceh2fw9P8tdAuraVRTR8f3uxdbLfV\ndUYJpr/P8HqfVSWfpTw0hW16Y/6QU0cHHwm98U/qfXkBhe73L/vl0wFL8MTy\nowB5tPq91U57JnQv8AxSXvLqC4tKJu9QZVMBpJHpvFuw7plI4C74/lBp5tv8\nk32kCrfSgnDu4+LXQHH5GpugGT/jMnBZ03A4VQxUj6cngo69fEB3Cx0QAUE7\niyA50HGcRbwMNXq91Q7PYdyi+/dGxwzIe/spG+MYX5tONg+1BP96Jl4lRi4Y\nFBvmm65poA+tB5+plT2XANlTKE16SaQJP0WZSFTbrNDTSwiMOlk9WMo3CMmn\n3AdTCX97KuSxsYoDwZH8KcyhEzW++zSh7TvdOw1oZqtJUOMuU8IsacAT0gXB\nUG6bw5nfB2wuKSN6nSIad8JL7YmKcRKqPHWjUiDyok98K8TQnoognDwNykiO\nDaghPX3pOhF8zgZpEMpgxmLNfT1Wa0bjloU+7WBLS21yee/jMafrflT/w0Ot\nu7hGS63fznoDyE7Olz52KgGeQ5MS822abErv4/vl7i1VcmrXURezp48ALSG0\ncutmbw9EScNX06eWMiBPxMlwzziqvojtdmctqlj5jCt7+WvPoLtwQbJtX6h/\nK+EC\r\n=7HyG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyLIyKcR3b9qTB4LROwI4bO84D1zN0XJFeXqJj8WNsVAIhAIS3cKD4f1xAcV5ZWCqthr8pWnzcQAK1tZv0eySyIj0S"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610552674-304a3166.0_1610552825409_0.2564007008137128"},"_hasShrinkwrap":false},"2.40.1-next-1610644713-9618ddfc.0":{"name":"@xdn/core","version":"2.40.1-next-1610644713-9618ddfc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610644713-9618ddfc.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-74a+EpSxDMa62YeBpcOEXMncYEUdmDDz/upU05ZLy3uRu88aH/zBZNPrjerLtgia4AKBChWdKxSMKrUDL+QAXw==","shasum":"270cee86bf70126cc0b4b03d0d2bb04d5aa16dd3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610644713-9618ddfc.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAH1dCRA9TVsSAnZWagAA3nsQAJiOvYT+fOYqdjH1Ia8a\nuSniGmnZOgS3ofQSIv5z9bzYETq5cWe9NJFYrYiDkCnArjTRqzaVWo2DmT2C\nfEGS4f2vThVuTKOZKAOH/c9MfVm2lhreKAA0omZAMqcQBJBIyDaFnJNuBpka\nDNF6thx/BT1LTBEVzWEJ82zcVYedm30+1KEy9C/I2gOMPpje/amVVWyVmlTr\nYjdrufucs5nsMbnZfWogIbMj6zhLE3a4KuwInU836LLr5M/O9OS/asAwWJ0Z\nuGyBOlvrmkUHC6rk/qlKZenle4wadQ4mzyrGCvpKcz70Pwvw/nc/KGDIfR5A\nlW5mzfg89ZSJy0sKAdqJQ7EqODx4jJM4C9dRmUG62ZeZoDLSABosK8lB6P3b\nCwcLInySoz0rwDwSUvTeK3Lgb94dZZr3Tbv/nZrTbJm8HfD+WH11UDodcvPv\nAGj3IE/s23aiEuGXTIjhTJYKmDcGw028YOZDTJNlDV9yjJeTx8NHdl+3owMF\n8BbzTZCJBiOXxd3RL1KTcW6DC5YONw0jVoUZouRrNQWINgbwtzvU8wv53pu3\nxbvhlNm+7nxQQNrF0Q0r4FXKcx7Y5J1aSiTu99qapWa8OxBAU3YkHSdzwPII\nj+JMj87UEvKeXqFItRs5EpE9OzSmuHc418r0Op+ZbMDXr4+FzGC1MoI7uW5e\nEDFO\r\n=osl4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDhjQEqi/k4qCY75rmyBle2HZ82fyDwwKYx/6040chEAIgH6jxqxX7e5PfXVKZhZidMoykT4cS5paojIO6rtn8sn0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610644713-9618ddfc.0_1610644829067_0.8901549843423662"},"_hasShrinkwrap":false},"2.40.1-next-1610715401-7357d98e.0":{"name":"@xdn/core","version":"2.40.1-next-1610715401-7357d98e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610715401-7357d98e.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-zpuPzjsItVYQvXdLvfrEmyHxM3H6ocrJacp3w8p97gwklP2bjqsdMkPtpwZ+GjT7pMu9nJ6p42t+t+QJedL0sw==","shasum":"5b76eb21a59a3be4e450928052e6a7b04161a047","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610715401-7357d98e.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAZGTCRA9TVsSAnZWagAAhWEP/1aiY6vM/9+MUWIxPVZf\n8gykBxaq8B+EMUPe4MOKd98UB9N0yqlm6arOIIVLbGNPJrUeHQx8oYktDpxZ\n8lcvWVKMKL1MuAC58QeFx1DGO9BJ3/bSzxA0vuhQKCh+pJ9mhG6FSPycWsZd\nTiDI6Gw5y1iIOpCloX9evIPyyJ+RzcIJs6mSnqyCVJ8DKa+oEFhkDrLWLNlG\nRT0zw2OHe8K40n4oGWI+ChIlwgEqp7XSLqc/r8RNu61SHvD7QS40ZC8AQ6td\nQlRC3h+JBmaVgEMdldQmkjkGrkjRNRx02ets2hQuPV0sQ9UJxoGFU9ZAE1CP\ns3oFt1+fD4GgFqJmI1rgKfa9H6KqqQbNtvQm53844tJql+CnfsCbbtOeCD5g\nrdtSPPORck9eXxsvTOcKNSCH5hedFbNHp5L7o531Dk6PRrRDt9N6NlWbYG9K\nkfKcaWfTLJOSIRQ42JAyfYgbl2FgLBDGItXinq0BaZJZbql42yZXCLmofb/A\n8Ob8tdUi2oCr24dhkRuoHDiovac3YvSCaP2qI0xLyrEA5/NB7ukAnln9QBCY\nCjUJ8eSbChA2BaeDnEbPpuN5mq05xHnsvF/3aB+/2PBQB/7wy7WEV5l/CFJG\n0r5V8LYGd7+3HlHSCYx6KXioL1ipWBOER7I886TTwtWdkk3uP0ycIKJpdQ07\ndknj\r\n=QVCX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSwLsz/U/gh0tfRQgkbqqvFiwAANUzHPEkCMKg+XqDvwIhAL7VRbs6GSDU6lDzXD7QB47nTPwBolJ0r70ysF5A8Y+I"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610715401-7357d98e.0_1610715538609_0.6157053799792187"},"_hasShrinkwrap":false},"2.40.1-next-1610716855-7357d98e.0":{"name":"@xdn/core","version":"2.40.1-next-1610716855-7357d98e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610716855-7357d98e.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-TVBBxlUkJ+8PuUaRzMmH2Ni0XS8ocMZBckTM4XXm455vT4EOZFSMF/iee/AUfhElWXZi7QmJSWR/pnjyfWornw==","shasum":"4b181c9e0e0d001e22cc7f5d8e8240b41d1b82b1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610716855-7357d98e.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAZc4CRA9TVsSAnZWagAABkEP/R6RaSTxkxuxOF6DGuky\n79EPQTOGXiLJPz934tUdm/jixZW+9xo+KMNLUal3x6IVu5rdK94FCFN2JEee\nuyDhGHNvk+ZL6kzsCNM1HGN9r1ULDMw9JSxmYmV0clbG+FmBDWWYMldf1L97\nGkLEA2sNS1XGGHyPkZoc9tffj/TcUuRAUMPISCL52XSeZZuuqQ4QrEYjj9w+\nk3XjFpu0Xvnu5Paz0cD8IuRwtk3k6kiMIlqYRnIOYACfk+QQsDysEH2HAmUn\nNUc7Tq22xfZBSR64J7Bv9/F7Qgv7ljyfZUfCXn2aWLBg89/VxGFXggRn2YUr\nF1wDkx3HnogDh441ltJ+y3EvUMZ7iWFrLpsmY3lJBc4YEGffOgdF/5C8tJbb\nnDOrH4MlPmm49Qwz5h0RvNQcvOW11vOB7Zq+ldIJ1w/Fsp6ILhCetOlOqkXA\nPjn/IW1sqAMGYe9NFgy+1qv8xZ1PTzrlUuP/0+Y7Em6eoJggzzEKOhZr8N24\nszjnyz54775TQeUsicrh1spzEj4CeRjvLAPAm/cP5uBY4z9zsNkPwW9iqj0d\nRYdqpAQd150T+df//QxZbsmnd/+or0dOUvDEQrpoGg6ccpeaXSYqaPD0Q1Oj\nleobibhnRISfwlERw132a5L7JQSjVD64lG1U4E1YzdP7YxgX7swNSu2CZRe7\n/QNY\r\n=rLut\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBs9q3FyVpu5nzpXDXddUiXpkhsOXOLDw5RYRRta/te8AiEA0ReQUtRuoV0TVB5cMAisg/AfDLS7fccs3KA0WeMCgfo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610716855-7357d98e.0_1610716983672_0.6382058766750462"},"_hasShrinkwrap":false},"2.40.1-next-1610718281-7357d98e.0":{"name":"@xdn/core","version":"2.40.1-next-1610718281-7357d98e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610718281-7357d98e.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-cyIG6v+vuvsiWgK+lHEJvVRqmVmurh5ZGem2TbFQEWeBerbfyl81bVfVeByvGRcTAXdCVuVHRAkfKa4GeNE8xw==","shasum":"2307eedcae2d1f4d33b03d888963d0fd42d385de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610718281-7357d98e.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAZy4CRA9TVsSAnZWagAAIYEQAKCu/48YaYY/GymoQ5E+\ncDLatI+/fyo6hEa2eufybNosDfGsNKG7JmoS2vD7mblIGldDcUAmgIDxznC1\nGewI0JIV97iLmICwiCqDMQl6gXtB8fR2Rw0RaZpVvCXAErSfJvIMuYe38hbY\n6Mx/UFtVYz2uGyM2NNM1WgBlvwk9aWon2/rr53DLas2KU49+1uNc3lQ1Ycdc\nulpHStO5a/WbyU0wvKFK3xlJFGXvx4E87F2Bxsm1g/lTDGiCuHHCxt0I4DVH\nle5iFLxp0K1hQux/NONNCXjD2XHlepHwzbUWl8MUeNeyQ6bs9UUy7FWcMLNs\nMg9pfnh0IYVsfNONZ5zaPE9HijYqViJBAwx2NEWRPs9myvTgU2AK41SyYN4m\ngaDi4CK069HLwJf33UQue6ogpwGZ+Iv3+u0ItUDBG+7QbzHxIEXPDKpCJp+e\n1ZMRx2PldM6Z717s98KnnmELaJHLC8z6ej72jlo22L+UFQppF5eBlhAJd3Y3\ny64dCpUF4dp88zSH1FcUJLvFTClBROfWjGCXTjCFlordiVO42d93f0hoeEKS\nmtBQBTggZ0oGR9N/w7fCqGgjVSam56/k4UMO/dRn7ndsDFS6O2piNg8JyTH9\nzdL1YhH07zWWyfH9Fk5v6ZoB1bVvMCL2NlUN/5yeR1AYO+rnApG4XMWsJFAE\n/czi\r\n=j5ls\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFHnOCgPY9O9kY79szjWpyCvoCiI0inDmfZ+IxPxmn9dAiEA+gb/SEc1fvm3gBI3o0oPVG0Yr/GJyjRy5BOIU+2xOyY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610718281-7357d98e.0_1610718391970_0.6125551993622482"},"_hasShrinkwrap":false},"2.40.1-next-1610718521-6b49f4e5.0":{"name":"@xdn/core","version":"2.40.1-next-1610718521-6b49f4e5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610718521-6b49f4e5.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-082qLbPkYTXfPlwDnZ/K3YyWhb1KrAHV4/3WsWtJGkg/snkJr5M0o/PwT66CHj/8EHqpgFPq6zJuOJ6IivcLdQ==","shasum":"1ecdf7647746b9974f028d94b62f8e81ea9cdb3b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610718521-6b49f4e5.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAZ2yCRA9TVsSAnZWagAAHRMQAJrwNTh4NfVPxDlFfA6N\nK13Lm/DYULDgcwG//eAIEwkIhOwxxj4XVsbburEoNgxeidC2Faski/0/eoiM\nqp9PO1d87LvXSk/WpVbjKoJ3XT5sYZX65rqsSNmo4INr2+zibhuF5yJHA9HB\n06/28O+UmfpuRRRMRpuCj0CFkMRGK4slyY5YL9dT2uKoZ5W+RSrHwKU/IRZR\nIqAkfA1ijfbVwyjnSbaPCrXhYt4OXxRD8xXplq9U8CpYv1IseApc6njEVqtb\nyMD/IxlSnHMkLVDD82dmzv8DviCmS6HS9ISg4QPBvQC7VZfPbjDLV5yusCwP\n88YLNFvsybtDQHhjSOolpHvZG6kgdbDUQXHGd2HA0wzmkvYAXBn6VpGzMnpS\nA33V3a7y8ERbswR8N7p7fd6wsNEXqgiSzGRUv9J0n4JXE/NZiLhIK6DPoodK\nU7mHrD63ieZlOEYhP7oLXTijzEIk8a/YgL0j370aMyVPFD6ZHnvciG2GSNly\n/nyTnr5i/lyhsVDwrOJjlgan6GEVI3eoG+cO7JZ53IwC6U+CPaNqGeerFuaf\nk4+lIPcpcajNVwbxCtSy0+sNXIWNsJhvErPidb71rrwqaj2aHv+AbU0lL6+B\n16hvzW1yvWzPrN4HB/liidvozu4SddsrYxnk971kWDqbgJA/imCnQ2sC8q+Q\n4cHj\r\n=27TV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDc0UhjBFb8RUMyu0iOi6mvg9ujfJlEqmfrNQjmAVruHAiEA2MmdqGXMsi3nLfnLJlREw2PZluJ2kTIxzZoPD8nWgCU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610718521-6b49f4e5.0_1610718641952_0.0571693253943919"},"_hasShrinkwrap":false},"2.40.1-next-1610720143-6b49f4e5.0":{"name":"@xdn/core","version":"2.40.1-next-1610720143-6b49f4e5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610720143-6b49f4e5.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-2MuPQekr4AMPjPQcDXFsWDqJ3kjGSlfaYJfV09N08c0hDitwi/bPD7iFsXg3blgza0qVBpxjyn/4EYTruTqiUg==","shasum":"3e929e6a612afa8d5dd41143fdd71493cb60aa8a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610720143-6b49f4e5.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAaQECRA9TVsSAnZWagAA768P/jHPT9O7CAYOraV12yOX\nC9Zt/TUnYP+cTTvMyg1hfVg6MPbjjkZjlEtH99rSITZz8pPLIW7AUaJwHn6u\n6enLkL0vJk5MmDqvzld5fuI/iYYxp3wdKqhMcqCHIQH6zD17sZJGwnmpXYxI\nY/XuXRcNjaroaMCHuacmVwIqoRFtAzAA1XvpUfj0aUyXy8fsckRpROnU6ovv\n3XELMMpai782MphXx6pyww0PRT8yHWYPf2rvInu9zyKLthifP1h/CSHMa7N0\nkAa3JZ9LNRTl6AXYTYQ6zOCZl5zy8C/oWiuD/WicdUOnv0yNWrm/KZw9fjNn\n69YAWKie7k6FA5uoEhBy1qh7R8uNbSo1YUTnRHDPvyihVFzYBbFUZ2shRS6L\nJ/bmb+CtbWtFobH3XlTKcs7FMp62cjg1YmBiF3DE6jJLNiHOTeYxJRvc6IVv\n2a2g4xLmXMcQyTzH4kAQ8qqK9+y4GzG8W2wuorgNXGth0GOSR0qEew36Z6Pg\nuVzCRYDLZPm2z0fdDNjac0W98HqfH2I/mspvikgyFWZQLEUxiUIsbSDIdGKq\nhHcTxx8cbmJftK+nVdX3qF0sEVM3y80iaQO/4QdMkP0RLRp6ROIxSX7xjAFC\nxodQ1iVkkKqdL3XvLzVyof8mcyZSrw2WsVTGA6jhaqiW2Gq21GbpdQC8CqFV\ncaVt\r\n=4QLa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWezQ3JkUOLaTmtAMtTIkvw0UCgjkxH0D9jpJUKfLkXQIgA3pOUwz/508c5B4Issaz56sAwkOT5KjeKq/lVWZaW4M="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610720143-6b49f4e5.0_1610720260368_0.1281529053505952"},"_hasShrinkwrap":false},"2.40.1-next-1610724444-6b49f4e5.0":{"name":"@xdn/core","version":"2.40.1-next-1610724444-6b49f4e5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610724444-6b49f4e5.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-ermWV5m8ITDyH/R15ML5hsIlu6qL6GAB0Gk36lsf91i5+MGxLY1TUnfXcd1N0JFz88cnuPzkf5XPLFldSQUExQ==","shasum":"749289e01357c7a1efec5612310d78fb8fbfa430","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610724444-6b49f4e5.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAbTMCRA9TVsSAnZWagAAskkP/2UN2RSca+zSK9QHnlUX\nDq2SOr0f5XGdBf6aYEfgq5mxq3j+2NO0hkdrPCLcNiyRZvxk3gr2q6c4Vkh0\niMP3c9qjYDDkoLLOXwXyMQkTfd5rnhNbRoB5J8L8xZYZnlmh940Fp1G1w5Yr\nkZPKA39/SMSMtrvBP6YQQ9U3ARuVIV7j3O7CAFyjq1fbZqbTKylFxFc0mwT/\nBOXrxpSSejRfJDheXeCZCXPckMR1/wvzkcmZ/Arvp+RvP3VfHDWgX3pMeFx+\nHGzR7D0vFSq7TwDUokcB1hdCeNGGR0AjzRx6qs0nVEhGT6o/ybM8iRyQ/QYa\nZD7aN7d5zypIkpxmF6DKHx/CRnpHEouX2eO76AcMF5Dvl76Za54yD82uA275\nAYDzjOQuwxTznkA4ojOgo1lnWCH5dF5qAWMTejR6EF+dQ2XjO7hvjZ2m6IfF\nOecA1Q/8FhSzPQ/tuUMkyPNrPTqLLyRCDwzkiY5TcTK8snaNYk0V8dxtq1LN\n0n8FpeX02taxZTJVLyt9g/IYfctYmzFJ+GpBw7q4ZFwvisChLFholfKFWP5J\nk06PefOfDRT3KRa3tHLjPNGHCbhNl0lTQas2AVUz/t2eYQS2RlnSjL9I33Ym\niQ7LFiWQOCOxkx+gr7JxemPBB75HXgSYdYf1dn3DpTSP3hehMNSha2ApsK8J\nflLx\r\n=ekh0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5wMDKIJVv10JBMcTfO25IpZnHhOzi5vDDT85tiLOu2gIgAs2FeBk3U57PJK25aFjYH5Rlgd8GgQcxMlLOLcqrfJA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610724444-6b49f4e5.0_1610724556380_0.8753429154083878"},"_hasShrinkwrap":false},"2.40.1-next-1610725487-f09db761.0":{"name":"@xdn/core","version":"2.40.1-next-1610725487-f09db761.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610725487-f09db761.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Xp3M9eNk2MrsusmGciYaEe8k+FDdo6KLzSgrNiSh4/3o2kxUsXBNifPNWumc4c8n2YdHpMkCTgXLjrki+fNAGw==","shasum":"912a0b61adce6617d70409976f446ea9df737e74","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610725487-f09db761.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAbjfCRA9TVsSAnZWagAAenYP/iGNiSuBSpmrf0ztXMwf\n28xY4DgUgBkdncJOSZjV9ClymD8vQJSfePTGTjocniFVZ8yg9J6O35lqVS/b\nawLQlq4CT4UUWVn/f0h9pKy09uzpDVxli/MKUBCrAgg9j1Y2dC9xGtndjOHD\nVM+MSKtXHGMDrld9Maq7wvqB0+BpdNwAEzxC5wPnJbzkTF/FVa4QghvVQ3t3\nY7TI/svdHEfPOLoZa7996ziam4eOawJaCAFhc5R4/VX+oNyrEn9jSyfQgOLm\nM+8ScE5GyqwfPbbN9XQLTWQ8txQKqe8ALLHtfitlX1eIOHYnSPvTR0Eb0itJ\nt9xC6+rtMXgSgwtbjxU3flqENwxmafGT1Ep3CFHl67N9L5rE2fjiEgtVkqnb\nBW4BfNvfpaUKZG0XWvocWxt9uS0NJc2SsVj+UJeR/3yGiHFEf0LyK34RHbnm\nHBFYB3iqV6hwFjQF4bnB8YnzgV40NYGo1mzfi5R97G0C6kPUpaA/nGPdrc3R\nw5iwJRSNP8SsL51LyvYmFRv3M0U3leZABBrxZKgPhW61uezgEbet5/YK8zmN\nXBbCAGiq1aaFsmZjPbzrQ9iW9iy0y5fBEwi0xVAle+lvdsWK5I65UdSltLsB\nY4huATDbWtyzsEb6V9sD2uS1JZnUnnzIyuPdtcm801+FKzYIp0o3l+oD6l1A\npMi4\r\n=FfPN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICIa4U02/cC6YXyzXO90ioo4VSEt2n89FrBlwW77niNnAiEA0Bzaxg46Q+8HMXNATiX6OM/EI4FvtfG2Bjb6tDqHPOo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610725487-f09db761.0_1610725598905_0.8642288461013596"},"_hasShrinkwrap":false},"2.40.1-next-1610726420-f09db761.0":{"name":"@xdn/core","version":"2.40.1-next-1610726420-f09db761.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610726420-f09db761.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-tfka0cJQE/WPRB+IndJgVipZjyf03nhxdJ8D8wAN0Z9/+AipzoZmONM4QQjVhqKNe5HavPdN19SN50Dr2s/a4A==","shasum":"ed666426c35e92f3cc80f02774bc593a1f8f1ca0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610726420-f09db761.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAbyGCRA9TVsSAnZWagAAq4QP/265La9BA6+FF4XnetCO\nEYmTgQDKwBEYkPZJawA/WYwQyVDkCR8nVArofCASeE++UN5bxi4m47J/+v1U\nu+kqezXeDZQ2KyRmpJwGyig6LyTC9yujgeyFsofgeZsBEe5s/d0LlnPxgXr9\nMcB7s9F/6QGc2Yda5qTA3m+h9eNddkAk7Zoj70odtjQab5s5fJxZEUTcHdcP\nerzo8HCjG0n3JkPw2VYS5cgQ952jxi6l/lyDCDnA/uQYf33Vorz0iwaQWCnH\n8kPOJRVbcJHnvaTWW/QGQ0x2TnRqcc0qg58WvsVEh1uruhcJaIQC64nneo9g\nbzzPKVEBKoioQAg5ZAAIpigfoNyeE9Mpge3Nv4uAArG9W8Wag9g4I0x+xMhb\nADckaq5wkdS6hs8A3p8q/PJlTBg6iiHza8n+leM+1VTMieTW1+ZW8CpH0yAF\n6wDcI7igG5uK04J0kHRxo6GcnHQukBCXb+B3MjrqeYsFhUePz8/pP9JeMb8r\nip2aoJwmoHGZdmKMnPMHfGFQsyjPTKaT5jJduXkjRYtHj+I44PkXgU9XRR5a\nSs8HpzBwmdlX3+iXp2plk8dFkzIE44Tnp4hORR4Vw4P1VNRuTYSGgH2m3eWR\nrsaRWTtHNl26ulRMi4YBTolEVcxKQkL79XpWOS5SmCdioemZOckNWxyHzNEA\na93K\r\n=WTIw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEi7dJojDCjLKSFjP/UzQ28s/RrgIAan0uCoG1X9HIqhAiEAwTmR7xiN8a5DE1kaJ8hq4CKeueBbAlTdIO0+BumzjSM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610726420-f09db761.0_1610726533687_0.27629656764248667"},"_hasShrinkwrap":false},"2.40.1-next-1610969850-4e588064.0":{"name":"@xdn/core","version":"2.40.1-next-1610969850-4e588064.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610969850-4e588064.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-xcVSYQH2ZhT+eNBSQ8NXhj/9o+O8L3DbJJFQ0ouwt7l0JBJlNn+o60qW6hbEM8yLiNsVA1qE9xMqim66yiO/HA==","shasum":"395b9d4bfa4cdd5a0e0c8495776e5bdec36da6bb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610969850-4e588064.0.tgz","fileCount":174,"unpackedSize":663892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBXNoCRA9TVsSAnZWagAA9LoP/1fyV4cESzkB8jXm9DPo\nUc2mvTt56kjOoo/+UF1gQXz3xiQZfam1GPxouC9aXt4qH8D4DmEGK71TX6VB\nWmzScR/kue681pI7BltqEnGXvw2hZGHIHHjlf6R8EeA1I1vaBdPOota7pxns\nFb9Em4BHp4Dzy+h8H8Sbr4Xu99V5pSJgZD50jILjo5dxMreiI8euRzoDNMAy\noj9/gki19q4v0adbSFknU8GIHaRKgeiWP5GRszMUTfFYPecxKzCo50hB2+iR\nxq8hxwaCF5quXZ4eUHFrcMEKDYcr3IHxMJONBHXGDvehs2BMGrpIuedWQYpN\nAjvf9jbrJr1K/XbD/9C6GDBGMBSINlwoREyuJpA4be83F3bnoAtXgz/5+aR8\nOsneRK7mOMYWWIkLX/t/fIf/yjoWTQiToL/VszTK8oCDFwBi8jpWuosJsHk3\ni8vHIjWwYYztQ1JO2rutI350ED5eVQwnzxP9OYhU/pFH1SLRnWkJgSyDeyEY\ntHIxJl0pa+mugt3JlSufWv8wk7a+RvvN+RDem713qKowvMFVKnMS5qLSfuf/\n6rOFH8WrtqliROrcdd62aX/EHr/xFDCk4BCEjYTQ5bbN5eCOgIeoP0751gYG\n4DQJw2envAvrBddRsO13741xw4U4LQElzx5EELXpM9pC73vISlj7U/9Xf/yk\nuIgZ\r\n=zHk8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHbnbRHz0JbDHTqhZpZZOExTN5TFAQGvXcditJgWet22AiAS7RnFJgFJCay90HgGBfz82rDqWjD1MC8oIkDaDAUcnQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610969850-4e588064.0_1610969959489_0.42370301775861363"},"_hasShrinkwrap":false},"2.40.1-next-1610974394-4ddf6baa.0":{"name":"@xdn/core","version":"2.40.1-next-1610974394-4ddf6baa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610974394-4ddf6baa.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-woLqTlFrDxHPG0zEZP11HIxhbqGY1xSD93/F9kLf3DmSH6QKeP1HXb1l92hWwqFNduIEgWTCBt/ZHr5Rp6heYA==","shasum":"ee79530d30c83b3593ce7342d75a20f21a9f2865","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610974394-4ddf6baa.0.tgz","fileCount":174,"unpackedSize":664302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBYVGCRA9TVsSAnZWagAA22oP/3IcqueBDzVyaYl8PMQC\nybTBVjozTw8g9OWqZhhUOGmhetrjHEM8gISq93AdWpcrrh9WAJcjSbe+CbQP\nlXoM4jGB+LmDbJXPWgoQWMlNRINx26l8S9aRAwm26uac39K5Bm/rv1a3b1L4\nQRW1VTqJ6vv/IE9NXrXMYUfLY/11nLlhByN+DkV0flX0JfYi5OybSVqAmgs/\nAopbueNy/WctsE66Yz62BrL1zTYk+pl/21t4hJP5yhPVGFRQBDAk55rdCZk/\nIt4BLfeaXduzG4lCOPXgBCePenWKmc/ff7vxK/TaV62q6N5vjXZoZnwkJ5xu\nSBwLhwT2tmbBTtdE+UGuI8uDTCdDNP0UE29IrrZu0izSOsNkyBW+2UVuPJlE\nywPmNnuaRp/PWt36r5TNHa0U3Dq/8Wm6KjQJUo0sCbatVo9z1vRt9kFI+8uZ\ndx6VcQBXqbR4gJycUaQbdY4tsC4/zrFdukAEMOrq7F9fmTWkh0cVsviXlmiF\n1A5YAZJuxkJvK8aBLK4Ny91mSU2XHk/BkIhH8q9uTBdjFdRMTbm5H5fwBFhF\nUZ3CGB+7dojuoalvZtAUzqK4aChr1PabrjTQuw3BPsw0KFMWK/wTCvVnB9wx\nPoWNE4tFDkfxbilHJr283UiENBrT0ahc/o4KMblJqVC7OWWykxuRHNq0GVgH\neD4B\r\n=bor+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPQsmt7y4Rp6RfWz/TZ2sI3zif0ZyB1NHborT2gq7eBAIgCo0TeahpuK4wSOPFIvFFgScvYa6Dms4fOGlWgunxeqk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610974394-4ddf6baa.0_1610974533820_0.631671107344461"},"_hasShrinkwrap":false},"2.40.1-next-1610974608-8234820c.0":{"name":"@xdn/core","version":"2.40.1-next-1610974608-8234820c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610974608-8234820c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-PZ4Vxxx08YsN59RJrgEWk7JmuMQ9InmFu4PkSpb/WM5iHQK4qJT3khAI+fVEq4g2aikOGTRU7vDDgGIpLKRAwg==","shasum":"c1869d1e7e32d9838ba7f27282945440c5e2a9f9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610974608-8234820c.0.tgz","fileCount":174,"unpackedSize":664303,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBYYLCRA9TVsSAnZWagAAD28QAJQEU0WYYNOFoyST/T2n\n1igGYqbkPgdG1TUZKVwwcCFrSjXqEayuFwVllNWaCf+ZE3crPT+4+CK+w+dQ\nEzIF1uZ6pI6ZJw7M1n4bL5tCUMJItRVpcRomtvVh2511bkqHLk4yvo6KAamG\nVb+w5UG/At72sFeppjlTvAUDajgsZ4TONjzh+T+g1BTHrHpNwLlf+4/Va8mO\nd40d2ZQ8OGnVdmRZF64I8RVrKpIubpSYwmrEAU3TnFz32AbNw15+F3lD/40I\nq4ZrY9e29UmTyaiAtbhsi6bEW+I/BLMz3AqVeST2gg7KgPjZONJaD3bpnaJe\nfaGbMrkIj6C2foex6WaEySCVNzWhy6xngJXT70TfUnN35J384BlOwZjSHm5l\nX6j8bZy9AyUznkzMTtBdAMsdf0yHORL/mwqzW8P2u8fay9f4Ci0vYHQpYJ3k\nV/v9Z+jibc3wd+yYJSDhLIdp3XfSdCF37r0HmbN6PtlOh0/FTwRc2ez83BuS\n/BUgbWSdEPP52qzmIFAaA1twmRfTZO7iyCZu8Wo/oGmRHk+fGUKKHIA0r7Md\nfqOk5lCBA0BfZJy8Ecd6Xln30c741SzSZaXfA4cYcgxGx7L9MZkVDfNRk1sb\n/qyrgFgGZ9Fl8qtf1HBIQp+8I7Yeeb2xaEE88u3ER78QUIogZ2Q6yVf4ueps\nwMoe\r\n=Tuhp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOdBOUz6BGs2I0B8zCV+Ol/BZoDh9gH0lbA7lbn2F6VQIhALJG8TWnWc4gPTc8BT7gZ0qKtryEdJ79qr9Hm+2RJVAQ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610974608-8234820c.0_1610974730543_0.7870933484822886"},"_hasShrinkwrap":false},"2.40.1-next-1610980521-28d48dae.0":{"name":"@xdn/core","version":"2.40.1-next-1610980521-28d48dae.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610980521-28d48dae.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-7ELlw/CF9I/pcp0mzAxkpvPC3CkMMheyHGoxCWMSF6GSZYC4m0Zp9HM8k+TjVKIhUuodJnpIfY0/N+L44LFI8A==","shasum":"3c0e338c5516d609025ca97b68c71f3abd5ef61e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610980521-28d48dae.0.tgz","fileCount":174,"unpackedSize":663871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBZ0kCRA9TVsSAnZWagAAk+YP/RxaT1abUcCw8EIEadKR\nNFAvM4NH7gQ+EpNI86HAQW8dOd1yjhLpi7k1HUewbdQCGNuDCBDr3Y0A40BM\ngTHG1CI5JRFYTd/DgAksMIluezPnb71JyajNwh0MLCTE2V6HG+3T3l2iD+ut\nEk6E46LHovfCDoATYspbQ/RjQAbPsubINKZBD9hNtVmAK0cpXtgCLXNOpkLu\n4/JmL0jQ5TrDbHgfFHWcMJfeNYvv4CwqeikHOH7UA0XKsJdYyVB5c9ulhpHr\nJxkSW8z0xWh2rVP0a3oo51rY2Uxa8DodfEGF1Nxbvq1o0RvNK2UxhJqKOSXg\n3bfKj9jtGpLFGjKjbaEZYUq/C1hHlvVea0e4dv97jtM2dhcLer6lTPDq2fwT\ngOZ3UycFyEPfblpDGFtDA5HmVVC2eSSKgb0/91xAc5/ee01ZduUo7xE4LRHr\nHIK1sD802D3Q9Rl0ZW1yomDLWosWWBH4BIAi3EIZXGVThjyJaiL8FnUlUtmh\n5/0D3iC1/v7oIWp69e9WCPljrUqubiVCN8mG8uFS05B6IYQs12Seu6oftFC0\nKSdjUiqDxC+2eHQHEH7prhMYN5aI6S0av769wyDiV/zP40KktUsmTTDDF7RG\nU4SkhD/yLs5UcjQGZHru6OzSoA+2acdvYCuwv7ch6N0mLFJJtZUQVlCLsUiy\nBhBW\r\n=Ebkq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBYjvKks0oi6Zt3D1rTO6smlkBWi1HaNoHK251oker6qAiEAv/z0On//MZN+HSVEYIgTy8BNpldfaUbfPRCcyWJNlhk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610980521-28d48dae.0_1610980644045_0.5119999041684484"},"_hasShrinkwrap":false},"2.40.1-next-1610980568-4e588064.0":{"name":"@xdn/core","version":"2.40.1-next-1610980568-4e588064.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610980568-4e588064.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-BwA3LGaDCQ9O/YrdB+DdsoA5Y/VCNOzTUsRoWcCTNPSPy4zC5qPEzDtz5dAzR7x+MO5Ls4MbzX0+dUrzqKZJ6Q==","shasum":"72d299e03de92004c529f88addec7a59f0e7d8cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610980568-4e588064.0.tgz","fileCount":174,"unpackedSize":663892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBZ1HCRA9TVsSAnZWagAAVdIP/2ZRuuVfQcTjY6FjslmQ\ncbDcazc5T2DX2fxEXgzbwuCNLi0/7McdNWJcKo6Svhn0r3LQLX3GdIP5Gm+3\nm62x738und9KMvVtOOOi6uOqPn7A6F1h6ggiYupFHfgRKH/vn9RHq9+9pG2M\noZDQUEA7d+uDlXtMx0SIAnwRqpsFpYULn0Efbl6F1JxRLsu2t6VHmGGxUrOB\nQaAZ4oOuRx4DVaI/zdKMRuHvRZzrJUvFcjBurZH8+b/TQJLIZgsG8NRMgGQy\nM1k8kj/bGTCjx8Q+5nwaBPdebvmvZ8IC5ToftKGUSUTbbOZXPIoMUJYB9wLF\n24ZWds2rioSHZ2y2QfCRFfOV/5O5rAylaiLJuKIM+t9SSvedVP9HrCvbUt96\nYfWqZobFLB+sSWya0OJRV5GpknAmausxYve6vXcStUsKnfhxoIZJV9teb5fW\nhkbC7Flr0vDedS0qqH2DfefBNvhgCGK4vVEt5dMRgv4VY437Ui2XI9QJI6U3\nFEWW6zurEALtBt9ZEsMUHM6BroNvPQUpcyijVW1dvShHo2SOBtzApne4EerS\nnSM9bljzc+vwFA4HSJRbiNDIaJIfT4Nh7Mrf9nhlYEEXPtjr+RQqZIzsnGYl\nFjNDIROwimfm0PjANORJgwKNgA+oIa+CCVC4/xUiobkndJNiuN+02C6XHzQZ\n8rtA\r\n=Heqt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKTb9APeBzU28g5+3LqWEgLZgyOTdbLocAOr+0JspebAIhAMYKIqY+/K443FmYjnwyGBQfVYBuSm5wfLlTAZzTJsi3"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610980568-4e588064.0_1610980678364_0.5935340614185365"},"_hasShrinkwrap":false},"2.40.1-next-1610981719-d6c11efc.0":{"name":"@xdn/core","version":"2.40.1-next-1610981719-d6c11efc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610981719-d6c11efc.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-ccFHQYKH+YFV7CGjU9QPpnwCpTmmTNEmDy9+DaIJ6TmBA6eWXldu8unY5ebIKpUZnj1RdKlM/nOCdjeO4r18XA==","shasum":"7b8bfc4b01d327be5e95295a7f7a558dbebfe070","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610981719-d6c11efc.0.tgz","fileCount":174,"unpackedSize":664335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBaHfCRA9TVsSAnZWagAAg8gP/R9o5rwHfQAa3GJmQecV\nwrFrhydWigGjFYerZKR9IuLLaJ6Ki9o35ULJOLTMiPIOqbrVmC7h99sRiT/d\nvuotrQB69bJeeyb8sr6HR9IpVZadrvhmWvA11273P8qFIo75nH9KaxVJqgVk\nQfJNyZL08msHyf6T2T/BoGaTBWRbHqZRBNEod3fIL2AM2d6zsQ9KZHSTQuhD\ng2BOsWCpnWhubI+wnwzVOCuHUanrziJXfrRea5QmWom7Qcb5cmtGFs8iz1IO\nAIogflEHYVijp6NTslSvui8fCMjt3gRlqMAY4HUvMGBQBHvqo/EG08hSbPZN\nuZSv/ZLAy9+Fi6AAQL9k+/oDV5RDpVynWO2N1z9xE4QE6cAI2/2YiljMsrwu\nRezYNMGZBS+pkIhkBUQFbiwwg8z3yXlvVQgCH/Lo/fMG5Ao48ThS+C+7uVKj\n35WMYnGlzq7VGSJfeuJ+YgwmNcbo4MlhBPY+x5wwsh8HE5yPDNVCwasKg/hQ\nV/11TgADQZ63QG4AL0bw7uNI8VJG9UhJeDHVUKCZooqYm2cUjZZqDeId9qZc\nYELuUusdKPuTvmfRAPIBHF23YXkpdeauMgt2LQzIcVoCZhIV8Hoc/wownC/v\nlVhRZ38YqLDbyNCHDzgP2YFIdT8c54BM79Ivzy8qpJaBlRyFx1vcMOlVOCs5\n7k1x\r\n=4VrS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMHY7QCGcuhCRIuKhaGSORf4HtMP8t73gvgQ6PrnH5AwIhAOitOGD3wTQ/RWPxkM8LObNAAk54uDQUkvs3N3iJ2MpP"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610981719-d6c11efc.0_1610981854813_0.2105795852227461"},"_hasShrinkwrap":false},"2.40.1-next-1610983103-1e81b81b.0":{"name":"@xdn/core","version":"2.40.1-next-1610983103-1e81b81b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610983103-1e81b81b.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-ZmaiGoMHPGMvK3PX8OLHUAwBNz+7ccthwzNS92PI6G+HCbs0sLjXGi/vhEPnw/yw0VeX77DkHkHrfLe4w/+gtw==","shasum":"9bd0f7642d8271eddfa693176a6ee43bcb6af83b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610983103-1e81b81b.0.tgz","fileCount":174,"unpackedSize":664335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBadACRA9TVsSAnZWagAAk8cP/0YxLhMZSPd+FxiwJL4y\n/3eo5+1EdoTqqKBI/mpY5HJSjxceihIwJWTnFnjlFzmlvrrRUZ0ryIlA1UVj\nGkXonaEXxA7J1bwWfKh7JCrl9+Dyq7PKxcwO9xHu15yMgSrSyYerUhjjS+e6\n7FQCzdrvRT4ToTnxPkP7we0S5jTwRh3zIvOdYMlVxgD0nySYAn+5kYQ+K7YF\nyM1FUx+AXctthjoW9sRrfq6+GnuqlY1PA+y8i/TNXMJtpalZ491HVa03HmW9\n9ChN6E+68xSzlNKT3AER0/Rmsx8aGDh0oPaowmHnnHg+irIePy7it+Dfybz9\n0UTItcIFEFUbvjatbHs+o2xL0Go/lWO6z91cgk8XO4l+l22Yc8Wrmtu9eQdr\npOzv6EeYEhnBHIm0/w5LbZQUnxU/EaUDkrtgDuzvv/8M9uhEFUfg9o4Qysry\njZneYAMIJrDXA1RkAKEd4Hmwjby1WAHP6giCBjhiVtD2da09KGJFLPhjF/7n\nucSTihhnQCp1kusPRRBh9iYAlNRgNh09tHZzFMUpzHEBklrouch94n/6FIak\nSsJkHWJ2CkiHFHacbSWOmENWiCiSwSqBhiOj7u3lliFiL7bTrhrrA6TBLsah\nZxPj2jxxT6lFcbZywzexpkQ1BFtbx5YX71KP4DncoJiHk/MAbLz/AXY2/sQo\n/UbM\r\n=nMpw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHNUwf+TvT+ErnFOIih0yxIxrmNqLRD4fWuuWQ7YBIxgIhAOj3aU3oiLnbu5u/IzT1mLErQRhgfsjezFrLiPMAGKp/"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610983103-1e81b81b.0_1610983231818_0.576892313879801"},"_hasShrinkwrap":false},"2.40.1-next-1610983877-ecef63e8.0":{"name":"@xdn/core","version":"2.40.1-next-1610983877-ecef63e8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610983877-ecef63e8.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-NgKIBjayslcp314i40+APSzW11/3PB60eisTAKutxAaUJ9UScflVnJbrc6ZjnOzqIVYxwZ0X1pp1kfDKrmrM7Q==","shasum":"ece4a7c5d950a738b7848f5b7c1c39769ac05728","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610983877-ecef63e8.0.tgz","fileCount":174,"unpackedSize":663963,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBao8CRA9TVsSAnZWagAAzZAP/1Tmppg7TSfwoh95l1aR\nyCnh5OpKYqCrKrBbF9Ur9pmEyVURGBQxEhbVVJN6gZ7QKMwFJdqNhZMu3zrd\nzMAYiFDf6Ljy9Jc9/8CjBSGlbsdCsoRCdFtt7FgvpL9dAO+hPnG8QzasJU5s\nTtbrmjTI7belzwHFEIQqdAwMgX1gM3TxAkkGvdmxrI9KrFNdyzppOCfSUWAA\n1+YSlwv7HmSqKQ+11mailbjpmFZQK8JfbBdKU3qycYn9GQ77rCcACYaQk7lO\n3Ktzm6M2ORNJPBVpsoL08omh4U6nwBf8UE6H6KRWIIcSx9Qu2vkDiQTqO55C\nmzBokMUznWlRfxUeuddHR3ScQJkuJGnVNQ7IpTQhfGzMFoWdeHYt5NE0TQya\n2KcMhZ393HfVrnnSltfhryaYv1ob2wpGPxnPWRgvWIptUkou4pd/qOl6jSrA\nD7U9PFkpLJAp80unTJMNKw6+HBcGbHsjZOv0ozqEZXPv51D3IlNQl6NsRkG8\nYhInZfGy/j9NWQDhCy3hchBjnZg5wSdr7JKF6M4cHZ3VnVmYU86LzpmfdZVa\nExhf0Os3mcVL03VpWRRSt4HflWi4h9gOwI439BgWd4sd/Dy3PaQom+S72DUF\noVK6uE7NhaDD2NQOObH67UUn1HCBhKNRxDWQuNRuUmtrkul9jhpqtv00+HkK\n/rCm\r\n=vWc1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHkFHCXv+pV9xU9Hxh29SvJxiC+xdRkPMtHnnLvR11BwIhAIsrMPx4/q+wz9jjIdgkSzkmAKBN0b7hhhbk/mrydiIL"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610983877-ecef63e8.0_1610983995806_0.5171933103927795"},"_hasShrinkwrap":false},"2.40.1-next-1610984479-7f05b466.0":{"name":"@xdn/core","version":"2.40.1-next-1610984479-7f05b466.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1610984479-7f05b466.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-W3K6FEQDcBen0l/zIa2j1k+vEz/cov72B0ddh8IKkw7/UYArOGRFOJyFpXllZ3lV8uR00bOuAYzwQItpTdq6HQ==","shasum":"9c6113e7995f0e7f81b16d04f311d81c9ae7c737","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1610984479-7f05b466.0.tgz","fileCount":174,"unpackedSize":664498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBayFCRA9TVsSAnZWagAAO4wP/RG3AEqbtBB9WtP9jNvs\n8Q3hikUl+Q+wEDIeC772GeunD1+VrZXoPoiXv4LCCBFdp/sJnD++Oo6ozBz7\nD3/NWluY9f9BJPvplqDgVfDfwyO/ks1cuni56xkHdwjtvy/Cv0w1fXp+5dut\newRruZGLlT3Q33hn/824PPW3AT+IG3nXdkiYzuKuFoZfnVFJRBj+iclTC1Pp\n0Fe9XNvTid4X06Se2J00lYF5PPhxjHTIriyOfIjMfaNgXk8Zx3pJv7tUbTTl\n3UgOjAGs9nLgGfhBZoEkkpumXpBT9g6WYY6uB8F+bAI5mjo3J4fJ3SvxcuKB\n0AHjqLLBARJlkj9Cc1nAMD8XlPI4+D6oap8rfE1jBPNW9R3NQ1YOnPzWf7sD\nGtgQ/c5tDkDQfY8aH98yguY6Hv10Rq9EZSu05DYYOvTb05Z6OvzcwjnLLAN4\nFobkgcMsfMXqjlL99E//tXVKkp2jR8k6NAwx0AV0vBMsvd8MlElFCNWj//R0\n1vp9ZNPHvCBZLumgHHG9LQNBxTcCypTN5V9ABaP2TW5BMOdXzUVDj+blQoMU\nuoKmG34+Gm4s5Dg6M2iVB2qctoI6bJwd+QWJ2Wy/2Q+yz4PypSqCIhDwvKrG\no6OrPgyip5cF53jsXHHg9Ie26TYTl7xiIqLse05ZPjPCGbF8VpIqHlcxNYm7\nmhrj\r\n=6W6D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2SitWnXhAlRj61zY6Bcnzh7j2n/wYFTi7jBHP6igWOwIgDBJPq6TXAwKvriwtoesnS7nCwkv0ZX/wPgcnQGqq15Q="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1610984479-7f05b466.0_1610984581394_0.127182264035252"},"_hasShrinkwrap":false},"2.40.2-next-1610985752-243dfbfb.0":{"name":"@xdn/core","version":"2.40.2-next-1610985752-243dfbfb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1610985752-243dfbfb.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-BrHXLwVlzCkI/hmzONrkuAvVm3I7gZ9lkIb/wy+vT6iFS1C+fXksT6FNerIvPArOr/nKUNUcPq0LrKeQFydjfg==","shasum":"bedc217f56cd76091edd63f5115ffa7c1d0efd45","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1610985752-243dfbfb.0.tgz","fileCount":174,"unpackedSize":664498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBbGKCRA9TVsSAnZWagAA6HUP/2Nit15/OnDI/uqTSbSi\nXFGbXCY1rx1fNjyGnw+ZGbQxw9FzagB+RLS4+CAbx6RV4bqnCV8KCU2EYIaD\nZuKhaAxZdo48CXXK5K3ZEykCbLGg8b0jRHkVXHg7FC9lKnn40nTWPKFQEV/a\nU+X7xfoZ10iv6po2dv/vAxiv1juGrnODyY6BJc845vr3l/hNocWQwYzuJOPE\nU9ELgqdG8yiTQ/0CS4/cVE8QhCYVssGo/1l476x7vPcmqCCiyNjzaT/nq7My\nBD/1GKKqzCIgwuSK75KIcnlvXkmaw0kiL43Z48IbjaULzNLNf1qXAhuhMI90\n8LSMZN6bIDOghYYZeXWuHmknVbaVM3Cn3SpLhWQbFPt0UMyZXNh45Aw08hIs\nbPA66KL31I6HkOHXI0tMzBsbGvBMKEPznIk+PYlAGNLngQfGfRbkqek5xkw4\nPPIV6l2xz+oA/ZNR8BUEb2KXB0hNAOK4sASHWEGnLmWWF5w15cEYQ7Ahvlt0\ncagiuOphVe/gJNySZZQ/2JIkX2s/3wKKuQoXdjsnT+yyuC1ohReQzLdNa3+H\nEHtpdIKXbwHKloqORbrIC/M3ADjW1qFwIJ/i7kkQAxT2UrpzE/Z8Xi2Wtpf8\nr1vKjhxEn/1PsnLdMrhRXwF1MN/Aq666DQs4kFy6MmzbCPd9uJLyTJYEtCt4\nvvUZ\r\n=zcnL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlubwQ5o3Th88P2CLn+I1KjULEToGVSMBWNQmDtlgNfAIgV9N7SLmG3o1JXjmCU+ss6GBgWEpXPI/ZLgoQpXEl0nY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1610985752-243dfbfb.0_1610985865984_0.36050829735780376"},"_hasShrinkwrap":false},"2.40.1":{"name":"@xdn/core","version":"2.40.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-CKsjczRPVkZMsa/0SZbVkoSyu+0Cpo1fQ2tLMF9jjJsaZ2dioh/O5e0vhJzvC6kxSwLyAWqQx+qsKE7KgadGpQ==","shasum":"ab753e8c1dcbac6414888cb959f03cc100dc463d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1.tgz","fileCount":174,"unpackedSize":664444,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBcYPCRA9TVsSAnZWagAAyRMP/RIt2gC9q6RG3vG8P0no\nAD17kNhf7eASpUVHFy3dfdU1FAamhrNEce9OUeeJVV9DxlIJMsN/0tAicryb\npIMuBi4nMjMzqU+OkkX0RYWob+QR46O904Gng/3whMtYZjfrk1MqDDORvV43\nphIf5lCvf4Wyd/2szQjjjpC7RfGOQzbPi/G4oTGimZmKau7YLzXvf1NvthVM\np/5nT0dOoQHhQy4GTMsRuxC2FqE50pELo479NjyyEr7fqYWG/cdyY229iVJT\nj2662PeQZfwciev+cvPtovxPWEkRz6U9Vi/5UhJZpAUGU7ZJINep77E1sQpN\nsgfV4azope5GlAKu3hwWfAqD05RsQrVAV27JlIFTAW86CAZv5noEHKcikXn6\njiwvfbgfeDUc9sLB+8x44NSP0HQEzk7tW52i3EdYDw8smq6YPZW5LKzr7BT4\n6yM6UouVNtfNSU4WLROtmis98L8R/osgbS1ShBsuVHv3Q/CM5bmQBPynb5sK\nHPIjGOXeP2OqRZ2Cco4h+9sPPdw9Sr5VH0NSXxaRs9ypPtXU0fdYHAj4WbcS\nMwkghru5Zx4Xu1WxGE80NgyVuSrNozPmyb91GbDMKIVj8XA7WwSw7WdewOjm\nvDMYIR17o2ILKYGt/xOItZn5Gawa3ZwxVjBf9DtgI+8jpnqaKzXSotCs+Gg9\nwyrA\r\n=fuEL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIElgv9y1DMDHKLefafQ45OE90k2sL8SEP8lkVjueFSzAAiEAtHlbDIQaFakym+NRwJU+B39akRdA3ikUmnHX3HS2kWw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1_1610991118801_0.34087520803349114"},"_hasShrinkwrap":false},"2.40.2-next-1611061883-632a8662.0":{"name":"@xdn/core","version":"2.40.2-next-1611061883-632a8662.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611061883-632a8662.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-fTUklzdj0O+kUHNVtky0i/i6dAKC3phPMCqv5J2CykKDMP4hQtdN7Nvba11S4Chh2xr5EmhNMVptMcdcw5zEdg==","shasum":"9193383ca5a9ebb3f614daff2a2d07aa3cbbe953","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611061883-632a8662.0.tgz","fileCount":174,"unpackedSize":664498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBtrrCRA9TVsSAnZWagAAOZwP/1RxD2hsag+h3/19MONE\nm7ZW5mNg/5z8YW0fmRk+xFm47LcWSGmTgYQv0lSiYqtU9ntyodeHi74Qb8l4\n9Dqj17+C0cGs0PIiltwXgok4ehkrjpmK7PffsxrhyzNuaZP7803+KgTYnRZE\nIZzYMYZX+jav8VmVa6Ow/J06EVp/DxY++14R3PJrsKCsQfHtAKETJR3Lp2X+\n9aVONkejcU20xz/RI38Ph++T8MWpHmfuuoX9529/E65q6mPxHX3j/39aQKqy\nbLXXQmkODGgqeFnHSXLYBekbRMFHgj9nhJMeL55m/0kBgcOgpLyNWUxIIGlI\nqZmsC5/sW4fqDMs5ztQXng2CnWw6eCNI3Iaqc3H3RwHtRROg4eQyxI+fjtNE\nXLKvhMkUz5lIZj4RVaVuXHLUJMAxaLqEWYHrkOpKkvRp1/5WeYU/+SqsA1mG\nVD+QZwjmIy3QnEco6bEEUp0nb3MrAaXSgFMpS3ue6vX6ZyNp5ivF9m1wSnDC\nlVMcmVU+ZqNo888VeajzBl6S/vTcPEyw2LNOO6v72lhIAZkYvxiwkjlTK1zd\n5GuWzdI5jEEVDAJAi+Mdk7cLEogyNwP90HzO+S43qg2LmkDbyQpjFupMRK0F\nkSflPk3JysY75pXnILWTfPg0nbLUC4RmUAw8r5IBqZ2jCbGJ05mYAxE10Xaf\nFMt0\r\n=VJiT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5iDDiHro2lRwoo2QRbxVyjwa48ecXaRQJOnGpNm4d8QIhANuaTnVxsBdOdn+Bxv3qiRCDtGw9/pELp2O7AshYwFgv"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611061883-632a8662.0_1611061995051_0.11537470125298599"},"_hasShrinkwrap":false},"2.40.2-next-1611064902-632a8662.0":{"name":"@xdn/core","version":"2.40.2-next-1611064902-632a8662.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611064902-632a8662.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-00z53ROc3fq0ATJO9e/irWiNU/q0OkkNkxEARiRztDf62D3wTbVd755A9Z2ouyF8nKRvipqw6ttUXcgyTPSRiw==","shasum":"a569fea00ddb6869a55f611410798351921e5efc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611064902-632a8662.0.tgz","fileCount":174,"unpackedSize":664498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBua4CRA9TVsSAnZWagAAM4EQAIb6VOlrx63XKl3Aj1a2\nf/RXVGPxs57cCEd3nEE6gx1KVkQ+xyF1H8FwKZI0aRtjj7v1erRMJFBBlSH8\nNU6dzT3MP4lmAMnWh214ms9rwb7Okp/wk0GqLKx8fwMBEGgZL9isTRduEqmF\nuof+IJwJb1fg7vvAR7VlT9cqbDqEOT7NAApdrLQUrZ+6naFRr9APyrKh8QV1\n5KDtYt7T2Q/yGiWMl8LrJQFD4nrKKI3k7goltvSv9TjwtBfuniETRXOL8iaH\nDnXRYwfzV7Qvtljwg28NgAaRKYTgwOeDWz7DeE9cwNhQ2+rMDhv4j6alM0h5\nGI8g6OQmdYto7ACr7Y6EqfQYj65TZZO+rpwWyTARzE82+uWetNBHbIp8G+Nf\n8wNBXEPMAbCY26kv5fGHRIpCPoc2gIQOrktV2tF7GGZSybKLxLgcdWpBruHC\nh7fCT3RuKsEYxylJ5breI6BKazB/7QsmpqXe8BQQPi/79CNyKPWMZXXGsvWh\nvwTSJyRSSxL+nblH6GscU+NVeGMRQ+Oml+U4Eg5rapzG4vG/rZO2B/7vly7o\n6vg4j/gua9gEJ6GH+dtXy32hPYIEYbThqUsMErelflEoLYdN4BUd8tKqWjeo\nHTL8/3rROL6eymQqQ0NpoVjZpnbBTenHkOjugn6W3e+iaGhqDvJQ0BFHs4SV\ngTg7\r\n=soW6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0+PpFZr5zK64I8NW5aXM5ok2cCfJ1zUdTRdOQfee1xQIgKDDO0/rdnSu1AaOPTe5lwCC1zpZ2e+FsvrKc9j5wf5M="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611064902-632a8662.0_1611065015618_0.015367860488266105"},"_hasShrinkwrap":false},"2.40.2-next-1611066255-8dc0e884.0":{"name":"@xdn/core","version":"2.40.2-next-1611066255-8dc0e884.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611066255-8dc0e884.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-tWOat6Vj7B6OhsSCjf2KEsDJrmZEyNXP+c5R1n9Wn7ua+/XiKG9kQLhx38uq6sHrNpDQXtJDOsyROkI0qZVzWw==","shasum":"4a1c00e984e16cab69255095d6fd90fc8eda0acc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611066255-8dc0e884.0.tgz","fileCount":174,"unpackedSize":665001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBuwkCRA9TVsSAnZWagAAZdwP+wftMrv2G65/tGwM9PwT\nNo5Uu/CFGnMxKj0rwA0Urok8ukgefEsGPFN5yn/3Qex7eNO7kPYaIrj8KP9g\nikrX/i+8GhNQ2bH4hcQEspBeAWvGguwwkXdtciVcnB1sfXM/kQoUImeT2LCS\nYI5fDVUCt11QzEQ4plkakJ3c4HJN0oWWrWXTyMOE14lHs3mjBhYAxMKOS2N8\n5kzMaAWNyxwBmPE0L064lUVAVP1obNstSCE/c0lu92rN7z3Vb4/yOdm7tLeZ\nDyJANuoHqU+n2Bpi4jAAlBOZX3AnPWjLEb8/RuV0EWm0Tbv5ckL6NwAybV0f\nmdRTziXfoFx9EwHsQeNG4DN3UW3Yr7tfg+92Jy0VxrdATTVSuQQJD3HAeEHO\nJqRB6NyU2NMVSyn920SINNUCBuV8+t1+k8KtqsDQuQSqwPMlWquEKapSMpSB\nBe9sJ4/1Fl1/NDoW77hDIg1G9I36XN1OQ8zVX8WiQSrzMnv0SmkInNkPVYyV\np6H+v+TSaTbI8MMxNSWMO8dvl6STZ+Pwxq13WHGr/Wa24aDv+KTQ9xd1MOv/\n8y+RpVFh6ajogXPXnRU3EXPacAsrlYqUF3OU+jsjOqq7Pzi4E+4Ko4Fp3WVO\nGBlkr5KRtS4AQ7w5KVc7/3vkJ68DM6Xxxqs8JSIEdu/MPTFtUHorEY0hN15v\nomwD\r\n=glbh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWiRMF1UhENAiESjyTZr9Ki723rlhQhIsPxBE4U5fpsQIgSMSb9rYDJBYeZqD3szuQBdFAKAEnBS+NlyUNqP5Y1Xg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611066255-8dc0e884.0_1611066404225_0.1929335217040451"},"_hasShrinkwrap":false},"2.40.1-next-1611144510-f09db761.0":{"name":"@xdn/core","version":"2.40.1-next-1611144510-f09db761.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1611144510-f09db761.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-1Q2uy/1O3oa8cMTuXbV39iINcAFMZVXUvd791NID5GQbYdCYbOCvoW0336bxjhV+Prp98vbE5WN6vvVS1sJZMw==","shasum":"5b3518ac33855256574f482f289fe54777b6a32f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1611144510-f09db761.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCB20CRA9TVsSAnZWagAAcQwP/jkT+MRQgINUiB75pMFS\n2BMlLl0ULA+f4xZ2gtOVDljhui77zZpZF3S2amF5Bp+3RkOmUfD2H2moq8bm\nju4c3RDiKeM7Q5ruozltVun0Qg7xotkBRTigk41X7Bz0Yd8GGqV/WIYTQvL8\n50nw+sSwfNZDqapdL7HTtZh8mzMopWma0XXaRp8fZWZIrn2TqEuKifg7V7wk\n6VOw0m9oR9976oEI4dHDHv3nyBkBwPxTIySOd/lFknM13vq4VhDu/4WBhQrs\nJkP+M8k/IE7j6Y+c92MfiXo9m5AcJd2NoCrj1wA9bQUa8OomHZ9cweNw1Yao\nyM/MMUT00No80n/+t/5z5agW7iBOGLRKjCNX1HYDKhGKOxp4G/Y4VyMGlEAp\nnSbJLiaIdEwAlUOUcjQ1god4+dYMkGGTtowB30zBZyHMewnv5N6yoERLdTz7\nssPGuEI55fB5td3t3Uo5mIc5XCQ3OagWCIYFSyLSqgn+syVeO9ge6vidaDav\nlWGOqyGO4mytqqgXH013DThMVZMvGPOnbT+OG1d32anD3n4MjP9suFM+Xf3Z\nG0QwFKp7+QiIh8Xi/Qgvlh6uQci6XEZow4qaRi6QytmhnXxtx7KXBfzqBZm2\nJDySbMy+/ZtUPMlYupWOKFD9upsqR0QYO+G1kil/j6xUW0EBCK6uqWOr/MDh\n5OkR\r\n=coJQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDjLgUSo6sQ83AQQ9X0kcg0ZHD17tW8tJkVsXBJrJCzcAiEA5A228bXW90GkC9ug1UgBK1RlkdxzFduY3Tw4X3SNOqY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1611144510-f09db761.0_1611144627491_0.5379259267395295"},"_hasShrinkwrap":false},"2.40.2-next-1611146337-5f2c3b54.0":{"name":"@xdn/core","version":"2.40.2-next-1611146337-5f2c3b54.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611146337-5f2c3b54.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-zbUgKS4ntspWQ5UjaQ87eatJO7WJdQS5wcKFaFD7nI1ljhbGhdAcHK3cDpZciZhCjkvFNQoIu4kjU2Vy3G7QzQ==","shasum":"d5960822eeaa8a7d0f4954cca39af0b870b8aa2e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611146337-5f2c3b54.0.tgz","fileCount":174,"unpackedSize":665001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCCTXCRA9TVsSAnZWagAA4d0P/27CCJzFLzjp7WFVbi48\nPt3uDhFtBpaOk+SvZ0dg2/+vtkDLMPWGbweJHCa7+QoT75js3pXQsuLOhfv2\nUuChi1QpSy7Kvqnc+3cpc1xlUy+NWfPTtrbAAOvhavG/zTuilf/PGEuDR9wi\noXAZF2a0eSMPKznZUXvkdCyi/zvDV0XneTRLYT/DeWKRFtg08uIaZF49Buc/\nHrOUddNC9LuTSItvRPTtleY2kGccSLnr/yI+jVUjw4Ac/SKZGcxVk8FuR+g3\nnfXJF2jfRRnhwH9YLCg5zIIL8ZWtFBsIfLPP51bj2/sK5it7B7r6yG5zBBha\nOitxU0A3QK2ie1kgoQnEBmAa6hSGtYSSqUBk9hgwxElSRnEpd3HwD/qRElhx\n0jzZbj2dDOpo/KBi1xfv+WRobTHnc20nRtaSX3SAyufHOpUd04YybvasyqYU\nii6xGie2K7flsXPOmwWyNrWFk5KzV2RJzbyxMN794DVt9oAkle3+aEt9efD5\nF9E9ATWxld7G5DUHnWWzYYviwgvK5p9newcpOgmHablN/rRCTe9wn3k/Zytg\nXpKmXzg/MhHUy3G0EfFoSM+wv8HfmbKxRKxOfZMhaRqeQZivZG2YU5Toun3F\ndImM76imLwgVDjfvf7iclJugkJyFl+L2ICxoeH6mzwfOqNcVpxfLbofOC+2b\nRl6G\r\n=61tB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDi8f0VWeljXe2IOj/pSWxnjgV7S4NEu1eVVOAC1f8mqQIhAJ+4KZfc8EkCbXr+itJGBrSEFqIULcU0KBTrr6xqk3Ci"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611146337-5f2c3b54.0_1611146454664_0.9721434808517846"},"_hasShrinkwrap":false},"2.40.2-next-1611146576-7e313222.0":{"name":"@xdn/core","version":"2.40.2-next-1611146576-7e313222.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611146576-7e313222.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-GzNe8GU/JJJOzEUi3ww6UAhPEOkWRuh/Rzy8HmRgsNm4MPHtfytT2MunZ2KxEyxe0fPo+E92Wp0OJhjBvXt9fw==","shasum":"022866bc34042471e3a7121c999c5f3e709ef5f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611146576-7e313222.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCCW/CRA9TVsSAnZWagAAdQkP/iCLiLvbnKzPLEAsOFaD\nGDotp/iBhfAoGyls1AyoLgyP7OEbBUSkbD89NzIrp1D0LCeHUkk4G6Da3vWC\nGMemltsFhmr2dBiztR3s62jyAauYh8mTW8D8vsItXj0lgUC9Tke1aLW0Ls0+\nzHST7ncDK3x1kHNEGbDp+6mgtOSISHE7pYqMo/p7XHrEBN8WAMZjjx3gdgGF\ntBu9hg7zH7wt2lzemom5bl+mqvp/OuOtHjsiRXWD+JFjAgOW2yvu4iDCg4dm\n9L158XP4CUx3wXWjxDrhHLBU22gwOhxerjdkKL7mBSECeRGk+BQBpxEr/bs3\nExMGdPhUfK6EJtEfd5AnXA/Bl3B4fcD7yGiEoCujrzLdSct6ck/XzC2ezxyo\nKerzTkg5M0Xa8TOQT8XsnECOafAw6ccxZuIBxRUN5c5feT4KMCYa061SQHuk\nUbdL+caBsHX+nU5ufm5o5ZOiEmwgvPeVJRkmVikuwOIML6m5JrycXuzrIZAx\nMtzTl/90nUgxga3v8SM8mDibtT/llTi6a+I4d3gzi6d+InHB6/R99jkEQFLv\nmFPM5XrV9dh9HpOVVEx+Oz3dlretpbiAPTk8ElfAwZHTrdKvsHcO7B1NJj/y\n6zaQRPonStY+pueItAw6v66SkiozafQwOBkG3fFOlJvaJBPKviEpCWexPYzD\nXeg8\r\n=7RYI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICsjw8COphCaFaH+8JWOd+AVTQCp3JYDPH36cJWjv+z5AiEAvZNWkxHLayWtBa7iV0l84Qe8lDHvYMNpc4p8NQw1PMU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611146576-7e313222.0_1611146687087_0.8506447976112383"},"_hasShrinkwrap":false},"2.40.2-next-1611146603-34453e00.0":{"name":"@xdn/core","version":"2.40.2-next-1611146603-34453e00.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611146603-34453e00.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-EiRO72pfJ11LEbreISme4SD8Ak0ZwYlgufsB/NdaVwoSScQJhnU///HfAHXxfUZqaIr34x/wkqmEI6zW5ybR3A==","shasum":"4581060ee0ffafc32aa4e67b460e08863ccbeedc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611146603-34453e00.0.tgz","fileCount":174,"unpackedSize":665001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCCXrCRA9TVsSAnZWagAAOXcP/jmN/8eyI4HBC8Rmm0XC\nThwcwfEzSrZp2dBkTsbDnCmhkpQm6lFwwnlt4tqW0r+vBXQz9uz4bQ5wyRQs\nUp+JgF40tCPLasKFdKFEXbUiGrOQXaubjIQ0nMjlAiR0a2OXIOnOMg5r8zDH\nE7+WIc0LYdLRWAB8kKSyWrFpJgGetRR7+dL3Iha5Vx4o+qznU4NXolJVKVbw\nGYdydb68apEwcJr4lV203y3/T9oVNqp4ALeIRY0JPkfSv2+LrFfqeUAL4HTB\n0xcN25bx02q2vuNdUG78HS5KaAR7f29QsIP8tuwvjZG6bGRksb7jw5MO2wjj\nLtrarHug6y3G5rqJi2pTZKTVsFHeTOmLvTbxx1VTLlW+iYJGw0qWrcFqKW72\nsZdsly/LqRQnR1dl3UonHS0JrDUfL80qGlRzbiVgRUb6mAPEMs4RO8oHHa41\nuYgZSqmTQ7tW/oiSyTX42PNGk4+3+qWZFwGjavPmDCc4Kw0IBFQ2BDQsWZ8I\nmFkJwUMFO7zSaa6QJfCIJ2coAtbRwKxU/dBlIPJ2gK/xI1w7nmXTzAM05LGP\n1iBn51D7lGQ/l2W9CjkQUtRjUlrJyBiFoMBRUKeIbvQ+/uC9Ivo59HQ/DQXa\nZVvNW2aiJFqJXe/oT7mTWdTKnWL1k5EvNL47St0foSwcjgdDQMuuqAcWoo70\nKuVI\r\n=m2di\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDroGYrJRC0Bu9T/elldMsQDAHpRbK1ob4iZ95h4d/mhwIgTb4KgO1arVmen7fx3N+QVRmc8PcxY9UkHtcnfMX46BM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611146603-34453e00.0_1611146730559_0.4168152927592661"},"_hasShrinkwrap":false},"2.40.2-next-1611146947-fdf3916b.0":{"name":"@xdn/core","version":"2.40.2-next-1611146947-fdf3916b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611146947-fdf3916b.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-F0eko82R50cGAEDX1klT/EPJZzT+CH7lq4uXWeB8kiu0gNJ/MaxwV1CqP1GIkxWp8ARVIGxwgjJxF7jda7Z+2Q==","shasum":"2cedd31ea560446654d9e909a63f128f06c735cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611146947-fdf3916b.0.tgz","fileCount":174,"unpackedSize":665001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCCdCCRA9TVsSAnZWagAAFM4QAIyD3UAMY/v3nAw+7TNi\nAL1hdYspjeTxyN+lkj1zKbTgOwEkBGjHw4fh4AmWuWRMezsLj/O5jkFd/jgI\nTcNtF65OKOVIzP7NXxtgaBAKFSn51FGbbS7znONhmndYIQI+8xNZq7oglyQj\n4j95KQVsY9ZSbAPHSVJRBcy69OxgkWpwGbaBzBA9gRG7z5H2GMXS1oQR1Hjb\nQJKtSIF3cBXP/TktFu42aI4l5s2zu35BIxOg3Egz510iq7S69sZq6Nf2+F3u\naId4QxG4eJG2+mSb8l6zmFsvO/68kRsdPiRMP3n7jPfVHitV+c6/g6h1BMpQ\na+4ifrJ/u8+R8WTnmdmZNR1JjoRrrsZfNg9JTtz6z/u5cFQTJHtWHQGeZhWV\nsAxizjjQyHMmVjsIKIC+hTZGeDpDQNASGl5k2jOrWuKPtiPWYVhdXhO8KN3g\nDkhNhx/v6VjixnGPE3mQefRpMrm8wj3g26gnE/qkK/iaf5ZW9DNJFCT4g3Hd\nByp3JeThrCefRX1Kv7+bhqb6UyTn9Z4i5sy0BOc3dnEntQFU798E0BCearmm\nhHSXnOkW/tcR2qKbUyqN9N3kreV7Y3Zxi1EcLwfv7nWU5uOQmINrwuekbVKi\nD5Ruj1JGCHTYm37rUIlfrOol5gkREguDm7gNEQJdSw0aoMQoyOE+L1jivD+T\nDjlx\r\n=uWWB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDERo88KG8EXqaXiHgqpldHbaFPkU4T9OQhmgtU3jEmrQIhAJJ58iiyoY6hnMfwmc+bVFS0p+99rgvjUXonVl6YjN6I"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611146947-fdf3916b.0_1611147074458_0.6845228423630472"},"_hasShrinkwrap":false},"2.40.1-next-1611147700-f09db761.0":{"name":"@xdn/core","version":"2.40.1-next-1611147700-f09db761.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1611147700-f09db761.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-1G8GpVqN8y495iGA0N8Xn2K5gJ6Ui4V7JNSQ38cVqhsZD7FcsrfErK/PHiGrSi2DENSsgcPXJMlxPrZdI3up2g==","shasum":"5905c7d79f41da8c1782dd54a8894f90f82d84ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1611147700-f09db761.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCCokCRA9TVsSAnZWagAAX+QP/AsB8ycjlP8yMHlhYMHL\nKFMxUFYI/UjkqV/toxV3sQQG1TK7MCSvASxP0GvuE/pSA2WIB66SjYTkUdnz\nGBS7fsGfliENriZihdp7DRH/PlKFXpH3c91D0injoO6Sd9wYUbFORIPOGU0Z\nXR0XZYkdEOs0R7jd6xVjeK2H/5pieUIMXsak+10Uy1SN6NJx1Gx4OqPMstoA\nFVPXO43PUWHlEuVFSCBOtjj0EV5aKTN1EGwAO3CrmyYNqqLOqBTm06OkcKHF\nRydV68pnOJBLfWjCWL1oEfympzaVCfQhDf+2EsmSQPP2f2URxb6IhR4CuGVL\nn8oo6HuKv6Q6jiRmrVCsn5/55ts3a7rIdGBSqoB8eQmNe3dUn9lpjqnhHJqd\nTG6KWCJDgUBmVsH80uVXcOD43n5vjSSr3g6bUkGRwQxlWDQQQmFWWtuX4GF+\nHKlgEkExoH+YS+GdyKDGgI70GpK7BhZvSrGTo2xhcImlzy1NBvrvEZpqVDGX\nm7Qub+knUAzpa9dyWPfNkrB3W6ExqnHcnwK0kMYKW+1YCApNf4FgWhwCTsAM\nZwAJsu8koQwNKWKoWd8o8Okm5X7IPySnRAk8IHMfco7+CkL2QGJJbrXL+nbd\nEwWHpAQBw9fY+xBMIRcjFOQ80Nb725Vkgu9rvl3HfB/37v+Z8ziyQ6lieQfo\noG1A\r\n=7ydo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvfueiy/YtTBDKh7ExVjb9WL0P5aZDTJBs4zAIndCDUQIgXfeBr7R5Ui6M+FkwwmFwMuaCYPApEefYK4AO5N9kcwk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1611147700-f09db761.0_1611147811220_0.1433696127532076"},"_hasShrinkwrap":false},"2.40.1-next-1611148807-f09db761.0":{"name":"@xdn/core","version":"2.40.1-next-1611148807-f09db761.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.1-next-1611148807-f09db761.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-NU4I4YjwhDWzq1gTV1blMxO3+I6BPecQXzTSpJ3Rqo7rgRfop1+JSIEvFJYcOoqOAZVwerpF1Bkl2eUuaUf2iw==","shasum":"1aea7e66e7e77e72a733eeb584a9c0f1fff75e74","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.1-next-1611148807-f09db761.0.tgz","fileCount":174,"unpackedSize":663800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCC59CRA9TVsSAnZWagAAySIP+wQ7XoOiKZl52KCVciWH\nUC9XLVbVcRxALHJkHstZTZCfNXbogJchpb4bHvHcdzjxKljIfFSSH7q2K2PS\nqakeFndCgpIW/jJlJRBq6kVuX3tfVK8RQhT3tTZvkxoJ1fitjwmETGv5q1au\nrcoBv6DC4fcDVBdlfAFu6bL0ttWQcyKAzeK1qFxgfZa/ElGt98ix05YJuqBp\nNtJjyfL4EtJjyYAgltoD6mhGQPWLM8vCRiOisNqEEN2UQhfnaZ7Ue85eb/vL\nq1SIXUN1j4mxkyOjpWZtBlDgnVdNS/itJCMaXXVNI/hf7mM5QdNJLs48ta0G\nZUg1rTm6tL1K2gJIYPQm20yDulhLNY49k19xRN1Z63/9zHI7CHICtKvQbtHK\nKhodotIkDxk8T7eAZh/O+tb5miLdkKf/rj6eRcCNlwCfSs0q0M1gNh8hEMQg\nGsP/jiXzJpcN2KkIwQlLQ4DxCgTYIDDj2EzIH68LlaXo5XwG/sOOY7rDq5ir\nx9Rd/WPvIdNmJ4qn6Kvp8zuuR8wpmAGGX18ro+VTn5Af7lbUOqi6IWyr3uWb\nqH+BlUfYllbbloIr7Cl+gJII5I9kfuiS4aT3E4qGJrUE1juxRrYKE2XZ7MEI\nqTG+uUbGruP2HPF9MYREes8k9cuai2AFeE3Nynf5jwDl9uRDGq5srE4BpsG9\ngUHk\r\n=NWg2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCH2vCsC0pn99hjuYiMpT5YKKl3l8bN5PKjeEr8DoqmjYCIGZgO121PoWdX9r4M4AMqBKkQYuk0sOnDvHE8l6NzH4X"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.1-next-1611148807-f09db761.0_1611148924617_0.4090239657493231"},"_hasShrinkwrap":false},"2.40.2-next-1611149840-20639dac.0":{"name":"@xdn/core","version":"2.40.2-next-1611149840-20639dac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611149840-20639dac.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-W4dfJbUjjRbJWhVq46o7jGhU+GsI4VptYHaR5pfg5SmI2EjTxk0mv6Kd3yJs4UmD1QxiyAdG7EKGFfp0PKRbmg==","shasum":"1fe6a9cbb90d32fc4eefca065a42d0642650e66d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611149840-20639dac.0.tgz","fileCount":174,"unpackedSize":664498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCDKHCRA9TVsSAnZWagAAdJwQAJfBH7MgNYIgmjgUB5Dk\nEspDsa8CJUJyLi6jQGQCMfVWObZ7DCDgEYr7jdEn0VFgGeROCrEQ/J2Dapbb\nqP/Xb4jtSW1q13uuLsrPmKBJbbmMHzxPUkjt/IURw2R/cv7IeG0EubYxnMuA\nuQ0QrQl7oE9BZIiiKaTyi8ZOjvXKqVNUx+3xj+rD8P2Llx7nlOw9cia4Uoch\nvOUdx6uDDSnCScYcFZS0V4usxSlaZ9WIjs8tHEvGER1wkd5MStJ2D6Fdi/FE\nTxeb7txQY9CsP39ZmaX4IJMd37LRIYB3fgkTUqYP4UYNCNCqlPMJP+SGscRe\n2kqXrJTePb2TmfTgel6cwHAZJJO9a00TRCaBry6dnaARuGEJDxeKkKKduhpJ\nZoHn4vsSByBzv67YjYH/fQqKUDWq96Pex9whvpFSZ4VfWSkQt9/IfRSnRNJU\njO1C7xEXtAZ7KOnjxAJgOQH4OtDkCu7KbiTcDk4eO/5du+dJ4hKlQf4NtTsO\nJeOsB5dXgSayRIf6Km5z+xEaAfKtMwz8IJKngSgl8V0GTntHqjHcv052btNA\n3va9rBU0ZYegoWYhJPScfIT5ONQqG7dbzX3hM4SWpWpwSS7jTjctAQWyvQAp\nLPie2J97blpop2mr2g74KM11WnZWhFub/ulLwY4/l3MeRTlR6ThLQY61kReG\nXeHH\r\n=pTuh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFUPPWn2n40JUtFc+VmCJzsR1fBzzPwvoN7gZBwRiIQcAiBhMXS/WIx3eDX44WZNf8GOXiyVlPuvyHyuxPpa/mYhCg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611149840-20639dac.0_1611149958292_0.4947113734069455"},"_hasShrinkwrap":false},"2.40.2-next-1611150078-7e313222.0":{"name":"@xdn/core","version":"2.40.2-next-1611150078-7e313222.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611150078-7e313222.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-1yAUtgvbDxGpUlKrJJOTBj8fTvIPz72sM1Edl/kglwngINtyEl7mdfUHHXhsqxLCqi9oyChGiViW5jMoXUt0Nw==","shasum":"5c9cbc067b035501808bcf88aa0783130177ad21","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611150078-7e313222.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCDOACRA9TVsSAnZWagAA/sYP/i0UmUXcaHWQu+dPi74B\n7Y7nxwoh04PmHyZv3dwaXO5ff64Iihh8meOKhn/aqOPhYR+Az6Mb2zBZeU/k\nCsdQ0BDNaaxl5FOSZyfiNyQb9cAGs9cm44MREiLLhrYjE6hR91ZcR90k3Mmx\nUzqf3UyymuEJ6EuBCMKFfJqXfGIJQ5WV7qjRE8rd10AVA3bsmOsH9zMxom1G\nJKwgehAt75BL92Uq5aDBEOHNiAsTss3DQ6qQFZfVCI/78jsYjMqSACXpxsgc\n+Xo8Mqmh6VrL7MDo08RcowGY2auHsvUz0acATYqrJdtsrvQgb/MSvYQrB4x1\nLQL8s9WHkNxSAFOVFDZh86r6vbICQxJcVs1EclKl6O2G2DuNmpuRblgWwxZ6\nPs5aJiv4jn0h4LO0dkL4UD5iaDtZs7zqaWhHpYRu1hoDUUds6b69AWeY1GvG\nDbHm91QlgelPj+H+D5eh2CABsWHCGmasNBIg0BAJrgT9OXyPqmqQrQyazeUz\nJxJcApMd/UMnXspb11jDuK2bDs5Jf66vJzz3hOpvZBAmaYjMGVMdLM3POAT7\nC9jPMEw78rXgnCxFaJdFeBAzL98awzKIuL/iFfHna5VA6d7EVbjPWcIX6MfF\njA1+CVeHeI7Znv5//tqCqznSCBF9Sm/+TyFnJxboO9BGJcn/DL2xwXoGk1gi\nFCom\r\n=F2lc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFifW96ofWsv3nMUZ8jpJWpfvVS9CGHdu3A+CpUIunnSAiBtNa6S5rfLa/jj9FFeQeBp6NTq/HV67H32jb7ygLO+aQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611150078-7e313222.0_1611150207689_0.07030670250409599"},"_hasShrinkwrap":false},"2.40.2-next-1611152142-20639dac.0":{"name":"@xdn/core","version":"2.40.2-next-1611152142-20639dac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611152142-20639dac.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-h1jpWBTBrKgG1s5z/HiQcA8J1ENIqyJXQKmJyDSoAVWk4+igQP9gfZ2NcySPMOf1WaCSjP49ldDlt8hPsV+pFw==","shasum":"08542375f74d45ccaba4d8ca7ade3a93b33535a2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611152142-20639dac.0.tgz","fileCount":174,"unpackedSize":664498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCDuZCRA9TVsSAnZWagAAutMP/00guB+w+R+9RQa4Cw8W\nRgBWSQukKmltMbN8Yv4MLpMJvpy/pf5d33iBzCJgJUpZK5milTH1Fi+oNja1\nz2SdlI8pX6BRWPFwHn6ZBbyozKD9wmve6rEQod5ZGKY9ljbt1kGntOMvrMp3\nH91I30bj8JUUYRdQm5WDtRxvFjAILbIGVRZZju+4n1gkhrO40gcOFmFLWvGx\nCPY9f7AvHerAQeCJNL5c0ZyTUXq7Rt3YPlUlJVBinSmGffXHExiwIwGkG26s\nEtVv9DXn9+qc8a6KrKgTPFO8QAhFmYqJR5Bz9WWCQse/25zeHzoC59mRdOLK\nXrCM7EcJ/aJkLK4JzvMxDcupq3+BNlmgMClYt65ucWA84rK82jE1GcS8h1tg\nRBnCpydoJdgUFDZwKJsfKn41qgMpTeO++mONdE1Gcfman7UOKEcEKm9rKHQW\n3+/+T47QgdPXcfTiOozCXtWWLtEHKLThctDQQnMXL4rEHkGV8Jal4UbLiu1M\nRL3/EwZUKN2NsafpzrKsjUIIjFeM8YovQ/OssR+tQR3rpLfcNjyoieXil8xq\nHxhj6UF+/DFL6zJmMw/tDaKRnY0jP0SWeiG+izGuZP0iWUpk5Lac114KjB5Z\nSdqoO5r2q75Np3z3n93yP8oYJrewdQ233jQwiHdWoG9ciQfkue9P97njQpzO\nQf/z\r\n=VzTO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEqBVwLxAny0w7/9CAiPL8zHJnnEr+QVCJACtkWibnY6AiEA6bwEU6gEwSEUMNExu9wdaJGlE7tpDXqrVjJe4g2FFYs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611152142-20639dac.0_1611152280719_0.8156497391043231"},"_hasShrinkwrap":false},"2.40.2-next-1611154267-7a34a45c.0":{"name":"@xdn/core","version":"2.40.2-next-1611154267-7a34a45c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611154267-7a34a45c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-nolg5e+uoDoPH+EdEEZQR3cJ8kU9LsaEppvmbMOTLaBUgmcGaQg+vLqZONw+7CKfFm3NZfi5G4eP8tDmXtihHw==","shasum":"83fc3bbeba365706b0f16c6e400d4868616d3944","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611154267-7a34a45c.0.tgz","fileCount":174,"unpackedSize":664498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCEPMCRA9TVsSAnZWagAA+30QAJCi2i5g/QB9dFMj+6FA\n4Yr87ZbAe3JlC4Jr8NvD4hR1bN6AGsAviOcZ2oOgKsQfxLq1lzfoqTAILlBf\nilwY0veQfEMS9w2X6lfQIM36/JWaDF8OVrjmZG1Up8yyeJKU5slBhZJZlWUZ\nLfbRKADqRykSQajyVItso9YkDsUODdrIsUW4y9Dbho0Gu1Tw0fcnBc5m2ABJ\nwp40+3oWaf46nrrm7xPv1PHyuiX8IAKL16Nr3GmW1loQ8I0tYeEJZEesAQBD\ne0LJyHio8Dg2J9Iod/SUbf3SZKzGs7QHg6sr374KfT9paBBO/PoXyOE8VObr\nMo7B/pmR4zZFoRv6BrJJ8gY+Qbk0CfXsMTpd8dEf9U+TLXvwWzS9AuBEK4wL\nTa6N2W4QJnlQbweODHz53JG1gwZhAq2ylKSIkcmox9PXpnjhB4Mapm/mkQr9\no2Y+WPkbvSzFwCpjN6sJ1f3PhvGjgDRAO56R9qv7rEVcUhxukgPGUsURj80j\nn3pVF61gK83nanX6GGRKv4KyDALuGiORETdUQcnfc5+FwlkmKieAKE8LO3g4\nXguxSME0WkYDby5NM7Fu6s2uWquJSzd/CgYcZgJ+vdz0C3DtDzMG/ccGsA1d\nLTrbuUZe4PvJn1stQS6S5/J6SLKWP4LqvsJi/y7fvTw/no8vyffB2KjSOXY2\ndu+h\r\n=wJq3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC/19ZxG15zDrZDReG7XJeM72eJ7I9klkY08pWKNbP0JAiAIQYTUe11mRwsOr+JzOdAL0ctlC0ivlXymivEitu54Rw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611154267-7a34a45c.0_1611154380135_0.6880516010704203"},"_hasShrinkwrap":false},"2.40.2-next-1611154703-20639dac.0":{"name":"@xdn/core","version":"2.40.2-next-1611154703-20639dac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611154703-20639dac.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-OV18W5uV0ANX4rQm+DLTPgbXGXZm52jb3U7+hUGislaB4ndjF/c2PdjERmG0k92IkP9MK88vrADiVBoJ+pk4mA==","shasum":"e7e9e0822d50823dedf1207386d9c2b6d6a5d2e8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611154703-20639dac.0.tgz","fileCount":174,"unpackedSize":664498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCEWBCRA9TVsSAnZWagAAmUUP/jcIkW9DnzfNpbkDc7O8\n3sHDF0Bjy5eXBPVBlIP5tKHJgqd/L31LEvAx/wiGu24u5erGOAuEafdJO8Rd\njjXx8rA/6lO0ZgddZsbpuDp1Z7Y4jyNMM4i9se1rNETYAQ5ErbcMK5oMYBIU\nhBLqU1NLdxVaQWB8JYS3GtZRsXI07tBSaulklrhweldPL1dPjEEepNhdnPDP\noH9W2+koi/X/G+RVEAj32qX45fmBzSuxXXdc2IJIYTv1EffBEEjJOwvNZgdc\ngn6AP0Y1o1rS41VVrYqki1sVAC/fAbrIuvgDyL4BTU4Y9MrVU7Yqh11T7jUJ\nZz30uKS5tgDj6wRQ2blxJc2UvDAqnq0zoNN7BLlGr/ep4le2/jAufPqtXB/v\nA6xXyBGBZCNq8PhDsp+DSZQ2PlJYiEHBbKf+w/z0KjB4HP0d15fJPDvDZPQS\nlVCvk5wUq/F+g9eoOw5348Dc4ctiE5vpUcOnhMhywp/unpPIjba7ILhi1UCv\nv+3LSO9xl/NSVej5jAtKOYR+qjhFcK3gKEtxcnxUtuEdItoj1prRTiLbo88B\nkf+f7RaLEAbh5bJf6ojYMaluk/IGNrt0YgdhG2fSlmGSOpJJOq8WxOgdbdm1\nQGG/QgtcKlppG4zkdLOMIqupyou5t1W49/P5lznEQ+STFAHYFY4or1Vtg8wT\nwJiK\r\n=59Ib\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEKr3qYQMJv9B8giFM8V+mew3unoyuXuqBnRfDdD7nMQIgIXScriuv4TStUUrBG4AhW7ykvq+lse5KDNBl7tEWIfQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611154703-20639dac.0_1611154816687_0.5340584506970185"},"_hasShrinkwrap":false},"2.40.2-next-1611158294-c45d3039.0":{"name":"@xdn/core","version":"2.40.2-next-1611158294-c45d3039.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611158294-c45d3039.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-QOIW7Ue29Dy06fw+JM8lnkxXTg51YyVBCGCGEnngF9uLcxf8Q5cOo/NKuyWRtdGxCYsvpTN4HVLTrk3ODJXfaQ==","shasum":"27796473efa6d8da289c9139376ba3f15f366af6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611158294-c45d3039.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCFOICRA9TVsSAnZWagAA/GEQAJHR9RzRx0Mg6//gYl4y\nKgaSKk1ujqMkiWNqOU6MeYdMMf38A2Pp3UGEb866IBCyPpQ3TS7Kt99SGrfd\nwEt0KrVgiu2zS8Zp1Ui7C7lnRiYI/1OtxOHW6CktjVqdMw8XUwHi7cDuQ319\nxdOR4Ru4L+O1n+fVvwx36KEJw4ec96rI1dlg2/JXiSUdVRduA8smpymt4Rmb\n2ZwmQEidkg5vJxc0YcPXPY6Zmw0nmdla7kDRDjIzlQSTEokeFUvKY8anhELb\nxkoZ34I7WAjBjmLVbL6LZYn5nICrH5sSHz4UPTtd0nZ1JudF94YT02ztAeHQ\n3rZTpdZIFtP6lxh1hkQFKPsO16Hys/007SGBOjRRzBpjUtOpAq1tD26kNO01\n+sCVDXlpOhx2ifdsJEYPElDNNsSx9AJH3nfs/+VEjD5ISyZaw1NlLNUUKahr\nQ/wXDPUh5wHC8ZukvCv2/Nj9ixupmRp1V5WfCeDVX5tysaHi94cwckGFZDUv\neFLnuZgIionUA+dylSOqr163gnHvW1XPrV6oemJAhhl25A6MXUH9E0O3v2Kf\ntUGt8Sn//7KM/+1EKFSVPFzvNdTXfbbWh41nRMBtQXe37asbN/efx4uhrHJ6\nOS6brH8xqTdzxlze6Yv0ZFZrvf2wkjJxK9nliU1Pw/deh2Bb+MdFr5xlKyiF\nTkmj\r\n=xzxd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOuHHUtBpMV2X3mO2dpZrFGzj+oAG19+TMwGmdJXZPoAIgLbOSozPmh/YPYoNZN/h6cvhcZHcO8NCmHIYMmYyYkwk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611158294-c45d3039.0_1611158407710_0.38598775705016775"},"_hasShrinkwrap":false},"2.40.2-next-1611159195-f52a71ce.0":{"name":"@xdn/core","version":"2.40.2-next-1611159195-f52a71ce.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611159195-f52a71ce.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-pSApXaYktwb7HYE5Hf0Q0NtlGXGpNS2rSs0ykAnRUyiO9dNSVzDv9CgyQEflqUr8dn/k15+IMQS9PurC1MdOsQ==","shasum":"52d623ca8cf67e791e272a31db4559ce22bfc7be","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611159195-f52a71ce.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCFcfCRA9TVsSAnZWagAA0OUQAJRdiOeUvEoqA5TigW9E\n3YOixtiqHX9Y6XLzGzdgTCUFF96PpBrGlRt0LBeTYDIACR6hBJhxxmCunECe\ng1Te2eWRDKN6MOhefJ8gpGFeCfB7ganC9CoNtY+SPngXWwkOdEXX7AS9pgcF\ny3an58kFVSogwHT2KY/M0lCPtaeRSbYPLBS+/FQpgB7j5mPsZ1XYX1b7PhbT\nDukSlT9ZiKJQ9A0qOeSDBxpTQJxzPbx4T/SfF/gFHtpUgEcTPp8xNPQytA1T\n33+pTO43/MmJtPhnaWmXs6nQb008ZXqc6oOnJwPleDGVZZ1tQKBqlTQmA7zR\ngLyHJCmQ+sDAC4icHAg9ODXwwjVWGDAVx5Rrj0PYlhW9xdT2EIqeK9Qc/s/i\n2oAmksq8Sw2DjEZABV0GD4qDdIO53mR5B184nDRLnbBiLRVSueeT90BQwFKU\nx34cgk1cpfqFkS3mAUf8NYLSupdfmvLf/7tGOKgwg4PFvzMxYz3Wt/5rgqwO\n+zac4MFB++nvUnCPjjjKjhShKf1zTu5mb0dxZoEZ6VtiYaDe7kaWFLXVkEqP\n5U5s9gPlDBtkTKhNDWofBvX7liraJOugSOOQAS+mdsvCO/eo2wXED02R1xPF\ninQ/51oan79DiKE4kT35SK+QPsjSA2DZtck5QOgYpOpPXPqfWpwk7hbUTgTM\niU+2\r\n=wOOk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE5LzPkjpcIzBK3+DBgUlEiDfFiW+UAYBX1cgXC6B9HiAiEA58r2Ec/4IlwvgCs5ymshhuIPpudWm/C4aHXKo+h3AHw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611159195-f52a71ce.0_1611159327081_0.9549323832736316"},"_hasShrinkwrap":false},"2.40.2-next-1611162369-d4c92ee4.0":{"name":"@xdn/core","version":"2.40.2-next-1611162369-d4c92ee4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611162369-d4c92ee4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-m6qa85Lnk0nlIK6KgZ4sDC/pV2P/QYwFsh52Unhv5HiO6z7cJ4wEQ/MzK5vrfpdHqja7iGDzEtHAF4owh6Nuow==","shasum":"5b2a64d8f641a461c661c260518a597db40d09a1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611162369-d4c92ee4.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCGNxCRA9TVsSAnZWagAAKRIP/3RSiCbpWXpkbTC3H6qS\nG1H/01GIi6MoYDyAqBbcz+9Iqtxx5eOkbWtlbiTvXUgoie1YaTueP9+MT/rb\nG5T6k4tFFN5NJ2le0jfZ+ZtDE9BS5U8QgdZE85D/Z8QlhvltdMqiPGd0hu9+\np7Wu7/nPsmJim3WzbzJkdzIOA9c9yPwI4XvH2/A+aJhm74P3Y8yGJ6A9uncc\nOv+92Zs13cTurXBV8bPG6la11Y5VeWZegcbNbz08OAC38ThbsAPr8jJM5cmH\ndgLlyGWY/Pi45SHbQfHkiAkmzJ3lBaJzE/sSV/dDnbrNAocq15nTb2k522g+\nzzrnhQ0VtkfGnNfPYVoYWwUiWCKIRaDZZhz8hvFvDJPotHHxIJphCMBST5+0\nMsu/McB2GDwFTbVfxrl9Oixi1RlDccOt9lxj3Vrg+ld+iuEJyFuPRBw44cO3\nRFtT91Xs2F9N4THUXl+l5IRXakISTq6hmZhpbq0IsmfaEQeSerHTBuU24qrR\nG8ULimxzxoiFbw/15Qxa5IudxuEiZC64DRVEpJNBKFPmxeVFB/z8L7vpI2VW\nRDBmdI3w49EkGwmQiU5WAd52HDgbe/XKzd8OyiXgIGD553EhBTYEG5oP8LQm\ncFqu9DGz4rgzNW81xMbQNx737wcfWpvhZZm/eBBtDV+rlvcTIxYX/yizirGW\nlfG5\r\n=F3hz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBWaomZCBkSDKuOKhW1LtNgcgWjXiyjv/fV+eRHZpKkqAiBEQuOYDGznXX+6t2C683u2I8v/O/fN+MaX2FsnGl9qKA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611162369-d4c92ee4.0_1611162480727_0.25845293632744615"},"_hasShrinkwrap":false},"2.40.2-next-1611174352-d4c92ee4.0":{"name":"@xdn/core","version":"2.40.2-next-1611174352-d4c92ee4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611174352-d4c92ee4.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-wXwZ0gFWprmt9XDEirnG1X3p6e/pUyC0XiEH2v78qEMru8qW4ALFg8t53zcHkL9oRjvwtXro79c7Xkb6Bkzi8g==","shasum":"438f2cf55fd9c7ed41b60e542fd5c8ccca181381","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611174352-d4c92ee4.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCJJPCRA9TVsSAnZWagAAfskP/3WmVuNSyLkSwVrD7qA0\noGsHw19nfI4IPwlajNpMQuSuGOjq6/J7AhHQGvB/YjDHfnAwdmY2aBQgEOED\nbUIsH4AtdI233N9MbWjG7ZA35doofAvJ5sKgdYInhPUPZvJh4z7snJgcU9uG\nWMa4DqYAoAyLWX+0uVGjgFq+KKF2TucJ1/AfyueNCP7WpNUHWxXBoEswV6Ch\nqtB4msZqsGMvaJ3GG0kH4wr1XXQ+eZ6p6PVuCn2HS+BgNxfeCLwjBEger8Jb\nKYqYZfoe9suY+nhaOuHMsBgbGmfzsyfFZy/i+RGImKkHl5lK5iOynS+reF5f\nmUinVKnI28TUTlvTBA1nF/J1fJ9rH6RJI+8DJksRZ+r6gow1JcPNH4vwJ9OK\nTrQUoHOdlLALTAr6Zx/bkI8rpsu7FBkl3BENIOSELqR2VY9e/R3fBtiv/ft1\nNGYPccHWmgVLSg3XFm7w4SpfiWWmvPz1RghBBFpSTeRwNUDNPpcLLaagr8nC\nGXGR0iUWdFAF7nuVSRQO/qpfMWMTMClmf9GRuM+2Jccs1opIE5/r6grOXNfX\n1iHHa/7juQ8TK0YqIDO6Zuv1RjhxNEoOERL8CqLVBMBI5bXXbT6UXF4sXIxl\n1Ur7seKcyT/m/ZbGpzE8D5Fi2eeGq8dkI6JeVHBKSQXnQfCE9/XyRiH60xNG\nq3R/\r\n=FE6U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCB4gQR/6lAIUv1G4n3DRiQW+bLvp6lqyYftBtAdOnuAIhAOYVI6K21JmpORb0XB9c/JsE+7rxz1dJs/KVmlieOteB"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611174352-d4c92ee4.0_1611174478930_0.13657037391907445"},"_hasShrinkwrap":false},"2.40.2-next-1611175950-5e654544.0":{"name":"@xdn/core","version":"2.40.2-next-1611175950-5e654544.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611175950-5e654544.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XIGs7T66HDHd+8kqbC4xzneUI1NRAZnQHfddE0JCSwXUcItUZiUlJHByy8eq6+P2xKCGA6UMKw3jXDC8glTy0w==","shasum":"400025352b8d964fc672829efea803adc68f5257","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611175950-5e654544.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCJiQCRA9TVsSAnZWagAAb7wP/iIwREJfrEEQvpEe8wyp\nSjLhaqjD7fsGtGK1R9Ih6Eu0DN6GS2gsV2M+Zub3m8XbAm46xnCS5XpZIKNZ\nwHjYV3E1SDo4wcMHGX7QJPJC3tBYBM53+dyUa0DGhw9dZNLJ6bTrgrk+9+BQ\nKS9OatUxPctpIhKHaPhbhtZuBPIfBV9+RDmcDdkzYzQtY3/00MROjV8s5eOo\nKJYUuAhUSY3FNWxNzcoDcC20leBfPfN7xlRXfg4+ilvK8/DKc5rJY1/mJNg+\n6TQ4/eUGvqsTKjxQ5UNzomPEoPWscrnGrieNkW0x3UDQD5xJ1j9UQEb3uFOI\nZUa2zqdXo63oCCWnjCcBlxZwQVJOvbERz6gCAyOrMw/1kLn6UfvH2D7A9SnD\nVaAqkpl7l82WC1hZYGTTr3lnJuNzgSiiN2hS4lgVBHL/l3YWDt01cBgcdXbi\nDT6Nq9UB1IGwu5GPkvPk8gndonD5bAFjvryl3wQEmshmRdz5cUeMImUQeWF7\nHPCPlXRU685s0jmgi9GBe1CMXtgA9KbvwuYzRNgRuferzOgQWVwYJJAfTJDD\nc3cWw02VdiPicQMEcsXQHZzkB9fOa6MliKFNVMUpYSP6Dswd8X8PgF49ZUHc\n9qxkZOQZl2etvSVUO2FJcUuw4nYHFfpGCKlpxiOie57+LJeTF4VRwytfTB3v\nct8F\r\n=K3Me\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHy+Ul24jdDARYkiiXB5s1lF1OI2nzNasLJ2mRphh9BVAiBgAI1/DqFuz24aUzFvh8uzk29GfY4chDS4MJYjGsGaig=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611175950-5e654544.0_1611176080297_0.0922537347879202"},"_hasShrinkwrap":false},"2.40.2-next-1611177481-fa11de7c.0":{"name":"@xdn/core","version":"2.40.2-next-1611177481-fa11de7c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611177481-fa11de7c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3+m3NfiVggWrVWa1qUyLSXJM7gGwlMilqYwc6Ql4YTG4j3XwA1c387ROU7vDEl/dyNeNVXhKJaHpbGaHq9Sv4g==","shasum":"6bf8cced22eea247531a2521e77041b2a86ca4ce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611177481-fa11de7c.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCJ6OCRA9TVsSAnZWagAAygcP/AwdhtD2h7Z4jC/+9XoR\ndGKUD6pPpy1ikyq3gkZeLdleN7xbwA0oPTZ1vqqR/j2/455jYD2z6FJOvbcB\ntd3VaMyN4lf98/xaXRb8YoZD5sL8XbI1fWN3THwzV++dF3ps0/6Hx7DnnfP0\nvC3Pgy8TY6C9TKRwnrZ8dWnBIMW6gUbCnM48Oc3d1wrNyIu4XfEuH4Xyd3+B\n4N4x3rMY9KvEvJ8aEWSTX1ZBggakLojPBqJPdI022v7VjoIuY23j449MuflU\nCFBERWDcYLoXIj7MElVp9tCWkVkTwHZ4fhSmcLiHay+wjxxPvNsQNZy0DJKW\nUlsgrRbfCrJ1nPVHH/5ZTENRRWYenF53E2yppem6AhrVDs+jG4IYB4E9GDGh\ndpC45f9ZXYDzeKXY6wCQJ8iI0Yv2xkeDgID0d7ssA+aeDznrKlSNbnD6SBU2\nHk/4pGSvPgCeHcccCi5QpMPvgWVfTCd8ggxKSjC4aTWFwRwFb6nTk/aBvFR7\nDbC8BVtO++IPMn/R5/A2aA/8b20R1A6G3cCKdDcBh5xIacyNegkuC672YnPK\nci+VAGTp2u0NgqmalFDeLrz3cW8YM+APbgxhBjYMXkJ78e8B5F7QlPJ0A5mI\n0fRied12rkamGIC+AO4C2CizHQ5NkC7fgYajRP7s/xmRZU12WOGGc9aOORzh\nCs9x\r\n=uiZM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHDpBN3lyMEAp7qNSU7oofbjT8enbXNjDkUZpUu4ZtRMAiBweTYaEiIa0+Lej1zO4j7q+3g50qHInI6/roQ2zIYvQQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611177481-fa11de7c.0_1611177613459_0.525685258671085"},"_hasShrinkwrap":false},"2.40.2-next-1611227928-fa11de7c.0":{"name":"@xdn/core","version":"2.40.2-next-1611227928-fa11de7c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611227928-fa11de7c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ZjaWOpqQpPXuUhHfzUvfzMpmrfc+D4bwUCC+Nhi49r7LJYxCt9pV3Rzui/ThyNiueGpkcZ4V6Ki+HK4b8NGg2A==","shasum":"55c92de5e66ce0ee14abf0f3b7c82f9f2c9cf1d8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611227928-fa11de7c.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCWOhCRA9TVsSAnZWagAAWsgQAJ0bpm2TRwfhIfaLnnsh\nf6YBGmmtw/nD1xVyIjfJZDMFnsqFqRJu5X8aGZRsL1bC6LSYmH0lKJWIFusu\nCJvOuWswuPlIcI1EbhRrmwORUqOIej15RGeL0bnP5aC2xUt9qZ1HF9XM/8mz\nReirTooSz5ZNzMYOYrYwPMs2RwxYPQhtEMISxr2tAtiyAe8gElVLjsmqD4o+\nsGPuHDhlKnCjGZ7pmU5WH/NLjXSOg5F/p8lff6dYMF7+Z6W9yPLiIWcNv4/C\ndeWef8rGsIaOU6cPFY0Eitjv8r7ZG7bWdyJPhZwNtirW56U3dUiL0j95VRfF\n8FZva8zAbKD1qtFh8Bm9ZpUY++UMsDj7PUEUUkigwn429JrGdFKK+OT7ZU7k\ncvZSUuiFwXzzGGXQt67bUqrMIoR/dwavd03KBXOuww7Q/Rwt0LDCE8LGNmrx\nTMP4rSkCgHwNEBl8LNsGmFGMgP1TQiHpqDbChaDXh6K2XPhqM2hV8DURmpFK\nvlVdFyl0sYBTcXBVj8M1SRJLdC1M5zgnMDHiBZFFtzd/KE//ccvkSElUXjmU\n/nE15K+J+lspr+YZdBQ6/e0tviI+tZAHXH9hGbif5BEfb5K3p1UQllc4EXd7\ngfe4UucD8ukjC5fpJ/EaHwBQ3e7q/PNfXCfgeEZXGt7asfa5hi/rQ6/TeRuv\n/hyS\r\n=3PNP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3rcZd+Jrvd1MtvBRuz6/zzPa5xS77i+ANaFn21QdBxAIgVeYwBRmML+ZpdNnWBGq0sw5wRgr7ZtWr33rZqwmcHhs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611227928-fa11de7c.0_1611228064336_0.7422665917328866"},"_hasShrinkwrap":false},"2.40.2-next-1611231566-68356b1b.0":{"name":"@xdn/core","version":"2.40.2-next-1611231566-68356b1b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611231566-68356b1b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-T0T+oQvfI6siGj2Hk5fSTS11mIBL+iSyNP4e7kthaJefF+DNu9oRdIUT+FOBsNDQvj/SgGo0p6ssmnCAKYsFnQ==","shasum":"e4a8024c31ab0b6b20c529f0de0aadeeb2d16bb4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611231566-68356b1b.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCXG9CRA9TVsSAnZWagAA8mAP/2vwZVGpXvKEBRvc4xxg\njNwUHQPK+KDDQlQlODPxHfL1J8ucDEL4bMpBNhZWuoA2yF3ybvHyoubDlpVr\nCPrq1/ZCx8pgrUJ3emmqlmSQcx9C1Uw6McQ4zk5y+++1tXVujayS3UujU6RQ\nY2gvxwo2Nf1jFASwDfOXrxpkg2wG6qRE9iBIJo4DHshLYZpTs5druYA3XMrx\ngnOO2hBs+DWsA8Ru+kJx8Lcs/c6EW5aW9MbmUmmNSpzEgaqcOIwRTrgyoeV2\nYjoxMzaSpxu6lsVVpJD2VwIktdDCEgtJXaBPCm7mVodUWHljl+Cs30ZmMW3d\nE0e+gm8S/Zyn5BLtdFsYQ24LjsZbpIlmQgU0zNPYZAkmtaA6i8PzZLAPy5nF\nNPikWsi+eHAUcFafhGyFajx52lesC5nKAyGlQyDPQQtLK+YkfFn86zWxLPw0\nMLBIhhODAFP5hKmAOeOF62MXbvHJGEFdh6j0Q8YSJtXprPfguflhvnavuiDb\nvNqhZxEp3d/2297Lf2eVcw7Ju44i3cOfaYyTGEflxMxBFnNuFlLrlXKdF+7V\nipf+Iau0nSsFwOoCQDnzxQcGSOYhhfxf/9OO2aQaZTaw5K/vSK/M/82fH1Y4\nJc6+NLy7znK1arDiXV47tfYrkYuTMc+fJnMMfj2FBGin5wBVEvLMeZtGstCt\nZJGm\r\n=46Rj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID1N6qgSr0wnHdQFuqoIhIFcQp//4KQpaEwlC3vj85eUAiBerNIbji0nzCnXo6eGYZhDmdPdI4hd7u2e9U+cXhJ2mw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611231566-68356b1b.0_1611231676596_0.5560102328161156"},"_hasShrinkwrap":false},"2.40.2-next-1611232803-7160b394.0":{"name":"@xdn/core","version":"2.40.2-next-1611232803-7160b394.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611232803-7160b394.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-w5g+Wz5EDCq4E0Lm2DV0QeQbcldH6l9Kh1o4BSMpZzKhNe6VgeCNSDaCk3d+DZ1TNTDZJLsKlQEKzF/J7wGaew==","shasum":"2ecdeaf15746dfaca7a2e2204f58e7492930d054","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611232803-7160b394.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCXaPCRA9TVsSAnZWagAAgzkQAJBnTf/n//oXhX8DkFZz\nXoft/J3rM8vuc1llIw/arC/Iv+OTqWScIfHfnnwAEC6Ex14IIHsucgY70KZt\noOdiuOSJmR/xzWI9Y9Scu+HADjhkNXiV2EgU2MXkoZntA9c2D67cwQ3lGpkb\nwazTgaUgIMpW/ePN3OnFKSVnTCxNee0mhbthE6g4LdBtCU65Q4KhLWkNuF/L\n/Ku8EEGt6P+q+/nJHqKcywOvkeQNyTGgMEgdldExcWP+GeegEchcy0/7GoJ6\nWIyYEEjwdqpekdAGTUFvzFfGT6mW8kgtunleBxGZLlJrMyBEhUM274C6jNee\nL3WUBzM2/JPEk+wcV0qIsP8e11SKJO9CLivxOkhIWdC4XmRdToXTI2P90AoB\nckj0o3Pd5RQktuwFrGgaPxoWqDPtc36kLhOVusBdZzB5nakkVfcoDqMhn2iI\nKVVnvoQsOJUnjNexuK4/c8bp9wbfBuerLmQhdmgUjXt/9uFHK475Tpyx+O+0\nBO4hK5gEgxJbifk83qL4HcGEgCtmVFxLNMSfXvEjXf1q/c3bcv6pucSMoXkN\nswDlBuqIQvij9I3qNfd9bYg5zSkZQxh09CghqQhXIyB9BPH4cdXlufUSoPsv\nC/HyynndX47SbPXrslNTkFK0f0EW9xu3kRomJMUfZ6Le72q1U36gb8b6rl6B\nUzA6\r\n=MjM8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH6JcyH5tGferUdWFNeWlYhsya7LY6NRNVSOZd+t549fAiBlqQY2ZcCCQTvpcVT3KMfCSOD3pdUJh5NeRUvKauKfVQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611232803-7160b394.0_1611232911267_0.03640051400647337"},"_hasShrinkwrap":false},"2.40.2-next-1611240510-9baa9c6c.0":{"name":"@xdn/core","version":"2.40.2-next-1611240510-9baa9c6c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2-next-1611240510-9baa9c6c.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GqeMj+j4OUu39Hy7hDTBtsk4x2dSh4Er8JSfkOdMcTUDwgGUCGR9bhY8e9tvW/zzn7DXoQPAbc9Xwz9mpTqbqw==","shasum":"1e1a21f29f15b0f6bcf930e840e7acc21acd13ac","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2-next-1611240510-9baa9c6c.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCZS2CRA9TVsSAnZWagAAJpEP/2fF1LB/P/WfiBtFNXxx\nRkTQel74HCwDaGVCtgJV5LD8I97VFFP7+4gNahtkImdp7bsj/etHLsbJjIDK\nlUhBu5kZrWaB/fBSaHQEiBWT+VmyMgJjp4er4KGNwdZGeHO/JbwvXUNKB16C\nUxqeQV87Lxw9yzlC0WVh5be9wOgxmHaydInDDA06EQXitp4u0h+unhu+UH4v\nW+IGOmb2OIB9Ui6E+9SnrZ90s6a7VSywxoNXAOsDM0W+cXgGh9uJBz0sGZ01\nVUOpJcou2/S0dQEJF1goulEUJfxcolGLA2Ua6NTx60lWmqul6EzeidFM+iJS\n6wp9Xi9W+3y0s9p6cfvc3cKYQCZxA21AUjSjUnw6FvaMza3nbkM3QrW7+S65\nUeTWvchi0Jq4tyf8POVNifnuMWqS6Pj0CMLfacOIPWWdjZeXSp6u4Fy1Jqtf\ntlRvx6OuLe+fvzCN7/DLMwEAkj7qb/TSgUiV3N6+2RAHySCbzr3anbB/mxjT\ndTR5zm2YVVGud1r0pScc9PwrW2W6nQ/gcrM7nPOfzcV89OXJYkbjz/g9gYdE\nZv9BhSGEbbPY9CRmViu36gFC87+bSn0O/OFAuEJg6diCyKYa75yDMl9Eo6tB\n0eSlREzVH261GgDpwW2ApCtUK1r5F+3kIEeCNWoePRdmBvTnq7mA8IBIugKr\nqAqN\r\n=Sczs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgQWvHhdEVEp7937OHzyU+Bg489PbwNM3OvvW6TPbfsgIhAIJ3ZhnusMsOUGZneHZwwZo/KPpCnd/0o7nACnZPLcex"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2-next-1611240510-9baa9c6c.0_1611240629749_0.3800958846280995"},"_hasShrinkwrap":false},"2.40.3-next-1611240591-9f1f9596.0":{"name":"@xdn/core","version":"2.40.3-next-1611240591-9f1f9596.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.3-next-1611240591-9f1f9596.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-F7vaJtexkmpMqxWgu/eajDXpN5taBk7V12hxcqIQiRNTgVtqEMQUGMVt+yCle1tnXbqN9/HZ8U0dVhkaHvKxGw==","shasum":"5fae232d631c600b78d472730c2a3912251bec22","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.3-next-1611240591-9f1f9596.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCZUACRA9TVsSAnZWagAAeVcP/3g+qpxx6TKw5UFj+Nul\nQEyzweb0cVbrMrxzSiRqWUUkr/19EiMWiu9JISFWHjr88P/NU2sWV96l3Ku6\nHiVOvD9lOyBLNt4HJJbZ9wmK0RUIFHeZXnleWYjIrbO1pXsP3RUmRYLiBeXH\nJf+Yq3NkEY39EKT04wW0urIfeLarnhcAFXOz1qds/1l/nMxrUwDIdHrKk1g/\nTz+wbPcdMhC9mOnjq5y6jRMjOEDUJ3ueE66NVfZWMX0Ni9DV7nAnTQ0uwYRJ\nD3vBMN/B9I0EuifLYP85zWkcVQ1JuvgUoP8cFYgApEmlaXY46CK3r46kS3wM\nxfulsFP0t3mXZn/Y2d+Wfpa/EvOr/T/FPF7UHE0fmxw78pVB3YLBChGucD6h\n7IgH8tXJVP3GQNYD4/evieBeHbcNxxa1IJVmGyc6kmKSCaLSgSnM5vAispZ8\nuDi6K1CL9JXY1UzztIrNqaaedZPnggVfFH2P+vNPTMxnJ3sADx07F8Le2m+s\nNpi9HGRmRJwEWSC/rWBohXeZdxSWAzhTqhiveuHDTFGPIQJ1FQIJ3TK0zHXP\nBR6hvKzb29u6w2cE09nbjZ+OPahfj/0xZuuqhXVOHd1gsuo8gLy+Buw5oZDj\nyAl0NSZTT/amS/4XUjKp4092ckW1drNBge1F8wC/EPvKIMtnovO0gfs04u2v\nuRLs\r\n=usqq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAwMFnrNNnMDBAMyK2okIEyWB8wTc0wUA1oIwGmj6H+5AiB0TKXRXt3CtHc0ujNV87WCPHtL+TDOSr/hRp91pYMZnA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.3-next-1611240591-9f1f9596.0_1611240703985_0.8614461809946028"},"_hasShrinkwrap":false},"2.40.2":{"name":"@xdn/core","version":"2.40.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.2","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KS9ObQv3CA1KedU5aZIGKEsYH8zHAnX79jGSo3aB0lHnOJw1f9n85++kknY9YzZDCONrmF0QMUduILpTWNnByQ==","shasum":"ffb20d374b1a8dc07653ca315176a6add3e1fe8c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.2.tgz","fileCount":174,"unpackedSize":664467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCZYoCRA9TVsSAnZWagAA3Y8P/1PqxSOxyRAjsKWYJ4W9\nCWydVVx+wNtYvKhnU6MzShZnZD/TXq8pupzN+PB6nGBQp2sgTwmNJZMWtHsg\nDdF86MQyKbGckEQqxnfK6OIqRvNNZ0VKCUa2bsxWeUHh9Zqz3fXuGPEmCTQh\n1hK4PXMgho5ONr4M0spF5PyGkQ8G6eCsyIdUGkZ6AMLdMbhRMjDEfbZsEiOn\ncrS2SIjOLbytJJt9JXteq+ZEZcvatelF0Rty18AwXJvADMesCElnt04aPRV0\n1FHTBXwOUwmYQplabTLXyxuCZsMOEhQhbXbYZYOCOD92udhdxh8FekzZi7Zv\nyUxhFrIsXippOpMJA7WkqwkxgW50ttaGMQIt6T0HBN6DhhMYb0XLfCW+pH5t\nIlk5x7LfyYNPnUGCnE1CDtgs1l7XZZsSLraK9nHiibrDhPRAGArSsTl6w3WK\nBUisEJ5UMRvBCu4W/HfKjH6SpY76znYBn9RDqusBDf0Bx8w8PvQgOgoeJzYD\neWVGOuLU2uhPjRgpmXKM7LewtIKxGSA5B47CV5YH/D5rpEMXqgK73JNrpvaw\nWjdQYHnbAjzolvJiv2q1FWxOKs95L++UnZsa1Qt1t9z89SGoza2RdQEjvm6z\n7KNBSuCIqb7xFFMKrzZzj4t6YzGNHt2c1xV5bwx+kUZ/mTOvylRd9ayRxmT1\nhX+F\r\n=CC8R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcrfKOUyu6YDNC1gQVztrdXwVM5ocvC49151FtYteSSAiA+5C/Hut3tAw7CWd8EWqp/lgHCVDKDEZBA7tEEX+s/mQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.2_1611241000179_0.09594864531535285"},"_hasShrinkwrap":false},"2.40.3-next-1611320177-b8db6c58.0":{"name":"@xdn/core","version":"2.40.3-next-1611320177-b8db6c58.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.3-next-1611320177-b8db6c58.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-rRpP522GwD602CH47nVIfbO3H6LxkkXFyOHXAK3p7JmYikkqVu0r7Wt6f8sA954tgFx4HtkzluW1Dgtl1/ggDQ==","shasum":"ccd2a98d518e0fe1df23068de5c433b2dc86d3a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.3-next-1611320177-b8db6c58.0.tgz","fileCount":174,"unpackedSize":665024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCsviCRA9TVsSAnZWagAAe0YP/3PaRTbghAWUnmaIfGZa\n9XylfeCGZEztgswH/f2Rcn+I3s6tHmujUtANTFpTuzWkgwMUxwvdF4QXD+5+\nd/PrGHA1wgwZrynUSIn/KcrOl0qC/yJmK0YW8P6IpcWsi/ZsEFaYmx3iPCOe\nitHIkOZd9gxwGaTTCyBL+IO8IjftT4xvR/t4EQAl06fIzd9y3UetMVw8gMo5\n/hijwfyksw5fqfeH9GpcVwtJleJgKqfRivKc4NfgC6DoEdvJDoskqC6qSfqo\nda/3PxFPyWrGwNKqtMmIqwqLzTQZub6kmyX2Xj5gTa0INYrZng7Wr9VQBW2Q\nqcHrVnWmRSD9MIvsFK7xqn/Q3HHoswJcLPk+jSBwa24RPfNHo/RI9oD2FKih\nfLlMYfjdWMIwxjh8iL4h14dbn2qyHzSeR+Rqx1e8FaI/yUQuSI/6lFonFCV5\ntQZwQmMkTqQUYpMGsMSFHXbalPY+T55dS9zqEd8LzHR6twqa6SqGiNveVirs\nGt8TuQLhoav1K5r0evxsGnbUyw5JsQHdMRssYBz/mtdIkwfps1bXFu3Zn9w5\nkMmnTysPY4PEm01xlylg57o79HTPcUJpSPYK2XlCiUBcE/wxco+rYfUf526B\nFoqpt2Z2evBhV5fhDWul64mHWx6ozjPXnP/t0AKMM17nCAAqSNfU/yMOkLeH\n7Q1s\r\n=Cf26\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHWve6wLlTaDDXtXTbL1LThN1wExrwG9eaPK6l8xWnS/AiBio93BwOQptMqPlkG6lTHURKvIfqVfyr6jMSXdr9l3JA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.3-next-1611320177-b8db6c58.0_1611320290215_0.9153054969269427"},"_hasShrinkwrap":false},"2.40.3-next-1611320473-ca01cbc0.0":{"name":"@xdn/core","version":"2.40.3-next-1611320473-ca01cbc0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.3-next-1611320473-ca01cbc0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UZ3lQuo5f5XVCPCX7zk86XLn8HliLi4fJPFfMTLyUGOeEMv8L7oLNAFLWI8EeqefqfyabJerElP6gwHe7njaLA==","shasum":"d7b37847468b611b365b8a0802d030b994e2403b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.3-next-1611320473-ca01cbc0.0.tgz","fileCount":174,"unpackedSize":665024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCs0ZCRA9TVsSAnZWagAAf1wQAIBeJ/GGKPsx+6v/qIJ8\n09hfKL5a1x1pg/3SA5EaBfdoEtVMYlgtkfMklD8Ic6kNQbFPkLxlccM1ndPi\njnKsSzkRJJCxpdxP6618xp95omo++3T3u7Kk4KA3mx+xDqNCyxgvx4M9oZZD\nWeS44xwgSCpFvcpaxtOpBKVopxB7CfBmStt2eS4tD7jQ4fL7ofcUAObZ11vn\nYXidIbeNivTvETzQ4zRvGWycxiIe+5m9qG0+3ESHQ0q77AwV1LHGgGPqcH4K\nstHQRJdnF0Cs7RiFyJFa38efGa9VJzR2dZqvzZgd8cEMc0OD6TJOvVeSwdf4\nhdILJ9WBjxmyTvGHlpCuikxxoPK1CBAx3HOGUF1CBLMW0KtscZN69C9Y0liD\n5MvxaWVgYgPJaNkM52q7I5kCG7QJnbctejIvxAxiOT0cmEgwxeh6OHFD1Tp5\ndlSbvV8TDvH8jhBXINmjFt6ayuFsO5rf3rvQc2Lfkn+rlFseIznXo6iuiGXT\nLgTU3FGpG8prn7Qiq4+Q3bqU4hzec3NLXXCz/GikVrA6F6yzUGBXGNpRRWbL\ncjs8lUfG/hvqrUX3/XDp9nYPxMCBq1qnCVBBKKg0y6nhrLSscf4AqUq/aQQ0\nJ6YS6nOfgKm8AY89WpITTiD48xl8XZ4SBrON1rPzHqzNT4dwRoedkMqy/zo5\nY9s/\r\n=W40x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPpRCu5+95oGwNJIrHk+V+47VVJzReARcsjKJj84irCwIgSv9fbFsWLVecNeiQemQhPPfBo43ZG+PTxHHTNwd+5lk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.3-next-1611320473-ca01cbc0.0_1611320600533_0.11114856740600265"},"_hasShrinkwrap":false},"2.40.3-next-1611323008-819f5cc7.0":{"name":"@xdn/core","version":"2.40.3-next-1611323008-819f5cc7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.3-next-1611323008-819f5cc7.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-60cMm+mZizB8m554hLX7KAveEgQ11PMXRlRyqYixOxGNQ1bvjWrBGstXvcl9YgQyNWrH2R8OpJ877odNMrCU5A==","shasum":"63e4cf769047b1df30aabc2ba896445cd376bfcb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.3-next-1611323008-819f5cc7.0.tgz","fileCount":174,"unpackedSize":665024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCtb4CRA9TVsSAnZWagAATyQP/j+VxTJagMOYE9zXACNG\nws6K/Z36D72lIgM/wUSkswqZ7cBDcyIheqWsV1BSKO0a65Rcp9IrvUMRIhJ+\n1fEem8vumePviUZNBpkclR23Y27NHlBdmQhl8CvANiflGEBPbjDa23DIVCY4\nhUTexfjrMxNCgrRPCd0z5OAnu7rtdOj3Q/iEpgJfpNPveVE4ltLZoLhR/fxt\nPhcLFfbwqFFi0DY0glUD6SP/lgsslEVmbJRLoQ7KdAknb4j1isYRWdIKSWt0\nnS+PlO3YmyY3RUkYnxf0WjreXfeXBRoaFionza1RcSnWERY7DxEfDFM+5tei\nnpI9A2xdARbm3AGlwdD81UTnC0KyVy8uLylySupVc8TB9dBp8Z5WXP0Rankh\nKTudvVo0XMqVxOIyGZvkONi0CWn7zs6DMlhO1fNe7mESRCQ6uVYgZarNE69L\nMhLkk7K3DdzRNfWb91jT6VWkozF290UKVolK8AN1eYR91TH7qAL+1YB64hSW\nOpKWJzAOteo30M6ozcmLnjUAq61YvMXLvHfHhIsnqFCweEfz8HByin79mVHJ\nR63KHe+e+bXi9nF/ap+nr+z9zcZpyrr9EP2LnuWUUdR4i0hrr9AZ4WolnIx9\nkGhYPJUEZcYvH2JAV4yxZaU4a+WmlGKqbCZFfZVbUvuIWBisSwFFU7ganLHS\nxMQW\r\n=PAxN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWczbG9JhksushUsfTA6QbH13tfmWwA3yzcE6oYiSTcgIhAKcTQdK6SThqLUG9oRq1iYhnBXLNO+zSxu/7+C78O+gs"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.3-next-1611323008-819f5cc7.0_1611323128050_0.8481526235682748"},"_hasShrinkwrap":false},"2.40.3-next-1611343469-8ae5672b.0":{"name":"@xdn/core","version":"2.40.3-next-1611343469-8ae5672b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.3-next-1611343469-8ae5672b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+BqKU8PZcYEx8215k4Qat504mWhD7ksFFZLFJ6vPXD60qNuFfTN0njAXDW6AZWrx4pXCeX5izuuxI/jJgfSTXw==","shasum":"28a11a97bef6aa51ba5aa374953c86c3edbf1136","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.3-next-1611343469-8ae5672b.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCybeCRA9TVsSAnZWagAAzs0QAKH9RBXzHClpH83yhAb4\nkh1SkVCrrO3NI3zNhR+thWgerso5sPxeDf0M+eOyEdTokaPyyHPR1FqfEVHa\nx+8UlddaTxZ5ELMpeQ1E0alMgt5ja0JQJVzIN67noRPlqs3FX6C8mIUG/Kyt\nJfbfgMDrZT7bxCOiGJIZhmDLlfQoNO0dOutZXU4tbzlJhQ9Vux3zr9TdY1oQ\nCmEbrULDKeV9GDDpSt1bX5oDwJimbpNdzx1efyk8x8in8+vr5MipiTyAHP6O\neFNmLVDvUKB/ibKcrvSDwIxg79RkhtD/bi03cIi4bXXwCy+l3qbjvK/7ZCia\nKN7YpqC2QGnWWR5PCO09JGbVEJf+Ft2aKnuNZgpvcNAMpOZHsIn/Lu1du75o\n+e6h4xN0J+7q4pVX/8ppmuBgttUBYaf2az8VqyHVPwttu4C3RNG9UzwoMuLC\nZunJB7JlZ9PcrTEYOnfsoclx7vD2lrTFN1JQ0h0zeCsk3LGQPpyMIQRjTgTp\nk7GMRx8k3k7guFBCBiwI929HQAIP8vjl+vdXuT71BNvFtojaOPyCTqwUjnmJ\nesbr5LLzzfOHrnWR4X9V6T/IPc+LXdG37Q7Dk+HFNcUekDqZyLQdjSNp6jbm\nQNfVeZGej0M4VIGRrY+afsTBtWrxf5ATeP/VI5iLPDFdVeXDKiN8id5yCQyy\n7jtF\r\n=jZhL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbIYD0DAXQVVcj8P2489QHAwKVJvL5Cj8vHUxmyjTlOwIgW6gXZhQ7+wLAqK5lRbcP9LqD7ewkgT4vqyqwZIfgVw8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.3-next-1611343469-8ae5672b.0_1611343582116_0.8332254729257735"},"_hasShrinkwrap":false},"2.40.3-next-1611345209-8ae5672b.0":{"name":"@xdn/core","version":"2.40.3-next-1611345209-8ae5672b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.3-next-1611345209-8ae5672b.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KV+r4GpARBrYdpfX83LgnRWS+ConigbGNP+deioqcbo/V1GVLksvaBE6EIal7Jv7UMh93KN07O7jeXYo7HoHVw==","shasum":"9a63c76de07489b456242341533b9950bb2c210d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.3-next-1611345209-8ae5672b.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCy2vCRA9TVsSAnZWagAAuk4QAKIkqXjA9HLN2kNezbgq\noAhWFryRti0OIRjHhqt10fu+SVxjETwAopjZJO+X8wr8f8tjcxlh5pdev2Zy\ngy2Ih9cFSDBoQxsqH6Z+FMLe4Fk7SKzSXZFJd3iTmvVXargXWE7VZofhzjy8\ntAMFitEVLw5GmkIrD7Owslk3W6VlOa+ugU5g+k6DTCYbUIWD5TJLuvOE+Nf7\niTs/0NA0qfId3XPSiWDhEK1gTZlyZpvPpoH8dyI6sQogsQY8iWEcq//Dsk9U\nHhZjwYeRnCMXrm+iTvNJdmByZVJBV7N63u0l/sSHnYMk2C5e4VqZdZzQpgGc\nN7MicUfiFTSWhZ3kmKj+Iwpt1QbEMhwdxpp4zE2gSiWIwaMxvQfzV5UkAJzM\n96vRTnVqLr2MmFgOaV1bCIrUqKRRuW2sndexw1aRDdATHDC41zBfmxm8btqa\nM7MeCXwOPwJpl7j+sdeExv2GyprSHNURWMn+NTZYd/Ffb2IY6eAg6Rj/Alfv\nVDY6VbzA/NlvSz0keriWtQvKY2v4WDQSR4rNdnDgTxlQ1ms81XBh1X9Pyxy/\nFbSFkvsDuUPAGGNst40kGTHHElEKqusiVngQ1wzpu29zRFSqeA2VeWWTLxj/\nBcglKA3mYyKNUbp1XHryyd99Gv2tzHU17VHNcBT3ooCqfib0NfemuSFHlxkl\n83xc\r\n=5KZG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGbw3FU+CWhFsQc5lDEcGTfmZeXvaLpTC/jxWV5jZP4YAiEAhgGTMKcZGr2T+5cOjnSPeYfwGDmBBp8O2GeUxoGCgjg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.3-next-1611345209-8ae5672b.0_1611345326898_0.626243548091683"},"_hasShrinkwrap":false},"2.40.3-next-1611576532-2bdc4227.0":{"name":"@xdn/core","version":"2.40.3-next-1611576532-2bdc4227.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.3-next-1611576532-2bdc4227.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xZWAh2d/OmkaTcSg5pIlRVxJ8LXy5poooUi+h2PdIIoWQFmWugEmVd8Q+UuIWRehHpnQQkUEjku1RatpQ0K4PA==","shasum":"f61f64fe8f3589d231b6163bd7f5d2f5586e5c8f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.3-next-1611576532-2bdc4227.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDrVZCRA9TVsSAnZWagAADCcP+gNwW0jNei3Ma8YpS4XG\nPMA7704hPW5D00M60Yg4aE/XyDcN+3ZsfCEv1G4vbytGApjULMjcLC+qFh6j\nqo8a7r4t5jrRKvSuMwnVJEIZiH+J2RO6J+BwzECwecavmQYMhdRPEYhM3kMO\nrcVRRoVZ409XbGRPzcGD3QmvvYDs+KxzhkoD4PtWD2zASlCynuPXRQ57K+qK\nflw5DvELZAG//dbcS1DOr82nPzke3L97zvKACxspVIh8WALPm7PpTi47pymw\nVclWtMK7NLlook5mHdHwupDmahx3WBLAV9T9xKQYYkd9OQoDCzI2iVzDyAzn\nOmE52B790QnxyHfWWAFGEev7eix1isc8WPNp+xRS1wzyQbQE3aJPyMJgaUQX\nU/0ibDfIgmBJrnyDHY/rqNBsZU62qnJfsO2JpyaW5KJzYzx2YdmTU9ktazvI\nZmCzwv/Z24i4BQnykSaXKEedX3ioU/vdCzhKCownXHffukMviT+QcAr9myGR\nYEOLsuN9Xc4eQlYnzs/Tq6ApJ9HfUcIFLC8xE+AyL+RWUsr1b5yffpHI2Exx\nVoqNh2vQih2nSJiQMz54Tbjfhetzawm02BMO9OYc40IZTmQYyx2/TvCObR/M\n6fqP+KThF5SdKG8P+iEeVV8yqPaEk9uOvkWyPktNPcp5ugfrlpL61aQVaddK\n9BQC\r\n=uXGw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFq6KivrPDWjOPCCGxrhhPDNb35CplHSh1tnWpWUy6FwAiBVe8qAfq5rs1fcisRGF1ON9GHgU1AQLpwJX3LJJqjU3w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.3-next-1611576532-2bdc4227.0_1611576665161_0.2626195847341848"},"_hasShrinkwrap":false},"2.40.3-next-1611576922-b8b34a3e.0":{"name":"@xdn/core","version":"2.40.3-next-1611576922-b8b34a3e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.3-next-1611576922-b8b34a3e.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-XaMLjrS5CkETbeJVNBRRL9MiyHOm7VQCcuhkullMHIVnU6g+aliDYQpszD89/3Nws4hp2+Tm1/eBfYwuSbTVJQ==","shasum":"9a145c36f0a60e5974d98a974755901b1718eb5e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.3-next-1611576922-b8b34a3e.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDrbZCRA9TVsSAnZWagAAKZEQAJ8X6UTpCjvKu3M/MscN\nwtXg0ZAvhm7g+6YzhnRR9T3PHBvBAkgtzXO3SCDzxyCowqG7cvhzYzc3gQmw\nFrJRzjtt5d2jL8pX2TjgV0NpPyiD7hz8FPXvDOslPKZfPVclru0WUL05l79x\nWsQkBNLn43C8tRiDIltllEamjWgw0rjJuJY661WUlbBrkwL2I7/Ssx0h52Bs\nPOnhQgLb3ow85jg+IaMVlhX7P2NsYjQat+1Oh3duAZU1BxeLDPTkkt6WCJN6\nF5V3fsEAkQIaW4CQcd1jqRX8gQbU66Pr8VxDwJEUJT21qHyoZ9n9deE04Qri\nUItVT3WyZ1S2iMPZB8JCcaKI9XiEiTaNXcWNprwti12OHo7syXFlbpqVPRaO\n2f7BbiXyKo6P+CExYXQ+7WEZbrqToJmDMnHzQ5NpqY7exLc9AfDsPk4l9fdM\ncX44KdQX+VfLD4yvb1W3obGgz7E5Q58cjlGY1EcwALuYYHNxm5W8fYK1+DXd\nT4bVAcp3B1AckHQkc7+sz0TYRbgjzrqoupK8gzxev7fnSdCpA5TW8Pp9D0iK\neVy6JSG6q2UtvVcPM4oY/KCVhCdugOdWGT9TlQV4MiLnQr1U3kF4mp/LEOeV\nJPukyvy7yHcaElZhcbpPL0p0BocuSnx054v/FCDmiaKE3HlJigYNi4myL6ji\n7adU\r\n=T0v+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1OJ7F2QcaYZEjggo1zjs6k72xa3jODE94zTzFi1rDZAIhALnxgEqC7g0u7ZEnjatwq9nM0tVwPqGmyRAhziTjXVMX"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.3-next-1611576922-b8b34a3e.0_1611577048996_0.3278637629737793"},"_hasShrinkwrap":false},"2.40.3-next-1611581069-38f31a92.0":{"name":"@xdn/core","version":"2.40.3-next-1611581069-38f31a92.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.40.3-next-1611581069-38f31a92.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Hskg80BGIOccjjf1+Oq7YxMELNgMVXN8+tFsepnN07jv89fD3MR+vwznm6VN4KhvmKKh0yx1l6MEqziZcGsLMg==","shasum":"6184f38c166d0694d71ee0f01f56ede4e0e67317","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.40.3-next-1611581069-38f31a92.0.tgz","fileCount":174,"unpackedSize":665024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDscTCRA9TVsSAnZWagAAKoUP/3zqhP1MMoPMFqhyXk8n\n43+WwSBhn4wQdgmYET2c2COxjMRpir54DJA5t2luhRYO03CXAuiZGaGnV51t\n38wDRdYWsQHekvE7bh/pJNcgrQ62bPMs+1HXJBMqnc24KZHkBVP+lY1vz7Kc\n7m09euzuk+85zpkz9RQF9CyPeKeCny/GL1WyC4DBTswgihEctrt4XM3WhBvX\nxwqx8ZJCysiWZC33AmQGrlQ1r2pj780V7BfEYLtaWfXaWgFuKBQV72QpqIc4\nWSh68SXpd1TmLMayAHH/OtU9/H9WOD8WbMa5JjiahVS+LfJxOn0TsB5VDvfH\n8pxG7KkhRBbDLddG2JNCQgFgMlTqM5hSUY5OBkHptw0urB141M39cr9/dBMP\nuWLZ5VGKqDf3L7iVBQwuY702f2rx8+Dmz7T4cy8hIz1owaMpHrSKhjvnKl4W\nZmyQRxFhj6DQB2leIwu6BUID2qdGO+r/NC2wgmeu7zxO4P7c02Q/e7mOGWGi\nsCuZBjdfIE1DMyVjZ7UenLiy6S06r5XTYMbnE+AS7ZLfAT0MW5LYycmYoyQE\nZQO1EXBcGvHm3JQfDCQFgifmOoLZQq6A+hwI22nbUdT1I9Bb03+QyF0ASTfC\nZx5zf07MsLd0pc6t8mmC2GlbViTcR1v5WZaCXAIw9XyNBjRAEP4zKASletP8\ndM3T\r\n=6ADu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICyZewuZc7TEHxS/ifcck0p/QrRQraSj+Bp7DZOSMqohAiEA4f1Z9DL4BUztSiDo5WrNKCHFBC+LZ23+FQa5Bg8rZik="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.40.3-next-1611581069-38f31a92.0_1611581203312_0.5273543891064374"},"_hasShrinkwrap":false},"2.41.1-next-1611583271-16c9273d.0":{"name":"@xdn/core","version":"2.41.1-next-1611583271-16c9273d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611583271-16c9273d.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-yPPRWqIr3oeZRpmsbHbN6a37fqqbf/0rCS8m52CnW3/4JaLaMcy1LWbi1at+78TgnwmfsTyYwNiAJaPJjw0A9A==","shasum":"7c3bba6555233f309b4b1caea1b650aa7596d077","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611583271-16c9273d.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDs+QCRA9TVsSAnZWagAAil4QAJqiW5rtzuwtJaqSZL00\nNpjEOKOrkJ70t1x6oftiXWOooP5sobrPNuD6m9Mp3iD2dC+8IY4QgSkrxAL8\ne2CoBSnuhyR+/uhti2OmHVlrB8aS93SAMzRbjYd42r7UER1Se80uRDgAsjk1\np99No/PIbgWK25BkDSacxTumecu2gq2IrmuzA4WMtdwYW3le7KpBL8483vnZ\nZGQI9MrXZETRz2eMltF8RzKZ3MSQH66UcvCSFGMDIG8WWHgrjGJgaHej64o6\nafi0rnq07SLNHEU4tjM9+bOOggN+qqnthIpnqvzRAiz8EdWSp9gfC3DxM4jW\nDD3tc6rqXWDv7K74fvf9yBDX9v9LD69sq9Q+N6/kyoQbWolxCkCgQVIGpCTy\nE2HRqqKh53BGSa+h6A7seZL9+FTyq+oVN4V952/ptCO0l56CzSFn6sSj5vso\n+jVrTicfrCNDpa+q2X3cJVX7gBMJy7Pznlq0XOJHSKhGGkurrDuU5Q2CwnG1\nrDE6pY5qfhQmzUJtA7AliAOReePtPuypODQGXz5prGkL/MZ9NNQ1jG0/lX6L\nRNRoNPHoukJL2AK7rBuIgOJOO5NOMpj8Iai6NuTCxrwFUS3Vu77DOW7mPTLN\nyprb+AtGnD2Az83w6xqxwgltU+AyRv60HRg4Vmppl/bVKLpXTcd+kQb7E4jv\npUIv\r\n=0QfD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBLAmfwuZvTQXu6LkesZAjBANkPV2ea/1kRa9s865tVoAiBWCh+gmwtSFb/xnf1bBAaSlDT7Kjh2CAO9fPtDUiWVZQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611583271-16c9273d.0_1611583375249_0.014075130220554843"},"_hasShrinkwrap":false},"2.41.0":{"name":"@xdn/core","version":"2.41.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-X6hgLiNmavY0GN3DJcnFzY4eC+7s7msRdI9T5nDJK1KZ7uRuZF/sgvMTu2/skJicfYwT5io4v4+5LSKEjJWxzQ==","shasum":"8f5c427337084dc64ab16c2bc925b41728f247c5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.0.tgz","fileCount":174,"unpackedSize":664467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDti6CRA9TVsSAnZWagAAUlAQAKKCUclsqvSL9YpzCorZ\nR/kKeVdyXLhFAugpZ57vl4/0hE/VFFU3EQiTWMffCbFMR+/wtCenDFqKzQdH\n+9jOnWmuyArgivlKbLdnt3wMeIl+h4i8hA0yCicOQZVwbvX6gG4LQ7mY+Uvm\nE11j8b03YzQeH6NN+vK71rifb7SKzpTPWGJ9SJhsAyX90BTMpdK4D0mf4MxM\n0FqvGJs27FedrX9q4OlGWJt0+Odp343l7+Oet+rlD3o6nO3wD7v4yBv6qYMY\nO5QfXRcToqQAsk5UrHkt/1Ozt/wlTpMFdltwCsqL0CUuvBoYFEtcnYYmJ+CN\nAaG9n3mdAOM7IexA987ajq5jzwhqx9AGA4hMkzX3/98Ibnm/MIr/H7KOmmyG\n3YmZOibyA+/8FMQLBuxS/aQFxpfNQ0Ehmc1m5f/HUN/1bIlT6ML0FrSVIF31\nmKsRm3LmGzwEuk//T+klKpvuYOPn8VrGC+rRYQyorg1Epk0z8uTyLbKX6Faf\nLsxYUZiTXeoXVvdZh0kRpB//smjlAjzCsKE3+j2PA9NUP2JbOqido3Y/dSOz\n5q1OzyXYPaekiYPP3hcQGrO8OPCxg4WO37354VGWgw0GAYzsI6DDlwUZS+yg\nkfHkjJz5771egC96bkQPjeyjpYdjPQcP9LL6r2lwqlJPe2HSdginQX9aS1Yf\nXAzT\r\n=ZTGD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG90Opopr6n9Hrap5BTKrzpCZfgehA9ILpEBkYrCugk0AiBbdgAGxIEyHjbtjOXhJpH0bPQY3kpIWAlfcLr6DBpJLQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.0_1611585721749_0.4460268685769935"},"_hasShrinkwrap":false},"2.41.1-next-1611657751-e6b92987.0":{"name":"@xdn/core","version":"2.41.1-next-1611657751-e6b92987.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611657751-e6b92987.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Oyv0hwSKjgHMt2w4GWtJsWaYoUSNOEvCP68/7Z/wwZPNaAAj1UWWTUbyjjqQx/Y+Z5mVyrLEjut7XUuIXHolnQ==","shasum":"7e2edda1eab70e127afc808dca0396ac03606f9d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611657751-e6b92987.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgD/KcCRA9TVsSAnZWagAA2nQP/0hxGW6/IWr1gG+eass0\nyYmeosd+BrDHcbHmQQK1tzYuP0ULp6igD7+bqU/LhB2CXbws6ofCLOPpZ0jr\n3gzzV6xCJHFweKG0D/TUZOFK7CAzEoGg9cP+S2HCliqxE307Unl7A5FJVT7z\npZQT9hGWdTHyiMVUgUb2p/LFuVdDGvj8Dxom5okZ09V8cYWWRbwwI6tIUXfM\nzO6vA1brkiP6WkimkBCMNfUOivXdwamymyz6Fe/Nn6pbQ6NPcwmQb5rxNzO9\nTYBy0zzl9zSPxCmxJjPm4szSMGs0Efk5x305jx7LzVNUzVXtEvuTCfDNJfo1\nK+CeDMqzmARLVVAecnan50cWO4JQJKly8eIz9OLj2PdlrDRZr1XHgY4Uc5KE\nTXZRvqO3VQjZIvKvApn41FFsKSCqFkzhWTERbJT4X4Wy93emuXcwaHx69kN9\nrjOrUu7WyYu09e2vdNgKrCV61ZxHSCRDBBrSIXY/uiU9bb3kyBaFYmOhgZ5+\n8jnoj132OmolLc86vHNdOh3pv4uwFc4K+whl03q3j+EQLh/Qlgz5XMf/ECs/\nH9yJLQnXbM0ylMcbB8iDZ6/nAej62k6b5MeKYRNPSF4LdgX/Kfgy0N6j2/dL\nql+McEFO/5eik7xlU4xepUrcmGd+koPyOr3Opi5tIGn4csRwnQynm4gkdntt\nwcu7\r\n=8rZv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWgLaI4xViQ+NZjxAhXOOivFJ3ub3tG6jNdlOFeqMDMAiEAmcqvbZCllGo+5GcniHNXuiomyb5YD5aW+9PbS8E35Pk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611657751-e6b92987.0_1611657884331_0.7781510061181263"},"_hasShrinkwrap":false},"2.41.1-next-1611750444-e6b92987.0":{"name":"@xdn/core","version":"2.41.1-next-1611750444-e6b92987.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611750444-e6b92987.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-IrQnc16AWdbJpYvDf0QiLtrQwJ8SUkMaNW3i4ZkbuzN7gQCIZjlqcRwGEAjQIRMeWHMxaO7PXS5sGWjSGZawdA==","shasum":"bddd077dac25e90bf9ec55d01360d202bed5ac68","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611750444-e6b92987.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEVygCRA9TVsSAnZWagAAeE4P/2vr0J6KrTjCCI68v1mx\nAbEaQh48c+MezS9nXI2fEKNUfHwgrDML/HRxPGbGkAxdSZqrkhKBGFQq+bhx\nqeLcY4E5e0p0Gk7dzxEeGQkxQjop2OKg6DVFsadEgdD0vn4IqWCn2MUo3OQU\nMIIQEt0wXXMnDcgXZi98TKNS2QIqGQ1/vbTRLnx7NDKNA02Td3+cvK19GfnE\nEnasJ0p5OAjlw8QAW9Pciegaf8TZ+RNXwh2r9iumXqoTeWCOdLFKgWGBuJRP\nXQOOqeO/gsrDNWwz5YiuofrO5VVrhKtoqARYFSU0rDj6k66eD0UooiNa/+tR\noHmxZO2NqCp+E1EALZCXFPjeqEtKiVRsWbNZOejwgl/+jIDoiSCfr5qx1/U+\nuwSAlSMDzQUWzbNqMRHkUVkVdtOzIjJz+fTXvkbnDgGFGsVKtZXze5RCcMpo\nQZOqOw+Ip2oJdWUki2MAVePudQNCyHXWRIUtv+poH6RK9/+mZzl1VuKfn6ED\n9p6a4TscbecBbkO3OWDWR6NPNKUf3PymEYwWlIOF2bvjxGKZ7dM7q+HZf/yU\nnyFaVpagLhaqMamftLNGZsrsKlMyC4zVWp9LCntToUCGqc8/WbgLMUDsfjr1\nn+45DYevKsOMYj+iACOJieTzmIphGY/P66KMK/gkC3tgtETei8mlu31/DFho\n0B4G\r\n=YfDe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVZTeTkU9csKCC4huTdEWoDo41x4BymQQbLDPLxguqgwIgNES+pWjbeUfE+PiAoGfEOOya5itNBiuIML3edFID2bY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611750444-e6b92987.0_1611750559493_0.7288516905129696"},"_hasShrinkwrap":false},"2.41.1-next-1611755596-87b809b2.0":{"name":"@xdn/core","version":"2.41.1-next-1611755596-87b809b2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611755596-87b809b2.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-dK74hObQrcltxULtJsWBTLz/sxPAeznwOAa3rK9pDHHgOTZVezYjOEmp4l5zG8MrWiYtRSCwEkhOyehDY06sUg==","shasum":"79ebc64ce062d86fe212d58375aa295ab8593423","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611755596-87b809b2.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEXDGCRA9TVsSAnZWagAAULsP/3WGUGHuE1NIgj9imNqC\nicSXt2336CGy3f/TkaU5WHB31HOp5dK2A3+4F3k41cbLFvBy3afDdPFAzcVz\nfeZTe4feGwQkfyKQTCi9kUTCjxS1r0COI9NGbKEG6fNG+LFDYub34damAKML\nG4142wG7prT04tcBYYH+LpjolDg1I7S7cMX73QNETMitxLcAagkeL+O8E8qn\nge9ybNwS6BdYvW1q6UlYrtACIDZs1lo32/Ea0djyL9GcNHCI7PaQeNkdCBmy\n/tCNOEPFdk376X/LV+TargV9bS0ih4cbPUGU3gQadF0fJ1Rp3Q2pv6EKoiN4\ntH+Dk3Jf6Fnn8/7ZGOTHeA7B/67Ys5ZMVLIKtXbAogFE1enyIfjjk/98nXj5\nz4CnJz25eKDsN+BOXfeoq84yuNQcpaA0ZTbSt+ATMgMK/kxZBzT1f9Ts8zpf\nuahUgUyl8GItoEWH++ZaPeJwLcoZn8GedUEpQ+dvlcI1NUIcohebHONSQ1+g\nGBU5thCU5fbI0jZ0ZkAzdvxnd6h1M2L0MJucTGmziCSLDb9wvSsQHKkLH0mX\nNUj/fT/bB8UmfKjp4Db/Y2LsxLS+4okl8A7eMWRcCuVTIXototFMYL+Srf8I\nSpI7Gc91ymoi/ofHdcPX5DClRlL2PjDYeUalZfo4/6BBDDtzZS2U8NnTRI9q\n8MQs\r\n=fEAB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHMWyiXRWj5S1pfM1xc5oNa67qH9/aUWNSdl421BesQHAiAsI4E5ib6KBG4vfgd5rfIXizHhv9Jne5qHud8QA9C5rA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611755596-87b809b2.0_1611755716070_0.6151554289606767"},"_hasShrinkwrap":false},"2.41.1-next-1611757088-9943cab3.0":{"name":"@xdn/core","version":"2.41.1-next-1611757088-9943cab3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611757088-9943cab3.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-uWwfwsRRMcjWipMSMTEyNpdnxUbRThOEI/mq/DQt0r9cEFMT8nXMX4yzFrGf8YS1dcmTSvj7hh0q1xLKrUDe8A==","shasum":"65da6d6a16a7790d899921a7da1a00842e4d0cb3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611757088-9943cab3.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEXahCRA9TVsSAnZWagAAL/cQAKRg20DeB+zNT1Kq8gWF\nfvRykC8EyFvo/eWo0wbqMW6YnEqniGSF4ovRWZbdcMjXOagOPOj1/PmPueZ/\n8n/IuVxUru/SV1novIjuHEuLzQGz8aTaLmd+3jDaSzdxTgzuCvbpytRKXuLX\nvcWorxRKO3UzmcXr/iTy1KGkeulO0ZlxA2yv8tg1mSj9heRZM/EaRS3tJPfZ\nfQmQLZRVC+j2Oj64VNQ1Xhv5gIMg0m2Wke/pO6El0kqdPLXwUA+VuP2VeTSX\nmV/5qHlqBsrWT9rLbLVbWPOofW1hdfvW/6y1hIIfa2AnKg4GSvo9KVoEsme1\nOCJwOLMUvruMw74Vu4dw57nE4YR6ewDVETJY5w3l8By8hj7oEXiFzwmB/e5n\n4yfFzJusEWTRx3AkxP/dtE8hGLcGphjmO5Jvel4reD6pStek0RACv36izZrT\nBtXOg5hyzTe+K4if91IGydsRkxq7xAvXfxmV0LwIN9vWoZDDhHFjg+tl14X9\n5DeGiNrpcXJOO8+M1AGNR5SgVOrUzT1nVFhN7z1+O7tEDpOh55qFxa26p+oo\n5kBkzRKZzborbX/X8mmbXbIwRLFL6y2BvNBfXeXNhFsIQDCEqGD3EE/OSa2F\nths+cZYDzr7GTwGXslMQouaoFTlcj4Jzvnmb2834BEyQALchYt7vKnbDRzG6\no9+8\r\n=KMd8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFu+HJXH66oJ9SL8eXzCD38vKwpYV43nNA9Hh9O3uUtZAiAXl+X8yYQEtTnsZdSUkDT6PyGsjGOugL4NRcghoU/HIQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611757088-9943cab3.0_1611757217039_0.42781972002725044"},"_hasShrinkwrap":false},"2.41.1-next-1611783054-0c4f0e03.0":{"name":"@xdn/core","version":"2.41.1-next-1611783054-0c4f0e03.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611783054-0c4f0e03.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-rV/9oYWvn+gBuMxwbcmSsFvFUHcvm2iKcJqSAHq5eP9VBB/B+jcJOiWGzBgUb+5EopJ06VdySlZfaoHxOALulw==","shasum":"a7031ecc82959732ad35d8a3aad98d4d031654b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611783054-0c4f0e03.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEdwPCRA9TVsSAnZWagAAlR4P+wXJZksjwlusx7eJw42+\nOXw4xHwLwufKWQDLaSAOHfX/T4lSUOflQbHwCoNgC9Fv2QwaMBF3jppdd2yj\nihCQTAdrzsI9kqh4ohVHVPlTSgg+WuIsbvJgBXAumNLSvOkSPc2Tah3V1PGN\nrX5tOYSJV0+7tP150pXyvaHELCdQN0Krat/2izfVl7yKn2CRauHBt4xfjq5h\nvEpO23/rrPuwgQWdsOKhLoad0ltvR2Xi7m80fei2yrOFh0ZxQvsIjag7ef5k\ncRK9q5Mi3dLASzlE7DkhF1e1hdaAyJQ5ZcFx2n8nW55Ld3gjOpYaIecg1AfB\ni3l7LgpDojrUC27qwUP545A9It6Nb4eN4CdqDRMmQiJGeSbignQ19zh2XMnI\n2IlQRB7itrTlHbWTUXea+TRctVYk9DYIUtvaLDSPUahbXXs1U7Hs7QrjP4xf\nU8S3RTXE8pIoD4j5lWkmgYTTDzLpzHrscaydKEKNwCqwV5o3apnO8eeOjrvw\n14iCyavOaBzUB8NvhNiHe5HwKnmY/g6+7NjVsml4w9tV9AZNHLUGS0Fr0Q2h\n8nz2CrsdX+rI+xcDhJ1QUpqEQzvMLWV521tXelJLkgTmja0pBwaBbM7dPIiX\nrjn+Lr2DRL3lmWYjSziFs42Zm8cUFodUpldL1Ij3xkagfGuzthCwYbRc4czi\nxyv0\r\n=PRqc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCloNtQcI9UP0t1Ggd130EXpixcpqdicEjgtjOPP1Uy/QIhAP6yGHVQZO+bDUO4wDAKwKReHz4ttQoMotAiTUqDOczq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611783054-0c4f0e03.0_1611783182966_0.576795351247362"},"_hasShrinkwrap":false},"2.41.1-next-1611787262-fb6ec9b9.0":{"name":"@xdn/core","version":"2.41.1-next-1611787262-fb6ec9b9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611787262-fb6ec9b9.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-raiVkSifrTRvLlgDXIQu/9GwA7+WANH7mzBJRMSoqzyLD3IF3x+gyp7LSLoubcpsccY3gYD7ili96b95rllYjA==","shasum":"1bb3769757b6bb1f219a646d996a64b13fc35401","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611787262-fb6ec9b9.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEexvCRA9TVsSAnZWagAAwKsQAJDefiNLeya9JuGnnB9S\nMJyFZppMNAJzXbTA37cioQsvfIHWa2ym4Z9f1VglXf+SK3doQfbekLt2ei4S\nEtPKDHP4EYEU1H7UrXOzAm6PBhDSpn9rclCahQOCe6Oiy9JwO77iCRugEDZh\nsby+4iY1cWVvNdDxXPSFgdE8hfELRQNA1bIfwAANo0VVF+tRsfeQE6LkBFqQ\n0NGSIAEF+4x0f8aRmunQCzBr1821V4GX/CrLPqEBN9e3TrAQDQrQYh7utJP0\nDL03Ua6vqfx6U6z58x742/a5JKg06/RX4/kwdXF92OdwG6HErfDvvDf5mopL\n7iLDHJgTtxNkV1nKkV55ZwvWb7+WbHSYFYcII608rAEQCXNHhlfaRBEukEDM\nI7kFAPQMrdyVr+Ji3ITmVgb1Wlry7DnIIY68boK+Kf3cU+YeneT9g9rCOSSE\nBy0lCaaJOBZHOQRB2aRkfEUnRkatiC33dAuFne4bTASBRZr69FSQItGbEqvF\ncHv9mVWnClA7+0YBMgJ/lAyeP9odDVkFkdNY+w9g6tzzm9zEDtKQotaVrwRC\nJDcP/dWXzwRa01Bweb+mualwc5z+773nl3CQYrXBruznN8AQv1OYktP9i/7n\nXIPZ/B5Vkbuz5r40zttt2sP0rVRzcSMBFmEZkDtBt49764KlhlUdAGDGox3h\nMeKy\r\n=4qQW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3zZUuSEAfflk+sP+kZrn3xwYmalBNV3C4LcevGdCxZAiBkQLhoGrdUNrIi/IwLT6BcwmME/qq8OmGV0o5J96leog=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611787262-fb6ec9b9.0_1611787375175_0.1877737525508545"},"_hasShrinkwrap":false},"2.41.1-next-1611789678-5b248d7e.0":{"name":"@xdn/core","version":"2.41.1-next-1611789678-5b248d7e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611789678-5b248d7e.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-QE9aRVI33I0M205TrihB9IFJIu+ne6EQqvyoV3AjVQY89hxQUA/2O1vKVOxzCi/dckfi+kDh52/ONCgwDaLf0A==","shasum":"e8150fc76ce492b5d8f2f9d52d66ee498313f7bf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611789678-5b248d7e.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEfXfCRA9TVsSAnZWagAAYQgP/jlsBAoloR+Ri/NPV8nU\n+2J8HLAdDtLrUqd6WBR5K5kzyStZ/RpDdc5CuM9Y7CUFpx2AIZAMMCr1m2fw\nRr1thQFSAhvB8PICIAtp9i2+dTaT3KY8L4Xip83aQP+4My4ZTaQ9wgGBnWLb\nT40PhPyFz9Cp/GpywgHvWAsbcMqVFO2TA4iMfYMmoikL0T7moPp3pqHm0kzv\nOS6uux1eFp4qt0wiZBQ6cCYtsMWROdNBUO3HjXtwQIzGIgzEBYBGe5/Qd2nF\n6dFPbKFA+ii5hmAHmLK72AfRQvl/r0HLRa3hWerfMLQaHqw/a4592ZhImzh5\n6R13Gkp5G9HpF6DdPyFNmL6Pn6L2haPKVKPYHCZm4ndlL0J43daqE767Ajko\nzH5sS28no3vDVUHVhRyN9OK4uR+OYYf5l8iZToViGoaHoGzZw7CfpKD4AuxV\nkr+BDjIFWGJbeqYB0WiU5rM7pAHaEaJjkmkE+JxGjEGBad4pdW2D4cEfunT+\nuVcw/GlzZaOJWBTylLJ86xmg/b9vwGhnT3wESgeD8lQObUZFxCZKMStj3a1T\ngE18stSL6b0VEd/JnPXVnXh6Bw9u8MzWPifSbbGuKGIT3ox+4whdlGO+ZrQf\nHi9hYro6RClobpDvOmNt2S7g8624GIlsTymprIaaDWkALy6zOun4QxiiNuN/\new2M\r\n=YWM+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCi2c0NZLgsJsgJ3TLQ3XsnySwDOXRulM6es8cjHHzt8AIgalFuSgU8Fvdz7Jic8stKF4AWxJHhRNVJLs3GJx+htYU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611789678-5b248d7e.0_1611789790605_0.1151646859738431"},"_hasShrinkwrap":false},"2.41.1-next-1611790562-a40852b9.0":{"name":"@xdn/core","version":"2.41.1-next-1611790562-a40852b9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611790562-a40852b9.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-8/I1IqwDMBYp5jCqDAOlecHR+ItX2+Vmf/8X8VngRzsNA2MA5JwLsiRPdi2bDxHk6+UdTpDok674rBXckDtttw==","shasum":"f3c51fadce8f4184af6f606572e1a73b389922e6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611790562-a40852b9.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEflQCRA9TVsSAnZWagAAJSwP/Ay6f91QmPAFlEGuaWWD\nF4O+wx2LfxsBd6Ze9TaEG5/Wc1sEnpESxB14FzvdhR2JhYQ5Gxx9SuuXSdni\nmeCYyaNI74YYWO2wCUHxldcaFmYpHhCQliwFuEM+hpoOm1qOOsQzKnXkjUyW\nBxVTdRnyHwQJvCTdjlJrUGVga/fkaqO037yyK5rQJB6DT75OOMpAzTQ5tOa/\nhJHF0h0MPOAREEkE4LR0BJ1Vx04Qcw/6FslbksB/AXmebSpkA9cwCaRKqje0\njUXUK64hiKxH/B6XPv8DRPj1iKex7SIj+3W2n0+psmKpUV7xQYQvQH3yTbKF\nRhH0WlP1G3MIGvgg0C5FXiFwkDsm+qdSKiIMq4WsyawCALju4K6Echz/T6PU\ns33s7EJlPw0SefMKE9fG/5Vbps4ViQNP46d0Mj7e7DCkej8T4QYhBbDRB5ju\nLlTq6ZZzG52HWCNOZF1Lp/V8UpwQ2gzephIW2ys6MMDgtAehxuPGLm/H/DT4\nZm7dXxivXYQfMTubZbQOTVL7+U158gxF6nYfdOjFkW/kOr6HnPrUbBq1xanG\ny2gHolUs5mj+oUl5AhnNph2EITuB2vuvMWhdGOkKsrLHglV1Rdpk5lRMXkz1\nJsWSi0/zoldLQliOSYxw6L9YiaA/iQbDOGjjP1YyAmf6I71d8mXFfvifGiJA\n8iFz\r\n=9AdK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGl5aKAec1yVGsHgxUFAgPoSB5CYfZww0lVSjhwlfUWaAiAPc45/zD8Osu8EVcM7HQwDGPdbT5G+JNm9KOGBc+YirA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611790562-a40852b9.0_1611790671621_0.4437679819977942"},"_hasShrinkwrap":false},"2.41.1-next-1611794089-34cb79ca.0":{"name":"@xdn/core","version":"2.41.1-next-1611794089-34cb79ca.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611794089-34cb79ca.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Uwr+4Nq2bBmDgwpANbt46lYD65b4mIebXX4eY/LuL6EVskU+j5dZjSgED52tKBQAjgq4owWe5UNUuzDgE/6ypg==","shasum":"85e6f0ae3d54bd10f6ec1b3b954af27d55548f37","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611794089-34cb79ca.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEgcaCRA9TVsSAnZWagAAzEEP/00b+eB+FraCmJywh/n9\nCzWWGaJAgIYO1SzgDzwPeLfqZ2gxVxAhx6Gl9+tXRdjUK1WICLG+TnJMXodW\nVu+HGNwkvTGhXGPQnOfU58aPM8ZHG4Tp7hSCIflppWnFBNiG2uUDQiOb0M5m\nckA66fEQNRu+cpY+2N/zw4zp5QI0wvobLG1yLqPE8pNGIQNcmBm+MCr2raaY\n09GM8P6myyAGVZcjI4eFOi62hhvfDViwi0SLu460zmnekIJ5HhhiI7Fwgf+d\nKfwp3EFNL81cGp5EAp9YFrJl7EQewEBWBJeTTZTlkeuTdhH22hLcDRWGA8CQ\nQVLjBSiBknWwMJZrNTLP0oY+J8IQSqauFyrVR+iatPb4UTcEyOni6z23mV4f\naAPOHklH75NhoSFJq7d1fBTlXORU+CiHGNAtt/qLo1DnPExE1vAQuB9kRpWF\nGJGRkjML3nRcXRTNR/3BcDRVnxmVNxYKKtqs6JD3zmlEKUsE8Yhtt+AkvFWd\nzWB3R9Q+Uh4FyPacjz8W6hK5WHIYP8PGHx1V52jMdkdclywtJrfSg41LXgrO\nZNe9/7tWpX7DT/0GKmbMHUscizppihNXcO8BVv1qJKWMRqFRA3UPPXQZQ9jk\nw1ysE4PUyr59FTGLTrPHh5VweXNwkebFb1YCmYCALW6uHie5ga9Aos3Ft4Lr\nvSgJ\r\n=i3sh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDFi6XlYVoZC56bmIjDHENyJw1yzFKuzZP1BCwn6ePbuAiA18p05rNehIJ7cPFahl1qfKbffaCJ5z/+EpIVl7rvP0g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611794089-34cb79ca.0_1611794201982_0.7647824163598289"},"_hasShrinkwrap":false},"2.41.1-next-1611829606-fb6ec9b9.0":{"name":"@xdn/core","version":"2.41.1-next-1611829606-fb6ec9b9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611829606-fb6ec9b9.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-aCd5fkGAsvFxQ/dudXnF0ZPeGMy/Orwi1amlKiCSgbmIvhOFc/lkAFB1ZHx7j0pg8zpQg2DpPqXcQkzSAyOLLQ==","shasum":"0626b10534a79f746200e5d39be7064dff358cd5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611829606-fb6ec9b9.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEpHTCRA9TVsSAnZWagAAglcQAIZFhwCXV1Ua2KzTGwHR\n9wUwtvJmmJ06Yl0YcgQlfKYyNkw5pdyTrh1cg+nwTV+8DHKeKpzpwOxEFdUS\nzf62w9cGIne0k2OXVlv5a91b6G1Jizo2eY1QXBmgiCniphXqMYTEfIQ9iPqC\nNaBIn8R/FDf/n4jRIZP5CYqGv3YFSUp8667McSW3X2zQY0WSb97G4sxKbpXt\nxeg84Ovm8RQ1WNlMD7m541gWKHqHf4MifLt6go+YmDwKJ9RDXyoFlRGKrNYf\nn1rx3rhO+xYdLLzmjendScecofbqpOEpJ1h87Ek27ZoCFid0ir4pS+6JERtl\nnlUOSb79S6atne3ukLfgOGhWHH4sRhsgT0wOz14xZbGeg1by4C+lLAfIxgNn\nLdZ/C9cYVUviqGXz5VI3O7q4WhJtzDE89955mUGyoRQuTazeRifrCCTrHFX3\n6smCtr+NXF2ZA6dwJZklPZyEDslHVncFOlObRDfEp9SC5UFlxTN3RcmX9dnQ\nxincJRMIQz5u5QPyPCChxMGniHDanLHkVBT5uw9uPTJfggDB6JsbA97XAaEV\n8qu/IWTKbuKclq+sADhj0vOAy5kDMwoc82K6ykaQHA0g7QxvjB/EZmDcVci9\niofw30KGUg4O6QdEs8m1iHfEpKCvFm8dMZfEuD0PugDCVppVw7cQqdb93caH\npflZ\r\n=lt8g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDLmcQoD62fNq5S9OtUg1gDQVxjqepPSifBtTAtfsJU5AiBqPWWxg8RE+GvyO+6XeZJc+F11K2eRRnKTPs3siHsGbg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611829606-fb6ec9b9.0_1611829714926_0.6020142687275218"},"_hasShrinkwrap":false},"2.41.1-next-1611843432-13e74421.0":{"name":"@xdn/core","version":"2.41.1-next-1611843432-13e74421.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611843432-13e74421.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-wuBDcdLftNY3nCYXtWMIFub0SsbSuMi5U2XihInIJ1uB2PiBS+iTYKf6JX2J2i79FXj5tKVGTm+3JuXUxC2QFw==","shasum":"632738aa1d3192b89b2f1b8c3024cc6be960aed3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611843432-13e74421.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEsfyCRA9TVsSAnZWagAAgr4QAJuCqLHAXFaKUl7r5Dgy\ns7qMkSjAQtHkRcsSDc8WtHkZkCKKTYpqW13Se/Su/Mp2pPjNXmEd+VvAs/cV\nPa1ZjJaYiGmIuX2g7C82GlFKVleZwpxL1Il1Vx2SbQTlQuN6bFP6EpDA/qir\n4aJardHslDQzigGwggCIGqxR5ubJa1YbwYNyEhe6yepzs0SIW7e1bR+/tLew\nv/rICzzDie92ybEja+LD4jBU9XGOOprpj4etDrrFaS6ps44G06JjeBD+lWa5\ngIostwrF5WM7uQU4HhnAGKgUJXVvND05tgHFr1aInB0h3FBRVDEUEtkMMnIR\niVFTQnggwghMmTtdHuF7mi1W1plZ5vw3qIMmfq4qs/vCddX6MePdFG9kKNZP\nyRfmtPZt7GR+QlSBkgFhjcyo9X0Km4+xO+CUGJTWH/qGiuo1bwR3YLe1IVcR\nU1ItvzdjRVixhrmkUa17N9BxWkizPZw1eDhcEJ8QHaKStFGbs0RGaIVTSatX\nNCWIn2p2WkzmPM1CNFVCfuc5f8EZ6Avy97a0QvMMKjQMJmkyB9lDTUg+UF/j\nq9DE3o5Xz1wuIFrYyjHPbo89gUPrD30r+Tuh2a7qOvvxDs5UbLoiCQ+9dazP\n+uNKpEs5l5kq3T8cQE13RorrrktLUGr3GCRL7dX93I2WwvjZt2TXReNBuUDs\nJg3Y\r\n=wEV8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNIhG2nJBTkglFugK7AEjSXKvd2bfdqJCHdZnUNMxnigIgUqYORw9I6LK9kl36uBhWyDN6Yje+O3IFrOpq8z00lVI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611843432-13e74421.0_1611843569456_0.05956657466295234"},"_hasShrinkwrap":false},"2.41.1-next-1611845563-d86e5de9.0":{"name":"@xdn/core","version":"2.41.1-next-1611845563-d86e5de9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611845563-d86e5de9.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-61LDyRDS2SCLyYHUzk+64PPMb32+HZk6EASNaCM1Ndx5ywtq4mZulL9Gwvl5RBkHjvRTqNY2UE6YLJ1ZPXtA6g==","shasum":"9934fa160c8f4f918515bc4daa5a7374f5f43cc1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611845563-d86e5de9.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEtAvCRA9TVsSAnZWagAAJJYP/jPgK+ALmOFGsgfXHeJA\n/7m0DH41yNwZLOKqkfu6kbF/5TVNOGPDqmB3lkOsj0G4tO0Hlm+xOI76MIpJ\n0T5I1wTO802tLUVq0HTk5Vi5j/IT9nIiV4/04ANWHMYqbAqB32GUGst1wGpI\nErHkp7TDyuMu8lPDOO2Orsu6Rmqh5gr4THWlU2MVdEXh73H7Qntoj/nHw0BV\niKbpRENSBa+MNTAP16G7mhaQiwdRXA6b5Q9G1AHAAqq94NUYfg1ZNW7U4E7L\njmTyfW7Wgaxg+0R6tJViE/NUliXQYmLliGZxQuZqGM1naPsZR1FEv5E47x5K\nD5zqnXqys3GVWHvwSnracPZftVSC5/UZz5i4m76YCcYjitaW51jsxjHhr6kE\nKPtQ1eQpSuUGeM16v8XszHCqAUBTRYD+4fH8hz6B13w7BoCb4cZyFNrs8rKd\nVruvcPorzY87bRWLbfmQYPd4FCFWCzGbOTBccPXM5bHGMjZS9PAGQQpe91XA\nseXr8guUSG3NtsCbhV+cswA3mW+BtotrCe+ZW/IYDiGJb18J8oWC/YrGdC4F\nVr8DUsQg8z4f65p2LEwf2wEpcemm+rO9i0nbVL/oAo1Lg7sn+RXXnlIlMEkJ\nFc4ySu+QMtY/iSJseGLeZ401ISYVaDfiJafK0z/vZQhBo3+/YliaNZNCg1M0\n5Lck\r\n=20sK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8Mtqs9BuJRkIhMgYw2f2xZe7tzAsF/Q2009f0J17O5wIhALQepMa19QvORv072uzBuNA5uyMahluyKHwiJuZIO3pC"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611845563-d86e5de9.0_1611845678135_0.852251142721641"},"_hasShrinkwrap":false},"2.41.1-next-1611848320-129049b1.0":{"name":"@xdn/core","version":"2.41.1-next-1611848320-129049b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611848320-129049b1.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-AGdOjCKnR0hMDvspSnVDM8jcLhKO/fAJpqVPHQqmXdCu25R6kyQP+BGbGV5QO66tSZkLTnSAWsstVJvEybrQog==","shasum":"2d3a6cc4215571aa976494f128b01302e62a47d1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611848320-129049b1.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEtsUCRA9TVsSAnZWagAANCUP/2/W2McP1rwgkq0h9M0R\nHVU98QeOTR0lhDobMZrMB1DCVG5o+g2OlVPh2wKlNWC91DvvWgMtrsnNHA/p\nA/DtSK1DIlZiJG84Ht/sFvAyRJ49T2JZdbxzZjd+FTHGtnPbTPkASjePy9ja\nbz+meG6VXFnn3wInLnoepgcweyIWsGT1erM18bc17vGhF4tOUy09Z+zoYrM+\nh/S8e16hN9ceVP4o7MSEo1ewZhK3XoNcRXPfKOyWMzMpJTnzzgFyAVLN7G4A\nZpqTl2jfNo9TxKX76jX5kwMaEwT0oagGnWStqOj49my8xMKYjn60L3Z8tqjm\nX/nPN6ka3ObYoPkWzUfJByAplwgP07tV6Uk/8bJS08NLGarzG8U5co0xgSMU\nVDtBxKHxAkU+xsS47tazYm8hrz6Tg5v0xseI/jEr5pbyxC9Jqu9gZSUFUwbh\nsL1aGPrxjSteKqQWblqmcA6P7jxFZ4rYVFqACYenAoeRyJw7NQTwNi63NPj+\nOpqPw8xI0cl1VII8T/6GHFHC1rg6eo+T+wIiY8qpQEu/qu0M570/fe2eDG/a\n85fxSuzWalcyDvBJ1sXeREwvGxLaKTLzw+sK8+kb/G5N44bnaL0pteFIxAGd\nuBecxbTAN6/v5L5Hp0tO3q/WtdH5s5+z0Ys0kcc7y5I9o1eUKu3OWjrC+ixu\nxjlC\r\n=Fbce\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMO1u/5AQKpsfQh5A6bGbb5PZtxQJ47Zm+wKjAw6m1OAIhAJA2G3D/iGGXpjlwD/2IWNJOf78L16aMxN/ZhdXsZlKZ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611848320-129049b1.0_1611848467883_0.6448579303523392"},"_hasShrinkwrap":false},"2.41.1-next-1611848480-2d556237.0":{"name":"@xdn/core","version":"2.41.1-next-1611848480-2d556237.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611848480-2d556237.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-9b842BEuyeYwK1jNv7lvIPJT6aKgnEVdW/vojKEX066G9IPOhSC1fRaF1qTJjNHFqEZ8By0Nq+aPmmc5gAraMA==","shasum":"8abbac4a38bbd34fc2380c3b009f385974b206e3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611848480-2d556237.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEturCRA9TVsSAnZWagAAJPcP/R928vCaNdE+23d8l7af\noXDOTgeLXS7umNg8CBAm9cdx6rQvZayH5nLzxDJcnfPbribV6W7FyG0Rv4Vf\nMSfqFN4NmDTwqqYiU0F+lAbGICmCNq8JqCei5nIAGY1+ROSRZ7cfZ/5KcVtA\nYxN7oSDIl1pF31VRluR9DmIm/scEpOaT2wjBbvtOipFIyQAjmyUsvS2cAj6f\nLQDwWkvEwUH2xo3MR0znb8YcHxAIhKnrKg7JMRi34WCBjnyNhbFzb1Rv8eZn\nzK0ve/AeH5ZWCN04uyGPN2N9mBve9HW2A8ZDHT4rjct7xjGwldZ8oa3OIYvy\nqDfD99wd820A7lPwZsrAt3JaTg8emVjVfC5ZeKSI00/Lvu/XU+aiz/XnlE6h\nouNUOE8y3YFt4SGWe8pmrlGA7O7OjfJwK2qSD8vaXTrv+LSmZ6cUp/UEAHUf\nvV+jK+AyJr9LFDnRsYdO5XUikf86keKT8/NX265319/eqBtATF/o82b9J04/\nJWIgN1uQXcZIS/a9fbcRHWg7qQU7lxxwEXcBllS91e35tavTIJoKDnjOkQBG\ntu4bcoIFERjZkJNLtsHYic/F+7M9lISKOTzO1hDx/lHsk+qXDKAIDj1Lthh7\nis+caZBEDiRzqSCGvppiJI1ioUDPRsWLjVnn5P2k/JxIB4Ri2XSBryr62dLg\n2WQx\r\n=91Sa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqY5+F/kgg0QDQO0Dopbdhypw526W5bEqA8Aa0j7EDSwIhANNHQFpFoVPZy79SsNN6dAdEj2KIJ47U+rtTAz7hIwdx"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611848480-2d556237.0_1611848618659_0.2253594157437211"},"_hasShrinkwrap":false},"2.41.1-next-1611848860-346d6daf.0":{"name":"@xdn/core","version":"2.41.1-next-1611848860-346d6daf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611848860-346d6daf.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-StmoCbWEXiUppSGkFKvbsPPBpBZ/XOESDgOlHJfoP3QsMcwSVjI6UAdEvCGouGjnzNQoruAH/50WxxijFiQGyw==","shasum":"ddf5b57ea1e46e20cf515bdf7e188e8d61013658","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611848860-346d6daf.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEt02CRA9TVsSAnZWagAAilQP/0wdKn9foqSalZilP/SJ\n3VDgEsKB4vheTAKRoo9awlUWNS6k+LTWrz0GXJmcOKncR60a0ihNrlO0dEn3\nOfm0A8dcAGfbKx1iHmrdxnlrdySwre/Lvg60mfdqTXSDMgISO9bI7VKXWrjS\ncvYupKSUoRyJfefQbbarx13v9lFaTkVRosEo9k5GVWC3h49HxzgHUu3Lm6a/\neCfhYa/6UaDutrj6PEq2YlytNJYb4cI6eW0yM9WRzF1ULk+HzNCsJL0FTdpU\nu/+J9WL5/68oqCleqIkEjBa54ZyUcFE5Nx2o9nz5nMnE0NaCzDdNYV05j86E\nvPUPpJ8UtRrtgPZAMJgGRcK9BAJhI9OH3P/LoB605eF2W1MlBw8/DAETIfxH\nDCPn/LGFWlrvW0+gxhIMt4rfKphFutE0NnYAqOrnRxnaI/wiYoe2yEiT5hpY\n5Vdv1XQQb/2A8493cVNvrOHIFHeqjjW+g7SIDGjGNR3lFWxATMRCui8j6fOI\nMllS+5p3bALuSifl9WiJbnA4kpyhTLPV6Dc9pPWVwdzhubkastqBMLAB5Yg9\nnhgDj6cuftuhHqeA30fVA1UoiOYcYMqUA34sI6cmT5xIPQ0S0ZJJc1Tm6d0x\n30t6UX6ppbl0nGxhrI8EfEu6aqXhlIRb7rJk0wJ2ZnP6Q2TMsrhKRwgMZD4I\nuibI\r\n=lUO5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDHcDAUm2q7X7WburUOQpDP7Zh5bGtx10lR33W8T8i/0AiEAus2BK/c7Lc3ZHEp3ReDe/7/yr07qAJPNWsf2YD6xFmU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611848860-346d6daf.0_1611849014018_0.7706966663774553"},"_hasShrinkwrap":false},"2.41.1-next-1611854398-4aea7e11.0":{"name":"@xdn/core","version":"2.41.1-next-1611854398-4aea7e11.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611854398-4aea7e11.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-IjtJbZHHT4Ziogdc6OHyOmKKMrbYqQHlav91H04gAi2ZoL+Ps0ZXnv7a3pjdgezN13ZULJV29C8x4SkgcbkzOQ==","shasum":"f3d4017f0784acc548661bf2ae396d3629fa33c2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611854398-4aea7e11.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEvKzCRA9TVsSAnZWagAAqSYP/RFdqRMVHB45AYm8u/C7\nvNetStpQJPfRA9WeCjFK4+9viVdANzDnHfg70zQy8mMQ2RW2Y6kZTo6Tdt8f\n/UOkROxsx8fOFzD50O/i95nkSboFViwBIiU+na6AQu3ZrpTG1FrBVUQMf3e7\n6IGuVXFthayjgiC6I25RN/KpR3oVEJgrIm18W2skGMKZbr/M+H5fMGp2NkVn\n4560mZud8t7hNt8elCrr+fJwrt2Vt8uP7eW8n5Ll8zVBC4AhXz+Ti5gzPC/y\ngSL0wSd1Ih1hkwWR9zIRzulxrOuMj+gyJPBEuyYt+hJihFvlE3glJNVNJTJi\nkYGFKJ8V/f0WKgEHfGn8/+DrJxF2P/dy0KskVa8B3EHYJygE920Vwa8cXnHE\nOmrZSsjLTBxRPbEjHk6ZtvjOYg0+R5XeS/M9Xv2u/8p2YHVau69BzpIZzk+O\nHwJS7v8KeFffkYDnDrPAc1xwP2rm7V/MBkLSrEBHvX2aeOLeUsQKQDoEBC/r\nONSKwaKC5Yp/5IS1kFkJv2QPg5hx2TJAQ25p4c7buHF/qC7LSoVUBTCbLJLJ\nJFOV84npHvO33K82/iJUUO4M5tYutnLSZYFo/O2pE28mYZtHrWVgcTXDl2Yp\nLQHv85/hldA951AEV+EC0dMY1XN7x96q8H7IHGaef6qWtRE8HnrOlCh5fCW9\nwFB9\r\n=28GN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDOD/TtiZbbvyPx/Rjx8VmwovLbGcRJzQxjSosuPj/reAiBCUa6Xn9uEMYW8uekDplbZhC9giUmHlJcCI6CvidXSyQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611854398-4aea7e11.0_1611854514933_0.5266208596722946"},"_hasShrinkwrap":false},"2.41.1-next-1611862709-29a6519a.0":{"name":"@xdn/core","version":"2.41.1-next-1611862709-29a6519a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611862709-29a6519a.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Dn9q89QKCDHcDWPFh/fBMxGxiQ/pjRd8zo27oRHE0yyD4rM7fC6CnNnjSa1wGTzAOsFUet3XKQcLef4zqbzr0g==","shasum":"d12965700f6f0297778fa0b143af82c0e92a2f40","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611862709-29a6519a.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgExM8CRA9TVsSAnZWagAAP1wP/138rb6GWvmuOgarXzZB\ncqMrSoPI34Xfcfdw6vV+Q1q6ggzGob+1EeVw/1n35hqou8fn2+ttHvD3H176\nOGHdPj/5+KFi/W9ce8GJV8mQqKEmsXq1akgOg7EQQiGJoxvd/NAZcM8/WVkw\njUoa9xNCtBRefsl5do4sEikab/BvmymlfL96ls0jMcSPysnoDdX4Bq3zaIUX\np7/1RUMQEz1LhF3Wdgr5SIb/uRdJDVdbAJ7wJpCmQeJIS7JssBZM6MIeo0Q4\nyzRW5cXwJIq349cR+SBMvtE537t8M0A9Mccwh3EkdW4pVZa1TPGpKs7AbDog\ndxTKxVhjIFBBq/E73LwRNNubdoR1bYRPjtVtxPoTW6STKUUD300uxUysRbJP\nknJDAc1mf5q15pvmYUiWocxV9pNuAcey3bh/zLLzE7hDkOA9vH3kcUw/sqVf\nzmke0kq4dZ6fjpCHi3Q+eJ5B0/LxYTvfsEKbELO5T4QPxBMqWRvb3Z9Gaz85\n/MG0eXFOgwlqM++zb6mkjJKu4+M0VnGT88h92KUPnNExmDw2fOcf7nD4dq4f\ntk1EQYpY0gZjdcG3IEvr29Ll9zR6/l5zEeG/erdNzwPi8KBcE4+sQtW4JrWN\nM+kECHzilaM4zxXMvH/QFbSw8uGyD6fSI3/6bZ8HeyUPjcFs9RjFfLSvS9m0\nGbIz\r\n=QDIC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCATbmDVwoiiKMSN/g8LtYWkcDkjbQgQCXwjZHeeBWe3AIhAPNnO+Ww22TvIboz8PrRfBQ1geII7JbhWFxQyW6lOKK0"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611862709-29a6519a.0_1611862843546_0.17845015823570054"},"_hasShrinkwrap":false},"2.41.1-next-1611911942-39183f2a.0":{"name":"@xdn/core","version":"2.41.1-next-1611911942-39183f2a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611911942-39183f2a.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Uqp7O6u62QeLoyFRYwCY1BIW8SVeMWjU9GE8Ix5YF4tbcUWldOnBaVe6Nvh1hu+oCTvCrRzUS7CyZPa8cI3cKw==","shasum":"1313afca2101776de7465247f6283b3a2f3fdfd2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611911942-39183f2a.0.tgz","fileCount":174,"unpackedSize":665272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgE9ONCRA9TVsSAnZWagAANC0P/1TqHSA9W1T5fdC2lDDV\nIND7jmN1Gh3iZDxKjMMXCOUfEYWlnG610pn3ukje7Gax4fIIGJJKi26O80XX\nVYq6KPERGGcmxHLoEAhexaD2H/aYmYT9GHDYhuFRpFOHGfaxAksEPZVM/yn+\nalP/D0itGBF8Pn1oSLTauWcGDFGqelQJGb2Dc1ZRXFtZThr6V3zKtIBzRtcP\nfdWLmqT7aBuU4Gdx1EHmSwRSs/KOMsFsysdoNzaB+2hqg25Lfo1jImkh1CxC\nCoUNtOy2Hit/z5bxyBUD91o8kC6AKNOpD4BrorMbYxUsis41QcdNdPSm/Tyj\nSorBVcgq8CoTdTYrtw2vYaF8XDdm7Th2i9+6qVoFVPlDTrpwSd5Vxj2r5jQD\n3Iz2O2MXrstMex2o87pTMV/Yk/UGzZJtwUler2VEIbgKjs6hYCtmdc9X4JMP\n55vRZ+GihWrOqrkBtp2SOePKU6C6/KXQ1N5/rhNZYN5dgVX3jYVK9ttexSJA\ncU1RbtSAalpJqn7I+dBH2C/7ybknmQubAdqeSWpp9hAW60cLwJZRDzfXRkpY\nPhEZqFafDPm7bHJQTOtP7xGUWXtHZd5MRMvwe8/TOdgVoW/76GPC2c59Ln5n\nvwRPOYm9V4gfPUzwR1AxRtLJ/0gAqdIDBS6wx7Vk313fyG/PZspFd+2fD/uh\nQWqr\r\n=3wsE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQBM7fFYyLYjLVB7cgRXvZkYQ+SzG5cH66blOFOE4jgAiEA8XmZTsKcZwZhIiC2bl7gE+Fh1iKycGVnYzDhPPIbVx0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611911942-39183f2a.0_1611912076452_0.9501219711337592"},"_hasShrinkwrap":false},"2.41.1-next-1611919529-5dc24d81.0":{"name":"@xdn/core","version":"2.41.1-next-1611919529-5dc24d81.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611919529-5dc24d81.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-DEOAZbixGzs4hYG5xedIi16d5r8fMYf1+RnQp8TB3iUUdio6aD7XDjj+/cx/j/0s+WmgJrWJLMmMN9PPROapuA==","shasum":"a7b98b6959a6304d38021afd40c1143c03451a3b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611919529-5dc24d81.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgE/EpCRA9TVsSAnZWagAAtfsP/0964V0T01T3nt1+eQTT\nqhldjkiCwFMpoLu72ja2n+rxis8A93U0EcMQ4kr6H4jwlfusYolYFHzLxxUb\np51kEC1dljtEnF9+AM1i8c7iMPN5lEu0kBVLc1vhbhxHr77ue0Zi3QAnB3CY\niZvQcmUPn0m93fCSUHDFoSH34wp7pEc2oZbuPVAu1LpLpLdtyx6JWVCB0879\nTVSqfqBgP7MSMutFOXKlI6uJe5Jo3kZLYxojLSrYmv3EeeDRx3bRU1kHoNws\nmpIFwigLOuaYQX2QOT6h/QBKJYDYG4gKUNtvEoxpWzt1yRYdBNwMVmi/HJUD\nWc55jocHf5w6Dox15q79VKaEAq3nMw4NCK6MvkGVVYvnhEaxVAIv54gXUI3Q\nS2+izrXKPINpmPacTbjXUQF/GloAWfPo39rD0xou53412rZrNk9sZDCJz79u\nZl5A48yg1hBudZi5pKs8DQMqtRDBIg6pE4pC8J8ncSYTCgRHvt2BorGH5kKT\nGoCzBPm6/9HBA5XdjYJMLHTCS92C1fbLGjx9asG48RT/OQMoGGHc/9BHPUfd\nMyHRbN+fY5PM6lVPvl9aKevr1P4TF+Dc4h9o3eAY7XbqgDBcaltPMs8XYbkg\n3Po39LY9v0QAsJ6H9MyYse9J63PzpyOw0M+R/iW5YnHdf/JX5kPGURmVPr8K\nD43n\r\n=SFhH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDP8Zh9Vt9fArPZxowPFGVwcwlvP7I/V6f98AZUvz+xZAIhAMHvKJ4SiaHboau9B5WV4zpzNMTE+ORPrJ1VerL8BQX8"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611919529-5dc24d81.0_1611919656529_0.8389293885050799"},"_hasShrinkwrap":false},"2.41.1-next-1611927661-23a8bfd0.0":{"name":"@xdn/core","version":"2.41.1-next-1611927661-23a8bfd0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611927661-23a8bfd0.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Fv7r9oVaD67xiA47YxYu84ZF2UytGOiTbt02aOhsOx6nK8RSjhHVRgpV9H88PjQdYA0ZaYsQuyqEGjYcjP5wHw==","shasum":"d7559ed2c776958fa4fd1349bf20debcd0d9ed4d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611927661-23a8bfd0.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFBDyCRA9TVsSAnZWagAALRkP/iGWzjXRQXkMesvqCzkL\nFxD/syfYvOyFqRtMaxYCppTv0XAcmWP/iDVDTpuj9DnC8Aik5Q2BfABxNP0r\nJpZ1OSCvdf9a4MMN8cfTSpsmP48X/BoCI32tyqqPavd6MBOeiRILONVk2B6b\nGzyTPWsKkuxkagt26kG5rNMLVuzceoNybABNK5QUmYcHiYknbeskXiEsTyNQ\nstS5mlyZKFaSBK66dgdWth4qvFOqPQC9ppTtDD9V28YEGkj9PVe8DL4+gPb4\nanoMwt3amPGW0/y7w+tCIaNsFNhgKTYAQ2hcII4ijkGBkx0QaaVE149FwaGG\nFClXYbWGkuQMPHfdJMVAxQGd+JZDwB5xD4u3347hQxRVx0gVuRDUJNG7w9I2\nEH+rFBxKDp0woTC+fWxxTtY11owoureS7C7mUbSdLFaDGQer56sig7AYGo4E\nCWSxG98OQw/9MRIO4ItRUNo6I5jrP/FuAsIifcj07huutKcV5q2lBtLr3cBZ\nkh/aNk60BuXRecq7kMXqbhYlxq6u6qMAPqJkLttNf/RSA3gqU6KveFbEFobx\nTiTx3fGnaQEPCbuPbcPtChok+Ere0CuZeu7WKoIjSTEh+70nGjVtJxDhGk35\nUU2jgCaDuR2cy3fk8IAAFgOCppyEqGZd1dgdR4W2xoChepgxyvKCqwqQwu6M\n48Jv\r\n=C9dB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFEVzOAzMiz21jezQEmCW8Ebn9wiCAkxlpJBmYKYhcyAIgeovY52tEYaxs7u+DuB04c7VB4WLFhmbYufakU+15EXc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611927661-23a8bfd0.0_1611927794178_0.7446750387410572"},"_hasShrinkwrap":false},"2.41.1-next-1611928258-a7ec2bed.0":{"name":"@xdn/core","version":"2.41.1-next-1611928258-a7ec2bed.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611928258-a7ec2bed.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-rE/44wJ79tEc6VkJekLDt0pKkwWe2O8N0SWPjgkN0VqGmBMFu8cIasEmisxVT8I/WdhC8ZriZDG9RNEgQqZWZA==","shasum":"39c69236e4c6b1dec5ce12cc5b144852fc93c722","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611928258-a7ec2bed.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFBNKCRA9TVsSAnZWagAA3aIP/ipC0OzvDzIseJU5LAyf\nyS0lbfYgwzjpB/LndioUVUBuIx1T6vjSaJeaS562Fk6Y5mOj8ejNlRJhbqlr\ndURMa5RIZ2E9dzwHo5rdk+Pts+a0zUuIu1zWztCoh60TndUBt19LWWvy/9bj\nc769o0jDM05SJaVd8BNpHCq9/HGtzESAlUX1pIeg28WychC+webRt1CFNHGZ\nqxqw2Bo4+GNXCaNISwoTP5RRVJy5NKRUzJgN4VcKD6oyN4y7uH5EzJKs0BsR\njk3VSD6BZCIY3oqwP24hy/gCA73fVFGNhSbVAvZ5znWIirIte/CDaA4QC3t0\nGcTX/NcZpgEOBnJH/NvewWtnw/sXTlheKiQSzMJTE6T6FSDBdzvORgbTXV45\n3sbbbMZBKm19gMv2hj3jt7lBsY0rM3xewUXZHFWDclvmm9CGwrsy0KkuQ20C\nqF8x43sQDysq0rTHF6xHOcuRX876ZgdquKlbDUAVnfHs0NdqNw+HwebVgjMd\nT0rfhdh1DEP1eYcOWCjB44490wGZvvQ2UpcOJxtz3BR0fVx1KaSqrVZzf4uV\nKvQcXg9GKsUQG9i/gXEmJ6rl7tkVK8AGosocygMUc5xD1s9VsO0XlTmPZacr\nafZ1S/1yhkf4HXTHdl9HktsiQGgyp9whBTzeBgy3myV/QPHrRMBdQpcvibRn\nDbul\r\n=0WLq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLvv3ddx29o3tS1KF4UrNEbn3lLrwCZCJQjmsssLq8BwIhANuD21UoH4OheX9o89oc7oSdSrDJ0oUfEdKjeScrQTAM"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611928258-a7ec2bed.0_1611928393964_0.8686897016991764"},"_hasShrinkwrap":false},"2.41.2-next-1611928539-648c6030.0":{"name":"@xdn/core","version":"2.41.2-next-1611928539-648c6030.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1611928539-648c6030.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-T9TVrzZHJt0TX0rxjFfVhbvgscHVqoiA4RqTEKLgo+QwuXVS2sNR/ABwV2/i9M7De+A7P9nSaue16eavgf1YCg==","shasum":"c630ec375899b5e9a00e62d248c15545190cefb4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1611928539-648c6030.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFBRcCRA9TVsSAnZWagAATdgP/19ORKSWhZuBHhXbjB53\nx0+Ye/I/umm7+z5WZf6qG/0nJUU1NVaPLjfMkkHEs8jhPUm9zW3XGPHTU6g4\nScMXRA9EDp4cd34A9Qg0ofXjuQN6myH9MhJZ+Yo8kzugHSj0q99Q+q1Pivin\nxVs5aiCDeoAOjr0l1hbv2MiV1pMs0Dzbl6kt16Qqi9q5mMcLm19896Bn6xfL\nAo6LvB71+wEdqt1K63dILcwYKhAJRqffv8CX5Q3uvNs61MRZiPC7e7PLbSWy\nIlhZWTfRgo7vfXWDvn/c7wGcChk6+P5S89XEJ55YueMpLR8hfYLxPqGI4jnZ\n0o56Xq51fzog+8sB8aqGeAQGeUZIyoL29ouUlI8MexRsyxrO74zXugqPTO0n\nJljMDZnpKgi1E3AbVBu2jWWZNYUPJoBV61n+jIItg20Q9JLuplnCD+GlRpMk\nuC/0vKb8kfw7rMYJmVAvqUuKLvVFWVpIkJyCFpKFT7zgt6vq52NHA/S/c/cy\nSFS6zKTF2rN8ZQvDCre8SL+C/WV1tu/4Xj+dkoNG5V0Uetxf7ZFCRbUVDMD9\nD4Jp0coo85hnynWJRvn00SxjXCX2AKPdTetcCqhFsdgdGBj26bdNctV0zh21\n6XSAR89cxEj61MwCuqvqXlGE0YPzDO8jP6aAypehXekkY42KLE0hDRp3Q548\nbF+A\r\n=uYpi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID7wS4+Gnaf6aleRLZSqkKLuGBwPmEXlcRIRnDI4MikXAiEAxSdoU2SFZUpod/TrVNcVpzIwVA1h2jsNnfD2O8z5esw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1611928539-648c6030.0_1611928667841_0.6153056313123875"},"_hasShrinkwrap":false},"2.41.2-next-1611930008-fc8ab03d.0":{"name":"@xdn/core","version":"2.41.2-next-1611930008-fc8ab03d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1611930008-fc8ab03d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-D3Ow0/5sGUyStg2izHT3iEG0uZq9J9zODzx+avPvXeFashOLbaT7HMTjCA8hRntawwYlSnS+HJN7YBrsfHNwGQ==","shasum":"71ec7d5e9d64db9bb0965235470317af6daf806e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1611930008-fc8ab03d.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFBoKCRA9TVsSAnZWagAA8oQP/RP8yrGpVx+IaYyQP2/x\nwwxr0iDptvCPY6fW+pScaC4EE0N3MUCiu8ZzAP/Jyvsj/twz5qmAiFg+1AEp\nBWD9VqprfxvvP6uPNoogCNPfWVu7mq7ieQn7B8G6gAtna+FWd7QmdJNygT6G\ncVJin7yVAI6WrBfK61UFBW+yWYXdTjJjLOT4tiJUWQPYjDr7ICwPpV9WxMAP\ny/Sf3NZoczSTqsYCd92Ufv7PJ3GmLik3ytEauO8nLaBQF9JHA2LeDWfqiKkm\n4ARhJnN/PaqEqZGH4Ewqg2/4cnfK0mqJa+7lJMe7bl76I4rqHgPdI773zB1H\nrKxmfswNizrDfITRzvLF6iyzJnYpu0yONS9VMyHjTquyyj01BduXsiOk2AY6\nnTtrDy589gGpeItXO0ElIyLYXgxHQQ3tI+p9wEtneohhXXxtwo3kGFu9HBfj\nlwSFY9gVPZYodNbhfQTBs+QQiiNePGJWrMsjhfyauTba8+opQxGORR4xlST+\n7sKrRlYwOLznSBZOBhezw9Ye0kMBouTa1JueV1F90i96v07GKh+MIlccPfDd\nutfgLIat+Gzj5e5PPzmNRXW4ito8QfgCu/EmNmygmRDbcgFEKBl4hUOMKWVd\n2/DLionYynQeHObHP92VUF2YR5BLbqqKJ1l4m+me9GL+mscOEnzFKYKHy3+m\nCyai\r\n=VFHw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF3UfqN9IMiRk4oum9yKNPPdj0j8farRfziwu37e8rB1AiAFCDgXTPXo2SRkWI78nP2d0sjK5VS8TT7ssjKFJvVllg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1611930008-fc8ab03d.0_1611930122200_0.7924760670540663"},"_hasShrinkwrap":false},"2.41.1":{"name":"@xdn/core","version":"2.41.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-VbjL+RhyieobPux03+bP0sg1uwMsHCoeS57rNlXTZhbigehvTZ12WpGSbwtlmhWid8vWW3KWLtdatBC6paHTpg==","shasum":"382f10b7cc08e794d2d71b8fd46d1ff8d0731a2e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1.tgz","fileCount":174,"unpackedSize":664467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFB+TCRA9TVsSAnZWagAA6F0P/016RRYzj855+ACSHbbm\nO4GR2zUo7VDqiClx1ybnl/0OPNOLUGuPQnMxRu4R87IvDi3Ya0HuqvrqqMk9\nzxFZUoNZh1bwryJIXqkw0PSWIDLYrlQ3reM2nBxNzxvSEyYc1P/lXmrq7jAU\nUD1Xv9XnPxEQBEz17kDTIv/TDymrYIM/atlGr7s6ZQry96TwMwEnNaY/G0nY\nrbpI/FfzCvmDs6dqUc5X8UjpQFHhr9OC81jd8ERbLj77W9OYWuTNTNhNhhDo\n/6VMsY70sD/pi8sbJhHWuzcuM6ZMFoC4fv5tOC5A9JiFNt4VmkAd8b7CYpz1\nnWcmRSOt5hvCJpAj5SmOjLpSfSN07fTbt26P2kE/LmQQcHp7CXiM40ygl4/P\nxxAr1EJwaBXqIeecSpnDuuOJPSKjJ9cQGCVwKtihclyqZqPOQOySGE+qUkH0\nmMP/qH/IpufIPaelnuGcK+SP79c9U8Wz5pMbGBNZi0xZ5s/l8BG4VMjqPOvt\nu4SfIxtKF+xMgkaSEZdHwUjyT30f5yJk9gLB0AL4Mu72Q2PnBT/imTHsc7/O\nVkuNbCqHIh3ltyLHoCEf+fy3tMSTywhn6/kNzzY1gXhiP+k/QA6jleb9jB/S\nlHdwWBlYjF+WbugLyUyFXujWHB+gUxKBQG+I5qBvRX4yTYQd4C+CYLAXQynQ\n84dC\r\n=mnLv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDBHHzw+C5oE73MSlP46NsDuOIMZqTDzriCPIUjR6kqYAiBJr7YJjoolJIrn72b1fsbDJUmFc9GGfD2WVsyLRBlcmA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1_1611931538977_0.2272307419584516"},"_hasShrinkwrap":false},"2.41.2-next-1611932601-ff67f74f.0":{"name":"@xdn/core","version":"2.41.2-next-1611932601-ff67f74f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1611932601-ff67f74f.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-i9eQt225SH2QnwbnJif/llnOwYeprndgJFHVVRM6qp95VAlRq5TuFZ8B7A3kLA+QnFHYssuLVen4IUNnW23t1A==","shasum":"cbe26973f882150e4a1fa30156c73f24ff2eda97","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1611932601-ff67f74f.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFCQqCRA9TVsSAnZWagAA6uUQAJQgiA2KOytYOgG5CdhA\nkA8pkSwVk3DTwaFOgvueoa7hjXKnxs7ONsU93kv5XrVwDRQWLEcit30cUyAf\nt6+w6k47sJiYijpB2qPaWDYg1MShgjENOjNu7fXMwQ0V66tmnfcJ3xcv7bkj\n8C8V8faKTAoTxSQXlq15uyuG2OnPN6YlKAUpFLwmseeb3ifWm9PDVltohDId\nRmfvhjhD4v7SSIGp8UuDbXXiTKld5/OjvDbgsYtOWVTgydZuamRARamVBiJA\nrVHffx7pMc/tF5cpuUUGHvjMVjb85E6Rl7o9uyTSPyzSIfQ/S1X+NnyOtuBK\nzGnSar+oYMWkP910zKoCAdzJ5kabCGTf8aHSCrM1XFXyd31XGn3RpWwakKQ4\n9GTFA7jp7C3aStsNEwm/CDX+h2Oy05f0/OhCN3jw7/WaY7V3Kx1XHxjvqPA9\nehKIhTIHFqVyV8hlJY1tdmrPIsfxbjq78evPcD3jdV3uQPxKS1L7zxsXFD+m\nH/B6tiWx6KbWFCpBw9DeDuwJRjpZekw0GHzZbx90B1RlaaaHcYrgALsNbYNe\nn5aNqnGHEjA+pyFrlqHcCYjHvr+RwKyynddPdqcTBylQKx1Dc2Syd5zww4mA\nf5N1jTgvwu7JD6rUeLhxY5T0kwx7prS51VSu0pT64kWWxkEug6oLCPRgZGYr\ndBS8\r\n=CpJf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDmkKOCH+QApFvnRLbFUhXEjFhZil9APEShos5qyUFxvAiB/wCm/GQ7IZhsOuW16lX6DmX0Hq+/bACrnwsb/dEnj/g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1611932601-ff67f74f.0_1611932714064_0.4582763047778269"},"_hasShrinkwrap":false},"2.41.2-next-1611933701-ff67f74f.0":{"name":"@xdn/core","version":"2.41.2-next-1611933701-ff67f74f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1611933701-ff67f74f.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-E86nQM9oG0KkVqVvLewvXn/X/U77Fno4AIINk/Vos9McKluXO4W15Ylobl64E8m9ubDaN4FYezqIdynYMVlAYw==","shasum":"a56fcaa5924d3f1b9a11a63ce7dc60f3b779fe00","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1611933701-ff67f74f.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFCh2CRA9TVsSAnZWagAAKGcP/3o+yzmwGPibq7nAUz4v\naBjIkug3+ACOwnbTNH/+W12Nj4vV9oI5jOGTasL8W3H97wrU4AqVF+BuqO/U\nDKragi4VerYYE4ByW4SAa4zRfElID+ZVPplbSGoKdw1MOpAm3tqRyaGsRRXq\n4wphKijQAIzStLwviZ9duHjs+wD2zrpvoSpnpjuv4vY/SpW3jKHDBt/5ejHI\nsLKgFw/a01gzWOQO4AcVdSeqmvVSEup0rb4BKEY964QRnJi04tqb4TAmd2cd\nGuCxp2H4UWYjWElDUBw6QAZGSOSddSZeVTB0w1SsT4dpAV1WzYkm2FjQCL35\ncTjM74rSrZAfHmN+YAbvow2XvIHOGLPZTKumSyHPdJy9ralQjcs0kms5hedp\nT8qK1TzzfiY0AR5sCktCaTg/dWXTN8Keaa8S4D+dtv4rA0TKca8+lPbvxCLP\nQwDZG0/vKbA77U7dCaRPxf3v3mxLDEs0Hw9AlLD9gL4eS0QSX3ZilDQDWFkK\nqcd3RqXbQYkXLRbm6Qf3FzEq2TvdmahpMeuwdiNTr7GPDKLQ/IQBQ7kZDiKc\nUXum0nh6q9nwzTLZFacSn69EIDyKRKgirQ0e5eJ29/iNXMGDvA8e8aRfwvwf\n8XITO0ePUhXsIjaAezgXNvwPCvX1QXcVO2/tnHlOeCtugAx0wQJhI6W9Vu1p\nbhvF\r\n=xxaQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhmC2TlTvlJxMG3LLQKesQKMOtGoRQeq0olfZjsz4FBwIhAKWh5Nv2H80Qa4J/QmGq6f8HdoTjh0eEWyQaxpAn11u4"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1611933701-ff67f74f.0_1611933813305_0.5614653534562553"},"_hasShrinkwrap":false},"2.41.2-next-1611934904-b01ac067.0":{"name":"@xdn/core","version":"2.41.2-next-1611934904-b01ac067.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1611934904-b01ac067.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-V1Ceq88ZEwgPROJgGdw4Bl06BLgB6mRFlUc8BqRSvnnoco+8xEhTGPIbS+Iha0XnylUzcGvWo1+q0O/E2dz0gg==","shasum":"48e5889d5e591fecf2f0ff89cdb64a0543844bfd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1611934904-b01ac067.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFC0oCRA9TVsSAnZWagAA0JMP/RBZ3X+GIhaYyX9gqt2z\nQlbxp+g5RN7WwXIi3DtwnqGylB10AbPxY8+wVFoVkPq4gOFXkgewUp8ol8D/\nJzGqyQLZdaQS3GeKc3dazm4vktBzrnXF3uyWDrRCcAnlx+4W5enwt9wwBifk\nThO+vgjcoADlNJKQUo/wX4WACPY37IEuvTrS6O8q5ARpbkedzR+VdV02J54j\nZNBS2yhNOjR3oNo6TmWxZjHq88bgJEdeUFUdlDnYfgOMa+Bj5O1A/a0TZPEv\nESEgHjiWoAUGJsC0ly+BsS5+fSymD2IIjvH/SmJ/4euj8w4VhKZ7tcvvEF9D\nPjxyzgB5Y+WEDw/X1kIPQoxH+NSWMdhedr0N1SZwhH5TflkcAB96PC76R0Lj\ncvOTbNyVbdtX6nafEBGEbukO2EDJLHeu82gZ9c/QoXuup/bHDu0/VKD4D6Lo\nH9PCVUtCRk4SRjCxhK8mg4WOif69+kqrtFo8zMBxOwN1yFnfMWQepnpa39Y4\ndoIFzw51hqra3RTuy9foG8mveO+q62Gf9dsnzsorkm3Vh5F3c5OlAxe3vk+9\nQTZdVwV0dOyD/Dk9ejhuB7LBN9LYqqCgDY2wKQ9dhtOfYBkekTVQUDCYCg5m\ng9b5Gan8WU4RvvppzHN9DH5bXC3L+A2CgoBF0OmpYvRr86Mh0JPGzBTB1pbC\n7OOX\r\n=pF2M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDcBnmk8FGpyFRKbdrbW98QRV1JZ7ageQO1aGQ30wrZAIgazHsjlzRqi0fdTce4Y7bhGBIU3YKkqVtPoyTFG2J+1o="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1611934904-b01ac067.0_1611935016166_0.45276787350292436"},"_hasShrinkwrap":false},"2.41.1-next-1611935169-4a9be922.0":{"name":"@xdn/core","version":"2.41.1-next-1611935169-4a9be922.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611935169-4a9be922.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-6mes0kvHNOfNfhx13Ini+4N5s8Wr6wg+F4Ci3lilKbygiUAR4hyrrPhvzXp9wxyqLEN+hBkrAtxuo4MYBfoNfA==","shasum":"92325de8231d01266a80a567047e482d28395dd4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611935169-4a9be922.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFC4qCRA9TVsSAnZWagAAtCIP+wYlh9wIC0YrfbrgojHE\n9Sjn0Zpz1bQohXjlUxobn42MzJ6TEN0gSmSSi9eSgjSWIK45RSEtKEd10ppZ\n8kXdAK9U+bxF7ioK0+el2d9tu2SwgI1FJEsa9tLC2jTZUtthhNRZGG0PJwsI\nRkEpDkQaZ0qh0coKkAO87nYS1yBAeOIs/tx9aMqnEXEHrLZm9E4EiZ9OsHVR\nO3bppr0P8n7XKKMGMFrd24jb1sQOSmL3eQG57pw6/OwzLdq86BkAnAmKwqj0\nQIEhTDubUpT/bVD77q7zrDikmg22SP8Tbiijw1Gb2Vels3+yXPQX92E4LJIA\nUzo0yj/SGqnjdIOJOnAx0njss1mOgJ6hYa2S8tTz41NHn0zkqFe9TYtZydQ9\nCfyPESE48euu5xH3cTlaa9UiJiLwQryKqC3LxIKCMOz+jfRsaI4G49AzJd1U\ndanismTeUyO7vfvq6w6YERw1z1bwdsGTHE7S7cVoS3Eg8GLkv6NlHbqjYMQX\nhaAFLIPAlHooKk1qezFa2BTqiGLCGm/gzr1LrQa+RVQ3fY8Ttf/8UGUrY/xg\nrcTWoxDwB8DXpu7aVcFl6gZicnLTyyNTo76Rsom+S7y8ATy++S+tguRdUplr\nNJ5PI0Br8heqefZsGm9geyascxZNXWlsE6v31ahuYubMFD82ixTifqB1hfTL\nL3S2\r\n=dUl5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVzGDoKA5AoS2y8I2gCvjtSiARenXCYzhQOI9PwWw0twIhAP7baqoWWRDGQGpu4o5L5aHvfoFlVqbnupKKlf8Z5R45"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611935169-4a9be922.0_1611935274382_0.15982212922337657"},"_hasShrinkwrap":false},"2.41.1-next-1611936603-c826a871.0":{"name":"@xdn/core","version":"2.41.1-next-1611936603-c826a871.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611936603-c826a871.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-hG+W0ZfHiZPTK0FJiRoIeigUWqVgW4YMY7cRt0RhL10qGWfbzB+7w1rn3ox3iGySxtFr8U6QuvEvlsSh6zRuTQ==","shasum":"d272fdbe03ff6caba8da110367d24be08cdf437f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611936603-c826a871.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFDPMCRA9TVsSAnZWagAAMTwP/RB6/Rcdiwg3TWq1m9FG\nz8QgIGoZYVp5beywGMtRSERRzogpLrIWqeBSf8wemIGkeZ+p1lcGUgBuD7r9\nRiOAWvUvz1ljQQVR3oDM/nSXunuCJVUdaLov203FI7jKUQonHOudaGjx7O32\ncoQCPLc0iNyalpb6M1Psmxsdam41RGr2CsS3TmrebxmmyJ1oUwJ8L1F2Rg4a\nUo+wZ4zcF/eEe7XIfcQ/pSs9qzMOx6kBHAq8onanv8AwsJpT/C0FNFfv+6yG\nMAHmyS3pVS5g7kbjjVht+q1soR4cwdPON/kwy6wuPEshwy8cE+/H71YSdZpZ\n7oJUJZIA3XrozHoT/K3u4teJuVFR93dJEq0215eg7WXCfxdFjDALP33LLS3z\nrWYFdcF727En9b+7s1Lsg6iaaQ0LN8zxk2ScO6B1JOUa9B+B3qyhDJeFOJv9\n7XSg/iF2QTv6hqrWZVqv0bjH5jIqoOqOjB2fB+ABtSHee48VThziihe34L0A\n8affYFSDWK+Rreb5sDr9zD7HWr2DE3VsXYw5dmz3ay29nUB4oFGpkO86Hbsa\npeg6zt3PEBdpZk10uwrlNIAS9s3iVdPL4kkbzVvbLIXSNdHQfNeAPGNTHlpd\nercvOvLNYF5LzN9n9EnRc6Q1GorZxZTn0pivuC22JzCKXm7S/bo5zC8bJDi/\ntKs+\r\n=7fi8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFmj4QRjmqipl4X3f/zHd1jXWFp1s65IUTHhAC17M3yQIga3N2cgO7h0z/KIffW4woEfdvO89Y2nL4ys8Q3oJE4nw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611936603-c826a871.0_1611936715519_0.2778662610274403"},"_hasShrinkwrap":false},"2.41.1-next-1611938712-ce2accc7.0":{"name":"@xdn/core","version":"2.41.1-next-1611938712-ce2accc7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611938712-ce2accc7.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-s+r/y5rBDSAbn9XHg154uFcYvdYUY6wnrmnLHxZf42TgT67fF8l+RK7nkOCANahdl4TNcsnB1a+2YQgdJ1kmvA==","shasum":"eae12d6bd79322622d3f0447fb7834a8550454c0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611938712-ce2accc7.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFDwdCRA9TVsSAnZWagAA2HUP/0jg5qALqbY00LD3qudN\n2th/BpvPKWVRRnu3bDjCKggfvv6fEiItoAI6DDPAHs9uAvAG6oRq65FfgDC1\nZT3sku0UNCqNXiDSuiEfYN5EyaiinzqMKtWbix5/zGvQvfSuzPYbcP5b9b7o\nrJ7w/9PbgucL8yet5dmhsPpQhEInpd0cGaNLgha/5Fu/ZiEyLusB2PtEUEBw\njQC0WVshO4f2UV5C+TyDIRvhOtrxkmWhB6oKWQ4YhKW7/85GWqeHCasZ2Q5i\nm+lH5efmSvlQb1T1bXwmO/Dgs+Pp80RH/kCaDE7jgAHjA5MIJZUJQLv6JtJi\nw+9OB84QDLiW1g5HBdJrH7oref4aRAOIq92fBAaygrH28a42v0INct2ECEod\nCXRJKTRy8JWc+wOb0R/S/orwNXjjjMYrmixHzU+BCvhJDoOrRfYYKK+mitvC\n8xTgI3rXorUpV4sTWaojwsG3wYueKLPUmG9E2ZyhasuUIBZTDlGazgO8lsO6\nR0Ri+ThZqpw64N+JlEa8azCdOPv0RalPzWXMb7XUbrmIwM/DugRLAoFdqV7W\n6PSGSXXFJwj0j2NrSuxa00a6PCGmOazz5q5vrec0OdgAsSuGtDf93DTbOyXb\n1JwCz7XIOwE8aCFZfISHhsTLKvOj0Z/y8GM3wLIWfN/cg1A6yvLgH9ZNVhXi\nXuui\r\n=5doe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOv9T08qujYBebxpWsuFdrWfFx/I2j8P5oyWSkOi3mrgIhAPUkuNYGtRlsVtPNwZvBtYEXNkCDSX7T6XfdEjgxcsK8"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611938712-ce2accc7.0_1611938845208_0.8507658118604755"},"_hasShrinkwrap":false},"2.41.1-next-1611941496-dfc95ffb.0":{"name":"@xdn/core","version":"2.41.1-next-1611941496-dfc95ffb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.1-next-1611941496-dfc95ffb.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-BnKlOmMM8Yf/+iDDp4266H8uvgQ/pW+xy8bTvbt+cU4hrJKCtoIaEJ1tcnM8SsEdr9YOzrHzr/2DbeLkEc1W8Q==","shasum":"44e2b9c6d40138d5ede837addd8237144a935fca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.1-next-1611941496-dfc95ffb.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgFEcHCRA9TVsSAnZWagAAOFQQAIzNoMDIegFgjvzzB4cR\nrT9bM9u+WzgeFbOzdhcvoyELvPi9wruzChGhOhYHDveGcCLXpOWTVAFrjlu5\nhlwGGFHcp7F8DojvNy1nLiGTdj2fMZGRmiXvj5BINAfVaWeu7QznqiXkS68y\nveR+yDhU+Re23ZFfzCEFvfWKex5m2QaFUuUQyl3KrxALJuOlEBnqSwXpt+C9\ngm+Md+AUGzJc7xtcQpGsXCZu4UwzZmxqb8m4IHkq0ega2px565YVt9dbvBXu\nF6n5LaUIFuEJQQ0nqndh61mK5fgYjxkYm2LSLMEXOzL2PTGasM0p8GFk9WJj\n4utIgur9+54pkPLqKJ7R/5m/4osVWVO4ZyGGMO3ngJSdU+X2Kf2be1ZfwvBH\nmN3fun6dH/9577E+cYaZWhrDIGxzxDcdFTSENI1ztMvQW8n22JZPNiK0CgW5\nwdG2kSu9qVXSv+MXVO3Ngy08VCQFQEUqkIRHkWVU77NeW6mjehb44igoC97X\n7F5J70u0Rth8vy1vEPG/XJrtL2scuWgY7aj3puP5yNW1wTHX8z8O6SRT0orW\n2URGR4a4RM7N6YL25ZIVcpD0G3N/e7beWm+IPwZGwQv7CRfvCms5zK3KUjLA\ndsaGGAE/W/x+fCdfFfaXUL/WjWRa5o4C4xYP5uZAY3DAMYn95zNRK/vApFig\nDgvg\r\n=RzGQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDN7mTJWuLI6zrYJI2o1LFNTXgJj5GmPBSvKKXbaghswIhAMRG8vNpc7Qb1e3BB0WXMWuYWiXQN9wnQ2FOhtgYHzpB"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.1-next-1611941496-dfc95ffb.0_1611941638479_0.45637022606017297"},"_hasShrinkwrap":false},"2.41.2-next-1612173624-263ecdec.0":{"name":"@xdn/core","version":"2.41.2-next-1612173624-263ecdec.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612173624-263ecdec.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-QsepnXo5BH6hgL16GREAFgLoMLQ88r2CE/30CyxEKMgzIuFQrJrpoFhVDl66N/8+MmnAIgxRqonWmMPMe7lCZw==","shasum":"1cf78df35b315d314573605f3bcd3d53631e3be1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612173624-263ecdec.0.tgz","fileCount":174,"unpackedSize":664521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgF9GqCRA9TVsSAnZWagAA3mUP/1vXmoehcbjNQckogZZ6\nSGOAcPLUEdBKJgm7yOiYH0H2NvlBLJsoFB58PM6cKD0DChtGkSyP7SEaVF6p\nPpNDhwiYqIL+PMKm0EMbWPhpGfTvZCVGRIz+u808s7c+DEy9z9+sZXSP4zE0\nzzbKNnMps8BSc6zcZ9AXCcODBAIof2kq98ES+xf5cZ4UMTYViT+N3FGQD9Nz\nXy/gwjGnAhKX1Hq4CDLh8MCKiTfFI/xEwCR2F1U0ZgD2Od9CCO6zWg6Wq5D6\nhYj+bRUAsPnWqtBATDWtIDk4AUQ9xsdK2HRUv3SxLeysxjmcEhPjO0ktcE/A\nVusekeX8Wy6aXe+rArbXyUdpoTVnHCKIhWTr1rfyF8PsIqrSDgTCrBRg0YKM\n+R4o6OIWaPQYQyt06hgGb5lDCcqQryunm1YnNwxkxF3blepczhJCERT4idpF\nlr0HBIJr/5mxwKHBduLTDXD4cj1lLY8ZVf9xgfenYsEyR6XpiN6Zt1ngkb+E\nL98gTKkCihMlfvOB6l1EFlbqgjSh0wLxj6svatsjoDCwUE9hllV9cP7oiirO\ngX4Jw/6tJ4ygxEEkrXjMHd0tfnBF0uvMf+E4pmt0iay//4eWnF3w0e1aUhQt\nTDDbbFKPZrylCUn2Bst8o+PlyEgROvlsmIbtKvlphCJFeVf5Ld8gT71Bl9Nn\n4F4R\r\n=aEkf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDp+s9X5xaTbjXYDDiXjWydVJ4KIhZc+Qc5npaOLcFR4QIhALoodW/qE5iQUOo77B3dpq1Oj4F7g1W6WYoOWyexyzhq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612173624-263ecdec.0_1612173737809_0.9569824483388012"},"_hasShrinkwrap":false},"2.41.2-next-1612179540-0b25a8b2.0":{"name":"@xdn/core","version":"2.41.2-next-1612179540-0b25a8b2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612179540-0b25a8b2.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-CrqfIaQRiBu1ZenrnEggLeT/0y4Nat83j1bn5JNsg/ROx7Uqgx609MKZwJ8jsuwBifsphgvst0J7ItXE3XZ2FQ==","shasum":"2ddea6cd3539ca5cb87a557d2b5c312e579cda8c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612179540-0b25a8b2.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgF+jFCRA9TVsSAnZWagAAey8P/0XwNVQeANizwGTHMwqh\nNIVkztluvEGyMDnNKL3XaUYNWFvqAScC9jOn4A6pOi+8oX4fNWKBK3DajOkk\nbPwhdgU5wvqFe1zLVoyE34MT64hQ6w5Q1Hs5dfdjbYdLvoMyAgTLovWW9n3R\nuGUF/dtka3bVoDTBa3+QHVzVLYUqPVYsFfa5lTaufXIvekFPOUEYftJrmWo8\ndsAjN3Wl2dcAz6Z5vx9vS9uKXkkQxdgpg2oo12MZs/qfzNyFQmmMtMHFeICm\nCScfXirdbd4zwjr2ios321LF33Xv/Ughz4LxXaCPhBqvzBugHMcY7HJMaX8w\nAtjhw6ZP8vzEmA6InT9MvdMjnpvFevDMNlrmGbBXOWj6YbOpNMyfmiBKaMUN\nmHMa8y+MD/DaPshs21X44IomJg8A4KXYB6Z/l3wVqGwG7bQJPolZuxtcLoeI\niT3dwvmIalIahh4CIwtNW31WeehFhBD5q1UmDsiVymh4D8laWIjTOykPFwDH\nIwdJ7Kji7rAPa6wJQjbUUvexNWKut4pOmsPv4vXjvBaV7a/AS+4+Th2gxtfP\nmE4AIe0IPCeGUREGVcjEhvl0So1KMRBPIrMDzb92G2hbI+LNGjZO/m77882s\nYC+sL0dR6xs0NWTw9Dqa0xo0zyXeBfap1G8wZq5RnBijG5t5eeEePjwNw2g3\nJVaZ\r\n=+Trz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHLb6NUr3AUGs3RLOffAnco6V+/fyNZLq2vj5Hl4/vzKAiAQpZty15HigTjTIA2X9relueYEx7v5mRuSP92dyPiNuQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612179540-0b25a8b2.0_1612179652583_0.19801334312690666"},"_hasShrinkwrap":false},"2.41.2-next-1612179635-85b3932b.0":{"name":"@xdn/core","version":"2.41.2-next-1612179635-85b3932b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612179635-85b3932b.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-h3q7RKhqvcrQYdEFkZteFVyYrD7/+vMbOJGIPneF2ORBFqOgrJbTIp+6zqQf5StihHXFSUUYtS8lUQZU4IYwWg==","shasum":"a08ba2ba0aab4a686b6bf9fe27dd9f6b4013d331","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612179635-85b3932b.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgF+k0CRA9TVsSAnZWagAAutMP/RosaIrTQXBoNFbF9Myu\na/ha9gY15eSebtsEqgCeYy9zSy7nRx5188zCpB61ZR54SEHez5ke1MGzgmk1\norArnIR4eXOFbyxnrK3L4vYQerZDB+Ml/xvkq35/PMm5JfWv/RvwEuMvchgi\n5m52XnN8RIJjlIeejuy7uxgcag+UubOR6H3wZ9u1nbwlYN4M7OopnUtgpyDd\ntN9rpkqMH0YOoQuLifeyyBYObF/g88+dHB6TYhZN0EVIbjNPZTtoMz4nA5Qe\npam+ejmkS2in8dIrltKgCOMR4mishtAQPOUoj77OSrUbG8xHgG+jKBCz0uVt\na3Y9SO3J4fwhZaiCIh8r9yKudG6y4Q7s0QMDkpHdV+50L9G5QZaMIThPRaQe\ngVbw5Lj9y1yRXsq0dRPpMhYeRe5sh2wZ939HMk6KrzCOKcTko8gAj4PXxpiA\nsu///U1w6paRIGgXmEHFCMwMMiT+ybphwMEYsYEqazzuta6/uGSA1RBZ5cJy\nUtpt+67JmQHyQsoDXzQiHKS08hTnIvLzqV/79kSxDYzDl685uRC3HlAxdtN7\nI0xNeqAXFtCpt1Gyktsn2ZQ1w7bc/3AT8AsSCFqimzCu/uOoXNb2h51jh6Dw\nO1BbXeiEpEUTe1BBSXYulbcLEH1CmcGgPr72LwnRQel1lVJuwM8Niwbq4Qp6\nBegl\r\n=1N81\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZfgnoJspG5IilUvIIVT+0Vyj0JuIMS/FpgDut36+RFgIhAMM++fNgMofSJzAgCu7AX9MIr8YnJiMXi0sJFeP4g9Qo"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612179635-85b3932b.0_1612179763569_0.5851448461681157"},"_hasShrinkwrap":false},"2.41.2-next-1612231460-025bc5f8.0":{"name":"@xdn/core","version":"2.41.2-next-1612231460-025bc5f8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612231460-025bc5f8.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-i8jCCMQMxEQfaZWWqWnHLzNcwGmLViXNIJGdbnemb9sVzUFYPch/I4iJJ8tyMIBKD7sCiZzdjp+PBu4l9TzCKg==","shasum":"22e522fd47f4b9dbd359e9fdc194d2cd73c41ae8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612231460-025bc5f8.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGLOtCRA9TVsSAnZWagAA35wQAIZf3AO/UxJp3uyi+97A\nn8NaXeVR4nOEfK99pYkpcZQfy+QewHdHfYmcsy1C5zd95u4lu/j4l/jw6M1g\nvxsnxCa348BMYNSXt1LjmKbQr7op92sja/NxDWA6dY6poa6S1nZxZ22xRZWy\naKewEzD7gPFOrlquJt+lNWoMylfNulq1NBQ6p4DLBSKcd+22VaEy+wsQVwjH\nZRFdvILju4PYnwFmU9lL6JhL2Kcu3HRMgUERKV2PbPKc7dHC1LuQgfhUVTct\nGLQcF2YY6B9D13tHW836WnjBCaJv3OUWhhT7URFhOzPFSQ6ooIdD9M6CNuZ5\ntMy1rFCkWMJvcNF04EbPDUEnrvfeDjQdaH4SkrxcijTkVU9gVo+f89bWaPZ9\n8EqVC2N+aemV3asxAHQ7Z5eQsWfQJ2YmTwIqigP/2xqHeeW5q5/Uo82E60pq\nOd3z+TZDOpQVnGr9ZmNA7DEKnDpN32wbMN1KuK6IbGDzaH5Fwix08Y74tH6O\ny9fy4PnDuzQB1Jj74ov4BBT70hzodfLyDQhYQ7PbwEDQiGH9ZHmW5SDgCFOw\nIPKDgJWPBmEac/oJbkv1fJ8c/7P+tPyMiP1kvPGPWYqCbb5qYfC2TXI2Rj2e\nibd4clNMyqn9+dG6gr7Ge5Nywv6Azfej0P19QwhGsUEM5j9KwMf1ic0mH0ni\n99RS\r\n=Qbex\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBQRr9bmMO317ZVZF4Jye6tsZATzYRC5TgI6Hwmsji7UAiAqY3xwuh7ENA4M1TxVl50nhPDv0txjhxAu31N5m2wHcw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612231460-025bc5f8.0_1612231596415_0.2751361296961208"},"_hasShrinkwrap":false},"2.41.2-next-1612267894-025bc5f8.0":{"name":"@xdn/core","version":"2.41.2-next-1612267894-025bc5f8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612267894-025bc5f8.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-lrW/JYMdrE8KutKbzzs7r6QbuxYRTIEoXW5Fi48pZtzV+Wl3nqcosousCW5GUaRSl5kesG/vbafn/eLajVmcSA==","shasum":"c4ba57712b706f87eca454bea8575e3678c942fb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612267894-025bc5f8.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGUH3CRA9TVsSAnZWagAAkwYQAKN0rOtI6DuvFWme9/yZ\nYjTELRjenHzwuZgcIPnq6jeO1n48EVd9BhVuZ324H5gOjJwgTbHABIIohkK0\n+0DlJ9kxCZdP3P02BYrv7RDG226NggjPVmAi33fEsCtdxMB9Q7GDj2MVjCoT\n6IStDzE3Y9VkHkiEN5uLRopkoKZh2G+uwxGCcMFbQGKNXFYDNYEqpx1kZ+NE\nhSmkq28+nyTZrREBzei3IkLIMR510eDgMbSxVZzy2nx1P9DntOyjA+npZteg\nACrxF+Ib7zG6U/zLnSYt7A0udKvTDk0PGGS7BJYeerkKbsqfYfkvH8nCB3fS\noAFV2i1qHnMC7bCZV//xtHAsGl1B+hcbmWJaM9lwVcz2WuvCXQMRtE11T0UA\n3NYJNwUVWrNa8ni31noJxUpNcj6EvS4dL3pEFMSrYslIuFoExn4fwBnkDkPO\nq0NTZR4ANLC887V6H1NQGV9BQOP8qnyyAhEtEG2k+jEFlBuJmUZdA0k/XP0V\nuil4KNGxoRCwwYKqHjTI2EG3L6OhR7HFXalluNoVLgRip+lA+zwDxCoxQ/xE\nXwMfmrHkXaxhfAxKyPEfEZ2JHN+6LeedpgQH8OSDkR+2g/aVcc+RHQ8iipaM\nsBzaE7b+JCelXFOWHvscMRy9KnAik6fCdnmK7P83NbnJTBng7fv3cFaN76aU\nxep2\r\n=5uBC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFuW2vHpD58Ochmq3iriLn2hbkY5sSgVNind0AjCPT70AiEAtV4xRTHZSCWsl2xWbImUbZpWtRK0LUNBZ+9J/WtsTQA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612267894-025bc5f8.0_1612268022660_0.35004908841149085"},"_hasShrinkwrap":false},"2.41.2-next-1612268805-85b3932b.0":{"name":"@xdn/core","version":"2.41.2-next-1612268805-85b3932b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612268805-85b3932b.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-dgDV8RknXC8bO6TS3/OuYVJVABULd54wIgZLYqO62P6fFzU5yi8MKYMHuRNyrqbPP+r2JGOnFzxUCHIVGuR36g==","shasum":"f95c8a21195ad171292f4bb3783928bfd896c4d4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612268805-85b3932b.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGUWHCRA9TVsSAnZWagAASx4P/i7J9AaUFDuuUsgeWBe4\nN8Mln7z7GfV+ZtWru9Gx6nVYwUrMEmQ7ewN6dX8LRaKO7N7BBw9zW9qsF9Is\nDjy/XxuhNDcvSO16DQxmcAitFBsqroW0lVb5OVdHplCu+djjOFrh3WFj8CAS\nFdKir9L6gIREo6Vivw925KhWkN3JN8Y1QfQEoDhfsQBa0PQkwdvqzoh0ZzT1\necLrARESbyVvuDavQs1VNGyh0gvcglLkYrQDxQpKwhoLGIRrWEBpkHmoLh1v\n2kJOzxPpWmp8iPKQEidDEPf1P6Oa8Gd0yQqN5/5N39RDCB+VF8rsX/LkLFuc\nKS6cT49567JweNcVihMuOnjAJLJVGNEuP53H3hG+gT6h/kHPXpr1nVTYq2UG\nFruLvs1uXYi0LxRL5aKwFD/opO5ixucBqaHVGOm9kSlLLjAxGPCnRGzay3jm\n1F7xhZC7z5koxecp5fIP5P3U+fVd0dmyjEdSgwP2ETX3uiqzFJHwulZwvnLJ\nRzPm6DP9B7d/HgSAW+MM82tZAEhTCLrPLEa/0QL0VSWY1gfHnmcLIj1jj5tA\n4biKmKjiAmca+NRPfjah9L1qUue7QNJNQ3rUz+qoz80FXvXydEKmr7SCz/RI\n3KH5ZS4dJeGK1A/jiHet5RZAT4f1YcAN4sgeAMh4KrIJHwKOa51ArQgaTKuO\nyOqv\r\n=Cpb8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGfiG1X5+H89SWtFFqWMVeAMhkArDepBEBGAEw7meAQHAiEAn5zmoHkQ3CXfbjcrHGmo4/CFFQT35UzZrlO6Wxb2ANg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612268805-85b3932b.0_1612268934483_0.8706345757136658"},"_hasShrinkwrap":false},"2.41.2-next-1612270071-9d683d24.0":{"name":"@xdn/core","version":"2.41.2-next-1612270071-9d683d24.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612270071-9d683d24.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-2B61impc4qUxUAYNJ/7zqyxzMeUlRC5hgQRZ5cd7+kDd7yjaNLigVFKSuz6hhizxyNljsyXVEqqGEFeshgNC4A==","shasum":"2c6ff4fb088102f97ea3af04b537119dd0f66925","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612270071-9d683d24.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGUqJCRA9TVsSAnZWagAAmXwQAJuis+MQb875pLc8bvFN\nM0lUQEKAk6VpkibitrqtZxD+Dm01hv89iH1/brkbNv07DOZp2PexPx9Ddp1W\n1ECUI2tRvy/ZSAWh/PEeHlTSd/UwiZKrs29TD9FYUgRkEdJMPsW419ALa4fU\nQl2ZmMUdXXJ1+Y07n+5pEwX26BsTeRTaGQaMrdSv1K49Tsf4FoPAR9e/kARD\njur3B30WWOK3OEuHXgofaIrgUMTojEop0tflmyE8mEiJDklcyS1MBxc+2Hhs\n3kFpEu1g3REJOHDeRwF4eqkgOwkGGUtLQoskohOxurCPtGDrjfwZg0m3XA+/\npGxcd9ZAjLCles0X/meQeGdmhRevoB94nt+w+xlsZcmzLTa/kC0S39aE+C56\n6eXWyTXdEj4GPP9yeJquFh4AW1w32HYxsscT8QBY9jhb8poQPajSHmuJ+FjE\ng4A0dumY0YZIxLJSJoFYVmeyZdUPVbKVVo5N56uWp8KfHo6sDaImzjZMZ/mk\n2zSTzxeMEC8qtyRJcq6D4w0nCRYL8k8//8yNS0jGr5XjdFDpvWb5Zi03US4V\n9jKkN7UKNcjkh87YSb1q1Nm1UUU+eMGIayKHotkHgAmBEh7N83Thn17DUq6e\nMz6UHoOeejZb1fHTNXwN7cwU2DafvOW0KJzTAI6kKWvhQdK6+99nYC42eeh8\nzQ2j\r\n=1QTj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC201Xh0fMtIcWTaBAewNDKJpTnbalMULnt6PqD2uj1IAiAExOhaYiNOqDWxuC/XbxdH8ruoT9Cd8OZoo/EWiBYjqQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612270071-9d683d24.0_1612270217378_0.9596033342015406"},"_hasShrinkwrap":false},"2.41.2-next-1612270317-50f72cbd.0":{"name":"@xdn/core","version":"2.41.2-next-1612270317-50f72cbd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612270317-50f72cbd.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-RFu8Qp/bw3q6rIdTmJR6XGVbLOZkRnf6w3DkdNqcjMFgCjCcLaljmzYdDSWjuAAi0eew4DhflC7Z9BuxUsT/yg==","shasum":"8d9b0e3cab235c6b09e0047de26c688eccb0028c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612270317-50f72cbd.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGUtuCRA9TVsSAnZWagAAh7UP/jjYddCMRT8GuEUJFmwT\nvmP2LZUT//2n/Rv367XvYfYWWhtjE9C68SbjNDjYQKPi69q+YWe2189FDLgV\nt7aHmnVLIR6TbXecBHsqXuiJgq3I70cQkYx0yqtC0v8JuABLvGM5S+R4Okpj\no4Fw7ZBWV7WBukqCii6Qv0VpFGtyKuMawEvSEKcX4a52vxpG4yeA7ldkypNB\nxly6L9UBKahK8+6MPOFqcujNY9s6lUWVQF9i5/tYn/Ybelw7w9lhnI0sy1SB\nRf5jBs7vVyYVSeW+yiAl6YAGuND4T7ptsZ3wRm4VnxrwTKTt6Tot2uQ1oHyC\nfttCRHYEBobRSx/EG8NS9m73HF2+ziJIOzFxDWpvVrWalS1iw+kncdGI5IQH\nmyd0gtWcSakVVCcGLddwSQEk36OzCkKF0jc78ZHxNQ+gohPdYNq/0YjN5VuV\np9+OnYCw1wzxYvGvh2rAqELMokv+zdw3s3ADhvOD+BpK/fvNqVUsaA9cQ6OP\n2Nc18sqbaOFomnLiYlBVkVy37GJhblGe35wSnlvrujO2yPj8xVNtOfI1XCkb\nKZX985jrUru8Dg5tpDLyy2PjRDwUTvJK0Xq3rM3Ai5Cbq2hPGbaq2nhOu1p4\nW+szr3Vy0RpurQU0IhhuqzNhGKCMRbK9p8yA+WngnmjXSdEhE+IwXXzyCPDI\nF6YC\r\n=m6rW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCXnl4vn1sWH3XiVf7Z/9yd6W68L0GpBrfE3CrrrwKdwIhAIXHqAwkWeSuaopzBbU0R72IIvIYSBMnhYgWKp3SAesp"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612270317-50f72cbd.0_1612270445650_0.6527946072120816"},"_hasShrinkwrap":false},"2.41.2-next-1612273953-0cef40a8.0":{"name":"@xdn/core","version":"2.41.2-next-1612273953-0cef40a8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612273953-0cef40a8.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-SQrwHvU1VUD5DUlTh2jr7O4IgDEfUn/6x5/heBslAJzno8KtVCznQbA4uLyzNuWQB+ss65LWGwMWM8La8j9bPg==","shasum":"1a326fab1264363175d95e410481acd2d7e80b8b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612273953-0cef40a8.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGVmiCRA9TVsSAnZWagAAzLIP/1XSoz6X4z2Lv/0KwG6n\nZEnWgKtrh1mXBIqMPhjmAh/yx0Gk2PcGAccVoRsMzY+BiRVJkK0SbSFQRFzQ\nJDM3nK1aORj5GNnEPtpclCDgFDbmntIO6qDwgR1DVVgb5gzzFodEe3uzXpZy\nUXUPGbROaoLSAp9dxwQKvrqHy61zn3bmTpC8yeuPZIA3PTc77ukaOXB0U2k8\n2oahGmt8M24TpyIMol7Kr89QGtVDGcW+BSr7EA3ihRwqf1EdB9H0bEo8nDQ2\n2RuVw7GaRhoGbY0KiK8TSlE9mp9oVbLRM5X+jdwe3fEncu3PDH4BQj+mz5Ip\n6DTc8rR5lUdCrlcNf2ipGKVHu05TAFptBJPVibqc32H8ecFG0lcMeGs5YdOS\neAEdTAHM/ml5xRFIgT61UfeRwLsE0VhCojHA+lewk19XzvIikp5mjwfzMBZB\n2Nsypu6vWL0vaOJAH41yNAxhNsRZn6yHui/USg0ck+KSFj8ehletl8gQYM64\nB8qvJ6yff5RoYvDTOp2xU2qznxazoj2EFsrxjt1JnMvDYnWKfOn5AHBNp6wM\nhVC9s2cJ1RIHThG7VNUcaJamA0O3SJVv/XidpWI2y+XAQ1b83dU+oXvQxFjW\n4ots9WxRdeskFpJI+AzoSFs96hs/TrK081fiRwS/FKfNtdYuRVL+3kX7VvQU\nnGdo\r\n=Aqyl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2cv1vdcUvTJYX0z5+LYqCKPUj87bVxUQMji8BwuZoGQIhALVIiNSqLaHzX+jmcrQ3ZTHImPYkTfCfV2TkmPn2UFex"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612273953-0cef40a8.0_1612274081907_0.20647080276029062"},"_hasShrinkwrap":false},"2.41.2-next-1612276423-a82ca504.0":{"name":"@xdn/core","version":"2.41.2-next-1612276423-a82ca504.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612276423-a82ca504.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-wh5ekHMsdcED7HtnI/dnFhC9oUwTw16BQI2K0pX1mbPoorm3kX1C0sLM1zDmU/T57zeDaJ8ju41YiaHPm4R6QQ==","shasum":"56c66303895a7b3c1bbbd1d5c04db5d1e97f0b7e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612276423-a82ca504.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGWNICRA9TVsSAnZWagAANEQP/j2SkpLGZ47F3qG3iYP+\n1vijytbK4rZyr8f25l2BxWun2hh+NpoVCrqXvNRiZJFzzHFf+nhJgpB9m/FP\nh1XupmBhmewyMRXTK8eXd4yJYwut0EsW1nR5z/tLDvjClWDlbTwx0VK4uPk0\n5sgeqEA2OQPp0oaaBCWKGpIP7Fs/XRHtECrdMM0EXof0+JPxnH8872MO+3pV\nRJnx6RWTaiRN48P+XPqYARMGgqCDZwrevte0dQ468oLJe3w3ehp9A6gkhWNe\nMxyssAwrTegyCj81nxSgROWmcwVm9Y5bVRY5lPY1AfnRe8f3CJ1PuU9KXUhA\nOLv1LQodnSL5edTxs6X80Ju3Q9HwCSPGqR4iTcC5aPD7dofJMBDZ7qRgbTkC\nZib8Bh/84OTZ6mHlLXpAaTXyyee7hDHElDIQPv/0fRr+eDUQ6hlHFvvosIGr\nGWJ9k69PCq8gX50HsM111cOHHjX1x05iUoQpsWi5X4LqliFD+4RTFs4/4bD9\nfn3bklHIzVCnKYq6mNA+8XLvMyuFxVRVZKZM1/CxCyMiyKVTynM8Z0c3Hvj8\nkbp7toTYb1KvyaQNDHlZA2KFSlYb1Gp9f1qisqJyWWths+CYaihu3RF0eNY6\nOjSYfohajYXWNztlfBKumbITtqn1f9LVBR7nzBTNMkrl3mBLD1UJdkJftxxr\nNJta\r\n=sj1e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuOkizfadt/wZZ3uynzeSA/8FGYDQKLx8FhmOHljPimQIgVCEZCIy5aPXJucg3kCiTAKeEx782iGa+hRtmexrvb9I="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612276423-a82ca504.0_1612276552186_0.9664845872949244"},"_hasShrinkwrap":false},"2.41.2-next-1612277875-ef40374a.0":{"name":"@xdn/core","version":"2.41.2-next-1612277875-ef40374a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612277875-ef40374a.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-K0Ts8yySJ+H1txBck7FxWxnTTHmy+wHb0VDIkCNnIU3jj5nYRI2Fwy5VOz/TgSNRJUj3e65EI3F6q7M+WznsMw==","shasum":"4ff01c807a28a402ddb1aabc007e7b7468a9e073","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612277875-ef40374a.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGWj+CRA9TVsSAnZWagAA1JwP/AuZhnboqe1C2DN0iL/f\ncuu0gXlFGhqyoAifHzvxGyKZDzPy5YbjPlGyvJtjlEnmk4xo6CXTz4M3JwGU\nBPIfp4cYALdHm0nfb9/ijePEBp9MW8jckKyKdUyKXyfnJwXm9n4abEFTZqgo\nkgGLbuyYfEuUnyPuA36x6bh78Nz2xcTFJXL+yCJLzsgWLOg2KjDEb2xbHZFy\nTuOrthIp16Ppk1ZDlQLfuAVCAKGMjuBVbodbt4uz8VcRAwTsm6lB/xCYqNfZ\nZSrtVw2kErAkhsIstF9MOChHL/uBDWF4HU6YKs9i539Jdz/Lp1zRQn+kWOKu\n3V5ePc7AFzuTxY2tVhk0u8E469FD++MsEGYMv8shysrCYT1XOpNof520ij4x\nULusnnOxvk4AiOowoBXJaUUUrylEaBkkBvvx/ocIw1RyDN0zmVRGGGKAlw3q\naQf+IMvUW+DSUOpGpsNoxYS4IdoEjie7LBY3+7p7IKlZ4bQBSMbviuQMo8z8\nYcN3tZ8Y9nkeBdJzZdIJdimzxFwmT21pOewo+Bmu5WQNTHC3IyN9sGws+feI\n9FjEVQimwjPovwPMoHitgQ8UL8ehhp4qe75y+7Ojb1JAnzg2Yz4hzaOS/kDY\n7bB3ZU20gH8JhJ+hgRlGpIsTB6EBPEeJmEASKJ8wlAe/G2l0LDx94JFLo2oy\nqDE5\r\n=AQdz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE51+tFd4Y4n2utCAWGb5cInuvhPp9upJgX34lrq2ZI/AiAzHR7/pr5RogM5i/4pugFUHe1snBOD+wjNufA47TFW8g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612277875-ef40374a.0_1612278014002_0.8827120085181381"},"_hasShrinkwrap":false},"2.41.2-next-1612286102-bff19572.0":{"name":"@xdn/core","version":"2.41.2-next-1612286102-bff19572.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612286102-bff19572.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-rFUPEcFycFJNDdQOcqiNnKeOrZzbic1d1DEjUKoY0Lv/Qw0b2zebnObeZYYyJUa+EcyL0FiVvPvz3+t1JWCZLw==","shasum":"f72a6e49baccc80b994081aeaca3367fec0ee1e5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612286102-bff19572.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGYkpCRA9TVsSAnZWagAAvicP/2C2MTEGNgSd9C5U1JFU\nRLsLpe+qbAJSKy8pa7/4YEFt//3vPE+xpa4Y4S72Izgvvk5WXnPfxt+PZ/YN\nghjm8splc1eicXGcFT7ePYPU+cmtpbWr0dSZTwRCvoh589FCWC3A0uZlPXR4\ni+o1ihFzOAmyJpDgIVX3mSxcJ09Nsq/2bUFoOaQ7oq3Y07ivqJHNXktd+dm0\nikaM6mwHeUETxKYb2dSoXY0JxBQ4JC0i68EAYxtJyg4uwaZJUuMENI2rs/KJ\nvW4gDdEik262UvQQP66xxkGo8aXaeGyc66IzssDemmuV8rE/0zLNHkIuFENs\nPiGMsO2dWhOG45k4idFjdzHnyzKVdg3SGLnYwX3y47t3cMtLzz+HoqlyCOw9\nZQKXSMnDYjP+HYDUUjCM2CbVsdw2ULf2eB5Q1mdZOZx9EnFejJosvBnYDVZz\nZecXrFWBLm0cA8F0jEOcyQrCZVV+lz9uUoLROfPj1Za6us2TOMm+klvSB7ra\nVwWfg5I5WGLBTWSI4yKPMcQRrBua9GMFCrzBxeoOVXx7NLUIMCDkeUowuT5J\nh6Ss1tWF0VMfxpH2nS827honzMwj2kUPmQDf9Ev8YksqjYpeGzUQaZxwTYdK\nE/uHxr/U6rGLX5YVIbyHRijv0AeIRiiAEFZf7Fixn8/ECGfaHyvUqEh+R507\nJ4zv\r\n=Vr5A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRtQaOEQVFW1pYKSuF1MLIB8v55yjaEL3kdN38cvOfFAIhAPFL6nnLXVXUZy5qfMwqCwlQL9/ICa5/NJEU6YNtoHna"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612286102-bff19572.0_1612286248771_0.9738278048313993"},"_hasShrinkwrap":false},"2.41.2-next-1612289218-28ceaf36.0":{"name":"@xdn/core","version":"2.41.2-next-1612289218-28ceaf36.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612289218-28ceaf36.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-97jH365WKnZRWiJqBWiJ2i8poqztbunyDkyaFxvrPcw0/pQd4+0hY4lrrSAGhdghbQUoQxeodZ1CotXuhU7dHQ==","shasum":"f1c97e5d5483c9afc7afc02caeb90f78c7769273","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612289218-28ceaf36.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGZU+CRA9TVsSAnZWagAAMzYQAJF4rf8RroaknmCBj9Pf\nTgz57k8y4HeKOYuvZ1dog0bJWpPTQWYWGuZpYgqZBfifmA6aaISFu5OgQmn0\nmr3Kma3J44KufO8Ek40cad+bi42wlUwbn0eR1f1tRJYyu9yf5AUDskZ9oKrp\nm38YD6vNOULrs52SFyUk0nixzpsA6Ma/T7DAS1Kc0/xSl4/JJelxgj/kVmSn\nD08HvMXaYsCCAQWCm4wu/P5OC3uZEz5gh71Sep667bUZZK+4RRGqUBfsyfgL\nVhJY/3bPm1S8oxM2cMGgGEij5Zx8TXYmcv6tCyXKF/mXE2OkSWCj6fDe4dBo\nLaaI7WPhAwMtwiY14nueHc92lBCOmgrJeIuQ3kcqYzklSTBypua+4b7E0HXz\nT01+SmxRu6n01EzHP0yVx91n0syENRAz/4NNBiHiP7IpSyb1foLZt04/7HV8\nLAewLtqoBjXug14yZlnid/BXu0w02nvHcRjwxY0Y34nOYvgShqFhZGHL5Im+\nMxIwIn7VESGOHuRXohaLmyxAJOXoB9dw0NGIlyGRO41Zce+tU0eR+MJS1crg\n3QFgQU7PqNSwShaBqCHD8Qq/oNC/QfMCwr5bL+fwrDeOZxJfm5Pnsv4cTeI6\nmNsK4mo7jNjQLGsrgP+u9f7ZFhF0xksygf3VvC03trITSgdr70Gk3BAOCQBI\nYkSz\r\n=frxY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE2dNaGgVwKTuVeumZZpahlaOBw9uEtOSmio6/UZqLeeAiAx1r4gtFeNC/nf5fItNEXCQjR1kkmWu+16e0OxIhqQqw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612289218-28ceaf36.0_1612289342094_0.10525815105665615"},"_hasShrinkwrap":false},"2.41.2-next-1612290377-28ceaf36.0":{"name":"@xdn/core","version":"2.41.2-next-1612290377-28ceaf36.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612290377-28ceaf36.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-63AqrgIdWT4jWiYfCDluP3oLJ6p4Te+WgsV5J+UJ1Uk3S+QXKUDPc7oRAwvXwHKI0JS493KSFtwvhkV45PsQMA==","shasum":"630688bf45bb8d66a9268f45a4af8c5c60342d96","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612290377-28ceaf36.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGZm4CRA9TVsSAnZWagAA3LEP/iOTEQmqhzV6WUtmdCln\nFetiQfzfdCTrrA88mtidC3PRJTWDciAnmkDMdSzGh1AxH2G0eZmjEf8htKx+\nyF13vTjKoy7E9joHYZHis2TkH2HGfWXs/cs7Vb4SbtEFJKf/+xJAyYTEzcxi\nB3KRBnEHrwGRZKcwdEWrRfMt8DFho+NhvtDmMWjmba9ktiehyW9KQNWdCteW\nb7W3RJ0XXJ8rep7Rfrc5iAQ7TN7eusoBV57bWcBwE/YvL1OWvzUOEXIPlqpS\ntehnx06Yo0+rKjws8IPTyO3V7JmCrKo+kLtcZXeSVzBhj0ygMqLXVnydxmx2\nyQ7ti6cLrxXBAwCATmzhs+g48lTdQyvALAp1G9mjfaSWotDWD3v4E/GmMqQO\nnDnZ/lt7PmmbaXayNwveMZaAmHDDIu2CocYrBh0yarRR1iNFQj9w8ycDkL+7\nFnd/opSs9FLXeg+cb9u8OBhV/NbZ3K3ghmRkK3Qm9r/Jd2dqmDuH8XOvoTOr\nRuK6Jk6uxtdEIWuYIBEu0D+ic2C4E+Ag5A7AJ0OgtFgUNJsN/PChJSaIbLpV\npD3WGuT1qsRmgZzluBQSarhtUuNX9dgX75S6zZ2xq5mPNb1VDTFhJM3eNpR9\nAwLm7guUK38Tey4a9mTPc7tzKvn8DG/tPTn7tNUU+kVEcLARTwgiAQnHANko\nketX\r\n=vU/E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFpCwEQtYopDoHuompdBL/zmzaNp8GmJHN2zqbXfUKAbAiAb1RlVKW5Go/l34jx+dcojNNghY5Ej+1MaGYbKWO/0zw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612290377-28ceaf36.0_1612290488078_0.25504584844092304"},"_hasShrinkwrap":false},"2.41.2-next-1612290457-f327860c.0":{"name":"@xdn/core","version":"2.41.2-next-1612290457-f327860c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612290457-f327860c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-KUpjZVGL3BkwY4trw0cOrxUQh4q/2lfqhOAwGg1eeMY4kbdRNiQ2Hf+K5D8IGhfPhOyFnBL3T9tcMoGHDq2+cw==","shasum":"76f656caa1c0c607064955e1e19b47fc26a87303","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612290457-f327860c.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGZoKCRA9TVsSAnZWagAA8IAP+wUtT5+k86r7ZPTuTd/Z\nv+xKO8fxm9wnfR8178mAtpuT1xZwuFZ1AP53zuYEBm2ZPQ0PDs3YHKOCOCof\nacvs6N9N9BDB567u5piTg9EQ/pE+vEanIwjuiuWjfsb/Zj5bYmcYt5gH6BpH\npUAK+y2F/IXAtzyf4ttVf4rct2wTScwg1THlos+a/TU6IpKx91fcRwLDqJyN\nGqsbvhlDDublwgE4oSidZaLeufmcIRxJlXWkc00xXXkvdK2dk0GeLzU76LPK\nyw0aMKoOLJSBLc9BNOKiYFFcbTXzAdLyWhCpwtG847OGLTz4/KkXPQZlD5VI\nY4NurLoEc9opRDkZLOMSD+D3CrodS3aN9ML8JASa/GYizcQKTiiUz8oRIBpd\n4X4PZ3Tj+GzNKQc0W8uUvRsIS0u5NhKbAN4hGZG9A4VeuPbyqDLX9vzFVnIa\ndPpTi1DElN1yNHvOmnru9hrnaPjYjaEFcy6ZydbX6cq3s/6yBTti0QwS9Fu/\nni/f1WtSfb9MX2LaaKQSt1vKTJsN12DeoS7vnY6Ps7oqdNKiCuCK+bC2sQXg\nHl7Vk54GeCESsTS4uuILtlJJWl506EKtQjfVB3O3bOfJ2kXL5yEjboBJVMJP\nQwcSv21w3WaI85fsflMYNbWONB2a/46cSjlEOGFhJZnnAQ7YGL6fpE4z2ldw\nzjqR\r\n=Un8I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFwlxgA871iQuuwfbOBaRMiXIIKYItMVnvnUKVlTP7GDAiBQavLIPI6GpOpyUYqil6t5lNSGq2j5j7QEtw9kLtoHcQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612290457-f327860c.0_1612290569759_0.26563925160629687"},"_hasShrinkwrap":false},"2.41.2-next-1612290604-8ef9162d.0":{"name":"@xdn/core","version":"2.41.2-next-1612290604-8ef9162d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612290604-8ef9162d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-0mjZg86vZEyrT6AVpj8o+Nm6XUiGLYFlQGme+cn1ZWSR2uHUCzVHzSZJ3DlX1P4Qfqw4P+vOcHDozrhTbWmJ7g==","shasum":"fc2365f75908e264876d86915c17d38aba5ffde8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612290604-8ef9162d.0.tgz","fileCount":179,"unpackedSize":663728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGZquCRA9TVsSAnZWagAAu7MP/33Gn/pv/zKa9/X68Z7H\nfTXVDKEmymEX5K99PV7gXkKnHX6HrPimt/tE6Aj8Zd0f6lj3zQhSAUnuRaYw\n+5I7XNfoG+hFl/yRe5AErV5zznqoLMz2+2N/jhkPXVe5a5IxpYDhK0YUSR3V\nFtqGkFb+5EmDFJLgR4Hl4n1g+pQ0gtIXYaxlzCZB4spcgC6aYz/pv8NoOGM4\nTgwPojJ+BwR9U4cFGW9m/JdzNXi4IDe8oBbOMjpL8TALQ3y+YCA6IWO47nC+\nePq1MG5sa2rpt2AD6lKDiRA0o3YvwkqYbwxktIpeU3TizSiPonebax3+m9cG\nioWkQSnOO9ZKZWunxyiHMF9rrhvK3gNZLrrVyIwDKVeTfC2PjRk5BK2Zut6+\noEV6p93UO6sKcBV4JDO4LI367cXA139OfXw93pn0FbzQGCmaRqNtdImaMTk1\n94EsO++5JMG+9W6/3Ajb6hncfz0kgN6HITVHpAmRRDPPzlv1GHefsfDEIuzN\nXmn4PlBRcDbf5ia7BvfHoBAFUCEYDi5yHtSUcQa2v+4rGIjA/wY+yVlc2kU0\nHjB2xKnt6LS5NKJ18lJU4rBxhLKXL2HZXHt5JUZ2/F3yW7iIH3MCyMVU3WZn\nN+he6H2p0nmBkDP2sGi1+D/t3DMH2l7WfKZOORJdj5FdK3gkInnoFvwR8dFL\n3FCo\r\n=Ts0G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAs4SiSMpXb8ePnkOQiFYkebRtA3FAZI4b9CkICWOnIbAiB+7I60vRa1wVjc8hnpbKBeD80EXy2LskOYsAqzzhfTpA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612290604-8ef9162d.0_1612290733842_0.25873928377501376"},"_hasShrinkwrap":false},"2.41.2-next-1612291569-8776ec30.0":{"name":"@xdn/core","version":"2.41.2-next-1612291569-8776ec30.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612291569-8776ec30.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-pxM4WVvZO3W1LmsluuvfEK5EKY7G0BbrSPvMKtQRcRv0ODGrrZCDDrapkdbR2fIwP5kaGDGCBUPBYlKSMu9ePA==","shasum":"8a4b5dd9ca7776cf6c7fc868a1eea2df29b1bce6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612291569-8776ec30.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGZ5vCRA9TVsSAnZWagAALCMP/3DAzpYeDdE/v5JpIRrm\nGD0A+foAkiweOGu+aDvu36wyo/c+3VHOsqhk7cDFPdb5RpgJT8rb1aOVChix\n6U8MAweUf950h10WzefqRHRvOyVAYW55Crpqdo0guqoG23aLvpu3+efGfLkY\nicUH1+FJgbX/iweWEQj+5Tid9+Vm/KG2QGtci7diEDSe1qOfla6p8RRM0qcK\n2SzS5i+N9gtUlGOhJtcK040A4zzVJpoo4oL6kQt2Vg/MuubR+RuoiLuBuO++\nCngWc9qARG/wISPPHlswcYNqCWny1OeOdGgo3h2zciPbyTHZQ8M5ZvalvugL\n7DQrJs8jiiBj7p2mSnqI1C42XOQwRavrej4BrMQJMTIMD8fT6v/eRM15ym1C\nc045kZxAos688wHQdj08/iN3UPEadIp0UZ38BGBtiz8SN5N+trzqFloOL8IV\n7nzHI3l2zijBOeIZxZ6hbuVeNJJ9HBpzxj/fXrcEY1SI7vOvTFCxek+jKKns\nIpGbVUrv679BGFxYQOtyiYSVrSLk7wjTci9cY5FWSgxobWpRtGYnRlCsRDvF\n9ncNe9FeOFT1CvOP29H5Rv0KsypIzB+rVj2/r3M5zGNVlrwzOW5r/ZoUyt8B\npM2TQJuvjDQx/vvtiwxIWfG39GuLpPhazFCWlC4vm6Gh7tRBI+JwFuRLyOAH\n5ZAh\r\n=6yAU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAdNyvu6BQjWm+MzsDFeour1is3D7iHUp8JQha52mx3IAiB6unO836QAty74/ZP6aSHA5gONZo7x5+VWjG3Oee4NrQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612291569-8776ec30.0_1612291694332_0.604774320351968"},"_hasShrinkwrap":false},"2.41.2-next-1612351532-0ee4dd00.0":{"name":"@xdn/core","version":"2.41.2-next-1612351532-0ee4dd00.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612351532-0ee4dd00.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-yXKyOyZOtRG6vAJ419bA67kz3RfWfnqFzzf9ftukPZt3dYzWk5uhr9R2+2hW2ll0z6dTQXu98mV3Znt+6zRdVQ==","shasum":"5c631a37a7886bf1e5de726c8eb20826b74654b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612351532-0ee4dd00.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGoi0CRA9TVsSAnZWagAAWdEP/3Z5WmQs84S+jJYHwJAW\nWS9Iic31b7NFO54hnzUpYpto4ypd++XZax799QrLOEdjEOzvB9VmEPqM6Xls\nOldmO4MaUJ5a0YSSIprAhgOCqWNx6oWXML/dr+FhWxAzJx3pyaW0C61HCTP4\nJsQo/+Uoj5vqX7sT5uUsBFkz9MzRdvC5yao0XW3yv0IQNE+QEcYSS5IcDwkV\ncDxrb3rA9vkTt8g4VvPzcUKaweK5kZ2JPcliJRShGN2rpFcHSf+UbeSBM5i7\naIhy0MaEsbDld77YifbHrq05BzqEYThE6l4chr0acfTtcltatiezra3+bksN\nnR8BbOXh5Qp1Aj6wyBNBT2/j+Gx/9D3xL/m7ne+a6nxe3tehV4j9ZHWMI2Cf\niCENdlMOoORMHCZ2sPAUF/1ICoyzW2lI1yPO0ua4QtMySsISvKgdONH51A65\nYxqZIGHa8bc9yRpH6qQQMMtQqTXV9ovuEzRXsXL58EVzdCVLQ4cTBZ+2sdd8\n1BOVvdVBt5S+6aW5Q4mOb+iRx0tDXGsWZSH8rxra/nDPbd03fC7iZPMNuK1e\nq+Z/dG7u1Umzo/rIIDxwjYGPkYAtu5E6jyPwj+YQGIUfJ/2kYHUDYD2VOXlv\npJRSEOGJ8k+meLEowth+2+2v3eQFGtC2zMusoaPIZo83O752Z0x+g5WCj+jg\nHdRp\r\n=56FI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwqdKgumnGgaTUIbSXXiI2FoFHdUxshQU30Im8tOM/uAiEAiFG/FDG/enKujD4IOLK/tId6ZhnS8eerasDZG30VYVg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612351532-0ee4dd00.0_1612351668186_0.4996077200727487"},"_hasShrinkwrap":false},"2.41.2-next-1612351607-64b27ba5.0":{"name":"@xdn/core","version":"2.41.2-next-1612351607-64b27ba5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612351607-64b27ba5.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-pihlhDUpZyCTCrT6A/opXklWONvEAYNdT9Oz8TsBhLqHXwjeasoQl83NvR36NW+7LtQJFxZkWavI2zq7FOvcBQ==","shasum":"91798a39f3f8200388f26c8eb91080ac0a9e9979","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612351607-64b27ba5.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGojuCRA9TVsSAnZWagAAQ1kP/2OJImeDjGfnr1S3z9xV\nQVXY+4KK2r+AL6xphrDS/aQEzdZHdCRoAjM56FHg2SVzoRYHNN2/iHWeSfQq\n+dhtoeRnh5IM2eFjD1lEhxfCAXLLpQOvsXWMKRPKEiqgqdjLwo2O+W5zP5Gm\nIo8+6rRgX8H0BZnfxT16FKfjzU6Fe2Y16X5GfToPGciADFt2UpPSy/pmNGzM\n6DzYwtIp7PvrFUnsxgN8zbdX3j2n+XPDSoyASvyMn/G4HcWaeonbD/6Sa7HH\nVkkQ88fI/zlL2iwIYYbObMbT0xDJot71dU97pIFnO0U5z91AUPIYAOTZYwB/\nv4Yn3c4yb2WNcQBlD9DNyPclJESkOvoo+aXtFFZn4YwhWqulKDn8u6tDqqIM\nXgW4r5qca+WI0NRPEAlBH+bgHuoVoT6tna1CtzbGLG2xiWoUP5Iy6URRaMGJ\neGlLqSDR/HXQpAs9Nqavs34DrXIve3UlQpGaP9ksz677u27KxU/Rm79qVLhY\nNBTO/tiLrseV/uFCbOEze91tSe6Uag3wy2RLn5TTycNX3TWmLL7sAAkzoDko\nPVidcWSYSl+w3psOvRrt9k0Hhlab/kdVtUKPyTykJh+yzB2nBo8Capvxsb7c\nZ3lTqbo+VfaN8GObUzEhnmgHy5IDbBL+pcgYPjkE2PHbJxsbomoSIo5xifYi\nrDwo\r\n=Cjry\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDAeVUir8zsRZEWDn/n1C0kziM9oHT4YEg8RfJ8MXdvVAiEAodTXHdWIYgUBaCpsITyD5D6GC3VNAsYcN0QbmBjwfqg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612351607-64b27ba5.0_1612351725814_0.8746903740409269"},"_hasShrinkwrap":false},"2.41.2-next-1612354766-23faeba8.0":{"name":"@xdn/core","version":"2.41.2-next-1612354766-23faeba8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612354766-23faeba8.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-m5hxIy/2JQcGjccfnbkvUNVcFAHU/FtDu2cHxSF+NJjoITHkbEBqk42P+Gtenf72UBm+6J8JwyxOyDEyMUcXGw==","shasum":"119fbd273bdb47c9415a7020be44bad91e83e4b9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612354766-23faeba8.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGpVaCRA9TVsSAnZWagAAZ3cQAIKFz4EXTqyttW8MWhh2\nZlrHKVKtvia59QrGQgWGMPQjTa4tYTgRCN7wsq64ptIZGcqKhKkpTBPIoMwi\nl4YCEKVNxIHdp73SjSvMFQSNDLamyM3JFlkEf1ljxbyPUBYp7DS4i07Z0g0S\ngJHIpoo95dDkTdTDpYpdHeem1nGhd+xE6E4uZflllK0yoouKgBA3gBwuS73+\nkSnb1e+g6+sEOS8oHGOrb1It+ZnbPJNUxX7CuhxifMCt+7IXVlyGmOs4f28s\nlT/31j6eTGFPMSw0NB+aWT63eh3l5Pum8r70JCVmzoI1uzhKlaaU3VfRIu3x\n18FSbLlKwH/bJdKSJiOP/ZkawAN3yIxxogFrYvMDKbCLZ0BZIQCFuxcLhL6i\nayDomF4Cv/b/U0cC0NqqvJtGe4oMOEIFKRUScXqGslM79c6rhKgjAnwwux7X\nhDjPlXJUV4WgURBJaK0MKLCZDMJDwAxEXZlVv2qPCaoLza2sRkN+22/V6ZQo\nYR33ZxIzyV/f4ROFwYk1nnsYMCoEbZxZo6CTgqUh2UGWvZotYGRYjRq0/5QP\n/my2TpcZNnDrwyo2+p3mnddhALCawrSeZSVQqiafwxi6Sn+ia3LL2Shrs9ay\nwg9DwEUP4m7yeMTrmhpDFHTYP8h/lW8k6NWQm7Vp+AgF7EtzSa5s9vDbXZPU\nlK0y\r\n=M3QI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBBkq+dS+h+9ssLG644ytqqp5+Jiu+jJwWhd/5/t7q8eAiBz8l9ABnFW9mw6YeZa/RycLJ3DPShmtcnyGS7O3W6CCg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612354766-23faeba8.0_1612354905891_0.8759081419849681"},"_hasShrinkwrap":false},"2.41.2-next-1612356339-9a9b1b23.0":{"name":"@xdn/core","version":"2.41.2-next-1612356339-9a9b1b23.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612356339-9a9b1b23.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-O4BDoWDwxdhXEoxtwv0EONn1xUskiddaoJfejuHZf1H3fCHK6LlqeE2JPhXaClZfY7+rNAHOboXWmCBYm1UJ9g==","shasum":"28579bfc84d6df97e845ba2b3ec50b1c04cfb1f1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612356339-9a9b1b23.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGpt0CRA9TVsSAnZWagAAqaAP/3XTMdP8A/EX2Osn4krg\nB74eaXkucBq7CnS1JtQ7af8/Bdx+pyP1g6I80/bNot1zpQa2pWK98k88Jwxk\nW2CLETyEWhaz4w0hqWqRPwXKauhqSp2GRZNJh2tasHFI4FM3a56fU8XteAwT\nj0a15jukDvh0WGy70Xe+2niHgFmLTtRiDIzEHwiY6Dj+v2RCZ22/GGjHgoSd\nB6boeTfW+slPAdvC80d+FVRvVcO44mueK0uojXhPSozPd+wvMqCV3mgKJ9mB\nfHJYs4bkWR8zLGKHF4Hr3hKAo5FqJXdZFThfyUrwYWOJj3ed2YRccRAfPIOn\nFz3DTgkSm8gSkRdewbnyL/ksR0eBnaqtsnQSI5zj4Af9M9foL8EREMOS5/wk\nfPdBR72Eufjx+VFcz6rPCdC7brkU11wIsK/byz/Tw0mjg1pS9Y5Ne9OH8L/O\nQURVrkwpCcHhAzotz0dqmR4gfBX28KZSt29P7eYa23irgbrIwfBcScAh2iMn\n9bTgFiD7zqfkvhG1lLlgOraGayzPuBdDpwALQ9tvfvmrSY7rGpEtut/ky9Tl\nY+P/QqPzC74BXhhjAac4NHy5sXgr6b7Cdz+vmZuDxENDU1Ye/eZ5m85wRvlK\n4OGGoOsDmJ08a3P5AKvnmTh9qfSrZC3zJZ/GBkL1jyrJHWY6VbgiBkViF1U3\nxfTY\r\n=ktJh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCazQ9+Pt+xvXHz9RvKDh01JXEHSSScy65utIOswjEbjgIgKlu7VbBn4V151C5dbpfLUiElCoH6+yW5OJaxtQfnAaY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612356339-9a9b1b23.0_1612356467062_0.4935765097545066"},"_hasShrinkwrap":false},"2.41.2-next-1612356417-70d102fb.0":{"name":"@xdn/core","version":"2.41.2-next-1612356417-70d102fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612356417-70d102fb.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-LOoGUfVPdIwI9m3gV5PnF632MtoBuCSv//hcBeiJ6klIIADPY+nQsU6HLUhfEM/6HlvF5/RPcw2xYS2FPKmqNA==","shasum":"1631b2a1f999ae8f74e3f3bace9577186e774d16","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612356417-70d102fb.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGpvMCRA9TVsSAnZWagAAS2MQAKMOjRnmaNraQGq22Jvx\namTK3Uq6arHP+7elVlVishedPrSFwMebKXpoYHOba7U12rCcRnFzEPtkcu7F\n1+FR0JS7qwHER/bYacynb+yvDzDpy/fzAFEAozyjXbv0f44MNrsdoiyE30c7\nEdzPQVl8XOWxbYt2NZSSAkpte0fo6rXjBpFZojR9pDPDSRsFgd7h4hEhvxfP\nmT6jubfGUq7r8U6FHnjKTmFFOEF/7DGY3Yky4bv3Nlafj0EZv0c3MeQltbgz\nTQgQITKZhQUufR3tEWWs3cn0Qnta9TR2yfCo/e5HU03Rd2UjwZaAA1VuHAFs\n/yp2JiIPFAFw0cTcXbU1ZW3V0bkwkWkaCJyL9WecqaHjhpvjXIaQqoH6By3j\nKtw8BpxR55e/dQSyfrjD1tp51YNyae420Fcu/F+BQjuD5HPaB5vckAoxrgmF\n/ufjSmmfU/CoUn7qrTfPOZ9G5aJuLA0v6qDc2iBVlgc1Du2CIA3e4ZUeJxkH\nWL14nMQlUrDtJ7K+Tum4i2em365uuj7oQsMhbhwfOn0Yl09LYqQmYCVCKnkR\n4ApOis+/5isqXpgIPOOXUxuCymJN6ahAz707S8/U2s9sm3jk2AScT1nDC1tn\nAgpWBK31Z7jX8O1du6lqbeh/UIKpCoWpVQwlWrEdy8odtuRlKJXlpVPPZZeN\n+xU1\r\n=puaf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCBXz/56dGLGYA9/n24qx8RMzvi/xteRw7lqkOu4JyGAIgTeAKQTyOemDZNPYmLkHLlnL3gb3ZdkDxHzrzJ2dfyAo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612356417-70d102fb.0_1612356555916_0.38789833619015734"},"_hasShrinkwrap":false},"2.41.2-next-1612359260-a3c6e28c.0":{"name":"@xdn/core","version":"2.41.2-next-1612359260-a3c6e28c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612359260-a3c6e28c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-r1oLErDPrcc1YkTY0b1MX0akRHKYws6TOkMS8/2OcNYq2wO0hL8AS6imVI0MJHjJR8oM1cGv9u0W/cOuNhVYuw==","shasum":"e157d4f04860bd0c5f753f2b5a319d4ed9a2298e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612359260-a3c6e28c.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGqbkCRA9TVsSAnZWagAAaRcQAJBE847DJpZ5kdBpU12R\nHlAYi06hn5Mwhj4ph57jnHOXND5RoKgrNwmV8w031TVSRkg/Li4IIQoXqqp5\nvSuqOuOXwpyp2Hjz7Pv2CeZEQq4whm+DrgFd5IdZo3UDzGxnEjoo0ZOOiLQ9\nIBHWk1UIjK6ejhv+uaa7iTNhoUL05B/5K1O68WO5DYzCiYMcxRNWhQ0qvbbR\n9RWlJznFPp/HVxfr8rdtH/iM0LyG2FGMViug97/+OfNkUJBPWr+Q5/izBodo\nBhaV7Xgnj5t+qiROtC31klDzxIN1BP3eN0aGLpzMQjFOk53pjbPbbDQdx77b\nBeuP8DptPiq0rod6lbaWDwQsUbQdhbXL52uU2YRc2KA9alOUNWAxp4bSNC9v\nyQJd7eMAB4J/OXJv5nPQqPj9HGhIEtgPDqETTwaSidxo5/bn9uq4K5DjZoK9\n5Wc4FAvLLoVxeVzqKeHWqrGe12Bl+Ypi21YNF2xPRvRMhvfLwR4hlQSCeZau\ng8agb74LIfRIIj1XnBS6trPRFUFK8YId5/iPzoaf+tTZohpKWBFn6V6ozBlb\nJUknO2xUCzi/XvNXBcKlCuDt1K0lnrPsDHGH93Y4NDWvb5lYAyUB34ENn/DV\nD9ekBP83NMMh6oPC6bdZ8adtkRPHC07jx6qbQclia92rRbjB+uyhTLWfi1BG\nn6bT\r\n=V3uD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFcmB0R+ZOyUh0b75d0CD/FCTsH2V5qKAgh0uApH+cDdAiAdiyoQZIzcL8ZllpBl0UxHz5dZqL3pR5DvIvVJOC61tg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612359260-a3c6e28c.0_1612359395655_0.03271865377689398"},"_hasShrinkwrap":false},"2.41.2-next-1612359443-27fa1a57.0":{"name":"@xdn/core","version":"2.41.2-next-1612359443-27fa1a57.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612359443-27fa1a57.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-qL8qwQ4egBYvKctfEpZ97tfnU8K/oMM5xdgqKLwHjs6mAH33cpmxJdgrjiveFpW9uBXfPCg5wia+OuTQ+4wWnw==","shasum":"461532e8baac8cd60951b8a543bbd10159603890","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612359443-27fa1a57.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGqeJCRA9TVsSAnZWagAAtrMP/R/E/9YzwAC2ICy0g1M3\n7xNQqtOLfyZNlKSJvOCLMZFKFCJQvFJWc/ogOCxwOzos8CS6swsZs9B59MHJ\n2bZdB2IzXlv06cA7lnrLRaOdfnN8dt6AwI1Lnjr1CVdifTSIHDCDL+qfQnlh\nl2CCsdsF/0ot4MFmZdbdDj/pFEb3zpFZEyvyiUjSrelRptt6OVD9hI4dUoUM\nhownvCvtrwxltnw9841SisEy6Jwnmw42VC34FCprY6CRDAM6RBmNs3Mvk6m9\nwKlLKvOC4M1C0BvNKy1OvfBgIxfmszveOewAYWWQulEvrJrtP5+QrtrIExvN\nci2fMjEJghQF6LgotJMSStHUd8YL5GDVLChaBJiwjh8mM/rGgaWLHudZNd7j\nOja8GtLE/zc2mNp0gSHsAB1QjwMIXUO9b3DCuyY/Xqtp6C/LsNk41+V3SzSt\n4YSIuSg44etk2bNuFJhkY0bEWR74Mz8W9X0cXlPVspVWnu9qzRdwM46FfPfc\nA6vFe5sa63K2qkZ/orQbV43Pf+l1v5SNDOWy1f+/xH3Pqx5kgcbymNU61e+F\nBm5m8p63sgKMOgrOA6gaXtfAOnJmsdOJjkam9UGVS/Wab+g1dZl0jAvFKa8l\njTpwyuItcJxwgleV+2XGHwSlonG3EvUa9obQq/xd7nQ2+ZaG460bQs1hSsh4\nXSiG\r\n=wa9w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFsRmMcWsz1cRcGjFeR1OCoL3LZv7d7QBP8ARR1J9XInAiEAle4/tD9heLNQJnvhBso2IwAHR+HHzmKEDaC7knqNGP0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612359443-27fa1a57.0_1612359560903_0.5283014336627301"},"_hasShrinkwrap":false},"2.41.2-next-1612361322-a3c6e28c.0":{"name":"@xdn/core","version":"2.41.2-next-1612361322-a3c6e28c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612361322-a3c6e28c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-3TDJUkvSCg58uJwUzj8DjNEfDzV2XC3DUCvYd1GtM4csLKd1qT/QzfPEGCe7mroVKFgi06+/Pyi8YyTOcuh3Rw==","shasum":"5a648f02a17bed612ac3b4789fd13dabd230a07c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612361322-a3c6e28c.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGq7tCRA9TVsSAnZWagAASIQP/RNhgAqjhALiD5rfIwRG\n461+pLjeAYljq4SJsuheQ6QJavsp1Dn0mNvsjzXLHymdrtiiMr3aKcCAwd2y\nDdcxn7N0Tood999CcHu36G7zm2ZCaP9RGu62XoDzkQxQKQfQKa6w7GCQI9GW\nsHuQH7iGWEGEPrdr+VGt/6FUuqi238tvIqTZByh1iRyz/pZFeAW9ZkL5nhhH\nqYJPlRQi0qjXd0cI/ichCKPtyNH7mk28crr92kVDkqydw9PNgN6MEcnNCbAV\n1Rfxm+ALTEwcAdVIZc7D0IHZXGya+c3fvqx8RNjqsXVwIoV0JyRpTZz98pJj\nTg6T3I4P69qEVtiOQnIG94E/JGEY0dyavLbj2u+2DMHSv5T/dm54Bc4ZmjaQ\n9P1f0hByoOfH2m1kuyftzitdjJDx5/NnaVxEsjJDdQS2azwx+v56xnrROc0D\nc5HUJ08eQ3eUe2odqR7KmwfXBnCJ6I4mjytSw6B8pDbjnRKv337ONA7gA3d/\nkWm8XjGayO38rVwq8chMT86n1jpbP0mAmS9oIc1iTREVk3I5r1Wh0//y/PAJ\nS5+weUGUAwJigkLhxDk0U4CDFkjmxM02PCf7WVOOs5ucp2AL11R2yFi3O4AI\ntR5CP5epgyAO9piLJYaapz4U10uR8fdFpf5WGQg0fm7VsiEyUWmiRcKxL2+s\nPCgH\r\n=5gMs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+VESYviT1/Bc1DpdvSG1aAIG8QNRwVmD+4x9vgxYfuwIhAMs9tuUWPDjT/I9w7v6GwMQN6cwJ6Jl57L7KC4aMPXxb"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612361322-a3c6e28c.0_1612361452776_0.5432395100638618"},"_hasShrinkwrap":false},"2.41.2-next-1612363251-80de88fc.0":{"name":"@xdn/core","version":"2.41.2-next-1612363251-80de88fc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.41.2-next-1612363251-80de88fc.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-0smwA6b4GTSoAITeZr2UOoBa6Z4H5ZxIsgJkmZGFna7QJqIEMWoPT1ayiHQ7Re9aar9SPg+/0H5v2zvo1bv/LA==","shasum":"dec29fe139e78c7c35f31c658bfa16fb5434a491","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.41.2-next-1612363251-80de88fc.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGrZ8CRA9TVsSAnZWagAAHr0P/RgB1sSmGiAtc7m3WiqS\nBLCyR8vsv9htc7ZkLs403SQo1DOG/LiHP/IsUX88QxjSVWuQ0LaXN5/vbJR4\n71SdLOUbbQv9teS3xqntlp8a4etDrqAyMnWm2B+dCv5TkiKbCeajtodgHJcq\nFWv9D2X0dJaHbPPqAO9cD2ksz7Nt6r/XFcMI3y1iwCvkiHL4WbGoQK66QRCW\nDiiTmWxVBZt8fzz0GdImKWLLON4b931bvf+aq2y9i549TH5Mey/sv6e1rwZ7\n1UfYmcNfunLngCee56LBnGblRzYPWYpuRpx6zRP4VE6NRxoNYOzCzIFs6JYy\nWXTa+LfaZUtQ6pZdXb3P2D+OEknP+EiYOtE3ljwGvFryTLustSnhXaT8ccG2\n9fthV8VgODwrmo/1K8MMTl2gQU9bZdcWkQhJRnhCwJtJxKEZ4glnmUuIyJC/\nzXue3Ov+4HT6W29W8uSVgW0AtvizW32XPJL9kU2olScehqEU5RjrhUTmNsLE\nm5PzD219IuF640Y1eHgIXTOH9f16Fg+0YwoZVdEFVz1rNNNQAYK+Rmnxn6Rs\n+fYh3wpY+QPXUrNGlQIuO2ZPu9NShXkFTyevYMIDaKn2kdtyWkoVMl2CQxgV\nincWoQU3rd4zcy3sBP5OakPb0Xj7BQnIXnrbxqCyQOR7tEi/56MOTofK5y85\nChTZ\r\n=+E/w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGagwpSciYrMQrBmxd3EnlZlKtVA3cb1D2HR0toJTwGjAiEA9GV5skFn/Iq/wKlHvutKTJ8CdHI7QR1rX7svQ7gdV2Y="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.41.2-next-1612363251-80de88fc.0_1612363388029_0.7675008653506621"},"_hasShrinkwrap":false},"2.42.1-next-1612364611-e263ef8d.0":{"name":"@xdn/core","version":"2.42.1-next-1612364611-e263ef8d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612364611-e263ef8d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-T3fT6huaFX0OQuLHzZ4nxQiyMiivFClomK1AdATsUzXF59bAnp2CqRP3PPanWPIdByH5nQF+f3GAagUJQzQHSg==","shasum":"4b891355fb21988ba7be64aa3e306e4debcb8662","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612364611-e263ef8d.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGrvKCRA9TVsSAnZWagAAhVcP/izyaXuAPiMPFBzdOeuH\nan47uDvlrmLDaeNyekn943OBEJOvdipLP2qROmDJFTt3g+bUnp/Qx16S7IQg\nUTmzbvMNJ3PcEuG7SX1wRvKHG6aG+Ps9ZN3sdY2shJ9xXb9mufO/gtNMwBq3\neSvGV3Yjyn9oPtkXqIVa7G3EUA2RFDs6LvGEj1Ux8w+tUAhXBpwy3wn1gocp\nXC4efhFXPi+9BYMPAsbOmXpda1A6SoUJ/cBFJHP/U5SiRYwayPYeKx3/5RWh\nsNcRECotAnX9r9gItbprOGiIWLaKqTInNarwNp9GQgPPGYk8O81ep4CI5hRp\nWvW2Rmo4pMqvlZLHV/pf4CHlK1uhNA+b7jRr2E1dxq2I2pqGBm94rafV2NEn\njq2/dv3ItJ8V1GEi2ApoQQphlxxxP2INUinsxPht0hhHmVaTU0UqjbsPfWUD\nuzZmTmubJXvH6W68g5aiEGC/UoygYzO9zgsOgJwNKryp10xiP+C2wGlnbjtf\nIM00PR5i2EGzbNxftMDzwHSzTQD3HzyDHKZKssJwpisqUTmHXDZUdXm3OQzg\nd6d+tFE86uBbOVaarBc6Vl2ntBU5TnqlJlqi8mFUJ2JP3Qt8MvXgwbKcrGjR\nOrM768FsyC9VzFTeHo9B/70mTOlf098OLxSxk/RvehJBOG9/5Gzur7V7r/I0\ny+ql\r\n=MeJM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBWOYPVIFw9u9k3tzdNz27i4GtCmXsRtkvXa/Z5c3QxzAiBtkBfx3/Ivna8UiaAR7IS6A9Kji+EzKCHBEYnhutTdWg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612364611-e263ef8d.0_1612364745484_0.6038739043209929"},"_hasShrinkwrap":false},"2.42.1-next-1612364768-cc897ed9.0":{"name":"@xdn/core","version":"2.42.1-next-1612364768-cc897ed9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612364768-cc897ed9.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-X+DxN2b5akdGmCLdFYGx1QxUCNofVRF88YJCrinBXgTx6syHTIhpA44Xb2O4sJhr39+D7wYkNDPcZasa7W6qhw==","shasum":"f9d4a004eda4bf0ac4eb5c5a4efdbacd78c2d695","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612364768-cc897ed9.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGrxpCRA9TVsSAnZWagAA+xsQAJpxChfAez8UVwY/76Dm\nI0fkmV3OBMea3DVpSWI3plGDMiKOT9Z7/mT7nxHULiPhzFM+E5eKSSeh4J3j\nWBR48bVdr2/crFRIcmZnZTQUh7eXKIaF9vQrnYGG0r5vknYGJc6Jofy7fJcX\nBdOIwOjvyqT/V5dLw/b5pX1hpWaay3Yvo+ySGYljIc2/lpcx0e36OAETiJcc\nMJdhT86BCSz+x/eVq4UwM4q3+BUO+aSaONZ4LXCKXz3VUuXEe5G7fidssKki\nxryAfziQ9zJBqcWmu93QkPaEIxdi+8pJsa9gouazHYiTO7zBvCYb+G51OCpf\n5/ORd2nvL2+DhC+/V8thIyviiXZZryDxsuY7wsDxxxVl+9eTNZj//1FVLN2m\nxHFeSvucEryHG7SsiULQsF98YioonT28cHBuY+6SP0P4/M7xBwU3skQsUUNi\nV538UZvLp0ePllW/qefQHako5itIAwHojrUmBM5HnvdFeOcNOlB4SfqubuC2\nN4R49TtHsHUDJGlq86a0qFAqqL8aDl8jZW2qVcrn55rDOUkSD5hgCNXUKPkE\nicMwfOBlqX2b4EruFv9X+xr95jm4DNY1QlmCnX5cRdGtB5j9bfu+Ib87gIeP\n0lUVpZ7h6vCbtPC+MP/YBj7dVbhzsUA5N0il+82YC/zOK1VdGVOUTaxRRgxa\ny4ug\r\n=rBw9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFOr7DPyzSjyH2A2zgbiXhcmlLPxBvYNfF/rN4ZRa1LOAiEA/sE6c6PX2y0eQO+w/DHvgYHe21npmZ+G1+S+4wrNYpM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612364768-cc897ed9.0_1612364904812_0.2779764420164268"},"_hasShrinkwrap":false},"2.42.1-next-1612374953-cc897ed9.0":{"name":"@xdn/core","version":"2.42.1-next-1612374953-cc897ed9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612374953-cc897ed9.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-OyOHr8FAK2OzsSCsWUsKRpHSonJeTX5KLlyCPJ2d4QALqor/Iuhr/7ilWxNqgQOGriPIMf51GdrISblpCABn4Q==","shasum":"4102169083459194c656b3f0d045b0aa303da737","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612374953-cc897ed9.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGuQ0CRA9TVsSAnZWagAAoC8P/iAqVzD50cUPclTudPpX\nR3LyYAZvKnizxjA8N+VvE6eJiw1ddOomkEHhJnXhg52ODfEzVSJ6lAjXH23g\nyL3iOIYhkNyVyfDVgiVjaGa4z9AjgLtZpPqkbLFdQJ/N/FIfqHAZika4w7pz\nRMITgUkfRqOiI2tKj0HroaG8ZNzkC2B9AIDPtEmx6pjdh5QzXGWQxscUR/vn\ngWxEFiA+cKSO3IQOehhtFzNvCTQEtrqcik1A2jQ6UiF+F77DPmw2y4zHs9Of\njMKaGPvPkg5WXPUju8k7lN+BFdI2uEZ6Qmkx/rqfKC0mrkyelWLViG8wTNR3\nsncNInzrBV+7Hu8CIINyIFDfbM3sYMDPzh144whve/daA5qEKmHmZLcQFlJy\n+BwMt5anJlynAhsmwB2ZXV5u/ReQQzT7qqSdfpyNVKfeq1mgrmEDp3Rvql2T\nRgMjRWjR0fjYiO32JGSrAbW5AWoY6wKrJ2Y7wCSQGHyAHNwT64DNOy7cPBva\nhYqSD9IfSoRWHRbWkEtfTqdSZtwaNpVuw5hytluaKRGC3IQlconuFYBOGZBK\n8udFsNeaD4WT/jv5pA4zgBUba3RDzL6zYRWtUDpC0LLRSfiEKUTZ4YgelsDj\nmXx6RTOKzKQ7KttDUtcU1X5Zux4tMx477K3bwBjmglvKoS5K6iIqdj7ywfRr\n67PI\r\n=YhCG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPihN245dhu6i+MsiLVQ/j68QZGvTMDcTWFkTR9677HQIhAPITUaH7FZ0PiaMREscZTIpOgr6gxiU4L88ctxeYmuyb"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612374953-cc897ed9.0_1612375091364_0.10977129211198622"},"_hasShrinkwrap":false},"2.42.1-next-1612375734-9e6f1b0d.0":{"name":"@xdn/core","version":"2.42.1-next-1612375734-9e6f1b0d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612375734-9e6f1b0d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-PfyOuFPG4gNdN4Cx0RR08KkPgN/bNeNfqK4pN+/R2zyfR/PggAajDI55brpFjzBvrhHYONDD/JFQ8U8AA3TOQg==","shasum":"01a0793e421160314f7e0d4ede9fa70a3e238fb4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612375734-9e6f1b0d.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGuc9CRA9TVsSAnZWagAAatMP+wRVG3BUUwhLJMNB/cO4\nKebtjW4DjCIqff9nUegiZRMbElVRwZAWVn2VMi7/fUbJT2hII/nTr9um9EdC\n0F/Fhw3AO4YFkuGAWRQvJ8XEEjmugkJJYKkyH7sVsi9HGz3ga3z5tVq2MK7s\nHyGhPqperw1ZTComo7yGRRPJQXDtWtH4Auiy5yrj9LUiFWvbDf+OajCpOad9\nkzifUwdlOM7k9Q10llTXMUcnKPMLbDs2EDIiDyKMScjz6kvKbTNtOrgaf79t\nFAGQBiWeBA7Khv1uPGnUaI03M+aBqiey1eqkiBepsCpNmf1H8kRVNdOxaCyx\nfRoeh5Pf6HYtCcEkobhqJFcEwkJinE3kUSY4n+gXI2RqNEGJT/GI/Em6Fpc7\nvbht+JjXJF1AgvG/1ilfDYxoJhll7BTahgxvJ5bYO0ShMP0iI257MP2vqu30\n80X5UwZtPi+qm5z6rZPye/vy78eewEHraLi2Cr2LVu1VpIFDHopxUCUaz42u\nVV2VY/rApF8AJP51jZNgF4Y5vKHyuDD2miZPk1pmB3mEuAHK69PAtJK9mThv\n1agg5OsWAQbUzpAVBL4DPvewRV8DbhoVIsXrib70D5tpQC/5PdNqWGE1PkgD\n0K8NWp3s/+y45673qH2sNWX9qJVXBIZf6DJ/SOOldiiOPBl7Thvo4kCogJkH\nLPCc\r\n=AweX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXgd7FrxSIdS0iIbqYX1K9ZxnZAbAWUZUw/upLPuMICAIhAP8zNxMOv8KqMLS8fIu1CP2WhWzETuAujBIsDsdF6WF4"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612375734-9e6f1b0d.0_1612375868337_0.9134090596363975"},"_hasShrinkwrap":false},"2.42.1-next-1612375968-5ac963f0.0":{"name":"@xdn/core","version":"2.42.1-next-1612375968-5ac963f0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612375968-5ac963f0.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-CrCehIrArVuQfWAO1GOSTlnSPwMpkQeElrsEhpMf/cwwEJcE0W7Bu5SHUJyXB3K09s6K410dajGzcOuvhPMzYA==","shasum":"82bde15e8de5ad1b11f0380115fa858e0c5cbf12","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612375968-5ac963f0.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGugXCRA9TVsSAnZWagAA0+cP/jAGwygiJuV8f/583B39\nW/syueE8y5XYYjUWEpiACIZ1DgnxY0IuZDeWh/idjPGBI6KL2a2FkJF2EX3d\nseKmgVEzKjhuJYRGw2odJXlkXxRjkg+cLq9yDW758hNJ0Q8uSpIc3RXzsZgb\nhzhj1uuSifEcIYX0mGq5X46a47nUlUENbLtf5ors3wGUEkRZC3SoFAJI6gPm\nxHyuQ8mNeIHuMyFueBd1yzz6ggwW+fY6+0Zo+ZRjFXgF+zMVaHR+8/e9tAAB\nRYVQ/0lls3VYhn6niZ0LL+Yl6Z89ryz5vG9btpQuvOkzWDjjttgYkBT6fpnJ\nxjw+a7EA9V/5xbNJAbfT24qL2J4o/ySjTAso9wDlIKEuJQPQ5bDP9J/wqhXH\nciH8fnn7AacL8Df1t04yuQAsdEGAy+XWTlLGQBhQvT26EhhpQzaKPujJo5iv\nENeEj2T4fIuyIE/2aF50gJCHnEn959KEpsmFx8vm6kWa+CXtRb60SscEnT0/\nP2w/kwBPbujouzqVEd7/QwI0B7lS/c325y2Fc+g3c3f6rS2uqeCn7SzOTAQr\neei8Tg52/LvnKx8jCWeZTH5flTIIplOoJfV8a+ivAa8d767i6ONWe8X35Cab\nNa9TiYbAJpP49SSQsfWFtD41lf+MjRFqrOXVGfy9rA4oe37NIG7VlmGrBxTX\nWmOY\r\n=BIBy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVFzsh3mg0x4ss4S0Toog6nfeCrfq31TGPTZ3pZsAxVgIhAJ9//I4QTVxNk2GxCmyx3IXdRUx0a247ha73hwmzWXpo"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612375968-5ac963f0.0_1612376087019_0.9736370004222186"},"_hasShrinkwrap":false},"2.42.0":{"name":"@xdn/core","version":"2.42.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-79XwRggQXd6KCVhw+HCHTMoNcaUCOXUziSRdNckEgXdcMNTAiGA+boTzflmklnFglpY18zCjEiXrD64Sgya4LA==","shasum":"fb76fe814c5b6daf608021ff6865698749303608","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.0.tgz","fileCount":174,"unpackedSize":664592,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGvCaCRA9TVsSAnZWagAAbZoP+wdkbDTumRxM81M3q0aK\nSkDUv1v/oN0TDgSW6zuqi6ZeuBOr3cdgv8/W/Aq73GXftIiVfHyqIQKSGihG\nH6TyKXpUYtnDBg07ntLHK+fSbHU24HZsn4fUx1ehYrW9atAFLozYXalJ2s6B\ncHPMKUnIgILgOlUmP/87D04JgOBTs0gLvYbTyDL2Wi8BJWf2m2We9nDQ8xYM\nWNnAigmLxZFwJ9ryADF0/beZJMsaBndSJrDRhxEYUtRcoT5ZN6mvj2lnhrN8\nElisfER4n2FIF7o1BWRBPWJtg7DitHgT4VoDo6/M6fBIMjzTb71Ta/j5o+Px\nEoYM5xq+YUh6zKKrinNYvvpRWJ4UCdnr/2VOthCVtQ2sHCfL1Anjp5pA2cs+\njNrHU/xbidiYEhjuyn7rsFzAn3ma3t45Gi6GG3XcWp0S8fJwBp8bL/1tSl7c\nLr8GQJdaF092cPOL2O1Sd+9YJ+WNW2xReh5kMw1f6VKJixKaHc8Z9F2NG7GP\nK9KQ/yAQN5k4pKDuawUfp7XVZbrVQVfeTmfoaImN52tOwkPyU5j7fGW+nKMj\n0LntM7W8i4ObfVmcn6E5lbSR+5cSNTcOV0kuUMSisvbUW6nc+0PjRlts4upb\nBEHBHAnJAIknsBjpizpzNTte6VL0UzOECH8hTjFm0Xlt+eIsyuWZlPW4mBdh\nBc0U\r\n=xXnr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDN8SoQfbdQ+kbnXJ1BLn31urnYeLQMKWNVisBwnUuYXgIhANjj2UApxSUbYSTTAlwuFyNDAdFPkC5xJPh9t6+907aM"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.0_1612378265554_0.9151715759218428"},"_hasShrinkwrap":false},"2.42.1-next-1612394810-d380b62c.0":{"name":"@xdn/core","version":"2.42.1-next-1612394810-d380b62c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612394810-d380b62c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-RgYIaO50hX03BY0tgptVwoj4ylw8WXczwVtj3I5bJ/U66RBSqfB2Yj54zEkj6i6OSlgrU+LJAMkwL9m2LQ2rYA==","shasum":"06482cab0c8510e1912dae4abf3b0ea2c4624aa3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612394810-d380b62c.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGzHUCRA9TVsSAnZWagAAUOUP+gOnabK/nQjPLOyUi8ku\nTxRemiN2kXL6MLbb0UdrsbQSte8RVk2CSdf5InLanGUjFc9aWCyL4oLB09Xr\nRgKOkFqo3GKNhnm5ap6WZOQOgJ3NZN77lJ4A2NWEUz3d+V1G/Vu6pqkJTM/F\nS34Fu2rBUYMLujdRt7FVz/VWLBREUdgIcwznlvPOW4OeN1jFDIHd9cv3v0Fy\nw/uSUX9VoMXJII9FezronmCxrGPY46M0zc9zcwFimgsQrt5uQluJkkMQ3j7G\nmznboygrAjoebahAkx1fnUWf3MDQ/gkL0gdzFJBo77NyDlYwJe7CHcWqPRaZ\nFzWnFcfujDT1nGHiqijHMh3hnV1zggIZ2tVmT59N0Q/fB5Qlkd/wGWDXbCM1\nt8DT2KcHnNpKQ1A5cUsoRAKKfh+Yetn83wTi8b+CSytshkp/p5RVKTkTOsmc\nrUWIcARLQOS9f06n9xfTkZHq/6cQqlqo5jDWk9UfVUmonz/DNr0E50xmSkRN\nUtkv2ZaQBP3KnvAWWEPiUmIFAoz/mnNmyb/AxmhQKb8CNfxKBLiyEdkLKGzH\nfGQuvG+179vw8l2IiyqUCnwqCOw4MKTQR/5+GA5pO3JbE4I/O7NAF3Ig7sct\nLi0K8pkBjAztq5YEIzS5bqXJoBPnQX8za/y/bwTWTFhupdGBUQvo1YSwKaF/\n9Rcm\r\n=14yo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPvpKs6xq/iSa5DI7B3bYzwMGYlyUu54mO67wD+3FO4AIhAI0zabEjuwEs0w2iJnYRev0pOtrThQSj2dWQ8F/xfZFo"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612394810-d380b62c.0_1612394964050_0.8463278370031866"},"_hasShrinkwrap":false},"2.42.1-next-1612437293-5ac963f0.0":{"name":"@xdn/core","version":"2.42.1-next-1612437293-5ac963f0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612437293-5ac963f0.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-fHrgQMfn2vjTlCKIBO/nh0XA3WsruA0xSz/sGjPaf15b4+yH8QZhsl4xDqaFpp6zULTCQuD3k3NogGZcOZGAOw==","shasum":"e95c2286e0f3bfe01696bc062891718e41173ece","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612437293-5ac963f0.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG9eoCRA9TVsSAnZWagAA1XcP/3wcXSsNP9/GoU8n35Za\n9p7wLy1hQUrFCK2aOFzUmo4ENEfb3D/CdausNuiRNcnzM0ZlSvERhF32ZbhD\ndXTIFJS6X1HXwKvFA1/cDToDsmazQmoplwqCn1rMjkKyKc4vg3+5WD2D+2f8\n7itc0bV6YXAMqX/DF6dpnhsjsoo0sQtLRAfRXmkFhFDMs6RDFn0yB2rmJ+i/\nN7xBiEzbjXXu0GCV9iuIW1uX/gNOYFV5Q5+jd9m2I8uk5ot84GclUB7P78KX\nz8cNItPV8n/TbAtwBY0lrFIDz1iPI431DV0F7/je/hZi8BOtgsg1P2u2yIdQ\nPkL1c3J0b+/saSVLB5FwyWNRSfCzMXhWvSKuIg4w3tdG6pJvxUbOQEYG+Q+I\ni+B4o8d2orPx9fXzHtWSUSrSPm8/RWJWwyVWLQwh/Q0/gwY8QvL7NmLUfF1W\nU/Bire6wNWshMTf6O2OyEd2mpOCrqck6fjEzTHkwXJVMRxmokB8YthdKc2QG\n2AlK6w7FQ/SNQh+lGSfS2DWLP42alJeyu1xLM3TT9/2Po19gKqF/5GHxris+\n1+kvuClh6Sm3COVD28Ou/w7+nrJ0mx1SWFerSRgzPnRjRmH1R2e9sP7WI4Kd\nX+jXVWxvKzGj3Bqy7hXjEqcmtz/8QFMqMUd5UgAoZqeg/98nM/DR2tvNrd5i\n0JcS\r\n=m6yI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAxjUTHlXFVVxSaecUVAaBCqTNQqPpfgYDv4oMnePuxpAiEAm04uur9ZywFmHGecL2E5uacaqP0Yu12kV2inze4fInY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612437293-5ac963f0.0_1612437416034_0.7001583340081519"},"_hasShrinkwrap":false},"2.42.1-next-1612437819-8fd5f5a3.0":{"name":"@xdn/core","version":"2.42.1-next-1612437819-8fd5f5a3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612437819-8fd5f5a3.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-hInodSO8v7v5OIlKhGYyVwdKN5z+7eBjj88Dt6JHQZB46MZgWDJTHHsHXoQBzwwuVoCFb0MnB+Pw9gEX/kyRvw==","shasum":"b6f3b933ab5fb996d336977d1906e374b39ac27e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612437819-8fd5f5a3.0.tgz","fileCount":179,"unpackedSize":663728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG9naCRA9TVsSAnZWagAAMxgP/Alk1Dd6ip0reQvEEQWY\nkaYAIWhbzqybzg6MifS3fecvVLnCP4cE+6XdtVxtSR0ljdv0+DKakU1W3LzA\n+avp+swdOG2Bw2ax2fA4oZ1M9a+Sm77+7EeZ3lilP4c+sYhz68VnWgxM073t\nSV3rTXwHy7iwiGIChF0thvbiDa49Ze3cS1nvziE/7ijSwEmC04tqBiiKnnx6\n8I/AQ/eg47QqXBgcuV2OoSJrMJKRtGwi6p+SteLK18U1qFJMn81wNzGvPcJW\n9+0l2bidCa/We2FjvTCKQDqSsv7xaxJdoqIS6CMmocFJS/T02mJ6pEI9CqQM\nDFnGAD1WnwKi+33bi0Cz9eGSjsmBjB87wecY5au81mGEY7sp63Rtf6zDdP4n\nofeQTI2c7gzgSzM146qKJoJIxZpJc/BdmwRBtKjvgDQlwvLBYUTRNILgnMr2\n79HjsshoIuVx4LX5lRZ41khomWVoRl7NCgWHyqXNtmL7FQTh/5i9MFBzkZHo\nFaVQ3i8SvNqD8DZb/M8Apg8wuFvNTRS8GPF+eNXHjjd9ucSwW70SXc8gUYQj\nZ2RizSYoy/xuBJ7BA/c8oZF4R2E02iGUW5jLRM7FplH+Lg2f1mDxYugX2j59\nitzke/gacSvTFDBCFjK9TxrBMiw3Rg7nsWLQLEKBTLfbpKkTgZN8SrpzNl15\n9tPf\r\n=gQYB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIepndAFYqTSFePAxGeke2nWCeUeQmlmrULSQBfOOZWwIgQKXD36mQd5ZMZaZIZTu01MesO8lIv2iuPEB46vQdQmQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612437819-8fd5f5a3.0_1612437977443_0.8106280128001677"},"_hasShrinkwrap":false},"2.42.1-next-1612438697-23541602.0":{"name":"@xdn/core","version":"2.42.1-next-1612438697-23541602.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612438697-23541602.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-rVXCCPMcoDrf4HODRzC0GtZ2/lFOnLgZ76kF3QSm+8rocdr2NLtE/2kYGBy80AzJ6yNfUhAe0r4qxN6utZsbAg==","shasum":"52e330da09bd95770428ae7b9e338a27a2a17d82","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612438697-23541602.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG902CRA9TVsSAnZWagAAB68P/ith2Wg9Vd2TOF567pgt\nJTT5BGjZ/KBpfYrJXWQozt4q/+RGsoMGGH29ZHc1MS9OtLwdexQZmh4c+UvX\n3AAqm2H7DDiIJcCO2StPsFTCEWceWnYONzPq7QDISuYY0cWXRpaQUkMpd8Tk\nJ07HWLBYpLJRfkkdUVNuPsYegUhrEyEJ4ozvGN4D9WzU8QQ4mIfTTzw/MsOC\n1/W6f+oTKXWz+XCuQsW1udqtZZHxNBAUH123CQeG5O1PWE8RRBYP0lbz3K+p\n/rSFIU8c/9x1P9byzZKHyVdz9PrzYC69W8wQFTZxjy10sSdOE60aji2BN0y3\nm4t5ApgcQberUV7b0kMeYrVW8L5KSxMumEglHV5LvucfJSSC6cJR0bjAe9va\nGE/P0YawVHYNMZm0iKRTvuuh6h7/2qBgjN1ZxdO5KGyt6S4Zo3P3be3RlG0A\n613WOcU30H5DIOKez3yWcKt7IxqU8d+KYrjgznL8+1xMywGP5x1P6pQNXNzo\nhdlR50JiDYMoJc+ggR4SCTLT3/TPmgpuKwDlvczbfiE1qkAwAXSk8gkCRGQj\ni+maLQZxmLECzrxZiaC0QLcvZdtHV5857sjNjO5UhluTy9Zx/ok8mQsdzZ0B\nHaM+hykF/gurNWwkrnsr2EVSpGuG++loPygmwq3RaKe6EjONfpau871C6xcN\nLPBW\r\n=eFqY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBwY1PSL4+IrnNVPwQW3ZxhxdiSueu0Ke6hmdiCx1GB3AiEAv5244MLoyYpMjV9aM2lgeEXA+yAjfEwoK2ZFhmVZhSM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612438697-23541602.0_1612438838153_0.777555881852422"},"_hasShrinkwrap":false},"2.42.1-next-1612441950-e0f0fc1c.0":{"name":"@xdn/core","version":"2.42.1-next-1612441950-e0f0fc1c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612441950-e0f0fc1c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-SJoxS6voVVvjo+/f1jDDtx/NgOP/R0MkXP0dE7peIy7QYehB6angMhHsenIrR9NJZ6AdnSeJ6nzsrEnPtQDSkw==","shasum":"fdaff19d9e2cf61950b1cffbfddc531708481ad1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612441950-e0f0fc1c.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG+nPCRA9TVsSAnZWagAAcPQP/Ax27T7qzmvuZ+YOHIE1\nMg2cb37nLWq5jWrV4mq7Ie1bbrJpYOJXEoeg9gaHs7a22SvI+9ZEdwbtbYCo\nVeG5FDN6K+glzpepINNAvvJEu1GHsaZ35qAUxjeaMuJWn0HTSVqmkeY06CdW\nIuPM/SO35R0szy/ek+W/mAehYtVedY7O9lNxAuWjWTF0vnCd7romjLtg+h3i\n21wcuMJgeciRzu6FhZb2X8j91YY4FkqHKhON+Kj1DZLIPbeyHFKtclcgfUlW\niehLEy9MTuus9855VkKF8xvwyBeF5v8P1OdMkFPTtTOSinYZ8zsaFLmLwiGl\nk8SDQSv+ORE8h+Pav5KdqXetRagDMRJyyOKDOSlCunssr3KV4e4UtFeMvbW0\n7wnaWc5A9yTM7eVWMmzZVka7PD6mdVJ6Ou7Rt76t9W1MtEDWZOfOe7PRjOdF\nLcT5keWlmW4krVtR2oBo+cInUoxQXrFSwVEC9NL5HPo/M8crfkPQXVdDgLc+\n+W0A6Y/xZVcYjse3cN5dbIyUlINK1KyQdXq4NfjeguKnO7ruZdw7lnknYV9T\ni3JjiCqHXvP3jctgWhDW9tLdpI5PnuIH7mLJj/ALMm6GLDZRV4yAX15VFtIH\nrjUWdkgyv/f+XrELnvR+5nXX+cVlIX4fc0BKvmcFc2S0YUoY7SoEaey5+Dt3\nq6lr\r\n=0V8l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGLABrnv0YsSiXJj2PL3XVyaYQzx/deHemSMUW0+O+gJAiEAuw0YHSDckuFI1HYYMR5Nj6ZOpZyEhh9nk6ISE5yepXs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612441950-e0f0fc1c.0_1612442063083_0.7909008228878129"},"_hasShrinkwrap":false},"2.42.1-next-1612444959-92f162f7.0":{"name":"@xdn/core","version":"2.42.1-next-1612444959-92f162f7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612444959-92f162f7.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-hUulwx1xGYpBNrpW24l7OFtDma+pcXBHNbxM8wNvQVjDNfuzKLT2hnfOtUze6c0kCl+pXmok7XXNIKZuoQmnYg==","shasum":"1ba5d7ecb3685b395f8e45b9034619a4f2289465","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612444959-92f162f7.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG/WVCRA9TVsSAnZWagAAQvQP/Rt/mz01EvE63xrqxyLG\nMhzNzrI7p0YG4qF8Ts4sMITTQokdwfDy8yuqWRUAOmIFxTTVgiS54Fad2+X/\npdQE3yIPdO7//HONbwdQI5rE+AoSSFz3StL6FlEFf26f5lWD3kJHDcw7ourF\nrQIkjen/t963U+fSXtdKOzxIPkFW4WBCbJQ7r1u8sHH0hAkkG9wJxJkKfwIL\n+pRyGInoaV8GyDTg4YaU141RU9+5Xg1LOfn5U96GktJRL4FQMndZBoYmvRFQ\n4Xd7CUcny1w8iEPeYzvALO9TUEmGRTcCpw/8739L5yNL+Kd3vLsKmFUZHBW7\nEme8diNwBh6qGNUYqdr11sjeW7/4t0AWLGfxrmdWR/5uCz0JgSoSH8DXHf9q\nQq+a/NmoiMBFyoU/33l2QILTRRngz4jdgp6Wr4oaFr4rvR/RZ+5TjSLILUIE\n8j0fILF4vgXh7LzCPA9yMw+gF9Ltc6aOP8XDZUUkfubtPvjr9i+gM09b3mo6\nyQx1tFmDVCeXrTLLqcy/wL6s5IC37ZPSj2UNBZK8iHLDjpo9e+Vx9wespy5l\nET7SwmBTp7/eRle87wWW6P1z+bAJfc9zj5Ag3gpklVnjx3NS/zpnziDiViNb\nSruwDj0zb+0C+ouuqAz1DONaAcC6ldelruKLntwSOnuLXVF6eS2AmrhS2Uic\nyisQ\r\n=mH/S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBS/ePh3HaJHO1R/lU9p9A2Rz4CZadl3htWRCLrJbjGZAiA3wrGyH/fqLqayZJ5q24lIvj1YCr2KjTUXyQCnpL8tDw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612444959-92f162f7.0_1612445076311_0.008286294893885549"},"_hasShrinkwrap":false},"2.42.1-next-1612445371-e5cbb15e.0":{"name":"@xdn/core","version":"2.42.1-next-1612445371-e5cbb15e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612445371-e5cbb15e.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Ur74oOECv4H7wwkXJmzuuVpTp4xYFeqZGVCXh3zonYrAzPwsxs9zN8ItOIahdmPi9CaP3EgraC38RsUpjq0V6g==","shasum":"467d2d27c6f86d55f30ae5c548f3e46c57c05112","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612445371-e5cbb15e.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG/c7CRA9TVsSAnZWagAA+bQP/jvAmzS78Ti1zNwjlf6v\nGG2obkPY/ZlMMfLmQ9ejoge+3cRjaFc/R+DhVzc0WJzMoPhoEbTzt9siLftN\nqV+Iox7nnzpTeJd6uWryrF2egHRA3FiiSCS291oaMB7cMeAdV5OohLrfzffI\nC2y7tzCYJfn3ErT8OQudYP0FumUMxnNZdc/LxkFZpxPTnpwxIwTyNELGvMrF\nfsYcUOfy5VRGFDELhegHoS8BQgwtdXpyoG4VYfywQGVpP92iOZ6vNEgo/p5+\n6+Ne93LWtRQiWbboQ07AaayLitIcFFlWrNvhGKwo86HIo/fxl9p9V8iMXm4B\nQJGHcA6x3pXAtNfAJw2H7nP3Q6ue3lHZQuzyG0VeLxqFQFtOKiJmmJP3Kf84\nO/Pk6W5AvS22QG0rlDRTYDP31HJJoTpImB2uM1pbohfXYsEnXMQBsH3wNF4P\n6Fh1YPtPvNx/RZal8hKTOUk3GQYtVQ3kCYR4TPoso9h4oC+e4EyVNOnzUoe8\nsRZt2XbQVfLtqTO6HkKEKe4340jLqGqQEp6/CXxZr1iIdTiV1iCrZu9B1n/x\nGFED8/v/c2cl6527YHgN2j8ilEQXf8PYm/Gmpdenq7NWCsJaDjRy62vuZeyP\nzA7QO7z+wJHFW35sf+wUcpEPWRMZIoNscUTzb9NeRQg0UvNhPGpJ8JNULnLX\nFvF4\r\n=i2Qp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC4P2AAdFJiFIa6YQ9T5CqnnKwXCAFIQLXgH6ML6eVO3AiBOjo15+8QZx2o5G3MPD57pc15vNa/XQ+xjpsd2kU8mCQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612445371-e5cbb15e.0_1612445498130_0.39282975360882055"},"_hasShrinkwrap":false},"2.42.1-next-1612445648-1fc3b936.0":{"name":"@xdn/core","version":"2.42.1-next-1612445648-1fc3b936.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612445648-1fc3b936.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-xKLr3CUy9KPoBBEnQDUh35pCppofBBDHhuRzCFr8Be73Qbk80tdgUc8PEnmCmCKlinWw6tM3PylYexAwucsXDw==","shasum":"b713c8e15db2070aeb8a7f0a2a2aa902ee996cfe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612445648-1fc3b936.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG/hgCRA9TVsSAnZWagAAeQgP/1p9vuvX9UYk31UgnT3N\nMmlTHpIu1vpxpWAcyFPu6eo+/l7DRwHXXeXV6twBqxTE7Aoiy/+QKD+3Hn6J\ngoMqJvWpY5VILSqZ6a8/kqOsGh7xSj7doMwjcayeMbdeIdq0WnikWa/pyTFQ\n7Am/MkRCQZDWNALf4KRvNBsIC7AwW3gFgu4WppUOi+qrlv2wkVmTK2uFt+AV\nmpH8hMnNQFxVJmV2cYp7jmliIvMplXfdEnBXOUPe6VTVGCtKmVI++RGdaJhZ\ngO0PWaErdE1DWM5TPWWvi4Uv7AztPWs4hQ1etwf5HE9ndgX0C6sYLz88iAxe\nz/KavY6Sa6oGPYDNSvJrsXjarkNnHbrs/T+Ol+sajRgKT+kSS1lD92MBrrgO\n1N9GMlzGdGZMqXOvIy4xweV/P/7jBlAUb2uw3YqdtN1RHAZcfZLjNMT6Qfox\nzl4bW0OhhNw5Lx503n27ByPn7T3vfUgRob88xB6KosbcV87czBbG3LwYIxG1\nOpycVg4HTJk1G14ZOU2BxSEYbn0a7qxiMtOu7Eko1CF3BdnSvyiXuTH9iaOo\nZ4I4W9SVhKbbXh7W7h9QP3p1uPuNaeRzkiAJF2cAtJsgFHILaRCmxoS3tnml\nPrtK0SDqlIYWnRhBjKc13SYCmreG1M3yDGCUVLpV28J3aKYNgidaZpeNK/b4\n5qx8\r\n=7/pP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6ceyR97R6/mVI5b56OloAMnUMeVXH4I1GiLItD2CkdwIhAPi4aoudAAi6GHye8SW3lgCxotJEMjQ2DGwvdi69Ht40"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612445648-1fc3b936.0_1612445791631_0.8362750365605136"},"_hasShrinkwrap":false},"2.42.1-next-1612446878-5a7562c7.0":{"name":"@xdn/core","version":"2.42.1-next-1612446878-5a7562c7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1-next-1612446878-5a7562c7.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-SIK81IRldlALKSlZbJzSOEwVbBllMbaNA5jMgKWtIL991XW18QKOeXlIDJOrlg4aAj0NnUgv+pdfhSePV6Nbxw==","shasum":"4d0ca40422fbce64cb284e03c0963fdb574a50f1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1-next-1612446878-5a7562c7.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG/0cCRA9TVsSAnZWagAALxgQAJjDcnm2BQyOmcrpmdrY\n0hLmxAva2+zKcEhBvPEV7WHuoNaIcxzYL6rQ6kltd+eyv6t4yjvlNa+Yddgj\nqrh4YaDjk8OMbU5BQpEHG40kuq4CDmhDDOEQOHfzDKAq/Xq2doAMt3RZuoOS\nyQBI+oe5xHdGfHV6ViC5kNXC80+4F7SS8UdEvd79Uv4fMMQkAIiBsbddQxHv\nukcjWNYTEWJa10fdCUl9BAy+oNRZqQox89VvgBgt7PEAxqMxVFapwniZdvml\nx5xFD5bMBAil6xuvSpXkabfHgTON9GP+DIOhdKonzIFOKL8c1Wy/OfRyGOEx\n/DamtlPk0f9GWS332lKmNcPVlO2w0aeqfF123eoyIhWEhMdrLLZKOZ1UDdCy\nsfDuVYhoyYl6OZMDHjyVBMXDPnRRuGZ5n2L7/+Uv0mpApl7HeJUOXMkVLb42\nyXOEy4AF8QpQ5KIXUwnhurvcApEk0WoebD7orEQflEkHEm22v1m7nEP3ImSy\nNw0TZhBRteN15uU75gwkiirtmAP86yTWXOVihayQZFL2QEVzwWLmh4yY1UpT\nRIAzc+Yr929963/Vknen+FuHm2nWbJhbU+KfZZPk2WmR+f06mUt2ij9rttrg\nxVCGjm7Ss5RgJcTgRUxf4k3ggKkgis0sgwenlTG5ExNBfQrNjQPNQIuy0zTY\n5qbz\r\n=l/rI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCr8fZgvlpzn4Hyw1x8ZEKirRwaf9e4+UGsg4VzAtTfYgIhALhUBUuh+ybIJUb8k9mcA/ptmSKRqQkFQd8dEtxb6EPA"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1-next-1612446878-5a7562c7.0_1612447003972_0.14155752177133762"},"_hasShrinkwrap":false},"2.42.2-next-1612447260-a2ba8aa2.0":{"name":"@xdn/core","version":"2.42.2-next-1612447260-a2ba8aa2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612447260-a2ba8aa2.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Zmh5ANg+ypR5e2BzqojyFAPueQ3eu00S9mZMp5Ep1D4SDkmy3DK2fjM2m5UG1S9FzR9GzVYNNjU4mi0cMasj9A==","shasum":"d92ec26d77fea2c3f635251072e7e8b5648dc235","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612447260-a2ba8aa2.0.tgz","fileCount":174,"unpackedSize":664646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG/6hCRA9TVsSAnZWagAA9AcP/1pmVl5xLgLbNUe+eXE5\nAviVMTtC68BayQ5MewMqxan+Q9ZxuI5o5aQRk0rWP2UXMeQF7XU8ibq/bf02\nn+40RZhTwddK9lwXR0QsYBIILm+0l4jUqzfjZj4G6Docd4A5FHqZhlFWOtAa\nITr9b8YYd3WTVBZIfvcXa90XPOcEsp/Sf7LsSSATJ3GiiF2VJINNymUf/mTJ\n+xBVg+fL22RD5OrajB8rVyKRQV0jhuxtv3yXKVboBT6Rg0GRe1oZCoOnsaU1\nHrJlMm6On/hUxuIyCb7lFVmwVpbCObYAkdr8qnfGj9Rucjv6aG+nbA05bEBA\nOw979idPxPIPXJWYFdy/fkztCNz5TyF8LFUaH72VZdvUq3bpQt0QKZUXXi/6\nYRZmRKMQFJ/UCnrh035StkO//eAjVvb+3DculpjQRtVdKs5d1WLbB2ndRJcm\nyK3YKbRCZiD2sYZVQBG04zAEiStlWGWP9PLy17dZr2G1S4N8amJP+m+a7ro/\nSTdqoj2kVTiwVo616NPW9DBNeKu3Yp/d+YVMgTe1cZukxoUrJ8u6Ov9p+qqv\nc4gpipANpLG70A3AwhDI7P651SggkKo+Bw0EwSsyS1NeiSvFOzg8s/yf9pYO\nToLM5aNbC6hGmK2CjKCKp9n+wAXYfVkoI6ni8Zz0SYFsJKAtWgh7xPlA3UGH\nHcL2\r\n=JD7s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGsI22rJpR6l7OJXZc65dW6sPpFEcGKl9idwzaX9x1igIhAPsqyYS/LaKaiw3K14ojoWvMeCvsQKQnqMtSTZpAi91u"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612447260-a2ba8aa2.0_1612447392454_0.8179773122202252"},"_hasShrinkwrap":false},"2.42.1":{"name":"@xdn/core","version":"2.42.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.1","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-lqJrfmRGCTZIX6zp9coUYMbqi1HRWJInm/5Mh4BMDD6iHyy94CeHj6wfeXIYn14YOaf+LUdBbj38Wppsa1o2+g==","shasum":"39ada2021d28fa2627fb62150ee7bbb76b27a47b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.1.tgz","fileCount":174,"unpackedSize":664592,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG/+HCRA9TVsSAnZWagAAXDIQAJ1eBXu8mDiVnnFNqqd0\njElKw8HbhzpNdu4QcGtJFw0hBFbVvhlo2htWHAMqwQQaCAyRB14v8IiZ7h25\nbkio4ptrh5mL+1tNSAcovJFoLIqC3RXUxQahXKm648lJlqrRyc5FYo/tLtHb\nB6TM7G0TPHOP11zxNjxOVcpvLQhX+0vXRD3MyB+DiKbzwuL7K30DeZTGydNw\nDxpgNFTn5+RLfs/OP1eZkfUE6HUdkibvsL5UBaI1SmLQ/t9y8mp2QrMD9y03\nOOsFRWqB+cGrRK9jJPr8nozzYzO/xZXOctf3u2KkcKHLyd/ycfn5SZlis5I5\nxuu926Y4Q0veC4zzjuo6DwAQqs/7QEdE4Dvr171755iPkUhfgiAnk/cNEpzE\n1Sg37Yf2K+b56+1AqYhYsc+4EXH0cAXUYAFsg6z6HovIO8VrVd+gHP6Y5y+O\n7Q3tDw+ulQhr9m+Go6D2D5HEWyzXzLrQ0WL0ZnyUj8qPqTQ9xb/Niq9sd43P\n/EhaYHKa3VXXAdG0vNQjayunKLVw0ncJibBkGs9v5l4nznLWHdzCpT01mxQb\nOZHtLib8kR8aZiJpvu16vBpwLSb37mXYAY7oXijkkX+ZHOrkZ8YkH1eZCuxW\nWutXKsCAG7YIFMgJUyTv13znfRJtxwwUXR1yrxb7ZDJh1SnC7zddcMahU0cd\nqMxX\r\n=pojd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjKqhbkRIAcejBN+HJl9XiRnjg87+uVuk/CjAToNqN3gIgBf8S6i39RxGHHHNDK8uhEr6szZOE6N4k2cVgluLhc0A="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.1_1612447623110_0.3012152462142643"},"_hasShrinkwrap":false},"2.42.2-next-1612447843-e0354e82.0":{"name":"@xdn/core","version":"2.42.2-next-1612447843-e0354e82.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612447843-e0354e82.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-F/OW0FIHz0n9m6LKERfkUIz28SD95+OcrLU2nF6KJea/EVTnjd7u57mrE2e43rsnhC4INv7JM1PwpcF5wSniVg==","shasum":"09ba5cf97db9b1ecafd418ffc3af4a15c8c3d086","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612447843-e0354e82.0.tgz","fileCount":174,"unpackedSize":665149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHADwCRA9TVsSAnZWagAANQMP/Re04ry9hPrxxHHSBylx\nktp8GxNzLP0Bp433HMak22ZT6YAVnPMdvWSToRK/+gFKtHpbixOTldfyZBGm\nuT8vnkghr9GXCVxyxhm3+p9LTjZN8AABkSchjoAErPnBmhQySE9wyALNh2k8\nYWWGHfMnxuYpSaokTwGnBFB1oAvBI1lIfN9MxFJkkdJT8629KfMlze2xEj5w\nPM1ce1AkNkh7cXmr8UgmDf7Ul5XxHpPgm9FGcz6og72oVxVpr9i2LAb9hMcE\nNQlGVqz6LDTm8obEo5CPtwd5y0MCB2u5bq22Av/hYK+IHubu9fA0YQFY823F\nPSdDMAUdXMl09xUPBQGK+tEEYdoNThJw7e4HdOKr1cdl0RfmYEhNfaPONdE4\nCTHwmqG0QL6sS3WMn0D8xkIUp5X4NZwdDWy+CsQr1EAKQe/0IdIidckvuKFv\nvFF7i5KM3OW9om++TuKOcFd3/JdqV3HIaNDZE4PrWiEfLSBl9NuF59eInXag\n+jhNNyM80SeFNXDgGYjJ9Nq7j3AK2UqXf0DcPKejTdPdTgWdwlu8mFGKMqVN\n3ic72x0EOZ3o+ngG9fViZlYNT00HPPUm2JUaxipfG1yni0V13QrrN/XglpEo\ncwAfHaFakW/pabjQg2wstr4GjU58aGfoGZCHTOGPIt0nMtTPQSMHbLmjHwns\n7WhP\r\n=/Pne\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDL91u6w3ZZVJfyn5WmfEa90sGkTRN4KuYx33u61KISzQIhAJ8us4aDK6gKCvPn+XWvHIs13TI9nZB6NiuiF3crW3jw"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612447843-e0354e82.0_1612447983767_0.3947356746248132"},"_hasShrinkwrap":false},"2.42.2-next-1612462405-e13b7e97.0":{"name":"@xdn/core","version":"2.42.2-next-1612462405-e13b7e97.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612462405-e13b7e97.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-3q/4d9R5ayIPm2I+uyb2i3WBsoujGRGxW1QapTSLEsM8sYBI+RLq1uL7XBk4n1RkaCukKgjg2urICB3vTja7Tw==","shasum":"9b8b398a044f07035af09da19d2c9785f71ba572","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612462405-e13b7e97.0.tgz","fileCount":174,"unpackedSize":665149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHDnKCRA9TVsSAnZWagAAFT4P/RponVbJ7vYJOisQGRYy\nDmfKVaGCXyCUdGAEZHxgxg8osn8alFQGHYnjxodEkP0IRDzwTgQBk36/tgJ+\nJl6eWfXpEHO7NpmoNBipgpJ2CVO0o6/yjT67wSOHhcbQIhrHH3Da1cD4QsTg\nUS/qg/EH5MCsV8G+H088ZzxNyRgRHQeN5ZhYLhCkaJe46ImA1Zsc/jnAzyo8\nXsvsmAnBUsjVHAUagvgS0BqT2m4rekVCSWxtfnviERHRgXH1K2w/Va1nhTn9\nnN33JQFy2hGXqLzA2meWNgG5v+J/YhRU65Pu61j97XvJJQwtsH43cdu/cKE9\n8PMECmRqXQs2vMAqK1e2vsCo4kTo2Gb4K/RNf8889S0dQADK3rSA9/eJAE0P\nwVZXkUWyIMsGQrSta44OcI6QQ99GGg8Vv9FovvXNkejSX3mJNdMsX9KlZHCu\n6PaqSw+ue3CfJKurvNQVoN8DfOyXt1U/T1/tiX/A6O0fHjenxhVdQ9TOHuwR\nP8QmT4yiGYg8wpzcM+yyRrpjwOBfonjsnCmVl4TqQ3U3f4ucy1jYeNdDcwEI\nzG9m1nWue9BwLesHPFfkpypHauoUZ1mtvh3t29Wq4FiWACm1tqUPiJkJSHEm\nCjb6ilhPV/ZJp6F+EpxV4kOQtUQziYUHcFMXhpMqqvlBLV22A7y23I/gGyrq\nctIl\r\n=rFYR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICd5GqKg4+JYbEd4vTySviKjDc1NrBf5jT8IN0SJJzeXAiBE6NVGYwaWDn5Hd5OfhI1fE9axOn4FYAW8J6EDIJnYnA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612462405-e13b7e97.0_1612462537779_0.5928011288225958"},"_hasShrinkwrap":false},"2.42.2-next-1612520980-6d1dd81d.0":{"name":"@xdn/core","version":"2.42.2-next-1612520980-6d1dd81d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612520980-6d1dd81d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-jVvF9kLnYd8dXa21xyMrqc8JzpqnG/ychWY/BSWSjW4ExkDBLT0I0nas+P8H/n3crt4apzb0lppLMdIlT671tA==","shasum":"30886590c6387fe17a9208e83ebd781154901ef0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612520980-6d1dd81d.0.tgz","fileCount":174,"unpackedSize":665149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHR6NCRA9TVsSAnZWagAAinIQAInM9VoDyR37iMKPNn7O\nvw6C/3kQaAgqU7/Tkp7Ffb3ea/PCM2v6XTedjJxD2FjsR8Mh1KQbx8DDNv2b\nljNehCNaly6eja/AAKoFwUkv6vmqBTDoXfcEeUL+01RG9Sfajhh2/tlT4sqs\nQSaOYr4fQjJQpsYcOMUPl8WkiQyKhq0bBcr2X3YbdKtbly2Fvc1KtPa+c4k9\ngn0RB6qUqRqKqk+kayBpd893sO7FQ9nplEQp9S+d1qYCGogsdWOgGtaQc/D5\nAEub5sLjkmBayvUGfYByisjeM+hME4uwuyoOzHnavuTpxTRH+SdAXsn7nDvn\nnQpCrqYX0B09RmQHC7RwmkYpJOtbhu2NlEi9lOl3tq5XdkyGPbnpNjvaxhR2\nywiKIkAUPV4a7QlOikFuN1gG6MBK6QJTa/wxlDOzpnYNB2PqRlf5vdufAft6\n25EqS56dZyxGUv0ROZq23qZKMuzKkProoC+Ahv+ROA7ynpLHszAKrLSKLezC\nwhbuKaeogxI/rugQiwgxmZN0uw6uCNv4bY3z+m6P1+rVlwj9xpWdPJNRQwMJ\ny/JfIKVX3W1jh0SfLBYnesdLIqXm9DF42l/Qw64akDTMqwGP7TMQpJMWAITt\nuh/nZkDU9JlC/6J1ni7P1uqqww61ySFjT30oKMADzL54GiZ30a88MY2b+ue1\nsXgM\r\n=e8Ry\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMbcBMEp6hVcZhEQSWfldkPWmb83aYvthPtr/BTBoIRwIhAOysasc2ZoMMiiW5q7bO5l+aRXFiTWw/lGqOHyStbbf7"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612520980-6d1dd81d.0_1612521100304_0.7581907578477585"},"_hasShrinkwrap":false},"2.42.2-next-1612522696-9d0b610f.0":{"name":"@xdn/core","version":"2.42.2-next-1612522696-9d0b610f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612522696-9d0b610f.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-ZJ4TCc8JDFK7U0LWWqwYx+ZBhN+Btq1lS7HN9nobfj+P7s7bY/nrMKg6Yz40uFEGlxe03wsFkG5OvmyZl9tdLQ==","shasum":"50ca9debee5a91bcbd9136adf5124e2c1335ca14","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612522696-9d0b610f.0.tgz","fileCount":174,"unpackedSize":665149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHSU9CRA9TVsSAnZWagAAhZUP/ic8M7HDH1vvhXKGAJjf\nwLedfSP7s8SDCNTJuEHSqgG5SkJ7msV1rpsSDwko8iQj/RvVAI5tavoqCAfn\np1EzfEMhCY+UeXsgu4+Hbk1QgI5zez2ht0bETT5mtuiTBMIPF8CmBMqGadtj\nfn1+XQuBJD69FxTUNp/CNOp4WFb618SQhitAjU4XIlE8ItHAbW0j4JeVWW0Y\niHzZBlca7puH/s509qKFoCWAKoO5Yr0iS02yrcQM+bjRg6EI5LMhCDezYlqC\nFLWE2LajEaogL+fPznIwGgV26oa5jt5i0oYJCVlCS7NE80y+DJa270FDf/SR\n6AnauIT1xSr2iSg3xwMue7qjwOzWLDuWBMglTfNB9W/+841jR8NoOSAl2Smy\nZCDAakOqyaJleGuWcBHYoLnKKw7QgQHwg1kliTADT5Uey0XFutMhpHauXZ20\nSv8KJ1cmNnkeVo6VnfblaKpWm0UZv8YNdpnTQciP4FUxUcopyf3zJi/NoY3q\nG7C5LcpRLNe9NcXsBR+r9yV/0tdlN+Lxps7mGA33fI6+axxTLcy30cXxkt5c\nHm8WXLxx3alcw5PoCtJMItAF+0UJ47Pg6Nkq5H+WtxSIzwrMkJ/QewTQRUZB\nvXP2VZqV7oBlDDAVbTV6LgndBT0ruucIEQRbC+fUbVwQ3o87w/NUzuiBVeSR\ndsSx\r\n=vZoH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFtAxfQvTfEVMXAPJ63pEDBjtMPjObJxY5kPxgWh1TxgAiEAy81oG/0cErtJDTcogNv7s2VSDeH5fKcdjKgd5gpNkkA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612522696-9d0b610f.0_1612522813085_0.6306980220951921"},"_hasShrinkwrap":false},"2.42.2-next-1612524895-c9d3d2e2.0":{"name":"@xdn/core","version":"2.42.2-next-1612524895-c9d3d2e2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612524895-c9d3d2e2.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-dGPCPac7ceK/3vcOZTZRyB+nWlAr48B9DIKgUd7V90cNzRJGshnLpb2FEjedo753JzvinBoM+C9pGbsinddjVg==","shasum":"cf2d600c8eafa4cceff258c9f05ffb439e36b655","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612524895-c9d3d2e2.0.tgz","fileCount":179,"unpackedSize":664231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHS3YCRA9TVsSAnZWagAAJ6MP/2RQXxZnKasHPKvqJJli\n1CavAFZyBD9k7FIrPRVr2R2Cpt6CFxzTOoFfgVXu5gQEvF+ubL28mNPF+nMu\nI8LO/a1p3zxH8iggDiM5u6usjdv3169qavcD9MrZSv4+cq0mhR0SpDB071Gy\nUGF19AwpmeTWjqpxosfTVdgGupNIA76fhJOvpPL9UySEoicypcXJ+2MuMffH\nDvG3e+KBGW/lJCbTUEJ23de1p8u+fz6HRSTZX4k100HL5jFtOb1zyE8uFqfo\nmKyRzNYL8kbv/OP2Xl9pHM89bgJFX4GMcwW2oSZc2ihQZ+dpz2LRGoMIc6Ff\nGSBMOGExdMW2Lpg5R+Y9yILdFA2hXIQr+Jz36PHcp6yvHWTrzvTELiE5OsHL\nFXLy/PFH0Yo1P8RsUyraE+kOB1G7fia01mSZoX0AMDs7awqIq4q3R5KtqK5E\nYnLdI8FY01kgSJnsD6WAsBKoEYymrKcTpNNVouk3An/ygnaIXGdK/eRooQ16\nCBZfBKmVdBioXn1LQ4IZqWaMCBGlmYN8UVMa3HbfyRLnq6OBMuEO1zPg6hZk\nLzPfBf5Wsm75QiQJZlwIIpvWsDxCKJ63JxgA+won/dFqzi6mMAELevtqizGY\n27rc84uiTRzUDltSvUd2aj3PzYFOY5b0P9UrP3IeV0Oe726s1NsFzYAYFLOD\nh3Hs\r\n=5CR2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6pDPiEvGRtujsY9d/Nsr99lVmpIo4iqLeolsXbWow6AIhAP0OwInhzCIDkoNkJaQQAW6C76bJGk1zdoSzXGwhaC9V"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612524895-c9d3d2e2.0_1612525015416_0.04953539833075693"},"_hasShrinkwrap":false},"2.42.2-next-1612525547-63b8049f.0":{"name":"@xdn/core","version":"2.42.2-next-1612525547-63b8049f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612525547-63b8049f.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-MzYzSnszBA0WRXITWUmZW91uJZPUtRiS82KmLrMjuPPb988uCRPXXFBLyelraCAU90QKoXl1lChiPnxawZemdQ==","shasum":"6905385712a25d9923b90be9df39735be758147a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612525547-63b8049f.0.tgz","fileCount":174,"unpackedSize":665149,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHTBoCRA9TVsSAnZWagAAZmoQAIxlQluQ71OLK+zHcW3B\n9QRP9Ck0q9CWhRlv8o+oaN+1f0q5Nq9PRmLkeLfZOobxJwBOotAjWC82NqHC\nNRv9oTMJZYXLoJKts+Rec+4roFSAWLNx4cx09Dz3t6xhQXXJAD3AqVXi6ocL\niiJ+jNPZgloEqpAgZqG698D8sD477oD8G4jZfFzI2uNofxFOnq/9D0KGVQZr\n0RnKTbP92709ZsXkq21Y8cScX2xNnmKH3vEgElGW+TTHiuVjonfjBWMoEwgl\nGzoI22PQC1ltrnDDnV4FGJckeAFKnzxOAuDHgEnxUqiBZBxdNUt+Q4mSYxbP\nxMIIwI2ZwmOq7H7a/ebuvK/DIGlEExggwB7MWvTDeSvN+494yQ1RU0OimzdD\nqEHC6hnm1MAFraGskiQwtohZXGfmdNGntYdTdulJKElc4JUwPpqoSLMjTOWS\ninVZPoWtVO0wBCowofNaabpaothG/b04zVvtB2zAVmPgWtC2lkWtWAMN+6Ml\neJqvfkNl7ND6K+FJdiIluJm3BcSmWuuqV2IKkcvDXsPGciz3pdsX9IeMkgWH\nEHkLmxQxFCjuGgVAzQExvtoHKf0chfgHykAyIOKKFtR+YtdLO8fXxoKZJVDa\nyl04QaqzX1upGWkxIAzJtUjS80R4uw7YY8qgM3lRBoiAX/ZSabIkBtzFoaQQ\nwe7x\r\n=1mUR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICOnvbbOuh8fvr9Bu/OyiEq8YZGB0hNkzDW/XEjoIrBFAiEA9DGpbLIUhFDYf5Kt7myBPwb5SGXh4BKF5ismafCIZV8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612525547-63b8049f.0_1612525671490_0.8483577697862026"},"_hasShrinkwrap":false},"2.42.2-next-1612526159-fad91765.0":{"name":"@xdn/core","version":"2.42.2-next-1612526159-fad91765.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612526159-fad91765.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-UwavMmDRMChgm+Ekinn6Q7jo+ZmQDFSe3lkhQu53LhMOujXXCOW6L01WUF/gLEodZBnbeMNfP8zsADHYJWxu1w==","shasum":"8eb0355ae7d5d1279e8e77b2646023258ea95888","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612526159-fad91765.0.tgz","fileCount":179,"unpackedSize":664231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHTLLCRA9TVsSAnZWagAAGsUP/iZK0jBZOy8ewtFb6tgO\nhoYXxS2Hy8antEBfcLJ0a0h9a0ikynwJkchQmD9DIBRXHxGf3jsS/R/sm2YZ\n0Q6l1U3EdGVv0eSDSgxLy30PMnATX1yAjcGpahkMSSvpx6A1A8gGqnXuTDEE\nveu8zdixLAc9I3naJKQH0CWaBHHF06hpptn3Elz3uJCrSSIRu7uh+crK5ilV\nvoRFkxvb6cYPXRuaLr5ERcFxig9p7/sfQJWIaD8SvwC1tKKw+UvSXBLtbJUR\nlbMyguDDvQm/mz5HTrhM5IFpOJ2hUgsXwyFZYsQ4C+p2xoZHPQs1ykUneUDH\no7EzqBJCFs7A1Se9i1rnDuW5gnd9Pum7sUPTi68zqFfN9UL+Xq308rAsp2U3\nwKkVHM4dN8ilreJgrw2x3vf7SmKbQhYblzJNmj1o0hy3lqktqbjRv8Qm649K\n0OCkuAXCsnPOyGT8Dj0glZoMYdS9n8iUjssZfjtgznMiOXR2OrTLG9Xe/Wke\nRKumGxbfd9ANF5r+KsUUtXOrUMKs3dI6YoF7ci/gpp4ZtO9gSOT18in922gm\nqg0sCVlRawKaXVQRjvB92+N4LrJVctBQbdGfjGVy4H1XBnx3+Gt9FVFWBk/u\n+pwqyEIQbGflqbq77oWkXfyNqVDIE6Rn6eo6y9bVE4pBQfqSBxAFX8V5frEs\nCm4w\r\n=Ult5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVucgsSLU3qSbziknZvtq1kktTSasKstvkjEgEjQBrZAIgMSCD0iRb8KvBJNime2G5whGNiaBNHPChF6Lrdc+pxms="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612526159-fad91765.0_1612526282530_0.3273454574278156"},"_hasShrinkwrap":false},"2.42.2-next-1612528078-02cc36ae.0":{"name":"@xdn/core","version":"2.42.2-next-1612528078-02cc36ae.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612528078-02cc36ae.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-/AmmI57aEoo+ns/MJgwDSpUqIZdHESHQHQE6AN5ofv06DuevllzgE/lLnecHZ9sI+OfGthZ40cKN4Sk2Y1WeUw==","shasum":"f12086d8ac8b2a7e2f4858f9c5641548eff9fba9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612528078-02cc36ae.0.tgz","fileCount":179,"unpackedSize":664231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHTpMCRA9TVsSAnZWagAAZOEP+gK5Rm7UbCho0wNwQ3xh\n3p5b0POvrtDSwhV/9mIWFxdjLoTmFMqTb4KTl+EMb4aR9slhF3Eghc2NcyRP\n7akpt29i2xbhMBB48zz6rBdkybkGP9CW+7rmv0oCKe+qTyiWLU49503fXfyK\nIsAwxuv719PeW6qrzyO1MEOyphsGuU3dCn57KTVfGGrfuuRdB0S2nnrdkUzu\n6BFm05XSzPGAW2aIS7qAqXWkm10FVhw2WLuiOBtTereLQ6dU8pijoY2+w8bJ\nPTyf+CfsS7BWrxOiml2XAtYzausOm5OiSWzg+Gmra/HpQPojUmgd95tSwGEP\n+i5HZK/a/G+qB+/k/Nk37/Lq1w6zWXyT87CXRDfiJlLo4snpi672hmt/z49A\niiLhMn1k2jTkGXASk6mNEzno+6yebPAxzR63cNFwrLxB57e0UDWtjHsB+J4g\nNi9yrqhV2zqxKlXx9VxD8D106g1UVeh6tYc8XE9fdnbO1u8DoqpkbKKKZ4zq\nZLtF6ZkbidD4HhXfu93uFkdsoDNGJJrXBOGnJZk5eBQ0T8bcMfuucr0B7S1K\ni57mINIoe8JzXhJa7DDscKXdF9RlzISMNrkYgCiwnT1fYTs6ESRFx7lTXc0u\nlczRIr3ywTX907qZedak1HDiKHrU7G9JM9y3tKs1L8Yf0Y9LRSJEDoTJxE+X\nTDPC\r\n=lePM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDi6IxVtx7Y8gNLUruLqlGvTXBYcfJoLNxUphG0bzsYbQIge0qaZybiKe6KKwqGz8FhfkCfB3b1+o+ToRn+5N5lJrU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612528078-02cc36ae.0_1612528203537_0.3242242547417362"},"_hasShrinkwrap":false},"2.42.2-next-1612531092-91442273.0":{"name":"@xdn/core","version":"2.42.2-next-1612531092-91442273.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612531092-91442273.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-G9I0cjfEqNolEdgRlDv6p3ICRvubtCU+UGJDGSFnolKjEW7kEjcUb1/Sl97ddHwQeGzXAv8lOul7/m7KdJ9xEg==","shasum":"0c608a11aebab11d6368b293e7237bf3d9b63b92","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612531092-91442273.0.tgz","fileCount":179,"unpackedSize":664231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHUYHCRA9TVsSAnZWagAAwukP/RVWQGWzchAFxrlUoRMI\n1keZj6jU5artoXW0SF8+iT1uyMocgwOl9wKG9Ylg+fnqrEJESx98ihZz5xXX\nqG0T62tdmB9PTdRO70/XgJKKiDTXACbr8m4XSq/PKRL2VzjBk3gCyp0j7Cbd\nH8fCMTRr+4tKhFYc1SQsICYXAkVYhJuK6AcnaxYc3IbXpmyZc6nD3MS2Gkf+\n8blzTCW6ILw+zlBr3rX2ADVR6/axr1xGph2GBgZb2R2G6WzT+YQfM0UkvmYW\nUCl5LAqYze5uRdevPNDYIqm2uE5CP4V7fzMNzifp0wKVtEQTXhQjd89+kiKe\njAov9RW4mIA8Hed7+/Sn/Z20zZI11B8nfdQlqh1hcggY739UZkvTSV7Ij5FK\nIVTUi+8lKfFR2cuY8FY4Qxp1adQrvZtfZyrJEw75b8t4kLFvR/Mi7K5oQOr4\nKoy3A/Q9zd8ORlKBPy5WNwFpd69+PRUrisHG7AvRz6o/6goo7xnOtEbRyQ1H\nhZdqDxP9ixlrTxKELnrxhSiD/BRbVvZZOpatwrvxtT9ECL0ioYTsDHOLGrxH\n03sKTPmZT3fRB6+66dxTfkfh6g3r/VqeYBJeUn5X4NFj7UImP8y1zhaL8dVW\neWG/KI2czCoPR2Q9jxbuubjYwvSDy83H3qIGAFkJRBwGm9uIG4E2ohamXYCw\ndmro\r\n=UCLI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDj/T8Ru+yPU5H7cMDQILDFZ+mE5IO8ygzdFdbgh+QUQgIhAKg+rSjXZSsuEZ8zs0ZYx2GGrHALoNQWy0aOj+sRUCgD"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612531092-91442273.0_1612531206489_0.07648538312124398"},"_hasShrinkwrap":false},"2.42.2-next-1612542066-c79b6c97.0":{"name":"@xdn/core","version":"2.42.2-next-1612542066-c79b6c97.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612542066-c79b6c97.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-CTjjAwLRk76hSsgwoKTCSI9Z9gC/zSsRAZpcZcO/+EjCMQKQzkL9G69yiWdP9/cNmh8XqWJPZMJWoXoQPWLQyQ==","shasum":"c9107335b53f0d8932c345e991e1f0232ce4951c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612542066-c79b6c97.0.tgz","fileCount":174,"unpackedSize":665235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHXDyCRA9TVsSAnZWagAAmnkP/1LkBJvZJfr15aj+3UGH\n23ZKOY5Gj/XEZtCc3vrF3NIa5Txp0IxRKKXgfBWX+cpcBA+kPyCJBSrbrc3b\nibpvNw5Dqlyp/vSGPUz7HKt9anFduUbkEcuj48wZRQl5igQ+/JkqHigvj++o\ndFgLQq9Y/xzuSCCd4B0ywUS8w2jKhVVWN3i7nqvSmWKxmUmF7Dxxcq7lavLN\nJxnapJwDfvMUn7PIvMi5VTZGrb39kDnf6E/n3wwlvEf5Ow0Vaf8/Y79uD1mt\nY6JORlxLACjRwTh7tnNF5D/TelsheCkUwq4T+i3DcYsPq+ysxAHHPcu6W0J1\n4GV/6OR8Q/MM6mMflVeVqJVWMhY0ZhRbaeH1jB5zLTYAXHeh+yiJRdxMhNe3\nLlJ9Uv0l4DHMCQj0IVrQaz8Usmob7nBfjdgsL+lzLMoFlE1q9+kRGb7qtb0x\nWnu/CkBAi4ywiLoFNC85uA8dEA/o4WPOMG6t+cuUc3Ko2g9CZPaRCyKOXUSQ\nD3roQ25bGG99emkElyMEzuHL1yFXdTJgKxOWEhpyP/TbSxULCwZQm3jbtcm3\npOQca2YPWtPOOSLbQbvk1y2kVLt55re7MgZ2e2FqAWEcAeD4utFI6CbRoQ0t\nfsJMzVzFb2266XBaRfhXdNGnFYAkF+YSYsJmL+cLZyzgnsHD/ubGuz3jV1Xq\nzYVc\r\n=i5fQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCS6+BpvJUlFs+6hlXwHu2vSRbfI1M4f/S2vxmW3b4AygIgEke84xZ3kp15ztjvWC6OkiPVh+a3YctHbGTYCq++vCI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612542066-c79b6c97.0_1612542193987_0.522774267250536"},"_hasShrinkwrap":false},"2.42.2-next-1612546129-c79b6c97.0":{"name":"@xdn/core","version":"2.42.2-next-1612546129-c79b6c97.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.42.2-next-1612546129-c79b6c97.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Wppgy5u4rI4wWYPR31L2thZ5f89Nlzx+rw7tnmzzXdYbKBCmnzg+MO9inh+Tp3f84zNlQq7zIyKX+h7FDzKJ0g==","shasum":"b46b11adc96b2d9b7136193d33bcd0f2dd584fb5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.42.2-next-1612546129-c79b6c97.0.tgz","fileCount":174,"unpackedSize":665235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHYDMCRA9TVsSAnZWagAAKMUP/0pAynKMMxIRJ+Rt3iUy\nXvLOgYqIwcUZAApoOh6thrg2bSPCQZE45Pu2ODuzbAzzB2RmRyu4/WrtH/uN\nNkPZ8MVIYZeN4evfzMVvBjPXvOETWtzuQQ+GdP8DSLgFXCImddcTrOOl+ihz\ny3oAjlzuKc0bNYE0oBSUgmXuu3Eil309arg2ijaWMFwSRxYT5Z8zNHJ2G+Pp\nPbGnKdJ0W3ESU4sDP/xR4F4AnsAjv0h53IIzr8oYHHd28q12ihhUU9h8zUkk\n/nWtFxHoMLJH/1f+Rud0N6WSbIBVqrDuDv4tJKwsouZQ/iP+K4nxe2zHuZDW\nD8wHIgwrQl4/FBsuzfAezGxXbpLnETqkXQWNuqyQjjffmEllNQD3e5iSv5Np\niOkqviG+7agrVTcC9ekC1wmnHgV1fwN9tGDNrI1TVL1NKy32U1yaUkXkT6Gt\n4vI2uWK4nZdCzsF91TqRI7NEvkL+Ug1aMUB+eSxfyad1p8IJD19h/pAxbYjy\nXzTEq9U2x5tcT6JSi6e5qTRM1tVyf8oQLsnsHJQuXUOmL/gVO1H3JLqc8BM9\nm5EmV9kT65b/1DcQCi+ffmQ3aujY1KL6JgMSwr9SbmuBhL0dHkNoJRkt0xrD\nTu06PEdtHGf/sBJkcugOxL2suRxgWSL71HGfV5rrrhze/+ZFkzTrO0GwWZyI\nXVAp\r\n=LOlG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZmu3YKxej1k5t5pWyfFEpZi3g3QoBxoMLHvr8vQaQwgIgJ0rADEKrHnsO3l2pozCqLEe6ARlh7bzwZnm/ebvR8Xg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.42.2-next-1612546129-c79b6c97.0_1612546251618_0.26270498152589794"},"_hasShrinkwrap":false},"2.43.1-next-1612547925-3537e3b3.0":{"name":"@xdn/core","version":"2.43.1-next-1612547925-3537e3b3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.43.1-next-1612547925-3537e3b3.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-1N6Mb/5uXjta5dlhDfxr9ytf6b30ZZS+O87aOYtvvYxkiOwqn/MMf7QQjA9aE/CAfl6IEUB5W10g4SH3C5M0Qw==","shasum":"41377309716b529cc58e6aaa1a4dd5c21ab24e2c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.43.1-next-1612547925-3537e3b3.0.tgz","fileCount":174,"unpackedSize":665235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHYe6CRA9TVsSAnZWagAADq8P/2yrDeLlz/yrrGvrqcOG\nPawyEQEr5+Vv4cNvif35bKI/OoCp/dts2blKFj51ymWr6c9qth8Qzl8GxtEL\nhTcR4mYsoWKn1XQ0SCTtfe6qA0YBND5iGDwK/RbnppSWkKp7cCRXcvMb1J3b\njBrzknrfUqmOqmyO+Ey2hUuzvNzgLz55HMNwMgmgVAiin3vGFGmtmhsXd0h5\nPi+LWF3mr+gfyWZ0UCSyb4+AzMZqakozisxYKbXnHN5h1U85NHXWT4eqgDyR\n+WEgtxkcUSfv2oBX5QFwGmveZCTb3BBUZYBNjQkZJZhT5Oxmdp7aKXFJICsl\nbYCIRSdSBzXybzExr42v/CrSc0jrSCgZXPkcR7okHxAWGV/NQ++65BbFpLrm\nHTdu0y4RW+yxUr+hjrgrjVFc4eNlGRb7OPnU4TZ1Jdw8l/YDglAnlUIK/I9h\nsCs8UxfDXBrfK6ZIeFMfQ5kHxMXNx5W3qB1LAT/neSsgvSGlUeGkFLqgZB5z\ngbilOjzXVNsMpwXF0TZF3k0armefdi2o9Aet/gV9hxGQGg9wAYfXfgpZvgmS\n1Zaptxi0z6N6zFer9v9X7l7lRaJz3VXKe+sh7VOHsIiV3x5rC5zI+6lXg6jM\nYf/0GsgWvHQGgD3niei1HPKESODq2BSBC1rDpcnuo2beQwczoPrksuodhAjv\nAtUt\r\n=bYsO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9x4d0JaPnF37FGJRFQGKlW00gzCBarZN3ymtfZfVtrgIgO7qJb/vRW4Bp4OQKH9OyHiFdAT8UyMHnZIB9RUKkHC0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.43.1-next-1612547925-3537e3b3.0_1612548026287_0.2849140353297588"},"_hasShrinkwrap":false},"2.43.0":{"name":"@xdn/core","version":"2.43.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^6.2.2","uuid":"^8.3.0","webpack":"5.4.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.0.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.43.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-gTwleS5SE9TNZjyjzPR0OgKivUE27mAdk3o8H1GcpjVmHmgojsPFUm/Pv7NkrDHydkSdSirCDu5Bm6ZrHzbQ/Q==","shasum":"de1365eff14d52f7b267d5920a7081df57a5e4e6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.43.0.tgz","fileCount":174,"unpackedSize":665181,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHY5YCRA9TVsSAnZWagAAIIAQAJDDNSjkVVW+++wbUJYZ\nEPGnvfY+bIrFRxA40Tirm2CY8Qr78hMBRtFEsrSa2y6R0WR2AMzFeNjmsX4j\n4/Rqze/c7Zf7RlQqDNr7eipjIHwcDmGcocKgEeBUqEDiCPCFOCNIwaKrNJT7\nFZdDpebWDpvZP0gy8u3vL4fNPWezagVk8Y+gyGSuDpC3hM2y4dZQZgmJf/Dw\nLQsJUpse0D3RNSvIOcYsfBQIlvcogO5HFm8W8M9vlj2uE3FnKKC4YNUmw4Gl\nOgzI+kFW23LjMoP09vB/kRZzGL15LARjJGBBEty9XaKkBK+m6rS4Ht5lJJ/a\n8yk/XiXjTnO8va0yO3ypBUEguXuL0gDkpXmMWHLeWbZ59OvwgrqQ+PWzXk9Z\npW1XHtZdXYE+bYI7NrVK5lJ+m4JLraoosEClmpTTWuxl7Ycuy+wiWUJroBqg\nYO8WF7+pWzbRB+FL+nptxQLWC2F85CLBakY/ds/6sKcLJGbZJPE/L5M/IHS2\nT8ls9i/P+2u6D2dxIrs2R9HxId3+wSADS26TTi5PLDBVLQ2aKxeWgJPvZcZO\nqyckRM3UaoIlqXa0Bcmrp2U/nhUElQ+zJou7DgCPt8rgctmd1KtXSQL70V1U\nJPVsybBqsqh2lmdyHDibZZRYc+3zI7l8uFbNRxZZDc2wDpFfnirFOzQ0A4Hf\nDLpH\r\n=7Ouy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF3wD5FgQnJaS3Kks3Kvit549hB01RqNCYSJGcnd6v1oAiEAv4x121NGSU9OcuL629zfTP+M1GbZx/bNOrNfRWy7Y4I="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.43.0_1612549720119_0.966548608485287"},"_hasShrinkwrap":false},"2.43.1-next-1612792570-6d12ac9a.0":{"name":"@xdn/core","version":"2.43.1-next-1612792570-6d12ac9a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.43.1-next-1612792570-6d12ac9a.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-KqejY0SAkRslTIimLHk5MiUq9Wu0Tz4wB8EZ3hgQvxEDBX8Vhts2CBbXPtLuFiw9J8XoX0Y2Gg97AQI40NjsqA==","shasum":"c6163ba78e9387d4eb653c65f9661436dd5f0fa8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.43.1-next-1612792570-6d12ac9a.0.tgz","fileCount":179,"unpackedSize":664317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIUQACRA9TVsSAnZWagAAErcQAJxZluPHWB08YyVv7szv\nf4t44MaU3DP6aXwMG9RhIUxg/GxAdUB3hXICi4vgxKhcqDjQj1f6UyWygf87\nk2rZy1XW2TMV5i9wxjnVi+16ovYtzB1l8rEClMnTuylB/+p/1pJQVuIwkIs0\nDh0NHzzJRzOoPLUvFzSMtYKlWVADj5yFBbexiVqkm4Z9PZu6V6MulNQhlCxl\nIBNtbsyNugxweaGfQ73FmaHl17gNtfG6M8jTy7Bt3XPHBAPLQGT5MZjRbL53\nto+QwTztuf5yURPKRVjxwk8FFUHtTq/uxC9ovPiSBD6XaLWK3igbQFQiws+R\nmfLFXEYvoXQvDSyNex0qAelwOSor2a0y63pHO/BlXpXgR2vgsvSQhCBQ5Ick\nnvllWSfALmugcZBC+NBsIPx0tI070lTiXhoD0QRGUaX9L4iLWm05yVfgwbG4\nKcv4TPCBOPoj87qpN/JEQTE4trs2v0zeR41MVzWEEYJMAtBz3qjx58lhOlr3\nq/Z1hdaLhcPyUkC4bjDIgmYchagLbkspYjLkNGZpOdi2isb0rDhpIVsUt9OG\nhEnItYstAHiNwtEPKVvJZEeuIMeF/G4dg71BQyVPlQiRBuxYZviJJSL62ha1\n5WvkJ0EZ5D+LpQo/DH54SmohB6UXbIBCdEqGv9/wIdyLARb+dV+oD0ragIVr\nlhum\r\n=kJ1c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHVZNn0vAcbr4ebGnIHgq9z/b9wN+WxffWjxWZ8PpSK+AiEAkLZTgjCJRPlHODqBjc1dzkqODrAxnO00nIvNXz7ZS60="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.43.1-next-1612792570-6d12ac9a.0_1612792831629_0.6855534135503556"},"_hasShrinkwrap":false},"2.43.1-next-1612793310-5c370ae6.0":{"name":"@xdn/core","version":"2.43.1-next-1612793310-5c370ae6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.43.1-next-1612793310-5c370ae6.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-11d986BoDDskrzXXbYonn/MYu/L9IDEj9wEQmR7Vrk84ULR1j0NlBHWWRMzXPwzt91TIY12/uV+XpHljNVNSZw==","shasum":"e7790d6f90d506b21a54e66a2a88444adfdc2647","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.43.1-next-1612793310-5c370ae6.0.tgz","fileCount":179,"unpackedSize":664317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIUbXCRA9TVsSAnZWagAA/yAP/i4y9k2Ce7vEjjDu0NTO\n5wxGgFWjIwayFZcaxAPUWdI8oRrWPukIg+j6Se9PtcvDzTIWjmZbH65GbKwc\ngFG3gIwtqfEzhJo9QvAO0JVU92J2cJZWnvH7kR7+4DpKwnTMMiuGg63NK6bQ\nKpVWoYwof1z5D2/av/je1vPds94mOvwnYE+ywJCEMaaVI1TkWB/TSF3436nd\naliRvPjWKrq465rNtmEOUgeoc+eeqbxhQUIqC2MrZGmBp+TXhYDLYVI2gp+l\nDfWwXmTw76h5YA2FNFeGh+k5SRUKzXjQNci7HjsL83VdX9XOZjsEeB5D518z\ncZVHRsyCFEhhUvAGWL5jcsW48wBq0Tv4e0/BfhZ7X0rwpyq6KSCU1CKDONcN\nUvoiDvdmpvypLLS0Ojb1iPJFfSuE3f7oEHOzQ23VGo+G5RZKii+6o2IILpuL\nULY+RBl1aVWmTGV9owY6rbKUgh+AP+D2E78S6VGd2vtMitI5jeWMOhcF/Rpr\npIeKgf2KBHd0u776QxFDVQ7+laRdGKDVF30e/qKt86MKTxxiRuXi7B8MdHg1\nY6D0SvlmhE9Dhd8bU3VeNrvxifFrE07p+0AuVV9m3nTVjYBCncMWvQ36Zwlq\nFX71MLzSthDtQjF5THJgFg4iMCMzXP2lLNbgDGG4cA/QBHbd6rkUFCT00ebc\nKD7C\r\n=VFyi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEAeF0hYSoKI4kPbZxk1KwaqNNWg3inDSxqPopPR5BPNAiEAgJbm+tTDvA6FTaT8BWGxsW2WsDB+5QfSLb7Lq9JBXVM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.43.1-next-1612793310-5c370ae6.0_1612793559174_0.201887963098061"},"_hasShrinkwrap":false},"2.43.1-next-1612809227-e3305425.0":{"name":"@xdn/core","version":"2.43.1-next-1612809227-e3305425.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.43.1-next-1612809227-e3305425.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-EzdULu4SN80kVkfGyh0gIgEZzx25XpTFJGthIh888iQTBqcV2V+yvVPJyISR/gzwN018DgWo0ZBbwMEKgXCNxw==","shasum":"a682aa2cfbd47ac173cfcd8541cd9c4123fd8322","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.43.1-next-1612809227-e3305425.0.tgz","fileCount":179,"unpackedSize":664317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIYTuCRA9TVsSAnZWagAAz1kP/3N2G/Ci1jLmC/BWGYXu\n6WcRy/8nosIAhciBqzmy0s3NvP9qk3mCWrDF4WpLUvLR0e/o79hT9E2tAWrk\nqqyffM8G5fUDEvzAI1Ns/aeBgln0Oid8EJ7avLXHBban147HHcoCUENu7fWE\nLHHYwLjoxPsDUVrRcGH4Zx4FOiCOf3gFhL4lVw5v7KFtSFrdQ6EzIjNtd41w\nzjS3aCyl5fWWWwyHkkahS93rQ5bfcCdtz3HqUN5gVSvIDEGJlVUpT117SxyZ\nM5JeM//vRl6ej5DLnoRVfdxuHN4aU0kB19LCRqM1yNl4KmEEx9Hx/L7kEDef\n9aB/K0mmSeuCr4GWm494pajgU5Y3f3QHFanLBDV86p0kWE6KH6Yht2V96GlL\nZCz7ddxVNbHbjU/L36GkgS3aSLkfywC+D3K7QmPzxEk85ik/kyxdm7oaMNDy\n5NfdNzOinAdeXJsnJapPKZVcKIKkp3Xe5XW/y2SblY/p8feGe73H0SKErO0G\nwj64BwE7+wXaJfodX1LuXOLXZvBeWfD00f8DP2ZWd8sOFgqjiAtZECCaWkHF\ntzd7E6ORoGrf1vldBpGUdqkeA/yASibZyQ9ze/w2J/BM8JON5bk2A344kGK4\n950nlApADVWEIqcnw1dQEE9uV30QxLiGjTjZ5rnboe0kWxES/ezvQ7yVsCUP\npG7s\r\n=m6pX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMUdWSK3WLbuQLX5FmTINCWANcbfvPay2eqgvCXH/PcAIgHtZLqqJOgScbhQjpmO7sBqfdydekF08IX2l3lVdYR0A="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.43.1-next-1612809227-e3305425.0_1612809453318_0.6042951902177696"},"_hasShrinkwrap":false},"2.43.1-next-1612813218-711acd5c.0":{"name":"@xdn/core","version":"2.43.1-next-1612813218-711acd5c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.43.1-next-1612813218-711acd5c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-0b2eWp9TkjMD3Fc/vOrCHZ2hqNxCGduIWI89lAbzpce7lh7d1FRL7FGwwodE16zzhelSuEIxyr9hUyiyMNktwA==","shasum":"1a23b9de63dac5c2e43280fc08e5d0e43cbd7578","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.43.1-next-1612813218-711acd5c.0.tgz","fileCount":179,"unpackedSize":664317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIZTMCRA9TVsSAnZWagAAIa4QAJLJH9eHn0elpVrrwFYy\nYyYhMZ+bYBB3lkZQvTA9k47PeHhllyx4mmea3loNcV7C0nUHAyUeAFOmQ4ct\nM3BNKhgnmIa/bYl4i7WRBtqf3UPgJpZXbnXEfNrQga2lpqZI/nAADVtRZRl1\nLSvFsHfuDf2umlWjN5KvnULEQ+enaKIZupC9lUJvNTMCEXWR/zOuA8s5b26S\n5y17THS47ksKPe9UHDfmPr7eWpWXYjxa88+ZPoZoLNpcju0V3ruilS4gnawi\nDmxrOg/GFuhT4Jp6vuU+QnXsw/RBGf85s7U00yoXQmdxcAOOsImOWPveIxHS\n839tg4ySeXA3Nymoz69YIQxyP8QClqqkE9zXFHT6qfTEs3Rc44ndXs/VNFda\nDeaFiB4QncO6yJ45+zbNatnAUa5irJEv540jCpkxg7q8Hpk8glNhAa4AgAoa\nTk/vRV6DjQLKZEaiR4qh04u/FrNYnPpfSzY9YrRyXhMPysy8SEVgFViE3Hzl\n7LEzS5ON7KR39J53oWNL2s7WPlv9fwmdhrhAIs7XNThY/n1OE2rof+8jiDEQ\nqmIeUUoDj1odqnmGJSnuEFYggyHYGyxqhtqVdLkQby6ArfNt9HzfTlNbUolz\n4A+tBSrlsYmV/entCdxzBpN3oUymYZ49MPYdg38M2CfNdFYq5MJFXeYbzz4l\nUUJz\r\n=d8PT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCf2icPZvHF++1cXhZwCLArMKhPOC+1J6ZDF4UdxFLtrAIhAISob5BJlPMxQdwhoLGJNSZw/w8YTLF4p1l0PBd3grgV"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.43.1-next-1612813218-711acd5c.0_1612813515376_0.3865654086353605"},"_hasShrinkwrap":false},"2.43.1-next-1612815592-805d2d41.0":{"name":"@xdn/core","version":"2.43.1-next-1612815592-805d2d41.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.43.1-next-1612815592-805d2d41.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-yIHHAmuFN6qloOKaf6AP3r95+EzUnYzr7+vh8goZIpcR3bCuq1P9EQ+y9iYUfwR73GpL/rdGqGcGi81Dk0FG5A==","shasum":"dd3f73a79e9ed378ba94ab3304c0c0120b7a5127","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.43.1-next-1612815592-805d2d41.0.tgz","fileCount":179,"unpackedSize":664317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIZ3+CRA9TVsSAnZWagAAb3cP/0BJG2JM3FlSa9tVMNC1\nYpjiM6th95BTpRFanlQNifKW7gU7yiXnYrNzESCuqr6bVoGVmTRoKvv4Dtts\n7L0C8czHRxSf1fK0P1L4QXZ2rjzb8DUfi72GyRl03UcYENcf8Eu1yAfNlG/S\nGLjF9a492s3dBnH23D/wGTB+1Q3loCP1uFbHb9iFjzMPz0QpabHyUiPizOhI\n5JqEBg0O9fQwcqr0VNJCEtko/3YKzz8vsmwl9KDHhLr+No/eOMy30YThN6bO\n6RWthMKIl08ineTIxYdnoqMfOIgqI6ob9lER6p9s4O12pVNwNtEvL+l+dlVF\nPjP7QNLGbKCEo/csUoCzM+GK0w4c2PfE6IRvHo/gOQJCj3oZ0k9hxsjDKbmS\nierCRSXLsOAxiqbGCoz1vrtgUuSWuGT/Zxhg+R9CvQ+pAKJOHXCApsCGozN9\nDu2/TgcSrvaj7qx4pRbwfs2BMLa3Pbxr2v+lfdUSwr3M5zLa5TKEquGfx5mv\nh1LothoBNC8xW/10T6+76Iejj6RG/nj4bN3fG3c+KKmWcQrdAYFoUBnhKV/f\nRe5hEpAba7KI/F0hc8l/w/wnSR1JBfjDyGE4VXxoreXKAt382veOGCxix19M\nJspBk2HJ2VOQ13k7kocK9gCBoYwBkf620WwtEi7l4UQbCM71oaiJnIeboNAZ\ndg/1\r\n=1tF0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDiuTMzIhlehd9lueOoMvgDvfS3YQ5c3jbLkCReiixuyAIhAJVyNuNVKhfk/sCTwiP9PjXJzDuQfmTamVodvnAMC4OG"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.43.1-next-1612815592-805d2d41.0_1612815869913_0.16694892031914477"},"_hasShrinkwrap":false},"2.44.1-next-1612815628-a277571f.0":{"name":"@xdn/core","version":"2.44.1-next-1612815628-a277571f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.1-next-1612815628-a277571f.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-WVjPUMEc/R2/WU68KG8j4XQZO06gtGZsa+gRzk6I1QXBNs0Bm3a+hCksQKlcwf38Ek2vRUVi8+TSiA+fJAIXjQ==","shasum":"9cfc51540a38e0d3b816d28fbe015f8ec0a37c00","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.1-next-1612815628-a277571f.0.tgz","fileCount":179,"unpackedSize":664317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIZ4bCRA9TVsSAnZWagAANzoP/jm1i8ggUHKMT+DwJIN1\nC1KeY5uhRji6y3jKN0nbXOk3rsEDbXtG6rbzR5rvOovRYNIFPfNqud7i155a\nhQu1dT4aX+2AHlp0ew19Kl4/bkiBcDONnZ4hsDQanNK+i0pZLdtPoZuAdkEe\nfOxcj778WSLQPqtttI/Nl8yu2jm6g4ack0wY+Zh6S9uL0acnEfUF2KGKsCH6\nAx9vCokhjbB1tE/5V2WajQ5rWHMejCHpBm777bzydzwA7Znp0GhOCuULjz1u\nC/Tk9n/ww3BBEDnv1EuAleeDvF03lfXxtk2o/4Kk7Zp/KYcz4eJwuoxBiPhU\nmC1St908xiq7lSYKRXdH9GNg5/EuYgwa+v0RJaK0YwsUfB73xh7OU40gbIiN\nvjABOtPk87ypEVxBpAwhBnIa8iWlAKDE0wuDf35xaBvpY4hFSpcAHrTwuSBa\nWS36jGfybKefNVJb+c1NlzC68JX6DYXLbwmwr28D2XNC8hPiOtyphF7ePMkj\nYAbhaNXvwq1c+npXSIVBawTzxq4dmYCCf77ON/gc98KP7BLQVJ8+38Vb6t/A\nL1v5j71cYSkiGKR4Mw43TcLrgN8TrvGtGnSvedEtKfVtqf047T0hICeIeMp7\njvuZN/PZ0PfB9AbYvxgMV5h7ik2HcC7czyNPHPiVoF4zMiRPszTcGcm8Z2Dv\nuXm1\r\n=wZTg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkbWOIGbO1PH1Q8A5dWu9Da1WCoAbLoSisgfAzzVegzwIgKtCe9YWTCSVJc4IRJwQfwcvCzwxCqU8uSs9IUY237lM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.1-next-1612815628-a277571f.0_1612815898797_0.14535267289004028"},"_hasShrinkwrap":false},"2.44.0":{"name":"@xdn/core","version":"2.44.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Sgg26ooYWBDVCoCMuQQ/FMLSlUAvBPEpgq1bi1ERp+r9RjAiHk8DFgkC97nM62hfOPgA7xXtW6eMWXYtD95F3g==","shasum":"3f551dfc47e8b6d1b73f2597df75414b6c4cd8d8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.0.tgz","fileCount":179,"unpackedSize":664247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIamVCRA9TVsSAnZWagAAX4MP/AwkwUAL1vqLTgwXycjW\nz1oXseXoZTmWa8IcfBrWHLwBWf6rz7guOH+5t+BcdcnaWKm3mnZTit/q1rGD\ne0B/Mhj9SUV+FlnNq1U/UqZvSyAfPLVFG9ua5x/i1DzaLO4LIrCCOjvTzgCo\noF4qOgnVRi0V21IpYiAbrsiIMnMV1Lxz7fth/kgI33nVPGNQSjq0/rmVN36E\n8ZwS3p4ONw0IWTHbmD/60LX904wbaOUvGnITzKEi1bnbmDXsJuvPTIifhO+s\n7VDGJ9Nv1yV85OSbo7OBCgYdpcmDVGLOX43DjS6/Ga6l2O0t5YJoam4ZEkFn\nUI1/g6Bsb4GWcy3yg3fIqasTawFu6KKnbAy7efENQMZnQkigRXmw9yrcCcA4\nASUNRq81t+Biov7IcBoPuNzd2difFY/v0jGR2mq19oROdQpjSdODmXz+ry58\n/udQOXS+oqAQjJE5VSbv2ZI9rhDTi8bovTV93rix9mX1Flu5dL0QkqjXUvYY\noR54pksyCEZ3UxET6YunAOWTEU9xcVvs9dzrD9Fbbtz2fyg+V/jvX2K6ZKcH\nIgxJ3Mb9TkDi40eLFBVE5GMItiGsBCcqlNUFjqMw8A2eoJJtNxSAwMDeM5UT\ndC+5mYxiOnsZ/DtcNYHlHRjTKWFaY7LFdiLSP/Ro35AQldrN+pFYuuqsLCpK\nsET3\r\n=jJLd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTdG50yRhWYGHgGSOv/6G1mTXuDyk6UJWhDnMiodB+PAIgAJmLswFagSHHgmvpzd/wGtix8asHvm2w7H0OrpFY+jU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.0_1612818836365_0.3657092841468761"},"_hasShrinkwrap":false},"2.44.1-next-1612875287-515a915b.0":{"name":"@xdn/core","version":"2.44.1-next-1612875287-515a915b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.1-next-1612875287-515a915b.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-yExatg4Z5qddVIXhYcfrA63QOxnqtcSdEx9xqTjpyGCS3coVqXBY3sxFc9KvdkyOewihiBkkvA9Wvfqh1+IS8Q==","shasum":"11db4e5ecd63bba2f360f326d3f693ffc91d16f6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.1-next-1612875287-515a915b.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIocaCRA9TVsSAnZWagAA3Q4P/0w1kDwaCn1SK8EajxUc\nO2o1aOIjAdWfIxi19aOkjYXkTyhMPedKEFLhecO2q5Y46s75GZs/gHudp1w8\nLxVKvfKcUpJJDn2dAuLdD3faFHrPnfJpzoSeoTWgXExSZ2X53y/H8xlKhGgZ\nE9yBjhZcEzO0GADV3+DUhQH05zPbhjGDFGq6NxHNb8Slt/3/Xs3UNQit/WBk\nfWiLEK2DVA9r1GmOb/x5KV58XYvx+wciJa4Uzc2hrzim50Ebqihly0Hc7xnW\npXALVNjat3u8zB4PDXu3FYu0+l1qm/XogY1wQ2ZszUKHaRXRdbk99FwBSMl0\nd8PPEKeQwuSGgQFd0nay1qykckG6NhrSHJEr5S//zcSbMKnYsZ1t8jxButrs\nujq/PTo1MFGvWhVp9am6rm5BFnkjT0tScUAH5k3Ga90pm52mhOCY452nSV6W\nv/oTOSw6WJf4EFeVhgBSpoLnrcGrZtOSYAntzj9ZWeOVLcZGyBOy7J7Fxlkw\nk8DU06JVuodF3giKjLQbvXPDdNdPH+tBm28LCS678BILKrn87+1b6yTC4Nxb\nlftnvM+JFF2l75QpD7rnqLwLEseH6OyhmP8tCmHVXz/ZRxV9Um78AHJVwvEH\nsz0ECHcjhmFVjufjyozKrPYtGwAz13nqqq/dw7PbV7uWaY2FwVvxPo5lairu\n2nYE\r\n=EbnW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWDdp1j3uEEaVd+/PpG8E2FKS8Vg2pg3ZM1kAFiuLoBgIgDxRdH10QkZYxibMyaiFLNvxLZDcwsExmGQj1Jku/PMo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.1-next-1612875287-515a915b.0_1612875545082_0.8243126681361135"},"_hasShrinkwrap":false},"2.44.1-next-1612881360-87a0c00d.0":{"name":"@xdn/core","version":"2.44.1-next-1612881360-87a0c00d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.1-next-1612881360-87a0c00d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-cH6SBhhFof7JbStkSKS0cvxRdxOwLRB583S7sIt8ZLqVP0YFJTtdwlIYckMyWhBYbJ4WHP09iyISiClpc4XYgw==","shasum":"3803784c5a96d9f8cf6b2cd9983451a549a2d8d5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.1-next-1612881360-87a0c00d.0.tgz","fileCount":179,"unpackedSize":664363,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIp6/CRA9TVsSAnZWagAAOYEQAJA9PtvfjTWwgmAa7kuQ\nPJ1vJ6x8+xhw8dHGk/x2Oaz7s4C1e6Nz/gi/g2nnznRDFMkFYsMvHSY9vbPZ\njNZ5s1x88vdpm17B/Sk+lTkb6t3yzMD0tehn5QcT1ez6yJyRTA+JsytACNmT\nyQQqyKOuMnUSIJDfEB+9kNp+uzGwOP0Fzc5exlEmFFlYiSNMVgmSJgOqsyKD\niSJzoxY27Xtc2JBZd3nYgehU7uB02Gxsaj/ENFnA7XhjY4iW8V2kI6mX0uh9\nx5vKy0RuO/Bp8AOFVuE36mtelnmLH7JhgBrF8PqzqE7BATdZtK9OjgLtkr+Q\nRJHx6qpQpefMPbb1c6bTFfZSpiR8Fnsw6c5IU6Y2Z6geVuBXvBI84qVWHChC\nOiYNiv0QU/AZCkbuvNsxT6Yhe3DeM7ZU/WQnvZhxhg9WgzSsutIaJQ6jO1Tw\nR3LvFKy4utYZ+xLUQUcZC4eNGmn0MtLa1nESo1zywBDUL8kG49MZlYymyEx+\nnHuoNdOqh3ADrF7PdgN4sToNyTiNpIaMfUpImHoxZiUh8vGR8e/LR2RZXQeB\nFdxstz6j4eCCaZKWU9AuxjLJQSt/OePGY7sZPXwZ1gXKJoSnOVO0fdW1DS4j\nHro4DiPv26jPV1VaWRl/1+OiyE2AGrzD9M3ymyIzFi4TG49uaOAk4aVr+cTp\nsfna\r\n=Z8VB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEMlS0nzW9ApPvV7qWZQ/TO4yGalNwF9NOKbpakwSfaxAiAQp/a7G3vevdo6JFZ9U74050uVmLoXjqPT289T7Doiwg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.1-next-1612881360-87a0c00d.0_1612881598928_0.2514392414772457"},"_hasShrinkwrap":false},"2.44.1-next-1612881814-d5dd2e0c.0":{"name":"@xdn/core","version":"2.44.1-next-1612881814-d5dd2e0c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.1-next-1612881814-d5dd2e0c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-JcIBQzrud+vVHU6tNswL+31AeNuJvJgjXPKze5w/tVCKQ/0GkRc4HWgEXf+EVZPITx0C2bOo+0susmMEU2VYEQ==","shasum":"de2049f627841930e1cefa22c414bad72a729afe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.1-next-1612881814-d5dd2e0c.0.tgz","fileCount":179,"unpackedSize":664317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIqB/CRA9TVsSAnZWagAAl/EP/0A5PTGs3zP0elgNqPM2\nVpUF17waSnKjH0r7zbXIhZz5x7wI+KAivutJZJI27mt3eUUmgZ0SeNRTOTcg\nwa+WySnzUoN3TKhJLK+4tnjDjfrwq/yshl7sSgLaQdAOmRkIHIaqOhuLX7Jc\nrPSeLEQvMvJYy9mK4B6RcsbY8yTQFjaCxfCpHEnMGKj/y1s9F1fVzFRCEcTm\nDDOtwHNZrS5VDRT4tPrXMKG9kIYsts8hVdpXxA/5i2/W0mcxhBAAX6EdDOKZ\nTOwMndzxFC0/lM/+IvAZ9c0QvtPx1L2GmjRu6xA6knQfHXy1jfBAs1re9plK\ni9eGLhBz+er+PYBPIJmWSziecKGn5NtMGU+AiBsuH4GJsz1vCgsDfUKMAASt\nqsg9ZFpv4n3SQ/AQIHYG/xn9iWaZco+hGEGpmM1KgiBxB8pxewcKvyGJhEG+\ntBzot99C2iXCZxBW3yrj9RRPkJ/FieajHQj+iFrFywjGniGiOMUbpAJoIIl6\neE7DWEDkHcftB919EckLdXc3lNSThQ2W6P4HxhdbVHyzuyRcR6DnNfsaWhbO\niFv4qUvHSy01Vs4DWzCu73TZsI2kW5rdQGj16z8jxe5Djw0pWsLjrTgFT6ku\njgogwn7DY4VptgfNpNSJGi2KGznTlgmXCWU2rhvgUyA+EDy9c25huMz+8QHS\nRrua\r\n=gfXq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG2j4H/0OxmCWWLSmX85CtkSQ0QYLXZOaQicfQaD/GdKAiAgx+PszURKY7sXa4D8lG6YDjcV8/PQczsKbF7heV5s7Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.1-next-1612881814-d5dd2e0c.0_1612882046840_0.3170627041718066"},"_hasShrinkwrap":false},"2.44.1-next-1612895131-4361e71d.0":{"name":"@xdn/core","version":"2.44.1-next-1612895131-4361e71d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.1-next-1612895131-4361e71d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-+3lZUzDynWovMUyjoH7fy5DpOnapnIfe+wpWlwp6NdPXY8NhZNsRUFQYTN59M/eJ1XHWg+o/xFzwBrVYttyegQ==","shasum":"241ed3d4c0d9f82db446aeab4a3c62b3bd803537","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.1-next-1612895131-4361e71d.0.tgz","fileCount":179,"unpackedSize":664317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgItSSCRA9TVsSAnZWagAAZN8P/218UsWz+M5UtMzpKzOI\ngWA5KlWNFJoa9c6s+mHpHE8AfcCXT1XntiVFWtSqdNEX19xenO+HQcLwla7N\nFdC2z/78tLh+Z1fbozvc/uHfDcCZJ9nNL9nMbJUrDmiDbVqjYR1f5BGiuLTZ\ndjj1SRwHG1ghvsvJfl8/V4wGwdyXxooepMVlgOxuVty45BONps076C/2PKo6\nZaP0WsQpQGwqOoIvciiBorNBFt5tzvagr56xWUrbHgAjmyli5XZTfkqBvGO4\nMDDvyIHN/R1apvAvf9CWNkoOg0JpEefpAUDtIKIUArnyvSnyJ+skQihNf3h+\nHbsbJ2EY92TJhNxmsfhrawaBpYnT+8U5uExi8Hn5y74oc9CvEdLMV/Rghj1o\nJgs5aNmVBDs9tsqNXWw2wTszqj8LPYqd8sPHCcUGFHuS8oJt5qcWXHAJlaKI\nLDhJqNk1EWayFxOFx72015zZIX3osGArRJuYXeMd1+LiE/si4rK84QNeuRNj\nzVXxbx3B5NReWnBrwMIe+IQYktZFpO5poyGzk+E0ytdItLdLrpJ9HXi8U0Ug\n1szRdKPj6kAH4DbuX1X+iXYknHF5yp6Fs2LPiaqXAuCV3X2CRIfTCTA8Eu/0\nemazrQpfbs702PWBcAbI/35q0o8eGijuRFVHylOJ0CV1Lb5JhO8IULwVXG5r\nK8Ue\r\n=BKAD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID62YL7MdeQ+IvPgAVuGan72JA86/haQi9P8TA0Jm0z+AiEA+QQQ4mtonEJ+UqVN919ggfOwFR8CvMkUc+cqn+itwSs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.1-next-1612895131-4361e71d.0_1612895378033_0.40645308895237453"},"_hasShrinkwrap":false},"2.44.1-next-1612898947-7a0a2a47.0":{"name":"@xdn/core","version":"2.44.1-next-1612898947-7a0a2a47.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.1-next-1612898947-7a0a2a47.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-bhLqIHlbD9ooCs8dpl5lMisE6yD5rFz6fh95Iih1Y0oH6JefxxvW07AAH4y8cGhtZnWPyd9SkLrS4KgD3WG33w==","shasum":"19550b2aa64ab66cf31731a36478e932370d1705","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.1-next-1612898947-7a0a2a47.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIuNPCRA9TVsSAnZWagAAzYIP/2w9MhwE+Unj6ettyITN\nabrVMwJ1umnhbNMZpuqAT6iAkYz9FvZaeZ/LAWAY+rfgWRydXFa3rkhBP+Kl\nAF/JbR9yg5AMOirgO+QYP13OQgSRg7m/eFrIIovgNHZ2OwbNO/b0lqs4hbmg\notLEOUupWUbleYhZ+KvSSkN9SWxZR4e3sXKjIGyXFmzhhs/xFvmAcN+B2Q9e\nfZ2WTBxtiWHvvVthOWK11X9iKlv0Z2aosVER3at2J6hQ9JuC0aQKKFcs4a4j\n6DOVAH8yBx4fvHrWCjtRR3Xdm0uElo5/jUzRbIob/nG6giZuENCeA1yIdFdX\nhdTLR24vcGT2nU/N1yA+s9XjEmmj4HIaKnNqzfhs/T7w9v2R9f9GWnezRYD6\nADwAJxHfrROHCL4p39oDTBov7owA0Dd0wTZFsLq7zfX9U6ecEd3BVvDFpAqH\nxWfdI+rWNn/yuP+qjSeeRHL+VQ/VlVXKnlWUPSII5g/t6BKBA+fJ9m7KAQzX\nzmMPvk/ICuq/ORWCqAaQDRWPPxuJDQxFgkAg4Rxte8LVmPBvuGFJjnrtIFU9\nF9ibtdgl63P2pyWIOEnX0ZA4Qt0QQh8022XBH+2VgdnBnK4ZJfCb9cZ8IQSn\nbLXcOUiMqEhtty51wl/odmBy2i87iS2FCiP0ZT+Y2o3rhPXOuGK5of2IQlpS\nv+09\r\n=NuxA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDkHOOH+Pfv44EA6aQbamwFcK1khYyW0vCjnHmnkVESgIgZglinejgvP7vyrIzGo36N81qkHvURaMzkGXidCDrmNY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.1-next-1612898947-7a0a2a47.0_1612899150734_0.6998180047973432"},"_hasShrinkwrap":false},"2.44.1-next-1612901435-07e59e1b.0":{"name":"@xdn/core","version":"2.44.1-next-1612901435-07e59e1b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.1-next-1612901435-07e59e1b.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-IfWz+sV7djmm3eFLbgU59V3qjHj7klmVVymeARJ8nczbE/fwYPxNUsbVoYnyADnIAJjEtTTmw0S5cB/WzJDgng==","shasum":"b80663b2e12a2a82af98b3424efee4b3ee199dee","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.1-next-1612901435-07e59e1b.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIu0jCRA9TVsSAnZWagAAmDkP/Rc0g4nkh+JAzsrxgplO\n2TQzlUuQoIQOi7MlEUyBMY4L4t5ALEuRQS1l4xQfdlalu2AaUa6p3OOQTnA9\nEGYDXctPBR8APHURlKYbDJ3MA2OPNFs3J46y/RRNsGstykOI400qfSnyInKy\nTQ0k5NBJFq8crvGa7ypSRVo8j16D0xEvXS1fVm67bfOouiRMnWrP+uPAR41R\njR4stFs/zcQEFHiQapdD1gYMCtlnFftuWFvBcRbzsGJ+ESBk7yHuiOqje3/x\nxZrRZ7kOwBKN6dD8leV+Qy1H1WrILZQOQ+Xj41Mf/P1jmC2CHzqrTp0vnJf0\n4rzesgM7A8uDR6iguDE4S/yiTTJe1uIh8JJejlVmLE93yFICr3beZlnNHMk4\nCgq7WQBzvuA/qkvN4fXEZAkGevtdNRnLBPD38IQt+BW1In+Z6otvqgNs77wC\n7yNl8+FZzDru4PmgffPHr8y41zEfIINnU+AyutnRZxxgFJPatqhVVAozXbbn\nwtSb9GtnveWi9BhfA+NbCIT4RZ5eUc6wKzUpfy7cj5+VF0XQ/r2cm2tFwsQQ\nxIFiZZH/eNEtu9fZygAgsH+1ehGOOn9YjthnXYG7eIRo8SGpWJ/i4nlQC+ap\ndVGAd8ERBChjuO5XzLnnGxo1lo9bhnbG3E4xhSQLA1OPS154uCW9muuumnP8\n53fh\r\n=ZBnv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCH1aMi/9I9gtFfxqgwS0TylAIi61jKVaMun8m801Vyq4CIGgmd92KjJzbrgMwMcLQZEdAsVH0nmbn6sEmW1hdbyvQ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.1-next-1612901435-07e59e1b.0_1612901667254_0.9805245285998792"},"_hasShrinkwrap":false},"2.44.1":{"name":"@xdn/core","version":"2.44.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.1","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Htyuk3d/3bJ23WRm4YN8TriQJ1MAXh72OoCOEVc35t+VB//2farkARjCvJyoHLXUHkv7OY0tJaEYNWx4bsLnKw==","shasum":"daddf7099813209cb0a5cd050c5471064c6ffe5f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.1.tgz","fileCount":179,"unpackedSize":664378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIu1BCRA9TVsSAnZWagAA5LIQAIi5g6VWEyg3HNVc03rD\nxP211qUR+qa3ZUEHDXEoVyUHIGJfH/JU6Erapljn56PFTgswCWDHHiEhV+7G\nSiooXOGgd9oK1WymosEOAcH1BJebh9XFZeLuEC5PN6BpnP/P1kvw7KKOZc2U\n963zMaOOjuo7N+Nh+l814+SKsTQD8Wm45EcAR3I3HzxiHmKSVFeCWH7ad3bp\nWshZA1A5Ak5mBBWuxiugeNE6b9FkXa+bqY3BnRz7vfDCg3By+kVy/IFCnAV5\nefvkrN7dYPDW6tg8iPYGd7nywRuxBxnfJzH/x2U3kEQPQH+Q88DALM/ORt+X\npZ5yPaPAWFUCrEmb+ahxG4ALFjw8kN+XLxQcKIZrNRrz6A8T+yw0vJp99TVw\n5/Hj50IUElnzGPO/nnuPvu1Iyauq9HhsjmB68C7nuJTA3ajrFTiscqxhsH/B\njAVdQhfcArFy8m3dbhyvXkWKkIYUYeN1DGmf9LCDJb3rSo3uGrhIQUlduemo\naIPkbf42fb1IAgI8LsuuHPDeqA5y/rTl+BkJA3jyZsEpbMbeEY/nCrXTu/b2\nfoxh2axYl64StIu2eXjOmFan0L+c12K4mhhebo+9UVISWqkqGuuDtm7O4APb\nDSZUW+UWt+PYNajR0OGMVa/M89QMHL97hDcZFAfGoPJOj0hpl+FZshjojzrH\nG2MD\r\n=d7aV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHpVDEvo9YVN7duUclDcCcLperx6o9oCngXS5EaOVjawIhAJELj9lyvx1CbWlO4K2ka+YvCIvW5Qke+MV4NwG3lDLX"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.1_1612901697198_0.2059063438350588"},"_hasShrinkwrap":false},"2.44.2-next-1612901535-ab64c39d.0":{"name":"@xdn/core","version":"2.44.2-next-1612901535-ab64c39d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.2-next-1612901535-ab64c39d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-nVl/AItOCKCoz0h6inAt7VbAY3liTizK3SZQcp7wyVF5lhCwvF9OESXeGrkbhoP8tIGuMhjKlHue0YeWVHrtRA==","shasum":"baacc4fb90cf23e9aa665ec4ef42054ab9082b7b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.2-next-1612901535-ab64c39d.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIu2iCRA9TVsSAnZWagAAk6MQAIv/yLYpPKBBiIQMjA5Q\ntCpS5OzpCk5bvKVyONTXHL6SK4w+Q+69BMXZsGV4SNCrKZylNUKLgp2uZlQC\nX6Qma4v/vagbR/JnWHaYBRz27wceJFaR3XNeYh8T/ExilYOC0jICQwERWC1r\nf0lNhTo+XwShzqNS3tIWpv0skxOsxvXN/D8lunS6aOK2dhj3yWjzeJSnChTT\n2AlEM15EuS+tJhr/P4VbYMJij+qZ2usJeSX6Bw7eGRYdxn2eeckvKOo2uSjl\n5qK1a/Cvnzwd2ZmeCVlR14LJgc4d1zL9nKVb2/c+IyvjewMPkMFKclfXz9Fy\n3x4Vs/tqS1Kr/SlV3lAqmYYWwmKK7EzkUn9cev9tzv2r7tCWb/gy/48Bug7m\nyiewZVKoUGF5FRThsp1XGOkflTnafBICApNMzrdIx7IAM0jxoQS/hyiqTyOg\nDvbtVSzqFhC0hM9BqrL9h2B4PVx2viC/cyPljtn4dFXyG7bkum6BccXTSzeA\nLKlBqb0o7tvXMbUzY3zeco0qeJHCmSIhVnnFfoTGassfN+hdMW4Ob88UgiSe\nMddvqj2xOmU+8XRwKT5hMmvaF+v5TywLIHH1999O3G/9QTCCSQ+VTa+NxElE\nfae5x6K3l+4RbyZcWie600GGXd3N8c3oE37pvpf1zHZSqjm+u06FMU7lQ0Ry\nFUlz\r\n=V7Gq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCukimsV9rgHxWia+i984kxH6ZHKbsONz84Ip/09Ey/wgIgCVHqzqSWcyJ/mq2RtWxbdQj46atWa6GL4hOC2B0DtsI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.2-next-1612901535-ab64c39d.0_1612901794127_0.7580283334428404"},"_hasShrinkwrap":false},"2.44.2-next-1612903048-f77b7138.0":{"name":"@xdn/core","version":"2.44.2-next-1612903048-f77b7138.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.2-next-1612903048-f77b7138.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-JzYYm9Rk55HqcpFMD3KNxqcoL2+i+YHSeJFRhMZ8zcpXJrRn6jQpjrNluEU8jOpFkvRcwd5VQniKoYuCJU6s2A==","shasum":"6bd9996e32ac3053611a11f266ad44a0b9eb9552","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.2-next-1612903048-f77b7138.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIvNWCRA9TVsSAnZWagAAOHoP/Ak+NGOaGvTssZXECKpp\ngLDFVSqBMekrhnEdz3ZwnNi0iIwiLqZsGW44APAajGuoP9ql2zuQr2mXcRbt\nWk7/iDC4CVaoBuWkz7QoTZrq/EKJq97o4gEt5rywRWE+vzXISXgJ+MKpqKLQ\nbeb3fuIuSikfz7a6UhLz2c7DaGjshAfyfLEEZHfjYzrAOV/arY7f/p/spC0R\nY7D0ZB+IGSOXHmYDvsgjvENVMEq3IPu/kKbHoTQdGi0eeEhXVHynlKE9P/3r\nKg2NLx92SCRsIGUJgFqfIo/G2VbgXxzkby+6bSvOgJ9UT6oGrFCQ3WS+LdMi\n6g9CIYiXiw5VXfVPZS6mihp3ygUfJWQFcAGdjOtNnE6PgXxKZGKzdzq3GCcg\nElEIMZKUge+nGcpCG0UqMRZW+9ZAG9T9PwE5HOExIDRSWQhR+3XxeRW8IYXY\nCYaVchsJbbMaoU7emDPTPbFr7XrF5ImRmQ3jQ5aniFT7A+U7AHejUgZRMISh\nz+m4TiKc2aCAX4apEhwr/GpeBvW1sJaMB37UrslgrNf9Pmm5aNUcrzpdJ87k\n4WewW/uxEemsmMEXYpCXaAxoTYV0L4q+QQjsnrJ5IkU113Xo6hNC6/6BngJl\nO8ROmbo+EPa4OKT7ip5POMPHHUyXR4Q3ZJc94Y3V1EbT0gxhD5k01Ql6fzyw\nZF5t\r\n=sEPr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICC3FY9vKq2E6EVyvsIme4kQB7xTFu21tSmskW+2IkTLAiEAqBcLuvgWonv8TBT2bUQHA3OSA4KEKytyDrcPBEUr5ds="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.2-next-1612903048-f77b7138.0_1612903254083_0.10348209025562882"},"_hasShrinkwrap":false},"2.44.2-next-1612905654-a921d501.0":{"name":"@xdn/core","version":"2.44.2-next-1612905654-a921d501.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.2-next-1612905654-a921d501.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-NyPoge7aD1BBa1T2++nVhb7eTsMRQvPHdC5HU81NG+PQZuJX4CpLmVK+agdCBuUSSHu+1UjklqGzS+ciRTOHyA==","shasum":"878998ba91b3d1f3aab70d029564cd99648472e8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.2-next-1612905654-a921d501.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIv2+CRA9TVsSAnZWagAAtsMP/0NEt132uYNKQfygGCN+\n7fpmZ1AD5cHEMCEHDK7nMZrC82eBVpH/3nKGrdjU1EsJerXmkZrD8nMToEal\n+cKA1LjxdgE0hu99qbMuphWhD3MEHLePme9i49keiKUrzO/S04/evla7a8II\nb+7ydIClHb+sl4VKz12NaWQjeDEt3Tg3wHcDEAYhBTcS7vE8b7ruNFudsFvd\n2CpdwZGQouXinK5plLgH19M8iZM+VSlXIr6wbmW4k7OIXqCE9/tzXQ/PDRSr\nNO2AX7kvmI0Gh0r98x0A+b7XCLTpI/6lkBhHcgyPQp9FoT6EyK2mQ48b7X1f\nm//rzgx9MEJV91fXW0757L+FbjNI0TJBv7jvyX4epQkYjwU7Oxh9duYZN2uE\nZv3ptI5YrLLV0fl666CfMSfUcJdpmUVa0xdXNwb1BMXfjczZ7kZ7Zw3Di3yq\nxKmKzqBLS8UhyC7ULDUF/dDbodIJGot7LbV7o6sy/fWvRCy67y4Q6UolCpLT\nWK9gzyOKgEn0UwNY+XCskaJafRjmwrH2XeGflWpYbupQSPVTyRAcibcg3TUu\nh4HVKVXzmIpLEh7clZN/kbGSBJRTIjwZUC4jyNY4zEebiAT8AfYZAW7YwrqG\nHoCHMng5mi7YVj0ylC4yJNFdr7rALGhyEIhM/Ze3cINvkPPWbi96CU7fpl0T\nyHhz\r\n=TDKL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLTv28NO0fIqa+nVjW5wruooM/TEVWTR4DlKUTuREyPAIhAPD5R9liuswgrbwifzKWJHNVEmasPN2Nh0GHlmTrzsC+"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.2-next-1612905654-a921d501.0_1612905918401_0.9493084808911669"},"_hasShrinkwrap":false},"2.44.2-next-1612907156-be16a678.0":{"name":"@xdn/core","version":"2.44.2-next-1612907156-be16a678.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.2-next-1612907156-be16a678.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-vfB/k5X5rf5+Zz8EjZevXl81Yrsz8B1JtaCjEdIgERhhWs1GhxdRCBzJKaG8nYERPHQm3tTMIJl7Cfx2ThCKXQ==","shasum":"c6efdb3294aa96eb44363b0248aaa16290f24c50","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.2-next-1612907156-be16a678.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIwOJCRA9TVsSAnZWagAAN04QAJ3t7WelnkSMDhsS8aGf\nmhtJIey7gMIezCJUNMsOKpcGSKWqFJ12JZ/asXDKarHOWg4+mmtxi1ZNCHIa\nJ/+MSEVKfwkMuRK1DgzA9Hx/CvF86LlYfRO6trHR6ty+3V0S/WaTVfkMO0Ke\niySN+5EDXCeh/9ok1CqsnZgSSwG0F9fm92mZwYUSSpZkJhv57sjFqhuVzxpZ\nKAvGIatOPUAzeLEkC7CzWr3aNWey+lru2JcoHcpPsqe9ANC7XwXTYwI5sk8F\nnK5KcAHZma+Hm2n6wohUrxW4+KkkYOT2OeceA4lmaXpgEjLVG0OkN9IYnGob\nPPH3Duoc+zfoTFVsv7SXDkuFGpujHDM0Uz5LGqQ98UYnATHTq/B6/EOQ7XYJ\nzlkBziRs9k8IwBYLaLJgu72C/AnU3bSMCgvm65PW9UX9cePz0jjQi4ZH3wdE\ng6OmKbwuFF2nXNohdXI9oOPchEtI72MmgSZLMaN4nKntwMW3EG9De1dPVlfu\njRtLQeh4xivJskQFY2ofz+5O7LqTFa4ypNfWvYoScNGZavhMQBOFUIZOgpT0\n4Kbpmc6jKSaT2eZbwvI2swrayJuQ8mChwj6lb9GtyMADvjEssM9KyBs5lGRh\ncfTYPaI9MPt7AHOBKqYIIjLwfPeqAgYgPm2PUdomL2Cd0HaWOJkH58H/u5Wn\nDLGU\r\n=u/Bj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHswEirpJVPcBVm42pHDKBeHMg8ZtpWAukAnl2I6GmLgIgSnRee9di+Q3brt3yQF1vJmWQPMo4i2V3RCzr5FC6swQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.2-next-1612907156-be16a678.0_1612907401010_0.12430073311095535"},"_hasShrinkwrap":false},"2.44.3-next-1612907227-4c9be7bd.0":{"name":"@xdn/core","version":"2.44.3-next-1612907227-4c9be7bd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1612907227-4c9be7bd.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-W70vYzmH1jQuABzVQm8AV3voiGQk8JF1aWewKn2aPUuWKEgurQbzKlvBCxoUZJXo+eSV3a+IEzEuebf8yDfwsw==","shasum":"1c06f2387e1b714d47b85e955afe4cef20da4d2c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1612907227-4c9be7bd.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIwPECRA9TVsSAnZWagAARdIP/RgFx7dXad3gWwoKhsYY\nzcuiBAlLENJeoQTX+0RsAJ7eRjuYAjifN0h4IB7iWzsorKih6pbteKQhFriN\nihU/1EJJMszHfrWc6Q0yhwP7rNSjdj2JDjsR83er66gKrELxn2YlXy+fl/hM\nwFkSGeelZOaSgDt8IvWxWy0wYoPGHGbJEmcBXYk8fPVE9PVwO8ANf5nyioHV\n0s3beVY2PhCCM7KvyuZ3q9FfaI78GXWz3Y7JH6qeKN8jM7hNKLK49TTH7lCR\nEwR4tUTizTVggark3mgavsRj9d1tBu4xhcplxxpuxz1ubrm/944URGr3H6co\nFy3nQ2BNgPZ7/1e4vDLrYYaBD941V/0yi8tWD2TQcU3AZHtBSrTfbEcPVe23\njPmAeAVP8GGkSNd0F9THnIaQgPLLyg2xgjbzxJ1PMemYVPvt744NvnEoSolF\nZYiJeDbWMAI0vxhsdEwHVlG7cyMA+glv+TIKGQU1eDJ/0g7fV0GKSUTydOjJ\nPtYTTnnQh+B/C5akFNCvi8UeDccZomac9lWhw8UwqZnW8gCHX70mWT5jUR3V\nxGgH9k9PRItnuMXZi4DGJoK4jhenY2pW3Pg8lNJmVR4NmRb6jLpJd29UHmDL\nfeIbBAlggl1Cd3rG/F8i1Nye9apKMzY43aux0DSQrT/hLO7q9uCqsmQVG019\n10BL\r\n=RJqn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEoZh0wNHIPaSYImi/pc0PKao/JP36uzlK4LKB2gh3zsAiARGYSVw/oR/+s2e3UpsnZMjSJuEmPCyI17tnt8bNH14Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1612907227-4c9be7bd.0_1612907459654_0.16801215335031405"},"_hasShrinkwrap":false},"2.44.2":{"name":"@xdn/core","version":"2.44.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.2","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-d+/PRlnsskt8hDWuS5OKQcpzMxB/eaqtu5OKXF4u3eX6DKSMrZirI8Ooi8jwzGfHRWs5tYMHbM2cefO89EWbzg==","shasum":"778233db0768f8636afa79e270d489fd4b213105","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.2.tgz","fileCount":179,"unpackedSize":664378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIwRbCRA9TVsSAnZWagAAb+oP/3UNDO/mqNlkXmImqepZ\n/ZFmHHDpHgSIaLCVjwTn4SbRYBmaLQRcOkHejrsy8N4WkUXkLhj8rhx3HzBs\n9IdZOJVr7JmVlgrqwFtn0r2yzztlt+svBWE0X92H9vWM88Ng3tRIX/+U8C8J\nRckuBBsvTOXKkz0HGjG57yvsqb4nLS7GNGi6jd+XBlpCLWWaT42vF/sKujGR\nIqNaso8Sw37LTu2txZt3Hk7+yqIIPDQlJYYKJeSC7N3M6swb1zbqWerS4zNG\nDPgUPmmFMGR1j0U51iGWugDwjBDOVUwCw9YEVOSwSXXlYbvSscjSB1valpB1\n8UfoEPuZe2FusyxoeM/o5r9aEDeuJxfpwFCfimdIt1a6gocUuN6AVkXMO2Ai\nojv/c6jyUHawG8Jf2/Sl+9t76pdBxX+mLklCYBFS/OpzVXaKMqFBCySmDbh7\njo63KshdkNALXjGEUi0BQN30yfzHEToVciW40HhgL90WH4Cg8F7M4Jq32WBK\n7mVM1bhL0WtG0fPAz8Y0IdSFFd/Q3KOfAD5V1K/B028hOjyiraUDD4Q5bMwS\n7F2Y55uSIzA3THRgMhHryEZKD2W+PBxR/b7rFYIcEICc6evnwwzsxp8Oxb0Y\nGPJm8Ng1k4rl5FW2dBlm/l7x2QOgCXEb91IOnyZm4hkTHdHnhbveH4+dvnsY\njPJX\r\n=Wxyg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+WC6pTccuSDYLJft7A7jHzKwuO6vgyw9fyBGzkrUjPAIgB+TFyHoi4lH/1ZFDjlD3lc1bTwss/wr1yWUajk4in+c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.2_1612907610678_0.17328119482501525"},"_hasShrinkwrap":false},"2.44.3-next-1612916720-f7c12971.0":{"name":"@xdn/core","version":"2.44.3-next-1612916720-f7c12971.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1612916720-f7c12971.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-P2ZqhhBGSVz78YGQdlVQShzwX1bGmvWJk/oojHbxfneh+6qM/bZZ3QYK8VTdd83mhp1B3l9wGCVprb9m8uJUSQ==","shasum":"44ab93579c96e1638fb522892735740b23c15db3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1612916720-f7c12971.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIyjzCRA9TVsSAnZWagAA1O4P/R07Svx+InnrNnTfZ3ra\nFSfAJ4VON/N+YuTa4Yf4yontzN5NMYD65Nsmcc1tF1bzB79zCyTeEou4ct7B\nMSb18+tTn///9KaAe5avAzV/5sjl0Wp3tw3MGj0IIbwYg3fHmIE0GvpYPkqO\nTR2BtCtuAeYC3KXgKj3PiUwkwXr9ZAsXkHeKVpLrY0lrwihTcgKjNCU9uM+L\nmVNP42hSdcbJ33633FzV9ZwNeur4DlZoEsP3hvzAU/bEkdcoePDFMH6oPOd/\n0gL24No+4YVcOCYlC/Iz5xWLKwDJBz+j9386iOJfZLMiLn9rG2ysgXbZrsji\n10nOGUte66yGFSFDOoUsPwmNbIKV9oIXEdayl7MrjL7TsHtfXAHpKwVVGCcH\noQxlFpEmSGCEKbGgCQxX6HQh49i4+vcnWPMXVhPgO7xEdbW0RzwfdUiERl5Z\n0Ow+tNHOSxLpYgEzuRJqHG63FyTI/T49xgI5SCdrZ0PSXdpFIDN0YNQ0AXdo\nnt/NXiUDsxzTzRirgh3EV0XCrS4SxAEy9uywgqZT5SwePFWA1dfYTt4oyVdI\ncIG2NGuIIp6VVPg5bZvGHkxLm1QPtGQ3nDN2z/GBochBkDb5DZm7PldGSlYF\nM5avheP7GHWiWaQ1lIEkITnac/apgrPQQY+nIsCx2d1fwE1ua8OyzFp2oWqn\nU1rE\r\n=1kbt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGBPLQOI7/Xny7SRYlFoTfotodxrwR2WihxyjlzpVFTbAiEAp9E47tfRJ64En+8Axgagk8JPz0KTMxk1MxKwQX5fssc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1612916720-f7c12971.0_1612916979023_0.572816933481203"},"_hasShrinkwrap":false},"2.44.3-next-1612924869-1b9499db.0":{"name":"@xdn/core","version":"2.44.3-next-1612924869-1b9499db.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1612924869-1b9499db.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-5SbfvY9ZAltksocwORtKtmsQ1jCVd15vQ2tJy6aSsPA6eDXhULnbgu1IKsil3icUgG7klTZRloPsnx5IdMKd3A==","shasum":"03b19dddc060edba440ca3538a559ac36c10876f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1612924869-1b9499db.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgI0iyCRA9TVsSAnZWagAAMVEP/2BfSee76mqCXZv2Yrng\necmi691cAhcK1QO9O2Voca0eCYJBnsV0oUC1mkbVac5+2g7uiWSRpJNQWyQ4\nFhZDJ/emwmWNirzZGYY9gl38MjjpY5tvbY2+786fqUGo9PwAT0sKlxpPILLK\naKnV38kry4bI+TLoLU85p+MiuFVcZda1mi6k8DxiHJAMPfPfXf5BE4eDq4Lx\nb1G2JXazWC6S7l5YCFAnXtpqXOUG3I6ZahOeCmW02j0OLjugz+V8swuin/Di\n9X2PHwCy7q80KSh6YvGS3g7nZiZKt1B7TQZdYltQMApBUP7Ousvr4ezsuT8t\nAeADoFEQDNvXwnRMf2he2aKiciEc5VHeFX+uuyYqKi/hsPb5QT3HlTLMv1vg\nGNa/A1Mvz0T7V/2vOZ8lZ26qfuckDg7l1ui0vX6ApK58vASgpMMG8kDCyZyn\njfFhbKu/sdm6RU6HVkf0lhSPMXyXrfcNvSVw7+w0a8dCw9qfT99FjDyua33R\nzasKHaFBIilApkggTdOwYuSV/hhtIeFogBqqY7EgYt05FiTdmkdggXTdGYcm\nk2DeNeChWy/EM/fpPu/v/HanhamO08nspjtrNaniOq7SBuv467jFuaZ8j90t\njfPaHlAKWWckRaA9KKvjp8lg42lhriq1Tc5K6J4szJ8+SIXfrhDz4TUOD6mU\n3b92\r\n=B4uR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICh0OXDM+9NjClltKjLZJ2fJbxft7gv4QE5eQE/A3hFBAiEAp7KTW0dBoL1cM9n+9s9tb2P56V2CpxZoeVqJY+Oa6Go="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1612924869-1b9499db.0_1612925105680_0.2139851758171325"},"_hasShrinkwrap":false},"2.44.3-next-1612958717-c9c30dbc.0":{"name":"@xdn/core","version":"2.44.3-next-1612958717-c9c30dbc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1612958717-c9c30dbc.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-FC5rZ5N4CKsx2Ft1eEWpEI3z3Jcvt4RJ5Zumx5Jlny89kzB4WNaOAAs6izqrSB97WAZIcAOspQCB3Wdm4kehAg==","shasum":"77316b81b3c406b28529602b89fadf1c9b6fe06c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1612958717-c9c30dbc.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgI80CCRA9TVsSAnZWagAA1d4P/13lBpOH9BG+ZbTgfYvg\n7+GHp/SRcAAbw4Au+yXI7/V9XeN3ViiUYFp/hJBjhouwuULBC+yMBiO9RFH1\nb2l6mupIv1s7z2Yfwfyhl+mGsq13TvREyE7yrja51dYVLU4PT40WdQGpfhGU\nQEk8vIpRBdv+l3dfZrZmT/QBI3Nc/JGoKM2DnHcoRWTI3j6c3ErWzdvfUten\nySUIr6et7M0g7drRXYxKmU6Mkjf8ziZ6uso0sXcg0ZyApRoA2j7S7b9IIMmv\nDL/xFf4uxfn2dZevVSl4IWUaTh8Q13n8H12hsei8YJnMaAY2bNWrPDWzkw/s\nEzjlOfCdkav7qmIJbPZkOF2H0XZBQI/qTYWiCM836gaBlAFAWm4EIOqX+1eQ\nAxLXxihnjvV0BHfM8FsUcaBMdrugqgLWGzFlk0zLATvCwWgmJ2GdclAJoDuH\n5HwoyMK5jivencybuwhz4zmD3bkjrTa7v6wjUYsddJtaCbHKRvrZ/NjIumGs\nrYHns3zgyM/TpRF8d8AQLMrCW/TODKA7xsDV5FJ+a2J2XoNnFSAUk61eB6oP\na6dQ80FKFcNBfqo53pY58kdbPTaN5LF6bGtrD8O+b9VTqTJz2V4kzFZfwUBW\n3Uf8v4gYk13DykyssnWtyoUYqV2sh4Bvqw3xXl0kPkOxVredT0p65DgtBcVP\nYOym\r\n=6KiV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTQX13exfUWmNvPB684JwyLWP6JkGMO3F+CmvFfT+yfgIhANvlwLZJEHolN0oo9+or1iqg+HYRK5xgfCBLQVr6W8q1"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1612958717-c9c30dbc.0_1612958977334_0.8802163495859634"},"_hasShrinkwrap":false},"2.44.3-next-1612964528-20c04862.0":{"name":"@xdn/core","version":"2.44.3-next-1612964528-20c04862.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1612964528-20c04862.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-5+oDzZY1XesphXUVBX6c0y6iowCvXO1n08o0VX7yXvSzoaJ49put5QQGNJyIldVkCO4gdqfg/5nI6DvrA8Ko4A==","shasum":"9db6876dd94f6756bd379cc1bb739b506b6b211e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1612964528-20c04862.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgI+OoCRA9TVsSAnZWagAALPUP/1hluzxGlUacO4dVuK7i\ntnQi2FIfyxpoTGu2o7RaZhDzD/TYoUo/uNxaGJE5eSvDP1MuMAUDLp7ZelAu\nSkhgUIm/uKFFPi82IhdeViDeUx7wEbhitbpOUnLtougyLAq7pbuBnIlT056a\n7qpCpiBdW7w0/hWKiANTaxVq18H634o5cfyyD9MJTe5kibbq9exM+LGTBriy\ngONsxkJeqhvterpLC0LojDb38wiFVVYM2HaUW4rwm/94aw+cFrxE5AZZKreh\nmYjbkSEAeVYHw8uQuNywaUsVRmf7SDk15a0tYZlwjNYrg3vuDl9X1bEdCsVR\nEVHRAhCEDq1j/kNZj9l9VgNQbC4oUuusFgIwEsYtlEyY/cC76GRFn0Sy0n+X\nTws+UU7xmB5/NY4zjEclzkuDGH+zqhQBJSTBCo4fug3tPI14zgWtkiopMmyt\nXayOdaTNivv1IRy7v4vGG64hnco9lQpyAah6zF4sjSvXM90OoFjhsAnNldLJ\ncu9jEcDMdePesQjK0CP9yaETGN/svt26XZt5+HbdJ9W7cvgJgkwqxLNyOdMI\nU9/N3vHd0LZmH4M+xbh5hGrcWt/lePFRXhEHp1BKKbDnNkY5aLm8GU5JHOS/\nApSOezKSNlCM9vMpYuwAwoHc+8AITCBuK5XdhI65IprCLy7OnJkoCNnsUprS\n7cfj\r\n=uE1B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjVNzw42UULXT99eDh160OgmBeLwn1wXMd10sv1ek1PQIgZtlAR3gAtBMcedZVlbs6og5Zy/UW6B68RkqD9xpullo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1612964528-20c04862.0_1612964776088_0.41195635384951124"},"_hasShrinkwrap":false},"2.44.3-next-1612967921-9a80b78c.0":{"name":"@xdn/core","version":"2.44.3-next-1612967921-9a80b78c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1612967921-9a80b78c.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-qMh+OdUpKL5LpUob4JYk6aj7RPvAs71up5lDQ1KvpW4ro8Cl6gXvRN/J4JOLVonXrnt4HHSZlZBxhQkWzgfGvA==","shasum":"a674ef5b61994c78fbca83af14e921560c5ecebf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1612967921-9a80b78c.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgI/EBCRA9TVsSAnZWagAAkgAP/i8fY2xnsR7fcxMUROGU\n1BPznMptPBQ0eQ+YKlyXXFB4sG7RNWH3RWepyAjSQnihwlCGM+urL9XSLLDZ\nVz6SCSA2ngGEvR/MxblaFUcMbcb7fpVnkWdOCF0l3JYlJl+4V8f8ChIVsIsW\nMmCeGGDX9euRAmf/WSk8Julix9E1b1/vOAfLthPxNZcvwEVZoNqE4adbTKDl\nOdE9xA8tfXEe0DOxOloFW+QOZNdQctNFo+v6ewnPJtOujVkyqzVSdi9JF+gt\nt78JNqlHcdBAzMh9Lizxg/eyTqvUrINrChs0vpEMtluTYvxXwoZb3LZIoTRb\nV/WllncwKbNGs5X6sZqz24D/GOfR8ESbpezgWAiH1JmVIC3R5oySXa7sOeCe\n0WSFU/m0QaJTDeTOGchpTCXAEf0dbDkXHmAdufMhuqSYfriNv35JiMgPH0Iw\n6WY7+MRZOz9VhxZx18dYReix+iYFWK42nsXzfEl5O3f7T79gVnttaiDXFciq\nDYlC0sE9ZAmJnYl4fy4XrPSQBJrsE24r0rdeSxC8z6iHHk/SfSs4qaSwOZME\n8+dFyAG+PpBKh+8Q35nArvc6e16XxmgmUErhLMHDqO/IZmuA558dOVeRk2ev\nakbJ8YxT+rnJ6IS9VqbVic8+vZjD8tu+JvPBP5V0ndYFFzdxs/34XDaZfKfd\nvKNZ\r\n=Thoq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlBvnuX/PRHsoTWoC6BFhHGizrWsB8a2pA3mT5WnbiOwIgWV9YnqDSRzygo70Hv9C2NvaOl13NTeDMeHVIE8P1kJo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1612967921-9a80b78c.0_1612968192736_0.7075938136496966"},"_hasShrinkwrap":false},"2.44.3-next-1612984049-554f2cf5.0":{"name":"@xdn/core","version":"2.44.3-next-1612984049-554f2cf5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1612984049-554f2cf5.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-BxqElLaZH8mFyRcgQTdtivUZgwf2n69RV/BuNrj12Yj7k+rdVja0bK0/WxOTOY5O67D9hlkcOwkSNWIY/tuBfA==","shasum":"281e73158114442f06120794082d452aeb5f70ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1612984049-554f2cf5.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJC/BCRA9TVsSAnZWagAA75gP/jcRB+VfVoHkwGi4KQxy\ngoQ68uTJG9dVpCASG/c7bs9VZTL3LLExyJpLI8R6I/Tu+eKrHzUg1VCb8nns\nhe/Tj9vjSig/0N3luEIrT6f9VJRXzl3cv9Z1GRLAOOfuNeSP4vaNMXi4WVIS\nGk3X2AxFO7d3GFv8Dtg2Xfsnxlsgd2f7JUzlMkucGrG74dDFTux6pq0dwkox\nnrtONFL5Ii4XSPaUazWn/zDnfobQBnFuuP8SPZwbeZum7z20foIEhHkeKUad\nQpMRT3+Wv/p2nHuoNjwttB2V+135latOf7RGDCQ0wnQ/FOdNWQ4G2N8FKj5g\nM7P7DaEDUKBuhpGQLBsOOmzgHLJK0ZJqyGLffevR4bEcdqLGQck3lHSkHrdd\nlq+NgTr+xUXdxPf0eUUHhDwwnmF+KVQ/UWdGR9IuR1NVxBR/5Qjent+Opsrq\nUB5U6fRlSdXABJ6CsSR11K89O2L2/uOGXSeEF3sDGFiLd78Mb4IOhsGK8ht/\nakQpKwolIKK+pFNqhsW/DChxA4H8dYmpesWOLeFI8tOhCvSKE+hDO4wxl5p3\nHQNRhjtoWiMcDcX/NISnC9XcpZT7qZfdl5Qi1sJEe7Fh9VN8M3s2/cs66OHg\nAnYCLUw9W7fefLGjaJf+qeyWqHMaDLbeLpAeh6kHIomoKFV8zwP6RFn3q0fl\n4tlW\r\n=b+vi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDCWY4d2tCr7LINtLoXd+FTIzCsuqoth9kr8rspq4qcnAiBjfJuvdHCRgvXseK90DRZvKjnCmfzpWRYHGyLVy4/T/g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1612984049-554f2cf5.0_1612984256551_0.43327337188039494"},"_hasShrinkwrap":false},"2.44.3-next-1612985799-fb4cef45.0":{"name":"@xdn/core","version":"2.44.3-next-1612985799-fb4cef45.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1612985799-fb4cef45.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-xuc0MLSkrhioq6TSY0wm9gO/6QTeMcfu6GnRcGi7LIxqLNQEmWk7c+kOysOIPAhDoRLUGANXXSIEkP2X3/IlFg==","shasum":"ebe5f0e8c4053f368670a1349bd7f757147ef420","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1612985799-fb4cef45.0.tgz","fileCount":179,"unpackedSize":664550,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJDbZCRA9TVsSAnZWagAAXL8P/RK5SnbdeZaxcFAwwTSd\nQuKo+KS3gX1/7cRwQ6ZwhyA4fX719QVMnfkD/CuIJXWZG2K9EHuYii1MNDff\nF/tLfGopRM/T6n7sEtaCmolzfwKMABJfNuqwCIb9/BNx9aISZopXgFYFSjk8\nYz6e0R/jQRpAvV8auacIZwyev6mtmHg3tYriZ4zvlYGnVWOldP7BRGC7HWw/\n6HuErlVp//t+DbcZJEc/r0aYvkuNQNdWIik47xmDA2Om+fpgRRautm1Wrd9+\nw+rU/LqJ5o3TjvTQrUQrrcWlMsLXhO0DIg0jw0IYHdDAo4Bq/vkXNUFoYA9+\nSVPpvXR7MHoEfZqP2ZCJGQYxdORygZIKuf2exECZvttnTVcX3g4A8xZUYUJY\na0P8HYFRaaO1ThSsKTky0nTL5U0MC8dQdDFpTKvCXeb++6Io+O+9GrtRDFfF\nmH7dia0Eow3D5fZsiUimWGA6ZbcddVHE8oDRPwWYfxjWmwHePDJOWGjYzfQS\nN8apI2QUQTtAe4K4Abdat+bGMVfr6mYfv10R5zGtzTUelIqwCL9R1UMVZPkt\nkhFFMQF4dyyzqLQ3v07d1YYbbJJj+m5WeBR5OaRNTklYexf1xsseN1hJg/FZ\nHczYdLED3V31QAWnKpsIyX3JnxXyis88I2pKdTQmefzz3DbqdreFMln68DPS\nNFjY\r\n=GBjj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGaddIfAXoa7LuGSQMJq6vtok+JcH+SimsdauYPjeKl7AiEAkD5+QSg8vdwa7P5E9J0XLewyoEOGUMY61OR05qI+/M4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1612985799-fb4cef45.0_1612986072306_0.8487406539035278"},"_hasShrinkwrap":false},"2.44.3-next-1613052238-fa2d1e58.0":{"name":"@xdn/core","version":"2.44.3-next-1613052238-fa2d1e58.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613052238-fa2d1e58.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-PEkNbG7/bPkBSGuq1YMwN++s1GpUovvuoGEqoIZTJd9Bv2Xqo2g0P82614LCfbPVgMWhZcn7Jk4JPRxhzhlDng==","shasum":"12adfbf6314a4ba4afabdca63eb94bac963c34e4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613052238-fa2d1e58.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJTpOCRA9TVsSAnZWagAAT6EP/2ewJL3ecF3flFvlxo7n\nDapEiVIT+vFUsAGVnh0b9bSBWBTCEpgSPVXeaVNhmlDT4MrMlm2NW3eHbca4\n5ydxyaFFHUIVSucketrAdKorOXC7isJfjOo0G4eqYVSUe7as7QK5V9JV1R1C\nJDmqY+7sJ5sByj4s/CnEpD5tG3IEq6ABkYbHkiBn+AS/zAjZoNNu9FrFZcR+\nNCOCIjtjYMylqCLtbUL9jqbl1HcGNNr+vURvGVMQWuIXMR4OmhskiatxK13Z\nuUd5hJaNZR0XH3dvgF2fJ/hHUG6GmFi/6TotVMk3YOhvj/XQLA5PSrN7LPGW\n13M3UJ3nSxCfrTesJLYIX1yZQBLXjprf/evzaySzka/ZRtOj1gxwtiqgyQj4\nRH79CUiHGs7nr5AtTA97nh6+fyN7RP5RGoP+Mx0p4Y3jcaqFOunEG2FChdm9\nZVG3FZrVHlKCK26iNw6YgzT1rCE4vZxjguv4vFCFrXMThsof0pdwXEsF82Mz\n40o5VP3ZVKRz2BHhNIFUScHIkn0txwG59ygp1jOHUikdaFsc6obqyhhXqJ94\n3VA2res4sxcRdtTybB+EhoiRAL5XNmqZ7SbUt1PDgYCLBEtrwo2K/DgZSHxs\n1xg0yj0ZvvhcHO9aumVz2yJ45YApaIQ2oLkRJumGvGdwAHag0qg2VsAAlxIM\nt5OP\r\n=0lsT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3oEgovQg2vuitYzGuU4eJn+FJUTTKBSxdKrNT7iA3twIgXe+r/oOihSXDG+fhPiYLbKxllvAa2uBy1mhOcvruhEY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613052238-fa2d1e58.0_1613052493890_0.8579424103800377"},"_hasShrinkwrap":false},"2.44.3-next-1613054110-fa2d1e58.0":{"name":"@xdn/core","version":"2.44.3-next-1613054110-fa2d1e58.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613054110-fa2d1e58.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-+9+uGRFgqFTDmx39MpeHQve/xFqdmXpq3q0ug32rz6pgX1fHTWsoQNCSqo2ZAMOP4dbWE6s+hAl3HWkEMbKswQ==","shasum":"0a70086b9fbf00a42921a46f488c2e46408b9fae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613054110-fa2d1e58.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJUHYCRA9TVsSAnZWagAAcL0P/02qnE7xHWp6GVW7aR0B\nsMknqEp32QwBISV9KZdICpNTUCgMxeZcvfr5t3e/Vl6MZgW+nupylZ2MZVKy\nCtoLx0Dd5jiZ1pWtcImoolNSKab4PglvkViieMJVMSnS+LQwPWbshEBCIkx2\nN3MeBr+QX70rw/naR7b4CHAFZwEHJ4kqXtT3L4LrJsaGgbB8VMTsTBnGV0wC\nJb+U0rgmBhPrVquZ55sF+dV0cfFfttHuK9zwhDVUTZCjZXraO6k1QvY6UCpg\ndLIaOPh76A2SnkWav/Z2pnKU3v1mYVAX4YoltjE35pH6bUlOc976KAyodC45\n32ESHBwqt+Jt1HkdK0aTAdva60o1MRe33MLWJJW9+q2LIazmx5UYIhfHuLp9\nW0/lEQDItCdLAxw5YoIrw7PjUW2CkvAAiwg+mkemCJmP/MtgJU8y4kxlF8HM\nGNye1DmGHx77zdx+kdEC4WXgI+irRtQiF9LHG7J+iN4dJOKBR8r6wl1/pcWD\nk/LKR7t9BcMv8D+jaigj+I5CgFZIvZ+sxlaWW+C8z2hlP4GPhl60yP0RBbSY\nCwXE18xf+wrp3kR5U4F9sbDHYf1lFwliuLBUKVxSqBEFVEaWfCGlc+7pUuU3\nfWOqUNzJQl1alfL1Zp9TA01RZkxYcAmReZhQhk1flR60SaCrOS+wN+Y8IURq\nM/IT\r\n=PWiA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFgDj+EUm9VC5WDDmb+T0Owf74BRCN6ej+9ZGXQBaSJDAiAMBzJk4aerC+L++tfvR1ifaiEH8gBHaTZwQJ8AcqMyhg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613054110-fa2d1e58.0_1613054423981_0.8198110036170765"},"_hasShrinkwrap":false},"2.44.3-next-1613055429-6a8ff165.0":{"name":"@xdn/core","version":"2.44.3-next-1613055429-6a8ff165.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613055429-6a8ff165.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-vViCo4dEtcmvSil//bSKrIBp3OP1LQApd50KpSD6g42Wfk52OuMaUoIHvcL6QS1Yd2uPJEGEpq6ZMoLIizdzyg==","shasum":"f335f9e7f223b616df4b561a8363884a776c71d0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613055429-6a8ff165.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJUbgCRA9TVsSAnZWagAAxwkP/R6blSOjUn9QIFV0jwUe\nSsxtN3359qIUdrUQzpl7ZAJC+MVoPRk17rFMCogLMI73iTrBmLqzgOe3LP4G\nwqSslEgqUoZ4y9MPrLicyOOok7vyqRZ1Rr2lAPdDxRBP/DnsrWzsJFVtonQn\n0ZHTm5MWr3PF8asUxePl/hGufCyHFtrzBPR4MbmoFk5Jv8OJL345FW4cjNo8\nnm/Gg5RGDCPWRqS8dGBWpptEEdD1nez0ZW6C1FdxexIOyANoB+EKJgLDvD8O\nDZY5C9Ufk5u/D1iY+pfwumMJNL8HnSnzBYq9g0UG31dHwg970Wo2DpsE3F1D\nidVXtGo0g5980OQQHnwuhFbisRcaw0GyfDBAn/7q2LVygFpzUEzjvknrhq49\n7QawJ4sKdbNFlVmfmmDQAr+Ha77qvSHQzEVrCvTbvHlcRAAbobFyKRHTfF8O\nsaKUL6t/ECIP1Z7+lAnVbDwgpvKi2nyzoqUYojvQkXPQF53TEDMrjNnOf0T6\nPwvN4Fw/lx/VDS/0a3iBy8tnS2jSd5WMz72IrsPhigMTUpThagDSrQVuaYV8\ngdsM1KyZAAZpjUCINCK5tgIAiHkYzUdPvJ+Qz+UrebL2n2XssJl0VggmuXsE\nhQ9EftQW2gfdI7hShNCLN7HcDC0okgkPqvtuLdaIQgLUNs8Y1amfol8frqbl\nwtru\r\n=LEeJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjmUhSqNH6aGFiLi2u5DMxN/7uMjYRzh5kBtzXF9ZWqgIgd2wVwWxEXsBnKinRhsgxqXWvXAvuO0WxPWYGCF+sMog="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613055429-6a8ff165.0_1613055712177_0.7557086009709062"},"_hasShrinkwrap":false},"2.44.3-next-1613057150-08014fda.0":{"name":"@xdn/core","version":"2.44.3-next-1613057150-08014fda.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613057150-08014fda.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-QDhYfoDlo8n6pajma4DXd3hWu8vICor2NPRWBZPkLoN3X0mdGWvZai+0dh72f0HbomtHkHsjWMo+z152k70/qQ==","shasum":"e9c6036f66f70698b5d1f052eeaece5d11ebf190","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613057150-08014fda.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJU1kCRA9TVsSAnZWagAADs0P/jj1kZxJ8/d1ZFpH2HCU\n2GxWz0K2TD5XONjv7bWlDcrDoVDU9JdYsq5EpO2CUPS0TonRa+pDpxRY96O4\nvmeBo2NpBpcOpuKS/HkSRIyk6atHwf8nJHxl9Hi+C1Azu8ZBfM/l1jTLy/IP\njyKAnZJptKTmkjgvBeNopfSEBK1PqmYx1C8QShkhMNHePFg13ezkJuiZ8qtB\nk5OtiFlMcZLivEj2+YlCIn5OfQ9QC7ycHkCQ0K588v81EbhMl/KNCl/QQKxW\n0ssfzhOYBr5MHs6P65fVWRJ4zvqv5nM00lnsA7NKceei29KZsUPaeJ63BWh9\nhtSZqVjUjgLEWhHiUff5L3BMXOA9hYxg3DV3ynLW9eNWq6DT0WYdMEqKwHuE\nQltDFfKrxC0sxlcKWVKsrHZaJQ9Cg4PKOoFTq5HmCiq9hlaHk5yiTWiNFrN2\nIlgD8NyPHm+ayvG29cqGHLy12+GcPrd16ywpjqzZMMKbwUaAkAuF4mPAwsIq\nEQdI15tjuSworVxmvSoOOOipneo+j1xjPzPmb2yH5eLdxN82Wl3Ua4cm4Jhh\nNMAeriaS4Z8zUMCXGRzLTmGNA1SvkmSq6tvijwD4GQb5dk9Z5pf6kEB5T12S\nkXsrAov4UswYSiYjiNA8exBt23f0URm26A0hI7tF3VWj+ESC1RbbY6Xz3esA\nVvwI\r\n=qsUs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGKJIk3USLVwEtkd08SuP1tDTYNtraW2wCivrCRaJaBZAiEAt5SqkyTYx/IdQ5avH9KDvOzs5FaIJUL2GaK3bNl/12c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613057150-08014fda.0_1613057379803_0.21745501393294586"},"_hasShrinkwrap":false},"2.44.3-next-1613057192-bb30ef56.0":{"name":"@xdn/core","version":"2.44.3-next-1613057192-bb30ef56.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613057192-bb30ef56.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-RNY85OJ07ESCLisPgxndRG5BubcB2L1/cbE//Bje6+K0j+NOQYWQONMTI5sj4PR+c23/9UVlvRwqq66gRBaopQ==","shasum":"f39dc82075fc68b9eebf119078c89033798a3c6c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613057192-bb30ef56.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJU26CRA9TVsSAnZWagAACcsP/AioxncFf5lAht0ofiZ2\nXZ0/fSWgELvxqvOehNP8vyKfKoVibrrCxruRiQ/iEoNvqMxjMa8SJPja5Eg7\nMuW0jsQuB3VRCnl9mS8M1qLj2zi44zSwFDr85alZzGCC5qMHOa3NFmjqAnRN\nU8KwzDO0VQrJ3ter8wGaBNUClHTjfmiDf0BhXhkisoRTAyxsraWm9LE/YqzV\n1AUn/iIXG2oHBubDP1/uB9c+GMRGNrzywu4aBPXJ5wG4IhZmrwCinihQ3Ev8\nkzwWxV29nithbD+gvPFmQDO7hMYQXV7r3ozrSySJ2ftwbuXZQ37mHB5KZAn6\nQ8eG8IU8ONqnKbDmB1o0SLGG6hTOzEiH3pB70OhiDtwXM5ZFH0oFWdbB+mIY\n7wZEo5wVpJNRLULISD2wFMFGfRF/Xk2Z26sRJApHxQn4xNKMwql7Ynrt0TLL\nHwgG1NC6xvORzPTJTABEoZB6m3/El8suThzMg6VnaIp7MKn3mbpLAsaSZZ6f\n4pNib7kTJmxpoiI4rAjst9X6xlAEOgKaSdfpGqqmFlJf2eoLka0iIdig1Abl\nWk4pUyWpHkNSj89wRzjBZh0kvskS/xftw2lbkDY/NDdYlVtLq5AP1X2KvEp4\nSVhpLUw7BLbowTGLoID4NoQI5d7dhAmblvxCsNarQjJosGLJr7o8ccKqLVS6\nhbFo\r\n=LJrP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC5B6FQ85sPR/wHQoCTVEE3l00mhz3SzUupNKmoOWgFPAiEAsklxCJjj8K4T2FC/kNrBqlR+3Ma8KFa3IRjFCt6hcZI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613057192-bb30ef56.0_1613057466078_0.810049010459926"},"_hasShrinkwrap":false},"2.44.3-next-1613064038-08014fda.0":{"name":"@xdn/core","version":"2.44.3-next-1613064038-08014fda.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613064038-08014fda.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-m+l29Z0cPQC5PImtObu7W+6LzI6kozEwJROcJD55dk6mZBARyNPhpJdtMZweX9VzLOXGLjRDD3fYw1Cw2BCqCw==","shasum":"d4c616d2a9d4fba367f45a42ef5f9997de8b7cb5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613064038-08014fda.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJWhaCRA9TVsSAnZWagAAXAMP/2AS5QJg866Ssn5IyFBr\nBvUYmbbqxAHTt4EP8PJs/q0PQGEM/Wi9MtvCuPIB+Fh+elMOA+2wxRbvoVH5\naG04BaWZm+Lqmnfzg4RQGKw5b/OcqzkMwHW47rqCWoZug6WxoFxTBwnoRbcl\nQPHSpy1/jXQXEbLj2iobFn6tibVEw+sYvfvwOpnVOGa/3yaQO92gUABpiYlv\notge8YGoScUKSshh7S4ZWjNVpV3+u8/8edj2M5Fe+oJji10cmDWlFF33pPJF\nf7kXwbm9Aw8cmN3zQZ2F6HQNcw5SsAZzd+3gErD7WUbqrnIfqmNwQ3YeGuMG\nS6WC88gIzU4O+O2GuG+VfteJbdONZ424f3ef2e+RedYBSs4WU36qOV45X2lW\nlqMMbEO9++xAjEIendoI2oVJFxaa2/BkNoVOhzI3VisXOt+4jusjV9TA/Sx+\nDa9aGWfOkBjKIDi3yiAgQPYJGdPAeCFerU9mkJnro3YAmavd2/BTXrF2SCYd\nIaVrdJaDf3qORBSb5B+A3FuVIerpGl7sIHTeVaPMGxOteiErVWQqBD/3I9ix\nkdJDDfh560MU+2PeDCW9Zo3QyNlhNedBwUjzB4jxHpSrmvjw2RqN8wQyeK37\naj2ueYnRwfXUWFyCe8mH9vM/2vaVzu4LGraOpktuDrZXQicIr6vc9JlLjeyE\nqk9A\r\n=ZzhI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCw0aQfbLRK5k35M5RgAqSxgeL8a9m1+HxdFNvhKPIbtwIgYH2KgJkrSwCOUk4OdUWraQdSyTuv+i++dKR7AJefycc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613064038-08014fda.0_1613064281591_0.3172216012396989"},"_hasShrinkwrap":false},"2.44.3-next-1613066991-b0df6b52.0":{"name":"@xdn/core","version":"2.44.3-next-1613066991-b0df6b52.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613066991-b0df6b52.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-rZl6KnzhENIV/oClc4b49hckDaTshqB+4EnDKZYae/ffE6kuABvP3QZDW/N6PnsrVnM34Ww6liIXtSS7Ys2Hpg==","shasum":"9f422332fbe9da85026107ffe2c9b98ef5934aec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613066991-b0df6b52.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJXPcCRA9TVsSAnZWagAAc1EP+wR+2SiUSbukfFOXLt5+\nRZORiypvJO/lZ2O0r/LCVRuB6Jnw5XwWUK7cBwLE+czfW6pQJN3HRyCcJJu5\nMyTvd22uxuiA/3aELMgOYJC9pUY1zBslOfX4mUI6x04GpR7hw7QRQnG74lGO\nbiSjlIySq2s4mMgBAG+uKclB4c7bqQgSu/gK79g+5Q5HtdVIkqK+1RrB+VQ8\n1m3AVdrTefpLh+lcQ8lzBINVU/XL2D5CRbSExvm5LTf354J8oFfaeV+4Ev+4\n4C8atuj+H8uhq6kf4loeoFhdYou8EfIOeRIoFJPaAjwhUQJ3cfSiDshgFxzM\n2e0E+Kb0qznkFgghkgOFvKjAs8Cj3OYE/WQxg7k0+r85Iv+UM9EYCpUtYrgj\n2D/EDVEtVSgRKBuawrI0dVRiRq3z/gtAa4jEUNnrtAmrP1bz6Rpog7PQfzmY\nDlWgyDxEVOwnUGbDbLdYMsz1ir8v10TF3WZS9s9EJje41Akmf0dRMk+9vmIh\n64QJmusdR0a/0mJGx7S3P5tUitPmnTlwqW/X4CWKHV714UH5WQJNqhsREFDU\ntdraXPgD8gNDtSsKYuGqA9PeR97Q7DnOXcaNWpFmvo2Z9OyoIM5v6dOqvDz8\nXB2pIi/uysT3W7RShQKY7FEm5i2zjIzkT1lIgEJXOWjfFQYwfXjS0YWhfX4r\nBpJO\r\n=pBoe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDj2MyiTWQQfX4rQx73xj2Mq9G1GsyhIJT6MPLCxPSK/wIhAL69oRkTZs/L+jz45krwv4vCQo4kB/iO8nzT6ysRy1AV"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613066991-b0df6b52.0_1613067228003_0.5829918156244396"},"_hasShrinkwrap":false},"2.44.3-next-1613067087-ff2dc9e5.0":{"name":"@xdn/core","version":"2.44.3-next-1613067087-ff2dc9e5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613067087-ff2dc9e5.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-tvAeolXv7FLrtonBt9XDWU2ZvszVXXVjbSfIEXuIGEmydMzvrZMHBJgTkrMMaA1xlQpBC9Zd+QZQxV+tNjE1yA==","shasum":"dbebe1ebda2fe6fad37ff14b14bc41cf185de62b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613067087-ff2dc9e5.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJXQ/CRA9TVsSAnZWagAAx2kP/jMznlsb1JSMjzmmhCJQ\ncq9S7fJrOaHvGCnpZxWuDHuQL6zScCoLYhzOLQkiocyy21mFBKEOew78TTHE\nyRPjH6215iOYacEh3v0n6h0Ih9GLzEJsG8Q5Ppw4PcItYg+Tcbz6/Uf0ynJE\nBfGIo38rAtIls+0mm7trrn0e9f12LyYI8TR1pmOdUO/9w/6Qz/mrdeojRi+4\nVHGSMPETQsL3NM/aNL/jf+MxWhvawE74PZuy9HklF0fA+EToxE5dP4yInqXF\nzwuPzDGSD/zpRi7Els93tBeHgN4i/d+GU+H0ZZx/7pnlzv0thH8EH18QKXzx\nvG9p/67QBHoESn0YTC0WNJqzPaee5eio8Mcs4fod34iqD5hMSIGVNwZU5pcK\nge5aVPEwpdjsYCwWEnEAiypaT3IjNM7aZmBGzc5l9ZAG+bCho/Msioso1cpZ\nBkul6BPRnp2bgcISffqS7imTXzZoDrFzjfSzmhBOQPvDYU7l6593/4nHAuMc\nkEQ9XgpzVCqLX310nZQsGqZ2vPbztOnB254PEiKNtdM1YKZ/C85J50XbNK3i\n+lyr6jG3gAf7WLRb/uBTt6rxzx0skd8Uoqhzhf39qxSDh9MJmfak5c5R8U3d\nOu0Ymt0r70E7XVV/mcYfzGsBbFDEPxeM1lD4L4WZJTZY9c2avavnbZhLo/GL\nRBI+\r\n=eGx5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA+aPS//Rd61yUmYmUKh4SB8mD8mI0ZKAAuLrh2zWy/YAiAMddWD8gBLCbZqAroRxwixdYqifCT2k4gok9dGpCBfEg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613067087-ff2dc9e5.0_1613067326486_0.38261026618373495"},"_hasShrinkwrap":false},"2.44.3-next-1613067142-06cb6d53.0":{"name":"@xdn/core","version":"2.44.3-next-1613067142-06cb6d53.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613067142-06cb6d53.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-MaQnzRlgTkNCOLomq1NuR/3kbAr6hzE6kwba0tDOe+/Fjg5QROlYQptzUvL4aZD0I+eV5X8mcPKbo/ERUh7xlw==","shasum":"563fc01a008a699e53dc825a291e251205362cfa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613067142-06cb6d53.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJXSLCRA9TVsSAnZWagAAJ44P+wVg+VvB3+du7XeU4PHo\nDsqkh0VWprcYwrHSzHjTbq5SLpbYPNxb1ujPhzOFRK2sBfL7f4uuIvcsj/EY\n03qcZySaU47Ol2zTI/qaqI2L2+pJPIDsdEsia1NcHwxtwBlXKolm3sZuofq/\nDsS+dSXIluggHvBGXinhISl9QQPDBdgdO2hfnibOuirfGJswnvIfYOdiPPzp\nBh2gC22QG/Rvlv15NRJzLlGyEYjMyLw/vCtDZqJo/zTGsYABbDZrXk3+Sx+W\njG6bFFPFAzjThaeJpE5HFZcNtYrN/tt69SgQOO3OEfNnOf+kM8tomMdFIJNr\nlDanfd12zH4mvfl6t4d8YfxmmNr20aYkfQ2JDeo7hCV2MaRCIwDgMMlMaQYL\nPF4l6OUXOJ4wh3SYbbvS+JjpX5PnBQWflGZJl9h1efX6Ur6YmVgbQKc5q/K5\n9EyoXMT5sACxzo6EtSr9kTPxUQkx71WBxRXd5kDaKsg4EfZlyNmQ9NU2zVMx\n0gP1Zfp8v7kl73U15rcSwWAQwtTIOVjlrY1lBiVuHch3KCnq5Ma3rpA3kLTC\nq0XQVnqARGBkM36U6hfCm24Dr1QhMPB3kj89IqRHNSNVhNHqXTIlDVnnmLZA\n9BRi9m4q5sBr9q9tiDi0ia5GgmE+BFL1qfyfe0ATk6iW4m5ak0nxFZmp+BlY\nEfzK\r\n=I8Sn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHjWRVu0anXapb0O7VhrNHxd9SD5u3VH3EQIojzkJWNCAiBcFrS+TEcrroUvh+nHEs7BRESGmHfnIH8ZL9f+muwQJQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613067142-06cb6d53.0_1613067403280_0.12971538503633262"},"_hasShrinkwrap":false},"2.44.3-next-1613078877-3a886cd0.0":{"name":"@xdn/core","version":"2.44.3-next-1613078877-3a886cd0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613078877-3a886cd0.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-XRkXHurM9yO/zoBYjY1XPoar9EAWO9Hyh7PCoY7d+q0LPYS/sXBP4vdqoMvsBy9yiT8fJbLqrpgJqdTuBc5cJQ==","shasum":"def1b24445a72804f6efc508628122dcd15606bd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613078877-3a886cd0.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJaJlCRA9TVsSAnZWagAAQ94P/2QQrUprfxzR2e5kIoIB\nZ5N6M5Mzh9WRH+jDAx+qho2iaYBt2n/Cp8dTlpSlDs5Ooxo3aRnOOyEILCfT\n1wOb+D81d2Nb+K5zR4ORqhDQhCRhRxUOYAfQTAMe5ZXR21qKd+YN0Ca8ZLDZ\neZvOKclStlSIuO/DnAC9Yyh+CKCqyKJAHVK/lF7+1uWlhZhSctlPCQWJwHoL\ny9FcriJyys4xH8KbRo/2prSwPtlkGIQZ/1s6ovhzfMeSJrU98qEecJw0uGOl\noFhzbhuh80RQdlXjQVkcaEAbaRWLdXPsciXBSJOxz3caI4tRwLcYSR4XOZkT\n3zZCABvCfYLYIysO9QUFF32j5lrKlkjBBfaI3zwgWxZnK0JwJi4b6cgpxFkj\n/mA1y2eCAbO8dQ+iXIMUcGWm/2lDflfp3WlkxAHUJO0jq4iq3RKDZZAi1w6a\ncThT/k/So8DHkUio8SxJrDNGAvIAcuTplYF2HcGOzB/yjXlz/zBijssPlf0h\nl/j4wYjoc/z7wuXIIIR6wIZEZZaFLznDpy8rUxfxf3sgFEDkmneVfhNp+DKv\nKj2QLsyKeHCVb/RXdbp+P2lEq5FRYXnngFMBa6pLKE5iD2lhnCSTeyKHD61D\nqNTHbnvX1I1rko9jLXKmPvcgm7ed7zwnlybuvE0TRF7Z4kz/590YJKElobBd\na9fN\r\n=MB1v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGm95EidotMj2ZMKmRxw3tUnWIMdfoYmgbbQmOjrl0LgAiEAwe5B77JY9jJgB2e0hB6Fgl+mTd5Qm3f0S0FX4wFR+tg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613078877-3a886cd0.0_1613079141135_0.6536536224531386"},"_hasShrinkwrap":false},"2.44.3-next-1613081613-6b553f39.0":{"name":"@xdn/core","version":"2.44.3-next-1613081613-6b553f39.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613081613-6b553f39.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Nn4MIm6kU8c/dja0I4xorx2nuxCwZRTA/Hjjm9Wmc3Kj1lNICVfTpIVjmzwk3JQ4K5XGaoxthv4EK3ifzAGJAA==","shasum":"07f8276a534fc81d565fbf410b99432df8d3b428","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613081613-6b553f39.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJa0aCRA9TVsSAnZWagAAxs4P/j3GNawq7IXmRIkROf2M\nMUgssz/6S6lnJlGz5Lq91+ooctgBgxk/lVemsjys3hE9qX2rrHPIDaka2+//\nP8+/KCj6BN4DDkEl5yG1dpO9jl0lQmRs1/rMbF0mubLykjFqr5rlhOXAAo0K\nD2VN4pv3gI+Ee1N8HZ2b1qeb8k1eCuHJ4GGOVgwe8yt5mB1RH9RzUjqWh+B+\n2glfCeOsDJtBp4Dv+kATQb0dovPkYjMYU5bMynsAJCPB8mpGm3oqs/3ikib2\n2ohwfVkYa4Cy2O1XzwroAznEjr+LZEZ0PEX3RPE5O93q+RruDy6VL39a0HJH\nTac9lqxknUDrrbFuXI/VvxqZ15yNfmQK1WHRqROVv6B3wnr0wyZd7ABW4xaF\nmQ/qW0iOrnljArbVsbud8aidqOuL87CW7D8P2WYYV/2lFFEi1/4KFnGD5IJX\nQPa06cx1w8A0XLKOTdaVSxZJ29YPcFZwrIGYxlJmbOd7f91up4rY9KQ6Rrk0\nDvlc0cOwKRGegWx/tBtON62oeZWeU4talhF1DAYabTvpZPcBK4uZADc3lrqu\nr8tOw9Mjr0A2RvK0TMNNwNEXz9MVX1FHIZp+HLyo1XWmxn+FsCVmJXLO4nzk\nn2qzXH1zxvtdtfKrU0VKyOqK93bv8ypLB5cuGaPIFFbUN/KH3FVNN+aHHVD5\ntZX3\r\n=mAcN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCg4Qb2sxFgb+sz7V4AgNjpV4DQkkycwRr0uJwZcTnFHwIgHnksqlzUkvsSA3kJn6QJ3zcjne5w3nBemeHCGcZGy6s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613081613-6b553f39.0_1613081881646_0.7375175150443753"},"_hasShrinkwrap":false},"2.44.3-next-1613081745-5c8b4e67.0":{"name":"@xdn/core","version":"2.44.3-next-1613081745-5c8b4e67.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.44.3-next-1613081745-5c8b4e67.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-n7XCpXgHLmnvvkl+fUhrAxoHBfZv7QGjtgbAwOFvAlm8pgRnBoj1bgL4dLCw/We9z+tDm4suoD31DPH8NkFhzw==","shasum":"ea6a522b853ea9e3810153cab36322ef49111c88","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.44.3-next-1613081745-5c8b4e67.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJa2NCRA9TVsSAnZWagAAdkEP/3MENnxSJTHvq4EgQere\nkDuqnmzkOy/tNSI801inM6ugXNqdG1wmDXcQSDIRQIlbJGx/v4lcp2bsLHHB\na2+RpxHWT0AzGzso49R7Pxd1pmxQnL/eEPWwXbDl6r65Q/hCFJEkmcMYSaG6\n7jK9bputN6oxPairoRfrmORWjQFuGY5yIJ1TCOS6UE/wTfk4ft3KZbn841YS\nz0b0pijf2nVQVjDx5fEWTlcdR8RMwREYA6EGYfu8NFiG/cLHCp7sT0ZEg0bA\nfg4ZM5kNz7drxPZsF3uDEOudMTH5ngUE982D9VdpDrzQm+t7QeRVkUBgs8nd\nZdTjy8vMeVmwE2X8yCqx0pvmXWEgdhWoYBgrejlXf/nlx4fqwlBAs3/+j/vh\n+rYR0HCM5pX5sw/qNlhH6kSxgsFh943Fh1hrqxj0gppO+HISzlAr1AwCSOQw\nqeOSn7D3OxDendvh4+S092sRhI26A6/3e6z29yWHtKLdIgZWBO9p4Gbg5lLa\nzHcFx0OJroWPGjePiArcrGqhEncXtje3GctSJZ37sjcUd9BvLTvDIl+0WON9\n+Im+yTCjeXywD4RVb7Rw07Cfe97Yv5E79oG7LKK6qycUYJwaKIODDvNifnuo\nK3vWS9ipD1ToD/6+G5TWqooX1NvHrOO4YdfwDyRyWzUarwrQ/Jz9XGpt1qkn\nuOML\r\n=b4YM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbPwqMPGWvq/DFll8HY0OvUZ3fmsN0/4n3VJrBEJxyFgIhAKb5+ZISnmOw3klgmdQCelbkHQZPIOhSbmUfdnOFjGOj"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.44.3-next-1613081745-5c8b4e67.0_1613081996766_0.6115127591379055"},"_hasShrinkwrap":false},"2.45.1-next-1613085564-b8188f71.0":{"name":"@xdn/core","version":"2.45.1-next-1613085564-b8188f71.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613085564-b8188f71.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-z3+dxdb/5iD/k21s2lXfdSs7frYwOpSgZpuXgo7o/4arhOU0u2Se5Uc2mhd7VcXzfkytBrkzP4omNxx2Cv0y1Q==","shasum":"9dd8cf40cc83d4ffbbf598e70113e740819ab9c1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613085564-b8188f71.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJbx6CRA9TVsSAnZWagAAPVsP/0fmdtY/A+mavY2gnYwU\nTBERefLdl8UyvGTZ0r7sBi0s/7KqC7rIHH5KDi+nCIOMSkNE1Xt2AF88+j3Z\nDnaz02ht8SJ7eBaxuePSoHSEZadxBPC5eOd0MKW1Mhuu3e312T8Kd618kB05\n10GYEcxnqmRl6FkRNBnSbIcjuMIuw4pgZzUkx1c4tLh1juryZEVowzcOcaHO\nyuIlu0LyDasu+j0xaXiUlnErH1LoJTQIlpYRvzDq0ZkpVgxl79iSUHRhPBRN\nibxmK02e6IAGg6WK+KXIHgfreWqQUZYYdquc7lV8Vmt+tLvH5eGHOjgcTMYr\nz7I5kThFsY9gAyBNvMv6s7msnJ+XJgcDg6QqlCC2sLvOpcKVcaqM8X4zFzw8\nNGCKCKcSWLS8hr0errylEp1RdCymwnG9vVMe2/9KB/ESlHD9HmmVQiIBsUy0\n2EDTDH7Jr2wYZTxJyp2rM7FnOmHB7FsqbYEmsE2sqZ0yymVGtA0UlUB9kn4v\nl6tWd5wOhHu+NGjd221zS5HtmQK51pq/NrAWdeK6z9LpnMA7zf0DIyAgXIjB\n8IS2bBBv+rhJePkWWd+uGFrR0A3HLrvRBxZ5RJInWZCVgYGLkKkRc5+3vb6Y\nyPiLTBEKCp3HVLu+hpGh5dxCZO0ZWKlhTRF0489mmxGqXo751IGwWZZLS/iV\n48BK\r\n=tj0D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDucQXf6zS/9/T51+nNTMKw2S3s9DK2Ku2F7E7zMDDLiQIgDWhUO9JukixOkpIX2z2CL19IefbSjSNTNB6EmlYwpCE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613085564-b8188f71.0_1613085817799_0.7513316732000928"},"_hasShrinkwrap":false},"2.45.0":{"name":"@xdn/core","version":"2.45.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-J1VxWCAvSKHZgOh+Qqa4avpAo+ViC38Ic6CpRCsPCOVdj76q87krB1AHZdFS2PEFS1tVNxRGSdGKBYSBxfUa0A==","shasum":"4381448c2f9cce93c809efc4a3294b0f925ee33c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.0.tgz","fileCount":179,"unpackedSize":664378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJcILCRA9TVsSAnZWagAAgcQP/2oAc9cGb5g70iQY9rO9\nbsWeY7MunSsb4rHjf3WXbkF7PR5Z913QtKK0f9cDyE8bD6Iiq2/mL8l1MVps\nIsEKUSKVrd0rt/Q9iRRlGOdGNJMZ7zzmeEEQYnBrc9+mJn7n5lJp6+fw/1iY\nwBjNqe1iDgoF3MRnevZsMQao3ze8nQg0k+pbxR2Bw9f7S/t/iD+rUngeDNwv\nyVGIH4+yCiBKdahZiNohQ3wQdQbVHwNLGvmyNYoU6bdwzWYUe0s/brulVOua\noJsUDS9/A3Slv2M77jtj4Fc1h1DtKv+oOXA+jH7+Ps8LKT8kzjo6CoVN5mg/\nk4VVuoCLEt80WVw5m6iht/7orwOjjCWT+GuJBYDnh+55tdOpRhC5r+B0POG2\nC88cudQHpKR+2dN7Pudq4GlmZL8NpOoKYXB38qaq2A0feVwOsSVFGM4XJUe1\nKJrT6nBtWgpiX2KANdzhPrvnJxijKs9xcWliUJC/9kxGzqTGzHwBiZu1lyhb\n+Fv599h0YQie0UkI+dAEzjtmxWAiCASP3URPcbxoHHn5U4PNzawtf/ngHWIk\ncp2yVyN4SbAwbEiXNqtEgDQXzxvs2um5vkj6HWGnJUYByF/E12bmKIfmJ/Yo\nE7vslNoJsw+kbseMCkANFPYQ9zeXQ48C4jqCTC/vpTugj/0pJy95KiGs8oJc\nDtVE\r\n=a14a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFRoYzeFswwwQjJymOgPs+9d+VeDzPXwreU2ioTFchMHAiAIjsJMBHFQlEWmvrFovT4NImVnq8TfXyOSC9AV+67f2g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.0_1613087242337_0.5731866620129284"},"_hasShrinkwrap":false},"2.45.1-next-1613129416-327325b1.0":{"name":"@xdn/core","version":"2.45.1-next-1613129416-327325b1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613129416-327325b1.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-3A0ITIeFheZPjKAob5vOuROpXYu3eYRbJ6/XRMVtBLiQhvqRHoHrRZvBBBsvtf0JX6VZcrTNyYmHknUZGjiEGw==","shasum":"f871e047121aa562d15e532d9ffa56b03218fa47","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613129416-327325b1.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJmfbCRA9TVsSAnZWagAAqXMP/jRTfEyjVgGZLdpyh9bB\nS/S5vHn97ml7fKGFcmszDVgo82duGWHKezEFv7P3M/ljAytiJSbjSIwYExQE\nDPFvUctDSbqF7F08iePOkMS7yeBx0sd0e+MUcjtcm6wb2n9mGN0Q0UcSY3qx\nR1hXjemz9r/BVNY+OmVP0dXIFmTYDw3lj/dTa4XAEHmfgzVe1Y9MHiVuzA4z\njeUD4Rdh8oi7F0jW3ELKbaj4/i0KODK0Q8irz+CEEi0iwPLNYz1FOhQB5qxS\nDmB0PlhD52byE402vbZT2nTFNmN0mvsy0IY/tG51OrswKqon2776n0+iKng5\nS6sX1vVeQ1mZOObfR4EiD7jKIPlZspGPAwVmPCrtyKNcLz2gxfW/vYVNOkA+\nFjxWqkndpCf2DRrbGOYIHWWvesG+jgmahXgWWZF25qRfIj0ufCU/7CalcZrR\nhEXTvl1FsS+qQDGr2AHgUGjYJcaMsxGPgTTFi+loqt4YXhLWG1t4RKWtnOJP\nNeIEcJ6ffHg3NAA0lOHkTkTHBnwdBEoPwFH1qY+o8ZHTo7GYEjADec/R3pcQ\nnvxVhW+KfvtMTjBVwMdTHaLybE8Db4n+V8ZhgVpflzNY7bga8o+R7bktTpEd\nOcuDSgJm0SeCEEOiFsGbI/Lma+n9Wrg29YTNA9ameSzFcCY2EuIFXJBEZfZu\npvgK\r\n=Kg6E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDz84w3dbs8iv1kFkBYrJ/zYJotC3ipAfDTlQwD/TXUKQIhALpHDg1U+fnB3V303JGYgrBsyTrF7tnkubx3IR31YXBO"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613129416-327325b1.0_1613129690932_0.5940853399297175"},"_hasShrinkwrap":false},"2.45.1-next-1613130108-f576c2dc.0":{"name":"@xdn/core","version":"2.45.1-next-1613130108-f576c2dc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613130108-f576c2dc.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-JYrNb+6i4a5d1ELJfs3VUOix7i5JWZMnkhtDqZIP0ZrBfACyI7e7ecx15yGyUMGppbxW36/gMBC0j7I1Kc4ZDw==","shasum":"697ccc079d8af06a1e09eefd36d1d53329176ffc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613130108-f576c2dc.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJmpvCRA9TVsSAnZWagAAvxoP/0rhA8L46W2dhRtLRbHG\nCEuQ5OjB9S+gev3iRasArYn/8SvBwHiQVCwgGvN7d4ziU6LcXmx+eCEBFG8B\nYAD+HFbkRaED+T+Ycotg5JY3xoQE6VPGrrimUqChFZwXEdGuA3URSCY0upk7\n5Prl1TypxUvaDiT280TubbJz8zmuif/TyNAqrNFFFdjPjklL7gz9k1zoVHWb\noGulWYqbtCN0KB6OsoM7myc0RGJ3byNBD/RnciyUhptp+HL/6tfvCxJ3zJU8\nQJHma+LC9Z+TQgrVI8gLUX0eI1i905CUvKN0WjUTKIqrnWEwzAmCXcgmyQAi\nt7IZVdqoYIYkCjIbOg/ax4Icdbd5qTdG7HFxnXeD+Wm0kaShMiU5fPZu+Q+V\n0kQlclNn78Sj7Trk1F+4stHfweg4D0hu21eidsT8vSsSUo2j4WDKB4YjnrUK\n4C91UHH35+26Pqv31i1Y7CqvYAW5cs4CunI4rJxZ1IwdvaZy0CaR/Izc+z1E\nXKJromeLuZMGe/URPutSxa3FnmkqJYjg6H/7xPrO3QPupECehrW6D9KG/xHR\ndxcXrapRIDp9kL+zbk45YLrNvLCrxtTTFXipuKbz2BD7bFD+CER3lrxx+Oks\nroNyPiJuTeuk5tfYXnyv9cVrZdMQ2LtnZpXtBldU0GzJ8zok3IlkE3oRglZm\nm/v7\r\n=Zer6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHpvNdFNM65XsQMSr0V4pYItDN6Ay0pYgoDcXF3By4bJAiEA5ck9+RZ8jtaIvoVJO2kZuj3fKGdEezOlPGh/6qdOr8Q="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613130108-f576c2dc.0_1613130351329_0.4689422967839625"},"_hasShrinkwrap":false},"2.45.1-next-1613131797-23e16f46.0":{"name":"@xdn/core","version":"2.45.1-next-1613131797-23e16f46.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613131797-23e16f46.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-9QOlujDLEb5FFTzrTK2AJiiGj71UNGHVnVIeiBvCUdBZp29vBzdswn/mrmUsveiZEibAlCSbIS/yG2FclNJu7w==","shasum":"2ccde4020957b4a7a8b3116bcb72fc5dcdcdf0fe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613131797-23e16f46.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJnDoCRA9TVsSAnZWagAA5CUP/jGyAAErc9x6KDNoVTfo\ng4DvdbnCmuE2Iih1QEmQbJhTBwAHB/bO2ZrcTeE7V5n5JUD0FWK2wnV/BJK4\nUu2fD5tBsyERH0TzWbHKpf39o+9p0RaeZi+5k3dfID24H9Ipxj3aFTkvphf8\nHLkbzSsQMrJR4+raeBfE7rAQZyZn0MierI4/Gckvul0q2nhOT/O4NXRSDOUL\nzZYkDX4I/fxfBvyTt18ttAYEbTOsCCp5NvhgwAxP0AzTB6HIh/o9BSamxER0\nbHNEvBdI5oDY0DSUCluWxhEKI/7x+cZMVGQmLYGbDEreMnMVTpE3UDPhjXf2\n9qIztpF9i/DX0GI460uYddqzylwvwt3PwxlPGd6/Zly5RAso3H/S5Zud8i0/\nswH0gL/UkA84LGreK7gkVKSk7VDVlIkFTiqRSRHYqq2g31ZzlvqM44Wygd1b\nDQeEteObb9kwG1ebIi3qQ7O36Ni1WxKbjTy3p37DLJILqEhmYgpYSQiJolse\n9JvGLlvcP4ucbHxH2n0LhjdJmdkhuGlGeQNrmr0p6ZKSkJZRPocMhsR6HdUE\njxxRyzalnv+9Vr3kBmdPMz79OOhY9BBUDAetj5MJdhTtTL5xYxQP1AtTFjnO\nRHjBRtqpg02cYX5x9ARMRU8hjswK7kf9BTKsWw7RPtWCnq9xxh9zzQ+YMu3f\nPyzS\r\n=6S0F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCB54veAFSpHqXVfm2+/WbefOxXIMLO6Lh4wxzxmYwl0wIgRQlXqftgj5wX7CkjDkhbK+i63uomPXJGhOxA/ZoFAp8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613131797-23e16f46.0_1613132007548_0.9107991473558017"},"_hasShrinkwrap":false},"2.45.1-next-1613131767-2a2f1af7.0":{"name":"@xdn/core","version":"2.45.1-next-1613131767-2a2f1af7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613131767-2a2f1af7.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-VFycJRTEcgikGEow7k3UBnhWfE+tgAK/6W5jh4OUI6rq4MDciPQgobT/ewk/q0lAIaD8VVQQJ2Aif3pFr32qEg==","shasum":"ce7e904ef2afd2528226c097d37e009c1224a900","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613131767-2a2f1af7.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJnD+CRA9TVsSAnZWagAA/jUP/1VmW4wb4TDfS4wC/HPH\nKK5QtyLumLoA0k4bkF9+mfpP6M8eCrY3fpUpa1Xh6me5+i7dt8PmR4G/OHZ0\ne81R1feQpYWqAFnKCWMpyRHpHcCO7oc2Dt3oNbFWNga9YJ/CcTDIyDbSIaC6\nsu25mHVk3FJtU/lJxitcaLJ8TjSNLUAYGKPesRuqt9B6km1184oI2hU49zqJ\nugmNxPwNyto9ffB7KL4NuC5XNHv/glDummlHZgf7MG5sPE6bT0t7WStE2pMO\n89cyxBBMijt9LYkNIvo9huM7RadBTpRAbG1yVehS+ZpQoN1HLDOFqWUgiAAf\nXz6EhEWXo+brNz20asv5ov4rpaxpALOSBubT8NlzJbNmkLmUxzYAqueeskWc\nsYe/gZiL3j7lkVOHd/rCfppjUW2LFGdgz+75m2m7qAO2UHEa0xMZEztddjpz\nOU5f1g/10Q0W1mPTBnS507WieGZEIanEw30kf2vTlKWAzxwcCG/PDzdJAlLI\nwbBVyyI/dWf6zeU3yrwC8sUElEQGA6Re/UEU7edjpcBGA7ejcmjRk1uGv8RP\nylmE7sHumVI6UOHzTIR405F1xR8LXfPwD3gqpxI9CaiVdvFhK69l790kHbWe\nrUntRNm9379tEFHxT+VU9qMm37eFDH7zZ61NJPeQ59b/M6KtYOn//M6Jzzu1\n35cd\r\n=EEGS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA/cKrLkQrQ6zNKexvlXVckY43lG67xpq7pd6gb8XClmAiBffcY3CcuucaH8UQMSAezWypaxY5QIy2bYKLA3NXS3zQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613131767-2a2f1af7.0_1613132029566_0.39908087470997766"},"_hasShrinkwrap":false},"2.45.1-next-1613131853-50ba0438.0":{"name":"@xdn/core","version":"2.45.1-next-1613131853-50ba0438.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613131853-50ba0438.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-lZpytY/Jk+auyvj0Dd67xje+0kEPGsIXPGJmwqQqYBgzAcsF+Eit2u0UJ7jRJnqTXJjMhcyxfKaHLCcFELPTeg==","shasum":"814c32d1373aac12da320dee1e19e59c00c8df50","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613131853-50ba0438.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJnFJCRA9TVsSAnZWagAAE3YP/iwqX26W0uoh81QqWNRO\n3jzGp20IxmJ9Ya9ofThFex88c/ZieQe18n8AiY438OpRs6sm1dQUHEU0rWxZ\n01AoeM9w0Uc8gJip0r9gjRD2FWBlCdTEg8wDSnr6S7KMz79bSS/I8JwygP7E\nP144hUeBYZHFHOcW7vScJUHvAOWfdizILvw3a/8xv1TazU7wJnV7+rhZ0mgs\nOQpff14eqWYHTDxb3GlQx4wOa9U6ggBBC6D4nJjiE3e45JTUgErNaEHza6Hy\nqwT/Sm1B2VNQgsPjhhdBFHirAlZ1lD2UOIxr0fnJWLdJrxhnBYDF7Zxt+phj\n9r5fu/U64fimzTreF8XYzfHLE5AJMlzlJ14aPwEWNIUzZEBUhjl41QVQl1z0\nDno0qAKqNPH0m7wZp0bWOvKXRPAFLVvhCQkiE7A4D9lkQcfGfPJajeAk9R9R\n1T1UmS/Jh/zlq9NpTLZc6Mdbq9cz9wZ2JAKGPAGDOr56qfp4zZDb+vgf7kRf\nmFX5M7GTLU05rrXYyqanVg+tvjvxZqrbbnAAfcnK6Dczv1Xfcy2lpkc0ohzx\nNSu7B/z33a4iCLF8uq1M6gXl50SRIzUZiA8ha0pjvTT6IbkeNzEDNj9JtZrU\nq+EOCx0ICruTrq3b2yOX8hxhfjS83Zw/FW7axYen76ysESqTHbMRARR3Ncab\nGsMs\r\n=E0gd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQPwCG69gptA1U7AvplfnL4KRwnCGJccpCMvqfungpdgIhAP6GZIxSIeQ5MyPl9pnrqrbQPghVkHOW/Pjg9r29xx4c"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613131853-50ba0438.0_1613132105428_0.5278160042250768"},"_hasShrinkwrap":false},"2.45.1-next-1613132676-78ddbd7d.0":{"name":"@xdn/core","version":"2.45.1-next-1613132676-78ddbd7d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613132676-78ddbd7d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-YwQKRwrIho9cdI08bWJuWOaJOwtLSXjySy0PbjExwmnjvVO1XZhv18ghT+26RDneS59mbyPpqdSu8xztWb1lFA==","shasum":"a551db1e40ffd240b3b336df25426b3b6c592ec8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613132676-78ddbd7d.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJnSUCRA9TVsSAnZWagAARGoP/3e9M2rcbm/1Vxziskf6\ngZK4k5viEe1i1ECqfH3ZKc4PT05naR3SoFs8drBsGjK4Z9KO5gCxsxXJ3ESm\n0el4nzGmMBQwAM6mxEoOSG9zq8p0SS2bV4001GyqJWrf61t7Tp2OME8d/ChU\ntbLl0qtX45W53l9tiS28jgfTlPHBjoNJC5S4eqBYGKWKQ9ohFn51GRUYHEnX\niMkXB40ONkRXA1d5ZUpEo16dgqyubUt27Rzsro5FG2cZQC0gctQzFuHOHuBd\nL3dbxAZtZ8pFFNwCjAyQub1vgGzKnjKCBxLUbIZHmh43sOZTwWG7lRJd9uWt\nkFi4hMIllBB6hujjWh0pm1/ndjBN6bLtPTNnRaVVT8LFBRF0miIZUhP04Ove\ndNMegi7lnTgpSpLCnVFP8flOE4b2Bb7yPflj3TYfCbWxpNSn/XAcuGkjjxQi\nZuj1EosO9kyHm8+KkKRhKI+QovQyq+yrqCycAE0i4mvZDQwZuFZ0lPkpsHYq\nog/p8z1dwHBbjs2nbk1bcU5XO134QY57YislgUlFrxmxUD6wKYOfsYJGudij\nGJOE7Db0E2W0cvpKoletlok6g32AZFJSeGRJuEFkyUi6xDtCVpqkI6Ny1594\na8QpCb4E6fcjkGnXUkmFSvxCCE6xZ/P5LYmBKJUtr5KwwPA5vLftaZyLB+vg\n9nKl\r\n=Gx9t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFCG4LzwJmbIIIWq02FdkM17XC9HhVJ+bw6kkxZ59CnIAiAL1De0XwNtDPoiwVrR1VAHduIfpfms9vkX8EtMyhTjYg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613132676-78ddbd7d.0_1613132947767_0.6172319086031721"},"_hasShrinkwrap":false},"2.45.1-next-1613132850-bb59023a.0":{"name":"@xdn/core","version":"2.45.1-next-1613132850-bb59023a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613132850-bb59023a.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-x/IuVQnSleAEYQcWRgDMVwb3aNl+eGS1GkBrXRn2HqR9I8k3nfYjN/ArlWGh93vQPgMbyLjVFFGa4OH/8NiDUQ==","shasum":"2761c9affbdc0f268e769698604b96a9ef62e5ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613132850-bb59023a.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJnUGCRA9TVsSAnZWagAAn2QP/1iNjOTxg553QIuEw8X/\neKeGQAliKu9lfsb4+By1GFSMob2GX/3IYbW3Ze8eNUaaQ98AR9p4fPe4vAP9\nrF7PU7avjjPskB3Rc84kbO1EaOYKbPwPh11nr/8hJXG9+5OGwxCZaY+rsAMK\nklPhaYBxnQv4+VqrXFNhyPLunlsX+0P+5Qwu7sYwkuv0V9JE0ZnufP6Uxb87\n/JjliEsKIPUzXbbjfhk1PXI0OA2+e7PcXu9eg78wwcXXVKu75XpXC6B8KNQu\n3j6G7VgvhkZD02eHh0Vtl24QB4Mu8AI0HOzwKc82R2FysAjnF6YEvhYR5jc/\npwC145k5XNQlEsqqHbCTr4opltgPJVg0khpsE3CvOSWzV4CaeFJZDDrzUDls\nsEbsYC6UV7sCT3EDXqityBZapCk9uzNmzNXeFkDRgc6cqjsSZdbmQkqHkMhB\n9zfarDmjT5WYV0THGtDkds/Ees2RA5l4y6ExLJIuLfgLxLV3lr6eR0CsYsvi\n8MrEP35IFs/yPaTtEsUq3lyMSOzRVz2hVit8sSZ21nnAXQaCKQjiWMA7PcRU\nuVF9BUc472WPplyl16rKGSOoRlFg0OWD/ig/i3rEWqfZ+iy2wDdq5TOPJGJG\nCLXIL7wa2e4awTreZ6shEBQFRKE479GEwEYZDUO6LA1vYFXN+9N4HClAoN10\n9FCy\r\n=9rVn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBWPg4049EjRLcf9QSBC9O+U2YIqSF4Cn8hhmKgL3/+rAiABQVC6NC7Lpke6MGd81XB5Bk3rP7awkS0MN/lQxraV4A=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613132850-bb59023a.0_1613133062086_0.884098395105773"},"_hasShrinkwrap":false},"2.45.1-next-1613136284-bf45f952.0":{"name":"@xdn/core","version":"2.45.1-next-1613136284-bf45f952.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613136284-bf45f952.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-pd6luo9wm27q0ltZflW9M0VZCSosMiJhlPdgemYLxO+3fPF4qMNBadsAbg5875C3dNrXNWge9igxIzgnqpD04A==","shasum":"9ddd3c894727be26502e46222bf2d76952b23812","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613136284-bf45f952.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJoKnCRA9TVsSAnZWagAAFUQP/ircDb9hOYbxzf2TgxWG\nMFNdLCmsYg6zaQiBpR1OCMTrDBx5wf/N4LJc0aQRNV/zU0EdLti2e/uzyY6k\nuF1EUSQAJXGJaDEGJXAU+B8vHYlBBM7hpKU7XURPy4YqXNRPOg7NfoUPkjZg\nU/FlrAoe/gw9Bhyjn+cZYYzLc8YN8AFBZsoD9ZfivdByB6r1fxus+gw4GyhS\n2JUawqyvJkcUqYE4/j4/zeG/JHi9l9vyuDS7YotqIneCSFJYjTkVQ+cX1B/R\np6Cx1XE2GA3cOv6kz8o9bOI1tWe5kAjf57x9a7WvHFuHlBRWIbqSW+h4JYjg\n9GPgaUd2ZUslj+ndy56FKJaOLThAwwmULptHMsIfDV1scA2hVRtuBdgfDxzg\nneRlpIch8QeZgDr6ZuLaDmRjZdtl7SHv1XCEaZUZXFja8dWlZjA8Sj63c4gV\n/M6FKgOSvaXgOMCGFthnHhhc6T6MkzblZIh6zFHG45BfH1MgPCmz8d5Cjl0Y\nSa+w0ZcxZl5vPFYmmY7U2XfsfEw8gTznmsgw8b9DP40wGUizbDAQWuQ/IUr9\n1JHDeN3azCBeu/TKxHEGhNUf391O6Amjzf7r/EzUr8EEQb2Z20iA87rjg7rL\nsTQaae09zxzXo2jICuH0a1HGfGGQ3TvcVMHOh4e7udJHT8JA1B8uLLYdex8v\nrTfv\r\n=YFW3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID4fUhRp+QgWg4VuVbdmUW9WZhip1txUJ+EVramO1FYCAiAY5qtnYQuvFwzCbI2tYPC9xcvRM+BtbjXbN8667NgBqg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613136284-bf45f952.0_1613136550740_0.3174724079022151"},"_hasShrinkwrap":false},"2.45.1-next-1613140344-096c11c2.0":{"name":"@xdn/core","version":"2.45.1-next-1613140344-096c11c2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613140344-096c11c2.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-MXhCohRlmjUxms6NrIr6LAIKS+8YPlQzZFr9K6dSgHnNjMARGV1dCV7AVNWUFg+jwn19DvjCOYF4PiQri9GB4Q==","shasum":"860d08fde6e00f90f2773935f219c74965b2e5fb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613140344-096c11c2.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJpKICRA9TVsSAnZWagAAp9AP/2W2o2X0MzZLLEwp6eln\n5NpQqB06pjgMBYlhBznhiDghXEn7fKnZmgkDpXAv600ZsPzuS3YP77rqvShn\n32eFoGk9QcsOqBIPQS4Bjyo/WKeM4SzDbjO/lbRBXPc5ntizwdM6Jhy5H3qO\nQOh2uNPpq6gh+cuHhyH5LPQ7/2dUR4VRwMLzWVhAwkKkvRlcQC7aTJtGfNmM\n54YoJj9FWDPFpMA6JGj6WF0vdQDflE9cKTrk8eUWUvXnSXdjfOmN9W1+/gFX\n/Ot79qipGYeQi4OeBEC8puhLFR4tMHRxNBCF2uoHN19fwcaXlaioCctDdehG\nCqm3R4bGXpLLxVS96d7VPZdsy2a0LxEl5rEpape5+dqsvkFv/5RNWTLM8N+Z\nrdnUM+FYa/K/1A5icXcM7tUhXBS82izUwGI7bngb4Jt0ybvrsUz6nmErRI6z\n73kkgrCOEBp0nWoLlxAKvkjyHBfm3zYHK5wKznGHGHuPdx0Y/pK0VPJRZ/p/\ng47qaUGzG3/ysQWe7uJDxdG60VvEidAQPHHR5Zjn4mhCo5Zrj09c/g7XoqA1\ncI4ic1TvrktxhnIqb9wPm7t5XYH02DfMHUK4HU3w2ElqbNUtNDAvkFeaL/rE\nwNW4IsjaElzpK39448UeDnVynUXu6eeFBs5kBh3fcefP6BfcaMljIsw61Exo\nAs9C\r\n=ReHz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIACpgpL8Tfk9PCZkgnFN1090mYnpmKqH2agJcUU360LDAiBLoUeKAfmDIcIp7cSCXI1GACKR1SjWad7NIoHBl4fDUA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613140344-096c11c2.0_1613140615535_0.2714167049452716"},"_hasShrinkwrap":false},"2.45.1-next-1613153741-ee225705.0":{"name":"@xdn/core","version":"2.45.1-next-1613153741-ee225705.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613153741-ee225705.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Eq9F+SqQBvz/ZP3Oix7Uf9g0Sv8eJweAzwskitrU0ccGbJo5vvE9iwr6sozAeLFTLL48mkivBKRhkpXVd4kd4Q==","shasum":"1849792f6174292faa6d26e7175675a15ef5cb05","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613153741-ee225705.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJsbMCRA9TVsSAnZWagAAhi8P+wd0/kZEodRauxHU1hcu\nX7CEjrBAwWDfJmspsi47yV1xprq6BXQD4L7Nhi1qUrY6Rners3J2NQLcf3rf\n3UFfCN+5T+6Zymnbxz3+is9yelOOwYDnrKnVhsAmxxTS2io+uMmagMUFtKd7\nPlqL/bfCK28Jh+xQtDZmDUsiGd5sRgr5YkWYTMYZXFkjVWfJ0/d39F7F6nGA\n97KCV4c7eL2Z+Zg9ws+kvqNepaRSmz07mGZXM1eOFeUQ/Faqt2PG0nClmuhK\nEIYcNf3X/ALHmjcMgoRHy/7noD94YW/3J3lq2eHBgYOHgE3HV0ANkdnphBE4\nLTuajRl18KD7P6vjJOAyluHi9ZE9UrMB3NYCYKqm+AgePsF6NNzKoeN/VtrJ\nwifpzOEebfMS2YQfjVElNXM4AYiJT5O/PQUOfovOFuxyeQOa7nzDpLf1VGkx\nKfJdADAtd8XXnLT7g1oinjTjfxpY+tR4espWhAU9v+oNApxE2OmfIMYK0O7g\nDIiQEurxA4kOTLDsFf2LyuBoxI2zlWhDd/GhK78PmCS49JKo5A3+juFC04yg\n1VneefXw5eJq542GHglYZjOC9PEgGuRr7j5sbWEIe44eMCWVrVlXBUDy2Xff\nkoto/IWTAv/qJxGX2wQpensMOoNY4GPIURRp8wv4PNo8ZAU2Gv/Zp1OIxZiQ\ng+Za\r\n=4MZy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICJnZ3hCboe6D59AoiyRE+hMVer68H1YU1ko9j+M9Rf1AiBYnJcF2exr+5wTA0YmGnpEinsfdSwrJ6rqWlzZ9NAt5Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613153741-ee225705.0_1613153995935_0.1343971000822557"},"_hasShrinkwrap":false},"2.45.1-next-1613159387-57e31741.0":{"name":"@xdn/core","version":"2.45.1-next-1613159387-57e31741.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613159387-57e31741.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-wJaoGqv3UVrVTMOBUKOrA3LktuyGc7sMxD73UTF1kit9BzB1dGwlSEorjDgKFo90b2di4wGTtgZS0wduCVdcZw==","shasum":"e0bab746b5392b6467d4f60f1c7a704416645e60","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613159387-57e31741.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJtzdCRA9TVsSAnZWagAAyyUQAJbAygevzMijRp2lkIfK\nbk0c+xC0+LKnr9uwZeR88/Hj6p4NNJlDOr5qmMFsMjOuSKg9AZ+sCj8A4/Uq\ny7ZYFvLE7urWEX6+BwkLUpI5hhbz9d5CXeAbP2SRmEnWURs8bhhCTo1Gi+U5\nQn4Hfep2W/Ud1xqN8HMJJ7sPHvc/yw2c19UgBHjiLRKnozdzzMgMcVPubtbU\nzzpmWjHqOow36bv2q7sud/TyY3XTiSWiGOo6AY/EjWJwXeOtVl6oCQuKfZ8w\nEjxktgjd4ROTq5dLioUxE1l/vUQv9+mRCeqYX5DKeX45Aqk+ZsLGjp86cLuT\npJWm5tiUyOHAQ8boziIdlyEOZvbC4co8qx8YgBNQfooBt05S9WpuWTEY2DqD\n4CKeY2gbUhVlS8yAADupX5FM/sSWmOPeWDLTZfZnBuhDV2Xu5gV3BJYBpZwh\nbVV9RD9Ksm+SVCdwLOam+wriOoAay4ksS8k8QP+rdtvvbRA6VHQGWKEZfAyU\n0IemnuUdwhhmzj6n5OB0CHZiPy1D2pDC/itCbJDfXyQ78fSQZAYuEsrf6xwo\nnrVPBxW118Eoqubs7jWfNPDLh3jqHtCkQCQPWfQi2csEzPiita6tq7fV8BBe\nMfm/gs3QQ4zdqx2Dv1TzI4OV1mJlnrNm9GBrWE5Qbo20HM52CSrGbDFhzWGK\n/EDo\r\n=K7oG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDF8ehol3o1aoNuCiPd61VfZsRJJYgKd7MsvVCy6qBxuwIgOowCu+9NcCc4uXGkFDxKBDRSlcCA5mWSsOIirPt03Ls="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613159387-57e31741.0_1613159644869_0.5777142878139845"},"_hasShrinkwrap":false},"2.45.1-next-1613164441-3bef0dee.0":{"name":"@xdn/core","version":"2.45.1-next-1613164441-3bef0dee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613164441-3bef0dee.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-sYG98aXbv2k3yb6v9PnVMxqbxd3eoNqVNDpUcNd5RqqQxJm6YmFtL0YoCFM4QegfL5NQure+bsIuXp/gTaMV9w==","shasum":"da2a21c37fddc98f2b809fa04d043322e5c3421e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613164441-3bef0dee.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJvCVCRA9TVsSAnZWagAAq5YP/2Jd+4dvoze1x+fE3HJI\n73lgJZ6u4LsUEc2MFz12LoI31Elw2j3T583UdHrh7Wu0Xb/YPtM+vZJFaWCh\nxnZ151DGJHZnnJVFWVP68yVfNxJy/W9jaFaV45vmOieHpjIAMwaATqIsKPx6\njDK1XdtbbBknIvdkxDHTXtBKgRQx91BWM5Aq/+LiU6+GYP4Y3IdGegcSy/NB\naFL+4mW3YBKmpQNVBrme3yLj9yIb+c86dLVWCf8D+h5r4bawmBxkkh8jvXax\nL9fitMjr/mj9aUppq2EF0oqiBGbM1e5NnIpxeknmvJiNCBIX5wnRCiFOd9a4\nd2OOdeOpdZDBuT/XUOATttkR2wC01Tr/1q5suhXGiuw+Q+vTWHNNOMYth8b5\nkuVT+AfCwuGtrZvKDTJxux53+LfKwWJBR4RCHdr7GN4Q+H0Eb3eOl0d6WdCd\ndSK2Tbof2yf3rZPvMNXE8fjoW3JUaSd/QN2Gpc1IP7fYZUX9wCiKglU7K5sU\n+71Wwi5Hm+uAV90KGeJMG0cDdnN16zTkvBfAZqds5aT/oa1U5pU7gVF1RgcL\npm9WcxqpSYdpK+g5CY7UqxrnJblmFNa51zmOn6ZT9FsPxlXriRnkWRopNTVw\nLkZW06bozN0ckjafgZ+Rr5fVkuNjHF9GlkSt80vjAZwXN3Pb1FeWl8Uhhul4\n4Tzs\r\n=Fuhc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHt9DpXvTQ8ODtkO+SQaqZyHa9BzMWRngxQjua/8bRsgIgcP4HYRA7sjTWQdxDPgzLbvyCwzD6/nsu5tl5vWGYZhQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613164441-3bef0dee.0_1613164693057_0.1692022014142569"},"_hasShrinkwrap":false},"2.45.1-next-1613164562-c3da7def.0":{"name":"@xdn/core","version":"2.45.1-next-1613164562-c3da7def.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613164562-c3da7def.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-8Owhy3enQsomJgYAziZXT2nBw5JT0Td2h9WuLrDOCsUoOjUkUC3AFtFgPJ+9zKQngNgS5m4mcKoTFexABdx5Nw==","shasum":"1e6a90a25d9a6149760bb128823ee7ee60302112","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613164562-c3da7def.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJvEjCRA9TVsSAnZWagAA29sP/1HjSp847iSLhXMjPyS0\nBBJM9keNsIfaY3/Cca7Yh0ZjRPwelyORBbCiEuX36caytgDQ5aFVoTiNe67y\nJek9nlzYF2g0WwANP0g3CK1G02IdIPdpm7bdPYVTk0x7ajatyKDTFHwvKohr\nADk07S5Jv7nzgnXt0IW2HpsZFuFl2h8m8imSpIATKCs03P1zKsTbS3vB+zDg\nJCg+MirVsbBRnsvOTGKic7mZpyr/2WjW0Muwoc0iYYUqg4QlxAv4Ma41h9d0\nvwT+zSbeA6Oh9P4A7BO4oc49Nbn9PjzlYzzUaBMxLHOD7rM+QxYgAYUxVgQp\nhmmFtHrCpd/kPzfttbDCzBpwxEvI4NX3a8jGaZ/IgxLKElTrHZhXuA8xVEey\nR08fKRN8TSAgw65IaWAgGI69Qa+UFQA4qgi7DcrNfIGsdF3s3U0Lm9p37gto\nOlRCzqGlFVL+YPPJnxrHwaP9cRb9tF5i4PranqqQMUKdOiB9mkeiiV4VFIBQ\nlAAaRuypNZ/v4NbgIvyxC73jglwmHnEw/wYY0R0OdsTdbKWQIbR/BiA7uToW\nDvfOp4tj4kaIFfvTUVIjtir6jODvKbxoLYI2kIyZ4bTXeTwsBmiItkbSLDsx\ngVyePFEsfq5CxxO6fHuO/Uy5L4Xu5F7seaynGB2nctsW0RITa2TuKS1icHdf\nqb9k\r\n=L1Ik\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7n5Ofj3Sb4W6OaNstYjrCwH+UB7AEZ2pxm0q4JhHJ6AIgMM75HWz4SPdChgVsM6EYcdhRmhPLz3WnaaDuGsbTfzc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613164562-c3da7def.0_1613164834506_0.6246976394041377"},"_hasShrinkwrap":false},"2.45.2-next-1613385527-02cdbd15.0":{"name":"@xdn/core","version":"2.45.2-next-1613385527-02cdbd15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.2-next-1613385527-02cdbd15.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-fmZRG2zVYL6hZc/3an+qlVVb7lw3jkv7wI38ifmGOKbGeqI22ysDs6U9JSgtxQ1wIpOVvlgi4I1PvUR6nndmyQ==","shasum":"b76b7df897da518ff0b46b48fa751f9b8bd3c262","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.2-next-1613385527-02cdbd15.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKlBDCRA9TVsSAnZWagAAiJcP/0nkXWPMvMIxJVZGN0PW\nYqvv7KnYCqXLrpRiKVOSuFpE33MxgMos7MwVIOaRfhTCcMEBEYZOaYKmhvAE\nENwDMejQrm689x97VkD4t0emvCl8Sw3ZC6eoxRbLSAVJZxQWcn/8FDotv/C3\npFUGuFNHZTjYFMvm1jpMQ0JO3szy7igN8nvIZK1i4MCKxqp/B/uag4TIcbMr\nxH5dkYwAj+/fau8EA1g15sq7rltpCdrrDYOAVpC2C/rtivaIXJDSVr/xmq5+\n/xqZD5aU5z3vav3OJjkVcvNNACqjYnknsMCI3cdrO2dQaNWolY7oQVk5R1Ua\nSPIp2ZdwMUqgp01Fra3Z2cPjGc6WNGoH9Zh/3zmDYtwVMraK7EqWX1ub/3VF\n+Vq4qECdpB8ZB7jeb0T0LrqRtr8zS0i8//USKiNqbPm8xmPRlulfXbLb82uA\nGVhjv0m5RMugU3EzwWasuq6IQcbKADz+l8HSvcVp9dFQurB33W8VYadvEpw2\nQgN0RhW0NujryhENyZ0WU5R1sdX38vM8St3t1OnJYMpJELTN9bwusW2AJzAo\n7bEK4URmlbxZ6epTsUYw2Qactk0SjDz6tcRzXUtbg11A6C85M0yzptWd/70W\nUDp+5BwBNraYvFCft/ZTz3imF88Aa84YpZRgfyKxlp1/WAGFSvCVKl1daMtp\nn5GR\r\n=HkrH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGwXqSDQqzna9UXlCJqLHdPqkxG0L7RNktDZAW4KOuw7AiBixS+dp13xtHW0l8Sy0n/ApMvFcahbaUVZ1bn+HR3UgA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.2-next-1613385527-02cdbd15.0_1613385795386_0.5548439869644655"},"_hasShrinkwrap":false},"2.45.2-next-1613387061-d69a83e4.0":{"name":"@xdn/core","version":"2.45.2-next-1613387061-d69a83e4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.2-next-1613387061-d69a83e4.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-GDmRAaBLGPSauSS115XS0rowTcCSe2JOAvwH5bQUxZPCP3hauyJnsqAYULEA0RRWuqKU5V5sWFBBPMRCPDecvg==","shasum":"0ffc798e1b1e37d9cf45fab2c558ef67460cafa2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.2-next-1613387061-d69a83e4.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKlZQCRA9TVsSAnZWagAAjbAQAJp+jqLvwgv+oEl+QvbN\ngYPzrQjEnTfa3+XPLENJBjs+pacliEpE4nCQAyBsR0w7Fapqy/QB7QD8hzdq\npdLm81IKimZpU9iMMqgNpIi2fc/9uso1jp3eTfzDbmyc/4LLz1JmA4kwee72\nLBsI6zkv6n5unrFFkIOD6lzKUdlxLQTtt8g1634Q24VOS82bC7bid3CI8MrK\n+y/2LeWmwWNV1a5GNbFGTOd+pzNcQMLEJ78xE1pNAhotfindE9mHiAFzXaXH\nrfpZs6NaRIFRG2B+SPckuaw5RbNHPQ3zsyi4lFLG65OmlfpVV6F4TlgGPav/\nlkJHGidJxKWnFG5X1KqqBhskO6Ct/nCl7mZKo79SEar5zM0jH1PUytue/xwZ\njuot4GeKHo21RWKU1dgB5ABLBFmgRmEWTFHJpz/Br/PP3VPfDOFd9+TQZFdq\nUocf6TI2dtyQB9mfDyftmIBhZ2woOLOdRx13/0HRPdRkMyclEj7gEgbAmYPf\nU3Y8aW8PW59GAcgaMRCqL33jaUrJNnp5T2mjWaAEO7VGVYnU66ZPeTUwRGkY\nfIpvYLHvhK41vKG/15hUXdXuHTwUse0x9XwBcIq8ttrjAtOLV+KY6YquY52I\nAmSI49fEn9pOD8hNf4ynDAh9soXWcGzEXG1MJpqsD9+71Bhqu3e6onQVX5GT\n9HNA\r\n=Phuw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+FiGNi6YSvHNF/xYR636v7+5jbiQhYcQ4wRJdVV5vQQIhALUPaP6O5JOd+Ln8lmlYn+qJLCbvXO62O+5b3r8ZCXpD"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.2-next-1613387061-d69a83e4.0_1613387343697_0.121534503171564"},"_hasShrinkwrap":false},"2.45.1-next-1613402185-af936873.0":{"name":"@xdn/core","version":"2.45.1-next-1613402185-af936873.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.1-next-1613402185-af936873.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Bl5qywhPEWguyS7CN/XAUHzRySabSjdKNPm2kjw+2WGJt+6a6LSUNJOFHc5ChzJhiLqJy5il7hWRxn/zKTUU1Q==","shasum":"c146749d01bd2993d19c01f5ec2310ec1b883b52","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.1-next-1613402185-af936873.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKpFZCRA9TVsSAnZWagAASegP/jYsZtYYcHAlsEtq+f82\n0LtA0q2L/IMiI4YsgN64+VM4krGltX3gW0x8I/lJ78vpxW5D5duzDD4z924Z\npnvurE4su5kQrWjYO5ng3ZfzG4xlNdO9fzbIpmV+YHmuquXeFrVcnfSwY/mR\nYCeXLhH2Twn9nGowk0XYWtT3xMUrw1cYZIJLQDcapsjFHoD4+8R1zQYV/Rug\npa6oaDhrWRhyYj3O8B/SZCOUU0c9JYHu7tBHIZaHy+0cv5RGmtpL5Hv0VjbD\nZqHZghGM7LlhtL+W2B/cYt0wdobRZmMWtAoq9IrPN1KxILIjEb9LAcljrdZ3\n/oIHLtPnkUnqXC0X1LAm+0K2tTMR0NL7xpwX+0JWOI7JoXKCJgahkgc2uJaj\n3XU0Q4PuUfSA2OkyD15QreL1TWaZ/T5gBjs/CHYCmRXMYobwLS/xoFsU/Opd\ntqIBXiQqSDWBodT0/IWBk4Y3f5L313HrNAMmD6fUEurXznm/Uh3cD5Afarjn\ngA/r1KkUqggjKT2W09iwk3PpMA/1K3JkZWsuqDQxgFngv5++De+2Q37Hb9+Y\nX0cnCpglmdLaH+FGKx+4+A2xVN2HfaqpbaolSxolX4D9BK3lhSDsafBUFtV/\nzzQagOHJCZy0/Vz+vP8Tx9TcmStz1vb69GD15vv/LFhOVGxXnjy6GMYuVasc\nRzfl\r\n=Krnn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDh8mIY+rrPuHecMTSYg2a2dWrHfQfA+vfVpG2J5ttfGwIgOTP18jnj7vi8W+fCAtjpQZjG+7/+TWT80j/GDimKamQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.1-next-1613402185-af936873.0_1613402456701_0.030162346735663315"},"_hasShrinkwrap":false},"2.45.2-next-1613467763-b282e2e6.0":{"name":"@xdn/core","version":"2.45.2-next-1613467763-b282e2e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.2-next-1613467763-b282e2e6.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-obzrzBpxF7fxnaSGEZntqWtFVPLi8p5dFwZm96JlDG4D1aKMIfASi6FJvcZSZpfX+PM1buuosJKE2vyCSDUhXQ==","shasum":"6d7f03b89133f4ff9b3e36644d10ba5bb363ef18","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.2-next-1613467763-b282e2e6.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK5E/CRA9TVsSAnZWagAAts0P/R6IhgIBTrMCu9DeM1vl\n5l9WdOX2GVZCxrYoXuYtVuruzwwahzU1pugSll8SwWCcv72rHSIk4rWgaMo6\ncjxPhkFmvIaQZAVgTQfekB71TGiazRGK8rL6OBY8BwQqZe2JEyHVH3UJxH9p\n+nRa6A8mirNcsySgickrJbf0ESkHc2ItuwNkf24d3OJqbbcWIK1yx/K3P1LF\nT86luoVQWjj+RlRmrwgiN1RJy5Jg8p2XSIhGIX+S742CkXXOe5pbcRf0I9cN\nU2142+QUiLnmAl55I+kzGlsMalIvlJYuMGT4gX8ljwz4pova8Pica0QFno5v\nrv0F7LfFh3kx7Zg1nkQUt6HB5eemCfWlU8KKkKlKKyRfPXkJe8hrOTG8KEV5\nzezIrDAId8q9STtH9OGXPOv8gOj7zschCpoVYVVJy9E84OJLWK28kgMlY78E\nMQbiENznsYPW6Ud3P/FxR0bL/54yJObvWqOh6upXXA768D/rm1XuXrSBFRvF\naCkBa9eFjhNun40GVLo9XTK8M2IWyZzCBuVuv3Gdo7wp+fbkUT9hMYU+0/NS\nxzEqtUreXQZ7DbFSqeNrVmneNOVweN0iAOr9h9BWWpIw0w14tADLCaD5kw+0\n8WBiDt0MGdx4aiYQEHGuk+6/20gkTOp/SWtNe5cHkS8hRrTfyktJuiVb5b+U\nXUPa\r\n=jzRx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfAayN8+GwPG7CL0DJ2xpGYEilUsdzW96+dA3KSi4V0AIgau5v6xN1syVXbZ+jWOb5cihoBsVPly12NXc/Ym4Q9oo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.2-next-1613467763-b282e2e6.0_1613467966866_0.4206665332025672"},"_hasShrinkwrap":false},"2.45.2-next-1613467730-1cd50a04.0":{"name":"@xdn/core","version":"2.45.2-next-1613467730-1cd50a04.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.2-next-1613467730-1cd50a04.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-q6mJ08hG3D7KJaHqajNtaslR5ccBlUzCxtguXdHtjDLYtblzp/bAM3X+VwiNT03zcl3t3wWng7OXqjeJ7CfiqA==","shasum":"934fddbeacdd3ce263aa03a65a7e3cbc8c623b9a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.2-next-1613467730-1cd50a04.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK5FRCRA9TVsSAnZWagAAyhAP/AxlPYzWIfjsPNHmIO4/\nXfEwvC8jEG0P8V8e0Q0tFP9aR0h83ksp4pk3eL/Pr0/dxIkUHCaitY3ZTFy0\ncS+W63pGzZP/5uhWJA+HeCz8ld9/ybj6wM1Zoc1Tn88gz6BzZYXZUghhdW8Y\nq8xrU3zi4N++Vsgit7q8LbRDhf92fekBPxHT3nGY0KQQROR46xNqg2I5Q/X3\nEVNz/loORuZkitAyEO6zRfifAZ3Ssk+kITg+mWj0Pcep3trIgZunoMHTdKT5\nweWl90lwPLz9xW9mvD2IFXXWjZ/UJbX9Wr1/v+5i+3bUjkosMtA4if4SpiXV\nqbhcyNyW3e8y7hwcUYFOO/DwnihglcRUeFuZIvD9v8q/AHqQFmyLHeax/eat\nYMP5ZnfjaU+DpLnaNkvEwp39bNWcYfmG7d1TlI3Vd92Yq4byPQ1BSIYqoXY3\nC930v2rhhtKWhX9doqJWsVw59ywTN25v7nicLEBWMjKam9o/LaJLlx9R57Cg\nx9cLOUPZoXB8nqcS2MMfxQaRNUiIsQ/viHMlsFzNkLneI28e7J1mScUgtAK6\nXa2pePLvDhNzJvPeH+iogLFU0wYht+KY8pQ2/KQM88QGJtX3NZks8ZZClUIf\nkwoMCfrBX61KEdLeUqsKmzbiRWo/Uv1UicGXm5VTldR4IGUdwU/tU1PGThyI\nRNNH\r\n=DMnf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHBAVYGaE1zWhDak6T4CHjRgQHSKrtnsfYjeCdHYyKQZAiBKDFfdOJSTt3/EGNawToqeWsaJKoLxL1Bk5dCJAGLF6A=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.2-next-1613467730-1cd50a04.0_1613467984857_0.9703805747870284"},"_hasShrinkwrap":false},"2.45.2-next-1613467867-7700b787.0":{"name":"@xdn/core","version":"2.45.2-next-1613467867-7700b787.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.2-next-1613467867-7700b787.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-ftnx2O+MA3uPPf5qJGnq6O+RiaPvgsQP9joQZBdhABqjkcLuJuJ9hsx16OmuPZKuY7JmswIbXOZysVkOnP+xuQ==","shasum":"953b7fe8b46e83c6c87351314baeaf88f79bc48a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.2-next-1613467867-7700b787.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK5HaCRA9TVsSAnZWagAADgIP/iMmuyfyZN4srzTtfaQr\nsNMRIU2YXyrS70qWqxB0ngkBewxFf0PoECfV+a2q0Bijczv353GUvpvv9C8h\nI0gGS9X4Sjy4XMXMQWLHlfhcvOT88KOoOiIbd3zJgPrnmXa8ePHtMoEltDDy\nO7gvJSPRQyqxEtD3LKJFM+RaOvGc+xs7VbiENObLYSluu2/rYL9+FrtG2mZB\nDrnpbdDSNDQBCWKjeZgf/qvfCraJxQKyuwfwJj2dxvjTQA1d32lekr7QAqzv\nlfepckz49VQ7aACSfFCAS4ztBsKtAcCb1un9MQpF+B3X4OY6bp3Q1A3AM3Wk\nLHrEnT353QIVHaTqrf6zBUeFgUh3MZINEsqRvRBx/N/U9Xk5B4odbLw0LXaU\nCdIiy5cN1CXXmAKmp98bHmWGXZh1gjS+DctG2ntZGT+X5dLqTKKJFPV5PgOR\nq4CsCHIgFi9lWOTAaun595fw7WQ5hEgKFxl9vACYOygS0q9FyyzQmXO79vNj\nSbAxLdBsQYaFAlRws2FsfD5YzKwGEVodvL+cAxZOnanzWXy0dKcQX49yY9+i\nHMcJczT7fCvMcOxGzVRJHUbh7PvL9YqDQKsCH9Qi0/BSD3VtOwXre9c8MAWu\nXcMUgrF4xUz/kMlWjq+pH0gMXYmX9CJ9N0n4oYbw45sQraezaVI8gAQZBl6m\nt24Y\r\n=zgxy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDe/vqmlrb17Lub6NBSTZQcJETlI4XvhUln0CHwXuo5eAIhALPEyj1lIekufogCG8UlqAPkn6L0bDp+1Th6rtQs/6rc"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.2-next-1613467867-7700b787.0_1613468121317_0.8156104213384501"},"_hasShrinkwrap":false},"2.45.2-next-1613470044-4d9a689d.0":{"name":"@xdn/core","version":"2.45.2-next-1613470044-4d9a689d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.2-next-1613470044-4d9a689d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-CEw8ACj1eg3hUQpQuQQK5+yDVdSGBaM5u/jp15Zr/bdn1+5wOGJAQRgFLe1+wNZoZzgxqW59OAlWZixJ3odNCA==","shasum":"01563313775dd7f4e68419047bf61a264b9ffdef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.2-next-1613470044-4d9a689d.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK5ppCRA9TVsSAnZWagAAsycP/RM2RsSKdBN4lEg2VTsj\nzMZSZ4Msd3az0I53dGQ3DCeBI9wPFOEOmNeG1aArq5Q/bzXlwl/2+5QyrTdb\n2UQ8JrD+l9hZ7r5pxZRrhuu9SWjOl1K4uE6g4FxWiWJ7xydMOV8k3oKCSJp9\n7xuwgE8lhEdSYD0bsJxaGHyq8vpICI5yFeYs7yC4wA1URncjjvrPyVpHjWyL\nxXT0BSRwLMuNyxwkXRjI8JMwJ/d8ZHodQK9LQb7WFbNjs1RFEukY7ariPrqV\nuGkKiCRkh2+FQCC5Zc50bi1lwYuQSpysnqcx44W7m35tPTcrfz8p4CLMSquE\nwiaiKJjdQXQBrs2YQmDpOZWiJkill6ajLuEj97d1gySP5RcyxL21xu0crZmE\neSJYAtNsJuisj3AeoMofemYbQQORNrBI6Wip0wyQuuZoqfTn2232K1ZH8OSP\nI5MZRVpgQpZgsGcgktNFzJEZfZwBMvnn11lvGVSwBqF7W6ry+H4Ims03xfHW\nlfAk+JmJ4MNDtMiuqvBHBd1/PV6mVV4oWaqDiVDF3JhQdCLDEW9W6+/1CjUd\nA6EYu72ZA0nit1y/ufG+UfbTztdX44EBXZKEaZ8fzd8Rdg1XY4fEKK0FABCh\nOm5+jcBvRt4BdUZ+I015azqqoZx26RGdGQhERBF90o64NMGnO2JUJ2ITcpMh\nUpI8\r\n=NNk0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPEiYc/CRZZ28T/qUE9kPLzcvG7/8ln7S8yL0NCm/OlAIgSn542nISkE78xmp9LZlnOZiFj/z0G3LUAR5xMko8Lvk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.2-next-1613470044-4d9a689d.0_1613470312816_0.12394016451853518"},"_hasShrinkwrap":false},"2.45.2-next-1613470717-77c0509d.0":{"name":"@xdn/core","version":"2.45.2-next-1613470717-77c0509d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.2-next-1613470717-77c0509d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-PH9lPKpLzcePEr8T+iIjm3/In2+GjzTYjWHuuTNnx+fms9fifUEHKyXFT3uiCukxy+OCROAZIC2dQLSRYnp+Fw==","shasum":"ef62f17a43f2bb75259002948ae9d50f7ea773d2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.2-next-1613470717-77c0509d.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK5zkCRA9TVsSAnZWagAA2NIQAJ7miNiLR2DLJY3bA+UP\n3BYV56KwRBv9NcvQNdOZKckzxJKxIlfRUUSZzd6OzYybUueZNAzVttlEBik9\nyQUMoKC1C1jasKgduWs9b0HC9QwqKfiM39rAvMqlt6QDYv77Xt00WhhYisVX\nVLek+vgEjJ1quJGc7tvcSdwEM9F1qrhZ2adB+ynZucpJFKeRkCgiENxg7/8U\n0UMW9AtVcHePPauW2shBpVJelT4ZMCv3J+EslpkbJZiLsOzQCYOfnA03HVRv\n4suz0rgyvV/Z6J8UpXxzbVu9zjR1uo1jOQOIOB19Ak+tMylutyacq8It2fvL\nfOVYLeQOgLMK6m0PG5Tnrdk/9B1rOszv1/8X56vGOAqzmUqYhsaAapT3EbfE\nXjPBrpBQiLUt7RqHuAZX9qtjqldcbd/+cgya54BZwYPji/6PaBFU7HUmhw2z\nEaW1OkSuzsZ42ol6374VBoyIfhKFLQiV59KSdnYQc3dN2C+Gqm2GvLscwgpI\nNengy5/rjzQCc7wdwfcC/MIywM21CjYfukECsn3nBL/YV5QLvD+HWQYEZh/K\nWDcWtJdCGwWBkKe1NEI1N8mGuvrQgXrWqWZ5zxHV4nHr3Wt79vHG7yTq7J/l\nRuu0tG5A3sVmXqnTVyqB8GclGAc4fobgP+lvEQfqsNZWjCby+YmsFF+phByt\nXcD5\r\n=kREZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeSak/7TuikBNjVmfMHPZOznOGGb6xqYpAYEHrT2eqhQIgb1cVU0+OimIYME2aJTLdL8HIiqoaK87BmqIfwv1WTsc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.2-next-1613470717-77c0509d.0_1613470947461_0.42738201984451796"},"_hasShrinkwrap":false},"2.45.2-next-1613472288-82892ed3.0":{"name":"@xdn/core","version":"2.45.2-next-1613472288-82892ed3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.45.2-next-1613472288-82892ed3.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-wv8Cn6ENAclBSH9jTyThDANijur6rxQC6PKU/v0CyhZ5oFlJpZK0NMaQ/xEYWFR6oSTXQZnTUsFdMRUPBrzMIA==","shasum":"259fca7cf7a01e8ea8ed9b2a89ed57f4dd43b2a5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.45.2-next-1613472288-82892ed3.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK6M7CRA9TVsSAnZWagAAR/YP/0kjIPhhvYPSPht4Gn6Z\nDbmce811Acgapb2OFEaERauMuewHCxjWAgkHMEpinvzgBcUGhvL8m+kpim4D\nQsZsTWfzsY+9DeS9hf18HU9G+8fUZ/ty4WdAa0HaN2s/uTIQiM2HrSuJ8XnS\n5qhh4To4ay/NKFV4xN7mytsfa3UfpfRKTfHslXdwifwvyObQRvS4vYlk74OT\nKZCm9zTwQmV/58myPiDK4nhMDbNkss77IpRPj8yrThe/APxMXMLgUHoCeEx9\ngGl/5XSy9+EZXRJjF/Kle7MqILcFTGbE0PL4VjAyXU8cIVBFscoSgQ8Mq8aE\noBsdFr1M1mZHfsAe7NqJ2XxX7xhjNpx26eD+Xttqr5dfYkeBAbLFlsuHjuNW\nXN11WYc4U4wU4SsbjweP9NNcDDQ9MRnDVVrj/HW0MS/wZzntUIDZaSWcQg+n\nJXOC34fIRzFGrPnnZWuxiaQ9Io7hl3imZ4jBypzeoo3BvK8vB9ECwaMK6ZTu\n0wNFEpiOydLxrKm7gBy3QgDL48ThS251d9HxHMEhTxtfwmC6bzSFsTg8dYNB\nxzbChM0DRmJGKNxNYG0tvLVQC6/JKAxdZqgRqvz9R8MUIIwdkSAc6HlhiX0B\ncM2KUsYh3QCnwYJnE2HIG/Pb0KdF7A8iK9Pg3ilSi5DDWJBVS7s5AEMP+TiB\nK7bS\r\n=Xx1x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpymKJbUIsawCdpp9UNt4uJ09q9EH88IlLi8e3NMtOOwIhAIzXELhZgiG8F3hLW8gi0xgnl/wk59Zw8rdigNHOZrkv"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.45.2-next-1613472288-82892ed3.0_1613472570617_0.06948176785030902"},"_hasShrinkwrap":false},"2.46.0":{"name":"@xdn/core","version":"2.46.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-V9KWkjLcaqnXCHLYKQwM7j9FT2pECn42SYROnqzrB6WM5iRfjdXMAuLgBYkcBJLR9S32P8uqkY/JbpRzLgzmDA==","shasum":"b93f79036b495e63f66c4b760e834fefca09b4ec","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.0.tgz","fileCount":179,"unpackedSize":664378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK6NqCRA9TVsSAnZWagAA0JkP/2L1ppXr/QlhWWI4qd+q\n5K9wCDrcoiz1n1lV6DdkTrN9SEzz1fqt0FinqU4uV21ByGqjvHocHaj/vfmT\ndyHvuu8ekMZHjFfdOj5imWSLuLHF9ARTanQ99k1PCjEASeydXmMSvbw4P5YB\nXjoKtq0Wkc3mngaRmSoUQVaIVPm0Qhlw2W45ysHicEH/uoTQFiPEvluEBXea\nyU96VSVrEriMwvGCNp5AxojleM8vf7ENk3Pbe4EPgPVQMH5SnfrczC4nt0HJ\nmoyCtag6/Dk+A8fCZwSU6sUxWCXmL/hIfBhw6NNDmsrDsXVhLDdPfzJfTBAN\nwpxjFvfD8/dKNcm6oXJO+I2uDnyjHfK4zkeKrS0c/a0rym2Ou2cdfCU5ibXB\ncIym76TMBQ1Q6ZPtz7bgNuufGJPrbqsNWsfsl0KWIvM9WfMXEVHMzdpDp6D+\nUYRjdYGSqpgveZdwAYGJAsP2ov95myunl5sF1852i9xef2FHN4u1NgizJcTs\nr/XlfWb1MqOg8GhxwWsvpRPsTOxuf/b/nruLKiYvRU2BsiFBpi/6e/A7YamO\nWFyiqz+hHzHkF+L1Q51EYvQ2WS11d3RgLOntB7wYrCpimKdqkWEY2mT+CdRE\nxusY3zaW2/CppslgWyB6PBmxAfuq/YdFOgGpYTNnLNrKU8fgutEPRkT94FdQ\nzZgN\r\n=0QW3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgaQcRc/PY5U4764vLyygcZFi4popOQeRycqlyX9ERGwIgXGrqbH9vpmn4FLWM0FMuEZtSr+fQCRVBkIFt30k52YQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.0_1613472617571_0.2708586530581232"},"_hasShrinkwrap":false},"2.46.1-next-1613472397-454a94d2.0":{"name":"@xdn/core","version":"2.46.1-next-1613472397-454a94d2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613472397-454a94d2.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Bn1O/fhUNHSap/2+YZkkT0Z1KLgeOe5g56QKBnbGcxaLZVxuN779OeM2/weq7tLKzXE8l8602JDU6yckby50pA==","shasum":"aeafbe8787793a543adce9422fe411f1fcf60855","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613472397-454a94d2.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK6OSCRA9TVsSAnZWagAAY3YP/icdUohp9v3OIVe4p5/B\n2hqCt0u4h64Trb6ZI4Dy2D76i8iBuNjtU6PbsWjyCEXPHRWu2cnnOF1q4yDS\ncrwpcA6AROp+kYUNFHCaPNe4A2x5Fwd8MbryjBKhRGHwPrQvrHj927e1KcWP\nJ2u7LTNJF6NtjKsqq8k5dek7ulv189xrbBbUjWzGzPl+vU6XK+4LnYtgr3Mu\nVLwFn6lqgsc9jxt/3nV6SNv4zCcRumStAcYMsIXQap7Akf30RvfIwvdakP+2\noWqmr74O7wRHVHEdlRfGL22b1NARUhbyZAyCg/xyusX14mzu+6ssCxZ93tHN\n0Q0GzqDclVoWzP0uOddIymFrVbxhMPnvMG/wAOouBMeyib9SHfU4qL/WSroH\nATrJW1dL1oWhvZ1+/5i1FVhqjocAc3npaKxVn0oPxR/jIYp/zslaogSM6eR6\nTdFlgo72WBeexIqpqkWCSWXjJ54jXc7uyOqTiy6hR4Vtg6N4DR8NUDVRETPC\n4ov5IWNLT/FyOAIO4GiFdiGaB4pjAg2VjIBNSoE7ii6VY5UzInx9jwgYTIU1\n0UcS0wJPggdjXJY0wGIP78M6P3PGps6XhJ6PP/eCea0cUHnYaTBj11/7ztyS\nedu4Kh32DJhOg+kgO3lKL6knZI09q0oFkr3Tn9f/McW24shA4ePK52rRtjfO\nuBec\r\n=Vq1I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGaYkyCJgs/WyW2dqUCxe9TGv2FU6DQjPq4X5nSKcbkNAiA7hc7bSFH4GlQ7XpH6cNbG22zl+RjBl3eLXfJTw9ueCg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613472397-454a94d2.0_1613472657254_0.2618491422770537"},"_hasShrinkwrap":false},"2.46.1-next-1613475842-0623136a.0":{"name":"@xdn/core","version":"2.46.1-next-1613475842-0623136a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613475842-0623136a.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-TkwbtibhSegA7IlUeYryFOt0u7JAum0whD1E4ZowO5MBr3IqnLRhhiA7XykBaqKzg5jFVaCdJWos22bIcOtrzQ==","shasum":"e9892dd54fff3c34cdfc30c750ef386aa4d1ca1f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613475842-0623136a.0.tgz","fileCount":179,"unpackedSize":664536,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK7EACRA9TVsSAnZWagAAzhAP/0mV7+VVp+wMgXpgDmIG\nT+pogVhhJAzvMXYowMJB2g0AMdsLB2uYOHd2ELCy/SbgPNmRfXITZMOXzSdx\nxlYZJceJ4cUCJzJxJd/go+ghC2qJ5Md1aD6MbbQh2MAxJWTl30scEq2jKR+A\nC2R+vfuhWJ7AN9Lhc9iBF6aGtJrfXrEkwXMbgI7pDPDKBOZsV+v7Mt8n9Rua\naQzycJ7CMoIPFhodmuga0jAA34bb7bsrqU0xIIIH5/7g5hiainRdSi2Sv5a5\niraRLNrfmiv9ZOPGZfzAVfG1DYVffsikyCtmiZe9jRwmO43H+QWZYBtz5pb8\n/MVdGkiVq5xqVpD3NnyzTybsRHBMbggtIHftYSGQG3Ra6lLeBHyf8WHCosDp\n2Ij2DDyzMHv2fKXMFvML0IVcskKwkYWm9Uwkqda996TkC2kKhBM0QikLMiUE\nZlAPT0GmNCP2EUQyVqAedIHufZRqjEmKZzC9iRe2LKocnCAtV9ma1KCp7NLp\npURg5H9vMlyZj7k2pERzVXMRq7NRRcVFrLq+Q6PnILmO2oIcU2f48Xkt5/+E\nHHDOnQJq4oxs/SBDy6Uifd0jxJUmqZjbROLGdibs23Zhd0oxoUbULW3O5/cx\n3W3vGFZpSIMtIdxODy17job7uC4wMN85HCk5nEFdKXVkZS1ry9jmcd6MxtmR\nzgdg\r\n=3hRA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGRvGrROGdRDh7QyF77UGDpjKlL4oxJlWzJ/imsLWC3QIhANjgxSS6PbsTTJAKy1Upp1ZqBvG78sJcCBFXrnTIDlR5"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613475842-0623136a.0_1613476095375_0.8352116122059563"},"_hasShrinkwrap":false},"2.46.1-next-1613476294-f7be9b0b.0":{"name":"@xdn/core","version":"2.46.1-next-1613476294-f7be9b0b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613476294-f7be9b0b.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-7eMkT20ybxNbFaJC9Ghol+J70mb5/g3fq9/1hGMCp+Jg0ZfQuTiZkoO0ETj7igm6uhnlqAyhos8fIlYFIyZT+w==","shasum":"4bc4e22e86ebaf0019bd474fbad6ff928d94eec4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613476294-f7be9b0b.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK7LDCRA9TVsSAnZWagAAOpAP/3IPHpoebboUL9x7isRC\nMWuyPuh99/7HnRmEeFbHuFRJ/BXmbJtB+yXiRWF5FUsgIduBRxWdvw3lIGoH\nCC2s6Hnz/xpGjvx2hbYYVclsbAjf6bp/O5RbX+g49OAljQL8cqiaTh043ZzM\nBJnlolW6aSEUTSu5GOkgbC1Tnj01BMX44LR9thpwyvqUjexc/J8hDOOWIwRD\nqQfUvd9zq1yk9nud+hCACIYlnSeYTcCVjnkG/ZcFVmIAHsvqW8ExZBD9wwKR\nJsraBbW3KnTEGcVo7ohpurwesu17xrzcCnbRKYCTU0Yx/AJ1MLev7BIViyLh\npqmwLWQnN0QDy7I3WwjHvDFHOKO20tjluyvCAGOY1rMSGBl4BaIK/mdcf7e4\nxs2Xg2OMQHvm+WCFUExqXPTr4ISq+lqxne38BBTRVoMVVzcqsoXyVEsMpvFt\n5AEkC/QV0pbY0Za+JrlSm5hiHZVnahRvGpmhE6Z8AQ8llwjCt8wIKWCAvPQ8\n4dbtzfXvku5q8h7WUtiTGstOwT1cUNB2YGRgX7XEPNlDGd8ebLHCd5YROnQG\noUcpI1VmhJg2InexeJU0a9aZo/eToK83peaVl5KOvGvBWdWu6ER5uUcDnc2O\npuFEEdaWDTKZgL4x9s2W+/iWMFY6AXbpStBsCHOaNEpOHJwgjjWHBfeZ8F0g\nLMpa\r\n=8tXC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDtSG4cRpTaytFjTgLofBGB9HH/JDKlP1rSTCF/S4SXIAiBjCXfsXAOMHnqxcYGiEra6u16IXfOv/eFnla3JGABg8w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613476294-f7be9b0b.0_1613476546482_0.3235986717355839"},"_hasShrinkwrap":false},"2.46.1-next-1613476613-81172a7d.0":{"name":"@xdn/core","version":"2.46.1-next-1613476613-81172a7d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613476613-81172a7d.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-dSHmXINpanVUTCv9+K1cFnCUTiOuuGp3v7IK/8aDMWnrQJpzMwKWpkjzVyEmhJw6l6VN4EqlRpwkPJ4DRiM7kA==","shasum":"dfdaffe0b716f90ef0b1ba460980fabb8d32aa48","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613476613-81172a7d.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK7QCCRA9TVsSAnZWagAAJJUQAINyg+QzuzBwa9dZv77N\nIseM3NDwKDdVTnAdP7oDItt1lvNRO9vsZc1gBsQTUQi6etxYyQvOukXzu0gi\nuvlI/Oo6fF45u70yA5ZWrIuR/d8ltZ82gbn+2hOwpgJNHpZsBULb2c/eRxAB\nnlSjA9HrRrGkDDemOWU0x1bK+Nzt9S2gHBMuQ67GpTo7kT8l+YwQm1AvaSj1\nRjdIS3LIa7faDvyDQD70+Y0VP9v8UN+TY0MbkuBhH7jUU7gJVTRc1xu3bxSE\nr2GXTGkcqzN/yhwDzxkWSDfSNLJI20gBwC+6yMlRzdHYx25Pn4SL1R+d3e2M\nfpBud6wGL1ZwzPH+JH45P/R/vZZAQSe+wqcYK8lGao+Gwyv688S1VTplG8eG\natfz1EGNA7wtab3i6Do1NLqwalKGRItWj+4QwL4m01Q2TWg4Fpk4C4vWjaxX\nxNufCKBUkjzbnJh90Z1QY4bBHBC7Eyx+W/iXF8ZIo2ncOTm1Vt0fPPIgFfLN\nKrpDlsycjAIQgcmRV1iNRxrF4iNkgyZ4BQ61JoLQmbdQ7NpNyf6OSNuAcEtW\nkMAtPj3D008xksVB+3/l+R0xZqlQ0JCEfWUMV+sRc1FYsatyqd7JivISvrIV\nCYc2V/Ioe0ZDEtRxhIaENWXO8gL/tgLgP8j1HjpHUOrysgeEuAwK4kntzE/s\nEQHa\r\n=cnVX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA9LBGqB/qCt4uc3PjdOOcz5qL3H433967aCdHFTUmblAiEAkzsfg5cpN42r2xbHJM1t2zfF8YLYnp4E3NJIhidAH1c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613476613-81172a7d.0_1613476866289_0.07156232940688656"},"_hasShrinkwrap":false},"2.46.1-next-1613477308-a4091daf.0":{"name":"@xdn/core","version":"2.46.1-next-1613477308-a4091daf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613477308-a4091daf.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-0GaFXAwN+GNbcMqMQtynNc1QGaXgQ91n9yz37a7f6Ebg9RZ+6jDgzA9eD0NaQGFGN6TQ75EBNrgVmbhjsnTZOg==","shasum":"9910ae3f87a6c455b95771d919f74cba0c7ba88a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613477308-a4091daf.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK7bcCRA9TVsSAnZWagAAGzMP/jVNucDlqgfDNz64q7nJ\nrtBNMTOSIfctunNMsA96hqIEjW1efoc5K/MbZ922m+5PACeWzJ5ZGb727yxl\nontClR5EDnfnqT5VN68uqA6I3bXZNOETt/BFygLiXbTomHsfjBsosHJPagya\nKtZyTxMxoQZKDHNZUCTSQ2dKdpPFsoRImMJfzvxp/i052SSXsDpfSfaxPI4m\nynslCIAxviZYntfGhqOC70rQ4DzVM8vt5F9Zj+Dw1Drng279Q5nlo9QCipVg\nKvPOAKxdN6W2ZEpKt2LLlsvjxsnKhKnediQl91ZERybomw8D+gD7gpfhhf7N\nNZGtqu7H5/Fw8b3F2g4Bb7xIIiFVJwrfA4oSMDlhcYvl+r/eXIisgMxTbSFN\nEJSW7Ttwv+R1IPvNgtoJImqOTM3tOsky4+9Z9axCEWlgHPajgBTirLjO8969\nTTvVj/b3KjCZhvVbFVs5BTI9905aSC+7YFOsA2CKSNz1e0nbOq8PU7fouPa4\neV8zrGi1Xo0oE8mQPDvvBc0klOs5L6yzxlVxLYuacEW5kMHcMQkhCDCGB+TC\nT5mH2txk8EGkzcLlfyWAkyy/p7K7uAY5XBfNKTLneViuExCmFafWitOzvD2x\n7FBnyQJpoiju7TzgCpilj8vNPMDehlZErYmDzvbIIRZRpfLjQioO4bWPIxi8\nOWuz\r\n=nBSb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHwgNQPO1TVc69t0RCAhVU9T3GZ/VA5AoQSS6hEfNlp3AiAYiRMIvfADQ12QZb925axtmYE1NPFw3C3B8W2sISyVKQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613477308-a4091daf.0_1613477595600_0.3008578814515388"},"_hasShrinkwrap":false},"2.46.1-next-1613478956-dd392162.0":{"name":"@xdn/core","version":"2.46.1-next-1613478956-dd392162.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613478956-dd392162.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-kmMs9Bvg8piXYbaRiWWhGIZ2inlcuwjZD2oKZnMFLDiBPvut8E2BqFG1xmnKy4QMKMv/DnD95cUEu6mgiGquwQ==","shasum":"a1c49137ee827782b562cc8aa5994db24ca2298e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613478956-dd392162.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK71aCRA9TVsSAnZWagAAzOkP/09Ug9CRZjHHKeRlp16q\nSdCnnov0dy4zu+rGkJYe96Oz9cx09z8/kVRrG64649XK/tO/q1Wn0cJQKsMc\niZA0ICBBujNAoPwc5C+uxoHxBX8qZodEBX3eUbt5glnkCoacZ174SwuBca98\nyPrWMIBxVSZSBggtAwrrg4p/0eoca0vxnd6cgiZFaqjsCWlgYrYVGQf56of0\nNwA3C7b0b4o1ihVUtElCLc3vuZ57ttBd8DWU/11KLxGWeb/HtfiYEj8ATvP2\nPNnElVMzNp+/52PlSJfAWhN/SBroK6T+7x7/nSVY3Vs4vZb2c1Nye1Y+34gy\nVwE4WY/3kQVGWClpeUzgDYcaejprNRvfKQe4+FYJNAk0PJVvLnXw46nW11ls\ny1uqPH7nCnDAB4/Dsy/8+PWeTWjP8SHbj5vBTUk6BJwdhIMZflQpdAgolTr0\nBiwGddio1svqL67O5qXjRwyWbTXaODVw7YGPtSiNDzicAwFjrnNTvi1u7/9y\n7tWFgjxVeWcuMKmcBtLgbMyAgr8TUV8QFAGUxKCxesYvABe0mg7N9/VQhc50\nU/K1fFkSCGs6V6lt9u4opAS/NsxxAqzdNj5fBXpW0twEyxtfmQPPHNXO7y1m\nMaF2wJeIAlrK0Oh4ItrkTrJl1JL1yKEvQ1yrZ8llaIvp4XAc5SgkaB/3cLfG\njhpl\r\n=pfOK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEfpg6n+kmJRj76BNGp4hOPqCckiojskUk147pwngqXgIgCTE2kOziAnOhw37KcAIPQ3yIAHwhJxFTOEmhe3IAz84="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613478956-dd392162.0_1613479257810_0.2518878575510126"},"_hasShrinkwrap":false},"2.46.1-next-1613480292-fc16df83.0":{"name":"@xdn/core","version":"2.46.1-next-1613480292-fc16df83.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613480292-fc16df83.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-j1HykIJZCSp6HcbHViW3T29xHEA/kg9W6L1qaSnaCIp3JcKWmOuzdVHeHV5Fos4WyYRBGpREKN7cT8VLU52+tQ==","shasum":"c0de640924cb49f2a4876974d92bfcd7158c9882","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613480292-fc16df83.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK8KSCRA9TVsSAnZWagAAUV0P/j8KFohL1Q6ZQiS8MSMA\n27vmav4/01VPaBAuZFQYEZkZ3opUP0QGsUxk0oS6HqYYQfwOi4WmJFQr9MSj\n8xsMd07YPFoeDG8XRSOtbpGuKsHWGXXSI1Skc8ZWichQueYHVmo3kvD+ezPw\nRbfl9Xcfx01BTbZPtYjrSkgYsSIwp4FwAjSh08bZdCcRSl4A+JDtH7SSVTKD\nGI2biA+k6cO6ww+OyejML5Usf1RmLA51aOFullSNI1xeQxOOvBByGnrn+4/4\nPVs4mfVYJyLr7ZOi6bGdxHB+KxzDqm2ul0xc9MYND3UDN+oybtYKEAbrXslE\nS5i4XZoxAFqakLQT4+fDcjH1Pk06JQv49TJVqmDUrMO4qnFGk3VNmeRsxfkv\nUdjCbhh+Vb55QCE0wEiBJ+V5VJTMzc9ofw57OQM4OA4idwJecky0kYAAWlSC\nGWSqD8s7UsP2K+91to3prbG35TxiLsaPkpdxhpxDxdAnn8ki0mwA26SDTNza\nSLcr6oJ7LUiCg6nRjI48q38YYbx9BVlVoAwUtbGQNtjSuE23YyJkImTuadNQ\nUS6SoXUleJpiDBnSUFceP1i7tAcREuX5A+n9DKxO3r0U4tLkLR+Pk0Anmv6g\nqX7R6xY70AVuqkchMO0k9B5IByt3N8ov4jQHWGBYp0gStDgCP9Trot8KXKyi\nAv+2\r\n=8Dyb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG5u8hBngyr8VMkyFP22sFWnAuK2HhGa0kTTE8bBIktuAiB/R7QKK2sd7Q26snhFPQaj5S2jDJKlGTWNi/GxKauSAw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613480292-fc16df83.0_1613480594158_0.6158609304910905"},"_hasShrinkwrap":false},"2.46.1-next-1613482488-10d65dfb.0":{"name":"@xdn/core","version":"2.46.1-next-1613482488-10d65dfb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613482488-10d65dfb.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-4YCN6eC6sMcNFDVM2EOJXR+F/vSoV53a+UeuSS7OSjJ7psUcpPgqyh0W5/QcfuTu9cCAoqm8vkW6S85VRrf3dg==","shasum":"c3a0bf8b0287d9f0d8b4adf2ecff5d12ff38f917","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613482488-10d65dfb.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK8raCRA9TVsSAnZWagAAxyMP/A0VWL0wJZESB8G3uK3R\nv45Ppq6NRYOFoVoExTiy2zlIlPx8hN3aF6uDXoUjG+wPrCerxz2OiTlAHcfC\nc6mDRSVtzyNEtzCklBGR9rObHJAE6LIdXHHliImiTVIxSq86KsQ2DSwxW4Fl\nS8HQtd4Dov5CpnbBnKI3xApn/+rlfeT8ObCaUYf/lQ2g8xkxbjyoRwDGSR/X\nnVx6MisF/4iRjUF2Yffql42ZWQ81cY96tAACHjG1RgoorcPzAaarqPBtHo+c\nMAUOcSOP/wcKQCSJXhaPBA5OAXuTmp2Get4HIrkU1e8LL+Ni7ODgVeR5y/CX\nOtIV6DUezNhtapLWJu67wpSOWPdVZzwjmnr3ohvntd0bdJtE6FJdDE8pOVFl\nioUdGw9/0O7jac2MEfQvMglmqYX/KqhNqKQMYie3Jg/MyyWQ94QPK12yYztd\nlraHL5osOOJQdXDJBFrAHpEpjvb+dPZpRGBWRxBY7UTAHcnx7FeA0kQ+DUNc\nDYj7pKqTMgyhitA97QbwtkiHdlq7Z/waJ8KqtsxwvSwQpSpPlO8dvM2qKs7m\nCZoasNa7k4Nn4g/hR/DaD+wQ249S6rSsamHLFaVfe1n2G2JNJdZRN6I5fhoa\nBsXLIctAAKlQVNXje2YVd6mHcAb1lezAcANz4CdwQzC3Ka8hcvV1L0DU2jf/\nqrsb\r\n=zVt1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5eZ8konXZHVcXStGsrKbQGkQu2stFQ8nmHdtvFoN83gIhAKVzpWR3et8P53jp5E4AMMdVV9n3w3eNZi2LnB6EeIbv"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613482488-10d65dfb.0_1613482713914_0.7350307705470354"},"_hasShrinkwrap":false},"2.46.1-next-1613484858-66a1b714.0":{"name":"@xdn/core","version":"2.46.1-next-1613484858-66a1b714.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613484858-66a1b714.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-lTt/eecOlKQQ5gur81M6nYyla6M9CnNRKf+Cln5hrEYNwCdGUqE/bWxSD/oF0C3X8NlRDCenYMPT3ItppaphxQ==","shasum":"449f864bbb4acc4fac64f8ab2e14c9958f0558ef","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613484858-66a1b714.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK9RFCRA9TVsSAnZWagAAuzMQAIbkGkQkfR/QqZjkAO4O\ngFwvOeu/ZvWEXHZXuWVLKH1eIOdhZ+01SBF0vtp2tCsw2CiXLis3vh73eunV\n+Ce1sKdHbs88ra3OJsgHA+vG/FizZCCUY1zFh4vfUrE2Wo2xRa8locibOgnD\nKCn8rRRYk91bIAeNoYpgrEANJNtFDOrJ38coGCeK4p063FwRuWcmLmLhj7L6\n2U0mXwCG/G6jMrombLq0ys+2rO/3QFMFRJ7oKcqSap7jiY+HVoZ0ffmdV9/4\nj/inA64/BOtGpQyTlr5T6Ms7Z6GKJb2bAZ8Z4vB/HOYMJgwGTcJhTHkgPSNU\nEc5Kp7YpAgms+XV1I6jl3DqfVHL9UFApVNHKjcCEW73xX15VyA0dvKn4muyv\nqBDTPUAt00kB6ZZO+O+Z2f3/rtl2iOaAev+ex0lP5M8g2MZcExIzSMgE9l2f\nNwUA8/UsG5WNnHYCK57T7QCd5B5cdyS8Wf+0e3mWQZExL89eY3XfUT8Fhldn\nlcdiBKHPf2DoDSBU/s3p1oS5gWnHrlJjL/XTG2Bn8G10P5mFctLDX+Xtu+Xw\ny5zinNUzLlJfNYtDvb+3bFFc2ZiRmV76VDEwxvkDKIFrOJPp6HKm3Ra55g8N\nuRTDAstXcJfbaI7BC9biUwR11NjlU9V/h/h7wMK3L6SQcULJK4FHphK2M3gf\nS3SQ\r\n=eugz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZdu70WNIR6BgqEHrUJHMQoOS0+TL8bgxJO5SXwFV8CQIgehvF4WQ3FptDlFHGP9OqKY4JmIUgBEMxT3tFxPrG4Og="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613484858-66a1b714.0_1613485124322_0.15809991582039284"},"_hasShrinkwrap":false},"2.46.1-next-1613502013-3a8591bb.0":{"name":"@xdn/core","version":"2.46.1-next-1613502013-3a8591bb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613502013-3a8591bb.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-MTJTdwn75KToey3gRdg66V6BCHPJT2oja7cG/HDyKTHS2EUA3GcavWMcexiREYx6088YQ1WX4D0Ni4HpiZPLFg==","shasum":"43c225aa26eb749114b4d5cc83c2db4d8b7c8419","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613502013-3a8591bb.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLBdNCRA9TVsSAnZWagAABSUQAIX1PlNWmCuMP3mXKFSo\nq6ccGzpj9DLcPGGt9+D0vEQbxRsW6m6OMkucMeH1E4IDzQT0qr3rowwTcnLu\nBKzpqx3kaSJ0YrABODRh5XTVeznQ9MoCjPGicvAY3qwkEKl0Ns9oexjs9W0j\n7V/HWANdQtc7jCNfaiy5EwrySePz1NWFmW0/GEysFIgK0iAWdm7RgPv9br0Q\nAzSh5vURD65tCeKDL/2cRn+pHUE8oiemn9Njrb9ocxQ/Z3bPB1+hCYeaTi2b\ntW4Isir4FedxOXcCFWIUQWGUko0e2R1tfLheZtYbJ74jbCeuKPAaEtgHHneN\nnRVy1GM46168rVZpvYG2qLtRqqF365w2V/vvtfqabXWXajr+EDyihML1/tHc\npDOMrYRv1y5QkSUPzY1nbj/wBHu83wDzbmvACnNfFpuKuJp77XvRB9Mr2QnB\n9yMc4mlorjfqiwyVOBfNj9BgiKCr2n8DUUq1fgOC1dGcQGJZ1hI07+aZWmtT\nZ6+KuQ9qYutyAsEeu41kfgOKdwA0KygADG0ALzNJl1V9PgSXXZeWZITYZbNT\nbaKlGJn+wnDf5K2R8BaerghpZQ9bF/4SDkHNmU9i3XE4o1yUKzNQaTj/c+9y\nvxO85ruCS3d7PhByiL26VWLgRvJ2xAAn8c31sKDaAgMgi9JZR/nd1XK1nv+j\ngV7Q\r\n=83+4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGO6bTyHKz77qcbXYo+0HbVqfAF8ddh1ssmHXQAeq8F3AiB8R/h9j/7Zkv8N5ZVvBfFvqrEVcie+Qf0eIyQzhLgyoQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613502013-3a8591bb.0_1613502284645_0.6336678236550932"},"_hasShrinkwrap":false},"2.46.1-next-1613502365-d8742f9f.0":{"name":"@xdn/core","version":"2.46.1-next-1613502365-d8742f9f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613502365-d8742f9f.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-xmoZwtSNaM8FFJmYSr/HCzPuDl1QjF1JjcE7CHH2gfOuBXa5TL+cHuEknkyM+KVS0EyXyA8jgjq/IfHmdPH4Sg==","shasum":"f490feaa8092db7989b59a9a53cc3cc0945974f7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613502365-d8742f9f.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLBi7CRA9TVsSAnZWagAA/YcP/06vSiTQMeXbkBMVs0Q5\nlcKqigIOFmcYPsW+j+lRvAz5uj7hDYTXZB6lxc1Xk8NyGmCFBhewD0GvfLkk\npJWMAX3LH98EPoiyO43/rTtCRveryTZHRVzcVU31ocnV53uoJJM41hg84IHJ\ncfDA4u/dISWtWfRGuJnaFeUTetgt1vf8LMlc7cxrCsEYco9BjrIao75bplLp\nJLJ40+hPt+sZYLTEvgXyoPvY65NLeAUA3xL1y+n3HbHW+Bh7tNR6cmWSF6dv\nmEbGn12Fj8X7t3iwHIkpx79Dd+xHgsFUR7DzD5Crrk5P3M9AHMm4pu5Q1zyh\ngw9kMsI9oE2JN/muoo1NlLljJPUI7PTc5oNA53Z2tAdWHakZBeRQpp1w7YNC\n4g+TvNdKVPF469gtUP2jW+Deh2QYoSKyYEcxUtgrhJnNR7JUEGkezB6eI15O\nEjSu/IF+5NQWQIJQTfB0/mITHrewHvjaxb5xObfzC6ZXrF3qbH3a8J3M8CHG\n18Z2BL523ptQKC7wFQEBh6W+eExPTuEQ4ioC+Z+82AhI2Be4d/jew1iWdS9A\nfOaV4zqh5CiuCc1NlT9RXyvkXMtvDi+PTIXeHI7/6/26OBzom4++SkE/LDvR\nx49D5WkMF1dBP07QU/Iv/39u5I/9oUv76CJeYQ8cWxobCgOXZlcbmD5VCwqE\nOo4A\r\n=ouRp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFdbobjKD1Ws52gzqmotbYX4GJNZRqYp+cR0yjFTrBZbAiEAhZtRpSChUJCzfw5nZwofD5p5lDkj/Krj55jc/FONvkY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613502365-d8742f9f.0_1613502650792_0.35125374123200714"},"_hasShrinkwrap":false},"2.46.1-next-1613503630-e51a1984.0":{"name":"@xdn/core","version":"2.46.1-next-1613503630-e51a1984.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613503630-e51a1984.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-2UZa+4G88wg+NvqeyZ2jxZN6wPPeRbagOhVva3d0IRYziTzUnh3HPzgzKLCRUkvVm4ZkQNrG9xqPuPU9WhDtLQ==","shasum":"203331244f5a7550bd0729f3d051f2a695e23a41","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613503630-e51a1984.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLB2eCRA9TVsSAnZWagAAQtQP/3uUWpu7mXvfQs46n6Cj\nFZyPhHbuYSTGHVYBPaoQTjgSezqjFRJ//7VR3qaeTk4oJrRY4ugLz+7TMeYV\nCcdv5GzFPPrPKm9rzQxSpmH5sVN3ZOX8nrOILdoEy5lsHX934JLEWBRZmbKx\nAF1Ul8Rpj8Nymw4uAMGVDgEzKB/vli8sHah127yiqvvMSBgfKY3HPpbdaDG7\nDpX891F2ZIZiNzJ8VRDZeqFkq0pLYsQUPbW/ZwR+Np3SuyNZa8JbpB6X2MTO\ni7QsIXJEj8tzuDihQez8y+CAUdWLxmpgUj+kM0tyah5uwEmByhdVtlc2jhTn\n92XT5dV4mkw8smESUnGd+RKXrlC2NC2O+KwQagZn+sml2PxdWtgLwxeOqy5o\npshptUMkOy/BxE75GFO6CbweE/9KHROFeFWW83ZcvOT8ECWeWFmGXWuhpb1x\nUzK+4Tj5luunZqkzR/EgNqNG2QMzKaAEwwdvAz+yQJ0+HgioFv8KWs0mas+R\n3m1gURlMw50JoGof+MIjiZy0LZsq+mhlocAVg8YjD+8zVmZodldhTuCPOGnN\nW9xoj3OzhmkPxCh0gdu5GdM7s21bUXUMh68Xjon8lltzuW4jBJ/BlYO7DbMO\n/c8jwFdJ5Md4nxuUrC1gJDe4I1f+ohLvVxX93uKn9Z5B8iw2TivpKlAwhqCt\n16jb\r\n=HN/j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZm6Dl3aQKTFxWK2gTCUPBNKIjRFGpd3XvOOZaYqzT2wIgGlOEzhm5JlCI1HUloVyeTgl8mFDB8k70+tp7A7lnAwk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613503630-e51a1984.0_1613503901950_0.09798211299126458"},"_hasShrinkwrap":false},"2.46.1-next-1613506597-099e089e.0":{"name":"@xdn/core","version":"2.46.1-next-1613506597-099e089e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613506597-099e089e.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-Xpl0SLph4hv5bTd977FQ7a4kGZNoMybA6q7fCLfPnjqy3bPKnbk4gdyr4gsGyLnnKwlM8U39KX5eyVxJG7KsKA==","shasum":"1205d35a346947c6ec2529947745941562369f75","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613506597-099e089e.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLCksCRA9TVsSAnZWagAA+u4P/0DblSR76xquK8airaxM\nrqgreSDXuVjuEVKek8HnePDIaDFEoCDOOw10aYG7+HF7XkdODoLxoAz4Wo30\nGuSwlAtwBGDo0kYphEWrRhVcOPtM+Ex9yCIdG+j6CmjFstpfaKZTpN4IbVWe\nesiy5viroGyEF3ApriXJaFhfi8Y/bKlcTsiW4xNGq8kDiBQJghhr1/6KshE6\nbUOZhCC4k01ppR50FhTCrV8DLyzSDRW6gGNhAlbRLby1pmQjtSWZxg6sMEyn\n4pe7Gaga+1JI2el/0FIr+Yl5N+axeDis9+DwtT6o+pIfIrul1gysDymD2oaU\nC9VKza7fCP1W+XMtODXYBkknZotJ9HCZxbrvsWEWQxVxO1P8/N2w8DyBZjKt\nhAs4E7oe39ipo14IpXlnS+0kuQEPLfYfUTSUfqXCt78LYOdTgzW7xOF+em9f\ncvCJAHwgXe0TJ3GQrZRicJqhfC14REBrv/yI21yGBlHdqtNvPTpE3G8mK7r6\no4JHteXlxGypfykQjHl9HjzTkuI4EyiTqh/en2U1GqvUQZdFEOF+Z40h3ImC\n5RdcglVhgoW1IJN3CyQug8Rkh0u7vlbaLO9407xzDGdb+UQaUO4S088qKU66\n4VRDRWaM3U5hcFT6dgSI+rSGyfp7nCZrw//EFjIjEv66A5aEnVU9+HRt8XuD\nDToU\r\n=E1Si\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA+/4CMTlps8PU5+8GQt1fTvz5oZCpsiPv/Fp5bkhsY1AiEA1wUD5V2kdgjAB4v/0fVW8ICB/deRngxEAc+PxxxaDLA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613506597-099e089e.0_1613506859281_0.1930864581941858"},"_hasShrinkwrap":false},"2.46.1":{"name":"@xdn/core","version":"2.46.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-vYWgEzDlApCqBY/LxOTHccXMZNPsCFZ2y7E6XaKaRLigvdG+yL4TYq9t/KBGuymAiUDyOUHxNkHdKmJ3ZqRZqw==","shasum":"69018c8c6685f55fdebc7349b05c0693c6136e34","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1.tgz","fileCount":179,"unpackedSize":664378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLCrGCRA9TVsSAnZWagAAssYQAKEC99Gdztz8fmWvM7Sc\nskShi7osHi/woXkHep1XgkoyMOHsilULIgvXmtyA0o/4IAuags6XOvmAPK1p\nuQlHNctMqCLGkcSIxNwRVAEA26PjmwdVK2XBiP+mW6DuHs3nwMmb1LzM+7Yz\nSrCJSAcWy0jQj0WaHcsh9UzBtEnJSX1x+B5FBsGxOBj+Mrbq2sUnPk1OhN16\nNb44nCEkNTGcCkLZCrX2c/LZacAwJRsPQ11PjGCVJM+QCMLxVOObS5J+i6Fe\nPg9AjUt1aEcscDxVidTl9PSqV995LhRpz/KVgTjfulKZrGGX48eCC4H3EWi3\nhEqLDkE6F39W9sQzIMWqpodOkxcqdLj90SqO9ybIQiqOlFk/87cpVe7zrU1X\n/tk5NfPFON8AmFV8AbTB+WyAn52x0ey0/MfdwzcUnj3LiMiOF02VgEMIoyLq\n8YXRsQrJVSufbCaj9jJlRV/29+QHYXDr+Q9u2ogiCjaa3g1ESDdlrgvp2gSp\nCuoEEzdCIqvRbRtRVI0x2JXEoq0WjwdVnvX0HDNnJQwMVSYRals2nfQ1Ah1Q\nO9+zsLFRUGc9GIbFTsYrn3dmTA3fmOzWQGyhd5TqzQe6XyfcvMcn3MFdqX9M\njW1QejcoE25jow2D3bAT0nnlnPloAzwOw7BA+EUAePdHejWGrni9lT9Tt4ey\nPca2\r\n=cSWV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHDdzChSzwx5VdvEPrExq5ZSdb/35JBhbDGPCgv2L0sFAiAZl7GEicpvNlV/YSy9qXKZwQfvfVHX2GEKXVVbDfQCVw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1_1613507270090_0.6876381072056557"},"_hasShrinkwrap":false},"2.46.2-next-1613507121-2f83578b.0":{"name":"@xdn/core","version":"2.46.2-next-1613507121-2f83578b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2-next-1613507121-2f83578b.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-5+Vr3nFaAohNdMV+T5CeA1yqvY7Sr8W1+anxFcEPKK/cM9VnRsunGFibI5hbGvzETiK29hJputRi2yqVUFSREA==","shasum":"af1fe55443deb03a48d9561317f75ff8f7a06f1f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2-next-1613507121-2f83578b.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLCs7CRA9TVsSAnZWagAAZFQQAIk1ln5BWBIUBRlMbVRv\nLvE5qoiCsCCz2iD0L5dMw0voQeMGWQoq68XgzPTD8kzdeQwLfRufk/tLgEcB\neFwY4Jas3TTJHTGjQY2dwur67cCc2zyIPWGAS+BnYbrmgJN5DZs4bSJBPCqV\nhUbiPiv00XQKGyNCQjKjA9ZuCY3FRaL9Q9OVhrZ0ASiik8qrYe4limqJqmBc\nywNCtSjyPezuSZYri4BaMI8jS66UywweYwRgBDXwMOO+v62p2a70O9jbpHy+\nKaNoHVIHx8zZ4+depyurb+RX+w/OjJsENymDjRwn+/ELDOOFt788nHjEOhap\n/WedG+nEhYYzszeyuCD2RZP0Y9wNanHJCeFL4pM2ZSsARZluR48iuD8Z6s6H\nDyChm4nlKrho3/46ND7bGqbj+aoPD/C19h5Nlc7phOYVlz+qYzZ589RcLj/X\njr+oWzAtXxv65UqqMxyrOZZUx3JkCwYfFPBAlBAoaNHDlYsSue1x44DOMGNd\nOcqBw/jD5j2ICxac8o8nCDJvX1eZ0EcJg8SmzfuYdV4cNUGJdP94FlKzjIIJ\nPyEYdGd8SIPFE0dzkStXOGZ1POeFqXlQs3PLvyDS5/W2mDiOmu5f6ImggliD\nwnIcdwgkc4k1LWc0YICyOjQkjiTwtJfVK86AEJhLn/LgSTceWZpIROgQwjX6\nxEsD\r\n=ryKV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICNmoq1xJQNDCsNEo/7zj9STqVE8WLiWyUO/kPA08zs6AiB9TP5ErmT20mTNSQXrc45KHrIEtTGKKeszzY16LX9WPw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2-next-1613507121-2f83578b.0_1613507386591_0.2625392502593893"},"_hasShrinkwrap":false},"2.46.1-next-1613548642-d8742f9f.0":{"name":"@xdn/core","version":"2.46.1-next-1613548642-d8742f9f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.1-next-1613548642-d8742f9f.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-FaP4Ai5rd1roAkrMSz4X7IqfjUCC7xFycNwBwBo8DF2Xs2WSIYM6wyGC+zLAxpgZrhY8YWeriQdylNITEc2oTg==","shasum":"62f84e9a69adaee7a6e2be7435bde51fc2d01be4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.1-next-1613548642-d8742f9f.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLM1nCRA9TVsSAnZWagAAtJ8P/jscBAvYK4brrmqopiil\nZyqR//VPO0+z1cMpC0TrYlC3/88PtcpNXqJSQ842A+fOfeSDM5mBQT0eora5\nCID2zGPBFt0thMNUMex8umKaaD88pyLOPCHPYAfNjCCyedslzyt6pLlm3L6h\n/2o54e1TaAZMOvta0SkWmziJrPLlxD5KWH9lQPurOi+wQUnVPW7vq6XHiJFb\np/ITT9zwWZu+5ikYXN5IMBkBq3HuOnr6W1uq3XPtvFDXLMcSw1FJKqEqEcNG\nLv1s8HQ2LxqnEdAerajiXTSR/tWqbHjItWpnRS2ZCNR881uAROJuFmcnQM1v\nN1E7EvFugDItMAYue3QUIPxjN+G2cCfHzGSWEGYnoAuGwPEWPz+wzElMyExj\nF/a6uqjUzmq7olSOyTE7AyjfKxng3Uig4sbN3+qqx0dE4hDNw4xLMkBMYoxm\nTZEtCAvLPDBKtMwjpAe/2imJN/qy8DXEtTQbI6slwibG7pvw+HIudzGR5cQ4\n/prw/99Wp5OCiUvffxL78N2LQyQh82dAXvTvFXbiamuWCvgaB6fg7pzOzfJQ\nPvUJn8y7W3ki5Jd4So63+1AvREt74r33AeNwHEh/F1n/DE0eBf+QWPkgg6YO\nh55hom5/gRiiv8kIiWEbDUM0GuPfRKpWFY3OW776c+V2Gn+T2fLKBSs3460T\nebF3\r\n=xDfv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGkbHT+UZKKs9lhB/eggn55jHRxsOzUR/F+qU7AZJs8lAiAVHsJLlBVs49BUOzl3Sm1B4C3Y3PHnDvWLcw4fb53eAw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.1-next-1613548642-d8742f9f.0_1613548902655_0.6207969138102583"},"_hasShrinkwrap":false},"2.46.2-next-1613555470-5000ac99.0":{"name":"@xdn/core","version":"2.46.2-next-1613555470-5000ac99.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2-next-1613555470-5000ac99.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-9NDZcTW2NWRBbWvJlSdF59cnini25RHjcckB801VdhzLo8rQAklrwFbAOqx4aK/80zGNQ+fl1FPjTe0/25hJeQ==","shasum":"1611900dc3514442918bb0b70b7362aa8da0f104","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2-next-1613555470-5000ac99.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLOgfCRA9TVsSAnZWagAAqxUP/jYXW/2SjGSR6GX0TEzJ\nwY1/TlO1jwgIVbDovdbZrimPWx8XEJUammsrZw8zSNymfTOvY7jPLhF9kspN\nRFI6bu4qUTa/NW7y/7KkSnIG/9Hkrn4xadRuGbHDhHYQTbv+8vjBZoKZIR71\nc7G/TLoFiOgYjOsPSM5iOjNFLr8fxnZ8/vwUA47T1TMfnH43oMjzgVut8JOC\npjfx8BfXSsTt3E5BsaFXNOpAY9COOWaAkNgPT/05gfRaACqRqFbN/e6bopGu\nnsUM9d6/Ywy7atW9GcZwjQHbkG/aftmf+ERbS3ya4FEoa8h2Sc1C68lIRLrW\nIRgqqHQ1z6l0Vci2VhUwKEgYUY7NzHkI3P9+q8SZYZXF5jerU1bEZ3VTlgd1\nWlg3uXE2g2EicoUZbrKpwBYI3CMCUjseebb+6mS/b1d2xhLu3twta6KJHqgY\n1QCnTETNWamDaITNehQHWpHBgvllRJEvI7v97W/iyJoA1YcyPPHIEZpqsPqR\nEPHDfaLhP5BmmUbrTrAqhI2upOFSecL/a04JdZ3fH23jO6BqeWhttsl6jS2g\nmNOWzcuchjQPuLMcetu5OlISJXCWvYUMxR+Qlf/Sd1mexn98cRd6Xp9xWRsN\nDYIoPF8iLxNYO3RS4l3qyqwVVwNgjImzuzo9If4NWD0zTXdG1yVNr6XjCFBS\nWIjf\r\n=WPRn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAit3fCVTDI4n25mUNkwumFQuBM9bTCFPo6Y4XKpLfRKAiEAofYSbDFgidZQ12R4Ugf1KylZ8z/gR95vHN8LryrwtIo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2-next-1613555470-5000ac99.0_1613555742578_0.4457130087793306"},"_hasShrinkwrap":false},"2.46.2-next-1613555722-1d542a18.0":{"name":"@xdn/core","version":"2.46.2-next-1613555722-1d542a18.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2-next-1613555722-1d542a18.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-rlfAd1bxXNHmPRhnxxUOpL3sl9joX3CCjgmtZ8bn9BaRQ5uujrSrvC8RrfcT+p1NYSaMsHCLWAEp8ihcs0jpDA==","shasum":"4aa13db5c762491ae3dffbf1b56ba80113df1786","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2-next-1613555722-1d542a18.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLOkYCRA9TVsSAnZWagAA/rQQAJdFLlyXHBw3YeosbU42\np4wiVj6m1y62AOazz+YOxrBArIYkWsZGQJA7J5rx6VS9E7ufEZ4w5DkA03KD\nekH3uhR0XuazTBc0nkMWqPtmGcHkgrDSk38Fe9ePshnv373+Imq2xoMf5rbk\nvIV8X/aFVdAGsoNqEIoDpnh6nOxfOCfdsqq7l0AokF3CF8AdRJ+P7LAemQ4V\nwPisyS2Fp117xS6p9+pi8ubrx7YLuZ+aJONDS6B8dUoW0LnL03e+ytWrmvdZ\nJzRwmaD2FeRwhRYy2iuTXwFIgBWmYPSVu67R7YEiFjCH9YzSDrRKBNjVLj3m\nndzglK+D6nFhqUvrUlHIfN5sGO/oDUc+Rx34MNSPHfQhHahkLcKNRpKJxqPZ\nTnJSuSJjUYrfBeTi5NPacik77i3EOWAxq/PAe/EoCs+1/nl/rjuP2o4VGXM/\nQ/9RVPXdbOL7UXMSI4y6N5Wsfk/ljZ+FieBpYWLfdC6gc84VTSPKPRyCtrJT\nz3ny4Yig2jiQc3lI3DnI/sYoa7IwnEw38U1TucWb0V7wxua8NiB7zlH3dMxU\nGOFYoA+kHonJ1oQw7qPzJOWbJS8m2fvi6PW0YjeMLxlLVlhJMNOBTCR2/7fE\nGPAB56K8IuShuBbwrnfiJXQh2l3yfBEIH1+e4OBEn7uNaCe9zlEZeArBQeXg\nFQWv\r\n=Fmnm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB7uYhaDkR/AcgEBvc8E8EX8GG0a4j7adSsPLho7UNjBAiB55HKnJKhO2O6W8ly3e6UR9DqpaaxguAEbLxL512tKbw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2-next-1613555722-1d542a18.0_1613555991992_0.807392734389528"},"_hasShrinkwrap":false},"2.46.2-next-1613556851-49b4f1f1.0":{"name":"@xdn/core","version":"2.46.2-next-1613556851-49b4f1f1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2-next-1613556851-49b4f1f1.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-6JrShTQOGJE3PlFXaNFHNZziECAspzpAWNKgoA2zZItuDjxObt21Yqzuqx18vHBsi1eCp7H6uUh8/QtEMMpXcw==","shasum":"781e98d0a0b8fa398a1bb1bae4a6284bfd810ac3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2-next-1613556851-49b4f1f1.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLO1eCRA9TVsSAnZWagAAeDYP/2LjvsqACbyCGo4VwdQD\nWGRnzwXfHTX126fp9BAncgpKZ+bEcVMifho9D/7ml/ltnHh1b8DK8sFSoEhe\nXSziPfO3KRlTO42fnbUXAIRxLH+tcJ8Sw/v0Fvwgs9QNrWoOSxrgXtyYhW0F\n7QdA1Wb/2r+jVIfc9jakhy1xUON6hdIj4asYuNPCFSosgy2BTBBjDhq4r/OF\nqfibUqUU51kcvisGftktMxY8tVCfVNeCRb84o15Fz6aIPAg9VZFc+V9gzibv\nFjwIJd6M3fdWBk/P14orA59BZ8N26GQn0OakggnQIbLGIQ9Opffg7JNo03/t\nIRXyyBDdQEaIPM5zZzZI/qS7c6lgzLaC0vOvJFHUZJ4zvxIkURU9n4ePr0C/\nZXYQX15eyaRbwqyiRKXJblHAMU+/aqR2uxn8Tk/UECFvu+TwjcwZ+5sxoBbD\nnfXLwRCgwwpezQfmUvFgp+LH4oV9Wdv+jHuriiADPJhlR741jh/7eOsKO/2o\nOFVGkK4X3IWnrQ2FeQxBT09RpB3YAL7cJEud0iJXhcvUa+hAV5k8NxugFtjg\n6PCrSP0JF0jvB9YzWVraODzM7pmUdCMv9m/LxMwvpFwJORu/0AVvRzNoc/TN\ntqrlR1OmI6iEtJA0ce8mX3cwngQsdZdSSnhFayJjrpMniDJ7/nl0i5mcVsx5\nT/Oj\r\n=6LnZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCt5LdgrasWdi9/zlPsFPxQ4zXthBzOAnjB+ieAxO+MYgIgA57tMTgLJKJrMwTla4J605cS1Ny68tSFXxgg+kOmKsM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2-next-1613556851-49b4f1f1.0_1613557086140_0.6099442457700612"},"_hasShrinkwrap":false},"2.46.2-next-1613558736-7caf1ada.0":{"name":"@xdn/core","version":"2.46.2-next-1613558736-7caf1ada.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2-next-1613558736-7caf1ada.0","_nodeVersion":"12.20.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-c1ujksZI1ci7Dn5g92uia8mqMa9+OXpRLnzolEsZL1qbqGlPFNvhi3DHs6EbMo8GbEdYQHe23jsEZymT+UeUaw==","shasum":"e1688888b584af025b88969ff47b76d0b82e55ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2-next-1613558736-7caf1ada.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLPTHCRA9TVsSAnZWagAAHQcP/jA317FxMfjAdODMyC8E\nq3gTekIOraFXqG6GxqX5fQaAYo5f0Kv4fwKqMEXV948BYoJmihHpoqD/HWaM\nRjyNQ36+wbYXFZoQFlUKj51lrsSGWYS4oisF0KWJuXXYrgkm+57FxWOfXSy7\nrOXpPorutgJv9IyY2oxRmIvLa+faBucdBXs1jg7rQbeUa6Slrtiy03EJ0YgI\nqpc5TYlhrRxiHmveuagoYLZ2gVxskeVCqQwQPvlaDM39D3g5cW9neutNoxE6\nNwm6YwsUmnDhN4u2GjLf54kLcAZOM6KU2gezmVWUFjJe4+sTK5XfjE7H6lVF\njJkHsn3wirAW1ZJz2+Ko3zKdTknMcG1bwwlfw3tQ0gNW8t03ryAdYQdT4Xgo\nu1vHEn7Ej/ozvMBfrTRw+VnR6yo/o6nKygBegDaxbM2xuMnL65gUIV4rHKOA\nDtS1evOPCiu94x0gpnR5aPeZu7lwNU+uGM2ba2NGq+UpuR5htPGIPNKeYrPi\nJdjlkIL6lFUOV2jLf95msaNoecKdvYwl3bXBpG087V/dxYxa15qijXpFSkY8\nhZrX0RNDGyhxz5Gj5y+SXtmiIRNwNZi3QUSiaHwqVH4L3S+Aud/7MElIcVk2\n/BGOvhJ10FNwta5bNemZFw5l3XFyjxoi1Z1vFbMtL0/i4HUlgOm3/SPS3HBw\nqlI5\r\n=QY0S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsaReAcBQSPMgjdoZPnXp+QH2ev3xzl3L+pPrT4LLh4QIgNTuDT292vlY3yCbohR1TfEA+342VFZ66oFf6j8Wz5C4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2-next-1613558736-7caf1ada.0_1613558982965_0.7785989904132455"},"_hasShrinkwrap":false},"2.46.2-next-1613561160-1071c8d7.0":{"name":"@xdn/core","version":"2.46.2-next-1613561160-1071c8d7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2-next-1613561160-1071c8d7.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Kizejxq9azoN2lVqhHAOyqDJ2khGq4hzDv6bteozNOo0TK068xuciG8uLC+aNfPSCo+w/uxv8ng+r+B+SR1U7A==","shasum":"896004b6e5d7e61d3651ed202c455519beacf60f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2-next-1613561160-1071c8d7.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLP48CRA9TVsSAnZWagAAloQP/Rb8zEwAOrKDMH6bjSly\nVavNUXwPy1/4uWpdDcvviaistwV+726RUMPxW2zrWUgjCSgsePTfOMcBs7AQ\neReL1XrckP+viSYDil+2w2ahmql5/hu/OodqIpmq0JcL1HtULMFb7E6+Gx5H\ngQsP23Zt3jyuG1XsQSVvxTgRJVrRwS/MtKha84to/zUKCvDvFO7oP7iGqw5S\n6UfwdY8xOzv+TtsA5rpS/Ocdg5EXg2xEqT4f2eTV3vfXWnz3j1mWh2Nkk6vU\nJqGt66tl8szJ3SlPObRv7tUKv2HriYatHQpaQM4C3Oa7PBg/FfLG0pMWLdfy\n/+sNgs6L6nP9ExADJhWe9uYZO0GB4sX2zKfxGYjWS5Op8crTXxK8qSwm9vAo\nZ9YNRXxyRM8Rg2di8ckK30304y7ntjultAd4IOfWysLBXHG/g+UuRz933FHY\n1mMMP4IIrUu9zurEbCWZodyto31CrC2gzfm7iEvvr7crM39ZLOU7qbb70T7R\n1J4i7DQmvDHy2ifbB+YcvcEDj5RqEGKRNeYaSfD1gxjniu4dbyw7WGhFMiHE\nYUiBsgCCL3SecIzpBQy7cltBJMvqySp4BBboru3r3CzODquVahFjn9Xg2act\nXxw+qnYr629Cwd0Zgyf718D07L0F/mJwFghjUEMj/y1e0yraVk7fBjmmV6OF\nTyNQ\r\n=lNT+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfiGDZ2EzE+5GlszQVG9qG8GNH2DZao1okIPd2VVcgUAIgdXWHRWSJ+q8BfCGmDg5qV5RghvfU4vEkg4ARRFmAnDc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2-next-1613561160-1071c8d7.0_1613561403379_0.8185729996876578"},"_hasShrinkwrap":false},"2.46.2-next-1613563334-a5cc700f.0":{"name":"@xdn/core","version":"2.46.2-next-1613563334-a5cc700f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2-next-1613563334-a5cc700f.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-KdNyZo1Q7NbO4QpQnGtWSPg2V5uCaF93R0QdmpR1qkaCNWo02vUBk32Md3zd+MD50zNcEbmwF5wEASdOavFMTg==","shasum":"633f7db90a3448a9e02d8607bcc58aa2698c2606","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2-next-1613563334-a5cc700f.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLQbUCRA9TVsSAnZWagAAUIsP/1fuk/4SENfBjamTMbru\nUnyhMhTnS8W8LKtTxmEWWCpILiD/TCAKh/jUdboh14tQC7TfWRTuMHvCikmu\nOYUdoxiujz9U7bjtrwiAdHT3oIu0eFmo4WlhtUfHLu2sglNBeln3P1epfgpv\nZDnx7pFBe+gdBs92xTzTJ6exMq63aXEaZ6R86gLx8fwkjAwWywXQru4YqOeC\n/wTGtM675aOxENYzMZ6tAW00jjSz+3/ffuPdUH7bVrMjtX+sATfYBbLjndfR\nDVk0nnZbBACXm3j7pHgOn8pZkF2k2Pvi2t1ZHjhJGrOxTZQ2OiBANxZpo7Kc\nnkYrv7oq/BMrVkVFA5MhEOrcI856nno8tC1mB07dkkrkd1puRrULAwNpH2/e\nx2PEly3dG7qEzG8WhEPFEflIaPAh78HhIjL9QBjJV+2LrU9H6caZoUquTsOp\nC/vpwTyLvMJnKR0AyKNln8IAGh7bXrfo/uneobzJNq6T5Bb02XHaN2iJ6s6+\nlmTo5eXw2t0lABlJuEUpCKOFTmI+5tJUglwTgJLOMSquiaBUKkmOmkQBRVhR\n951WSyfbFC/dD1az+Kp/f7HWZny5GapnrolbZr5y6Eg6/1+UQy3lQwNXJzva\nSsun7HwwT/Lkp/rj0jF0jCZrHfOzMvgRgAc2M1x/Y1UQxgyXMReR7NoaJjUe\nl+S1\r\n=XGqA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1T5VYQwIhAkcO+2A8Izi1VgMXENupIyyUC0uovs+IqwIhAMsp9GgghgQ8gwZrOw1oOw6wq2BUedOQr/nYG0lgKJOs"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2-next-1613563334-a5cc700f.0_1613563603910_0.4037783129457233"},"_hasShrinkwrap":false},"2.46.2-next-1613563536-db2e3509.0":{"name":"@xdn/core","version":"2.46.2-next-1613563536-db2e3509.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2-next-1613563536-db2e3509.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-6Gaw3oPe0TucZcRcgliPIFO4nXnBdl7nX78V5s7QBqA4ZSq6n3MPvjfOL3JPgis21wa5WJoVWOSdrfbmIL/Bxg==","shasum":"b692cb3847d77a67c2e98381855cf07fb12ee681","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2-next-1613563536-db2e3509.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLQewCRA9TVsSAnZWagAALBAP/1zk+0EH54cPVsPvs/Qq\notWWbYu5dlAMv4ifqkOdp/Tf09VHirmKT+FyV5A1eiOazMbSYIrigyv9s1/5\nSTKtVADXRL1Gn/SScwX/c9eJajPytBY9WcKUtPtwTCZJo3PEMxAC9VmUIBDM\nvbR1/NaPVXTYEXif0qRXe5bbgGTb+F1GbUg2kmynQ97PFEhWGdR31XJwGbPo\nOpfCPLuvZ8DuN3NdJeZ0YWaxW8kyxrDkwJ/NgdQ63DCXQIUcvadq4YUSxMqR\nCWg0l1sB572XhduzvaHQIxMUVQ5ov3TeHcOyszYru1S+Wa52LA0vr2sPZMmx\nSXSTFGV+o/IXw/lgDcRIbGVGAVOfJ4pYOEGakMNchAHUbeQd7UYCUpzs5cO3\nM+jAnPKoIG5jS69zS5111qSJR0M1ZLc0NFCp7M+9hySEGW16pKiOu5G6gw0p\nqzjTbNwT8kaQ0kD6aR8+sHwVa7DPwso+L+11NzWfK1MJbxyTZ3KVNk0kc+Xd\n92lK9EOhtrbwrtDW6cnH8+2gsJ9wFgeRpeqEHA7qP4KV+rVbYW0JvSu5d/ML\nGdZ+KgzNAzrEtr4UfO61UQSZ/LzY20CZ/Y66U0MUaX9BICfNmxG162xVzenT\nDyU2OvQrDZxXtjjDucbTjgUEFf49na7oERCloPaP/UeI9FBmmIQ3cYYqbRjC\ncU2W\r\n=W8dO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG41TE8Yx/BNqOMciN46aGzIryRdeAy6yx5BbljqFq1sAiEApZiWusMsY+OYcF6V7UEvwqUnv94B9dG0HiTgiN9klP0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2-next-1613563536-db2e3509.0_1613563824271_0.4547866735916588"},"_hasShrinkwrap":false},"2.46.2-next-1613566082-30ea955e.0":{"name":"@xdn/core","version":"2.46.2-next-1613566082-30ea955e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2-next-1613566082-30ea955e.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-BQTJBiH15UWdryzblPBLfpxY91+xvV2eTgrxoyGZpICKjZJ4Jq9slgfwBTreeIC4OinAnd/TnYzP7Gi8Jnti8g==","shasum":"b0ef1359a86b34201d43cf6f218c6f0b3e13671a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2-next-1613566082-30ea955e.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLRGpCRA9TVsSAnZWagAAbIcP/jWlm3lHzCVaye+cQvyd\nywWw+4nfE7BRg4/zq07kRuHHCNSEKEPCg+AwQBfnjRcNKgZPlKBG42kpd/5a\nrjmz+sLMzJCvUSzkPykDc7aPPbRv5ethg4LPaxyGcIYhjaok2B/Wro9ZecPK\n2DuR8aj4Qj48EeLlRDDffb2gpcm0tiOOvMlWfvDpKsmZvsedce1zpDoB38kZ\n2qb9T56ORJwVAiRskFfUYLcxm5wxJVNbZjfkmNxGfw9mf5sEpKDJjc46A5+G\nU7HDkObtoH1aJQY3R5WuR/2Q+Ghq9EjR3y8Se/fDs+wkf8EAYW48NopOlTwz\nXbT4whVuNLdgWp4JWqFkYOlC1IZoIQxn2NxptN9FBBJomu/6h8EEgZyGmrz1\n1H5hx6QnaEkUCjSMq+DWfQh7Fz1yQzSdCGl+PFhp1frNfWpkOSbh9tFdvLeE\ntuE297mpuP1dTq03MRXC8pmZesLT0S2wYcsq/OHiN50Zn5ataffIovXicZia\n57mFXespesFyhK3/qt9dAS1Ubu9cjyoe/popD38VJIEebH84WmOiD8OkGmyZ\nkx8hd/jFVCbB2FCR6oci5EL63zLAGzCc3Lmo8wy2M7jkkwPaRxGQex+WzeXd\nfNhPJSfiebscZuBHiMrzm1etZtzA5a2ww8MLNePixC/fsC3xp3YejuA3mvW1\n98kW\r\n=Tw8Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAYOtPaz7nIL1owPO8elwNHctSBWpJoP/yxKn94iXHPsAiEAiq8ekNHVimPrBOEwfJqL7a5ZnikIwHTFi2UQPbtc3og="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2-next-1613566082-30ea955e.0_1613566376643_0.3174564142334295"},"_hasShrinkwrap":false},"2.46.2-next-1613566256-660ccc31.0":{"name":"@xdn/core","version":"2.46.2-next-1613566256-660ccc31.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2-next-1613566256-660ccc31.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-eNPWfZDcm4JsFdhMS5RZLu6dxZ0QvB1ULk+Mr3S9P1DHDyDnKWvz5fAZ5nFFfiBpDZIwIRpK6gYNAIcsHIzLXQ==","shasum":"81208c3c752de17f49d5da17e1a2f82731f7aae0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2-next-1613566256-660ccc31.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLRIaCRA9TVsSAnZWagAA51IP/iDfrcKYQECVE4s1jB+n\nLXHMyOJq6rYj7RXsxzZnj/6N4ILj+tGgU+DAE9lSRC0b0Jh2tGSAKYfXVDzx\nVL8YfowUQMmZyU+Pux1M1PeUWh7elvzfWPK8u6Qjw+fzH/rmUJ7JH8mXLmSG\nCpvcqs0UT2wLHmXj8bKTmKXXECAxZzvWBFDgbpKjfKDRuGn8gXHz+p+KLZef\nbZ/YzfIfN7v7m/p/OYMhOeCG8aJT49uuLQfn7kXy+XMIZCsOBAs2yU5+5bW0\nZa6wfVKSnAvuCrC9TvJICtsKF3dmJ6jQtZWjvkBxHl9yTMOUwRijJYURcUe5\nt+9q8EtS5540bR6R/K5Bn9zAU+mXSmeABTD+viC0UfGHWXdok9FUz0whsKu6\nWCO1ZZlZVVIBQjHQZ+FB+Ljgfdi1NRLtGfnQOX00avfBkRPBLbJQvqmEXcU2\nu84x2sW/rOrp7Qk057GNjLL0o8RO4SlJO4ggH1XjhRqRDdS9wQroDEyW9IIN\n2uGfCpHO4PFuxdWhKxoCUYGGrx1O3dym7O7MeBaEifE3y9nbr7LRbaVFKjJN\n+W4iPpWIjcX/HKVGL+nPsZcjKXco3QLNPtSrbS241XGXCWyKiGa4AdlJWBKG\n8M2ltY3A9WXygadIu8TNUs1qID8L+3jqxf1vnQrl6WWqRlZwRzsGHDRkTY06\nm/Ml\r\n=nf9U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkF2Mi+V79rHeRLKC/nVqxy+5VZIn4OuJIqNqfKdsQewIgQycUc326m4/yuEGM0ry7CoSvbryysjUe3hnCBaJbFXs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2-next-1613566256-660ccc31.0_1613566489775_0.0749338507564059"},"_hasShrinkwrap":false},"2.46.2":{"name":"@xdn/core","version":"2.46.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.2","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-qNJKac9r9huzTUt2wJb53ZCo9AseyaD5+9HtlT4Fd2UFh7GTCbyHJXj/Ur/qnPWhWcCb2Fb9nTbdNAAqa70YNQ==","shasum":"d625d36c335741885a622ad4f1f2ed2a1b9673e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.2.tgz","fileCount":179,"unpackedSize":664378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLRI5CRA9TVsSAnZWagAADDwP/RCA0Ts8rwrhWZuj0NM0\nq7Bv5JCDUVFNMO4MWedjN0RRLSxm9yrCv2OmuW16KRZcRsQiQvPCHcJtJSbl\nMNbOwrkVX0DsQWBNq9H59Xd0krZTMmW0YDCgo9smD+ZEEZKq8MawBtds6QMe\n8itY07Yg1xvTKAynF9A620yWf5UsMmD1145z1OzER9431wsqPZ4XNP8ah5qg\nJ24XG0kSVYMZwlBKkMBOTvyAeeD4PePuU3/Hq3TfHlyNWaUHhfd5Xl3lub4s\naRVtI3+MZIiwPKV1Mcppb+W/LcVDu3i2p6Q5Z9h2aPX2tvc9ypx519kL/Klt\n7t4kJPsrUYbaOWrNlNSPRfjvL5bGx+Cwzc4eBiIRS+FPZi1C2h9hNVQ2xKS5\nCpLP4mvKNVEib+LCl9e9oU9HvZunTYOHjQFcUzMtNErMy+nUwwEBEj9W4eCf\nez4PZEckXN4xbLye+ew5SmonmHqBc3dVkEZGGzxLRWuQ5NHm1lZc4JRcee+j\nOckh3NB/afqGEO9CVXMYXs4IvHkD2i0tY/Gw2E31DFZrxc/rBMcd/KdVbcHu\nSorUuAUUNrSq0QFcjSQc7z83v5PLkJ8fMVz8ckzbZC1faYKG//48JDl6yjOf\nXn9/MVKCJ3Hd2mZU+6EMei5EPCfTSGrnNSNjiSVCCyC8WkC+ZVgbdOtoreP8\nUmvI\r\n=IMMw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfMafdZ0hRSuHbTYOBL2RTtaCTZFWxT7pY5KHi0ug8NwIhAO7tlQtLHdYamHb4n2IqAQXgxAoh+YL4qlthnmYRR8FR"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.2_1613566520758_0.032376517751734335"},"_hasShrinkwrap":false},"2.46.3-next-1613566400-b355a0bc.0":{"name":"@xdn/core","version":"2.46.3-next-1613566400-b355a0bc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.3-next-1613566400-b355a0bc.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-PwmVi0eZBH7vJC59NW4oNkzy3chwizDWvfuIDeTfgJN+K2IGxwS3XLY8XD+isuHxS8P6v2qsvNDNXZ//EukLVQ==","shasum":"e76606f51fd6c6a27a0c513040f46288da83dc84","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.3-next-1613566400-b355a0bc.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLRLQCRA9TVsSAnZWagAAnY4P+gLDqTNtYCKN3ahl5xF9\n8RvA073AdOQnwNSzq1OuEIH33zCLKIYYY1pSLFGID2KH83mTl8RgEbd97Vq7\nDoIloR73Es86HPCPD3ApipiPrcQxKTwOnmZem76DShkefo6mTKzSaBGFmAUw\nBWQi2RJ52MG//5T4Qn6pOeSgOOTrYjNSZdDwSHG3byyjsqk15WPrBEBW3Fkc\nOA6PxTcY4NEFTASwJil1iuodup0uu5i6H6/XjiddhqB90MEBca6n6O3XzdCO\n6hYDueeycp/s+5Py7DwdwueJZMBEoo4FIusgpCDdAeSQbX5jbLxeQCaPYQt7\nn3HUisBSwmo9yLaDcC+0KS48ZPVj3nIST/6WRABNYCONupr/eUANbTft9tJv\n1enyCf0+BzmXRCjqbR9a/hGN0+TROiKZSRUID2r9If5ZAdktDeV/xBtZlIKI\nwQbCQ3RuC9xXkghmhJHNBlvfSeukJPBSjS9g1c/qIDsyY+9lpBSxdps95I38\npk1f5/El5p09j4y5d8AahkPYQaRfn2qXN4UcOLxKTx4AFt1FMeY4D+urVvl6\ngO3EgIJD5wSAfUBisnil/dft09T4P/sSKATgVuETeUqXX7m6dRhYDtv3IbcB\neYtQFgKNtOw89PoZMa17W2w5xQq7qql33fZBSImNNhOa9fbTCtS8ZZNzDscD\nRiZl\r\n=hRfB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQfHnTkArA6Mq4JO10uIc6bfcl62bvtl1XFdhuoOfb9AIhAPcNMmFYezbOe6WCj5K3pJ1iihT3GRDrAA/G1/RVJHZ4"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.3-next-1613566400-b355a0bc.0_1613566671681_0.8922628953121725"},"_hasShrinkwrap":false},"2.46.3-next-1613568896-2b8d9669.0":{"name":"@xdn/core","version":"2.46.3-next-1613568896-2b8d9669.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.3-next-1613568896-2b8d9669.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-YEqAsKH3Xpmw/30/n4jnVjqfB3qObZ6b1uVzDDTpZdRenH34hUzmpQOBXyES9XN9w5XX7tqWKKSNHmS9NsZnXw==","shasum":"39b0288417bd8808478574e7862040c3a8c6c9dc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.3-next-1613568896-2b8d9669.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLRyECRA9TVsSAnZWagAAMqEQAJrglwiR3OJiT1Ub/4SH\nxm54x8JX6EwZockJzjP5HWKpXn6+0rKC1XZKV/6RPBleAslLF/gmhhqvkZ0E\no7Q1I3Vzq8JG+BWFTCcQj9nW0CVXUUPef2ZXS2+YV4ZpxY0ZIqGvFF7pndYV\nULZzsSpjBCSH4Y/WiszX1KllGFARnQ8dLLhmIcT56ADAR2/JliMwsmqqQX2+\nSNzcMV+gyZ/F3TMpxhmGjCMkoQd3TfLa/DnPlaPJYjEmgWghRbWMl2XTvr0N\n/V0rApGWhcMg6NifyW9u8nGN2hOYOJKLEqh+ZErsazJGI8m5+XEPdo2771FB\npE9mutTtDVCcJeZEWKvMSe3HznmD2ElsmFCjxSgKXLC9TGCx/dbYIyeW9xx6\nrwXfjJnB0kTMG5+aptOgH6hRxIUR/eYAu48j9W7OuwNj/17rNj+zR3jE3iRN\ndau/0Dh22cNolx86hipBKVKzRTfPq0s0/K9MEK+SIGp7fUMOkStqah0Smvwu\nA6A3vdljVSAVcBtOR4ku74QxlOzK+hr8Hjx2OjAUHspLFRr1qcTRrA6xa1Bk\nLBO8ic2zmYTGRGqFrZ3urN1Xg+DbOuNvqrQfBqqwi2NzuHc0ZzKFriNRXssj\nSIo+8xxyZp3cc/rxGe/CyVcdBcELshQOkfwjKpFsHPFUN/K6RJP4v937tC61\n/W21\r\n=QUp3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEuGGZWVpPMlbh+WblxZav7oRArzqsU+qpWsHKAnob5gAiAczgaa9QrXWxAxUSrgxwCl/zWBHFWjLwVeRyVWO8O0pQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.3-next-1613568896-2b8d9669.0_1613569156057_0.7908347231599466"},"_hasShrinkwrap":false},"2.46.3":{"name":"@xdn/core","version":"2.46.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.3","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-7qjlVTkCjIAHWTBB87BN6h5Lh1IZ2dGpvCCZ4BYhOmAN5yBGV4HlrJAklX8cDnC7kiXEzQ0ax8/+ZiXW8dNFuA==","shasum":"87c6f5a73cb14e67bce68caeeeb287f5285489bd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.3.tgz","fileCount":179,"unpackedSize":664378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLSrPCRA9TVsSAnZWagAArx8QAJe4aVhIuEsHkRrYTyax\nYnUk6WGXhnOzQdboCJpE+jYmvr2K5qacmiuc0nYOQmNBUfPpaSLTu7uVzWJP\nZiVbbmLumVpFw9+AI8iV5PvhEYX8Cvq4t7aib64+8CAHT+IgmEgX9VeVFLzf\n/x9llXWd9sLV/cUbzaydnRlDRsSCxX+KY+GZCX/om26pRuxK3AMYx/h3X/tY\nvH8gBUnk9sTREz2tH/TYCXfD7mH5qEcLBR42h5deQgu42bJ3ZXIZGd44PM8H\nDfcU1YStzW7NWqTMrmIrDMvyHX0fghkMAwVHkjAmHQQHffd+lREqyzG99xAc\nbERB3v207xsmizWyx0dHiCfy3E0nMAt23tiXB1XtLI+t2nh+7QK/S7k5zvbu\nmZJc+Zk0nIn5IC/w2OwikdBTnZkRfH/R29mvq3JdKCWpuwIEKg5DLBBLG6rn\nlCyl+SGn3JsDzm+xGYz6TpKoVQJ0Q/lC0mSadaYRPc4DrgzE0Tyh7ay9IewJ\nyHrLHCq/gXUOhEjj27EoSMuIrjw463zP6buDgLy7CQfrWjwNoqeRIy8ocKt2\navVmOLfn3dwNPmrphj1YA45xSFJ6jVNQ2MOQp8UJAGow7zF0wBu+RyUWcSV4\nG/whPW52BIjA1MB+P/XXJ37y/BgYBWPtFyFgPGLnk3n8Fbn44iPgb2dfVoKv\nPO4T\r\n=TbC6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBzVRxalRT57ZKfIqLvzqWrDgdtvETHg5RhOxFuOpxzOAiEAjN8h207FqlY2/NYHUaAzntifgmY8n1uWregoj5Qm7Lo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.3_1613572814513_0.863155497587486"},"_hasShrinkwrap":false},"2.46.3-next-1613572600-e6c71766.0":{"name":"@xdn/core","version":"2.46.3-next-1613572600-e6c71766.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.3-next-1613572600-e6c71766.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-wZ1dQPYrDO2LZH1OWa++CzTEc+HF53AKFCz5T3ZJO1irD27RMQkn5rGKXFqQH2X52hcpklrNmcXEL2fMlkn4Ug==","shasum":"03abd261fb032b4da92a752b080a4ead0fdb5594","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.3-next-1613572600-e6c71766.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLSsBCRA9TVsSAnZWagAAFGwQAJLvoinqDvFBvuT6Ypkx\nN/X6du2RWosef4NGNWBoTR59sYGaDb5AmEY0JFkt4AaLwWSFaX8mHa8f4B0e\ndoSS1h/DStGPCZlQwECN0PL5t2hV3jsnh5s5lljlJATsghv/fHE1bjpTICFk\nFvLsciMsTQfqKUl9o3YmBJRk0wTyT1Xi7i1wjDBtEk3A20Mti5brjlBqfPQL\nlU4JuSRSt9GXVqY91PbZx5SqLxMULE1y3dBHB8W/A+SYxvMVKFLEX5K5JsgH\n2DoCO1W4W+PI/4kVg4ZRk5ZPU2mtpysaeaqbfL8jFPKoizJPGx0biYyFBvMr\ng6CwFQdBmknjngDBuGWUSFudMhF5LKZgZJH7c3cUdBdJeoSqmI0RrlMtKppn\n0B0K3LRlIG655ecxAJJaVTmAJmjL5GUrATrhMTV9H4H43uCLLQlW+h1iOAa1\noplsUkTrfNPeWnCclcqZcqaWUkpE4xj80bCD7rYE++llPvcXa5W+oMexLqVM\nvzt3vZFROpijWO2lfgJ481hNtxLipfEnOAU77SDtkq5cMBvpf/tTBnjmFQBc\nYMbjmhEkTXeclCemAlpMPS3/CRZ9ebHVcrO/dISqQ+64qPYnNnDC5p7a5geo\n9xmbmYlrBclzehG5axq0mo5r/FP6cMFdCvQswv8h8ehX5LJpki54qDn2GVHC\nyjFr\r\n=ru8p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICIo5BmTrMfDiV3QiLInRzV2bHs7DcJkqAAdtKxv4nZ9AiEAn4Y5I0aWYMxVytBsYiKY6MV6Je2bwHpeyg0o9MWehBc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.3-next-1613572600-e6c71766.0_1613572864461_0.37828304523907264"},"_hasShrinkwrap":false},"2.46.4-next-1613572650-e7b6bed0.0":{"name":"@xdn/core","version":"2.46.4-next-1613572650-e7b6bed0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.4-next-1613572650-e7b6bed0.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-AOle1/PJT/+FqkOcNA4+/qHV4GzQDOyEWb4J4iQax8NGX8OduXTyX/3L+/AEuWotMrmx+fA7fhhawgPeWjMD2w==","shasum":"4616a4d225d6de8e3d5ac6a39b4706a5a99d72de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.4-next-1613572650-e7b6bed0.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLSs2CRA9TVsSAnZWagAAV0gQAJTEMZtf7GVeiI305fxH\nzThimBIeQQiNbV7Efqgr3vPXf3PIruKiBCAGktKHPUt5xYtRb+/y+Z/jXqt3\nDtg4UI2MX5DR92wBeXQlQ5DMHtndJl8CzcCoCfvy6bZeTYgOeNfQ2/DqcyD/\nmEpzzL85Q4K4CoPMiWSQ9rq27+3mTLklWh5Aa7MrkfAJ2ucYCt231qbFhrtR\n18ayFezXBcpEc5MjDZjGTlyZiNXGx3KFA939KOGGV+hGm5a1/Lsy78ctqdAN\n12KU/D9TttDIRJ/w92Pd/OrxN3WUejyU+DUPcWbkkMooTvpm3u1IwVpR5/m+\nujsNXoGCrSU8BfDWAls4BQeqN93nV4nOk25gLEm96nH0fRrPslEiyUSgu41E\nO8S1mQngupU9frHJguUUBXtHb4PgB6+4w9TtJiPWHMGRMKF2WWyIWVLqIjYR\n2pWImx+XQdX5mexWGvFqarYrKDMKC4/fqSHfFJW76a1EkP3ZAXSoImA0Sva4\nhMDIx5zNr4qm68aX4jINttZEY5r3gESqauFD7ym3ytAKXK+xtDZH8dslf+dd\n9GUGqIxeHFfKzHkRzTpW32sM5dsssXdD0Zemz3xKUyiLV3AeghjbdCWLK41c\nQ09dJQF4WYSJgq7WsgsH5eNiVuqwk+afTA9nAJF0dlTquSW20LCa6dzZ9GiY\nvHXa\r\n=KcNg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGYdZxP5kkz5l2xF2E9w1kvQJ6kP+PRkclNDvwBIPqqpAiEA/U8dZ2uW8DyDAQrjhs26cfppB2M8wrzzIh88Ko5KUIs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.4-next-1613572650-e7b6bed0.0_1613572917776_0.944041809058757"},"_hasShrinkwrap":false},"2.46.4-next-1613654729-eccb2566.0":{"name":"@xdn/core","version":"2.46.4-next-1613654729-eccb2566.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.4-next-1613654729-eccb2566.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-GClDUuD15MT0C+TZxfqvzg0NurH30M9gaQ87dTLgzdQFn5lMArOviDgLE6DZqXo6WOGJhYxzNpdaYoUAx5xmZw==","shasum":"07ca77d64d4ded5a3727ab587b2236a22184051f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.4-next-1613654729-eccb2566.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLmu2CRA9TVsSAnZWagAAalQP/Al51cNzQkvSVY5QBBW0\nqfi5u1TkLd4YLndNpMYvBKdtHSfq3aSa+SJGtQuTLDI80FBz9ol33HQbszmJ\nS9vFOFXfkFr7l5A7UcogV6xZ2/KJJfZT/yVLUjAtd11KJlZsMpW47EHMSdLt\nh+qzva6xB01zJFRA/Xmlqz9Jvxafghg638KVlbIrGIOEoUd9MFopWiOhCxex\nzYHdF3VA7lJBnqHLu87SGfvG6dL5BvchepfzCMaS8hN0rWRoWBtyJCDEvU/e\nj0Hc5HJii2uWR3Pndl7Rzdk0L8dljgqkU8TQhZ4Vghr0kRLUD/pDR0NjF3vX\n2BSFXKobZ/sRuDp8fug+fbF9k0KeBWJdY2U0N5/TvqCUqrG8o+3Ln4gtHEe3\nLbGZfIXg1ChnqU1OHbM60vblvmjehaYnyNY28Ze1WqfX1fXM4E9QkSCl0m1r\nnRRHnU7hSSNMkkY5ngjtqYKmNb1ElGGpYyWeB7c/TgnwKbuWMexT/Tkypfs3\nbTzz9GSRDbAUXmS13dKUbv5sPfRQ60I0YZLGdzGR0PW+mhdpluoHg/B9Qn/k\nPyAFNqc8J5N+Vnf9Zgo/AV+qxy1c+0iOv+eZkcedJoQlzyC8bRD9J9NKZShN\nXJ3cebF5h7nUvepcE/7GF1R0V803Mg5H8bZuJxFE+bkP7k6RlLyaKFMtRIGg\nXVHk\r\n=8HUz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSbwshFgNhLnjekXYBgptvw8Yv+qEHV4NFU3J93js5MQIgBA6mJEaR2tvd/fH1NHQdZVdgFFKRS0BwXRuGz1OpvDc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.4-next-1613654729-eccb2566.0_1613654965644_0.8248996295487108"},"_hasShrinkwrap":false},"2.46.4-next-1613669643-89b4938a.0":{"name":"@xdn/core","version":"2.46.4-next-1613669643-89b4938a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.4-next-1613669643-89b4938a.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-5b2bSOANiGi5CfJScCHgtrk2tiwBxUnmjWavOGATPXODDLBVsXeiVEUDu0MvCye1c6frEhLOucE7P+S60ZOLOw==","shasum":"0ea1e2ff0197adea2bdb98dabbbfb1858bf9e585","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.4-next-1613669643-89b4938a.0.tgz","fileCount":179,"unpackedSize":664448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLqYgCRA9TVsSAnZWagAARDgP/2gjojBn+kitd5eDTcMM\nE4RcGvsSXB5URg+GJlvUs/yHfeFYpmhWUQxZHZed2vtcHAlLX09udAsLX4yP\nhx8fpRCSWHgiLb/dr+RqD9wEKNNvs51H3o6YEupVlUBDWsJSAMEtxzPxDJ6b\nuYGpndWaRz/e60cSwOV73VpsgxZFpOwfWdNIXMD0+loyyM4b6cYlZu9pEke5\n3KA6QcforydFkKKAchpBsohs8RwEWTXaaOjesycRE5mjyIrXeNYfqRs/Bx3n\nDzpoAtdWmOJDWaSBTUSvMEIYyUtnktITiEiq5sVuJto5WXraNUYZwQJbVczp\n2O65B4gToOqyySvrk1A8Bx73dC2zh9VU55pl+8st7aqwAutfT3CUprzbat9I\n1slsftMlCKIZAk/2OkKvct/MVRTB6ol/+quqBRbKF5/ndAPctN5tZf7hiHQr\nrktC8sAtnblsQfJqoDlf9k8cRIiHu4ZX1/3Bv5HO15TwrYdthShzg+cQ+BZO\nql+OxhYaW9/SwI5hfFscxT7T/V4EAA6RjbRJyKbLEHqU023aHGCykvnGERwt\nilbxrW7BjRH39ly3jWOCvGnon8/9nOENAb8J7H9feluk9lZ137AkU6Vf/xm1\nBltDyVGXP/C3cNV0yzqvTkHvWqChpW9QaT8hJS/PNhMSpIQvlz8rgjZrMGYm\nm/PY\r\n=njEj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZ1Txv8+QcSCHcDHfnRaHS/oc6eqxTVTLSrPWGZjGbkgIhAJp8yphtExsnmZkYjedh4aFBWLzHGQ2LkEUTkQThQE1a"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.4-next-1613669643-89b4938a.0_1613669920163_0.9613510546091821"},"_hasShrinkwrap":false},"2.46.4-next-1613669820-e5b15ba1.0":{"name":"@xdn/core","version":"2.46.4-next-1613669820-e5b15ba1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.4-next-1613669820-e5b15ba1.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-6p+kcu0QI/neweKcjRmBxk0LCJx6cbUQQ3vlLOL7tGAulJNwv4AgJDXKHVw+SSKeCkmR/vrsnyIHFG/GwtXwEA==","shasum":"03641feaafa2b640d658acc6813527c0878b2a91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.4-next-1613669820-e5b15ba1.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLqbFCRA9TVsSAnZWagAAmjIP/iT1ao0RRfWr4jCFxD9K\n0ezLx8oHQaeyoWO0mD3dfvzoZsYq8ypdLffwngwMSUTVM4YUlI07JNG78FC+\nA0QhCxkV08nMeyoSI7veUkuJIlbOokeckmQx1hjv6VHDxkAyebk/umiVHHp9\nWHlOjIrh1a4vPaMC4PYJrd80i5gip9mtnW5LZeqJTBDmAndvQsUhD7fNKB05\n4CZiJGM2PT3jVRaVPni7qW5NxLKvNy2HYLOadRomnCc5IMhoNQ2qKzO56kBR\nQUj/wo+fnwSbtmoKn+vriiF8ou2eQNyFtwVKtoo24jYRaHe334pKTGKDXyYZ\nlH1zUuQeGpf7FJRmEyIr3/BZ9Qz8S2q00MiIQ9fvrhnsjEr6PxAu6C4KyomR\nCWLYmhqFn3Pov/GVghQuLDB6awLUQfStCHC/AkLxB0tFhhHX7kgRRJR6mU38\notpYuVqFKrmgexkKMm6x0yMnDN8iE6ITdDQo+cLzb77flaPAv77ixKRNLU9P\nO5dPXRF7lvqeeB37u+Y5VjvZ6IInrLq48syCxnHaG33yo04zjcuGo7VjO73g\nHbs2A3Jf4L72/XDR0C6p9hvMPSzmqGGsI66+4307A4eik9QnMg6ddGu3bHT8\njQgH4iXdZZfvnjnsrT4LuKJsUuNEho7CCKeWlWofdjhfckHZZkzOMLhUiTz8\nAGh6\r\n=52EB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCh5NTU4uUGJ0rocZDMrJwPQEpAT1tJH9t+20+b7icmkAIhAP3bm6R7NzMV0Ma7Ey9eVl0TteqkMqF7Q/Oktc9BV3U4"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.4-next-1613669820-e5b15ba1.0_1613670085139_0.16794234606075964"},"_hasShrinkwrap":false},"2.46.5-next-1613669881-da0c0f17.0":{"name":"@xdn/core","version":"2.46.5-next-1613669881-da0c0f17.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.5-next-1613669881-da0c0f17.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-U3zoRPJBC77oBVduZ5HVU8RVmyK9aLw4OyqMm9iJeZUxkdIpKZIqwJ3qhm4y/FYSeZzRKXh0muOzGes3cvXIZg==","shasum":"e25ed74492356678e27f1e3096f958380ae867db","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.5-next-1613669881-da0c0f17.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLqcBCRA9TVsSAnZWagAAcioP/2CwtAk/g92JSXGzhowy\nY4EP5yxbvGXuL5lmkXdretl/pEAv2Qp+TNCgEjKmPlQ+5a3bJQVNjWfVMnbD\niB5TxW7VraYJAMIj5TkyoGcROPr4piKZIEqT32ZAalyee35SIlj5Q0Me52fg\nZvZCYYKnvBefRDDaPA4a9htmkeRapeTcM3jbWezHyhpxm6w36dh4IjbqlBFM\noksm2LbXvfMcFU9lFpTHnu0aMWH2RUBDkHwKnqbxZTUcgkOL3X7SM15UL/Jj\n4aEKbbtqJVHGldt8b0m9hVlPy+PT+hJNXfMmR+LXIhAbqbbDLHZfKpy7qfDf\nUrTWmCQSzH+uu0v3C+GF3bDE9w6rJKQnljTdUF2eBRWf0eGmy0YvZ5gjavOS\nhtQ7GkV4+Hah9fe2JZki4fTAguba9HyNB/dTTPC7mcCMm3pABen6ZDirhq+I\nmsweuCIo5AiCZclTpeXlRIT3mFDq6lm26vO017AKz4mVhMBpQMQH1zNtO7JV\npxOh6rs5V64DuhdRlGkva2oJlf1m/3OSOLSdnXVf/uNPbASyz4JyZ3iy1bJ1\nNM2hNVAx6mD4xAy8HS5wmVgFt7Fj4QVI7nLOYOU8xPpCXhdaOeM2WnWuWYDX\nF8+7bz1HmL/oWp2SV+AXmFSK9rF5kcfmuLG2DUG7Tp/bGkED//5dVKjnYRXy\n6YWJ\r\n=xH8A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtOb5aVLRhzFqhcAytRoEuEhOltY3Bd4tc9Ouv+zKKcQIhAP+O/Zaj0muPncwYDoi3P+jSk/f9oqL9uandMFUhfbrD"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.5-next-1613669881-da0c0f17.0_1613670144788_0.40681859842725854"},"_hasShrinkwrap":false},"2.46.5-next-1614018774-722e2a45.0":{"name":"@xdn/core","version":"2.46.5-next-1614018774-722e2a45.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.5-next-1614018774-722e2a45.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-vmNB1tOmV24Ma9OsZrZqAT3cRxHxDDiYyyuQtLLCTVl1N3YarmhNsiD78NJc23h+4D5/YP/SlMSFvrB1di1D2g==","shasum":"68f4e6aeea6db7a770bf7f39036d542d402f07e8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.5-next-1614018774-722e2a45.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgM/oECRA9TVsSAnZWagAAU6EP/1Bxo4j1O/5xcM8Op5pI\n+mc8/1gnORA6lLkK83M0vtTV1N+2k3tULsqNplAy7R0xd279sWUJYZkyVHjy\nzfwWRewh6BQhH+tlIGyr9TZqrQeSVJD3elpsTcVRr8KI1afECACvEmH56zyl\nzPzIiTA2P0+o7P2CPXy+9zFoU0yuGOa9/SfIOfhAaGOXwEhoKMN2QkMyCIEk\nyCJwuVUtRD1H0EITmEMIEqfF01iqrNH3NAFY7G1ugYojBgkMmQuAXarCfL9N\n+xWj0o9QNPo7UDwjm8a6tmTGUJ7eXY9NKz5Vbik0MLp2gDhvfpu2NLceo02K\nU0fLXFsPkw8ve/7R46a9ZT84AufILa4co56dswfSbjnf0uD6xn9IIKFUKMjm\n15rzEJ9nqi9RN5474D3kZK+UUg7sveZRFeXo7rFpOl4KyK4A5sXCFFHNKUAB\n5IZkTS3RMHfAJuLfgSPAukSIYB8pyew4QbPWRyZ1cf5TR71Nztb2S6XmZL4A\nUBcJ/bw6xs7QjpIBEgXGNA7ZK/jyCQTLssvfaue4cfrnA+QxL7l5reMtzbaK\nb6cQn4Ny78qW57DjPxrhlC5/3fstFbKoOY8oxMgEAplUKgleZbXd/XHxUJT2\nRZPeVHdpagblWu5zml67MKf6DFiNgwuDHg9QcQ+Dydp/wcUyIj4Nd8hjZWp6\nfknQ\r\n=VL3R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBOcHAD5q9nh8NG0+53UkILWBMbjXqXkkj/4fya3gJRnAiA5qPXu0EaOaYbNhr/CtnTAsq5ZXsw1ZO4YQ+xo2YD5EA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.5-next-1614018774-722e2a45.0_1614019076237_0.005888096051840375"},"_hasShrinkwrap":false},"2.46.5-next-1614026590-ba7dba01.0":{"name":"@xdn/core","version":"2.46.5-next-1614026590-ba7dba01.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.5-next-1614026590-ba7dba01.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-9I8EXOatL5VxhUZEXOnrIG3vNoZ/wBWyKnfstOOwiA2I1uYDzoLrmbbqsq8YLGIIJa2XnGQPb+j0J7ziInkCWQ==","shasum":"b1c06c04fb4fc1cfa89fc0dc182c9eeba4d4d9fd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.5-next-1614026590-ba7dba01.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNBhFCRA9TVsSAnZWagAA3oYP/A4057ie7Jn45Bs9WvIi\nqiylbHFCJdeDNnI0MXyHptvWKhAVpHCblCzbz0NXsqsx91kiZsPfTfjgVLyj\n6Xv8baz2R5U8B3WGZOfkYfrV2j5mWd/c3Vyycve0LNJtLagJ2r7wchKMMleD\nZn9g2HGwDRDA5at0HDwgQWRVcvepWaDledCrB3naostRqHWmVTdIjjWxxSoz\n+qzQ7Ti/tVXQmZPaiWbGmGXG18VRu9jSb0JzA3FXiCDoH5xOnjpk+31kzkjv\nm2zK4CpU4oIpahOrsWEjPExAU4MTdi95eukOJjIyyS7w1uzul+Dhql9p+5G8\nqilViG+Y77gQwBAfb0EQzoQPGbPVITW4l5YHV4eDp5HdflGcvkNm6+K/sYJU\nK9TORTpZsE1dNv1t/ug6fMhBsFbSrZUUDhrxHrma0iVHA32YFlpI1LrJoZ0s\n3Rl/Gh172lNBkN6wZorfyp8xzSE9so/DxNv0LiQkSjiy5WsPZYsD3C/5tZ8U\nNOT6Cua5eKPl6XamAJnOB0SKxvabLxxqRdJ5ngzpfYpFY0E3KVxJw4UejP2K\nSk17C0m+Tm6RRQ9PT45Uh31/YZFcbQMqovEqoEIcASYMW7GR3hn6qtKak+QO\nYbvf1Eu7IM///1ugcg27A2XkcYGIBP4jvCHeM828Z/kGJMkrng15IlrXybvR\neY8J\r\n=v6b9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdJ2gy/9U0yJSC3sBZglH29pm41DtI8JMLhtJdNjNcBAIhAJWt4MGBtiGFk/GP3lS2aVJUnbldY7S1jORWfvy9DWzk"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.5-next-1614026590-ba7dba01.0_1614026821155_0.7804271934725973"},"_hasShrinkwrap":false},"2.46.5":{"name":"@xdn/core","version":"2.46.5","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.5","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-XtQkVWMjUQ9k/l9brn5Yh/duS9xEoCgRw1SEI8Grw2kPBc0JrA1mnrXGP7rAh0ZxsocjCKdFfBokCu8VeQJ8FA==","shasum":"8e7fd60840014d570711a527eb8191b683150ba3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.5.tgz","fileCount":181,"unpackedSize":665548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNCAECRA9TVsSAnZWagAAUWcP/ReSAsAh/a8IbXFBzKK2\nBWgfRajRoElx6Fxcow3QUaiBvlDZjO5xT9Nv1iWwLtzYLxEc4tIHsXNq1r2Y\nGG7Gpxbgnk6HbJ/BAWtFcP9rSYtSki7M7ormjqyoWJj7Bo02Ohg8G6qqzPZc\njNP5I8Z8PyQkNpoNRrTeNXzZVdXdvOrglz4+BunGP64/deNGZubFVOyZ5ZVO\nEjms/UqssLVURykxwN3GUtk39f4r58jpsL/kI60POfo83P4ceVHAxtD31cKb\n63Zjjef5xPxdvbCVaszAtiS5WmEC3VL80MHgOUtpL4ll0XGDuXVI7pWioqgA\nmgcvbTvZHbYhV5skLQ6guGdob2yGPcU8VqeVsGrVUzEC3IKAymyUU0nysVv4\na/kAVpHTLQfYeTizkgJfnnvrMBdLtHebHNN3ItiMMLw9Rev9Wh2GeExagnLb\n5L8cFY4Td715f4HQK6a2hT7IOgExn9HqfUne4TZZqUOnziA7ppidSGLaAb0H\nWwHLeBK1ZCBep75imRLBt1iYdpWisLW46LfK2LMkGQ+pf+9lOA5Fd2PLIwuF\nT+/PoTWv/OSYSqZqbLQ+LAUg6tWx67JuS3lC1VjEJQYkhj1EflbGCLnrpczI\nipR7CwuOdr+bACGsXuNOZfp6LY7ZJzS69bTJjKDQSdXeoGw9IxBkbVAxaDWh\nnL0z\r\n=fDOA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1zUloDJFxq1xEGk/f75GvMGXEOH/KFRYvp7ueuIfA/AIgGXEyAaJAo+LMO/lzBdEYkxVna0PCqMcFT2IYz1uTMIs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.5_1614028804025_0.7189272988226312"},"_hasShrinkwrap":false},"2.46.5-next-1614028558-f8e16b13.0":{"name":"@xdn/core","version":"2.46.5-next-1614028558-f8e16b13.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.5-next-1614028558-f8e16b13.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-X5Y0Tgpl6CM569QvZWHh2lvlrWb+ly18uXWqQTMD9I1oQ2FdfvHOSyCFuG+PHBXA4kvPcXWpkaRBbhNb+FvBuQ==","shasum":"d6dfc03f6d1ca34959a10e739cce7b54a58ca404","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.5-next-1614028558-f8e16b13.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNCBCCRA9TVsSAnZWagAABnQP/i1JTdI5yu3UOHhPZi95\ncqZPPjp6gPU0KO4xsTMY8UE1a1nWOxdc5hnBqyulormZuOXlCwhkpEjDTLUA\nEt6xvOPcswC+IizmGb5X0uvgZlOfh4C6kTiUJ04Itdwe2G8xgCCEZi+G3By5\nheLzOlNDpwvt4TjWSIivEoN6Eh+zTlnawL97xT+ai/P4I/J7+0VJTt2QgR9e\n2w4cvNEJV7u0gQZHMuNFFC6BsX8PQOR9f4jg7YH040xm/d94hbO/3Omr4p/4\npARp/mI4Q7XYdjmjtlkMMFpAOqqodTvKO9D2WLxcIuS/sT2DpLLnBiaQo1PE\nRj8LM26ku+3H3CT4Eq8TVSm+ce27Lwz0fbrm6g4uLEVDrluOwhmktqwQr0SU\nIhEEQ1CnS8fqE6U5nYiTcpwf0EvV5WssbW3oDwpCTqM3lyvmw/bXOZaaZIOe\nD6mk0gaZqy1oDN4xALoIbW8FmZksEfuq2pbAA1NTxcsWGIMLcUi88DQfO/GL\n7Hw3kh6zLu8/Y7ZyKF4+KK27YUyzqymAaxgtHA2x/QaJV8pja1bT2NXC1UcN\nYFCYxoDBGKkKqxtgq8PSm914/XfI7aNur0FZGiPRTTpfhmoLX0m65EaGd6DO\nGroLqV8Ahr+MytqnxXcU2WJTnsKFFtFC8hjaFFW8A9hnZVEqlwT9hdypeeY+\nwh9D\r\n=Tfqu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9lNUdSmyMPf3jMFlbmkeBS6oH0jRsD2buIQq2/pRCEAIhAMrXf+P7rTPzggriHGDeMVKQfwGGBSfDJndtGdQV5C8/"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.5-next-1614028558-f8e16b13.0_1614028865857_0.3816452934101373"},"_hasShrinkwrap":false},"2.46.6-next-1614028653-5941cd80.0":{"name":"@xdn/core","version":"2.46.6-next-1614028653-5941cd80.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.6-next-1614028653-5941cd80.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-tRKYDT3HCyKH0COcfQOyJVXdzOGdIjTuZ94Y7CExNnA5Ox91wncPseqdVrPb4IG3URQNzHUYieuTqJRV5XpGyg==","shasum":"523b46bba0bae3761fed26bae01f7451eb58f2e5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.6-next-1614028653-5941cd80.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNCCZCRA9TVsSAnZWagAAI2MQAKSXQvrXdD5F8pdGAHwB\nwS6cn/TjTpcoZDN16SoEEMak2EP5/kvSoukRXx2RSI+ge0LkYGO6K612ej8g\n5lLj9yltWyVTffpzV05nhW3IYd0vUZXCACIakBjf3d0eBoKVicFfY477BmGr\n/oIvyE89kUqzSkx/l761TbfYIyqBTwHph0YZEWD+24DGPQ1AjW4fuXlt67b0\nV3DUBMQ4v+Xh20jnHWp7HYNNL+jOJ8zVOeikmJMSInf+BBnGzq8LeQulno1p\nh4uo6zdihKOyJ2eDarwoVkda9P6xDYBB2X5X2l0O5ic+At/c9GsjaW3YRff8\nv5IYQ1mHKRgCUsftDRc9ZnHWQL07VW5MSXImpa2XLdtP1y0d5BdHj3iVwAZL\n6ufPOZtDXI31pzypm+THkp+x6CZgh+sBoIeC8NDmAYeQMYBl0u+k++6UnuQM\nRAb8oUtyAMH4DzPBs1ukdA0b7OuirAMRa5Nju4whwLeZeG0Yiwsnk7yfEPHL\n1y2U3/yxZFaEPD8U/aZhYENS374JvFkfKlS4nR0FE3kBKssusp2JQK0E7MpQ\niVjUy9OVimgx2OUD+lC/h6+oKcNSfA3PNJWQmtqxoyfz7dZ1yNXUuIrA5u3Q\nC/FviXGZUi7tKAkjpj5QHA0MGRzHZL3yBPrYacm1s97LtyXQEOAhzOvoSjz2\nc9mg\r\n=xFq2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB32mJjQVQECraYPhWVSQhCJW/y7BJ4dJrEtGnhgH+P2AiBzz4KTc0GejA0o0jNMsj7Js8gR2szooSxafuvSUoDelQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.6-next-1614028653-5941cd80.0_1614028952349_0.28793808343701155"},"_hasShrinkwrap":false},"2.46.6-next-1614031670-9fd59586.0":{"name":"@xdn/core","version":"2.46.6-next-1614031670-9fd59586.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.6-next-1614031670-9fd59586.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-FdBfYsPACXtGA/U/ZFouQijH7XX8X89IXaEM0jN3rvRbzyTPMv9zOKppuqbfTrxV/Nv330QjqKFqbuNJyfnsBQ==","shasum":"be0e7d922b63c6723f38cba745764d3798f4ddbf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.6-next-1614031670-9fd59586.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNCxXCRA9TVsSAnZWagAAbiEP/3uFBCMRUh++cIAzOmkj\nGaetCIedGrtWSqtasWZTdFv6tk/V/GAIltouDRj0vVhAxv+LIkBPx+DyK4eB\nXj875E7V+AU9MKQCAkKbOzLjeJZ7vv4JDQTIPGqqbrM5rcU8sIT64o3fLm7y\nTDl7kh/WWtJviTJeo2xD8j4Y2KGDm/ReOGsa6UKAolUIJ/U5p8vJ+6daYFIy\nWRo7BI0+IWsXNv55sXaIpvj3j7ljhG0vR2nbE9vJqsXwOk1V9efZk/X996et\n49zFNv4tBhAKW7qrgFqdMZYVmpXca9xdfiWlX3s+DpuYKOAx0uoaFRmnlZQa\n6JALrYYO/6Lf0oH8lcq5IslJbgAktB6H84Wy0TGsmZVUHFaVZ0eAEFNrmhSE\n5u/YQ9Qpv69FwV3CwjxzXPpMTKpHHzR2QacZ6H1Lq+Vuzfsa5wEhDzwpNxok\nrWhfU7D/fgyavpXIN1Jw/7K2U5+Sb3OOnLXyM7H5TfO2Y6yQbPqzUiAk+S7q\ny2BQc6f6/kxUcb9+y3izKUuQjbrLHDhNAh1Yif77cwUINlX2IGJr/7z1HYyt\nGUN/Kp5Q+sytLimO+DreR6YFf87WE4infxvvlY/EY3xyCRakDmxgjDCFRRMk\nZbO9+FdVGqYfNW16RXq5cGl9MYtXwBBuRYrCCY6WvI5SgvPIelzZEsTsZpqE\nQGrY\r\n=R3BG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNlmfmk6Z3O+xCF2GB10RCFcIxUcxdLMFMU0mXJda1bgIgDNh6CFTsa51rPmndoFF8dJ3KLCzyuaWiZYM+43lY/VQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.6-next-1614031670-9fd59586.0_1614031959246_0.04879452806553797"},"_hasShrinkwrap":false},"2.46.6-next-1614032371-d14b3c69.0":{"name":"@xdn/core","version":"2.46.6-next-1614032371-d14b3c69.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.6-next-1614032371-d14b3c69.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-SwTvrw+1zu01a+nNAEEEh3NG903bNRW4Uf/pyqtPcwF5tgZdcBmRdPeDQwenA0ZrPHbZKcyUML2vdMdTeF40mw==","shasum":"4e038dd491dd13d449f80873ad9239f0c31fcf22","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.6-next-1614032371-d14b3c69.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNC8fCRA9TVsSAnZWagAAkZ4P/0JQuopgIR3KFqdJAS3f\nEPrk5Sbo1zj3VD8je55A+4J47B2xpeu14rzMdeG2Wstjx9f/7LWK4CMaP8Dg\nJGEEW859aLjRl5NS3Dzw3Pc8rdildkCKVQRRhaxEYKiVRtPPQW9RZUvc2WX+\nXAV3v1Ux4yklXa454qSjM92M6ULJf0ryCGMIJYy4KqZ2x5sq5EL1qGtxkTNK\nJEoCm1+4DNiarFE24zBZn83G9OZz5lfvLktpRK0uGfyAUIaZud54nbYd4/xK\nSLpeEK6g764NUFSqfxZFcQgflVT/R9uEARXiI/h3AdR7pgEBKrYW7uDmMlje\nWvc02O/MA7LEdiFh9KoE/b4VsjwBZo3onCPhtJVQIwCmmE7eCmc0BqayKTSa\nfG0ajNMd8vXNYY3328Qq5vms8unprHYzXF7cmHpQ7zFCZnKxfhHcEInRKMXR\nN2ZCIAE55I9hBmwxfvS15ksyFjcNxvRpqE7p8twhJ51idgsgN7hRJlsrIalk\no23b0rs+GTPqw/e6NFs8JHTyO9Kj6UiLL7EBCHVgMiB0Op8K58N5IZU90me7\nEr8y1EMjAEAD5haX4Z/ry9U5jOkgEqsiY4ZmWECMqwEOK5ZI+hkzsd+6ip/2\nhBVQcHdDxvO5FNZb4k49yivYRCCuOTqO3flJRlzaGi6RNcg7Qt6brhfONx2s\nZICo\r\n=lCNU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtCJd8SkT6PA68lLfdXJIpSzdsfiMbdvEkY/WplU9vdAiBSSGrWuxMgt3D9FRCikY+utoW4QZgn1bmh8k7nmjn9dQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.6-next-1614032371-d14b3c69.0_1614032670878_0.1505505504088842"},"_hasShrinkwrap":false},"2.46.6-next-1614076076-a9ab6fee.0":{"name":"@xdn/core","version":"2.46.6-next-1614076076-a9ab6fee.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.6-next-1614076076-a9ab6fee.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-/wAO7UUBSxSt/WoEEjSY6FwM8q4WROFPZi5WQSLBma+42EJYESHZtJ40S9BO1+kY1sdNxxOVx9qNfD3Bu737VQ==","shasum":"d1f885b279a4bdc7008b38266f4f873f2aedaaae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.6-next-1614076076-a9ab6fee.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNNnSCRA9TVsSAnZWagAAJ3EP/ixcT4cjB1YD40Nfl0GS\nFf4PXKHDorrrgdFoYSu6u+SLSilL78KfTAtbY1iAFK8xmzVY+L6++yb9gXP+\nLv8sMdl/BBVV8npbFcgevROcyEP1AHpCEl6oVeSgC5wChfctgdTXbFT++SmN\nNqszA1IJnaZdukibeObWYHdSEqZ/LSprCgNoB5sQrHljPE68LNhx9JfreylD\n/vBjwbNNFLfWdOMexSRMkmNoe7+W1Gj7BiktU2f3MkMBm9K73cuqR4znceA+\ngm4FQO9K4VA0tFpNZyeqfnrUrYSD+g3o3BYHHR66kHkETkPkkOexZ/ocwsLM\nnvcq2Lk/NYB91KkWT4BMRUZPyxqrds0OMtOJOen9oP7r5Pc86n2CmmNfeBwg\ns2f+zIOCdNIzLmDNxda0rRfarmx7/ekwHP2IDGRZMJmS6MtFExiCWFhJslg2\nallDNl4P6zHVSVGIOnkjeXX4y/2TiEgPd2uy5f5Zg/YYr1Oy6Miar3rC1cwZ\nJK4yGljNsRWKSzH+evqsxS/Vhj/xrJ6ORkkHAGsFc5GooNP/O1YkQrL3ct9s\n3llTYIJ1nEE5sVGnMO0qHkg4J+CBMrGG67wnJa7T1DLtwe5sV499ntY9nlsG\nahLpamx2WAKaHk+V468YE06gHMsx/0emZgsL6EuIOE89ozOwwmaMFGYlVflH\naK3+\r\n=Q3oH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQsxVYb9ipNetDd1gaeDWk5TyUz6PPKXiutLyyGCaAfAiEA2F4iNulChkhQBKDYEkmEgwx+PdZSnSBhOJ010cx5O8A="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.6-next-1614076076-a9ab6fee.0_1614076369787_0.7348592243594854"},"_hasShrinkwrap":false},"2.46.7-next-1614076339-5c6ee841.0":{"name":"@xdn/core","version":"2.46.7-next-1614076339-5c6ee841.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.7-next-1614076339-5c6ee841.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-EIWeI6PI0+GqOvyS9eZ2KNezf9eJegoSnve0FfrW8YhuzrvixJ7yNKBR5DfaHK5itFG1wZYsfvbYwS+fK1n5gA==","shasum":"492b39a8aa301e2e870472323f0fc1d3b78de306","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.7-next-1614076339-5c6ee841.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNNrTCRA9TVsSAnZWagAAFOQQAI0cOHrE2Pe5dNEVjwKk\nMhPmKHJ2GtkCvk852K91V+h4sZilT4r8COJoVNfHf/7uYQN19QC3A3cfE0E7\nvxXh6d0eh6gKx7xNI0j6isd3WTXr8dcOx7L9uhoF7qc0FxZuXm23HtCmEdDY\nvCmAWBD12wUDIYiCb3Gp64jI+C4f84W6yHW24tNjHc8LffrewHY5DQ1dgiYT\nOAp/6GdqwYXOX4XVx8WpqbEwnAT3ZqK1aOlhXoViBNluo0rF8cL/AIfewO7R\n6p26O1G8ZQMZZgq/ZNTYq2yEVLE5YP7WRW18LS3hrUymnZon/j521mg3CGr9\n19xsa9inp11FsOQdpF8xykhF9aeTvyTbeHfdWImS3wZqzPJ4tMtHLa32ARzh\nM1ZbcY9Va7wR9di0j3tO7rtX//t+KGp4LOeee2eZZDXuIqC+cMXKKzfKLyw7\n9xXmllGbJ6P+7ct53UWom7jFhCnARHEC2ef9whixajugQ0GNIiandLBssvCZ\nAAnRB5g+unzDX6KtSvl17zmoQcaYY1fRR4imnwjoiumYZQJQsvG0ecC1fCiP\nSzZoJtgD5QBJUHYoa3kKk7WyTptM2iXWj2W64AWTQR2iAM3PQtPoeXoRmmGh\nZ4xUOUrVXLLR1H284i+vp7tIIBoWTZVrkVi3rUeetZ5h1BGrVRN6RZu0ild5\ntbRR\r\n=c0x3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGvXwH8+jjDIPuVOkFTwV8dObUcIIBsitf9+1fxpU8u3AiBMBBnENIqvTZZ8xx1hsX6YqRoeW5eS4JeD+oVSsYVGrw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.7-next-1614076339-5c6ee841.0_1614076627068_0.1264208103032196"},"_hasShrinkwrap":false},"2.46.6":{"name":"@xdn/core","version":"2.46.6","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.6","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ZHG9nAqGkiIrTqEdZDUXV3qDroUFV4iyCIf4xTyD5sPWTtK7ffPfMSeqcByIhm/j3FkDYfVmRCOgeGVdUsi7vA==","shasum":"f3139492b6e55aad2e15bc8c508961f80c8327a1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.6.tgz","fileCount":181,"unpackedSize":665548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNNsXCRA9TVsSAnZWagAAgbwP/A1WwQBi7csDa2rKi/TP\n6d7cyXBfNES1prhC7qPi+Jt59F70ycQvf+ybsYPrKFc4asraR9Id0BCBSmmS\nnNsp7HTYH37WiRYhhvOs3JWxKIoPom4/ePvtqrvG5xlQQKA0hFAF3jVANBDU\nFcYVPM7J+hVQVKBOK8EOlrRAK2HHElZ6ucGhV/bxAx53VkhyeOn+DOxMmtxe\nUVgx/UKBxjux6JB7UPxWLdZUs/ppiIwoBlHDihRXo/xej05HI/8IP/tRkcJj\nskmwe8R+pCfvYsWlmoC5pDKmw/a1LdGCKa1wqPSKDUVWPvQ4xlgpmrbXiYL5\nhRxHgH4G32bLvyqLquA6CsElm+6sOz1smDWcG/fk68EfUzXUkq29GvHtMqDU\nL8HwPqwcBEdny5C6O6yOGPoGMZk/oRf053QcvFUGKqbqAZJDly15Nr+yA8tz\nC3pfvloTUF8JKxoteod6SoCn+cPRg7dLEQULThN5jgvR4uKoOUyOCD7yPbiZ\nai43YTWpDo0p2mSfR3de2hut1KLM7XvVwNZA7k7hMk9FOhZ7gdXBuBx+D21F\nbhEfOsjAAnQB2jejdZ/dUg9j/W8AICozlKN+rRweECue2tP44/phEeDpBAle\nT0z/Da16RqKQmlbuywZs/aoFelLYoaF4+L1JnauLrgO3XXh7YBq9YQhUTgCF\nzhVO\r\n=jCyU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7ZUbkpR+dCZMYO5o3ZyK6N7HdgcNIAqPAYvupYTOM+QIhAPO58/HoucCIlWq268nlSIfYPw6dtNfQnr3xX0PHXXi1"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.6_1614076695108_0.7748213176671721"},"_hasShrinkwrap":false},"2.46.6-next-1614076455-fdd66fdc.0":{"name":"@xdn/core","version":"2.46.6-next-1614076455-fdd66fdc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.6-next-1614076455-fdd66fdc.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-W0RtGstNkAS1KpweA7jG7SzszTGphB/FQiahCenXw9jXUjxUWV4jmOrCL3jcAqJjy+IakL8L/lZHriG880hkDA==","shasum":"e7980d5f29a8fda0c4d4d9cfcdb8c6f14b2e719f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.6-next-1614076455-fdd66fdc.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNNtWCRA9TVsSAnZWagAAHmQP/AwvBplNX2PVhkVn92Cj\nyLi8xVbXunVvcrnnqlsbjeUtAGrzs3Yoml1F5A0OQ6xBDuuoAsVjMjx/7O2/\nXKJIsIiCnJ8xVKuiGGflZHMi7HXh1EMqAOXWKIQMbZ549362pJf1ps0UWFmX\nSYyTi/qzjmhe7ve9wp0p1rDf63+EMuHtJOWbW8gi6IzBCwHXKIt6JenNmVVh\niuXnQQ9p2TTI/B4g7oBQY9WY5thL1KnhKbsCcVZY8BmSn5pDGIEFvsnPATUV\nGJZ6iyu1F3ACdc9mGFmtxP8T63trTY9TI6Hf6wizbCbGKh/Gv1mbrN+f5J3S\nCgPK9f7jD7A0F9JB01+v51mylHuXtezMOWeLrioQ8Ui7iXIciO95ZzypBS73\n6Ag1ZsJhVKEBvzSymwMmWa5sR74Gs7FAidL0xPVzW/R3SbtSjulyFPDoWCSc\n1otdtTiiDzrodaRoHGTZ5HJNuCD2rOOGZH4t1Cdte1PEPkq6c/kouDgm4+7X\ndzNJPXcgt49FSUU/OZwyFb0ytZe2sJ2R6o0y9D8teoxlrnuyKjjJUM6Povhp\n53h1+3x5lZE2s98c2nFVKIHjW0JP1IA+f5w6/19aGPyfcBDzBGlFSV0wzDTd\nqU/nr0iG43OcLE71PdoB3WXdFFuR49eWJHekWJNuQ0beHSmKMXb3Ri8E3jGF\nNQLv\r\n=VDTH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC70TmhOV8YVcw4zbPJqHlcw9DkXor7wguPs1fZzBcwMAIhANzqy9HLIp35jiD/x38RzWqDm/ZAmiexXgEdIKbCTlZI"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.6-next-1614076455-fdd66fdc.0_1614076757970_0.990392724641384"},"_hasShrinkwrap":false},"2.46.7-next-1614076524-db4cc33f.0":{"name":"@xdn/core","version":"2.46.7-next-1614076524-db4cc33f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.7-next-1614076524-db4cc33f.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-onCq3g3BmqkUiSDpK8zpLKj+QVP3bp6+FGnjWJdK0vOJewcIByHoFCK8EcyV6HQiPx8mLpcLKbq34WNBvaBG5A==","shasum":"bb32c9dd00945824b37bab30dd1d0bc287037685","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.7-next-1614076524-db4cc33f.0.tgz","fileCount":181,"unpackedSize":665618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNNuDCRA9TVsSAnZWagAAUpgP/iaR8wYNHbgbvX8ct+gT\nfakLUvezx32K7lSStiGW0j48PW5JXwgqEO+B7Dku1y1ySXNjB5KutBqC6Bsv\nW84Js/KYiXxgIJ12JPloqhrPQinoVZ8n9lb4kSHN+h/8eTKXmHbd0dTOB0WU\nlYop52KGTjLXkXHsFHldlYtGJ5Ljs2GncqiB1zExKDsgFdpNQOmZAdQDz1tu\nVp26NUtINsGEPBKPQcrz+yD/MSumsGiJ/QLf+CCCOAB+Kui4ys1QQ6igMmbC\nqwmXkkl9GFAHJ9lxZ1knMPHGEh9eYirIIZfpstewFVr1fmcRzUCxKuLCe7iu\nXKhdH+es0rJffMxgm9Bh7PRSfN7VkrcSJ6CG7mMEC0SHFcv3p0sKA2hBUicA\nwVaU45sC0TxDZSwT93OaYV1kroFSigs/K12zWNaeeMLekzyHqySkkXcbxjYf\n5KxxBsy/b77AJuAsS/GBCUsVT0y7CG/jyisYWmcn1xLm6OKqfha8At83bvz/\njWASMY75dsQg26dBdy+LrzkoAl58dLhkCGPh8JoWNX9b+dzoIGJaD8NNY3Gj\nv2dpjgwDA3LousbKiUcBZCrYNVKUFKBVWNFZ3APCCa5XjibNTDUL57M1FaaT\naGtdy3DWwVrG2bwd92RZRbVFMudOSA4a39rnVW+a2bNkbI+Lw9b1fakpdsPo\nmlK4\r\n=G/OO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfgCGS2dc1AzaJaCqWHL3Jo7YLnjtHTpZ75YGYv4mJTAIgGgY1wkHd5QiHSBiBOrGpBxmcH1OtT7yTJqBgFmYPNMg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.7-next-1614076524-db4cc33f.0_1614076802136_0.6144585584830384"},"_hasShrinkwrap":false},"2.46.7":{"name":"@xdn/core","version":"2.46.7","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.7","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-57HUs15Ah5JHlByN1x2pxACIaeCaLyb7NOHetCKq9n3Sns1xlmAcMkg5Pj8xQqbUsI+qrqdqze7Zzb7QZSrKKg==","shasum":"8d85baede5394688531c1b5079c064061df51dea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.7.tgz","fileCount":181,"unpackedSize":665636,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNQo7CRA9TVsSAnZWagAAmkMP/jeGyZ6qa0Y8JK1gx+Sp\n8VEdgnhJr5O4fW1mutXgm93iYuSx/Uu+tagvCzsFoYdzJJgBHEyfjAMV5ESJ\nYnphI80A/vlTVVkK0U1qHZJP56lzkhDFnT/JgyNkj4eBHL0gwyscILgWLdTA\n2VVsalxv7e3fJIVJl65Qe8fH62jcGPBt3c/zdDnx1nfuwSZ7xUmYVXExkpZf\n8xVYI6FFOeu9EqFJ/MotcHXv9K53Spd7sUI4XwldLWedN0psIWT4jDawfDRN\noQAA915ONTU4o+Cryj6rCDisyuEESs6azVK0ZqZX8QnMvT8I1HfjVxiG0IKg\neyfdzjhadmAtayDttNLFEO1f6fnxCsw9+vmKrwbT53YFbGfKiZqyeNKW0UBP\niyvDDOiwv3ImekApGgnGx4b/pv8Gyp9DSf2yU9woRchDiYlno1oyns5WD1Mr\noP1yP7joHVN3PuyFmIlGwshdwjQ8x5x/27vNQhYef6wdvwiIfFpmcUJiHI5y\n3HqhH73YG0hXJ/tQgRm9MeoGPVwUdkH/kCLUTcR0tXSKLFdvOSHmFMJOpEGI\nQioszELzG0WJZE4Pa0HqDl0h/M7B/S4HZqgnS5oe2W8+ut/YCosFbWYZmtei\nxh2u4fc7vl8rzxxJrcZ45OLXS8hWqxW8e1ym7U4ToS95jRc3olatdE+qsKat\nHI5A\r\n=s/Gw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2f5KYS6HZrxolbWZ+UTh5U0aEQHzvQztYCwGCg8RE/gIhAMm3bRFOavO0I2FdpSArOCdZZyfwtj630ONKzi3ZKaRb"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.7_1614088763211_0.017842297081453573"},"_hasShrinkwrap":false},"2.46.8-next-1614088593-496f8302.0":{"name":"@xdn/core","version":"2.46.8-next-1614088593-496f8302.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.8-next-1614088593-496f8302.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-a/GnrvTiHyFmwoDPA/jBZbQYCybnDtIodvOst9zqFftGU1dfADPUxRdvIkBHYt7dNdl49o2+bt7X4Re6bxgSog==","shasum":"c7c87b3bfafd13e56f87f20321fe35e19220b620","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.8-next-1614088593-496f8302.0.tgz","fileCount":181,"unpackedSize":665706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNQqmCRA9TVsSAnZWagAA+VoQAIYoZFtfuDJnibA9W1ae\nPwjZQMYTkFJsdYlnbTE/QbhZJ9CrTBXelLSnLDZu/AfX/Rkor8JL0TJkEcjJ\nmDyCAWnWFn0X4wtVIUlrAWwUH/w7p+vFMD/OmNdv5CGfamrz5mInblM0PEkL\nWWsk9X7LFHEB/yoNbE9fYoN6/sr1JKJX6nPL6kTQF3H83GkoOoFv75fAUvkj\ne2MICEzpyEEfCmbFE9DPMn5MmS1CyUXBDI9HUsMZx0eOWfXbkkUjSnHYCt4u\nzpJu3v60Q+NS3idiATKlOvlOmx9y8HMlTKtR0UY2aB/4opmtm+eE8qzuMUTW\nLT3XNbHSV56vmTS3iNibbW21bC4vMDRewpXWNoHxPHrCi2WW9++efApK19tR\nSWElkFAAgIH+rYg/6Ny0GaPqDo7fCwrYnlqjuUiE12nApPseGLGHR0mRp+UK\nAsHvG8luxPd+jsz4nbpqIb1IiOFJ2pL6j9nUNJNe3qNfXg0DPEbQxJ3CB6i1\nwCMtP190CewCdSip5edz0s7ssbZEl65HoG/zOvsn9ndPitOiKstSnb0wWVmV\nNwcwRCJWoIIZfajHJB2j1TM2wuR3C1cO3etjiIc6FNsAvbBumFcz8ofnschs\nsJ32VKor5JBmPFJ6NrGLZsX4YoXM33Gx/xJT2cffPkkIXGXdwRZg41ilrSFC\np5AF\r\n=MQyN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG/EHpaz26GJMl3769kND+Do8VrRCI1v0vLa5N/Tvmn1AiEArHoZLTap7oZqbPRLjA0QCOzjvMvdFiO8kcHjR3zhh74="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.8-next-1614088593-496f8302.0_1614088870272_0.012251780878798302"},"_hasShrinkwrap":false},"2.46.8-next-1614117045-7ae3b848.0":{"name":"@xdn/core","version":"2.46.8-next-1614117045-7ae3b848.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.8-next-1614117045-7ae3b848.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-pkK+/6KGhKRVBOpaDDz3mqEQ9WNWLKCMfkvBYfOPUkYD1ovdpCf9yBoiwE8DAyxoQLCw4JFqyhL07046o2ILjg==","shasum":"194fde09c7895d62e110f8b773a06a63f31e9eb5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.8-next-1614117045-7ae3b848.0.tgz","fileCount":181,"unpackedSize":665742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNXnXCRA9TVsSAnZWagAArYMP/jxu49EJpiDfsleKz5uL\n3YmmigD3rvYQWyn+StSXiLJNYvmvkpq5fmSXI7hTzCzBGmggaYJM7o8ssdYI\nkW+NjSbm8yBnWk37r3avQl8/z4XkH8uavXJ+bWe/nTNTY8TmfGyyXCSL2vuu\ntN8g7u4hgGvJnUdG//uGoRbZmeeQhl9cTYGOPuyijAEK7FbndFpGBaJcVSiV\nApNr1zJI9ZdlCN/2i/MOvM/X7hjwfDbrLQ87EseH7/pZxQGegwkw6WfO3d3l\n/DlLB5OgdIAWqBhyT2lCBHuXLz6j/yr1KIzYVLhyR0pkYCcAfWHRmk08BncE\nOgiEDcPdrGHZF53lYpd6h+Mz6wajD5BUMVzmiOlQBoyccUqzYpI6FY26U3au\nBBWcbtumBX6zyrcw5slz73rjr9J6/DxkrttRTcL+9Or/BFOkCyRaaV3XCjFc\nGXZGehLG4bLuekZUO1GwkcyUhmrtWyUx9yoH4E0qB7JRb7xHI5878h/L86XI\nl/10Bj1dwfJLqa7JTifW9iqTkcyjG1V1l4868cNUQhMeE7YCJRJ2+HPURtKS\nHeNABRrEnI/t85Nptsg3H95HubOUprjpkqcuJ4qP6d2lxBmroI26zxSybLRr\nPoURM54r7NPJ/+XNZ//oeiyLX2YPXMRFkHU04Ffg9z4ZKQ2ryz07OdLN13VZ\noyLB\r\n=VDHx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC/Rmb1/zjBD4eVyyToYoc2VpyuKP1b343Fuoy4C/WmKAiEAhwqL4yoR2T+GL3Y27ZPFxY4ygRvRbzLPJwXUYUB1LDQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.8-next-1614117045-7ae3b848.0_1614117335299_0.8039490835370631"},"_hasShrinkwrap":false},"2.46.8-next-1614178072-21b025f4.0":{"name":"@xdn/core","version":"2.46.8-next-1614178072-21b025f4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.8-next-1614178072-21b025f4.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-+XXkjZ6GfgVKSbnzTZWdegXOIGDBApXzuW6hrxtPyT38GKUt4ivFKrjj5zNpB7LhPtgrNm/mMjHUX0jgye1E6g==","shasum":"f1176531a5c0430aebb0ce2dd9c3feb5001bb105","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.8-next-1614178072-21b025f4.0.tgz","fileCount":181,"unpackedSize":665742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNmhFCRA9TVsSAnZWagAAHEcP/jMLFrh1f70utN+7YZyw\nuRiCWU97OAya08Jc+GxWsD4Rzdn3MCGSJPj6sER8WkB2Y1iBzdWlMaJPWVOM\nixlsMooXLZa9cAr6b9OE0DksNo7nkBd6Dakofm51CW93ahIA4uAGUszQ0Qas\npiHWN+N+gPjY0eL6pbxvOmpK9UDfoKe8M2lSuek82UJkWM8Vo9T6ZAntANs/\nl7GPncEAOgnnDhvnPt1m7JErZP2vI5cPITuPoN4fxCGNb5k67the14h5bHjE\nke1fxs7miN8zVuaxrVmn5pFgqDraXMttsu4EFjM5+JBcjk2a5GgG7hMTYUtb\nKeK7XtrKBTwHR+Kg3tRYA/ub/M5b7iuTH1waO632rloJZIQHpcI4QZjGo1cp\n6T2c2CjIMRTWsnV99g2A7h41Q/AwWWBDoxc+8LNFM2gltv/26I9Ddqvof020\n7qDDKYKlOG+dxwHD57c0undgh2gxUCUH7O/g8Ur1ztIss/61oCazgRmEQbSY\nfNXINo2ty3m8saOpiAOyEIMIfJAcozyk5egkNAy+2Vx5GIkHJn0SUw6/mDNQ\n4BoEo7sg9Oml9sHaQBBy6q/+EL1od4oG0UucdcmRoy2/fIoqpvMIyCIT0Wv8\nuinOeU+jDeoKFc+rRyDPYa73zqW3gemeMRuTqGnse4wKxJKS5z7dtDF4boa+\n5hfz\r\n=sQzM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBPXQqFG/YxhvdlkDM5PSpdS3NuQeItqwQdKfNr5Z+38AiATZCCmXNzIeIWVSme0qdA7uoiWhCzY0yDPnJMqV0CncQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.8-next-1614178072-21b025f4.0_1614178372594_0.5133474117078951"},"_hasShrinkwrap":false},"2.46.8":{"name":"@xdn/core","version":"2.46.8","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.8","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-GrV3tGPpSvWYbiur0jLsDA7HNbDCJVMvVF3NLkuWOP1Yt8R8JuSUFBmFeQwCiH8EBsS2i0T4kYmXreTuORCy5g==","shasum":"28dc6d3b9a3a3f057dd7b557c02e65cd7a67acf2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.8.tgz","fileCount":181,"unpackedSize":665672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNmhbCRA9TVsSAnZWagAAojsP+gIcpvky/Zdvh8CghMof\nAr+GhkGwuhGNWFR/wjfKMNBYCPHo01kA1PpiHX1rghmG/dp1H4/w8bROGeip\nnXmh7vZRH/233nB2U2Xhwnf9+mfEsali7zkdncLVdliq+6fCZUydSVwX4O2R\nwEcw8POeKh4REzWAofAMrCGJz3Xw7Hy2B4QTqwi7GRtjZmeFyohYnnmTCxvs\nSWrhNWBQrwVl6Kj5dwInQ4Bs8qLfnLarp9aHAGwzhAlRONjKkL8LPlz0yFBj\nWf66MdYhRqacwuAH3ECr+mUGYGNB5qCsFTYaTFgc+6/8mT1e27hEZH2yCH/a\nf59suirEjxwc3mRs2B3vvBSJSSg1WJYuk45ecktr2oE4TMahqpszGlgWZogQ\n+CV46+ZQq2FlFHD8zc65AlO6PYDZ5GAAts6NvLPcC9gNVU/ZfLL82Jbnccoq\nTQoV06u8m9+DmNOqabAOD4WdDwG03BgdAI6jTwPIvEx9s7RP59u1mqBSxPlE\nYxnpLfgcUBUFfzldGUls8rQoEFsqLuMGa+xCwqlL1BjDMxUweljzRWu7GTmE\nyelTcIh7+AV1rHxxAvnnU1PslFKs4QVS+9Mrw8T3E4qZ/UFFGWPxfspU4W8l\n+IrtUbNV+AeaAe/Tp9Tmsn14LxsvAcjva/+yMHzig5e9AhJbkzL6dgT2BoBo\nbXtW\r\n=zoUe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFht3zwrZwGJZ8P4j4t1QaQ1BYvKeuZAkQ6jWVFJFFzQIgDcdL2IJczi9dhkXM9OCfcnPtUYFhT0g4HUPWwnVahWI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.8_1614178395401_0.006530691340113748"},"_hasShrinkwrap":false},"2.46.9-next-1614178754-c864231f.0":{"name":"@xdn/core","version":"2.46.9-next-1614178754-c864231f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.9-next-1614178754-c864231f.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-V5q4bqc2+10nc3ZLvdLv5K9k7LR0jp4/VKQv9VoM0eJFi9BL9UfuClEpREGFKE9aeRzqxg45u64JPvmRalWw4g==","shasum":"c4288a324398a30bf06185f644df96bf69db88f3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.9-next-1614178754-c864231f.0.tgz","fileCount":181,"unpackedSize":665742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNmrxCRA9TVsSAnZWagAAl8YP/RUWLX3sgylOVfOe6EMW\nYr7MCKa6IqJCtfJacLS/3PqMoktm9jro8asKrSJNRThMhsm0Pk1Af//bmZw7\nh5PeOicimiJ4abvHH5bbCT5CfQ+OJ/KE8kAWjHkxMeau4fZwEMM9OaLCYWCg\n5Hp8N5K2xGqeNAr5S9MJHijCffCugsX02Hr18kti89wnvqGy84uj7ArEtiM9\nuA/6Tw/ZXDDyTiCUCMui8wnk0MNd9DSvB/LWe9bpdVdP6JlJsmzLlF0yBEM0\nOBrKrBxnUP/6RpYyb+U5kL3QY/+YHk5+HYiPBYXC8wBZWFRxNeLNi3LOUMhk\nZvumHqeDSyIRzqrK1ULAAMfFTfmyUrVyW0OC8moT4nEWe+KsyvQJgoQivhbo\nAyOkXzn94jC3He01LOP+QOgTF7iSwUNzPd6GSIv0o3W9PAdDcLhmswqhfeQr\njbaXA30RbP3y6l8nGaEl0g5LGF6W8sLCK0Tc67eXDwr8kwTIc7oI1qnOgRVM\nrRXt69sznljPJfbvDHJcU+1gZccT0QGt7UItSa1SWG8fzUlEa2YasQlnxiyK\nJpTRUlCGcKfGhtAVe6O64dbindK234kHO/34HoLCLzM5hvZBguX8VwiZWAVl\nsaEWc4rKTA2uK4ZBl3nxDgWimbNlq6vAHsGVmMB95yBlZC9OaeSQZ800BHRa\nwjSX\r\n=hGXI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFT58J1xbAGC+52uBP5I82X/dPsmkjqIfB9yARy/HXfRAiEA/W5RRYJ93s8UMtvh21WE3BAI2qrNzgGUa6JYx3q7DHE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.9-next-1614178754-c864231f.0_1614179056304_0.693422120479138"},"_hasShrinkwrap":false},"2.46.9-next-1614278090-bbadf7bb.0":{"name":"@xdn/core","version":"2.46.9-next-1614278090-bbadf7bb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.9-next-1614278090-bbadf7bb.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-RpdhEE7/5XO3gfI8IzISxyTuGXNuGV6movK066URAu7ub87oK4UFVrWR4Zi4lE+lXMRU7drmVZ+3ncT2NC1PeQ==","shasum":"a1b0321b94ea81964caa3324103b5e17397b5280","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.9-next-1614278090-bbadf7bb.0.tgz","fileCount":181,"unpackedSize":665742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN+7+CRA9TVsSAnZWagAAS4cP/Av/hsqvOwEr70GuvhTS\noItJmbPvQElhvw5oaE1NmelJaX9hFWSx3Ozrapb2qQMgk9YQYfE5/ePYhLK6\njcFU6lyrGwB/Qt3tpg1pkKnohuHRfWHj6JDqmGku0mtybrbEhpXjjhSM2BBM\n4AOY7wanDFjnrM3PUkNNmodgcN/Hgr86BKRcQpk9H+rdmjAU3HrbgR2AE+rM\nXDL/zHFQgU5bziSTPxDlg6EgNGLIN7CKa93azVxzTjgWdVM9ywVMKa9eJ0xn\n8IQtq1fRM+hop3sYdo8I7O2TbnQIqZmt/M6FTpARWE1BP/Al0mh48T9mggZy\nmMmEqxdOZpw4jX88R7vAy+SnwbqLI/s1aSOQiiLvpTG8amwgeaf2Q5Tth3DW\ngyZ7jlBS+xHcQbWqtTLyP4Lc0qPXURfhJyfUXoy0igF4fwB6fbEpEz/BKwYj\nRl5PS5Hce/UfuHGJkGx9C9rCoeehG8ycgWhy0UmDZwH788F7W2+tWOqT3KAU\nR40jfCUb60VOSbmzTYsuEpBPQqvEz8lk2ZMZKfHQw+Xtw/m31DtRqlarJuDl\nhtYWvt/w1IAAfUw6LKHQ1lzgaZb3vSEOIk9b4BQvm1UNuEkpgr9m6jam4VHG\nEdtgJi9q5BdpOAIOV/w0dx+ZC/WrlzLpRyRMyKnfCrfdzwb0XXiwby6rkc5o\nBeZJ\r\n=TNeZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFEUOx+w+/UYKy0yu89c75ZZWH/IFdUG1MLmaPBjp4jFAiB7DlANK1DIsTyMKoP9BLC9f+AzlGBovkJfQXOKTNbYgw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.9-next-1614278090-bbadf7bb.0_1614278397420_0.05689238937817298"},"_hasShrinkwrap":false},"2.46.9-next-1614341798-e8bc2e64.0":{"name":"@xdn/core","version":"2.46.9-next-1614341798-e8bc2e64.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.9-next-1614341798-e8bc2e64.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-8ye91JJjmbJ4J1VxUjt6j6hDlcj+rmvN3wO1KapoJ5NNUcx580m98vBYU7F9JqtLcQmsNKrKXMkk4bh46McRCg==","shasum":"e73f8946835a461db2a75d3bcdbf7b122d38ed02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.9-next-1614341798-e8bc2e64.0.tgz","fileCount":181,"unpackedSize":665742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOOfjCRA9TVsSAnZWagAATScP/12ylXkhA3rgpkfTbxcp\nPflR9lglHEXakHX+WKfSuPCs/z1NJpI4MYxATkcruCLGE2MxUcA8ygTOxbuL\n+/aU5XhgDQtsUSvis8xGFF/IGxPRRT/X4/OcVLSAZ1z7hWAKbvQWwzVVsudY\np0LYiCJkuRz1VhtZnnzsXnYh4F78qOqAgBvUGGJB00QPcUnFcuj8GNbyQpJ6\ngl1ICNVYOsk3B5T6g4AiVYxpxSW6kWCu/Rk+Fm2B6gOjRgAeb17zrdPNVAa0\nIYWuhd0yaEDFY3imY7BUgC9NQ+ZWALE6pOvQX33i6luehaQOZiJ0HsmugJcx\n0CuGY3dBmziUBulD+ZQy9MOTDFDIAM1LhIDRGsrF6VZNKNHcl2v9JcuNgzsO\nl+cMRrZ24M85Of+rOZlw+MhUXcKauAWUILRNsaHCnK2wRFbzqNaU4q1eVTFJ\n7N50pBY1EBh78M2m0V6sQ4adeqzjXqvz06cf+x4nn/hztO1/fHUkMUux1svb\nsAsi0hmLJlD1TIrlvndUPmXjJDp3yk9BGzRZv1ZBA/AhXuN9K1cm29iGdOZf\nmx0jQBs90qLJxJHytP1c16potqcxCBpSnPb0BOpfOmnx/KZUMDUlqj6t3vs1\n56eRXKdNu8zI2Wae5DnsqQh7ur5VpO8PFc+mWgcAWCatz9PtpU5P95h0obhN\nL24Z\r\n=PuUs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8EW3XvFM9UOm/vc9UCa0vMgyZKNuoaRukYOum7co7XAiAahZoRyGhlkBlfVgaDPOBOsHaPFJ1PnOcRe1gOXNICTg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.9-next-1614341798-e8bc2e64.0_1614342114826_0.30744197697583875"},"_hasShrinkwrap":false},"2.46.9":{"name":"@xdn/core","version":"2.46.9","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.9","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-weW1l7vdTpPbFnIO+OgfFKHY/Lz6+w2Ktahgp1U3X6B4flAHgLE9M7b/olizhDUHTb/+bcnAlKgUdK7huJvY8Q==","shasum":"500d234b58f12fdc7e06f08a902e49d35cc2801f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.9.tgz","fileCount":181,"unpackedSize":665672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOQKQCRA9TVsSAnZWagAAGoMP/2llezhRxiifPI7ZadPg\ns0jxsNDR74RgbnEvZmw1LGcmoFxzAwcDCCqlwwz+pvfBhOVyafDR86DNBekU\n1nfVETM+8FB+9eL8ORCpsd1A1W59YgQuIg6G+A2q2/KP1DqwjZW4zqbLWFYe\nwHZD5hDyk1lssri0fYju91IptwklrmXaO3/RL3hkO7QFw/1UYK/kGZkxpUDv\nzdT77bejqVfhzf8/LOTLo9+YM5COC9s4Cunz3IMoHYrd0FxVgJrYb4W9FxRg\nS5w6JfaBFDKcpM6kU8ck3CXnxyFQoVmAw/KCZH33FOSotr3sAB26oZJdAIHq\nXxo1+xoSduIQHSLPFUIQTPuVhB1AxThqME0GYmavb3ITMO6Ul9o2grQ/r32O\ndHOoF+jTNjJMD/3t2vT7etoX444cp+JJhwcsBswYts8+YPyZTKevNiNKIcm+\nYhy9UY8E1xwpSK+bOv868dVcsxukabrvqe/xbESQ1JGYlNW822WBvQKX8MnV\nsmL8k6c2Wkiq3uGcIQ3EVUiI6WA1Ij8sqEJnqbPzeIS9qz4cktygNdQI1nEm\nMcERl9PrJk4thgDSGiDnXVx6g6kauEhNMd3n4WuZE0WPKMWg4LcVIjn9+FCs\nWj65xIsWyfX0qichtrCQRGsbVKloCmUdoz0DBWMNwx1Zjy8JugampNo70AGH\n7ubb\r\n=2VvH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuVaqtejI/nVkzuWHOhTojvyzJduSO/JAHBuIQ1vc2XgIgFAjiYr0hTc6LX5+r04p0Vvp6tFgDpXZ3/sXBczseg34="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.9_1614348943676_0.6271717944444988"},"_hasShrinkwrap":false},"2.46.9-next-1614348692-61056b85.0":{"name":"@xdn/core","version":"2.46.9-next-1614348692-61056b85.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.9-next-1614348692-61056b85.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-gAI738S1XeV+f8mO6J/BjWZtKSAWkea/aEgOFp/IJ19JI9vWUTHFoSwOpjKmmSO/AM/akGbul6uY3xWXnyIIxg==","shasum":"b4264eddf005218316464379706c78c3fbf99339","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.9-next-1614348692-61056b85.0.tgz","fileCount":181,"unpackedSize":665742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOQLRCRA9TVsSAnZWagAA1KsP/34J/AuB05QjBIvp+Hhx\n6IDFmR5FfwHh3+DgYUh++YhdNG1XbOy0uTvj2SEJleRa6GXvKsGKJ2UUEvV1\nLGYbZetVOFfvTM7VFwRLtH0V6H+gKqybnuOLLizwjN1909JGUR9TF+EfgUHy\nYtKL/IS6dzqG24D4UnKbTM0WKYWTQXLrw0YpEhZnZHNQFihcd45OFCavIAXf\n0fNfQz0TYUNhUNNXgxRFRGNO3SATsmsZIvuSdRk19wJHVa06vmyxq+ToVHTC\nxQlL3q3bII9t1yO/sAYzEol6+flssbFHw4HCdVaWUlzofoWZ+82+LKy/OgyR\nYqERKIgXRWq1r25VoN93JVyAgTnQTdn609/FK9ZUXzoinmO6NYMUoC/8zYN3\nJHXLcsp17wsj/PgA0x5XRGBG0XwPsbzS5mxPVzsjItdeRfktO0SAekmfO6U7\nuuXti2a6SHH4OISZByyfyVWeVdEte4F8ih2CcpArHeBTAGNXQRnBRMKx/Lih\n3Mj0WQyJ4+hD0oG7RFb7Ftl6KR91weS7CRmarTL71KO0Fgaa5NrL79zw9sVo\n5PzrWW6CuXXXnao60bJQXhHuUWSAzMXc+RYyQIA7wOTScHTvTf1H4/4I2uFm\niqA0iGlF+dQ0G35cRJJ5NeKH+rtmUvXGUcvA1KARFwH3BCWcZ21sWBkVmEib\nNVGr\r\n=7cuJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2FXFlJob2mcH22HCPmldPJFNt1oww9+/Bx3913ODG1gIgXsTU+0wENwrCgV6f5AiMwS5VXv36Xj5WcXA5MylvNmY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.9-next-1614348692-61056b85.0_1614349008905_0.09115429717939993"},"_hasShrinkwrap":false},"2.46.10-next-1614348751-5e207739.0":{"name":"@xdn/core","version":"2.46.10-next-1614348751-5e207739.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614348751-5e207739.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-0Lj+STx/11LyAE7yStY0fRUYIkpkXAiHhJpp8ipDKvy1rF0wr0FYJLaXmB2o6F+psvmwBCArorJDNJ78T9+Lkg==","shasum":"bf3ad6b7b441398d3fa23b1989ec88f4c7fa9429","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614348751-5e207739.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOQLvCRA9TVsSAnZWagAAey0P/1OG2XiLfyl+1/xO2svi\n1jdB1WqRBiWOfl4sV8CgNYE71ALOi+XrF5BJ3H6WTj6Kwzj62Pv+NWsCe9+V\nzGudW5Ok8DEnvHX0ogG3USCuJunV1FGgW2EiacRFMmAQorqjr2dt3MuYJpMR\nDcONJAK/QeyAZzIV01g/75/HbRSUwYTq5fw8LQuB1KcPVqfOV6r2EsvcefXF\n2pQ/w2k+0XY6bbNq1N76drJcATK/kOixFZZTeolhPAsEGxsvDai10OroTTas\n7DRHlE5HZ/lW6cMnNWYcTjt2nkWzCIu2YGK5pKIs+cptxUxgyo3tOfmx8oAi\n6VlpWZSXWYKYF1bpgJBlnxj6dYjlz96rDEkX9oTl5EFZr/KwYY+JrNNqTlvo\nCjnV7JN+F3vkvsLVPOouN1Ij/YnLExpQjm6UZ8h9/eIXRiXwvP1K9b4kheOd\nHXQFS6bVZM8ztBvpNhERZPROpa6BEBuVB4n9jrLSac7y33nVL9N3cm31EyPd\nBqJwabKsdicLESrEk2Jt1oi+bpYtSiolP7LiYmNOsbUdiyWHTvBL9dOxrGd8\nL8KwK0lnstBDpCk3N0/gqaA6tD2+vhF1l2TNXmXqHcWPOJv5GpTo87iWgLZ+\n/blI9Re2lUtEJmdkirZKoHKa2rtLzoOr33pz61w1jGMTocYV6lv7GGHGMiVm\nYsam\r\n=DbCO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAibnj4rK3rtJCcV8fc0+2K5PVE1/O3BHcVJG9ux5xNQIgHQoZ6dxGKlhEbGoogrAy8pauq2k26MFVzLpsRoR2Vts="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614348751-5e207739.0_1614349038514_0.6114562234408836"},"_hasShrinkwrap":false},"2.46.10-next-1614636547-5a6a51a5.0":{"name":"@xdn/core","version":"2.46.10-next-1614636547-5a6a51a5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614636547-5a6a51a5.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-7MijmPWz3gXtLU0qo0dlZEPGXKNTKOczJIoLGbBrE+qXVTRwkBB0/PY/WOvmYMa1ZSZsFs78cOB5+ERw6qzIPA==","shasum":"1999661b1a942a82b52a75aaabe631e557c32e65","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614636547-5a6a51a5.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPWawCRA9TVsSAnZWagAAO2AP/jSItaI+DfQIxVG9DrRJ\nfRzgjMbRd32AWRNs9cUsffnxQF27+fu/WG7AdW/bZ6ydTYIv7xwcQd/SH3p8\n5sES7co/rjqJzLkEJEAUq+BjHIpiOsT14JhFkU8R++mjdEfh3xTSuwuVyhTE\ncJ7ED/wts70rtNz0fAU8iLT7gNJFm+HD+xmu1NBt6ZiOMxal2qdkU9yWoKTy\n/vJxNbzDJl+a7rmX8r9CHy1dCrMEF9e8u+asX+bYCQo3oaT5T9RmBnx8Xj3/\n4XizJs1QbbKxoucXGD3bkSf3am/wDDNv8c7ZFIji7M1V1sMyhYuLofXGP2vj\n12VlvB8HdLznxNqRujj4exQjmJSYKxaNpyLXkgmLjiWgJMGNhFdRFZabYdQm\nKyosSy3DRPsETaVHfsmM5urk3vDPVis3lFzEu1wHPQ7HZu5VIx+GKRitbNBQ\nlwlM8PnAtwVDwY9IOIqJiAZuYu5kly5PGFT/PP3gcyEJbF/ZZTDe8Op3jG0y\nNEee/d5v/y1JeQ37ZDsO5ZEqO0FHWXYtyPldwgZOqHjd8nJ+BQPUp6+2L3mg\nBir91cnRA2NJ+4A757Z7bpnA7JmeKJXehcGeOZxpt34FZ/1KIDgSd2GaRV8Y\nZ1o9EgRM588W3C2mIyRLEFIuaqNHEjTi90o2125pLorJdwPEeONo7mVuJ0XZ\nQcit\r\n=0ifC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4V/s0I84nskE+lmrZ48ryUSrDPvXFJAYqu75hHB224AIgBY0MuG3eY2z6BWYk9WRHv3IDwnpTllmzHOmj3p0He54="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614636547-5a6a51a5.0_1614636719466_0.293302022107248"},"_hasShrinkwrap":false},"2.46.10-next-1614656181-0845175c.0":{"name":"@xdn/core","version":"2.46.10-next-1614656181-0845175c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614656181-0845175c.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-QgFZYiqQ2G2olT+Yyi4crGA1R0E2DkSP7dfFuQC9sytVPgsvbMvHleEGmDR4Mshln90gbR3VD2Q1H2CgyOf1bg==","shasum":"ef709d8a103a6f0246e3328dcc6b9e48baec7acf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614656181-0845175c.0.tgz","fileCount":181,"unpackedSize":666607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPbOfCRA9TVsSAnZWagAAFbEP+QAN+DJVre7UJAQo7HjY\n2hlvNVTPliRwIvCVGUpj1zzijRWEhU32FavfItQy/FO1kXM9QO6u0ssruzz5\nVeWKDvYMkX5OBzHpQargzRip08bn8UNHv4izrH4w12bbuoRaRu25St/p/v02\nr7L0rSdIHpb8ImVb8n7NZMuk6R3W0A83Wnn9aO1p3ti07FkQqnQJhyZOHejc\nRhMuhhgc/hdBmn6G7103Dm7QOIneOYpNpZZsJPXx+mc0Fb8tCY1UFiujRW/6\n5wfIByIvU9llmddOjHG413i1wexWtJMhxUwKEKQ6sqDDNavUN5cCyyKDKDBn\ncxJkuVviagBFDkrgT0c6rqZ0bFXiVaEvJ4CXc0BZ5E2prcyu/Qsifjd4rjc0\nnOPz7x201HmpU/zymOc/1Gl3sX/F8QgBrMCmfA7UjEfdjEpSukoW04J1TFav\nNN806g90vpwAPqk1a21dmUCBgrArPC2F3c6dm0tZo1wCsuVekFLoNDj9JCcP\np1URR8GLP30ilB8BK6CTZqu3JwTuVfDfseQMiIHGRyjzvX4YQlS2j90BbGrr\n+yForNFcOYy2OKz09A6sqWPOHHCOLZDBLKl/46lwfEJGzUz6sH6BgjMZUWBi\nTyhcb05ARXLzGyoKoZbx/cWyre+vIMxuCbUehyyDIqYzwpgyKEumzs4Q580G\nst5u\r\n=NC7Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHip7903aVPSdRi+Es/d2dfI42/WAtvsTA6OqgoU+oiaAiByaSVbKUrrN9Tt9KU+tHn1hdJ+lUfHXOFEl1ENRYX7Kg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614656181-0845175c.0_1614656414836_0.9652478122611479"},"_hasShrinkwrap":false},"2.46.10-next-1614656223-c940d937.0":{"name":"@xdn/core","version":"2.46.10-next-1614656223-c940d937.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614656223-c940d937.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Jq182D3E4O7pEOE2JftoKJvlPq0Q9eTkamyHTh+MiH0kIzvhy1RCUkev3Wa9RU029s9+vzWWA+m3oP02bWhN6Q==","shasum":"ec0cd4c4503f3d257ea4dc6793af1bfafcf056f6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614656223-c940d937.0.tgz","fileCount":181,"unpackedSize":665798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPbPrCRA9TVsSAnZWagAAr5sP/jq6+DIC6deT45niHUq2\nE+UISz5znL4CB/g8wXOMuDX5PD00F8S7ScMutJWSR+cZYdwU8m20j3BoiWp1\nweE1ceM0sXHe1jZW5d6+08+1mz8CWd5rv/E0sjqdx0VHAYxUPQ4Ru+5C8T3I\nCB/jalSc5FAneEZBfAQw0Qe9pkOtaJaTUHtddo0hlncNeO5/3aDlrMe9N6oH\ncV4qrxC08tzgWrDnppXLcPaDK3C2XfJALEjTBrFfiApQ+xrwPJFoi0LzpswK\n73hcNjfRDM/5o1XGyMsElFZWSZWZGtsUC98tO3NCYCIfP5HuILohxLdZsaqi\nU3z1X9XA+0Oor5fYl2n9pLjkg8YtQiNKzLz199CEyFv0o+cv5ySevtHXViuX\nAFVe5U78EPwWti1mOa3yyTCHmGENbwTQe0V+ujv6kbJx/OAdnmvS487F1mZV\noLep3qkVD+IEPJhzB4J/nXyNJqUBzx3HGV87JBYAM3r1QymBIIHtvFyvo3K9\nRts21nq5BVfJ8TJD1HCkUWBH1DLfVVEoglwUfhs0h9t3z1IwmJfLFhu5b1aH\n5qvn01on05Zv1joThGid4QO8ELcPQWO4f/iJlZX5F77r5c/Yvf0qfTdAFpsK\nG8dH2+kJzAwfpgsgnj1oDUCHmQoQU62TMleYv9wjqBAKYRk/Eb19Gwls0I5U\ndUSd\r\n=CXfb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXnNtqDwWTJy17vk0c/33p6YF+3igIIp+UlOvyrZKa9AIgLQpQGvnz/I+WylSA/9fMXdhEWYCieD+coV3sMUQOfgs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614656223-c940d937.0_1614656490991_0.31379469910664426"},"_hasShrinkwrap":false},"2.46.10-next-1614656234-e6a0b95e.0":{"name":"@xdn/core","version":"2.46.10-next-1614656234-e6a0b95e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614656234-e6a0b95e.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-+9ECoUUK8COMcl2B74okUs7hPR3uSS6Q2C/t8RI+zABziOR+r4T78AahmV6r/zZiGOKZ7ABigRRC/d6T7tM++Q==","shasum":"e3e66a444c929305136f4e3e5ae79564f7e959e6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614656234-e6a0b95e.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPbQRCRA9TVsSAnZWagAAbsQP/2dhgLdP6zI768eFBAsx\nqfl4XYM2BTmT++s9QZFdKI1mQVxmyjD8k6WaDj8WB7TQByf8DIs1g8v04vur\nMOjjbovwwxu8Iw452yD0qdATqQbypV2ct/yrTeXhmxfnPJuDCz6iN4LeGZSp\nErwx7kH/q7I0msNZEt8ySEPNOLsqIfVQIRvGrjtVvcp5yJDwLwDvULpxqMOj\nGqxiV+Efbo7C0UlqOKeyPCJ+r46YwQ0EJenIIilWE69GbNIq2/+Uv97/I55a\nx/TyQqe22tc5XbC2FW0Cz0OCDNGRNqMEDJS3b/ZX01/15Fx9YADB2UT1Izao\n2NK/zxpi2yJpBRBbVBUm91iYeHjhkf1ybMPjK7bnN/8Vsrt9cGnt5hbyvr4m\nfma7YY8lhHDPzPkyZmRMMaB3/YFlZwfSeATRQZM10g+YUIFyVFf51nTpOGUc\nwC65Kr/F/FLpUYexJgUyQ0N632PLKRcsqdPSFQLrZfeuMdkM1TSSR79wjF4t\nIGz970mLXDFTl0lYiF+H4O4oYKmWVgh2Eg4/kh4WSMFSDx2zeKwEx3yxDwWk\nR+Sr0CBG0ZEzRidc/qPavdpGljpZkmHrE4cDr2p69DfBnOPOYhfLocMOGMhe\n8o3JBl83foLKCpk08AT+zFyCCs2Ugz2N7HITaaLSRnKmWz6KqPQ1QO39lS7c\nrtY4\r\n=XB/F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnyLfhe0CPlwV8jsb9f1GFznKutB20SIkTnfEUTpbQNQIhAINKRMwt0auduRdJC+MS6+Smc8QW+khP32PaYkMAmnMN"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614656234-e6a0b95e.0_1614656528548_0.3574482246387909"},"_hasShrinkwrap":false},"2.46.10-next-1614693156-b489ddff.0":{"name":"@xdn/core","version":"2.46.10-next-1614693156-b489ddff.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614693156-b489ddff.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-IVgABvElRVnVZIWWV876sNj0PR9SNfvq0k8XooSDjw+bJpPLHb/yLZYvbRoZ/bHXFPq/90YvCxN1VXExUjYbDg==","shasum":"d5642d2587e08ab41ea15eec99fc2159eb1361b5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614693156-b489ddff.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPkRaCRA9TVsSAnZWagAAEFQP/1zQ7WMHgtY0zOahd6P0\nK9lI7zH/xTYBiQ2VKCpcrywkBPbQ2jKYWVlaRgt6VOrHOyBclOkE6r/2wBCL\nhQmCKsJ/uXjMVQR5nmOMqr8ZtuBMzAoe1ttwBLDT9drmKIRzscVcgrCPzK2V\nEgvnaBnGUdV57+wq3r1cjZgUYkkNLICuKWuxft6UnNxt5YHPwePI6PGNyPF7\ngP5oanOs1ydjpq58eJ9dzKjTIUB9d+AzqS6OwjtEpvtgGdaK2y5V+V+dcV7E\nZfl0jAaVpoRRDe1VQ8zdneISGXFEbuspo5a0NxkxliJCEjCa3vJBJ45VB8wt\nWzkUhH+FYVBMI7an8v54V0nPEkDAz+rVTo6+0ywZDuuSfiwbfq7ouAe5plwR\nwzYBFH6Hvmkj2NtKBNQabi9UaNwl/RnFv4yJKiQ/CWeKMkTxxYJXqsHNxSLV\npxGQKni0jjOFHqsl2h3nlxBY+53gFm1cVwX6Nz4a1pufcylvp30rnfNIGKUw\nrTGjN+PIzYJg6OkuDWQ5foACAH3eNL+lozuvzUL6+Fn/nCT+DftaBgSDoK6O\n+4fseC2b16UwfZQBQFV9m+ZetLraojVjGhFKZAFBQOl8SszwEE/NXSir4VU/\nsXySxYI0TjZdPZH6100BAu5GINt64/JtMw6PLe7EXKEbGgIZwlwevWW91y93\nm9pM\r\n=7Yli\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbMv/uoObrFQSgQURtLTMojMwyiBO0H6dSYjSNdJgtKgIhAMV76HKfCZjEENn/gAU4FgnylX+v+5nbPCjYZk2GZnA/"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614693156-b489ddff.0_1614693466037_0.9007063364346004"},"_hasShrinkwrap":false},"2.46.10-next-1614693598-4a8d44b2.0":{"name":"@xdn/core","version":"2.46.10-next-1614693598-4a8d44b2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614693598-4a8d44b2.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-KwFkfZwR6ZgvZQx3xhKPlb4e6GSmbFXUMIjAV25U6qu+I5t1M8sG43jPJ5KhAfyLkgjjYFS8rjrJur4jo/Wa4g==","shasum":"32c9f877de9ca83e3682d1ad6218fb8fc67970f8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614693598-4a8d44b2.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPkX+CRA9TVsSAnZWagAAUmoP/1+uJSgJPrTrXcYBq/Sx\nn7FmWeHxGkXCQKtLAmiPJIegOka7pu6Hb1qzBjclrqOJ71I3vocne/mCs5/p\n5Q0ErZJcrCeM4lnI+v/YWXBRT0tRF2oRAnK9Xl6IwE9slCUiKcp0n/5U6iZK\nnYRsfMU+9UGb2SyBcLjOR5xgWAvvn5R43pxlYydHpAowLODCB7HEBi19FRQN\nS2bdrBHyRlisknaY8HP+2q5y/LNJPp8nAMNWLn5ddQn6fFCFrbAFgX/9H7Yo\nwKpfXCr2fT+BtcDE8P+KwtYP3Tu9hfsT3rj1qZ5697vDRiI13XJXuDeHF4Ao\nhoImMCnEY9phVz/G/ZjV9776dk1153qRo+qhBz+/R5NJwXPA2WWce9Aa4Lj+\ns9RE1kYNL3UlJnDisG4c1+Zt3NbKhUH8tnoHadvjhaR8L2B2SneJHLfDqkZs\nsxMQF4jkaaIQFbVAs8LSxkwj9tkoGZv+aLY2INRdvkEdDlNgnWTUyuVJYX4V\nLgOaiUtnYDNH894cX6dAXX1L6Z8ppmWrSwQfgpHmtzxcDsORJn52GeAQb5AY\n+EXUwCaU4ejkctGrIIQYjoFHPSQOc7upvER15ZvLwrNLZ+xHer/kl2uelXyJ\nPqiQpoxLQqLLhyBXw3pAmueRWtSpo+MkSsgpwMljClrhAy/NQNN99/Cdvbz1\nmyYD\r\n=IU3c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHkpBQ1uEJvpJ2HX7nWYWsttUmGSuyZ1hlIWLSNrJmv1AiEAx9ti21HbzUuqZRoHE8Oc9yYaP2ekdmMbcP9PV1t5pMo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614693598-4a8d44b2.0_1614693886044_0.47992547419501563"},"_hasShrinkwrap":false},"2.46.10-next-1614708710-a27b20e5.0":{"name":"@xdn/core","version":"2.46.10-next-1614708710-a27b20e5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614708710-a27b20e5.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-pTH3uM8C2LWOCYp335FsrwtKOyJ3qDPQw1swuubvfFr+iF9aHe3MXoVLyScZTz9Td+pczRYNbqFaYBjECBGB9Q==","shasum":"3a982ba4ffc70567122a1043efe0b1a818b8e1ce","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614708710-a27b20e5.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPoEFCRA9TVsSAnZWagAAbK8P/jIfT2X00C61qcnmIrlC\ntnI9fzMhICLFfDsYV32lSFpjk8t138Jn095uLP2nT1trLgwTPqsm5pbdz/98\nXPicmzT5AerQjIkdBi8q6W1V+WlCPm3URgx67hgaC9PKXBwa9d7RBGRkwZBz\noyrMCBldgFL7UpGVIukGo5hGQp3EEeBfE6CeQSO2M52F+tNNHZNpGmdEeLb7\nO2z5S90I1NZ1HVV2FkUKFhvxwB5WIxk/Yv24/WHeCqi3SzydtQt2jh6wC0E+\nvVzR4u2LOJbYZSI9cNAAuhxOsMnSyvP1I4VNsDzmtzA7kqOzYXdEHx368pXF\nn2kDxz1OvVZTbQ6UPn/2kmdNWh41dbKiEEG46ih2crPMF7k/fXimO8zjogbI\nCaA8G/O7mRRKYtqJegddhJmmk+O7SRP5i2loSr6seu+a479USanr31qncm2a\nrVe+r8YNXndQiMtB/EEgSl1TAYxqq0zks5OoGMUgeMdGqy7dfsEevHDWHqcz\nf//RvESJKhry+Mhl32dbnXlA+tdCnJoxr1LlpPyzKmgz6T+2+dszxBAJ1KUG\naWIJLZsfIBaWAGfC/ONVeb84VMGwibPvJcEV+W24cI9dLaLSRk+KEAaOmp0B\niU/fOR+BmmWIp4T+TE6LPgpaYzBMSbAcB7ckBiW3LXWyzXowvWyXSINr6UMt\nKac1\r\n=W3EF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGycxCCoKReDHTWkvXaFVuiRBieJg/00/mdlDbdxG0D7AiAjUgLrNl3GIoOfdslRqWqBOb+AoYRYSAlcaTjinc86Ww=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614708710-a27b20e5.0_1614708997255_0.399287408320836"},"_hasShrinkwrap":false},"2.46.10-next-1614717241-b863f691.0":{"name":"@xdn/core","version":"2.46.10-next-1614717241-b863f691.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614717241-b863f691.0","_nodeVersion":"12.20.2","_npmVersion":"6.14.11","dist":{"integrity":"sha512-h66AiJNbvldBUblfHr5hm4f7Z4oczlYqMbz5dD3PKw0D2Jqnmo4qv4/j7X9XEchxzA0rYP1oPF4Xb9suzA6T1A==","shasum":"9fca9b50b4cbe77e61930192431ed7d58900d9eb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614717241-b863f691.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPqJVCRA9TVsSAnZWagAAe7AQAJJyP72dyWTtkmBWn2rg\nzLZP/CZoO3iZVKwd4hxd6k0lk2/luDtdbDO/Et17CoBJYqmKM2zF+Y/KgDHk\nKPzAuFK8+BpT6ulAeW9i/mAMu7OmTWdzHLLC/Jn/ll8fbkn8iUSmFas9T1+y\nQV78MElrPKF9vuhhbWvhoWIlwxxRPxOiymNcIEdLBKjOYEb/+jI0dIqdcEqI\nq2MSLcukV485BDP75JFtXMvHFrun+VOK9UmBYKVxQX2C55r+6OBTiCRDKSVJ\nI+Nw0i8R262aMrokvso/knDEW5SNXRD03tq08f8t3PkdcctWPb/2Au+v0nsI\nGLPi+dfsdUmDskBOrzyadqHobkYvVBKs4Y5kbZqxq/BwdJfS/V9BJx+amcxz\nY630jXJZJzID3M02BvBYkZLZHyJafu2OpKlvSjEH3bniJobA7DLVJ5z5r11Y\ns7/XVciNGO2gpzoZa5ZhsdIrCk7yCDUSUn3srfpEMDXgeZKoZiZDiQfD0CAy\nTQTOtkNNfRGnfDTtZIO6DLVFlC9iwJUkc0/KhSR2Arj1T2ywEfSZlAn7e5Xd\nF+/W0BODydcfQNs1XAigRFwUkjIn7wmESgJ6zWKez5MvO3fGxXMvwWX5WLQy\n4E/dZcaDYbuIJCOV7QrvB9V3OHOz6etptTy73KB4EhEjNMNf2jwRzU6i65CK\nIRyM\r\n=uS5J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuzzEjt9S4bT8+TaISe0knDj6+XPDYSClWT6BDHVjYRAIgdcZ3htrB6c5MjT2p2ZMYx0PAsCRSjrkIwCIVCGFodo4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614717241-b863f691.0_1614717524745_0.17356637863782898"},"_hasShrinkwrap":false},"2.46.10-next-1614773176-fb27856d.0":{"name":"@xdn/core","version":"2.46.10-next-1614773176-fb27856d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614773176-fb27856d.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-XAA/VSLC9sKENnCatRYiBUqC0p93fl10FBRFE8inG7lINohMaCPzQ1qdLusYRGvmeIyz7gqMIjzYDw61qyxowA==","shasum":"9a71bd61a187c155c49882a6332e01013781854e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614773176-fb27856d.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgP3zsCRA9TVsSAnZWagAACUsP/02j0ZL8zbcT9TtgQ4Lr\nYDVN38QbCb1RqicagRxaiEZZcdJeHuDcd+9adfqb0dmmKD2Y8wPPQo4JrmUp\nSnrn2QNcRSkdllSCT4nNgJzu4pqJOPjzxpbUKxNr4XuLu027U6ZF9D/KYHnu\ntrSNYsYnTB4giVYvcpqjmyVwiHgC+zMDfdyvsXwOldLL/ZL6xB+v5pitIB0u\n4k/fyz4bZNULWyTuu3bl8Zy5TIQWsEVH9c3/+eb6n2NzXNlq9Q8Yg3/brdu6\nUaM5babcHDrQ2ubsuO/RPmllAzytLt/XNTYBdGpCJ/YoGrsRyeuglb6OJGQe\nmuMDqRBhMO5vymbT9w+UexvdlQmyEfsbTbH6YBccdCnT8KIa4iILwCuA09Ww\nwloc4LET7NjyUIj+j1RqdYOusOVxbsSQMgcWEaqjbarIjfO0N9r7QHtHwjEd\n/uWGuvbB/3tHLRGmeRGGd0VSzgoKGAgFJGEbi5xhFAJhSqsQu+hhcWgTa7df\nVHuqNbw3Hcsjif/PQ1NjNsAlNXP5jf8rcpRYBRH22e08o8b8N9KwZwwrxT/A\nHbhoXoPRWLhREZX+E3UDzJqdQ/yCWl5pHTO1/GGnNNW7J9QhFWwTahAt252B\nQy5oPks+t/tvsJDx7fcdE/VhrnioCW3PAfYNLvOYds1MZ8tN01ns5ZSUVmgF\njsi1\r\n=xr9T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqcffcXhD7MYxLV6FdPGNXiprFsOl6GYQlR5IbDuwYpgIgAfudTOhfT0ESkkNJw4wi5PEyGZBp8yaKbnYGBKVPHG0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614773176-fb27856d.0_1614773483439_0.2530730232540832"},"_hasShrinkwrap":false},"2.46.10-next-1614791421-d0f30452.0":{"name":"@xdn/core","version":"2.46.10-next-1614791421-d0f30452.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614791421-d0f30452.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-dQJWO1Rabl/IfqkUf3DhjbGKlZBlsQhfvYPUgV+t6nvWiv61pxq/8PXmRFSncOyxrdSaQ3dNQdbGNzBVIN83OA==","shasum":"22c5c2f265e5ad0ca3c7565bb4ff2e91f0656685","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614791421-d0f30452.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgP8RECRA9TVsSAnZWagAAMkcQAIpO1bsWB1MAwQ7a88zY\nf1R1t074Luzcpjs0M9v+Okg/3eD/plyTk1Uf0cdJaq1AIv4fKN/t9Go6Qh+R\nzrZb79UDTwt1QnnOIGTMX/EhPUkmXFLHzNRJir7nIoJ8igAaco/XWGCuD0+7\nR/6TOxfbZ3v98owr+HYYs4X5daSJw6AJOvpC2HfEhW1iQODepZSHuiu9Rvty\nmH+irjAhvVJq4Zopr52VmGcWV4OgEynHcPkxbq0T98lRVylGEuVCgfXFKo6c\nD/g1aHqbjtJisNx29IPztf2bWp0pkVV+K3Fi1FL5Q8WStfyZRvg7gB4Ct8ni\nbcq2Pd/EJeInjaCR1s6WQepRDtfyybrOQmgVhafuc/6OPVDFt81kqvnB9Nfj\n7DyucC6PUsaN54w0uWRHGInvKLzcsYF3yhrLTmgxyWvAno8n8c/3vt2ONE4I\nQxahv5+Mj2Fu7b65GLR/AZa62ZOHJ6wOjdQc681ubyDZwLSu+vBHkKknASv9\ni1ZyCpMLtQhjliDKJzlsehKxgQUPEVR4huJWs2IlXuP5sVP+On1YHVn1eBLh\nkwsoz0dQo/j7KiO/sXSdu00h/YGtQPv7831eth0sDpHza2XBTX/GSsuET8fZ\n2I5coa0nZ0+Wh5XVYkoYRXo9STZsXsen/GOwxR57JTOvrdlRFg4bpK1ti5dH\nyZb0\r\n=3lR4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHANCNIm6c34dXEJnxmYiy0yE/Vmt3CBdLdObVBmQp9ZAiEAplDimWL/4Os+xeg+Tvq0kKtj9QI8+LiRMSCO0nqXbSM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614791421-d0f30452.0_1614791748255_0.12307138972162202"},"_hasShrinkwrap":false},"2.46.10-next-1614800290-5b3fd33d.0":{"name":"@xdn/core","version":"2.46.10-next-1614800290-5b3fd33d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614800290-5b3fd33d.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-UoyGQWR1NFOVBnHftfxsNnOUm8TBr+aP/yR8xUgC8kDA0oBPKT0AwwQ5ourso5+vGk+CoUOQJsUyPCLzIrjZNA==","shasum":"0f01c076fcb62b25c633e9972876a77b0d04d86f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614800290-5b3fd33d.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgP+blCRA9TVsSAnZWagAAGYsP+gJCQnq1CeiC05MINtGS\n6/CLvspGsX8o6Se0SsgQU4hNUWW3VXVS9iTBLHEvnl1YjuSpiNxWUgQ8IxkO\nexsEZ5SEXcjQMb68FEASshKAJ7z/TD0q/nqQyHJL1d1YqYeCuDaKiY0aDXJf\nnUcMqVGb1b2DfJr2MHc4hS2i+o8AGHrn7bz9aZYUZWXP9IwGFZWGvFy/Ci4F\n0rnhz/dhylPpyEFPae/vIuo5FZjnAC1sdEh0ZP3bp6cIICQbDsXcOVgrVLda\nx3GPPFwrFp5TZ3FbUNnANWiAIVGlrvFn9gBxcIvtp/cl7kuOFLZivUBU528I\nZMqunz5x9S6i/ilbmiszuH8nm6M4YAqU2Crm7GqACmoXTdBY4HZDTsfY+yZW\npavb6HPjHzoYpE3nWhFrY3go2V28wGNsp4lN0sLwULIXYicU2RHhtO51OF9O\ni2nQl1IbFk9ZBVst1D6SH1AJ93+qT+SM00XBakMYWs8FOsqWS4osBi9d7l02\nSKe8Y4quk04jj58VkvW247yTboY2WsiOv4MX851YITjQBH6l68HnGzxUQ953\n5abZTQ9i2aRYf57UptSSvFQgz2h1gKrNwIXQiJLQgu+WcafiYhtDTAW3dDg3\nBRJMaIo5/xiHdhashyoKKjB8gPvInAHzudIRnNeOmTqavxOIqkqWA05E2Spw\nEw1A\r\n=a2BS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCn22roLxFOA4iyFpwXHTlBOp7pfZiF2RktzXjRXy7xwIhAJpMrIGjUadiIhgWv8LTIDbEY6fNd9Xivy5lIgaEIXKX"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614800290-5b3fd33d.0_1614800612313_0.1126206723738814"},"_hasShrinkwrap":false},"2.46.10-next-1614806068-4e5bf77c.0":{"name":"@xdn/core","version":"2.46.10-next-1614806068-4e5bf77c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10-next-1614806068-4e5bf77c.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-wLV0SkL5GxX8U6HZaQaTqZnjglwbcmP+4j4Xp8Mxrr+jdjSLZdNHXChydgCz7Bcekex+is7IUjPEu9gY+UCu2w==","shasum":"a3d835ce40f3859e548a61596af0cd834904931f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10-next-1614806068-4e5bf77c.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgP/1rCRA9TVsSAnZWagAAhH4P/1saEeWyflA3eNPeYHM+\nywuunq1jHQfifkkVBrJwfQmCQMsJqOggf6q6EDca3ixviIQlPf3MKHx4j3pl\nSy4smSOr0WXvxprzzCP71ksza7XlfC/+AzvQAs8BuHK7+jf8D8lbqRMH7e7L\nGwtHLyskTzIhGFD0sA8UNjo9q5kXa2Vmm+/BR8URDxbMpF5PoUQOmVSlw1zA\nh8tEwMzltojegDenbVeh6HVdkQWBvzQ38035YlCmBBCK+l5OmdRR7nIlhQoO\niGFHC7e4Fgv+S6JaTbQgihiLnfUPgLOtISpH0c+vdVY8y6G/EjTU9UH9x4it\nDfw96g1m//HjOjsHWSgnsCdH+QrFoVNM0c/wkSSvIhgy0BYPzikp8BfcG/dq\nbakrYlSjDfX2ysO/iG4FyWTBcNcsvmJSsrl6K8bP8v0sX7Xqr0QnVjSa8LeM\nXuLbjR+529xh4RIONfP6VMbjTR0hSIJ1JJ1roqCErQ1mSF5xLanYIqfjvk4k\nEAo8nRYph2IAysJpkQS2l1MOYC2ThIjPjOnhkfdViwS7SeiMajt0kTI84Bjx\noXv0xAoCSxS2lwKbIf6vTI38T58ng3grvBhaUji9aRSb56mhXtCRwOArcjhS\nieJPi0zonJPjcDY944HoQTG3kRPNylV3JY6uiZTXRd3N22yDskkV9U8e+ES9\nzZ6J\r\n=Hckz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDxL6vDA+T9gM5Tl+tq+UDuYzJg7Lpj9ewWRmRlyucKlAiB7FOPKeNE56jEsc8JfMrqBYU1VAArktqZtXkfyXCPyvQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10-next-1614806068-4e5bf77c.0_1614806379429_0.8634481044670224"},"_hasShrinkwrap":false},"2.46.10":{"name":"@xdn/core","version":"2.46.10","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.10","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-WnkP2KXPzqzDSm1cfxyt92kOTMLeJLLMVnXIHxBbiKP/HkB7rsd1lQYITxRTKWu+xgqZrfP7C/cD8D8tzDpZhw==","shasum":"709e2c1d96872b5d20e416180db228aa242992a0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.10.tgz","fileCount":181,"unpackedSize":665674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgP/2mCRA9TVsSAnZWagAANBwP/RZ15mXVvMePPqhnsKT1\n1jyPuBwxjV6hIsEdXpnbhWhKCL+CO8MsdljNV1Zjl0EviLaFJWnjc57PcR4b\nxydoX6DJumiRrFi8EJ2OQV5e0MPo4SUWi0Fi/rUYWMyHhtRDJsrICVavc4Iy\nLLgYhjaPpZEQIy40Woxm8t0f+HBN6w1GoFA0Mp6qq2it6csktaMOae3fTEhe\n7zPLL+0yidwLMCa/Wcuw4HElR++1gUeivdzHuJQ8fZggqLAP05Z/3SGyGHgP\nMlYIWMUWhnBWCuJDGFUNkRh2HlnbqWPqxImX2Tm4uMAboH4VSSFFD8SdAJAC\nttb43E2uwcVswPg+a3qYmKIbVfv9SbD3luUjZeRFHqAjEcfIw5qEuhp4DEAC\nASHXtz5Yru4JOh+nndn62iOBOn4vx8Vd05bCvyIwzikAz6uRAFnRrycyoyCT\nxDWLU+PQR7cuYBJsOwRFRvGz/Eya/pi96Cci6a06hJ+ciOqJU6JD91GspmIy\nGuwYnAdzJkaZ3PcY4qzh4YhgGCDef2qF+HKQBNWJh8a6dy0oIEQWD2kIVOAB\nJn649KjkIzAMuDz1Y4jpuuo42fX7U5xcmOMIRjh+RyEEF/YJgrMBBzVN15Qu\n5VYUl+LnLEOuitDU27fG1j7hI/xZWAiDJmqmxzv3IcBeDieY/a4ERbcMfEjY\nllTS\r\n=Debc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAkFmmTX+6eUdiMV7l43cJuzy7xbBadXDFBKjZTMgBYUAiEA3sd6uzJ2H27H9fvvRa6j2LbcB6+OOzgC5yWX1BZXvL0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.10_1614806437765_0.5699159724813596"},"_hasShrinkwrap":false},"2.46.11-next-1614806292-f0954ba3.0":{"name":"@xdn/core","version":"2.46.11-next-1614806292-f0954ba3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1614806292-f0954ba3.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-6SfEqg0PZIwgdpGDZ4knQ2q9kGXo3GsV2ZwJUIj3TcWo6zJOVEtLwRQY6+WjYnHKP4Nn/VkBa2BanIHNe7yT7g==","shasum":"e3a9258c8498453d74e32fe92b2f28781814680a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1614806292-f0954ba3.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgP/5DCRA9TVsSAnZWagAA+98QAIKwv7wDDejBUbk8ehNL\ndak9i5V/fERyjRff+74fy7Caiz/+6eX7OikH4eQFI44wB0L7WddmWMbvRLln\noujUXe4vHAlkrRFehy/Lk09s5FCAxDnBLNBmoUEHOjsawvXpYBw3VCWZUCmC\n94DOAKx1ksy6SCUHlb2j+GSOcr9CpnWTnCvmR5pn5IylFhdkE5yEXzncRAOP\n9FNdwXl+IxUc54vPJwRhZq9IHTfnkW32Po4MJtrpi6dCqvzUKwbWp4nxCLax\n+C+p+p6AdGB9CNSHe5KcI3L8NMvdFht7BGEG7wL2TDALq+LK8xIVROIO9qvB\nTQ+vQib0O2D3PPA6jfFTyyDGTM4KDlXeWjiyBtVYKm9kdCY45H5spJzkPs98\n67XMIFJ581aFKOuxlSd6KwToLE8uwd6OJr2uPsmc6L7RWlLMOhThMpJG4CkZ\n3sf53zPKBhbij7oy1MY3aiemq73jjo8qgdJFkt1wufMyCuaDUg6d9T5t9uVm\nRuclr0TBWaAPZ6l2S9At3oqnvJc0AepJ287Fh6/A8sUEwCJ/S4r6b8ll6C9z\n5+jqVtPWB12YhUqGjqzTqS+BzLf/AY6Jwk3x6tt7ZtzHQc9EK2WZ7CajumAw\n+JTvQNVQPdhLsDMnf519rRtDJeK9Re/tC+6g9bZhUAKnXVYuUQE61tURcyPx\nqGHH\r\n=brrm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcBMCSLuD+x1UOYkL/1QlR1N4h5fLTp39wxa4ZaRRW6AiAx86qkwcqTDeEw6+MWlAvePuDIf6kox/MsUuj7Km1diw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1614806292-f0954ba3.0_1614806594694_0.8317736211563285"},"_hasShrinkwrap":false},"2.46.11-next-1614973222-ce1e9fcb.0":{"name":"@xdn/core","version":"2.46.11-next-1614973222-ce1e9fcb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1614973222-ce1e9fcb.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-CtNs2zo60VahaSK+0INly32Fz2yReEvko75IFGuosTE/Rc1pzIoODG79f5VpKOdVU99LJiUSNd8K8dZSOMA2HQ==","shasum":"25a588c7d7c8056a974869ef6b408cefa721bf87","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1614973222-ce1e9fcb.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQooNCRA9TVsSAnZWagAAVxQP/2hs5rd6uBFV2jOlGl9W\n+5+58QsG7WmWp7NXKX1zzOe/TZQtrdaam63KdRLdfjiTei9rgYE00NkP0wmf\nLCHQPLcdGpS803FHxY11iSE2B3teSFdzO7S0c+Cj/PX/aohZXfW3Y04y+TtF\n0kz9dieA43feZiB7jMlsYtmGIqL290MY/mioRYlX2qEaeTJzcA/Cg6YBw+Xn\numOSksSFKkM22LUnlul95WaCm/1DdRWE1OSmh6VRaSJXkdjo45GcIuJTJZQc\nXpp7Aoypo7NCNml9b8+qsgzMD1NeIqUDy4fCgHhFuqyWWKb9cJmRcpPfQTZs\n9EA0hOzSaF5S7t7NjyDeSY/KH/SKUClbdC29qoSsxI4sgErI1erkV/Bsg7xR\nBR96zdLfIeIhqBshVQoVrESLYKRwfF0GbSmclRgxSSmIEXKDjyQ6izN4nOWC\n3+C9InswRBNfpCkYZGRx1h3N0AzWS6C0VEAvEj0TWHx9bHjc/MV8fhIVDJjg\nfRclBJfB1qbCLxyMOjDMi+KC7hvW4f+GctLNGp3iA64c6h1BoXnLBPkoNcIf\nfziwN/hDhcZY3lwpsgUebGqoC35t56jt/CEif1sbB/8lMWDwuCGl0/neVGNb\nYBvFZV2C2M0JiMoxeoWbVfLj/g7Q75zUXQ2e20NwQbf/PEIaNGzKXjxzgAhd\nAnqI\r\n=2Qva\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsDm1N+3+6dTY0j+DAallqx9eAo0JjOHWgNu+R+UAsNAIgMsN61VVzRnRET9tHrF7vusfeXi9hycss9J0NbfPRuBY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1614973222-ce1e9fcb.0_1614973452042_0.6065876438063149"},"_hasShrinkwrap":false},"2.46.11-next-1615185688-abcf8712.0":{"name":"@xdn/core","version":"2.46.11-next-1615185688-abcf8712.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615185688-abcf8712.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-I29dXkJNmuXXO3XT0KM/g59GzEemG+VUCc6JTOZw/rQRfqUY/f5thQMKjn++TeNvR8wBiN/tmT1rROTu02cJuQ==","shasum":"ed8df6a14259fec12cb2e57feb5f6865839b386e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615185688-abcf8712.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRcguCRA9TVsSAnZWagAA1mQP/R4YAg6HhNzMIb5ZMwX2\nTgIqSG6jWfDe9wBjyzRgptNAvgKwnLLgpnN+7IKVytnyntey1czHDqeSbaLy\n6gNc8Ur8o1v2eVLnc8HiD0dKOY45Rf1lWnPli+s5A18j01WENCNNqSi4e3ST\n862yi6C3Sud8t42j/1ut9vrRZvzY4WpsclfBwAqwtAbcIII+SnXldla1fo+U\nX5Mh0mSa9VzhJHt6T27vXCldheuA41tm8lGCr8uj7tfr3oE2aYYj9okkkB9+\nmjYQV7us1THkp3wKRNpZT63eiRdjzBgxF0HNiIOf3OCxuEBtaknTrevZqdqI\nqSYiNFISeGQNR1+Ak5DN08jxVLGhQwciVn+EAGOise0Q6Xo4cH6+jPhlJVbf\nGRgQWuaSFVyhvSL5pf/6MxcC3kNl920EmKnbr9LWT5CWdZgdIE8VtWwQ5FOA\noDEKX8XDF53dPAPixYjH7ninSw/F6D7r9jJbLI4RktFtxj5MklfTXLmoK9hI\ny+PJM2+PXyUZ2DvkauNrPM7m+DLQd1Htp1J+tKkc+Xjkv0DqvLokZ5o4PCp7\nWO3TbsUe3HHDEOfRm0X0IEOATf+I/8Gz4Ow1Xw69jsgUGiQnP/4I8T9gCfB0\nRHxvbtvkXh4znTr2tu8Bw7w8QkbmzgnduA3EI9UEdPutQw90GGJGF4nwKxJc\nHxkO\r\n=Pj16\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFy6aq1pq8bFvLSsP9oTyGfjsPs1Uh0UM0Y4mKGHrMvhAiEAjsJMOUGQ1JItsXmikindl2Debb4IqDAaNFC84+W9hh4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615185688-abcf8712.0_1615185966270_0.7372056487164578"},"_hasShrinkwrap":false},"2.46.11-next-1615200283-dc588c31.0":{"name":"@xdn/core","version":"2.46.11-next-1615200283-dc588c31.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615200283-dc588c31.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-fLlW5WWRpb5xdoXfuudCu4mJEsDhTHrX9/MiFlf8nLSD6vsfGzIYrA6lJLs9qpSYtS8IYW/h4qgpGQBu05UlVg==","shasum":"681583791588180df1f197671d3d839e0f3f4be9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615200283-dc588c31.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRgFRCRA9TVsSAnZWagAA2DQQAI8je7uZ1dYXjIMcFwAk\n2SjXIu05vgilt5DvrU+JNr/T/neBqtGpgHo/DhYaw66wuD+d15fTj1+IhbVO\nnM9DnvHV+Gy9OllQlNr7D8eI9e2coUVi1+ioVwG0fznyoqQVqMP3aoOALsTe\n5/qPo2jG7Eadk/OqkB+syLKF/9BAiKoR2cRsX2fQdzGVpYS8/0HfRTv0Wruy\n8hd8j448+Grw/Gq+SLNpIWX7nybhJcwpw0PpFujYxFFby+sxrHxFke6GIFn1\n880Uwjlmq1LWlg5rAssi9N2SEI/zazWld1cRKIjr8nOaqH8tBbJ06VJI281/\n0Su+Fzn2gqoDPeMxnIyk6aC13maUyNrQ+6y0sAUUtn9dknFEyKR7kYsycjUq\nPuFmHlDlow62hAQd6v1XtDbeHvjENuYDyDF16cZLMFW2Y6Tv1lArih5n1/nh\nV3pp/NYk8YG5exQMeInqWiO9kvcH9U0eTUfbm4Gu8k5gQOTo9ZuuloZLewoh\nDsMItrg9BVkKFZ1+zgmEr08ZoXdXjG5E/ltY25yrvvOWgx/scGedE6DBKS9H\ncGD8wrwXGGVfGo3Ptv8KRFIh2M299RIH37Pq4FwRZEfuMwnTRWcKtnIM5YlP\ncIezEq9JbvudG0F9x4ccYjD9704RqireSbAvPaEoFQvxesvycEF7HsHwWKzN\nck0J\r\n=SeY/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbdGCJr1r6VOlEdhhYCXdsw4croSvw3yYQvvizLqs34QIhAOxQqlC1erJS4fQPKCW/Ldte30JBl4626xVdwTAklFDE"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615200283-dc588c31.0_1615200593152_0.2813149162978592"},"_hasShrinkwrap":false},"2.46.11-next-1615202297-2fcaf0e9.0":{"name":"@xdn/core","version":"2.46.11-next-1615202297-2fcaf0e9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615202297-2fcaf0e9.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-yXmtzDBHIFv0zUAZqGXe5iZRnvc3NgWxdmEtjR4/opJFRoUHxXDoEcWw5P0NRZBECWxgzw+UomTxjB/rxj1qcg==","shasum":"6a5d901e4d37702410e28823ea5a94dc7164f2b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615202297-2fcaf0e9.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRgknCRA9TVsSAnZWagAAPoUQAKEcNKadQk33J+AbTWek\np9Z21jmQdLQ2TNAXqnHHdcLaHxSfYjN+bZqQm/tGd3zHaFNN7Lz0VyV0BQSx\nzrDgAOP6Vn6K1O5Htn95eaJPy6rJI/7x94g+5C+idUjRVnY1JRcyo1sti9+I\nmiGqzbUQ6Uqq5V7p92KIeAgFGxIM39Gu8LXZoEOdDAGQZasEOufMUS9GJrrx\nfHLHKJv3Wm4zj+BzKATvY2aNKSr46HpzPcChXLEjFjW+AGOJfRBLyfvcRnyW\nV8/pjX3+PJgbMaDh0KE9jc7hOy5npgo+A4BpsSAr8vPgLnULT0EiZqItYLT0\nBTwb/qhm+iFVgdD5Wu2IQk0BVLzrChKLc5/4FOeOTlJYMPSEd9158DNyfPFn\nivbLks0dQxRfcl/zmX3irNR3jZx75N28VwvUwfF4oMIGYiZXhgvWEOddsInN\na2bhe6GAaG0YLeV95yjqfruaZcp1t6HvTp0zUWqVJ1HWbQ4VJPUjPJ8h1zUJ\nSvO7r//7q354iwGw0sMtkh/DdYvrUWNkAi5sIHYICfvT5mRjhFhSIKPR2PdU\nNXf0hRhZyAewC5uzt1+BzOrLzRktHNVxR/yETWb8PwEHyZxdl8dyRoYHrb6M\n+jo/917+JZX5vy7xO7hwhSHJPqpXlRCO/TQ4arkVX+mSkSDhJarhH6C2eJeh\nBxWG\r\n=Ksjb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBRamrr0C+Br4aBu5ZAoBmfhI0HMON9HxGCFNYNZ6LawAiB3LUyajIwullPI0oHbcFXcnIEYxkpsBhi22Hwy6rootQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615202297-2fcaf0e9.0_1615202598760_0.4876258802837168"},"_hasShrinkwrap":false},"2.46.11-next-1615213999-5fea2eb3.0":{"name":"@xdn/core","version":"2.46.11-next-1615213999-5fea2eb3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615213999-5fea2eb3.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ORl20snUD3yQEgXz4qeGhYRxLbE/OboA8JwM82vo+Nfo0EaHJCV38TkeG1rQcwJFsAdt2JUdnz4k2ted0j0UAA==","shasum":"54fd6a2d10ce663a503356230dbc94d5c046cc6b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615213999-5fea2eb3.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRjbwCRA9TVsSAnZWagAA/egP/jyTJj6DNGEb0UKjp37o\nBZhCrEyw7EOy8XVTVFU/awpGfQFrkyj7O73fIZdYyamE9dej7KLm5S3b492r\nJnOuiRV8nUMGKUO8nB+UMuD+tq05c7Pz38sJgY0PgmR+1pUh3eAPn6j2qk1u\ngubjWnZjE1xr/fk1A9IeLdivZr8ca3dTNfelhdaxSix8Pq0jZ/2lIuluO/Ll\nYkwaRJH7kb65G4TYxqKPT5wXpy5Smvf3pw2yXYX+AuRASLdgNTDSRgMxxSDJ\nSzShffZnL0rj3EtaC+/n8t6id55ivgV8Pcbca2OOzfEAktEcldffg2fS7ofV\nZtCK+7AKz0km0i/TFUNDSQjgNbxI46JuvtFYOHLWoikVDU+bDdsHovYwy4EH\nVPa8AbtKsVj88/3R2Ih8rKMbJXSBYpObQxGRJsix2ILztkGfwKdubkkNZ0ST\nS17UvX4fmLldiUcPhiIcYqXIJm/QciGMO3GnsumLMCa6duqsYaYfA5J8a9fq\n3ANBo3n/vDX1ps/C6cYw6KsUaoPDQzHs9Arg8ZtwmfVUqrNFow+pOMMsUhdi\nuD0O5ZABiiJzgQ+/cKeJknAZPYdAV8EwL9ctQwJmTCXuRcvKeQGCiUvlLLwP\nxaWY6B2j3EMXlx2P0GQCenOcbVRiZSLksMvgOyR/iL1b3S2j8R/5g/V03Q+V\nVhrt\r\n=sxhi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC80YtVZMFpd126FzkpKLPl0M3jyhKlfoZWdycfBd8eWgIgYaqcJHm78kFQp36VVNwTNizgb2TyXJiFM3C1GsVABhc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615213999-5fea2eb3.0_1615214320032_0.08808995152873589"},"_hasShrinkwrap":false},"2.46.11-next-1615214503-c6c3790c.0":{"name":"@xdn/core","version":"2.46.11-next-1615214503-c6c3790c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615214503-c6c3790c.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-A1pPhPELJEdfCEycISy9mpxVWIF9zuRl8cuNWMm52X4XzWiWNxwSo4swIfRpFWX0zcNSssw7/Sow2oSd3K9WGw==","shasum":"4b3979e49b12217e7edc7ecca07da4c13c4c700e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615214503-c6c3790c.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRji+CRA9TVsSAnZWagAAvAAP/iN/mMzLtD+LL+AnAdht\nLbCGBzkZ6KCU2YEMcsjO+FAeHXMhpJzFFOtDZR9YMKTrOsmGTEiBZr+ualxE\nQt1UlfGLiYlpCb4N0wj98F360lOTuJfe7GrJcWtmkkeivzFNnn7w+9CKG8G2\nShpHsBb5vK+rJeFR9QaeCcSuEQzWSgyFNzjZRQANUWtEvK41t7F95qllplZ+\naNmFaWwzf9HQ4JMYnCwqM7bHjTaYpSEDfIln/kayTWLDcFHBELIh8x+PeqNb\nzVRw09HlIj1SNTWKjDKwe7+1btk6MEYOWM/H7JKb3Ru1aTJAK5EHOkdiRWf6\nq204KXEl0Ec8eq1KBMaWt+Ca912JsoL5a/jdcgNUAofcU0n36y6nSWh47a2S\nqmJahTbH0wPDLsjmG5b026yyW0dRkIlhalsZRlcmlqKadVIMwibusZYQpp7H\nCIBSStQwWxZJ+vF4rPhj3RtQaUUiPTtSQ8Z0p8Ti17o+N9u6z2PK/tQ1xEBH\nu7E0akJTkbA9OUAUNY9ISbrOMsl+yhEmER5yfZQysL5mItE4yCQoI5e+Fjyu\nyTziTJndP67JiUbAntT02inOInf13wUGUHoUMlBX9dnX6s9UNQGlY4JdIfW4\nkQq2wL2Vp94b7ryCxEW8Zz0ixu8INc8eErWtH8p298ELnnfBUNyCpC7umSVf\nAGdA\r\n=jTov\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDlmrctbY//h44KD37KDccyoHSOwKbZZI+EUjEYgAoWlAiEAxGTUuTjLpvUBoipFMH+Lz2TfBI3fQRzVI0bZNSb7OWE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615214503-c6c3790c.0_1615214781604_0.3678827247874932"},"_hasShrinkwrap":false},"2.46.11-next-1615215326-e0d18c13.0":{"name":"@xdn/core","version":"2.46.11-next-1615215326-e0d18c13.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615215326-e0d18c13.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-KPIP3H9yggBEAwr0aJONB+/0aYP6vKsa/EuGSm+dorqaoV1+zQKch1bWVnrpDyoHr6lR74PDnhELS+u9ar0dtQ==","shasum":"f84fa424eceb6dec1ac3ab7812880b7b1d9afe44","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615215326-e0d18c13.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRjxBCRA9TVsSAnZWagAAOwMP/2442Rlw71/l7RZtpcAV\nJ9UGtcYMKkNGZETjoULanmQP++Wmeee0MRGF+EAR9HCsGrVVDGTGkYY8xJPr\nizEajD1kS+x4crCw5SoEdoyk9q+VHlKbdVYT8K0DOc3GXrgL9OsqtmwwQduP\nxofHnLFSDjgJ03njroPnB1abN5HckMYZ0b8GmMstphpioHEoGrAh/WkWy194\n86UFBXLfQtCuHkdLzYO147SutAUwQHW7MzDKEmRNIrWSWlshE/KpGp3w15Aj\nt/Fe+vos+QNSVUHdENhhT0j1mGORXAOgm2SfVX3Om5yNy2WwmyWJ5nUM+JGX\n6TdEWecE0m0BqPkzVYBkDSiXJhzACB5sOozUw2hOAavCBx7PK0oZnjlSpyGK\nQgook6+udK24ZKUHdCYblfz1v7q4VkbHT4o3sf/kJchpnDKvUHzhTQipdHKj\nzwB9MqzZeC0hBpckzdmRhvHU2Nf73LRpHjeBj8aiZSftBU8or0vG46wBrYB8\nDypsuu0z5e2Sh+h+SxcdMd8zJmzv/0nBg+jAK698J88uoPqWTCZQ1RPcdeqD\nmlJKFvCORjAFVSzPJMOBxIRaDNBXha3hpvg+D58Fi7X6YsgUvhSie+zDV5js\n7+i3ac180u49gKAltn8n2/WKtIOZzCfZtW5dlJLkLl9l7IIy5rZzlF3+5Xyg\nAdcB\r\n=A1MV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB7YplmPLdFGGV6YPw3W2SfGZTB+4ZjDQR9Z7CuL3MDrAiEArP4rCgM18BPHqVOMIAUrYlkWgroTzVDM1giOGEVIIJE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615215326-e0d18c13.0_1615215680139_0.784865227680432"},"_hasShrinkwrap":false},"2.46.11-next-1615218182-126444c6.0":{"name":"@xdn/core","version":"2.46.11-next-1615218182-126444c6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615218182-126444c6.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-keQ+L6gAi8QWlh+yzHgBaZoTO/wjG49JkNQ6N4ueiFLevJSRSCyDCZ7ZVH1PKtGRd4DpFvRMwp6KDn8XwLpcQA==","shasum":"b94468c415c8fc2daba423decaf911c3955c8fa7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615218182-126444c6.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRkcjCRA9TVsSAnZWagAAH3oQAJkBuyTS2rBoIBDZnR0J\nbkbDK5z1l/08w02sv4+rF/R3eVYajYP8pJZ/O6ZpI0eTuZq+AeCgJLgC7QFA\nzPNHhMHCtDF4d7+xiUyy9lo9q5k+DmVAWZ4w+wQvDA5Qpebt8ROdF1uXeLOS\n08E2/tjRMtlbuc9m6bzxLP+xSI3h9UW3WPIE/uqJxf/IkRl5s9dSA/8EzBVl\nr6b/dI32xX0j5gTCLG5WAi3VEF6EWC4pBYZBhUsXTGDrh96Y+n7neYjY3ugF\nBEvhoambWxe/R3WKuGYxUEqbOgX7w8fOWq4kSRej/iKP15iX6761CLsBr8cV\n/BMPl6JPJg/z4jU/Icaj+eYD0lsdTBZJzBIIkNB30BCXbwwUjyIm0mugrPCH\nS/D70kNhOpDoZYXTrsWKW+zDpedX0Ix0CMRtDc2Ug5y/IVu84d5nAaaMRLit\nbVMU/r2/1AgGX89+KwX3L2+T3B2GLko3y/lp/R3506qy3eylKgbPAKijU8qs\nOcsEzrosR07U6WU8FYIjbqvHef3OK0muDF6Zp+UM3pHULFWoVOFKh9s6VBrC\nK2/a5QE+ezKkyoDAoj2LDEJX26HiNsHUeZQ77Wigv6DZE0f81fefzZKK5sBX\nGYPW2w3H+mxZKAlZjM4O66ZFmlaU/6KjsTJ+LofK80m2c7yQko0+IcYCHTYV\nPBbN\r\n=F6zs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4r6FA3gdGfnMylOqm4ySN/rbUz6qr57+0bagPsxDJ+QIhANGqb6XHZQ0Ng8Vb40dV1zy8aIp2Dn46TwxWi76FYn4d"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615218182-126444c6.0_1615218466316_0.49399762157998506"},"_hasShrinkwrap":false},"2.46.11-next-1615238363-1ab42f35.0":{"name":"@xdn/core","version":"2.46.11-next-1615238363-1ab42f35.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615238363-1ab42f35.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-D3xZaumZXY8LDxD49GPfipwMSaAftZiiCoaObzc2H+WG+nX1WtVXfqah+MCfaCLB/RtKFoqTp5Fl2nOol+Gh+w==","shasum":"2cf15672c10e253906099a159d813622edf7d893","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615238363-1ab42f35.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRpYBCRA9TVsSAnZWagAA99wP+waY/LKuLGwdk9SmebzT\nrkeEhW54Bu+iPZDnrMGq4S7Kw9il8qJknmHIVSDoS8hubA4UQaY8O7hTGvvg\nyUVxDFo/h6h3sTfefI09rh4tZMK+FQLvwVEWamXKaVEsKeVBtqhC+tmjD1lJ\ncYkSyaA3/pNAzOmWJbQRt4ttEfK1hVB68eSn0O+7DgK6Mv18mf4hUKploI55\nOhyhNlw7zkI6RNqo+qU3eNfa29gi0fSCY/cY7n2wwuglAXWJjmPYvJD62R3R\nDXbpRnQSKRQLLSYg3L5F8pdnq+RqZLK/DWbvC5L76jqlucL7UDYR4kFdb4fe\nHV11zXOI0ICA7OI0tCZDMNx7g7kIggV/zSBnLtXsQ0Wnpc/TCwql96vxVIE7\npBGW1yJPbYgB72srPJ73hMMzSQ3maeB714l1fektNIJq4oHlRfbGWCYqACXw\nNiMB+TIH3tWX2Pwr9NhiNW8oQ8IaT8HUlLntIerbVU7knVW6zxLs7KkTZ0AA\n5DhHrfYXi0NZ9RhHGK8mX03zBPkWwoklQ7Fml26Qs4JJa5wiC65udfudL1PA\n68zgkYeRauuFxDeuxYr0l/u2IKWD/MBjPsjaLX/s74oomo5hm/VPy7Q2sxUw\n+J7eWaZt/dWB7ZI/xOr2FxZ6C39XH2G7iIJQ5tt2umXcfJ4ELp1n39+7MLBr\nvZnc\r\n=jrLd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCX1PbzbDcTogceqRs4SSBGIoi+oHJZtITE4l/FUYmb0QIhAKH1FPvUUe2i4aferZWX9NWGtiskD1UVOPpKqidlIhyE"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615238363-1ab42f35.0_1615238657149_0.1836633657291742"},"_hasShrinkwrap":false},"2.46.11-next-1615283163-2eeebdb1.0":{"name":"@xdn/core","version":"2.46.11-next-1615283163-2eeebdb1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615283163-2eeebdb1.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-HI/n5EVHKIwH7cma4S6MGguIVrJXj0+YWRqeNGaT17k4qsi4/nXACIIr6pLFuoVNSbc+92DA9pM2u4PaedV/yg==","shasum":"bc071f45e79c36c22fedb9e1189c4bbd08795811","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615283163-2eeebdb1.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgR0UmCRA9TVsSAnZWagAAX1EP/Raz9O9Q0Tt2HMtYqKKX\nz/d0H7Brk3xlQse3r+c6gzBuleBUxxGHj5eDjPd57dwndI7qlENqPqmijONC\nwN5y9ivy2KSjPjB3al6PmmcRhOeEM407DDdDCKV5FrUJfA9gKfd1PO8UVGTB\nht4fjGtw2DQ092fKjARUV64mJJzg/f1pfIn056yQ3H9NnCJ44mBjcSnX/C5U\n+ZS1afVAi163SDQ2lUY64hj48eFDoINlwt+igaTKDs8KlCENc9FfqDWGMuKB\nhmQmlEvg51QlQ87w2puqNaJ+QOj46+mnoZnBW0Ksx2aYJQ9wyClHm9jyRV3i\nnSOnlEhJeSqZ8gDa38paaJIwAXwuaupR5rika61DrfbAuQd55Bz6vjsQX+Oa\npHPktuIiWZGWPlzY03g64mUIfj0JyvQIejaOOIkl267EAPqMyQHwQ+Ot77Up\nhBC9S6bKpcOHIe2yZfDeQA5MgCGYQhc/CbkvUoQsz4dMiaoRLGZ9We4P599u\njPWHUWLwu8AaWkpjpbRktaJs6SoeUcmUrMAbGcN0eac75rDQh0ksgc/njDZ/\n+aS9sGo/zAkpNrNJzFYMYFRNC2klacAmkitjLxxchMt7RsZalTxOEgW8js0l\nanLCYHt+Xndoj9gF5dfyf43gQPE21kn9IJA1JJI1/hhRFkAIEkmBM2nhP13Q\nHZsP\r\n=hF3x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgPsW5CvHQyOpzMtc6zhrDuHiFAMnPKtvlvfUmlMgcUgIhAJIAkug5O4MB5aYuuy4+Kz0XmLVN0/dq4AZ25VG6Hj6l"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615283163-2eeebdb1.0_1615283494312_0.6235281907173678"},"_hasShrinkwrap":false},"2.46.11-next-1615289713-c3066788.0":{"name":"@xdn/core","version":"2.46.11-next-1615289713-c3066788.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615289713-c3066788.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-+Ed8f55YXtYg01tzH1CzZf5arHqatkcje6V6k8wcuUR201mjHE3iG48dImx+tmmLWLg1Xy+HQe2XIjEpRsc/XA==","shasum":"996d4439230e4c0f9cdff78cd8be5b8490d4ca37","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615289713-c3066788.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgR16sCRA9TVsSAnZWagAAm6gP/jBIZpHLJgIDkBlFieKp\nK6aZ+H9bCY9YW1z+oUiUJYsOUK03WjpGcptqzvj69ANDuYBeuV2+dN4/6S3l\nDwM63k29SmpaaSamitNdP6PAhEPLOIjFsE1t2gHiWjFPnMVf3B5L6k2Kyjt4\nJS7mzO139uwT1JFF9zMRbcyv6hjgVkVrEyonylKFML++yal5rFD1dqGyt9Wa\noQs3Dpha4B/eIUGjr1fQGygzio4pUlBmxrLOpG/RuSDfNpdQS2oAAR5BSRoo\n9EW83NM74/62lxAEjqz7DwgFKkq0ehdJ0gRwZfcdjS7BOfNvfMykdV29CBFv\n/yG4LZ6AEXM1a/tY8ZvEJlJ080YNEu8wHIosvCUMuOOYEH+VBDJSMwVyPMRu\neWmh7XhkdS6t8rFfoxUHpnAestkGsOw0RNVokf/L9xpCpynlXzyiov/w9p5b\nHsmJoYt2jbF81OaHyTu6FaQCN2VF4Mf/JbCob/NmSE31q9eZwY8deCF/m1ac\njEtEBC8OWyufq6p0QW4ywIVgj5ZuRBjUSCsrViarCMgIqdlgP/WCvlY/K7bO\nd/U3yuoX0/wB/wPpVSd7gIKvonS0HNFJRye1F1DQiCI+Pqyy197tnyj0TSmN\nIKah5Lj7thgs91mPCgA8Jh0ej/0CHzH6tHD8Whihk6qSfi2lLXU8yFPwgIRU\noKVU\r\n=bxkT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmcapVAsOS8VuB/Aqknj7ugI1gL0pE+wOeWkK69yinJAIgFXk2zrdiUEnc/KzUfVj1GjJM4n94QlYxXbx8h8Sg9T4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615289713-c3066788.0_1615290027791_0.10505233726940277"},"_hasShrinkwrap":false},"2.46.11-next-1615289956-204785e8.0":{"name":"@xdn/core","version":"2.46.11-next-1615289956-204785e8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615289956-204785e8.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-8mpusJwgBcHjgI12uibJqObLfpZdJR6FjK85N69ut+kiaP3KfQEHgL0Z+wy7DFck6mLBEI+CaHlczxKnWp3Ahw==","shasum":"4dcd8a6c8e13afe0d827b0054d8d63e417128480","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615289956-204785e8.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgR1+dCRA9TVsSAnZWagAAsuYQAJ/eQpBbFGBW9RfErG+h\n0k4QJiI07gXi33TacaMXFscskx6PcNgk87Kyhx976WLXFfsn+dWj/WLKIrQa\nXr6Arggacj8uiNEwYcWJeO4nwcPmAJKtPtLuZb569YcO2V4k6jMD58G5h9H5\niA7UTO2GwXJO1masyJ51wREHJrT05R9DwgLsfXNk3FtsuALOdHtEL1KUNsKz\ncVg49TB9Fd0eDEpJSlxzkpeIj/H+oR213l9K1QESWwu6YETTtfQNqNYVrndi\nPBWzmpF7fY+urYoAqJTsvFkOrxUA6ckx9hb4ZBmnnAYb0euIh9zBPgjxwlVH\nX18xpVTUtptNjbC53Yxty1Yhn/Ax2t5VToGrDAbsswAGHiV7KSh0mZtVruVY\n73p1eJLkHle2xxPFewGc+A75p5Wx3u5t2o+JHkpX6sdv+rV6wh2riKIvX4R2\nQwhVB2tQWZUng+QkIQ9QuQayNKCCJkmeV5UtGhWMmivJwSomJVuiLRAL+aWe\nSWIZ+sr3qxmPZGthi0wwdEPaYDe1OLbPY2O313VEqc7Pl4pCgAQAnvOeYE+0\nz4+6qwOghSeEjWyriO3otKRdp+CFHcXiwGk8/UHvsfL0RGe1l+6/181Qd55i\nvg91GtsCukWir2pOL2dSJEizaJc5c1uo9Ruj5ud+WulutFy7GNCfT+tw/0F3\nzv2G\r\n=3Vvc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwcGu5hhtYeogYHWPzWEJrNDiG4vV+JpZQWZVjPDTY/AiEA+nY+nLSZDd7W6+la8cMO6CmIwdPKoAMDsygY6TyRuHQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615289956-204785e8.0_1615290269210_0.6087628207839852"},"_hasShrinkwrap":false},"2.46.11-next-1615289989-c7ea9f0c.0":{"name":"@xdn/core","version":"2.46.11-next-1615289989-c7ea9f0c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615289989-c7ea9f0c.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-kDjAR/dk5QlZ807iYXJy9dax21igNC6lnBjCJRBqxYwH7H1rLWsFmCMpA7fOoNGL0CbRq72uxpRvmmmMcyLLIw==","shasum":"9f0262713f23200719c98e9f38d8661ca82c1d4c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615289989-c7ea9f0c.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgR1/KCRA9TVsSAnZWagAAUTkP/A1JAq4TGFf1wcbCJqyQ\nSi945wd9PUiznDru3xSYny6FcEMpZRyUEiZIZL7e4rcWmOixMlDspyzOSV3U\nTxtF1UTPjpgs8naLXz4X261rClG+GgvrW5zXc27/5bM2p9UB7sRgOLTljmzn\ntG98FE9arSh4WOHnA4capM6jOHLaWFWFn435gHWgxF/CXxP8+s9YDjiTxeUn\nkM5liq66kcvJvfXHV5yPydd6A8mAcDaJGvDCo4jDD3R4AX1iFlPhnmpOBSI9\nUI1zUT29WYSH1NnJXZnniejTaof0UIAstxwMt4+6zoFqZACMUkMs+C4JFYx6\nLyyfGtieHSuz5GGa2sXyVxb7ROT6Zx09j8wmGlbnbtJentVk0LXcxyqxbbeV\niwwQK7u/cttqsVrGy1H1JkOxyu3mEBfzmW+QGZEEYM4bRZX8SjiS1zPvN55j\nGR29q7ZHnhW0jIUGMtdOK9tQjBoD7p+Mxmf10uF40P0MP9rLqaEtKCg4xO64\nOY7qRW60PGBZyqxTf+xr93OO5pri/uaWk6W+VPNYIpxmk8mdgiSGh4DKQfey\nxpemkM2z8ehWgroe+0GhXabwmS3u62Cebu2NugV54nskPVRUVsxJYShZay9Q\nNZJIK9iB/cxgqo+tLVOpVbvHIz2ZX+mqCMomUfF10/KtKSofg7umVQr0zB+t\ntiGb\r\n=YErj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICMidRlYcCYC8c5aTcZoe7dsNYSPHmW2MckUiYTzPrMMAiEAgst+xWvapN7+f0E+rCyZxiomH9lgTKWbVlzOaf8GLh8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615289989-c7ea9f0c.0_1615290313950_0.05610532311503258"},"_hasShrinkwrap":false},"2.46.11-next-1615293517-f69327d4.0":{"name":"@xdn/core","version":"2.46.11-next-1615293517-f69327d4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615293517-f69327d4.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-r4hDRIjm5pfpYhiuB0N5KoDws6FwrvnL23amFRIA9k484EgX3wll6t6QNaox/5nBW71HSKvU9IQwniEVRTd1Fw==","shasum":"c9bfa54c1d2e0955cea6a121d2bc249a0ca46afa","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615293517-f69327d4.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgR22FCRA9TVsSAnZWagAA8CIQAJNeKfesDV5OTWZotgl3\nktgskMKdw4wpsv++AKJ+En0/Pls2/75yRoPh0ZED1au9eTeBgvN8I6sQ1cyb\npU+s5BcPRTQceCnfMd03G8SeIKxBgTYKSRI/OxTFsAcFsxPQp/jpuVYpklR8\nYcwSMXwwVS1rR0rSQv/TnT3XQCmiAbMlg9DawNzhyIJf7rVRFO70EZzo7YA+\nDdyPS17OgkG9ki6yFB2KFBf8BAh4C9lEsuXRoS4YHNARFeSLi3rYaT+E8yK2\n8hc+WtyZsLh8TJYzr/cIsZ33lcTh8dAzBgVsYu5t+G7zFRN5ZSgik94SpfG9\nQVbbEEKoIu0/+EKMBc+kVkRdvSwfh27TSBEUJ7ZGLVTsTQ0pciu8yXmclW5V\nx5QG6r+uma6aRIinGXu3k1M2cK61kUEOoyaEJP6VJ565sFID0qFqgfV9coLE\n4qiCIrnDfGm3fFC1ctTyPoNEv+jIwenGwGeyywfmCyIjwbF5ktEKm4EAtKZc\n+WqVzyeBmIz6kIRfjfZnLo8mSDOXsIYzOx0u4uBeYneC0lHqa0YQPMgYfVQ6\nhIM/CqBM3PybAffkXgEdp3Frm8V8UwOAdfrwr/cZAhxDQNXHvaM2KNKh7SRK\nDBs/SICaJIdZ4CgHnowbrIqUZnCK8EZ2LoJdWvcfIbdi9lzcXw4j6q1m0Lt5\nRaC4\r\n=e+NS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIANVHdDaawkTYJx5QN/0FTP+VtLJPBYjzLsCs27uwnelAiBaoooi8oUF2JFjEie/3kWYwbP54PVtoQcwd1SC/7I6QA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615293517-f69327d4.0_1615293829326_0.8058132508169644"},"_hasShrinkwrap":false},"2.46.11-next-1615297515-104c2b2e.0":{"name":"@xdn/core","version":"2.46.11-next-1615297515-104c2b2e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615297515-104c2b2e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-fB417wUNkzb9fm0gu+JkV7c437OInAYnGUxtK/Ckk+2dfSJt/aLaFsOwkcK6CWc/WBXknq3zeMurfQ2jZsydBw==","shasum":"777f203144bacce65ccb4977a812f446233a31e0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615297515-104c2b2e.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgR3zXCRA9TVsSAnZWagAArTYP/2hKUvFtz3i2Y2cxD7s2\nvflYCuXgRe7XhFMJz5l7dGDs5U8tfG2CztkZT9ATsmzqoCTmJsO1sFAPA2Hv\nS1tuI7BK22oLx0qIU3cUlz5384Rhw0WBU0QdkzhR7my+Gjsu8xKupQsWo4i6\ngYuJZp/0+LDMxVOsAxZh9EAofst3Pea9+vdkP/8hvad63oJ+wqxHpsXn/olO\n0J+cK8F0CadlWdmeShSdZlwt/C/Esha5KrrcNvIUz5kPuMd4XfIp1SI7WYrT\n6zRHMBpHGmAxoAEBIPULd7Bov8VM8Pq6RPGkPzPL56yFNs4POY5/QbwCyHYT\n2HjHeuxvrRGaJkfaM6zr9H6Vnnu5sJSvCVKF+VmuQ8YMQX9NOaXURiu5/Y1z\npnRYE2FCoP9k8cQpEem28yuj9Zb29qvJU4kKyIqDp6WkH51gBiEJDohuU4od\nPccNAdLBBITrmVGsJg3bIfQmNnMn9DJxoAVB101Zh/VDhIwSP/4GJ39NmV5L\norCqQB9JwOSlZ1vACokXtV2x02SVramx3oWQNHvI0ttqU1pnhr9U2qB/S2RD\n/RIoDcnVcRNHlC4PzKtThy5R4XysvSXyt6sDvmOD/b16FgNEA/ADoUGMPz10\nSjnPOQmSM5OKUHsoHz72MZku1r9KwfUf0PKoyTdUuUhRxkDfyfCFjlq+MrkX\n+f94\r\n=oAZh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH0Edd3Gr9WL5QHrbqRAOktU0XTBX1P1RnJo2sOKWziXAiArUtxkJuzVO4YtrRhm9+fE3M8VLggrat7LjmnzlhEQfg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615297515-104c2b2e.0_1615297750285_0.09077069245445069"},"_hasShrinkwrap":false},"2.46.11-next-1615300148-4b9152fa.0":{"name":"@xdn/core","version":"2.46.11-next-1615300148-4b9152fa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11-next-1615300148-4b9152fa.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-RNMtEi3w2NXEU7HgQK8392NcF3dTDpHcuhUFvm8kE95J9hCMgoSmNJYB1Dbkn9h8Ys2v4izpFFclQ7VVItR6DA==","shasum":"90aeadf764459e4e12b68b85e61da4fb9f7a1296","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11-next-1615300148-4b9152fa.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgR4dyCRA9TVsSAnZWagAAi0MP/3yr2F+VDtxAptv0HGee\nL6zk+5EJtQCHrCNCnqzH/cxyySNhFO9Dd4wlilvFTwUiT5bLh5IDWB5PcWF1\npyEb0iyDuWRjbxUYVK2Vf5Irt1lBxp7mTl6YILdm1PzNWASTiYGHuNJoWV+C\njuPXAieoKXEGGPrEpTYCv7YH+qSqaEM4N10py6GmC2Zs3bS22m+G1q0cFxpC\nNkYPh2wa4q13RldeVYv3NcDsC0r7TgRAQYPkSHKXb87lduprLtrTvKhA/kPP\n7KC56c+XLlL+GFRsQHCLfrlc2nJ8mzGsEh9EaMgCKiVp+1AID93rGfN/jeVy\nDP4AyxRWmMiK51AVxDnxG27Ti1USj31Tb10dee5czwar2evKQzpqaHF9dzGn\naudj/Guq39Kj6TPd7N9BVo85sch/WRn03Pd2Ek52BHHecRZrYflNVVObBsIp\njYX8EVSNm4zw6FlobDp9Sz3DWMC8dB0HozGINLO9MsbhwiNn8lAs8eAzsBfx\nrmXzIOaqftxBgvG8c8hmKz/iop3GTif0t/PJVWNTUX6w73TNJ7f2Yvp1UYwB\nDMWSHyc+V2jkb81C2daVPmBGUEmSvBzyahrQ2TJgLK0UdkyfXEUVcbo7SS9Q\njECR7AoLTBOt4QdvSq9cuqSmh7gXz8snNRsed+kJrgUfFsXK+7HXeHcbGTHV\nyv4b\r\n=ux/m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzozbWpuaV/MfPpxIyFTUaHDgUl/v1zMjORfF2JDH+VgIgJ5uTGc1L4EMijISg9mI1oH5rfPQEi/HOhs/eJ+ft8DE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11-next-1615300148-4b9152fa.0_1615300466129_0.8508744109370392"},"_hasShrinkwrap":false},"2.46.12-next-1615300678-59561aa3.0":{"name":"@xdn/core","version":"2.46.12-next-1615300678-59561aa3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615300678-59561aa3.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Qg5w3pHLv/wgHcYyrVSGM8b76Sb2ChYYDWFfjXMRILYh8Yt1hIzWhDiwFuk7nc8rKhSquwMBCRbo/1XZ6p87cQ==","shasum":"a04a8baadd0e486fe6b8bc20601695fa68bb1a1e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615300678-59561aa3.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgR4mFCRA9TVsSAnZWagAAS+AP/i12v5mI+Oiu+G1bvDYr\nCyYT++zWQB1fOF75SxKBNow2AwrJO8e3Y7t6l54/MwAIYHE40MnoARV7N94S\nVrXIORT2jc4ydBBhYMXKa7O90WTv/Zb1HqBYJiIzmXEZ8rXUlu9qjv6+/UOV\njl2+AxZRcLf/E0vuNQf5POVrY+a+vW4VpsbgLWTQQHrIL8XUOJRISiyNhnpA\nM0ds4w3XRJiANwyPZIEB3Eqa9QqeEAdStXRd8sM8RvnxNRF/xx/W1Wh2r3cd\nq13UOsXwJcWfj0KnTRGv7fxx/BJttDhA4JOcCs1rCXpO3a0d+7Vh/sg44ntA\naw9viNO827xk7WmWA+evZz9ry6Sw6HUvfAeBYjG2SzfuP1aORtmmQSkcPiu9\np/KcL8pdNZr9WZlWEFbt/QnJ5v/Vi11vYgFhJ1RSlw6uyHIii1YOaY0Y9U05\nHOkyRExswdUZ5AeEbo0MLQfhO+n/eR3QmHBA5ZCEa1mwykPhK6pfP2G/w7yQ\ntYUNNLXjqajND7x4+HDNdN2l4dJ50Mh5LZDbHCtWjOOXjikEbp2pbPQWgwrI\n6tnviD9wpuBh03nLDiH+PaKJSNGZSDShTUxsazuercFdygfDxhbm4xsWy5G0\nQKS7WzX8qRTHE3AQFkmG76xoj/Y7Nl4p21rv2ZhjCOnbaRpYHZb4sikULkny\nJh90\r\n=sipl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIYBryksSqnWITgzHVIBHixj2nHrdPqGvSVmZI/WYx+QIgcgr5gyxZ3l1ePiU2q7X599L2/5dAe+eO6tq1faK8/aI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615300678-59561aa3.0_1615300997277_0.8759598799493384"},"_hasShrinkwrap":false},"2.46.11":{"name":"@xdn/core","version":"2.46.11","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.11","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Ftux0hoKUALE3TCwf3C6Hs1nzndQoUyE64Ihf1i7hMy9anXEVISpOO1JqGZ48wA6tDx9srLMO3x4zXmDUoX2pg==","shasum":"59e68a0e77ed7000c020ebc00828babbe13979c8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.11.tgz","fileCount":181,"unpackedSize":665674,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgR7eFCRA9TVsSAnZWagAA1uAP/REbG5v/wsGi7EqJ0maN\nma9L2vAMPNrvjNsOilk+sf/B8SLPlcLK45tabTfBoLvzZqfhgbM+KG0kmETL\nLmvOesSecxgK0oIWGr5mSh4xu5EoOf0is7v7P9or5QKOXPKaX6ri/loz6iIZ\nPTaQ3nE0/9zDo8NjaOz/jhzEMURSNRMIynLjYac0IyBnDtfsPLg1F/eSQXWu\nkH1LKSg9N9N/vYzBMx9f2N3hDehRIsaSXu3ZfKSz9UyINj65ciruSnVU5EM8\nDFoXTyRMZzERux1rol6Z/+HC2YuYI0x6kIKb/arqcJJious8HUIkckKg4D27\nBsfTeSlo9c6BpCkn7xrXSZr9hi28HYHtqhsC+cGR6n91VrXIxFgyn+L3fLWp\nxQI1L6nskNOQ9igTCKoKzRoA98PFYWY1862yvHe5F/3wrTI5j/o0SVthYVfm\nksxa/BTNLGeNzMbATIA5R5xEXiMVSkkTdtLKw9i5tzuTfJpjCBN1L05TEVYT\nUzB0RENMn4/nSGX6z9sujdW0p4ahkRX3NFg+10uwhoiHeiqurN1zhK14nGJx\nCiyAf0DzGQc/rWfv+1T1PrXSJJJJqcmPxmBvcdQjw6h4A04OXjwzHs+35yOJ\nCfZY8XM26TwE7bV7iPYNcX+KPoaazdJ6MQFxICvCiIDFY4V5Z02ce/mRGGLU\nrlau\r\n=lYq7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIENi9SqC09wWfSDqtMukRV1Vpbe7bZKeQ7cQ07JanbmmAiEAoYB2jwySnHHuGtzfNnRGJCOeGoBgdW5A2f+7J1E5s8c="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.11_1615312772742_0.6811509769018611"},"_hasShrinkwrap":false},"2.46.12-next-1615364884-288b98d5.0":{"name":"@xdn/core","version":"2.46.12-next-1615364884-288b98d5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615364884-288b98d5.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-/hQemHFPfAycNqTz3vDDVDTaIIYH88DCoaA2aIqwnQEDn6vYef96lvTehV6m3SHgSVsRdgZLKEh9MmL9jKLjBA==","shasum":"55c4f9c295920eed7dc7129e328ccca93844cf95","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615364884-288b98d5.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSIRKCRA9TVsSAnZWagAAnTYP+wcY6SZxagOxxqwyKHys\nP1ti47YS3MOh1QFtH1UXxaE4kH0xOYsIOXpnsKmd7et1IL71iFNHBIYce3/G\nqZxuXfbkYw4k42q0L0bnry+cPNvZPATb12qnmft8txuoyHulR1//AV8gIZmd\nC0MUHTUChadbK0wUUB53U0HErZuaHRpsyYfuYLKR/urAduqIq8QKuqxcil/T\ng0PENKWs6OO8qCjIi084ajmfZkmpHjg8cf+Q7DFe0m0zs8vmtY3FhXBtxEhe\n29hDHHNxxC4wafK5DWp7s7XR+2mS+1fEz9dcI63JtOvcmL26yERjM8o6EDK0\nQ44NqGhfGK5xQNEIrL/LunZzIY5jttXqnDOy0bdt0JHtzA2G6EnkfpG0k69b\na5bMOJZpgzuzcVodzeLOFyrrPHTqj00Og+I6h303nTGr4ArBTcmLioyWfxUs\nuQvPFKuV+SXuEshwbBrrIdty7d15mlxS3iFLuY3aZ9+wkkjOtqxPM5CyhwGb\nG1koTkuI0pN2zeDmy3aG7BSbuKR3tvVYH6aIWqUKpdElgmhfitQLThmK4lT+\nqXQjuTwV3By+Yzg8WhRqn5n0F2b3yGnl8U5NUetondEiKIzCggspwNNjbjkA\n1nsFGeZS8xIYdsHXrzrTZGbiliysCvGAJ5VkgCTDKFpi7HH93g/9grP5BXsQ\n7iJA\r\n=93ge\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/zAqamSZ4PRk5VN1XmziMUzV7jJSB3e8Dk+W7xRQ+PwIhAOxn6ZVfvRDBcM8Kjg88B/27tDrOfuUuNo2uvBgNGUwi"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615364884-288b98d5.0_1615365193965_0.8480606344794663"},"_hasShrinkwrap":false},"2.46.12-next-1615376785-cd4a02a4.0":{"name":"@xdn/core","version":"2.46.12-next-1615376785-cd4a02a4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615376785-cd4a02a4.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-tzqG0RBwRuvNc/Hc1MCXwymzubYKTE8lZ6kjCMWIURa6myWKcwTzkuWjZsG+KQTI0FHEsR5q3h9QzoHQEJ2Ekg==","shasum":"27bbbca2e1ab30232111a35660e0e79cb5b1e3f1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615376785-cd4a02a4.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSLKnCRA9TVsSAnZWagAAunAP/jQnaPCZJllCy9YSzB7V\n779eQ4kJKFsdjakc5B3+52fTzKSs+aJMBiCRsGQK8le+166ndfJuh4pd92rs\nB3o5zHrN8YooGaeXfPFs465ZrM/HAdxg3YsM9+cuUO35VXK8DFqQdDocwr+u\niV+hGjIBc0elaz8oBjBlu25x5EKLT9LlpZlC63TroyPces97SDTnmMaMzRRz\nkDmmze/kMnAvdJtF4y2mGRAhhv5GXKLdXVaIdBF0pbPUN/zHEVY+gTF3W1Jc\n7cH1Z1kCs5MheZESfA7UD4vwo+G3vr28d9ycYh6hnnYdFi6MJ/njqd5UYvVe\nm8Uy5/0AF5ZBDw3M/KYnOnijEJpp31c44f2YNuvJy7ji+T13Eum1evx2pyKT\nzigC4fXX3Yr9g3UAn9juQE3r6W77TnGUaWSuhZFFsxN9ZWTbLfNXyev6pZ4B\n23SPdLYZToSQ/sItwSi0oyeB6ALiW7BsrwhdF2qN6IvQzvVLYeZ26zjOP6GE\ngsUiu6ENrx+NYKxHs48IRIjCyLC0Q+Lnhtii9bzx9ExB26cLa4NUvemjZMPY\noCv/pWaZh/acTByUeCd7ftIhW5W0az23ZfmpR9lqyzI2tcmFTg+Ed9TrlBvV\n91wVZMIWkeqQIH6JQ0hR1N7ZtaU7NOBPDFhRdBEuswSJ07JF7d+OPJePxQ9Z\nEqeB\r\n=Wz/t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGf/b9XMMPJb+EvV51vjmFgnqbnHUUK1nM9LMHJgZgvOAiB1ORc/sBuxx+PyC/jJ9kxSu8/Rtv12fMfXfyk3zrbXiw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615376785-cd4a02a4.0_1615377062402_0.36416314211026"},"_hasShrinkwrap":false},"2.46.12-next-1615464801-44ed9090.0":{"name":"@xdn/core","version":"2.46.12-next-1615464801-44ed9090.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615464801-44ed9090.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-keOaSdkcNxpuV/M8jcye6SYraqmU0jGZbezaGCvimrrPGV9vZHS15vmMCzz2IAeEYKwjt5t2eAX+bdHMW16vIQ==","shasum":"1fc4caf5270a5f6b7ce53ec84849c6c5fe829f23","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615464801-44ed9090.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSgqFCRA9TVsSAnZWagAAf90P/i01n+KpVUtuMvvzQVN0\nppNCVc4iQBFI0nAlgM1fRNeAVhkc3lw6tUIkziu6czTuVEFDy2VpfEP+7UfO\nnm/yBDyANg80C7zAvtnmnt9XJwXuc3ZKxA14XU+s3d6O58WRnKQqvauAAOva\njT16eDUxZD+aMyEPvIYM7TdO7WEpgVYNohshmCymhrzezfpeRYoAkdwvAQ9e\n5pSqybUSQKh4xHXlviRnHbPJuDFvX9cljGl01ek3QWwu55uTZEZpGIJROM1c\nZtuYmB5Nxi+oVPhWEQk/yF65j+6veJxcNn0YlomUUj+U3Q6yYtpkEFMfYyG2\n2dob/1wl7yOXN6z0Uu0G3JOVpT9eC+YPIDhbO7js/H9J00XHSYgfnD1q+Flr\nY+3gjm8xi3goCPs9yf03AsTtYgIE3mG29Iw4EPYpBDf4U5ZjBUKrehNgBDk0\nttcmqgEJKazzabJRK0S4zyu0pY1cNshQDKpjUHcj985IeP29D/DYhDGJ2zkl\n6XvqvQZhOPO1rSZogjc1kdySg96vPLxIxRAh+pqUGkyS6HGSdX76bpH7lnhD\nqmf3NqkcXZBDVyb7uYzLg+KRUiSKdJxH/IMPrUDTiFWAQXehK0865vqO2xHI\npSaE/8ixBQwaSN6UA6XpvK3Nqm4WKONNz6bVRWGCf12Y5D6yDGDpcIWr3XW8\nyBSf\r\n=U9MS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsd2y4dB66VkGQfXGbAZLZrWBxK0tiydYv20Bx2PiVTAIhAOPn/DPSNxYStX4mEpyUDyNqkpvO2FA9c9BLwLW5LmMA"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615464801-44ed9090.0_1615465093313_0.6996585815439103"},"_hasShrinkwrap":false},"2.46.12-next-1615469960-17dcfbc9.0":{"name":"@xdn/core","version":"2.46.12-next-1615469960-17dcfbc9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615469960-17dcfbc9.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-EFX1K/5f98LJD07pPdEdNMdR+hWPw7zeu+Wm2fAfaio2MpVBagPgEB5Xv117fkbJCAw+WiDIm+Bj9iM9/bByuQ==","shasum":"ab079cebb4233602354df9f25c2c729560400c16","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615469960-17dcfbc9.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSh6ACRA9TVsSAnZWagAAiNQP/il8FXFkkUkQxON+6llr\ni/T77EfJLzPmJ571CiHfi5103zUzVc5iL41wktm+nWug5qgOHMTC3OByZKAl\nzD9pVoDuBk+XsLeFtptPXRBx6v6dRnzn4U7nRaxs8r9tAj0eHB71c2CQdii5\nXHbxArHQ3NQImLV2RLi49BEhU4dVwgqM8uWemubrz5zJBYD2/xZhQGfhkv1G\nby3yQdP8pDyQrLvCaUvTREbijGxP2Qj6Ra9/fg5W5YhKQfoRGU5gB5HMAQz2\nkaTkqfIqrBHV3okoO8WAIvnyMKwhIvX8+QkNTDUsLPjoMGO9ckcZu2nZ+lr/\n4c6aS7AK3+hgCw18dGr6CIQDvmcEh4ToYQFoG9nRQcRPTbqjM9OIw7JKXh7l\npbOl/Dk2Gk2Tng6XbUE8KCR4kvK2qG7d0KMlf3XG/i3PkQyNP1IJESMPZeVO\nd9gNTvKwqXa2B2ynGZPJ7XdKD/gJdG8Vmed8RPoRcd8Nrhk+pfouuNXTeSSb\nBCCQmBfaAY2xVpDy9Es6LYZAWaK1TReUdorzl+gMpHJrNSUGYLOyisyxLaIo\nqA9uk7jRrkFat8K7Pl1DuALe9bUehI4SnjxyV232QdndEvaWnkuM6/oCFxGo\nQKMJAUp6tOFKBEiZrpfHuFYhB7iGr8OFRw1ln/A138ZUG8RYkkFtalZ/xKJC\nUyyh\r\n=Z5ni\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmETJiodFymBMTCSdp/yBKuk4j2RM44yryqHux2n3/QgIhAITxsf2UrDAsJTy1TjHRLN6oEA30PQaSJMtOpc3RzQbz"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615469960-17dcfbc9.0_1615470207658_0.004403925963918365"},"_hasShrinkwrap":false},"2.46.12-next-1615470034-557f5436.0":{"name":"@xdn/core","version":"2.46.12-next-1615470034-557f5436.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615470034-557f5436.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-7BSd5Rj5qa2c0vKyesrY8ZJE2ENTWp48Uk4ka/Bow73PSRdsqVW6U5kuH5/UCRsK2lcE6/F64HXYjMPbq133MA==","shasum":"b4510c050dd5b1d2ac7d6ff534920b7327b960d6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615470034-557f5436.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSh7/CRA9TVsSAnZWagAADzYP/315baLSnOKnJVCj4nIw\nBUw5lVzazoQxFHffEXF3uTmEdLWafI+XcGB2TrikEBT8MhjrwvTbh7uD4cDx\nQ24OXsIqws4Q+2jQQ2y2tEPQrsM6uoK8mX8jLygrTHTEJmVp1tV7MMgnH1d5\ncQigfwPZtedsN7zfcPz0LnPV/1fg2E+6LyicIqKeyAtqR2TIKAGMMtpJ+K6K\nHf5ERmptZX6EzNUnb//WFNDPJd4kYQs57RLcN2LVpZSUFARNSxwcD4Qc+6cs\nwKTlv45b6OQstnlWj5JJQ/wXdcpDAVkhdE2LNaaI2D5/YtpwDlfWSmXx7+ox\nBlcPqQ33DbbjIezQ2zZWZtI51kHQxDIKfPkJ7hd/h7b4vIk2iRaIcBPr/XQc\nSHrLkNO88JG+X821M1/BpMzBNErUuisw5D8qxXb9BffA4LpZdzol3zeXv7yz\nhRaa+iEU/jfB3oFdEhD0QysLLNFzPS1z2bUlsaf0cTXPyn9DM2sCay0bbEIw\nYlO3aboyG2CacfhRiJvmtruewJnEuG7NhFOTBqVLrb8Xuh1d1letQ9nqlvh6\ne206qclpqairIzw6Cuq2zHQMzL795mzylB6sxeTLLjVBt3GKyb2iY4WmDU2h\nDkgz/Tb/7LoJbTedPEisU/aemH9InU1nOKLiIoA3A7ABvdet3A4D6U7KOtsG\n1P5+\r\n=njaW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJC+7Ym/6zbnUfrT7qnw8LuNp3+H6I8Rc/xSjVuXM6nAIhAIObetdVxSvAjnouqr0Oon6hzhiVnx9KXYlal7390E96"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615470034-557f5436.0_1615470334979_0.05072227863326351"},"_hasShrinkwrap":false},"2.46.12-next-1615471647-557f5436.0":{"name":"@xdn/core","version":"2.46.12-next-1615471647-557f5436.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615471647-557f5436.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-6j3Q+ddVC1Vzyy8lc6A5OG8b9E41DhBBAqdNOWS8h6Q5X6CuBKOkPfbchWkRl6ar5j2nu8UWwigT/AlkS0ycdQ==","shasum":"fac4f203b81351a791ebb98a0bfd01cb871364f6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615471647-557f5436.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSiVfCRA9TVsSAnZWagAAkgcP+wZFVQjPQ94VIwynn83j\nFzGKrhb3obr+lpykqxxGXfmUmU4XSm09L2vSw3S91pVHqxUhrrPV2JIOVIOT\nus8EGwEWcm4pAagU/XJigiTnqgnlNL06p2nxSFkdddCG7YhnTQHGIZ55xQHM\nfUdQsI1lTrmrFqy63DSRDTe8Wt4yCcMf2ifmDkhZdu2Jcb1k+ZmSGEfUpL/z\nK+TA+3e1CWE4KpsEPqMSj31PK0jIST55xiVwQqHkZbmzrdCOpRqCLaVSRXPH\ntxbUv8LyCFbmNV0kkRUdj643fYNBlwzcaDJVwg2haXrqbkqfrx8ErVpP4tKn\nhgCRdeG3qh0C3J89DNMri27IDZeazCP/Q83SXbbE+KQ6yg54/laSpRFUUdcN\n3h0/1Mxf3Yglzoc8ioAUmhdXIibcCrMc0/bEwdtSO6zYf1HYeLT3NO3md0mU\noLyXJOJuRWxP4PP+8/D3cAHpYGwzqokKjTUqAQ3APYJZmnrw8bLj383yGVX3\nvq7IVDmMMFt0fc9e1qwgky1N5NDCYdKanSkuUZnhcps7qdXouTWjzGUYBQA0\nqbQy70zFqKAtO2Ri95l2WGjk24hGUdU9Srz1B2P+UftSzeoYzzLCgc8Vk+zY\nM60TM5K+vmFn0vIF7HuxfOhPcPiiuC96hCBh1o9H5rYJYnLqhfdSvzw/LRFY\nrXWj\r\n=ab4S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjSPy7uhM8gp11IRcguwZGxDwxoFa1aA4ie15AOYTnaQIhAJBJ+REASC2eL+RHao13YcBWL2M9HZEcC3kZWoBGsbVQ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615471647-557f5436.0_1615471966790_0.808348666480456"},"_hasShrinkwrap":false},"2.46.12-next-1615551720-557f5436.0":{"name":"@xdn/core","version":"2.46.12-next-1615551720-557f5436.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615551720-557f5436.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-bFLeD+QIkP0I6CmMjIuSdwOGhyYuBDRDVQt5WEmirMWm+NhohXqrj/W4PHQ0Bgqc6e10d8M1d+E1YhBDk7DOZA==","shasum":"5bd3e5fef920d6c295972cb77b9c48df902b2002","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615551720-557f5436.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgS14kCRA9TVsSAnZWagAA3j0P/3KXDbCXGsEms9v9WBY5\nJao3Uldb7af2SdrL7wX5Ssf3BoowGw8MM3wnmo+VHOr4m5U54Uc6U+Mtn6NO\npYeKltc5rgxwlMKgxUzOcdaI/+23I1f8y7aFroONen9CTYcNGUL9uqnJou9g\na3lhiqQ02udNO9YXC7/G29IvhTjkZQo3J3ugWyDQZZUheoHUHwl6+1wD53E1\nWkPRIX700ARFhlTwisZ4rwSQ7zEl85WP3/t2mZMhrqwShESHYp8kzeiHDXbq\nrJ/ShtHcohwZNFVnESyFcvW9F9M++jCZVrFWj7CC40fzXlCgaa7KiaGVe9WF\nXXV+C2fyVwy12/27il7RftywLPqGQtP1mQBIBgKM/hNaT9FjRTb88ObrQ1C3\nNfTsniT6J8dOGveicPgAV0+zA8PmlRDzdBTHvcbFuGytsUfSvdMVmA+5azip\nf8kCzRCo4+E/8Gy638F6BYFLCj9DOd7Ai7toSSfP4piPYHNk8bAtPooEjNlR\nkoEN63nezvbUpobfaMlVB/o74jHd98GLuUaR1d9HZ0LZqokrK7FudC3luBW0\nDJL9su5+mRCsxxNuz0yggrS9io14nY+Yqbb0YFNJxIBkfpO96OPcWW+HL8Vr\nXOEb5FptImLRbHGnNeBj3+r3tQYZ/sD13AC0k7ouPP0D2eQYwyVaam1db17y\nK3uw\r\n=6vVw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaAKMuiiaREB2HSwJNOATCiHiCXo75nMpefaotOviIEgIgJOv2v34m2m1veXviBSkBFMgSZuvPpY3XtanQXDQJz8E="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615551720-557f5436.0_1615552036395_0.9523748042439386"},"_hasShrinkwrap":false},"2.46.12-next-1615784806-7b51d87e.0":{"name":"@xdn/core","version":"2.46.12-next-1615784806-7b51d87e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615784806-7b51d87e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-wp1avlAd3n7W04Vx7iO8mACGc4Ie7q6WY8npHAjB27/DxKYL2IZMOM659Ft1IRwUkOhSkD87CoZYwXENmsXKVg==","shasum":"09c18bae4687dbfdeb13212fa4f8352b7c38d5fe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615784806-7b51d87e.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTuw+CRA9TVsSAnZWagAA2FUP/A55ZX2yVIWrwNKzJqQ8\nufSgR6CbnsucYXhBiIWQWtp/ZXFxrTSkGg7vXU6L+klKcSkdKxYF9v7pSv+3\nnI+HPliKp0F6IXqUzBvMySvwWiVexjAmbUwSuB09nx6TxRWAF97Zi/U11e2p\nczTTI/G8iBi9BKM32JRmSDfkMMBELmSzezYvASOsbAFwA9xQ41ruIykLNi5F\nBxbvCyvkRT+19dHpl8hcwp/vfM14+zvnsD8oM251ctOXLoYMYplzpR+APhXS\nrFSTkkHLbDJZzuXIY6h7UIqzOgQI2/KwPxcwBda+mF9hTqOGyY/L2OczNV6y\n6pNQ5Cq7Ex8kDb9DfwDaMEhkJ2Ftx2VYkPcu6tOm9B2BWzPZ50rbh+jJhGNe\nuSD6YANg2MqAgRAoh5iHdU2h0LVwG9vuVfHpDaNVcb6KndyJ2nnJxu0gLnLx\n18FHi0aNiXza73g4eaP6MPTZkEUqmsPcXSMjEjH0LPPHTUGrr/VeQIHyscw9\npJz7HdirYZPx6YdET1ly9sCmQXggu2KYx/MOnCY5tVPZZ+XoQv163SINqk19\nrnZ07ehIjYJpafWypAdeWpjutaEm1vMmepwLy4iKd0seF76/JrTruAQBqYt7\nybgTwCAoEteXBqpba9xjycQHZ6xaZGU8COGRTesLVC4VcBNXvPuaIcWOPcQV\n/QOJ\r\n=5Kr7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdUE5ICZNBkw24WbB38ScammVHvKIo9A4lzzNyLkN2KAIgTn8MjQu0xmojYLdM9LNN94gaT8hVyiv3a53I+i3tuMk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615784806-7b51d87e.0_1615785021660_0.3831416573463249"},"_hasShrinkwrap":false},"2.46.12-next-1615790460-121a84f3.0":{"name":"@xdn/core","version":"2.46.12-next-1615790460-121a84f3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.5.1","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.0","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615790460-121a84f3.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-BDDXQBYwuHm1AxFqYg/qL1ZHEJJ7/0Z5acdddwVG/WSgqxc8xYiKN74jLIbIs/2tDjZ6ZelozVS60Td0JexZWA==","shasum":"d10726a6d04c82660b10288f432a627b82dd4e62","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615790460-121a84f3.0.tgz","fileCount":181,"unpackedSize":665744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTwJoCRA9TVsSAnZWagAA1T8P/3H7XRq3JjCg/6Gc7QJK\nTI9+Akb1/fFIoLk98IsEWXukVIbTdyIW/4ZZqujQ/D0q3oBFt6yhsYGn0VM3\nqyXILuWIZma/ARHsguScJU9SyBMAMLhaG8sJZIqZmkcMNqCwjSEIuhHYFLs6\nEZ5XNxmfJMytOVlRrzMoohbv7W1/2svQmFdBgTfgzT8ryW4k7bSEBfMtmxDN\nJ4ZHyuqLgGQdaUikKQilSDS812aJ4E9dtMVgnZG4GhgzX5vVIXvYSBPXX1ad\n9ZDKmhug93aEEMeAcktgjXo5bGGeQDn/ZgbqkNJugiEjGx7oDeGIr9y6kIaK\nUr7pKdIGTqUFVq620XQ52sAzxQsasMp0NKMicrg5uG5CMvCaUIM2tTW1cM82\n2gy3FRR19hjSJxg/q1GYDl5JhvFGiRuPGkqy7zBzhs7zOaGDxoaM/G+BViGK\njdWnMgHkTlKLcGbhU1BjqvJLDEFZvlFyqBgU+31M0o/drQcCiBnN3kOHLb09\nl227G4rOEcmjmoaSfYsbc/v9NgfHpJjL/xXRVqOW0Tgka9X0tYyiWN7qcKbU\nJpB0lhkdwWBhd8MYKIAXxTf57NQK0RZ3NEwhV4DmneFdCDoLm8qX9A4YXquf\n2DUjnP9dNc/8hN01700l+uh4TiQ3erAnD/D/k1qVbhjTw6TaEo6VwcWuKJB/\nINo+\r\n=DvX7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF1vbSiorOiis/9eogowpKywbNeMjSBNixwq96LIDEf7AiAeuV1EeSCk8jLnJdbIp3WAR3z3O3Ijd7rAnxJEgRNUWg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615790460-121a84f3.0_1615790696202_0.9468142801794837"},"_hasShrinkwrap":false},"2.46.12-next-1615894322-3b82dea0.0":{"name":"@xdn/core","version":"2.46.12-next-1615894322-3b82dea0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.18.0","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615894322-3b82dea0.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-EMI+wR2RZO9nksn1DEYThrcqd7k5VgD/PXmyYq7s0yVGhc+05QMM7TU83lAjnQ4/GAjv3FYud+YH9oDYsMFn/Q==","shasum":"f7961b1712038add23a1382ed948f72010cd71f1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615894322-3b82dea0.0.tgz","fileCount":181,"unpackedSize":666661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUJgsCRA9TVsSAnZWagAASkEP/RqPIx6NMKbab42DlXoO\nzZ7PvEX51ERHmK6N5tbkwlJmJ+2XctSiZGXoqPouSCkZj60BISJHIWFUMRX3\n1RZR82tLte8Y7juGhrAAIIPZitKUrsgf2/W3bK9lK0UBKBM7UKkL2sxn3IUi\nSnzf7CAaccspk1zJlqNLnny27j/0jINjxWfgww80gkkyI7XmJ8wo8OmkN/x3\nkCcXe6PmUoFnBEHLUV2NvDdKnsnC+6IPcoWvbtTzJnX751LiP1c65PLqc0Es\nGCf5NzMa8T99kHlPLEyLfXUAyhwNoALAPEZOkeQdtZPacmtoQmOZG3CWdCiw\nnoPGuwdu0NE5w9bfBV5MQLHulQYH20ofsvQsiX13rmR0kKmKq98OMyhs7k0O\naT79Mvaopk+Y5H5BINjEgCTn2kaDJjE+wiYcR3U8LSvU8XNmkrtFmTqG8NLk\nSzEZ8LVOhxoTZ/rtBdwsu0BG65N1rOTqwxFieiiuhXGaQjb6qAXBjtsIIY6Y\nID1uQCcnBH+XDeu3OnccFz5SE44uIMdFR2YScO5rYzRXJmOtcaNvDXC2TTAl\n//5+PnHWuRruPjONg7RQrgRlXEM4aapzgfWJTFeg6BtZp8FM33N4Pk41CsUO\n77PhK4rPlGGZ83GhnkZK5Ae9qtF1YK5/E5mp/Peqo9s/De7HNwZxZKcrIr3W\noq/e\r\n=bY+s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/w8qUPh+Pg6U2aYwjSYenElRsfeP73MriY/PkJtc8XwIhAK/m4syGo0UVleCjpuT6+QS3D3kIGiQ6Xp5/6YfGw5c/"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615894322-3b82dea0.0_1615894572122_0.644753018418696"},"_hasShrinkwrap":false},"2.46.12-next-1615894458-9120dc72.0":{"name":"@xdn/core","version":"2.46.12-next-1615894458-9120dc72.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615894458-9120dc72.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-CfZfimkk2ZAcalyZe7izS28VE+EXvN0h2QLSgtswilH5RkZC4JHGttH+/yoNBu0yZ9FDcuk06CmQf/0Kjk3XBw==","shasum":"110f58ec5e7fc324ad538aae149b34655eccf2f2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615894458-9120dc72.0.tgz","fileCount":181,"unpackedSize":666661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUJjICRA9TVsSAnZWagAAedcP/R1+pc43cY4W8mWnWmlf\nzG5fLR4FyNhX3wg6XpGTL4CwDGPGj2BleF7tMmhDV5jXxLfu1dlx3NwfZnSD\nHWHd0eDovFsYpTIHcazsnxDXXlqc1UYPpJen4oToYYGvZEl/f7aYO/hHmezB\nopTGkohU+kdsnSX/SAiVh7HEaPgaZAolKloU4X8g0MmbrQOMmdVHe6+7TjOl\nRcY/o5guMk6yrVIRr/LzULdfqxwvqpy8ofKzrRInZP1jukdiZWnRXK6J1yUy\nRwkcpzb4Rl6gVS7X3kl9uj9Na3ZV4xEtbQ31v7s3yYmDj/rk06BH51eeDddq\nkY7nhy7GSTERI3OH0UvEkOUohJXc2vlYj4XkauygCtU93LNsLTCSquUmT6Zm\no62AHpMJIoiu54s9BhvzFgdIiQ0r9ATVs1yFNOHW2Y88cDil2imOPfW+rtoX\nguDmqry10f3XeOHyS9oM5eq3W2skLB6wVmyxcZJcmqM1jIlL70tICL4mf3oY\n1EANgUOx8xPeAe8MN8p5169lc+3w5Nr/m6fmLFEyd9Ii58syqdWftfRj/Z1k\ndiqFwklH2ry7BglX2P3UaagywKxhjK09GKfGb79fmEw5haIJnfW8zBFNf3zG\nC6X43CJ6sKRTZw0kLGjEIFT2wGbU7ijLUaVNFbqJNd48EUzeag0C3jEPNgiT\nOoFu\r\n=tESZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyGD28QjmA3+y8C17RNA0PkEz+3sFb0pGBvNqfIibnIwIgM2CgeEbAE6jnVkWMZSXDVRjK054Z5gCBsBNxBnJuKGI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615894458-9120dc72.0_1615894727828_0.4949895739581751"},"_hasShrinkwrap":false},"2.46.12-next-1615894578-203ef237.0":{"name":"@xdn/core","version":"2.46.12-next-1615894578-203ef237.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615894578-203ef237.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-DxyZUzUMmoperGWiSGIp4az5qlTS3D1I6rh0mSXFKFCfNiGt5fEaYHjpvp+Tdffcc7Pcb2J/2BSlwp9xbz0nqw==","shasum":"a16ee7ccdaff9b9732467cd948366869f429cf2f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615894578-203ef237.0.tgz","fileCount":181,"unpackedSize":666661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUJlsCRA9TVsSAnZWagAASLwP/2uFX/ylKOQams33q4OV\nxVb77DjtOZktki98V72mY8t7p1TXWkNxOObrDl4q5MX4HeTZBZF2aBbLx6Rc\ni3fUaR3SJclD9Lz9pCGMKfTHpjjfeiAchn+mcZleVujTPRPUel5n+nnF+IM8\nyQwr7gRmyRCWx8kHHbj5H74rGjYwfFnhLIqj9UHaP95V0auSpsONhWt/ZZDA\nVWpMYzdn+YKB/TUfRA9WHrD+5iiN1Zy2fFd3E1kWKPZhxQHKdTX7iCU1OOtP\ngmIq951pyL/In2GdeR+CHLB2WjJbFM6HptJIHYrm6J82m+ZQwnTg1yjcwEhP\nW4MpokXke/zDGXFMArOCRU2UiIVfAizVDjINVKXhDQTG2jkN2qi5snr9QBJA\n2O3ZAWiJKypVSCtXQDB2OlbK3R1W1D2752HAJIPJn6KQ+IMQ2qkEaiM9f2/+\nhYghN/LJmbw0M1ggAMXkRzJldzlqXd6IwZ3wMjxm3wo2R9jmMsbPd8762gWS\nLwcIn/97fm5tW4DnWRMumY8obcJVLTUpO6oYDIdeMmmlYF8UQm03iugFcv+S\nDXtFVFWvOtbWdS+3fcQ03m02PX7mLjbXUxDOeVPd7/v++WPVGc7gH7izBOGt\nBQOcaQ+kLYG/lV0yE5lQt+jTL/1MKHsPkcpfH9LBnaccerDmlmj5Kv+nW2ph\nKPTL\r\n=iM/3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBHv5pKP8yqucYLbIjkgvXYIh56fmwomhglFKZolDWryAiBUO+8dXDWXjLrkNI/fGxdeHjHQxVUQHo/eVK1Va//ubw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615894578-203ef237.0_1615894891901_0.10517317136443616"},"_hasShrinkwrap":false},"2.46.12-next-1615894721-a4289e0e.0":{"name":"@xdn/core","version":"2.46.12-next-1615894721-a4289e0e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615894721-a4289e0e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-jRghEzRdcskT0S+ySGE8HuKvdMarqEAtDg84Goe6aIFrh9Xg1OSZXwmWNXelz/dNJGgVMx5dC93L0SePTJjklw==","shasum":"cdcc5c4693031672b58a238f4c47e0160e5a43e6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615894721-a4289e0e.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUJoPCRA9TVsSAnZWagAA54EP/iIOoMvtcEHM+KcMh6Qz\n7fWvsDUdHH2znjN96/gCbsVKzB/I0oqy3ycDTOQcKdFO9XF2SCfcXEA7GpB5\nSvW+EP1Vh4VANGl/kTwofmWp+XkTBsbHX0onTWlNLuE/QQWv6vp4oUEsDyiO\nKHblNsN5/kQK2szet3NE2LLMBTL/F4b+UkMKXKIshSMe99X/E9difdwsfoD5\n3ElruvC8MRUtVkhAvUfAJYH+hDx7WI3/uFP4LLnLEb9ht5qT57jPvWpNI1Ts\nN2CRLn0Xs1nKQ0TTLsMXf/j1OgmzUNYjgqHMaDTVgtlUaY5oXrLDNqJwrPGO\n+GOHYKzfVQ/S7MP9v3jLJ6vnzJel8WMYvqTADLJNutYIyMto3W5XaPvw0ZLR\nD72z7lr1xnh/K78RrWweLi+SdedYBxF2rc3socgzX2C/o9QrjFLC1b+BX1WA\nblj856xbjfTorBNnyYKz5K2vgvHsJ4dgHkuvUAvXpmVkZWAQFvnLz0pnn9uK\n8c4uv8NnXuDYJ/W5bWw+vXHogXKagR1DPW5dcOuKT1KA5DfcIKHTwMjzZufw\nYHAT6WPdygOrQELWBwlVYdrkJXQvjTktY7Deq94SfSy6pfJhK8dPCbTH3d7o\nk0NeI14U8msm1PuFa+A3cPJpfmrb01IK4Y0yD2ihdJAF4ct3ksKU8umwwdcC\nclyU\r\n=2bQP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwJLOje8V5nxDw2z3OU82fqiyDBx8Yd9n5ZMEMQE/TTQIgMZYx8L2OFm8J7kjRXbrQvNcfmakukMV/Olr6J85Duts="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615894721-a4289e0e.0_1615895054552_0.604779420762084"},"_hasShrinkwrap":false},"2.46.12-next-1615940773-a83de87c.0":{"name":"@xdn/core","version":"2.46.12-next-1615940773-a83de87c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615940773-a83de87c.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-CvC4WzAn/z23rQdvQz8eKE6A8vZa8MH8Pqk+a7pNsY6girVv4w4d5DpOPEaairLY8d5E33v8MpkJdeUo/AZL8Q==","shasum":"fa819b7d590c12095bc31370b24ad060adc4abd1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615940773-a83de87c.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUU2xCRA9TVsSAnZWagAAlrIP/jzOL5COtiGdnzbrQyEF\ny/9xnR37X25aEGMRNAF0qTFZWnpFhiy+S4PNLqaJa79oqquIFYKKUrMBF7JO\nlaSOzBr0n9ulDZxy5csy8oLZFUhz4Zw++ayTEMoQyaI4RULKZVEe6NThntU6\nIifVI4xufz4qUPp0P0gEJBdJS8TEgQoM72ca6k5Megtr8CZA88WImgrQ1o6X\n7vGlRqQqlTRFvrTZBPTa45p9CWmZvfXdDvmmXD1KyyCz/xD1h/J9d7XGrPWF\nBvX81x1+RA13tmrgfUtqyEl6uJRRBwROldR/KgnZ9PuFA5ey30wj61kSCM5m\nPMgNu/l+VY+Xx2/IOfOl6JUVV3lHOAeVlhLfp3nxdHHBhkQKWdFcDChKKVqC\nH75d1Rpdu94mwXOKC5PTYPihAEHreYmD7GE2Ydn5LfYrHLbS3pdCX/BaNr0L\nNY+jgaulFNQYlptlTA/5BNJE8Jkgt1SuLglYjeP3D37V9JgZOsLiSNDEcBbX\n6xvKRQz13jug/+N6K2jI0LPzwctHfYpTOqYsO5uSfcLhnCN+Q64NV1Fd4T5U\nwp76BwM1601C/mKrYy4hek7KZSwh7+F+cpLjfztcPqfZO0oMw4X7R93DhWS2\nndnCfml4zVZ4T3gT2MBfoXVekBvU5FjQ2gseZT2EvVlzTWPWedaqGvbWFXPR\nvfZP\r\n=M6dC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnYrTW0x3JPf43adYs7vIAf5488C/7JQP/Mh0IzqOf8AIgP+FOTmLdbhqoKqPbJZBiP5b2y9mw/GmxRlB8zDKIZ5Y="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615940773-a83de87c.0_1615941040545_0.6878358679183929"},"_hasShrinkwrap":false},"2.46.12-next-1615940772-a448394d.0":{"name":"@xdn/core","version":"2.46.12-next-1615940772-a448394d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615940772-a448394d.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-FS1fYqj4jV6VHTEtvLuAX0AbzELJa1Q5YpjRuFqRhuocMl07GI5IYkfH9KTiwSWnza6a/C0N2GKcEXSuWoaWeg==","shasum":"c88e02028af7aafc2ee511250fc0f6709138ae88","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615940772-a448394d.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUU3ICRA9TVsSAnZWagAA/moP/23jutEkoEX2eNkxdbNX\nClcuH8FXokOqpRSdQSYM/PfPSNZg92VtbVeyRLOwNWYetprp9ni605AX9VYQ\nOpjdyVULUKKEhjj3qmh+Kv1DDL7Wj4v6bmWmrhPmukEB+cTlNsW5vcwcDu1n\nQqU96z3QoIQ/nwf0WqRQFp/hhgX6b4DI2hc2sdJ8QXuvgdPBpEZgYb0SG9x7\nwuk0V9FAKWM7otB5cyU0Kz5nFj5bLrCjL+LSRQubZxMQ8ewsz3PA7b4L6Bdy\nCe6Xjoteaba8PO5vMqUWMeP7CNQjwsQKYNlUnmHKgYSXRb476aPlya3B6IQn\nr7yyUvLBWEubZ8HjgOljIAI4jjFIXBXzqR3VSVqzXyBPxbYl51GUIQetoTnu\nOGVuYYyjdPY8NAvpqUe3QcKej/2gp4xi3rJonyWw0A7GBgj+F9wCX5lEBEnH\nCIuPc77fHU65QASqFYZqahPrBSz4KWsmUeCuE79Hufkfq6J373AuxFI2IXhL\nHssXH26SWJSlabYPTzBOGq6/PL+ExeeHbdSs9ooeFPmrvFAEgBZLwlHEJ97C\nLwF39rCboAWpgfD5h444Ws+1eSXczKxzKAhcPdzBptVJnODTfTaZykbly+cb\nf7NRUKL+Vwt9fEasjcOdTme3q1r92E/0RWfxIJy6zoVWiTpY8k+MO+2ACS9X\nsWNQ\r\n=OiP0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNTChj/4XVPrwxJooTfhRVMGwHnbDGqwXIjyLxbAjHCgIgZsrEjoonRXMWwZ4PswmXuAyT+suCnUZc0+WVKEd/OHE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615940772-a448394d.0_1615941063580_0.2759737287661155"},"_hasShrinkwrap":false},"2.46.12-next-1615947584-3e4346c6.0":{"name":"@xdn/core","version":"2.46.12-next-1615947584-3e4346c6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615947584-3e4346c6.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-4Je5YB+X9gbbeDFRZfR8HTvl5NwjY+eL8Ptw1F8mXAqHwVN0PnFoEnUYXfY/Brk8C8B5X+UJHz9cWFUB2AsIpA==","shasum":"e2b6306a8f191e3132a770f10b3e4235d5e08593","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615947584-3e4346c6.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUWhUCRA9TVsSAnZWagAAEf0P/2VcgKcX2owKvOQNqHRj\ns2KRKiZofqcJhGQ05eanT/XWQw8wgfij+JIHHuZU9tJLGjD06K6upZ0xYaTP\nm4Z381XruVrlBsJIk3TG3Gyr611H8ioCY6tT2/Omc0x+4Ex7yyC6pVDHgka0\nCdItlyqqbFMxygm6CfgqS1505SlYLsg+w/+01SmkKHjZtFREk/FS0vKTjsBE\nDdH7w57IM14chMHUwxe/XOVh9epXb6zSeTLZOERRjQ/dc75YpmMI1ECoz/LH\nq+vNgQqV8jdGo4zleS3VSWqI35jA0e3L5K/O0AWxWDbjve4ZI/2ac/FB9OnN\n+S8uYRioB/sDgjIu7X4w1pOCDrB/bIQx//f8GY0E8IaYJrm+fn5BwHTSOMPb\n1BQcxgE+YeRa1RCraA/x2/Xg+proC3MFG+Zso/Q59cZHddH3Wh8k7GPT6Lzq\nHNo55SHzRTb6pZErD71HZAkde2O29r57wxGkNjBtpRqPeDZkEMu5mp1dJvAA\nCbNuweTcgkDcLv60g63G3896NfrgCQ280HkjOhHc7nAX/NFqkKRM+FrbO74V\n8o5CCvWnHStRhe+63ORoO1sRg12YWC2dY+03SLfMtPx9T83gDo5/aP/0ZDrq\nwEhG9e+6siHMVqKh/gLR86fosTqIbc8PrngzqwL874lFTGL9p7Oz43xij4/0\n32LR\r\n=jxDW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrr0fXTCNNXcDompswbjDoRqfI7/BEwkPpIpqWmX3GwAIgB7WtcyWMk+3fiQhpxCOIcn5gVCkvnVMgxC2xDrh9Az0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615947584-3e4346c6.0_1615947860229_0.08548891488713428"},"_hasShrinkwrap":false},"2.46.12-next-1615948732-62026afd.0":{"name":"@xdn/core","version":"2.46.12-next-1615948732-62026afd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615948732-62026afd.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-lfDabvhEuitARs2iI9dp+wu6uiZ7faLPfnqKaHlR+l64GSLOLBDcbZ+67rPicZD3KOB6A6cfYavHojskX48ivQ==","shasum":"b9c5e501d5f5f47730dfe57c2ba7dd99d5e0d091","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615948732-62026afd.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUWzdCRA9TVsSAnZWagAAWwkQAJK81HJEGIUkhgibejBA\nQX0+4ntBuCKLjeSLiwW3XeCxr7nfgGvd57Bq5qREihIb0/PYah9VvFKs/uij\nxdjpuCEt6+2ig3HQPy7fkoe3DsR0cB8H2UsvxBmG4zAhlYqPwxkBnU5Z0wAo\nfB1vc+c4SjdW6lMp8gboojGyo5D24uXuU0X65KJgBpB6OzvJ1K65qhDixy0O\nYNuJteEInmt3K3+wYzF4lMgUKi+NkJOaLMLV6DB4qfJtpvAZR4Ou84O45gaV\nINzDwLxR6ODekZGjTT0umJ6S2wFAUe1ab0dbi3cvkY8LVPEfRtzw0+ZlKLVP\n94Oe/9D4KapADLEt1ptK7T5VfllAXB0cLxEIe8m3prvQOo5f062uPbKLd6eO\nOVl1GnetRAIh9eaYTIZYwzPFa1tc35bG2HCup425m0UaRC4qa9t/yJH6ye/L\ndLENAtxF/K/mNetSjRbztZgsnN7sF/b8sCwzlmYT5PbmZEnPeRZJatb6U/bC\nzsQGbQ3RqVAaT9Vkkp54wFlAU7/H2Mf7II/ZXqF3sjj7wjFcn8oG/J47YXOG\nRi1kqlnSN6gqOxQuuVQlqV36BjsDGCyVSY3p1UhW8hTpJJEJXQSFUIKpityd\nHYvW9ukUypieiz9uQ/S9gjqfFH4/xhiow74Bgl0fnHEVF8l4HIu2OvtVAquE\nBNu+\r\n=4I1o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClcDwgscT5TFrXuACCUaN76JEzx5MqP0EeemDJVVHOOAIgaXllYrw4X5JD7tRbGBZmBVfGu3Oxx1G9afNyzOlGKM0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615948732-62026afd.0_1615949021012_0.8502435635385213"},"_hasShrinkwrap":false},"2.46.12-next-1615951852-dbce5a80.0":{"name":"@xdn/core","version":"2.46.12-next-1615951852-dbce5a80.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615951852-dbce5a80.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-hLPfJE0hnPpv8GIBmeKPT6E4lqzDRfHAVS6g7BnawkLvrLXP47SeDygcJt4cRxTsP8UZXuYrDfmSoxjiu+avZQ==","shasum":"9f390dd6e106ec499e8d69b3889509a16b629831","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615951852-dbce5a80.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUXkCCRA9TVsSAnZWagAAYWkQAI64VJErFNMoL1lNkahF\nnGUY3UN5wI9uoe7Ma7JU4u+0lntpdhuHtP2P7AnXh6Dfxy2iw4OqNXtYMFta\nf5DiJ0oBgs7g2utD6sTfHniHUH1kwPdQfoTFW2UxpmKfgeGEqBSQExel1AKX\nYjS5cDdSYlJ9TheckpLwinCdFsVRWyN8Y+7i3qY453fjgdV6YDIziDpxiIpq\nnHUoe5zYMVhkZL5BckHb8byGDTNLhQJjk8izjIM3MQ77B0ZNzwyLh3IhoTMx\narXiAc76LTWX3i12jnHLCBrMer0fKnOkzSUGnOCUtsnfEP77boNOMDHJ2XAa\nut4WxupaWQ+FMSg7t8fbDJFeOh2nmTc81vN24KD6ha42dsRWC1dFrESspaxf\nckYBfDRZtFhlDqNguIsWj/tF4ZWsWa77cmd4E/gr/To458IIrijU5dVTe1bk\n7f7mo+Z4siCCiqpQWOXYOpFpevEIalSQKg2EK/gQ87khGBYyETBNB9XvwNTP\nFneNyXr8vAa6L0on4QyQdAhiYf98YpN8wACnCpo6kP6Bg8fQ205+BVJF5Nnm\nqjnsHaBlIlyiRAkdeQUDRAQXeLL9Gf6xO/07GUw31WqBXx7X9qnh5UAWxHxA\nkTJ8Qg2VzsqHzx1lfh5J+8SnKJUK0hIFDTEbJx7GFKXuz4EBLm/bzwDYeasp\n5Bne\r\n=wpkD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCJapI9ICEd7jFL8c/KjEBDxsONynP+BZ0hzMKJCXQ2AIhAOU051WbngWhVqFFJc0xccHaarP19CHCjRd7ew/e1cUU"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615951852-dbce5a80.0_1615952129858_0.5078242036845175"},"_hasShrinkwrap":false},"2.46.12-next-1615952198-60c38060.0":{"name":"@xdn/core","version":"2.46.12-next-1615952198-60c38060.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615952198-60c38060.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Noc2kEuLN3hg5cDaYIcuH+fApa4q9OwK40hlUbS1/O05srJLtM/2kIk9aVHazZpee11IKr8nIKlGvujOMH/Q2A==","shasum":"27ec724e3c7385c03f532cabd5bd83803b76d20a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615952198-60c38060.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUXpVCRA9TVsSAnZWagAAgpUQAI83RiIE1FNXO2bogfTx\nGlUR5dk1ysy6p5Ff/Ew52wDTVh9UqPySUTZuLI1c20vmkugGcu8LlClKiDD4\nTbF2LsfOmN4pc1b/WSt/xsnQdo3EHbqLPSFE5+3r6UgyBoUD6zyV4C7sZw9m\nKEzOTH6P5vhezIiqbRBTmBURngcuZGQTxjs8OO9AQQMwmcxzu1+F+EwDyJlR\nOz7TTYNqBCcsAZCa1k6s0TrWHld+BVxtajnvjpPasNS+hY8oz9G72wrvp7Xu\nQjWmJGz6mb3eZys+6V5ZTHqkGqz+Iji9A1IS/0zQcWetAMDCXz8loeAm67Vu\n1jSH6qI0BUb5uK68gPnJRb/vkFzrVt4vxKzsg8bz+l52vmu4CGmIfSpWFelO\nwDsPG/C9m6A/XmJ6zDVPaKJQTdJ0U9JUce58ij1MZoXeSxQcJ7M6OTxZQFDp\nuQvLGOlOZNFGduQ2aLOw9AEzTuc6JAk2aCJQVBbAEqNel8X6t4SUUPQcH9rJ\ndTOzKeJ8nDUT5b0c9OdVEGPG3ZBoymgtqnd8oEJeNKbCEXMll1ZiknMtCzYl\n0gcpt8LzqzeJFJV79OOUwqj8Sre//6ZCgpVhHoh3KYdQ0s06dUqSDNSr0Ar7\nd3vgTEB2A1/pmGO/lMSSpjBja6krDBXG2cGIcaXCRAdK/yhddX2yn3331FeB\nrJ8l\r\n=1VMN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHBT1yuqeRtICuFBPO/s3si4MFXYVGb6Dlvnb5u7M5iQAiEAsKb+hCQ8shccYJUPqnShDXrN6PP4+vzG0u0MXkoU0Mk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615952198-60c38060.0_1615952468816_0.6529839302751239"},"_hasShrinkwrap":false},"2.46.12-next-1615952220-42e38b49.0":{"name":"@xdn/core","version":"2.46.12-next-1615952220-42e38b49.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615952220-42e38b49.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-6lwbWUlxIfvrj0Fq3ymPT17AYJBhCvBMfDy5bMcp0P32USqqrNZQf9BfCTOVfs+4q/zTOc0u2N5Iy+a3a+gAnA==","shasum":"ceb4338881d176f2466cb1a9ca1f7c2a18292e96","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615952220-42e38b49.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUXp/CRA9TVsSAnZWagAAd/4P/1Vc9qGgMXgeeldKxaYm\n/z8KPiMB0gxkf1yDErN+1q9aRbl1VJv8c5x4+MFeVZdEFJaX/vR7YwyY+CPc\njGUqBqUN/u9KunMzh30z2ajfTyqFIv1wJDg1uKXJAPdFdw+Iwum7ddqITzqV\nNHpYmATcIe0N2YpotgQX/Boyj5cii75LKGiEvo/LeZ4ZrWKatfAeHBTMHleb\nnnA/b4nT6HQdHycnYYvmYj4BkXg51qKA5y/5kZvoc2YgTL0TyC5YJWVaNejG\n4N+KbnkoUPptliJ4b/jQn0PW5e3q1T4REzgdC/KIK0Tyk1SDSug40ZhJMJJx\nBcY6ZoAuYp3EKPdU/+a8fx+rws75EpPDtT948n/V7q9aTIKQuwZAZ/j7F1Uk\nqyeaoNX1bVdmkiXts4R5oPERlgLFbTqTuxb9UpNTLLWurkKSgQQMac0YYo5f\nfWw77WQDskKZI6o9WcWF+aH9NF0yZjjLgm2rxHXXzLP4eoUR6p47TUYWgy5o\nnLBpTE3DeQor//tHwat2fStnRxwbUpExJ3DhSfN1Dj0g5QYnGDnHzJ+j8q0v\nwcpdSaCUcfs/Ba2O8jBmnLNEj2Ynfocz4XTImTbZcfZO7+5VutBOoYy7obfx\n5MtjGrRuuSuyKsB+U35dCOwD+87PnUGDYAwcNqldymmpB8GE/V2t8UNcOh0K\nycUG\r\n=ZOSx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDVKKHrqUq0vbHrYnMyfx3ohefmVPJfVAYhNoND53KzmAiBQEdYkEIDPAEmMLQ8rdq/y9eEsWPp+Vp7jJhsQr6sRHQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615952220-42e38b49.0_1615952511099_0.06472723152024007"},"_hasShrinkwrap":false},"2.46.12-next-1615976369-4310800e.0":{"name":"@xdn/core","version":"2.46.12-next-1615976369-4310800e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615976369-4310800e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-u/hRhGnVyKFD4msbk/bjvwPSd5blKduG6GWJpN7XUdDXJZHngmoWBWE/ZWpPSl4pLRhXjPML55xPYkyGgMBMzQ==","shasum":"dff76a594a0dbc78b110544ac047c5481eb76cc8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615976369-4310800e.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUdjCCRA9TVsSAnZWagAAlCsQAJBuvVtPbOPmpGlM6FVV\nPhd/ph4pbGkCBkdf8I4NPuCswH2CZKsaDVD9vvRHRHGmqA/aM3duxAPgMA5Q\nkODT33b+36mTtaNKndZl4PCQa7+eUpJg+mOZ+xpGBimDXQbRDD/oh5cZM0Fw\n0E/vja8OQDE2bOR3SUVEOGWUxx7gbKO9whATUDrHVAmaVKPg16gmrAc9yyzf\nqULQZjfJBylBHGPVRhbw8uRUG/ZbMc77xH5U0Bur+Bqv5y5SmNPJJYagBDdp\nnnGOWBoDsB7mhhahKRBkL+oQwoQHoz1NaKN7ptmoWhZMMXtRfnRmzaZFz8UG\nlORHqqNIIpWxeumoSfSp0+yUZz7nUcoNg9bGoqntMFka3tvHwGi7G5syYzKm\nNvC13Tv3fbpMNiGcTMU8rK0+b/gVhUilGGZI37UmxchKGc2ZJ9RjfpfVAHi3\nvvwDCrd54UfuWnsE/8CsaMSskrjesjOBqUmFVSeNXz8rxT1Ac8Uai7zDPmMU\nWSO4mMCB1kSkhcb2e+JTVYreHYM52HZofC9iWf786/YwtaJ9cUmv8SQyU5A6\nsgbxiGyqMrjoaKoxo7ywVWrdiEqLdee+8883+wWdmQ7Q/AtReZw73vn1bxFa\nIRs34u9Sk7MS/vgcMK1+KqX/eCKrUy6Q8qMGgajOsPZ6OqEWLyzAooXM5bEp\nJYwR\r\n=hXaj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbUYyFwFUHD74a4AEgMQotmmQtWTq6YecFcFNBEgZ2lQIgQodxYuZG2/MYNzE+j1XR9UO1eL+7Nu65+Hlp/GA73Hk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615976369-4310800e.0_1615976641459_0.9877408661214657"},"_hasShrinkwrap":false},"2.46.12-next-1615988966-43a6bba8.0":{"name":"@xdn/core","version":"2.46.12-next-1615988966-43a6bba8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615988966-43a6bba8.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-n796zUaX1/GKpao/nxkZ2WMWm7Rqorvr4ArQgbtZjKv2sARJrESPWHLPIoqsmOWVFAPmQDzZTCC76uAeGYhW/w==","shasum":"69f9b3604bf2db196d56677910f974e4720172b0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615988966-43a6bba8.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUgn8CRA9TVsSAnZWagAAA6kP/3AXK636jnKNbCsr3n5X\nk2Z+KZfrAWAj/zUCQKIibHvUoaUtAcNZRs7Qvd6jn0GZPwfw8iK6zBRpf7mB\nOqUoR16QWvd0E6vCEKhJ8a0eNKAEbPtysqGQZug1Ewl5R9UozUx242zAPSjD\nz0VhhVBSBZySySzTYvamlLBK9qazNY0Yi6xwgHhZdyF/OGXqSAQ/0MoAcQl/\nuMWjEtBkg+1EJSTPHsq9ivubUfHbcfg4x7ss4b8ujmR+i7c77BgAxK1X7BJ7\ng00AFMlStntG30eWTtjcq+i2Nf7q9njjQbPvK/7keMwLlty9axHevqZyi/Ia\nCxylJopPIk2bnFAl8FTYmd2gzD49XmNVjLJkYcH3oGfoHk2bYkk4a3arObF8\n/d62ozMEr6zip3wigUZdG8BSXThHpwT/cPJcFikWQSNArdrNfvYwlPnnJI8Z\n+bhyF0U6b5rBu4D7oz59WswRPwYXpWPB6Se1qlNsVkmiaY6W0ufsPfg1HZFj\n+jPsxf+SkAXO9THlQLVM+4yJtqRjPjOSVEryC6ip1Wg2Ss+JxlnkXFhrYzIM\n57fQr+NlsnRAZjetNlfMWAS++ZuVPtALvoYQbH1x5iGnTkehhQXmhjr2npoi\nmtKj/LPnXuSN0ftuwHm7cEjei3uHeASok1KXouWd8hZ9yeYoYJXab9RLid1d\nCyqj\r\n=ptsy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHcUZuMeXpZllFhoWEDkFKKtLVNoHWnuQBy49MjqYdxoAiB/0VpC14g1hJaZFTBFbWGmiBLPNwIf82xkZZjW1vCgVQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615988966-43a6bba8.0_1615989244074_0.4424329930483377"},"_hasShrinkwrap":false},"2.46.12-next-1615992140-ed20fe49.0":{"name":"@xdn/core","version":"2.46.12-next-1615992140-ed20fe49.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615992140-ed20fe49.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-P2RGucTGJpSxRsD9Hh+ykiMNQbSInPpj63KCZ4EsSEGQiCk5ELMb6dSjaiNFyYsYCTUmKoaJ6eRKr8HUlM+Bcg==","shasum":"c1fc651d9139ca20b16f192b8a9b4a13fb61cd0a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615992140-ed20fe49.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUhaNCRA9TVsSAnZWagAAMiwP/iiArnGsRLPDyoWOCagW\nBD1s6B8MPToD2x6FW0POJHexs0COgyl6BUdSlYiAx1vtBUKSD3Z3iAflc7/5\njkzyLC+Jtbqdab1g+0Vdkg6uTzHmV0RmWPPygMQPJ5y3CCl3yIwujSPyXkoi\nD+3pF06udo9cS3c4E9GX0VX7+cWR0B0nesZlOb0B78bru+XmZyssSw+UNGUj\nB5CWgT9UF4BZ6YaWYNE9TlyEOa/P9ghVpa+vq2jwn3eDcJqy2Xog6fDAaW8Z\n19etqdF6RI8oUi8oKK9JjC5g/dNU0/SI4YS7msSD/NG8nsnajAk8WV90GepJ\nbAIN8mrfgP6sr/c4DGMEtSjrnholyHSGwG7Dq8eSL9Ixvzh7xclkNz/Y5vng\nYnmOXCGlXqMaGPKgN23JwHKFMxP1r61e9pmNI8aj4awBfQoTuCc05z3Cj3Oo\nY8zHv5CQnFMlYAqSzd8OSAJMXXVnddv+QrPH3FoRMapVa7bafTdY8ic9ukmU\nRb3mP/ZtjbYimPzuYOze3hL2bvYHIryvBHyG1ixOuLMRN9CVnIYrTp4wm/NG\ndI0Q7/HZKJaDMQaCKLdaIGZWj7qhk3B3tJqMNCUVa7K+kHcIW2geZm6/XzcG\nkptpQVgxswBANad8+goh452zuf0S7HwVYWKDrIkS9ZEluzynn4QTPJftUdoj\nl8t1\r\n=SsGK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCL292DH2kV0VQZHrFUuzVd6sEq/27DHx2J29XCsy62CAIhAIicgO0DX4uW33OecyuKukyCDqoRhEAtqipZiDvReygz"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615992140-ed20fe49.0_1615992461006_0.13920205869040192"},"_hasShrinkwrap":false},"2.46.12-next-1615992373-4310800e.0":{"name":"@xdn/core","version":"2.46.12-next-1615992373-4310800e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615992373-4310800e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-pssNh46NMUb8PjewUEM1WBcBnmemf/+aYRTsoa8BDre0Q0ERxlHidYggCdSalSL2DhsEWS0o6SZd9OMek7GsHA==","shasum":"3e2d63f72e395e63d75b1bbe09dc20f83b2f4c3c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615992373-4310800e.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUhdwCRA9TVsSAnZWagAAb5AP/A7VxQvYxVJjO0/PLtuZ\nWgIee3+iIokE4Yr30IYXBTE1ZcBPH+zN+aSH/t1bIBH2D2Io9ypV0ZbeB1kx\nv58FLm9H8TdudTYh1ryEiwmH+Lr7nWgrcw8JFuKqxlObN5lEQRgKNicW0U+t\ne69gKUrieL+BrQ/F74aqh0KMwk88MHuF6K76Hqoadmq7BD5iDdFjT8F8lBZP\nbx5olcd30IALAsrCcT0IJwpjSeS4iaB78JxIZMozBobQ/uqUANRprWqDFOCd\nHPxfW133EKZzgBVgBYeoPz4JHru1l4PaSgIULUijxne5K7toFuT90TCiZkCa\n/EQ2MKV9Q6+4VHvATrqwv8/dW0jVJhZ00hu6L4L38FLImyfQifui2vGtGjdE\nXE8yNVk5tAPwcF4Wknys8oWS8VkUHB8uF7d2o4SoPfCWOGeaPiDEleQZfQm9\nh7VItM9njzXfAmMyQzQjzan19xbd8TZ4/UlQNYdpuWx6xiIl/8rr8awYs7mR\nYmya70Rwpl6rsJppFLRHRzeUMtd5cj8OKzSnivqRdKQYA/9YEEreS4pljQH8\nllLmHRzfY2PqCYa8Ts70wbTnAu19z8+CbEbFWUGEdG64H3hIBR4tX4qy4sam\nMRHyv+abC+2EdVzT02+a1niLphr8AXxxm9Nm/XWNg4Ea5t/l4tbLKo5Qfwsz\nkBE4\r\n=XOFh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE5C0yGuji8TXqp9OwCPlP/yxDMyKCOt3XtGdWDqllasAiBLx/7Ls/c20vOSnI8bMdRHE9JYSMzYhSKJxTZi+1xNuA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615992373-4310800e.0_1615992688348_0.04114017749181387"},"_hasShrinkwrap":false},"2.46.12-next-1615992489-a4289e0e.0":{"name":"@xdn/core","version":"2.46.12-next-1615992489-a4289e0e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615992489-a4289e0e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Yf/1uAlT8pTQptVuTNq3/TwuCe8XuJfOGePBmbH97ewp/Vk0bFuW+fi18RVTRoAOZ0bm2k+KZziBTZltYkUHCQ==","shasum":"9144eb1a6e796fb29478347e3bbce138250a356b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615992489-a4289e0e.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUhf6CRA9TVsSAnZWagAA4FcP/RwdqGqFDMc3hVRCI73N\nR5P+aJBsz6JU3Sq8G8RtBhXWAwS3H2yYqO6hEIsnYJM2q3ILIZ4FAb0PWbWn\nKRsfFHebgPUamfY8f2SY8TgysqWgQl0SnRvQB8EOhHeZSsC0S9v4ktQ8+hIJ\nN+xCdn8rGWEcf52DqNhNDYyXdov2ASeoX7Iy8vrtWhkQDHvne9t65wA4nyma\nsmtZj1haUeWBeZ+JINvVfwN5pEiaulcAB8f9G9OVIWV5AtwLLEBRSQg7ACqq\nCgZ/BYNWWLFk3ixpQEmML77X8eTGa7+6eQ59DLFaLBIxnXSfyemkZnGT9QG8\nuku/2wzC5NmK4x+u7748JbJGJeKEP3ju/AocUCOwyL7fGHSggWmg+BWICRMu\nsULKfyuUuZOSAPTALSoAh/tm78UZxi0fF8WTdw4z8AskpM7xT/ySa7uUaLoD\ns4Y8mk0muEUgTmxQj0vvZYZtYM2ZeWvOV3XZrEHRafEXTxIX4S9+Dn9TMvT/\nnFGBMNmBIddheM+RjZbA6Cl4dsjRAGixwEKom2qFr0UqSppoqQrknL1M+DZg\nSnpwFaOaZwwzWhHKYzrU3I2T4gjfhbkh/eZaXqFT2cgXt8h6qzosxjq5AbDK\nmckynWe4AHKHM4De+XlxPsjOTLYsKjDocFE2KNF/iE9woRlSIGKVO5UrtzU+\nTzth\r\n=L8Ck\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHUgA/S08aFupzRve2nCw+T4GlWaUFaOmH+3RUSUSjAHAiEAg4L9G4LkonOaKJ6OZPKA4CnVwDaTzuhhvyeTxKT+6jw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615992489-a4289e0e.0_1615992825788_0.271051933205827"},"_hasShrinkwrap":false},"2.46.12-next-1615998285-a9156483.0":{"name":"@xdn/core","version":"2.46.12-next-1615998285-a9156483.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615998285-a9156483.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-VZryK/okYhsBYrb/OGzZSTYnUj70wRduoSOYGXhtu6NZLFCnM6rFDb9N+uYwXxyI7W/bdDJc4TA1/rZFZKjHAQ==","shasum":"5f4e1b204ece6a46bb3279cf9f8a0b5c9014b4c6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615998285-a9156483.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUi5jCRA9TVsSAnZWagAAIowP/ijhqDue76EKFNNrt1B2\nAdQN84yjSmZ1WZvyaQCh2ZLVtp94nREjbNl199+fSFTzqFXq5Kwv/RbVlB69\n2KzMhbw7xV7+hq1F3pX3HrmIfJKVPwmeIPMFXBRX69Ab7RU0Vp14+7+13I4Q\nAdEKULcEc9A0O4Cdo+swSUGIKqpNXyd4tbbxUp7k6n8gb2HxmbZKErJpX6nM\nyY7/N98/FcX9gfcj0DGyUwjyQMLqtga/dOy4Vy85TDwWsXiA/smbGETHgX5c\nKAEN3kmJaEz2JQpJKfhpZPCuo7rYDFAY0WWk6oc1L6VP+NQE+k5uuxyF5COx\nHgMv+1xKvsawioptOtHlHCo021nIST1VZSjPFCgVvb+axLkkEJPNShYiXnk2\n4Gc+Q86FlE4D9pT8cWdTrJ5Ns3IBwfH2Iir2m7298u/BBPh9umzFvcnyIFwS\n9mNZghbaPXyzWbJKRN2ye1N96dz6NKmctSewUqHU+Uk6GLRdCCrnDrMlCWgK\nWX2PIkj6uyyyMejB06sBGfon0lJPaFp9vimVmr0YADt1Pxnk2E5WPoScyX+R\nBidp34Me2EJCJGdq8Niz5nCtjGkeqwUbZ6lOOz8MD0LGZnnKWvG3nL7OAzdf\nufXMy8rAhPLyhkOm3RlDq3GNDiVL+yr+5xNj+Emb7SBwpBVmf3I/IwOSx+D0\n040W\r\n=pFi6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAMUYCGTCJkQMw4R2FfcEH9uHKRJJw5sIGmbOiKtVom3AiANTyOe+IsGpnNoIXId73+L+GNYiWYu6FfauoilOQEwaA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615998285-a9156483.0_1615998563298_0.36044032640938917"},"_hasShrinkwrap":false},"2.46.12-next-1615998301-a4289e0e.0":{"name":"@xdn/core","version":"2.46.12-next-1615998301-a4289e0e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1615998301-a4289e0e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-FOtwMHES2i9znj9zR6JQU86EYkw66g567YezDmu87BnKYvp3910VQIirQih779La5N7nmemPw9WS50g8aGMglQ==","shasum":"11189a272236eb6bfa60dcca986ba51cb41bad9b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1615998301-a4289e0e.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUi6lCRA9TVsSAnZWagAAsfEP/0e00MwIKQjwm2BsBj0b\n3Y8xXacwlLLhk04wtKY7/NSPW+Qllez0CRUr9rqc/Ql8Fj7mCA77wjbmyObp\nVAI8kZK1kCvSsEInljagb6SiiOZP0uRhyjhcMdAjaDpx/mrSW5ifA6vvKVyf\nWfKd0Sg25Ly/NGpajkPHDldo9bFvGSpYKQA5PHYP0o9Pi9v8lvI7I3CYnLIF\nMRlZIqAZyF4Y0epcZGo/P3tj6Fmy2zcE6IzAxBKdYQESDxKtZCKe1+lKaCez\nWRTsW/hdEW2t9dzEJGMlv/XRx+zgU78yXlrmyafcs7DsrY8TunFKyep9IYGQ\nlNu6P+2IIF/Z4jJRWnj2LHKskUujOwAuJfMZ6Y2kkxa/aqcWGdctvBY5O9FN\nh/ErWQdrK7/yz7Icl6A21tfEaj4DVIPZghOxiRJEmicPOZKARAsxpk3AX1e5\nxv3ke9TNB+O2KaqhVDFA6/uyWGqz7G2l/dr8LO/kAKNmGsTJf8mvVYJwdWog\nhe3hISSrhiG1inLD3c1VES0PqOc0WfxW7hA1+Eoor0oGRLNqQRYqp6t51OU2\nIj0+dAKhhG2eifr+qlLZ/i1TeK6FW0zYgckFbQ0Y8GAe5ea4OpdKgaZu4Jhu\nM+f5eFBeps0Bz5GzpKNujaBZC9z2WQqwnmnmHmVOWvqNpxx9fyOUXtye/koB\nwHzI\r\n=5Uxx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAEVzuhokUCRnzIFqfpstsd/ACmT+iZXiY7Hc6ak58IMAiA7E71Xn71uGwiK078cxEPte357+IQOv/wnnznUx2KSYQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1615998301-a4289e0e.0_1615998628574_0.24107502397947034"},"_hasShrinkwrap":false},"2.46.12-next-1616000880-62985ef5.0":{"name":"@xdn/core","version":"2.46.12-next-1616000880-62985ef5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1616000880-62985ef5.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-vx/G2MzmupU4/WvaqDCag0nEzO1Imv0xZl93Wzyuod75Qv8qs0eOYqHKTw08+g9CBp2JBeDhFW3O1/XQXJOjHg==","shasum":"b3cec941e78fa780954895ae85a0ca6ea1cc3aa1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1616000880-62985ef5.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUjitCRA9TVsSAnZWagAAnH8P/1jMVXmC89NqR88p3LMd\n5mhMMsRQj75LwFJIMrBPCotkSbIbmgt/eNAsE4L1Xka50XWkBhuHSKegasNg\nanndLw9YLaF0zcPFg6tkCKWfr91FrYJAxsdcgmDR+o0QPy1w0YZMkqw54JSx\nRiLDoRnoxqy5xNf3guicjqVjeRhiIKX7fkMcyKzDei9lXVGdZYNQGIF1ZrBV\npHBHoJvUId0OHV22IC99G2ZujYXuqDTsL4r8KocrnJZcmeljK3hq8oRuESdL\nRNVtaMAP/4/aJ0dQTR7uZ+8gGZJ4vnl5KfJdSeWhkBhV286cCduSOvnOgV0l\nB0PJ5y0SN2WT5sEVAkY9HBPC5Ywp9HD9lEUnZvzUhJ5Rhxggmee7zETKixyn\nB6gpHIqdcY3QGSYnl0NPzOIgpalj0VOUhU3DAzygR334CFJuKF8Pj+w4Uac+\nzDI7IZMXrA1sos+K6rQx8/gs/FKgdjm6hyUIPu/1SSR2vqg5ddglyllYHfhR\n9k3l31tivKW+x5A2JIuOSuMNGPeNPdZ7rtb6cNQveLRw+mjE3hvc08zkgDO2\n0kQv5SK7HH4QfWFqINkdQMjJiBeqGo2oyYSHsOaHC1pg13IpuE5+IJQ+Wr1t\nXln6ZH7mYbFd5zmjP9MxOaYM2lFEGd1X0gTdDKMgfUd2al+3h/p5l32xRpoW\nNMGg\r\n=Utkm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2gp+J/q32hVODWHCXXn9mNh2TQBianGsUMivC7tP+mQIhAMBMd5sGEh/tEdRCBnloXplI8k0Kg1iEDNYzXt2CZ6mv"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1616000880-62985ef5.0_1616001196703_0.1415024432493308"},"_hasShrinkwrap":false},"2.46.12-next-1616003176-6dc36d3d.0":{"name":"@xdn/core","version":"2.46.12-next-1616003176-6dc36d3d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1616003176-6dc36d3d.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-9blIUZTJ25QYmpxN4io0Nfem9unsgFCuwvMoCdo9agb34JF+6f5aMi0GmHwurWFDW/gOQXFCIMipQSzN2UEHng==","shasum":"9e4a8513f6f8639898a7b0995df752f1b73e18b4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1616003176-6dc36d3d.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUkF1CRA9TVsSAnZWagAAyWwP/iv7G3u3IZzo3x+BninH\nEx+Rkgak2D4WHBuV6fNc/Cw6s30LTtpTvChSqsDjiDwG5gASxP3EIRdNymOl\nQX1Bxqg1OsK4LbFh71ELV7Rau1nl7uEEx7vaxK8HyM3dCSDeUXfH3Hn9T6zk\niCsHEY9dPPR+J/YdESwQMTynOAraywkUBKMLUFvYqKCmGq2JeU0GMyqC5kL8\nFbXRahC37TT/TjhGM+WLl+tdROJ1oiV/kDn+cvCa/r0UEKR77at3d0yl15J5\naymi7w/6MVhI2aKAOAYIy4eNWBT6pMa4W4VMx4AwzmEo1+N+K9I9MSWwlXG7\nUkS/vLGJ49ccrQMp9yDf1UFtUpgrmAihLQ8z1ZRv6OEHnrLvtBUUIvFDXnnh\nvfV+pbkuvcjA2BY66FpciY/kWGyn2J0MX6Cic2Gp1QTKL+tn1a3m6tzsYva4\n5UizmMF/+uEyOsynGNeCzAaCs22nVDP/cWQ+3nMq9yHqpjWH8RSYYY0fJIcH\nwNE4AZxzcC8Le4L+xDFUS+XR/1h+MQZkGdpervyijzqbuo6qF4fs2UYDYaFD\nfTNOC5yW7bc0eLSTGA1xaYE3lshUx1y9lyBKKRup9Nz5HnHU/Y0gVeT77oLq\noUKmhPWy+xeMqjHcA6rBA9X42bM0c1Z9HtdfDQVAmMMQ9H6a2JL+RYhcXo0o\n788Z\r\n=7JOw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSKNDo25spvyU+Dhls55QhHy69glzWlZD3kpN7YcFBBQIhAKh7KjjFZejvJ/rFfhKgD8lXO2oRjpMzGM4CnhELBCUA"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1616003176-6dc36d3d.0_1616003445023_0.6985887712215519"},"_hasShrinkwrap":false},"2.46.12-next-1616005425-5feb1d3a.0":{"name":"@xdn/core","version":"2.46.12-next-1616005425-5feb1d3a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1616005425-5feb1d3a.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-7bAlhTQvFbk+a0a20NqfUCRvd+uotOqZsAhmDE0Izqk/6HX7+lhtMkFOAqKRKdDuxVhQ15GqDp11qE4UW883Zg==","shasum":"5fbe41b1ddc5ec19a966b5b1c1f6e25761928d33","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1616005425-5feb1d3a.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUkpUCRA9TVsSAnZWagAAN6MQAImJjUQiM9ljMDzHrQDg\nXGTEe5uQMktWwPhfqhP88zF3p6ZzSpXw3uJgP4X165iVzyYnMQZEF8yTyh04\n4o80SoKu7i/9hYPkZmeusJ2yPVeGDHtZ3pmwfUrNJiin+Hi+3XD+WbPnoBWg\nlV0THr7S7Vl1ZvbAN1lSK30j38pmaWiqS+sy/RBcX2LywRUCYoYxSd1/IoDh\ney7XifGmp3kfIqNuMZjo93IYD7329K8UfbWdeyhPhKQwTQw/sfu7hhXtksPh\nqtiHTUhCMVmkMVsAT0MHfhGJ4aH69iTRGNjtzmpsCxwaSARHB/IZz3yfunhl\n9YtnDl7t3M0rJgzjGRzvcX67G3eaLEm+prwioM+WxERRm8apRONuL28zRXPD\numyQC6EhgkQYlApPa2Ov/kKiuA4K72KRRqtNqGEaUw/fXPT0D2lj7pdnuCMj\n4spK/cf5UfckR1La+BdkD/2ylWY39HNZxbIxy4iOr7+gJvejMMVAN3M3ubJ6\njPNeGPb1ROZ2RIvxtwSxl0SafbfiajRYttZB8ylTgejS2NC2oNU3LSiqt1uT\nKDCeVmi+t+9IBMx/Cc+NeyThkv+vFzJavg8mXT19Q6bFEyTNr8zoqsDMrkWp\nMZQMKWk1YlLwKCjdCwDx/JA3YEE5T9AJ2LAtPoEC/JUmDC3RXwled5DP8rF+\ngeiu\r\n=B4L5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2GoJTBOQ+4FyH9EU3uNMuwIZMv1ZWPVxrVME/V0NfbgIhALX58F5m/3QWEq8XOnUqgogCp9LzX6EwFPluqFu4IXzK"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1616005425-5feb1d3a.0_1616005715316_0.1622296225705755"},"_hasShrinkwrap":false},"2.46.12-next-1616005524-f587b5bb.0":{"name":"@xdn/core","version":"2.46.12-next-1616005524-f587b5bb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1616005524-f587b5bb.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-lESGX1Ssym0ZrO0qD73Qtm7u7WCmk3uVO17gE8AAd0kNzSQIP65Io7b8QeBqo1HCc2XoZOpELbG01ghOEhOHCA==","shasum":"bd693db37ee7f328ff253ff5d75b6e2d8052f810","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1616005524-f587b5bb.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUkrTCRA9TVsSAnZWagAAVykP/3OzNGC8oDBGKce1bhAt\nq8CikI1SQZDUqLAfbmC7u8BM8xurlb9CLjgSVbmMZ3q7ghZcbXzE8M5xihfr\nHu9/+261laRGaTj8r7AtMERENrHfkZa3498i2kxeusv2TGcW0Cghn/pZNC+5\nqDXysGDj+8FTUj+eIfUpM6MPn8R5LSBbbDwXiquPgOPKCBGGDbT7AmCVGHBH\nkxW/ga4zhAoWjmRe5/81tP5ZD2yI7/DxeQCzS5NiqGvJovoKBxC3ul0DeIzq\nB0ZQeJkF38+X3LmnpPM03iBaNDtJNx4v7aQBZbgB9br+UVKjZOKvKgIOYGRd\nl70iZ7eTgRFcZYxb2yjFtXzOQKgHcB9Rxi/4I6OR2bAqm2QKi36ccpgTwcK4\nT94DdMhm407KwdK3S+5jaDzJw/BR2yQYM0fcMSkt7TKwjrFehbiQ5aKGELdt\nhUuVhykarH/Blu2bRnHRixA1Abo++GNQlkxM4rzlsaTqjsaz9ZTmOzPYSsCz\nprhnI/W112+6o8jWKf0S0PWTAgnt8Ko4ghyipOi5kp1ckY5ETBdnwC0yzPqq\nIPcm37b/G8eLp6QCDRUoHLG744jvTH6niWMLqivBYUPMN7rEN9Z0xY92blWW\nRL6WdgKRDXvqe9u1GYIoJlV/zIJh2E+vdTUSmZg8Fw28chZxORKzJxNiSsQD\nW26x\r\n=QL+W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0ByxId2Q9Uomo4MHnjxa+rOfIKwXAglAk0ZUtqM1L/wIgJW0OKpjsi1xjWZIXus5ybhFeIhidgaT57A6fbhnUV4Q="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1616005524-f587b5bb.0_1616005843155_0.6532206204197384"},"_hasShrinkwrap":false},"2.46.12-next-1616005510-60c9f43f.0":{"name":"@xdn/core","version":"2.46.12-next-1616005510-60c9f43f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1616005510-60c9f43f.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-nDNt1zXOdZzSsReyb7fDvxCWx+9jxJac2I6PfDzrwYWLaNvXzvKaIqLLi5FpFlRCEwVWLmJ0BaGxUTeEbY4nKQ==","shasum":"5e5096a35ff17cf29dd0d5f12f933bb4dde39c46","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1616005510-60c9f43f.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUksCCRA9TVsSAnZWagAAb8wP/iBxq9/fK+P3SUjO69C8\n0g4TkwnEcMfzs/st8NFKZkrpY1mfsHHx2qZu1jA0B9hzOMCod0UMq57TdTA+\nNz1EIrYXf27RIj17TfioGO9EtPeEl/NdCZXGpsLoQ4kK57JYyMsy8hx81Zye\nurkvoDD42tjIxB450lk6ymKBf2rb0aWqiG0PwtZwMGa1MNqjcJgFIVMygqzY\n9UAxvNb6/qKG1eBqT2ousRFCRSeXOV2T8/kGgTDar8xLNj658gPi+e9L4FeR\nJFmmpYWpuHKfgoBsBnxKZYUNE40mSxtHNhwgIfBzw092rJvXIJiXAa+tMG+D\nl7a0iOReS35cSA8zl23QU5F+vldk1PznH7723KYS9HMaS56yK6veOljZZoL6\nxsiBb5HhDOwX98TKb32mSGaTNPnnsBjdUMe9fV13h+Rs6T6XdnF5kmiFPsQl\n4UqD4mbRkr3QgnLOdt1SHkWS/K4JZzJ157MrFL2pCAriekTTtP6m0mKHfGMV\nk2gLfB4qDSFRCzb4oTaKWwE4OWNRUw/LYzoMW1+vO4wqNQAhYxCuSginPc4c\nRiU7pZkGfPVDGkC2IwHeTIFG7ra84vBH1v4idnEYe4F53ULPfdh5XvVSxtfS\nSjIlFIP+XESX5uW9YD5lHMLH7Zs2L5oX0d7QKGlxu8nOSL7PzuG8T9MrBef1\ntjKP\r\n=XZrn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCopeCMRFYxCUPnJFjOnZFYkmDpk+QtA4dn66FB40fahAIhALJHJy825sjCkKtkticMBsig6RdNArbFlAZZbRRUebGc"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1616005510-60c9f43f.0_1616005889637_0.001808410516686454"},"_hasShrinkwrap":false},"2.46.12-next-1616008443-60c9f43f.0":{"name":"@xdn/core","version":"2.46.12-next-1616008443-60c9f43f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1616008443-60c9f43f.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-RhUn55sPUPD+Nx0qIR0evNv0LMp+AUWlXoDj4gBI07WEVFvz9wU43LK5UvtVxjCBI1kk+m+2VtZ4QFDN7m2/Vg==","shasum":"5e9ce130cf0e0b7f44ad59dd4201bbca043356c5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1616008443-60c9f43f.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUlYuCRA9TVsSAnZWagAAaAYP/3Ve3wquTb+ZDLfy2dkt\n2uyYkh/IfpjgchvMvSPxk3fJO8Wo4Gc6fH5gt47yepkOtJyMU3FPUBBr6/Jn\npSRCmvEkW6UP36juaPe3m8sJOloDtnrOjorrLczKcR2TZRSyS3PnnrDcOAky\n8RiBtoqbtpWYMffK++wpEroH3NMtjWZfZo1WYX4Em9INWpt5jGm6JyOY/A2u\nqy/KDm/rzzXz/u8hpooVMMEh6+awGGWfJbAql0yjDo4I7fhLHO/npOc3ATUi\nCQPcksZk3D9lFLbMGL2dltkv5hon7sNvZsTRFQZo5YGG6CHEKv0BjFTKzgco\nOPT/59X2s5MYrFq0EZoQTuDAPRRdC6EGmUsSxcsaJQi9oCFXLpo0fnb/QwtY\nVixq3LmH74Nngr3ajCH/uqb9DHULefYwMxY7S0tGEgoceCRBjy9jxP9TdOZE\n5rJCmubKPYo9MS5+umeUEXfGoIRqEbgosRz7IKl3LlKiDQM1UNnjB8yRQZQv\noFx1XgJSUxPtEkO+RUsByNQd9HueXTbg94h8RYgP5pNTnTXCH8sTlEF3S1jc\njICikH1eyI64vyO5KwgTDsU9mbz7aYeL5mn/+sLQNh30mjhPeF16NP1DGP8S\nQnmThmeOkUpViuIb5Ru165CF7ntjIjN6XLSYXAiH6xSssFZgfvHV5nKE2tH+\nErDc\r\n=i5mf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIqOAlai6I/sAWT7SMchT2ETnlYJQuw9OQ5HB/6YA+JQIgCJb8NU/M56zWr1wE82TdzVfHGdET1EY8Ifh1HDk6Mik="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1616008443-60c9f43f.0_1616008749914_0.18309579204417226"},"_hasShrinkwrap":false},"2.46.12-next-1616013047-3ffcf665.0":{"name":"@xdn/core","version":"2.46.12-next-1616013047-3ffcf665.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.46.12-next-1616013047-3ffcf665.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-dcFJT61FQEK13gI9ybj8ZnXf9un3YDvGj/YWuWlxlAa+trvO30Xj9vB1GFQHOSRSGpjxKPnoJmDKAqUmmV/iBA==","shasum":"257c87c4e8771e2f2bee9eab3a1eb709dfec43a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.46.12-next-1616013047-3ffcf665.0.tgz","fileCount":181,"unpackedSize":666763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUmgsCRA9TVsSAnZWagAAaWMP/2PXsF0z207al0xtg/45\npbIgcZfrgrBISMI9CQlAyW19wgOdV8BFnY8B0khgSYZ+YpQFjXj7i/N37XQq\n/D7l/O1XnCTYRlK0Lyc9aKxjDkqEHolqrBfXxR7nRg7QuLYVAT/Png4nnnsz\nqKmvStNkK/ccFkVELVUdUugc83TaelNX4hNoS1UQSCKYqdXEQIFnCzlWLkt1\nqoDkj5lX9IYapKIieVzcJhEN/nG9RoTAWJ9Kc8Y4AJBwrmFiWUE81fSLeAPq\ntZtesrzpXVZgI/OVZ8tETbVYDkJH/IUlkqbUupkp8F73IiIQf8Tjoze0uFWQ\nROpv96MzGFS8iexjGu2mWBpcLj5Hq4HYrWZqALrdkp8vbUhuQJlQKxgN7inU\n9lAaXBeLADarGr3kmwPVqPFvKLgWMJuBiVAChx0wd21wozkINenI6si1QS7i\nFrpGT8ReIVreQq2PKIt4xkoOevJ4ocfMziVRZVINWA4gepYwB9PIJ51TAVGj\nnhu2nN2Y8OtDSu0OupDzEdy7U5lyRSJAMNcVOwAc1IU58VAqNRcelrvgZCA3\nRUVfq6iRr1Y7YFdskxOWxAo13zz6SozxxBtwOB0pZ+xmPnb3TELQ8GcCSmR9\n3rqSjf2SMmKmyFJRTDsW2N3QhpaCzW8KlWeugdSWJH0piLmhY1Pdm/I47+s+\n2Mcv\r\n=1Nmc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFk6z/35nEu43V4pA9whLNGHw/wiG/zLfCNZF/cmNGIpAiBDfX3JsEAcYt/Ps5K94YVd1+nURGAlhFZN+XuKHO8/ZA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.46.12-next-1616013047-3ffcf665.0_1616013355564_0.5310536255987994"},"_hasShrinkwrap":false},"2.47.0":{"name":"@xdn/core","version":"2.47.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-5+J1rBZV41Ny21H9h1nP9Tcwje0NjR490IU9kTByhaMlXzAojGdYwwf5PphySSl0saxUsQy2Slnl2ISYk0gsZw==","shasum":"5f49adcd61d360a5e201156703cdabe9923f60a9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.0.tgz","fileCount":181,"unpackedSize":666691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUm3uCRA9TVsSAnZWagAAXegP/AyFwgC/7TFTOUnFjDVa\n1mfHrgrKRBzNFlLF/vNLQXqMdeMZj9Tjprz4sM2ALlYFdgH9FPr3p19YeZiu\ndl1koEUlRLVXHn3bW1Ip/tx8VWBAy10YtSpuQY3KLnJUUVwkKmQbQ3pI8buP\nk8SGqoZ5fJHIq4YPLqpzeWJqpO9+gldSyX3RFVIPNY51LRcExSISeSCH7E4m\n8pv4bFF3Q3/dG06U/EXnBMTdSFJJoGqzVvdT1noa1dOTsxrdepZo5tvXQgaF\nOxBGYhiLymov01RjreaEWIkwmlO+bdWdzx0EkgzVORNF0dE8hl+2cF3bmJZ2\nkEpCFqRCWErCGPBAaAmlZ//GUSXjEQD0BOINVCjvdWC5KFo/ocecysh8sq46\nrOrheKZHAgkfIIjmDADgbKVMcE839Og4NByHvLprS7/RboJmCfKnYO3lMnNK\nlXWUFr07RXOk0A9AIWs602iNDANrxRRKNR9m6nSRUjHw5Bs2TQLuHGHibweq\nLTbUwLV4fzpPu6i6ihOkqbFrRgaMrPw0Sf4wxgftw4TPNovs1hAVnfo6nPre\n9sH/I46Jn9n+1UaLUr95zJLoNllJ/gphnz3Sf8htDLF83aCAGzlYw8pCCmiO\nSc1hVNEk7khgRGS5swXuBXOkcQTZEJyp1A++8ypAU4pZ0RI1TJuvydr7KELy\nOZTO\r\n=mTrC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBFiPcHb1HYjdidOQ8YgaQ7bcAcPU76c38BnAKQTzeE1AiAfmvZEIhu2KPo0VsGHlHFx9Lw5qOAZzangXwUEfEITuA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.0_1616014829916_0.5181015269417595"},"_hasShrinkwrap":false},"2.47.1-next-1616014595-de8db8d7.0":{"name":"@xdn/core","version":"2.47.1-next-1616014595-de8db8d7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616014595-de8db8d7.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-uUu44H1Wc/2fh/s49045kzUN7B+8pmqMwCcvMr3z96trrhSkbBa+SJ1of05Wvgd4Wp5HThNcjVdBfhqBQTiOXQ==","shasum":"72c95a2a56541628e41fc60ea265ad5b079536bf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616014595-de8db8d7.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUm5SCRA9TVsSAnZWagAAvrgQAJiQKmR2TeSZ/SClXPER\n9YbluK4x3sx8RMvTIe2kSR1xfxA2I2PyiXrsaA+G6IjFXMGPpMpacxCa2YTc\nUrYuuJO0bPoManvAUshrxPzrM4F2sho/hsyQKjBvGqi7jAqgsd7XpRT3ykMV\nvKH733l4USVZg+gMAubo/rr15hJhrk9fCWCPN1HLRUwl4QpVHhXGA6YyL8gS\nV/Nko10zqC0iM1pPjRhLb/W8ZCu6kSn6gZG82TAnqAw8/km+5I8bknfYLARP\nC0HDWq8gktm+GjLI/4yo0DotG1tTG7pq4bG7Z/2NBBHjiZN6Vkqq0S456O+S\n4I+M0aFTOr5YWZ2F9KuMz3Wj0vL8nzurQZuilZDYE4g+NZkc387/jzrVOMBy\ni23k1njmsmTsDk6s6THgqrkeHvslaxhhuBXcfj3xozOc+f9lrfoOfP5XiMx5\nMEHALEgPXOiu+eC6ZRkjJCg1xpkEA9MCvcloHOrWD4iZ2g/AAhpAYvQO84kP\n+SA99FiAp/lB3e/y0tzFpHlxnPAdxXel//OH4XmRoZFpRMfiZJFKa817k4dG\nZHTfreEFJ09wxVaDSBeSTthJYPcYs3/MuafwE1FMnqGeE1eQefZ/qlSng1KI\nRtZquAEJTOdgvF09H4T0mdG4OcJMIK6mjap04qe6g4cs3ZAWxUPOz7qzam2a\n8hUk\r\n=Tja5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNjp5LRiUEK5vZbWm6CcEO/AxckJYa5qrCp/jXJDQrEAIgOpmUx3HQ/2Dhto8jax+xKTsSLtkmFnGkGIwz+D9Irok="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616014595-de8db8d7.0_1616014929408_0.7938804570240734"},"_hasShrinkwrap":false},"2.47.1-next-1616039246-0aea3f04.0":{"name":"@xdn/core","version":"2.47.1-next-1616039246-0aea3f04.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616039246-0aea3f04.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Ui8B8pXCm0unrMeCZEYsSyjJuR4sTInKwVVjtoSwXRHcgUd9RCAHNpo1ntIuXUYOj1ISl8AGA/gCJLFFVBtCzA==","shasum":"b9458170ebbb6f61d2d3072cfa90485e23ff23d6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616039246-0aea3f04.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUs5SCRA9TVsSAnZWagAAjPQQAKBpkw8a9qb/v6MetZsc\nd1WmCADS+SGhGvmTua/adVGMaGZgL3UgqVH5QDnM4MAx1gM9OarKXxQFNR9k\n5u9nb+aG5h/VYMK6zw+FhhZRa1EzD0Zw2HTQbfhXX0wqMTM9M0dykNmkhoLf\ntAqoytIbQQEGdsAdXIdDJ8UrrYSAUdhu05cUiRuwIEFQuh+mmOuToBrSFFZ1\nZnkddvN2WfDreb6SwB+xrbB2AsMKvB0moBn4wODc2APb+jY136GnqgaFmBcC\n0+xEpiS4aIB4BVKPAZtIYPM25bKpUNvGMH9+KZ2f8zt7v+KGTzBbKWaNpupL\nzec18NT+svPRoTwqK4DvXk/neZ89kFW1N+AnwM/1FjQkKf7qAVDakhNg31qF\nvPAjQRK/7c5eAQJMk6CQLfHyZ6dF+RmYgzQMGIaJfJ1rl0El1Z0RpoCxMqol\nvn5PMnm7G5EWr8B+1zRc9RfcE1SE4eds/RH6w34XaDTHm9N2cqWHKQnChBgY\nLDL/UqpjxJru2BmajoFjuPkKpRREOorCK4joorkAezhetGambeAiRSxo4a7x\nVmye+xIjLxWxgWo8gTS4aMERKOK6IZqcxTn6v9SKB2ZIqVURIOG9jc/Gekbs\nbMiyR3RlkHo5XyYGv1qAyc5VD0/glGidU9B7QRg1tJxTiwCFNsQn/Zq8OKEF\nkZRG\r\n=ZUnK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBd04gC6W0iiLPIkBljr7rKePJchr3QBwheYBL48uRz5AiEAmEDBjXFpFkQs6OxI8L69Im0BX59d2rQqVQd/8MSJ1RU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616039246-0aea3f04.0_1616039505893_0.6863962314032235"},"_hasShrinkwrap":false},"2.47.1-next-1616039242-bef311b3.0":{"name":"@xdn/core","version":"2.47.1-next-1616039242-bef311b3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616039242-bef311b3.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-SeyMKUZzQPbSSGJ4ogrd7AsJHJ3rdjZmB4OrXsimIvCvfRPQ5LPYFtoiCSVSwEZn0aoomawimV5V+m+z0jA15g==","shasum":"e4997d7737a1d8c571a8f1a0b648db2cc1d22fa2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616039242-bef311b3.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUs50CRA9TVsSAnZWagAASGQP/R8gY4lw6C6O4JJ2nKLT\nIb9xHbwAVCrRpNZepG1u6pMzKo4T/ihYtvyZxz13cV7HtIPUw4iMJaxX4MuP\nUrFOcmCWxXslVdlKXLH0Xk53YYnVp4zVFvvCpSVCmu0GpyJWS7dwMUjGwgPE\nznhG/gsb05FBNRd3mCf0QbGCT4DlgSbd8C0s91Bqi0mFFFRDEs8fzvWyvnkn\nuFNeD6pStElQ+8v/sbigAXKrUKoVjcuUa/EpBqBBM0F2PnbkYDrR1S5bR7Sl\nGBU6VOHppqCx5ci5A7wj4EgvtZXWERcWWcfYefPU9m5j5/X+jGcKRm+WIn4L\nP91bW1tKXTvfiBIAJOrODj234jNR43krEYS92j+wR5Jdc/at1hpcXqycTFPn\nQE4eq0wXqcBH2gHkm3V3JkkSuKGYVOOL4nZVuxlef9k9vCz2dotIIrUKVnoY\n3T1peqElXP/s4BxuxOFfSM178KUMlAaUaZTWNV92J2M3QI2uVz4FAKzSm3lO\nrtZ31PGy/npGAnLo9ql3QQ+9jd+jOqKP/j53cWsv/7/t3E6sDntpT2PaGH3I\ngvPSvEs9TkUrf9DgEcbA+zydjSKn1raZ+woLGLgpaXNvDf3DU7pPHael8reD\n+Smc4JJVzuFTealMcIphSVvtvGS304g6b1lbOv6wUVqgXKAU41S/U9R4EhsX\nSeSe\r\n=vuht\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDarAB74+RNlAYm3smZjIemr6IWOkOkzmYwodQ2g/qaRgIgHTvAwyjdyk3p7cjvoCzEBuy1S1yFQj72fQ2OnVmpIqQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616039242-bef311b3.0_1616039539377_0.6551611949609275"},"_hasShrinkwrap":false},"2.47.1-next-1616056579-410ddfa6.0":{"name":"@xdn/core","version":"2.47.1-next-1616056579-410ddfa6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616056579-410ddfa6.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-VtviTPpcidnv14bCQ/Fz/3ggvwf0o/09mH/rsEyI7xDUp5DhCRq/ieDjCI0Kp2ZWWHquFbU3WqxGBUNrSfKHqw==","shasum":"ca1ed12b4573fcd7ded45c6399cc445b9503d164","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616056579-410ddfa6.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUxI7CRA9TVsSAnZWagAAvV0P+QC9Igs38K+G5p1ztsTl\nLavJj+hEDNvMyzhPo2wcphj+0A/srI9JIEIjjccgBz6e315dE0kRcTqLseci\nk8rNN7M9Y1g53BuJM2s/V2rmodz4Vh90rUu1vJQJXb6sYz+uR9p2DFSDPh+u\nvkMnvtzLV5ebk3doCozZRfODw8vuOUySxiTBH+BDn+QrR+ULzD0OjY95nX7e\ngfVbJx9inicosv4kP2rfxWlkt12Zvx6S5KDcWiF99Rkh0eTaR8zShOatSbcd\nDgmmrSPpY8o7lbRk1CvcQcWAC4yezgPVb9GTmmWfWOBYhTQbCl5199xFaz7m\n5NK6YCddT2eN8lw+QyLuGf+e+4vU52u3SXdCL3iBNbpezUkaaqtsDyXOoh+M\n2LrMTZ7bvvHDjb0R4+57F40sXhpqwUUol9mV+Gev2zhdZ/vp5DqOsO9LGkBN\n96UhnnnFe5zBCuqGy3aVUxyzh5zJU6gEKZCD5qEv/K8KSs5MQvSSMShSPu2J\nSZHaAG+HNv16gmVhglK7KRoFNy4MDF8q4Lvcf6fvyIQK+yq2Kp/zYjW2VolO\n7hQjvXwAGYkdul9T6ZmzYU9kzh3hnTB3DzFTyfCwGeHqpU1BTFxGcFakJCMe\neqIb2X9ajTL2IK5oP93p7tfqzOA05OeTMRWsZDwod1Ftw7Jlr6C23MXqPimb\ndj1b\r\n=Hd+k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGROAU0i4bdvN7M1AUm0HlHj4Y1Lku9g6ILG3QECl/IJAiAj5lco5BvVg2QcSqCb3rBYHXa/DVAV4w2Pp0jlpujhkA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616056579-410ddfa6.0_1616056891142_0.28306814121765767"},"_hasShrinkwrap":false},"2.47.1-next-1616069517-6e3e0aa5.0":{"name":"@xdn/core","version":"2.47.1-next-1616069517-6e3e0aa5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616069517-6e3e0aa5.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-0rYQN8WK/pn1ZQ82sG1+Y0oxJE/mxTkn3AhFvFnxfVT3R9ZsUavYmXiD/QTd7dObFjHC6q5muxOr9e+vHsv3Qg==","shasum":"43ff4b4c9c0212d82ffab01df57b4aa1287d81ca","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616069517-6e3e0aa5.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU0TQCRA9TVsSAnZWagAARwYQAIzbNz40D6+G/346d+m2\nclYfN0K5QfKPO0iPXXh/VusmbOg8TMZyD+O9kcBz1qeYuJmeI6i4QiaqR1Yj\nZQkHZQ0sleCZySrUhD1UrVIigXjHN2RPN+tAUcJ6Lk+J03K/+2/UUiCB8FQg\nxWD7ZXkiZwz+5bd5fXEGFY/0KwAFXeU6pafz/mSWJr0z48U1bZeKKrG4pxCR\nTatHSlf8g21+L3MDY1A4Tj/XCyNnxJ66UMHgfm0+skLmATOiOFL6U2VksFQx\nOt7hmmJxYSXwsrkpjrms4PkK+6Ix1HwUUK3APRUWo+7r7x/HO0bCJwAUh+u1\ng04vKb1ydKTyc8w0rbfGAdT1X6iN4hzqchgLuQpNQu+bcy4yYkXvVa459O8q\nAaScGbRwyz45oOpQ2ZyUA3GXte/l9H1KSQ3DSRdXba/jfRe0D/T/WgWLf7H6\nbpFby3MRSxBBpf0RQxrKYWbND0X/T4YEJ1VuOMZeSFeOR9TpwEBDrNzguo3P\ndYOCT+NSfKWh73bwD71BFAynUNYqVrHRiM+zX8SDGesE6VL9jjiFMZ4FdCHp\ndmpITK8QVB49FaIvZbZnfFLg1loQKmoiJkvl23MA9EuC2DKoU6R1Hdfildp4\nRhnAVUBeyBadz0vhfHDU7WjcJmsTYX6afiHtkjh4wL9H3PmFDX7bafkkiaDV\n54bk\r\n=k8sg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJfEvXI6mjyLPecQ19eif8GuVfDmk2WgBAOPxcu21ZbAIhAKtg3IJ6UKwuxoh6I2JMXZL4SVHs9zIlDcIvLbOnhzZp"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616069517-6e3e0aa5.0_1616069839956_0.4665491565211266"},"_hasShrinkwrap":false},"2.47.1-next-1616069757-cffe4207.0":{"name":"@xdn/core","version":"2.47.1-next-1616069757-cffe4207.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616069757-cffe4207.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-0IbIe1aXSRuFLeTlHLhoX33c5acbis/nQ/lF9j2OCi1c4wMNSalbY0S3L0iadujNOSdyH/QvajimNxe5D/ubSg==","shasum":"2349596ef766bb528a065ae3fcece5f0e8788536","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616069757-cffe4207.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU0WJCRA9TVsSAnZWagAARekP/1IM2Gd590YkKgff+QMg\ngVb9Bg3UTOldGD17v4AMeFDVaBkKA+7m3BZC+9gD6G/APYBM+qhsOfKtdaXn\nGoH/WJCEVfShQcEYA/QjumT70jSe0dRw5/3Vb/Gd9vUEIAMZNOqFXGEaFl7U\nym2btZFsa3mAT+Fh+tf+xb9kqLb577p6b9KF+GNcAzM8qf12owgjMLqtu1zf\nNqCkV42/Nj4gOCKABjSFcpWKV3RxjulJOKNPkZ3G/lh3T6hUXnIej+0tfKGe\nROjAnPas+d0jb2mTyHsWMoiPKiQWqrmg8g2KsjyjKN0fOtlDpmdDMyOPSDwA\ntQEGVLsoYrUoEEOqVj3gujVTUMClbX5FqVvRG1mr7FViFH2qzrgF0nO7T72W\nKl/5NEcAonRTc7y+8rN2Lu76JxptB5dTXuIy8/yQM/n+Hsnjjst1Ot9YUe+M\nrqDtTwQNdw3HH8lroOMyljTC0LP7TcVLvuB9qayyAEDkkk5NnYvjvmQ8ylMz\n9K1RAYVGbu4ZWiY471Sx0Iyh+3J/kQNb91qAA3phRSD3e+4o+hlqEUsniimt\naokxNgRywuFwiMju7fX4nv/4km4pM1v+NjbuGijxoN7qJf1MguCHaxs4Sohz\nf6eZ/cubTHgcCUsLhmeYQHslvni2ztpqcj35x88+5aDRVSIGJFfdGXdx6/f5\ncyOw\r\n=bWnT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDiyvGSxRh8WMl2JuFtKdyGjcHzbQpAIf3AWJ7J/icUQIgeJNzC44P5jcGDzzG/JsezB11EPHMrGnnDjys78MVd8s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616069757-cffe4207.0_1616070025203_0.6550320752064829"},"_hasShrinkwrap":false},"2.47.1-next-1616069789-ab5ea778.0":{"name":"@xdn/core","version":"2.47.1-next-1616069789-ab5ea778.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616069789-ab5ea778.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-+6UuoNQOdFIzs55xqVZFBtD/7hyq3ZV9pUt6nbk1CcbHiX4S1ua8J2uhvSh5247qrpSQfAHWgdTZofTWH1yrsw==","shasum":"333d6c57b26ef2331544fa616e77afef357e7822","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616069789-ab5ea778.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU0W7CRA9TVsSAnZWagAAhxYP/RNxozbU93q3J57EhiB1\nHLSodm6wwYLZLTvOrMDOjqDN/sjkXlhN3YL6WjieOR5g763FvkL9qyAjwnUr\nCFVhWSd9Yyx59pfPigS0jCAjWLmlYi20Jw8gvLGRHfRHuubgeaS5PI683Kqe\nD4k6CAiCOdSwL5zoSQwxNyPGqb6TLIbUDYM+Mgra5pqSb6O5YqIfAZhw18Ew\neqsJgcWJg5+68go5AVs5Y4wT0rDrC+2uPdPgp+E4O8palF186qaEkbeqKKDJ\nAVCJ/HvSwPdjebTB6DoP367QNfH8boIGICOJrb8ga0OXhkeAF/88FNX3U97x\nFJR+zFvfl4I1ku15VfmsrMunbYdz6mL8L+ccRRd10ULG2CbkGH5dCVJoDzE9\nn6UbN8ux+U4vdrhQM1sbhF97JKRYeKarsCyoi8mKvZpoW6CKpZrXBOAnbMmC\n+dE0BS2TSASTK+daTG/40j059hzV3MA5wjMOPRl9LwXwk9eHUE5kY2WD8vJS\n1q1sIkVxXDnh3nv3NEL8eMdY6YPqFofXPNAeGmB6iOznyANcitxWGtrNzuga\nwC8tzZkqCmTRILcKk9EccD+AszyKKA8QF1R9tHiDFMORlzRMJwaWyfNjD5JJ\nmu4yrqAFQVCw+9UmYcY5ooZO47fQNVjF9pwW5NPoh1N7jiRiYShf/vHA4Ct4\nG2lF\r\n=AiHv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfTA8Uy+VMQjil3xdbrIdOvjQGuPziSZ13PvTsgOYb+wIgaSh8SXiotGtQA3o67wiSkd6X7fEMF8JABvPU63LjlAA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616069789-ab5ea778.0_1616070074473_0.7260465874978399"},"_hasShrinkwrap":false},"2.47.1-next-1616075386-898eb30a.0":{"name":"@xdn/core","version":"2.47.1-next-1616075386-898eb30a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616075386-898eb30a.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-x53qgmMBZpMuhzMwIrgDwBrCsPKNoNT4km3n4cE5gYO1gCZXaDOhNwOCSlN92lRHvVp4uhFPfYwQb8Lrzoka+Q==","shasum":"79d5d949068d0911ebf67a07b918f269805aaa3e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616075386-898eb30a.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU1tpCRA9TVsSAnZWagAAqFYQAJ2R1DV/iG81M5Ch0LQt\nimGtUoJ/IOgrmuH9TVgeq4nHc2qGgBTBAs+TAjW2ZuvCMvqlO1Af0MfBiCPS\n/LiOfmGSV3pR0JnEip4jxg1Jc17gyCda7e6oyAoGzL2YGzLJQ5o22aI8yV5z\ndSmy48+p5tybbi2qI9yNtB/ReUP7qjVcjvR7aDHoGyGJasKhi5XT7kmk9KFg\nL0aqxzO3RRTUvCcZi/HaZoeDMn88aszu+/FIwU9fGCs8R91FB8OtVEoULXEZ\nxRBXfpH5mpSJ2/jRQPc6YrPGE1utEQkdz0Fpffsiz9z19r7MVV7HHV56vdtJ\nROKJQ49MnJpQ/QUlzIGkS3sx0uipICR4Pc7c+v2r4SUMeng18oOrSHITQN29\nklk4mxchX7/ZTZu6xC/RJ8Qb2s/fTyrTXL0dFk1bKNDKFUgO4joBoJsPTvK1\nUUFIM9UcGagZdbwqGr3YquCDXhYddlmh1nl699xL5d3EAhDUeDPKJnh9BMl2\nZVpee6ShaFLobiQhDQAtv+Rb1wqUzs/ZUJKuo6FbxiE/Y2TyD0TJGFz5ZGu3\nSbGMNLkiPyFUynvUUfJqlalH9dxa5l0SxAp/y4/R5o4Ct5v5Q7MSqofzuG2y\nzfZWhMxTie0q2QMHm9DmNVqBzUymbcZcXPqGEeNWFvPWXIgsZzT+MEsrrHkb\nV1/A\r\n=KWLg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwrNJ3hH0zIqjB7Y3R/+Ci6VOM8MJsXyhhjHhZeFP/SgIhAOYvl4LUuTL9LxCUQqY09DkeKy7oddCwvw4RkV1UvRmy"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616075386-898eb30a.0_1616075625262_0.2107008396868777"},"_hasShrinkwrap":false},"2.47.1-next-1616075866-19bda89d.0":{"name":"@xdn/core","version":"2.47.1-next-1616075866-19bda89d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616075866-19bda89d.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-8cbTOE5Av0jGyzWnBcNOfJkIYgxpNVvHgk0BYiQTCvvCwez2Ci2/QMPS0w3mIRzQFLaLDcYCPzEHqI5Sd8vkpQ==","shasum":"21bcb4c22929d2fa51e85f19b29dba14715a3b23","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616075866-19bda89d.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU11tCRA9TVsSAnZWagAAyIYP/3DW+o2wrBx4c7LEUYsA\nxR5Kr/yBQPv093mBpGtO341vlRydCBxymmjQTcn5/ROf54of/J8m2kE88cuW\n2HQjaNfFVBVDpT2+IxjdBCGD+8S02pVGHwgUzpPJFQ3MToJrJNK2Kv2RouHh\nSCNv5qEMdNeL309CUjuTQCayZi3QJQeVGxjnScgYPZODZYRr14o76eyyEeA8\nCgvOKI/AKQuuZjx9NL2irGbuJkzcRjYBR/LbUDIKe0Wk541MvSUXMLZQcx4Q\niU002/Xt5Z0K1wnKkkaliyB9W2nU9gBmS0LyjLFrmGyJ/FjpFWwudSO9nYm8\ncUjXWVOdo6qaEqJjw9rSN9KLYqsXU6EbrtCiX4OLd1r5xYePhw1/oZzROuFX\nWnfVfXDr+FxDQvJsbj+0jqCuUVA1OcADDH2mX+mJpwONYaXo1X+HxuDYQyTx\nx/Oa/SNw0bs4AMmNTtkM/if/F3ZUDRVVUhF4e+yTH4LFtTn3OIkjIYsmjJbE\nYKpvSQAPId5Excth2QSY9DcxtGFp6T40drr24t3inmuDlJjPJO89VmBdKfno\n7nVtQTJi5U/s80z2tFDzB5DEVBQ2veEdGmTXGCWiDXtCsMuHPUvam8ZphEpx\nkl23nfuMrevlftK+tFSbosmmYEeptspkRXVE26kq2rDOeOwf5zd8GSycYL6L\nn5Wx\r\n=cDMw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVB/5qAq1pjYK77ZZ5qb+p/pmKmMRaMUfhX0bRzrxWgAiACEyXV9FZmgQVZuGXiI29fka2A77fh1FFw59qvTkhOqQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616075866-19bda89d.0_1616076140488_0.7316300290328035"},"_hasShrinkwrap":false},"2.47.1-next-1616094204-720ebdaa.0":{"name":"@xdn/core","version":"2.47.1-next-1616094204-720ebdaa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616094204-720ebdaa.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-tRskJ3go5yJFhAgnOHX3Zcf8LwTsgzdfKO2V8OgvfqGUtEz/U3k4I6cEnp88xm9StYIncKnm14DASz8Oour9CA==","shasum":"9c09fcdd79897f1f0bb04b72105c3e2bf6015776","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616094204-720ebdaa.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU6T1CRA9TVsSAnZWagAAxT0QAJ4Vxciq30VeVXqh9mTc\nPP0LlZYcQnSCihtlTDkm26qoIYxxstqTIGg0kEiC01xP74mQBC88Msng8S+3\nb8bfLW/V6lVVQYMSskKo9uwdpMJX+jkZ1VmwCiKZ5Y5joj3f+HHSvgmsuZ2h\naht5bRbFbIc7sIDQTTUWMm2VECstd4QxjeXTMPu6u1nfRSm1tsJR8/ql5D4E\nZ2TmW8DGNltYxr05KzyyKqQ2QCrIfFeMHDTm/mSMI3yXGtaS2MrUFUlKOuQi\nK/mA8HiEpLc6PAAPGOOevXlmrN2kBkBorU5LE/qpwV+SRW/wln+ZOTWDJ1jm\nbfni8vaI2CaEk0kOXq6nyItiM1TeqxkMizQsG/0MtVQ2lpr3TrIS/eV9HP6Y\nJrRlL9ZDvmpc7pxQiykaVnfXPB68G638xtZC5MuXsHA8ud9un6BRbfcmSub3\nc7lWgq+rSVYErW1sv0Cjb7Znf2jkwD0LINkxkIfrDPQ09d4fddje8D+vxbDm\nbMycw52Y2QnWmd6qcuqitLUyCzNK1RSzvXZBHY+++CSdghRBDwrXUDG/HjJq\nuIvbFYZ1QENifjzR1Kso10TnUjYUPHb8YtWUIwpINth33f03M6D+s9BBw0oc\nCXwcOkQpfn6hX4ULlbuYLwUE+z/FKdMRbECijOidSMjHYNsZJfm0r/6RRKRO\nZcon\r\n=DFtS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOxEYLN1YvCQJ005m8Vo4VOeHUG3Nh1TATFHeEXY1TPwIgadYIbp3Z7oE3EEYziEMsXYUSP0PXJmH2JSN0g9nh4j8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616094204-720ebdaa.0_1616094452699_0.23106675462344106"},"_hasShrinkwrap":false},"2.47.1-next-1616096371-67d963ea.0":{"name":"@xdn/core","version":"2.47.1-next-1616096371-67d963ea.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616096371-67d963ea.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-vfB5Nh1vHsflDyD6q3DubAHHyOBTsSEFSq53oqR59OKdYSCtOUC+t8iZtrqX3647SWrpoqF0kQOUCo3rBQtBYw==","shasum":"39d34650b535d912b487696ccb2b9ef1074f81bc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616096371-67d963ea.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU629CRA9TVsSAnZWagAAgNkP/3gt1b/6o6pi1MO9ccU4\n9njlt6p9Ki9PmuKfapJCAqjDOV6NU72dL7VF1AAzkmEyc7rJo04M90bfKPsy\nkZSqBGjuU8c432HHhahz8B89d2ZViN7YSJOgN3QRX7Hsmk8gTHEDz0XGls9+\ndZs0lSGus8XBwmv27p1WI97CIkBR59VnfcFNXOGAWnL9jCqLg1BApzKuTmGu\nSZu9w61aBdOymTvZoHQloCKyloLfeB1CKHHEzRVQlImv5R3NGnma/iohlDc8\nxK+wSnHh2fVuoSksb8eaqWd1jaewyxqrrLT0Bdr+J892OAohl8F/CdWWeytU\n4wfZwadNYEmVGZf8ySG9csddb7BeJoEi8czmQA5D1Gu+5BbaUu0+3QfNHfY5\nIEtAfMuRp/rdaGRheIJ2xC2JWX2Bd3GeUz1YZt7M0LNZN5Oppk5ttaKVbg+E\nuXproVYEBsu3jdNWzX+qMku2o3xY04iqLzmcezXcfCl1a6b3MG3NwWNd0ZVU\nhkKMiNIIMOHTXxbzA5vDwrr0YGyymEx3t14EqMxnScdFerw2yMCq9KEh/g3K\nRRQbD5I2q77H2pCHsvwiPJPGyo/og6+kWCnDNJSXneupjDjyrCPBcV62oGLl\nFtFgT3fH7Ov1tnpaoT2/me18iLcJbZCacdhO0QeNhA8PofuyKSdObDG+M34b\nzWGF\r\n=Xb1K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcye/dy3EG1zH7kluWeWXG4LcDK4ihJ3UhWMecriXYDwIgCZk3oKvhZ4vvGvB4t5dgHsptvvI7/zN4o80Q05TYAWY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616096371-67d963ea.0_1616096701124_0.0398276989301396"},"_hasShrinkwrap":false},"2.47.1-next-1616097757-826115f5.0":{"name":"@xdn/core","version":"2.47.1-next-1616097757-826115f5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616097757-826115f5.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-IO4aayWigW4/5hVJI4vP5dWsehNIiY1ngMomHHRGr6ruWXKyUO9kkEG+92Q/mQ7n/QgL3PajmuuC1P0J+Oh4tg==","shasum":"f96af2d05aea07eb7f4369bf027dd14afd413c58","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616097757-826115f5.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU7L6CRA9TVsSAnZWagAAtZsP/RquuFFZmrcbicsEJH7d\nP9IVeCUNjbtX4V9/oi06KpelEL41zqjoVuN6kyrQFmlMnpJpzo3z/+Qwvw30\nQN0YfPbC3Xt9REd0G9nwGm+9dUkQsECrmsZHf/dqME+lAiHbsK1Rn+17xcAT\nbp4NDQZug+79eOl1W15X8Ltjbi+BXGTajYc10euFDqTp6N4pkk9pYSUOOBCW\nAzmxquZVmwD1sWdbp14L8JmonEjy67M2K+BGDED2h1K/q4ST1ev+ixpHPwh4\n53XA43t6KnY6vg77jGn7ewwsi59feTdOR+pzpxewbkuv9NtHVguw8etTVthl\n0oSMGMeUkeR4lVhuSIS5quILJLPv42ZrT3dG56Lj+IC+Mx2BZiUJfHgy71dF\ndHCmk7nwJ5G5qdmPxj9k0m6Kf9JJpQRev3TARis2x2QxoOBYrJM+XYHfQms7\n1TBfZmRLYrENkXHDiQtalkGenMf3uMUEAqTGtOhIFKmvQUxiqtYmEdEpuuUy\n14S/UlnhvBpFk/KG4nC2T3vnURSYj+e9AbjjD1Hq18Y1L08DZCp/lT5F+kxG\nqyKleZVq5IpuwFSMdMFJqiMK+m1Wl5L6nJqZHTt9IWZGcj+G6LzxFwMsL4ip\nPCMwCcj3J5R4gcQ0RcDtYHseVcq2k3da5E7Wp0rB12GY9zwYsTPT+NKKnqdb\nAyK+\r\n=Uhg5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRUKKNBNKTHM9n3rkqJJ2iJTKuxoeDeEkS7esz3Fb2iwIgbqijHzK2JMDSqeHGLbXVpRG2gNwNgD2OdOU2soe5f/I="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616097757-826115f5.0_1616098041698_0.6759184155173954"},"_hasShrinkwrap":false},"2.47.1-next-1616097983-be28c9b7.0":{"name":"@xdn/core","version":"2.47.1-next-1616097983-be28c9b7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616097983-be28c9b7.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-F9rEpaHSZGGRn0wbzLetv+Yh4nM6RPQKSaZU6jDtuN9vMvBFBIFF23kpI/M1I6Lk4fA9rVA+kKia95Z5C6pu6A==","shasum":"c0025b9c3cabb237886931d505926a044528bf90","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616097983-be28c9b7.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU7QGCRA9TVsSAnZWagAA0JcP/1d/CgMzbIy7ygx+g6jN\n+vwy6w+/SrljqXEzJO9DsN9FP52bkbwaJkJYA6EXU+9C4Y51HxHhmNxrOY33\nj0LIaB5oXrwn9SeUBUcWaiZl4Wwy1KGoHbHgQqPUSnsBgVPt6NPGhdT/3yBV\nZNzCopCtPchnLvedrTCw+dAaVBeGOQ7Vq3lZfuUPI0UEAYBO89KqFKo62Ptp\nII7GbrtLVLTjIB0A4xq2NGYwWVOK9GCaa7/7A8/IxOoTIKGje39v6+cUTyYl\n8icVXpFfaDP9V0B8mcT3dRbOyTeB2S6G2woP3ykeJUeu/u+YDV38c6jbdhrx\n2lovlss7k6ThuW/8aSdqWvECNEkpTWgFWnk102W5rj1ecfb3w/uvZcESGku7\n2X/iThA8YBs0bHdLYz+tq1EK3aiIdzGC08l8G38EN0PaQbKIQbKCaenOhvGi\nowS5Dv9AxvApIXSS0QyjMT+8OBB2+e4QB0veUrDNFkwLxCXdtiob+kzQLM6w\nERrt7M/DCBai1veZx5RiRVlkzLoiw11bUArPRlJE/cAmodHeoCMs842VZ5jg\nv07Vk60+INkxY4woi5gjPH3/1SeibcQKmij2rP57JPmLq0LjTveneBd4YaMh\nxl9UGwLebhpyvWVpzOCUKIOyfM5klTcWflkZGLm+4ygs7IykN16TPKmHf5E7\nfx2u\r\n=r2vj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3qGj3k4iNMlV4Ufe/xReoC9Ekk0SaD6Isaxouk1Vl+AiBi+GsK1anFZlzoKmJcNz6meGRVBFEEMeIVstkZo9fxIg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616097983-be28c9b7.0_1616098310195_0.42138721876989615"},"_hasShrinkwrap":false},"2.47.1-next-1616099330-826115f5.0":{"name":"@xdn/core","version":"2.47.1-next-1616099330-826115f5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616099330-826115f5.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Rzl6XobRIVtQ856BjZmSc+s8m+HYvegi+ZIOg4/rcxnHbK1Dnq4Dsb0ndL8i/nqa0tlwFdb53bmyfvvnXXYS9w==","shasum":"c9d705785d877f593456145287f221bd8cba759f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616099330-826115f5.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU7lACRA9TVsSAnZWagAAHJkQAIAAjzr8x/Cp2Zf1Meb3\nYThRsJO6AM23NB1RqyecBY1HWNsFfqj/zqiT2Gb3rSycktpAQ67mJCKISj02\nTSlZnwPVLAVuMAqVWiOh8Jsm0y6Rz4S28ZiEpDwHTtyZrGKwrWfeokqh+1ub\nV54cYAP0QQ66dQnF9xQBhWtkDZfWvswAaFzGvEyi2mXoqso5h9sakVVeYEO7\np7+kSTXewoXkv3BNKmyodh2oI0e5v4Hicd4OsWvYk0RdYS1vkZq4Le9VNHJO\nHzE9ZdMP/Idv6XVWJ0e99G3hBUpJI3aDaTui6kU++rvZt7GZwrButTMPnM4f\nw9mS9kip1g7s+9MG3LQBBypoCJ9oCo4Z3i5s54HRJ9UCGC+Ca6EpId/0HDz5\nqwdGUJtHxP23qoAkGObluzdYr0myIJdDXzvPwbjd5yDHi8JPwo1hJtCj0qMV\nnGkIJiOpqXcGlpUhxDZ9n79uVx6elW94EPUZhY5ZQMqiFTPIMjyxbs0uAZiX\nZ5brQjXNGaSMuTfN9Yoq5P/D1H+QXiIIFAz8NJ1AcmNHZkJIC6EKy4xyy1+T\nkgcUUoQ3aCl6AwzVkhtw1i07Aazj6h+7kGU0N7k2YYgWLfGxJmqYCmLkWLQ2\nRUSJJ7uLzSFxm/ZgKs78ZyKw5g1n93rncY/q+D/nklRuql8M7788gFHw8UNh\nur/I\r\n=LGnh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAWAa4BEIQNcq3ceXvfp1XHYyFffBwP5lee2Z+HtjYaoAiBCM18oXUqXp6HVR0+h/mnjAvpX0dFogjsdoMIrFOwmyw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616099330-826115f5.0_1616099647705_0.7988985464546161"},"_hasShrinkwrap":false},"2.47.1-next-1616101160-2bceadbb.0":{"name":"@xdn/core","version":"2.47.1-next-1616101160-2bceadbb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616101160-2bceadbb.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-0Unu1KToQx0lL2/vSwDujhurdlOsz8GnuYcpZ4Qqqbv4CPya+dOKBpvISkzdcXkuvTKbYz3ckjEkekFuyH++Sw==","shasum":"5bdb77e11d0faba1ef65722bf6e2a7e940e9cdb5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616101160-2bceadbb.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU8BDCRA9TVsSAnZWagAAB+8P/3iNzW5u4iVaguOw+szD\nNfqb4Av0RQtSXsboOMrQIqf2A1BYc9RIqXp6AlQ2/nC6BFq4AQstVBJw2Con\nyjgDPFOiqG7VAzb5luw37Fzr2lJIpgaRi2gXI3hMmCYsSVBOYbsb/+g78VDV\n8fu0/YV4g8TPMyHt9Qs8zWffqugiu0dzZraYAciVJAt5u+/2DPiFxWA8AykS\nyZYk/uMLpfyUBHyuyTBBKERVAuOVl3VkwGCka10n+cUXIADiiUiOU+7PqHnW\ngKFLjUddCMSPrzYOjRIGVg6O830K3P6jO2pFebcJiBs6vBX5MRcQsj8XvtHl\n6YkSbTDEz+r38Po5Dy8cmznqf+gIjsVY2GKBF3CR7JOYYTsxggZsT0F/82o6\nHCSPILDOc/H+rogNHdh9wbV5o3PR+4mLtuWlSJYwRBNS1Dwt9+pMfUQI4UKl\n3/J2kisr5PxwnbabLf66Qx6QPmwJ88NI6z5PMY7Zb5p7RQzD+I4uLUOqFe7w\nlGh2zdFY4jWhGj4WOqsv8jEZNmCzFpoqb9faRs3XjpgyG4exYi2ZvCZh0SnF\nzojloeLQfFHVcQdpk7YypN7BIYMjRcSvpemXFf6wsRUmHtV0VC+p7FC0Mhry\nTdLYcIhSE7Lwzp0gF/AIL3W3i744RzJ62BD0r99f1eq1Y6KHvc4dyor+5C/7\nq/DD\r\n=dwTZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjrihAMYyqaad6Eh4CE+c+TEgfFxupY1cb+xEmkDIaewIhALlp5JXc4/rblCmXGjzc/pXQivsifdM5XoNGDuaWby/P"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616101160-2bceadbb.0_1616101443257_0.8883591008129288"},"_hasShrinkwrap":false},"2.47.1-next-1616106252-f3442a52.0":{"name":"@xdn/core","version":"2.47.1-next-1616106252-f3442a52.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616106252-f3442a52.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-FOC+KhC5k+okc1pyafUFiqDj/ZxxFThlcTDQEvjUAX5HAaPJFKaGwfH+SZ5KV1xI6EbAjaaxLR+ImoNSTH1nHQ==","shasum":"8553b6abe04703bd5d1565bc7989cae13ad316de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616106252-f3442a52.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU9RCCRA9TVsSAnZWagAA9hwP/R4oa0ATqAwSzh9zpZ0Y\ni1RI0zOXV5BSxKRNOnDkWVKTYGPAhVPqVExEP5lB7XPDvR7j8kzsmnUc7vH7\nGVjbwMScSAw73oWnUzXaDmQiqjPKX1LwdKGd33MVK4hQLBGaOOgpSSbnJPIf\no6MWeRtyf5HLfaNihtfjqvMXWdYLXlfR8HMPOPGv+2uhIqQzMpT6g90oiJW2\nSSs0hKnoBJ7j6aMfFBrmH7pZtXcsYHTpp0lfZUkI5gMfqD0vLU86cJjhyiXM\nnCcKel0VdAFvcbIvapjQbUi/FRUkuNOHFgK0FvSjiNqR8q3KZlh4qw16MtQF\nEzbG4TGxktnWzAiyK2Mbbm3VVkEflifpXtEu30P7Jv9MToJJg9J6lqATbUwB\nK06CWI+cnp6F8b/7DHL04nqI3Bat2Gnm/z2G34gJ268FO2e9bIcGA5RCJuk/\nCVipEZ76JXPCuADhKauudhSRrg1zqpeNYg+HKZPzPg/JZ6t5JWn3ywxDfFFd\nWof8EK2lwDLWNyJQHAxEFMtp002nHjH7GERG+00yo2lfj+c5aGuEy5jQvYq0\nGyD8KS386eiwon+y8Q9Q7A11ZIW20RuOc0dI2DMoIYE0VdJ6NbblAGUQad1c\nLmi8Zkqbxem7b6LZAAX8sULWdtG91CXDbGlawXvEmALyKMt2wqqeULwPCFMO\nSVzl\r\n=4dq9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEByEX/AZJElSCqYUJUrsMxMG6s4/hejUqQoDC2fA/U4AiEAzdPzn3Xxh0YF/hKRMqpfKeGNujRTjyo0MgqWTPBEos0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616106252-f3442a52.0_1616106562114_0.5107147112434214"},"_hasShrinkwrap":false},"2.47.1-next-1616118775-2bceadbb.0":{"name":"@xdn/core","version":"2.47.1-next-1616118775-2bceadbb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616118775-2bceadbb.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-CfcJ/XtmS1WEefjJE4CAFm/TrUQ6kW6UcEo0dYluBP+fkbE0xgXCcSaOeJBjF3OGWqX+rygejDJXfWi96qLI6g==","shasum":"0898135636e9a02e3ec8b33b6a588525ea8aeb81","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616118775-2bceadbb.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVAUKCRA9TVsSAnZWagAAY3IP/3REjIFxkLbKVqIW0jAH\na5hcmMROBqh1TCPkew5mWnoML5N2wHY6OgRUKCRCkPv2GHKW2p5MiRx4o28A\nufXIViILtQEjTnVBTOOCfz3opEZeu0UMtBC29H9EGB9HkUxkplsva7NeKcOl\na5d0c8st8CQ9GNwHtUes6jl8qPnfLr+cmhCcYHzn6Gq3ExBH0enHAZaeHH2y\n5xnn7jEmBTbl8/XOTJNH5Wxl+pAS8ZI/u367Tes8TPtc55reTDlUi73tBHME\nAvxPC6ryJHlu9OBxPxDemjpIIcx7zgBwPqqhTIRfssd6cJrFzaRvAADJC+f3\nT/cl/X8JHu0JYOHry4CveG57PsRLCTup6gFHdxnEWbAS+DsnyDe+VgwB9Lr5\nC7DzEUyLs4xcw2Jhr7DXl16cnilReI0mpzIHv0wzOaekaJdo90d2GFbQb6Bw\nKXmZFr1saOaRiZP8LfEAb98+5YNGUZ3N2r/yV3wvlarE1rsEfgzK7u+V8Rqq\nwx4jLvkimZBcgPTBqTyj/KuAznWQ4OMXhGoFzj+oKGE6L0b+gt+cv4Yc9ZlR\nG4kvUKk+a8AdYYI3+nq7yXk8D5IxfVl3k/6PiXZ6g+5SS52VP9qDiJ8SyDGK\nDwI8vCPMgzJBFCfbU90Vwe0F64lxMVJtreVdaM1YCy+ku71qH7Ctx8D9oKRT\nw/Ez\r\n=iubM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGrONDn317KfR3Y7wuVeymqcvWa2e1nyT3N5YAU2hJ7oAiEAgTIggIi8P/m2YxeTh3OVoINMQ9EfP506Ulo/QvTBKWo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616118775-2bceadbb.0_1616119049950_0.153188043169594"},"_hasShrinkwrap":false},"2.47.1-next-1616119482-ef906b13.0":{"name":"@xdn/core","version":"2.47.1-next-1616119482-ef906b13.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616119482-ef906b13.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-V0YaX5R35dzDp8WL6rtbb6/u01yrYgD1iKOuPMVC4tmPlLRebVSJEDlQF3UrzeU1ZK5D8RrhJfrb65MxZeC20w==","shasum":"9a04f266a21dcf93f36ad50e96a2d9d7af9fd700","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616119482-ef906b13.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVAfLCRA9TVsSAnZWagAAeWcP/RLzo0KFrNS1PNelRekt\nDyAs5ICvZ1iu7A1bo/jQPB4s1yr1iL1ryT0NA88rTTINjVuqRqI1aRX7XA9l\ntzPxr9ALw9x3dekvoQhV/gk8uJGn4cs9UnniRwkftHJ4ags4R7vHVsReW1A5\nhQ8hqJmMA5DkxzCAcE3/nzpelxcH1phOFtcM8lVs7PktrwvaRd+oxkgMPqSq\ntJdobyewyHlCiadk8wix9fDcj69aitJbZb3Qf1+uIb0hGdeiGLsNYbWab8Ey\nkVnWld7qWhF2PTiwHx2D9DsSd3TBJTDoXaLwz5DGvi4Se0kiGKszW/jhQfib\n8vGaUmIXMSfC0u7xgtdycOkVZlBQr4drwrr8AxqWSfA8SmzXPioXsOJeAF8P\n+Gyfjx3Wv4Zm7+WTYNZVQG5eUOrszp5M4BWSS6h0wO8Psog9uBKeIt1kBXA5\nG1NJqGUE8fSQf4yWBYWSC0SME08RGz/cCnIVP5TrwCIeP+/53vOSdnCmncuj\nU25oCxXh6gBNMc2DcbVehPcdu1nbqGmlVtXLtRrp79RELUnTiL6ho3Uk/rSi\nJwIhA4V0zn83Ex9brCe1XrdLO68Iz+nVMrNdg9GzMcMRjEURSzBzuNu43ugI\nmvBARMMvUDxxqH4s0NqKnJ7MRsrIlrS/G/viEzfYsUC9Ae1PTUnOeY4Goz3m\ndybc\r\n=4NO6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWmjSUTLkBVd5H4gyJP+pejyk57cJmNjSuV2oL8ncHYAIgHX5sjBQZr+V5AdMArieV6pm+XSTuv/Td/qazGSrTsD8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616119482-ef906b13.0_1616119754766_0.4996134599082638"},"_hasShrinkwrap":false},"2.47.1":{"name":"@xdn/core","version":"2.47.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-acoEenbIPH6VHKOfDyUQUoq4BcK9x4ML9QBELEex+8gTWHWreR4gK8iFZpSnkEIYY/jDeW1vLgN8ZcNzvAC6Iw==","shasum":"fd589f58773478b771e2b0c05a28b77a8499ad4e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1.tgz","fileCount":181,"unpackedSize":666691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVBQuCRA9TVsSAnZWagAA/VUP/0rv/gBWLTHHe9JMFUkB\nd/6WHBZpT5le31YFcfJKTfiWKv3hH9FnqMw78niYCjXt2vMPYWZQcXLpBAiM\nyrS6cZ9yhCbSdoVZc5Ik8ct9PCLTV0v/pTEJmloLQ3V28Ikq6RuVFZjo6jDg\nomErlG9wIB3/GTQ4rq2JRXYvS0eLJKXXEZWMFivAk/16RBf84w7+k5LCDH29\nNk2FeFtLljKyAtP+gj9vHHX3K5zrU6D5jWV6TedR7s1oGgkE9S9RzPLiZNNg\nKmzn1MKrRAr+nBm/o9pNLvkWy6nzzLjtuIMN8nuxtBJ8omHzskK5i0KT6dnx\n4GtnIn2J+FBNa6RLHgfYoWFygO4ZZRfs3Ddb7k/4Dw53zaE4T2R60afQakSM\nJ0ngbuUpwWN10/sPNwB58tQn3a5mbBor7p6q0WECvZHcrt7UoZOvGpDwDjR/\nTX9nJml/MDaOw55vTQc1B3C8wGaKqsUgCO8Fgj3V2moJ6EoSE9E2xdSXoQra\nn17mI5bCjBmRBJK3TJxKml5A0xRZzufjfj8ip4xmoGTF9DXdzIxz7uMV0DQL\nztreZDwEFVntOaKMfEITuu9hJ3q/F5ibeO4Hx5eOmUM8+37kxVoahPpWIHdX\nKm0DqxvnIwWpzM4GIw6IcdWXnVBd/aeLhK59XoEvI3VPhS/z8WIM92AUNeFR\nx3rI\r\n=m4w2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH8rNlJ4zCMOUZOYBoZsTcAdNfo2INAp/zw0+/t+xYWrAiAaBKO+RGxAd4SRvoYVMFifuZVRsVSF/nYGy+sapLNQfg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1_1616122926152_0.6475281458699986"},"_hasShrinkwrap":false},"2.47.2-next-1616122740-4c07c985.0":{"name":"@xdn/core","version":"2.47.2-next-1616122740-4c07c985.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.2-next-1616122740-4c07c985.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-oMSaW4MuaMH9YjzGAw37UDE05/meKl8Cxs2aRfaXUul8j/BF0tNT/YR2jlOD43K+g/MwX+C/1BxEB8oY65JRcw==","shasum":"dc793106045eac0b130a0124d6f37f6ea8bd8f99","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.2-next-1616122740-4c07c985.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVBRhCRA9TVsSAnZWagAAgVQP/i5K5wn2deWU/oLuV00v\n5E3aHa3DbCw1m/4wDvIadn7oh48TN/SVnduPlY8EugmRi/a5r82Bl9uNKBFK\nUtFha5QoSWsRLAvsqmKWNpH2Mwa6FiixJWrZcy+nwQZ0DKG7kJnNpVZ54znM\nlLbBTTZod+NLrpKNcfRBVt64DgZi68vP11RvKPWR3kKZyaszsDFQ4uLojdfY\nXfAvfuvJY1t/5pLuTDtPUiLqbUVBinkrX20uGjHzhFB6ewjq00w8Ut6zdsvT\nqRw65o53XPOIpJKrzD9A7hwzQoNmzqOUTLO0WAhmA8npd+icmf4Laj2irMZy\nvNK2ftMNpWZhG8LHOOMg0rfC7WhN5spXfoSnSPwj8MPo6O7v5eUSE0zDetwf\nxtpfQ1Y9sLt/vyyCwMqw1dyElYl8rLTFxXBmYI13q/Wan1Z8D0tpPIg+Co71\nIRHLfINNNcemjIRtVGZwSayo/b9/ZhlFw/MHmTQBMng97J+bY3JbvteRtAqQ\nSA1ZbCFYJXoIFked+E1/FVndaRSe7y2wmIfT3r8ffou5hnwdTIag1cej9i/M\nrB4srHQ6WfQqGz7+j+Wcow0y/rNSAkNM31fgGW27i3+B8UVo76HVsKnp7MNS\n1AY2eAMRl3VnswqeVit8DxWkrI1sFYvCgZ1t6oA1tfnGz3UI5x5lmeuKi6CG\npDOS\r\n=tBXE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkowINvfWip+/6YHmwAxZCSSUFN3HwxHYBRtTZ4Te6sQIhAI8ZU0wyguagckUqP9uZBSl8eHt1qHpExC5gdNLCqHz9"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.2-next-1616122740-4c07c985.0_1616122977248_0.6486612656445405"},"_hasShrinkwrap":false},"2.47.1-next-1616122745-cbf93019.0":{"name":"@xdn/core","version":"2.47.1-next-1616122745-cbf93019.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.1-next-1616122745-cbf93019.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-zTvRFRiE9XhrZSkF7qj7QEinQWaoe/kVeAP555VbzBoOBEz5uU2UD8HBT2/EiakPAKwfVRE3sHwxkiqsFnc84A==","shasum":"99183d23d2088c3b8fca8f34808c1000e52965ea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.1-next-1616122745-cbf93019.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVBS4CRA9TVsSAnZWagAAMCcP/3XUkU0OQe8dtTJ0s7kG\nZomiiuqhXsoHHaUhxAk7s99kmlto99cE59O2XPwhrKoJO2peELN8THZcdSbE\n2eXyv1e54A5t2nYSWh71MqzoKgsc7nHXiBcSZBg5vyzbYwUanJp2OGR1/pSI\nU7wB2povdnAtmKm1wwRs8MkxQtrRpGMlKke+MhwOX8qiKJLR4jDihFTp3pyP\nFRCiP8roE7ckAw0nGohwE/2k8mArbtaD67CspSqaU71JJWupt70ed/MBkRQj\nbJ7EwX+TopRXbK9f6Qknfjq3lETBcTBMAMXqb3sQRsuTQLk7VVdf0Bd5cRra\nCVIDwL7/0qX2T6UwT2g+dOTgOMpD/EtNOOmK/cApCQYjxW5kcLgeY47uNhx8\n4assirArgeLvSP4EUrPySTkMZI1SmvuvVz8CdJcSEN0cL8dAJlLjA9wSHJ7b\nb0J1gfsgsdFD/UMp8MB2TsUgCHHezF+nRoV0IpANzxihw96iqYfq0gtvD5Ft\nVSLTMgJyIwhV7Ry9Le31J+zdTEK44lxSNF+j5LhqmNZUN3dCUWzdBbmQo2Nq\nncUMaJ4uui83h/CkMpD5N25marlpOOsnZODBMtviBR/OMVGwTui3jOi0K9tn\nsd7YgAzmJ7p/Ilf6I5eDavoxluz9acOTyY74Xhr3NFoPDnQDUJZvbuveKzFi\nDzkC\r\n=CEh4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFwf46xrJrOWwLYIxT/VBAr3J7VBkLA17fJZ8TpzYDzYAiAxoW3AhnNBb8Vxhz8aeUwgaJ2+wQoqsmhqAHg3G5VFJQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.1-next-1616122745-cbf93019.0_1616123063540_0.7196568141899373"},"_hasShrinkwrap":false},"2.47.3-next-1616123429-d4dee75d.0":{"name":"@xdn/core","version":"2.47.3-next-1616123429-d4dee75d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.3-next-1616123429-d4dee75d.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Ted8Kg9+VgrfDruKQVnzfOL1wgNP5UEipZ0MaN7R4XxRZmEWuofOIuBJOZFzRwtKa68APElOSCsjMsjMV1WTTQ==","shasum":"e63a258c0b6ebafacb7f1356c17fa0a53e7613c3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.3-next-1616123429-d4dee75d.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVBdfCRA9TVsSAnZWagAAcggQAKKfvYRPHVNyKR8F2RHJ\nQsYD5gOY/tnkDo4B5TECuGziskzC45BBPTDwMrdXe4ZRlQYGEeLI9jD5yZhy\nlZP7AI7l7TLDfqVm0AEMhhPMUTCXk/BOBBc7Z09QeeraNysAfXG1RcJ5ukGo\n3l5ygmCREyEU8yJNYBznJrqtfcpxPEUu4MGjAl0scvxiKUzvxJHj1fJUk+GC\nFvrHRfYFZbTRyyl0fVkaAUXavzzB8LDDn+Qk9yfV5svG322NK/FFfOkoAgol\nJBz6NOI7unJzpuIixEDURYFZgrN5KxgQb5UjqFyLyddA7aWQvLnaFehG1+0i\nhJzkXureu28CJcbRKpuO2VleeZcyMilEUNhRJk88Dxl7Mr/RNliqlWcEgnrV\ncd8eNom0x7qWx1I0lZN/F01S8uDtHgCX5k6mH61GBWZPsJGgwAVCL1s7IT/W\n1VNeUud/qLpTZO+hVIvwfaGwZcERFsD08hL/fcP0ZihieluFjOJiGXIKlsHb\nPEQ4MWATgkrYBpsSCmXlpobpbcvwjjX3Z4eWitvZgpDqAQBOyB67EhZFpxT9\ncHZQogN0ZGJ4XmeKAluz21kivdxwIckac45vOh3YtWhwBDbmvRezMxGS+ol0\nvJ1LNrvrttuAuaMG/Ybuzo4wW6c5srjrYjIfIPfMvyaFfXpan0ybxgtxDb3M\nsS76\r\n=nPV+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGXUoTB8/sGh9BEI4IkCpGph1oHuWfksqC1BF39LGbzgAiEAwyAdFcOavhKovFQreMtFCXVcbJ/EimDgwY17j6HoDM0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.3-next-1616123429-d4dee75d.0_1616123742418_0.44396041408165754"},"_hasShrinkwrap":false},"2.47.3-next-1616125139-98c6cf5c.0":{"name":"@xdn/core","version":"2.47.3-next-1616125139-98c6cf5c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.3-next-1616125139-98c6cf5c.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-GK6ycy16LtXg6KC6p/nfQR3AtLBCSD3Eeh8aIUsK9TOKT5M6G660vxymbYBXw2s5oiJhWw4ZrRMUHJ9vEro0ew==","shasum":"38638d4ad953e527a80751e809f462dd40aa8e00","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.3-next-1616125139-98c6cf5c.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVB4GCRA9TVsSAnZWagAA10EQAIq8jcjUhw877foeBmsy\njRx7j/HTBTq2GgKwYEhcW3rcOjW8TWHUOOeURFNRkmDCB7fZBhXRTxqtzZx6\ncaV5VdzfF24t64MpdqGUEthO3oqgCSJWa3oCVRyTDn+SayCb0TkOwzSIoZX+\nctRJbWMe2lqG0ELsK28GYE9u0CXxLTjx3rpi+te2wAd350iXicafFh70GLEv\neBrILYB6Qhgr0a837tgq+TjrXhiZoMuJ2ly4SxAhJPyAb+Bocb5KSp8evs87\njpgdv31z32NqQXo+zwWY/SmUlzwZOA/wvjc8Es0L1JgCR0VuVNKp2oYVnwvh\nSkcWatE2WginPPxQtAxJaWcbynuwXGh+D7kxgGteL08gdFh4szAXieIlDidU\nq0949VhY077flbRIo5djc3unxdmGF1zK1WUtikfaUvOLijFhCVLSBshu4Rsu\nvTSTClnTZJVdZ1hoXjw1tw+8ySZw/D3fFDky5WsO5yhkwvRJsNTQi34Qp6HY\ncRNjA2P/mDrivlvbbpbfterwlVcgkBW6GnxBU5Z5bp/Oo+HryUgtnnayHzn3\nHq7S8mD4mx/mI6SDa3PAQZCcGR4L7feB1nnJ/Dy10/9MoyXQw7yEwhH2X7qN\nm7otjyRqM/e10Al9jJbml2I6jK9j0QwtRVAQV105iEeOSOTHzEj8x2J0/3GO\nNrJm\r\n=b4i2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBMHktqTDQsUyKkKr4vlfFM3MMIuYRywZyQo2KgNrsUWAiAl1pJLqFwq9upvRyww7rP6fqNGnkklUxdyczgaKiUIJw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.3-next-1616125139-98c6cf5c.0_1616125446200_0.4844468222138041"},"_hasShrinkwrap":false},"2.47.3-next-1616125747-fda2689f.0":{"name":"@xdn/core","version":"2.47.3-next-1616125747-fda2689f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.3-next-1616125747-fda2689f.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Gqvi5RG7gUF9Q0TR/pptRVKXinbHi/QJmiDC5jHQrjdk7WuQlIfU19QGBdpg1EubW06QoyBYy9vwl/tn2pIN+g==","shasum":"a8a84fbbe8154fd589858858de096c6666cfbfe4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.3-next-1616125747-fda2689f.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVCA5CRA9TVsSAnZWagAAJN8P/jRUtFn+2hmjZBLmJj9X\n8bvSV6VymtPMm0Bcbdv9e9NyFgkn6pmZ8Y58Jux7TxqvOYi59JdbjydzLevN\nvZQQoe1KSP2Yv7dz7mWb3YFci2KMk5hc/rOvKJRVYZjsJPIOoSQH6lOh5sbT\nfy0tQ4NWXYX/CdwNb9j+LilUkSRdQii6qzvrvGxqIiTjTODbKeOlqpb3zz0a\nDNEz9rDfL/GwPwTquyAyww0M1iSMroBFJc/buSu393GkEfcavZydGZ9D/RPX\natIxBmKDmH3fFZr158FE+NliO9j+Z+1r1jjYKQU3CPjOEMh1G1B6EKu6w632\nP4k+yXQAoweMQ06LuORiBIjVDb3bFogg5A3/RYLyi4BYh9s39Wu0U3d/Q5Vx\nsDrCgHjc8pAu5cz/y3b+VEJwmKskXyECOBJFeHr59f6Ek7xoMbT52CdVvQvT\nlyTsEUZtUD4x72nvwuHC5fkgIIERSJcSFQXf1Zo8BlI5QgvlYg7GmfoI2rTx\nAfUhqyRx9VsQqMju5vbCDkHyJT3yT57l7Inrie3TZsg4JvGX+S1Hwx7nxvwc\njtKLxdKAukwpp5s9YJx1t+Yb8nyJsVj9ScvfvdXYhct1xtaJeMuCbfrZxB2m\nZ5uX0le2PldnuO2mCBvOkTMdy4/Z7IPzxHb65sD6J8YW4LTLorsH3KxG7dbS\nLV0D\r\n=/mSG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3D40VDQtuG2jVZUylEcKtqX3ALSuxTWhhlD0JjXyJWQIgWaR68DiYDf1Lc8SDRNIv+Pb8r1S91BSIl+L/twReyH4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.3-next-1616125747-fda2689f.0_1616126009197_0.14668239394589655"},"_hasShrinkwrap":false},"2.47.2":{"name":"@xdn/core","version":"2.47.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.2","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-NwndO/JyOug9nusjc+Cg5NbIcah2GP+7xP+cwfuAlFkl8G5R2w27zin9HN1VNRCijsqhuwMIq3QXpG8qyA1wWQ==","shasum":"54d0d209ddb7d6a954066473bea60cf2bd052d4f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.2.tgz","fileCount":181,"unpackedSize":666691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVCKdCRA9TVsSAnZWagAAExwP/0tUijLCWK0QCYg8+3ii\na2DbswkiZCg3YotkheLGVe3/V1yP7c/IpRLb2XT74n/pAESfR4jgsZNiEe35\nF89BtM4bs04m+NbNNtyuN6TfI/xdqhZvhySEAwU0G7vmcUbKFzAqvQ2MA/Rz\nm3FWNDO8aFwhf/KggFcuqXdOREHdWkADCWXfuThLsGTecpq48YspUJrr5REj\n0Mcw1q9g2OP7noDZ4qfoHaFHmQsplniCurefBPz3Jw1AVCrcjFMjYEb5ryY3\ndzovhAlP4mSDLz/jbBQ58fwamKxkyK9DXuhUzrTm6daYaS2ZprI2l4M77MYH\n/uSFn9HGNK36WF2LXrDBNPNZGOR6CePtLXNb7LzoNXd3qrjv7DTef6QQZaaF\nsQyHvRGuaweUEyTkE94xa+3OU5moX/tdD1z0x65i2OlTfM2Duy+ViPQHG87f\nefjTZXUHupWTQ81dsTKiagEZwhyQSPs1pfqvXKK7Wlb3Bk938UAGhh6lebAe\nV1JzySDor0V3j0Q2krBmO2rkUT+tP8CnfKg3PNKknf6+F1vpInPG9GoT10MG\n6fck97NFB37Sa6IgZWWeqPc4e40DBdqZtIR2zWoT/x816exl/mEor/Ke7eYV\nr6n58liIBm3h+Eka/xUiaDtCt73xkQ9b4VNdUO2Ok7HMfK7bsk7r/1PKey5s\nsjWK\r\n=RYwH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrDZOyhC+K6w/zlbJ8JbL8Ag9ahEj6w4VwkSLtNMkgYwIhAPH2RHdyyxYqnDUiJPJug8nveC4DdwZbiDLUjVIorZj7"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.2_1616126620965_0.48804720783946376"},"_hasShrinkwrap":false},"2.47.3-next-1616155958-b913b614.0":{"name":"@xdn/core","version":"2.47.3-next-1616155958-b913b614.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.3-next-1616155958-b913b614.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-HnhtvJU0CAAUhyJj9TQEX2Q2oB4u1dVsWXbCbbRwsqmdBb8qLUBT006/Mp1qvNsb7yVRCHpKI0YbxiEbjr/XHA==","shasum":"c2097217b39097fd5b44066f55299bb3b0221e99","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.3-next-1616155958-b913b614.0.tgz","fileCount":181,"unpackedSize":666761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVJamCRA9TVsSAnZWagAAUzsP/R2Bg+aG2DEqpah1xXUU\nTPXpPKfIcqe05JT089kK3Bmu6jennB0f+71klFt33PcPM/q0pWasYB69FfvA\n1PuTfb52YSvgnC0oJezje11uBE817sC7YFskj8bTIswJG9tU1yLtAbrtaIv0\n0eQ7JmspGDky1k0D+/WA0I5GMRo1x/sJe0R9G8AaSY1UgIc2Trw8Rbm42MQW\n1C3L+P7TqmE9YN97aU8M/Succ91joOlTFNkRUyD+WsrGLGf/VY9d0RH3JW3r\nCZPQ5X5sacbzitKNS9UdGIIJAeRruMoWUiG9fj6BNaimKJMnb/8tzcFEPGJt\nCU2AOJmjKjxTKwFlEaJnvOADFJoe1mhn7Q6rpmd7dw9AOBixawayoG6LXI0U\nQhoUn8u6LaaqmiTyDc9XL9Jf7Ezku1THLRj5WYpTpKzsozYytz3dfFifFhhX\nw1DSCBaQ7CSNTW+GsqqYlpMxWGn3fbpYzsamsPwMaSHZb5mvJ3yt7Qt8oqKg\nqVxukK6adtpoGpkUiBZl0OHybVWIT3Dp1YkUyA6cCry3tVo6QHttbbpdwBbn\nTMZ2kCI3RZs6xTyjjesE+3eQ8hCMK7A22X6xQ8F/+aTrZKcyGMMW+rY/TxU/\nOm1HLqBMmPKdpRLYgO0O+BLc96HkWHXUv+ATz9zcIn5naB9AVIrDnYpBtT3y\n6Ttj\r\n=sEg3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGdtD2HHqH+gAx8UvPhwHq6w15Fcx7kJsjq3mCShzDeeAiEAitC7O4gvq6cULXihgLB+mdFL7T+xD6glvAAV9eS+VyA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.3-next-1616155958-b913b614.0_1616156326004_0.4420635027547468"},"_hasShrinkwrap":false},"2.47.3-next-1616157658-3797314d.0":{"name":"@xdn/core","version":"2.47.3-next-1616157658-3797314d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.3-next-1616157658-3797314d.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-UIJmIdhQz+YO0FiBVuD90oChGg2gmTRJxQwotuLYvCIORKjP+FP2Jg0HDlRORpQA1V3VKt3Gwo3ZubVta/V3bw==","shasum":"94916bc985b0ee07bc89dde7bb3b25f71ff07b1f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.3-next-1616157658-3797314d.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVJzvCRA9TVsSAnZWagAA3KgP/j25aNfgYhLn0VLp9uE7\nh4I7PgZ6Swfl5iy31rP6OOxpEjQENO5fD5IJB+wxaebYdyhxhqcuWFCIP2dr\nhihbtN8j5b1cEfKkD7G2S0diPTRX8R03fycr12nkUzr0HdZHa7InsSSOoq76\nIGRAn5oxEPVigkDJfRQkn35IMOOYUHHCuZA5Kra3nauEtSSIsEg7DWEY9eSs\n/x8WFCZZyjLAb82EZBpvIDQFPZl/vQbMGjzaYuh53B+nRCmsLwqAGm5wGaIN\nKhBaBX8F+jdJapR6LyLcUjzJzPZ4wmhwQ7JR7iA0D7fIq6RltOfZPQcyjqsT\npMDdAwlTf0A+IL2W1DkSwrjvi7c0pcQTprFFDfi2C2ITLBaUOZGa7YekehQf\npnzU5P+K9w2MAWAKJwD7aM3olG+pZYlToOadZp29FDzxq51PZY2MT6yjczXT\nwMbH/RacWRO5fzGwtwHgb7SpGebk83ULNf1MbzTX+zMyyMwq8w9aOyTHyVlG\ne6iEUZMdF3424lgUCoI2CTO08eOtRDgnJKlGYOxterScOiUgxnE4R5Yq6x3t\nt3CTvA0kW+DcKZWaT5ior+98I1wA2txUQIB3xNeRdlz1CBv0DENs6RUedMGY\nSpCOVncYzKgqXP3oKZc0IBg61kKci46ifUB6yMvbjKv9a8/7PeRLocEL92K7\n3ioT\r\n=qNBU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyisv3ajtmeDcv3Z5zE/MrZeYqCJTR11EogFemjbSQ6wIhAK88fj+w99HSx6AJYYrGHHn9CK8Gtvw8X7ITalx05yyQ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.3-next-1616157658-3797314d.0_1616157935343_0.07134983517382154"},"_hasShrinkwrap":false},"2.47.3-next-1616158067-f080a7dc.0":{"name":"@xdn/core","version":"2.47.3-next-1616158067-f080a7dc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.47.3-next-1616158067-f080a7dc.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-BiZrTlwvdV2nJ9YKcIhks2tA/fGinDX9MpVxP7sjn2DaKGVDMHcR5cpX3fL82tg1nFhpYwFy7ELdgYy13opENQ==","shasum":"934b48a150eac2fd90eeae63c80a7c420951dda2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.47.3-next-1616158067-f080a7dc.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVJ7DCRA9TVsSAnZWagAAYa8P/3owRCadG2tQjhgCIdpg\nAdkfX0ccecVy2NNFI1SOwahPbiRVJ+6Ky+hWQ7BMjgPXzvFo2v3lZUXObKXb\nnEl36a4CH9+kX2sqoMOXKreLrK9SgbrsBkfKY0FaRHE7HiDGhuA/NaBg2yLr\nGYi8Iax/I1bCnU+0ZWaqSQneLbIC/zheAA6For3I6HjZBLp/5YfKVsjhO0Me\napagLnNBqvVyv6tBEhe9aZ0Qup3bWkElqYuDtJNcL8zYpXiw2RfrVKfjlzjm\nKAtmV1SYRI+eoHJ3k6pwhenL4u9RZ9yDuh5R9Il630ucA97R+w2CSWkfpt4t\nAOfBMgeNe0IEeucwe8/kgtzDDkzY4grmYDGzgVSdnKmCtULq0JXQ1DZmHZu8\nVvkwoJx5jhx5vc9r0QSRL9QRpgCiPX9hQxAcPeF7HECNDI37eZ9SQHBFNYHz\n42StoFPywy08lBVR+YiTq8BqgpDUgMSAzKIQ4YFFEWHP/gmzR0XWrZkjwcCh\n9Vj4Xyd2hEMk75vSsai44bCrozTFcu5Z1Ch4QonSeCSkUa2+S7QIWTOcRom8\nqYtus2bfzNbWt1oiwYejhA+cwegnEq8QtWwfbeP0nw2fMfb7M+vIRhhLHTY9\nMnxWydzv7aTCN8G7TmTNisDqh0usEh4NxWzY57OAwvg3bIJX5zs/gY5/s5rR\n/krU\r\n=SD3m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDY+fhDrl7+s5U2ERXqThUuwALJ+9kn1Q8Q+JU27HBBSgIgIU3iHXouyqAxmZ7iMLp8avNhpUQWlURzBqn3X6w3e5s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.47.3-next-1616158067-f080a7dc.0_1616158402969_0.6406436708873999"},"_hasShrinkwrap":false},"2.48.1-next-1616159048-3eedb503.0":{"name":"@xdn/core","version":"2.48.1-next-1616159048-3eedb503.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.1-next-1616159048-3eedb503.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-o5tcsj6IHIySZ68bM8gFGwa5V+c0KW9Co58muvuxT5IcRWJGHBIkYVgaUqdpwC5uHT5AUNu97XKzsFnBIJorhw==","shasum":"725ed5fb3c6719dd2bcdf51d9f331865ba9e7550","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.1-next-1616159048-3eedb503.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVKKqCRA9TVsSAnZWagAA5j0QAIh06W0irnsFqoX+Uv17\nyMVoPaEG02v0f70gdOwDY5OvldUpa+pAkeIt6PSUjoUEUCVCu+DHIlg7JiA3\nbeK6rtuHXRyjT6FpdfbEhKiypDou+Xutp+BzCs/kZ1T0FzbQ0Wv9OoHzMam8\nFJdgejJh6BUG4KvYuRY7FrmA/030XnjROsUIdP43VMPVnjS/65xA/w6Qmq94\nnZ1JZeOBg9vVgZ5uIO3KQ3EUoa1Zg44XVh6Q24ytenxLS3UphWM0QqwoCfyp\n/O7q2osELEuhw0GcF6CdGS5j1+bmxH+IvLAuuTu+wAVD7qZlqom1R35Dv2DT\nrlxkx/tKXrnnnwBtgGs90QEsrziE6Ii4YDdQg00wacCuLTySlVpy3th1Wbde\n08CeNIDGcmMRCSw+3bFBcoGFFJrK4cKCwotPXkmtLFLjWZ5VbMrshcNjOnyR\nz5sO5B2zDHbs7PC7Uqe0n9wNUeSMUBhvLzguoKXJKKv/RDwzjHbTBodnzU5z\noBN7+DNFXSu1OY27jWBCgdZrHTYL9rdMq5zQf7dYyVDYAxYDkgi/U1NANYw2\nfwN9LXu948ocvX/6bcNDyJiwdARIJ9R9VgZMxfc2xW/58ePGTjyEfwRvwoxl\ny4QZpJzMw8Pxf1jnX0er+rkl0YilFni0osA9Ij/6JqqDRU8/Rw8bbv3xBoLy\nH8Nw\r\n=X7yY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA+ZJ4IIn9VIrE6RzhUc0a0dp2yaS7mzyNnLBYf9KDP9AiEAuTC5q79Xi225Y+Iwh34mGGB3RQDmg0SbS+t6jDBZ21Y="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.1-next-1616159048-3eedb503.0_1616159402251_0.43741895385817653"},"_hasShrinkwrap":false},"2.48.0":{"name":"@xdn/core","version":"2.48.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-bg84q3Ph4qP98SLH7FQISYs/pxGCm6BI4D9CZTwoeube/vKCgWGRJ+zl2UAtQQu7/G/YHG7P6uQCWmoc/NxqgA==","shasum":"bb8d3c55aabd694d697a9495312ccb87ebeee2d0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.0.tgz","fileCount":181,"unpackedSize":667902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVLmPCRA9TVsSAnZWagAAoAcQAJHey6QTSV9StRmROklq\n3PGq9JP2UkEV9o3+chZyQyg4QZR1XbpPz6U5bCZDTgJfkhCHWuscaOYNZ4eF\n23toyjyVlMmSB7X1r1PgGiz1LeV2biW7fm1wj99KFKLJaY35qQsoSxkeSoWu\nsI+wzQK10dfHZzhwq8sVsoHufyU54uh1Z3uj+j/8Xw73jTbAjjBdSpKzwsqs\nN/0y1e3Ij3035g6KjO4WlfLaSG+IAB2+KgfqowCM3vrP/wXJejREChxDOFZU\nhfiiZ+jLPj5ZP8tRwReubbXMP0rQAAyUsn5m4aBiBT1m4BTIYTVGiukEnv+9\nPgKLlmVLUHPAmCqmP7SprEQ9euTj+V9zn1ngrVDQDHiBu53AsYVmW3G2wuas\nldTOzPnE34x0mWzrdlnp66lACngqTLaj6ciS8+af5F8CtJybmmA8CkV/y71G\nyylisnGOJPSx6b8xUULfBM/26U8xhg/e9OY7hALhFr/VTUT0tbERhyKvNRkz\nMS+TFFO2UzjK/JGeQd/PlQj6wRdyL6x57EqtsLkbxppdcCmt5m/xV4isvYkW\n8kIwRwgchXHBjnZRh1/+hapwDmVBk92FFa1UmlIe/cv8ppVOjpOg7XErqpgf\n/VX/+nuzJyY5LHdCDVQyc1dvZx97ydgsx9rZ/6qgQ4K5v5LFPOB+c80uYCbX\nRqOU\r\n=i+Fs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMO5tIUK7osI2AxRW0guvTgkJjiL9wjSJwc7S92zTd/AIgWCSlz5DrKFaH+jJZJTQD/XPMhl1drYPyAoPG94zZHGE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.0_1616165263163_0.6687259392496898"},"_hasShrinkwrap":false},"2.48.1-next-1616183581-7712eadb.0":{"name":"@xdn/core","version":"2.48.1-next-1616183581-7712eadb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.1-next-1616183581-7712eadb.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-/fjIq5GaOi2n/x7uIssBOsvXiIZ+fk9ZLRA5j/3jitAUrePN3+303bIc2nG7L/PG1tYM5mWsFzM56imzwy+MHA==","shasum":"d8e541e0fff21b9309f0325bcfe61245912e676f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.1-next-1616183581-7712eadb.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVQJ9CRA9TVsSAnZWagAA114P/2xwX3pErTTd07xZ4L5C\nys0VOijjFMigVVQbCJwmPLimSDcshcBg3XjZXy3OMby9Bb+LqF3bYXLFvRKT\nc8l8uB2ICMheIPdeVs5Ah8Fn4Sl5pI+nOz91gFqleflGzQOmABG1E6KOoX52\n7YCadJECtlFnKgUp+GW7ghDz1I4VSu0JXJmnbpW1W0cM0iwi86jFe6ZVHvUJ\nHTuV3VEsQJLneIOVo6wQeNtiJvxOzwD5VZIzizq8vTuZpOa8KVpcLZ9OA0lV\nHSnSO9OgeDfrenuhWXZscEzt4aOedfukwy9RAjFdeQ4HDxbkD4GNFC/3410q\n2eY4zbpL24BY+dPcRE/f2u0nXoSmViQ+mcnwlRmkqvS247kkznhNKZq7ilCl\nHnEO47aTWRaL3Sc8LwQHj2ya6toTqHoH1iA94c9IOKb8qEwO8nHCIVQl0Ovc\nSN5G/d0uP9S/Fd/OwXo4b6QVn5kVdLsuFpqbYzam0iQWTOT/9nOoK/olABS5\nmhP13PBaiB0iIz9BGdg+QKqmIhugSUH+U5+WlHPf+DcCkJwgbvhksGOIZgh0\nLHiUfNRyQxUh2Qs+sBPol0W7DpIftikd/XmIlKY3ZqzMVNwmjxmEBI/eKZg4\nmmOjp28sOmY/MxMylyYs9453cKoetn3DVaPtt1R5h+s0lLNjEjVhwXNvzRPC\nNNUX\r\n=J3K+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICef17QKtvYrTR3xJN4MPIEdLjev/uxS1YJ/1/4UQc0eAiEAw/REXErZCmjSh2pooXLUUGF0hRVmozkCuMybKvUfijc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.1-next-1616183581-7712eadb.0_1616183932391_0.21460002296592617"},"_hasShrinkwrap":false},"2.48.1-next-1616184254-1f5c9227.0":{"name":"@xdn/core","version":"2.48.1-next-1616184254-1f5c9227.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.1-next-1616184254-1f5c9227.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-UB85+P4nwOI7WhdG/Y9bTdEJP0M4zEm0gIvZd2IVgfae1TDHoFnNaW4XmN9MSEWkIpUAqg0FlUc52Rcleq6b/g==","shasum":"6a6f07ee9989ad40eca7c157bf30173539d25ed5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.1-next-1616184254-1f5c9227.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVQUZCRA9TVsSAnZWagAA4SwP/3MqxU7L3jdyhelMH1zm\nWGd/+upNTXee9ortI3PUqgnHFJBzt+miGLx3I6bQ8+xV73Hz3Xjbni6xivEJ\nVyI6tSU52ZeUUoLWSg24NjizNARQPZM8oqMYLxJT8mSObcmqemcHzRsBocr3\nHpHlYoei20QILrww9BKMg3neZXz8Zec9QP67Rze6BwG05WYid6ql/WL/CF8G\nXz+M8tL2R1z9iPxdCYbSyCKp/W3MHSUJf9qAtrMOTESqFy+e95PIwmtClLPT\nYnsM1uK7SEjyebaPCRr3fk5SD02OFMDxJdTeMgKpy+SH509Ia/xQSJ4IVxrT\nVc+6zsNlpDideZlh91Kduu1Uk0cOnTK4NbFWD8KD1k3JurZpAO4T+NDFAb9H\nmx3GyRCFOvMCmpYLPTa74OYICaLGPEFDhGEm08WF8QCtfYIkOGpxR7tX47iV\ng9VG+PI3SHdpM4UjORj/PlSRHjnO3wJJmYOT2nXhbXBMH8KpVD/iEegZIZ5j\nsU+yZx6uEwkX1bV0d8yKRp/XAoEVQo4gV3Clk3hAV58EjEmICWEvid1q1mk1\nAFd+rvZxOm9TYTD4xlXBdhZE8HclotczNbhwgdvZi4xWMC8zBDJmhYpoO9Na\nFaAJD8QxJ+gD7+/hEKdYFChFbb8Yi/G0qod0qE9TTyg0auPqE8KlF+dIZu87\nYhZI\r\n=OcsV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQMsoFV46pyT4XWNTBSH+KvvVGrjZPQNxuT62rvbGCHwIhAK8pO4IDINTgqmXJiC7JUiWakgu283IWlGZHdyjc+8v1"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.1-next-1616184254-1f5c9227.0_1616184600263_0.4358428774801615"},"_hasShrinkwrap":false},"2.48.1":{"name":"@xdn/core","version":"2.48.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.1","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-SbbZK8tF3j7lelpQreg1cFTAol82bs4OA+aThzwPuC6RchlfH6t0XiyzWLEepo9JKZ8LMoUKjwd4VueyqoG63w==","shasum":"66b47fcffc0efedc70221f21d47ac8ea3d8e3d4a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.1.tgz","fileCount":181,"unpackedSize":667902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVQ7nCRA9TVsSAnZWagAAGpwP/ix3KzdAL3IX17fNrfrH\nUKzn8d1Q/j0owmm0S4h+VOfalWvAaUGHkyV52UcRuVQC6d1v+KLfMXdPjhO0\nqKBXK8YoraBv0ZDQO+0U6ORXwyvR80FEnv+6f0VjVEKMib1lnatgOOdhL4UH\nrh1TDFNQGQ2UksAz9JfrP4OoJFy9BXrLcFqisBMPFroD/EVZahOEelnjseQU\nbABswQf3ZdAr5zmlnPQkY8IMEaLQKjOjVmvGhmckdSJB7m0E++goohbCPJfe\nEdo6hBRZQyo39K2x2T8i8JBcpOUcEv1GJb/0xwhoi97wrGGKf4tkMTQXvUt2\nn1Vhr97NClt4OjWNWH+mbJiUX6RJEEyLHcbv9AMMT/GfP80TxPVSv/KZi3/G\n0H3VlDKbjOxkpY4z8qRLN8Az7wE2ZCgdDN22ptHu9iCONBA+sECdeEe6tpTV\nIRnn8VvBSYbs/jgq7P5uLtcSOgo8r+JOi5RHtfjovl5hkYZz1V20JuK0cxF3\nvbM52nUhjz/Edewau07jXjJ+3aZf01ApvojmMjmvkmL62U8yu51zxpotdY7g\nSdNXGu4Or1p3nyJnAKrFz1UcB/dKUbR+OglBDOycLNSlb24hj/AXF5nawu/6\nEA4s5LV7/LriwO+93kUnnLFrQmUCwXAjaJQIzL0mac1l8Yc5GwqNq5A4LuJp\nRxsM\r\n=QLlN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaMAn7lWofKSP4CXgqvPacEsAn4/k1NlPb/iWTt+Z1NQIgctqgsbfrZ3CDqhDbO99bAylZmup7yyDckko/0EImhEQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.1_1616187111012_0.8906179174755369"},"_hasShrinkwrap":false},"2.48.1-next-1616186777-37a605e8.0":{"name":"@xdn/core","version":"2.48.1-next-1616186777-37a605e8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.1-next-1616186777-37a605e8.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-O3acGuv2LX1faf1qgmLuEB14ezE3zb6aQThInLgkEWpzzRBmsm5HcIb7AKFXupng2VEJcdVYvBaN6yPZ0NGbhg==","shasum":"ff2918054aedcb1849351979ca92658834fcfba8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.1-next-1616186777-37a605e8.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVQ8TCRA9TVsSAnZWagAARwcP/j8Cr4GIBrkU8aN3VSQI\nNsf8sJo+3bXxSOVnTLqRNCfG7CA+T/vOUEi2c4I9Y9hB0qA9YpNvQfTk9Bvx\n/IxpGMNNUyKTyyWnbYKjTqEgOxCk3ouOQ5lNx7/MPs0/rdQteo4JC3JerebL\nD/BnOvSpRmMoB9V2Y/yCOTx4/vRMNr7PJB8944x0iVdcL9Z5ARNVuGlvzWvx\nH5khm3VbkSyffwndGosDioMl1G55ujrOA9zH092OWJoU91csxCoNcbh8GTBB\nkUy3bMHIZ5aqBK8BsnVrW+i3pNfsVRQtcXBG0PikVCCVwmAsIGzDSrLTMKNp\n5p0pMf1OpuvO1snCKb9ivCVUjBI/ZlC/Cgq+S+r1UiK/+Vn/76noUQX68cXT\n1Zl+H5qFjImJOpoFNQPoxB84j48UcPab0kiYMvi1ttsOaV0r02NOr7KvCIC6\nbES8vOLEpamA+zaFeFobH8QWWQBkdEU5e3tmMehYmvudNQD2bBxHM2ONq1sq\nyRV3Rw4zWfuc5gAq6i+EO3TIgYuIEnmyMN1aGi0lZ5Z3hR2hLv7VKY37DVkm\nTWRucJq8HDOK8RrF913BeR4bEWGzx80pEnUlVR3la6oGH3rERKHUfLF894s8\nOn7/6C74aYmRqvdaAY6nK/9UD3CRn1xKp03sE0b9SOQomS6UtOoj51v8QOi1\nZ2WI\r\n=8hX/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICYcblkjQFMgXD3F2ZeA7r1nSDJT2D37XbUe1FLWhcYQAiBdNvdmVAYl0q68gZuWo+DSGtomLQhpV88U03czj7gDkA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.1-next-1616186777-37a605e8.0_1616187155152_0.966497297019115"},"_hasShrinkwrap":false},"2.48.2-next-1616186902-fe84bb15.0":{"name":"@xdn/core","version":"2.48.2-next-1616186902-fe84bb15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.2-next-1616186902-fe84bb15.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-/hTdfM7yXm2ugHxgiJ0HCTnu4ufEcgLAKfrqoqrtYhkiU2lJfAATlHdubYI9wEBeTduvFhkFEsN8kI1N31op1Q==","shasum":"5e509cf2072bc2ba2ec246fd58db1dc378c0312f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.2-next-1616186902-fe84bb15.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVQ9BCRA9TVsSAnZWagAAqiQQAKTE+1lUzMYQVskhuVz4\nCpAUGWudnI/gLObervFQ4AII4veBYxGld2eqN60M1/+RNriX6WbWTzj7a+LI\nKAExWcIQlpHy5kHNgUGAK6AhpdYR0E6cYUOxGrinpsmgL5qK9fW1t4D6mG0w\n5UM+guuBYxU03Ncs/cd8KgblMRI+x+ZB8pPz92fd9BGES6A+ig1PQ3ywVo2y\nwzWG4TBobK/9NDxvbje8DfaL2sk/O/8jzn/LswKxQD9+vfWiMZBbGEHCxxLI\nw6JFMZ502zKPyHq3yBHxrrHeNDEMuS7XhbC1oWh5OdSPLeF5Mz8wrG/y2KA4\nPlT0N8Zo4hLNBRB252p5NULsN0bNW5IsXXKtoMsP6GSGoj0LeOKR7Hvlvbsq\nHYtvBD37IxP23JJ6oU1sXEXK7rlAx9c4ZsJopBholVthVod/HbwXTCv3V13N\n9dledK4c7C0kUAnqVeS/P6OzTovxMguQJNmRzSrKtNHIp0q51+vbuRF+yKnu\nwa7j6i8lWj0Ve67Oe05FI3/4DE2sIaKMAKJeab+Qd6kChoZMM2laoqzhe7lV\nY9i6bg7xe21Txk68ohUsxKyg99gplwZRKTLKz8ePevd1VeCEnBTX3U0VpBpZ\n4dSvmYImk8G7QygmJXsfI4f+rOIuwjFw5Avo1JOfPRIKpWWEdV9qlTuJe1u5\nuXEY\r\n=KuKb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfp7zPGNxNS2yOjsQl/0LnL66ydw46WXtARo0qabpnVwIhAOezgpz4NrrdJCc+9vOMUlzDQcFI10QTGSqZLc2IeVJN"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.2-next-1616186902-fe84bb15.0_1616187200715_0.35983600242238545"},"_hasShrinkwrap":false},"2.48.2-next-1616417535-15243a45.0":{"name":"@xdn/core","version":"2.48.2-next-1616417535-15243a45.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.2-next-1616417535-15243a45.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-YPZaFr3V3+0MBpMDar0toae78Z0UaNJ9ciKOz04quClDASd+dzjiZTnnvzAtPWQwrtpqZRKAI7vO50Q1XLa/6Q==","shasum":"4c294f74fda3675a406b5914258b3f7eece5235c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.2-next-1616417535-15243a45.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWJQcCRA9TVsSAnZWagAAGtUQAIL6kTQiEDLbmVJNY6pT\nzTvLADDTO0EoaPgTSl3+sM0xvKaUb1x5vaOsHnNzKZa5iuK9ztqyzBCPIycM\nAqTtEBkEhqA7vHtIzpUZrf83dZt+qCVfop413lhPAMWMohdsJsKdgGJzhcZa\ndR6X2M7eaiStv52v1QiBLCW7EOGpC/oi894tc3tn/VokfJXSdGIfWT9TMIHL\njxIFNZMsF9lcUf0XsronWP5Wds0Az0bZApiFWF6CpUiL/aoVR5SVhMR+Tmk7\nrWmK7xITFVNt+3h9tJKqSyHT3LJpYzBURXI+GZ4mVekpiXqLPLTtQJanBAl+\nBuRWU7h7dagtijdvTQRNvH1yb6Q3lJ3nAAoU07n+mrK28KnxLJa7/8q6aD9n\nrge70hmmqE6XyWyaY7EkVWGXNjsqavqTGKH+DgsDuy6PJDcBqzYZrLAUNG2i\n2UsvubV5RTfv/LBB2YNXYuzjkOXZ997tk0rp1I7s8RMn7UNMZhYo+oZc8YiF\njH3FZoQOd13MTpHQbKsFC79fFgd6+4rRsV2YzMOzLbrOIEtnLtH/cSkTf+mU\nBgF9VUj42YQhxqRSEHIeKTiBv9fAibR+xnFFwElVvtmAnu4qCYpIImWqvVe5\ngaL2wthc/14qDasEKtUox8dBOPh6SdeJDHyGIbzujbwugGNqZs9gaDJVOG2h\njKLx\r\n=oSUW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA/MSeMNbhVGrgT6cMBxc6exLMXUG/1B02mWd341x/4dAiEA98pBPoen57PHWAgtoeaZ7mAOr8ncA2Cv6e1epKs/Ey4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.2-next-1616417535-15243a45.0_1616417820289_0.7815018419178341"},"_hasShrinkwrap":false},"2.48.2-next-1616446742-921da2eb.0":{"name":"@xdn/core","version":"2.48.2-next-1616446742-921da2eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.2-next-1616446742-921da2eb.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-23CM8b2KbvOFaTeUnUEMNk1YhysjosG6wCS7KaOUPCisLnNblhzabIKSusksG/CDIErlayMmMrUyw9pk5rvLOQ==","shasum":"29dc45cfb29a826518baa394ca5f34b98c453a58","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.2-next-1616446742-921da2eb.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWQZeCRA9TVsSAnZWagAALe8QAI/4GbXijdSJA/jMf9uz\nru5Yi4vnTBUH2sKd9W540ynxBGwr3pFUCnMDiyW26BspgT1sUH8DnktoXSdq\n519/0B6wu7oHypyukG4SH1Y7vlrUfatCE1730z+n2e/sPXZ9Hc5OxY5RM9Rw\nxjq6SwJ8chf3ygKmQHYGeqyhDeJHaiZklfoCKAMFvxeMgpFRR+iTwv+IL4mC\nafv4fY2HLz2gruBDtZZxP2SJIS/ZbNKXe8IFQJS/emd62B90uYT937lUJa9+\nkr9MlvCmEXTGnNlZIIdgpl5qNactoZimv6LfHnjOj53+uJXdiAoPhAy11Ilq\n9i23mZG7ZOU5Uy0NxOdMWnFO6Eq3UYKy/RWg9ttuL3EevmLzXWFEMrKdQT1b\nbQt0wW+VNKSAD9RUxK/ew0C3npA534KK4vDHpbBUwWlDpaUCmeNV+h2XwlO0\nvwCOV0GBN1ImKHUa2HI8h5jXNOJPztXy/EULK10CjPN4CyeoVj2ujkcPVxK3\nRPkVC7d45TTJlFNouziBA0ZiSfDqsMNZH3jSZYLUf9M4ULwqzWDIBCAN+txo\nevibhwwDGVCRzFKZ2+P6rYKQ+R9JQxgOMyZsWSyDPrXGPW534lVh4CY4nsw7\nnWKuO4yGAXQM7610Cn9JetUv+LD8NK20Lfyg6LqnqM6USvy/tumaI9kg+ovo\nz/DN\r\n=VNYS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFzXMAKlRfs05rii1F0YampnL8JcBvVDYcgIQyZQfDgVAiEAsvr974+0ffv5xdk1rTd1PnsU1MM+qJrREzTmKLtx+I0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.2-next-1616446742-921da2eb.0_1616447070174_0.2767761808505469"},"_hasShrinkwrap":false},"2.48.2-next-1616447270-8042db79.0":{"name":"@xdn/core","version":"2.48.2-next-1616447270-8042db79.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.2-next-1616447270-8042db79.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ez8bBlYIQeYm/A9o7s/JYcmjIS+cJ5Tq9y1yBN00zhz7gKO7k+pedxXI9qf9Qs1e8lX5iK55qCIj4OM97lKDbw==","shasum":"d27b3f18dde487225f4d30eae83895f7352017f2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.2-next-1616447270-8042db79.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWQh/CRA9TVsSAnZWagAAWIAP/19mGnIshgVQhktTYMKg\noZXwUY2msfWyq/Yo0y9syr/nIYouollFkj+i9yjCC4YVKfYcVUrV5a9FlF4q\nD72ASnRZGKpw6uDFmK2bJNZhCXMNYRj6NAeM6mmuLhIb+cKLCVMN5qphY5RI\njQzEY9qwuWmKkSIu1db/mIOeBoijQBafeG2AUFrdPoVwTfBVByU8LAMZHDdh\n7If5iDV83zlh1OmAPPhtp1UJLfjR3JxUYgQmNbRMpEn4zmhFHW7F8f7Dvw50\nUyInWiEv73zRvv6BrMtW70e9ZvBOjvjdA4FlMJp4BSQfm5hKx+nr6xwsu+2A\noSWeoV8Bz3zLE7vp/I7D39zSn3gme6sP6qTvFCFw0dQzg4WPxgg/q88kPkGz\nuJfEKDQK7XS+bGFpY2eD7puxkD5Y4fuGgiWR6CanH00Qt1eFEQl/KyB/Jtgx\nQUM3UD9E5A4Z+DU6JJSBWgt6xJyymDxPvBkSPG/vtt+UIigC+VwZ8b7DKd9A\nZxYXYRkDjx1QWjDMo0q0srHr3J/XQ4FCYVXmgP+JRVUx1jYVFAVWu6I3ExFT\nFOjh2Xs1fnj9Z09M9oedDnLZzaFGg3d9ZDyJCoaT4QDsv6j0EieKViY58S61\nY+gUYq+Rq7Bf7+S+qUy0MQzmdV9/xMzz93k3Ikrk1l41i70H8NhlRfecIMaJ\n5QYw\r\n=6YhM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFAq3ZpZZs48osl39qvWSPyGGGO0RWiByriy7OlzQU+QAiAWA+G3D7MgHWrW+oM+Xi46GiZv4azGI89BxbJ/U1NTFw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.2-next-1616447270-8042db79.0_1616447614783_0.5345033687455074"},"_hasShrinkwrap":false},"2.48.2-next-1616447856-e63a95d7.0":{"name":"@xdn/core","version":"2.48.2-next-1616447856-e63a95d7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.2-next-1616447856-e63a95d7.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-x7n+KEPeN10m8UTUTgpU7DQP3bBLHM5JN9AZeAyQloAHv0QhXNA+NOxIzYcO0a1Db8cnud67cm3bTjJZ9pJprA==","shasum":"63578355eb1de869158af63a3e61a1330c0a2f91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.2-next-1616447856-e63a95d7.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWQrACRA9TVsSAnZWagAA9oYP/0MTGbK5dKDVB33D4Q0M\nImG9vK/oSfsIJC6UrnFTdOZOsP0dA07U75FOPigbe08EhwZPtdxufmHvxxxD\nMs9Q1TSN9vVU6C41Pxv2gUzPL5rWB6wy0E//1rz1EPbMip0oFdClzaM0o3xO\nFFEwKeVVmPnSi3aPJByHeLJzLo3yso9zk7siyeUAa5lud6MGGEK0mAdBb2Uq\nYzSb3JJdAmiJ9E8TerQRA43NREgsR66vrQQGe+pRMp7/cety9zFQhypRMUq5\neqvIGNNJ3xCHI6AJb8oZ4RPLS8ln8Ku5UKieLpQn+lI5tvEQEGJg6duOj898\nBoSbGfMljg3xUbgTzPGL0uywPF1ZLYuwYGw4jaqjNbqHnwzrbBlh4dxPIeF8\neCtzZWYa2MynK2fWotHBm6hkmVr6jD3RymeijG+tVj3s8HEMNCiPJwHtsdHh\nIWzQ7arhV2x6x8llBfB2l/ikrvvYHRgu3KyES+pvC++oaRwMl6GiXSQYKiiN\nWNGNDVt02Y0S065cJ0IlzyPJgHl9C2w0UAEfXjTY5Xi/ZGcP2x2xz8zB6Tpe\nryhisVwVRSGAEtIwsNnNCkW2Y2IbMLXiV+bBd4Goi1xaH40glWFmNzE0vmMO\nPt97SM96eXSPJFZuUhdmQnzZrs31k3nZDCxGMM0uF3QTLROjtly6+O+jYAtv\nRUny\r\n=tK2E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbIy2cmTo99GAarwlLAA0jDnHH7Io0+YdjMt+eOuRdeAIgRgn+QeYSN7Sgkhp8QmZBOgYWOTEnASSVK+71wvpuRUE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.2-next-1616447856-e63a95d7.0_1616448192311_0.05999753057290458"},"_hasShrinkwrap":false},"2.48.2-next-1616499348-7a8e8470.0":{"name":"@xdn/core","version":"2.48.2-next-1616499348-7a8e8470.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.2-next-1616499348-7a8e8470.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-1bL6nUZZ5Bh/QL80DHju4ECCGpZuM1+/SiMvP9282dt8vZN1uG/coDs72oX/COe4t4UOBx3/0vsnELf4pmmiUQ==","shasum":"ad418098ba01ba64d09670465bb76d449eb94ea4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.2-next-1616499348-7a8e8470.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWdPbCRA9TVsSAnZWagAAzMUQAJ/VDLtZjCZ6JTbc/HSC\nC2FW1ySy4RPGJNA+bnvk0xCgprIAmTrkHpsA+AuokxhMLyQGmxYx/rIYahMV\nwEcCFWq4uFvJn9XSKS+kqMWauCvRMru2k+MxXJzP1tTfhFI9+BCmRf28mO6d\nZxubJ9GY4lASn1rH05q/VYTIiyOWTy3J/GBdl9UPY/ZgXUzFfzYodSTIIZeK\ncXCVq8y96gaMLcVxQqG0W3o2ZDPNU3l35WUoomwY4dKnTeRpDmglKNmQ5E65\nIULN5YyPFfWhjalXBk4e3rxhx03DSLbGfz6jLLskj4oAR7Y/KI371NJBOPwI\nNQKIlRoQgloQZ95KlkZwr5kwZxdSwGqUJkKeDcYeIp62pG/1jUzxrrzgQ8oh\noJgkUlVKxZXc2OcXV/wkRAqg8GrqVZx/oBc4vh6kL6Y4fbtyujoNJGA5DbMc\nuIWoaep7E3FZ1i9Kj1fLw9/v0lSyj8vouLye9fk5jeUQPInTaw/NCN5CzTDr\nXkIsGaT4YYVoEomF1JfZMeGAisuzOSADeuGnCl5kRaYumySstR3rWTgRAMHw\nYO8/1HiuaryAZMgswt7l33Vkihu3zTpQo2YtfGFJT8j4bh6S5hqQmkG+rcIM\naEBjWauiY8LHKg9fkm7AEfWhmJZy9Sk/gULROIRvBrmVb93okcckdNO8h/Ow\nvEM4\r\n=3JYB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC49VO6YLhJjkGLwSZ5Fgr/MEYJnqu4LKcDJqqFZ6b/SQIhANnpoQS7+J2cv9d5Bf3abgnUKBvAtUjYwfJBc83cc0qR"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.2-next-1616499348-7a8e8470.0_1616499674244_0.3324894238825169"},"_hasShrinkwrap":false},"2.48.2-next-1616499509-6c2abf82.0":{"name":"@xdn/core","version":"2.48.2-next-1616499509-6c2abf82.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.1.0","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.2-next-1616499509-6c2abf82.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-42grmA8GtubTAOORo/Kn+VHC+ndDwzBtwB1yQf6rqsZghjzUneuGg0Wr5nX5WaFQI8e3P1tyq5iLa0rNN807yA==","shasum":"37de2fc49b07b4392c0430eb097ef2fdd0ac9fcf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.2-next-1616499509-6c2abf82.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWdSYCRA9TVsSAnZWagAApeQP/2eYOZTP+YTbj25Scs+s\n78jYv/JITvuu6feHNMzytM31SdbZQ2ZgY5ARYgnBVY3xHuSTxbC2TxAi6T8O\ncbhHtyzzAPTpAFAOFUAq+YDxsYQ7/wIHql8g+WSeO9/aZwD/UHhmj/WtnX44\nQMtvJxNaFhhG7wE1DAnSDw8ybswT1WjBf5yhylIIhWPuAdjhtgG6iN5qKAVH\nML5yEty9ohIilQvSFIqMAaJIs9/vppYLQ9hxznpbA+92DCkEmj7zC0nl+tH9\nDuhTFYOumpzY6FfyVPBR+/qD3T1Wl/1fnP4B5YQJqI2/JcDMvfMwwZj1zRhe\nX8NLIaIKv57tCanULgpsGnLcxm8lhiprFsNDOc1/2TFYm+IMemd3OG5DOPwU\npubkqgho41N28rIEAhZfIENy1ePw6ybZ2kxGJavYjo9OBMbYUCfqnNzlhs+r\nceglA8ckpuVzE9sENfqo+zgWTGcdnnGPsaq+R+rogysYxBYNeKgIri9NszxC\nCMMdghyls0uyMxiw41LHPevJERGqhUJXeo9hUNCfKjdBHTLD3233vJI09dDo\nxnC0Z4IgkuWhCHNreJg0mqDF7mqdT3QIlAtZid274Wd0723k5WCR3Cr0sikr\nxQcCcWhnY9/ctUG5BYeR3GzM+7T01qH4T9fQvv8wMNzxIvgG+wccseGPvibZ\nFRiF\r\n=vyA6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHN9u7Lo51BDr/IpmjING10TKCT+Dj8fQKzFCUX0J4aSAiBZO+cc9kWNVil+8w2peuhIwr9hjqhLkFWAQ1y2w2pT0Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.2-next-1616499509-6c2abf82.0_1616499863810_0.14451884227802014"},"_hasShrinkwrap":false},"2.48.2-next-1616499718-c9dd6c08.0":{"name":"@xdn/core","version":"2.48.2-next-1616499718-c9dd6c08.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.2-next-1616499718-c9dd6c08.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-40j2Rt7PSvPl8ASC0XmsDekRqf20TG4A7eq8W/ngBDeAbTXTHgLjGSwkuAUiI2kGw7Q3LOD1RyqA1W5aoTfs7Q==","shasum":"b93e27c1f80eaa477286f253abd5eb9398f3d568","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.2-next-1616499718-c9dd6c08.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWdVQCRA9TVsSAnZWagAAfFsQAIy1HZTXfRB1H3y9HQ6s\naK26p+qPan1JHzcqIBMG3RrHB/YebGpJvE7FyCIDat9oLUM4t/PUHq0XHbQG\n4bcUwqVDxSbEU97c+wQQvtts+HBRrhsyzfHPo79wAiYVdoErhAlfXf1rGn+e\nrlcP2P4AB4Wx4vizz7TT4ImWGAFz9gFamKLnZ7BjpR5bhCClSJB4mnquNqSy\nyL6aHvKyURySgokWcHCinisGwqZskgy81S9e9kacDbc/nOjB/q2x60ZTNqmM\nfO4q8u9McVO5akIWZpkuIzVxd+aIme6vpCb6DP2BkbqcZsdgaZfi7VUVTql4\nAt3Gtl3R7JGL3O+WNVgadadhS9wmEyq89r+KqIVl3aeDfediLtvNq/smjKbn\nZwK59ysHw52Mhe7t+3bSGwGyjBfZ4nfb2Fl/c1goF12NpMSpdzatkP6eGje3\n2o8T6SnT3XbZ6KO2eDJNjX5LZciQ28yFFOarJ65XwMyrpL2jUrqeMwXM12n4\ncY61eHSa/elyoY2Lzkr+SQQeBraueLvXMCuPHBBpZj5Xvz/REj7O8XI+Whu5\nz33DjpOpF4piN8GuDRHtYZEU9D7AWAd8wIt/KS76EzQNSgC9QsyAaexxZNWv\nMj9FeCYiAPv0TNy6pL63PeWLczZTS6JJnCj0LShT48hD4ZGLNaMatFlLtK5H\nbJJr\r\n=ByRI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEwP/XBgu7drkK2H9BRSSUqkkLGEF8u0DFOPqczOknTBAiA23Fi/xlIjv3mOXp0hM8jAY2B+z77/mMfLAIvgPlwUgg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.2-next-1616499718-c9dd6c08.0_1616500047597_0.31225336555832217"},"_hasShrinkwrap":false},"2.48.2-next-1616499724-e8b6336f.0":{"name":"@xdn/core","version":"2.48.2-next-1616499724-e8b6336f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.2-next-1616499724-e8b6336f.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-oImapN+HPet9j3T+xG/gl54BHrl4ncYFXxxlVnm8ufxVKSCtSMt83/MfZBMYAXOy3SY8oOigqhbY7bBV91bRrg==","shasum":"054aab49830df3968fa2ba6e159ec3a4c63a9dd3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.2-next-1616499724-e8b6336f.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWdV6CRA9TVsSAnZWagAA2RUP/1wqjyhAMKh11rPqK+M3\n6aT2PYkN5pJGVuj9lsLKhypyXSOxLqkD4QGmtgnCsy0wJk1jCqezACWcsDHP\n+ORoIgXcFIX5llI4IPw/R2DJv835FW+jkG8brZm+3Tfu+dBjvingRKE1ifZa\nBLUOGB8YAtMqhFssCEQaROle5vOv7F0xbVImtQoGPbTiWBAIUArHoxlKRNfZ\nAL0nyPF9HeR+DNZo8g1mp7qQUnG0Ue5piRyUWrVcuZUeMSL3riUi3ai1BVcd\nB7zz8pwTVcbUg2qdbAKMwv60vHbkSo8eUPp/cjzsjeEYfEKtYamQts0TN4HD\nqOc31ZvnvUTfo+TY7QvrpG7qKzNFbWSiS0yii51lq1XqBnReR49W+pFe0/7S\nBaJtF57YnOvomvpKhP7l35eCs7aCYxSn/st2mitOvMfLoOH/WYkOnUionJzZ\n9xKs3/uhHtnXrbeAyK5yZtfYM6MpwNYvh5V04OjlPSmwPwrnOwF/KWZkH3/w\nN7eUE2of6SID3OTwZESYG4lt39mD+X6acwgdGwsEiEyaA/SSQvlPu8AEEAPE\nzDd98DYfIXQdojgiLK88R1elclJGEDt7p7Prn/nmocCnZqJU25f4zPBe6bkH\n79mb9AHU19ZJmJCLdSlpv/bWFVVgVgrqEhd1gA1BAdSPOttnsb+915V9pb/D\nz9tZ\r\n=DO9F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAqCsH/NeZC7YLwLH3qYUmkGK05yB5V2VxLGf3xyD1m5AiEAnnyj3Lw4lX0IdXrggn24ZG8/O+WjauwAztIvKrbZXu4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.2-next-1616499724-e8b6336f.0_1616500089794_0.5220682433980144"},"_hasShrinkwrap":false},"2.48.3-next-1616545702-117fc3b5.0":{"name":"@xdn/core","version":"2.48.3-next-1616545702-117fc3b5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616545702-117fc3b5.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-6d80qnulKbvFVzphplizEf+0PqOEYbF0jPu3efdD5GN/hnLQzycJoLx3ErqOt9g42sMzhIpWH/TvJkyYoX8DAg==","shasum":"4442e5852726cd50c05cdec981147974e8a5b92b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616545702-117fc3b5.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWojyCRA9TVsSAnZWagAAkHkP/0F3uN0nYeBPyT6e8p2O\nNzvLRUt6uOyf0mWD1i2oOvpd2AZZSPSeak9SJxWZ4hZ15x7O+Wi/y3OlSenl\nDWVTcpEnt78hnGnl1W5i80pdBYBm76AR3s37LU4tSqKmqSxE88y5hIBCLIHk\nqvwfB4l4o8z3TJzKUEyKQG8wmBpMjVQEpxnI+4ymZU0cAA0anGYyZ//Q1q9L\nfjhF9AhgtsYVvljZxD/ZTYi/u7bTi/DdWyWJSJhqLVEket9iOpQ/bcNv3je5\nyvkPygW+jLcg8z/3MfVpNqUN+9cY0J9ffG45OU5E+Qp0u8LeZZTc3NGkX0FR\nAa90Lc+Cd1CDPTPxhi39bZ+dkOSA697eydQB+gcl47DXi8GrWUWWDpe+CMXP\nRTeUbsGk6VAy6GowwS6P4ODNIvD29Ca5kguywc1u7rdiVVlfJZJT0rVM90RH\nL2G45SjHkMj6hWJ9QJLgM5RJBPJ+BtA93jW0W4qDPOYcN9QrMcxK7gi13y6R\nXpLpxl432WgpWnUExFx8veXsigDgTNVCtHsisos8IjEDJCPb1rWWSrRNcauz\nkuApWRjwbdU5KqTL6QFjsGiFP0f5NyZR6urb2kOTc6OIWaT7hNlkhBHH0j2m\nD6XZREOmjVtmTb7f9IjFrfqnqrFa9Ko8IknOlR6csebuEKuZfE1PQNXzoyHp\ngtLW\r\n=ARxP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG2BeCqCU9nX5ABuREFOwleo7rB9jsABY5OIirsZIcOOAiAamxpz4/DTG7EwJ4pFPcg1P0VKPDqL1XhVPvXXklB85g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616545702-117fc3b5.0_1616546033562_0.7113495696461991"},"_hasShrinkwrap":false},"2.48.2":{"name":"@xdn/core","version":"2.48.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.2","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-XX5HMQH4Sb8T9nNFpOl6PTUNm8s+CvxPv9ZhC5whrCo2dYp928vpPS9kb2pvACXSuAa+OjXM37CSAYSkNnV5Nw==","shasum":"45c3e81a0551e14d3486fcdea705adbf6d29dcb0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.2.tgz","fileCount":181,"unpackedSize":667902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWo68CRA9TVsSAnZWagAAP2YQAI/OnRoYK/CKfgF0rknD\njdWaw3b+8ED3tDRpIadBRTaZqlhn0zdAWKePhfU4BEn3BQT+JFMPkWlBQC7q\nKt1UCrefVorvY7NV0U9EzvJkbIN6LoZ4tgwErqf8AMg+tXyFo1eFCEGD/JGH\nJaxMnqYLKwve5EZDQJUWv04/UdxV8WVmA/MUtSI6LFEqYxbckO1mCM6eDIGx\nwHxdTJya80WYHSOk4+duKDN+Nq1j7Z9OvFRViX4no789Q6ZK4uDnCADKqRB7\nt3d9ZHLPh+SEn5gYqb8/5P/3IjWdxeTJiYZcl/jBtI22rhMq44n9nzX8vRr2\nA/rQVLiLKCVhKrmsssH4NmnK/9/eSsKrKc26rCNqAlGQdOVVMM4pZ2XMUmgl\nq+IYuyS4UA4mtxSJ3f9H5gTDYMVgAi9/d+Pqk1OntXEhTTE4jYk3uQbaunuQ\ngThqyrkIT9yPyorMd4C1Bqa52tziFTP337W/G55s3r3+KZGoot0dTDdSmptS\nPk31zm8h+pZVGvsMfcDWxIImKkGjwfddS2eEswpQH0gZ2P7fPyEECsYQE4D0\nAB/3B3kxg5it4C733+04swTZIX+bjlbsVrqQK9hAqkLgPJXR2g0bBf7BaeYh\nB8aCQ2URJoCjfQQ6d9WXNX+7gKZtX8Lacp3oGjMvzQwy5YYKT/owBD8S/Qp9\n57Ga\r\n=nX70\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC60vV4PHdQT3yHLoAlcrIbWBklbJWMMJSdoDQF6zv6FAIhAJmRiJDKf17zCItIijiA2WN7Sj9+KnpxdbduHF+Eo060"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.2_1616547516162_0.813246696559208"},"_hasShrinkwrap":false},"2.48.3-next-1616558303-577c3cb2.0":{"name":"@xdn/core","version":"2.48.3-next-1616558303-577c3cb2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616558303-577c3cb2.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-iSG6cpbtBRYj97IPEBK+cN67z7JuQ1huj52S2W3aS7LAI8JiDyqwWTaR6Ym2Mm7PA3J1xCg+Le6YxiVNF37Z/Q==","shasum":"0e84ce74bc6a5d599b242710cd2d6ea8afeb3539","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616558303-577c3cb2.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWrnvCRA9TVsSAnZWagAAseYP/R5zq7TEqoX2udpTckMQ\nnUR/QjbZW06kaf2ltlBtuwP/di/gDe5JtNJOTDTuDCklYi8vyxvBhxrsmQbH\nJ7u4q9k6khbcf+uCO1a7ilLu5ZKc7G5upZtRXsb4g/wJoR8wwyFyXCY7NIJ3\nkXBEfhYF1Rz9Z4a7sVcDkw7GqSeH1eFLcEpNnIEF4gCLP+2WjpVeBN+xfJ0y\nrdyzDsf3Z2yfRMLPr3MvPvScCaIm2kx2rHaLEGlOEywl06lVxsZM4J80GTgb\nVNUWl59Y+16yx9fDzf5GFtosy4ktlvfCaVtEVQfcrXHpp5WHL9p4umvjcBDB\nT86Uvro6NwbtjJUI/bHb4q3fkJINr9Vcarsft3xFM1KqBNNCc0Td7V5KJol0\nvE5Rb/E+Of4cE53uUY7mn+Z51Ufgy9+HqhdIjrjvlUET0YcA5DBoq+ceTxt+\nYrAVhw8EVto6DJLdoHc6hYE9/5y9N/SXjYD7+epN+rmgPSzOx/NOohez73fU\noPmSKekD9Vtw+D1+CANMDMql1qj5qDaHlKJg9STwbwa/tAc1v0IGOwmEW3K8\nBzLy8SWdjAH0Xsmpo1ujqhHLBp85ogO77dV/lSwiPrVbG/iOgKiNg4TsSJ9L\naQNnan35WS69GbFxPowBNYL/X6MJoRafRKkpnDK5pXr9N7NhGbIZFOsSlCfE\noMS+\r\n=TGco\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDWdGzvQYged3XpNpZbANSf3Jjzna8JHB7+MIGHlJewaAiA4lQNuY3a5cS1YbFOPcexnjoc/MNZa7yVJvWonAEcQAA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616558303-577c3cb2.0_1616558575195_0.4505208991010994"},"_hasShrinkwrap":false},"2.48.3-next-1616558335-7d1766d8.0":{"name":"@xdn/core","version":"2.48.3-next-1616558335-7d1766d8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616558335-7d1766d8.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-WvxyHMFpfU/78kd/O8R7T9nTcFU+dvuJm84PRKaaN8cWUb9UiIqcmEnNgH4hWKTHRQ5ctn+W/s4yvzKHJWlVew==","shasum":"ce54ebad3c42fe387f79f1ff6b73e5e61887c5ed","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616558335-7d1766d8.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWro/CRA9TVsSAnZWagAAt/EP+wdYVYnK2t//+m1YUuzX\n2mOvWfQXgHh/mLSr/VkbowXTWBAXoZ3pcF7Va9VNerI0R4Fv3wLISsiEufsL\n2ELp4H4pq+5FOz7xNxZLelAK0iSRfJBSalf5hrXyYFq/QBdUEh8QoOqmiT3G\nfFTPPAOt38KibZVm9177ExuwnShz1abIBBMYTh0HMuAMTZTbm9FkL11FQH1p\nJMxoUzwl6A+gwjV7Pe9elGEMihgJy4dOYDTFmytRaXd5N2w8ptje3r2QTI7m\nHpXCVNyE7pBf+L/upWyOX59JYSO/hYKUlaze/QZ76Isuh+XgAjA8J7ps7dM5\nJ6HbyHTMtV0RypMJ+z0pky/veZzzowgdO8dHJ9x9AZ7SjZDISbD5dXkxC/7T\nxlEjjuS7/U21D3IwzDnDafJyYkcP4nNfJTGBHnBI9d9cM7s80kJH/O312LjV\nP/fftQgXkEc/mHXvqUnbPBdJqZtRJ+x0yAkZuAQPbyCGMiQKZ3VB3Wr1XzQk\nRtdLyWn9Cd97cl5efRXBxppYh9/+Gb9F9OCpa/AMuJ/RP7bI9bnbHpf9yEpQ\nfqOuAr+IEVr16KjBX/hbnroLGYhoIqvJB2rPwQ4E6R0o2WNelRH6KJCta2Xf\nLW1GFsuJKJgXCxOEOm9Kyr9KEtYzUfnszsZDR6BGJq4XtLVSdnurgF3KjVzY\nWosE\r\n=gZ2C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDKRGGTVu/BvO4IY0mvwmgaaj0jXLklZnsjpQcAhx0AwAiEAw1HVMBzumErKUkjMaMFliMYWCDB3FTTxFnGs1moG/co="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616558335-7d1766d8.0_1616558655101_0.6111038354215683"},"_hasShrinkwrap":false},"2.48.3-next-1616559231-e84cc609.0":{"name":"@xdn/core","version":"2.48.3-next-1616559231-e84cc609.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616559231-e84cc609.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Fkk787z4UIZCbkQwyMari16Lc0a6jTkMK+Z258ex3P/z/ndVjtweE7IDkPROfN19xiiFn7P1ll+gZSV8mKMaRg==","shasum":"40dc96cf3cc81bf1c793f231488fcac8ef323607","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616559231-e84cc609.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWr27CRA9TVsSAnZWagAAQYwP/06rYu7MZhBe+1NwZBdA\nMJDCTjcXUz/U70KqpyGmTrjejHfgv+6nUcPfhm+V0Z7ncLvQtgxYfIxpIsgi\nqM4lxLBKn8S8RKFdC3NfMlW5i1CWIm4gUcTf4JZRbQ7Fgfc1tB/TIVPWBfLp\nYj2oW6TCtcA0SgPqP1pfnT1+loMbD309DrL2VBGsXdbvDDlljlfHFOSYoVtI\nVsFZwlqyrmy/eEP+ryBG0wzqrFmdPT87qUtCJ2fcLMTbHm+W3kIc7X5We9Ur\n9u3mzI9w7+gFZmPulFXAMXdWIFe1xGxCbp0PUMd4/d8WMtuhUScc7dJ05yJj\ne2VSYRkRkX8kjwmknaCA6hCVX6UFNg8x9DJJzj3p8fEF0epRJV3aSd9b8HCB\nr3w1WXHl1983jAyx9NVfE7X7T7VN7ZUTaFQ7bVY2Kg74ACQtutU7VRmcI5bF\nz+36m9Lp+UTFa4SVF60nSHoraPTjVgY/zKfiz70DDLu6v0iXeQG1AIzIvjj8\nfyaUt+UHa8Db1sd0eYyu4ItyATUuZnpIYw0nXDgc/LNG8yvFsJqKhyyMYe1g\nSAYBTCcGB/1z9/SRwhyUQxiTFhwRZ6F4/beDfCKBUyv8PoUKR8C6gFC6AcBK\nbjTFdEN0r44vYrOW9257hajuNH5oNDLj0+4b0O32qQn7dtGf+xUyZE74mhN6\nWHre\r\n=1dyh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB1vPpJu0rhRHCDaLs8yvMnPjWNFMLYM6VG44NgNzT2sAiAzaJQb3B1Wot837IC+cwFIUxH9gyBokrG5IWdgnFGUow=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616559231-e84cc609.0_1616559547169_0.19288561690755746"},"_hasShrinkwrap":false},"2.48.3-next-1616559258-607bda4e.0":{"name":"@xdn/core","version":"2.48.3-next-1616559258-607bda4e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616559258-607bda4e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-TDhLoqgIXk8SeSKw+5pfHkoW/hhRGnZ4yPySuKj7klWqp4Bxr13vAKZ851plIMyG2xcTCkBW7z0MGbq/qPhkLw==","shasum":"f5b046d65c52b79966b33c29078eda3cdc83abeb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616559258-607bda4e.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWr38CRA9TVsSAnZWagAADw8P/14jYY+ECP/PLsayVakS\nlkGIABgzQiCXjAWmGni/X5GudMNNbEG3Mlx6QDYHoJ3bCz8Bg7dcrvmOxIFg\nTBLtgJZZiH/oCvvDt4c23DbHomPqYuDES11cm4tpzhRWUV7D5As2Ik1jLC/Z\nV+1eOgtvrl/T7eCfrooFnWw8INVvSP+lylJ8Pg+kX/hXQgIxobAhZ58SqkjU\n1EHozoMqfm7DJEAZXrjb+BioG7Uk3wUVikTLDNCaL3Wd1CQqHzoOIqg3S0vG\nKFUWtzABSPkH36Mc0vS/YsJAa3M044OSALCTxIsFEzYiZNgpChin5MpWlldj\nM2hjMINpK2Ror5mP5b55NwRAKlN/xjSfSE7fB+RIZ+/FKZ3PUHU+FmS0yt7r\ntvL/EBonkOogMx2aDKju0OXTEnMjLPt7uv1Yn2z2t9ilmJicjo03cAJ/FXQN\nT8uH5wEh0+qrgLS7D7SlbJl2V5W22ZyRfXuwoJEQ/MRVjPPz3RglExl049vh\n6Nc1fS1Ae0BsW5qeaiQvXEvAeL4DwOMbXKxDrg9sZQkcjWuBmjPljHXbWfk6\n6htpeuPIdxTJQgPBiDk7OejZeZmyU47c6GHwOkOZea4keDypU7e86KlRjds1\n4k6UQ04eOt1SyzJ5adVKSfPtc73xvUDFlHPRHSUGF+IEkpeds7QoU+QUxX7T\nTPxl\r\n=U1IN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICLslALf8NxxerMmSFFjr3lrN18hKv1F6wDn5y4HFQUuAiEAj/Pl4xpawDpR32hjvfTydoH3sWlO7iO8SvHYjFK253g="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616559258-607bda4e.0_1616559612243_0.40034566066516875"},"_hasShrinkwrap":false},"2.48.3-next-1616583490-09b87ec4.0":{"name":"@xdn/core","version":"2.48.3-next-1616583490-09b87ec4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616583490-09b87ec4.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-W/EUkN1mav9Z5LO/G8FdeXKGPDYa2Nw4fyRzzZtL+f5dTLJ8Sd9SdKhaWdQRwhQ1R271rthHOAdUVHQ6O9Wirw==","shasum":"ca5670141270829fd65c903fc51a1e78c7f40eed","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616583490-09b87ec4.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWxzMCRA9TVsSAnZWagAAJKUP/jWKBnqRphDwc6HqyqvY\norb+rvA4vTJSipm4XhtcC8EzejwrEub3d13O3yCfKTN6be9D/jaLzu6/QUAd\nVlgk3Bty9iYn5eLxbEHItwJLQrvqlyXyRHPDAFD3iN3LMNRqA4FnIeQygnjA\no102cmBmPHAN7CJ1xMuxDf9NGsdz4MMpYpONrEl5Lfdbc6BqbbrxmEIxidty\nbqeUFCX+/r/JKwILtyB7gFmXQSrkkAOz81pLKLxrvj3fmqdHVMcTDs5tPwJM\nTc38oxdQ0Sf6g5tnS0mOMdaiusRQuLpyjql+V2Xsy3peYxDOnCL9IUJFwP41\nmLG9LFgNhaA+F7s9qGuRnCqR6ZXOXYzCuQC1HP/NQk0wWmIoGR7+01C5dh3s\n/1wfJMmac0n7ocefwyzJ2fyBjDOwPFs/PIabd0tZ0Nt2YMtrzFsozF6ifa5S\nWPElKerWPCSN+F0BDC0T7tLoMw1DeULR2/gsHMwaVVh5DP4+OaWf/PrODkeQ\n9mkHhIP0GiO2PjOZJKOKNeJ6tDll8EF/gdtKHezIOW0611AjvMst40ACbmKy\ndy6/uouS8r0XZGDJTKGrMVS/qVDNAf9O1nuf/we39VhC8PNCOnaKuGNHyGGq\nmJ7fkNcjSSQP6Bnx5Yj4gjuRj0QRYd7lkH6PcsgADTPXrfK7FIKN2RNLGUTz\nZ6r8\r\n=AC0d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6my8SFF/qkYfJTs6qTaxeDv2brsywBeqs368PnuyTOAiBr5KP4qTSTPdZZnj46zPoYR2T8DPvf+Nmr+nAJ2UAtEw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616583490-09b87ec4.0_1616583883614_0.735558205983931"},"_hasShrinkwrap":false},"2.48.3-next-1616585208-09b87ec4.0":{"name":"@xdn/core","version":"2.48.3-next-1616585208-09b87ec4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616585208-09b87ec4.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-JUuSxsNMaoHWyl618azBc0+dPRpTxoFfRsv7cnrVDS02lGNG1XcsetYVFCGEUGEYEv02YjaWqplscmWhaHJSyA==","shasum":"ede8bc743708c433f6efdf9d8cec190f2e855394","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616585208-09b87ec4.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWyNFCRA9TVsSAnZWagAAZX0P/RcOHqOFv4FB3ALYvNBU\nXyaKkbFZrIyu+z6Xo3vwCcA8eFi6RpWdnm10v4mVuR4ormEOKVPrV6EIFiYh\nr1oc4EA8/uoF9bferH/dULYHpVH4RbrdCFboL363cQ+fDVyn10FMiT0ELtMR\nu8D7S9INaKHE1tRPBk9JyeI1bPgSuchL24MwnUafFQM47J1K8Y9rVWS3OOpL\nQWuR9dl6oDn1amCFFKxJ2yKtPOdU3sV3FUF6Y+K8/cn0o5UT9MFbkt9/Ywdh\np9f+WDmypa5hS37Ojc43LcfF75TYpdrIXFaY6sPDw568DlaFWykMOwf7UgWn\nfm30l+1D77NrOQ+p8avOC7OSMYCqYjxeuJgha+VMn0yjFInvpX7JlHI76Hyf\ntmgTxIvBaYMjVrcyWtn705efvDKCyG587U54PYW4Mix9LG6P2gr9uujqnxQR\njmAJ08kC75wP2F67dIuREGLu1JB9M16+A7ICL9uoCu5r0mP0WXwAU4YYbuTs\nDKADTsix3JRasxvXGBafEZKIyRDNLNYgo0lJAdpnIiDvApSkPbmqRHBlGfyL\nRlubYZwlzqdhPKCrkReEswCqEm9OFISsZeLILDPgUBWg1XL7SJvHM2d4l8kY\nYf40903E3kC8D1OCdCKoRbfaHuLJEp03qc51MqFq99RxkT0whT1ABuq1D0gJ\nIFcK\r\n=lKiL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCB2fFwsu8XSUjCft34/zfbVPgVLpe/6pswq8E/P8l7wgIgIwQM772EHUgEzE2KQAQ9myKWasqIUPja4LRIgGqKxVU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616585208-09b87ec4.0_1616585540866_0.8281664214983351"},"_hasShrinkwrap":false},"2.48.3-next-1616589791-1e0b0818.0":{"name":"@xdn/core","version":"2.48.3-next-1616589791-1e0b0818.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616589791-1e0b0818.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-lLaK37nfOgW/UNCkjznUgtAlLX0OtMjMDbjNEIQ43fC/I2eces8Sr7phG6ft9WaddVQ92BrUY71xHFtONNeDoQ==","shasum":"b81910e1195fd51165177f55382d3fbbd3e35b53","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616589791-1e0b0818.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWzVtCRA9TVsSAnZWagAAUQoP/0lOxWM1X4hpS/THew1I\nmhuyPEHGtA534KHlXKYLklreK2Cb2i2ZBqplDgJYkzcDxH8elhOh08LZ8o8F\nn5bw4xmP3rmq+KoAiJxxUMoEp7AoIyKwgAIXlfCcXpn3yjvlhF4mCQD0JTwt\ngekzYB2FBTVo92oFNSDZGSxV5rMg+EYy2/B/09AA6fnf3EQ/0GspNc+7JbpD\n9YDkfmCBY1aO1eqv2hTYhI27oYtv1PnOEHPv1+ZbM+72sk+6QaNT0jd2CRTj\nP7H3S9fxPc8ivh0GHhLtofGmOl8DFiftE6yo+ra8oye6GOoFOAco+4HJ2mYp\nLKC+ac41NtjPL4lMr+5W6+lc+0k0QCpnAedoyzWrXoy2TxbugnHTVWclTo3I\n33rzH/SYxPGETYAyvsaLvhy+XiKgtFuVlAqm6jasuAjw7ePIb8z0nftbmOha\nfZhHU/zUuzGXFaVMhZsrJkE+LP9/9j71wb4ov3FsEzkq7UvGI4iYRswsHEsh\nwtaYc5kySKHsVHlT9Wp/GhsEpTy/VCSPDYe4ltZ6WAMKEQeEhb8/aDrBUIuQ\nEkXcQNQ4cJVZCNfInPxvYvvTYGCYIu5BxH/zYD0XQAgvuH/+GugbAWzK9cZa\nrqH6V1N2d3mOAKsyAE3HQUUS8gSNQZTFFSUYaBCXuFAT/UosZrYB309Q3Z6Z\nnVrf\r\n=1GZ5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFWqZ6lvr8qNxe0UIv1F++R0uRI2UtV9kd5ZwngmAFpyAiBitIMThjQw8NJDBKw8W0GZfOmy8DOktZTS5nWu4NcQ1g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616589791-1e0b0818.0_1616590188617_0.6498488811550802"},"_hasShrinkwrap":false},"2.48.3-next-1616590481-cd8836e0.0":{"name":"@xdn/core","version":"2.48.3-next-1616590481-cd8836e0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616590481-cd8836e0.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-H7fjFTkAoLq9cxE505XlB48QtvOLm7E2qkB2lSDRV2NGZyryUmn278zLrtwWvhrirrCpRGBmuHv7tZCiUTbn5A==","shasum":"4a23a4275ce9b54501e5f666206a5e8e59c55c39","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616590481-cd8836e0.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWze7CRA9TVsSAnZWagAAw7kP/0oc6U5HXXdzNJZz94yy\nBBnSduY59zcIDhm+OwCxFMcFWCpA90ntCzmlbCL5G6LJ446MRDb1lQrSxNoE\nZVqRB24Su+chqu9vsr1dP3oFSAzjr2HCqgiHjCDrT+qMQtqHQNT/jBXnkwBO\ntNUczzuwfIuBA2fZaQPzXixwfenv+uMtLZ5/6Awdxs5q2fOU5/v5yz7QFZVp\nlibuoUxJcFZEU0BrFWhqNWuUWGpeGIkh8f3UQofqYE4/9KTIubXZ7Wl/43bL\njTS78tr6LMQtdk/a6MNtbQklD/jdVdGimUJdN5c/l2CEwpYv6FWfeg229brN\n7K1299T7zuOK03+e44J08Mrg5Es+RzhvOCC6h7+0De/wX6bZ84jdqMq87yh1\nmBGVIEIvJZ69rY5/QM45+TvvxmS1nWlUXBqsij/VnDME5NF1IE7RLgrZ2Oy5\nVsP5VZByG4Btf1EDdn4LENav0sxE/VOv5csQ17DzD3S6e8aTy6Mk0gmSjrUX\nU4n2QTOckGay7KenH1v63CxR7UfxiBVbFES15WLjGqMVknkzeGMifDJdNctc\ntIP3RDHZSM+L7eAuSnAbjoiTFA4x8wYoQqkLE4EFcntwvOOjvxorpOxgTO5g\ntmp42QO0xE0zuYyshwPEMk0ZIprjSVYjQy+jve/zFqe1vT8lhxoOXkqege2B\nDKzn\r\n=bGEc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCn4d54S7FGk0w4l8MLwjxrxrVmrHijX5GWhbqVmIYZ6gIhAOPn5bDsv8YlqDFHgUSQMulrj/f1kiRlQ+1yHvFsx6JY"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616590481-cd8836e0.0_1616590779027_0.23546214087751682"},"_hasShrinkwrap":false},"2.48.3-next-1616612286-c528b585.0":{"name":"@xdn/core","version":"2.48.3-next-1616612286-c528b585.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@babel/parser":"^7.11.5","@babel/traverse":"^7.11.5","ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/node":"^14.6.4","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616612286-c528b585.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-P+XtVv0sQoQdzzUypIHb0gA7YaODBM7c5RXci0QFlHssNXFG4d6sOdU+Se0vthpJmKAA9WUZsZXQsdaCuJ15jw==","shasum":"d8627576804f455da1c077e5151a2f46c2f771a7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616612286-c528b585.0.tgz","fileCount":183,"unpackedSize":671264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW407CRA9TVsSAnZWagAA5NwP/2UqO0s316xDn8/dMo3L\nXF+ZYQg2xE1joN3B0EipqZUk+gKUs7II0gGOB3IJoTfRvH56hBwgO8FQyh/t\nKEcEuJZNXPt/U58LoGTieRRo8U6J7QMJWVpMPibjwAE8gwSnhnOfnNnpSH96\nsW1lLUXgZfhRGDawfmc9Jm8pKnNhnMM0bFW7ibyUgfer+ersGiibu93n/rjf\nCAzZdfWa+Dl7qAHNgkGQZdNh1wwKO/XkJ5qyMqfbkUoXXWEKmh4UEJ7sVL6V\nfBbMISI7VlLISrOSfRzzohaKsehdNgaheSzNJB690qMbAeUmS4Dq3BFxpmLV\nn8Loyw/rknqiZEffnxtnDkWF3sD5rQ+Oryd9dw6FcBMmnxYYvyVnbI6vlmnV\nmztZQGGU7UC1fhdVpCEgkSnIDf4OKf9fDKDEGf41P8ztWsnK1wvFhp4uBC6n\nVQ683l8ms4RNLl9oPbxu2AqIeRmeJNVqNRPYPKRa3xWE1c+oxGctwiGAcrIA\nI/sl/AFsaUuTo2mJtff/tyzxzD/3+PzZkWcquz9/4JG7vTvNAjQBJmYE2wg5\nnAQm+CpZ5qDWp5yYCkpOYbnM9nE6AOuxof5tiU1D2Ikug2uXFi5jlpZ1VJdQ\neuyO4YbcwMLNGxCiX+Hniz3w0Z3yLRbiZQGspuX3V8WmvfKxuG4bq6g6QWkq\nXLye\r\n=LDLA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJ1d3NW54QBr15EujCeb11Z5T9OlNQMYS6IWosVv5WbQIhAIcz+8f25M+0/e6kuC+p+l35rKXpsXg+7BkX7k1k6Vxp"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616612286-c528b585.0_1616612666637_0.4786159565136918"},"_hasShrinkwrap":false},"2.48.3-next-1616612830-cb2f0a52.0":{"name":"@xdn/core","version":"2.48.3-next-1616612830-cb2f0a52.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@babel/parser":"^7.11.5","@babel/traverse":"^7.11.5","ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/node":"^14.6.4","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616612830-cb2f0a52.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Li+tlI4HpsfOZjjlX2pi54NJjiBuYrOPN18PJomHkwjKPerLuOvOpnlbP0RwVLWjjqygY0J8GNCIR2yYty+4Mg==","shasum":"d7678a965b95587c6652ce3212af2c74c010b071","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616612830-cb2f0a52.0.tgz","fileCount":183,"unpackedSize":671264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW48ZCRA9TVsSAnZWagAAEvkP/36hF+MGRVfUXD+yjXnJ\ni7g2ZXUZxSrP78Oy8EZpUrr7iw7Q5dGjdTwDBF5VkYpFH+4lj3h6cDgFGNNS\nApxkVrabgu0MvKcR8z+KE5u8/g1dJ6y7IgRId6g+zEHyEdoj9M7qWFJSdhEj\n4Nlj/o0mJ61R4LXdLlsGsCTwzn7Bde/wE3RbVLhiiNxTYm+KTAOqB0c9GdEy\nlLBMWyg3QiO6tvM+t1LVDTCqU9Edg2Dt7Axq9XIH2Kq5sWeU/y4zfPWqtvZC\nvSXUJhF3/jfp+94F0BfCqUVMJFyiiVxCBh7qy9oFfkZK/Lep1puVS6NYR7z/\nYR5lPTjT9p8f/1PmTxPxPQqfeOEgezEoi7ogSwiN6u2kRDuaTvhbupUcCJvr\nNw9BCAcRObKF/8IUE8Pjr5+WJS++ESxRFQ/pNp0EwUwwBA16sgMwLxCS/K7x\nBuSt0Yf/6BYM08+0vRsfiYcNUJeF/tBtYV3WDppVLFdAtrASnkiOGf1MI6HP\n8tCeWWjE2RbFvXbrvp24zKMVweqbyCyLHc9ao0ePGrumvgHPUpA/ZHRYRusv\njd6F/J33DXPXvVsBLXR81ERxj0JkivZN80G3KCl464zh00QF7+R4Lg9GBjHE\n2cCTILWnYRilQJd2luggrmZQtdUHO9tc5scmZ0pGeTgkVUlIxpw99CaVgxa6\n/CC7\r\n=4HD2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHLWOjLvFvrPyk0iGQ2UuYTxjoOSDpNLeUWZup/fo/tXAiAwZl2gFU/M8nWJj7lN7mxfoi0loBBjKZlbL9R5ph6kTw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616612830-cb2f0a52.0_1616613144977_0.3409061431133553"},"_hasShrinkwrap":false},"2.48.3-next-1616674161-97579ce4.0":{"name":"@xdn/core","version":"2.48.3-next-1616674161-97579ce4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616674161-97579ce4.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-5O8/C/Ny1lYkmr/8+F7PASzR9z70iugSDWBylOOjxX8pNzbRl4FIXRlFrCSwpq9y5PutLfeDAz+dLPq9UrxJgw==","shasum":"101382fae43e0875e93a41a9921732db9dcfd579","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616674161-97579ce4.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXH6WCRA9TVsSAnZWagAAUAIP/RcGAnYn9nriqrXkwb1a\nLECzGx/zZFA4CwkQMsvwweqE40IvhoGhNGdt8P3q1hHbAs9vQ0oCwqE2yjj+\nuuCROSb53aoeXdEg8b55GtYEpIql/TkHK6BspRlZEbmsBikQZQ/KCYQ6LnME\nDvTtuwn2IkT3QNS4ks2gtscxiMfOJjH5HbnMONQgZdA0uH7bbAsy+ckfpUVi\nIO4CfUqL/h1IVH4nCVr7fQXCz7sliV9zfnQBnqepaCEH5ra6EhHZ8C4SBNWO\nyTWVwpA6zXyPNnd2jUpHzSoT7vbw+Uys/bMdK5qn4g0jY8GHDnkvnKCh+yWk\n7Cp6wVJjPskONjDUW8+kjWfZKpgw4s7eeD5M1kUfRoFzrv1U1aWECfXh0hrE\nrBl12rnz5MqXtUEYjKkzH4QtxWEOGK6yi54tgc2QqyF17atQM7Slm0t/oOjH\n4FJ5TUJsD5WRW0/iTl7loRfknWHODrqmHDhgj2TwuuChJ49OR3aA4hrjGOlV\n2w2TiiKD6Q82CzwAqBD7nZdojrkc2jXXE3+rogR1173DKtRcrkpYaG4u5ade\nis8e/a0U/2iFUIv+/2jXWpZuaqE6wYR2S85wZZTMRt8oyad1kwBlpAdsv2Si\nitXVnHat+WGxlwEu3g60NJ+uFSbf5FVToMJdaKNPfRNSicuAO/D3euKfbGSS\njQ6j\r\n=mNlC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCR5hyuRmPfq7JbHD40i/AjWGRn6WxK3WI4bLuRHDi+tQIhAMIj+p+dgzCG/OwL1dsC8hAqXVxXXpBN1tyfNHcpP4dA"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616674161-97579ce4.0_1616674453800_0.0576081022267565"},"_hasShrinkwrap":false},"2.48.3-next-1616676832-d64b4818.0":{"name":"@xdn/core","version":"2.48.3-next-1616676832-d64b4818.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616676832-d64b4818.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-tVJODhRRWON0eSLze60BohYm6CA4fGlrNtrdJRQfZgtElUmATC/ByXXq20BJr+N0FhFoffYbjnC5TJFxl/6upg==","shasum":"25a13f07cc96dca5a9a7cdf12aaea8cce9d34124","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616676832-d64b4818.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXIkxCRA9TVsSAnZWagAARJUP/1rs3zD1eG5jmtl9BMKR\nlszW0+k5DFQYjsRhE63EkbO8YRzOGoPy6RI7Rh50iHyZA1gR58q8soDcAHcO\nj43xnx84bYk3+hxW2lFVZ/+mC/vDxlW9Y5l/b4B/bdy7PtlAoLNbgmaIsX9f\nVK3dLypm//TF9Ouk5ZK+AzZLO4uOqtnS8nU16sVSVHmjYqDPwjInapawEMEi\n5moHlmjPVkpsUc8OwXtQU7oRs5XRU1QIPGtY6N/ZbAczo20oxXa2QRDZuVYR\nLfe63X9FjI4HpuCHe63kSUKkILquQY0QiYeJO75OUuWL+FzgFxBnmJYMD8xa\n4aNBubFbW/ACKdWKChtEoVJ20dbS6H2UWbvdNuDQTSVCxrkygt3GPw5D0Qyp\n0hU//6Sp/xKV1B/JmoSR3f9+FaWvHwcqydAyP2rTGTFUKxUnJ9r3VOS9u3rU\nyh20lXZwRmGlDcdYd9GzEm3cI4qEz2SCkZC1F4blaoNftw2/zolgNaju6L/J\nC0HAlI77yfKikNYWqUWSnuyr8VbhK8CcByENvAcQepGk5tTxGgFRIGdzOojc\ndIZVn80KWXs6vmlj3pyQJoX44xXC5jh0pel4VrtqzCiomkRhNHuOITnsQDJy\nX9cukZ/uTovru4nhzCP59ddufgNwbwSu+tGsbMao127dX9FPRSjpc6veS580\n1mgK\r\n=Fjsk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDUjlcNwfQUcjaTSMsUeTp7Cxeu0xC6LbgnLuftlhkkNAiAFqwEppZQSnQffg6AQdabakeLiPk+EUTIsGXlIFK3rNA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616676832-d64b4818.0_1616677168642_0.7901279103092438"},"_hasShrinkwrap":false},"2.48.3-next-1616682369-6a05080e.0":{"name":"@xdn/core","version":"2.48.3-next-1616682369-6a05080e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616682369-6a05080e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-g6evlCIoUn6EbGdme3z9PYQmU3KQejOLixe6Fk3Ul39dKTQQf30+9NilWXv4D3MCA2piuF243zNCiz5zIdDjKQ==","shasum":"16a54173949028550a83834aad87127949508334","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616682369-6a05080e.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXJ7pCRA9TVsSAnZWagAAajAP/RHz5h/Rvk/ca/ZYwvwA\nRMXeDhdA3hAEHLIt9gbPWCWs9ZjORbXMnCikl0q16YXGYFoxc1MN4Lm4oC+5\np3wtCQu5nAAgsTEmq2Aseojl8nE9eIOYcjymwu+WTCRHoun0IxN2I8W6ULNh\n7WsNFYdS1jOpRQOW0TJFqPkpaUBjtKLEhghhE9Do0Yps//p4Ilz9x3rd8+iZ\nAo6HYSAl9f2fQmVgGK2MpfGCNG3vFo6/YSR+iinpYcM7HI1sgzBBclRqgVxJ\nDCsjRaIQGkxm+hBt8TqFnyHX8DDA1o1+RXKcRGVQu9eNDgciPjansE3qA6Ar\ndRG2P5PmUHhyDojGZ9ZCarh8Ecd4SUMjfsw4jR0mb33Q9SPOEVZdE6iioerI\nk6T9t9XWtfS2j1f1fl8ZzyLzz7wovMSq6KCjdkQp7Zcn0GYMkTFnd2CtgMka\nSAID/4hBjk0W3/iaMSf6mkxTsmRTRN3owzqL1BVqMNpyW82oa0SQvSoVHbYs\n3sQW5r6bJsCNq5YN/46kiir7rxPXVGSmGszqQh/A37+gGJ74Hn/UQeZx0TW6\nbQQaR3S4laKh5WV1/fABn8GH4ETHqYpOb7CzUtFibjnMNArYGNZPmr6sh4ct\nkmz/wOQBaLHeZ+i4JA6yvG20034W4bNxVlK5ub4T7NJ1TtsDaZniqsthYUHv\nl9g0\r\n=S914\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFbgOWV9lSmYm0u2z233K1SOFVMXM9I8/HGT51/K4DMgIhAMygrcr7EVq24wXorzE+5ZjXLo7poSOSW+LptlgUlKgC"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616682369-6a05080e.0_1616682729297_0.7139312834137501"},"_hasShrinkwrap":false},"2.48.3-next-1616684911-faca1f4f.0":{"name":"@xdn/core","version":"2.48.3-next-1616684911-faca1f4f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3-next-1616684911-faca1f4f.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Lv20KzK7fhFd8g18/J4k2vHDooYCXpOqjXbZsTQKl/RaKlvMMx4ZvEP7Uue9Pd3W9UE1SQgElOGpfJmRyfCcbg==","shasum":"7552af30768c2b0d50443eeda3a19e6ebaca80c2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3-next-1616684911-faca1f4f.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXKiYCRA9TVsSAnZWagAAzusP/3bCHRTo+3crTYjzON4Q\nI/b2GKLb8bbdFTuWGjmTYW353pF1mJWU3FqeTzRvdMw/sP4+PcxSBwwFftVV\nKV591l5WBACjD1zRpzi8zfjdaJwaUEwZssuMYHZBCrZcY4rnZRsL9lPez6zq\nvxYO5LDpqSkCkOzTt+97/pontTaU6Jragyg8TLk0x0Rd8Kh0ClWKLg2nYrKF\nzh8s6eQ2eF3+Sh1VSiJzd2VE7p7/jFdX9+oRsCgL+9AOfZ5vLyKEvZbOwz9+\nE6r8QMOFRVgrxO/F6jdFAioMLhq90IzGEPNgKQYeFOKk4tYQVJtL9qipHG9G\nN2K+qxO81RiaVp93fLBqV5/erqQwx3HNjwV9fh0aHPNViladEeXyPafqHKU5\nwT5OvtvulJwToM0WvBNaaBE3H/Hss0+C6CVqBSC1PN9WLNsr1owyC9r9gdWe\nXcABoEyUXumgyjfBK6wkOzPGb85qua03lX1FxlN035/Oo09wic++KO+0fczN\nEij/I46fq7eBoXCIy4EBVtcrcO5EG+x8lj9/yWFHFJWDdvlfaLJBjtHfSRdq\n+gOIIqEMV+20Is9W6Eg9XzO9JFphiZRgXX+bshJOZdut3bPbYGwD57L33of3\n1zsJcOJ9yIdGrmtxQRL6GvyfdKC7z8REczkWqcSIhlA/KIKHQn4lnYgaKjgA\nhCoh\r\n=FwbM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFi/qfm22nLOnsZzAKOzBxWVsRLEFuRdEyTxrWF6ao7BAiB/HUVlNCssOXKn1jUyenvxqzYpbm5/AwvkZEVNiDKfNg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3-next-1616684911-faca1f4f.0_1616685207485_0.08554160493085616"},"_hasShrinkwrap":false},"2.48.4-next-1616691063-820c9b56.0":{"name":"@xdn/core","version":"2.48.4-next-1616691063-820c9b56.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.4-next-1616691063-820c9b56.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-B10KI4TRF1LdOJ9gDUas0zIccBlB32/gElSA4myTMnbuAqv1VZNBPtEQ9YRFXuhf1HTEtSuN5VwHiIXkYAiulw==","shasum":"122103c965c0f96df033753a056ef8be6029af9b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.4-next-1616691063-820c9b56.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXMCrCRA9TVsSAnZWagAA/q8P+wYUpm/p4OyiC1os6IVn\naMLWKTSiJcN4daPrGLb5NWWRFcxo3bM6TOu9TPdVT2CFBid7Lm0nBEdhl7wK\nzNhYJcSZw6FU3W0j/CLGJpic5uLcvaeEO7goX4RvLP2Y4TvE76g9H9KzTWd/\nENU+8/Y/CkJ5cVyzBmJXfOp4Rs4EBuSWOlU4P99mKddzd/fTJ8h8mxTdOuC7\njXeWCDuZ8SUXIQIh+NDWap6McsYSBEkZexoau9nXNyGnXaDoVieMquOftNQp\nttIsX8Ou8Z8rLrU+GkeFOXmmuTsZNAPJjrjPTkWPchh4KIpCWzUhkVMJDsC5\n+ZPzNq2c8A59YF9bXqtP3xGPW5LYK9vSGNeocaD7YRKm5sWDlm9nWDJT5FQu\nn4YipwJX4icaDFpQR9sATN4FaRiBONWHnhCrkKK0PM1MssvBhqkKf0C2HHl4\npAfhrMmQXgpl2m5HXJbZwLp/o9v0nHz7SaqgyplQ3E4JSvt9M1lmfX0JkDww\nG21ffou673q//YLWNrN92lQ603V2xNUMaNtLk3FND5aSGlhDlXqoXlyedcyw\n5JLcRSKeCHNr5tJcj1wBcNTglnZsbYUBmlVPOrGfzlds5G2KYjAxzjGvzfRj\n/gxSbyd6yjgVz+CPKOK6c5XKK+DSt9Wfk93T4Y1r9X7zUk4qfqmo/cbmYgRJ\nrnCc\r\n=Zqto\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLrKffwdbDJLBXM5uQivAc786SlaalS6S5syPETMZEbgIgD/xtvjFBSDaozhrU3aWUN1h17PvgmErqo63FtBnaVfQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.4-next-1616691063-820c9b56.0_1616691370928_0.10630331570353402"},"_hasShrinkwrap":false},"2.48.3":{"name":"@xdn/core","version":"2.48.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.3","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-6Wzq/1gxvyDtjA57YVzhBmioTgkJhiRNu2wOUvZw1oyXhzOp+lzbHr4ACCoArJws0a3QhiZHf8hURZzCwKmbHQ==","shasum":"94a6ec36e247768200c1fda1007ba1acf2c831ae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.3.tgz","fileCount":181,"unpackedSize":667902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXMiECRA9TVsSAnZWagAAfWsQAJYIK63ZiQNh+mtoRKwC\nXZyZ/4LjwvfMXW0almbTMC2HmxZe0Z9DN4PeVQnkG6zj2U9JyyG7eaxWI2rY\npkItBZofCEM4XTOtm63TR/akNbLlJhsnIu03gX9tm29F3MHS8aVb8GiFLNHp\nYExPTor7e3vopu9PIPCpc0cUX2zjQ+3lzH+em6haRGw3oSTL+cnsiny20V+7\ntkNH83zakpOTb1L6QPK6+hwzym64iL6gPk6HtzD6m62EOci9ZTcfPETfddK1\noCVNqCRyXHzn+967hWZfF+wQwLPQ7pEtYwFynDRFW2oIOlqt6hD1MKvdsqSI\nGvVBlFtX23rcB0T0mzNz2hTkxSIfgrSVUwHKORjGNbjbhLZeRRIA7KGBVzV1\nbQuIIz+J8wMQDSYuOdHXB7UgYAw/21vqkq7fWVjyBRuyf7kDX1Nm0gXb3c3N\nF3ztSWCrD7SeR7nEdJd/mqhLS1iXWNJ/d8xkt87cvDIV4ZD3naxIe0z/g8hu\nZ3l5el7AYs4pagZQM8YzhMQ+JJKXo+VdcX6nWfCm745VaXPb4kgnmv1/D1ya\nLPUmgzvlnhVbqydpuKef+eZHpIHif6CtUnDneie7w+YJrjwBbsKb0yX0IgE4\n+ZgoJ2RJTCI9Sw7o8kn+TcaAWRGggi8pwcobjr++Uq+t2XQBGibmVGhDgcmw\nhqS8\r\n=/I52\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiPBbVjnfgeNiUJ1IdUg2k+TB71d6yZDVRN+4lvEPeBwIgfsgO9mDH3R+zbc6G5hYNgucGf74P7GZBprHDNAJKFZk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.3_1616693380145_0.494792393817306"},"_hasShrinkwrap":false},"2.48.4-next-1616701812-32e6bb55.0":{"name":"@xdn/core","version":"2.48.4-next-1616701812-32e6bb55.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.4-next-1616701812-32e6bb55.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-n8gJnkCoHZ0iGvvSGoEM4c2Bm7HNxqQSxC+7HmkWO+/sB7d5WMgKVZpsKXwEU5YXPn7zSNEMLi00bK8PB2EDYA==","shasum":"368ed67de0712cbde4514b8c7396b36dd2758195","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.4-next-1616701812-32e6bb55.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXOqzCRA9TVsSAnZWagAAS/gP/2g0PPegwBL7TtzoIJ+Y\nAYmagJfC1Ao2mxPTwC0Pluy0x8JmkBiDmirhimkgBCCYNc7kqtrD5H3vSpza\nZBoPka3slwDMl1XEGZBmxh8CGDAv1OOm5MlgD1dMiwzjUhP0Z5zQIohtx5pv\nCIgHhIdN2nDVN1PVZ65uFokji/v7OZ1Ov/SBMlggl62s/ls9n8m/5s/QJfTT\nISM/U4QoZ4EIOGxskc/cStKcw12Yv/oonjB5ceJNZDNl0htuUE550LXXtqBv\nCY2SENrbvgtl0QpB2p+GvlcwE+n15s7cQIMyoOKoXhjevROFyrJIIJSimh6o\nEKsn6RfLdii46AYNxJG4wPvnqGJb2P2bENw+l7lwO1uKaU4brAw+a4/jNsyz\njFI3cwk9b9Q1z6LL8AGUuNCccezZnkzfPSmeI63xAkCBshEtQXYoJX6XY8Ya\nF3QpHET9FBbSJhLafKhOeXwIfEaugEMGHeosyJlNqSf8bEnAteOKC3EmZiEy\n6+de9gbdzuZKwgLIaVFvJgkRPPKXpR9OTYrfmyM6s3boD5jh2S0pMiJcsrw+\nwX1N8B/nki9cRMpZfAPBLq5W6+/aDdx7nbEH2hwdhMaiu4ugxey7UzbqI+4q\nN9ukyuTyB2TLh0Nn2CsT/uYTFvFWvXVeKDR+bBeENvgAjkFZVcwmKgBNkXpH\nep70\r\n=h+y2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTt6OQ6l7q3wbyEKPybZ36H9/oCmj70uwcDSDjjyfx5gIgSashO8xCcCfD8UPxmT8H0L/9zX91ZMeoxyZddXjJ8zs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.4-next-1616701812-32e6bb55.0_1616702130567_0.24522255094828038"},"_hasShrinkwrap":false},"2.48.5-next-1616703664-ab292fc3.0":{"name":"@xdn/core","version":"2.48.5-next-1616703664-ab292fc3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1616703664-ab292fc3.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-FM9+758VddBP9sw8F7MJFAyh0G79iVyXCdM3KvwszQiQjSGmZhfYgGj4MwXOxJ1+SJXsE2+JU9alEjptUhyv1A==","shasum":"bb7ed06dbdb76f0351dfb635bf6900e3780a55d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1616703664-ab292fc3.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXPHBCRA9TVsSAnZWagAAcNYP/3X0pcuZzXBto5Zmc5WX\nHYhcRussCYTLYG5Z2OZ9068SWH58QLCZvHyXooB65aUMnUEpRMgKi4PyIshq\n3aK+RSVH9uKH8qLgNY4cRN25cywybgU73qNfjrPGM05JnVWjdEkosqHXv8LN\nTugsiPjJnJSi6R0ujy4p+kPrm+/34pA9ExrWPkz3c8N6oP2sNZdAmw8Ftlys\nwIK75l4w4bNYVs9kNHhEysiBODC57b11m7LYsSljoCTxZaYnqTc6F3DnmF3O\nDctSO4BqX9YydsknZ8LI1Lmizq2b9g3SzkIRnRlTzJuUEUyZBHMbM5pVsOJ1\naaMd3Y9afWlSMOGHZOijBHSyzOfapKXLoeRrLjxzK2XzrphgzURZEUwdftoP\nuAtZfjz+zKjabhl21jkZbVEoMrF8GPxZt6jHA2KXZ1IBJ7kpSUseeXJDPZxW\n6YnHNGeK3bBituhPD3IwC69YjyTWcB76ZmFugBWtKsD51dHjFfwCLeHNjxO8\ntJ7ugWFrlCBz8nAKtG1ifrs8Vn2K/3hVB4vh7xbqSX5BU7Fp5uZnotalNH0e\nYPFIRjRQywa4wMrN2xHM4quEGPeGPYZYBcuZk+F8/iXtyI1yQthepl0LT9Ob\nrb9aRUOUhC3hrlJHRD6e5bMepRwSETOOoJWoEwzMrBTFdYaJWw+eJsFDIZwv\n7o5+\r\n=WS3e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBbEOTJoz7HUaNmTeewhUh/Rrh6z0yysTc5D5UeVkncuAiEAutaFM9t+XMRfBB7dJ8sPqqwhEa+RImoMYi190QpIr+E="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1616703664-ab292fc3.0_1616703936169_0.4188261875595707"},"_hasShrinkwrap":false},"2.48.4":{"name":"@xdn/core","version":"2.48.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.4","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-N8nQ9wAp+riuf5wxP6IV3ZK4kFsYteudpYUbR+3glRG77yBB6lYnj461pWxjuLPb2Vg7xqVk+Qz9jStOq6kHeg==","shasum":"02ed671a30f55385225084d0a599e9cb1e6317f4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.4.tgz","fileCount":181,"unpackedSize":667902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXPI9CRA9TVsSAnZWagAALq4P+gLy0U/02/7B33tjJIEx\nXCwKN7cw1CwXJiIUVv9c8tuJxiZC6IojgAf4FvUAYYd5dINC+gyd5KR22Pvy\noTXDAE/ucffLPyC+suoGHrFj50vQdSX0Uke/b3JiSqmi7wvBoxuk+wxzoJ9P\nMfACHO2GgvC7X2gTiM8i9dF3dcSmGwFoVbp7cZvvdz/nQRYnl0noq8aZOEY7\nAdTLbenOEsYUbW2PRL/guLZiCJxm2Vog8slQLVlH26BHbsLapCvR6Q/09aTS\nnoIQvqKJhkr2rjHprKBmJLYrWuSkN2parzy/MeEhYkyJpraxgaAw2eIUQMrM\nq0X7xbqo3VRXggdMEPe5fLEVaX7KgexQCLVPlZ9WPAoJbOqCRF4SObNOTvGa\nfT2nhNA2przPEbJRFtVxvReSYXsIt+qTan/A8whhtFusND7K7RILK9Dyxm/X\njhoSP+J/+7uBW1txPFQoKDvJEovNwRdkzBywtL4JW3fuQ8QE9sDZtgkgJ3gQ\nDMGYj6lUmxzpwEdF2vEsGnRDOD83V9XIhHx9RATJvco+nh+SzrbK/konq4iy\nKYb4EU/gn13S16M0oSGsqa2Q1wPTUuY49oQmMf0suBPn7kKXKk8tTG6NpuVz\nT75pifJWIZfG76grW7/hTPS6c4MndkBASfzlPdoMiZbRJePbVswGWO9c7Qfb\nMQS4\r\n=Ev/Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkZs9efteoAuAY4bogX8KXobAC0GutAYWIOrYlFKUtqQIgZuWAYANmB6aXAkAQVBNbVTnau2c+XIZSgDeI+6wH43s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.4_1616704061239_0.4300849823890174"},"_hasShrinkwrap":false},"2.48.5-next-1617068534-d4a6718e.0":{"name":"@xdn/core","version":"2.48.5-next-1617068534-d4a6718e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1617068534-d4a6718e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-o7FRGTZhk6VBXG5m5AU7vlZwSa60/fDC8aVfOeeM7U0n4rl7eZfsb1Lwc6qyD1KnTV5mbGWt8mDpUqLy4vC95g==","shasum":"3f40f5af3c8ceb5baf8bfe7f02c2522a15bbc2cd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1617068534-d4a6718e.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYoNBCRA9TVsSAnZWagAAaTwQAJK2BjEwk1y5ZUZTl1wU\n0SrabGoAixkq3RXGRMcrV+GpL0rDse62t3eGJSfTwr+Lo/B9DbkHPOYxO+Lf\nhrimQpu9FGkFC7MsTyVzuOED0E5IN4riPHGdyqSW4Yr6H+rEy2oC8juKLs2B\nlerxWcP1uIZIGMR4vE4/Xy05/Hvcml4/H28mQ8XXtDNN0IJjWNaoJ/WTQh7M\necuFBJsPQBhCT3sZUTyQw9X5sMLpqYUcJQDrU3yLK9Q4OIzflJmHQG46Vfi/\nOsQZ9Ec52ju6+YVytb/sSRZMDUXV1Z1zj1pSwc7SwX2xLJXHwfsCAqodgzCG\nH+0Kf85riJbCKwoWOZSFr1Grh+Xryj88NtoZNr5HsOTTNBtayhx277L/CroS\nNoc7AEb4xC3z9kdOhqEPMKWTb3lV7E65BaRbkiydoU4Yk5xvb0WhD8mw+F1R\nP+r3p6b9xwtqXNmqAf0eRunosaldHBmLhwL3YqaGu1nkU2H7hhQtyNCz6MoX\n1B67f4q0nNpT0Rq4Ph1N2ksrouiLJ6Q18xurGfA1up38/5CUo3iFqFAiGaPq\n92Is9TXlClUzmBA/WgaVVe+lXsNfLDwtl1VrKbjnP36CMTYdYT45g+9rZ+Qa\n7n92F/c66lA9SMuOc5LjI3fmmGJB746cxx6i+bq1h4VJ6a/g7vQos2U37KD0\noUYc\r\n=iCOx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID5qAdno0DO4OQyZ9LXYQKPYNB4Vc1UmyeIUUh7rlfnAAiEA+97OzXpdTu8kaDH/or9KsedG9OXMw+DRd2c3MyG8+xY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1617068534-d4a6718e.0_1617068864635_0.1311915260765053"},"_hasShrinkwrap":false},"2.48.5-next-1617105656-95482989.0":{"name":"@xdn/core","version":"2.48.5-next-1617105656-95482989.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1617105656-95482989.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-BrEWJVNAKvqTBAkVWUoEIKbYBK3ruqTgmYLt2GQ/LoA/ELUdQ7TA7ucmZozs9PrabtHdLEd8aUYCW5Ji0COgjA==","shasum":"2881add034aae04ab90f5ac528aa837a3cf739f9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1617105656-95482989.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYxRLCRA9TVsSAnZWagAAoFkP/iDyfPtvK1UGGpBYpN7B\n2vC2Yxo3XxGuFGdlSdfmIrlwVN1G11TVAmunYTmQiu2ZwiSfC7j0ddolcN6G\nZF6unQoYtlpFf74EljHs2WmalCnaWyNuplk7+7XxNrIdX+I+QKc6NkmtPpEP\nyF5DYv3jDIy/9L7rHAuKb//6Vd2HDWvaU5lEzov/i0m3rOdOWkVuBYGfYXJd\nfkUYsOcv4QaXO+Y0644EcnFlLvx02Nx1JXs3tP7t/fbPTvH9AvjAmIeH6nTq\nziXRtRnKfDGQ2AIJ0tsVOi/7EuFVlOoWNTnGPDALE2pBsm2fJP0pFlF/frb6\nkmjDrI0vfyGRWKja9Sl8oNSBY1TCsEK4xb2cLW96xbxsflRyILhOz6VqW9s0\nGvJfuWndXwwzts8BULYaQ6LUSSo9Ob6dJinu7jDa7yT9KlU63TV4iTuzw9r6\nfUShpSWHp6+XIck6ik0oqCwIRSpPzT1xki6n4ZpWkWsmAwEcEYIE9H3zRWot\nMG4AjQalFfEHd6Ni89aZVGgAdYKEtCcwxtWivhhlwsu5FEYwf/jgwkimHUFg\naOnxSyfI7wOc9jsXIf3LGHj1R8Aq7/dgw7hlX75VXIoJN/3zWvJTnx8vHt6W\nO1nlyq+AEh8BbelYdRNYkTxHgZfZ/ltDVElzYTFvh7wHjXwsoXdMQxIU6foO\noZ6m\r\n=pN7/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA7fkATMtflg48HUuowSFkeVF84MvyaRyfxdA9x5hpQWAiBjOCCjyBPio8PBg/JwIo4N9PHoJQmc3QGBhQ+huwXdGg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1617105656-95482989.0_1617105995093_0.177750746736429"},"_hasShrinkwrap":false},"2.48.5-next-1617128819-585cdc01.0":{"name":"@xdn/core","version":"2.48.5-next-1617128819-585cdc01.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1617128819-585cdc01.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-mbA/enfX0tdz/U8WKMjzwpbnzjrRZWQ+CT5fJ6XqGdEQ4p/zNPJilV1LCho9HOWPnubcBHpq72WLKf0Fpvi46A==","shasum":"8646b3003f605ed2a851ca149af990e3499e0f57","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1617128819-585cdc01.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY26sCRA9TVsSAnZWagAAKB8P/Repk9iOUNiYSwXSxBLX\nehUHCVMmdmvGvBWofhguM4ngjVoFucpTl3IIX308UaJcKhgUzigaPXYPJtbx\nDbg+1xl+mFRANj2Xey3RvW2MSQKAwkdhN8GqQUsJ5PCOWmeEG0pSRdxPD3IF\nBwJF/M3IiymQUh7GIQHqn0YPXZ7GU9FugrIa2Ji+WC6dFj0D1SHLj/b3QKza\nEdvwium8qL9pI9T6f0xChA+9PpHrVfQVyEKLYZ37UcOPyK9XBeBixkFuV0hg\nTvk4wz36Ou4A8051xWe/KGSLpv5OwIfWXq0PUCrnjGxSM8SHlLIwQ86K/dP4\ngDP0WBTEG80SQFp3QtarfOV0DThR+U6wA+2e5oN6KfsFXwDxZW5YUoDcCUPa\nRVZWRrJnlOiARl2UXL6RgCCCbIidzrJRQigy6tNLM9quPdadM/hF/ezbzgel\n1RKBHZJRecmHkxxmOy6jJs1I2Nf7W3Nnvk92P0XiTK7wyUeQjmh7ojG3km9c\nJRDuZlfQGG2o5r0/2gAqMMFZwltfioThGu6qQpZm/QEKubFnF9SxGHRrR1tG\nOXikxZwqhjCpRu+4CUahWuoDiuxi/TyX9Nrf85eXR8C58ssoGPZ/Qi/UpaIM\nT4GtxGI/64RppAT8UmSewGxlzDsJUszmkiuldawyTwcDXRA9Rw1j27+Zf4oY\nGIZL\r\n=9Gw3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDE9YpZ72Hzh/D1H2xzIsu+VM+IwwiSMXfzRyM+GmozMAiAO3UBDsFfH/gZVmthnVITvScqhijl4MhP3FnFHUCSjJw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1617128819-585cdc01.0_1617129131066_0.8011501533813767"},"_hasShrinkwrap":false},"2.48.5-next-1617129668-96c087ca.0":{"name":"@xdn/core","version":"2.48.5-next-1617129668-96c087ca.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1617129668-96c087ca.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-dSHe+YsfDfuL4nCBYtcVTucPwA28oeiKgQiJqO8xLxy4vfSeYm7NeJx5VrCPubFYH5zBLIYwHrFS9TB9TtSX0A==","shasum":"e3e1612249b270cd0ae9742123acbd37b3d6180c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1617129668-96c087ca.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY3HRCRA9TVsSAnZWagAAxRoP/i+f8WPMCwZor7JOMFib\nMFq2hyg4+HJQ96XR9MzMJ1kWQHfRKcxfr+QmcPy2++RTZeC5AX8DpgIBh6xj\nkOcNCz8uesGajv+iR6U/WJCSwZegIxuh70i7721ihKssAOrt384whhL193/b\nAy0L6mKZrz1vBKrlyGqPSF5tcnWl6E+GF5F2zZOJNOEZ2Y2E38dERhhKtL6/\nagxF4IITC0BzWj9F8D0cFB+v7h4TlEH3kTwZZo6yPhUz9UdY4WGVOVqddJoO\nDYNfamwavKackYCKF0efI3HZuA1cKtDoC9ZO9YuD2yzHrvmVbltx2Bsiaz6I\nujcsqHpgZz2dRkzrOwDBzfK4ESSwo3mSNZKtgeV7llfP5FnJppjK+A8HPy0D\nEbmC6p6Nf/iKZ+hUS+aV417utWRYMiuf/hxrK8UvvdLOnIBak3qF0wPTmJTY\nd6o2oPFh1UknMghmZSKveTWiWu3b6wPLfcGHzRoSLxO0B3H5Voxg2M8ULHBe\nbBd0DDKmPZs9pdgMIc2Z+8CMjRTx+cZwBlgE7sI5E4k7mqMww4GBdtz9Ib0x\nTaLpOYH97R4e2wiZSTL7YLPRr4HOQkPjNF5+D80vkIeee/7AH6/01HpYoB4K\nfZgG1IogmChdqiQWXmpf+WS7oGaEkIs+mmyvGufT63l0AYB9lvZUl90P/xHd\nMKKa\r\n=qLGQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDtMq1VAIJZ5RJUUXl4LAIaePl6jr/dUqHXOnzV5R/9sAiEA/V3efnw23vT9roVxImYNFACNN+pc/QABwIrzw/SocBY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1617129668-96c087ca.0_1617129936361_0.24986164100449137"},"_hasShrinkwrap":false},"2.48.5-next-1617134589-443d3523.0":{"name":"@xdn/core","version":"2.48.5-next-1617134589-443d3523.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1617134589-443d3523.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-KqZlEDDJeQ/sAB0UboHiZ0z160IJAouLY4kfsp1TOc4/J2lUrrqTD3pbit/Vku683P/HR+XeBsDHQXpXN0Y6iA==","shasum":"686b37fe823f0e166cf3e8475b9a17115a2fcd91","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1617134589-443d3523.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY4U6CRA9TVsSAnZWagAA7hkP/32av0yu67rSklOnr8ua\nVehwKTivLy6pDg1wEdu/nkjkluaqg7MbZSCFNZ3FmBFHL2gWvR6BQgKmnZbH\n2YcReA949uixg4c5sfq6voSpmkox6x2F4xvljGyIyg3dIFeqOqFZwlEyf0bu\nA5z8otPqvsmwQhYvaf4l7BndsX1G8at4uAvJcdb6NO8T721N5LUgqVtxzsKn\nh14IQiaUUEhReFR7+bql8ym3rGEG1m10QZoXL8ZOsG9lu0nW8PwoWhJ87f8S\nN2XDyhc5x9CA1NhLXltJEDFzTW5NFfFOrzWg/toPhUZXtdC7f3tEv/vOES5E\nuYe5qRERbuTKA31y4MM9JJKFw0Jj8O8vqi5p5sOUeikSaFGm9yelos8QOi8d\n421ygT8CJeinQaSi+jjxX/TBWvUuVnLx7bdrB+cgkEC/2ZF7wJge2aY31p12\nYHT09CwRh4ZbsPZZ4XZm0Eu5lu0o3sw094SaNojxQkNQMrUOKAtvyCvRl2PU\nQxSlgI6Ru2nu5TYhfadgXE2HHakI2345V5cumEewHvufaTq+y81BBDlzUMBq\nmxnUsk72xqC8WmpiyPrZDRTuNSOn3ficeekujQ55hdm6HW+WtyaSBXsxopcl\nin/KIaxkdMjhhF0yIFdDTQIQPNIUzPzZX64qx8wn0mVmFXIZc1nVLu/xV6oJ\nYrUf\r\n=+tUV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWZZTPkNxDwZvZIp6qMfVkWMkduxZKQUTlFZvN9l+9BwIhANuutjd5xmyO+G5lH/+KpnZP2WO6z0zHRG4SDMDMVhRf"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1617134589-443d3523.0_1617134905523_0.6140139053422384"},"_hasShrinkwrap":false},"2.48.5-next-1617189233-8ff49114.0":{"name":"@xdn/core","version":"2.48.5-next-1617189233-8ff49114.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1617189233-8ff49114.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-WaeMcXwXTANMilmPAExkKUzjS5EEfqyY1xbku76r9KHv/+tZpWPpqscFgwRdY8biXMQgJV9ftRKnTRaOEBPAIg==","shasum":"16b759561f74a12f8e0f8642e419ba184f9791fd","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1617189233-8ff49114.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZFrACRA9TVsSAnZWagAAhA8P/1P4Cpl9pMyIJlE3bchM\nQSbq8BWnJ/WhWYopsali6uymhkf/Y4QHIKyiQWnS7xxelu9W5DEIMXOb7sEw\n1OaaR5P9NEdf+wrE39TGlQVs/F5P+1NxYJ495PeKZbJC44aZm90Gx/qpPV80\nhWHoExgj91qH2zywhERV6wNMJEERIGWSpbG/amRH9CZcenRHQ9Hkm8imOmOz\njTf0tYgLE7XeH27JpcR09SjeZoyvVPu5GkKn0mLrWEvDUvbtjlTG6NPLKyzr\nWEEstnwoTu9mjL5OSvNxYfFVriTH1wlB1rzirhNrqpWQZPGCVPMu6zlUBYrX\nUkLIpNjrbnY7gcwTQvEHMO0WdQFLOwLo3BabUAuAJl2PlcdFB9KiDIwaROiM\nzXfja0u/3kuUyscWwshUs8v0jnkel7Jl0SY5qA/+aVmIPpGy+sestjTNP7sr\ntiLinC0s1567JkG23VTNp9rlyfRx/g5UBJ4RWUcL/2+Q0FUk98frzW1NwFvo\nTCDfjS50HQUcsB4ABw0kXkh2TEStGj9PDKWTpiEU1h2MFwABbSwNjiPAtwtp\nNQ+STfIlvpuTPUhqpPtvlTwc5qLtfF9RP7PPuMkD6SSuUp7n3fAl3t7cDuh2\nrDKmrj01hQNGA4rrZ5ED5Vj8lawHdcWW7pYqLeIJ61st0FDcrUVkzOM35EHF\n1P0d\r\n=3bij\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFT5sYe6vELq/bNndOhE0AiByKEpunQpHQ/Q/iYiI1eKAiEA7Z9KpwAsRZrGZXowJxrzUjHej/r741YgHmh2YBqE5oY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1617189233-8ff49114.0_1617189568333_0.8819173596784569"},"_hasShrinkwrap":false},"2.48.5-next-1617190581-bbc7876a.0":{"name":"@xdn/core","version":"2.48.5-next-1617190581-bbc7876a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1617190581-bbc7876a.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-XweMVeXfoRHcWDnYHYIeT6VZY97FnB1JAY8lwiy4FPRJssQLyRxhRq6XXwj/gHJayaoGgfrtuCTYx87LTBbmDQ==","shasum":"7cb906846e76d9220f04e73cd22a75ddba410d58","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1617190581-bbc7876a.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZGAHCRA9TVsSAnZWagAAIr0P/0STZHQ0qvleuPlGQxwf\n11grTtGoyczOti70QltGvp3KNVn2ypr+y03ea0SuSNEICNo2Z3W4NLpJD+hT\n0+tWo8AJ7WtTugilgksV4b03N2pl03dDAw97bJHSI1f+WW2piEnPq0KQXyAa\n1zXI0xIgPMxudweZG2o3BM4H8DGZmTygUeXzyDLJbiWxiedNXmHKxIS5r+0C\nJMkLGE9X1MgcDuHFRWCoce7s9YOTqgZdFkxJpITOADvBu6I/XW/EVJ7XB0OY\n/YC0Ju/UwuFKs6qwT1wkphUWzEue/SAYgytEmS7Lzp48e8I/gQbOrqiH7lTk\nWTNWgxGVNLqjAC4ozj1FT+p0lJC+EBt/1wZZOmT4bykITdTg68xYvTxvCeJi\nWQ2CundAwabuQChChoXkyUUM7+ucvJqgm2kOiYSUTJDxrB1HWD9Q2blcg7lx\najeMbc0kVmQ0dMnefjlnhRw2DSfpelQFbHJBQuY9yc+8x8HZNVwMp311meCJ\nS+f/EdCA4tVHWiJ29F/qEBTFJqv9sdZv/7dh8Brf+S7Q4HNJRuBhkMDEJR1H\nm0mUHBHNEdVqwikpt/mlKOoQXu6WTbDePE7uIkpXA1+IfQOjdkXSOF6Qs8pN\nxaRSdWdKPoYnVZkH0CyPkFyNMbJuojATMgbU1yOSPnWFoDUjD4fZ7KWzT9KH\nn1g9\r\n=IBTg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFoF4PGndaH7hCWhVEJixjnRqDf6TMH/kKcPjMwNu3OVAiAty4XnUO3+rAdJl/yGGW51fQ+KtoewpJopVypJTWBEIg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1617190581-bbc7876a.0_1617190919129_0.2278712627636139"},"_hasShrinkwrap":false},"2.48.5-next-1617191032-266592eb.0":{"name":"@xdn/core","version":"2.48.5-next-1617191032-266592eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1617191032-266592eb.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-LFFShWfSIcVwRLMYunEuvLK0vRgDrSHf3tPY/A6VHCF+hKzGq0ANGRNr6iuN9BJg/yps+k/RchlMWzb0iNOp/g==","shasum":"318af65109ad8a20b08f029c4130ca11c7b4cf5e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1617191032-266592eb.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZGGuCRA9TVsSAnZWagAAIeQP/0TFzW4N1Gp6y2iXzmXF\nyRgMxilFaaFdtL2ivKMptJNEBtpCZ5jaDwyxrA0HyHne2Ud7PaMbxsBAePPQ\nSf1FswC3cAE0cHMT6TCdSR452mT+4gFoprTafLPK1gt+hy0zR7WtCjhS2O/+\nULVGOUmIGG53K42o2YFQ9Ze9Y2cR+QuFFH67iGIaLEJ9QHw8UKL2hLTwcP32\nRg7jhLJcwoCl5z0RP90Nfej/A4IzXM+ckzNSleNPXa4gQEidApaRZJW4J4/S\nwxyRDpihW9PYoo0Bm1kvud6AItep2mhsVu9c9WaRcsdYwTyYJF5+CdiLjWyb\n/EZfFC3fEst78rKtj1a02XDHnJkLmW56ZJdZnjrfj73TreiOlcrvkTQJskm2\nhgFu6mq8U5mVfJX7awu3jq1NmN+dH/hkhiJgQTwgUcbYgfUrhvDVLSugMsc0\n6nnEG9LJoMdnmZp+j9a4ys4FosSHQtOZJ0hRBTWyVOF9xb3D+EjaG+rLzeNe\nUsuB91iNDC+JSClLY+ZUB0/4MhycxvNvk6KW8CsF8K/l4Vnca0E7biplCTiV\nW0ddq2rDgFT+2rfoR9fbex6dJz/g7U5Fl1Zd8wu35daoCrYDt3msEnmUMKo0\ncLvrp6nZ/KMATBwxZcXAJGrHZnNDZaYJx9u7Kc/LM55inPZnodylt4y91Nw4\nbwcp\r\n=SYg1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGCzMaivb47xvMKtpa2Mfcu1FZoRJfuFd7J1LCoHuk6OAiEAyuyvibl1MfzvDgRe5uLIRseAB1+ymit4HN8UQRHLMkU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1617191032-266592eb.0_1617191342004_0.9031144541857266"},"_hasShrinkwrap":false},"2.48.5-next-1617192134-1a33ecd5.0":{"name":"@xdn/core","version":"2.48.5-next-1617192134-1a33ecd5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1617192134-1a33ecd5.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-vHqtvCd/UyRUsjCEvsugEMzcij6oNhiKGzzrciY5OG89q82P8mIyHDpSWub9AKFtEQblTzp+NvhwiG83bpOeBQ==","shasum":"7f526d9e24a5e203577197941676e7999afa5346","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1617192134-1a33ecd5.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZGYcCRA9TVsSAnZWagAA7A8P/i216VwkiXhFxPU/LxUn\nDmTFdmgS+dtBeE6gtvRWcr7YdzFaYt5bCDUdkj996F5YSof5AJYoPvpA5tMM\nG/JjdA7mU2tpa0rjE5I6AiSyn97hqoAWzjARNbyBI40wJwQWFuwyRihIkBlg\nJwldLggC+6a8M+n+ICRzR3aP7JjgsUP/t/lLEXhjGiZ7OYmGT6+S2lzYqey/\nbpXPRq+9j+67ccv9/wpxaJm7X9IdBzJV0gJvRM4FxIOBInUxVv/0WFqih4Wc\nEzTwzGzkabDTbrnnnjsrmeaRFeDfLtDBojusu9V57220VUaWz+GjmE2cS4RY\n29uHbGyl163MNImumiFKGN3JObVXYbXHbGWH0NDFyNDUrV0+ZCFdHbsJ5jH3\nn68egD6zJJNgE25hXYdhT8kOcUyVFu9j4XhD/qeBRK0URoU84dmgtAbpujd6\n+HA2mmB7WVY7Jq0ML2+NyP6HRwTjXjVXo+B7nJDsR3OO6/VR7RaPzUowy4jr\noCgp5LHDCodpchlFOaz6HkHa7X5NzwMPTO0PKHItCdNXbYHiOCPAeo9e8ZGs\ne07ZQxH3bQyyCr1CI6kvoM8P51taotCgwD5bDf5hTuQe6X0sWvlMoMXY6Wp/\n8z0zbW86Q23Hxz9tBC68zMsu9Vxae8kAH5fi2qTnbNkgPS9kSDwOyzAx6fqy\nxzXP\r\n=f2UA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD57sbhjetXMRBPOI3SNgp4yNntKKzIqE6ByUKvVzT1nwIhAOVFbmxpXLpHnlghWsjMZsZYdYc90iK9Cab/PP6b293F"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1617192134-1a33ecd5.0_1617192476086_0.39212439437306235"},"_hasShrinkwrap":false},"2.49.0":{"name":"@xdn/core","version":"2.49.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-hlW3sax1YvTZOjRL9gy6BVhV/PZ6itu32837ymBUBVKGod26vO5VtgobGnCps7yfdaKQJw/7SaMEOGEd0LqKPQ==","shasum":"b2dd7d4abf1b797917e6ad7322fc31ef8fa048f2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.0.tgz","fileCount":181,"unpackedSize":667902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZGlhCRA9TVsSAnZWagAAiNUP/2wxSElBBsEu++UFbIEb\nsKl4ttt38L46+E9KtNBdVy133nB3jmVa/6vhzst+sKuAwjfgaNS447S4TfMK\nd8pODa0cKnWXX3meKeIYS8xtCPfq39ZnSqEvooBPjNVH8qq/zehylyJHqMYv\nQC0hSHMY7uz4LzuAqPSRVHJ1UaPeTZwB87gr6O11aBynGMwNZSq8d+qM9txl\nw9L952FiSO4C7++o/I0nnKtuoukAXdxmMnw3ZLvQM6vF3m5oISWc092J0U8F\nY8DLgjTO3wYYjhApAq8SLG+Gq5SizH6k7ZkD6rmJ8x4jbgpxdYo75PIcEnj2\nMtXeqM0yyoU+ZnOqXDP7lSubRrl2MGarI3qDqeE8Dh7eofz94XEDUuVMgR+f\n1fWcuxoV+fnWI+VAh62yMlQmcJfmGBNGCpkfh/S+BM+xYUMtJZEPMKPKtIUh\nC9xYmdF86V2pxlo4OXma7eidY0lVQhTGBBOonNlH7OvyP0T7n8S7ATTrRL1y\nUzjlLlBzTEMNSnFfZA35CM95ktAt5VkinE4JR5nwnPWXaSgFMMsbKfeV9H8Y\noBtOrVvDirD9QiIqcwxbuQide+ADWiUZdhyyg9DUlYmyIwXe6JjeBIv6+5G5\ncQUMV2F6BTa7yTOl6gE4H8H0ir52wFH/fPjWJeMTtllxeYv607YI47295cgT\nzo6s\r\n=sz98\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJHWBFKu7H7PetS8ovv2cd/z7IPz+JyMMjGNMt4X2JKwIgK0KtuS1BlRvF24ZK2AXooLttuKJJNKiV2JRug4sOJqk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.0_1617193313127_0.7978671298280395"},"_hasShrinkwrap":false},"2.48.5-next-1617193056-40e3051a.0":{"name":"@xdn/core","version":"2.48.5-next-1617193056-40e3051a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.48.5-next-1617193056-40e3051a.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-tiZCl2gBDiXr5GPmg+X1t2lcM7BQ5bXlgXUNRbHavIBI2I9+EVgN/miU+vnlb+aLx2IIWPHd7lh8Eg9A0ylwCg==","shasum":"b4c0a25ec6b3a5f5dc76a23aca24548df5a49767","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.48.5-next-1617193056-40e3051a.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZGmrCRA9TVsSAnZWagAAAGAP/0dODBv/7sP2xOwtsQet\ncb5CjRXIHDiGw4PKREiaHUKiwdOsQMwrCQr2rAqmsgySFIsYanfr4C8xA4CG\nfkhAgHy8I/eDT9daDjZ4sMuhMg2rWBImyMbH+df/VUTfM2nFwUrtw0EKfpi3\nfgh0TxK+L4m40utPrhRMnuZ/MY46abSS25BVooZUtTH1weyb4Sdmguezfp3u\nX9DE5eidEFGolPWOC7UQCsOZcFYEqeIA9BeEcekOJ+k4mdp0zoIe/aaXRbs0\nOfyxfpf1si9CE6y1JSuGVdg/aqYd2676Ocmsc2QiXANaBi2YHCSxCJexVlHu\n5dr7Uzxsie8C8Y/mPPZ2WWMTApvt1j8myRnsJ8mj9P6AvmXLqxjlLBL/8Cpx\n57a3UjIzsxZmYICHgSITzAcIe2JNA7g05on9IsilDktwidjFImmbvIL6a7HV\n5Eb0k1Qw7SHkcXL3RmgnipsHKvjZZxVC27UPICNOHVxcXMzMNmdaWA29cQis\nkS2FpdWv9iDSW5FmzjK7t8CCK6ZhNRU5HCebkFwL6pHxp80PhlQOzhq+jmao\nM+HPeFXJu+sCmCqqzE8hfw0YhneNyHcurLvqqtWC5NJbXZj/He1DrVFri6g8\nU2rnHQfKbpm8HIV1e8NIu8gp5/5kiEf/j3Jn2fx8Jq9v/u6OULIcI5d80n3e\nzuLQ\r\n=gR+K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE9r7hjJroGAFKKN2c3nt4bhgG8JbJV4FTiUX80+7FRDAiA20BgQ5swR6pGL/v+YGBAuYC/nWcknJM+MZkicgQBUQw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.48.5-next-1617193056-40e3051a.0_1617193386290_0.33163904374806963"},"_hasShrinkwrap":false},"2.49.1-next-1617193132-0596cd28.0":{"name":"@xdn/core","version":"2.49.1-next-1617193132-0596cd28.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.1-next-1617193132-0596cd28.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-/jUWNKbIFjKKiD8aFGKPyS1VfChssDDk5hlDtO32rrA9QrvIZuMN67cMUTyof4mIj0CNdA1dGENa5ov6Ys1ThA==","shasum":"c4f7f65c37a6040252f3dba4005e05719d4fe2fe","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.1-next-1617193132-0596cd28.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZGnvCRA9TVsSAnZWagAAer4P/RwwDeWPrjoQQcCE5052\nyvE+VknYZ38p2UOWrS6xFtKfHuNVLrHwM5I//ghzfF4hRnzY445S1klO4LdP\n0XrP9SRb03X/wuAmlBboTInqabRDgW3GtEXz+R1z2oyLBZ7AOKME/0EFv+IW\ns5vSatohhtV1hdsi/fAPvF2ddfilUqD3mQpG0rEJ0MGqdLW/l0YoXTe1geoo\nhErIvgc7MInPCXPZwtBuOG3O2fQd2D1125Llp/ex9G9ZrAWlX3s73NZZfdYS\nrgjwnvA5AjqItqQmhyAy53dXyFhO7H78WelRco1MimEC/lXZH/iQCByoinEZ\nRRM9PR8ifiUrtvY48gH3UejjM4gDiF6lWB3Eq3Vt94lETfv+jc+RodBtCV7t\neOxAdU5ANM6Q4vV/pbGMMN4ge3jknEP94R8Ckbk1xpzFcYSe7IeHm3KpSzY0\nf6gjNeNWhTGhXXi+qi05OJfMdow2Tk1VHcdEI2EoGcct1AYIKvy/JYJ3XZEz\n8Qxjz4kNNlBobX3446o1dtHBtc7HfEJ2Jv+nE+OyCHD4L/f2L4kq+yXnf7pH\nOxItAgtYCyg2SrQTybvMh22VP3SJaKQs8IjrHCDmcfP3fw65niYoGwToZ2w/\nCFH2zojllXxmlqgG9NLiLLW4ie3fClf6ocslXurcXoZniS2KnmcaaUCf+dok\nJ7BA\r\n=cuHm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCi1031BSFFzbe7yhPH9OQikxSvM2sFfcEE/6hlW/9+UAIgcsdXXJsfn/4jwrpe2DPXWr89VIh1PwsjjEYDhK1lRq8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.1-next-1617193132-0596cd28.0_1617193454835_0.06319112829203744"},"_hasShrinkwrap":false},"2.49.1-next-1617195749-017219f6.0":{"name":"@xdn/core","version":"2.49.1-next-1617195749-017219f6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.1-next-1617195749-017219f6.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ujP/7dL+SEHYAT3a0x5v/o94v7WsJ5ge9loh/0FQPPhIXsrf+4aj8Zn8STxIAH4dNI+lnm1qbXmzarHHb6aWMw==","shasum":"fc107124f63dbcce24cbfcd775f4b5b6a2a0eaf3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.1-next-1617195749-017219f6.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZHQSCRA9TVsSAnZWagAAXJ0P/27LhInhuSoG/uN31EWX\ngTarW5A+Wl/hyOffB92P60Ock4oKMiz6W/QXvQzVbvbDZl/03jhHuKvFvDac\ny8t9WXI6ie6exNhPVpFixroUIkK3SliXqDRKGvYnrNIL2aDY8RwtDT9Gpqxa\nczdmFDowgDWaHOA7+4iGVFzGTiUpILh61OxvsdgsKTIG+ZblH8TA7+oTCtna\ncjDUnvjnndHFADWSvcR15qACrQH94JUna08AWOxVZJPJKYMS/bkDxUQbDI75\nQMLbEuYZ7lE+cy2JX4ZBmW+bEla20zfCfgNL+THz4Hi/5DAwf48gkNACoEtX\nelxfnV8I++titr3NJnUvden9PRLfOb+rNITXjZcu+b0UL9aY0sDqVX/KWl8e\nanxcnDHQnNcFkzcRf8/A8NksDik90x3iyv0Yybv/eU7zJy/PlOjlVnDj7JKz\nGtQmDVzv74IVMDadvrrcY/c3RqRIEG5dFv/QJuZvW1o9SIvXCJ2B6+O6+Zo5\n+i1bDi6a0wZ86QGQTl435u8GRkMEaksr0TzeEwaP1N+XCEKAjDeBQFcscdwz\n4p68m/mOnd/vEj1jncjmzlbwkO6yZV0bPgouXHYYuCvL1rH5X4xgkJKRRxep\nKbBMIF/L1AJ3Pmw3RfOJAmMwOeCt54dJoVZXi/Iarw+HKtl0JLqMHHBTmwvf\ndiCE\r\n=/dCx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDptpw8K/tMuU8gVDq38TJC6Oop9Mmu3cO7pHLIx64wfwIgSq/q7ewBzVqh4S63ZYHOtEawcXbaTLBlWQrjbE3S8FY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.1-next-1617195749-017219f6.0_1617196049269_0.6899860224257133"},"_hasShrinkwrap":false},"2.49.1-next-1617196474-ac6087eb.0":{"name":"@xdn/core","version":"2.49.1-next-1617196474-ac6087eb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.1-next-1617196474-ac6087eb.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-l6TEFKyNWGPwkqPZFQfUPa5f09IdbhOkFA1eu/96g3Lk77smZl6ZHLAyWZHPLZN9x9rMOkaipysywHyyffxteA==","shasum":"de8c6dc138add50271e4ba3f8a70ab75e492f459","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.1-next-1617196474-ac6087eb.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZHcTCRA9TVsSAnZWagAAg9IQAJU1rgbYGdXJbOh5TvwA\nV7JPBnNt7wuAL+xJ7FHWDjdn2BUAifrs1PyytDvTw1cJjvy8J97l5LuE1ArV\nVPdHzXG/ubQtWyc0dBImNNKgHobbnoPoMikKTN/yA/aM0PGu9aq6T1HZ6PY+\nlwYMsOeUEzZzoDWhlQwfj/X9m4HYq7VGRP5WRdvZgTnWgqVxQzaS2KrTMppB\nO58YTBg9WEc/wS3Y7E+Y1nc6Y2qZJVapC/hgA6wSBljFfemWI/q5SDtSY0IK\nXrNZUumBwdWQEHHhTWRVffJ27iMqS4YW9maYEr9d268pKevnrQ+UC/Ao39Yv\nWexvx+gMR8uKAURaYZnBOVVjDvf8m6WRTwy1Zdi1snDPKvHyFuw6YAFhdrNf\nTq12WlbBgsQC3XLh0H2oyyGCahFbSw2hMuXzvfJknFDkGl2tx+9cD1U4IHju\nstlM663Y62RxpSq1LFH5tm8Ny8F8ldn27u3cuWlv1iIU+UJtgqRq2ugEd+gi\nEJ1WueBQbn/W/ExfZgyGQT+xnQZqSLCyNnrPfYR/FrwGqy16X2hJy5NAJmSn\nFu298VqMeDltQ/PmTg8BAwTue/tOISNgLxdeurhq8jcRNM3mUcUEeo6QceSM\nJxC/nq85Rr8WVp1p9Chy+d2pinIrFBTA7s1sSn7sqIH+KtSBcMQPtSThwPBF\nn1Ux\r\n=CZpF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGq+Kgku2T9dR9TFdNKSANkK7Botsd177RRcK7SbL5BoAiBkdHUS0NcsajLrxe+jmJVH6jOG44mh9K85+T3akv/lvA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.1-next-1617196474-ac6087eb.0_1617196818362_0.4912236895896782"},"_hasShrinkwrap":false},"2.49.1-next-1617197145-0e16bea2.0":{"name":"@xdn/core","version":"2.49.1-next-1617197145-0e16bea2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.1-next-1617197145-0e16bea2.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-S+umaM+54KAK51YSADDTiQ05vMABIvMLY8jSK+qo52tBvty2sqnTL6QIeGGIQMHH35k8xJbvsItgZOI+6W9q4Q==","shasum":"761666cd34c9143e35d9405d28bc5f568401b524","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.1-next-1617197145-0e16bea2.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZHnNCRA9TVsSAnZWagAA0wMP/08x/n9NlKRG6zq+ihr4\nt6RsD99MYMMoewgNXWD9ZWkSnj93DzEW1rlfGnHeqEfilvTMLagOMsMBv/pA\n1TQnvSyJP+Mv2OxwB6d/0A4X1nJtQSROjIEdqDgULN1iPYT/TCV13OyYuqjY\n5DKG4EA6xkHIbzQVM7ahfiUlmUaVYToMDTa3cWWy8f+4QHKWDakhXhGXxShU\ns5u3n9tgyfpbbvIsP9BXxyjjYl0ayAFzAd8qkNIYSLSNt1IvqLBZk7+5ZtRH\nTfP+SAb3jp91en8qpeCfEfuViaE2C//O5sEfY3Qked6hU+87XWDjeQUGGC02\ngyo+AWwXzLngtQO67XAu6h1w1+Op74HCghVAjBMfcJMjwBeoVZzun/aXu1ZA\nYmHvvAa7tLf094hgedausJ2sol7ltt5o8Z6F00CWy+1dDNxyjGbKTD97AY3M\nzehLwXVXFCm3IjIT3OtiDBzAYIp2G2B+GqPGxFE++pKvfAEhsTQhzxphhk9Q\nAEY4gJEGjFV/80Xudl2M8NSsZQHCyMjyUC/89C2gvfHaxwOGOW+i6+GeDYsI\nfqGB5Rgq5H5vOAW25XtUtoGz6k21rlYzLtMzZMQ67HJA30i1yTYTNFwfFeqG\n0s1/2EbIYp1x6PwUyrZBLuT/VFXoWLz8E7L/yVoMUAnBHflOdYZXFWQTIOd5\nKvnw\r\n=nEs6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8Tb9nD6NxD5oY5QJoTuGdoPD5XweVMOJ8/vqmm9++sQIgJspAKhTzi1p8K47TNWCfit8GjoC7I2R0HDz99W3xNiw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.1-next-1617197145-0e16bea2.0_1617197517266_0.24087449878020584"},"_hasShrinkwrap":false},"2.49.1-next-1617202781-e4cdc40b.0":{"name":"@xdn/core","version":"2.49.1-next-1617202781-e4cdc40b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.1-next-1617202781-e4cdc40b.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-bsWEnnUwac5POfYCtWkHFeF1uiZUwB93Bs5FYAI9bd6/fvYtb4wdYaw72WcJ35Pb9KEsmmkGmv5NX+ivh1Olcg==","shasum":"bd710ed864dde8692e75d59378c38ff888ba262d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.1-next-1617202781-e4cdc40b.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZI9xCRA9TVsSAnZWagAArFYP/R8ngLpyy25W1s+CXB15\nLHk5gUBoNFUFMVfrd5eGS88rRUWZectsO9JlWtsr971BgjJ4YK+mLD1lIBeI\n2XfpvZ0RcgyeobTujMu7PEDZUJanralDVlLwmb5JctTZHi9vqKoKKQWcUpgZ\nnKLr+s67/uzJC7VOWK56uv2zibVU6vsWlmnRD2J0uyqHDHA22wc+LuPpVqFz\nvnWKENKUYB3Suu0N+928BEE2fdM96pF4d83nCCLRSRj+M9N7EWs3RVxQQyQf\nlb1Edok8VqkVI4u/QQDtQQSftPoLZEsF5eFxHtzQhsATb+s4/6ET+m6diphP\nIS6z5+K2X1uUJPYatVUPe/qb+GStbgE5GQoBTxBCz1ojnCZPQ586+wfsVBPa\nA4N3usClkYPaN+zG/+d9l9sR0DCpesV1TrtuaPtgDeeZ49iYOoM+xPEdWvBB\nuXQlPgCbuzg9mTT2pMEB7JIGce6gAoM57FW6pZ8VN3Ra3qKUznhcaA386jPL\nFzKLQbVJaE6fQ0tgTzKYh88DQlesAsv7VKNhBqu0HcPsaoeM3v69TRQJ8keJ\ncLIrsGUwpr1kSJZvFvhjebW/JIRgJ8lSw3MyTMukh4GlHpU+PmSzYa0xifLD\ni6G0AntjiGmKGtVkMW9mf7I6/xR5LyRUaZW/mZYPnE87zrSK86qd7CbukvCy\nC7rL\r\n=Uv+J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCY5o13jEX6xYbK1jV8+dH+NfNgG8z59toGmAt3hCSMNAIhAPiSTGg+eZC/G/crPD2XlMZW9CUkStqW0EWfqmTKogdm"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.1-next-1617202781-e4cdc40b.0_1617203057155_0.43807963433976527"},"_hasShrinkwrap":false},"2.49.2-next-1617203089-913471a0.0":{"name":"@xdn/core","version":"2.49.2-next-1617203089-913471a0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.2-next-1617203089-913471a0.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ak9G8yjtLpG8CK7WkiYE45O7U2tZt0Zmfp8iRH/C75fRI7KVYgt4I1F7VHGk26iz5NECbOFqtd1nvTnbZyZang==","shasum":"2bd81348a17f36aebd65ef42180cd424795cf916","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.2-next-1617203089-913471a0.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZJEMCRA9TVsSAnZWagAAJPIQAIirfdbXOVLeaNbWpzxM\n8Ah9Q0ktmAb4067Jdm+6c9dwaYiJKkUsWCpXyxghxPQVWSWmn0TAGdXKcV4r\nt65UCAsO+gjhcfZSw04ByiC4s6TnCU6V7nCzf0J0ARPXgIOBFopnjjXxCqTc\njutJi0GvqisDa+9btO0Wvjm4UxIP7Q7dXsdTMCstjzcKMNpIOvvxSYC6kLRF\nJFf6gk3hJKr7ZuRvFc28DkUpM6j9G1iF1is7uCpAm3QAA46zhPt+2YieUST5\nFFB/LbdQWvRn56YjTTFKs6efGm4cqan9/xQRlHOkEfVDaMXNtOE9kfLvdIZK\n9Y2WAHCFsI/H4DNBFB0oKLww968bfo7oEigIBX+FSjY8+ah9jrjePvsPdYZi\nZu6gG99TX/AcPdnI8bzgTEdLHU+TCpjBlHYBNs1DtvhydQzi8bl5WxxA+4Bb\nXz3D8p2aTlx45P0500THIsRcd2n7oPQ9qMSMtHJox5bidwIaIXU6IxEbRyuv\nX3kbtuRJiM2zUn1m1brqublAsQA821r0kXdC9NGHr83YRw+HFs8YgUPIaNud\nZs+6sgEVrDT8YF4560+te27u4lW1b1EHJVHTfaWC/hZiftDbkzPDqDKo3661\npkwyTn/7ycoolZJEHHKQWUpfu25trkToHPfQ9CFSa4GvLr6TrU/CXRBEaZVV\n73VJ\r\n=miBC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDo8R9Rq2CPkbRzdI1CIAuKTegX0CFCSsAiCGC8HHLD5wIhAMy7SO1ntsKzqX1yK0h1UMZLllEstLnuLvNw3IgDcfBP"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.2-next-1617203089-913471a0.0_1617203467497_0.6929234257051022"},"_hasShrinkwrap":false},"2.49.2-next-1617204453-dac2f6ac.0":{"name":"@xdn/core","version":"2.49.2-next-1617204453-dac2f6ac.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.2-next-1617204453-dac2f6ac.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-dO2SMcmJtdjpI1YAZRAoVtdDR6KfgwIkOT89MtFUSG/F+LxpOPrJTv11ESufBdptaK9dHZ0RTk7FGyu/4vtGbA==","shasum":"492b06905ca84fe541d0da2e677ec527cc646553","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.2-next-1617204453-dac2f6ac.0.tgz","fileCount":181,"unpackedSize":667972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZJYpCRA9TVsSAnZWagAA2ZoP/23KJsVx9jPJA/gU+8g6\nk7AgeKP5qzVcDmbJ26/FnDmGNIOEpJHzJYXXXJxR5Bl7pIafD5h6QZ2K4X6j\njVCYgmQalTcTxs7OHYd1CxS1VOIRCbzBLDWsbkPEO3zDBe+BIX2ZBSsPsZIZ\nMSdx+IkqPMQflMBcI2qK4hF5leC4UESkH2hr5maNatHKIlCqQQwipwfsQKF3\njXT33yrq/Sl2kYRqF0cdPoJ1Mf67KxnzUHINS9emnN0Y7QCettXQ/l2nPDq6\nvXOvfr8yUv2qwnnv1KZo40IaFbkZpqt0Y7dwSZrJMFvnv+pbRmPREZLfW9r4\n9SZsJZiNP/PTq29yURWsWYRN7+1ByWgsM0IqnQsSaPSz9+0y7kIen7qa3AZ1\nyPpPtjhT9nIk6oExLsX6zSj6zRCYwLrJzPYjvdSSH7/D7vLI9g5bdksiaz1O\nG908TjqEu25o5aio8inL0Ue/Bc1Y7AnsfFJ8LU/B80DDCGDBaqMAHslWlYTL\nbRmQraIb4nD6SY3vwLhI4l0Vzb3xbNXZeBzSBKocccRfCSEsxsrS44rINh7P\no39NtHxKOcgl+fyaMliicM4cHSV+JlWgClXtEqUCVuHZUhybBQEL9bnVAvre\nIXd5KanyDhsNCmwfo3V9q1my2ftRcxR7MYEA1loGRnyOt3XfVR0oaJ3Xln2H\nb4/j\r\n=Q30r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDjIUVtCF78CLmS++A/6SmqH3HTuhokZG1zX+doLozWAAiEA/Fmx+Tl2ZvpQRDuciI/HzbClhEsSV+uaZnkFT1pytE4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.2-next-1617204453-dac2f6ac.0_1617204776871_0.00499340800349124"},"_hasShrinkwrap":false},"2.49.1":{"name":"@xdn/core","version":"2.49.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.3","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.19","lru-cache":"^6.0.0","mime-types":"^2.1.27","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.0","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.1","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-i264HpmKA5mXNa4RXhMGJevbCkGUogq9CZhJM7rBR/9U6hLXHB4wMVF8IpFdCFNFjJ1qqhH/RcN6MRHkQlMILQ==","shasum":"524adaf2b51ed5632c69f1981197deb81f34cf94","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.1.tgz","fileCount":181,"unpackedSize":667902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZJkUCRA9TVsSAnZWagAA+lsP/1numfQc6V5x3z/mmU4n\nvctWeN7dkdGsF2AOGn51jlj9sYH4RusnXtVK6dkoVVJo5k3FP9dN9GDDsGZr\nfb74QlmoGz3gYPeqpQIPa3DYLocaGI9vZ5hoTnza+nwNA10tbFz9O6eu9jzM\nQ/83/agfsx9wWS07jZe+GwnW3Y4UTadONpAEqZueoTn2aR9AnZVo3CE6xGFR\n+G7QUifR0UDYAGV+IGQ6nJ/6eIR1WQv/2dG/nlN3an1xsMv5bVGrb9i/+8Oh\nzBNYye4uk+NKb7NQz+5rTHTLRarsVO/Yqxg0oQ9lj8Isurv+QZ7t+d08a8WE\niOMg5LjwzbnVq2zpbleIEf7AcBSSGViCS12quDkppDcWJDTtBnhOzQkdSpaL\n84JG/VDQUShThhtWYFwha/Kso4v7Wkfm4dtnyKoV3bKlrvKCbDqRw/pIYNS8\nBiuGL2ZXFEcgxnOa3unDUGRjQ57Cu760mqF/Xg7lodwtQNlCLG/MYQ2LAzvC\n63BDGUA5n1XsZ//tZ9EMX7G/xzHMqYfyVVn3ZXU8ZEmeWsN3cj/Oygs94dbJ\n79x1z576WlE19sh+tyfDLmyTZvEdLmEI+WoWRzjDKXmxOd6zGFp06fRaiICo\ngDSLx3qcfBywG8Vb5kq0rJturLNPABNQDquvrHaiOUW41zy8WnKxVpju/mW4\n7rq9\r\n=N0K4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID5jrMFPUNm69E/WteAwZ6+fI09Ne6bMt8oxNYDWXAkNAiEAiMyf1hDhxa1DhHwRGCrgjPThM4IbEPMPUJ4kyGyYu2k="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.1_1617205523813_0.2925672962970096"},"_hasShrinkwrap":false},"2.49.3-next-1617219745-6534da20.0":{"name":"@xdn/core","version":"2.49.3-next-1617219745-6534da20.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617219745-6534da20.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ir/MhqTb/LNZEVHBDkBVSsS+xiIxsYg+bMxDh6mLNVyo5OEf5kE27/q6Z9IgcuGkXs9zQ1Mg5x+kOpAZmfQ4jA==","shasum":"664ecfc93c728379c0e300036d8ca0576f4faa93","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617219745-6534da20.0.tgz","fileCount":181,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZNHiCRA9TVsSAnZWagAAX84P/AtOZZuDN+e1mlNLOLYi\nmPTBtg4hCSAoif01eRfLd+YuyS4y5bpvMQigmpHwImmmIeYFguxyBSR4Dpzw\nB6AwcIKnE3vTeoAiDo+/yNXBqgRSQ6s2o4XZ+hFWuME5L42H23JyDG6gC6rb\ni988yX5JKTHVJVO++zTsjrokUVuUrznuz84TfBHpB2bVKoZwdSB7lOG+iPUJ\nv53ptRhmnen0f2SpXbnAJybPJKWxzshhFZVMfRLQ6bNKMXzERIggORP9LTmP\nhFaEOCDUpOL+NurXJhVwbavpzhNXVTjdSfHXTou0RdK4GXP8DRfRPDf/a3np\nul49zKFIuGxYYk5gRW/6v2nHCVIGNQ85HfJnsWu6CWs7UrcKB6BaYyp5KMmD\nR990cUYpmKqTAhmWQB/278F83SOCQ+KrjvWYzm92PDIOhfKAkFcOi20kny6J\nDBDZ8vcXYymuGScjgcPcPnjXoIHDUlWrmAxzCm5PKmen58eGLlAFLzDmsyII\nSu5NjWNogR4fGElRxSS6H2U+rrBF/EZFYxazMxeN0vjdlD5NJKxEdIamsYt+\n48cjtf1TIKJdmZAeMxu5XNfsp5L+/M/rJQc7DjjOsHqNb1tImkCs8BGybWf9\ndBfH6nt7uLPOkluWap+m4Q291K/0KxYh4O1gLWYkrzU3kl9E+vh3elWABsdR\ngiog\r\n=/VSY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBbRszHP9RZtUdNEuvgv7ZBVZ7G3m/eWS6qBlMagj9yzAiBDM8WPrwNB3/AZ8EuwiFu0we04751SbNdy/OmxGaqi8Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617219745-6534da20.0_1617220065742_0.28763737428973934"},"_hasShrinkwrap":false},"2.49.2":{"name":"@xdn/core","version":"2.49.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.2","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-GE7ecUtyUpyYqfeBEdkgOwO5EU4ncp6Ci6GM+0jFG0STAewq4n+wF0KgfYK6/NO+EyJGsJY9B/oneLRJSFuWzw==","shasum":"e50cb4b243f583714a0aeaa6539bef84fc14ec21","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.2.tgz","fileCount":181,"unpackedSize":667903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZPzNCRA9TVsSAnZWagAAlY8QAIQ8NAiecawc3hhyQdOI\nbz3qRgNQ3Z48ddnAs/YEUPKtz/GvzZcAJq7xa9HmAQX6zNJ5Hv+cHIUsMWyq\nXTnfYAuE/NGXy1/q9n/4KBoh8rccklm5skNPKx6U4XfesStLWln1K49iNJN/\ncz07FA6/fkcMDZUtLMfLlO8oRvQfSpHH/qYAJYGceixLC8GAPptYLeeNEx+X\nD6zEsVCL9e4ks7F9QUzs/fG1aC4O2yPz1XnNNZsy29ZaH7kvyS3z0AOfO7F/\n3iCbISYNsaRiWev1xk9PXGOU9B9ixKCUPhr0TCOpK07W3XxzJXnTjuL7AQ8Q\njXf++akLY5qk2dZ2YxMD5J6OR1IVmaqDk3n+9wrbRZFz35e/yaRt5E65q+Sh\ntgJ+DQQB3pUiqlb4XSaNk0uEtE1Ps7eKwFKS1O7bJ1I65EyWamw7Q/R9IX24\n5/GzWjiDyTCFjQ/jLc8eXdJte7WT3FwMz0lfV4cWw71BGZHmLILjS3Cw9q0b\nW2109oKb/f1lCxLFLe98ISs+vyEJRLbLzH0OombVFHctb2ruRF1ObFSeSqJ0\nREGMgi1sjf2W26wUl34UPnxtguGS9ZiWSu4umaIn71LLkQjsop1mo+WafD6k\nnsWo0uwRV5u+8bdavG/uKhE7JF60GTHtKQW62470WOb5UNtn069cSFf/9eyy\ngxvK\r\n=Oc49\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBDyWRC4rboauJWoz5kDmbLD3wlbtmpLA1j28m7J992OAiEAhDGvoGgunbLtZSxydHyXHGVOsRw19Hexn5Ry8bsVr6g="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.2_1617231052745_0.8711873327324131"},"_hasShrinkwrap":false},"2.49.3-next-1617234085-699fabe6.0":{"name":"@xdn/core","version":"2.49.3-next-1617234085-699fabe6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617234085-699fabe6.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-XYL8ERc1hK8tJs8dttIQiJCOUT9BNvLGcfmHqZ2oy6/rDV/cdsiZ5+geojpwYpzA0E1zrLd9/9dVV+qQBgFXig==","shasum":"79aa1a8ed126a59d22b9d0faf47c07fab00d0000","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617234085-699fabe6.0.tgz","fileCount":181,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZQoZCRA9TVsSAnZWagAA5pMP/RDBj2fqssrwIluZA952\nep9iGFh/0Ajjeq+l6DwX6NZuwaQJ3Pt600wFKgQ/NvBubV/ykyG3wzYFYirW\n6zr2tY80n+IAJAuDdRTCM+ptOFENeSF2p4wuXDIONbK4513axiuAIiRtDIw4\n962pqxqQXUTWALveq/TzklOBGnVuvXnKS3kyZKQByonJqSqLkTdY79qhxX3f\nCim3BwbnMohOqgS2YWTN7tghs7wP6jXysB6d3KYTvrD4AJ80tArsh2K2cgCp\nLu9MdAGSZxhLEyZAt3h3GQ3fuhNlEM4IMBxgVoPJl4n/jorTvN5VOz002B87\nubuxqBo42AEMn2lWAUQ4UaeMfSfeMxCzGVKF8K/VPWn8EbipdUjWF9/1EkSZ\nv6Tu6IffQ/dFAOkv5QESa1kvHJHHiRV3B1xvXllxeAd9nFFLvCxGAKulR9UK\nZStnxxANzezhQQPnUmylVfhg62aK6Hw46X37Z7i+cTzkAJKkQXHhZaoV+DXI\nxlgZ3JPNOO1AtrseISP1Rv+rgocYFMA+X+WpEsGqGZQfDPqO7ApEgFIJXOme\nLvxBQEHzw+C9i8HFGc/6OFa3dwt/vppFxpMMNH7BQgyWu4NYktI1QTgfzQwq\n5kmMya/kl4gfNfYF3C2p+TJi69gCKLEdUJfOhxw9udgyi6+utmVSga5sMQI/\n522C\r\n=yia6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoT4/QyyV+/eTa0tMpWzwYSusIPnUr+EMLMarPtxBIEwIgFTmGG6AnsvVAWrrmiGjNcmI6JMFf2AhVLteVzBBkMb8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617234085-699fabe6.0_1617234456942_0.40318324325299604"},"_hasShrinkwrap":false},"2.49.3-next-1617236816-f232f058.0":{"name":"@xdn/core","version":"2.49.3-next-1617236816-f232f058.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617236816-f232f058.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-BFim/LinuNYBat0RMrAxGDyKDpk0iKRJTpq2XCZVryCQgZ+Tg1nIwg3KcobqtCngkJxzV5WtK694ON4s0VeUIA==","shasum":"9a1a152f8eba6fe1b5586db5c997d9a363b46015","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617236816-f232f058.0.tgz","fileCount":181,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZRSwCRA9TVsSAnZWagAAAI4QAKRql4zb2YXEeR1sY+ES\nkk73F+2NaAOV9S3nSxyQwrV7dab8PIaNvAgomXNdLjFYbfN+O/CbEyOLDSVj\n9qIGRiDgnmUVY/0ur5S3Y3UfTCOu9a6aXnztGep1DDSY/JZK/ibqsbVPFz31\nkzEjUElT8q6e0KHoNnAPH/9L5bi597cZSl8M/5EHkYbolWndupYmuj1hIc8u\nDllTW9BzvtYZsS8dvuA1r2U2naq7fSG/fNig/eCOTC6PgayoKjYvGyt0XQaX\n2mrKYoGpButrix+ZEzt9hsM3fqE7HGe1TIndQ0j9oQWxHiLs45wXd1U+SZeb\n2eaJhuNj4JrXSbUFnQJ4TT916dvuqY0YI257Nxd6I/BAktXK0Tpp1aqrjIXC\nVWhCYzQi+c6SVHJuYZBgdiC08ksB9O4pGiTqJuTCeZz5/YPrEY45em+u6p1X\nIKEebpa8gwRptt8Ka/XAcpxH0r6esHnkIWoT0vdzY/Qjkyk8DsUYvprzznp0\nxMgns6TAJPPJGguGJVy5fFDNrA3QKXqBbJDuw1cE5mUGfsr4c0EFFur2/F1w\n7wi0km9FsA1mMY51hLw1Jza20kaUhRyfXCzUChJSGwWOCvnAcgJuSHynbj+l\ngu1kibBD+Ci8AeO38P9JPP+AH734HDlVAVkXRiGLjr7Fd9hkTy2rHe7Fy6mN\npMIn\r\n=b+SE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDiMHkIuo+SY2hPl9/c0rW+co3F1dpta2t5Ac7dKVlOdwIhAMkeQI5D9CSOO052rqTkjx5XK1WBiaNnmW3cfiGmzxkf"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617236816-f232f058.0_1617237167489_0.48635872207261377"},"_hasShrinkwrap":false},"2.49.3-next-1617243586-83fa4dea.0":{"name":"@xdn/core","version":"2.49.3-next-1617243586-83fa4dea.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617243586-83fa4dea.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-lTjGBqAZ8YYkNBuRyYJWvXVOfxxs1sWwvckzzoqbY6z1+c3SIb/5lbbewJ/hhAWGSiiylED5LRxk2YFoDj25ng==","shasum":"779562c8d1846f318da43528c00e31c2c321de87","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617243586-83fa4dea.0.tgz","fileCount":181,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZS8LCRA9TVsSAnZWagAAasMP/ih2WESPbrgOqB+cqRcT\nt4IrQpulgOkEWbWzLHaL4mCYdLsGKLm4GZMMr1jUto2PsU3E5viKY3WGqjCj\nKeH4suLdakk563lF8YjnYD799N71vxkRsrsKh4SXzARzDj9UCD+7xFaF8PLz\nvMiu0OA23RDgAbLXUeJTV3edKwbX8jNBatcU9c7c/xFiX/YKjipJaF4yD7ev\nv5T0JVm5gTFKyWsCvZ44uc18sGYOZ1N+rF1KIxGquNzCySz6Y2KLk/6omwdx\n/SNnwJz2Fy/zjxqdYJDXy6RNyuJpjjvevtlk5OSNeP5qgXoEg/GFcEbA0cmi\nHyl1AxEg9jJb89Trxd5xPuX4Rgy9kZgHNVurtPbLPhFw111XLbw+9T1vayab\nbOQT2R/pltFnogRojNVo1nTkYtGhq2x/PITvrfTnPxi02SQZMFhicj5HGyJG\n1yjytDaw10ToTMFwFHJb7mbg3fxKF9ajYXX66B1RbNZsSVk67n0C2z6FCtUW\nJfiTH8Av3PTesRSj6c/aVRdjtlg4pyuL0cQwIOwIbHDj8UUF3wUm9cxfTHQv\nBJxLTC4QNSHaO9oLkbZUoMcKeJmE3osOBR+AQSlTJ7eE35LqEqr4y4TEzKyi\n2rx4ncjQ9YKFV+vihsHK7SJL6PLEHXg1bLoe/sBNFFVMA2+FIzZQQE0Rwws3\nkzNt\r\n=C8D2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqy/3dvVnmSNSjmUdfx7CNkXbwIWcngGGwDXR/3tKYFAiEAr+/cQeqnL7UHTh9Eh//OYVlFsUDO+lXfe3sgc8a2xxk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617243586-83fa4dea.0_1617243914581_0.28170155887836335"},"_hasShrinkwrap":false},"2.49.3-next-1617247905-c35eb306.0":{"name":"@xdn/core","version":"2.49.3-next-1617247905-c35eb306.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617247905-c35eb306.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-M8uMM9ldbykO/IAwBiL34t1f8QrtBm+yqagfznq/EcsTdZh3eXnQD4nLT+OzQZpOUkk3xwfHelN6v6ow34eTaQ==","shasum":"1dcd344f0417844d962a96e58613dee52c7c7537","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617247905-c35eb306.0.tgz","fileCount":181,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZT/+CRA9TVsSAnZWagAA2ygQAIp/ZIMlLYUZAkv8XkXC\n9Pwypb83lq3qC006kETsnXY4l/Zg0EWgO05PDgIfEBynFX1iV1dGgeyg3rCU\ng2stQmOQ280R50+o6HRONQlQ7eia9gVnC+Rb768ffc3ZCtDmI3RkCEjtkMsX\nswxvjyB/pDI/17+5gK/ktPRf5t29g0UF/kz8l46jro8YwY9EzQBmVYsOnEQD\n4Iqf1j1hIBAGscnS/QMpzur5jKaWs+M6OA0YCQ3RJTtmACfVBZMAcldgIZYy\n1NTwRSep4W0e4AnA4qf8b9EDGsxIbCfroFP/se3CXRT5j75Rx8VFoJDxAdlJ\nYafHPmzbw8V+pJReVtAOZqtIwZ8cjUMVooozW5TQ+d0VS0K5mI1qAnGEs5pV\ndX7z5A2uVuF6FXQdyU83FkOhEDsJ18U1/IYVLWoj9cFW7rcH3AqFvpF0n4e+\nZQw6VA0yLYsYBSWw9Y7Bdi8EZUxcR4S9pRuAxw04yjuPx8mxyUi9o4lwMvS+\nlDjvbgRDu6UrFQB9+NZoN6SMqqCEMXj9lCntnRjgwyn5nsbY65jMnoBz8wnF\nJvXuPoT94ljeMP4oS/G4wNmglxz8uWcZNH9jOcBMfVChKm6bjxkLW1kBw+VU\nxoWhcvcAg9w16FUS+NSR+8J6Rgqtb/H041SRcdXjDIqt9y9wx0/ON/inP90t\n9bDi\r\n=4h35\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCishy6ahnFiRzZI8OqOVqXS6PVKcghx9ugR9oq6m5zfgIgdsqTVqhH4v95U7g7grjQyhuLJIVPphQNsd6a63+gvOc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617247905-c35eb306.0_1617248253758_0.605240697529053"},"_hasShrinkwrap":false},"2.49.3-next-1617278888-99f744d8.0":{"name":"@xdn/core","version":"2.49.3-next-1617278888-99f744d8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617278888-99f744d8.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-M2K4ns7QrEaIcic0V9cPKUtC7FnTLeCIGLtGGK2clRYB7ycSuYWYsvbqhzEX7KJTGCtWPRW+G0Qe825MqUnctg==","shasum":"0c8e5385c991b5974ba39de7d08e69c7d6223626","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617278888-99f744d8.0.tgz","fileCount":181,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZbjGCRA9TVsSAnZWagAAXwcQAJMpgoVmAMeKWst6D3sI\n+gI+NMqm8+CnIIWT0OTbBH8/b5jU8PbE0vjPLkaEsv1wIu0m2rzE71iMarRm\nVLNptAb6UG6hfb58ZpVhvLGGUa/tduDHwMTZ+foQ5HuXkHGRDopx3Ktk3IeR\nyjVvaH/xOHsr5mzZTO6bR44XQ7UXgWdimIK0qH1ZkNraUXKX2FHEAWEWZfH6\nbUGHp2YRXybIa6Gk58vdbiAbSGdYXtbEjisYVN27OWWwkqfMuE2ZLUHexaFY\nwJjGj7Qk+kM3e8Urkytzex9hs5XGZHFNN+nBpKACkhU7zzOHRpsbbstfEFWb\nTt1y1m6s3NsWgYuTFRk2UE9bZUblAkkUJM9gIiPdO+wkdrDDipoAlHHftv9n\nIZ/LFxfWL5oclREhmLC9tY3An2jEz/DXuFIXte0lPlPfO5IRUWSHszhJP9zi\nnqBQYOO1rkh5K7gfLtUMy/gu2KoHMalbN0nelHZ1Aa32VaYipTq3WfwzjNpy\n7qxcBxiA0/POJVcSQ7rMi4pVAnqXc0v1g8+4soyXQLT1lThpnM8iA8gqexHt\nBUryFmz8XF/sNEO4J5/X1spRXcfsenfgYm0CvS3I8lDVey8L+fBbjRV+Z3Wp\nASLOsCSRtEjKaNDq5ruPkwYIAC2gHXGyT74nDZ74gbZbgCqXPnVDCNET3J4V\nBuux\r\n=Dppi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAKlhJ+rYdizXjdqva6fktyz8FRvU6aZ4y1aeCdc/hONAiBaTUKipgNQkCo0/9/UchGjgtoyF0VrYOsiimeIU9xZew=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617278888-99f744d8.0_1617279174258_0.3161739329836175"},"_hasShrinkwrap":false},"2.49.3-next-1617283027-821b95af.0":{"name":"@xdn/core","version":"2.49.3-next-1617283027-821b95af.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617283027-821b95af.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-4MisUTNj52ZsZARgtcQnfbPHMCMIksBFSpDzUv0nnhZqs99llgHsTr0GX5vIEENUDNMvhd2lbCaq0oO7GjqUwA==","shasum":"e1dc862ad693deae9b036abb097bccbbfdef636a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617283027-821b95af.0.tgz","fileCount":181,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZckMCRA9TVsSAnZWagAAnYcP/A+GjjvQn6VT4aeLggxX\n5gKv14WVbCmIeKTdmViEXuvdEDTpNwOMgfcJ83B2Kti33fi9F6e7Mr7XsqTx\nscDzVq0mo67HwMXB21DN54u8rGe0eyL/D6vQVlJRpTB8GVvCWs1XlP/5II9j\nRFEYKSZfoRlDNENqUkQaw9+wMaWwql5sAdzSw/qjhFhQT8XVVcuxDIcbNg9j\n7gwzPKfyr9NUivwjdEMaqXDNUkJ02tTK3cr8Vsbw+m32iHRuwx5szCvSflf8\ntnWgTUXY7QF5CCEGlVEhiPr3wJMAuyLbs3N8qRZiR1p54l53gRK9zNEz1rLy\n88zpR+ZAsm2lbIP4zkStkDdz4bXQLx6OuUNNLaSx8bJI+UrAltbpgJ4uScpJ\n6TwWIJSqI2ZuJkYI6uQ4me/2PckwyxX+TtxTCMBJCqEWrJhWk6VDg5F20yNo\n17xCxK8k/L99FU67HJdff8QtItSclAAsaDyNrKPgeoTgNBo2lhAyQxvw+7hE\ncWLcQsP4+EwOcNJGpGNQwBAmxzx42hyZPQH0geR3xbpLk/6F10vHzJ8rwkyM\nYw2FCRg9GMbEDXSzbPzIHE0S+IXAiVstymNdsZyNtqyBA9N6usjCDfqkm4+S\nwXl7XmQEwgTMtcsvZaXUptePW588CgE5de14OByidMGxf/a/zxsDFqX9Kn46\nJ96M\r\n=zp8G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDP1FYL6bVA/Ep8+Y2mHgD8pIDzcLW8A4xwRZa0eraTyAiBXZMYzWsWMuTK5d7+Gf3VSCP9DMms835+AdqYNxJFxBw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617283027-821b95af.0_1617283339876_0.3102282591942338"},"_hasShrinkwrap":false},"2.49.3-next-1617288986-1639cce9.0":{"name":"@xdn/core","version":"2.49.3-next-1617288986-1639cce9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617288986-1639cce9.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-RgOmkdo5eRXw6+6XLdoM6FQDebyrAWkxIGnHFW2Fy2cjKlUaTc27jFCL/E20wSiaG7G49Bi7A1eibYDEYlCC3w==","shasum":"e062b21e0cbe32564f762fdd825ab14f61e2ec3b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617288986-1639cce9.0.tgz","fileCount":181,"unpackedSize":668919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZeBGCRA9TVsSAnZWagAAc4UP/3CBOGwJFmy74CjWktjO\n47BGzYL03/pETk24ixefxmQmO96mm3gjO48M+H5lqIZkZpi/L5KBGZsKcMsi\nqfuTO2NmRs7ADSXHJa90MUVmmBs+NxACNTFJzsBWIg4PBwDT5o5+dktQnp92\n70zZt9ByaxncNXV7lP4f/HlGqTvbHLeyjBENTAHOxWXOlubdEXhJ5N9xxMEY\nuFdyyi/BQzPHOWMOGdD5EkNvDghNALTg4Bu4XIZ7RLXw9xMZrbANUfOg0kGP\ngdqlEUf/yeN7bN60C1WDw5vppxsiqYOOGjdHb3dQLlH+dzeg0CKhqQ/xqnFi\notslj926bVq0U17sHsOiF8iUftyx8xgCiZEMH1JaMU9PenCj48tzLwAFXfP8\nBu3/jyAsw6nTCAjGGLmWUFkr180EmuVCTortrcnaemzf2gk/7JtVe5fgipMa\nIB770OmMqNsCpICdSz5SYJq3buwPJQrcuIiUrOwO5QAeS925kB2Cwtq0JSL4\ncn6vBLUOuHOLq3UuzndGxYWnK+ERDfAklwxFqR6BvgFo52YhtNPeETO242M9\nmrAHXX6y3HlESaYvYDTpCVx4thtxVZJJ0pjJQUfctEQttrnTCd34foxLwJWQ\nBB0q6Da0a/JH8sQyfpO6+jTu7eQ66Oomg9k+CN/9MMvlGZHFrNVqdZ6b5h4G\nwhYc\r\n=d0Wb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDXvfBZhqPB7rLN72aNayP5PQqbwvm3S0UV037dsDagGAiEA+rZ8Sskh4L8CaZBHLETHETRAIakqpp6OUdhG+An1h8Y="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617288986-1639cce9.0_1617289285389_0.28523993829039673"},"_hasShrinkwrap":false},"2.49.3-next-1617290912-197ef286.0":{"name":"@xdn/core","version":"2.49.3-next-1617290912-197ef286.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617290912-197ef286.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-QsNNStO6AzAjMdp8t9/iuS8LDddw4Pqnzl87HuPISjhHTCVx7SxrONAGggXUOcbkg4K+WQo7c90X9OSR3FAG3Q==","shasum":"183835f9e66f68353f9e5338a50baa91d7e7be9b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617290912-197ef286.0.tgz","fileCount":181,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZefvCRA9TVsSAnZWagAAFfsP/iYlmcTQgHJTiLVoNH5s\n0swzL3GfFVlDMV5jVFBBO7zQ9O1EtwLuCSOO+Bx5iuQbJcH742XhZtcbAt0l\nB6vrq32jUbGxv8U3bFBGa1M+k9TOi8p8ORuOLBiTYa0PsEeOV7qf3mZztU/k\nEg8nWcq19O+TKNGYhFssXwTTWeTH4RbpB86Djh6KM6jukN9rcE2VJZ7kF++A\nl3cJYaZA8//ENYwVv/hTktl29zBjRn8mK2bRB3OsISD38qixZ5nwU45t6c3O\nORQg9yObhxIN4QEriOHKZJRVxoODVysnPhfwSuVukoHY+xNeGfdEqynSu8MY\nQ4RWotvIkANUzaRpxZyD2s5VPF/OCyekyYUjPT8IR2SIbQ5q4b59Ho+v1UTR\nZDRssuiCZC5GUqZ4L8RR/XbkyhPtEnoEBy4xP+NPldacjRB08xsfCOyDxMvs\nbis7UFmMo1rWUVJB2bhOt8UGdJ1fChbZz8bKOUUWwvwuIYIUDJupBe49BpmP\nS3VgOjM+z/uASRvnfMGU6pUJnh3d0j6up5wD2MX2Q9mg0kYNlvFAJbIEDKLg\n4VhYYfUqO2EGnTzmzPvf2jjLUWm3yeABkOgsCdPb0HGdyBbNf/eBB1TKS1ot\nTwflNBQiTth65+sbHFhf/lv3Twg49oaeS7QNjzfTJJSeX/d3VlymfRvSkaY9\nvCxA\r\n=4c6f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAXuPnSusjkCaFK/RIU6D7ZtbJ0Ua0H1G/MWYkwOWzetAiB/sjWdQ9WIrAuXFMLKinvPN9rWudghB8F86mI1Vli9Jg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617290912-197ef286.0_1617291246194_0.5178420145953473"},"_hasShrinkwrap":false},"2.49.3-next-1617297771-1d444ca1.0":{"name":"@xdn/core","version":"2.49.3-next-1617297771-1d444ca1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617297771-1d444ca1.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-hHkLfDnJU5NwN88vHu8Ylvao4pV0Fkldbp9A8Zi2yWQz1z2dDNPQnUGPCNpWJ/w8YV83HbvPx8fXbgLAkGWOhg==","shasum":"fdfff37e143c79f14ed3043c44d70a7d3fd1a5ea","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617297771-1d444ca1.0.tgz","fileCount":181,"unpackedSize":667973,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZgKhCRA9TVsSAnZWagAAu9YP/jLMN36y9aP0UJ0Xycz6\n0JfyBANJ0WbSPFAoH03NIJUyH1pOWpnsfqTX8VYQITrtlp/T5Eda3DFUbMtY\n2/V+mrkkIP6XBtYEMOzxraqNaGZnRgN1+QP6ZE+0eM73VMXOXuNJ7EaVPf8x\nu49n1KteeJHDXAkwO3zXSoJVRrsFTDoJlt7cFv09+emIi4ttAII6w7rLQzFy\nQGfbpssikunFRlI2W1ve/M2uffO/XAoAz9SQZO9BPZd3mpKYGBoF2UwB9TxV\n7MXjCt9jBlTUw35EZihDlypvO+yNDtqEbDSXDfbji+XL9ahmcFxW4ByE+wEt\nM8/OROudiwAPhl5Y1pSGZuCg906afusmbZSWfJzls0El+UFBNotz7nhHburO\ngFnMbgPkmVxh2u1b+Kz73/RmOYV359G58SQjKFG1ajPNVBBsgslJ9I/bYllG\nmMaLViCZK0OQwReTdOH3hGdPo/9JHcXDPnsJoq+EU/HaJeZK6lPB+PVY0W1X\n+2AvkFKy4qSuFCzpcDUzQztrYlmkbLMEUiLLodACqblvs/VnThTzSH4EZZFp\noX5kLT02tczFgBFDLLYZ2zwOCxIFRdEIV6c9EYXWhZMW5F+ycl0fI/S25GCo\nLX8U5WPr2xSnILIoSfJoBdw4vyJ6LlYfwBR90xA+moFIIQkWBUhQzaRRRAkr\nla13\r\n=qzkl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKMgx/b87jwU18CL9LzoLcuhF6J8pGim9CGeNSbpvtHQIge7O08yZx+xwqwUwoy6w3HiI/PAIG2qMuWH4K39McQt4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617297771-1d444ca1.0_1617298080828_0.23205733048971222"},"_hasShrinkwrap":false},"2.49.3-next-1617297959-1a5a5afa.0":{"name":"@xdn/core","version":"2.49.3-next-1617297959-1a5a5afa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617297959-1a5a5afa.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-8SSmFhb+LxSclR6Vc+oGNV3ZphV1h53v1+qU+iG0qnP0m1E2UUpA8XVy1/dv5cZT2UrtI2VdqDXzOf+QHvV+xQ==","shasum":"f39e01457214ac474c7485b43b0a80eec08bf775","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617297959-1a5a5afa.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZgOLCRA9TVsSAnZWagAAAD0P/1cZDOcJszrs/BlPEHvR\nhIwYLXtpxDV3BFBiDHPAE+L53xA1tn+PrhWvnOUtkT9wmtQjpCkjMWEkHjTz\nHNaTNaHQ/K83TVn4PSd6ZU6KIIsJXYxUXQeLDb6wAUSSG9cSqBAu3MQrWzhS\n6biFWZGgvqfWzH4v9I+Mg24QfLnChcgVA1Rgc679o9O3fyZ+a4FBa3WqnEiV\niQ/vcbQwrm3ImqoqQjFz8aUgPnuBxPRO4xFDgESffcRDqioiXmlp7RmL42KN\nFCW+UxdgjYCkylOH/y+GbLWOq6SDj/hUzTZwXKQBw7++9jYCQxeINo7prX9t\niOu/JTc+fLpy4WVLH/zo7N2rzIilHWRiutimR7oFEEGy9ACKXURqvgMXck8R\nfYtBxjIjO/55KKrbrlEuCrlJhclLRWuiUqoFiRfBPsPcJQ7THOhkNRFg6mfY\nzBI8dVOSj4VQriWiqLrHynHg9rAbk68CB1Eosh2fDJ+/2pq3G2GfoD+YKXIn\n9PiOcShgLOppUSf7Sa6F6R95L3nUETuE29SHtvBkHTMUW0ChnlluBBnnfClU\nJqX+QufoDx7JBNGcEWjw4r0lSI+SyOOi80wG5kzBkAoqbsS3JmltTIoYtiVe\ntKg0lXTjM1t8BxVJz5YlrXm8yhwBw4FRbafNUPGl9nsvzT+vzluy3X2j0Agu\nO3BL\r\n=4q4u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHORQK0kuzPZVZhJiqeA1ol/Rms2fddH2tGD5qmh49QSAiEAqrakVCJH5Ju79DKTqmk9u3PBdC3IsUu4l2Xeq1K14Dg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617297959-1a5a5afa.0_1617298314419_0.6998432311784328"},"_hasShrinkwrap":false},"2.49.3":{"name":"@xdn/core","version":"2.49.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-T3zHh2o9onqAX0CMyl0eHKGQFjq+wLyaFcj4dZGXWW0NEFdDepSTXphf4PKRZZoNCunJEi9J6fCsuNrpa4XZZA==","shasum":"882c9ab1afdfe12015abe83f03015aee63d77710","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3.tgz","fileCount":181,"unpackedSize":667958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZhSyCRA9TVsSAnZWagAAdjAP/2t/tsx7MmM2fPJDiytw\nWLoDX317aSbQDbJlevk1pVFhorUkLCMXjuo298l7Rn2RS9iD0cAmBTigSvCe\nGsWli3gwTxBl2MhD6r4Hk+4oHoK/7Bye6Lva0NnjfZoxSj35Yhm4l5auuQnb\nyURME8O8Rl1fhFWp8pUNCdkJAe0VGyDHuUaimpvXt12JBU5mPWip9q15Ufh/\nnHcBxHZOE8EHW0rzfzF0euQ87RlG3OBpxE8ibdmyu16YcIQ4819vwmWZeSv4\nAW7foURqmDWwcTyb6VlgQ58EJpCZtb6Sk/zJkk7hfJhNPFs3PB2EPlGGS/Jd\njZEQHjjk04raZPuC4Cx1tdoBJ/MaeYS1TJskafIFPlGyQZOqOSJ1vGv51GCH\nG9CnreN7eXeHCpjA6zy0UgO1vswgECe5Aq1mo+NIJKeCMLhvgNVCf8/pNP8g\nXJ8E8lMoO2zZLrcqep21746opO3PdrdFqgacDO4Eol5zdNxpqi6paNdNPpSZ\nw4Q8NVlrYzBN70e0vH91ZOcJotyUyukXVPev5tLLiF52ibjAWgiaqvDcHtp+\ngshfq+6q/M2VpA1fGyb885LXw+twUe0G604XJPYledLt4rhQfXKAlBpscaLs\nThfoxdGnRcaueXLlKGA4gPUaaY4yir67vC0ng//lSh4rFKvruv7+eotmX7aq\ncxDO\r\n=256J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJlqyLEEGlwvfrwec5fDV/CzWxR5QCIs2n33aVgc1ZCAIgJyjEbSuuS1sMBB+gcFWJpxpG+2u57yzmN7bAweKYrns="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3_1617302704501_0.7923565664236114"},"_hasShrinkwrap":false},"2.49.3-next-1617302441-3d0d5e3b.0":{"name":"@xdn/core","version":"2.49.3-next-1617302441-3d0d5e3b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.3-next-1617302441-3d0d5e3b.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-1wMT3/cuObjUDm24sZ7N4B3V398RdNroVOqadMJKN6iG6drNsVupT1uJ2m3wygfWQ8mz8tdAqFnzupFouhCmmw==","shasum":"1f9d54dda501e78624adf18f0adbd9713b320e1a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.3-next-1617302441-3d0d5e3b.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZhTsCRA9TVsSAnZWagAAbswP/jlFuA36GMYT2t0vF3pB\n5Q2zWLpmIjaQPaE8uPdzQisTXL2GMGjrEmutdRFmdtWpXDE0NcNU7C4Shen2\ngAi5KD9vwl4guKZlTt3lwZuGiUKkcLJ946NG25xCUq+I4ru7sfISGibOoMEQ\naAt2Xq7bCckrmvjp7katYw3A/Tvz9OjB9iugvI7N60GAcKk3kEBE+kOOahSe\n4r/cGfs65zMEcEY/lLDodI/bM1kMxUG7Ovv3IexDq6xbollCJyoe1FBMB9+E\nT8HM/aU/1zy0UaHh8i3BOQeKqdsTYAumIQhdQa2l21trwpK1j+RanBfF3og5\nCjjn06GoEau665I8NUXwdlCLve4TAYpq3mOUi/ZCjU+XR6e27ZaJWuM82bRd\nb29/NjL7ZPwKPo/IoPNuVmsZ6HjbzSUJCKrtpW2B187iYgLo9p9sRB1Py5eG\nwn/MtTjtZpDmguCVGg6clrYCa3ADwTtuDC+ja6HKqWDk0C30nMdNw6TM9wss\nnL0+Ix9Q94+1LnYSqyoVNtXvc+F1E5abATpHwHuAlgkLvUbiV6wxANvpelnA\nisjxFPslUhKZMS/UHM55O6lxaVZq2XS0fooYM/XTHn1tG4jiE4tbQVSVYfDR\nTcEEBapv2LKPjL3lDQL6gs14fT5sPeUZukPC0MZTVFIHgtWQO9hWIJOCgYNa\nYWUn\r\n=ZLEF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHE+Og3BuWr0B9zh2e52SmfEcleXZS0JCaNge3Edp8l5AiAr/mHUdQkbroHOxM/rK7ctGy8wtjlZchc4lyk3nN2erg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.3-next-1617302441-3d0d5e3b.0_1617302764023_0.13517552213840545"},"_hasShrinkwrap":false},"2.49.4-next-1617302497-329f2fc1.0":{"name":"@xdn/core","version":"2.49.4-next-1617302497-329f2fc1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.4-next-1617302497-329f2fc1.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-kBWyV6sqBwew5L64olrUh3C16Yul8aRFm+G9QsqXmDCNBkRF+0c222ECnIhkx2B+ghQRfTzJP2hYehC0nFpA0w==","shasum":"ef871b4442b2f4df9b4961cf6b726a7f7a829f13","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.4-next-1617302497-329f2fc1.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZhUFCRA9TVsSAnZWagAARQkP/1GvCm1WAL3y0WcMw2er\na+9YZTLA142XIZpEqUx85LJYUGC4Jbg1JP+cx+ZoInGMy3EzenFzCikU09CP\nvetZaVxZ9NLnyoafGc9iv5s1a6pFnRCE086XRzMp0xSTZ84K+CBCIQZbBH5b\nbZMQJDPdsEp6R2ykL9qqNZR/QR/ALU0+tfdvWxgkphrnAcaZZD7uuzw3D7yv\nei8DI1p2JiUGZXIHtIQogf1vwba96ugIHFVTIr4X7kjA9UgZcSbVKOiYWsWB\nmTt2PzckoEt82yDN30n5HFd7qj13xbhVZZ86tZC6omdXm5fil39/f+sHIjrd\ndhXcQSwLfg1FfMIXszg4xKa1uZ8gxfTrXr6emUVmSEZrVsCAKa+IAkWp8uRi\nECx+KLfyFjBMBZ0+8baM/hPWQ2G9fEk5KntsQFzBU6Uny/iX6gX/xLbs3Jp8\nNdH+tIU/lTJyMlCQ8n3CJfocZaLj0nBahz5swld2R9PBTh28TjL4wwMYZtcP\n3PtFBIy6LU8MrP3tRQ0NjShNH5dLn88CSKo7r1WgaIxFYfjlZd3aZu8KncGF\n3/zFhGQi7GTC65ScX69NYyfiFPdAcx/iSGghchIY7YLtdL71K+soKZnZIbS0\n0uFZQMlOgWTtVWNQ8w/jSVmgtdga6682u4XdjkATxPRMTyqbiwpqaFqMIESb\nXP1+\r\n=7X4D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCH0fwJnpc+MZrQbtWODbfTGN9Ci2lwpkf4TKF26YQiX0CIQCcTJHLBjHdSb8bmeoClFTdJ6s/1Va0fuhnvXS6weasaQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.4-next-1617302497-329f2fc1.0_1617302789025_0.5199160590173799"},"_hasShrinkwrap":false},"2.49.4-next-1617351652-a7b8b78c.0":{"name":"@xdn/core","version":"2.49.4-next-1617351652-a7b8b78c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.4-next-1617351652-a7b8b78c.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-iZHEBg0QaJ1e6jUVP6aLiPuC7ZHHtVAevtsQOffwH+cTozBKM0GZFY0WTVPvJD25jRrBFrgcl11Uh0sH0zp2HQ==","shasum":"d1b0a0346b42722d365f061ac133c3af9ec119bb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.4-next-1617351652-a7b8b78c.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZtUwCRA9TVsSAnZWagAA5lsP/iSz9L4tLtj5pn6uMz9t\noFgm0qDzCAbzQKFm/s3CbnU2BUHTkCHQWwbGXVZrsF/llx8f7PRPNNiO9Bqg\nrejzJv44HLmlAffn0g8/dxOZ6brULG7E5UqtC/jAdHv9ogsH2IMB6N3WzzMh\nVK/BpPKjNloP7IgF6Y9oaAD0UylExRpEjTXExHZOqipk7GmbE4HC0OvSxaZi\n/oGUDURbEEd1vJ1fPhXAiAEA+Dx8mcCjICtB56HdSj4npWX50jVC0IeUt8/L\nhu8sNnmtK5bfToTKD7jRMWggQbrxuGAAhn+c5JnPoOxO0rxZsnI/tZJpmjOQ\nwijefMdXOCah7ZIVHA9QRJRn0fJtaYndDY+6AbUxeu2moy6NaMAmpUBkGN5S\nnqhhX2Dhg2blHXhC4JjAt+Dp3F7iT8uj7ATDbIum2ogiC26EhyMaT9l/b+V8\nRu32mo18r6sQTq6W/YjjE/UbqMnWZZpC/3qAX5YdYDm20qfRVFOd5T9HdX8g\nfkAGcvexmvvMeGerisb2ZN5DZmTJ/ctQpu+AdWfywmu22/0oKCLt9iIoUiFu\nQUyNDVmLJdE8S+ItTeJFWJZH75hRY77wUaLFLob7TGfBosyJe5sApPSdqSL5\n/FuwTA7XX7U0AAiv/8p9NC2Vn4jhGZPm1fJfmsRGerqTUWwMdDBxuPs3Egq/\nWD/m\r\n=uRKU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHj56N8zsi6Yg1KvBAOy5mvyZzA7PQvQV5w7TNHpT08HAiEAnaPX+RTzwtQvCV/SgUPwLISZ2ddOFbs/Fw3y4cMEE1A="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.4-next-1617351652-a7b8b78c.0_1617351983267_0.11110982484416532"},"_hasShrinkwrap":false},"2.49.4-next-1617355356-a824b631.0":{"name":"@xdn/core","version":"2.49.4-next-1617355356-a824b631.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.4-next-1617355356-a824b631.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-n5pmhzj0F5LDOJe3hxexvbHyr0FYwvBsTKu44X7dkAti2qH4eDS8YBb9pXZQBWGyPT1yqImNlj/2CbYelpdkGw==","shasum":"12c6b4c765e3f211023865c9f76cb77d67bd3680","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.4-next-1617355356-a824b631.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZuOpCRA9TVsSAnZWagAAQO8P/j3Fu++s4c90ZCcTboRz\nmRXXW5BYE8IJj4+LXc7y0FEzwZ1Jf2YR65hAIWdfRlQvdv1dBX6KL0mfYG/v\nic1VeCaVJRbKgthszEs87KbcL6C871/2R/Ix81KFOk7vrltOvofWy8qxEr5l\nqRFSCoLRTXiFUHwxOetzE1CxxxOtGLJJVn/vwyT1RLccMt+OkP5humV7VNca\nCHBbh67KSMjOHDrJ/VW5wEfZLICVUaZLAV40CfBYQyx9qYtLs3fFhzV8Zz4M\nwHrXkKt8NPy591fnq+IiG3SAiwiFJLcmNuWlzMRReB41e8Ortqfe67thSYLZ\nJU/d9V5v5pqq8J0HEb1SMQ6lTDwvN5zlJPGuYr2Z1E+G0sUzANzcoQBcLAsq\nfgEeWxO3HalaMB+3HNiiywYGNB4PCxKHWAJJAwNpXy6/u/qubpCiVw4ftBGQ\nezl7lTzNX7ntKENq0PdXiXmN+k2P+hKzRodsPc2oaeKI4INYlu7wGkSs03dz\nZ81SaXgE9+C3qHlpOfQfK4k2G/oHi9z6KMrjV+uUFXoYKPeUF7UIRgrEalBs\nEaTSp5KqVoQe0NzAoYSmqA7FiBb/CPhjknI6r8WtG99jLDSFCabOcc6gdxp0\nCsgjAZUgu5TJVmCxwFXBki1+HU3aJ+Ahchai5Pmacey/quEo/KQySjJN5HX2\nDZc4\r\n=0Woy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDi2l8lXbaYU1E5omccILGDmRcc64K3zYjPeSywH2qcHAiEAjkhHux/vg/2RMu2lfwldMq0Mo/lsIKn72NXvp/xc7wA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.4-next-1617355356-a824b631.0_1617355688852_0.9522367062398922"},"_hasShrinkwrap":false},"2.49.4":{"name":"@xdn/core","version":"2.49.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.4","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-MoycN8KqvIIv/cS0J4CgemO4fa8RNZWM+Ag/vTbKHPB4wZUlUUwTquwyvb8VwPFKcO9f5plCZfxB9CWAfXp67Q==","shasum":"259a34694b80887cb66dc6e6758e2027b004e04d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.4.tgz","fileCount":181,"unpackedSize":667958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZxpZCRA9TVsSAnZWagAA6qkP/3wTO0eiucJorCqqaKF3\ndedFhPoqMFc3s5yMZJp+iKAPjJzLCJy7QB/d0Ug6t0EokrsQlFJo8GadgLh7\nA1W92k4Eg0+qQkEen0eU6Z6kKYAHBnhUJ53baS3ETreke7dNqEdb5RTpqIVv\nnqalVQ0uVNHOtxbs1xzltu8hrwaKPlIqTYSRoqaziB0mxxbJh2hFjrYF3fCK\nkRkAxqyjGd6jgz6LNnc2BkE02RBau6PFkHEGa1CSgbTOmOLSehFpjZFDGs4u\nmYoGVIWLq8U+YL3ZFtJcQJ9rPIOac+QI1MbVEge1tQxznJltWv50KH40KSpH\nezDhVI7aoT4i188PGHm+kF9KDT2iySXZyco33Gx7/H/ym8YDDoiRZ+tGl2jh\nz0sdFh+ISOzruNFmIJhE75SXjMBJKD3CjAQsEe/jmcmGq/qzc03rayAX5Xg5\n7A79KLbrVUoLE7OkUyen+Z033Knilta2upVLwFR6FcKB3Eu12/tHgnQ9LgO9\nplTUD3j7KfnfODTAWUV+ZO7bYqrQPJtKrfnotM6Mtm2fwp8/gg9oB6PkGGC/\nxMtjq+XoFNMMjo/qJAljjbFqHxQRM8Ae9eSwi0w719jVkkMPQcP9QddN18ib\nqbaRDIHIS7CQH0Y3qVEULwVFps3eEbhx/2uzUwO2EdrlykFgiKwhNqlfyreg\nwrHw\r\n=HfQJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSvi8jZp8mq9QE5aex8tbvKaNISrqf0gft7l1f/ivgfAIgXM8xvpG9aEr7kCps0jJVuliR664MyEH+nFUIYoGHf8E="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.4_1617369689007_0.3116255777763468"},"_hasShrinkwrap":false},"2.49.4-next-1617369446-7d53e914.0":{"name":"@xdn/core","version":"2.49.4-next-1617369446-7d53e914.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.4-next-1617369446-7d53e914.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-HBSBwN/aprs+osYP07Qip85zdgCIoIccEd+lVMyRn2U8fHjzxv3XstiFKA5trpXyyV0tHZoAQXhN29LQJWEaOw==","shasum":"a9bbcc935de6f1f4afe19477e050d9068846be71","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.4-next-1617369446-7d53e914.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZxqRCRA9TVsSAnZWagAA3dMP/13Z8U2XkPyo3U5lnT3V\nuZWal4wvv4+fWDWAlZQIHfGnpEouV2pItxif9btnc/Xdvi5TrxtHc73+DNIX\nBcMzL9PO/XCuuFzN3xlPbZk8Cy+ROi80eouT/2NdfZpwGh+CM/BaI7fmBfNG\nMHqshZMZicI8Mo3RbnCsor2WY+nrXkf1F+NNVxUz2hjW1YcpNolltxdRzbED\nkXP4p6gONpKssPLqqH+yZPOERhRyNiXn7eMTfTOAhwFqbPbf2DFWserPVoOZ\nNC7xQjUHVaFIWUjWQbw4zOiJyLfZrftbXlorvvAOPw1MsQxAXI0VNNR/xEv3\nbrcL9MqES8xJWrpxz5Y9kfcu8BUG5eV6dCWiByZVEZZ7Q64BcgYlAfNLjumO\n6QJWgbj/d2KfzJggUowUNBQjlqmY7P/aQkg2w4L0sgXKOOi/vcLtuUgQoH6k\ngUWyUuEpJR6yY/6l3nRGbVdmpu0k2bNXCxvqu2dlrlGDl4pe+GTAU+v01QU5\nn6tyQe0YLbEquiRUUxHkIUIJ0efP9gH1mFHsTpgajzI8jqIGKblx3Rc/pm8c\nGQDTwEYHK7nt+AvNR6Tx3W6HQvr6x2a3fNfIjEqlScIN1wi0p/JMdvft3pb/\nA9pGr24/JWyIbJjv8cGfhf+0VYlsT0ZR9S0HZcC9FUmIFODMKbA1XegxHpsx\n7Glz\r\n=XRa3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDH0irvjpAtstNwYdgju3dBCMAbV75dHMeqS3P2cB3f1gIhAJGD9PMAc4QxqPulPWZCCbbBo0ZX/FdG2VnPkenzcPBl"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.4-next-1617369446-7d53e914.0_1617369744072_0.017491421779570526"},"_hasShrinkwrap":false},"2.49.5-next-1617369544-b8054af3.0":{"name":"@xdn/core","version":"2.49.5-next-1617369544-b8054af3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617369544-b8054af3.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-oUEXI8uUZWigFkRD1QnqWlM7r1kZSvWGqnLK53HIeBMG6GaT+rbAyb9DApkhGCc3DvUV9LY86gKJ0IP8/PVw/g==","shasum":"ee8575356671decb1d661152573df19fab6a6e4c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617369544-b8054af3.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZxsHCRA9TVsSAnZWagAAh0oP/1XByIT2Vo1GNzCk1Woh\nj28hKCAAjGqWAi/OCpZN7cyQW+m/MewOWmoeJLhwiQ7csdAYNCzDQbsLoYez\n2Y/uy2O4d0vZkgtxnYyEMOMsUny9evJXcW14N+V7QxR9wKjTz1AVsKrWVrLQ\nnOKizpb/h3CHb9stSNl4+UY8F7BqJ+hxEizXX/nV3fvw/wru1uceYKGndQ25\nu5nUsmbucaMxwKrVvPZXzldWs/q1aT1cJK7EYQfNZQGb/C7EVo8pDZZaoQth\nCoIXTAjnCrqBsrEsLmQ2DOPKUSahEnQfzplR2ldRPw7/pSnTfxeNaO/lJk9+\nrqFiEpKfIsudKyIGpE44aL718oErbitXtp3STmwvvacgUL80AuanbFRGcO7b\nnIzquMaN8E2Vy0gjtE9t+9ZmY/yDvo6ndoRkDRuMNQxdJkf73dQZGs/GOZxO\nzx22Izh0RGUji+GiMKYeetIH1/aWJ9bBV0Qnsv+dwlOw99c7bEBCyusPxhJs\nxLfbORUfrUPVjlvFIrOXzLQrLpX1IvWstgOSKu5L+XZKdMukrPASrvu7UbFj\n1ocgHCrZ3+tjRqfHw6vPQswXM/JjA37O1zGP5ReqdYGpdWDVCNC6ShLXRBvN\n0k/lQNIBiI+FXvbtuS12MXLliwp3YORVzkNLr8pQb1KyYtyQrxnqe6VuhuzC\nqYOL\r\n=vgfl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpTiEI782Tq9yAy5gfqBASQ49f1dtLgtMfBkKLJAUpOwIhAK+ea43Mpflm9VLzq9tnY6YqMKsyhznVjBJMhoY4m/tC"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617369544-b8054af3.0_1617369862403_0.7228382602382604"},"_hasShrinkwrap":false},"2.49.5-next-1617617643-6c94e122.0":{"name":"@xdn/core","version":"2.49.5-next-1617617643-6c94e122.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617617643-6c94e122.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-sT4SLZL2wFg0jBLUQA/r//4go6nwahWd43VkyapsYTl1s3Ids33P1hk2iEksHZutPLdD09efsqNLM9CmDpwLEA==","shasum":"ba433f90f183d292e6e77f97e898b7ed26b27c36","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617617643-6c94e122.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgauPoCRA9TVsSAnZWagAAbicQAJLth18qkjJL4W2XteXo\nxm3SN9Jkdfj51vGxKTZLCvN5ZDCSeVIGnPsjQJySkez7Gt2MaqiXvLDIPZ1d\navOn2FPUwJkC0d/J+JVp9B910Mqx8tqMU2t/C2hNrZYeqQ0gz6ANDJHZVHJ5\nCAK1bEZGECoccSqjo/6ck00U7dVBuAFwc+BWxyLXH2TMsax3xMV9UFGZTtdZ\nq17bKm2MmPXgmBLlmt332yRfCOG1ntcVbvsjliNOVkaOQcu3Oy1Pl1EMGFU3\nxqCPB8z/R3qchiQaLsN0f9YPDZo5BJyr4K2V2P8z3PxdfNpJhFA7OFnPucYK\ny4SnzTz4onAribKWy8d2N0oDeeGaMX0Yg1uHuVWbeJjqCVjdoxZz2pV28voJ\nhVqjTu+sT2KxUo/KaIttndwG97dkZfX5ej63XRQjVScsuMv9KTTrsCrOJm+d\naOGcuQtLVrHry3FtpZTM97IEHn4B5IGQ7NKQOTeMXYILPqTo+jn2zsveW1fe\npRg/8kb6WtInrzcuA771zfShyZytGMGsB0H3HGwY6QIJ25XbAA57+HO0lPO7\nYBN1KJzxPT6tF9psLowjeRJd2sgm5lF4VfTQyX7TLzp2xzZpSvIw6A/4ir0V\nXsjuUoXcYFqlXHCXCljD+tDkA4J/tfTwmut1CKH11BNGBBjjwB/1ohKZR0Ho\n9aw5\r\n=XdXc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICOtoHy+BB0uIiLteFxwdeCSthD43wU6Md/gDcY5MLOKAiEA3U5e4/fugMp1xuIgMzPVpU65f3nFUc+mGJ1bC6lbl2g="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617617643-6c94e122.0_1617617896180_0.35420108368673286"},"_hasShrinkwrap":false},"2.49.5-next-1617620492-657ee70e.0":{"name":"@xdn/core","version":"2.49.5-next-1617620492-657ee70e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617620492-657ee70e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Ax4SPqeUQJd4kKcnbiTUBhzqYhP2y5GQiqyluYWgt8bqoSW9ULEHAlJc6sZFkbkTLwTn1oL7TZaDubKsMHhAbg==","shasum":"09336b0a9530a078c470d124e344d4f6de4ac150","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617620492-657ee70e.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgau9LCRA9TVsSAnZWagAAjlsP/iVGV6zUoGNR6QbKzj7y\nudPhI4JAOGVMmlzL1EaQanFF1DJRBRl4CGbjHO2Ob0/yE2mIbmHjnfOnoxM5\nnNdTl7NEqr3FHSHFBy23RqJuq6c0BoBziEzWlREZV5R7a1LCfu2NFXk/y9+B\nEPjsNwHo/bgMjl/eyBxYcDO7m7FVJGmQk7Mhxl5jq9lCEItmuAhnlP7pGCqp\n069e1jTkLdL2rcWjQ4jo5SSkppK8fDvo+u3LHt0d3Hlq6r+toLcSKUFN13Gv\nvfn1JQscvJihOUb8kxpTrST6VZO1nzGhXOFz+xj2tn1t4CkZLz3rM5FkjmSc\nCgHQyQ10BpC0cxHGx6Fun0aVYvf0bNhvlhxaeJiE1OJTzLEdZYjmg4Lz7nvS\nTbR2ZNUARBHPwV1rWHr+wkj1ziQ3+4R2bBPtjb6k/dG88eBZt/qm6cleoJg3\n2XQ0HZGpyGYglUoRLVCEFzjgrSMeFWddhEeeeoNAv0DTscdPWLhSwVkN0ZVH\nYW3mGYpRc5FsKvBH/jojNBiMpP2VkjMBywZGGFfUajKXR5uYMod2hJ9OqhK9\ncK6ExmvrplRNMkpKKl/AKaZ08ERMHxfZLt7P0mja6kuwcMZIIdhoSJ2yQzGY\n4E3M4sZsOC3+RbAlu/KYhEW8sIZcpHKmJgBnQiWHJGup5Rr/Co96L09tG/sM\npoJU\r\n=0ntt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLPmxSYJzzuQryrz5xQZVZ/N6uOE9koH39Mj1fUMCB1gIhALXJ81/IfnpjsX+q0SlG/0oXe5z7LveCbuOwQavmR+Sq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617620492-657ee70e.0_1617620810649_0.37670928396784764"},"_hasShrinkwrap":false},"2.49.5-next-1617623437-b8054af3.0":{"name":"@xdn/core","version":"2.49.5-next-1617623437-b8054af3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617623437-b8054af3.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-cL4Ympqeyz/tVATFoVKQpKHFcJh9CaX34F27d9FX9GuLGem3VZUIeChfwGMwgeVRwAAzOv/hg9nodhBGiuh1kA==","shasum":"324e4f77e527c28a9ceb7d0509ecacfe3d04142e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617623437-b8054af3.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgavrsCRA9TVsSAnZWagAAcS4P/3ZT1XSpCEA5lJXHB/S4\njouhhlR1g6hIVgEGzCVCtOnZEQa/SEKtqVd1bousu0wJEg6ZUni1M/r2ZYHR\nLewtH0hLUpH1qagxRH/tkpbsGNz6UqOAHLNCWNdUXqHuv1S/eO/63HOO9Czu\nc4XJW5lCd+liAiBaoLGpkAcb/bkDdceGz8N7eBXzUtuvTD2XKK+2dpUbdk72\nozsazTd44dNLNztE2MsmFUJvukzFN64DXl4fvOyOkfeVuhbTn96DvZZ92CC3\nj020U5bClr/mXZPVd0dFP+23yrBY9vZHK4hc7k56P0+wKn3A9dNb/6BkQbQk\nlFYRlvSrUejBHMvQ/ZWvowYDt2hwmTOIxijE8A9ZwXcHdTWRxpJNnqIx5WUK\nauayAxV/EZNGzzTIAvaPGqt7BInLgkSm7q/aeUpgN8/G0X5AM1bD1ZHWlypK\nWMHlb06yQKIIRliueFSwuryf2bRWndVQPTOfIiirhSOvdaksmR0b09sxHwgV\nIPbJv2NW9IeSfo0MX0gVJRj5d6x2M6CZJrJ0qSFgNQ3AYWrgyBHo929Im/wd\n4H+d6xdH+JI/EKZAyUxWKQR52aSyUHoMZ6oLhlzpCNNVKRNUAZTev5qI5gZV\nzQWBlWDjQ1/Xs7aJR6Y8QPoK7YGkOe7mBxREOuWXEOQFdxtOoVHgHnFJ/1Pu\nRW9Y\r\n=LYVJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDF2dl+dv5CDvsmchlNtf5z+WNLQc/YiB+0megys1+7wAIhAKcX2x3/3XU6gUvlhcwzlbtnMbun+lTxJLt/8Exo5Vg8"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617623437-b8054af3.0_1617623787823_0.019959736321417898"},"_hasShrinkwrap":false},"2.49.5-next-1617705395-690a316f.0":{"name":"@xdn/core","version":"2.49.5-next-1617705395-690a316f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.21.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617705395-690a316f.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ORwuj1k0Kop/JjXL/qI5SlPNbzl19Qeb3MY1cqzjnM/hCinQbV99Vcq60d9ImdYU8M3YZNZLx8DtPP2mcPKGcA==","shasum":"3e95361ec1fb29c45a00c3014fcde6f95e4e58f6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617705395-690a316f.0.tgz","fileCount":181,"unpackedSize":669059,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbDrdCRA9TVsSAnZWagAACcEP/0ZXaTD2nxhlLnyFeXh6\nZFfcAdh1wISnhkaQWl4ruvtXDMNhnHjcex8BeqRrVn56VBln61ojJalFJVZh\npXsKWfhYBt6DXCeS9Lktr9+ecMXSx3GSWRBbmrxW3M9A43xmojLfjNXIL+C4\nRScGjxFdb9GhNoPgWkiKZuFw5qgAiNY0mxTrGn95D7vF0bPHv3wWbTMxfzTy\nqyDsGV66++pSr15DrUIffllDyL5ihIwpkSFk8aLk2GXO7UGkHtMx7nieKltR\nZal5akj6fmon+5szxyyO5S7GvQxbV8CAtgyebPjGbfFM6LOyk8uMGEo/9W0v\nRFc+BNrBkWEOyJMTAEMIMQUwmJUJ0+2659jK3DzRtWWWtfgpEYFpwOuBrckp\nf5jPl3qvd6VHIocR716/muP/U4y3TpcA8ofgaIaFtiFhMT0hBizB1JUF7JG9\nHJKnqG/+ijfepvUb64hEmc23GQYdyg4GtxgFuEdhv+6f8hES9GhZGf7CXPXX\n3x6Y/DGwPTa7hB6bscWS3HPmxTU/132S/90S8S08QmKzE8e1VDIhys12Vm5N\nCvO+1EkdaP5X0F6wLVmdNlkQGfCOvs+Ny/eGVoXSfY2w0KyexUQb5kE5BUVU\nMZlX44kecHrL85ALkaZZhmC6FszuTOXGXmZOXJZRKmQNNyTSf9WD8j1Gr2L+\nXpGk\r\n=HtTM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB9sHDf7y97SnEbw6gqGNk/zoJrHqI84mmJZO/Qa+z2aAiEAwMAi0sWresRUZFVPT9/7wJhKwZJk3qxcxDyQnHZ2LMU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617705395-690a316f.0_1617705693019_0.38727367539269086"},"_hasShrinkwrap":false},"2.49.5-next-1617735686-22d077f9.0":{"name":"@xdn/core","version":"2.49.5-next-1617735686-22d077f9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617735686-22d077f9.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-dILz29t+G9sfd4LH//3NaLTqaeoMFhVYdrcHH5y5nDBkFtKjBPSG2F+oRNTio0SRu8sQ9N1QSnUMVMeuQD6h+w==","shasum":"91b263455bbd3696a8f6be8c26fcba32ae1a1a6b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617735686-22d077f9.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbLEcCRA9TVsSAnZWagAAawsP/RpFLAu6vEIvbbQyH/4X\n84jTMUM1+hj3Sny6fHf+Gbs1Pz4CtoPNIYTqKgwWtPlDsOTrsEowyQ9pPRts\nY5tHge7EGnUV+ELL8ye0gzQhIBH5ad0mPn74ITCUe/qXr7TGx9l91kbefJtx\nsXdeyNfbQsqmtklvw49dHsS5NxZvaoW3Ae+zDb6OBa0EoAyR8HQUO4AytboF\ng+/4h+CM2uepdltR/8ZFqygdPjxGb4fLcnR7mcuD03tkIrmPHUbSj4rJpbth\nitOnQ5niyqR0iJAvntWqKFwH7Rqd2cSpgnsCbpcroRvgfV0XOeWUQbD0HVUA\nPo8+2a9dFPo/OJ2m2WiXQd2+lvDIQelo0uPG7Lib3Ct63CRpaQQrcTGCyCLe\ns4Zy8QGWziqgU7+d8nCdZkkqv5kAgNoRcMXvR11utPqtVi1/AOQWKfPxEKcQ\nVtxzSvcCKnLTeoTQHDhxkWERM9tfKQPDqljuD3hY0mZyJmuS1uwfk3voBoAb\nh38Q1MylQqqAc011y/JeOcjCkOu+gPh2KuilD6ra9HgKn/T0qyukTdVrTShr\nakq4bAKnX2VvOgFL3mCuiERiClPRxmCyPru2NfURSIqN777FJD0iVe4c5Tjj\n4e+CmR8w9GHAMDzy0cSEpUxfLeFK001iReANbN3gz257Ji1exsxYhwCAPSDM\nchdU\r\n=FztL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC476Bvm+KlRQ9K5pB4c+Jj4G34F5iE6YogWJUwHFncCAIhANBuSY/fkjXi+K24oWhy9cpUcZLetO/CAIDbyZ2wSgK3"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617735686-22d077f9.0_1617735963681_0.6830251756013952"},"_hasShrinkwrap":false},"2.49.5-next-1617735676-8e406ba0.0":{"name":"@xdn/core","version":"2.49.5-next-1617735676-8e406ba0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617735676-8e406ba0.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-5NOFKJDNS/HeKdlPkgPLVRIQmuYFh7RJeoB/5PPP1WBX5sDt4/9rW7hNaeIieZinL2JX5kaadWKLUfvoPwPrQQ==","shasum":"a5647946dcf46910ed71b7727c39d97f5379a69d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617735676-8e406ba0.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbLEuCRA9TVsSAnZWagAAVGoP/iMIXzz3vwS//m3JImgh\nlIDtoT+nBxYLIXAw4aMqF6KRvvv35Rp0uxcdwHejfyw/bQgi/ztZ4Iwzf3iQ\n8+8CjCZZqRcFmwkMKMugU/FgDd/uBhJHcrUGxiDhuWT3/HGZ7G6khRde/9cB\nP4eC71RA4egRnZXCfKF+J6PaeRuxvVbX15ZUBhsm97wecbuN3vEpdZSF84dv\nXVWJl+AicRq1/BnDowbOK+K19WredIhxkFJQX4U0hD6nOiAitC0Tkv7Mlk3H\nbMQtPwyfnEq7kMFNVmeUqQVSRoScVE5rPSwOSXvM5+6rl364ZbK6ihaykutH\nERdfG6cgiKG9WlRZuiMtcXzx/8lA/HsK82fEUj4QsUsEahFrQTbk0Eh6AhXQ\nXEbd6Yn2tbGEMAEf8WDw8+ak3dT9chMqVlZfWk/aywLjSuYbJXZ6T8lpIkux\na0Q2REqdiZe9bLLZbTV2UQJ4jGje4uvAoDtgACDPuYzL2pHz3TX/oAH9MCOq\n5aqYPRY6Evl8qdZv/9IDbYtIA443KRbClcZFrJDMIfDulOg4G3jsqozgqJuj\nINvCyyh779jmm8BXPHz+2wzXKTSbG93AFtKjjHxsavI3yh/LCSFx9c7GwXbE\n61OLSY+KHEl9NAB5Irhs7/Y9wDopT8SxLY5EY0/wJjhXmQNQbRjr12TrLa6L\nHF07\r\n=HbHW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTkVmMPVNFxziPckoEShcci2ZDcCkImSIpmM4ocziGiwIgL7uOxgsMpG2PonjI5TVsk+2R9uWuygDowHLOoIHPIQQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617735676-8e406ba0.0_1617735981568_0.4942256790526638"},"_hasShrinkwrap":false},"2.49.5-next-1617735716-3cb7f48a.0":{"name":"@xdn/core","version":"2.49.5-next-1617735716-3cb7f48a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617735716-3cb7f48a.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-PHkiIuPha0uSuQk97JLCKBik2Thqh3JNgANP5EVg3z94o8641Gr4HrXIDmboW6Lj2p/bXtxjtM5iNWc6XqzRaQ==","shasum":"cf10ccf482663f0b75565a4660c255b37060cca6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617735716-3cb7f48a.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbLFWCRA9TVsSAnZWagAA7qQP/0UDKq9kDeSe0rRvACR6\nmMg+NvCp/o9cxWJKOzoN83UeDzsdWvLste8wkNtdjnDKXpEWpzdGWJcos74s\n2DfbFIT+OeyblICA374O5/VLm54SFFDuVdECPVOF1IzQve9OpFx84PPXBs8A\nB2alVwdR0hZgQmKvbr7UP64y4PUsh80cLFXbZ74D/PL0kA+CZn6OJqtLuOBT\nQePkelYwMA7IctdVIuO2CsFGW/WWMfINTKcomTY0xqqGcm7RdHahFtQABxzP\nenP98Ux1yl4clu1zWnCTcHIwgkfO+sayxmYw4h1tbgF/seIu3VYRaskho4+g\ndWfIcs7wrVu09Lj5J0+D6LqENGbwNFETVusbgecC7YVa4X0TsYf0+VLPBiMA\npu923J8gINO2ceBscV5ODFy+EIblvSR2IboMZukE+0ZVTO2dQJF+LeO4q1BR\n1oixjDFrE0d2R46XcOrNQSo4ajUWO6nfiywpRaWxcKr9ad/sYCxwSOfzlm4X\n0UML9SoI/diR47Y3Xsw7es+ogtQzLwAn+zAu25BCMyj8EMn/MNi/zCdcUzjP\nX5mmhkEDiz5lVWNI8z/KHFUuaKicBTnPIpgt87SMdxeczXS4wQm8EqQ7WBFX\nlFiHkRMeZ03LMwihHMB0XBV6tVmI2tz1TpJ9y409N+F5vm8XwGt9UUu2pQ98\n6orB\r\n=UAuK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuRU5+sV5+0YO3UfidguVqhd2v9DbuTItGU3O7t3qPRQIhALSoekjtc29IqYB6VG7qfTlrBmCFPXIFvvHDBPuXdHEV"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617735716-3cb7f48a.0_1617736021792_0.3469926264603085"},"_hasShrinkwrap":false},"2.49.5-next-1617735699-5ab49a9d.0":{"name":"@xdn/core","version":"2.49.5-next-1617735699-5ab49a9d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617735699-5ab49a9d.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-EDcJa008X7d+MIgaNOZ6kBpC0RkLcO074Tx3Wk5fhFHWjQFmoEcDU5MSpJbFjQQYix3IGxKPrXBJsQuIIpzpLQ==","shasum":"17cf4b6468b227cd509a25f7511c4e0b96a85d33","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617735699-5ab49a9d.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbLFzCRA9TVsSAnZWagAAjskP/A3R7Z52taAhk6XSv0Iz\nExxl9nQixGtvhpkgNfVpRNPvwhehoKyU0o3AOqaK3Yij7ZRygOkb69jOih8N\n1R5ndWLxpQUmE3iYeSYM8XebrB8sA+/dbnCefQI8VwVe//GSY73t7iVcXD+K\nntauvlE6bfAcWuk4pIshtnMrTo0WmwPnK+4aPiF8Vef79Ec94cv7xyGHCoFa\nibyljECnTeOOtcE/zP9j+A12HBy3Ou+f6bJ9hhmRg3DEUaqKeoDmwvYjPC8A\nn2quo07mZIh17uIeXMG593qownZOfYzQsgVF25yd2vcaNJ0/VLKPnG6K2zsj\ndCfaNLXZhT5Vmm7IC8J/CA8eI9aFla1aWjW2ZnMqdMnKxB/FYchaJU2jr4s5\noeixlOrkj15d68GIdr7J+zmCka/SdkCft39184cMSurl/kzFzz8dv1b+VKKz\nc/w3rc1p1LRrTs0duxBnvzzDwEqpzBC2u6UYfQqTz5ebeI91vCP2NNnPNvKV\nytNn3+qvRMxoQpeWPuLWqXbYS3B9jdQr84vLf/VEpaalUjxs8T2UqahZ1mjz\naeKPWqD2Efyx7r6eYD4OX0kv0NrKVaIlsM2QG5AIxq91f7Id99R05LfRvHWo\nGUdGPj2xpUjsO8gIahDZOZrD6Ax0dhsIcspI172oKjQFIVa9TOJZr9xaTTIl\nzDQ6\r\n=gZ5l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJ0jRLtYw1YEassvvSnCkTyNetrF4LU2QcFi2lt0s+BAIhANxUVr9jleKq7RIvXhiwGrAIpoxoIZkOLx0fMzn9CK1U"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617735699-5ab49a9d.0_1617736051060_0.8695124002513563"},"_hasShrinkwrap":false},"2.49.5-next-1617736046-da082c15.0":{"name":"@xdn/core","version":"2.49.5-next-1617736046-da082c15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617736046-da082c15.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Zwg3AxLc+rbCZ688o2EDeW2P2HvwC5Y/vozRzyEzNNpgv24rGRzRsYsN/I11CQIOt1nFKQq2cp7QdhSjuAlfkg==","shasum":"7763696adaf0ffb181031e551ae3eb36eaa5414c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617736046-da082c15.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbLKwCRA9TVsSAnZWagAACtUP/1vTLXTD3lccQQpUr0WU\nsr+mrfX8V6pxbwntM2/RtnC9RBx49q2BAKbGJq1ajjwZL1YEGL2bfpVgCsFX\niBR5YBQ1ZfXqZ1vAsOsoqWjd3uvy1q7Uf+CWoLbR3hJIY8hQ0RhGa9LHWSYd\nw2LrqTiLDLnHs9VdHN8UNiboVjL7Wl7t6y2u39wwcq3y2o6LlHKoHmss/tYt\nbMUzPbwxCfDSzxJ0P70Y5/KWbyQJnmB3+3Ve6vqxR4Vm3etqsNh/EolLaGx1\n89HH3z8pCr2kENlizNv/2q+i4oRNoCEosDH93PaXqw55U9Btzd6eK2kldP7q\nslUfmkYC144X6x7OUHNKEbW3rGNf0aA1tAVHDVkc5F67WvqgyWnt4dTRw5Sg\n+6bSAPalcQONnEN6THAPgy79Q2x+avNTLSe/qJ6IVs6+D1z62/tNE4TdaZdc\ntdtOGZGc8oN3vUdL4dW23HW/DHPDuzYnd54ox8j5qUZs+jXJq3p8VB5bbUnt\nZoFkZ0qAejUL4Nl8fQ3tQkPmtR0+jJl8xA9AqiqOe5XrxG5AAh4oL/bEqv4d\nxOq5hCxpHeMnFTfyRks+w8GLD67nJKkTsNidqqjHc+x9cg6DZHdpW+EY9wEM\nQOSf4ivJhBZSuZEj76kpxC5aj9Upff1G70/U5nmSxR62A8vjrr4xB+y6vRIQ\nYmAU\r\n=Csn/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHHgrL/oWBD/8LUeepCwlgC6n20ZE93+7Hyr0yteSOw8AiAYCn4/tl1j9c8VbHjCe3NvcV7cN8b+OblBS/tlVYc1Og=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617736046-da082c15.0_1617736368131_0.13046411513052125"},"_hasShrinkwrap":false},"2.49.5-next-1617736092-da082c15.0":{"name":"@xdn/core","version":"2.49.5-next-1617736092-da082c15.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617736092-da082c15.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-XLwgWcmvhg0t9vRU/WtXbVwbHS3Ui2YEKswASmQG/A+fRaqhzEE6W/3JmRb9FJ8t/CNQu8eojOGzxiHzIt8R8g==","shasum":"ed7d0f0cbd74f4a96f57f8288dfe7408b0424880","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617736092-da082c15.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbLMOCRA9TVsSAnZWagAArh0P/1LuDFqs0fWwFAjIukf5\n57Y/QqZGpEA+Fny45dl2KPc76WriIELcYx1epzIci8NP7YtBKB6QpRkvkKK0\nwiCDXQ3h6r2BC1CAbwXoEQAzTBT5uudEN9SWIUwmF2zw1pEsSArhUIp52nrn\nTiNraYTXlwTi5z/+lqeayDNfdCp9yfPTn55Cm5VCKDffQEOLSBb0HlW+aiQl\nrvayFDEKRjvwEMlKlRggA5WCze2Dtdmk4xv9DRKGQd1YcZwgkTDOaW2YxGXU\nWNYXKvz1dLlR7SjSu66FrseEb+xyR3lfH3vmtVlkS5a/BIRcrNU3f/bKf2oa\n4Gjchev3cXupdshlo07tAlhwQ+gzW6iGgpnma/DjEEOZbfChHOdkZU546Csl\nSMnDkpqqOliHIvRQfoc5UnArZkgMacJhy6omP2ibODwcX9f7Qc7/5k8MEjL4\nFAB/D5yxPNN2pSGIYXnDwRJr1LiodDVoUkQA10kfOhDhvnW8GkEXdF4rCy6V\naiGUWchMJ+FrUMYQ7G4sXpnLAIuuqlba63WXIaVQBooTSJMuaBQBVX//3m3s\naTwJHEKh9P9sNNmX7gpjb7Gxb61vjSQ2ldE2W5r5jHXouw1pIM7jtWaZi6xV\nfuXpUf8f6U7sS1XiK+Va6tyqWleXmju2vrOStBRluJE1mpylervbbXLMD8IS\nihbK\r\n=iAdy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICqPf2nOvIxK5SPsszG5zMilN+ke/+qHApMEwKemYxlFAiEAjjePELKM6x9eWi2jFzcyk80ct1NENehTfeM10MI52cE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617736092-da082c15.0_1617736461978_0.4131820542531608"},"_hasShrinkwrap":false},"2.49.5-next-1617736156-673ca60e.0":{"name":"@xdn/core","version":"2.49.5-next-1617736156-673ca60e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617736156-673ca60e.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-z8N7IwcCmasEcWFXyDB6MO/wWqjQGV83n6YpDnMZ/mwj5SSHNF4xXNOahfwIw4OYJj7qiHH6xgT7fx2L8UN5hQ==","shasum":"2ce5d37fe978a7ff1be60b9f947c41859ecb3819","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617736156-673ca60e.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbLNECRA9TVsSAnZWagAAtZQP/jA8eEte93Gf5Qd99Biz\nTFrVd7u/BsB8ysaxDNyfmVRY/sWZl1UXyK8zRPb3xSjDQ+NvQbFahm1R4VTF\nviLgJiORPsOCagHVi04Z1d8lb/AS+k4JXQS4ZikNKMrNjv8lxqCY7LvO/+lx\nz8uONH+SeKVckn5momssZRV5Eqqwt/hEXB96YYEuETGjZ4ib7+gqcVdWQKaf\nwo9xMvvxM9oSmnQ3bj24ymU7bL08ChwRmclrs8druKv/opX43CiEeEBwuXOT\ns09KflPPAblSKJhKoK1KEW3JAbCMp7KCdFCw3tmQ5oHxK1BP8q5LJeD+CZOs\ng40HHh6CYEuwG5YyvGy9SQ2Y/7gVwjbFGSfqNl3UdLDxgYrOJG4my/8KnTAD\nN6ODtO/rlol0zAl76pnoeSvHMN2lR8DbnLA05isb2v+I/i7Zm38q/z//7PnT\nGvU/pizPA1inv7ph+nWIDDkknVoi2ZoBDLhoxkzoGR7EfM/Dyl7bJPHvJZ7A\nlOMeNMkltahN/jhBO+oLGaKxwccFi8SVp7bh7ybHLNOyw5ZHRvto+7v8ESZY\nQHl9nLmGmenz1FR1/CcdsVmJ0gIC/oKWgaGD88Dn9G6aNOn4ymjnR17Pquw0\n9r0jijmT8Pn9iB9ZAkLMlvw2naIsXwY0oGQW3ozXlnrttusaTS/fuX9+dPck\niQc9\r\n=a3Lr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICqSH/qQLFla2Q43V8pIp3yDLHOo8Xc3Nsd+sTgSAl+BAiBc8uoPk4L+plCPFs+XNyUT8Gbupo0C+G3jUb9i34Pa+Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617736156-673ca60e.0_1617736515575_0.8883324143699924"},"_hasShrinkwrap":false},"2.49.5-next-1617761949-9676f0af.0":{"name":"@xdn/core","version":"2.49.5-next-1617761949-9676f0af.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617761949-9676f0af.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-g1nPGVocIMVGceb5gpRiBg4U2D3/3F0wvG2yYgQKoX0ESgPoNBPvT8F+d5HXmK67C7VR470kijK8uI22Gelocg==","shasum":"ea77742c3bb4549ea8fc95c18c9093292101ba1c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617761949-9676f0af.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbRfMCRA9TVsSAnZWagAA6sYP/2QoHGx8sncnXruy07q3\nlNRvR//oi8MGxpGuh2h2YfBCuQD1j02ibZxWzEQR7j3UF/7MqrkwaMwbaoUp\nnvoW7XwreU59E2S6yY15shEIxbD+qybYjQANmUnx6nd2xWEIBE42RRebgYyZ\nLuMBB0ipcE0KcHCgEBUjGqbSGxDQZfiPeZ/TsQeGwrfHgzqYXHhns6UxbMG4\nYl5KUx0G5wtlRY77/3C10doSzF7YkZpQjx7c42TGV6M909DbMcVG/tvsWgOA\nPePVLqbIK7frNlMCeMWxvqN/xk3xo3gIbyBJTxeNcrkFznk3BY0dTULNrJp1\nmpV4xAAaDAZRRmgtDFn9RkKfLysrKEBu2NwFIT0h5iISLXfiFQcTEPi+Ahs0\nFCNJV3oFU1mogbxaCOMpeDq2OMwxdyHmXYHybYAKhgVE6ponpebnZDRPbg/m\nMdhKJX7lsdNsaTaNGiH+urYPJCISWHuFDwKxV6K3jTKa2I+Kgj+8rhAK9Awr\nQVRTJC3yQ+2d5cBRVtxdNYSeaXcdjnkO3I6cxFmzS1SklEjJ8JHfA9zBbHEi\nyL8oYESbJU5nrIvXFFFKj8ka4Qw6xkkdUK9zlVOLao9aeNL4WGtBj6qbdof8\n/1CDm0oUCAf95V967rdcvXzQj7BA1qxU1N7x5hZD52WUWbLFAy0FCP6nJRuC\nl85s\r\n=Wtnd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUh042lJRV9c6OFYfiOjVPN+VBf6GIPxdntDlaks036wIhAO9wIG0N35h1RZqftP79kKP23kspkCc0N1radERgAD9w"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617761949-9676f0af.0_1617762252228_0.42496774729343545"},"_hasShrinkwrap":false},"2.49.5-next-1617766588-cb4b75b6.0":{"name":"@xdn/core","version":"2.49.5-next-1617766588-cb4b75b6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617766588-cb4b75b6.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-NoPtn2jA4+mnB4YNhsb4NKjqPMVLPXCFNK/Hi499W4gcjVZCHqgObgVxwsqihAMWapdteBdEPARCO4jzO26H5g==","shasum":"a6405926971dc1b47334ea7b717957930e8ed7b2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617766588-cb4b75b6.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbSnwCRA9TVsSAnZWagAA2ToP/A1OISkkizmUPJPXmbip\nxqE3Wz0ABH1JUxFoE74MzE8wPGXx1KE7/PC/VS8NKbMOBIJb5QPmaUdDuK9T\nrNvFf5vMyxVIPkAH+O6QMPFCWnxjMOfXluKSH+JbSLIV5TlYU4U9UQliJ4Fw\nn9dM7BEesna6TRp0QQqdXYZ9TM1eDNnuBe5nMDRMFWMUDzAkPc3cY2vsbeRX\nGqIFI7UDs/re2tJb/rGZX6Mv8MsSZBRlvVYEiedG0Ze/xWjO2ODW8OnF1LrO\n08B9/AjAtwFcFuxLRtRNMzjJyAkIm9Km1BnW1GxypFwN/VWlTTzw4FCiz+CI\na+mvxH4dtFWhTO8DlFszGkxrTrpqtcR2I9Ze5O8zl3GSDlYZomYqF7A90Agc\nUSP2IufzPASCWvmrpHYSwW8zNXDxySN04E1YHyknZz4LrffZVuDJGJrnbd4n\n+zYZ8WDLzvlp7GwGqdd/0U7ymJNYiZw+i+5fgNnuHa2bfQgIc3GqgcnZoDlK\npfv5iUxA71OUTL6SdoGYONzhKzH97K2/z3ALeHhVNxFETN016XK6r8ZSKWte\nN3vGppVQx9pi+AHUuQdn7p5mRCu8byIp/CYQBIgiexv4AgKjxlwWpw+QhQxk\nXeU9L9WT1NKs84eUPfanoYE+majFNAuO39zI21XhBnyWdUWYrYZbeV91r96U\na5g/\r\n=/GhO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDw8GQjgND0fqJOvs79+/kNC/sDHQmqtGqHafDknoSDEAiAu4u2iBN9XI30a4TqP1zmvGIuEuXDh+x0nT91JEbtcGw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617766588-cb4b75b6.0_1617766895474_0.11140668758330641"},"_hasShrinkwrap":false},"2.49.5-next-1617766594-b9f01faf.0":{"name":"@xdn/core","version":"2.49.5-next-1617766594-b9f01faf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617766594-b9f01faf.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-LCtNqC46acTX2G+It5RThEPIstA0n25wdcwHkOU6OJhyBOVWdg82J7hIz3GKtAZcuNmRGvd7j/G4N3G87W2j5w==","shasum":"b530b278744bcbc7689cb1e77a2909ff0594ff9c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617766594-b9f01faf.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbSn/CRA9TVsSAnZWagAAkKIP/3Wo87HQiU2umvPfBbdf\nCpx4YKcfVA2A9Z2RV8s6iiRp/EL+a0/vnaRSB6JZRYTRLyYP27nVL0rhK+cj\nhVvzFN/SYxnEJrSNUD51LyLy0gD7zu7vZwAu558scDgVQrJf+MXHkDLbejUW\nOkR9U/X0GbOA8akG9UJw/g/LvI6QTCTDuCwEeUVNm8K00PI73sQZWrd3xpYV\nqve1xUX94nfpCH0Wh56VC34AQJGZqj22WScbzbwkIEIRwqLdGEc1IZ4hQBhj\n6VeFiTEoc1QnnUywbBTISdiZI1xgYc3gVOGtffuSpXf8rVxbscYqeH09+Pt+\nk3Q3Y/ZJOe3AM0w9KTJ2D4ZYyuzWgqVGxPAKN0L2hrpf52HtDdEf8LUm1bZS\nAMAfSlIXQY5D11EYFpEofjd8JMKZEv2U0dpGTHOkag/AECDdx4rbMCpY2XA6\nSrPhiB1E2uJNXmfcqjkq0K3jof3CuUdNcDHtmoreXpJzBqLjqUJDddBLcAUf\n0EVNzFptzNLtl+NBNgMsmTCSlvDccx4p59fZboPjsC9rJNRweB7lQfuFCtd4\nEF65z0KYYayF/0paC5PfNkKUZor9t5/L/MASG2dIANrNbr/wqvvHKZhXZoyL\ncn5IKltpLHNCIQlUI3BVe1EaGAEOcf0Io2v3MICyduuHGE3B8BqXpUo2D6r1\nXY7m\r\n=vXuO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+vXSLBrQ41/Zmy7wdiVM6fathjJxba51hTaRWrm7dZwIhAPvm6cKj+5p08MOeVHhiSPhrclo+iRZBVWOf/dIsfDoE"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617766594-b9f01faf.0_1617766910640_0.3600959496773728"},"_hasShrinkwrap":false},"2.49.5-next-1617766642-f8ab3680.0":{"name":"@xdn/core","version":"2.49.5-next-1617766642-f8ab3680.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617766642-f8ab3680.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-uwCTvtkSWLglve1F1aJ+F5c1Df0HNMKJ3aVY4wofZOba1XFhGfiUwCv5malfWl1Cm1s6WYGtsPqZA/RQHJrU5w==","shasum":"80a9de259a41e650f5d4eed697b128e180250105","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617766642-f8ab3680.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbSpoCRA9TVsSAnZWagAAwMsP/2R1idv+6G2Rc9VRB3ri\n6ywnUBq7ZOD1UcO3KsMs/5VTHv6bEKx62+oQhN0I2qxc1vCe2PmiAagsZXNP\nOq2q9oM15AJzm4hCRnTTN2EVsNJjzoEs3eOCtff0e1tf+1Ag2X8pS3kISSqz\ndVIvIThTlAeucZWOD1C3unzh8o35M/6geL+IcyeKzITlgDYjztyqrA/bToiZ\nompKqRV198M937HdCvWMxRm/+ShbzY9R1fWgIze69XRjvggVQN7rri/aMO3v\n905GBVWEMxAma30MLL6JKEu99B6xKAd9ZE9OASXFVrQtd08Gd1mUwiD5cJW3\nDBL8qaUVvK0XEHqrrvD+NfSVLGpbWZ2zq/vAk9jbwcwOK718A2Cvfx842FTX\nF/ANeuIg8T+kObDAqef2YZq/GlC3GwmqYu7Lop2AVUZQOtANY+COnwGWSVpX\ndpq4BX0u04GtrH4wbAE2LMKOhyYvpmCqL1GB/kevi8leqr1gg5CTt1vBNtpO\nQpXsOwJc+YIHThbJr7lJ8JsWsI1fbxrFeHHI/4PZsONsOD1+USt+L8qwzFpf\nGqIBSzNQYxwpMvb3SsCDzNJknGPl2cSUShcYn4PH0aB9SAF8GpcR5geYMODx\nDZj663ao/HzKhWueUeQBIySqWgT1bcUEGNWgbajX+iqJiu8WFfjQsWJGRwRU\ncdRQ\r\n=bTBb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFkLYcRt0zF7MDu/k/B4CMSDZR6fsEoA8Bbpq0f7fYYQIgcMGxOBt5lMOdHTqY9hNbWkJzz3XQeufHi0JCX6jKuMs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617766642-f8ab3680.0_1617767015722_0.5816364261243918"},"_hasShrinkwrap":false},"2.49.5-next-1617776930-df6c0b0a.0":{"name":"@xdn/core","version":"2.49.5-next-1617776930-df6c0b0a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617776930-df6c0b0a.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-sHHv/Q9JUBKxvUbsZsO9sn+IB2wQQRUkOUEpZ4UUzJIdlZOBYuRFnO6faSr/MI8sf5PY62jr0Idzl6Db0coq0Q==","shasum":"b6abb6f72aa77b9a56db7e36e034c1672cca776d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617776930-df6c0b0a.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbVJwCRA9TVsSAnZWagAAxu8P/28E263YaeDKmZXCQIbJ\nnQePF/BoqOuGzBj92WeBCeV72i8uPxetyy74B+uvG+Ao6KBnEvzXFiaZNCGw\n6naWPr5nNH8n3qigMShmNPZt05vGuCqWSSxOXpufwJDleqt1vd8gJ61owNAA\nr8OqoQZRTAlistUC28HJ51khjYNYxSMoUiijUyvWVuqRcT2ih4stOGwfb+Go\nISDwcgZy+4/wcdj/GqYC27ZlqIVEGZpO7F2Xwc+7nFDPQneWXVQZpYeNtGIt\nHSPuawi4oHwsw8tyESMisyOwZXzNTQWiXzFG2MDV6toIsPzTjdL4J/dTasPV\n0rmsq9X/vdCcgHck1zaBu1dXaUtRZuXCF0aHe6ZVSD29bVJ6XQ6cXkLaanfd\nMYXAtPQo2ftc35uI2fE5JN3onOkBYvni+7yPUUzS0JvnPjUdCqfcS4H8L6lF\n2qi2N4ql5yzK6fMdCdFh1sCN88I+Qdrm7iPKDfIeGQx3DiFn4SB3taymH+Pl\nfxdBlGISDNgcqzv9uRra7sAcsKgF3zmg9MzYjVy7ZToIjBsZK3eel0Qk4oKa\nailHMMavSgsjqwQeuBjaDgxY04ckbpALejzl8LzLjOOcxxOKLvmBK5MrMk7G\n6GoAVOTREiNPmdjR61JDGs8WV/3yNXyqBm7RtD1hEt7lq+i5K43cFeIOOZZA\nzlLR\r\n=VWpG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCIHAwXUYaJlDlyaYEaS9Q+z78T+0eHV6XeX7L/vJY8e47Ah9zBhYiuzfV+fv2tFbbDhaJmJ6pL40Iz41KploGm2KZ"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617776930-df6c0b0a.0_1617777263776_0.780287361785095"},"_hasShrinkwrap":false},"2.49.5-next-1617790600-6e8e03b8.0":{"name":"@xdn/core","version":"2.49.5-next-1617790600-6e8e03b8.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617790600-6e8e03b8.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-I5y09JI1Gl2etK43DxGvm5LX7cm2wa2Fl3F5DtA6vA3bJJsUUOFf+I7oXBdvIYMrvVWKxGTRoeuIRDvH5u1PgA==","shasum":"4d810c9c2cd2c068304098318a8dfbac73d91fd9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617790600-6e8e03b8.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbYezCRA9TVsSAnZWagAAxxkP/089eJUEK04fyyI6HRVF\n3+QH+NfZBTjUL54nETcpOM88pzHU9/rRtie2MHFLOjoP+GK1Xrijvt6GEm7j\n1AblCptFg7eTLtrARseYnPXVk5ofGOsnoe+64/tMhwUGRkVyP1zbwAYgOLx8\nawgXTthB3BSpcRLmUdVL7WY+026hrzPLWXKgZm1bhBpeFeITrhSXKQv0J8Yt\nGwGHtfZKx/Aht7wsJzkiPeGmQ9IL7udeaV8ugYFhLAx+L2bMflBsFKooph69\nkekG++PcSfcjlfaXPnotBrELBzdfYRmRTJihelOQ8laFGK6tzWN3HMLe8X9z\nOacaGCvU9eiNrzTNQkwV/R5UDSxIe+r8V7ccVRLGR4uosBBlQ9L3JvH+kMFw\nRLcBmQUxjcQSn8+ulQpxPFIGDpfS0Ej9/jvgYo8MxcAEFAuUhy6mEQYjF+DL\nPE1Mj5zhtch/xiR0he3UU04DzaqOWx/uYYRHTg7WQFpDV5GUBy2pgUJcqoca\nN9fnsnviqAbOYI1Wlo/6nNLjJYe2vX1xDEuLdFiWDfep3WSi6m2eV82RTsmG\nIFOb/a5jqvYfp7F9or3qXVBkJJQl51Xmox1omjeKAKIn5bA77hEyT7n2kyl4\na+OMY83KrsWBKCk2xgrEJ0L2Ik3030rdWq39BAArcVzj0DUjixqOMIX3J881\nRebh\r\n=FQe+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAjnBiP5p3QFVKPjvBufS8vFPSWQ7AFmJuH2oB2VH9zPAiEAuiYOoVw30ge0ldyvbWUiHqw5++zEVlWSkvnk+dm0Fkg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617790600-6e8e03b8.0_1617790898371_0.7647554253018085"},"_hasShrinkwrap":false},"2.49.5-next-1617795140-d7abad33.0":{"name":"@xdn/core","version":"2.49.5-next-1617795140-d7abad33.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617795140-d7abad33.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-4e+lXXaaW+ohIAVGOQcT/AwNd1j+cDm9o0FK9pxgnAGaWLH40c0F2d6puBKGugm9AnYrRN6ELDtWXx+Gebot5g==","shasum":"34f82494b5b0b3ffce85ea9c264641a882354b62","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617795140-d7abad33.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbZm0CRA9TVsSAnZWagAAmTsP/ibfNC10dB+vL/jpVNSq\ner00r6xVH4voKLy4XSPaq5Q88Bup520xLyEGnIN0uNANN6SlMLlP5ZTvBC7P\n63HKNCdWokp4b8pcpuJyGkGegWXvFeef2shaTTPu2Bs5nKilX7h2HQUulHnO\nY+4X7egsc6turKTqoldxhIsisXxCjH8ProreZW0hv6HdXRPtCVXcx7RfN7lA\ny/QNPVXIQ35e24mZDtIKBVpUctLS7QW32GPplSEx9vph1/iGM8p3VpLynd4N\nuRsWcyBYtW1gTmHTqPGBjiR4PrQ+o2zQZXnTIxt3fMshYkvh++iSLBSWkrP6\nwXwGA0ar60gs4+v1e44aVsmi27jMEIE4uQ2WdxvOBqy9OiGg1YVi4PXqVFwy\njnKnaupi/4OatRs4qju10A4G7bzQu3WfsA7AuBayp5D3yfoHUjzN5CWC2Qbm\n1TlLl3vNa+0IgVIvckCCFtQxEI0Jfu0WpO7sgRM9Elobz8CJq+Ujjx3Sg3NP\nDLcrm2LDH4JfGFmJ5oBZXjCNWnigS3Hxgm1NFIf9lkAHo5i7r7eBWutEw0bz\nYPs5wQG4ZW88KDwM3suUeCMhQ4iu+Vmq6dSQqPiWSvRt9Hqblc5ly1Aq5peG\nVm1ZGxLKcCYIfuaolLBgrkQn3Us8yinXdIC+5DhcFMrjEOYb4IMWkjyBW9XV\nvF/B\r\n=9Pbt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtGLFhWhZDglZ1UvkoJm4mXVjztefziMCgL0L9HC68hwIhALBv+imGgU/CMHASqvptHl76Mow6DlKiXr4tIfoei9SS"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617795140-d7abad33.0_1617795507890_0.9057831891854484"},"_hasShrinkwrap":false},"2.49.5-next-1617799221-0f914b7a.0":{"name":"@xdn/core","version":"2.49.5-next-1617799221-0f914b7a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617799221-0f914b7a.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-GdiIjs4GbUKrpo9OmTkp1WJ3PExFCtTnITKEo19I13iAPLt6969tiozN9oDYTuJp69Jt+AszGZV8pMthbOH1gQ==","shasum":"65fb267c0dfeba957df79731a4c357efeccd76cf","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617799221-0f914b7a.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbaloCRA9TVsSAnZWagAAxcgQAJIif+YfzzH+sWxwXNHn\nDFYBXeRzuhGN+hn+gV1P/5nhbGKdpfgGj674Hza452m3dpDBNxK5TBORymsV\nQN2fzXrz+I2Fyu8/yWuxxy1m3we+UzwmPEw0iD/bah2HPUW1ueR8pvInOT0n\nHJzgu9jAqzB3VXw/q58onCjRNdabO1fviCs/CKPqOPiuLpOxZtnAvvfFU/EL\nf9RGbLvh0yXK4sKK0Rb96djaayaM+FYptd0iJv8d76Did8uGx2R5B+oCsX1n\nylLByPeim0jAWQXiKm0bnVeIJ09P3U1AL9oBHf5mlSA14DJnNQmqdqKXcjXz\nWfIaq7puzFMU2vbT5kaLZXrleLMCRMbAbnsYRZ6NEBm73msS9XMSqhtZelSm\nXGFkPu4071HEkQXcF1xcslxW8fyWIFgWCl06IFlveJVQta6NOIRkheLCGc13\n6j/YCDRzxV7sqHhMtsNWMWvrgVmoJWbqUPlFZqxuViyeFE/5j69rv2zR8qPi\nw54gE38xoupg27/aIwL3EwgR+60az2Y3Gc7h2k78SfTSxkIK785k3pwcGMgs\na0Pf0lMLZi7AjhY1KjgSNupr0R6X4rNf5vfC4TQhpcWOzXAqWKaLxJ8qmJsc\nxcJAEFUQaW3hwp+tWLQpLXX6OvClf1CsqEI7Uo8KFpqwTBidfKvJmb2vv5mW\ni5fU\r\n=p/pA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID4Nr/TURDyO48Ce8UeO0sxRdchd5UBXZKukTaGNWNccAiBGhIRQoA1FrqjIvTUNdSpfwvFUcUr9NnEfEDgcvR8wnQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617799221-0f914b7a.0_1617799528187_0.4762179467346259"},"_hasShrinkwrap":false},"2.49.5-next-1617804986-0fafbe4f.0":{"name":"@xdn/core","version":"2.49.5-next-1617804986-0fafbe4f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617804986-0fafbe4f.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-H+s5Z1Hlxc9hf3gJzAGJ9Iv7UgFuF5vXCNY3HHHqWZOxGfOy7h4Mjc+w2CrJjkD5VK3JlVKXBgK3aarhEtFbYg==","shasum":"33c6e0baf7fb2aa8e5c9e6789710d39219fe4c3c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617804986-0fafbe4f.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbb/JCRA9TVsSAnZWagAA35cP/Ardk11gp1DJs19K+Q/+\navLZkXwrrIgVq0rqzeGNZKTu98X+rJFLl0+EH7vDawubLpr/YxEEK4UjUxMU\n65AEe2q310245glRfcrs3hx76y28heTHan6jNh3BY8jc7QrzpJkkS+MFbYFu\nknT7RF3x5ETi+68+mG618JDhID5OmhmLXypEZEXcMxS5oQdDlo66VVfeokhV\n2AQJThevme8tc2ikhtlD2u54ZFWMbyvMobyxdk0QD10crsT+pSje6xJ8EivG\n94dGyRyMEsmAZeQvBKsr3+oOy1tOI/o5J6IHGSp+F/0SPxCcscqYiBkdXof/\nxFw/YzhD5w7pyCclTJPvozofBcsaqi8KNcjX0qUhhEQ5taG09xfHhCe0BQ3O\nvHOplDBPd2Zr2iyymrwA4Dm0kLLoncBABN3UjRPDl50GPD4nNNy5zD0aMgfS\nKVu+Zto7zhR+bw+xT3Tv+iTD4JihkxlT14w2ptzwZJyHGhLkNLGtIhAZ6ly/\ndu+JPkM13LcPDhhNj2FKid2edWBRj+JN875tLWDUDUDSlkvzknK6oKwgodjT\nrF2rj9lJDjrkVbkwXP2FJ9RbgJl8TRKrqJeIEkK0CgTabF6XBTLfm6+GFXlT\nWqUg9Cuk1FPiiiiPaCxu3OGRBsn4zQ2L3BL7mTwLqjvb6ANDsUWWz+EHJDSI\nf+hw\r\n=LrtX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAgYO0xEnMs+khKlA/zbWYqtNKIy6pqjwOexwmd2oAViAiEA3NrF2Ksg5dvcW9QP5gIqg621Ox5MRNu4MtNtCU2hE3g="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617804986-0fafbe4f.0_1617805256746_0.8953339117856891"},"_hasShrinkwrap":false},"2.50.0":{"name":"@xdn/core","version":"2.50.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-nIIpk+nwgjm393iwgnhfo5gLNRByyW6LoDVPImi2roKa6y78y8PH7SexS+axqDdFhxlgGNXW1rfnFVW47mqHqQ==","shasum":"1914245fb4b2631732629117c7f3290951b77d27","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.0.tgz","fileCount":181,"unpackedSize":667958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbcZZCRA9TVsSAnZWagAAdnUQAKR5p4U4Y15Z5DnEcO1B\n94MSC6z5Y+EhTRp2wdX8uvPAPH5vNrWy1PdVZkUjdINs5/54lXOmVTYI45SP\nTkXHzZGo2SiRTcXzkCI++tb0AHLBqCAjJ4Pt1HFtEbTWXR/coiAu0IbajB2a\nY/Eet+JsaArWa+M5nruGDHR7kyStlfPY9NJRqCqweSznopCGpTcY2GAtoWkL\nCEk4GuNwIFq1VowfYobHMg1rXIFA6wLRG4rvs08KqQWAueQELzftUfTTP/Kl\nAKhdlCgK+XmS752uy/cgmCwHDG/Cqo8gH+OFJorNX1l5s1/bmCwaYL2pjFsj\n8pk/MR1Y884imAGBUAj4I12xbmUP0HOZHTUSV9Tciq8hlVgIl9oAjxHeEHY2\nvAvjW/KPdEFP9JvJoB6SjZLJFbFjDcHxuN8ihg7YbcGjSNrRyUfWwy+8DOxw\nIIyDpBc4Ga+cKbA4Kc4LyTarYol5T4LMT+GQXXz4lskLrbjT+cf7SmJN3s9c\nluoeBxXubd/4ZTqhtnmiSv48mFAZBwOu/Z+LRNdBMcl1kDDSLjotCZeX15Tk\n+ws5XjY7lvmddE1j3QYxn5WbVzZxiVEhFz3/FTeGj7JotDzoySQHxAjf7bMh\nWBM9knNO095Q55LY5UMrOA2EVXWdoDzFTPKa3msgtKVhCvVWJ7BUG2pVx/G6\nEQnC\r\n=68m3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgnd7TBs//82uiOU7UhR1KklJgTrmS7aktAOFZh08gQQIhAMSudtLo31ApIxeIJTh/MAcgfn6GXjWzpZy8J3DdJwYT"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.0_1617806936865_0.5434006371817413"},"_hasShrinkwrap":false},"2.49.5-next-1617806707-a59f59fb.0":{"name":"@xdn/core","version":"2.49.5-next-1617806707-a59f59fb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.49.5-next-1617806707-a59f59fb.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-vZSVJ9ZvVU5y0m5d6BhN4d5RaEf9TrTaGJDwG3DZ3oLgKRuprfjuck6rbcRq13b6Sh3sIoNrw6WDP2fa58PM3g==","shasum":"263993d055b2dc333ed8a96f3448243267bb0dc8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.49.5-next-1617806707-a59f59fb.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbcbtCRA9TVsSAnZWagAAHbkP+wZhTrMjjN0EBx/iV7cV\nqomd1MkAPj7sTbqs+vjvZrPMRObyfkG+2h9ZBuAvv+rx/Wk9FybJ0OIp9suX\npekW8i5KXEUKBYi3Pi2V/SnUbmgp3j08Mw3l53U8xhhpwtT2gXTmUhoJKWPk\nVvMWNvBvw/vmQdA5bLO1DPBgjLDEjQGYLyg+1aZzyrSAmw/byoFfpmE+nY0S\nBMI7fUkfG/Xby7Of4/u0dtsI162YC0qHgZqd2D1llwOYtfaKwzN33sv0FBZ2\nsJgIqDJ9sDvY2+RsjmHHMAaGmDhFYfwgKU7H4Gb7V30fzljQDV9Vdub7NZ7B\nIhcfE8K4sw5nFdqUc9+YhukoJvW049ajthgJSFDY6Nxo7ofe5WqSDt1p8GdS\nHs+tTZpqokBaIJKIqYg0RUyCrXoMMPnYuCkF8M+B5POiVGH75jH88zf7MZNQ\nU1XAneDB8EgxwEqiIBRZtddHa9sGR3mlgm5Z6w20+NHLUzeW4euwCevrVSlA\nGM9aPbMA7EJKxbywTOfTacwQICmR0nCveXAEc357h1rKcIf7Vx6g2rbToR/c\nZe1VvBEm2MabKIc+bMi08oFJssVSfssSakERWx23UnvHf7YQhvunBMJdSScK\nZQGK7GASQ/z0ZZSlugXt4VVtdt3pXcOR4IIb0OWHTxGi/leYDqZEagdPwqmO\nlC4G\r\n=EPnh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNMgj84xdF6Gtd/njW+7Tqu8rfSAxMZKTAkAu0xKnzEwIhAND2yRw4zbXuoNoKhQhqZZQr7q4ARja1OJKGXKK/yE5U"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.49.5-next-1617806707-a59f59fb.0_1617807084566_0.04260873246188601"},"_hasShrinkwrap":false},"2.50.1-next-1617806801-b9045c18.0":{"name":"@xdn/core","version":"2.50.1-next-1617806801-b9045c18.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617806801-b9045c18.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-IOL4BA5+KhdSDaVFsHxRpK2QBL9KL1j3xcdRGy12jUJ493JluL3e/rj5IbuU94+w3t4ery72sw/b69umX9u06g==","shasum":"3459d7c5ab2f6ee706457668723a1c16d2bab4d3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617806801-b9045c18.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbcc2CRA9TVsSAnZWagAAPA0P/2QOP1go5tvRvI9EoYBI\nbgQjAuZWnl6LuSrIOEeA7I6D5kGViCTA90cSomHOrB2GXk6PcyvuBcwsCnER\nboya0XQbi67FTCl+OR3rhnz0OV9+1dyzqpV9i+kIvkhfuQncpgHWSD6mpbjh\ngDk4WOQL1DEWXCz2Y5qnpL3avi4pns82rwGX1bD+daK2QCVbUQQXLDCJsmkQ\nyPSnrlhkTVYLKm1DDA8anUNBQOUCLpqoMBOCiFqnSclBX3rVNzHw+YxsEjmk\njyURzgQVVeBF1xXNBA8Dt4Cpi6H4a30Ymzmwj7VgpVy1XawzCBoZMnReYGh/\nGGf81ClO32YRG+w7qp2nSHVXkiwH5Py6hXW3RsAFmxmv6AOFI9kb432mNvT5\nH6H6z0cyQuZDgLn2U/WhHSM946y3jcYqLkBDUZEq9g8eDHfCvVAVsJrXGtGE\na7DNSZ8xGBSp5FSoCNlyurf01oWs8+YNxzqiZpMQlFTO5EP6MPtj+4No4nWh\nuDIQAG8MMe9PUL5VVpMzv6IVRTkZ2XgGsEyKVoeM6nYL7GAnbad+lOlseAKN\nBT77FFZG4DQMibOjNHNXu9WiPGU5A6RdG6cazBcp9fvJ14xOpMG0XpesY7Bf\ne56lf66kcdNyHuEs8b9kUkaNZGldbxNcF2b5oUpKlIgKGEFWruP0TuKYBwd9\npGlp\r\n=qLzz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRZ5nGGK3/zIndPSJdYdKFxQ9a4x/t0Jug5l9Q1qZ+ZgIgK4Lw3jWDOtfQqa5HSRDrfuvs3yCdPY2n3T8PSJ3GsvA="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617806801-b9045c18.0_1617807158190_0.6368994255122655"},"_hasShrinkwrap":false},"2.50.1-next-1617809320-5d4bc0d9.0":{"name":"@xdn/core","version":"2.50.1-next-1617809320-5d4bc0d9.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617809320-5d4bc0d9.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Zv7X9DiBjrbmO6QY3fCbAcjsfGMkCStXaLQz5u+TEOheE95C+e0CWKORxxo35ji3BL8lueiC5qZ3NlWAa5CoAA==","shasum":"f92b6b2e41e226d90958f2eae9f5781b6d4c7c9a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617809320-5d4bc0d9.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbdEMCRA9TVsSAnZWagAAZesP/2MBpEetFC1anZrb5mvj\nBWMcg7IPEP/+CTqbBpLh5aY/oga9lZTQNeXaJ6sxKO/0MiuS5GHT00EuP8Ir\ng9QydHQABfpePaXF0WbByszNXejSNs298jnWzQ91BNwh9tqpIv4OlFLNvUEq\nEFjtLfgc2bJJVqOPobvj5tiiyZ4DAufXXLdGcjYZ0H/jZ665ln/NOru6stK9\npYcxNU391QgJFydsX8MGSiN0GCKzXNmvCWIA7DwDLnqAVa29dT26YipnNPZT\nxanZC7W7C4z5SW/zfVQyti4QHm5DpaVCkHVr5jq/YM3LvenFXtEWu7RalrVV\ngJ9Gaqd9wW+luMBYHDbMKf3dCqUP3LdaT53lMk294itoZWEHciqay46Tv0uM\nUI+f/LT0tQdwE/KjFfVr5Ayyc7c0+BRkkJINywsKDr1XNfQVnl+FRBtOAWw3\nkgqL35/q62Nn+Uq7FwJPEiu6Nb98TtwvuAmhVgqe/1i4E22NQuYq+HHntKNA\n20YQSFYA0qUyMVuj/yTpOZ9o7xt6fheyxUcAG6RQ+cIOEVT7qe70p6YdlDm0\nLMmmscGtlM9TRxQT4lzFW9qANP4ICGcS31Z5BmcmQIM0GjhE6J3g8hlGofbv\nrF6BjFqVPFizUUH9YeQRgGhF2wSiJrti3+t2pmSLSrdgtwHazyxg0+CPThyr\nPGMZ\r\n=OcUa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDmkHGMIYvcJq6SGWtXSmbymBgLKLWUIJ1T3UgpbbPiAIhAM2JT50YefKfFGwPvfL7sa7R6HOVHhQtocCbo9MFoATp"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617809320-5d4bc0d9.0_1617809676169_0.4109124589096118"},"_hasShrinkwrap":false},"2.50.1-next-1617897231-14863e7a.0":{"name":"@xdn/core","version":"2.50.1-next-1617897231-14863e7a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617897231-14863e7a.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-bDmvp2r2XYoUWePFn9bEonbGBiVWBtIdk+DqkmYb5u22hRumXek7zGoMAZDccQ/W48ieKKHxH5DZkaD9ltEwyA==","shasum":"1b3f0af1aa8379ab4e1693ad9199d838301102b4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617897231-14863e7a.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbyhKCRA9TVsSAnZWagAA9Y0P/jcYlek7BA8VEZma8c00\nH7GlnnzNjaQfYZo6Tp+xly5JyWifyStLxx5ZJq1qss5/ag+RVLaBBsU3kSQh\nwwjoEp4ajWxHkTqJqILDegelGSLtVNVmG5Qz379J2IJRdhwLHGPEqiaDfJ+e\nehZRiMe97wxBrj/xfWkTtP+A0OE4PU7ZBSm6MmL4EsmNVhWoyid16vLCYonH\n1kNphC1/FLBjnOtJZXJIA5CD2U1vnPcNJAVPk6l0K7nClOv5+sg1CKLU6ESj\nlYPegbR5Akl0ljvghmsiYRRq55jxzwOF6fIKlhsAq6OIqrvlefNc7BLy3bWF\n5JFziJNUzkqoV/zKSMnffN7McNrQdLeY8ghuGmjH8FKLzvZmgqfAQoNO1+51\nZWq9UAi3BOqf7+4xnhHxlS4FHmz63igjX+fAloCyWGDGY/KQl0TfiIA89rX2\neFV0S6Vv/zAAq03+Q5QQiS90yrClLC+dDZPCvqewz/yzoklDgHgnv4n+z3vu\n7wHg/ikfiM/cenndUC9UfY1hSKwXPpLdD7cz9CZzEHy+bLFyhJu/5xVOAD5K\niza9by0yf+wMkngNBTka8wc8KzLwZI9JriykV84fBH1OfBOEnbeBWfKlxI6e\nh5GesubYcOBwUwDcbm/8mQoPXBwCxub2Dy+qIw0usAyc4GTtPe5ZX4vk2/eA\nUMhh\r\n=1dgH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDljdPHVZqLbnRA4kI5FD7OTeDl5A93dDzRP806YdyoUAIhAOXhavUv5BkO3tTICWeglTQMqiMMDvD9mho2tLHdfIG/"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617897231-14863e7a.0_1617897546045_0.9261960418147881"},"_hasShrinkwrap":false},"2.50.1-next-1617897486-2d2fc9d2.0":{"name":"@xdn/core","version":"2.50.1-next-1617897486-2d2fc9d2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617897486-2d2fc9d2.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-NotVvSM/mR3jabm86lrEY7ERmBPiDUf76TLWjyA7gxLlynvysBebfj0uE7wjOJtDP54Bclt7W0JKG3PKxxRLPQ==","shasum":"a1a72092c9c9507896db7e3991b1858055df9009","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617897486-2d2fc9d2.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbyl+CRA9TVsSAnZWagAANy8P/RoZsz/FWc3utD8726uF\nqjwFWRZ5LikthUs2V+WClZJoiVQUJ4W9Sxvzs7nv04q5X5GJa+1H+KVPpEYF\n/ALv3DF+hythiYtby/D3rOF/GvysRT5V6YLse7IhFaVioeMsOoeVw1jSk2FF\n1kzlCayGD6l3dlf9qnM5+362bvBhbJqXFa/MdWFbyOXpMBmrRbMpTIP5wttL\nfJn+Pr2HgvPegc8C65KpJbit5hoJl+Hu9xXgsWen/JB5clvuAH13f6xTPtDX\nTd6U1gX5fsrS50tyqmYSsKXFdzPY+mmQalf6yAk+L8w+7GMUM+SkskXz3VzA\n9PCdaeHcNi6xfghCAmvtD+teoPF8bZQ/7xfhDwxFRGypAaK8QAkkvN/NFwPE\niITlYxFvyJyjhrz9OdCvqTVyRYuGIYgaYYBbpfVyiIQLFCeOTKPLRpjpOjFt\n6HofPFLJUoCWBSvTB1tUFbayzSLtBvbFVpIbykVF72B/nXlJpcFnOPuZMGf5\njR7Hxk/aua5IYrmSuzM0s1cR+bF8KRUp8cWrHm4EFm2HBNqnkhd5bhNuoSZt\ndo7r2hxfkjiE8rMLYeg/6092zz2chUAeY4nCrNafGRwXReJTTjnDG2wqFnDV\ncoBqeiY/lw4vgdi4ODhBWv7y/TbZYCpJaxqMGxvxA9Umm+8QA3NItJuo/ISt\ncoUT\r\n=syr3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGocyUQm4+RNRNNuSx+nraVScN4/JkEdFGgS3V+v28FKAiAP4u5JnWcES/rgM0t0Wj16t8Dzu5ATkguhHD6O3UGc/g=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617897486-2d2fc9d2.0_1617897853918_0.9011610576626881"},"_hasShrinkwrap":false},"2.50.1-next-1617903480-49805758.0":{"name":"@xdn/core","version":"2.50.1-next-1617903480-49805758.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","@types/lodash.frompairs":"^4.0.6","@types/lodash.get":"^4.4.6","@types/lodash.has":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","filemanager-webpack-plugin":"^3.1.0","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lodash.frompairs":"^4.0.1","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.some":"^4.6.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21","ora":"^5.2.0"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617903480-49805758.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-0NcVsujUMYHx+pZCEiPGV5q+iN5HE8YeDy8mXT9gNZ/HZR4SQvaBWkn0TVvDZVyp008ev5pHpt+Zq7URUlZxAw==","shasum":"b73fb3538274a5fb4cd50baa4cd76a04d5b14e28","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617903480-49805758.0.tgz","fileCount":209,"unpackedSize":679772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb0EfCRA9TVsSAnZWagAAZigP/3Zb2k+ou2Qm7qPgVL7c\nzlbCUuZhha/iqpMy4lbOpWUCfCAE00R9/zY6HSqeAZjxqbs3u8qwJ3xE92Rr\n8R88uEJNXbq/jMTFh4hjVzW2eAVbeou8Qtl9037AnDPW7KQhKlOL/DadiFiP\ncHhOVHHiatyctrVBUWWylcj84xcyH9jhtQ06i5YJuHUjlh6xSfWI60UfxVr8\nbU2Kp9jxQixUmD9cEY2QFbUA+q1en2jJaUSxuNZc9QwOoSA5iFiBO2S8rW2K\n30FNUISNpy1HdfYfyW0fhy6+vgY2fSCnymkKhmMvbVb+oJ6LeIUpDd65dMip\nEGa//5z7iW1FsFt9lMWMYJEzY0tJ03FhNlfGXyEC1aUMAy8yPrOpw+bR8nZJ\nTa/xDOn3Zbn4c5nt3Uc0GBlJ+mEgXRuBs8IO7ambV1SHYQzrsXItjNnKcpLy\nvqD5dETfiXeRtVfN4GZWunIkV0FlQx9fyFs7ZQ9H2AdJaoH0HKJiib8yAF14\nLt/1OUycHdUQI/UK3O1qECXbYRtenMjEKbxBpmYZEPG7WqlS17AMJMrUKW0L\nHbwnL/n3n0Og08CR6aCzhToAHzaWWitGhJgpdmA4yjNoudX5XQSnCLk7XzLN\nahEHaJ/mqo+ZrbwZFD1eFpryR5ZnjhWmDV5aePv3DubasZGHciOGfTvHmjhv\nYrVJ\r\n=U1TQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9+xWlpqhwPYT0Mo5YTTPWm/Zzh3I31nbGlQOZWM4CtgIgKvp59FUEKDbVC1tQIicSRICI1oKXng1ODwU4CBLrCbI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617903480-49805758.0_1617903902979_0.03729932315286422"},"_hasShrinkwrap":false},"2.50.1-next-1617906973-2a48f35d.0":{"name":"@xdn/core","version":"2.50.1-next-1617906973-2a48f35d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","@types/lodash.frompairs":"^4.0.6","@types/lodash.get":"^4.4.6","@types/lodash.has":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","filemanager-webpack-plugin":"^3.1.0","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lodash.frompairs":"^4.0.1","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.some":"^4.6.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21","ora":"^5.2.0"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617906973-2a48f35d.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-w1c5YYMwmfFoZZjEeGQ4RLH6E/pRdHoQgRmGlV+L4783Py9Jo/DhT/fjvQB/G/bboxmMI88iBEmOQkFkIlcNEw==","shasum":"984f8c5c7230acea20c77c89a6e2fdcd49d9b50c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617906973-2a48f35d.0.tgz","fileCount":209,"unpackedSize":679671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb06SCRA9TVsSAnZWagAAshUP/RN8TVK4EDPQ52nXBo1z\ncJzIMBLM8r8SMN58xBmTcWOs/MR2C+Qa2Ew8eH+iPN4uJI3+6s+sChr0bmU9\ngYDF1tEEFJ6H4dQagB3qifsLGjezkOVb8qT/NmapwOfxDxbR5ptlCyZTx7F8\nDHVNBlkz4FvPphu9s28hkgKRqMhZTOWA9fKY1ZUIa0Iodkf4UHjgGg7yAYj8\n6IcbAXdHF4/YCjEnSsGsFUkpHQ9fJwC/il/d/IklJ6Tmy773b8FvlLtIvsCg\ncghtRwRfPFLsOC2dTAPX8EMYvGCjjAbe92cYKRYuRbatp+FfQBl8hQyfIiXc\nyLWtzG1kYOHQxvZQyM0y8MXf8u7TnAJFpxfVqLFaG4Hw4ZgAyyvJYwgv3kbF\nH39FfogmZjo3bAqBIvKxLWXeBlGZC3gq+HNOQ2IiF8tCLsV05XR18P/54wwA\nOeGNFZSHuRGt1gBTY8vKL/j7sJwA2VRYEdgScDwFQ+QEpNGEo0C8Quux7PfX\nrH0OhsdlI5QrL/m3beZIl3LlTX9KgZs+/AEyVZwvk8NrOamO1f/5/a6cT2QH\nW+7i4fRJcAbz3JDYiQ+pUQBVmitejuT0BD6sWAFPaWQqsQAuQxBJyPr6FRHn\nfStJA6LNPhkyh/Vr9pcyPBdiwrfOuc1y39Sm47Cm6QlO1nrw2b8mdGFHtI68\nMemI\r\n=VNC3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXqdwYZh8SVdQUCuSi+qdUZUfk0zsvlJb5axTT7y/aawIhAJR9d5oNEwqoBnJjxUAJzSiCu/Nr3MxlFGztJXv80F2H"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617906973-2a48f35d.0_1617907345890_0.7280672501376617"},"_hasShrinkwrap":false},"2.50.1-next-1617907979-ef368dd2.0":{"name":"@xdn/core","version":"2.50.1-next-1617907979-ef368dd2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617907979-ef368dd2.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-AAAY2YBVRc0qlWPQt1zKz/9oPfT1kr/yywnW4QUdJVS3dNvGWYSwRPlhlkGOELR2ObHC6thPitf9kWWp92HqKQ==","shasum":"f5881306c067b0bff9ca924d3783538b27db54b8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617907979-ef368dd2.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb1JFCRA9TVsSAnZWagAAreAP/1sIjBQqqD5OH0wBHyuV\nDpCKwEiyWsaH6ZDjStttcIx++USWa16iqZSLUFuvJTZ7u6vWsa6gBK3pkBDs\nCF2E2flHtiK9Xdm9Nm8L8xhqHolTO7mRXHjqAXngN6UV/fDgvqYxRJSRaTci\nJ41+6AccdGChHBnZ6VazipJCDD4Zj64aNDZF4+n92kwCxrbLOyYsoaaxbfyB\naetyiXvjRurzccz8rgQNTtesVt5OChb13lNBFRY7917FYON7+HSGRhgH/Fkp\nL+SVBn6w4s9LTa0GjVmVXF8JfqxsQbgM2aJxnNaNUW03iT1w+XNkpEdFjjV1\nQ6r/gpJh/NE3Vbn7rOLF9q2geHTO8uyylGu3h4HHk5Ocn5bRlfbXSoiP8WC1\nSX0Husx1fbhxjAYZY5ftFNNWPQdyS/z534++RbxydTm0raiDjhVUnq8BkeLP\nc8flD3qN3qWi8s8SI1zA/May54G8+TT6CinyZZjMp6o6Yuf4oN6qNqip81T3\nYeGmG5yj5UELR25ES07DrRlpIurmicKTbDlrG6MwjJUToIK23c8C/5WKiBCy\ndqWtpVpBN2HwZe5dzbIsbG516oLgXlAqLSo1/nOgnncm7m6pGwIdE3FiWYsc\ndr7bmUUdBg2Ejkr9Q2BTKfrUllQGWnQ2iAJV2gHg3MAVQQ4z21iCyeJ482ff\ny481\r\n=TpFJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGVguebSSJ6uoFBCdxTz63elQEVB81B2Q4S4HMU5NDbdAiAODEInONgzygHLjj/96f4Q3mNFykozhtNneUnniYYnDA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617907979-ef368dd2.0_1617908293289_0.49560432593846215"},"_hasShrinkwrap":false},"2.50.1-next-1617907995-bc8bea11.0":{"name":"@xdn/core","version":"2.50.1-next-1617907995-bc8bea11.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617907995-bc8bea11.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Ajthu46g58JVV2JuEiC2bWLOfA5EA7u502/mbWhM4i/oQcOmkk23/qCmloT7r89w/DbQJ+49eRCxAjsvemlR0g==","shasum":"8dac05c3e32bc38f6ca54e3f4811d767119f6101","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617907995-bc8bea11.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb1J4CRA9TVsSAnZWagAARoIP/i15VMiYrFp+i8FdLO5m\ni91FXuMURTCt8V1x0Pwi6OqLGUaE/T3+byQ+B9aCyMYQltEus31lg6PQfbUs\nj1H2iUxryPwvoPEC75AOrNyHC4VdHj17OkoN5/zFqPWRJMa2tbEM+z4yac/V\n7UuvEV+CwL1pXR/alpgO6HX81vlAQ/onqoiYdD5WFi5DBNl/GSmMES7e6lpV\nSjJpu2FRbcIZfqU2TDNfrmhq3hYjlCOb7ELnGDjFds/mMGtPcpnfLeYI4+Bg\nPgH8OltFTA0uWGwkXcf+FWlDV0yKJdJxd1VHjDFVx0I1SSPnjv2fIk80M9/3\ndwm9vca0H8HFVSQcdVhOmIzcTR2GU7Du/99OCQdkrcrgBmSDxpmKEUKNSev3\nKqRkAqKMUUga3GmscBn2wWOUl9/dqO0kD+ApQIaWYA6tXpLz1BI42QXOWBfc\nNK+LczODS1JoqaXYt8GhLdB175bsLCjOJ+d9rYR5GT+yb+xVG8SKWKje/pJl\n+P64S1/sBs0Bh4EH61/o55IhAIImwh7ee93ZE2PET4jROrxvpVfpwLEarroN\nyrkLGPzur3Ipf8U+U4Y8ANdl2sRBM1fQshNulqhRRdUTuYtn6QaGiNT0+I5R\nCeStBoudkcoaVjNCaKkJMUYSE49ptlFVHi9AbBfW9IjCPVT0LbgxScebFu30\nAYiF\r\n=LY6Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqadCXhGQMf13qdTiSUxU7a/10kUSReQCBYrdJAaI4TAIhAJRTSdoi+SNufnYDQrZU4pXOHAIOWfWBV1UNQfbHuqJA"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617907995-bc8bea11.0_1617908343704_0.23302632230569897"},"_hasShrinkwrap":false},"2.50.1-next-1617907981-ccefa852.0":{"name":"@xdn/core","version":"2.50.1-next-1617907981-ccefa852.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617907981-ccefa852.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-iqpCTK4luhISuGAPCM7ecKM51hwjBEdCJo8JxMK8Jy9xv95ukByhzlP5tF4gwBEKqvrUTPtKmK930YyIj+9tzA==","shasum":"a397986a382d97500cd76aa2e45dd775def2c4f0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617907981-ccefa852.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb1KQCRA9TVsSAnZWagAAtMEP/j2Q0wG9tqUuTyaNmxRi\nP0Kk3pWTesUbd0JL6Z1hekIEE4fzEKRm6bTHTTP29KY7+5mbezvMfUz3Cp8N\ngUG0RIZqk07HnXjUF0zRWWC/5ljEY58gN5XrKKI9vZYQKDfa4hxjTHFgJZpv\n8OK1AHgfRuHRAbYqV5wGpHqrOCGuQSJ7jrvox19D2NgQ0rlrznu3A7aH+iso\nf6Z06/2Hl3hEoW98gEpm5LRtxm0BAmSyfBOJWfLP4iEDxfwW1Qbk6kT3/qd4\n3CdP9OJSzu7a1U40Syh8AMgZaIAOLI/0fKIW40n1eSIwZ/autHzXRzoJL8/h\nlv92TzKEHX5CGGL5xjly64FqctqWh7URd5+Shh9trHYuswhh8HeXWi7mWsBD\nUpUKMMjVBiJyjBKzZ+ewTyXmY8IQxbh3PSVgZquZgcr0PehVURyMh1Hw4+KB\nnANC4p+hzSgUclyTECGp5ACWvvfhw7ACJrC51oQRPjuBps9FSHtvw0WdZxnd\nbuVYDtfuSD+pPwu3Ep1fGQvDnfcwQwf67NcRQbZl9vjj0klG6LK8RbKBjLFb\nvHgRcHTO42rjt3NFWly7hwVvC8lQ7wQ38q6Yq+dqKaYHaFTPkukGtT3H/IBT\nqmdkR+JENkl3kLMxzOA5VLNgSFIIQV5dFyhy/x9XYuLNZgAbbcYZk2jtcf0w\nUHAQ\r\n=Q4qF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIENaN4SmmP298EYwo45wX4WCWLkyeIsP70G/7PFE0JZoAiEAxMlTHyy7mTWoXpPDIOIKKDhKj+WDrczZI1iRZQj0zUM="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617907981-ccefa852.0_1617908368245_0.23006406035225058"},"_hasShrinkwrap":false},"2.50.1-next-1617908060-faf7f94b.0":{"name":"@xdn/core","version":"2.50.1-next-1617908060-faf7f94b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617908060-faf7f94b.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-2Bmus/tKCSTwpNZkf+nMf1+VUASeCt28zpWq3N9jZVTyheZN2N7V1ziJZIn6kMubQvFMKZ8tMtnExsYTrFdr9g==","shasum":"25410a086dfd2a70aaea1b4b58aa0bb332d2e569","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617908060-faf7f94b.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb1LOCRA9TVsSAnZWagAArDMP/RRdKspzb5oeT8Hu4m3C\nlWV08qRXlcKZ/vGHfaWfQqts16jnlvxgEBXkN9BZhvaqZoce30rhgUjfVMEh\n7jnrdPo0/Xk2yOAhIi8a9zXO17D+xNbneFVU8V02nmNgu4GxY02xPdxElv/T\nOGHYQMkfy7sAY7dpQ1LZqKqeUgRPryZdOEUOe3hb5OPnPKLmY/KYIyyo9Gxm\nM4sFPJ6oreeECUOImP5Wa6M/sJiJqKBj3oXSE5npUAYZ4bS2Pjrz97M6ii8c\nQPdAz4ZoFFcNohqsOOLWpnNIZHUxKkbSSJw5Rkx8XEMLKvka80VyqOBWEWom\nFAS1LsBmIR8f4/v0uIwkCTiNFLMVDJc/DAmDtPcHPgVnDqNvxg0hHdOTE+kg\nE9VT3PBDDguYmxxDnNi7xL+r4KiHgkn99hw1jok1bQg7ny+HLyrYhG00UWTE\nKF4S9Mvg+BOA3vmFXhDl5ANVfmxQAN1ln5IZz4JyQznmTEK0ujChPTeU8W2I\n1NQmz4U/yZDyC2McNGkGHKaNDvvqdYB7QRbxA1aHHBrXr/yhm/uQgoDP1GGN\nsg/1kVo5vmfnCyj2DM8CnHY8WU+CUw2xhzN/5BYsnOJJl7wrDc0nmHAHTbwi\nGk6EUuwY73uTlErJ/LGRwuNN0gumP3Th1tWuILllQZ/J4HjZjj0qnVmbgVo6\n6PUE\r\n=1DJ4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVZZUmwALgOcTmAlc+ntx9rr6YPS5Mju0mO7wqI6XAuQIgfHidZjP6m6afZshZuXN1PoYa8WytHmmIT5RPd1LUl8k="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617908060-faf7f94b.0_1617908430247_0.036419440864853936"},"_hasShrinkwrap":false},"2.50.1-next-1617911006-2a48f35d.0":{"name":"@xdn/core","version":"2.50.1-next-1617911006-2a48f35d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","@types/lodash.frompairs":"^4.0.6","@types/lodash.get":"^4.4.6","@types/lodash.has":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","filemanager-webpack-plugin":"^3.1.0","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lodash.frompairs":"^4.0.1","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.some":"^4.6.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21","ora":"^5.2.0"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617911006-2a48f35d.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-7kmhAGDVJS2Kpah7VEgY5clHNylJrYNwYIanH/GfoDtSkqaWIOLgDdMynz+KAImLf99ouUZyr12tfMfXpjndFA==","shasum":"4a1dbba8fbec4065a145350b15d59dd330ab68a8","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617911006-2a48f35d.0.tgz","fileCount":209,"unpackedSize":679671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb14cCRA9TVsSAnZWagAAJtAP/2jpRw33iLNToHH+myJ2\nqVmtGOTaIhFYGtKlk4EDT3vV38wcpiQEM94UM1bzxhO079R6Zn9+fPatkOoM\n5z2QGVvEE9TbnXhDKvVWomCo9h7SsE9vnnfOOLuJ06J1xN75xmEukj40W2Br\nop41jN7yoDfueLVUanlkGnwUflFitYSRyNShZ4dGS0fH9zT0knWMIzif0hGh\n78GljCu2VtrbTArgNKMGhZRxpqcOfN/TvkNagATyBN4bfgBPchM7fKLBp7/U\nJy6Z4rSDKVjdRFej7ZluPj5zxmRr8n4FuVCiqW2ygX2Io3enZ/M1BkOwZm13\n0eiw0ITucMXWtZMA2AkHnSJHzZhIQJjwvJOADQlcuoREaeUZV6ib//8vuWMi\nX4F+OHoaT4wH8eNJnNNZYzeTUu8PLQ4uDS9mg5xMqSOjundqly23wYgaWsln\nLwtwmthlbfGa7egi7JyyVmnZ2RBVZnpQTdjOJzKli6kOoX7oEFGG4a94rg63\npCoyEhAndknTfo1TPojC2x4HkieQjXN3hL3NkjtRz1sFwn49eR/AxpN9IV6w\nyyitx/oiBfH0Pj3RFVse8Qq8p1kK6roD/grt+tzbyYddB0q5pXaAz1lqFTK9\nbaXmQKmlX6dxLRIkigAMSE/uhnQjg82tgZA2+Q2jwHhIooJu4s9F559S+GC0\nVAYa\r\n=DW6E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4Xj8Pu/uUxF3uW3B1sp0hTKYe3l8MuywHMnVE/zrmFAIgPUlnttAbhHzRELo4gBLTsEnffXnPvcstbKKZhgiXrIQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617911006-2a48f35d.0_1617911324274_0.8566457945624724"},"_hasShrinkwrap":false},"2.50.1-next-1617938034-2a48f35d.0":{"name":"@xdn/core","version":"2.50.1-next-1617938034-2a48f35d.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","@types/lodash.frompairs":"^4.0.6","@types/lodash.get":"^4.4.6","@types/lodash.has":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","filemanager-webpack-plugin":"^3.1.0","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lodash.frompairs":"^4.0.1","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.some":"^4.6.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21","ora":"^5.2.0"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617938034-2a48f35d.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-wTZdCp/Ve0oxoye2wZk8GtUvclluvv5P3HXdtZZWpAPxWfbmYD2ctFVDGKqA3pzRWtAQPp5p0QWib64/UVq5dQ==","shasum":"5d3c9e0fef4ef66d202a5b009bf0adf0c3a3240d","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617938034-2a48f35d.0.tgz","fileCount":209,"unpackedSize":679671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb8fPCRA9TVsSAnZWagAAeEUP/3P21d5J70HYza+VGNGh\n8IBtGO4aGNPVGFQSiybLJjOEIPeS13hiq7+cjubCC/XDlYfK0gTEA2N+KuFE\nnqojhoIKm/h5es9ezccdEFDDiulPHilFIbfLxy0pALn3FyYJydN9ZaGIIirY\nsJjJim7t++kPvf6Inb9qSMutStxMslCH8OnhCriNAyqUVVUusO22zWTf3XcZ\nzv6wX6CohKAZXMWdf98yds53tAPKHPKcwwoUHD9at7FVNupIM3LgBMwm95nz\n41I9BXpHACL9a5e05gYk/gDsee+uqMUC2RQCg+RdsxVZQ6DipfK4G/Gi/0Nf\nmnf7F6aTSyAAUVQQwrJKAiNa+elcVuwV8PhgehQKZrvzSnbkax2/iPIjSWpR\n99NJ3el1MAgrnvQAM1AlAKKx+dXdMiUiPP7JEFDAe+rmTDTfeFe2KlPS6HT0\nzVGyrQGhXUlsvFqaCVZyycL3kFsXBf4bTLORYto6tE6LvjAMyhZO9VCq1Zof\nIoa47jTEmRULqtAxnHrWSMDmtM89el9MrHjOCW6rgzQHAyGGyaM9k21VdQQL\nnfueBxhvBcaYfBs5Q9M0Ekp1YuFTcDqcZxtGU2h9TIvwb94EV2nKU2BZA/3r\nX3cjpJmvQZm9TuBgW1d27jYbxrDfN1lR94vHXVFVQxow3kTdnR5MYQP2pjJc\nr2yj\r\n=4Sp2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF36FOk6+6LVj2JWrzTJRfVyk1hhbcY3eRAbnCF24yyyAiAoN1mXpmh79YN+dJ8bXApG6nShNr/1bTYL6m3ky3ZfBg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617938034-2a48f35d.0_1617938382835_0.890916981122424"},"_hasShrinkwrap":false},"2.50.1-next-1617939400-ce56b50c.0":{"name":"@xdn/core","version":"2.50.1-next-1617939400-ce56b50c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617939400-ce56b50c.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-rqMTz8M5Q7ZKt6b9UEQpVWxt6tmnKTIH8Ac7SumPFvTCud3Ju56Pru1ir3Eka6ZnQrWU1bOUf8+7A12QEBFabg==","shasum":"433648105a77c6c0d73c86a95d00be7b4a098082","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617939400-ce56b50c.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb8zwCRA9TVsSAnZWagAAe94P/1uhxCBliThDH32eZQD6\n+BzDIEaMIF0qtpMT0Fav2x2GvtDk+G6rmN4Kq3zUdjawz6hbPr/Pd8E4IFrZ\nAh0fWKpY87dma1vG8NtV5OmlGzXcYAMt4Hkz4OZ6OK9IOJcgP7xSM1sGUrDr\nAYX3aJ6ErFrSwJCeYIcrJ3VR+KGtQDtMTrFKf51PtNKyhuJTA72Gl1/V9OHz\nxjq3UxxzpS/v6psiNjnH5OoiQYnU2Vq+IYgmVuy4t/aD4C0tLuNa30Kl2/HA\nvu6LIdzR21hIHQQXkrScme4w/x5DBZF1O2g2iFV6bdmjMgdA7Tm6FUJjo05Z\nq2QknaTO8xnnMc947HuQ2ZwvxD0gaB0BUKXCRBrQSEDjCb9wyIpz4ZBT1Ybi\nJy8+LasgJQiZMxwJtdAAXRvD5fAMsbMMgZSHVAm7R2GtTeaCcbqzRkO+UB/t\naezj8DFgCgRSNDMEFpeDuh0A+7xqpDAbroVUFbuuv3MblLWZKuiAutE8ShzJ\nideKyCjecOfzk7Yc3/qkTBSnucLcrPZdR4P0jznCBme0LGMDvcJ1hAHM/fTK\ntpgCiQv0+FDad1/2N50LJHYsmiYQ9k72JNJ90tZo7tvQxa5HwCEhbAcr3RWl\nenfqPiGSAF3Qnts/nOl3Qnn0V1EyYCQ6jaD+y1BoJMaUOJb2CflxS2cdEzNM\np4OC\r\n=5xtm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIODCi3BbASLRwAQqT7fNqmB2LBrBquXYNCm0xZRyFqgIhAPfDNXuhxNhGnMPW666YfCKxh4sX9HeFefnZxhSlDwcb"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617939400-ce56b50c.0_1617939695769_0.3102582634907889"},"_hasShrinkwrap":false},"2.50.1-next-1617939413-835ad4af.0":{"name":"@xdn/core","version":"2.50.1-next-1617939413-835ad4af.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617939413-835ad4af.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-r4pRIy57tn/W7fssujzHa6MXwggEl/Pxq2/8U5Mzox7ADbYjLeecxuVTKDLDFL+KqAK+j7r/70wAykDkZA9Jyg==","shasum":"b144efad4e366373e4351e91bb5b474bd896439a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617939413-835ad4af.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb80ZCRA9TVsSAnZWagAAKmkP/2/9jcBMyBA3reR7aicL\nZFOTOWiurY34wXZGD9V/z2yBRCmQyZYrwBM048qswjN1jwGw0pnDoVvgi8jJ\nLw8H5P2mrAW4wI7ZxsauEIAz0+wlPjPAfY/YM+FvdHEG5dA+eKs7mSaTN8NO\nj2n1sT+0EEOVpvR3/FVP8QqA42Jo663VrunsA7Sfx1Bik8jyRzMN0/SzQjpd\n1lFAZZSL1IHj3SNGyu5LrFqWtOie7JTIArVu12h7egktbZ2qOs6NmjPO/Gpm\nPWQUTrKwOMmxwcsupsIJNI0BDUkqa+4Ig7JT3NpApbEiZcS/Eh2c/LLE+HQ5\n78BwIsEa6w7xdg0LPygTL3M14QdLr0CWLXaSqN99fiV7rp+buVH25wmQ8q2R\nZDOmuB4zzz/V6wh5qD2ojeHnSTvRhwcwdSImx560wCvUrDlIlWw9pnjjd24c\neI7nwH7nMjESlNAzsaG0+se993ZqxMdudHfomSoNKbaOTU7J80eccGLTcaA5\nRqUahoQ5t7BzTerehfj2XK+Zk8TEOcWhz/ZfzDsIYkMOaTHYWhKOBajlHNLj\nIRxMmJnyL+Cec0HOUEKTe7/np/uLoNuCfTTTsAUNGorw2pFBZs34vcCGRWT4\nsJpp7l98NICkPJgY7JfSMDT+g8JopQmZr47I2qiQ4mYPk97JvbnHbOOn9Ovl\nMqaI\r\n=o/E8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFy1iSy4BLW+GajbKDS/7LHIAzJTTaBoMrA1iEyGENffAiB+fM8SiJOuOLYkcqYGwtB+nlTJ+XAh9iiceTL6fboXIw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617939413-835ad4af.0_1617939736899_0.7679030820307946"},"_hasShrinkwrap":false},"2.50.1-next-1617939428-2f7639c5.0":{"name":"@xdn/core","version":"2.50.1-next-1617939428-2f7639c5.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617939428-2f7639c5.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-gDehP45+9mW3f73Fpoa/HUQmOneUNIUK/Ql2CnvV3GspFwer1Fd/3+jxZVOqL1xuUvK5LHafgdXi3yDgznvwFQ==","shasum":"a7aee06607b4e7ba2f303e3ba11069856061fa9c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617939428-2f7639c5.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb81FCRA9TVsSAnZWagAARf8P/2RIhvEqTsWoPHd9TzeD\nSaV7BCZW0gWTPUfb5AlCsWJFbH8+X7QABcbpUyRqks+1GC/jE1bhKt9KXde+\nX8cKT+pZUD3fWrUUJ8etfsqs8o/tzulzCJENOnn2BisRyG3a0BP7bGsQphi1\nqlz8LRC+0mDEED1xUvAr0v5FZPrkDjk5K9647Z/Ps1cCKDd63JIyk5+sD5Fe\n0INWw1f6/TWvP1+Odm9G93PSXhqc0go1BawmN/MKlH4WC8OMbn384HlIQuKG\nb9wTnEE8D1Xl5S4YbJYwFmq4t6ZmYQqUGTq/Mq/3QVH24cCbi/eQYVrwXUj5\n0IB+gQtpww0tF69SVexJdBfLNRfdNT+zhdWIa5NP59Tmg3SJaako9yBCC1PU\n3oLw9gLFNpVAoXQw2zw1lP9hbSWP3sAaUepYYS3r++d0cfBN4mDon9GUN5cN\nL3GuUn38oYCwmYku/OmoqbTL4zsl+96L7x1Cu0SpC1kjpy303e5vODJy5ePf\nVUMXn92faT1gUnrOOhhRQNW+OEQpfwh/TERG9fL0GVsE5qbZtU3/PE+kOG7J\ndPuzFSASg89iOZVUOLZI/iadoZtCAHx0DH/vxrwjDk+WmFlwdoWwqbTZGgry\nCd9LV95SPATDjuf8igL2g72KI5w5v99dAEwFiD8pze2Wkzsarqvif40KzzOm\nWq7w\r\n=i8ua\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiDIGhVYCzU+2ZzMX4+V92sSEhapNWv1gbtiInafX3hgIhAP4efSByWFXysTk8Zg4RJHX+iGBR17VBCVMyuAPxpyGA"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617939428-2f7639c5.0_1617939780494_0.7431588349340406"},"_hasShrinkwrap":false},"2.50.1-next-1617941549-9cfa5360.0":{"name":"@xdn/core","version":"2.50.1-next-1617941549-9cfa5360.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","@types/lodash.frompairs":"^4.0.6","@types/lodash.get":"^4.4.6","@types/lodash.has":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","filemanager-webpack-plugin":"^3.1.0","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lodash.frompairs":"^4.0.1","lodash.get":"^4.4.2","lodash.has":"^4.5.2","lodash.some":"^4.6.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21","ora":"^5.2.0"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617941549-9cfa5360.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-b/yV/6AtmbxGSjnhNrJlfnoD3cArg4JGvWminHor5mqkACyp1kTB+uoVa+w7Ua1vuoF2sUkhWrCU8wT3hRzbNQ==","shasum":"44e135979da7ce05dad6f8f2ecda8a66398e635e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617941549-9cfa5360.0.tgz","fileCount":209,"unpackedSize":680173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb9VLCRA9TVsSAnZWagAAwbQP/ix6kcD5/zxnGGgMD64o\n37KxJAPboWAo1NapohuIgWkZkTbDRLZ0SYOMMo32MGO3mJ4dqQrJII3ZZBn9\nlV74P3WZWBYPyqG3vNzDEol0UL8sDcAFRt3GkNa90q6ubBD217YsxTfZHdV/\n7KiuBSdaQtzgWYWEh0/L10ZeXzz6N8vO7TNnOZ1ZB7vQQNK67yzMUJ9tv9Hw\n5EyZFBQTC9cUoqUED9+H69fGHBJDEk/DCE64w2EFB0EIIvadl6cLfjFXNfgv\nsmMFKeHNvF52Y/MQdpTcu7l54qHtNJeIMSeEeB/gdSEAIO2I79BUljE51WRA\nsp7nqFddWbWNJTkHDO5/0eqRaLBQh+VjimYB7ekTdhJaoqiZ9rEsZ7DmMoEe\nvvj+fKwt4nFs/l8yTJ/t7/7dXJt1P0wvxjwmAvkzSZ0BfEbTw2COyiJ2wLML\nGdG4LhGF7dTMW/S6QwKvcZV1Gzc0pAfTng201CxoYAxKrgeFkbS5h0MKCONl\ncz1u/k6EcSStZDcCnG6kYGw2HsA8Q0hhY2WRtQiYKZWyXOPGpkHJZPk8J5P9\ncdSHxyWRoYzCq8ye2UZlpp1Rle/XC+oeLDw3zDD/yv6gyOjAR+78z0u3D3Lh\ngO95XfDWsR2g8tLuZi+KCfnlOkzeqKKEkv1l1jmTTyjZczSnV5h84Hhs6kWd\nczCX\r\n=HBHF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA5z88ee9/3slQZVYRtK6+Uz9Srae8Hb3G+mh33JIa5DAiEAsCoLpcMFB56UdHm7FiRZG0OhsJlsrtoGByTJjJgyG/A="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617941549-9cfa5360.0_1617941834583_0.4069443086582534"},"_hasShrinkwrap":false},"2.50.1-next-1617964359-8f212976.0":{"name":"@xdn/core","version":"2.50.1-next-1617964359-8f212976.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617964359-8f212976.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ASMLwIAmO99aMGG/SFSs46xl7XGxz1Rh8I7XpbbAS3nGzLew/dOcWtJMKT7XRCqiGf30HDBLeLWx/rRKd5sZiQ==","shasum":"28a683ab7148f57e90ba2f9c3a6c06789285db79","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617964359-8f212976.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcC51CRA9TVsSAnZWagAAIjoP/3dS3IGKVB5LhWtuEnD4\noySWEdLOC+yf2P0UsV3guw8BiMmpicOzoKZqVZ8IU+XDyR6tk8RBKVONT3/O\nYb0phaaXJZ1eTnf7bJktta76y3cnjEB/AQUfXQ0wMu/ugaJP6kKZDSZImcFs\nGwVOm8pU1J5golidfMoMe5sP6mo5rIcnqpq4e3TZFxaq1QchzUW1OZTIHNBB\njrWPxYCbAM6VuYYJ0r/swiL79KB/pYCjagLdwyxE44ewwi6weG6MmAGVwLFN\nXZAPhByspPmVM+ytQT9aGn5chxSYRDs/C6LjS2Lq6CC6bINTvY87Q24DL650\nm+cS+YMOQ9dFNdUQC8qdUFwkfA68rUbIFf6N+wbN0VklMG7mHNvwX6ZtM5oS\nMvBC4gimHZChh+s93HlHrGcLanZvz78JU/05L+xw/X9OvVRQfTmLVaqAsAQR\nNVjmsi1HUQqnIsj1H7FV1pxqkQvEo3nQXHvNsCTmsUhzm25fpaGyEnyvx5Ab\nX/TxNDLPtKPMPcO7eMAT6ZKV8pgDJ87MQwhXL00j0vRsPDbld8z7NFHQHMjv\nNHWkOu4F7urMQy8KpwqPfvOu3cBwQ1G2ntd5f5ivMZLRXWw7dY39gltDh7Y+\nKyMLBMGPZ9vO44Wt3kO/8Y6yw7MLmDuwmFIcjexn2geYBGd/L4Cdpg+dwaqm\nJOcJ\r\n=NPs5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1JXe1RSs8Wyx9qSb+W+ZMbgOWCqJ47Ppr9NtnaCQMoAIgLq0lbIaKGPRTcZBmspdPL0LQTCxID1rwsptWCrmr0n8="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617964359-8f212976.0_1617964660936_0.924011594244379"},"_hasShrinkwrap":false},"2.50.1-next-1617967120-f0831f07.0":{"name":"@xdn/core","version":"2.50.1-next-1617967120-f0831f07.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617967120-f0831f07.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-LAvhKLHrhA0EhZbhv3aZ7ZPrliUszFMPz+Iji9CGzV6ujk4A8CEiBF6sKsL/QXp7vB+qeGuPbip1lp8yUONbPw==","shasum":"3896f85ebe7bf4bf0e31afd61a4902a626d33e37","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617967120-f0831f07.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcDmGCRA9TVsSAnZWagAA1rwP+wRe4AgaY7avLDChCejM\njFtJ+KfxHbRiVisawFjDCHs467oJ+dP5jxDZ4ekoEt+uXdcFQNJVg2ryYmkR\nJ3QkHUeyN9FQhOs5LIqAVeh6QTWBCgjNX0dU1qXJ9JbDQuuBLADPdr7m3mwz\nFggsJHMKSrhWj/WAdlx6rb3iVfN0lXwFFEVc19HV1XC88OC/e1lUUqDoRxR1\n0ObbU5n0pKRC7YF1YmMzo5BAFli2XX6MonnaTgY2GNYk0TJPogV9ny+QN6bt\nm05kIbBiGDsElpT+5DvBWZeLT5zIDHdsr3LDiVKO0+yRMhtUz3GyWvztNnju\nzjFNFqcpLbTz48CA7izN1ZSbluOXovWHjAnjocLbA0sX65i6s7unNc3X9mvD\nIzvdap9fZwUDcDA0Kp/3HGwkSJRMBwXmiQSUtgy+eq1wWCh4kchZX2dEqJYf\nBGUfMsjVmc0sE1q1wi9iaD76haIZTAhka3x2k/FjUElX+Q0/YrA3vhxOQjnz\nThaTlbs2zU8CzweWEGVfREZDACpMpuHvlOn7kj8Fwq8FgdVHBRihph0XjBjW\n1kJKC1jZEf8k7jJu5Fpui9vQFwL7Zv3LckRdZvNVk37BlX8jXSu6M06V08D4\nbDcPWUkKN/c9UT/RQhg9WFzXWn27nxvbNirMEc43A3tFhl4kYl8LY4ANIsXU\nilok\r\n=6aIO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDF3QGz7mlNQ9oDjff6pcCVt4Mq9rOLlmRzlN52kLNtsAIgcT3Nvn4HRs8ItfgOgI9KFSopzYQi2BLqN+xdXRfGvW4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617967120-f0831f07.0_1617967493497_0.11605194072377967"},"_hasShrinkwrap":false},"2.50.1-next-1617968402-44ff8e48.0":{"name":"@xdn/core","version":"2.50.1-next-1617968402-44ff8e48.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617968402-44ff8e48.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-pSB1TWlDL9Ey5IcJNGprEJvQDPZpog9cVKD56FBRNWuZR/bd4ljwaJwYajuNwwmQgm68/ZnCWz03EApF8TMacw==","shasum":"7787338a08ed77183b0996da5e26f0339453ec26","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617968402-44ff8e48.0.tgz","fileCount":209,"unpackedSize":679878,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcD5zCRA9TVsSAnZWagAAUvIP+wZARsOrQf0yoadskZ7s\ngwUFW5SXam5qjWOCCBZLAGvHR7s63m4PiKmcWQhJaM4csFAZU47x3dMRdQJG\npCgjVezllDY3RbSw+b+msGUazKf0ivkWw6y6gMkKPJGzf2//7gjDOM0CHd+R\nHF0E81JEpe1A54LzJtNP/yKR+ocHM+lRla7Vgpln+/CT8N70zWLFclIEUaEf\n8VBsivhp4y3mr05YviZ7014Haxanatch49Fdg9ZupAPwC4QTEUZVE6lA5G2z\nhl6E/6ALArzcGoQmHnDBh1atKmsTC+yU6T6hR0fLLymnsK8FbQkrAUCXw5Pm\nXr6l0TkvkyUL+NuuSDlBAaqVUFJUPtWTRI+fY7OMD63exMBuX2YN4AO9Q6nj\nYsNkiUH/RwGpkSaFQUegRc4g0UEYtj4+DbxZ+8m+lXNaalMaYTY0SCaPlfKZ\nrKina4OTdphqVkhmQe89Nes574AT0a5PMNB9mgMLkmxo+lOVqfg/DhZ0Slue\nd7zVS/LmIkrH1t+sByJDYDZjB/StuqR7HNPCsKXnWxblkCwjWUq/IRU+Hqlj\nAxz/MbEB4qwC0ve8irMJNkuIOgsAGWh2f9tLcF/LacF/P4ueFFdT823d/5ha\nRZMVJ2AADSa3hUMDzN9UJSPL6BZzb1oRxvzFdyshr/ObCNkKJmEUnjvJvusy\nEq39\r\n=fE81\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA1CyChrNUqU5Tt07VzymTbdvwVk26m7CaeR4lWA2nOTAiA+MDx4JJhvhUaoL9Vi9Oo9XSOL4PxhPUsSWK265wvXGw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617968402-44ff8e48.0_1617968754692_0.36005755388764604"},"_hasShrinkwrap":false},"2.50.1-next-1617970277-0d132c83.0":{"name":"@xdn/core","version":"2.50.1-next-1617970277-0d132c83.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.2","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617970277-0d132c83.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-zYzvYr1iVRMHfBFIYmVIcdWUQA8lhvpZdUdFKQ+DtZde18BFMXMUupc6TloPnVTffIGoAuiEnLrrsrsHkNE7LQ==","shasum":"2f1ed629a2a7719db70c8ff1202ca282a6ae95e1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617970277-0d132c83.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcEWcCRA9TVsSAnZWagAAoRYP/27MdkY0H932Z82ZTLNQ\n7Z/WyJaceA7Cok90DbcE79X5YGopeRclwMQUQTaAe/r447ohWIl9FFQwQkpV\nt4Rdj3z1lcJ+99I9C3pn0JKlTG7UMBMx3BO2aegNWnIvJwcgBQ1Sv8MXuOQy\nNMzBgQQPw+SNVBTYoRDFaCSf7W/d/J8fufwToZTRnxRCde2ixoi04gGg5nMC\naLrVjoL+k8la5pSxkL1JrHpCimGUUo7RgDEYKS9PBpUWdNgkDLZOgfnO/qKB\n9iUORTQ9y3DDTfvOoaNuHpn9t02ISO4skzLxMsU7vKBTKPBfafP+ztHmYlyk\nuH5ljhutiOLHMwSR8K0f08rDQZ2tohmNIro4ZF8uXCKRRvNeqPrxczoAUkmk\n4lmagpr9+B3Yz0Qk6Oy4USj6pZKHoVf7jneiWAF6CUCfJrWwIIgrWxkK6+uX\nRy8njuprJAFEETk6vo1yPXKSvnweLreKNmULkTrtdr4+q9PZOEttYdBsAuih\n/4vfC8FvZ8onsDZgTml7/mGG3jVEZ4yIbraNbyuumzpHoIj8yA6ssP4ABB8O\n0eu3OditPvscfLHeYBuT/boBF1Ux46cu8isdSpkVkID/3feAFWcJVqTHw64P\nH3Bt2B8Hr4uzo9IvwNb2aXtbtrd9Yj6TK+zzzLjxatoIXzuEmHVtmcOH0u9a\nqsYr\r\n=9FxB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhakOniGIYJvbSHMHM/lH4yKCDHltIYTnuE6RljUyxeQIgX0p4Y+qjLCe9GAFzI5OUEEWHWl6EgcFVc1ad1f3/xOs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617970277-0d132c83.0_1617970587565_0.30656371857909814"},"_hasShrinkwrap":false},"2.50.1-next-1617970300-b497696b.0":{"name":"@xdn/core","version":"2.50.1-next-1617970300-b497696b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617970300-b497696b.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-B1sLd062+QmEhW0AEezeCSi6e8aiS62Gjve3t9RwFYXOhyFwVmJHo6dMNDXP6JaeRNwurHCzOpMT5Zebd4NVUg==","shasum":"e342c3048158a0a322a22d6b203cae2d7361306e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617970300-b497696b.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcEWrCRA9TVsSAnZWagAAWloP/1HiltCwxS1sa/CCTKRv\nNWrlxVIXUYieMdcPYWtDMb4z333eyuqey5AkwxTILYzMEIHHHSiV1RLJKcza\nGna0q+efHe2KyAdvrFzMveFezWjG+UHEUP2dMKuxxdUouB4ePwEMjveUBdry\n5ySVC1uMXelj9dvyMGWvV8X2cAEm9OyQvFtuf3sIABCrB4+Np1sNMZrsBcHw\nSL/Jb94WotLIU5ycElS0Vr7RIg/2gTUBNKJmsKPLmEj3V9HfVQBCfWFrxPcy\nzp/l3PwoDWV07SCNmLgewjx0MfuW7M0DQwUuDJo0re+y3xECbUz1XW8CWLVk\nLHJQK3OzV/ExmRyBJ+aRZODRCHBVzxQy5kRzY0LPZZ68bf/0VTiH88SB1Rlc\nD03Ek18hsvjyOsYYNi5BRMfQZYaAG6CDsS/wPl9Vp5c7Ac6EYyTxJWYhbuxR\ncpabB3qsIf0NKiXh49rwyPBG7oRSomQLW1G1kRuBYXDJxPz2ZNupHC51FQ4n\n/9tQKWa+Qp4uBYPo4WWOxHXNqucUIR7RF+z79R8woG4Hon/mdI0CwmWYijR/\nIG5WEYH2HzH6QYO1PoxxTJxVGpLoFAGri6Mw45HW6aCZVdbFWOCsf8M37T/n\n5fiOJEztAG5wcdIerMz9njcKab89pbnoeW/sAXyh/NeauwHLIrAQckU+Qa16\nvGeN\r\n=vxMe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICTQgQ4HhdrjuNng3fyNu/g26UDAklP+uJFLeFGCeVdhAiB0OHLoOiMN8ikJVJkYTTzZCky6+UFG2vDG9NKw6HI/sg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617970300-b497696b.0_1617970602669_0.8818638144815152"},"_hasShrinkwrap":false},"2.50.1-next-1617970409-c6a5e655.0":{"name":"@xdn/core","version":"2.50.1-next-1617970409-c6a5e655.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617970409-c6a5e655.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-t7yPVqaEW1aGDYzvV4+72yMXXRhI2GHOy2OUxbUM1huCq9+Y4qTbW9IWUo2MFgnLw8rTVBqbT3QlW5FdOzCl7Q==","shasum":"a0942057c636d66359b7ef959bbd2779411902a6","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617970409-c6a5e655.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcEZOCRA9TVsSAnZWagAATnAQAJCYqNs2ljoaMwJXVegf\n3wOoB8AutueOtdQ7D3psxQWQdJziULRWHGUzFpnXXpT43XH7RalFX6AKusrJ\n8+Dc6Hhrq5C6Bk737LXJm5zq/kYfLQOiwhy4OiQ9BYrdRIhA8hgC1kidKyD9\nRIQ1dJNfX6OfWWvxXEKceXGW1baiU8rE4x+jVoLpLXfs8hLCseeWopcmHNbw\n0jk7rSjJb8q7FtSjuRNav4eHOPMOJL0U9K0XcR+BmvuiUcYyhCLNo9lYP+Zc\nVpCM4bAvUthEccNS+ne9pBgyYopUftRjm1kED/YHwlXZ1G9z7ecanJqrtg+5\nJSLEPdcBllNROEvkVpICUuMS8LYrgEMHgAn3YOH30RMUwjrnYYg5Tu/R1q/p\nyFAgvArGpQwgsjIhB61nf8RJJdEqQSQmn8QsmoARRn19ebIwRm+IqMGLBSTK\nDV440m0rZqCqrZdjyEdprSGv2pr2T0jf7LJLN/JNn6GjTkwgeFhumYG9RlxG\n28ES/YQtpWZvtPqUx0J2Pip4wPEXhPFIjtDMFpaSGn543dyYqEEEkiV2ByrS\nWoqFg3YCiD/aIpWuEwCyZv3Ax0LU2irUcdwpqMErTHZvDcZ04rDIzisdOShA\nslYafKKt8tv0sufQ/NyItL2EVR/rp4tqs3MoIeDE71pu2k/j4JCifPW+sN0j\n+3qq\r\n=jXph\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD08/jI90bTMjaiZl2jAlzXPOcACkCjhV3H7QfjabNaKAIgO+O7HmsVORHpQ1uf72j7S6fQvvF8euobLi2i6s8Fs4M="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617970409-c6a5e655.0_1617970765825_0.99539414899168"},"_hasShrinkwrap":false},"2.50.1-next-1617970460-93847529.0":{"name":"@xdn/core","version":"2.50.1-next-1617970460-93847529.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617970460-93847529.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-c3wYiz/rILapw68w6mzeCOVIKDT45qaYIJgTaszmUmo0KfXO3kbcwc6AZt54NwtVzpglJO2eLapq7U/2as8ODg==","shasum":"369ec3879028fb567a7620c855d82182459e676c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617970460-93847529.0.tgz","fileCount":181,"unpackedSize":668421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcEaWCRA9TVsSAnZWagAArgwQAJoVpdslFYNyYIarjoca\nDq8odf6O3I4ImYVSJa85UkZqzykCJkiayozt4T3shIpLGmW1j14YY0M27JXA\nhi1LzWjasurThGHkpK1oZOg93I5rpf+JCO9nhUuFRxxQ16Umq41dMM5dkYMk\nDJF3ZGgm01+H7/JF5l6DLga5vDJ05xTT/QteMhVaJvCBeX0KD0vdp9rHNS23\nFk05/GOgNxU6bT6GzcJKYhUL2325rl/eIst/88o42vpvmciVicNmhJTLwWy4\nnArslCqGUtjOip0INXMVqq8Oyhg+h3UoFJrt6rwBuS0qlOikPhuLf93E8TqB\nZyKSDLfioorAXe3ZOlfUcCpqIJ0WOsKzkiwtuGu9BBusS8gGOMFCALyjk2N9\nyogiEBXMmB2AqQPpMrS/9nDOm1M/jwHyn9dfiyYXxrcT/2qnrBcEre3pW0Sw\n252WjYilJWHlxxBVz9bz5J0QaRfZjkkj1WK7f2tx5MJvNRGJfiA86kbATDTa\nBwg2tX6iidfduGKtBJa1aLQiZeiuivRU/r+3sQP0HGQg/YpMAt5EKpH/KUkV\n/D/uYgbzkRnPQx+Rx572U9T36vCWCSPcbQumN2SaQpL9TcqBELRre3UKywRG\nHw62ASLkO+AmqYfYwpGPICTlkuR5XJ5WwehgS2NAL0unKbZYKyMPZOtcPOpl\nmfAd\r\n=w8BD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID0Nhpb/6G8vgf8NfTMnBM79XKmiNDnrPQ9Xa98QDAFNAiAQbdXjkJMpCSIx/aTBgk650Vgye6vZ0EtM3dZ0FEh+aw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617970460-93847529.0_1617970837494_0.2645507832236611"},"_hasShrinkwrap":false},"2.50.1-next-1617970746-12d66235.0":{"name":"@xdn/core","version":"2.50.1-next-1617970746-12d66235.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617970746-12d66235.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-qXo/vJBf1V2w2jhHoHKgdiUcSsM3B5/CRJmdD9RS9FXX2l2IaG6nlMjbY3w7L7a4O/6aSWXsrlffU293HM5LdA==","shasum":"f28f2b3d8f1c0097db0e9bb14c625eec3fe64bb0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617970746-12d66235.0.tgz","fileCount":181,"unpackedSize":669452,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcEeMCRA9TVsSAnZWagAAhKMP/jf4ztm5jby+slhQ/aSu\nWgqJ34r3aRGIUcXd3/KPbs8bjCJlxSqGTHV1qBWLbee05sSjdRmd6w+znfxR\no/bsdYsm1JZI1fKy8baqjSGY4ywITb9Av8+ut0BlcMeBVoiloK222nkJS7iZ\nsRm8YWT022srEZsIebdLYDcigwDSHpueZS0NgwcrPOrT71QjbEaHmkWUR37L\nFNz7JqV1bURfn2JVyjjXUP8hQjUvCPNsxPUqPi1y9Hz1949JJIyYAzLthzEz\n7O1lNHCeL/tDgfUfxvE8q340HgWZEI86+rqFTAvfwzy8O/y9WfPzAhV5cac1\nVJVeseX+9a1FOQGREYxJ0aQhHGiq4RQWCTy+/eoxOFJsrIMwufC+WC05J8Y4\nhK9/Ms89vccxfePwXwkhZhM9orrDrg5dfazZSa60qGbfm47XBZPJMkzTzGIb\nwIUgXi463ZqeYJ84UJ3jkUCUo+45wBswT7ikEX4Xe4WgNSO3w7jyQgY/b6hk\nanNIYuBJCJkVNJUk7MFRFlePuEGdi/Ue/P4aNIqs2umBJdwapwn66PUoFOgO\nntkpUoIwd/XpJfg8iwUjcoXhW4le2NuKtnXOJQNi2oNPwbvaVyKMnwgRkWaB\nxqCaxElhBfpQcmPesOGhTt0ZWsp/CAWzeQiWONlT/KM75UonQl3q3WXmy2Ry\nttrB\r\n=63a3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAUNM2iwpiaV/izb0KXE4WCHq3ex+YyJegkA2NQOBWi+AiAoCH/32RpPoILYoTzW86XKb2jvQPtd+JH0pTW7UX8bIQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617970746-12d66235.0_1617971083510_0.9968145921046969"},"_hasShrinkwrap":false},"2.50.1-next-1617972884-145374e6.0":{"name":"@xdn/core","version":"2.50.1-next-1617972884-145374e6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617972884-145374e6.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-lFFS0RPxGF09NOTy6TMYIvs9gNYSHkL7IrSmzwdCn+O+lU2AfUiOGGW8gn1kVa2BxPYIpx5DD+DKo7NqOwnI1A==","shasum":"82e4206a35b91fca5b663a40580372f6a52c92bc","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617972884-145374e6.0.tgz","fileCount":201,"unpackedSize":546318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcE/DCRA9TVsSAnZWagAAjecP/2nN3h4BTGogTyqDTvYy\nSrOhIX6P0oWnkfSEso1bmghFMNo6jOPZavq+zI1Jhs0619avYL5II6oLL1j1\nLIFbHHtwVpPCRw/gzUg59wKX40GmIhGNWg1c72586LXEB7VHNCky4+qfzRA9\nNVleYmrNjIf7mbL1CwaHNUD5zDK+aKKI+eiUU6GttKslCkLqV17T+oi+8REb\nwlyhxP0Rsl1t4XYrkyjDX1EHepKZVo9C6DLZFm6AbKp1Vr3PxhtIrhHOpI8T\nsdgg8SyiC0KyDoZ2idsQt15Xpkn94uT5I7UVI3Ocr1bzqslGCDv2XrxHInzd\nUKbgRCMmaeFDK9+bk7PGMm3x9G30aM1wqD/r1ck/ydaMEHRSVFAHa8fuspeu\nzq7ERJtEz8MOPYPg/UlT1lX9oDU88pdk4QLo3CWxDb62sNqftHXNQLj3G3lZ\nSfh2OhknIwhu13NdP7tp9h3RvbaqG7T0l6OnCrXC4ushJDhRqly//53MYOL7\nYMnFC1enqPWNOCK5G0vGW++NU5LFN/XZDe2drNgUwtvoiJPv8fQXTCO4JPBg\n+ju/QlBgDL6M6rkCVPOL57ffk2urhm/7UDACW1P4/qFYb0cXC+zboiRv+qdo\nXMe/xPlsqDvftuhUbU2Q/ADY7UD0Ephfc8IBf8GG6JllOhTPP93v44HmAMAA\ntMuB\r\n=2k25\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICL87S0XqqZgEOMYsWL/A2Vd6ybDI/Xlg0966B+qFMMvAiBA8ZCq8I+EQhW6OVlCgxpx4zRV9OXn/ptrR/HwQKB8ew=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617972884-145374e6.0_1617973187413_0.4891023459790427"},"_hasShrinkwrap":false},"2.50.1-next-1617978913-fecbffeb.0":{"name":"@xdn/core","version":"2.50.1-next-1617978913-fecbffeb.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617978913-fecbffeb.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-mytYofo6Yfb3C8icuqtOs5lEQBBSTUlWhmYVPNElg0Oh6AVqvGMtylSSJNinhGh31jctmImiCc6Jmoet9Ao6Eg==","shasum":"98bb1ac679ca03661e707b6ff2734129ccee5a78","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617978913-fecbffeb.0.tgz","fileCount":203,"unpackedSize":675380,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcGeMCRA9TVsSAnZWagAA2gMP/07RblJN3iXN4fhIlWjk\nhL2ZvzPhbLTKFZOyLre4Ph21WCsElsorC1HbrEC8Fw5hp6tJ7LrhUR4S9oSg\nVm0nzwmocFDVnDN66Zhl7UEzuEltBmiwbPo1JeWGy7ULOKeAjOxeX4wCz6hG\n0y8FMehR5zYrx1OogJUEPW9ppMp5WfKSwvpYqbZnIBBP/6c8Jn+K/gsP1ioV\nBaYeoTWMdts5OSY1j42syu4d8/HrYCgdG0NkeveG86MQG43rjcE1rJ96JxVL\nNu0UdcIMUgs6emO8QgS39vLDR95Bvuyn9wokH7QyAiOgdN/g2qcSn4Xn1Mhb\ng361YQ+5Mlpbq5LdoOjOEQd+bK8Yit1QMQj4rLv0qbLXKNiPLggGgFiE/S7U\nPReu/rmVcenPQtm5q8hODOPGicOvfiw2bK/MLc9fIiFUco2S4a+W319ANJ6/\nqKr3nR+oF/nlQyvWpmucxykUYRmwnM3yWSzbeQ8qjB22X3YNpOGf7zu6WQDU\n6Lmu0dEbF8a7dpY4TvAiPTt//eYyH4RAW3x+/9aHdAppDaW4touKajOCOPHa\n19KiuDMdDNZqvsOLizI1tkdewJe5gKgygGGc15vUVvrsviIQJD3ePxDHh3mN\nLlqL30pevbEqEbfszchBKfv2AH5pCRvmC9194g6BAuCNiqY8n6H1HM/HEYB6\nAEOn\r\n=KjFL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAnX/32hJZM6YoX7EanSUPYtuVKnZ/e9Xx+CHQfa4lrVAiEAvtiCgz0Qa1tTI1mdb+aLHaIi9siIxwEbL4Ptq6290D4="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617978913-fecbffeb.0_1617979275753_0.75599512416948"},"_hasShrinkwrap":false},"2.51.1-next-1617981088-6c626f81.0":{"name":"@xdn/core","version":"2.51.1-next-1617981088-6c626f81.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.51.1-next-1617981088-6c626f81.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-gRq5YjHVc0Y2+iu349yj0x4QYpwexOyiQSJQ9/lB4Yelgnjup9dqxZ8Fs32K2y+yDDgZs1lnmQm3l5ZZ+YMHyQ==","shasum":"ffa8f7cddb3fd31989d7911983fec47ee4242960","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.51.1-next-1617981088-6c626f81.0.tgz","fileCount":203,"unpackedSize":675380,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcHAKCRA9TVsSAnZWagAAlwwP/iRcPCGoPLzR/f6sBZbK\nh/iGM1roJf9LPaunqOaJOj2QONuR8/se+Chd2/geRxdUjyTnyO6KRUIi1hQu\nIuCegIXzFfEdyFOQiJNDUBeTCcOYMiDUo4ZCHAIW+JHHJDPuN9TEILWt10Wb\n8zS1GezudwJ81+s+MTAjJmmgVLKkJV7Lgtx4mRhY0twgLhSc6IjKtI7lHIQV\nZSpq6g0CSncOCcscBy0XFihhdiflfrGVevg21nZkw1bsd638SKMviUtZ1h97\njWYCZD+X0d24GntuAJwc60ML/RjI1NHPlZg7FVbiVvJuWZrEoNizq0ew8Er9\nwx68qVI7WJ5pL9v2hNsU880mhQLfleBDaOH6+Wspnl/PjyeGEjXa9D3HYMAi\nzWcygxHYQsiyl1CWsmTEfmw0PSwvNDN39B31nCuU4SFxg+/9eRWptwTCVxNG\ntiiVVSKmqmhTpIq1HB53Ag6yA5w2qRR3l3Gf5WFXQqhaB1taK+HiReSvfWSb\nsCUa5YuQToBwm0PzHpEVYKkyceCSnjI81E5UgPPHau/9zkib6rk0Q+QT692p\n3UiyxUBOHrQUfmn62MPJJciJ1HJ3iXMEMlL6DHaKdS5JU2XCNL6K5l06F3i6\ns/1APHK9HteNQvIEO6zeNVv1YyQhmxB4KqVaqPXypVyv6Ah68lCyq+TKxlJf\ngNCC\r\n=cUC6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/xksAivFThptkrWaCi8r3A+HPEeq9lUrO+tUUrVeDmQIhANGeT13jNIJCt51gMuCvVW19+3RjYW6cZ8XlKdtrsRDf"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.51.1-next-1617981088-6c626f81.0_1617981449552_0.4337927793201555"},"_hasShrinkwrap":false},"2.50.1-next-1617982261-954c308c.0":{"name":"@xdn/core","version":"2.50.1-next-1617982261-954c308c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617982261-954c308c.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-eCxY4I4VR+YEgUnU01Rj58JQXBi99k7vQev5uBtdQE6TI4l5wFrXw+O17H+Y0ecfOu8e4V2RCSfK88Nlm/TdXA==","shasum":"8a313db7dffbc56caba62aeba9cd8b96172c72b7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617982261-954c308c.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcHSWCRA9TVsSAnZWagAAyvUP/AkbQ3cMFhlnOMAok/OB\nh8vN7OwYNKczEzxVAPaQ6t/W0wV/9d3kbzZRHxxzPb1f8igDpXNxpm8FoVF0\nPnzU1sElQvy1GgX3vxA9gs76m5WXuZhOYyoY1Pa5Lh1OwW+6kjBJEz7LmuS8\n/494q4WCHttjN7GkFU2A4DfGySz3TuOe0zcGC343yDO0kS2wydsPgahm+4VN\nLFFmgwyvcr3vyL191A+Wm5kPBhOU5AOhMmz5usAfYMbD6iumlJx7rUquxASE\n3EOwdtkIo5VlY/2dq4EAV8xEcz37GsgV4aXWSXKMAS02ImJ7FrMSMsND5SDn\nSNZx2LO9evSHYmtWoM1lTej9NMVO6ezgpT9DyS18Su0tt2nkbuTgJOYv03tz\nbaULUOTPUvHSDoRvPNoUdbV9eK5ob4rPehfd9BXdOplZ5WCfAEWodjXrVtvh\nr2rM8QydctqpK1cbCXcDrESitUoMNctD9aS/upAOUTfS/jwqXR7/z2F2y9sc\n5/TMn0K2Dx4xyVqSnVozsIBJy9LlWRZdHH+Z6yuZ5jKf3zn6SzYWcPhlInL1\ni9gA1F1gnnaIppG1tLiDoSx2w3EphTtSzISdDq4e7lCenMuxpkFKlzDONbtg\nvGPlX1F5+qZWrcAQ2xrxJgxAH3myZUx+6MGGapBtVOpbzc+MPmIDm24V+gHJ\nRYaQ\r\n=KhO3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEEK04Z0/ZxjYR8KSz117CYLp5+C3pjqzErHJVIamfYUAiEA5i5WK1tbOTZrL62l+UGiD8tcXmKIqV+EyeNRrXtpyn0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617982261-954c308c.0_1617982614073_0.2531628611656467"},"_hasShrinkwrap":false},"2.51.0":{"name":"@xdn/core","version":"2.51.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.51.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Ko+lRRv22LNe0FlQPDSbTpGJcAVCimK4B/+NupP13C5qV+w+hlp8rk/YzQfOWUYfaVFalChJq3s4GDMU7jb1vA==","shasum":"4a1cb750c98ee123831df6655c1e799c467d2d02","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.51.0.tgz","fileCount":203,"unpackedSize":675310,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcH7tCRA9TVsSAnZWagAA6V8P/i7mN5n9i9xVMixip8Zq\nZw6UD7I5q7trgoxVkLeo9IGYz+knZYnudmowdiXZ7EKtfTCLSOoW/nUUXiOv\nqv7eD5hzB8LsSKaawn7R/j3+2QbmiWlYsJMCKUuYRU51JisCeeJOhwiePxc0\nhqi6VhuWcjkIhyamNlP2ybj2zH+foFeScBy9NLKF82+5xvxkvS34BqM+hQYz\nMOENmppDB/Eq3E1p6bk67eG80HVzwMgIQWvpSsfPwqQq0ZDP27IfBPZJpVal\nimDPZLyO7TwiM/4PGgiMbhCquZij/evFhFXEndxezwC+eC4/aNkcwOXyJETO\nCluwZZHN+LDOofeFnsWs4zxUliXzx6ShWYH9PZwxPtmXkYbgcvkWbG4NQxQc\nyjS8RQMQn2rD9IZv9+KWT93xx+m98TdYxC5LJOjJAwEYU6avEmwUg/+s39Nr\nrf7uoJfrDsmSwF1YVYlM3WDfJCdBFZ71pM8Dfrxe3phiSH2D1aZy7GwRXTwR\npPAZRULadKIj4cyItW7ntZ654YFnp5MSxaO2EGNuBvtstltuLpts1ov175E9\n1mwQu77vrZ/DJ67x1J8uRSzPFz8w5P88uomn+zjojUMyk2Mq59lyB2dIdQ/3\n/iGnCve3bO135rQ3wyYNoGTllLAxdAYPWV6bxu6CSiLBeBEBCPUbZyBBtFXV\n7UPc\r\n=QiRd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIADJcuHmsRvzR9s8f8zHX63/j0qzXNH8jSGMHodM43dXAiBHzBMOIQDX/0q1L/YS6kxLBrjQhESbz7gMYzFBDTqzeg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.51.0_1617985260734_0.5322362275779018"},"_hasShrinkwrap":false},"2.50.1-next-1617985606-33a80696.0":{"name":"@xdn/core","version":"2.50.1-next-1617985606-33a80696.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617985606-33a80696.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-cfqER4njkbAEDRAWXng5N4VPOBn4AjMr7OWQ3n+QnvoaqtUnz2who8sP0BOXTtQjxHEY3bN6vg39NaQYki9X6Q==","shasum":"2202063f1747c08a1ea845e4e2c0b4f94dcb2a97","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617985606-33a80696.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcIFcCRA9TVsSAnZWagAACqYQAIv+EmedTDE/G5tr4hrd\n8DMTP0g6nkGG0A/G3ByaH/IJjSTFN+KNhABQGvrzp/N+QTjm2vEWp9lYHWkA\nI5xnAEcDu45WbienLQgbxQsFF1MJyUj7I9KRPHfuWHrcIshOjGFmA3uqVlbC\nCHpdyLwlaiCOI8vhtuaFDOwmh/dbR67kVxRCqbEjIa5W/XCH12CxIDUUaj1v\nS8GlxTk289lrX6/nxW91g3BFR7l/qmrUksZtjg9dyRaUWxCzpANAH/91/ysa\nOw1gTGX0PbG0riKTNVXpbRbAmIvhtr5qJlBY3EcHP8IF36v8eK4Odw/VZo8Q\nX7lohIqpb3aRv4erCr55z/f0z7nHp20vG35eXlFpFDj9lYXBAqNi8O1MtmfY\nhD3C0C1Dl7T4YDw1xPL1wHo470JvxzEgzPXbnrriB9kbF73UDdtkIDi1s8P2\n7Jjo1jAVuqzdfDrXOyjeAyVNX7Nv56mRA1h0ZVg80dUp31OgogEW8HjnrL4E\n1GbzFRGGUIcF/JswRE6xkgkTvuamU6xX4Mv14t2te6fwepVfrj6k91pSehV9\nfJO4ZQqRqzE8VL9Q7IJ8er1cV3dM5ugskfkIhwoZf1KY5pzF46wsyOCbPR/k\nuqj1X1axg+YuFmuy0F6wIDhMzy2A7FIKOqhc95WAXNPs5TyCHaSTJDvxfEQG\naNqg\r\n=IqT+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICHBmEGTBNbtu34kRABE3eIsqAhuyAcJTktkvPHdI8/nAiEA0D2dj92OFqVcOjCXjuHjErZnmEdEygRRjjWzmHtJIGI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617985606-33a80696.0_1617985883767_0.8383291880878199"},"_hasShrinkwrap":false},"2.50.1-next-1617986021-3e6ad425.0":{"name":"@xdn/core","version":"2.50.1-next-1617986021-3e6ad425.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.1","http-proxy":"^1.18.1","lodash":"^4.17.21","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.1.0","pino":"^6.11.0","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.1","ts-loader":"^8.0.17","uuid":"^8.3.2","webpack":"^5.24.1","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.50.1-next-1617986021-3e6ad425.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-8BmUa+WlfpkWT9W67EHM5fM0lb2XbgKttBHeUoTlqdfCws81fphHd53OuJLXmRvxDwm3GoGHB08s/8IY6PAh3w==","shasum":"e0825e358408d4428e8cb5deb7a5f15a5fa15f5c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.50.1-next-1617986021-3e6ad425.0.tgz","fileCount":181,"unpackedSize":668028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcINBCRA9TVsSAnZWagAAutgP/jOKomceMYxywobmKVY4\nWazujmhr3JC+ezC1uSwJFc8TRutDGKky5n/Wg3kFSNjbW5Pr/Az7lYKC9vbM\ndRwfvlHz/l5ilQB5l5QMAKcp00eXncTSt5UW31QRqc+paBICvCmmsT1DtrmO\na6dKKZVVA8kvoxWW9VknGukIZv/0S+1/7zKIT1U3lbYO4Zj6OrzFuAt6xesk\nknWPJ0YyIDZksbIujN7S53rAg26gCSPiYgY/vOUJjS18tDlDAO2XAFoqPRV1\n6j+nM/OUYGYIqGqabOWDPRH/OfNo0u8sHVezJ8Nn/4OKk0nQuPlbR74L67L8\nBW86qhlVG+ScHgESiKLBNmyeTnrXrxpX5/udYYQSYbvZRBcTIkhvGxBRGGQB\nIzFwCSE5Cb1rUtTb746Fqf21wLBcDGSFCFJFdk4dAEb2hmO8y8MWaXLLe6nr\nV6DinUMYf50fpIyXfCB/SeBdgjPpeIwGC1hMoSy78ydxrutpAY6Smub9t9Gt\nArdyecP37qmYQJ/k3O1DgnA1MKi4nR+mG70RZASdhTAncSIecmZVenq4qZE4\n8sBhsAxRZnsc/Rq6BdxvQrB3axoWjdYsLNAZ/1VGvA9tDYXaedy+3euHR6yF\nwX2Miq1+oeFEUboVX+eefrwF8h6JiLIPcWiSesdKepIPik5sqmJWK2KtTlrg\nVgWz\r\n=Xr6Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCmjsmf1IZZ9F2UtN9ws7pth+sQ1NvVUNgxFMx8m0dTgIgLl0RLZEW1hmky/QK+QO75Iv6gJj5PgvSz6owA8Zzqzs="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.50.1-next-1617986021-3e6ad425.0_1617986368789_0.8442811928507312"},"_hasShrinkwrap":false},"2.51.1-next-1617993256-842b76e1.0":{"name":"@xdn/core","version":"2.51.1-next-1617993256-842b76e1.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.51.1-next-1617993256-842b76e1.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-eL5+buGJab62PIsJM9aUqzwwBaWNkq086vy1Lnp1YvGFMeb/6l1B3y0YyQQmFgjklSZTUgs9TFP0vRKMiB6osA==","shasum":"673b4c7332c6e1b201cb141ffe19c2b6fd93e851","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.51.1-next-1617993256-842b76e1.0.tgz","fileCount":203,"unpackedSize":675380,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcJ9fCRA9TVsSAnZWagAAXBgQAJCTA/ghcmYr1hBGNuI9\n3HtucsHN2EbkL7ypWbAGSvmiQLYfnO3Pu5rmdREkNch6rWaWoV4fC0gMrWOp\nvEh4HGqaXbiUU0LjU5EJKirzjP18ZuoDr8jwuTwIgaoRwuWsaM+DFX7VuxN4\nzybqNi7i7ZcNimM1QP++kJXyqYwiM+8tflvUvdGyEg8cJ3U6Q75c+17oMcuM\ngdAAWsGbGvyt2haT3OL+MlIDLvV+cV2QPLruS5BjYKMGzKEnE+/Su0feAsID\ntJWKdT87wRyPgfOZV9+/L0WqLAgKVkCcZW2qzi8RHsCNkpaoUWcFM5ULmzAt\nB1LlhWW3RzD8lTnbX8FNv2XNn0cQTo1au3QKKQzv8/CPQk8B0Pd+w0QtGJG9\npuGBAE+hDnN2k5AQPWqKAdjowf+DbE3Nb/WTgBOXIlwBnLtdYZoiyzyznS/F\nKnc7HNnLtPx5BYU8nXCDPX+w/rlvprfRT9U8eTn3Gj0zB6xH8Q827AdgYwtl\n7CYzB8F8NTV3/oLwavUbqPu2VhDGQ8wkBsshcm2ztWbrBixd+wEDwRR3d91r\nLwjTpAhlREmr/9GJadxziD6gPrjxgdbZ2PwaqlMAmPN27/fF7t4iqWUWdiDt\nSdJUFkeg/I9zSWC4NTyru1g2Qw3ZpuBxM+97PoV95/v+tPoe8i1lF2RCktO9\nizpi\r\n=VmgB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDG7IL2XlJsGhFu0KLA70jt8cMF0y2PiVIHK6SMk/FrywIgbjCQDuZ9B2V6+a8zKbmLU7OJgo9AuJnsuYcXkLY8poo="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.51.1-next-1617993256-842b76e1.0_1617993567014_0.9110009482033616"},"_hasShrinkwrap":false},"2.51.1-next-1617993723-3597223b.0":{"name":"@xdn/core","version":"2.51.1-next-1617993723-3597223b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.51.1-next-1617993723-3597223b.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-BKkbbCBb6psuHtTm8EB5npvDajruus4QaXlpMy4AMpwm8QE6AtKyigcKKdiRstmDC4+vL/ThAeI6R25GsgKjBQ==","shasum":"ba4ebce2dca43b8225a35058acc04c2793887c51","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.51.1-next-1617993723-3597223b.0.tgz","fileCount":203,"unpackedSize":675380,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcKFGCRA9TVsSAnZWagAAtt4P/RUI/qFuIiQWdUXRhrh4\nirI3OScWdhDw6+F9hyoG9djvL/6o0gD8knHJK4+NLZ2kdaKCaViWuoFJI68V\n6HeNqfMzaKnSBgcvfbeuoa1WZ4nGLOVqCcOcWN2yeF8Sviy8gfTXnjIQniZv\nEQBUzJ46DR5NKY/j9ig8OY3YyieIUbJlqohmDF6EYxUAmuk8xTkIsyXkRsU8\ndD0FL6MeCMlIQFAN4XgAKkyJOB0uzGTfvQWLiskvl+rX3PfRTjx094AO4iKv\nNwQ27dDuUYoEOz/VobJkcoRO8KUmSACKyBqjdjBogwL87U9zqAUj+UqxF3ey\nxcI/B+iBDGM/oNFp2MrKJqmrjgRbdu3SUZPyFjdghIwBu6g0+hPROYtCTYhE\ndWqlGFEdj02SQ1KBznNxLOBTP0TwS1GlsPIdUx1TqHPsVweDLG8L6AG/Xcbo\n4Je0tW8Mpq9YcmZvELDomjf8CKY7T6ceyFWAIECPwebJ22xQn2vN9b+fKfEf\nOXsrkqS3e6PLmA1jxIm5IeU8xEOqMMS3UvziVwN2XeOMLf8wZrvX3nKjAm3M\nOtHpTuFZtaiWZsJypaLTAkCidG6GL3I/c0Vj0rUG4CfidUfHlj9kKP97xWno\nb3a/6B7TXVXY9aH3VEHf4V7fP74KZJhHavfmZY0Efu4w9F+UW9CNc5uS5XPp\ncwhZ\r\n=85Oa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCu/9pQxCmqsHD1KOAUfIr5BUWShtsVnUug1apP7iRnwAIgKLCuCNYr4JFuHC80iEYcHVKvaRZSb7XZOYrbFaqPXvw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.51.1-next-1617993723-3597223b.0_1617994054176_0.39286656212889226"},"_hasShrinkwrap":false},"2.51.1-next-1617995699-853d78cd.0":{"name":"@xdn/core","version":"2.51.1-next-1617995699-853d78cd.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.51.1-next-1617995699-853d78cd.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-AzORJ8d5rrJK9cW8UWqIsrJLTZ8NDQgMGG/AVib9wx2VOxErdCqtq9MJGIrVG8JW83P7UMjBQ9vy7HxdrcZEBA==","shasum":"6e81f57a8cb7c69f48990ba88033f1107e4e1001","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.51.1-next-1617995699-853d78cd.0.tgz","fileCount":203,"unpackedSize":675380,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcKkVCRA9TVsSAnZWagAA1YMQAIsBM9IQxauh2lhTLJec\nz4y7+u7kO6MdKXedVXNN4o1hZ2hZUbcRIprt3abIZhslwxih1fL6fanDMKxI\njAhVMsd2eA01W47WQMKMP5dtAedat0gWJTpx8eWpPcplCd5cVsj1wHtccK4d\nSO4m0MAB/JILAmwlk+iihkKSgieAxefU5DgS+1zLYRb2HIZEDk4gAVkLaF1Z\nY4dBTgt9hTqnDAsXTSveiX50kW6hsLGeFobqLSrgA/7ZBx11PQYBVBhIQaB9\nVEDwvcKgeg/98djnRM041C9K8QNbDvS3LwVy87QTF83K+QxrFmTO8Hfwgs/x\ncwsx0S3HEqT2OzYTMQU3aAfBv5pV79WeXQpNTXkmhpv0D7CHNdOmnljhyKNY\nQL10Thm615VdLvpyaSPc5dWCcTXJlRLIJGk0ci29wFo8R6Iy9qVklK43Hk/1\nKtk/7IFSZUx3kwfFsHpWmMS7w5ODKLw8Juq81q3k+HegWiYqLn1dWmGoQMJd\n3bujV4KzQaKzjHhwsIjgy4ujTdyLfIdADrbhvdRxqh+AJgoi1tSM/2+YSXqm\nXlGbOcKXRXJ2crCcd7DSr4uI3vg3LalB/q89vf34cpz7qYlhPc+yXTads1RY\nwvfwEiEZDe9HiK2EjmY8ziYXevAWT8tlmf56UXoguqrocyyIM8x/iQAEwd/J\n9T8v\r\n=l5Mu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAXc6yiGn5U1gt/O/T6TYDbH7b2EyO5G0nkk3uiwirUKAiEA4rel/PbX+AVkVIHGFa3kBozVzEcwJxxDr2y5CmuXqoY="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.51.1-next-1617995699-853d78cd.0_1617996052782_0.38316660554161897"},"_hasShrinkwrap":false},"2.52.0":{"name":"@xdn/core","version":"2.52.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.52.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Ttf0auj2qvAsJz6pg9dMiqaEn522OMM4mbVqYm/RV8hxGOaQ5II2JGNOSaV/tTlMPAGWrLqqSHDQ6IBk8pMeKA==","shasum":"abbb5bb11db0717c43409e97e87f3d190d7ca8ae","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.52.0.tgz","fileCount":203,"unpackedSize":675310,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcKoNCRA9TVsSAnZWagAA2gYQAJINdXQAguB/27P1/T4P\n471sCWnJe/e9+6oU6qUltSbz8blDYomIAJ7U2sLA/AAbK33h/xA2G7ZiK8Dm\n+EUSLp2WzJ6UjUacrtbwWOhWsEmO9nRkJjCs9m80CSk1N1TQES4Xh1vIqm1R\niR/M0+5h9lGaEe51db5TnOE4XQHpKcLOFDhn2bk4DUha+Pl2xdG0VyTDf20Z\n+AbY0m+s9sG2oDFzmtz2lJo6wrgFdRYJZauEsohh4ZcuOXPhinpP4Cvq+0E4\nQPnAHwVaSZ4f70wX77PfiNIK9fUP+3GY6W/HN13+xuKFXSd2FExEBbr9X7rt\nxKx7l12/6aLscZRhh2RoeLMzsndckGnUvNZmefuSJ4pCTCGSxlIgXZWWF3qY\nsT+Z35Xn+fgEiB4N7w36GNm7HQtTgrLs82SHHeE0GG6kKDDnv5RcrVUkorl1\n6l/cI5pAZbc2l3hVSv9X0c609gtHle6REe2VZ/ooJAHd9fJZcRNSPMTC6++A\nrSmjzYaF/XxHOwvUueu9erAPpUiqizWXz7hu8B6njDr8hbEMnuWs2cKamOs8\nUhDmBPESDyMlxwlrd2Nvke1ZYr7o4zUhTmstOc4iHmkksY3n3FrzjIZNWKnl\nNFrTPDnF3h6eFCUuhzP8VghGgI9SZ3jB/LIO8p6J0fKx3VAj637yzC6S8nBq\nzRKq\r\n=ld6o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRgt6yi43J/A5xLhex1cGr3ctFbvxLY4wP2BpuLWfgsQIhAMBzoJpdS0nfo6XFCpcc/bCQvVfvVRc9QUi2vA1iJhtT"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.52.0_1617996301301_0.37752243336434144"},"_hasShrinkwrap":false},"2.52.1-next-1618265595-d6fec356.0":{"name":"@xdn/core","version":"2.52.1-next-1618265595-d6fec356.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.52.1-next-1618265595-d6fec356.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Wm+EG0P85X8PTlstD6mbQOdaKiLlurfWdDemivuDPciyoLTXf5x77K1Ue5Hjzl7JMR4UpGZ9CqIOk/1APSIV0w==","shasum":"e1b0b3160640936b9eba45d78784038f02f81ce9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.52.1-next-1618265595-d6fec356.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdMdFCRA9TVsSAnZWagAAnr8QAJKDMxtnMJf66LyjSjfH\nAd7T+2eCRVNgiEQXs3F2tsvO2NFLIwf+xVbKm7MCYjAbf2liCGogZWuGj+0+\ndbfyv999nVpUkezHavghPAND5KlBbomL3p/rtdnwjsmtNDhE4K/6LxHMRyR+\n7o1fvMG40Rx7kti5WF9FLyDmm4eq9FLi+d4VbtMFVXeWkIucCe8Jav9zrbKe\n0hdzgPag+eYV555QqM7f+F9vmKWwWLd9xqpqNyOH6Qodud4eMQ8S4E8AitVX\n4bCAwsc4zFTwWa22Xr45b1TLVm6rxnl89MVyqt5SS8253KOWb7ZTzC1zv+CQ\nuDqxSdzQgCe/ADfRWpVozit6KvQmbIo1bH8EJh22bjnFct04Jy28nwWWN/74\n4JGNSP4hlTiIY7423OoqmMUUY4mZW5qQWn00GoFnMczZRuJ4XzlV6h7qNS6d\nJcmoheR/WpMbpO1PMBe6pP1QulQzUrrB5zDElep5g9/R3PK0M+Oi+BwhXjH5\nWXVrgL9bo73hrK3gTHO3WML1ZM5bQ5abRtyGicp10uHdtXbq3tgnCwt80+ER\n1abgccG0LWWtRASaoQ29AlErHkuKsHIIu6Sss+WBlJmQ6eHjpxrr4wE43Eao\neKcvvdMK9DWhzDj3V4hAx7lKVxW1/yPt++lEnlBKhFxU1evw5nFb9+bOuhmc\no/eU\r\n=75f9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdiuWI5Y1d7fe/68EoTmRFYzcOpNNuc0YSxaiBc33gXgIgVFVnBeYUgm2mJvWGsC1Wn7m43GXnys45KBpmK+Gx0nI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.52.1-next-1618265595-d6fec356.0_1618265924558_0.8593923764947555"},"_hasShrinkwrap":false},"2.52.2-next-1618318667-99b4b1e3.0":{"name":"@xdn/core","version":"2.52.2-next-1618318667-99b4b1e3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.52.2-next-1618318667-99b4b1e3.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-fnBLayUezV3nZ40sU+UQOa3gW4IDkbQX9mNM0ZVw0BKoz5BTX8OXOkfn5zyUxjWf2EeVkhFDnGydu0yaQxPPuA==","shasum":"f7f56f5e579bfc54377a9d0845674e1af298d576","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.52.2-next-1618318667-99b4b1e3.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdZa5CRA9TVsSAnZWagAAvJMP/jWnZIv7du4jTgLy9S+u\nzFcPGucFK8YpSTGLvYhin78ma4WWJhi+vbk72HqBhB/hg1EzMGoVRzDGDmt3\n2Bz197gzvKiaaBrri6dZ8kg7gZVx1rtg7JwSg3Hf3o8wsnFK5Hwhs8Hc3Sp5\n6QAvUiUZA3R8sjjBESqROLnq8cOalwmcPip2M/6BZt2pM7QKl7Z0kqgUlKFS\nYs71GBkT7LnIztg13GCtvhhZXfQF2kT9Acv2UimAFDsv8Y/8PlexG4pSPZot\n+r5AY9qLnef7VQOmmtyzd+/4kJmg06Oc6yE1qqAwCm/o3k1OHyQm987IEY7s\n2LQWGWRWPaQIohLBnB4nrfHvW+qY8V52kKLQZeVec5K0hjZ1CZLKA+wpX3+P\nG6ugb6eJqfaSDgvtQv4DkWTKU9mwcMSgYm0bFETnf4b3VEWocwSZ3h0j3Xwi\nayoXIVG+r3N8JZ4syKPoH3ihkF1ybFaYt1C0E8KjD3PqTCzhbp/8G/ynLriE\n61IlUMElC3sN6+GQfzeUaFMkClzrqiwmF0f33GFHq/Gq8h0/jQN/9Axr+g3w\n82YHG+0FhXoatt3MR3uDstMudmvFdUB9T7c+0h0FE74N6V/aOr3HajXZw5Gy\nr649vUMbPkTffTS7KKBeXU84tyerRplPyePDlNRA/7ZYoOET2sSuJBPtAtqn\niG3M\r\n=fvs8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3F3zlHKwUZaLFuPSu6M8s7unXjN2gHavSdmNW6euBqAIgN4CMuvw4jBroCLVw7szt1J2xcYWUtw20PJ1unaPE2Iw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.52.2-next-1618318667-99b4b1e3.0_1618319033381_0.06418635380191873"},"_hasShrinkwrap":false},"2.52.2-next-1618321097-c6e888b0.0":{"name":"@xdn/core","version":"2.52.2-next-1618321097-c6e888b0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.52.2-next-1618321097-c6e888b0.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-8ohhvVc/yRYcThpprqwZ594Rw/HBF5dVxnVFaM6+JslG+CixmtogZfHBvrNgBnQtyMAkoLpiywlHM5WhCA1smg==","shasum":"12c4f3412f59b5117fa3c275ab25fd5703abb71c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.52.2-next-1618321097-c6e888b0.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdaAgCRA9TVsSAnZWagAA+aQQAImCPXirUblcwhIj6525\nZHJPNCPwikuuycI2ASbSNyRcBlW3TM/PcwZmymGmIC7xH+jsUVMZlpNS3xco\nyD2ORfTJzuM8/I50TPvKjGR7MWxz2mpIyfndbcRq980OJSbpwi7jVB1P2r9F\nyNmEvv1I19psuTeoKFmqx2vCnmpunVV/Aqtia5jehneMVia+QuuZkBdekaWr\n8Vk/Zgtn2FztIVoUfWxoqUQfUwS79hGZ25msBG/ALxadmdNf7podg37tOobl\nOL76Bw4TBdxqG+lSo2YWrjZhB7t2v3PHsV6yIQ6lu9w/FvebSCeMjZL5obw9\n6/gOq/KCdB4ecT1+uCzYigcjKgKAYkWTJnBWukR7/NWUBgRra5Bfa7twnxii\ndHJ+LAScOCqZ0k7m/VjySofu0OplBCmFyW9UKvwGe21tV4If4GN60xJPEj3G\nDiaRUZ2OsSEf8kIzpIK8OP2NdUYPQN9mhQOvhz05wS/5dOvlZ3w5Mo98qN2u\nwWhxveBM+dYwWl1lGA3HMFZnXKkan4NTW7ckjd8Mi8zwcK5gX2904F70R98w\nvxshQPHSuSfCubqeyu58etk4MsCHrykOxIdt33BhPGQjYBCjr8Vn7XdgtlwR\nDqdbTr4FzBPmaUDQXWjJYJSmuicHMoNhSMl8QB4FRA6WaqS5dhgrW1x7QkRp\nXf/N\r\n=iom2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4CyKnQA09NHYLPcIcOcTSfjjbUUWUKpBfMFuOJrb0gAIgAOLkZ8bmuZs/1JSOX4kzLHbf5ImixmGRAYyMGMF1//s="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.52.2-next-1618321097-c6e888b0.0_1618321440437_0.5187436126708509"},"_hasShrinkwrap":false},"2.52.2-next-1618323417-454fc51c.0":{"name":"@xdn/core","version":"2.52.2-next-1618323417-454fc51c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.52.2-next-1618323417-454fc51c.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Oe0dN+/fq5vqPH1wQrt6O2EKEn94WkSharb9pmOiYcmTEf+SMsZti95y7aBhLqZCtLWHCRm8FuRDK5Rose9olA==","shasum":"9875f4a8965e60a364089464b3bc375a0eb92bd4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.52.2-next-1618323417-454fc51c.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdaksCRA9TVsSAnZWagAAVkMP/ia1NERv3HE3OYdoCwyA\nLWK/ofbX9asvRfgpSY6p4G9MdaeXDU8JZaXpYysaNH5ZjwdBAin24jhy3O55\nudYfQ7MbJ/f3uT1X4QKjgOV2R1sAuMofrA+n3S3TubaK9nGHdfgvTMer234/\nsfrOgWXXsNu20OIAU86OMxul8kZzlQvRsmwa6oG3o8qakwvnirT2ngeHyLkw\nO6bKzSx25SbozzBSL7YqnJmEHbSOmtdgjhr97nuia6lbNSA9z88Q8HK1StHx\nivHXeY8lVWq6oIs2j1r+FshSkWsAqd7PWXwKrpFMA8CA1ooFFhdmoAH4LMIA\nFx02uuONaVIcFZUGY7IOyVsZwBlMitTCz9dbCe+iw953b6kmp1jaWuX8nirI\nKn+mW2Cu6ZwVPX6rxHRCNLYWKKRJPKNL3LwbSboxmowvi9HcCMs7eXug9Rbm\nzmBT6AnouphaVIYqpmd84A92xaO5j7skc6rOMqN8PQE0lxzI24TnILkd5W0e\nxJHe+ZpfYr0KUE5lSqL/utIBeI8WS/XQKWMkpQKwQwEnuBeYt2vaZpTo6iRu\ntY+eVMMzq8cVTYm2BxDIvDZAn1SKu7pNQuFUR2nFYJ0jhHWxasMOwHRAFvwh\n1EIyAAK/mpdSzuupvEjdgQ0hGcjbUnHTDlPWT2ZRiQtoZYn0kd/QqE2DmRqW\nVCH7\r\n=rTN5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDN+kI5hybHjtgUTLc4rd65xITYBz8Rs2Y1VwAWA00W8QIhAMW4k1Edg85pfLnJkH/MML7w5KUw+u56UIgdKxNLnnGv"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.52.2-next-1618323417-454fc51c.0_1618323755864_0.8067781874379609"},"_hasShrinkwrap":false},"2.52.2-next-1618325175-822bdc4b.0":{"name":"@xdn/core","version":"2.52.2-next-1618325175-822bdc4b.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.52.2-next-1618325175-822bdc4b.0","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Xx/artmEjzY+XFmWQN913c2WAhrFVA8pMJIPIXLvE3B+QpAYTVkKAzel4h3PpJrTerXsc5SHShk3qvG0TP72xw==","shasum":"eaccdeb070de91c10c83fb665718f59f0ab69956","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.52.2-next-1618325175-822bdc4b.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgda/LCRA9TVsSAnZWagAA3acP/3n2HRYBRptrtRr0+rig\nfqosoBGh9LZFSumyc1uiLCaEIlJh9qRhaPlWAFzxocTzl0TYDukMjdpQ4Vqn\n3dsKzFOaDQlwrF2bzxv7AwKD1higMFzIvndF3pYQjHIANLDxHPy34xvPc7u9\nf03/NC4tkIWWer4F49FW1KlgzUGXEdXL41D+7snqrQjdJk78BKgS+h9z1EgP\nS1CXzyOflY8S+Bks+GmYfyBJg3BD+QxpHbWL6wxMWdxokk+k05SVGkoI4NRU\nJ9KyaDDgyCMXFP7I61Uzm/i0J6K3vBooOuVo6lZx/raTmwjW38Z4s2ES8JHI\nw7vJeZy5cRXLWKguNdmn2Enxq7rAzIWJFqlQoZRSUQ87YugyEB4aHLOpPemd\n5DGzKZcl7lioaV9Rmls4h3UqAbKwa/1ugakEVRapuvO7H3DUWHO/gu6kCyT7\nxYk/HdpQa6K3yIJ2bRgWtinLVX0t9WwEP6DuDlap2htZgVe8IiATYBB7zO/6\nQ0RJ5H6KmsfgUSLamjEt1ZuAXJsxScn9yyGWQlxU8pknkr2NArE0tJ/dEMad\nhvNgKjy7pkUB9ijTPmmEaXepuGwVB9Zwnhaf6CfdaVHQu6uISKjRhUExzW8F\nRdoevCsvA9BVpmY1OxtZj/Auttg+KxIHiXuuawdufphsJCffEtluqI+uolUR\nT+EP\r\n=9+4W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfZzqbRscq4r+n1rkHZ/6QDnnQiHnSw966SQdIqA/i6gIhALUnjNntV4ocrxEATRY8OZZl3xhrvXFdOyd3EyYr16GB"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.52.2-next-1618325175-822bdc4b.0_1618325450540_0.269377048472244"},"_hasShrinkwrap":false},"2.52.1":{"name":"@xdn/core","version":"2.52.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.52.1","_nodeVersion":"12.22.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-KRY2yWkrt9wJCxvLFS/zqJ0o5e91kzWznPblvXThFHtI7PAdcbgHdzVdm4R6tsu6YCyql9kujwZIlkJYmsM8aA==","shasum":"220beab25a3ed42fb76dcf6c5565eed01a27230f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.52.1.tgz","fileCount":203,"unpackedSize":676715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdehLCRA9TVsSAnZWagAA0w8P/AuxCJh7+bcxRpueEj+4\nUM5L4d4JtcHg6wpJ5I8hpw771FlCVH1645t9U61hIr2Gywnivxr1aDcMnnPH\nNS3qvSacV4DYoUvnGXl0tLN7fjv7ZaTZSPSuziEki06fuVOv9RvxsGFIBY+W\nJeendKUFtd2+PRxA3skNmXhwDy10ya+VTLxpYOEN+1gVxaF2R6kJetEoMKbh\nGGnVgiuNsHybEH88fgTNk7D3gDAEPp8kuTC2iLHuu3rpYKvuXnmpeDfxzBDL\nB1SecuT679LLfJ6YN/fU5PVVCXsuGy1hI0V2XZHa8HhEaHZcif98ysgUzU3M\nBgybbMMt6hPmtfLbcRjfi9QQ054mZPfJY+tX7dAvKuOjWoZH7MjXUI7H4UjW\nVuR/i9BNpfxqBopm+pW/q2z4uiW+ry3kF/c/LMcpp/m70fdJMgsMs331J6WR\nJ8J7Azb0ESug4nUOxPauWwtCYQTbeLARucevUxuk76BFePzlNn6GqJj1ZQ74\nakefifSg1wiWJl9sHBBjL161UBfMettmoJZOfVw6yYjGTlAw5AqQdxeRr8RS\nghD1mh2DZl/50dhKo/1edQAj2r4YLT5seoXGkCheXdZhaIs6jEEVFqpjWbMq\nkGCGkbMUtBzGpJx+rpLuh7jCLY/qjiqIlUWZEVtZH8NPh1zUbyhgXs6/mplQ\nwTpL\r\n=V/GA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtDFUyIm/MEwXBeAPgkeCXfTB8LwcA9QUf4zoX2236KQIhANdgji1IpmBShmpBoefac0Cm5CgJ8MQFu+DCPx8dvRh1"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.52.1_1618339914535_0.5174326484619027"},"_hasShrinkwrap":false},"2.52.2-next-1618850702-9d69cb4f.0":{"name":"@xdn/core","version":"2.52.2-next-1618850702-9d69cb4f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.52.2-next-1618850702-9d69cb4f.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-m1wFng9Sc+rppTaaLWB5RyRW4HKVWNNczow+BKhNSmIFx5vS3SZralLY2M+DVW3RRN6+Z/K2Du6KbYjFyfXM4w==","shasum":"d8e0fc3cea5284eda9d74365529188baf3605e5b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.52.2-next-1618850702-9d69cb4f.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfbTjCRA9TVsSAnZWagAAHwYP/AnDz48gKIFu4EqMECRp\nGMnBdmqrizO6v59vY74uSifvPyx0N0r9JsCBb9ZJCgNtU0vNzNvHJqKgDVSP\nCg+HrS3yyLkUbO+u0yVdwNQGOjk45TNkt+/LpO3LBATqrMtLM/eRhYzscskS\nzMfIWuEmGzqvmc92G3QYU4D0U4lS1JcOXSDZFGm2eTzr6Vh7asqpwijI3cbJ\nqgUm/lUwy7EJmme/P5VwP1Ob4z1ZiYi14Hs4GZED3uTXEiSB2NHLCCl/53KE\nJCMO1BiEaA82R/8bxnu9CwC3ccFxE1lgrUCOtmJzpcwGmNDRS5X5fLY+R4lH\n4xcnXfGk/jiYYB322tr0tXo0OomNNDERiASDJv89XUo93s5haTd7hf1/QZyt\nyqEO9aDi0Y9aNlV7DhqammkqS1G27bsYF9DOXzI/pFwAb2TYYFDceUZuz1US\nt/+ah3ec1GkFcdWBmBbuk1wP9nQRz6yJtykOBwP5tgPsnuikdZ0Mt9ejGPWt\n6ebGWXc762TU1nOTN/TP3ywLAUVgWlylHXUrCPBJ5L0yB6XCTHAPi6KBhDgD\nI+NqJ4YeVNV+le/hQ/DZa2AWReJ2KPjuY8khx48sJZOZ+aAXIqgvyS442wkf\n6Jl9NZ0jf6OfQdXtVfVZpAT06+YRMoSmxHAu3CkyCml5rCqinrLtHKQ/aY1m\nAGuk\r\n=UC1A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKbrGkUio8PIGOZIE5F3sxMLlZalCc4MMzRgx5DQu0sAIgUvw3Pkw1Ucz4uUK4YzV3vM05kcJRLznQ0M9uz1rewHQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.52.2-next-1618850702-9d69cb4f.0_1618851042889_0.36801486636314684"},"_hasShrinkwrap":false},"2.52.2-next-1619105866-24c93b60.0":{"name":"@xdn/core","version":"2.52.2-next-1619105866-24c93b60.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.52.2-next-1619105866-24c93b60.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-TK+Z3TFAq38yUMJdkEsxWlLyzEnY+VnZTO9bVJa1IDu3fGw/tDBqzHYOxgCODnavgDYalgvU5XwdZ9hQCNF2+g==","shasum":"9bc6d1b2fee230debd19bcede5d66ab2ff1ea217","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.52.2-next-1619105866-24c93b60.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggZl+CRA9TVsSAnZWagAA8A4P/R76xIRgftiqOCiO6dI1\nSfO5QxpJiTeLW+8VP5iTePbZI7iiIktRtkorhazV90bwPg6XVHaWwbsjldcH\nAlDb1HdZiNL/mZn8qJRNRx1nhRmOjBXZNh8yEwADPHI16lT/ce19s64AL36D\nrvGj2hdoDp8ViScY+a1KcenU8/Q95m+zyPGarrHlWMr4727FXVmpHS4M7+zF\nQjfeUpJlx2mlHI4ZXiHN2zWEurlS9dVkZN7YCeh2uo/+a12CR6MZJqSJajB2\nl54iswuuS+JA0jEA9mX09h+Z1c+qLy+3PzywGc1b8fVhap/JgmXpEDtYLM3w\nWw0d0cxwfjofZe6SLcqI2TER3f/d5ogsKPJIA2fKuUxiQOh0MxyeQWGMhzT4\ntk1M8yDnOki8oCAMDYw8ayYKdUtU0u5GOOBoNz43xkDUzDnSovViZAr3nHnZ\nvFUfSu4EkfK6ijBAKpR9GwW1i44XbUx083yyehfTkpD7vaAzveMBBpNUgNc9\nTCZpyKHWE5ZlVndKO0IZ4esF16TSx0Bjzn5mn5LCXQ+MYSG0o9cINW2gO+w8\nLVDOtD8ZDxWpOiCcMa0ztfFYtc261Xxj7GvCBhcpY0jjESkXfh+Mqy51g1TX\n4ns8Wxzj4hrVkZ879yLnpLF2cd0gb4oR8viIbDFVPEpEbKqp0PaJ4ra0OcF8\nFoO7\r\n=8UNV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3mt2MQyq6kQpzpXa1a5QcnvwNp9J3enLnWeB14DkkKwIgDGsmhYzjUpqRd9pg0GsoPXXM1tJ35ktTFMa/b9eNUSc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.52.2-next-1619105866-24c93b60.0_1619106173864_0.4073103095103896"},"_hasShrinkwrap":false},"2.53.1-next-1619106141-0d6fc28e.0":{"name":"@xdn/core","version":"2.53.1-next-1619106141-0d6fc28e.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.1-next-1619106141-0d6fc28e.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-QCh5H+Spyh+TMdwDtXYvbTnfvpPV9U+3rF5AfGxlksHBuvJPTcIBk2BqqecqzDS/m5Oc01PbvYG2tdy/6c4SzQ==","shasum":"904ba2ef397b58db0b81d7def13f2621e54275e3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.1-next-1619106141-0d6fc28e.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggZrZCRA9TVsSAnZWagAAa5kQAJ6F5cZW7BWxKAHrJtkG\nrnRE23gfITVGDmsaj5tkd/njGhsJBm5yKWtDUMV8+YAqTgqrUUBSSGntjvwO\noVyRFmIEWHYzwbRlJQeVPjPXTFga7vNnjahGNczFPn5wM86R9RxWpkie/H03\n1sVNblsraZrtmYhvcAqi3bbyVkUV0ZjpcYkrst7MRZ5H08K7AFfTWDa8oWaa\neR6XEvA1/FpwV5WxdbnsQRDbx5/buAqDojBJ3zpJmfkb6kQkH0FuHQGW3pYT\nchpPmnHfLZNcJyqp+HS++wjrzWrzEfbbik/EfSbkHoyHTt7IXlw4hnNRnjrd\ny4s60ltU2M/fc8fICrJVfuk4RVkNY4J10JhP+fcA3JjazSBn3Wy+1c1HPaPx\nd+CcJUSAkY83mTEeyKPxAVjUnw0bGJVINAAEA5RycfpcBoCzzrWEnqA/0Gil\nyJBiD/i60CP5cxP7odNLD2BjRo5BmZFYTTb3YR2w/ABtx5WX/biyEfnBKS6P\npcxeUmOvvhW5JxQfx1uxsqV2nJ0uDakWdBD6dNet5wdBgyWvm2gJYGYqTb1E\nzSEQkyJ+5djSFHbLtWpfr+Xi9M1ynXLx/p1DGWweIqLPGBhhKGZiWjp75Zvz\n03S9dkyvd5ahHo0cZx6tlAVKkUZDPsCKrCxhdZRnZSWElKMIW3erIrwMOy78\nMzed\r\n=pbOk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAfROFZM9OZtrzpUmMAEjT9Tf9Fwps24SDgRoMgZbicgAiBdIy8WKmDsm69ASL7mmrdie+Iz0QtVgYDbtzYyBX3IyQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.1-next-1619106141-0d6fc28e.0_1619106520734_0.8076955521738864"},"_hasShrinkwrap":false},"2.53.0":{"name":"@xdn/core","version":"2.53.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-26lXk+sVlBDbDTlUnsPa7JDQAYh4W2R7wsQaM7RAwFtso3m8VOVQ91PmtGcpPglgRN3p9fyvO2WvBMIakMjPaA==","shasum":"5553a844d99db363380c9d626ce03d0ca207d50c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.0.tgz","fileCount":203,"unpackedSize":676715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggcLrCRA9TVsSAnZWagAAGtAQAI8p3s8TYkv4Y+C36ns1\nH0SMsuX0HYR/nECyglPeZcvvHTrKNvFqMOo3HQdc8RYI9+NKD9eA+2XBRhBL\nZFTyu6+1pUcgcNqWZevSCn8IMAoV7K/nbTykei4SWTlR0rLhTgfM/mY0J/Wt\n44u+/UnLd7XdmJOHPLb0xllkpGcHj3rBn2AaLFmNEpknUhRqjZ5WRV1R2l4l\n2KbPFkuI6/e0Kna9pg+gyDsu6Rh8S+6CmcKj+fbacbBm9orwN0IYf8WmmTwp\nGbSQdb7Rn/eARS41coTxFdPCSKGJO96pWiwu8hMeysTFXmEZssa5ZRSsJe9L\nmY/INmFFzv2V69bT66KqKZATYjSJszPaVGVEoymJp+D7lcFWv+BHj0Hr5xaG\nkEZUNOXt6WBLrMYqVI6E4S7KDPtuvvKTlgd6Mc+U6EimGHkQyEvfJUUeb4yc\n6DODJMwdIq0+vPKRR5eNq/aFRr3B1Wjpb4TqhDcItnNXH57HWn+8hLIeYIuA\nKkZ5zsNyCXRbparG7mRKMmJ7qoDBsNnvGkU7YkFtMpy32I12MS8j72MpfBzt\nRN9Oo+je0uoI++YwlQj2wZekipT2V9rKUJjphfmyY6snYYzLlAyZBTO6UKw0\n0lH+3xwnHFjQtvGodlGPGNOXSKo5R0ulGtoqHLtdeFu+chXiMgPIECmyx0ij\nT/ah\r\n=bLLg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFshFEUPnY21C7X+VK3affD2auoAWHDJVEKQL5BwIowxAiBHqngUTl1rekFmuwUNNUo3uOTwmu1lteJ1u/miQNgvqw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.0_1619116778866_0.779104263714862"},"_hasShrinkwrap":false},"2.53.1-next-1619464206-faf15ae3.0":{"name":"@xdn/core","version":"2.53.1-next-1619464206-faf15ae3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.1-next-1619464206-faf15ae3.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-UGi6hhaXBLUssGklVwTSqTUgfzhnWFbKsYgNmAzfZtoBOwaS9luknM15azNor4AMhJ9vecP6P/vZZCfRCh35Ow==","shasum":"29bc8167bc94914540d530d8be94ce8a939ba186","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.1-next-1619464206-faf15ae3.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghxFtCRA9TVsSAnZWagAArwQP/RLIvwG38mmhhAINPjA/\nD2BCRTYuFgsc/S8GJkOe/I8BYDjeMnvb4LMEt7R6Chfw3OSafQmHmAkBPzdp\nuOVNFD5aFiZPVfVU3XPh39iXNIiCbNIoGyZ/xpHHTR1QQ0x/1fPAUavelxlS\nAj68SOZM+6reC07Y4eFIM4fbFbstlccE2jHCMwSY5ggdN6hxDkT56efhu2fw\n9VPqirIKAkFhyme4iExRH6IG6HkigOxD1sKr94vBKNbBw5gz7/5I6ZbsBwRw\nGx0JanRP/A9yUZOEdIN+4yxTERNnlHBuMyENRnMgUpv6B0M980myN0ylyuk7\n25ZLPUSuORqAtEgQ2id6u852AJGiYApyDuqnXgTy/vzn3bfVrFcXnyS0SDt0\nCjiLJbqHNXwg/hQJ6eY/D6Ir/9Cl88YiP6zqdmSqQp0g8i6JNRkyZLIWNLxK\n91D+i+11s8YV1sqlACWaCJwbdFnXibqhHqzESKygGQlmTNV5Pxa3DDuP5Mw7\nzn4Qa2VSqEZjbbxMyuhgayF8CgHbXaKWkPU51eNuaro0/Mj8f19ZaW/nyVQn\n4V7gcHa+ep1bUB/fZXrKIO0pCtq0NSYYBmcqmLGCvHF934vbJxmsyn76KI+R\nHiC01DjhY7jwxJ9I60Bmf+yrElrzfIuo2FHcN07FyfjYkQtV56QYDhvQCzJI\nDC/K\r\n=BwQX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNuDS4GMqgORw6M6hcIT0MKN/Kz5FnHgrpwgy2aYXEnAIgP3TBQwkeUXfZwCuc25CsXllmxlR36uAMnVjiy+WIhKU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.1-next-1619464206-faf15ae3.0_1619464557223_0.8706856253400745"},"_hasShrinkwrap":false},"2.53.1-next-1619540720-3d071adc.0":{"name":"@xdn/core","version":"2.53.1-next-1619540720-3d071adc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.1-next-1619540720-3d071adc.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-NCviiFDhv2XezK4OhRUnRr0cMOj+o7m7GSoa9dGjC6G0X0HAjbBhARSM/stsJA8nLlvkp/ORG65IJMSaN1bB3A==","shasum":"8dd8aa72ab19bac28237eea9179df572f22678ba","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.1-next-1619540720-3d071adc.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiDxSCRA9TVsSAnZWagAA+iYP/0TYM+MmGy3KmFhXurwg\nJaV3WsqkwHfCH2o5PphszHU0QVg1193So7oHvbdglOtZzi0fixOV8X0DPGG8\nACgsoNn0hFd5lcrn/BV6rjILRbzIXVd7XfoVx8flpa+erZ69yIRJ8sKPprEH\nJqm761KeiP56pqh9SFV0xQBMG41P6lbDidKakJPexNRrt4nj0AFFbDRfAgMf\nNuCB699SOAZRBiwGnp7M0ZfTI/+7EH2Wmfi077+HwFYkSts/is5O2gAAY24w\n0NkwhEXx39Ga6G84ZW+OyHausULE+UOglh0YZ+Tda4NBe5jMg21d83BWTTix\nk6jNvuMIfQVi1QwBLPC+XpRtAR8kMhXfiZ6NsLKpC01saz21CUCoExyhp30U\nUbnNmMl78GT7eGBBZR7Degmh8b3CDnjmTAhPkkZ8ys1h0qbvsaVk+p3+lqPj\nW3Xj38mGimbqW2oxgzsh1e9Vye15WarPLL+XBTasQ9v6wCeaEkHskcjFpscn\nYFVWMavSGkSsE94kn8zrSE3L8LgRm76S26LK3Yekd+FBgseGOc0lrq8xtk5f\nFEaMJNAQRoeJZ8Wqt4EKDxK19EwSS9zqWPwxeckWk8RcmNT/vFSyJ9WSsKCA\n22JJGeFnzE9aPH7SzG3Jo6Zd89ldlO65fN0rJJQ40oo/DEgQJH+KURj0385V\nt5Ct\r\n=4Son\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDY51+YD1JSv/XCLuAN3BnCuvrb9jYBU3ezIoJ9GD7feAiEAm17XV0vDh0k1BODRt7cfZ+YLl1tyLl/7b87D5PhXqOU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.1-next-1619540720-3d071adc.0_1619541074201_0.8454890475665313"},"_hasShrinkwrap":false},"2.53.1-next-1619542274-3d071adc.0":{"name":"@xdn/core","version":"2.53.1-next-1619542274-3d071adc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.1-next-1619542274-3d071adc.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-9kb+zyr0PfFGxvdvZOt9k2LJXnYVy1CJj+/K5msEWk3sIGFj3W7di2nFdIrMS5Lmf+9iJEobd4eCOawFMLUPdw==","shasum":"8ac04800b10b2d788cf24512877a8ee32f9f2331","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.1-next-1619542274-3d071adc.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiEI/CRA9TVsSAnZWagAAfIEP/ihwR6rLVgKarrr1toiv\nqhmIjWh1PBDGydWi7MiKIMunykNkfyLfT5HXqs3ihThb550v9oS4jjE4MnFB\nj2sLsjD3A4BesxfNFbIr0Gtz4KK/HEfX/hNtheyOcII9ajQXthdwPVLQ4XuY\n4GvfcMJJ1jnD6WPenJ4RhjgHO54OUy2flqyuKF+83876deU+jBxqjtNOdg+T\nsNK2ZSu9QjP7Qg1GXH9svXro32Rq6DNTp9rzopqMGeAXXPx0oYj9PtU+w4w9\nGzZZ8PvFoaaoEpzIgovQew7n9PdJ/ueHQzyU6PYUO0xpQGn4z/jVV4aHpU1w\nu9i2bva1a2uFz0qWwPN3WJVME+vGjirgKnMYMeEF1ffK+ad6QpzIasEPvRtz\nefZdu+Ehow3KR7gvxwUQ+VE4c8rEmChApY/6HXc2ZqaVrWNYaX8ETMCFedpz\n254+9SmmrWM74AvRuTxxEw8YoEv/fM6HAmwVaMKhT54P5Jh5N/5N2/8lqMHo\nxoFKjlOrJesUiGf7M87pjQ/dz57HYhCinhwGRQdA9LTuXHaTF6HxvDWD1cqT\nSxhrtfwFGyXgmvJT2iDoW8jw4F8rMjaw4I/I1is5Z0izz+HhOTSHfCiiGwP0\n4/Ch5vzcH8yVjzKTS4IOUt0fP9s0k7ZTgpmSxWqWDiLlsI+ziVgR2YmcPxre\nkeyN\r\n=EIIF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDC+V2suFthUQbpEstC0cYd1GbX7mbq+4nyehsbqWjGSAIgMmzY7zzOwyNAuSJg/IKdaMCLiCoUq6pDT9H6nHHE+uw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.1-next-1619542274-3d071adc.0_1619542591272_0.42322328027703326"},"_hasShrinkwrap":false},"2.53.1-next-1619542806-88e8b9e7.0":{"name":"@xdn/core","version":"2.53.1-next-1619542806-88e8b9e7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.1-next-1619542806-88e8b9e7.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-nrKBxawvsxLHhTvehwRDZpcPraVPS0OUIuoWRoXrxm3G9ooysmx4jMmeQjLZLvFgwdB8mg9kKazd6y1gZfLbTQ==","shasum":"235550f8e3473c9676871cb83fb359e90abe5e0c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.1-next-1619542806-88e8b9e7.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiERmCRA9TVsSAnZWagAAe5oQAIbAW9m77zXrjaVJtJfg\nFo2ZiSfBbWUb38g43CoaftmP15nVg+m9moBYIbcCjrquxCOvvu3+ikPD36mA\ng1x0sSjRhegXJ9+Znpjqcn3T/c0IUGswItIku7sZaQ+hQISOoCjY1pjuCTDD\nad+FpIJTkjZ0qrHeBz6PTSy0YVbe1d+MAZt9y6lbEo7lJrf+CfjMqUyG90RQ\nZOYRfl6U3Fa83Ug+QpoVhQKOESrEDLmPK6TPTMMES4xxPFxF9a9g23MX6cgM\nlZx/PpdX9mJ9jNvpSa8Fv7O7Fwdq6HBmmA9hIxqp2Esa2rYjPjNGice6efxz\nyl6qeJ8LCwkHj174OWMxYIN6eGdqgxC6zSv/E/5Ow0SeNYqfQz7HANdEnw8o\n7EMDjs8Kb4IqF3uAcoVRWixCfNZtCARzMpzmDdv5v2dfD3HX2oK0hnafBf54\ncBjHEh425SYAvSPIxyCFwF538JoB7V+J+Vlm0ue1FZG/O+tTUKr7ZPvg0nT3\nkHc4x+1PfXXjjE9TUGfP6lf/XngSinDhKX1IsdNAFlcNu+PY3K8FFT9ywd2m\nbLp5CQzWBD4vYmRhKMZMga4Ybtfjg6Vl/gGjZlhIpVVn05okZkBH7LOLkPKB\nYpMTYvTkw0OqHngZIZ0VxU4OF0xYscwPWmgoeqhqsb4MusLkYSMt2LbbDyWj\nOtZR\r\n=LOrn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBq0m8dePLU9ZSmUOSSzPD+jf+2tt67cy2k4ZOyOFW1eAiBA7U9pBMwFEhR3ntL5HSROXPHrjXps4+U+R322QLlo3Q=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.1-next-1619542806-88e8b9e7.0_1619543142197_0.6718157613522817"},"_hasShrinkwrap":false},"2.53.1-next-1619542820-88e8b9e7.0":{"name":"@xdn/core","version":"2.53.1-next-1619542820-88e8b9e7.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.1-next-1619542820-88e8b9e7.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-ZGDMzaMaBDkLEOsuI2duSR61DGm7b0ISMLu7VoWGL/gpGz8/vV/Mrw8mwnxv205cCYU82Ulni80xuBO9MzkHJQ==","shasum":"d63dab6028ba618912cdefc2c9117fb45f8bf3a0","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.1-next-1619542820-88e8b9e7.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiESBCRA9TVsSAnZWagAABOEP/3M+oCoejrV0Y1TgHzz9\nDrjtstP9r27j80aQmE90M76dRqxpI0dxz4bZ4/C4Hh2auLn94djMzX42d4ns\nOqisk5iVDbuZ0CVJI0HlLtuAB360jFC/JHqrj9VDs6TDnGBosDuUTQkx24j3\nTxBEY3FCpWqBuXDY2Y+CSaM1ZpLYAsIxeayP40sRnxUqrOH30ta7erQ7qfoF\nduxeaLKlZ+Ky1Qx9/mbxhFnFL6fWWH6ZgbJtrBdMIi6b4+2nxyeS9uZ+fjxo\n5ke40ZMSR2IyXTfedSQ5yIZj3PqU+pa2OUIM8aawIr9xUM4+YnNPV2rNWtjS\nGYFenv9HRDrd/0S/AtPYF31jYHdbGG7xmcqOKhqK0klSE5sKH8+QqASfLSYH\nAktp675E9y8c9qQb/iAV2ER1uWIMPgmtsUe//nuon8t5I6SpxzEqwJPXd37G\ngxSE18jrC8l65ELRZf3EUG0K5oz6gjlie3HUHzsN/1gZFVSsLh8wRXlh4Q4C\nQA3SGKEmWBvStZhhVQ1bmTOOz8or7uKculsCA5E9BAV6ejXTIxUkOfbDRFCl\nz+7lBkAv6GWaqGtl9ooPPwGUTZ0Cz5Pxyzlx41+VED42pBq0mIENFv0FFecz\nN/KXwyACeSbK23PFlBMDKGtmY8ScvkIum516xhkQusTCOiGpGYtZAR2V9ouR\netfR\r\n=pvmv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuFPOwiQ/m+SD6G72N8a32EZJ97ZTpskeEE77AMU2VaAIhAMoceXw49lfwj63xzwMlyi+7kRAh8k2vr4bh/hjfCxYT"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.1-next-1619542820-88e8b9e7.0_1619543168549_0.0930688679440923"},"_hasShrinkwrap":false},"2.53.1-next-1619617676-4c97bfbe.0":{"name":"@xdn/core","version":"2.53.1-next-1619617676-4c97bfbe.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.1-next-1619617676-4c97bfbe.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-2Z5H4YSz03Mvo+pORFl6yFbPqS23JP+4YX9xdpYruybvAL8EzS5fUtUi6hl5HcuPkoF4S+uuPcThuAIl+5kXtg==","shasum":"0aab8942cd3cba6d35a13dd679eae8a35df5d82a","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.1-next-1619617676-4c97bfbe.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiWjfCRA9TVsSAnZWagAALU8P+wczff5vd420DN5TqPqB\nKA+4oL3H0iApOKBNuKll0LQbzLjQ7/NaI4UApYMIwPymb64AOjxlcW2JAp3t\n8QEDdF3Z8CIE9WLOxXKk9+jrXuUSbDzj7kIFXqTmrUHsW0HJYk1G9NuK2Lch\nm+dLqZW2rOZHhJPs0EUFgziUGK6jmZxObtvl30bJFzeoAIN6SogVwAtXQjMv\nqOw5JAAKzSYWU3k8Wroxic10NWCmJy36CQKI1uWD9k0LdEKphqNi5jqISOKB\nZhhMnZFT+U4vid05gcIa5Af/KP+9EvwC3SqGDGbIPwXvDprZTy1ryQvWc1GU\nrZgTBDH8RKgn7UQDLKd6wDTSCEv/gKTMeZXWNyrgIutoAgFebFzbZAzBfw0s\nv8jIbn/F0IhnWfJof0D08+40kZNIuN8AbYd74OPt0ZxRQaJKyVX/kqpEj5CN\nDHKetS701IdTNWdKBCT9yz7WCoUvAq7tmEyVhFmPvZ/jiJ8DWtnd8lSmIf9d\n8bm3zsWAjvs1Ad0BvOePeg/C2t6sEZ/ysMReuP1cwFmqAQHtL3jLSauKHw+v\nsiRFCTY83qQ94/lRu4ztjzxvK3WZxJvv7AlZlmlEyAk9p74O9BP0K7ADXi3i\nUpflENqOL7PGd3iSumVqn7TZTQE7af9lRoa4wKcT70+W1OXuoNVHkSSodpfg\nL7MW\r\n=QYdH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7oyP/5+p2KwFluMktxBcxk44Ej6sDGZfpY0bnpvGRNAiEA/2gH+BcgBggJ/DbXWONaWm+PeDk2L3lXoKtKiyZUCKg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.1-next-1619617676-4c97bfbe.0_1619618014416_0.982338454666303"},"_hasShrinkwrap":false},"2.53.1-next-1619623418-f6d00416.0":{"name":"@xdn/core","version":"2.53.1-next-1619623418-f6d00416.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.1-next-1619623418-f6d00416.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-sw6E/T19KCIlOHGGxqZcZA4UsUBnqQtOPnKQoJQ0dlx1uOds/haUSSg/HpLV89fMYEy7of5/ZuRICrk0MPWSyQ==","shasum":"1f77dcffd7b0eeff4db1c7414e91a239629cdb5b","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.1-next-1619623418-f6d00416.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiX9UCRA9TVsSAnZWagAA4oIP/irxENs6+t3W/z6giJSb\niiPuWxdjk9NbrdugG7JnhFWmDUgBPLvY/OXGEBP1iCNq8VZijEKB1jlN3AjT\nZGR45OHI8545vumLZQRdYKWl4ErUW4YaS23348MGYXMs0fQe1IVE5YW09Rkt\nVtROnEbYnbXHtIlEvTPlMxYKo+0DS/HN833NxUHi9thhIXaEP36mI4De+z4D\nqBIxT1MwwrHtn+NTkmEjeGn09rN1TW9ruDXoaUDnO1kQJPr0pYWOIboLGX9x\n+79pJpf/WLTvyyTpvtaeL/tNztkZm6i6lW934TMeWKHezTghdMrN5lVNtgKa\nsRgURH5FFUKGOZMvOXm6Y8XOZyDHHvT+E1So//oCLSG/UyPxtDPSFjvVvVaB\nksEQN+yoQaszdtpQjOljVtSgYze9qq4lQ7NPtnfUnjLnENBI0R/wtNMM8WcW\nXuHbM9lc2n01lk/Vj69Z6cdPfQEIxE0PfTaNfJazX7oAtQwZ4L/GNgLRi9GT\ns8c1mekfEaQMKAGo/oSRdUKEothNOl8w89MJ4rnHWPMIoeUfKrDgzj+WBqnR\neehvaVpPsNO37haHX0Qq1kcXonYCypzkTq5WcSAttlf1Ml2rbP0GAmQTklAp\n13Q2uoDLP54eCZCeFrHqJBi6ttRjhJAmbalCdVMMh7mw3i15C2qCGmA2JDkM\nGKtw\r\n=cVjf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGYTuO6odnxLGBFXiDLnvj0LGZlGFcggam4YLLPfckx2AiEAuG92WBjQT8iCV6r0Ty/SakNgPas/Ct2gdVOZwmSnZXE="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.1-next-1619623418-f6d00416.0_1619623764191_0.8679794744231195"},"_hasShrinkwrap":false},"2.53.2-next-1619623598-3c4e1679.0":{"name":"@xdn/core","version":"2.53.2-next-1619623598-3c4e1679.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2-next-1619623598-3c4e1679.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-XqM8IjDYXOuIZlW97uHLGvRWYa+jQDOKDughPTuK2gKP6/u4v9yJaxWPEhvgT1sy7ObCjqYcnH2LB5J6/zaNPw==","shasum":"911ee1b0dcab43739e708380b27859aa979afb17","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2-next-1619623598-3c4e1679.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiYAQCRA9TVsSAnZWagAAbRoP/13U2BTtSF5/MgOBoxwl\nl9dj2A6x139ZyuQSNWoxpRAmEZTLnTjLNXMMrAgVRCOmMFo+LljQqVkuuEzV\n3z5kjwNJAZGg2BtMpE13cGqcdmB0vC2WghZ4doYe4ECpYdgZ1XUlk+lx+Kjz\nJjoWvL5yTzeAlbpOg6uXWh6raMYafwB7s9RqY7SPanDyEjAZ1WFzGqNNMDFI\noSS947xnfPzVHLHCv2KgaEwjOftckGbaLF3mea5LcCXwm6AOnjIfAmZ7T8Dr\n7M9jAUJXLuHwT3UzIGy7zhFGFTzMVj91bBKjUeLcvyjBFKDtQ8mmCBcCzjLr\nYSMNP0M1gBN8pgJYVPKXW74D0dOd2z62bVUOirjf5qhI0RBLrbFHCA28GeSc\ndJsvOTIuxHab1sGcTttUvi3wP95ZbrVuBmMAH6RtHFnZ1AEODWl/xC/jO0b8\nZb9KIl1Fjoh4zIGewDbdVcDaVuxaNcTm+6ybrLtEzFGhNIznm+69PfsKc+4K\n89uNtD3e2QXLlasKBpiUVc1t7TUpUdc1bgNPtg1RTMPO+8r4KpdBTXKpbZhT\nZI8aK0/NkxbrmBQ+alBgJjeo0eeZ4HoGR0g27qBXC4vsfUeEPSfeH3s4qevI\nztaZmWzAkeAbHjjgROQwk8fb4bQrOdBilDdVtHNagwqTCiYcfx+UfL8LoPks\n/kwE\r\n=OdP2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTdeQ64T6uMs1mNIGYp9ngVNmr70kz46eNKww7KcKUMQIgXIeQV1bxETveIurqFI1WMMn8Gw6pXuGlI1yaH0aiPVU="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2-next-1619623598-3c4e1679.0_1619623952461_0.6317415222130591"},"_hasShrinkwrap":false},"2.53.2-next-1619624498-dae4ff11.0":{"name":"@xdn/core","version":"2.53.2-next-1619624498-dae4ff11.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2-next-1619624498-dae4ff11.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-rmESLAI9HGTdL8xpsFiECpnIvACrdBN5264aBMfzM9QHONTvO5RL/wDXBS1TjqV+PutWS/WGbrWYh3bG8y0frA==","shasum":"37c84016c05e855550440f04fe8915865bef95d1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2-next-1619624498-dae4ff11.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiYOYCRA9TVsSAnZWagAAUQIP/RG64cBRjGCQwXH6z0bE\nDYRw0goJB7PBrcVo43gThi+hEaThypbVVOciXc1zrX/aGOLIGoCNuFRnpCWC\nEJhDHLHWh+ZS7k3YLRFP44aAneMQvs3GlkEljUb0DRWLNQUDVl59//sbA1DG\nhrOwIiPZYLEke9oU0xqNmGrZUfO3bjf53o1xPCajA3DNEtdnkRwlxXVyFyGn\nfIqiD2OdE8CI2mskYYE/ZCyQjiseRwoEng8QhbES3rQq2dT5MDm4/ItJgOav\n2rCqxZnq6EJFn/2vT5aIwDjugLc3ihOs5amzr2RuMwcsZJ+KhzqV/w5v2q6Z\nTLO8/LkkFN+DOHcsFmEdfA8+dgKDivE5eVGVWlac14QWf0uMZbdR13FPc/tD\nI5+4x0FcOweqMIxJ7fmgraYYdaHshDk1rFevBr1C2QNdnM6p/uV+ka1kHIKw\nZe2iuoo0itFvYwQyw0NO6aqKUiaAaJOkWfgnSyjJeUvi+bV4V4hWxWXWlh5M\nDOqc/gaeNCjlytudscKNV09lh4P6RzoSr3xSDBYH/MeeL8nyN+B+a2qIAru4\ntpWie9qinuIPcAAO8bMJOFReDZ6qqFoaeQoyJFmA0RQXutqWQmye/5b3iiX7\nwh2vMhahExlIN3uLFyladBQ8gviIOe7WRNK40XTVPM034NqsI2MuSZjl2Jb6\nX2Z4\r\n=DdLN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8n94ddRX/CVb9hvZjrNSrP1mcmRoMHjRB8qYwKhRSsQIhALNKMNbpLmpavxXmikVK7rhkSZL286SABsGxZcSR2NOP"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2-next-1619624498-dae4ff11.0_1619624855331_0.1655902354596488"},"_hasShrinkwrap":false},"2.53.1":{"name":"@xdn/core","version":"2.53.1","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.1","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-sHFI5fM3hSSSRTm341tWGtOBR33YjivOdQzPlCmzD++vdr5yguFqN82RGscujZu6E1HpEX4bpADYxbz/cDbfeQ==","shasum":"70eae4c33796722469530a225d615d20bdcce72f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.1.tgz","fileCount":203,"unpackedSize":676715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiYPsCRA9TVsSAnZWagAAe6wQAKAFglORQhoZ1NWz7Uvy\nu/h1l1r0coP04nI7NeWlPwRI/1duD09t6LWhQDPpaI9fzwGnbc+770+/Q6M/\n8Rucctg8Kv88Z+Ud784pK7INmdtQJtL6Lmgz694uvvOym0VmcVG31ZPBDCg4\nGI14YsPdCw1ORGHDDJculMzhoaeQELvNUMzjBtxKj7hM8k9bZpVOZoImA1XB\n95RKhzBoguLGMT1ReopXkNBQJMgK1wxwx0sZdAXfi9SF5pPL0kI9MqcafMHH\nhETYUuzDAbXUTnTFG7ZmapyPoKEnXpWbOh9+c7QpBtRo88jHhVgLlm+oiqcq\nOdtNPcL5qzMkPab8JhbRqof2iZr6fGA5d3A1DzkDB/efpJlsHjJkHXUHc3Ox\nIh3GhH0mUMFXqnoW5+SXzjGoCOs6DiCfnej9B/RQGwqN84+zYVSACSQzH1d1\nXi8FTkqQ6ZVNCtAJyXedEFa3bRjm8A8RaI5Xl+kuqAmqpXudIo6043BmNwRL\n89bw2hZT7NUdA2U7LnJKhRyJZCCNCidqozDmFkQJ8M2g+Rg7/vfB6CUjt2Cc\njvBJ2PCw0rST/8Znhgfcl7W+tvfqSahRFWOvuRHhwnTzgjwl2i6/I2HveRjo\naAqc3jNdsv5vdOAhImEXBTgZhcTX2PezWAla1Zhhpe1yUK8U4gLCjdq9iPU4\nMuFB\r\n=1UK9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClHsqy83zVZQKJAz1KC2B4d7cNJAvcYhfLBYEQkg+VSAIgcGJWkAKnZB9YDnudAhPks/tHm1jHoV/uzfPM/BV9kZk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.1_1619624939448_0.9665303584488032"},"_hasShrinkwrap":false},"2.53.2-next-1619705672-24a3a19a.0":{"name":"@xdn/core","version":"2.53.2-next-1619705672-24a3a19a.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2-next-1619705672-24a3a19a.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-hAGlGh1yFdTX8hOmk/gyVLQjOj2AkMANNyYlKHwyHp1Yz0k2vzHvoqeEozdJmVczi5Nqn1sEh7FFccAY4SEGBg==","shasum":"83ac866ba7fdcd2b6f98a5a294bab445430cb3f9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2-next-1619705672-24a3a19a.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgisCfCRA9TVsSAnZWagAAOYIP+we82OLbXz5mnWEyISNf\n+nv/FUiar+BgT1M17SXtlsTadbFSRAUYh0YhCGMALkiHG5jplxjlPyqpX2f6\nGdMHVTSzAa7PTYORexvkojNJFjVpZyiWnP7apqS6lwbhRZt7rjvmzAsZ/Qwq\nW2j6sPrWdSFG7P6M6XvpEL2CcdKqrFQBzkDeCw0t1oH0B6ocgmVvLnyF3Fz5\nhFMdCrNOlKy+DIGP5SHtryFFmMv7kfATY9aNEIVngd7AuO1IX6oL+nItvkgB\nDHq23M3jGMmeVi+EcLZkeS34kTQV0zlqGcAqGpp5S6JK3Olr2KchiBheNZX3\n5lJrKTdcHEk3XsFiDCHx9x+HvW+neNOD2ds2X2tKF5VcpG77VdDctCSkmteV\no7ZzTkT6gJBgErh/foswtzCDfHvS5OqKCvRppBkIMbqufEHFkW2QMRCN60BS\nRNPEDimuhPGI8CGndln1U9ph+mBWmPl8gnI2OZepG23+stE9pGuMnmAlAYmJ\nWYUgMugYpCIxEyJgRE7UnwnIlcKFhph9Kf2iZOK1jViiDPcYs2EqnnvgfuiW\nuQICtNtRCS7QwKuTiZMKl6Cpo9q0QlK8I6FKuo0Cl2kS0/XfZXaJq+XcGdYS\n6juu0Y/cIAZB/RBwOkKaZAL2PyvgxccahJSkiH9wSQuSoUCbdHb0AFxalEdJ\nBXhS\r\n=wevi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBQDioh9Q68+mYEpuwR5R6KxYQdrEFCtoQl4qtLncwIKAiAIX15aowx0YtY+uFJxhBNz+ujxrpSfmEDz52bbaHIMvw=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2-next-1619705672-24a3a19a.0_1619706015387_0.9232270450646942"},"_hasShrinkwrap":false},"2.53.2-next-1620132361-2fba7526.0":{"name":"@xdn/core","version":"2.53.2-next-1620132361-2fba7526.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2-next-1620132361-2fba7526.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-wEE2pE4+DZCpWDC9VmrmTtXFfDk33E7s2qGqjhGfnPl/h3zMy3BERfV0xnMAxxxOrhHNM9z9BN+Sz4NCQw/LWQ==","shasum":"3850bb59bedfeb5c613fa92c6140f3d8eee2eb96","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2-next-1620132361-2fba7526.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkUNxCRA9TVsSAnZWagAAX8IQAJboZVlWiSu1b2MKyxG0\n/VAFj0H6dRMakDgXKLgPPvHyrTL1jTx+SPYzK/dUhADCoT3OOnyKWVGXzZ7H\nO6SUvgFuuECjVhER2cgf+V0f6A5oAT1jTR11oSb3oeYIMgKJ/3oR1SwAHhri\nX+8duBiC8cNw48aAhM0Ul0XEYCzGQ542mE/p2A/JYlWLf7Stxr8JRCqCs2xx\nPpAEUyGgLh0cg7O+ME5BpUpB7Tmy0ErpVSIKYczPHqRCSzn7sramTy5JwyWL\nuSuByumUt322DEzDir06bm/qOhBL6dBE7lvJ7QGz5/Ck7jKPmjovbd1+9isu\nfxNroZMvYSgOoG0yQUTzPsZHGE0zW3PCcE7H/plqgYstrozZ7nS6JnkCxSVB\nQkMq0sp/H5DbXNvd8ER2cpZLQsnWiV3XKpXshl9KQl2bK/YHSiYIT1j3WlXw\nvbokap8bybKAOOiQtmzRi+YdY293Ll/z9rJM1wOgW5QO/tRTlmvvPweIUudQ\nKgTlTtWBOzxrbketFBzNeq0ZfoaAgroODi3SYqBxWF1T6j2Rj4rmWn4Q5LrG\n/QsvaAwPIDIhJv+Of/E20dpb07RpFp3Cmd3zUnnAyAl/8CFVy1CskxwdD8nA\nPdxcqBttc4JR8MhPMxJ5DCupVo2Y6O+4YyeB7pMG7P2pXjZa3wbSZ8i4jWGI\nypGc\r\n=Al1G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDw9xVednGj5xbmo0lAbZOCT+uiMXGqTFmOnyt6svfV1gIhAL8YrJuTxWJEAlrwHOdBH0P+Tg6c4Nv4c0dLZnbyqFyf"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2-next-1620132361-2fba7526.0_1620132720945_0.5667780768245831"},"_hasShrinkwrap":false},"2.53.2-next-1620855510-f3286a4f.0":{"name":"@xdn/core","version":"2.53.2-next-1620855510-f3286a4f.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2-next-1620855510-f3286a4f.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-EAV5OvGKsqCTBQf2Ewa0QvH0iYyHs22yaqHK1vo8mcpTPWgD2MP+VPXDv3X+wDbx4ItGTTL0746jMVcD4Ph9zw==","shasum":"89d91d1dd3cba08d09a812c598b01cd9a0a72ada","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2-next-1620855510-f3286a4f.0.tgz","fileCount":203,"unpackedSize":677387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnExPCRA9TVsSAnZWagAArTUQAIqRRUqpO7U4cdO90tHg\nRLMgtN2q9DhPsEPHybRLTZ2QvaTmXRvu3Q5PeK7LTncUy/VFiQCj9JEQPwqL\ngIn+YgcsHbu+mxhEy5XTBygFmr86xuEPCCU/WWm7VQ/TjAd67zK+dS30/sSn\nGsXpAvQ8iRlNoDEH8TMRmIbFA0rebi5xQA0y1nVDLo4Hwo30Qe8VpfeCVYFS\np1X7/f7ILemrDFPW9/hohaUNVrj4MHJhjTOPMUYFWHUy+bxikgXzOJCKS2Sd\nQbqwGbUuNBmxTK/zIn3VgaXcqNAFUOvRgyzOY9meJCYTMAPQZTMZ+p2G7UBE\ndO+fNsZZUVtiAgm609z9LT637q/CCP0CputJHeBpqKNBMzMlCOyyx+wTd+eo\nerf/5dJAIfdvC6SmNATP5mvELLOnYKQXUlFk4x+yP9yBPb8/vISr5x2lbCkN\nWyxOna/80mX2uhJT76+Hq/AWHNhuhhUz+NrVijOe0be3E8Jycbk2qF44Q4ah\niE0cCa6+vYIrSR332RRdF6PdSKsdM6P9YSwQu9I4J749IFevHiXbZXlyfSQV\nZyNmhMIdsyEbhxkUs2hu9LAYfv6WdDVkJaK4dm9CgBpQkTXztZ57ozbVpAeY\nug0xxrodT6uhOHYgvPWXNWoMkF3hpz3YkOAW5R74Si9JiBMGnycWVdfTKCta\nTE7U\r\n=+8Gn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFm7XRjA6qQizMksob17dQfTwCM0n8ZgaEaeDvEnmijLAiBDJ7aJ/N3Tr7TSKGlUAwTZGJ94PhBAMtpsItVRUEFC7w=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2-next-1620855510-f3286a4f.0_1620855886465_0.7505798031445332"},"_hasShrinkwrap":false},"2.53.2-next-1621351277-d5810a41.0":{"name":"@xdn/core","version":"2.53.2-next-1621351277-d5810a41.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2-next-1621351277-d5810a41.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-vckNtXemGAIyEK76q7nf4UNcKBlVJRHhM6ymocDXVvgN4z6ARbLPFV/3uJviBOLq0a9w22nSYNmgy+DDlFPm8Q==","shasum":"338ef223443cecc582c2d27c578109e8bad5f1de","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2-next-1621351277-d5810a41.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgo9zvCRA9TVsSAnZWagAAUAMP/iPQr+3gJdAJVEkSdrWs\nJzpBjJ17sCXKQgYSLMXTIJaCgUvPY70WeQT8z0lSu0KFqUTIL97U6qS4e4H5\nu98uRC1cEc8yWun4qoIXbhjwdN+qFzDfDz2CUxiroa7yNBCIU6CYGubUd/yu\ns7xe1QfWfRXPCglp60VxjnEEyXow4vtdckR9MfENMeE5SyO94CB+7EPpU+Us\n3jaAowV3mlYwp7i4kupF+JyRm7kD8Eqmgn8ll1bJds4N44cRYJjkVSvp1Ndc\nvK0j90F8ffrGBjCk2Uk6UdtABC/8OT3VqrDjp5/TbLJMjGXqVWDGhE0Dfyj0\nqcgNdix0oUk1UVHtny4CcgrTNF63fGV2f0srj5OmCBeRjqAv+Gj/y94eCTgr\niIw95OrGpYMTZbQTlxVvpmkTJO7vsT7NUh+j4W7i5LY7S60jyWZ6W2qGHwd7\nPJ98p1Wf6a9yphQEQbvTtBrmJpsA4KQNtNstvviaCRi/PaGsg0WhPcntVK0K\ndhIWF2twmZk0QNLMA6khn9C1dht24k20+kb+V3VCOpYwxJ2oF0vKUFvPXFSI\nUNLPNZb3Fqka0/wO5Za7OlCov4G2EgC4t7bIMRSZjIQzD3fvCc+pXFPa2iz6\ncGBeWzasfH/+GmMwr+HVljV9BcJpYZBsvhUSRzxWe4XaCVYEsckPDl3izP9d\nyAKH\r\n=0j+j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFzNGm7ypUJNizAOPJIfLJKxiYwh92+OxzP+QqTiXfyfAiAWAwwTYTdWrKt3xsdVexeJ48WvocmH9RAG2klibyoHZQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2-next-1621351277-d5810a41.0_1621351663284_0.5903432434371856"},"_hasShrinkwrap":false},"2.53.2-next-1621351811-799dd11c.0":{"name":"@xdn/core","version":"2.53.2-next-1621351811-799dd11c.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2-next-1621351811-799dd11c.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-9ErDtU8gEG9TLPI99QVkoFY+u0NWxXLe7GZ3LYFyvzWyh0V+egGa/CneuT/B1d5EJbOu2xnRQGu7C4wIkZfT7g==","shasum":"42b7937bfada023cd7170b6458e6ab985ecb5265","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2-next-1621351811-799dd11c.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgo97MCRA9TVsSAnZWagAAMlEP+gLm/qHe2590PoF3zajm\nluCFFvQcaBUfWLk8g0vc8FOV8wiZl11NaG8Z+28c255j69Cg2WXnOIBeU9ih\n0D5KhQk2qoEN/XCqHgv3hpx7Ua0ZOmD+tOeGAjysa9VMj5ksp7/h2cBbPuQz\nvfZF6/BEz1vcFebF1mvNd60Dwt9F7ad8kIxQqZqaWlRqHvdQR8L/WChBfNQG\n8dwVJkC/zeOX6M7d/qX/3DBMGwTQQTnrJJlJiO0YX7q9gAmW+9GZCb49amAf\nHEFGXrkq2whIJ+f2JhLMXfZYUmgtfX7uaqiny7xh+U0wRHDj0YFvFvnxUJSZ\nVeWCuHZWFuVfPqP1Lj5GIZ/GZn2GAkUEJorMgs1mpCNeyprBTlniycnGiUFo\nqp3sotRdbpZmstKtpQuy6mlaEZQdU1s0Bvl1DMB8hfdcNOOKrekDmZPQqZuj\njqb0Ua4fYEdAYA5HFV4bAS9JhBcc9B2jVvTcA6tYimjgyU1818IIqG27K4Xs\nmGqnOsyLc30NfbnU7PSxuy+hUlOd49wUQnhaExOIbNeTm9PkjRuQj+g8Dd8e\njGhZlMPCxOgOSsdGWqJoeCdshZrcCKILwlD5U3kr+uwrGg1ojVPwQhMbE86l\n1dhLCvyMEfVE10tH2S5DboX78KakJLQXrhZh+MDYw6JqmRh7N0CaxqfB5Ees\njjuc\r\n=sWZ1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYRTI2keoXmogpzvYUumdk8yNrJhZM7pVjwsSyutDaGwIhAJ6HLbJ/JtiStpuw73NcZlduIpeG2NsALHQa1jhc4V5C"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2-next-1621351811-799dd11c.0_1621352139651_0.6094041990031394"},"_hasShrinkwrap":false},"2.53.2-next-1621354332-7167b821.0":{"name":"@xdn/core","version":"2.53.2-next-1621354332-7167b821.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2-next-1621354332-7167b821.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-SsfEZAD/PiQM2KPcnpZCpVRARD9UMSpDY8zl6v3XScqpoCQ/LWhQGjcvSyJSDz8sFlumnzOYaNaEpcIWNyetaA==","shasum":"437e0c4d926629f460468dc8abdfd025aa2c8953","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2-next-1621354332-7167b821.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgo+ixCRA9TVsSAnZWagAA6KIP/1it9rv4Y15r8WJlH3Zp\nCxGYjTkih9IRkFzl4klvUn0SVnJ/dZioBdOQGN9z1BQPRTGnMXa0M7AAKyL6\nRvDAcEcU9DZwXDX8kSvgMpZuc7MWb6XyEOyym2VIoIIjU+EpwXem323DYvRf\n9VAD76z5zntqhY9MtSgyrqt9+xN+BBd592Mgyx+aId0Z5eErn+ZvCDU1rnHt\ni8cM4+8ejTcz00NNKdyTQca7wG5UrD+U83rEoD7zelIYXGTbr2XnYlhpBFUN\nYN2W3qB/nb+VVsmp4eR43gXbUaevJBLRsw/IOzghgLv7hA4dVQRIOF6+1bRi\nMCHmlj+q0GeaFJ0XDegMgEiR3hRn0PNbjfDRwcYvS+cKGqB2yailNS3Ok8b9\nMQwe/jEwCCiLspUJqS+QuZHT5fnfZRphPaJ4EEG3YdUEoSWcwJ2u1ep4Cmus\nP11ZGpwAN7JqhnqWaNW+m2jOflp8KoER0M9MUozCGY9Lsom2VDqKA4Ddg9HK\n7BfK3xJ+CwsZrBW+Qqr/FncujMbfYZptIvIS+wU3kx5UWMeHFOX0W5nv1t+1\n3ds7mDDVA4+iykqRdXzhXAgPM/rXp8lHw41V5ktGuQG+3zcN4l70dkiCwTO4\niXfB7nzvQ+cf+Gxxt1N/2PiD77Qc0JLgHU9nRthGPSmpvocd4hKlB6B9VBJU\nRRLJ\r\n=tvss\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAU3URScEonue9aZB7/H2ymmmq5PNVQFtXYupkDfcnGCAiAxJ//cn4Q78MayI+MEiblm/ykp5Ox2aTkEubpZs4DcIg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2-next-1621354332-7167b821.0_1621354673192_0.9847770969134375"},"_hasShrinkwrap":false},"2.53.2-next-1621354385-bd6852c3.0":{"name":"@xdn/core","version":"2.53.2-next-1621354385-bd6852c3.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2-next-1621354385-bd6852c3.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-hp5fZg2aV5dr5twUhDha8j4qmjpiHHH/KL7n6H83rBt839sb+MF4T6egUFRO83mJVQ7WthwY/f27D6e869QX5w==","shasum":"5b80a2f2ff0f4c93addbd587fe9f354160fcabbb","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2-next-1621354385-bd6852c3.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgo+jTCRA9TVsSAnZWagAA7vcP/1at2AVZYjYFCrJrW5R2\nYR42Fg9JstK497jvUfM/Ka3YlPSkanUcKsGS59avk3MxTfrNAE9ReAM4a3ps\nq53lCt84RImiSQK1XnZ/IAxM5ZNUvztDGT4VhaUYF3VzMFYZFaVHuwGcK5XA\njgzXs+v8xmResXyNaWeuek9owTjMZvjxItsEUuKyFlrn/tGgRNCCZ2h1dMJ1\nBQ7YuqqtYLLDp6h7E7RkaBoZUSCgXgX8UKB5F94wRHvFHgoBEbbcSqdB0Qw2\nQqRMky4msbPQxPkgk8tg1zWeNvSyEGTRH6W7rkGPP3GYfCDFpMWQ3hsjLo+M\nAA7VpQGk1HeXk9reRkewfkx25McCFRFL3gIrlcqONFrq1os9r7A4GfxHQxme\nQQ321+5rC3F5wL67I5R74Cn4Xc4i8iGMl/v0ukReFElFKHLoCJ0+xbpWa0DA\ndnCq5qUmNXLpMokTc0KOeFJxPZkHnc85MUOi2o/9s04ROXTKvkIoA+awGrFe\nbjxjwfwQ5vRDLGnBt62aF0o6RxniL/rv/Tesq83gS5jUzWO4ozGaMDtFHIz0\nokESjqD5pPgD3DQbjCMGM8f5GUNIsB7ENpPuf7ezqPOUnowbvjbNdRGIkfi8\nGfyEzC+tKVUByl+cyntuZSrnzXBQAJGKnNBjDd8GDYBv7T0DBwgGFSRdOoHG\ny0gj\r\n=HOk+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEliVXNf92pBpnCZ1aoYkgCfq4Vuya8d7Gvdja8GASBeAiEAh3Uyv+fEnPX7DZPx+iIS/RQ6uxznz5AhRu/s1FBr/Cg="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2-next-1621354385-bd6852c3.0_1621354707175_0.07265809154675096"},"_hasShrinkwrap":false},"2.53.2-next-1621355238-dbfeccb2.0":{"name":"@xdn/core","version":"2.53.2-next-1621355238-dbfeccb2.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2-next-1621355238-dbfeccb2.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-ybwTzc/J1K0SR6/a/aAjTQYQR3Y500zbwi1iggvZjWzHLoG6kAuWhQEm9t/ZxpkyO65w14sdLOVWL5WJdHtObw==","shasum":"5b799db31cd3d0457211076554742f20989da2e3","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2-next-1621355238-dbfeccb2.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgo+wOCRA9TVsSAnZWagAAOF4P/2xLyO/QqFwnIUAOvpgO\nzmuHCTvv7rboAKkF/FiCKTUOlWJvlxSIi4gP9FZxCaAI48J0vc7wpOCt+HUz\nCbZONIvrpsB/OljldAzL6x9wZBvkoZRCevMEAPxL+eB7SZQI6+A/wF4BL5/b\nhtLVudXsOr8gjh8ns6zWpmsA0dLvFb+tQprZEJ4E95CDWwhWJ7mtlhd4XDVs\nowtQzPgrhJLUH8JJeVT79e4lY+ZSf5O5yeYECHtwJhYBsIN5FRfDt5ReEzzR\nXfk+yQdFB81K/fiGUikfTiE+Wz3XQa0lEmU5ieCUEuHOxV5deOdVOIsas+4k\nwaJeoo/Bmwmr+mTICm9ZpFG3gVtFbxXEPRjmRfnCfbX9jwCyaLbUh7VjETao\n48zTCcieVrXrPtGUvLbrShOicHAz9PzPoXrwjhLtZIEjve+oEtQqBJi9g/TX\nHaK3gcGimfNheojRpComJu5Z81SvzqdE6Tvr6JHTKuLIrUXmp8qIIzJkJiQ/\n6+aXHP4OG9xV7oCdILyFse5fMp3oNNUt5Sx0BOS/t+2E+nESLHhGMap1dtYs\n3zHfvmOgbIPihqECV9EMMktwLSwPLzRUaIwN5A0hx5muKAoCbAf013Gx3pbA\nreXiNcLUsIFNmfvNfBMYEr8YWfQb2gHWTouEc0SExmH2y1+q68PvsKSVfXXP\nOItg\r\n=Pwgz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEpbFt39H9Qy/nCrJ/qXaJSoIvXGWkRZzNiWH21icQ7jAiAw3xPR6hBU4auEgVsoRuM6fO2sLtpgau0La7vBHeJmwQ=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2-next-1621355238-dbfeccb2.0_1621355534286_0.2608805883782701"},"_hasShrinkwrap":false},"2.53.3-next-1621357960-a977e461.0":{"name":"@xdn/core","version":"2.53.3-next-1621357960-a977e461.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.3-next-1621357960-a977e461.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-RDucwljaybgn4JGJnWSU+1y6MitkcxYmWnTIznpnl4+tsrBAnS04YJBEbxRlKHdi+cNlSH+TdbqkSaoB5F2wIg==","shasum":"13356e612f73f45a1c3c0382bd4ffd956c48ecc2","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.3-next-1621357960-a977e461.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgo/bsCRA9TVsSAnZWagAAkPsQAJn+g84ph8VUhtEdMxaw\nbVgnWlshXEkWAEbyUsy2nDwhJhKM/aSTr3cu/pdPVj6Cg8itcW4+EUDj6twi\nlYRKsnrCxX0ifSBJ2j99DyqqzUYFCmTp8us9OKYUTONwRzXvXKY9kpq3XOtW\npkZdUqZsOTgFn95FvJ5b+ja9kMd5eykFDaDqTHIq8oEVCl/FeshEeC9+AiOH\n6pgTh7YaSDEJJzox3N2xnPf/+5MuuWi4nBvX2DYDPiSKbBLzrqjbt2UWcVcy\nyj+pe1Mn7rUEDctxwLtyiWUHEqiUYQ59ttrFY3YVUhtxXuJHrOjs5SLp+hjB\nYTFcwLW7J67SsXf845uo+q1ZGhYSNw0V6hkKL5JSOKwddhfPLsj+5+61rot3\ngEbQuXMQDCrH/Wv10S0w7BxWzEUngudxAXA7ZaPxQB12/NgeTyO3i+xUAEFs\nWwqBQIlsz+AX6sAomEAOdodxHBD3tdrBRUJRTQ2OdjbT7lfXiKXMsMURYgx8\nEfp9uvAU4t/JkG4m+UqGIOWYOi9i2oAhBT+8a7x8Xcu7r0OdfcGk/9Mc81+F\nRZ8AWgEv0tViPvReYpke3xaHNXzeSuZpzak5CvuSRrL8V2F8btdoEXSpbHHT\nxMJ4eKG8Py1FQ7p6ahtFZLwOOiXeBsYfdi+2HacGnpXentEXcyN+/kW/9mj5\nI7tn\r\n=LK+h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIErDFkcYMmk1eo+PTLGH02qUA1h21S1sQ1HJ3d60UhEbAiEAsPVNbDTl4lJITFCbdNutsprV6kRpLQr81JQk7JSK/ys="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.3-next-1621357960-a977e461.0_1621358314659_0.6596231845995968"},"_hasShrinkwrap":false},"2.53.2":{"name":"@xdn/core","version":"2.53.2","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.2","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-sEvcSFE6cY0o2Wa/KV+BGsy62eeVgQPXYu+dSgjo4JcsAu2anl/uENNPyNxNWGO0JR255Myu56pH4+ujG6+z8w==","shasum":"c7122b3852f13c7a5553873abb0dede9ec6d326f","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.2.tgz","fileCount":203,"unpackedSize":676715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgo/eHCRA9TVsSAnZWagAAUiYQAIqNmWFDsyAinQSwOiUU\neHwnJRUDe0+36Jrozt4XCdxonOIYNSACnbSidjOV2zWG4fn/nnVtVYQQkAPI\nLBdne0uBRVVgiZOohCQGj6CviyOy4RtH3ktTgmzvaZjjcv2weBVStYcFIAFe\nyAgNe6+wugBlit+RxSnsZpS2NIRFJyCqfWTW7vGwHgSirdoEasqw7zcBTAK7\neZdDRmhS3ZwxzjzhEJM+FdQyoAGEHKdd4u9Ws3573auG08rvvfxHKqVrj7oM\n/zvvZKSmIxli0buYqKful760YnkJYirDZjOYhgj8/+OP417loqYEuu3t8UtM\n3urAHbmw7KvCR8WdLzbmNSSwSyL9YI2lnfEeQzj6ztTeiU9EdyooKRQrPN6H\nPAu5ls/qBRVhJPqJOigx2pcNc1SiAFCAzHFRA2lM92k5/HaqaBEot+bm59Ln\nVJL7LTtoq6iQqLbC0TRaResBW8Kl3PUsab8SBVgA1rdy1gcDULGP9Snj19qZ\ni5AZE2YffHivrMj2qUnRp5MjMoRxSOtLY8oC4FEcxzjojIaUkH2Js5F8l/6F\nBFUOsPINaq0DXBn53soIYjL5IgJyHMWPP/86K9tIBvJ2C+47lwbs57504I83\nPLhyupadtG/WV1o+A89U8cgPN1wX0kCsGlJVvLMS7VdY1cD/bMrhNCy0Yxrt\nwvas\r\n=Nj/C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxeotU+U+1bCS8ULqOYwP0H87/TDkBywIkXFmivkJmYAIgMQ0IHc9OOd/PWuhYvZkTzOgmazNJD5zQ+EFgplU35Xw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.2_1621358470623_0.3963315723722409"},"_hasShrinkwrap":false},"2.53.3-next-1622643955-ef88dadf.0":{"name":"@xdn/core","version":"2.53.3-next-1622643955-ef88dadf.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.3-next-1622643955-ef88dadf.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-JvlkJfPw9dzl/sGyig9HrKgQ5mCenEO8SETC13fqub8N7XXXL6M3cd4dEEM/YarisoQWjmdISTvLAm35blXbLg==","shasum":"f4422ae357f67fb8511286f93baad5cd77a6dbb9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.3-next-1622643955-ef88dadf.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgt5ZrCRA9TVsSAnZWagAAWL8P/2dPIgfL6uVJ8EDrcSnJ\ns1OE3TO49bWrB95PVse5v2bH9nZZ6G39DW71RfjCO0HHgTv5shMX0U3+z/tU\nDuWMsZQfnDNsuFXWr07fmy0fA+E1r9J9xoNeRU/fCRoz7ydTI13LL+7N+N8E\n4w5hAdDfPzjdVJXTjlOYSqTzDcAFsH+zwoz/o9bptKrf4qc+KcrzVeZ8Jbrr\nsxK7ryiqDgeNFD6IGWM4ZwpghI87zf0FPi8SkfSezXXclR+cnbSSJLQsJCoW\nRZGvLcsAjVt0fTN9yp0jKnUABQMyIQbadh/m02uFNjeNeIW7fhnqHA0jIeP1\nw8tpMuPgL2aARk9Okivu7+NIE+rYSHSO9ISFN1llZN2d4fMnHUWAc4nIfw6+\nNoJw1FTmUFDaS/D+U55LNwb2Kvl33LGAhaMm8kk5J8dO6yHfSiTzCzzQFL5m\nOCsiCcPpx6QgvVpmCQJseR5qKGgilq74kwgJ9U4zNo55IaarSVc3CvF+Erwo\n0BN+UpuzvAM6AjVHC+F0+cxBYnEAH3qYadsSOEdeIw0bNM+oQ4RDK7052eLV\nD8QPwHJQQYE5wuTC22d50A5VRommMBkZ4LOh1SfV0QRtBGbUu/euoytBPgKi\n5JIOiM5lqmf4cLkj4ZzGHTvsmZSgxD6WthOcjO1OF33sMe+SEOhPBHNVkLIy\ntHW1\r\n=JKsU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICN6GavBYKBacGZ25Z3KAJsaLzwJNaBV9GsR0bUSVLqeAiA/BnLL3wdC+ipAfy08L6l6CMEiXIVQ+SuPgPxOnfE/QA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.3-next-1622643955-ef88dadf.0_1622644331404_0.7532287432924607"},"_hasShrinkwrap":false},"2.53.3-next-1622645710-3100daaa.0":{"name":"@xdn/core","version":"2.53.3-next-1622645710-3100daaa.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.3-next-1622645710-3100daaa.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-9XHpHWJvC6dfBZWsNfcTdfQJpH9Emi4rvGfoJNoXN/pxffB7384i0DQjjprv29ejuMtIDhpu6S7otduRRh2xAA==","shasum":"5b2dc330f3873ec7b50eaa2f02e9b01f357c1183","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.3-next-1622645710-3100daaa.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgt50HCRA9TVsSAnZWagAAUugP/0xpRm6GQyq8OzVPCAA3\nD1mfwvbAZBZSeI91zU/dV0JIbbjcZLEy/ouedinK4CkU2JnKVBwfknlUVTDJ\nqHGWqWyLzGQvTbyZIuHzWS33WLkLnQiIHURs3NyFD6KQ859Ryn4M6TCTC4oJ\nKGKpS4nO4hftDu7htmC0XUlqw7nBOZXHJhYEwzUw8LOKEwcqcfkvs74D78jX\nLf1sMdfCZHIrRit9RwpPevEwj/EiToyknyctwTdvXlNGGI/iMGbzR0huOli0\n9yMCl4LBovXVYi7uCmve8NLFdtF7D6u8m5EWN/J88T3P2S1lXSTVexpwi3Nx\ndjDrZ+cFSr+uqKKshGcKHDyrXSIepzfXKuLZzlQ0E5xo0iOrx3pd+NAhRJnZ\nNdfeg0rgz5NFTyCWuxT0N229tpuo4hANa15Valfe4EipXAZojOIPQQB8wNag\nm+rcJ6R6PWoTjVq9CUHbMr2xFLY/kUcvMlu6RwoHz3RSBOEhJO7kr5rrSrUi\n/uPvVbw6TTVTwvQI5T3OCJaFHf5GBiJsRQfi/0Tee4odb4UX2yi9/BGiBTDg\nLkBJ1a4y+BKqtfioisL2GBOA+dNKMyFONgj7LgeEK0W7gfuHPqrclLandbP9\n6G6Z4rNBj5GWZUhY6OQRyCKsKQ0R8pJ/fN86KorrKFYVATdeI5hDSosaJ6m8\nCa3Q\r\n=bNi1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFGJyiZxE0ppLlyUKUO2gwFJBr6SzRVDT8ngmLlFEoVAAiAMQE4VxmO2KVGidiAhBuJ+/n7bk9z4MHHKxQXzqyjhGA=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.3-next-1622645710-3100daaa.0_1622646022982_0.18349001956973887"},"_hasShrinkwrap":false},"2.53.4-next-1622645785-8c316968.0":{"name":"@xdn/core","version":"2.53.4-next-1622645785-8c316968.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.4-next-1622645785-8c316968.0","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-4OdFbMIatEtBo0EA+cEdzJA93H69Vt+whWi4+pCoAlogvLiMPN5Z9Y6TnnfKTX2D5y0JiwkSRQo5r5NrcutDpg==","shasum":"2b82c4650718e57832bbabbbff1c1bebd1139357","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.4-next-1622645785-8c316968.0.tgz","fileCount":203,"unpackedSize":676785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgt50vCRA9TVsSAnZWagAAZ9oQAIHTTWscpJHN/PQJETg4\nM7GCvEEe6tcvFu2Ee3QE4Wdsbeck5zrmj1GSCvT+9qtFeCZonxe9HhGlSh3o\ndzM0OGWwLxjg3upHNcebKjLd5oEbFHL0e9GdleNuu9/3ghg1JjJU+YJC36Dm\nJeNrSF3UxYlSWWXzKd73soje0Z1+PLWDHAow20IxO+HMrUkhzxUh/877Rvct\nhgh7u6sVdHAJ4+u1cvOQIcac4tDB+LwoaPtyk14FI+WtIC2Eq/Q4dGMYyHMQ\n6HG6BDFuSV7yVqHTgBdomd5NjF8V9Z+coShkijkTZCcxY83r9iRFahp+rm2m\nVOV6GDZbV9fvEVwaRZSXwznrwhIBlSdq7lfBDwhGv80r+VmSM7EtmoxD8X+T\nySpXTyP5ovTv0/+aPUtpEceCam0ggzMrGR7OT3guOgYiQuQuRhJDlLyJ7ytE\nijX+3XQI732QdmTA/2Ee/6iZRoK0v7ThFq0SQ0miB2awRWdpOdNZp6AbEy9w\nPXXt/LPgaUpLJNLzDPPiCb2Zk6Lu8Xu7NUbFZhjZ9kJrIfBQx0WQZ/8xj4rl\nCKEGICIU+jNVKOLlR8JlPnwE3GiHedrPY1AJY1kfakVxl7PCwFDPX54nxc0A\nAyfMln/pRkuyJIilVd6yEr6VGQJX9Mg1HdgDc2dJGRL3uD33MpOTQ7LaEeRT\n1MCa\r\n=USc5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCa+aACw3dZpX8gx3IdAdwqEwI0NBGalHP5/ndmju8j7QIgGNMIDHVpm6NOUsgpgcrq9Kd66zxws8BxS6c8YiQC2Jw="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.4-next-1622645785-8c316968.0_1622646063403_0.7138262098653252"},"_hasShrinkwrap":false},"2.53.3":{"name":"@xdn/core","version":"2.53.3","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.3","_nodeVersion":"12.22.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-6bOE8Yo9uAKBM05fdXnTadbooQ74HsimDpxYe1a6bengpK3V38E6QcNiZGTTotjoFdRtHMe5HBvHZUphE9Wd4Q==","shasum":"a5052fe7c5a547d66e66d4bf916cce6e5e0b3972","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.3.tgz","fileCount":203,"unpackedSize":676715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgt6AICRA9TVsSAnZWagAAy1wP/jr7+wqSndZDnGIPoesR\n10I4rxwgTOq4dCjYuHwsi1Rzv9q6xUU/t+6mcZ9RTOkOT2REJK49s3j8SojJ\nlLt7fexT8wTNxxhpI37r1y5hlUBfCB/zj89v3MwFK1LvxQaY9W9x1N2k+N3J\nddAIyhopRNwhgJdkK1zDB+esEQ1jm1E9NlUPjf2OGBVWTJtDzdZpTLmDgqa7\nlZ516abqNL4Ya2X/l5D7tOv+s5MspNX/3mSqZGLOPRRNsWSuv77TA0I4JOVE\n72xgt5W9S/krNVQRT8wZ2nNRnECzUyG2Q+WHvrFQmtkYg2faBSfpyFF9YQoB\nzhu79hGQtrEMkfC9hGg8tXw0l8U5MunA3s8Rv3dkv6qFVi11Y3XyTkPGfDb4\nxloBLaISfyQaQNuadpVJnIn4OS4cFAPaJ955tc/OH2ItyuZDoHajOStI0SJH\n/O15nmxeAhaigXKeWTac6jogm0wE4v4Bgk3tVwejxYR/bJwBDXWnBm9PyMYv\npLA9q5h6wM4xITdBFua0Pu0RRrGcSYXaeoW3Yu4RtZgPx5xwMDIrJJWO8Civ\nNO62El3gxSGIEkuIwL7Cxj3yB7N9uvtdpjjc4TFeIdDP5Q4jSJ0BW4CNH6Al\nMqp45e9ey7IDO0Ce5hxzaYMigosQ+906Oi2vcqOK6Ju6VH2BhV8i2l47n8CN\nJ+Ie\r\n=hTwL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHpMgWd0vrX+WACZBNVg6iGvvcYY5ynmt4JQcIBNDH5tAiEA50B/AqFuWOzMJaUK5iU3b4SEZGlSwVK5CjRxSBMhG60="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.3_1622646792550_0.17417963495302957"},"_hasShrinkwrap":false},"2.53.5-next-1640891080-513b105dc.0":{"name":"@xdn/core","version":"2.53.5-next-1640891080-513b105dc.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.5-next-1640891080-513b105dc.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-YT2U/o6opd7ZMWRpZR3JDe9s2JdBRwuNS4LV4WCiDlkytFyk2lBhQr6+PKYs1087kpRF3reQfAmZ58h0Wq6VXw==","shasum":"c11fc03106be942759c768e65d62e1a81e4a02e9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.5-next-1640891080-513b105dc.0.tgz","fileCount":203,"unpackedSize":676787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzgQTCRA9TVsSAnZWagAATBYP/3O5vMGzzXaEjij89RA5\nZJhR2VFBzF8WUKAEGAUIV6PmJlIeuDRCl+6MDFJItw7nTTbNR7Gs3sF+TdB1\nyZe/7qAw0Op8BCbKU4SeLj+2w3S5ON7o7cvIuvSEn4p9YpRkDe6gk4SI4oOx\noICMhPJzCWPpVi08uT0+5cEOjeW8J7MtlsOcV421/8qFHxyVYj71jdhldTIO\nxL/hc//xxnZ4vZlQeEiZ+YH3HxomhuGeFmgTYM/yyEvIt7VjIDrXqTVMfkuV\nnS3L6uh03R8VsJelWiHjAGoz2amnavh5TAeX1e+mwu/qvSYHyzjtss/YhkuB\ntst0MamUqxhd/SG65/PBupUzj+VLVi254Lg88TsIhH5bku1+xdi+osPCkWFa\nW/uZwq+/xcdG0bxZIEbP5chEf+9nOOw9lqpX3oe0c2PEaBWoBQSdkfzf4NZF\ndyjhKWgYDB4+eWJ7k0pb63Nz2qt2YHlBgCfSPgW7h2a0f6dKWDHQfl6kPIa0\nLx/24jFjrqQbu105WOpDgCp8vvJC8cOnyDCJ+1F3jvijJFK5YtC0irTs6JKO\nx81Mm/qz/4nSFptUlZkyLZgyKaXppYOtdk7xo9RsLEo7vV8IcldgpOJnt9VS\ndL/QUfh8uYS66ERLR6O/BWS5URpSxhe0xPySUCuD7wwuSCRSflsj1Oc8UfQF\nbiXy\r\n=F5kb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDmnI/sCNsTrYymwA48S+ylqT8VAPDxdbvPddB2Y3Zx/AiEA2OsPnqQ++6DamW6Lon8KZr8ojv/RNIO73zvSHur7csQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.5-next-1640891080-513b105dc.0_1640891410960_0.3124936036372141"},"_hasShrinkwrap":false},"2.53.4":{"name":"@xdn/core","version":"2.53.4","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.4","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-W2hDfNEezma/ZNOpV5xl7Q0kNzY/g8KFtSTlncWL6GlTLfcvFS9PzD3EtcdPRHmTg2c5ikhPB9xQTbMmq+kwgw==","shasum":"d0231c7da59010b0e46fb24edbf712a8add8c6d4","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.4.tgz","fileCount":203,"unpackedSize":676715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0JnECRA9TVsSAnZWagAA6e4QAJ7qOKba1yXA6yICLdtt\noXogFywFgR2pD283+J4ppfCSXXzx5KDA+q6N2mAZ4r6m+RrdjN7sSsXZPjFB\nQBkzlEKTPGOTOr4QAtOMcojz30OGVVTJcQG3ERxpD0aX5x9MDq2QulPmYjNz\nwOVhZyC2KU2sC2wHPYyJpKXHkRPCoLpODTkDvYmhlm+A4hqJrBLnRo+bYj4E\ncbLXqqU6WXtfi/VLjJOUXeybmbVugh+vsp3bOiyWgDQwYKOKTYdUXl5CGu2n\nHfwnIDLF0CJ644L14qJZKVA7rxNRFaSx5n8B0P7qdHVZ6J01W7YRbbnuP9q7\nwir+59UiyUUl2mc6mXWpnI9SXMaY959aAjgf27vB7+OP0Bm+xmsOrsGrYrpo\nlvNaqPvhwRccXWeQvlhV4k17l2KEwG5wDQImsV0sPa1OCRgbGGEbKiUkovcn\nt+SfKanTUIKTNh1W66Mo6HtIrQdoKZpgr0f+736njaWCwldkxel2kueBDVV0\ncwz7HzL/O6YG/bX3W1NgR0Zd58YGdqs3U0sW7/ERgybF3dqePblT6tv9KPfQ\nT0nZuLuIwsi3PPnlw8uEXrotHhEPl8jTc3Ob8Vlyka+YXVDixIpQ1C7pbs7f\nlartIBjqxEwzsP5v8lMUVDUanbCc3sckWqzX0gLmFKBH+4/UeQBsJZZPJlHA\nB7eb\r\n=7Y1p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBo/2sQRNXazZy+8AO0Sns/UyLHW0vpFBCFheRG/XcFgAiEAywHewchtsLv8erwEcrDzvHpND/wFjbR8R8Nn/xAZMqI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.4_1641060804698_0.7771010827304174"},"_hasShrinkwrap":false},"2.53.5-next-1641060563-3bc9c3b88.0":{"name":"@xdn/core","version":"2.53.5-next-1641060563-3bc9c3b88.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.5-next-1641060563-3bc9c3b88.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-ogsiP5OiMEK3tmJuPwC2YaJLWDTcxXrhVHq3bKcz84kI7FNhZtw2JEgB+24QIkUbdWmCiDdqgoKcFN96ngY3iQ==","shasum":"e67be88571bc321063f33fea0070cca3bdae77c1","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.5-next-1641060563-3bc9c3b88.0.tgz","fileCount":203,"unpackedSize":676787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0JnxCRA9TVsSAnZWagAAdhgP/1OhF9sScpbdbYgYHgSY\n+IwT4QhMRWpbLDh0Rf3ehdfxNbYHiDpJyp/wcO5U57ql+XPDeObWfY0rcQ3B\nwZm14iJ3aLqfw8qjIKfgn+aZ3tBeHhlvoMwW90gQ9416sr5bVDoNVtGOQEfY\n0HhA5MFNfG5Efzn2sYI4kVR3bGi4Kd1W3sLupG61VayepQ1s6upOFJHkOkLy\nYx9e8sacJAmof9fYF/1NNUA101K6vzaZ1bFCG0sWvNEKSEDeJ/5xiInGi2Pw\nl3rqT+iCxs3v/jbEC1Jb9tssAvJeL5AqyWLxyV3hLfYotqJ7NOGbWWZdZXa7\n+8LEzaB+6IoKm7xpGpeRLsh106lBRg4upoW8LZ8qFpvzZActUTV17Waj5F6W\nhgfrFazDnJo5UF3LegU11EK7XtjGPOBVA9RvM9tEWqj0bR7tlh9fh3vFccdo\nyZcVm3E3i2a0b5MUleUgRctkil6PCAMTDXkxbnu0mYVzXYg+jYf3fN0blpYG\nbsev4K71nvWTTXNuekzOqlNdiRO2CHvVtO6FyI+fpMaTfpVoH1hx++Gd1KDX\ns5RvRkd2LyntPW0BRoC34o4ZaqVJ6en+DpvmmWD3KdYVwq53Whl/TA99Repj\nszxTLaNltI3fBPYQkylXVHTq2Y5h/brUiHOvAxeRmSs4x6/gcLyBSCZP7Qt3\nudxC\r\n=xJm9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQCBX9IiuY1Yfw9Jq202AhR7h6Yug3EHtrUA6wUC+NRAIhAPIHxF0dJKdeQB9FAlVEC+Q7C3KUwTBaIgy/Iig7Eroc"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.5-next-1641060563-3bc9c3b88.0_1641060849478_0.6184752289777502"},"_hasShrinkwrap":false},"2.53.5-next-1641201434-873aac607.0":{"name":"@xdn/core","version":"2.53.5-next-1641201434-873aac607.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --tag latest-v2 --access public","release:next":"npm run release -- --tag next-v2","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.5-next-1641201434-873aac607.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-lT3u50CWS0lqS6whlPTHKFgMVSSOTCuODZB3nIZcTtjfCdfmBPL0lkpVW41G/NMG62p5b+amnPEdySx/an4m6Q==","shasum":"36ec6562a1ad29c7251cd6778c7e51e76c199908","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.5-next-1641201434-873aac607.0.tgz","fileCount":203,"unpackedSize":676806,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0sCbCRA9TVsSAnZWagAASfEP/33AysMGXpwxfrqPLjF/\nQsbEeqBiu7R/Uogd+fqjYDNgyVDcC1CXZAxudeiZh7z28w33cLDDfvCBvegQ\n0W0IOMM9fOeefMlg/PObiaFANERtGpjpxCKFMvlpmqlaEaAzTUUHdki4d7VE\nh9Hu9hZ40krsZ7jW9MWrfhJ4PuLpJV+p46Ye0i7iz1Vg3U2TlraowfNSvFcm\nwkYppL42ZiNajVDaUg9og5igfRo5euwNiEC55pgbNe0vEnDMvXlBS2Fl7zRs\niswmviXrsuU47ysRv5oFKI0dtqBeSqSkphftMrfSZBo7hc8VnRJDSI2Fe8vi\nlzQD9bHUdfH2WjfjOom7pFeUxW4DeKodG782m+CRd1Vmxv7BDWDIuaAN7QzI\nSmDTNebonVzPW688aW9UCRyEt6dkrKucpwkxHseiO/wdv1xieEu5ogwKkMH9\nXKaN0S/8XKOYa5xT6gEgL0ZbKU+aDMgTv1OZNhv14q2zmMxAyGDrHUo8eALR\nqBIUOwVeUXOhYa83odF0mK5XFJ541KUGBTFyu4QCASgwMxGyPBnHwA8NB8Z4\nYdy2EGg8Iu9hTibNEEKugHUDIihYEuCjLU2VGTFgcaa3GG9xxEiH+KuTHFi4\nEfxjSC8pn3QrAdkzg9ru0jkM2Rr5ZXtSpo4IeQAKNLVw7yX209F7YUmg06wf\nQblp\r\n=QGIa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAHWwWlAwfSRuyunNd1vcSi75Nhuqayo10Oy63kQqVkQIgRJS9vo7SkKhERzD4T//lQ/sJL5ZoCQwuEIRJDg9HxwI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.5-next-1641201434-873aac607.0_1641201818886_0.41594063287564587"},"_hasShrinkwrap":false},"2.53.5-next-1641201537-c1cdb4568.0":{"name":"@xdn/core","version":"2.53.5-next-1641201537-c1cdb4568.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --tag latest-v2 --access public","release:next":"npm run release -- --tag next-v2","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.5-next-1641201537-c1cdb4568.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-A69ikK6c6Qqlop/HoFbzV+0b4VqUp48916TzSng23Rbpn08kwv995ZO25lj4ZR+D0WoOhMlW80A2j/yZKJFjcQ==","shasum":"f9ad2ad15ae3245976209817f664831d14b17414","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.5-next-1641201537-c1cdb4568.0.tgz","fileCount":203,"unpackedSize":676806,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0sDICRA9TVsSAnZWagAAEGQQAIjq3cK7vtmKhJp9HyiY\nc5K8Mfu5DU3ncJSvLksW87RNAV5GG6szgvyDXO6Shs7QDikiMRjl6hU72qgW\nnB1sld7Ct23Zwqjma5Nhl/YxjHnu9ARGECt3954qMvBWROz3XebhXnn6UVsj\noI2ICtvPUZsG0Kx843t4x2wfFbIeClqOXJnauic764BKPClxuU0j7iUr0M1g\nCfmXpvAyPzYZvKUsydPFpUzuQnQqeflHjQ9nHWzQh/3J8wIemJIjZLIuBg9B\n30ECuuJzELhe74zdVoPYxevG+YAT/lJ0mbmb/hRLN8w395g3aCm47WfuZ8f2\nD1qVwuu7ieSEEBzycQEL0ALJgO8OquqJdi016T7UfygsjlO7qcnPlQvyU7iK\noV6n96EjO+K+XvB7Ae7iTAu7/aTnONovMQrsfak59SJVGvode8Xxt1mDcLB+\n3MQeBT/YV7d7SVABZCyqYardZQpTob/a4SkBmc/vY9PiU4PTOUOZtRSOXus4\nh25cnMUlwVKscjScNdiZF5np/EVeVeL8Bw5GK2FhUarLtSe6zxTj2mRybO8A\nrWqkITlmTC3+9u2ndtlUHnCwVJSyzo7n69YfQ36/8tteCGn24AgNLVt33fah\nXK0uJckmGEUtLyDOnK0Q6Dq6R/wcfg2A/s9+NJJYNd9JPGk/6qnwGloya9o4\n7NNB\r\n=HVUv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIENu0d2gzNo2+02M6IaBfFHzXt60+B7y7pheHQHB3bKxAiEArRHu+aQoQujTuccZQowHbtPBo9mJ+IF/ZzdUwHdxQ1Y="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.5-next-1641201537-c1cdb4568.0_1641201864016_0.05228381884922162"},"_hasShrinkwrap":false},"2.53.5-next-1641210071-2f979ef07.0":{"name":"@xdn/core","version":"2.53.5-next-1641210071-2f979ef07.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.5-next-1641210071-2f979ef07.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-01hokR51+eDJ/KL78pyUVnSBBTwh4T66Vc/fg1j3A3MWegWzXOsGM7dkWyk8k5mi4BC81t1UOebqiywU0sjoJA==","shasum":"4edfcc49549e4d072db74752e670b51fb71c6e6c","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.5-next-1641210071-2f979ef07.0.tgz","fileCount":203,"unpackedSize":676787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0uI6CRA9TVsSAnZWagAAUMYP/iZHbBkqRbcpoKWnkvKI\nktbgtzhEAmuOpoKWqcxbnH/c34Qvkdt0NjaRFJExghpjggAPvDoEa7PgqYVG\nBucdQlPRPmCW03QXyhgJz77gXojG0EaFs7FqMfy9insQJVM/Z0u6V7T2HP7y\nMIc78poHsLXpybATB6tKCx8NYEsUqtwQPQrjoSpNpgFV/G5HnmZe5KZIBNJC\n1U6FGRNGLg5wHXK1IfjL6VlJI4S7aPjPLVIhA5eQluhROAoLLhr4jM/yOH4I\na9o6ZShwmG4nVQHNjSiJKikNXuo57Nh1IUphywjNKDF7S+kcV2FqHQAi0F2p\nUvON5hMVMN9h02bWmRtoBc2ezGdKMOnySTd6gVoEPdPrHEhFmuEJwgSCwWUn\nlhrA9MTG/CtzNTOTclT4gBHpcJHn2wUWsXFIAPfpAwBlVTSA/urVE7GUFxUX\n1NXq2CQlNdUGGKo6twszHsCIMgdEbWWFha9Qz1IyDFMSHJioHnv4pr+9T9H0\nykzGjgzUtUTxTSS5HPW8W6A7a8v86pLK6tMfHQDL8QOTCBuMtwLYaajgwtgH\niZ/9JgUDQnCYMsFPmt0VeMPiRxQQOan4H5wn27KWIy0lF10e5ioMVwp9MJ82\nqTRGIk8Oec2r12HcADAq9VKfWw+oO2ssK9RQTdazi29w13QiRMXqrqfFeE5l\ndL2i\r\n=rfn1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAV5C4pRZ5TSo79oD/Td0K/7HEATW0rZByOZpQ4MQgSTAiEA8H+UlnBU2QL94afTH0qUiokUPunk9Y+YropuNDe0BT0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.5-next-1641210071-2f979ef07.0_1641210425843_0.10004861613027449"},"_hasShrinkwrap":false},"2.53.5-next-1641219106-ff2936ac0.0":{"name":"@xdn/core","version":"2.53.5-next-1641219106-ff2936ac0.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.5-next-1641219106-ff2936ac0.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-/gfQQc4PWIzAW819X8ve9aF6r06yzycmwgveJmJ6YC58X++rk/tqHhBp4LNeV4uQrt6lXdJ8OobzgoW2PMkrOQ==","shasum":"6dda4ad0c93174b990c5f1333e48700bd997f5d7","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.5-next-1641219106-ff2936ac0.0.tgz","fileCount":203,"unpackedSize":676787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0wWuCRA9TVsSAnZWagAAw0cP/08QP78yNLb3JuSJPXBD\n8cHCnWvTafBD/z8c1cM9t0BMNfbHa7tNaghorlumOKPaqfWKH+rw+dP0DGeB\n2sf4OLq+XPENx2GG+6NpRObdNAgiGJfWfN8DsVMeymN+EU7QCNOYeGjZvXAt\nFvgbESJtb704oIRqk4Z41OD2BySxyj1Ek5XYoV0Curcwp2NSrnjEIxzVnJS/\n4oaawWdRb+dcgAxZSplYd9WWxfMk0SbriOIoyRUpsWP7GX2LH28KmqBMSt/6\nSycy0K/vPm6+FUVRedltCBEVGVqv47pEN6sSGLCbC4Yng3qBFvXJj1plzc8B\nbBNTO9yNw+8IJltO3um2XM7ufVu0Kej4qT6sF2Uq38Vsx2Hdixe5pPWvUUA9\nc6wfRQV6SBN9RcY/8r8Qu0bcedVNFyvY6l8tR5MN2Kr+R4N9zofda7towWj4\n5a16IfyFkf5UXr4V/boAoiG2u9qYtfpr+0VxwdGA1CJSc9oPTSpIVBLlqsA8\nDtdc3rkW3N7/ut2oXYk2ppcS2mAIeJ+ooTjKxQs6axbX5DxV7sZF9CL+HpLz\nI7DsrvrWnIwCThHAauUwRgTmEIxRBARmnqqxTzNFVwwg2zJnAB22Q2Y3GkhG\nMVBGjjoBhvFVzZXboJlg3w/aEZZagGUk9CmvJnIm/MPC62eW1m4paeQoray7\nkcd8\r\n=B9Uq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCg7GNhXVYE+lcz/COjgTG+RAFwkhb4AsN/uTn2lyTzyAIhAL8NjbJ1GAMYFUJAJwWb1uQb9hlTRkuIodI/pFuXZzgq"}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.5-next-1641219106-ff2936ac0.0_1641219502594_0.07549827236548379"},"_hasShrinkwrap":false},"2.53.5":{"name":"@xdn/core","version":"2.53.5","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.5","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-dIJ5r9EAcosbeygHfUsrkwOmvAXLr9mvvGXSPcwYE/3I3nL7hGczIz6tZVk6NGcVmjhh2rbSETCqaX3emvVPPQ==","shasum":"75caa82426458eb774f72cac66044457dbebe2b5","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.5.tgz","fileCount":203,"unpackedSize":676715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1cEBCRA9TVsSAnZWagAA0FcP/1XUJvE/PT6ALVsiUFG/\nGblox6At0tvI4atMKZ/lHDRH/U9XdP5GTSOMwPdcSf2egJ9YlqFqCpceGQb2\nHo0rPKaOHYIgvJXJXYswBpzKroZ+7ypE5KT0go2SF/jfsm2ImsYJQpPw8ZUY\nsFXsvMLwEefvosXbkyM82b+ggU8gWZEZCqWhTOOJ7yWh0tK0Er5yaNfN5a2b\n+dTPMJSJ5sb0/m2XD5u7EUzdTZQlO+RlCtdktS+r5Z94vRObG6qV174wYx0l\n5mW9d3uWHCCRh8MI/Funu73WE+9asPsg4WqF6bckr9NGcDD/Kkpl4MOec5M9\nfe813xiW6ZzbI4k2ZS0+nuWQQLW6kMTgNFriBzhqyjt1pu51M6npXtRfL3Te\nocDhFGLc6Eg6YbSBQKN0raH7La1bF0WeBeqBsd/CUBid8v9Usu7VUKDmo1p3\nQRo/Sf1lXMwgtfg7i9UE6deaUo34yJ77KOy8K7UotXpBNaMQDSpcGOzmNA/b\n2s0ycf8DvSN+SZwdJ+ZqKJjd0kR//D2NKqkQjH+OUkGsSqi9UDC6/psyOWHb\niFhDsq7Dp+1piDX4dEGv7V3Clor+QtcELIroYUAzhLnw7LsBj3mg8/sIlB/Y\nvl+AMKtG9mx0GTHkSt5/ChCF7Z67HKL1ktVD8F31prqArUq6opOqP1hHYP1j\nM9VK\r\n=u2BX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDyuMB/wTIXLQPpxY7inbOaectFcE7ym6V+iTseKOTkHAiEAo8y10hyMr45YTPex/gy4YRS+b9tLGrV2J7OFR18g/nk="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.5_1641398529044_0.6178483417377332"},"_hasShrinkwrap":false},"2.53.6-next-1641398325-01bf686c4.0":{"name":"@xdn/core","version":"2.53.6-next-1641398325-01bf686c4.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.6-next-1641398325-01bf686c4.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-/JnxaDNk0Y/8h5ri0f8AaTDIcaPp7WWj9jSPIw8f6L4CUGOyfQk3reiecT213vI7Gn4LFwy6wCph9M1L1+lDnA==","shasum":"43b7d9016fed1f4445aa2640e1b5e30ca1ec491e","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.6-next-1641398325-01bf686c4.0.tgz","fileCount":203,"unpackedSize":676787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1cFYCRA9TVsSAnZWagAAg18P/1lEfOlGwLGmaqyvHF4H\n/hqZ0Z/jpzr7AM2aSpIaFTUMo5t/TqCsHqgoJ1CN2NyCxPNb9+SNSav+hBP9\n4T8g8ZiSyYrREqHCVTjJ9S/juxipp/ui11YUmKdsvItMg45MhC9izKUi2TRv\nvR0+60HGySQWGcoLlxHZDIwYaMXJlWi9XyGvQs3o0I/PtXfPihvKTUGL6V0G\nrZ8fDwAERpvKpU6Pu7yM0Cfk57LOovcBeCHITkrdYhF/AgFvjEeUXrBl+tHd\n5Gz3KfRbw6GeJZrxE+B1BT/zbKwkvSInGuqppf6MVqoLkghVvz/MGf/LZpwI\nFEy3k8fq/QUt77KIOJ4aoZPeVQ7O5JI3dmrsV5cg/atiYexHzasTCliMcvA2\nB/WDZKCP/hmQsK4zRiXdVYv0UIJEl1pRU94q96R1EYB5Xns8W9hcmsEaPHAb\nyeF30bTNiB/XOimYYUpiog2N7cSyWtfOhCnQQdwz/k7i+Qwysi/1bFi2poG+\nDFjE2uObz9SslsRWGiYJwaEkCbjoNPepR/YqRpl96j00XPeRNgX4+iJZvwT/\nWQ2WUhWDO0KkhtliBsyfHdxzehjSHt2/xXoiJBBXJwfY9QQ+6eUTcnQlRmpD\n6z5HeGoO6/iDGfKoWRQDQkkEqd6yStdoUsf0x3K/k51TyQrT1BTDQMTKunB2\n/Kcy\r\n=emcZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHwLNPSKsmZQl/m8F40Km63DhNLJIF1iBpwp1NyAIYfmAiBdURg6uPErO+lhgZPwSS6DRtepzBvzd4kJEE3aZrDAUg=="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.6-next-1641398325-01bf686c4.0_1641398616287_0.6058623525493947"},"_hasShrinkwrap":false},"2.53.6-next-1641892929-f436f56da.0":{"name":"@xdn/core","version":"2.53.6-next-1641892929-f436f56da.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.6-next-1641892929-f436f56da.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-oU6vzDK+QnYCIPOwWHMsV8CJYk6/eQSpnz6NXRiK2q6luIC9YnzvdqjJQgiAkzd3TQdhiirClEGltoeo8zB56Q==","shasum":"5fb7fd19abe8591921cb05fd12d83495097d2f93","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.6-next-1641892929-f436f56da.0.tgz","fileCount":203,"unpackedSize":676787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3U15CRA9TVsSAnZWagAAZjUP/3PCSgw4fJHvEtEnUQyS\nuwkgE+JYQH+fnnZhXqog73MUZlCNb2L47n/frgS75ndcbNX52QNYu5W713vX\nCJ+um9RAVrdMYE157uiWYTim+P0IH1u0XCa9HxgO8ylMFOPagms8ShrIEGqs\nyaz1+dKIGCkyvdGf4fk9o2xwxRfvvFkIFQv/CgLg626QQrb88qC1nXc5tCBn\nMzdPR/w3o5JXjHqH8iTIAiGGKOqpl5S4QVV1zv/l25/d9o0Ii8iTUnbvMtoD\nVEVZbzw03rjZewGFBxE/XN7/YUPorMzvDVO8EzzBzf6593jIfQ2MDSLml4c0\n0IrjDwWjfoMqNSfV8SkUyaOp8HMT3UXqUngHgJsaUxOZ1YyBBfRNNiWoCqiV\niRl06FnQtXcLrXW0hgXz3NusuLphVlpLinj4OCCpJDlrdyNx/km3nWBW+JiD\nR4DyJuu6u/qzbaYh149aQYzUFm7NyeJZKW+50zrWGt7Y80xuXQpM+3cgfvyK\n6JbD1cj0aOtL/CPv7IFUQ79c2qr3D3Bu4L7KOUjty36tqzqHoP3K8gwmd1wY\nEDLKYoNbh+Zh3pIRsz5md+IAKubvsViJJwSQjScYupjQ2CdvUvaaVNz6m/sG\nxc250NGAJm/ZQkxm8vieXEqrCyNvrKKKsmveUpIf2p3xPPzufGnWyP2xP8ks\nombi\r\n=WXMH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGLAgTqFF2czrQtN6BdxrlP8NigYlOS4q9IggPRFKu9PAiEA2OzMkg77r3ZqiqKAoKRwLKbFRh8kKzf+yhYDDY+s8Jc="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.6-next-1641892929-f436f56da.0_1641893240923_0.2999774883462192"},"_hasShrinkwrap":false},"2.53.7-next-1641893132-22be18a83.0":{"name":"@xdn/core","version":"2.53.7-next-1641893132-22be18a83.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.7-next-1641893132-22be18a83.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-6RHHoTBXWqehLQYMNZF//UvVLDFyr/XjLBskrSSYDWh1mwv5yCbqHeesacT349FbHTvxa0LfIMZqEoXU+GkDNQ==","shasum":"0002be39800bfd90d1ff7c8a6b2ffff33d7e5e65","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.7-next-1641893132-22be18a83.0.tgz","fileCount":203,"unpackedSize":676787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3U5tCRA9TVsSAnZWagAAo+8P/RzDAOUSiuK8o+WlYvRw\n6JdJIgjmJ134wGxm5oL18Jyj510RrPtvPLA9I3qiCxKI7vZmTj89mWhwBVum\n5SoKOHZLGfqri2qJuBVwDzmqiq8Z+x+l4Uglbzl/OtF3exLVjPsCjDLzWleM\n2mygL9l/P3oJCFdm4SI4avBoOFaCeBJb0XkeIrjLJr1/+oY4W7jr+Bcqc21N\nHruzjiASpGDPKNs5+EqHt1cnx8k1AnbHkAYR7sQhUOj1Sr96xRZXIZY4yTr+\nP6gCv7sOJ99wXrmd02O3HtE9zXvgFTUoWZmDHBLk7v4B5FRvvrs2J5M9E3HN\n7gFJu9/PJN5gBPA/DZQBtkbFjmCUIsvZs5I5gP5DwNtQ598erpEcV3C0jKAM\nVD80QA41qAhiusWzCEkqPGRbHizciK4O0wqSfJ4LtcnATGUBeHr8BObuKefX\nfyyKCSBP6vGySaaa0ljpv5/UQXDDq1rX3rlXlvI8zW+LbYDFwRiCtBlrFfby\nzKdbFrWVapckxGc9GQeXPgL1mziCLEweZK7ebmIVTIFWv2mVQhYLSZM4MPFg\nIx/u02KCZ3v+yOp/J4HfKahByEKHpKBbCJQyXVMM9mXGgdol3DfWKioYnB3F\n6o1B9KtznPqNPdMRo4ie5zEW8afa3IYYtWBlqjktggO8oZUuCdpj+6iPoSlf\nCPAn\r\n=0KDg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG3+Gr0GglBMdrQCQ7gZ7nfX8egOUGDUi72yVT7qQG99AiEAs3cVpeaRGa/6ktYcv6hQ7LeLzq9HRwCwUxqV6fy3QWI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.7-next-1641893132-22be18a83.0_1641893484834_0.6866762266763682"},"_hasShrinkwrap":false},"2.53.6":{"name":"@xdn/core","version":"2.53.6","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.6","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-CODUOR9pxpq2AUP6qUnlZg6h6iIs7t54GODfP7eqalpJrNPXjvgCluFQa2szMiCZSyB98Gz5AGEOd1sY52IVPw==","shasum":"5a04f345cf518834f270d17bb2147e8b76ff4ee9","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.6.tgz","fileCount":203,"unpackedSize":676715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3VdpCRA9TVsSAnZWagAACCMP/jGqEvonJiIcLJthekvI\nEEBalDvAsr9+pZEG4bpbEoGuadrvLcJ2u3MkJZpktTwdc5rE/AnjuMx9Wpvj\nOF51BHMxayHOP5RiiydiLT32Muo6TW88Ru8ZfuWplauAZCg7aGQFka4OhxHZ\nCOE1QaNQzUYnfC3zLhZZUHVumNENTA0qMNjVoSIOmomdTYE15fqFcDHAMdB4\nsXZnBxmqMjvd5StWUm2ej2ZpZfwvkAefcjEYaUMaVUfFoMXyQHOV/wD6iZ9f\nHg91TViHq1kbuN4AWuNGxowmbNNKA7KuDQ1D2JcAJKDeapkvYfP4sH06c37t\n4Bccdu0bMGoS13wofwp8hK+UETMZUIHU+GC2YNSOn/y4gOulhuw5wX6kR8/W\nlBvuvrt183axxL9lrs6B8aTwuQ0WZg5zwLHrrNB0ymgafgZapew95YR+sAL4\nmzGEZCpqCGwfqesekqjIB7pjEITThRBt90NxPO9OoGh3utiKvqtZhnqKW2In\nWEwzcPSc8+RWncCejHtx3PdLjx7L8IJwXt54oF+7jNJHGI8ZQiWzUQJEKkd0\nFPj+Urf8ZanrkYDr16ul1kxHfv1GPwhGPjvI1L/91XKertOgPVra35M/TfHk\nmnkFUu7diBJaS/qdgjvmthxiJpT+RlUPUOrpbizXSKiTwnSvUyACf7Tc4mX1\n7p6h\r\n=KGBz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFfS14injNARlsgK0ietfciRGZbegwQZVjoYP8tlwzpgAiEA15xG8SB5rW62H6KcUzIG29TXK/d6HU524R3jcobLlZQ="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.6_1641895785048_0.35881078462250704"},"_hasShrinkwrap":false},"2.53.7-next-1641895574-4891585a6.0":{"name":"@xdn/core","version":"2.53.7-next-1641895574-4891585a6.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.7-next-1641895574-4891585a6.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-IDWumgsLd7nVT6fwMCI5pbB3q32wendEMNHMcpXFagRNiRbIUqWrkYiiQsRpbyuydPr9qBnNd07BpyZ9hdHPag==","shasum":"cf780748d401514bc8a0fc2d36c46f2eab1843ab","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.7-next-1641895574-4891585a6.0.tgz","fileCount":203,"unpackedSize":676787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3VfjCRA9TVsSAnZWagAACJcQAIMWjQfcWVaQgdtHUvgG\n+vBTKR0i65oifxWAPhOQYzxcK3eYc8HYsDmSsLtJHZ8D6LpHC2aK0fKfCuz4\n9o5/18aeowuDrEqcnBh8eNmAN1aL2HdF1IpxEm+Id8/SyL40RBwwaah51+Yc\n223cH/8UdSXsGPzKKxDiynbRnbZCkfTGqWy3wVdDVfkS13t8tN6GUeN5k113\nONUswtuJDEnrQ7Q+odGATkyYKc3+UWYl3fvouhX5WGOFHp2J3Lr0pSiODVM7\nUlqTxJTKFJDqo5y36KWcai1YKU+++Vnn0oiKJsGuAlGNRKLa0TlnFiRvq4o6\nx3SmsEXRqVFiO2HR7+fbQeoLlxNgs5uacQ9AfKRRATM4jCXap+V8OZinUSO2\nYzlY4nZjeOmAjUZsfoLYTmPrJltiQXzy/FSTeFN2XN2vzkA9lcp94x0kfI8U\n4ynceIzsuURUuAXhwVzwWSGuB6t9ods9WepswPeuBn0/6BpBrbARcuBRXDSY\n1IQFxw4B3+nckXy1pK1vHcaf335K6NScD7eMySbABCTXD/mg4Kki6YHExtuq\nc956o0NtSN/edhGq7vivBvsm3ja82g8WcXV3OAqI6yTW/6Z6sZJMT6QSBtv7\n00CQrTj2aszE1Vfv08wLgX+a0tdN1ZgB1VrG7o88rzTA2poZg/OQDQra5FhD\n13o5\r\n=/5vp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHqHq7gKze9PlcsVJ0IbXMuqF7z8IIncIesJFlfrBsx9AiEAsTv2aNJw8dYt/IVRKD0vqU/9EWCG8U6NbdpmEeT78O0="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.7-next-1641895574-4891585a6.0_1641895907133_0.5411347621197486"},"_hasShrinkwrap":false},"2.53.6-next-1641895591-f1d5f1649.0":{"name":"@xdn/core","version":"2.53.6-next-1641895591-f1d5f1649.0","main":"./index.js","license":"UNLICENSED","scripts":{"docs":"typedoc","build":"rm -rf ./dist; mkdir ./dist; cp -r package.json README.md serverless.yml default-app ./dist; tsc; webpack;","watch":"npm-watch","ts:watch":"tsc --watch","push-build":"npm run build && cd dist && yalc push && cd ..","release":"cd ./dist; npm publish --access public","release:next":"npm run release -- --tag next","test":"jest --watchAll=false"},"dependencies":{"@types/lodash.clonedeep":"^4.5.6","ajv":"^6.12.6","babel-loader":"^8.2.2","chalk":"^2.4.2","cls-hooked":"^4.2.2","content-type":"^1.0.4","cookie":"^0.4.1","cross-spawn":"^7.0.3","decode-uri-component":"^0.2.0","deepmerge":"^4.2.2","express":"^4.17.1","fs-extra":"^8.1.0","globby":"^11.0.2","http-proxy":"^1.18.1","lodash.clonedeep":"^4.5.0","lru-cache":"^6.0.0","mime-types":"^2.1.29","node-fetch":"^2.6.1","path-to-regexp":"^6.2.0","pino":"^6.11.2","resolve-package-path":"^2.0.0","shelljs":"^0.8.4","slash":"^3.0.0","tcp-port-used":"^1.0.2","ts-loader":"^8.0.18","uuid":"^8.3.2","webpack":"^5.26.3","webpack-bundle-analyzer":"^3.9.0","webpack-dev-middleware":"^4.1.0"},"publishConfig":{"directory":"dist"},"watch":{"push-build":{"patterns":["src","bin","serverless.yml","default-app","package.json"],"extensions":["js","ts"],"quiet":false}},"jest":{"clearMocks":true,"collectCoverage":true,"transform":{"^.+\\.(js)?$":"babel-jest","^.+\\.ts$":"ts-jest"},"moduleFileExtensions":["ts","js","json"],"setupFiles":["<rootDir>/test/jest.js"],"transformIgnorePatterns":["<rootDir>/node_modules/"],"moduleNameMapper":{"../package.json":"<rootDir>/package.json","^@xdn/core(.*)$":"<rootDir>/src/$1"},"collectCoverageFrom":["./src/**/*.{ts,js}","!**/mocks/**","!**/index.ts","!**/plugins/PluginBase.ts","!**/bin/**/*"]},"devDependencies":{"@types/cls-hooked":"^4.3.1","@types/content-type":"^1.1.3","@types/cookie":"^0.3.3","@types/cross-spawn":"^6.0.2","@types/decode-uri-component":"^0.2.0","@types/express":"^4.17.7","@types/fs-extra":"^8.1.1","@types/http-proxy":"^1.17.4","@types/lodash":"^4.14.162","@types/lru-cache":"^5.1.0","@types/mime-types":"^2.1.0","@types/route-parser":"^0.1.3","@types/shelljs":"^0.8.8","@types/tcp-port-used":"^1.0.0","@types/uuid":"^8.0.1","@types/webpack-bundle-analyzer":"^3.9.0","lodash":"^4.17.21"},"readme":"## Overview\n\nCore library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.\n\nThe `@xdn/core` package provides a CDN-as-JavaScript API for defining edge routing and logic on the XDN.\n\n\n## Example Routes File\n\n```js\n// routes.js\n\nimport { Router } from '@xdn/core/router'\nimport { createNextPlugin } = from '@xdn/next'\nimport { renderNextPage, nextRoutes } from '@xdn/next'\n\nexport default new Router()\n  // redirect at edge\n  .match('/some/path/:withVar', async ({ redirect }) => {\n    redirect('/some/other/path/:withVar', { statusCode: 301 })\n  })\n\n  // proxy the legacy site\n  .match('/some/path/:withVar', async ({ proxy }) => {\n    proxy('legacy', {\n      path: '/some/other/path/:withVar',\n    })\n  })\n\n  // match based on header and proxy the legacy site\n  .match({ headers: { 'xdn-device-type': /desktop/ } }, async ({ proxy }) => {\n    proxy('legacy')\n  })\n\n  // vanity URL for next.js\n  .match('/some/vanity/url/:productId', res => {\n    renderNextPage('/p/[productId]', res)\n  })\n\n  // Send a synthetic html response\n  .match('/static-html', ({ setResponseHeader, send }) => {\n    setResponseHeader('Content-Type', 'text/html; charset=UTF-8')\n    send('<html><body><h1>Hello world!</h1></body></html>', 200)\n  })\n\n  // match Next.js routes based on the pages directory\n  .use(nextRoutes)\n\n  // fall back to proxying the legacy site\n  .fallback(({ proxy }) => proxy('legacy'))\n```\n","readmeFilename":"README.md","description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","_id":"@xdn/core@2.53.6-next-1641895591-f1d5f1649.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-bxi/0YuEhHodvKxE8SfZuRRsv74w2eqtkPz4B0/m5xLv3zorCiP2t4YMvKkTPJWJtU+XlLwm5fUtFmb4HIXNMw==","shasum":"64b5bc207a1c91f8d02793a6ba656a23dca56114","tarball":"https://registry.npmjs.org/@xdn/core/-/core-2.53.6-next-1641895591-f1d5f1649.0.tgz","fileCount":203,"unpackedSize":676787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3VgHCRA9TVsSAnZWagAAVdwP/1conIkIjtI4Q7E5gtth\n2jc/TqtxhOsyPHh4O9nEJNxsaEKLTgZKSbFu8vmu/j3YQKCaKYgqqWkgqMkM\nKJK8a6R+bNzYswCSa0Kw+8821CpLBk+etV1PthwjrT07sQ0uHX5JOnOUYQLH\nv8dxJfL7Z5+QOBLcHAZ+WFk/yvYOZs78D2WtgLu1KMTGEVmV6WYmldi287Iz\numcXbM7OGS6QHgn1tg0DC+b3XolpD2/Xv5dbQNAOd2533gdwta62iWCm2sax\njsfrZCJQunLvPA4FgXlcQKGTUsL5MQKQORohKG5+kB0qqciHCCyYxshXU9LM\nMpmFUEuFjPhKkQ2OR+Yo1vqmVARA9nnoumsfXqbqlTj54CXqjkXXc3VssUPm\nCs8jxd1H+tHmbgx1bAtrnRnwd6HyhB14QsnLG4ZGzwd4WG5nWcrgloT7xwWX\nCt2zr4tACGbbXwQZUVF7ID8FwBttdODNqXB7jGwnNWoU4IKGWWQxAqusny5k\ndFWJN5wBaVte+s2oDOReKvs1auknV0uhBKaSOv2BDeJacAQMMRTv6Ho0gAs/\nOfMFdqnxEizVaYSUAqmL0gzRre75TsZA6sCpwnIX833F3DRH1hr6UL1Lcizw\nzuCO1MIpcUOs43cfufuh6RUoJgpGDzK4QJoicSap1zdgbKSXW1Y4vGanYPz4\nEPbt\r\n=vq5d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCenWYaj0H/O78+udl1cZERj4PN4No6SxMzZrtB39s7kwIgIvnfxJzuRC0tcHe4JCc7kNzG+xh74/GIWgt3hdUcuZI="}]},"_npmUser":{"name":"moovweb-admin","email":"ops@moovweb.com"},"directories":{},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/core_2.53.6-next-1641895591-f1d5f1649.0_1641895942996_0.21948126570819348"},"_hasShrinkwrap":false}},"time":{"created":"2020-03-23T13:50:52.820Z","1.2.0":"2020-03-23T13:50:53.211Z","modified":"2022-04-11T10:29:44.577Z","1.2.1":"2020-03-23T19:06:38.841Z","1.2.2":"2020-03-23T21:08:57.463Z","1.2.3":"2020-03-23T21:32:01.922Z","1.2.4":"2020-03-23T22:17:26.590Z","1.2.6":"2020-03-24T14:26:28.055Z","1.3.1-next-fabc22b.0":"2020-03-25T14:52:41.566Z","1.3.0":"2020-03-25T15:01:19.559Z","1.4.0":"2020-03-25T18:48:27.245Z","1.4.1":"2020-03-25T20:22:20.252Z","1.5.0":"2020-03-26T10:17:43.031Z","1.5.1-next-41e8ed3.0":"2020-03-26T11:38:40.924Z","1.5.2-next-0dce446.0":"2020-03-26T20:00:20.213Z","1.5.2-next-f67a2ca.0":"2020-03-27T10:57:32.946Z","1.6.0-alpha.0":"2020-03-27T11:00:20.020Z","1.6.0-alpha.1":"2020-03-27T11:02:30.970Z","1.5.3-next-90f22a7.0":"2020-03-27T11:10:22.954Z","1.6.0-alpha.2":"2020-03-27T11:14:02.685Z","1.5.2":"2020-03-27T11:19:07.178Z","1.6.1-1.6.0-alpha.3.0":"2020-03-27T11:38:01.715Z","1.6.0-alpha.3":"2020-03-27T11:39:53.524Z","1.6.0-alpha.4":"2020-03-27T13:07:38.903Z","1.6.0-alpha.5":"2020-03-27T14:07:29.385Z","1.6.0-alpha.7":"2020-03-27T19:27:41.300Z","1.6.1-next-9e6cbe7.0":"2020-03-27T20:02:22.991Z","1.6.0":"2020-03-27T20:04:08.500Z","1.6.1-next-ead6a14.0":"2020-03-30T11:30:09.179Z","1.7.2-next-8e7c800.0":"2020-03-30T13:05:23.448Z","1.7.1-next-17e33d8.0":"2020-03-30T13:06:26.582Z","1.7.0":"2020-03-30T13:14:06.608Z","1.7.1-next-02f9cda.0":"2020-03-30T13:18:40.355Z","1.7.1-next-bbc6b59.0":"2020-03-30T13:19:10.536Z","1.7.1-next-f8ce77f.0":"2020-03-30T13:59:02.003Z","1.7.1-next-6d0ef0f.0":"2020-03-30T14:54:05.188Z","1.7.1-next-014f396.0":"2020-03-30T18:04:18.726Z","1.7.1-next-1585660016-2b55908.0":"2020-03-31T13:08:49.101Z","1.7.1-next-1585667303-462f746.0":"2020-03-31T15:10:10.044Z","1.7.1-next-1585667433-2740601.0":"2020-03-31T15:12:15.912Z","1.8.0-next-1585741642-6c6487f.0":"2020-04-01T11:48:01.556Z","1.8.1-next-1585741676-8acb976.0":"2020-04-01T11:48:31.454Z","1.8.0":"2020-04-01T11:50:15.549Z","1.8.2-next-1585749294-ef04f97.0":"2020-04-01T13:55:27.247Z","1.8.1":"2020-04-01T13:56:26.120Z","1.8.2-next-1585763272-c00b57a.0":"2020-04-01T17:48:28.465Z","1.8.4-next-1585768256-50d90ed.0":"2020-04-01T19:11:33.706Z","1.8.3":"2020-04-01T19:15:23.598Z","1.8.4-next-1585771949-77925fa.0":"2020-04-01T20:13:05.232Z","1.8.5-next-1585772359-caa6c77.0":"2020-04-01T20:19:56.796Z","1.8.4":"2020-04-01T20:21:24.312Z","1.8.5-next-1585829512-642ef817.0":"2020-04-02T12:12:25.398Z","1.8.5-next-1585831192-599e680.0":"2020-04-02T12:40:30.353Z","1.8.6-next-1585833488-76c87cd.0":"2020-04-02T13:18:53.052Z","1.8.6-next-1585839036-fc89acd.0":"2020-04-02T14:51:11.550Z","1.8.7-next-1585839496-a2d16e43.0":"2020-04-02T14:58:54.289Z","1.8.6":"2020-04-02T15:02:33.852Z","1.8.7-next-1585845055-ebee48b.0":"2020-04-02T16:31:33.537Z","1.9.1-next-1585847329-ad6f8a2e.0":"2020-04-02T17:09:31.137Z","1.9.0":"2020-04-02T17:14:47.366Z","1.10.0-alpha.0":"2020-04-02T18:25:46.611Z","1.10.0-alpha.1":"2020-04-02T19:01:27.527Z","1.10.0-alpha.2":"2020-04-02T19:17:39.818Z","1.9.1-alpha.0":"2020-04-03T10:39:43.877Z","1.9.1-alpha.1":"2020-04-03T12:57:39.839Z","1.9.1-alpha.3":"2020-04-03T16:13:25.938Z","1.9.2-next-1585937531-bd04be9a.0":"2020-04-03T18:12:47.813Z","1.9.1":"2020-04-03T18:17:22.443Z","1.9.2-next-1586174629-c1dce01f.0":"2020-04-06T12:04:28.792Z","1.10.0":"2020-04-06T13:02:48.637Z","1.10.1-next-1586178441-fa817200.0":"2020-04-06T13:08:01.027Z","1.10.1-next-1586203084-642a5b56.0":"2020-04-06T19:58:51.582Z","1.11.1-next-1586204052-98732ee1.0":"2020-04-06T20:15:01.254Z","1.11.0":"2020-04-06T20:18:44.397Z","1.11.3-next-1586262970-50d2d7de.0":"2020-04-07T12:36:58.411Z","1.11.2":"2020-04-07T12:37:43.575Z","1.11.3-next-1586267897-85448496.0":"2020-04-07T13:59:03.246Z","1.11.3-next-1586271605-6050270f.0":"2020-04-07T15:00:57.702Z","1.11.3-next-1586281026-b56ac39b.0":"2020-04-07T17:37:49.554Z","1.11.3-next-1586281041-eafec37c.0":"2020-04-07T17:38:15.979Z","1.11.4-next-1586281065-00976acf.0":"2020-04-07T17:38:31.211Z","1.11.3":"2020-04-07T17:39:28.092Z","1.11.4-next-1586342208-3fdeefdc.0":"2020-04-08T10:37:35.903Z","1.12.1-next-1586342429-42224fec.0":"2020-04-08T10:41:16.599Z","1.12.0":"2020-04-08T10:41:33.474Z","1.12.1-next-1586377843-3fea91fd.0":"2020-04-08T20:31:29.906Z","1.12.2-next-1586377961-1274c2bc.0":"2020-04-08T20:33:32.549Z","1.12.1":"2020-04-08T21:20:53.540Z","1.14.0-alpha.0":"2020-04-09T20:09:39.911Z","1.14.0-alpha.1":"2020-04-09T20:12:17.712Z","1.13.1-next-1586789762-81cde375.0":"2020-04-13T14:56:46.724Z","1.13.0":"2020-04-13T14:58:14.464Z","1.14.0-alpha.2":"2020-04-14T01:02:47.383Z","1.14.0-alpha.4":"2020-04-14T02:11:14.663Z","1.14.0-alpha.6":"2020-04-14T02:46:26.898Z","1.14.0-alpha.8":"2020-04-14T03:19:17.027Z","1.14.0-alpha.12":"2020-04-14T04:55:44.063Z","1.13.1-next-1586962257-9ad0f4a2.0":"2020-04-15T14:51:44.913Z","1.13.1-next-1586972974-518b9264.0":"2020-04-15T17:50:21.765Z","1.13.1-next-1586977082-ffffece2.0":"2020-04-15T18:58:55.762Z","1.13.1-next-1587027252-aeb4b1b6.0":"2020-04-16T08:55:03.422Z","1.13.1-next-1587043449-fc7278d9.0":"2020-04-16T13:24:57.674Z","1.14.1-next-1587047001-86c2243e.0":"2020-04-16T14:23:59.100Z","1.14.0":"2020-04-16T14:25:46.778Z","1.14.1-next-1587128107-2b2e1fe9.0":"2020-04-17T12:55:59.596Z","1.14.1-next-1587159432-5ece9eac.0":"2020-04-17T21:38:02.090Z","1.14.2-next-1587386524-8e0b42e2.0":"2020-04-20T12:42:52.995Z","1.14.1":"2020-04-20T12:45:28.834Z","1.14.2-next-1587387416-f0ee87bc.0":"2020-04-20T12:57:45.408Z","1.14.3-next-1587388020-73b45791.0":"2020-04-20T13:07:47.793Z","1.14.2":"2020-04-20T13:08:33.586Z","1.14.4-next-1587548265-e293ebd3.0":"2020-04-22T09:38:34.605Z","1.14.4-next-1587557642-a0df6f8b.0":"2020-04-22T12:14:56.420Z","1.14.3":"2020-04-22T12:19:40.683Z","1.15.0-alpha.1":"2020-04-22T12:20:58.820Z","1.14.5-next-1587558108-584e9028.0":"2020-04-22T12:22:34.716Z","1.14.4":"2020-04-22T12:27:35.777Z","1.15.0-alpha.2":"2020-04-22T13:05:00.027Z","1.15.1-alpha.0":"2020-04-22T18:25:21.035Z","1.15.1-next-1587590168-dac37a32.0":"2020-04-22T21:17:00.635Z","1.15.0":"2020-04-22T21:19:35.816Z","1.15.2-next-1587646706-e2a18f10.0":"2020-04-23T12:59:15.503Z","1.15.1":"2020-04-23T13:03:31.584Z","1.15.3-next-1587652580-cfb5090e.0":"2020-04-23T14:37:12.278Z","1.15.2":"2020-04-23T15:59:32.715Z","1.15.3-alpha.0":"2020-04-23T16:11:37.611Z","1.15.4-next-1587663083-08c99ea3.0":"2020-04-23T17:32:12.275Z","1.15.3-alpha.1":"2020-04-23T20:34:40.624Z","1.15.4-next-1588004033-f4ebeda1.0":"2020-04-27T16:14:46.946Z","1.16.0-alpha.0":"2020-04-28T00:43:37.461Z","1.15.5-next-1588089497-4078ed54.0":"2020-04-28T15:59:12.042Z","1.15.4":"2020-04-28T16:00:39.839Z","1.16.0-alpha.1":"2020-04-28T21:34:28.047Z","1.16.0-alpha.2":"2020-04-29T21:19:27.327Z","1.16.0-next-1588248560-a5ae7aba.0":"2020-04-30T12:10:14.660Z","1.15.1-next-1588257704-e505d92b.0":"2020-04-30T14:42:41.560Z","1.15.1-next-1588260046-fd645561.0":"2020-04-30T15:21:35.696Z","1.16.0-next-1588260694-b903a29c.0":"2020-04-30T15:32:22.092Z","1.15.5-next-1588272954-641dd84a.0":"2020-04-30T18:56:42.459Z","1.16.1-next-1588273241-075e41aa.0":"2020-04-30T19:01:33.884Z","1.16.0":"2020-04-30T19:06:37.562Z","1.16.2-next-1588354229-ed743abe.0":"2020-05-01T17:31:28.251Z","1.16.1":"2020-05-01T17:32:37.222Z","1.16.3-next-1588356827-cf7323c9.0":"2020-05-01T18:14:39.841Z","1.16.2":"2020-05-01T18:21:16.242Z","1.16.4-next-1588589908-9c567ddf.0":"2020-05-04T10:59:15.512Z","1.16.3":"2020-05-04T11:23:10.454Z","1.16.4-next-1588592046-bc6a9bbc.0":"2020-05-04T11:34:51.060Z","1.16.4-next-1588593653-106e99c7.0":"2020-05-04T12:01:39.346Z","1.16.4-next-1588593807-3e0cf026.0":"2020-05-04T12:04:17.990Z","1.16.4-next-1588594276-c5d635f2.0":"2020-05-04T12:12:13.006Z","1.16.5-next-1588598770-fdbba1d7.0":"2020-05-04T13:26:59.642Z","1.16.4":"2020-05-04T14:22:02.044Z","1.17.1-next-1588602342-9eead474.0":"2020-05-04T14:26:35.808Z","1.17.0":"2020-05-04T14:33:41.165Z","1.17.1-next-1588620657-edccecc6.0":"2020-05-04T19:31:43.396Z","1.17.1-next-1588670928-da808cf3.0":"2020-05-05T09:29:41.369Z","1.17.2-next-1588676577-415ef4c7.0":"2020-05-05T11:03:44.372Z","1.18.1-next-1588677172-e7f92424.0":"2020-05-05T11:13:49.935Z","1.18.1-next-1588678598-df36a043.0":"2020-05-05T11:37:30.839Z","1.18.0":"2020-05-05T11:41:41.840Z","1.18.1-next-1588689440-43307b75.0":"2020-05-05T14:38:11.898Z","1.18.1-next-1588762242-59d91334.0":"2020-05-06T10:51:32.131Z","1.18.1-next-1588765756-2ff6c5a9.0":"2020-05-06T11:50:06.391Z","1.18.1-next-1588772496-66e5946d.0":"2020-05-06T13:42:29.308Z","1.19.0":"2020-05-06T13:59:10.536Z","1.19.1-next-1588774338-5d34acf2.0":"2020-05-06T14:13:09.139Z","1.19.1-next-1588945279-52bc97f4.0":"2020-05-08T13:42:12.649Z","1.19.1-next-1588945346-7d3df1de.0":"2020-05-08T13:43:20.135Z","1.19.1-next-1588945363-9ee32214.0":"2020-05-08T13:43:35.572Z","1.20.0":"2020-05-08T13:52:22.689Z","1.20.1-next-1588945919-afaf5e24.0":"2020-05-08T13:52:54.241Z","1.20.2-next-1589117911-a22f6e9a.0":"2020-05-10T13:39:27.914Z","1.20.1":"2020-05-10T13:43:17.799Z","1.21.0-alpha.0":"2020-05-11T11:47:58.349Z","1.20.3-next-1589201494-1c832d4a.0":"2020-05-11T12:52:24.174Z","1.20.3-next-1589201539-0a882432.0":"2020-05-11T12:53:15.458Z","1.20.2":"2020-05-11T12:55:15.699Z","1.20.3-next-1589218968-7f515349.0":"2020-05-11T17:43:37.238Z","1.20.3-next-1589291190-b110455e.0":"2020-05-12T13:47:33.732Z","1.20.3-next-1589293140-d294d59f.0":"2020-05-12T14:19:54.306Z","1.20.3-next-1589293209-099c3cf3.0":"2020-05-12T14:21:01.453Z","1.21.0":"2020-05-12T14:24:41.669Z","1.21.1-next-1589293456-ade91ab0.0":"2020-05-12T14:25:12.281Z","1.22.0-alpha.0":"2020-05-12T20:55:14.829Z","1.22.0-alpha.1":"2020-05-12T23:24:02.954Z","1.22.0-alpha.2":"2020-05-13T00:03:15.076Z","1.22.1-next-1589385187-faa6c034.0":"2020-05-13T15:53:59.107Z","1.22.1-next-1589389614-bcc4482b.0":"2020-05-13T17:07:48.978Z","1.22.1-next-1589389698-9ba6d576.0":"2020-05-13T17:09:12.393Z","1.22.1-next-1589389733-13fc30cf.0":"2020-05-13T17:09:43.306Z","1.22.1-next-1589389859-c943ebbf.0":"2020-05-13T17:11:52.794Z","1.22.1-next-1589389897-1088a822.0":"2020-05-13T17:12:38.158Z","1.22.1-next-1589389946-3e06b0b0.0":"2020-05-13T17:13:20.279Z","1.22.1-next-1589390100-e1baccad.0":"2020-05-13T17:15:57.269Z","1.22.1-next-1589392925-6273f4ea.0":"2020-05-13T18:03:03.072Z","1.22.0":"2020-05-13T18:11:15.682Z","1.22.1-next-1589462065-a8608e8a.0":"2020-05-14T13:15:22.408Z","1.23.1-next-1589462132-2bb55742.0":"2020-05-14T13:16:21.267Z","1.23.0":"2020-05-14T13:19:16.245Z","1.23.1-next-1589481036-0bc69bbd.0":"2020-05-14T18:31:28.256Z","1.24.0-alpha.0":"2020-05-14T19:37:47.421Z","1.24.0-alpha.2":"2020-05-14T22:44:51.332Z","1.23.1-next-1589524507-c42b588e.0":"2020-05-15T06:36:01.642Z","1.23.2-next-1589524553-bb0b9b7f.0":"2020-05-15T06:36:44.133Z","1.23.1":"2020-05-15T06:37:51.931Z","1.24.0-alpha.3":"2020-05-15T17:22:36.843Z","1.23.3-next-1589570475-f51dc910.0":"2020-05-15T19:22:13.272Z","1.23.2":"2020-05-15T20:08:12.881Z","1.23.3-next-1589578847-0d14d106.0":"2020-05-15T21:41:46.885Z","1.23.3-next-1589578947-85d4b5b7.0":"2020-05-15T21:43:17.236Z","1.24.1-next-1589579330-558c1799.0":"2020-05-15T21:49:41.723Z","1.24.0":"2020-05-15T21:50:04.979Z","1.25.0-alpha.0":"2020-05-15T21:53:05.351Z","1.23.1-next-1589792715-8029d547.0":"2020-05-18T09:06:14.978Z","1.23.1-next-1589793637-a10510a7.0":"2020-05-18T09:21:26.884Z","1.23.1-next-1589798825-92958328.0":"2020-05-18T10:47:55.210Z","1.23.1-next-1589803777-2427c085.0":"2020-05-18T12:10:29.868Z","1.25.0-next-1589811012-89e82182.0":"2020-05-18T14:11:09.283Z","1.25.1-next-1589811313-bbec18d0.0":"2020-05-18T14:16:06.546Z","1.25.0":"2020-05-18T14:17:20.969Z","1.23.1-next-1589878001-633ac722.0":"2020-05-19T08:47:46.198Z","1.25.1-next-1589880716-0dbde70a.0":"2020-05-19T09:32:43.131Z","1.26.1-next-1589880919-c6d2bee4.0":"2020-05-19T09:36:14.097Z","1.26.0":"2020-05-19T09:39:02.927Z","1.26.1-next-1589883839-2e2c9df3.0":"2020-05-19T10:24:58.122Z","1.26.1-next-1589886107-b1758c8e.0":"2020-05-19T11:02:37.646Z","1.26.2-next-1589886254-26f56d36.0":"2020-05-19T11:05:06.547Z","1.26.2-next-1589888388-7d1a70f9.0":"2020-05-19T11:40:43.169Z","1.26.1":"2020-05-19T11:42:47.359Z","1.26.3-next-1589890489-c84cac0a.0":"2020-05-19T12:15:40.067Z","1.26.2":"2020-05-19T12:17:30.164Z","1.26.3-next-1589890819-a83e32fe.0":"2020-05-19T12:21:14.982Z","1.26.3-next-1589891344-da6ef43b.0":"2020-05-19T12:30:01.586Z","1.26.3-next-1589921783-6c6160f9.0":"2020-05-19T20:57:19.886Z","1.26.3-next-1589966072-5a827f9f.0":"2020-05-20T09:15:24.943Z","1.26.4-next-1589966477-7bfd5b31.0":"2020-05-20T09:22:08.001Z","1.26.3":"2020-05-20T10:45:42.742Z","1.26.4-next-1589978275-ff82b99b.0":"2020-05-20T12:38:47.498Z","1.26.4-next-1589979034-aca67ae9.0":"2020-05-20T12:51:29.753Z","1.26.4-next-1589985804-757ff339.0":"2020-05-20T14:44:18.587Z","1.26.4-next-1589988492-4b2f4f3b.0":"2020-05-20T15:29:03.792Z","1.26.4-next-1590002479-505efef0.0":"2020-05-20T19:22:10.901Z","1.26.4-next-1590005800-9e59a3df.0":"2020-05-20T20:17:28.824Z","1.26.4-next-1590018961-f5311033.0":"2020-05-20T23:56:55.097Z","1.26.4-next-1590045563-e831796e.0":"2020-05-21T07:20:16.799Z","1.26.4-next-1590045758-3ddecc8d.0":"2020-05-21T07:23:29.661Z","1.26.4-next-1590058605-2c1b89cd.0":"2020-05-21T10:57:39.111Z","1.27.1-next-1590059385-7692bf45.0":"2020-05-21T11:10:43.152Z","1.27.1-next-1590064035-da1f640c.0":"2020-05-21T12:27:59.986Z","1.27.0":"2020-05-21T12:34:23.940Z","1.27.1-next-1590077635-08d067b6.0":"2020-05-21T16:14:55.687Z","1.27.1-next-1590077877-848f8e4e.0":"2020-05-21T16:18:50.583Z","1.27.2-next-1590077984-844e6fcc.0":"2020-05-21T16:20:37.240Z","1.27.1":"2020-05-21T16:23:14.903Z","1.27.2-next-1590081909-aeaed87d.0":"2020-05-21T17:26:05.150Z","1.27.3-next-1590082002-28f676a4.0":"2020-05-21T17:27:35.693Z","1.27.2":"2020-05-21T17:27:47.092Z","1.27.4-next-1590087390-1c468893.0":"2020-05-21T18:57:18.551Z","1.27.3":"2020-05-21T19:00:59.239Z","1.27.4":"2020-05-22T12:30:56.953Z","1.27.5-next-1590157290-6f474bee.0":"2020-05-22T14:22:18.548Z","1.27.5-next-1590160837-01d1da34.0":"2020-05-22T15:21:31.546Z","1.27.6-next-1590161219-ff3615f3.0":"2020-05-22T15:27:54.101Z","1.27.5":"2020-05-22T15:29:06.514Z","1.27.6-next-1590415848-8205dcaf.0":"2020-05-25T14:11:41.526Z","1.27.6-next-1590428158-f3675a8b.0":"2020-05-25T17:36:49.575Z","1.27.6-next-1590437485-46f258a0.0":"2020-05-25T20:12:19.463Z","1.27.6-next-1590441025-3e80e0f3.0":"2020-05-25T21:11:16.483Z","1.27.6-next-1590441134-b822c2d3.0":"2020-05-25T21:13:05.815Z","1.28.0-next-1590448226-1ae089b3.0":"2020-05-25T23:11:09.779Z","1.28.0-next-1590449006-2b6f9305.0":"2020-05-25T23:24:12.342Z","1.28.0-next-1590449071-86e37db1.0":"2020-05-25T23:25:16.539Z","1.28.0-next-1590449481-04cf5664.0":"2020-05-25T23:32:11.139Z","1.28.0-next-1590449949-895e7338.0":"2020-05-25T23:39:58.750Z","1.28.0-next-1590450972-a672aa2f.0":"2020-05-25T23:56:59.610Z","1.27.6-next-1590492763-7bd63ac9.0":"2020-05-26T11:33:39.826Z","1.27.6-next-1590493206-7896d0ae.0":"2020-05-26T11:40:58.007Z","1.27.6-next-1590498104-a5483cf0.0":"2020-05-26T13:02:39.681Z","1.27.6-next-1590508839-da525856.0":"2020-05-26T16:01:29.467Z","1.27.7-next-1590508927-36f5b9fb.0":"2020-05-26T16:02:58.341Z","1.28.1-next-1590509032-6ba1c4a1.0":"2020-05-26T16:04:44.334Z","1.28.0":"2020-05-26T16:10:16.836Z","1.28.1-next-1590511415-ea9f7e13.0":"2020-05-26T16:44:25.283Z","1.28.1-next-1590514632-ac064b8d.0":"2020-05-26T17:38:05.627Z","1.28.1-next-1590517398-ffad5d29.0":"2020-05-26T18:24:12.045Z","1.28.1-next-1590517451-70eda305.0":"2020-05-26T18:25:03.445Z","1.29.0-next-1590530036-0a284992.0":"2020-05-26T21:54:44.627Z","1.29.0-next-1590532441-70a3b072.0":"2020-05-26T22:34:55.075Z","1.28.2-next-1590579745-33aeb253.0":"2020-05-27T11:43:24.273Z","1.28.1":"2020-05-27T11:48:26.536Z","1.28.2-next-1590597417-c9023c63.0":"2020-05-27T16:37:50.534Z","1.28.3-next-1590597421-ce388866.0":"2020-05-27T16:38:11.058Z","1.28.2":"2020-05-27T16:42:38.526Z","1.29.0-next-1590600687-db417949.0":"2020-05-27T17:32:18.439Z","1.29.0-next-1590606876-385dca94.0":"2020-05-27T19:15:31.512Z","1.29.0-next-1590613190-2c3e1e10.0":"2020-05-27T21:00:36.966Z","1.29.0-next-1590641329-5c9e58bc.0":"2020-05-28T04:49:43.904Z","1.28.3-next-1590642401-5950c000.0":"2020-05-28T05:07:28.379Z","1.28.3-next-1590663854-6033b96f.0":"2020-05-28T11:05:04.780Z","1.28.3-next-1590663861-1758f911.0":"2020-05-28T11:05:10.525Z","1.28.3-next-1590664692-3d77f6cd.0":"2020-05-28T11:19:00.002Z","1.28.3-next-1590675419-db473b15.0":"2020-05-28T14:17:44.532Z","1.29.0-next-1590688452-314d2cdd.0":"2020-05-28T17:55:01.664Z","1.28.3-next-1590704463-5359c1c5.0":"2020-05-28T22:21:57.480Z","1.28.3-next-1590756444-f050cca6.0":"2020-05-29T12:48:21.923Z","1.28.3-next-1590756692-46e13d75.0":"2020-05-29T12:52:22.928Z","1.29.1-next-1590759925-ddbfefbb.0":"2020-05-29T13:46:18.718Z","1.29.1-next-1590765685-e5eb9caf.0":"2020-05-29T15:22:21.431Z","1.29.0":"2020-05-29T15:26:32.705Z","1.29.1-next-1590770489-d78d36dd.0":"2020-05-29T16:42:24.066Z","1.29.2-next-1590770536-04047cfc.0":"2020-05-29T16:43:13.491Z","1.29.1":"2020-05-29T16:47:35.291Z","1.30.0-alpha.0":"2020-05-30T21:07:23.437Z","1.29.2-next-1591044917-93126d54.0":"2020-06-01T20:56:08.007Z","1.29.2-next-1591044990-d74e8653.0":"2020-06-01T20:57:27.848Z","1.29.3-next-1591045435-55b9958b.0":"2020-06-01T21:04:48.492Z","1.29.3-next-1591046165-cdd6f1cb.0":"2020-06-01T21:17:02.755Z","1.29.2":"2020-06-01T21:18:37.873Z","1.29.3-next-1591100487-18281a77.0":"2020-06-02T12:22:20.609Z","1.29.3-next-1591111600-fbb740aa.0":"2020-06-02T15:27:33.519Z","1.29.3-next-1591113492-9f6a12ba.0":"2020-06-02T15:59:04.852Z","1.29.4-next-1591113534-9b6909f6.0":"2020-06-02T15:59:52.287Z","1.29.3":"2020-06-02T16:06:35.835Z","1.29.4-next-1591114215-1efef392.0":"2020-06-02T16:11:05.284Z","1.30.1-next-1591114463-c3a3f4ce.0":"2020-06-02T16:15:13.397Z","1.30.0":"2020-06-02T16:20:08.602Z","1.30.1-next-1591123259-bc695512.0":"2020-06-02T18:41:51.285Z","1.30.1-next-1591123469-9f0ca633.0":"2020-06-02T18:45:17.560Z","1.30.1-next-1591194650-d93ce825.0":"2020-06-03T14:31:39.558Z","1.30.1-next-1591195356-f90a9ce6.0":"2020-06-03T14:43:24.639Z","1.30.3-next-1591196000-1d9fe5fd.0":"2020-06-03T14:54:31.405Z","1.30.2":"2020-06-03T14:59:39.818Z","1.30.3-next-1591269758-7bbf765f.0":"2020-06-04T11:23:24.339Z","1.30.3-next-1591269972-f47e3a29.0":"2020-06-04T11:27:04.279Z","1.31.1-next-1591270216-d49d051d.0":"2020-06-04T11:31:06.278Z","1.31.1-next-1591271175-b78bc971.0":"2020-06-04T11:47:08.465Z","1.31.1-next-1591273893-3e905f3e.0":"2020-06-04T12:32:24.356Z","1.31.1-next-1591274461-8468c460.0":"2020-06-04T12:41:51.345Z","1.30.3-next-1591274725-6465e8df.0":"2020-06-04T12:46:31.664Z","1.31.1-next-1591275371-c99481f4.0":"2020-06-04T12:57:04.581Z","1.31.1-next-1591276545-755bf3a2.0":"2020-06-04T13:16:35.454Z","1.30.3-next-1591277622-d6c14e49.0":"2020-06-04T13:34:28.846Z","1.30.4-next-1591278945-a98191ce.0":"2020-06-04T13:56:42.396Z","1.30.3":"2020-06-04T14:16:58.852Z","1.31.1-next-1591280492-cba2eb54.0":"2020-06-04T14:22:14.290Z","1.31.1-next-1591281064-cf89689f.0":"2020-06-04T14:32:02.984Z","1.31.0":"2020-06-04T14:38:10.501Z","1.31.1-next-1591344635-6c092169.0":"2020-06-05T08:11:37.743Z","1.31.1-next-1591351320-1fdc5205.0":"2020-06-05T10:02:55.280Z","1.31.1-next-1591356427-150ae696.0":"2020-06-05T11:28:18.894Z","1.31.1-next-1591356454-10b61648.0":"2020-06-05T11:28:31.224Z","1.31.1-next-1591357570-40a48007.0":"2020-06-05T11:47:13.387Z","1.32.1-next-1591357781-8f136de9.0":"2020-06-05T11:50:42.893Z","1.32.0":"2020-06-05T11:53:43.002Z","1.32.1-next-1591362528-372d9914.0":"2020-06-05T13:09:51.563Z","1.32.2-next-1591362632-ea5c8d75.0":"2020-06-05T13:11:35.094Z","1.32.1":"2020-06-05T13:31:09.567Z","1.32.2-next-1591365315-aa6e26f7.0":"2020-06-05T13:56:17.716Z","1.32.3-next-1591365909-4545c691.0":"2020-06-05T14:06:13.664Z","1.32.2":"2020-06-05T14:15:19.702Z","1.32.3-next-1591384132-b7f29ade.0":"2020-06-05T19:10:00.264Z","1.32.4-next-1591384237-2e40e89b.0":"2020-06-05T19:11:36.406Z","1.32.3":"2020-06-05T19:12:27.383Z","1.32.4-next-1591604924-0c44f6b1.0":"2020-06-08T08:29:44.119Z","1.30.3-next-1591615549-03794b94.0":"2020-06-08T11:26:37.272Z","1.30.3-next-1591616664-dbbaaf44.0":"2020-06-08T11:45:20.982Z","1.32.4-next-1591617441-66aafce1.0":"2020-06-08T11:58:25.359Z","1.32.4-next-1591617746-af2a6a42.0":"2020-06-08T12:03:26.004Z","1.32.5-next-1591617841-57ead78d.0":"2020-06-08T12:04:58.935Z","1.32.4":"2020-06-08T12:14:29.960Z","1.32.5-next-1591620669-d62f2e70.0":"2020-06-08T12:52:05.370Z","1.32.5-next-1591627086-47750462.0":"2020-06-08T14:39:14.021Z","1.32.5-next-1591629014-b4ad35a6.0":"2020-06-08T15:11:20.010Z","1.32.5-next-1591702415-542797cd.0":"2020-06-09T11:34:39.661Z","1.33.1-next-1591703336-2f6fc8a1.0":"2020-06-09T11:49:56.204Z","1.33.0":"2020-06-09T16:06:00.507Z","1.33.1-alpha.0":"2020-06-09T19:35:37.872Z","1.33.1-next-1591791327-80d95168.0":"2020-06-10T12:16:31.517Z","1.33.2-alpha.0":"2020-06-10T13:49:14.133Z","1.33.1-next-1591797511-e17e8d73.0":"2020-06-10T13:59:36.283Z","1.33.1-next-1591798373-9eda5fdf.0":"2020-06-10T14:13:53.948Z","1.33.1-next-1591798472-ce0f7e29.0":"2020-06-10T14:15:39.428Z","1.33.2-next-1591804159-9bd526b5.0":"2020-06-10T15:50:26.115Z","1.33.1":"2020-06-10T15:55:24.091Z","1.33.2-next-1591818633-b0caea5a.0":"2020-06-10T19:51:40.713Z","1.33.3-next-1591820164-cc7e19c7.0":"2020-06-10T20:17:05.371Z","1.33.2":"2020-06-10T20:23:18.037Z","1.33.1-next-1591951804-3b4ace33.0":"2020-06-12T08:51:10.080Z","1.33.1-next-1591954589-e953b4c5.0":"2020-06-12T09:37:32.070Z","1.33.3-next-1591961052-03ed3950.0":"2020-06-12T11:25:15.426Z","1.33.1-next-1591961380-33c74c42.0":"2020-06-12T11:30:44.642Z","1.33.3-next-1591963237-a7993127.0":"2020-06-12T12:01:38.119Z","1.34.1-next-1591963247-44817e7a.0":"2020-06-12T12:01:49.889Z","1.34.0":"2020-06-12T12:10:16.551Z","1.33.1-next-1591967872-6714c2a2.0":"2020-06-12T13:19:03.354Z","1.33.1-next-1591967888-8f086b96.0":"2020-06-12T13:19:10.220Z","1.33.1-next-1591967907-c86d39f8.0":"2020-06-12T13:19:34.992Z","1.33.1-next-1591967919-af90a447.0":"2020-06-12T13:19:47.307Z","1.33.1-next-1591967915-55cc7765.0":"2020-06-12T13:19:52.276Z","1.34.1-next-1591972972-e628a5b7.0":"2020-06-12T14:43:50.081Z","1.34.2-next-1591973147-3bab3afb.0":"2020-06-12T14:46:48.630Z","1.34.1":"2020-06-12T14:59:17.783Z","1.33.1-next-1591974637-a2f64d24.0":"2020-06-12T15:11:46.200Z","1.33.1-next-1591974983-9f88a9f2.0":"2020-06-12T15:17:26.281Z","1.33.1-next-1591979403-bb779dd4.0":"2020-06-12T16:31:07.241Z","1.33.1-next-1591979774-e0ec5d31.0":"2020-06-12T16:37:13.907Z","1.33.1-next-1591980112-1b8504e1.0":"2020-06-12T16:42:53.671Z","1.34.2-next-1591980763-ee2eff93.0":"2020-06-12T16:53:55.176Z","1.34.3-next-1591980852-f46b52c3.0":"2020-06-12T16:55:25.138Z","1.34.3-next-1591981842-7f06c136.0":"2020-06-12T17:11:43.217Z","1.34.2":"2020-06-12T19:07:01.263Z","1.34.3-next-1592225481-7fe7f490.0":"2020-06-15T12:52:19.138Z","1.34.4-next-1592228297-29715c4e.0":"2020-06-15T13:39:25.408Z","1.34.3":"2020-06-15T13:39:40.262Z","1.34.4-next-1592237100-c90c0f9e.0":"2020-06-15T16:06:29.080Z","1.34.4-next-1592237121-c1b532c3.0":"2020-06-15T16:07:03.952Z","1.34.5-next-1592237203-db7d8d7e.0":"2020-06-15T16:07:50.682Z","1.34.4":"2020-06-15T16:19:36.764Z","1.34.5-next-1592249749-82f3e3ad.0":"2020-06-15T19:36:45.209Z","1.34.5-next-1592256951-45cde524.0":"2020-06-15T21:36:59.002Z","1.34.5-next-1592257149-8d27b08e.0":"2020-06-15T21:40:08.737Z","1.34.5-next-1592296946-b1cc37e3.0":"2020-06-16T08:43:32.628Z","1.34.5-next-1592297488-3817044b.0":"2020-06-16T08:52:32.225Z","1.34.5-next-1592307461-e564d981.0":"2020-06-16T11:38:43.633Z","1.34.5-next-1592309606-0e35e72d.0":"2020-06-16T12:14:29.759Z","1.34.6-next-1592309691-c5e5b11d.0":"2020-06-16T12:15:52.091Z","1.34.6-next-1592310367-a3cfa8f5.0":"2020-06-16T12:27:06.677Z","1.34.5":"2020-06-16T12:27:36.341Z","1.34.6-next-1592311845-d7d4041f.0":"2020-06-16T12:51:48.088Z","1.34.6-next-1592312588-87822b57.0":"2020-06-16T13:04:16.623Z","1.34.7-next-1592312672-1df663a8.0":"2020-06-16T13:05:38.841Z","1.34.7-next-1592312705-2b105632.0":"2020-06-16T13:06:00.808Z","1.34.7-next-1592313144-1f253e41.0":"2020-06-16T13:13:27.508Z","1.34.7-next-1592314772-89869084.0":"2020-06-16T13:40:28.457Z","1.34.6":"2020-06-16T13:45:42.020Z","1.34.7-next-1592315768-d1b40077.0":"2020-06-16T13:57:14.529Z","1.34.7-next-1592317014-c857295c.0":"2020-06-16T14:18:05.003Z","1.34.7-next-1592318936-b9045aec.0":"2020-06-16T14:50:03.047Z","1.34.8-next-1592318977-fe0422f0.0":"2020-06-16T14:50:41.549Z","1.34.7":"2020-06-16T14:57:11.117Z","1.34.8-next-1592320383-bfb04986.0":"2020-06-16T15:14:05.660Z","1.34.9-next-1592320476-e5788115.0":"2020-06-16T15:15:37.746Z","1.34.8":"2020-06-16T15:27:50.991Z","1.34.9-next-1592323262-472d13c7.0":"2020-06-16T16:02:08.917Z","1.34.10-next-1592323271-b9c2ae6d.0":"2020-06-16T16:02:14.919Z","1.34.9":"2020-06-16T16:09:55.338Z","1.34.10-next-1592323825-367c6528.0":"2020-06-16T16:11:31.428Z","1.34.10-next-1592325881-76268dd8.0":"2020-06-16T16:45:34.571Z","1.34.11-next-1592327309-198dc88c.0":"2020-06-16T17:09:32.164Z","1.34.10":"2020-06-16T17:18:52.691Z","1.34.11-next-1592329819-f0f1d007.0":"2020-06-16T17:51:20.717Z","1.34.11-next-1592386147-bae79f47.0":"2020-06-17T09:30:06.858Z","1.34.11-next-1592426534-c82358d9.0":"2020-06-17T20:43:11.497Z","1.34.12-next-1592426609-500e177f.0":"2020-06-17T20:44:32.411Z","1.34.11":"2020-06-17T20:49:20.873Z","1.34.12-next-1592483956-4c1616e6.0":"2020-06-18T12:40:24.993Z","1.35.1-next-1592483976-87888543.0":"2020-06-18T12:40:46.181Z","1.35.0":"2020-06-18T12:49:28.349Z","1.35.1-next-1592485157-c11d4ec9.0":"2020-06-18T13:00:12.488Z","1.35.2-next-1592487094-eda51d10.0":"2020-06-18T13:32:31.258Z","1.35.1":"2020-06-18T13:32:55.057Z","1.35.2-next-1592577984-bf61b231.0":"2020-06-19T14:47:20.995Z","1.35.2-next-1592579281-878b8fe2.0":"2020-06-19T15:09:00.820Z","1.35.2-next-1592847960-b1f4455b.0":"2020-06-22T17:47:01.837Z","1.35.2-next-1593034822-7be62321.0":"2020-06-24T21:43:09.312Z","1.35.2-next-1593051570-6a0e3ec5.0":"2020-06-25T02:22:03.444Z","1.35.2-next-1593052063-3ff2dc97.0":"2020-06-25T02:30:29.703Z","1.35.2-next-1593053597-087fad45.0":"2020-06-25T02:54:11.083Z","1.35.2-next-1593053845-702afaac.0":"2020-06-25T02:58:28.401Z","1.35.3-next-1593055253-0c4dc1da.0":"2020-06-25T03:21:53.841Z","1.35.2":"2020-06-25T03:25:39.815Z","1.35.3-next-1593086359-6ad88faf.0":"2020-06-25T12:00:23.598Z","1.35.3-next-1593088664-326f25c4.0":"2020-06-25T12:38:46.570Z","1.35.3-next-1593120365-67018c4c.0":"2020-06-25T21:27:04.258Z","1.35.3-next-1593170082-5d285290.0":"2020-06-26T11:15:50.052Z","1.35.4-next-1593170336-82741007.0":"2020-06-26T11:19:52.508Z","1.35.5-next-1593171431-5063cfd0.0":"2020-06-26T11:38:07.503Z","1.35.4":"2020-06-26T11:43:28.798Z","1.35.5-next-1593172009-2bf4674d.0":"2020-06-26T11:47:51.000Z","1.36.1-next-1593172030-a801d848.0":"2020-06-26T11:48:09.885Z","1.36.0":"2020-06-26T12:10:56.716Z","1.36.1-next-1593184843-51b37031.0":"2020-06-26T15:23:12.750Z","1.36.1-next-1593196174-f7ba2714.0":"2020-06-26T18:32:24.802Z","1.36.1-next-1593197890-f1d237ef.0":"2020-06-26T19:00:51.280Z","1.36.1-next-1593228055-005c0619.0":"2020-06-27T03:23:32.499Z","1.36.1-next-1593235437-a888e8d6.0":"2020-06-27T05:26:44.578Z","1.36.1-next-1593236429-51a1dc55.0":"2020-06-27T05:43:12.188Z","1.36.1-next-1593431998-aaaa9322.0":"2020-06-29T12:02:34.178Z","1.36.1-next-1593433296-6c43e818.0":"2020-06-29T12:24:31.414Z","1.36.1-next-1593441245-06d0ffe1.0":"2020-06-29T14:37:26.980Z","1.36.1-next-1593441744-b471c351.0":"2020-06-29T14:44:57.022Z","1.36.1-next-1593443432-deedac67.0":"2020-06-29T15:13:12.369Z","1.36.1-next-1593444146-e57c9734.0":"2020-06-29T15:25:26.953Z","1.37.1-next-1593444160-67f3495a.0":"2020-06-29T15:25:56.851Z","1.37.0":"2020-06-29T15:33:16.289Z","1.37.1-next-1593527079-fd512ae5.0":"2020-06-30T14:27:26.152Z","1.37.1-next-1594032190-b01bdd5a.0":"2020-07-06T10:46:00.532Z","2.0.0-alpha.0":"2020-07-06T11:44:11.327Z","1.37.1-next-1594042055-f7fb2c43.0":"2020-07-06T13:30:20.413Z","1.37.1-next-1594042844-211acf27.0":"2020-07-06T13:43:25.325Z","1.37.2-next-1594042958-931b56e8.0":"2020-07-06T13:45:34.984Z","1.37.1":"2020-07-06T13:47:41.596Z","1.37.1-next-1594111137-d6339112.0":"2020-07-07T08:41:41.107Z","2.0.0-alpha.1":"2020-07-08T11:04:54.117Z","1.37.2-next-1594231465-f4cbb7fb.0":"2020-07-08T18:07:19.532Z","1.37.2-next-1594232161-8a51cbd6.0":"2020-07-08T18:18:48.143Z","1.37.2-next-1594232564-8a51cbd6.0":"2020-07-08T18:26:08.106Z","1.37.2-next-1594282725-6cbe6484.0":"2020-07-09T08:21:33.898Z","1.37.2-next-1594283073-8a557557.0":"2020-07-09T08:27:19.770Z","1.37.2-next-1594293976-19cc07b1.0":"2020-07-09T11:29:40.832Z","1.37.2-next-1594294015-b2927c66.0":"2020-07-09T11:30:15.967Z","1.37.2-next-1594294994-a97cd941.0":"2020-07-09T11:46:10.882Z","1.38.1-next-1594295189-8b103c1f.0":"2020-07-09T11:49:24.450Z","1.38.0":"2020-07-09T11:51:11.836Z","1.38.1-next-1594312222-cf1fd3f3.0":"2020-07-09T16:33:16.322Z","1.38.1-next-1594328729-bc58f996.0":"2020-07-09T21:08:38.637Z","1.38.1-next-1594330997-c93aa09e.0":"2020-07-09T21:46:19.041Z","1.38.1-next-1594332443-8a00c5b5.0":"2020-07-09T22:10:17.070Z","1.38.1-next-1594369970-663419e3.0":"2020-07-10T08:35:40.712Z","1.38.1-next-1594376555-664a3d11.0":"2020-07-10T10:25:09.549Z","1.38.1-next-1594378057-f713e94a.0":"2020-07-10T10:50:22.477Z","1.38.2-next-1594378252-f5cfe71d.0":"2020-07-10T10:53:36.580Z","1.38.1":"2020-07-10T10:54:15.901Z","1.38.3-next-1594384746-32ea3f02.0":"2020-07-10T12:41:51.525Z","1.38.2":"2020-07-10T12:43:32.078Z","1.38.3-next-1594385777-433e3ace.0":"2020-07-10T12:59:07.012Z","2.0.0-alpha.5":"2020-07-10T13:06:05.073Z","1.38.3-next-1594642501-8d89315d.0":"2020-07-13T12:18:02.048Z","1.38.3-next-1594643568-b7f9a6e2.0":"2020-07-13T12:35:44.148Z","1.38.3-next-1594650335-45c13633.0":"2020-07-13T14:28:24.350Z","1.39.2-next-1594654403-5d690c94.0":"2020-07-13T15:36:18.686Z","1.39.1":"2020-07-13T15:37:23.636Z","1.38.3-next-1594737036-936a2d93.0":"2020-07-14T14:33:35.955Z","1.39.3-next-1594740572-0e08636c.0":"2020-07-14T15:32:27.352Z","1.39.3-next-1594754486-3f4c8d9c.0":"2020-07-14T19:24:11.036Z","1.39.2":"2020-07-14T19:25:28.957Z","1.39.3-next-1594809539-bfceb7fe.0":"2020-07-15T10:41:45.741Z","1.40.1-next-1594809654-8761826e.0":"2020-07-15T10:43:41.290Z","1.40.0":"2020-07-15T10:44:23.359Z","1.39.3-next-1594810237-e5337606.0":"2020-07-15T10:53:29.810Z","1.39.3-next-1594813468-60d8396b.0":"2020-07-15T11:47:23.341Z","1.39.3-next-1594814447-a26e270e.0":"2020-07-15T12:04:01.646Z","1.39.3-next-1594832011-d4751dd8.0":"2020-07-15T16:56:25.908Z","1.39.3-next-1594832446-cac48aa9.0":"2020-07-15T17:03:44.053Z","1.39.3-next-1594833698-9129eb91.0":"2020-07-15T17:24:37.712Z","1.39.3-next-1594834400-b4212cd3.0":"2020-07-15T17:36:36.669Z","1.40.1-next-1594864906-2a16764c.0":"2020-07-16T02:05:54.718Z","1.40.1-next-1594868183-2f3f4e56.0":"2020-07-16T03:00:20.123Z","1.40.1-next-1594870573-e49491f7.0":"2020-07-16T03:40:09.753Z","1.40.1-next-1594898063-817e9867.0":"2020-07-16T11:18:00.991Z","1.41.1-next-1594899124-f8e682ca.0":"2020-07-16T11:35:54.168Z","1.41.1-next-1594904480-c3421ffc.0":"2020-07-16T13:05:16.611Z","1.41.1-next-1594905040-3733a603.0":"2020-07-16T13:15:01.105Z","1.41.2-next-1594911210-60d938fb.0":"2020-07-16T14:57:32.414Z","1.41.2-next-1594913330-b864e920.0":"2020-07-16T15:32:50.482Z","1.41.3-next-1594913470-2e2c5d18.0":"2020-07-16T15:35:00.575Z","1.41.2":"2020-07-16T16:36:28.961Z","1.41.3-next-1594917390-6046d6fd.0":"2020-07-16T16:40:44.562Z","1.41.3-next-1594926395-70ffccb0.0":"2020-07-16T19:10:31.317Z","1.41.3-next-1595005637-f8a8f5c3.0":"2020-07-17T17:11:25.268Z","1.41.3-next-1595008005-e0ee1f4e.0":"2020-07-17T17:50:25.891Z","1.41.3-next-1595008382-836a4804.0":"2020-07-17T17:56:48.686Z","1.41.3-next-1595010640-9d9a9ea1.0":"2020-07-17T18:35:04.505Z","1.41.3-next-1595268075-a3522449.0":"2020-07-20T18:05:41.970Z","1.41.2-next-1595282226-92693a43.0":"2020-07-20T22:00:31.920Z","1.41.2-next-1595294706-11805640.0":"2020-07-21T01:29:21.376Z","1.41.2-next-1595298686-48d5c565.0":"2020-07-21T02:35:14.876Z","1.41.3-next-1595300412-0bb5e5e3.0":"2020-07-21T03:04:19.600Z","1.41.3-next-1595327631-2b147e8c.0":"2020-07-21T10:37:47.907Z","1.41.4-next-1595328202-2351e36f.0":"2020-07-21T10:46:56.918Z","1.41.3":"2020-07-21T10:56:34.587Z","1.41.4-next-1595333985-ef318f78.0":"2020-07-21T12:24:11.776Z","1.41.4-next-1595334862-85cda14a.0":"2020-07-21T12:38:32.269Z","1.42.0":"2020-07-21T12:40:32.779Z","1.42.1-next-1595351340-3babebc5.0":"2020-07-21T17:13:16.001Z","1.42.1-next-1595357119-a3799158.0":"2020-07-21T18:49:45.242Z","1.42.1-next-1595358007-a285e756.0":"2020-07-21T19:04:29.617Z","1.42.2-next-1595358304-9ae40bc4.0":"2020-07-21T19:09:43.997Z","1.42.1":"2020-07-21T19:20:54.926Z","1.43.1-next-1595417423-bf3e63a7.0":"2020-07-22T11:35:23.031Z","1.43.0":"2020-07-22T11:41:02.618Z","1.43.1-next-1595432835-5e9d44f8.0":"2020-07-22T15:51:54.551Z","1.43.2-next-1595432988-9577659b.0":"2020-07-22T15:54:48.797Z","1.43.4-next-1595436809-1db87882.0":"2020-07-22T16:57:59.087Z","1.43.3":"2020-07-22T17:15:48.865Z","2.0.0-alpha.7":"2020-07-23T09:56:15.061Z","1.43.4-next-1595552590-48ce13aa.0":"2020-07-24T01:07:34.521Z","1.43.4-next-1595553515-81b33b65.0":"2020-07-24T01:23:13.118Z","1.43.5-next-1595554793-085b61e6.0":"2020-07-24T01:44:15.164Z","1.43.4":"2020-07-24T01:51:42.333Z","1.43.6-next-1595609316-2326a724.0":"2020-07-24T16:53:00.133Z","1.43.5":"2020-07-24T16:54:47.135Z","1.43.5-next-1595612787-b88d515f.0":"2020-07-24T17:51:04.929Z","1.43.6-next-1595720614-cacc6182.0":"2020-07-25T23:48:05.779Z","1.43.5-next-1595725185-860ebcb0.0":"2020-07-26T01:04:03.213Z","1.43.5-next-1595726573-6ab7a20c.0":"2020-07-26T01:27:04.117Z","1.43.6-next-1595848332-32fad928.0":"2020-07-27T11:16:44.824Z","1.43.7-next-1595848459-adcfd257.0":"2020-07-27T11:18:56.595Z","1.43.6":"2020-07-27T11:25:44.084Z","1.43.5-next-1595854815-cb58089e.0":"2020-07-27T13:04:56.486Z","1.43.7-next-1595963318-b2229295.0":"2020-07-28T19:13:40.023Z","1.43.7-next-1595964224-f1c7702d.0":"2020-07-28T19:29:14.408Z","1.43.7-next-1595964785-6312033f.0":"2020-07-28T19:38:00.029Z","1.43.7-next-1595964985-5bb00b39.0":"2020-07-28T19:41:37.017Z","1.43.7-next-1595965464-50de5295.0":"2020-07-28T19:49:15.203Z","1.43.7-next-1596042368-a87782f8.0":"2020-07-29T17:10:30.899Z","1.43.7-next-1596051671-32c819e6.0":"2020-07-29T19:42:29.976Z","1.43.7-next-1596053055-f01ecd48.0":"2020-07-29T20:05:35.476Z","1.43.7-next-1596056362-bce8356e.0":"2020-07-29T21:05:50.324Z","1.43.7-next-1596058289-1ce5aba3.0":"2020-07-29T21:32:54.096Z","1.44.1-next-1596063927-4812ee41.0":"2020-07-29T23:11:42.065Z","1.44.0":"2020-07-29T23:24:06.077Z","1.44.1-next-1596122797-252bda56.0":"2020-07-30T15:33:47.557Z","1.44.1-next-1596124738-091d8aaa.0":"2020-07-30T16:06:04.529Z","1.44.1-next-1596126560-b3ef1c69.0":"2020-07-30T16:38:34.218Z","1.44.1-next-1596131312-87c56632.0":"2020-07-30T17:58:03.657Z","1.44.1-next-1596134140-b6040981.0":"2020-07-30T18:46:20.618Z","1.44.2-next-1596141686-3444b9e7.0":"2020-07-30T20:52:07.512Z","1.43.7-next-1596142580-316d8f24.0":"2020-07-30T20:57:52.824Z","1.44.2-next-1596146994-607ba953.0":"2020-07-30T22:21:35.216Z","1.44.2-next-1596169244-e640738d.0":"2020-07-31T04:31:15.145Z","1.44.2-next-1596170076-4aa832d1.0":"2020-07-31T04:46:12.924Z","1.44.2-next-1596217722-c51db5f3.0":"2020-07-31T17:51:14.056Z","1.44.2-next-1596219609-d8c6f904.0":"2020-07-31T18:22:54.474Z","1.44.2-next-1596220109-18de1ce5.0":"2020-07-31T18:38:07.058Z","1.44.2-next-1596221461-45aa9c9d.0":"2020-07-31T18:53:32.416Z","1.44.2-next-1596222428-298ce5e2.0":"2020-07-31T19:09:34.022Z","1.44.2-next-1596411906-eb40c053.0":"2020-08-02T23:54:06.764Z","1.44.1":"2020-08-03T12:05:13.205Z","1.44.3-next-1596460637-eda6dd32.0":"2020-08-03T13:26:29.555Z","1.44.3-next-1596468860-99c97c9f.0":"2020-08-03T15:43:36.718Z","1.44.3-next-1596474634-7d70c2a5.0":"2020-08-03T17:20:10.646Z","1.44.3-next-1596488022-9427eeab.0":"2020-08-03T21:02:44.957Z","1.45.1":"2020-08-04T12:59:10.136Z","1.45.2-next-1596563413-5a5ebb15.0":"2020-08-04T17:59:28.351Z","1.45.2-next-1596578728-3928707d.0":"2020-08-04T22:14:49.023Z","1.45.3":"2020-08-04T22:53:31.050Z","1.45.4-next-1596701713-cdb4dbac.0":"2020-08-06T08:16:37.911Z","1.45.4-next-1596704983-7408682d.0":"2020-08-06T09:11:04.649Z","1.45.4-next-1596713300-529d7a6e.0":"2020-08-06T11:29:39.711Z","1.45.4-next-1596714259-44b326b6.0":"2020-08-06T11:45:36.641Z","1.45.4-next-1596715786-1423273f.0":"2020-08-06T12:11:16.286Z","1.45.4-next-1596723283-44ad01aa.0":"2020-08-06T14:21:26.349Z","1.45.5-next-1596724691-d5b4f1b4.0":"2020-08-06T14:45:29.628Z","1.45.6-next-1596725783-033db1aa.0":"2020-08-06T15:03:27.965Z","1.45.6-next-1596743099-62c8478e.0":"2020-08-06T19:54:21.284Z","2.0.1-next-1596745561-e221242d.0":"2020-08-06T20:27:04.392Z","1.45.6-next-1596752649-5a32328f.0":"2020-08-06T22:33:33.108Z","1.45.6-next-1596766432-a38c1cb8.0":"2020-08-07T02:21:10.347Z","1.45.6-next-1596767211-1e9105eb.0":"2020-08-07T02:36:16.524Z","1.45.7-next-1596768253-00276882.0":"2020-08-07T02:53:47.227Z","1.45.8-next-1596771421-46f425a3.0":"2020-08-07T03:46:35.401Z","1.45.10":"2020-08-07T04:31:49.686Z","1.46.0":"2020-08-07T13:23:12.671Z","2.0.1-next-1596814201-63a1d1b8.0":"2020-08-07T15:31:34.914Z","1.46.1-next-1597063734-6516962f.0":"2020-08-10T12:58:43.821Z","2.0.1-next-1597144623-0347f39c.0":"2020-08-11T11:19:35.131Z","2.0.1-next-1597146304-a4725a77.0":"2020-08-11T11:47:40.704Z","2.0.1-next-1597155073-2ea4a7fa.0":"2020-08-11T14:13:48.397Z","1.46.1-next-1597168996-f927fbc5.0":"2020-08-11T18:12:56.680Z","1.46.1-next-1597171954-a18e0f15.0":"2020-08-11T19:02:00.195Z","1.46.2-next-1597199939-9dfc4335.0":"2020-08-12T02:48:33.384Z","1.46.1":"2020-08-12T03:06:40.550Z","2.0.1-next-1597201691-4d17dedc.0":"2020-08-12T03:10:21.152Z","2.0.1-next-1597223939-7c1ae720.0":"2020-08-12T09:21:09.880Z","2.0.1-next-1597229103-6312c2e4.0":"2020-08-12T10:47:11.224Z","2.0.1-next-1597231755-f760a25e.0":"2020-08-12T11:31:42.989Z","2.0.1-next-1597232841-aa09393a.0":"2020-08-12T11:49:36.396Z","2.0.1-next-1597232911-ea9d2963.0":"2020-08-12T11:50:38.762Z","2.0.1-next-1597235074-ea9d2963.0":"2020-08-12T12:27:03.505Z","2.0.1-next-1597235917-23b1e88d.0":"2020-08-12T12:40:37.826Z","2.0.1-next-1597237166-8bba95b0.0":"2020-08-12T13:01:59.434Z","2.0.1-next-1597238010-37a6ff5a.0":"2020-08-12T13:15:43.275Z","2.0.0":"2020-08-12T13:32:18.514Z","2.0.1-next-1597239313-af45265a.0":"2020-08-12T13:37:33.053Z","2.0.1-next-1597239670-339bfd09.0":"2020-08-12T13:43:32.729Z","2.0.1-next-1597240037-339bfd09.0":"2020-08-12T13:49:19.522Z","2.0.1-next-1597246522-49e14675.0":"2020-08-12T15:37:37.974Z","2.0.1-next-1597246937-49e14675.0":"2020-08-12T15:44:47.592Z","2.0.1-next-1597248813-b2d73efa.0":"2020-08-12T16:15:51.223Z","2.0.1-next-1597250776-5a7997dc.0":"2020-08-12T16:48:38.151Z","2.0.1-next-1597251397-5a7997dc.0":"2020-08-12T16:58:49.818Z","2.0.1-next-1597262026-2e1c371d.0":"2020-08-12T19:55:31.613Z","2.0.1-next-1597262161-ec425d79.0":"2020-08-12T19:58:17.323Z","2.0.1-next-1597283887-ec425d79.0":"2020-08-13T02:00:38.367Z","2.0.1-next-1597316587-ec425d79.0":"2020-08-13T11:05:25.123Z","2.0.1-next-1597318746-239b9e83.0":"2020-08-13T11:41:29.172Z","2.0.1-next-1597322600-fa827fb5.0":"2020-08-13T12:45:29.944Z","2.0.1-next-1597324298-c52fcf64.0":"2020-08-13T13:14:17.849Z","2.0.1-next-1597325045-e4854fc2.0":"2020-08-13T13:26:26.946Z","2.0.1-next-1597325193-beecbbd0.0":"2020-08-13T13:28:54.626Z","2.0.1-next-1597326203-e4854fc2.0":"2020-08-13T13:45:29.003Z","2.0.1-next-1597327104-d9f8adba.0":"2020-08-13T14:00:58.057Z","2.0.1-next-1597330862-9edbb1e2.0":"2020-08-13T15:03:31.737Z","2.0.1-next-1597332243-f211c7eb.0":"2020-08-13T15:26:21.658Z","2.0.1-next-1597332303-7096cba0.0":"2020-08-13T15:27:05.084Z","2.0.1-next-1597333863-f211c7eb.0":"2020-08-13T15:53:45.637Z","2.0.1-next-1597335167-7096cba0.0":"2020-08-13T16:14:44.533Z","2.0.1-next-1597336578-7096cba0.0":"2020-08-13T16:38:40.023Z","2.0.1-next-1597344508-3e7f53cc.0":"2020-08-13T18:50:40.984Z","2.0.1-next-1597344989-3e7f53cc.0":"2020-08-13T18:58:43.738Z","2.0.1-next-1597345437-bd0d34c0.0":"2020-08-13T19:06:13.256Z","2.0.1-next-1597345983-759f44f4.0":"2020-08-13T19:15:18.374Z","2.0.1-next-1597346104-13163c5b.0":"2020-08-13T19:17:16.170Z","2.0.1-next-1597347302-13163c5b.0":"2020-08-13T19:37:42.612Z","2.0.1-next-1597348775-4100afc8.0":"2020-08-13T20:02:08.779Z","2.0.1":"2020-08-13T20:21:40.558Z","2.0.2-next-1597349994-566495b6.0":"2020-08-13T20:22:22.025Z","2.0.2-next-1597353011-cdf8d0f8.0":"2020-08-13T21:12:34.099Z","2.0.2-next-1597354003-32c76c10.0":"2020-08-13T21:29:01.608Z","2.0.2-next-1597368267-af8f77b9.0":"2020-08-14T01:26:23.285Z","2.0.2-next-1597407428-5889206a.0":"2020-08-14T12:19:08.712Z","2.0.2-next-1597408349-9e87af75.0":"2020-08-14T12:34:22.234Z","2.0.2-next-1597411199-381a2087.0":"2020-08-14T13:22:26.275Z","2.0.2-next-1597411881-828819f9.0":"2020-08-14T13:33:55.152Z","2.0.2-next-1597417313-e1f6b2e9.0":"2020-08-14T15:04:12.517Z","2.0.2-next-1597426437-bd242fea.0":"2020-08-14T17:36:12.881Z","2.0.2-next-1597426949-8ae0b5bb.0":"2020-08-14T17:44:50.662Z","2.0.3-next-1597426991-5cdf9518.0":"2020-08-14T17:45:23.156Z","2.0.2":"2020-08-14T17:59:55.774Z","2.0.3-next-1597429581-5cdf9518.0":"2020-08-14T18:28:49.077Z","2.0.3-next-1597430496-5cdf9518.0":"2020-08-14T18:43:50.111Z","2.0.3-next-1597445678-e66bd347.0":"2020-08-14T22:57:00.640Z","2.0.3-next-1597487181-dac72715.0":"2020-08-15T10:28:32.881Z","2.0.4-next-1597487304-25d12892.0":"2020-08-15T10:30:27.543Z","2.0.3":"2020-08-15T10:45:53.334Z","2.0.4-next-1597658152-e16d86f2.0":"2020-08-17T09:57:55.290Z","2.0.4-next-1597659092-da85a29b.0":"2020-08-17T10:13:49.209Z","2.0.5-next-1597665704-0d768433.0":"2020-08-17T12:04:02.752Z","2.0.5-next-1597668308-b2f79f7f.0":"2020-08-17T12:47:38.572Z","2.0.5-next-1597669219-449650c8.0":"2020-08-17T13:02:36.361Z","2.0.5-next-1597670827-1e01ff9e.0":"2020-08-17T13:29:38.819Z","2.0.5-next-1597671877-6f632d36.0":"2020-08-17T13:46:44.187Z","2.0.5-next-1597672217-3bea9935.0":"2020-08-17T13:52:11.421Z","2.0.4":"2020-08-17T14:00:59.906Z","2.0.5-next-1597683914-21b721c0.0":"2020-08-17T17:07:30.482Z","2.0.5-next-1597685497-9337fa89.0":"2020-08-17T17:33:45.016Z","2.0.5-next-1597694193-3a02ab41.0":"2020-08-17T19:58:56.725Z","2.0.5-next-1597697358-04fa30bd.0":"2020-08-17T20:51:45.649Z","2.0.5-next-1597735223-6721102c.0":"2020-08-18T07:23:10.729Z","2.0.5-next-1597756969-d0ca5c03.0":"2020-08-18T13:24:37.006Z","2.0.5-next-1597757551-81dfc75e.0":"2020-08-18T13:35:00.042Z","2.0.5-next-1597757648-338577b6.0":"2020-08-18T13:36:21.693Z","2.0.5-next-1597757794-a960d622.0":"2020-08-18T13:38:52.826Z","2.0.5-next-1597758353-8063dfa8.0":"2020-08-18T13:48:22.787Z","2.0.5-next-1597760047-8063dfa8.0":"2020-08-18T14:16:24.872Z","2.0.5-next-1597760858-2f20f81e.0":"2020-08-18T14:30:04.810Z","2.0.5-next-1597762572-abb5b88e.0":"2020-08-18T14:58:35.904Z","2.0.5-next-1597764745-0f7c65ef.0":"2020-08-18T15:34:46.091Z","2.0.5-next-1597766574-ef9446f3.0":"2020-08-18T16:05:15.353Z","2.0.5-next-1597773550-c63ebf1d.0":"2020-08-18T18:01:32.526Z","2.0.5-next-1597773572-f601925c.0":"2020-08-18T18:01:51.097Z","2.0.5-next-1597773628-7cf4c771.0":"2020-08-18T18:02:57.725Z","2.0.5-next-1597774464-dd1542bb.0":"2020-08-18T18:16:33.632Z","2.0.5-next-1597775108-bfa19fce.0":"2020-08-18T18:27:40.213Z","2.0.5-next-1597780246-7cf4c771.0":"2020-08-18T19:52:57.176Z","2.0.5-next-1597783670-d5c167bd.0":"2020-08-18T20:49:46.015Z","2.0.5-next-1597786246-eae4aa26.0":"2020-08-18T21:33:16.065Z","2.0.5-next-1597787058-33e8b7c6.0":"2020-08-18T21:46:52.031Z","2.0.5-next-1597789402-11528e29.0":"2020-08-18T22:25:45.379Z","2.1.1-next-1597790800-c5397a15.0":"2020-08-18T22:48:47.808Z","2.1.0":"2020-08-18T23:03:19.188Z","2.1.1-next-1597840297-29b52ffd.0":"2020-08-19T12:33:57.135Z","2.1.1-next-1597853580-3045583d.0":"2020-08-19T16:15:04.134Z","2.1.1-next-1597855175-a3ec42ca.0":"2020-08-19T16:41:54.522Z","2.1.1-next-1597855677-8e6d9df4.0":"2020-08-19T16:50:13.712Z","2.1.1-next-1597859455-8e6d9df4.0":"2020-08-19T17:53:15.619Z","2.1.1-next-1597860467-2bc72678.0":"2020-08-19T18:10:11.205Z","2.1.1-next-1597863537-8aee349a.0":"2020-08-19T19:01:03.349Z","2.1.1-next-1597864689-8aee349a.0":"2020-08-19T19:20:36.352Z","2.1.1-next-1597869772-04a5120e.0":"2020-08-19T20:44:48.689Z","2.1.1-next-1597870219-06c97be2.0":"2020-08-19T20:52:36.845Z","2.1.1-next-1597871105-88c801cc.0":"2020-08-19T21:07:24.177Z","2.1.1-next-1597871191-672b03ed.0":"2020-08-19T21:08:46.323Z","2.1.1-next-1597875608-4f4335aa.0":"2020-08-19T22:22:25.026Z","2.1.1-next-1597875693-29faf328.0":"2020-08-19T22:23:42.806Z","2.1.1-next-1597878575-8f338472.0":"2020-08-19T23:11:56.110Z","2.1.1-next-1597881583-831266a1.0":"2020-08-20T00:02:22.172Z","2.2.1-next-1597889287-a9772ec8.0":"2020-08-20T02:10:50.812Z","2.2.0":"2020-08-20T02:34:57.770Z","2.2.1-next-1597929665-aeaa2cb1.0":"2020-08-20T13:23:46.911Z","2.2.1-next-1597931828-a06bc161.0":"2020-08-20T13:59:42.758Z","2.2.1-next-1597932138-30cff415.0":"2020-08-20T14:04:28.354Z","2.2.1-next-1597933592-30cff415.0":"2020-08-20T14:28:40.444Z","2.2.1-next-1597934334-a06bc161.0":"2020-08-20T14:41:16.384Z","2.2.1-next-1597937730-e7114708.0":"2020-08-20T15:37:25.929Z","2.2.1-next-1597938784-eed5ece5.0":"2020-08-20T15:55:09.218Z","2.2.1-next-1597939783-eed5ece5.0":"2020-08-20T16:11:50.121Z","2.2.1-next-1597941363-30cff415.0":"2020-08-20T16:38:45.503Z","2.2.1-next-1597952587-30cff415.0":"2020-08-20T19:45:13.838Z","2.2.1-next-1597959456-f524f830.0":"2020-08-20T21:39:53.035Z","2.2.1-next-1597962156-063f6baa.0":"2020-08-20T22:25:02.272Z","1.47.1-next-1598011024-6051392b.0":"2020-08-21T12:06:27.359Z","1.47.0":"2020-08-21T12:28:14.316Z","2.2.1-next-1598018145-063f6baa.0":"2020-08-21T13:57:32.544Z","2.2.2-next-1598026898-9caf050d.0":"2020-08-21T16:23:54.923Z","2.2.2-next-1598027588-9caf050d.0":"2020-08-21T16:35:30.046Z","2.2.2-next-1598029281-d07b6b5b.0":"2020-08-21T17:03:51.796Z","2.2.2-next-1598066805-9caf050d.0":"2020-08-22T03:28:53.580Z","2.2.2-next-1598078104-ab598e0d.0":"2020-08-22T06:37:37.519Z","2.2.2-next-1598078717-13d1c8e2.0":"2020-08-22T06:47:35.804Z","2.2.2-next-1598079919-7917afbe.0":"2020-08-22T07:07:51.303Z","2.2.2-next-1598105364-87d59521.0":"2020-08-22T14:11:46.122Z","2.2.1":"2020-08-22T19:56:04.724Z","2.3.1-next-1598129360-966fa6fe.0":"2020-08-22T20:51:27.300Z","2.3.2-next-1598130821-4470b23c.0":"2020-08-22T21:15:41.003Z","2.3.2-next-1598133017-4470b23c.0":"2020-08-22T21:52:15.338Z","2.3.1":"2020-08-23T01:58:45.360Z","2.3.2-next-1598265120-42473c34.0":"2020-08-24T10:34:12.342Z","1.47.1-next-1598265422-bb0cb955.0":"2020-08-24T10:46:33.895Z","1.47.1-next-1598265868-5aebadbd.0":"2020-08-24T10:54:13.777Z","2.3.2-next-1598267391-fbcb9df5.0":"2020-08-24T11:12:12.533Z","1.48.1-next-1598268302-46367a13.0":"2020-08-24T11:35:06.369Z","1.48.0":"2020-08-24T11:45:14.315Z","2.3.2-next-1598288525-7d6db5a3.0":"2020-08-24T17:04:28.589Z","2.3.2-next-1598311032-8d656c42.0":"2020-08-24T23:19:26.111Z","2.3.2-next-1598347523-ed4bfd8a.0":"2020-08-25T09:27:15.497Z","2.3.2-next-1598347551-c7779255.0":"2020-08-25T09:27:51.061Z","2.3.2-next-1598358062-87ce1c52.0":"2020-08-25T12:23:26.775Z","2.3.2-next-1598359015-c9522060.0":"2020-08-25T12:39:05.172Z","2.3.2-next-1598359080-3d61264d.0":"2020-08-25T12:40:23.482Z","2.3.2-next-1598362190-9b823fd8.0":"2020-08-25T13:32:23.231Z","2.3.2-next-1598362665-bd191f24.0":"2020-08-25T13:40:09.522Z","2.3.2-next-1598372021-9e2f344c.0":"2020-08-25T16:15:51.870Z","2.3.2-next-1598384617-8d05b97f.0":"2020-08-25T19:46:00.323Z","2.3.2-next-1598386779-66e41eb5.0":"2020-08-25T20:22:08.481Z","2.3.2-next-1598389767-cf60ff98.0":"2020-08-25T21:11:29.465Z","2.3.2-next-1598389805-cf60ff98.0":"2020-08-25T21:12:33.936Z","2.3.2-next-1598393403-99d3eb55.0":"2020-08-25T22:12:24.945Z","2.3.2-next-1598395965-8c63aa9e.0":"2020-08-25T22:55:13.956Z","2.3.2-next-1598439065-c0278e9f.0":"2020-08-26T10:53:03.195Z","2.3.2-next-1598439616-0cd0e631.0":"2020-08-26T11:02:27.605Z","2.3.2-next-1598440694-f9cfb551.0":"2020-08-26T11:20:36.567Z","2.3.2-next-1598441720-981dc1bd.0":"2020-08-26T11:37:53.054Z","2.3.3-next-1598441814-eb3fe2b3.0":"2020-08-26T11:39:02.402Z","2.3.3-next-1598441850-f49a2d9a.0":"2020-08-26T11:39:44.203Z","2.3.3-next-1598442966-f49a2d9a.0":"2020-08-26T11:58:23.934Z","2.3.3-next-1598444882-96009724.0":"2020-08-26T12:30:07.899Z","2.4.1-next-1598445276-fe8e8d4b.0":"2020-08-26T12:36:43.877Z","2.4.1-next-1598448503-fe8e8d4b.0":"2020-08-26T13:30:45.104Z","2.4.0":"2020-08-26T13:49:31.804Z","2.4.1-next-1598453444-a9c7bea9.0":"2020-08-26T14:52:57.806Z","2.4.1-next-1598454233-8d6006e3.0":"2020-08-26T15:06:11.271Z","2.4.1-next-1598454437-af4a7e21.0":"2020-08-26T15:09:44.354Z","2.4.1-next-1598455420-5a4574b7.0":"2020-08-26T15:25:49.221Z","2.4.1-next-1598455785-da2ca773.0":"2020-08-26T15:31:10.029Z","2.4.1-next-1598456749-d61719c0.0":"2020-08-26T15:47:13.774Z","2.4.1-next-1598457160-54af56d6.0":"2020-08-26T15:53:47.811Z","2.4.1-next-1598458310-d5007e4f.0":"2020-08-26T16:14:20.904Z","2.4.1-next-1598459582-d5007e4f.0":"2020-08-26T16:35:15.360Z","2.4.1-next-1598460571-5866de05.0":"2020-08-26T16:51:41.468Z","2.4.1-next-1598461028-5866de05.0":"2020-08-26T16:59:58.277Z","1.48.1":"2020-08-26T18:04:08.439Z","1.48.2-next-1598464963-9ccf21d9.0":"2020-08-26T18:13:05.236Z","2.4.2-next-1598466571-6412a60a.0":"2020-08-26T18:31:42.988Z","2.4.2-next-1598468870-2c6fa743.0":"2020-08-26T19:10:20.172Z","2.4.2-next-1598470440-3868a808.0":"2020-08-26T19:35:51.187Z","2.4.2-next-1598470866-3868a808.0":"2020-08-26T19:43:27.223Z","2.4.1":"2020-08-26T20:01:14.983Z","2.4.2-next-1598472235-0252eb44.0":"2020-08-26T20:06:17.412Z","2.4.2-next-1598473779-b4730947.0":"2020-08-26T20:32:03.691Z","2.4.3-next-1598477257-f4f93890.0":"2020-08-26T21:29:51.172Z","2.4.3-next-1598478068-f4f93890.0":"2020-08-26T21:43:14.668Z","2.4.2":"2020-08-26T22:42:57.230Z","2.4.1-next-1598513578-54af56d6.0":"2020-08-27T07:34:22.870Z","2.4.3-next-1598517629-b5f1f466.0":"2020-08-27T08:42:45.782Z","2.4.3-next-1598519508-3c25dad5.0":"2020-08-27T09:13:59.715Z","2.4.3-next-1598519803-2b4f860a.0":"2020-08-27T09:18:55.961Z","2.4.3-next-1598519988-9b78c838.0":"2020-08-27T09:20:59.961Z","2.4.3-next-1598521092-55cfff36.0":"2020-08-27T09:40:37.552Z","2.4.3-next-1598521775-9b75a122.0":"2020-08-27T09:50:59.297Z","2.4.3-next-1598522979-044d0629.0":"2020-08-27T10:10:53.647Z","2.4.3-next-1598523658-d16826a7.0":"2020-08-27T10:22:26.268Z","2.4.3-next-1598528582-b8920e19.0":"2020-08-27T11:45:14.508Z","2.4.3-next-1598534513-ac4dcf53.0":"2020-08-27T13:23:58.095Z","2.4.3-next-1598535744-ac4dcf53.0":"2020-08-27T13:44:29.973Z","2.4.3-next-1598537527-601d3a6a.0":"2020-08-27T14:14:29.590Z","2.4.3-next-1598540824-ca543081.0":"2020-08-27T15:09:32.920Z","2.4.3-next-1598543671-a3ef15d9.0":"2020-08-27T15:56:49.132Z","2.4.3-next-1598544100-a2029533.0":"2020-08-27T16:04:04.113Z","2.4.3-next-1598545650-3b025dd7.0":"2020-08-27T16:29:50.083Z","2.4.3-next-1598546155-46ac3d6b.0":"2020-08-27T16:38:06.813Z","2.4.3-next-1598546250-8b41ec87.0":"2020-08-27T16:38:51.627Z","2.4.3-next-1598546215-7c2469c5.0":"2020-08-27T16:39:11.788Z","2.4.3-next-1598548037-33a36284.0":"2020-08-27T17:08:42.796Z","2.4.3-next-1598548814-33a36284.0":"2020-08-27T17:21:37.527Z","2.4.3-next-1598548795-f0b8b5cb.0":"2020-08-27T17:22:05.608Z","2.4.3-next-1598549515-f0558f9e.0":"2020-08-27T17:33:19.656Z","2.4.3-next-1598554585-2ac2a31e.0":"2020-08-27T18:59:00.222Z","2.4.3-next-1598554932-b511dd3c.0":"2020-08-27T19:04:32.704Z","2.4.3-next-1598555067-6558e1a7.0":"2020-08-27T19:06:53.429Z","2.4.3-next-1598555146-4da9acd2.0":"2020-08-27T19:08:14.738Z","2.4.3-next-1598556966-058c93a6.0":"2020-08-27T19:38:37.188Z","2.4.3-next-1598558125-f6830a3a.0":"2020-08-27T19:57:31.487Z","2.4.3-next-1598560387-9fcd2760.0":"2020-08-27T20:35:17.566Z","2.4.3-next-1598561912-3e1360c7.0":"2020-08-27T21:00:54.100Z","2.4.3-next-1598566293-3e1360c7.0":"2020-08-27T22:14:09.479Z","2.4.3-next-1598567697-222031c7.0":"2020-08-27T22:37:23.085Z","2.4.3-next-1598568575-f3b0eb02.0":"2020-08-27T22:51:54.283Z","2.4.3-next-1598572600-a22d3ddc.0":"2020-08-27T23:58:38.563Z","2.4.3-next-1598573430-42f9a86c.0":"2020-08-28T00:13:00.080Z","2.4.3-next-1598573779-0fa5c842.0":"2020-08-28T00:18:33.779Z","2.4.3-next-1598608146-7b73d029.0":"2020-08-28T09:50:25.515Z","2.4.3-next-1598608868-551f063b.0":"2020-08-28T10:02:24.166Z","2.4.3-next-1598609981-9fcd2760.0":"2020-08-28T10:22:04.423Z","2.4.3-next-1598612606-c7898967.0":"2020-08-28T11:04:51.387Z","2.4.3-next-1598613220-91315f00.0":"2020-08-28T11:14:59.380Z","2.4.3-next-1598614099-09d72ec1.0":"2020-08-28T11:29:37.842Z","2.4.3-next-1598615169-b6ec5841.0":"2020-08-28T11:47:29.794Z","2.4.3-next-1598615532-3a82be52.0":"2020-08-28T11:53:28.126Z","2.4.3-next-1598616568-3a82be52.0":"2020-08-28T12:10:43.559Z","2.4.3-next-1598617177-66fd3be5.0":"2020-08-28T12:22:13.193Z","2.4.3-next-1598621638-67ab13eb.0":"2020-08-28T13:36:00.008Z","2.4.3-next-1598622549-bb0a29ec.0":"2020-08-28T13:50:29.549Z","2.4.3-next-1598623112-93ff9d41.0":"2020-08-28T13:59:59.548Z","2.4.3-next-1598623893-93ff9d41.0":"2020-08-28T14:12:42.069Z","2.4.3-next-1598624769-69f53a58.0":"2020-08-28T14:27:30.514Z","2.4.3-next-1598625267-41a57fd0.0":"2020-08-28T14:35:39.510Z","2.4.3-next-1598625809-41a57fd0.0":"2020-08-28T14:44:47.619Z","2.4.3-next-1598628127-ce2842a1.0":"2020-08-28T15:23:32.510Z","2.4.3-next-1598628978-7016e66e.0":"2020-08-28T15:37:56.381Z","2.4.3-next-1598629607-afd4c9d2.0":"2020-08-28T15:48:14.105Z","2.4.3-next-1598630170-eabf81ed.0":"2020-08-28T15:58:24.377Z","2.4.3-next-1598630167-3ff6aa2e.0":"2020-08-28T15:58:34.957Z","2.4.3-next-1598630198-92c3de02.0":"2020-08-28T15:58:53.731Z","2.4.3-next-1598630496-5dbeaccd.0":"2020-08-28T16:04:01.746Z","2.4.3-next-1598630804-5f79c07a.0":"2020-08-28T16:08:05.482Z","2.4.3-next-1598631930-737631d5.0":"2020-08-28T16:26:58.541Z","2.4.3-next-1598632731-737631d5.0":"2020-08-28T16:39:59.088Z","2.4.3-next-1598633438-68eb42a4.0":"2020-08-28T16:52:01.103Z","2.4.3-next-1598634043-16ed1897.0":"2020-08-28T17:01:59.087Z","2.4.3-next-1598634910-9fc2e963.0":"2020-08-28T17:16:26.673Z","2.4.3-next-1598635598-5f7e5783.0":"2020-08-28T17:28:02.419Z","2.4.3-next-1598636475-cfc463bc.0":"2020-08-28T17:42:40.016Z","2.4.3-next-1598637698-a0aa8736.0":"2020-08-28T18:03:58.461Z","2.4.3-next-1598637947-ec14d0d8.0":"2020-08-28T18:07:06.948Z","2.4.3-next-1598639595-5c6e7b6d.0":"2020-08-28T18:34:37.745Z","2.4.3-next-1598640501-5c6e7b6d.0":"2020-08-28T18:49:39.322Z","2.4.3-next-1598644967-a0aa8736.0":"2020-08-28T20:05:21.910Z","2.5.0":"2020-08-28T20:27:07.585Z","2.5.1-next-1598646333-1a9d6b6a.0":"2020-08-28T20:27:42.803Z","2.5.1-next-1598866946-6fff5e1d.0":"2020-08-31T09:43:58.567Z","2.5.1-next-1598879987-1e0d4f4b.0":"2020-08-31T13:22:05.934Z","2.5.1-next-1598880323-b5e6fd78.0":"2020-08-31T13:27:45.107Z","2.5.1-next-1598880768-caa27f5f.0":"2020-08-31T13:35:18.195Z","2.5.1-next-1598880865-c8738529.0":"2020-08-31T13:36:56.162Z","2.5.1-next-1598881901-48308422.0":"2020-08-31T13:54:03.811Z","2.5.1-next-1598882524-efeb276b.0":"2020-08-31T14:04:07.995Z","2.5.1-next-1598883665-efeb276b.0":"2020-08-31T14:23:25.580Z","2.5.1-next-1598889853-8cef67d2.0":"2020-08-31T16:06:26.017Z","2.5.1-next-1598896929-74dbe2f1.0":"2020-08-31T18:05:10.422Z","2.5.1-next-1598925757-dbe26300.0":"2020-09-01T02:04:00.029Z","2.5.1-next-1598926910-7875ca78.0":"2020-09-01T02:23:13.774Z","2.5.1-next-1598927667-ecd72f4d.0":"2020-09-01T02:35:46.334Z","2.5.1-next-1598947834-ece2b92e.0":"2020-09-01T08:11:45.125Z","2.5.1-next-1598948014-8a30f003.0":"2020-09-01T08:14:50.181Z","2.5.1-next-1598948189-00887b7e.0":"2020-09-01T08:18:09.207Z","2.4.1-next-1598954387-16c3d796.0":"2020-09-01T10:02:00.974Z","2.5.1-next-1598955562-394267bd.0":"2020-09-01T10:20:41.276Z","2.5.1-next-1598956014-af1e10cf.0":"2020-09-01T10:28:12.087Z","2.6.1-next-1598956099-2a9135fb.0":"2020-09-01T10:29:47.818Z","2.6.1-next-1598956178-76cd98dc.0":"2020-09-01T10:31:04.028Z","2.6.1-next-1598956609-2a9135fb.0":"2020-09-01T10:38:03.099Z","2.6.1-next-1598957852-da6125e5.0":"2020-09-01T10:58:59.079Z","2.6.1-next-1598958794-c027c825.0":"2020-09-01T11:14:33.916Z","2.6.1-next-1598959835-75dd94c2.0":"2020-09-01T11:31:53.813Z","2.6.0":"2020-09-01T12:00:15.112Z","2.6.1-next-1598962053-f36361e6.0":"2020-09-01T12:08:49.041Z","2.6.1-next-1598963255-18e69564.0":"2020-09-01T12:28:57.999Z","2.6.1-next-1598965142-7f2f4f80.0":"2020-09-01T13:00:19.563Z","2.6.1-next-1598966571-b77eba58.0":"2020-09-01T13:24:08.490Z","2.6.1-next-1598971739-3e3910fe.0":"2020-09-01T14:50:21.836Z","2.6.1-next-1598975124-88e50e25.0":"2020-09-01T15:46:52.806Z","2.6.1-next-1598978302-e688ecd3.0":"2020-09-01T16:39:48.250Z","2.6.1-next-1598979218-c12859e8.0":"2020-09-01T16:55:06.961Z","2.6.1-next-1598979574-da2c3632.0":"2020-09-01T17:00:53.590Z","2.6.1-next-1598981075-3b382d17.0":"2020-09-01T17:25:56.014Z","2.6.1-next-1598995425-104e2d5b.0":"2020-09-01T21:24:48.036Z","2.6.1-next-1598996938-4e9cb076.0":"2020-09-01T21:50:18.949Z","2.6.1-next-1599010181-da8543e6.0":"2020-09-02T01:31:01.496Z","2.6.2-next-1599010382-097b999c.0":"2020-09-02T01:34:27.476Z","2.6.1":"2020-09-02T01:59:50.712Z","2.6.2-next-1599032623-9fb16d53.0":"2020-09-02T07:45:05.786Z","2.6.2-next-1599035817-2e06d6d1.0":"2020-09-02T08:38:22.575Z","2.6.2-next-1599040744-bf04fd8c.0":"2020-09-02T10:00:24.213Z","2.6.2-next-1599041396-1f5e1c71.0":"2020-09-02T10:11:11.147Z","2.6.2-next-1599057186-728dc0f0.0":"2020-09-02T14:34:42.598Z","2.6.2-next-1599077045-93c1ea14.0":"2020-09-02T20:05:33.197Z","2.6.2-next-1599079072-3819ddce.0":"2020-09-02T20:39:21.938Z","2.6.2-next-1599079153-25b0a795.0":"2020-09-02T20:40:35.305Z","2.6.2-next-1599082228-6d80027c.0":"2020-09-02T21:31:46.663Z","2.6.2-next-1599083111-80b1bff9.0":"2020-09-02T21:46:32.589Z","2.6.2-next-1599083972-6813d45f.0":"2020-09-02T22:00:52.873Z","2.6.2-next-1599084114-e806677c.0":"2020-09-02T22:03:13.100Z","2.6.2-next-1599084155-b4667752.0":"2020-09-02T22:04:02.684Z","2.6.2-next-1599084319-a3b77f10.0":"2020-09-02T22:06:48.104Z","2.6.3-next-1599084411-bdc1c3c8.0":"2020-09-02T22:08:13.207Z","2.6.2":"2020-09-02T22:09:24.622Z","2.6.3-next-1599085061-a84d77ab.0":"2020-09-02T22:18:54.274Z","2.6.3-next-1599127595-9d8b47b4.0":"2020-09-03T10:07:54.481Z","2.6.3-next-1599131915-3000f686.0":"2020-09-03T11:19:58.829Z","2.6.3-next-1599132181-85aa4e60.0":"2020-09-03T11:24:09.561Z","2.6.3-next-1599132204-ebe46836.0":"2020-09-03T11:24:32.549Z","2.6.3-next-1599132332-cb518e91.0":"2020-09-03T11:26:41.325Z","2.6.3-next-1599132504-184e263a.0":"2020-09-03T11:29:47.865Z","2.6.3-next-1599133491-eff9adfb.0":"2020-09-03T11:46:05.097Z","2.6.3-next-1599133837-f62fcc9a.0":"2020-09-03T11:51:50.804Z","2.6.3-next-1599135144-7f86ca5f.0":"2020-09-03T12:13:51.485Z","2.6.3-next-1599135218-50d7a180.0":"2020-09-03T12:15:04.331Z","2.6.3-next-1599138733-90d3a7b8.0":"2020-09-03T13:13:39.948Z","2.6.4-next-1599139174-7d549962.0":"2020-09-03T13:20:53.137Z","2.6.4-next-1599139273-d01ff34b.0":"2020-09-03T13:22:35.098Z","2.6.3":"2020-09-03T13:23:34.336Z","2.6.4-next-1599149468-786b16bc.0":"2020-09-03T16:12:33.351Z","2.6.4-next-1599153988-9a02d408.0":"2020-09-03T17:27:58.341Z","2.6.4-next-1599154085-5f50f7ce.0":"2020-09-03T17:29:24.128Z","2.6.4-next-1599154088-5f50f7ce.0":"2020-09-03T17:29:42.940Z","2.6.4-next-1599154082-c09234b0.0":"2020-09-03T17:30:53.422Z","2.6.4-next-1599156300-d9a65406.0":"2020-09-03T18:06:40.076Z","2.6.4-next-1599157276-786b16bc.0":"2020-09-03T18:22:46.819Z","2.6.4-next-1599157823-bfc603a7.0":"2020-09-03T18:31:46.977Z","2.6.4-next-1599158958-d6044d99.0":"2020-09-03T18:50:41.645Z","2.6.4-next-1599161692-29d66b19.0":"2020-09-03T19:36:24.271Z","2.6.4-next-1599162124-569bb7df.0":"2020-09-03T19:43:48.372Z","2.6.4-next-1599162938-d11940f9.0":"2020-09-03T19:57:02.481Z","2.6.4-next-1599167216-29d66b19.0":"2020-09-03T21:08:15.022Z","2.6.4-next-1599170503-810a4a06.0":"2020-09-03T22:03:03.478Z","2.6.4-next-1599171872-7a66299e.0":"2020-09-03T22:25:48.990Z","2.6.4-next-1599172236-a7e264c6.0":"2020-09-03T22:32:02.854Z","2.6.4-next-1599172942-bcef090d.0":"2020-09-03T22:43:42.034Z","2.6.4-next-1599173355-64f73b10.0":"2020-09-03T22:50:31.319Z","2.6.4-next-1599173847-294da3eb.0":"2020-09-03T22:58:44.849Z","2.6.4-next-1599210627-5f98cb36.0":"2020-09-04T09:12:06.542Z","2.6.4-next-1599213496-eaaded84.0":"2020-09-04T09:59:42.494Z","2.6.4-next-1599214118-c6126407.0":"2020-09-04T10:09:54.263Z","2.6.4-next-1599215641-38283c2b.0":"2020-09-04T10:35:15.156Z","2.6.5-next-1599215918-0ab97d84.0":"2020-09-04T10:39:57.016Z","2.6.4":"2020-09-04T10:57:37.597Z","2.6.5-next-1599223222-bf684521.0":"2020-09-04T12:41:55.173Z","2.6.5-next-1599223545-e76ec169.0":"2020-09-04T12:47:15.610Z","2.6.5-next-1599225516-738ebf35.0":"2020-09-04T13:20:06.327Z","2.6.5-next-1599225518-b5c68e83.0":"2020-09-04T13:20:25.571Z","2.6.5-next-1599226323-763d53ce.0":"2020-09-04T13:33:22.853Z","2.6.5-next-1599227097-48c01851.0":"2020-09-04T13:46:11.681Z","2.6.5-next-1599227690-ea53a6f4.0":"2020-09-04T13:55:59.206Z","2.6.5-next-1599227891-168af27b.0":"2020-09-04T13:59:23.485Z","2.6.5-next-1599233467-5d7a71c8.0":"2020-09-04T15:32:32.841Z","2.6.5-next-1599234290-37f52736.0":"2020-09-04T15:46:12.764Z","2.6.5-next-1599234706-640d6db7.0":"2020-09-04T15:53:07.905Z","2.6.5-next-1599234966-843376bf.0":"2020-09-04T15:57:24.922Z","2.6.5-next-1599242871-d295efc1.0":"2020-09-04T18:09:26.317Z","2.6.5-next-1599243514-7b250b81.0":"2020-09-04T18:19:56.047Z","2.6.5-next-1599286424-ea0ff094.0":"2020-09-05T06:15:07.214Z","2.6.5-next-1599288099-2797b89b.0":"2020-09-05T06:42:48.156Z","2.6.5-next-1599289186-f13ba232.0":"2020-09-05T07:01:05.623Z","2.6.5-next-1599312826-edfff426.0":"2020-09-05T13:34:56.423Z","2.6.5-next-1599317533-b71812bf.0":"2020-09-05T14:53:25.022Z","2.6.5-next-1599469495-90406ff3.0":"2020-09-07T09:06:13.580Z","2.6.5-next-1599469586-56835928.0":"2020-09-07T09:07:51.100Z","2.6.5-next-1599472221-90406ff3.0":"2020-09-07T09:51:35.691Z","2.6.5-next-1599473037-f966c51d.0":"2020-09-07T10:05:17.957Z","2.6.5-next-1599473340-7c69e6c8.0":"2020-09-07T10:10:28.970Z","2.6.5-next-1599474040-ca9791ea.0":"2020-09-07T10:21:55.116Z","2.6.5-next-1599480676-3acc3469.0":"2020-09-07T12:12:39.022Z","2.6.5-next-1599485337-5c7ce214.0":"2020-09-07T13:30:04.568Z","2.6.5-next-1599487957-0204c3a1.0":"2020-09-07T14:13:58.606Z","2.6.5-next-1599488258-d146c84b.0":"2020-09-07T14:18:59.785Z","2.7.1-next-1599489124-32ecd24a.0":"2020-09-07T14:33:32.601Z","2.7.0":"2020-09-07T14:51:20.506Z","2.7.1-next-1599490635-c6d5c370.0":"2020-09-07T14:59:00.839Z","2.7.1-next-1599493824-5a123140.0":"2020-09-07T15:51:57.460Z","2.7.1-next-1599494785-4955142a.0":"2020-09-07T16:07:47.618Z","2.7.1-next-1599495893-75949ce8.0":"2020-09-07T16:26:03.799Z","2.7.1-next-1599509252-dd0ca2a5.0":"2020-09-07T20:08:48.640Z","2.7.1-next-1599550548-fa8e9415.0":"2020-09-08T07:37:12.219Z","2.7.1-next-1599553515-252cdea3.0":"2020-09-08T08:26:25.819Z","2.7.1-next-1599555777-9debbb1d.0":"2020-09-08T09:04:26.265Z","2.7.1-next-1599560077-14c948c4.0":"2020-09-08T10:16:15.693Z","2.7.1-next-1599562443-837c44cf.0":"2020-09-08T10:55:30.378Z","2.7.1-next-1599562946-6ff82613.0":"2020-09-08T11:03:55.900Z","2.7.1-next-1599563902-8d964c81.0":"2020-09-08T11:20:05.499Z","2.7.1-next-1599563991-2a11886f.0":"2020-09-08T11:21:12.944Z","2.7.1-next-1599564840-8d964c81.0":"2020-09-08T11:35:36.403Z","2.7.1-next-1599564998-0a8dadb7.0":"2020-09-08T11:37:57.408Z","2.7.1-next-1599567460-8d964c81.0":"2020-09-08T12:19:04.750Z","2.7.1-next-1599567484-1eb03d35.0":"2020-09-08T12:19:24.651Z","2.7.1-next-1599569283-8d964c81.0":"2020-09-08T12:49:38.764Z","2.7.1-next-1599570496-c0bb9a8e.0":"2020-09-08T13:09:35.616Z","2.7.1-next-1599570875-42544f1f.0":"2020-09-08T13:16:02.501Z","2.8.1-next-1599571314-828e2006.0":"2020-09-08T13:23:26.255Z","2.8.1-next-1599572150-828e2006.0":"2020-09-08T13:37:31.007Z","2.8.1-next-1599572715-6f9587e2.0":"2020-09-08T13:46:50.394Z","2.8.0":"2020-09-08T13:54:49.083Z","2.8.1-next-1599573991-0aa0566f.0":"2020-09-08T14:08:14.667Z","2.8.1-next-1599574925-1f9b3cfd.0":"2020-09-08T14:23:38.982Z","2.8.1-next-1599579377-76f91452.0":"2020-09-08T15:37:59.447Z","2.8.1-next-1599583796-e0f26fdb.0":"2020-09-08T16:51:27.549Z","2.8.1-next-1599583958-bb12166e.0":"2020-09-08T16:54:18.538Z","2.8.1-next-1599585714-bb12166e.0":"2020-09-08T17:23:24.213Z","2.8.1-next-1599586431-11d14d03.0":"2020-09-08T17:35:33.947Z","2.8.1-next-1599589991-9d6a1b49.0":"2020-09-08T18:34:53.145Z","2.8.1-next-1599594538-34381c35.0":"2020-09-08T19:50:39.374Z","2.8.1-next-1599598701-c31613a6.0":"2020-09-08T20:59:52.862Z","2.8.1-next-1599600008-85b43a11.0":"2020-09-08T21:21:44.395Z","2.8.1-next-1599601377-a988e7aa.0":"2020-09-08T21:44:33.874Z","2.8.1-next-1599602262-b263a8ed.0":"2020-09-08T21:59:22.343Z","2.8.1-next-1599648414-09ddff50.0":"2020-09-09T10:48:25.290Z","2.8.1-next-1599649332-3d79f674.0":"2020-09-09T11:03:46.461Z","2.8.1-next-1599651272-34bbaf73.0":"2020-09-09T11:36:00.042Z","2.8.1-next-1599651663-97b41d07.0":"2020-09-09T11:42:44.820Z","2.8.1-next-1599653218-de5d0620.0":"2020-09-09T12:08:32.105Z","2.9.1-next-1599653312-5f5ef398.0":"2020-09-09T12:10:14.680Z","2.9.1-next-1599654614-b98a36b3.0":"2020-09-09T12:31:58.348Z","2.9.1-next-1599654914-ad3757e8.0":"2020-09-09T12:36:56.756Z","2.9.1-next-1599655283-33092613.0":"2020-09-09T12:43:00.617Z","2.9.0":"2020-09-09T12:44:47.088Z","2.9.1-next-1599655436-11d4ee6a.0":"2020-09-09T12:45:28.360Z","2.9.1-next-1599656513-4a7dacca.0":"2020-09-09T13:03:21.569Z","2.9.1-next-1599658987-9a38884f.0":"2020-09-09T13:44:58.166Z","2.9.1-next-1599662897-0a4fd79a.0":"2020-09-09T14:50:01.906Z","2.9.1-next-1599664957-33cc07c0.0":"2020-09-09T15:24:28.155Z","2.9.1-next-1599668222-3cddf85e.0":"2020-09-09T16:18:30.152Z","2.9.1-next-1599669161-30af407a.0":"2020-09-09T16:34:31.298Z","2.9.1-next-1599669599-6ebda3ab.0":"2020-09-09T16:41:32.657Z","2.9.1-next-1599669727-df087a7f.0":"2020-09-09T16:43:44.680Z","2.9.1-next-1599674592-c5a3870c.0":"2020-09-09T18:04:52.994Z","2.9.1-next-1599674981-f8546866.0":"2020-09-09T18:11:24.608Z","2.9.1-next-1599730094-e41c980c.0":"2020-09-10T09:29:56.025Z","2.9.1-next-1599741182-4ed8514c.0":"2020-09-10T12:34:32.241Z","2.9.1-next-1599741852-3675eeeb.0":"2020-09-10T12:45:41.746Z","2.9.1-next-1599741887-6d1e4700.0":"2020-09-10T12:46:29.565Z","2.9.1-next-1599743914-66698bd0.0":"2020-09-10T13:20:14.488Z","2.9.1-next-1599744079-e5c57189.0":"2020-09-10T13:22:50.713Z","2.9.1-next-1599745763-ae769e0a.0":"2020-09-10T13:50:50.407Z","2.9.1-next-1599748944-618d50b4.0":"2020-09-10T14:44:22.519Z","2.9.1-next-1599815550-52437bd9.0":"2020-09-11T09:13:58.128Z","2.9.1-next-1599816206-01cc0acc.0":"2020-09-11T09:25:04.128Z","2.9.1-next-1599816807-0ba017f1.0":"2020-09-11T09:35:08.322Z","2.9.1-next-1599817774-60d05f04.0":"2020-09-11T09:51:13.274Z","2.9.1-next-1599826000-3b0831b3.0":"2020-09-11T12:08:24.687Z","2.9.1-next-1599836388-604a2bea.0":"2020-09-11T15:01:33.023Z","2.9.1-next-1599847353-a249efd1.0":"2020-09-11T18:03:56.111Z","2.9.1-next-1599847387-d90a61c7.0":"2020-09-11T18:04:37.264Z","2.9.1-next-1599849737-1eb6a3f0.0":"2020-09-11T18:43:55.039Z","2.9.1-next-1599850085-86d7f300.0":"2020-09-11T18:49:47.206Z","2.9.1-next-1599850506-e93ad9f4.0":"2020-09-11T18:56:39.785Z","2.9.1-next-1599850677-5cea23db.0":"2020-09-11T18:59:33.566Z","2.9.1-next-1599856041-fd977716.0":"2020-09-11T20:28:57.004Z","2.9.1-next-1599856337-3759161c.0":"2020-09-11T20:33:56.191Z","2.9.1-next-1599857932-8037b565.0":"2020-09-11T21:00:31.173Z","2.9.1-next-1599858843-4449b454.0":"2020-09-11T21:15:45.248Z","2.9.1-next-1599928650-70e34b66.0":"2020-09-12T16:39:04.577Z","2.9.1-next-1599931291-eb521ddd.0":"2020-09-12T17:23:17.338Z","2.9.1-next-1599971596-3de2b5ee.0":"2020-09-13T04:34:38.077Z","2.9.1-next-1600073223-ffa596bd.0":"2020-09-14T08:48:35.236Z","2.9.1-next-1600073265-0bcf7629.0":"2020-09-14T08:49:35.487Z","2.9.1-next-1600073373-483dee3f.0":"2020-09-14T08:51:08.359Z","2.9.1-next-1600073579-4853ee2b.0":"2020-09-14T08:54:42.145Z","2.9.1-next-1600074265-b02ca882.0":"2020-09-14T09:05:56.124Z","2.9.1-next-1600075391-b8b3edb4.0":"2020-09-14T09:24:57.884Z","2.9.1-next-1600076233-5a75e0f5.0":"2020-09-14T09:38:41.930Z","2.9.1-next-1600076275-9a99c13e.0":"2020-09-14T09:39:28.707Z","2.9.1-next-1600078156-5a75e0f5.0":"2020-09-14T10:10:49.697Z","2.9.1-next-1600080315-975ae28e.0":"2020-09-14T10:46:47.915Z","2.9.1-next-1600080385-e996c20f.0":"2020-09-14T10:47:56.792Z","2.9.1-next-1600080519-95eeca29.0":"2020-09-14T10:50:28.685Z","2.9.1-next-1600080580-46209834.0":"2020-09-14T10:51:37.736Z","2.9.1-next-1600080607-f7546fb5.0":"2020-09-14T10:51:49.508Z","2.9.1-next-1600080929-1f640129.0":"2020-09-14T10:57:06.630Z","2.9.1-next-1600081620-0e9c6d2d.0":"2020-09-14T11:08:39.835Z","2.9.1-next-1600081932-21814d75.0":"2020-09-14T11:14:06.077Z","2.9.1-next-1600082194-3d9e7931.0":"2020-09-14T11:18:40.851Z","2.9.1-next-1600083156-0e9c6d2d.0":"2020-09-14T11:34:28.830Z","2.10.1-next-1600084438-449e7fa0.0":"2020-09-14T11:55:43.257Z","2.10.0":"2020-09-14T11:57:21.713Z","2.10.1-next-1600087699-9ec9c534.0":"2020-09-14T12:50:01.310Z","2.10.1-next-1600088600-9ec9c534.0":"2020-09-14T13:05:03.681Z","2.10.2-next-1600089639-baa26ec7.0":"2020-09-14T13:22:22.863Z","2.10.1":"2020-09-14T13:23:47.250Z","2.10.2-next-1600094004-a6cb5ea0.0":"2020-09-14T14:35:36.968Z","2.10.2-next-1600102746-b1ab38ee.0":"2020-09-14T17:00:51.476Z","2.10.2-next-1600107614-9cd3b3c4.0":"2020-09-14T18:22:07.894Z","2.10.2-next-1600157946-d342b075.0":"2020-09-15T08:20:41.885Z","2.10.2-next-1600157983-b221159f.0":"2020-09-15T08:21:12.043Z","2.10.2-next-1600160933-3c3444d2.0":"2020-09-15T09:10:37.517Z","2.10.2-next-1600163724-46defc31.0":"2020-09-15T09:57:08.860Z","2.10.2-next-1600165323-9b11b3d7.0":"2020-09-15T10:23:55.884Z","2.10.2-next-1600169926-1ee6c708.0":"2020-09-15T11:40:28.859Z","2.10.2-next-1600169974-baf756f0.0":"2020-09-15T11:41:30.826Z","2.10.2-next-1600174602-c58e66b9.0":"2020-09-15T12:58:35.012Z","2.10.2-next-1600175634-c58e66b9.0":"2020-09-15T13:15:40.558Z","2.10.2-next-1600176932-f11d6186.0":"2020-09-15T13:37:34.116Z","2.10.2-next-1600180055-890969e4.0":"2020-09-15T14:29:36.493Z","2.10.2-next-1600189214-8162bc0a.0":"2020-09-15T17:01:54.637Z","2.10.3-next-1600208976-0bfe4d9d.0":"2020-09-15T22:31:08.284Z","2.10.2":"2020-09-15T22:35:29.256Z","2.10.3-next-1600209409-1fddd2b0.0":"2020-09-15T22:38:33.148Z","2.10.3-next-1600209430-58538973.0":"2020-09-15T22:38:55.441Z","2.10.4-next-1600209476-13b92983.0":"2020-09-15T22:39:37.084Z","2.10.3":"2020-09-15T22:41:54.711Z","2.10.4-next-1600247712-5c135ac9.0":"2020-09-16T09:17:02.514Z","2.11.1-next-1600247788-35fe5a41.0":"2020-09-16T09:18:18.761Z","2.11.0":"2020-09-16T09:20:32.882Z","2.11.1-next-1600258759-784c8c55.0":"2020-09-16T12:21:10.134Z","2.11.1-next-1600262867-fab9c480.0":"2020-09-16T13:29:31.836Z","2.11.1-next-1600262916-71fe3bbb.0":"2020-09-16T13:30:24.683Z","2.11.1-next-1600263055-487c5991.0":"2020-09-16T13:32:39.223Z","2.11.1-next-1600269607-1a964b90.0":"2020-09-16T15:22:04.474Z","2.11.1-next-1600272491-08b82d6a.0":"2020-09-16T16:10:07.565Z","2.11.1-next-1600283671-16febc25.0":"2020-09-16T19:16:30.629Z","2.11.1-next-1600292073-b603bc0d.0":"2020-09-16T21:36:26.262Z","2.11.1-next-1600292107-18896506.0":"2020-09-16T21:37:16.389Z","2.11.2-next-1600292151-49224502.0":"2020-09-16T21:37:42.428Z","2.11.1":"2020-09-16T21:39:08.016Z","2.11.2-next-1600337990-e919519f.0":"2020-09-17T10:21:34.259Z","2.11.2-next-1600344712-82bda3d8.0":"2020-09-17T12:13:43.598Z","2.11.2-next-1600348988-8e9ad979.0":"2020-09-17T13:25:05.861Z","2.11.2-next-1600373979-a8abfc1d.0":"2020-09-17T20:21:37.297Z","2.11.2-next-1600374709-225ededa.0":"2020-09-17T20:33:36.489Z","2.11.2-next-1600376939-c4adfb37.0":"2020-09-17T21:10:46.672Z","2.11.2-next-1600422799-a01a39bd.0":"2020-09-18T09:55:17.379Z","2.11.2-next-1600589817-07052234.0":"2020-09-20T08:18:53.114Z","2.11.2-next-1600672312-197f97ea.0":"2020-09-21T07:13:41.744Z","2.11.2-next-1600672424-b3695674.0":"2020-09-21T07:15:41.217Z","2.11.2-next-1600672463-3c7996fd.0":"2020-09-21T07:16:12.009Z","2.11.2-next-1600672512-c5ddf166.0":"2020-09-21T07:17:09.905Z","2.11.3-next-1600673543-79069b0a.0":"2020-09-21T07:34:20.379Z","2.11.2":"2020-09-21T07:35:29.056Z","2.11.3-next-1600688580-b5e4301c.0":"2020-09-21T11:44:49.480Z","2.11.3-next-1600688934-94453ef7.0":"2020-09-21T11:50:46.578Z","2.11.3-next-1600688977-427157e3.0":"2020-09-21T11:51:37.341Z","2.11.3-next-1600688988-9bb8935d.0":"2020-09-21T11:51:51.513Z","2.11.3-next-1600689217-2f191909.0":"2020-09-21T11:55:33.234Z","2.11.3-next-1600690048-9e581636.0":"2020-09-21T12:09:28.230Z","2.11.3-next-1600690159-1fc0197a.0":"2020-09-21T12:11:16.347Z","2.9.1-next-1600691261-be75aaac.0":"2020-09-21T12:29:17.244Z","2.11.3-next-1600693352-b865aa9a.0":"2020-09-21T13:04:28.799Z","2.11.3-next-1600695386-2ae53215.0":"2020-09-21T13:38:17.465Z","2.11.3-next-1600698599-77ea5694.0":"2020-09-21T14:32:06.699Z","2.11.3-next-1600702842-4bc1b0de.0":"2020-09-21T15:42:35.525Z","2.12.1-next-1600705560-907c88c9.0":"2020-09-21T16:27:52.897Z","2.12.0":"2020-09-21T16:28:40.367Z","2.12.1-next-1600722094-08d43063.0":"2020-09-21T21:03:44.822Z","2.12.1-next-1600723587-ceb25f8e.0":"2020-09-21T21:28:35.834Z","2.12.1-next-1600764529-80f5fed8.0":"2020-09-22T08:50:59.406Z","2.12.1-next-1600764642-12849b1e.0":"2020-09-22T08:52:21.120Z","2.12.1-next-1600772189-208e9dce.0":"2020-09-22T10:58:29.370Z","2.12.1-next-1600772439-1f72ffc2.0":"2020-09-22T11:02:22.759Z","2.12.2-next-1600772740-3c7e77b7.0":"2020-09-22T11:07:43.934Z","2.12.2-next-1600773266-44c5cea9.0":"2020-09-22T11:16:16.062Z","2.12.2-next-1600773338-d65c7a20.0":"2020-09-22T11:17:30.194Z","2.12.2-next-1600775957-d63a6d49.0":"2020-09-22T12:01:06.022Z","2.12.2-next-1600776181-14c33f55.0":"2020-09-22T12:05:04.842Z","2.12.1":"2020-09-22T12:13:25.956Z","2.12.2-next-1600779089-3eeb0aff.0":"2020-09-22T12:53:05.652Z","2.12.2-next-1600779534-3f3d8664.0":"2020-09-22T13:00:54.109Z","2.12.2-next-1600785337-561a4382.0":"2020-09-22T14:37:30.755Z","2.12.2-next-1600802405-90d21ea6.0":"2020-09-22T19:22:01.578Z","2.12.2-next-1600802452-11d4f1a5.0":"2020-09-22T19:22:42.182Z","2.13.1-next-1600802664-a680cdf3.0":"2020-09-22T19:26:17.169Z","2.13.0":"2020-09-22T19:27:23.135Z","2.13.1-next-1600866013-2f2a3c23.0":"2020-09-23T13:02:15.529Z","2.13.1-next-1600872468-af254091.0":"2020-09-23T14:49:48.380Z","2.13.2-next-1600872827-7d5f227d.0":"2020-09-23T14:55:45.779Z","2.13.1":"2020-09-23T14:58:06.251Z","2.13.2-next-1600884005-4378587d.0":"2020-09-23T18:02:09.005Z","2.13.3-next-1600884046-27399383.0":"2020-09-23T18:02:30.007Z","2.13.2":"2020-09-23T18:04:53.798Z","2.13.3-next-1600892210-68bdee53.0":"2020-09-23T20:18:50.556Z","2.13.3-next-1600899972-8e088c74.0":"2020-09-23T22:27:54.063Z","2.9.1-next-1600937982-be75aaac.0":"2020-09-24T09:01:23.812Z","2.9.1-next-1600938754-2c26ef13.0":"2020-09-24T09:14:14.480Z","2.9.1-next-1600942081-39fc795f.0":"2020-09-24T10:09:43.102Z","2.13.3-next-1600945825-a78f1716.0":"2020-09-24T11:12:13.752Z","2.13.3-next-1600946214-8c76821c.0":"2020-09-24T11:18:47.498Z","2.13.3-next-1600946441-611e0d35.0":"2020-09-24T11:22:35.951Z","2.13.3-next-1600947693-fdfdca35.0":"2020-09-24T11:43:29.932Z","2.13.3-next-1600949680-d345363d.0":"2020-09-24T12:16:36.373Z","2.13.3-next-1600950896-36cbff30.0":"2020-09-24T12:36:38.863Z","2.13.3-next-1600951520-3e87b43d.0":"2020-09-24T12:46:54.990Z","2.13.4-next-1600951877-e7573e8b.0":"2020-09-24T12:53:19.871Z","2.13.3":"2020-09-24T12:54:57.897Z","2.13.4-next-1600955919-ae7ee66f.0":"2020-09-24T14:00:38.312Z","2.13.4-next-1600956816-97a7fa5e.0":"2020-09-24T14:15:36.254Z","2.13.4-next-1600956931-7efc3323.0":"2020-09-24T14:17:39.945Z","2.13.5-next-1600957052-377709b5.0":"2020-09-24T14:19:19.778Z","2.13.4":"2020-09-24T14:22:00.221Z","2.13.5-next-1600959960-6a78967f.0":"2020-09-24T15:07:41.588Z","2.13.5-next-1600965833-2c8245de.0":"2020-09-24T16:45:42.381Z","2.13.5-next-1600966410-6b1d640e.0":"2020-09-24T16:55:32.322Z","2.13.5-next-1600967683-8689a73a.0":"2020-09-24T17:16:27.570Z","2.13.5-next-1600972143-797c7dc4.0":"2020-09-24T18:30:38.786Z","2.13.5-next-1600972738-90373597.0":"2020-09-24T18:40:56.329Z","2.13.5-next-1600973916-7e9ef394.0":"2020-09-24T19:00:30.728Z","2.13.5-next-1600977565-3e3b3d8b.0":"2020-09-24T20:01:01.948Z","2.13.5-next-1600978282-edbfdeb6.0":"2020-09-24T20:13:15.850Z","2.14.1-next-1600978364-772c8621.0":"2020-09-24T20:14:41.996Z","2.14.1-next-1600978429-13563b3d.0":"2020-09-24T20:15:39.713Z","2.14.1-next-1600979121-49210b98.0":"2020-09-24T20:27:02.135Z","2.14.0":"2020-09-24T20:30:34.236Z","2.14.1-next-1600980161-043ee498.0":"2020-09-24T20:44:40.347Z","2.14.1-next-1600981401-bbefde40.0":"2020-09-24T21:04:49.366Z","2.14.1-next-1601022982-3ceeea47.0":"2020-09-25T08:38:14.989Z","2.14.1-next-1601028264-4dbe3bed.0":"2020-09-25T10:06:19.773Z","2.14.1-next-1601028494-24fc3cd0.0":"2020-09-25T10:10:19.543Z","2.14.1-next-1601029015-13563b3d.0":"2020-09-25T10:18:43.378Z","2.14.1-next-1601034400-769533c8.0":"2020-09-25T11:48:27.960Z","2.14.1-next-1601034822-f746dfa2.0":"2020-09-25T11:55:38.311Z","2.14.1-next-1601035001-08226901.0":"2020-09-25T11:58:26.055Z","2.14.1-next-1601036211-2319aaaf.0":"2020-09-25T12:18:23.146Z","2.14.1-next-1601036247-35a4899e.0":"2020-09-25T12:19:21.173Z","2.14.1-next-1601038002-6bbf5660.0":"2020-09-25T12:48:50.182Z","2.15.1-next-1601038027-fde1766c.0":"2020-09-25T12:49:13.626Z","2.15.1-next-1601038956-facc379a.0":"2020-09-25T13:04:10.458Z","2.15.1-next-1601040363-5b27dafa.0":"2020-09-25T13:27:48.993Z","2.15.0":"2020-09-25T13:36:03.187Z","2.15.1-next-1601042758-ea5de787.0":"2020-09-25T14:07:51.883Z","2.15.1-next-1601042960-372a5048.0":"2020-09-25T14:11:22.503Z","2.15.1-next-1601048377-cab695f8.0":"2020-09-25T15:41:36.006Z","2.15.1-next-1601049541-d28deeba.0":"2020-09-25T16:00:40.123Z","2.15.2-next-1601057031-bb62fac1.0":"2020-09-25T18:05:43.417Z","2.15.2-next-1601061210-08ceaf41.0":"2020-09-25T19:15:24.025Z","2.15.2-next-1601061352-631a92cb.0":"2020-09-25T19:17:52.387Z","2.15.2-next-1601062083-82d4e4ce.0":"2020-09-25T19:30:00.635Z","2.15.2-next-1601062208-4b550412.0":"2020-09-25T19:31:43.451Z","2.15.2-next-1601062477-266ab9a2.0":"2020-09-25T19:36:34.560Z","2.15.2-next-1601063911-e749cabd.0":"2020-09-25T20:00:39.663Z","2.15.2-next-1601118385-00797597.0":"2020-09-26T11:08:11.131Z","2.15.2-next-1601284228-7b83be54.0":"2020-09-28T09:12:13.781Z","2.15.2-next-1601293034-38774e59.0":"2020-09-28T11:39:17.875Z","2.15.2-next-1601293866-bebfd7bd.0":"2020-09-28T11:52:58.390Z","2.15.2-next-1601294455-3908232e.0":"2020-09-28T12:02:41.299Z","2.15.3-next-1601294661-c4ce5956.0":"2020-09-28T12:06:32.347Z","2.15.3-next-1601294712-c63181ab.0":"2020-09-28T12:07:00.051Z","2.16.1-next-1601294821-998f6094.0":"2020-09-28T12:09:09.471Z","2.16.0":"2020-09-28T12:10:49.384Z","2.16.1-next-1601308488-517e8c7a.0":"2020-09-28T15:56:44.459Z","2.16.1-next-1601312859-96023407.0":"2020-09-28T17:09:39.275Z","2.16.1-next-1601313093-fb8b7b42.0":"2020-09-28T17:13:20.543Z","2.9.1-next-1601313922-ec8776ac.0":"2020-09-28T17:27:05.520Z","2.9.1-next-1601316133-ac7841a4.0":"2020-09-28T18:03:52.234Z","2.9.1-next-1601316407-1b786e00.0":"2020-09-28T18:08:35.145Z","2.16.1-next-1601316813-fff2bde7.0":"2020-09-28T18:15:30.555Z","2.9.1-next-1601317779-507e3786.0":"2020-09-28T18:31:07.070Z","2.16.1-next-1601380450-e61638f1.0":"2020-09-29T11:55:54.624Z","2.16.1-next-1601381873-e61638f1.0":"2020-09-29T12:19:45.538Z","2.16.1-next-1601388310-50f56386.0":"2020-09-29T14:07:05.808Z","2.16.1-next-1601389644-391a8974.0":"2020-09-29T14:29:11.213Z","2.16.1-next-1601389898-234c8dfd.0":"2020-09-29T14:33:34.730Z","2.16.1-next-1601390836-d227e703.0":"2020-09-29T14:49:04.162Z","2.16.1-next-1601390946-a93e6976.0":"2020-09-29T14:50:49.052Z","2.16.1-next-1601398946-b9c0a712.0":"2020-09-29T17:04:31.594Z","2.16.1-next-1601398989-d37be773.0":"2020-09-29T17:05:03.202Z","2.16.1-next-1601399009-cf63866d.0":"2020-09-29T17:05:19.233Z","2.16.1-next-1601402231-69ec0d32.0":"2020-09-29T17:59:02.367Z","2.16.1-next-1601403575-d37be773.0":"2020-09-29T18:21:07.410Z","2.16.1-next-1601404887-4f794537.0":"2020-09-29T18:43:16.358Z","2.16.1-next-1601427429-cae0c4f5.0":"2020-09-30T00:58:58.887Z","2.16.1-next-1601427532-e5e45590.0":"2020-09-30T01:00:42.299Z","2.16.1-next-1601453130-4d26bb32.0":"2020-09-30T08:07:18.805Z","2.16.1-next-1601453363-51973e5b.0":"2020-09-30T08:11:23.129Z","2.16.1-next-1601453604-aa0c86eb.0":"2020-09-30T08:15:16.784Z","2.16.1-next-1601463258-f6c34b11.0":"2020-09-30T10:56:03.172Z","2.16.1-next-1601463771-413678fb.0":"2020-09-30T11:04:42.409Z","2.16.1-next-1601464013-35e42348.0":"2020-09-30T11:08:45.690Z","2.16.1-next-1601467889-5d12799d.0":"2020-09-30T12:13:11.247Z","2.16.1-next-1601468686-f6b33d3e.0":"2020-09-30T12:26:55.148Z","2.16.2-next-1601468817-63c2db85.0":"2020-09-30T12:28:51.945Z","2.9.1-next-1601469175-158b08ea.0":"2020-09-30T12:34:49.206Z","2.16.2-next-1601471321-ed67b029.0":"2020-09-30T13:10:37.569Z","2.16.2-next-1601471394-1c809fcf.0":"2020-09-30T13:11:52.941Z","2.16.2-next-1601471671-29588c35.0":"2020-09-30T13:16:19.538Z","2.16.1":"2020-09-30T13:43:26.888Z","2.16.2-next-1601479195-0ff4124b.0":"2020-09-30T15:22:19.864Z","2.16.2-next-1601489696-2b2f2951.0":"2020-09-30T18:16:55.948Z","2.16.2-next-1601490286-2434c70a.0":"2020-09-30T18:26:51.507Z","2.16.2-next-1601494314-ba9b1f05.0":"2020-09-30T19:33:43.170Z","2.16.2-next-1601503009-4c6f3a64.0":"2020-09-30T21:58:39.230Z","2.16.2-next-1601544381-b52bb042.0":"2020-10-01T09:28:22.289Z","2.16.2-next-1601545212-4c4feb2b.0":"2020-10-01T09:42:08.914Z","2.16.2-next-1601547521-8d7ede56.0":"2020-10-01T10:20:40.893Z","2.16.2-next-1601548524-f707ee2d.0":"2020-10-01T10:37:12.522Z","2.16.2-next-1601548817-4787a41d.0":"2020-10-01T10:42:10.495Z","2.16.2-next-1601551504-61074577.0":"2020-10-01T11:27:18.288Z","2.16.2-next-1601551522-25f498aa.0":"2020-10-01T11:27:32.604Z","2.16.2-next-1601553290-ab24846c.0":"2020-10-01T11:56:35.130Z","2.16.2-next-1601556447-10a8393b.0":"2020-10-01T12:49:19.752Z","2.16.2-next-1601559888-773b1b88.0":"2020-10-01T13:46:31.758Z","2.16.2-next-1601561015-bbdcf76d.0":"2020-10-01T14:05:32.247Z","2.16.2-next-1601561426-5bb06db8.0":"2020-10-01T14:12:19.479Z","2.17.1-next-1601562480-c2960086.0":"2020-10-01T14:29:55.702Z","2.17.0":"2020-10-01T14:31:20.085Z","2.17.1-next-1601568621-303af41c.0":"2020-10-01T16:12:04.112Z","2.17.1-next-1601569930-ad9d35b8.0":"2020-10-01T16:33:57.552Z","2.17.1-next-1601570971-ccc86704.0":"2020-10-01T16:51:36.365Z","2.17.1-next-1601582318-d05af1d7.0":"2020-10-01T20:00:19.729Z","2.17.1-next-1601584943-e7c564ef.0":"2020-10-01T20:44:18.131Z","2.17.1-next-1601593993-8715d591.0":"2020-10-01T23:14:50.401Z","2.17.1-next-1601595126-7ca0f45f.0":"2020-10-01T23:33:40.252Z","2.17.1-next-1601599497-556c15fb.0":"2020-10-02T00:46:43.093Z","2.17.1-next-1601604448-287de422.0":"2020-10-02T02:09:18.152Z","2.17.1-next-1601605820-fe5651b4.0":"2020-10-02T02:32:08.034Z","2.17.1-next-1601605964-4780440d.0":"2020-10-02T02:35:00.440Z","2.17.1-next-1601629464-e280d7c5.0":"2020-10-02T09:06:03.598Z","2.17.1-next-1601630989-4fa52c12.0":"2020-10-02T09:31:36.900Z","2.17.1-next-1601631233-7999e51a.0":"2020-10-02T09:35:35.785Z","2.17.1-next-1601631827-8a994923.0":"2020-10-02T09:45:43.002Z","2.17.1-next-1601632810-4fa52c12.0":"2020-10-02T10:02:17.985Z","2.17.1-next-1601632853-d9fabe9a.0":"2020-10-02T10:02:43.114Z","2.17.1-next-1601633715-fcf487a3.0":"2020-10-02T10:17:14.533Z","2.17.1-next-1601634215-d03c78d1.0":"2020-10-02T10:25:22.196Z","2.17.1-next-1601634250-7dc033b5.0":"2020-10-02T10:26:02.156Z","2.17.1-next-1601635923-8c6c7d13.0":"2020-10-02T10:54:05.865Z","2.17.1-next-1601637594-42c1f22b.0":"2020-10-02T11:21:47.183Z","2.17.1-next-1601638172-bf8156c2.0":"2020-10-02T11:31:10.112Z","2.17.1-next-1601638332-5a28803d.0":"2020-10-02T11:34:00.655Z","2.17.1-next-1601638352-8018c917.0":"2020-10-02T11:34:32.661Z","2.17.1-next-1601638685-fcdb2fdc.0":"2020-10-02T11:40:06.959Z","2.18.1-next-1601639054-115a8012.0":"2020-10-02T11:45:49.776Z","2.18.0":"2020-10-02T11:48:05.291Z","2.18.1-next-1601641375-d459de0e.0":"2020-10-02T12:24:54.248Z","2.18.1-next-1601643050-c94f69bf.0":"2020-10-02T12:52:46.869Z","2.18.1-next-1601645389-ec176b0d.0":"2020-10-02T13:31:43.299Z","2.18.1-next-1601646017-b1b61b6c.0":"2020-10-02T13:42:07.243Z","2.18.1-next-1601646872-1be968ac.0":"2020-10-02T13:56:30.487Z","2.18.1-next-1601647582-a1724a97.0":"2020-10-02T14:08:13.877Z","2.18.1-next-1601651422-20119658.0":"2020-10-02T15:12:17.241Z","2.18.1-next-1601652297-115a8012.0":"2020-10-02T15:26:57.442Z","2.18.1-next-1601656824-20119658.0":"2020-10-02T16:42:28.185Z","2.18.1-next-1601661116-c3e70925.0":"2020-10-02T17:53:32.114Z","2.18.1-next-1601662319-80d99d46.0":"2020-10-02T18:13:33.743Z","2.18.1-next-1601662726-554644f7.0":"2020-10-02T18:20:38.853Z","2.18.1-next-1601663326-aca715be.0":"2020-10-02T18:30:37.532Z","2.18.1-next-1601663910-72ef8b7e.0":"2020-10-02T18:40:26.322Z","2.18.1-next-1601665777-6f7cea47.0":"2020-10-02T19:11:32.817Z","2.18.1-next-1601667162-9f881693.0":"2020-10-02T19:34:17.211Z","2.18.1-next-1601668899-9f881693.0":"2020-10-02T20:03:22.478Z","2.18.1-next-1601669306-48085889.0":"2020-10-02T20:10:29.497Z","2.18.1-next-1601670845-55aafffe.0":"2020-10-02T20:35:52.530Z","2.18.1-next-1601672502-6f7cea47.0":"2020-10-02T21:03:20.842Z","2.18.1-next-1601694360-55aafffe.0":"2020-10-03T03:07:53.834Z","2.18.1-next-1601696343-6732389b.0":"2020-10-03T03:40:59.689Z","2.18.1-next-1601697320-aa0f239b.0":"2020-10-03T03:56:54.542Z","2.18.1-next-1601698113-509cbbcd.0":"2020-10-03T04:10:19.622Z","2.18.1-next-1601733211-1d8a762c.0":"2020-10-03T13:55:21.434Z","2.18.1-next-1601734520-4d6d088a.0":"2020-10-03T14:17:04.623Z","2.9.1-next-1601834737-18927b20.0":"2020-10-04T18:07:18.967Z","2.9.1-next-1601844261-e859fd2e.0":"2020-10-04T20:45:52.001Z","2.9.1-next-1601844921-2a2b8725.0":"2020-10-04T20:57:26.227Z","2.9.1-next-1601847260-f8565755.0":"2020-10-04T21:35:56.265Z","2.18.1-next-1601873589-5484dbe2.0":"2020-10-05T04:55:01.055Z","2.18.1-next-1601877390-6fd7cd38.0":"2020-10-05T05:58:29.931Z","2.18.1-next-1601877903-47f7bf1c.0":"2020-10-05T06:06:55.189Z","2.18.1-next-1601878624-d4ab9aff.0":"2020-10-05T06:18:53.316Z","2.18.1-next-1601880566-61573a29.0":"2020-10-05T06:51:23.891Z","2.18.1-next-1601881541-61573a29.0":"2020-10-05T07:07:39.354Z","2.18.1-next-1601884057-158ac27d.0":"2020-10-05T07:49:37.678Z","2.18.2-next-1601884114-f6d1406c.0":"2020-10-05T07:50:28.274Z","2.18.1":"2020-10-05T07:51:25.286Z","2.18.2-next-1601884727-4f5634cd.0":"2020-10-05T08:00:38.921Z","2.18.2-next-1601884733-4f5634cd.0":"2020-10-05T08:00:48.443Z","2.9.1-next-1601890789-b0064ea7.0":"2020-10-05T09:41:30.242Z","2.18.2-next-1601891185-c1b20eac.0":"2020-10-05T09:48:17.393Z","2.18.2-next-1601895844-87ac5ae6.0":"2020-10-05T11:05:57.195Z","2.18.2-next-1601896565-c1b20eac.0":"2020-10-05T11:17:56.207Z","2.18.2-next-1601897472-9547bfec.0":"2020-10-05T11:33:05.697Z","2.19.1-next-1601897561-86b9bf2e.0":"2020-10-05T11:34:36.131Z","2.19.1-next-1601897691-f1491ea2.0":"2020-10-05T11:36:26.679Z","2.19.0":"2020-10-05T11:37:26.159Z","2.9.1-next-1601899240-077b98df.0":"2020-10-05T12:02:24.149Z","2.19.1-next-1601900047-53310c0b.0":"2020-10-05T12:15:44.516Z","2.9.1-next-1601901620-07a3c74e.0":"2020-10-05T12:41:46.142Z","2.19.1-next-1601902303-35009b18.0":"2020-10-05T12:53:34.838Z","2.19.1-next-1601902621-f7dc6ec5.0":"2020-10-05T12:59:05.315Z","2.19.1-next-1601907413-e2c35323.0":"2020-10-05T14:18:30.870Z","2.19.1-next-1601909321-352a72e2.0":"2020-10-05T14:50:34.221Z","2.19.1-next-1601910519-352a72e2.0":"2020-10-05T15:10:33.713Z","2.19.1-next-1601912246-f69bf6e6.0":"2020-10-05T15:39:32.669Z","2.19.1-next-1601912793-019d0713.0":"2020-10-05T15:48:27.613Z","2.19.1-next-1601918002-3bbb985b.0":"2020-10-05T17:15:08.815Z","2.19.1-next-1601918263-aa071856.0":"2020-10-05T17:19:27.989Z","2.19.1-next-1601921056-2df17476.0":"2020-10-05T18:06:10.360Z","2.19.1-next-1601921074-00815d02.0":"2020-10-05T18:06:27.470Z","2.19.1-next-1601921808-ecd88171.0":"2020-10-05T18:18:49.297Z","2.19.1-next-1601935729-de821597.0":"2020-10-05T22:10:43.632Z","2.19.1-next-1601940838-bb5907ac.0":"2020-10-05T23:35:58.274Z","2.19.1-next-1601946383-bb5907ac.0":"2020-10-06T01:08:16.137Z","2.19.1-next-1601946950-44b0ca5d.0":"2020-10-06T01:17:41.783Z","2.19.1-next-1601948413-44b0ca5d.0":"2020-10-06T01:42:03.592Z","2.19.1-next-1601982851-4a7f23c0.0":"2020-10-06T11:16:03.454Z","2.19.1-next-1601983459-5507edb4.0":"2020-10-06T11:26:39.422Z","2.9.1-next-1601983659-55890db0.0":"2020-10-06T11:29:14.472Z","2.19.1-next-1601985536-06dd7f78.0":"2020-10-06T12:00:45.379Z","2.19.1-next-1601986007-7a705d6d.0":"2020-10-06T12:08:42.366Z","2.19.1-next-1601986850-7a705d6d.0":"2020-10-06T12:22:52.510Z","2.19.1-next-1601988344-7a705d6d.0":"2020-10-06T12:47:31.567Z","2.19.1-next-1601989075-ffc456b5.0":"2020-10-06T12:59:49.537Z","2.19.1-next-1601989128-bc4f73e6.0":"2020-10-06T13:00:34.841Z","2.19.1-next-1601989497-57cb079f.0":"2020-10-06T13:06:43.139Z","2.19.1-next-1601989496-46fa8fe0.0":"2020-10-06T13:07:06.731Z","2.19.1-next-1601989899-a77eee75.0":"2020-10-06T13:13:32.875Z","2.19.1-next-1601990261-c880378f.0":"2020-10-06T13:19:22.335Z","2.20.1-next-1601992202-a2ad1594.0":"2020-10-06T13:51:39.837Z","2.20.1-next-1601992481-0ee48b0f.0":"2020-10-06T13:56:36.941Z","2.20.1-next-1601992902-a2ad1594.0":"2020-10-06T14:03:22.054Z","2.9.1-next-1601993567-76db0ec0.0":"2020-10-06T14:14:10.027Z","2.20.1-next-1601994267-a2ad1594.0":"2020-10-06T14:26:05.062Z","2.20.1-next-1601995058-a2ad1594.0":"2020-10-06T14:39:25.102Z","2.20.0":"2020-10-06T14:54:58.627Z","2.20.1-next-1602002623-b8e599de.0":"2020-10-06T16:45:50.792Z","2.20.1-next-1602006806-5e61f93e.0":"2020-10-06T17:55:19.840Z","2.20.2-next-1602007890-9e39bb0c.0":"2020-10-06T18:13:29.019Z","2.20.1":"2020-10-06T18:32:37.183Z","2.20.2-next-1602060391-ea8e21b1.0":"2020-10-07T08:48:18.061Z","2.9.1-next-1602066146-7c0bc041.0":"2020-10-07T10:24:10.547Z","2.20.2-next-1602066213-8a7748aa.0":"2020-10-07T10:25:31.208Z","2.9.1-next-1602066832-ba1a1477.0":"2020-10-07T10:35:28.482Z","2.20.2-next-1602066979-ee3bf978.0":"2020-10-07T10:38:15.367Z","2.20.2-next-1602067028-37139631.0":"2020-10-07T10:39:14.122Z","2.20.2-next-1602067959-dcda121a.0":"2020-10-07T10:54:22.728Z","2.20.2-next-1602069505-f2b2abf9.0":"2020-10-07T11:20:28.223Z","2.20.2-next-1602069545-52021445.0":"2020-10-07T11:21:14.371Z","2.20.2-next-1602069621-dcda121a.0":"2020-10-07T11:22:11.183Z","2.20.2-next-1602069864-f453a767.0":"2020-10-07T11:26:28.057Z","2.20.2-next-1602070157-580e2d65.0":"2020-10-07T11:31:25.152Z","2.9.1-next-1602071188-1bb77e00.0":"2020-10-07T11:48:03.814Z","2.20.2-next-1602071363-f793fad8.0":"2020-10-07T11:51:32.181Z","2.20.2-next-1602072578-8321d0cb.0":"2020-10-07T12:11:27.566Z","2.20.2-next-1602072663-ee8684c1.0":"2020-10-07T12:13:01.386Z","2.20.2-next-1602072970-3ee471ee.0":"2020-10-07T12:18:13.251Z","2.9.1-next-1602073190-b2c916cc.0":"2020-10-07T12:21:32.187Z","2.20.2-next-1602073617-9c626442.0":"2020-10-07T12:28:53.452Z","2.20.2-next-1602073656-544de218.0":"2020-10-07T12:29:35.295Z","2.20.2-next-1602073725-6756deaa.0":"2020-10-07T12:30:40.463Z","2.20.2-next-1602074258-40944e56.0":"2020-10-07T12:39:48.457Z","2.9.1-next-1602074303-31255479.0":"2020-10-07T12:40:05.249Z","2.20.2-next-1602074627-544de218.0":"2020-10-07T12:45:51.047Z","2.20.2-next-1602074636-d8e7e752.0":"2020-10-07T12:46:07.422Z","2.20.2-next-1602075706-544de218.0":"2020-10-07T13:03:38.768Z","2.20.2-next-1602076465-e649494b.0":"2020-10-07T13:15:57.623Z","2.20.2-next-1602077083-c7565caf.0":"2020-10-07T13:26:47.005Z","2.9.1-next-1602079646-022decfc.0":"2020-10-07T14:09:02.637Z","2.20.2-next-1602081730-40da9c55.0":"2020-10-07T14:44:10.590Z","2.20.2-next-1602083221-72b8d339.0":"2020-10-07T15:08:58.318Z","2.20.2-next-1602087350-7de52fbd.0":"2020-10-07T16:17:33.874Z","2.20.2-next-1602087719-04c7fc3a.0":"2020-10-07T16:23:59.651Z","2.20.2-next-1602087805-d745c793.0":"2020-10-07T16:25:25.584Z","2.20.2-next-1602089423-d745c793.0":"2020-10-07T16:51:58.279Z","2.20.2-next-1602090428-d745c793.0":"2020-10-07T17:08:43.838Z","2.20.2-next-1602090603-496b9260.0":"2020-10-07T17:12:17.752Z","2.20.2-next-1602091462-a626330f.0":"2020-10-07T17:25:55.726Z","2.20.2-next-1602091521-b28b8cf8.0":"2020-10-07T17:27:00.906Z","2.20.3-next-1602091571-6a2cbcf0.0":"2020-10-07T17:28:06.204Z","2.20.2":"2020-10-07T18:36:45.359Z","2.20.3-next-1602150961-1dd3a88f.0":"2020-10-08T09:58:02.457Z","2.20.3-next-1602152731-76bc75a0.0":"2020-10-08T10:27:31.098Z","2.20.3-next-1602155331-c0f38077.0":"2020-10-08T11:10:46.935Z","2.20.3-next-1602157989-3ceb34bb.0":"2020-10-08T11:55:07.624Z","2.20.3-next-1602158077-742c24f1.0":"2020-10-08T11:56:34.892Z","2.9.1-next-1602160156-d53125f0.0":"2020-10-08T12:30:54.490Z","2.9.1-next-1602162330-d53125f0.0":"2020-10-08T13:06:51.989Z","2.20.3-next-1602163360-27e89180.0":"2020-10-08T13:24:50.306Z","2.9.1-next-1602163410-69827c14.0":"2020-10-08T13:25:16.656Z","2.20.3-next-1602163430-7967f1a4.0":"2020-10-08T13:25:50.439Z","2.9.1-next-1602164060-855d4c59.0":"2020-10-08T13:36:01.220Z","2.9.1-next-1602164824-11e82beb.0":"2020-10-08T13:48:27.283Z","2.9.1-next-1602165598-855d4c59.0":"2020-10-08T14:01:34.806Z","2.9.1-next-1602166251-11e82beb.0":"2020-10-08T14:12:40.081Z","2.9.1-next-1602166940-5fab8349.0":"2020-10-08T14:24:00.981Z","2.9.1-next-1602167403-69f36a1e.0":"2020-10-08T14:31:39.855Z","2.9.1-next-1602168778-9b132b3c.0":"2020-10-08T14:54:37.666Z","2.20.3-next-1602170355-27e89180.0":"2020-10-08T15:21:05.799Z","2.20.3-next-1602171505-27e89180.0":"2020-10-08T15:40:20.268Z","2.20.3-next-1602172668-27e89180.0":"2020-10-08T15:59:35.200Z","2.20.3-next-1602173654-27e89180.0":"2020-10-08T16:16:12.239Z","2.20.3-next-1602184590-f19a2d85.0":"2020-10-08T19:18:34.727Z","2.9.1-next-1602240727-48b951d4.0":"2020-10-09T10:53:43.786Z","2.9.1-next-1602242108-c2932274.0":"2020-10-09T11:16:42.976Z","2.20.3-next-1602245005-742c24f1.0":"2020-10-09T12:05:22.014Z","2.9.1-next-1602246224-eb9b952b.0":"2020-10-09T12:25:15.505Z","2.20.3-next-1602246726-742c24f1.0":"2020-10-09T12:33:52.563Z","2.9.1-next-1602247409-20a54b6f.0":"2020-10-09T12:45:11.533Z","2.9.1-next-1602248916-bfb401d9.0":"2020-10-09T13:10:12.519Z","2.9.1-next-1602249993-b1d2adf5.0":"2020-10-09T13:28:10.235Z","2.9.1-next-1602251201-9ad14890.0":"2020-10-09T13:48:13.099Z","2.9.1-next-1602251874-f1723825.0":"2020-10-09T13:59:30.383Z","2.9.1-next-1602252148-e2915605.0":"2020-10-09T14:03:51.015Z","2.9.1-next-1602253079-bd36a59b.0":"2020-10-09T14:19:43.469Z","2.20.3-next-1602256394-e8fd1e4d.0":"2020-10-09T15:15:50.184Z","2.20.3-next-1602271341-894ca2ca.0":"2020-10-09T19:24:18.898Z","2.20.3-next-1602272382-b5fe5d96.0":"2020-10-09T19:41:32.729Z","2.20.3-next-1602272398-72b55bfd.0":"2020-10-09T19:41:47.958Z","2.20.3-next-1602273925-72b55bfd.0":"2020-10-09T20:07:10.121Z","2.20.3-next-1602501471-57929e68.0":"2020-10-12T11:19:50.754Z","2.20.3-next-1602504191-1935fab6.0":"2020-10-12T12:05:01.058Z","2.20.3-next-1602505609-1935fab6.0":"2020-10-12T12:28:49.811Z","2.20.3-next-1602510733-3daf134e.0":"2020-10-12T13:54:03.402Z","2.20.3-next-1602513191-b3f69c66.0":"2020-10-12T14:35:15.805Z","2.20.3-next-1602524969-742c24f1.0":"2020-10-12T17:51:21.181Z","2.20.3-next-1602529551-6cf1cdb2.0":"2020-10-12T19:07:43.123Z","2.20.3-next-1602530461-47aa7059.0":"2020-10-12T19:22:51.250Z","2.20.3-next-1602531488-1653d967.0":"2020-10-12T19:40:10.047Z","2.20.3-next-1602534871-fc772f43.0":"2020-10-12T20:36:22.847Z","2.20.3-next-1602535798-045f94b2.0":"2020-10-12T20:51:53.061Z","2.20.3-next-1602582904-a4b55c1a.0":"2020-10-13T09:56:45.115Z","2.20.3-next-1602584403-632e63ec.0":"2020-10-13T10:21:59.098Z","2.20.3-next-1602586168-92ea982d.0":"2020-10-13T10:51:30.675Z","2.20.3-next-1602586384-b070917a.0":"2020-10-13T10:54:41.485Z","2.20.3-next-1602586790-3a46674e.0":"2020-10-13T11:01:44.352Z","2.20.3-next-1602587414-d967de3c.0":"2020-10-13T11:12:06.624Z","2.20.3-next-1602587744-6abeac6b.0":"2020-10-13T11:17:37.523Z","2.20.3-next-1602590122-60628172.0":"2020-10-13T11:57:09.639Z","2.20.3-next-1602590750-41806c88.0":"2020-10-13T12:07:19.753Z","2.20.3-next-1602590735-523f8fa6.0":"2020-10-13T12:07:38.281Z","2.20.3-next-1602590836-a4b68389.0":"2020-10-13T12:09:11.887Z","2.20.3-next-1602590884-cde45fa2.0":"2020-10-13T12:10:08.922Z","2.20.3-next-1602592175-f1b25646.0":"2020-10-13T12:31:23.969Z","2.20.3-next-1602592609-b2ea22fb.0":"2020-10-13T12:38:44.379Z","2.20.3-next-1602593715-b2ea22fb.0":"2020-10-13T12:57:08.716Z","2.20.3-next-1602594840-b2ea22fb.0":"2020-10-13T13:16:00.686Z","2.20.3-next-1602596144-bb69cfc9.0":"2020-10-13T13:37:32.510Z","2.20.3-next-1602596161-bb69cfc9.0":"2020-10-13T13:37:41.836Z","2.20.3-next-1602596826-30bdc55e.0":"2020-10-13T13:49:03.936Z","2.20.3-next-1602596970-c094c5a9.0":"2020-10-13T13:51:19.608Z","2.20.3-next-1602597330-85a418ee.0":"2020-10-13T13:57:22.325Z","2.20.4-next-1602597361-dd9af860.0":"2020-10-13T13:57:51.919Z","2.20.3":"2020-10-13T14:26:00.941Z","2.20.4-next-1602599284-6ff2aaaf.0":"2020-10-13T14:30:04.658Z","2.20.4-next-1602599315-51d3275a.0":"2020-10-13T14:30:36.637Z","2.20.4-next-1602605240-32ab6921.0":"2020-10-13T16:09:18.579Z","2.20.4-next-1602609929-6ff2aaaf.0":"2020-10-13T17:27:26.904Z","2.20.4-next-1602610832-6ff2aaaf.0":"2020-10-13T17:42:25.581Z","2.20.4-next-1602622680-a43c3d0d.0":"2020-10-13T20:59:47.366Z","2.20.4-next-1602661539-e72e3635.0":"2020-10-14T07:48:04.524Z","2.20.4-next-1602661871-9587d627.0":"2020-10-14T07:53:19.293Z","2.20.4-next-1602665620-e14be171.0":"2020-10-14T08:55:48.192Z","2.20.4-next-1602674471-04b38d59.0":"2020-10-14T11:23:00.555Z","2.20.4-next-1602674471-4c119cb8.0":"2020-10-14T11:23:46.552Z","2.20.4-next-1602674817-9e6cb78e.0":"2020-10-14T11:28:47.926Z","2.20.4-next-1602674825-77b89da9.0":"2020-10-14T11:29:02.330Z","2.20.4-next-1602677094-4b6bcbc9.0":"2020-10-14T12:06:34.011Z","2.20.4-next-1602677082-21bbfc35.0":"2020-10-14T12:06:53.348Z","2.20.4-next-1602677809-6ff2aaaf.0":"2020-10-14T12:18:42.556Z","2.20.4-next-1602678193-c5f76981.0":"2020-10-14T12:25:06.017Z","2.20.4-next-1602678392-21bbfc35.0":"2020-10-14T12:28:41.182Z","2.20.4-next-1602679228-4b6bcbc9.0":"2020-10-14T12:42:26.451Z","2.20.4-next-1602679976-c5f76981.0":"2020-10-14T12:54:34.340Z","2.20.4-next-1602680245-99620aec.0":"2020-10-14T12:59:13.217Z","2.20.4-next-1602680656-21bbfc35.0":"2020-10-14T13:06:13.465Z","2.20.4-next-1602680784-0f25d3d6.0":"2020-10-14T13:08:11.686Z","2.20.4-next-1602681610-21bbfc35.0":"2020-10-14T13:22:00.444Z","2.21.1-next-1602682467-ed563445.0":"2020-10-14T13:36:33.649Z","2.21.1-next-1602682681-67ec788e.0":"2020-10-14T13:39:54.937Z","2.21.1-next-1602683380-779ecceb.0":"2020-10-14T13:51:20.939Z","2.21.1-next-1602683578-31aa321f.0":"2020-10-14T13:55:04.807Z","2.21.1-next-1602683709-ed563445.0":"2020-10-14T13:57:10.116Z","2.21.0":"2020-10-14T13:58:24.042Z","2.21.1-next-1602684216-67ec788e.0":"2020-10-14T14:05:27.357Z","2.21.1-next-1602685091-ead71e26.0":"2020-10-14T14:20:13.135Z","2.21.1-next-1602688109-b496b1ba.0":"2020-10-14T15:10:23.869Z","2.21.1-next-1602690685-ead71e26.0":"2020-10-14T15:53:19.486Z","2.21.1-next-1602705044-e7a28f6b.0":"2020-10-14T19:52:39.438Z","2.21.1-next-1602725475-326862c4.0":"2020-10-15T01:33:01.849Z","2.21.1-next-1602729949-f2d00f21.0":"2020-10-15T02:47:42.649Z","2.21.1-next-1602730542-54dfad5f.0":"2020-10-15T02:57:32.547Z","2.21.1-next-1602730582-c3286239.0":"2020-10-15T02:58:12.351Z","2.21.1-next-1602760091-9dff029d.0":"2020-10-15T11:10:12.246Z","2.21.1-next-1602762356-9c47bf03.0":"2020-10-15T11:47:41.720Z","2.21.1-next-1602763542-9c47bf03.0":"2020-10-15T12:07:39.569Z","2.21.1-next-1602764732-9c47bf03.0":"2020-10-15T12:27:22.674Z","2.21.1-next-1602767287-9c47bf03.0":"2020-10-15T13:10:04.393Z","2.21.1-next-1602769664-9c47bf03.0":"2020-10-15T13:49:35.208Z","2.21.1-next-1602776559-bfd7427b.0":"2020-10-15T15:44:27.836Z","2.21.1-next-1602777435-bfd7427b.0":"2020-10-15T15:58:48.624Z","2.21.1-next-1602804497-9088a61d.0":"2020-10-15T23:30:27.552Z","2.21.1-next-1602836642-9d327e4b.0":"2020-10-16T08:26:02.523Z","2.21.1-next-1602838800-68410b50.0":"2020-10-16T09:01:47.678Z","2.21.1-next-1602840811-5a73d611.0":"2020-10-16T09:35:25.093Z","2.21.1-next-1602840950-da967db9.0":"2020-10-16T09:37:43.157Z","2.21.1-next-1602841108-63099227.0":"2020-10-16T09:40:17.451Z","2.21.1-next-1602841630-e2e3a5e2.0":"2020-10-16T09:49:09.727Z","2.21.1-next-1602845598-45b50e24.0":"2020-10-16T10:55:14.100Z","2.21.1-next-1602845759-c00dc71b.0":"2020-10-16T10:58:01.572Z","2.21.1-next-1602846239-9730deff.0":"2020-10-16T11:05:52.700Z","2.21.1-next-1602846286-15e3907c.0":"2020-10-16T11:06:29.415Z","2.21.1-next-1602846633-c78dd35b.0":"2020-10-16T11:12:42.295Z","2.21.1-next-1602846895-6d2bb271.0":"2020-10-16T11:16:38.254Z","2.21.1-next-1602846989-49e633c4.0":"2020-10-16T11:18:59.939Z","2.21.1-next-1602849089-fc690603.0":"2020-10-16T11:53:12.228Z","2.21.1-next-1602851585-37eff8c5.0":"2020-10-16T12:35:08.587Z","2.21.1-next-1602851661-80f72e62.0":"2020-10-16T12:36:13.839Z","2.21.1-next-1602851750-c2b1afa1.0":"2020-10-16T12:37:25.107Z","2.21.1-next-1602855409-d5919591.0":"2020-10-16T13:38:44.576Z","2.21.1-next-1602855743-9140fa3c.0":"2020-10-16T13:44:19.311Z","2.21.1-next-1602860399-46c2ba7e.0":"2020-10-16T15:01:57.765Z","2.21.1-next-1602860607-e751eeaf.0":"2020-10-16T15:05:19.774Z","2.21.1-next-1602861398-46c2ba7e.0":"2020-10-16T15:18:39.993Z","2.21.1-next-1602862052-4c1f11ad.0":"2020-10-16T15:29:23.843Z","2.21.1-next-1602862681-bec2722a.0":"2020-10-16T15:39:57.574Z","2.21.1-next-1602862900-d03bc1e1.0":"2020-10-16T15:43:24.568Z","2.21.1-next-1602863792-f97b8ea9.0":"2020-10-16T15:58:25.978Z","2.21.1-next-1602863921-53768ec1.0":"2020-10-16T16:01:02.542Z","2.21.1-next-1602864030-4c1f11ad.0":"2020-10-16T16:02:29.014Z","2.21.1-next-1602870118-f97b8ea9.0":"2020-10-16T17:43:56.652Z","2.21.1-next-1602870438-80f72e62.0":"2020-10-16T17:49:16.190Z","2.21.1-next-1602871143-9b195101.0":"2020-10-16T18:01:24.445Z","2.21.1-next-1602871201-7f53dc34.0":"2020-10-16T18:01:58.312Z","2.21.1-next-1602878817-96f51397.0":"2020-10-16T20:08:58.838Z","2.21.1-next-1603096398-19e6693a.0":"2020-10-19T08:35:04.366Z","2.21.1-next-1603100701-545add88.0":"2020-10-19T09:47:09.736Z","2.21.1-next-1603102087-a375e296.0":"2020-10-19T10:09:49.244Z","2.21.1-next-1603103237-9766692d.0":"2020-10-19T10:29:14.096Z","2.21.1-next-1603104774-264e2f87.0":"2020-10-19T10:54:47.334Z","2.21.1-next-1603105056-24799d83.0":"2020-10-19T10:59:27.833Z","2.21.1-next-1603105206-31de407c.0":"2020-10-19T11:01:57.741Z","2.22.1-next-1603107408-9fee9faf.0":"2020-10-19T11:38:43.684Z","2.22.1-next-1603108262-8eca63ac.0":"2020-10-19T11:52:56.093Z","2.22.0":"2020-10-19T11:54:23.219Z","2.22.1-next-1603108459-aad057ba.0":"2020-10-19T11:56:13.680Z","2.22.1-next-1603108833-ce4c3702.0":"2020-10-19T12:02:27.370Z","2.22.1-next-1603108864-bf3e9bbe.0":"2020-10-19T12:03:02.893Z","2.22.1-next-1603109151-b3fab68c.0":"2020-10-19T12:07:49.344Z","2.22.1-next-1603109189-1e349db4.0":"2020-10-19T12:08:27.983Z","2.23.1-next-1603109414-26ec2be1.0":"2020-10-19T12:12:09.286Z","2.23.1-next-1603110088-7625de11.0":"2020-10-19T12:23:14.348Z","2.23.1-next-1603110575-b4192b02.0":"2020-10-19T12:31:27.122Z","2.23.1-next-1603112374-51c9ef20.0":"2020-10-19T13:01:31.193Z","2.23.1-next-1603113615-c889fed8.0":"2020-10-19T13:21:59.780Z","2.23.1-next-1603113737-30cba65f.0":"2020-10-19T13:24:08.151Z","2.23.1-next-1603114924-cf426329.0":"2020-10-19T13:43:59.237Z","2.23.1-next-1603115829-94d067fe.0":"2020-10-19T13:59:03.846Z","2.23.1-next-1603116115-8dbd7f97.0":"2020-10-19T14:03:53.291Z","2.23.2-next-1603116373-6a3fd75a.0":"2020-10-19T14:08:11.766Z","2.23.2-next-1603116389-6a3fd75a.0":"2020-10-19T14:08:27.697Z","2.23.2-next-1603116606-0e4ecf7f.0":"2020-10-19T14:12:03.742Z","2.23.1":"2020-10-19T14:14:17.226Z","2.23.2-next-1603119884-798df11f.0":"2020-10-19T15:06:40.687Z","2.23.2-next-1603121750-798df11f.0":"2020-10-19T15:37:45.875Z","2.23.2-next-1603126442-58bc3490.0":"2020-10-19T16:55:57.658Z","2.23.2-next-1603135274-58bc3490.0":"2020-10-19T19:23:09.080Z","2.23.2-next-1603180994-03d6fd0d.0":"2020-10-20T08:05:20.741Z","2.23.2-next-1603181219-89fad313.0":"2020-10-20T08:08:46.842Z","2.23.2-next-1603181260-2ad12a8f.0":"2020-10-20T08:09:25.644Z","2.23.2-next-1603185946-a4fceab6.0":"2020-10-20T09:27:43.337Z","2.23.2-next-1603188235-9a0289e2.0":"2020-10-20T10:05:50.027Z","2.23.2-next-1603193636-6ef423de.0":"2020-10-20T11:35:49.974Z","2.23.2-next-1603194126-4894918e.0":"2020-10-20T11:44:04.122Z","2.23.2-next-1603194613-3baa53a4.0":"2020-10-20T11:52:07.733Z","2.23.2-next-1603195885-d990dcd8.0":"2020-10-20T12:13:18.702Z","2.23.2-next-1603196927-4a5d2930.0":"2020-10-20T12:30:40.864Z","2.23.2-next-1603197008-57d7850e.0":"2020-10-20T12:32:03.079Z","2.23.2-next-1603197067-7063d34f.0":"2020-10-20T12:32:57.728Z","2.23.2-next-1603197231-06a60c29.0":"2020-10-20T12:35:47.192Z","2.23.2-next-1603197248-8b5a7603.0":"2020-10-20T12:35:59.332Z","2.23.2-next-1603197253-8b5a7603.0":"2020-10-20T12:36:16.634Z","2.23.2-next-1603197984-dbfb2c04.0":"2020-10-20T12:48:27.781Z","2.23.2-next-1603199962-10e74efa.0":"2020-10-20T13:21:25.191Z","2.23.2-next-1603200262-60825cca.0":"2020-10-20T13:26:23.926Z","2.23.2-next-1603200684-e7488148.0":"2020-10-20T13:33:18.665Z","2.23.2-next-1603201378-ccb9f60f.0":"2020-10-20T13:44:53.039Z","2.23.2-next-1603201718-321145ca.0":"2020-10-20T13:50:27.865Z","2.23.2-next-1603203972-88a6b0d4.0":"2020-10-20T14:28:13.411Z","2.23.2-next-1603205767-d3fe6488.0":"2020-10-20T14:58:04.039Z","2.23.2-next-1603207426-86a1fb65.0":"2020-10-20T15:25:28.082Z","2.23.2-next-1603214775-cf159f37.0":"2020-10-20T17:28:10.857Z","2.23.2-next-1603217761-3fb27c98.0":"2020-10-20T18:18:10.266Z","2.23.2-next-1603218947-d06b7486.0":"2020-10-20T18:37:43.413Z","2.23.2-next-1603219176-a1d77680.0":"2020-10-20T18:41:35.283Z","2.23.2-next-1603220841-5594b74e.0":"2020-10-20T19:09:30.970Z","2.23.2-next-1603222060-64be487c.0":"2020-10-20T19:29:39.828Z","2.22.1-next-1603223784-e4a14208.0":"2020-10-20T19:58:18.256Z","2.23.2-next-1603224008-d2b969b4.0":"2020-10-20T20:02:12.665Z","2.23.2-next-1603225734-4925af00.0":"2020-10-20T20:30:47.509Z","2.23.2-next-1603225869-3a8b90e9.0":"2020-10-20T20:32:51.475Z","2.23.2-next-1603226704-3a8b90e9.0":"2020-10-20T20:46:55.405Z","2.23.2-next-1603226945-d13bd839.0":"2020-10-20T20:51:11.599Z","2.23.2-next-1603229104-d13bd839.0":"2020-10-20T21:26:57.976Z","2.23.2-next-1603232708-0e1c1f51.0":"2020-10-20T22:27:14.910Z","2.23.2-next-1603233694-e1b05968.0":"2020-10-20T22:43:23.090Z","2.23.2-next-1603234621-976d2c5e.0":"2020-10-20T22:58:49.923Z","2.23.2-next-1603268092-c3d62bfb.0":"2020-10-21T08:17:04.844Z","2.23.2-next-1603268669-f01638a1.0":"2020-10-21T08:26:26.369Z","2.23.2-next-1603268746-36cbafcb.0":"2020-10-21T08:27:43.640Z","2.23.2-next-1603270116-a12e86f4.0":"2020-10-21T08:50:18.568Z","2.23.2-next-1603270659-83667af4.0":"2020-10-21T08:59:19.916Z","2.23.2-next-1603273858-d53ef9f7.0":"2020-10-21T09:53:03.119Z","2.23.3-next-1603273986-9856d47e.0":"2020-10-21T09:55:03.454Z","2.24.1-next-1603275471-329df333.0":"2020-10-21T10:19:46.061Z","2.24.1-next-1603277042-cad2926f.0":"2020-10-21T10:46:02.715Z","2.24.1-next-1603277528-d6eb3909.0":"2020-10-21T10:53:58.569Z","2.24.1-next-1603278283-f85daa8f.0":"2020-10-21T11:06:22.311Z","2.24.1-next-1603278802-d6eb3909.0":"2020-10-21T11:15:00.731Z","2.24.1-next-1603279073-ab2a77ac.0":"2020-10-21T11:19:47.003Z","2.24.1-next-1603279440-d7a6d29e.0":"2020-10-21T11:26:03.519Z","2.24.0":"2020-10-21T11:42:55.257Z","2.24.1-next-1603280612-fc1a2375.0":"2020-10-21T11:45:31.285Z","2.24.1-next-1603282050-74c7502b.0":"2020-10-21T12:09:27.182Z","2.24.1-next-1603282945-3adc73a0.0":"2020-10-21T12:24:25.657Z","2.24.2-next-1603283112-0f1ef146.0":"2020-10-21T12:27:05.300Z","2.24.1":"2020-10-21T12:28:21.309Z","2.24.2-next-1603283329-28699d74.0":"2020-10-21T12:30:43.860Z","2.24.2-next-1603284038-b4c37cab.0":"2020-10-21T12:42:42.294Z","2.24.2-next-1603284449-71333485.0":"2020-10-21T12:49:14.328Z","2.24.2-next-1603286057-71333485.0":"2020-10-21T13:16:13.525Z","2.24.2-next-1603287393-4254c3b0.0":"2020-10-21T13:38:33.999Z","2.24.2-next-1603287503-71333485.0":"2020-10-21T13:40:10.777Z","2.24.2-next-1603289969-31b650db.0":"2020-10-21T14:21:27.402Z","2.24.2-next-1603290728-31b650db.0":"2020-10-21T14:34:01.395Z","2.24.2-next-1603295610-dc4c4f7f.0":"2020-10-21T15:55:32.960Z","2.24.2-next-1603296038-7e80c90d.0":"2020-10-21T16:02:34.157Z","2.24.2-next-1603359410-15ef4c7d.0":"2020-10-22T09:38:40.661Z","2.24.2-next-1603360478-5d6af2c3.0":"2020-10-22T09:56:39.851Z","2.24.2-next-1603360660-e02a39f1.0":"2020-10-22T09:59:29.233Z","2.24.2-next-1603360783-7bbaa571.0":"2020-10-22T10:01:26.580Z","2.24.2-next-1603364436-7bbaa571.0":"2020-10-22T11:02:19.822Z","2.24.2-next-1603365548-7bbaa571.0":"2020-10-22T11:21:01.186Z","2.24.2-next-1603366373-f9d8b020.0":"2020-10-22T11:34:43.986Z","2.24.2-next-1603366564-ac9acdb8.0":"2020-10-22T11:38:04.050Z","2.24.2-next-1603366688-f42fff92.0":"2020-10-22T11:40:13.666Z","2.24.2-next-1603367483-5b2fc941.0":"2020-10-22T11:53:29.888Z","2.24.2-next-1603368242-5b2fc941.0":"2020-10-22T12:06:00.097Z","2.24.2-next-1603371880-5b2fc941.0":"2020-10-22T13:06:38.547Z","2.24.2-next-1603376759-04644c94.0":"2020-10-22T14:27:52.279Z","2.24.2-next-1603377549-04644c94.0":"2020-10-22T14:41:06.520Z","2.24.2-next-1603379490-d73055e2.0":"2020-10-22T15:13:25.384Z","2.24.2-next-1603379760-7e2473c2.0":"2020-10-22T15:17:54.570Z","2.24.2-next-1603381230-7e2473c2.0":"2020-10-22T15:42:20.765Z","2.24.2-next-1603397701-62abe542.0":"2020-10-22T20:16:56.940Z","2.24.2-next-1603397978-43430d9c.0":"2020-10-22T20:21:46.168Z","2.24.2-next-1603399613-f42fff92.0":"2020-10-22T20:48:54.920Z","2.24.2-next-1603399836-62abe542.0":"2020-10-22T20:52:33.676Z","2.24.2-next-1603401241-62abe542.0":"2020-10-22T21:15:55.405Z","2.24.2-next-1603402937-8f92e6f3.0":"2020-10-22T21:44:07.755Z","2.24.2-next-1603404151-f42fff92.0":"2020-10-22T22:04:22.614Z","2.24.2-next-1603406443-6511996b.0":"2020-10-22T22:42:36.490Z","2.24.2-next-1603407492-0ad9a0a3.0":"2020-10-22T23:00:02.608Z","2.24.2-next-1603432798-7e2473c2.0":"2020-10-23T06:02:09.223Z","2.24.2-next-1603432892-04644c94.0":"2020-10-23T06:03:18.448Z","2.24.2-next-1603436647-3ff70880.0":"2020-10-23T07:06:11.654Z","2.24.2-next-1603442742-c1fa42c5.0":"2020-10-23T08:47:30.295Z","2.24.2-next-1603443919-49a6562e.0":"2020-10-23T09:07:01.554Z","2.24.2-next-1603446803-bbf9a11a.0":"2020-10-23T09:55:10.486Z","2.24.2-next-1603448066-a4ce91ab.0":"2020-10-23T10:16:14.029Z","2.24.2-next-1603448956-ad2375aa.0":"2020-10-23T10:31:10.823Z","2.24.2-next-1603450039-4fd7d9ab.0":"2020-10-23T10:49:08.771Z","2.24.2-next-1603450496-d73055e2.0":"2020-10-23T10:56:51.995Z","2.24.2-next-1603452949-5b2fc941.0":"2020-10-23T11:37:44.474Z","2.24.2-next-1603454500-d6f5ed75.0":"2020-10-23T12:03:45.751Z","2.24.2-next-1603454821-69491ea8.0":"2020-10-23T12:08:53.193Z","2.24.2-next-1603454933-4587494f.0":"2020-10-23T12:10:49.546Z","2.24.2-next-1603455061-5a757eb5.0":"2020-10-23T12:12:52.684Z","2.24.2-next-1603455826-f279999f.0":"2020-10-23T12:25:48.159Z","2.24.2-next-1603457149-4b4c966f.0":"2020-10-23T12:47:46.609Z","2.24.2-next-1603457879-b94eaa0e.0":"2020-10-23T12:59:58.403Z","2.24.2-next-1603457954-f5109fa6.0":"2020-10-23T13:01:17.440Z","2.24.3-next-1603458209-2e145443.0":"2020-10-23T13:05:28.143Z","2.24.2":"2020-10-23T13:10:35.675Z","2.24.3-next-1603459068-1e927a3b.0":"2020-10-23T13:19:31.655Z","2.24.3-next-1603460752-e18c47a4.0":"2020-10-23T13:47:39.070Z","2.24.3-next-1603461838-cbdab423.0":"2020-10-23T14:05:59.688Z","2.24.3-next-1603462683-8a8dd4f4.0":"2020-10-23T14:20:12.319Z","2.24.3-next-1603465195-34727386.0":"2020-10-23T15:01:59.590Z","2.25.1-next-1603465313-c539ad40.0":"2020-10-23T15:03:47.297Z","2.25.0":"2020-10-23T15:35:24.154Z","2.25.1-next-1603467477-9b01f0d1.0":"2020-10-23T15:39:56.635Z","2.25.1-next-1603468527-084728fb.0":"2020-10-23T15:57:30.739Z","2.25.1-next-1603469448-ee7e0177.0":"2020-10-23T16:12:44.664Z","2.25.1-next-1603471075-509d2d87.0":"2020-10-23T16:39:53.109Z","2.25.1-next-1603472478-400993e1.0":"2020-10-23T17:03:15.446Z","2.25.1-next-1603473470-400993e1.0":"2020-10-23T17:19:51.245Z","2.25.1-next-1603475709-7fba193f.0":"2020-10-23T17:56:53.656Z","2.25.1-next-1603476486-6df528de.0":"2020-10-23T18:10:09.115Z","1.48.2-next-1603584777-a5c272fd.0":"2020-10-25T00:24:01.887Z","2.25.1-next-1603701274-c5241f2c.0":"2020-10-26T08:36:41.979Z","2.25.1-next-1603711941-fc9576d8.0":"2020-10-26T11:34:15.582Z","2.25.1-next-1603712548-08bd3151.0":"2020-10-26T11:44:17.370Z","2.25.1-next-1603713415-8dfbf25c.0":"2020-10-26T11:58:57.089Z","2.25.1-next-1603713823-33143942.0":"2020-10-26T12:05:37.900Z","2.25.1-next-1603715429-fbe7bd1a.0":"2020-10-26T12:32:19.006Z","2.25.1-next-1603715484-cab97fe3.0":"2020-10-26T12:33:24.042Z","2.26.1-next-1603715568-ed7a2830.0":"2020-10-26T12:34:32.434Z","2.26.0":"2020-10-26T12:58:50.093Z","2.26.1-next-1603726492-95f3a5c4.0":"2020-10-26T15:36:50.258Z","2.26.1-next-1603741405-95f3a5c4.0":"2020-10-26T19:45:34.934Z","2.26.1-next-1603790871-95f3a5c4.0":"2020-10-27T09:29:59.210Z","2.26.1-next-1603800530-f7c598d8.0":"2020-10-27T12:10:52.599Z","2.26.1-next-1603800708-7f87ba04.0":"2020-10-27T12:13:36.016Z","1.48.2-next-1603803932-4526ebb2.0":"2020-10-27T13:16:00.908Z","2.26.1-next-1603804549-d7c0bc22.0":"2020-10-27T13:17:40.736Z","2.26.1-next-1603806604-a0b4eb5b.0":"2020-10-27T13:52:02.161Z","2.26.1-next-1603807670-742397dc.0":"2020-10-27T14:09:46.747Z","1.48.3-next-1603807879-44a5e9dd.0":"2020-10-27T14:21:51.572Z","1.48.2":"2020-10-27T14:28:23.094Z","2.26.1-next-1603809474-6b2d18e4.0":"2020-10-27T14:40:06.122Z","2.26.1-next-1603810682-99696a29.0":"2020-10-27T15:00:00.500Z","2.26.2-next-1603810836-02e6366d.0":"2020-10-27T15:02:45.032Z","2.26.1":"2020-10-27T15:04:25.730Z","2.26.2-next-1603815010-02e6366d.0":"2020-10-27T16:12:07.360Z","2.26.2-next-1603816325-02e6366d.0":"2020-10-27T16:34:11.720Z","2.26.2-next-1603829901-01bf666c.0":"2020-10-27T20:20:30.781Z","2.26.2-next-1603833319-ce9d1498.0":"2020-10-27T21:17:06.322Z","2.26.2-next-1603890257-b068ddc8.0":"2020-10-28T13:06:26.350Z","2.26.2-next-1603895970-aaf802be.0":"2020-10-28T14:41:33.770Z","2.26.2-next-1603897208-58b02ffe.0":"2020-10-28T15:01:57.821Z","2.26.3-next-1603897870-f24a5990.0":"2020-10-28T15:13:16.619Z","2.26.2":"2020-10-28T15:17:35.618Z","2.26.3-next-1603898958-660bed6d.0":"2020-10-28T15:31:09.268Z","2.26.4-next-1603899243-78634374.0":"2020-10-28T15:36:03.024Z","2.26.4-next-1603907303-78634374.0":"2020-10-28T17:50:20.293Z","2.26.3":"2020-10-28T18:37:40.847Z","2.26.4-next-1603944429-a071b41c.0":"2020-10-29T04:09:04.145Z","2.26.4-next-1603971763-ce47b194.0":"2020-10-29T11:44:53.129Z","2.26.4-next-1603979624-a62581e1.0":"2020-10-29T13:55:27.546Z","2.26.4-next-1603980399-1ae329b4.0":"2020-10-29T14:08:42.205Z","2.26.4-next-1603980601-133e2906.0":"2020-10-29T14:12:07.875Z","2.26.4-next-1603981179-36aa76eb.0":"2020-10-29T14:21:38.401Z","2.26.4-next-1603982372-8a2d5a78.0":"2020-10-29T14:41:20.263Z","2.26.4-next-1603982541-36aa76eb.0":"2020-10-29T14:44:36.076Z","2.26.4-next-1603984411-c2aad9d4.0":"2020-10-29T15:15:38.479Z","2.26.4-next-1603986779-56071728.0":"2020-10-29T15:55:00.620Z","2.26.4-next-1603987997-acf1fa16.0":"2020-10-29T16:15:17.524Z","2.26.4-next-1603996074-ce47b194.0":"2020-10-29T18:29:55.998Z","2.26.4-next-1603997705-c6495cff.0":"2020-10-29T18:56:59.969Z","2.26.4-next-1603998701-3c75928d.0":"2020-10-29T19:13:29.196Z","2.26.4-next-1603999183-27d35075.0":"2020-10-29T19:21:42.564Z","2.26.4-next-1604000158-27d35075.0":"2020-10-29T19:37:55.126Z","2.26.4-next-1604002649-14ea883b.0":"2020-10-29T20:19:20.234Z","2.26.4-next-1604004239-9cdc3775.0":"2020-10-29T20:46:01.061Z","2.26.4-next-1604004945-b6d0afd3.0":"2020-10-29T20:57:47.432Z","2.26.4-next-1604006886-44d32181.0":"2020-10-29T21:30:07.562Z","2.26.4-next-1604056954-879fd75f.0":"2020-10-30T11:24:26.499Z","2.26.4-next-1604056996-33a03a6a.0":"2020-10-30T11:25:15.002Z","2.26.4-next-1604060477-9c8a6052.0":"2020-10-30T12:23:09.433Z","2.26.4-next-1604060503-0608a3f6.0":"2020-10-30T12:23:48.002Z","2.26.4-next-1604064531-0aa4787e.0":"2020-10-30T13:30:45.481Z","2.26.4-next-1604065372-0aa4787e.0":"2020-10-30T13:44:51.283Z","2.26.4-next-1604066134-f6f5ffd0.0":"2020-10-30T13:57:43.465Z","2.26.4-next-1604066992-951501e3.0":"2020-10-30T14:11:59.252Z","2.26.4-next-1604072759-984cf357.0":"2020-10-30T15:47:57.070Z","2.26.4-next-1604096243-bcd1b3bb.0":"2020-10-30T22:19:29.726Z","2.26.4-next-1604315905-03db59c9.0":"2020-11-02T11:20:31.219Z","2.26.4-next-1604315997-d25d55a0.0":"2020-11-02T11:21:56.932Z","2.26.4-next-1604316277-14f51239.0":"2020-11-02T11:26:02.662Z","2.26.4-next-1604320876-188c1848.0":"2020-11-02T12:43:16.008Z","2.26.4-next-1604323244-382b3fdf.0":"2020-11-02T13:22:38.939Z","2.26.4-next-1604323405-53ce8ed9.0":"2020-11-02T13:25:06.662Z","2.26.4-next-1604326514-29836483.0":"2020-11-02T14:17:20.796Z","2.26.4-next-1604327444-5c840f15.0":"2020-11-02T14:32:39.896Z","2.26.4-next-1604329623-192bbccf.0":"2020-11-02T15:08:57.815Z","2.26.4-next-1604332523-a8bac763.0":"2020-11-02T15:57:16.045Z","2.26.4-next-1604338068-bc6c8ef0.0":"2020-11-02T17:29:48.803Z","2.26.4-next-1604339843-0222f29f.0":"2020-11-02T17:59:27.047Z","2.26.4-next-1604343360-d9e622d5.0":"2020-11-02T18:57:40.936Z","2.26.4-next-1604344862-d9e622d5.0":"2020-11-02T19:22:41.713Z","2.26.4-next-1604350721-971177e1.0":"2020-11-02T21:00:38.284Z","2.26.4-next-1604354425-c05324ba.0":"2020-11-02T22:02:16.920Z","2.26.4-next-1604354719-b55344b1.0":"2020-11-02T22:07:26.583Z","2.26.4-next-1604399637-9e2d8ac4.0":"2020-11-03T10:36:12.434Z","2.26.4-next-1604408298-dd1d3e16.0":"2020-11-03T13:00:30.794Z","2.26.4-next-1604408797-97ab878b.0":"2020-11-03T13:08:35.823Z","2.26.4-next-1604412070-34441dbf.0":"2020-11-03T14:03:13.958Z","2.26.4-next-1604413177-5d6d1e8b.0":"2020-11-03T14:21:23.109Z","2.26.4-next-1604413178-5d6d1e8b.0":"2020-11-03T14:21:50.192Z","2.26.4-next-1604413641-8ac0b15b.0":"2020-11-03T14:29:20.314Z","2.26.4-next-1604413700-3e4514ae.0":"2020-11-03T14:30:14.340Z","2.26.4-next-1604413998-d5dc1c62.0":"2020-11-03T14:35:12.949Z","2.27.1-next-1604414967-7227dd71.0":"2020-11-03T14:51:12.215Z","2.27.0":"2020-11-03T14:53:29.680Z","2.27.1-next-1604425416-4a53aeb7.0":"2020-11-03T17:45:30.620Z","2.27.1-next-1604428707-ccdfc873.0":"2020-11-03T18:40:22.772Z","2.27.1-next-1604436700-9235d996.0":"2020-11-03T20:53:45.338Z","2.27.1-next-1604445922-a2613b1c.0":"2020-11-03T23:27:01.790Z","2.27.1-next-1604446333-a1f7bce3.0":"2020-11-03T23:34:16.741Z","2.27.1-next-1604478197-95ff28f3.0":"2020-11-04T08:25:21.211Z","2.27.1-next-1604482505-704474a9.0":"2020-11-04T09:37:02.668Z","2.27.1-next-1604487185-95ff28f3.0":"2020-11-04T10:55:17.933Z","2.27.1-next-1604487287-3750cc8a.0":"2020-11-04T10:56:35.489Z","2.27.1-next-1604487504-bdf447e4.0":"2020-11-04T11:00:19.927Z","2.27.2-next-1604487530-baf27c1a.0":"2020-11-04T11:00:44.809Z","2.27.2-next-1604488934-2681ebec.0":"2020-11-04T11:24:12.695Z","2.27.1":"2020-11-04T11:28:01.022Z","2.27.2-next-1604489592-859547f2.0":"2020-11-04T11:35:01.550Z","2.27.3-next-1604489652-399b23ed.0":"2020-11-04T11:36:03.967Z","2.27.3-next-1604491510-399b23ed.0":"2020-11-04T12:07:12.416Z","2.27.2":"2020-11-04T12:08:08.206Z","2.27.3-next-1604492797-48071952.0":"2020-11-04T12:28:25.181Z","2.27.3-next-1604495174-ce8b86e6.0":"2020-11-04T13:08:09.543Z","2.27.3-next-1604495297-78a7ffd2.0":"2020-11-04T13:10:08.494Z","2.27.3-next-1604496074-4c1b21fa.0":"2020-11-04T13:23:02.516Z","2.27.3-next-1604496189-27e3c069.0":"2020-11-04T13:24:51.820Z","2.27.3-next-1604496624-b977716a.0":"2020-11-04T13:32:17.848Z","2.27.3-next-1604500213-42d2fd9e.0":"2020-11-04T14:32:07.013Z","2.27.3-next-1604500946-a0411080.0":"2020-11-04T14:44:37.736Z","2.27.3-next-1604500957-4ec0bfc3.0":"2020-11-04T14:45:32.300Z","2.27.4-next-1604501017-a1693d38.0":"2020-11-04T14:46:10.244Z","2.27.4-next-1604502546-019e4372.0":"2020-11-04T15:11:02.306Z","2.27.3":"2020-11-04T15:13:34.404Z","2.27.4-next-1604502811-a89df8cc.0":"2020-11-04T15:15:28.130Z","2.27.4-next-1604505184-e6e3cf20.0":"2020-11-04T15:55:12.529Z","2.27.5-next-1604505240-6f27eedc.0":"2020-11-04T15:56:07.862Z","2.27.5-next-1604511416-6f27eedc.0":"2020-11-04T17:38:56.157Z","2.27.5-next-1604512997-23dd580c.0":"2020-11-04T18:05:15.737Z","2.27.5-next-1604513033-0b239f25.0":"2020-11-04T18:05:50.719Z","2.27.4":"2020-11-04T19:42:28.269Z","2.27.5-next-1604532455-3a53c30d.0":"2020-11-04T23:29:37.008Z","2.27.5-next-1604582059-eaf05773.0":"2020-11-05T13:16:35.662Z","2.27.5-next-1604583159-b381e915.0":"2020-11-05T13:34:43.816Z","2.27.5-next-1604585342-dbc100c1.0":"2020-11-05T14:11:06.916Z","2.27.5-next-1604585398-bbab79f5.0":"2020-11-05T14:12:04.039Z","2.27.5-next-1604587080-03db8caa.0":"2020-11-05T14:39:55.838Z","2.27.5-next-1604607141-6f09598d.0":"2020-11-05T20:14:33.519Z","2.27.5-next-1604653440-7651dd3e.0":"2020-11-06T09:06:14.941Z","2.27.5-next-1604653738-d0d506d3.0":"2020-11-06T09:11:01.241Z","2.27.5-next-1604664558-bb420715.0":"2020-11-06T12:11:17.044Z","2.27.5-next-1604669143-008e69aa.0":"2020-11-06T13:27:57.561Z","2.27.5-next-1604670370-26f94330.0":"2020-11-06T13:47:50.346Z","2.27.5-next-1604671887-5cdbda57.0":"2020-11-06T14:13:24.499Z","2.28.1-next-1604679244-29fd0c32.0":"2020-11-06T16:16:12.190Z","2.28.0":"2020-11-06T16:35:06.997Z","2.27.5-next-1604687061-7651dd3e.0":"2020-11-06T18:26:24.062Z","2.28.1-next-1604687141-bb46b543.0":"2020-11-06T18:27:44.393Z","2.28.1-next-1604687303-f3511557.0":"2020-11-06T18:30:07.927Z","2.27.5-next-1604688530-7651dd3e.0":"2020-11-06T18:51:11.700Z","2.28.1-next-1604689469-f3511557.0":"2020-11-06T19:06:23.634Z","2.27.5-next-1604689659-7651dd3e.0":"2020-11-06T19:09:50.400Z","2.28.1-next-1604691740-d7238ecd.0":"2020-11-06T19:44:12.063Z","2.28.1-next-1604692852-d7238ecd.0":"2020-11-06T20:02:17.625Z","2.28.1-next-1604693922-9faaa6b2.0":"2020-11-06T20:20:31.952Z","2.28.1-next-1604695862-8fcf46b6.0":"2020-11-06T20:52:41.995Z","2.28.1-next-1604796421-d647383b.0":"2020-11-08T00:49:09.166Z","2.28.1-next-1604806140-d647383b.0":"2020-11-08T03:30:49.951Z","2.28.1-next-1604806739-e6fa4017.0":"2020-11-08T03:40:58.839Z","2.28.1-next-1604810153-ce9e66d0.0":"2020-11-08T04:37:34.989Z","2.28.1-next-1604814318-af966061.0":"2020-11-08T05:47:17.377Z","2.28.1-next-1604845683-af966061.0":"2020-11-08T14:29:48.779Z","2.28.1-next-1604852554-f803135c.0":"2020-11-08T16:24:38.128Z","2.28.1-next-1604924391-db51e663.0":"2020-11-09T12:21:37.541Z","2.28.1-next-1604926653-94071823.0":"2020-11-09T12:59:42.696Z","2.28.1-next-1604927316-19869793.0":"2020-11-09T13:10:31.033Z","2.28.1-next-1604927756-45d59a53.0":"2020-11-09T13:17:49.826Z","2.28.1-next-1604927821-eb204837.0":"2020-11-09T13:18:59.304Z","2.28.1-next-1604928384-45d59a53.0":"2020-11-09T13:28:23.069Z","2.28.1-next-1604929600-6cc9592a.0":"2020-11-09T13:48:40.852Z","2.28.1-next-1604930281-f70c5165.0":"2020-11-09T14:00:03.772Z","2.28.1-next-1604930388-d57a0973.0":"2020-11-09T14:01:43.440Z","2.28.1-next-1604932831-0769ffbe.0":"2020-11-09T14:42:36.200Z","2.28.1-next-1604934988-9a50f1ed.0":"2020-11-09T15:18:35.500Z","2.28.1-next-1604937150-08106f6a.0":"2020-11-09T15:54:36.899Z","2.28.1-next-1604937724-4b8cd78b.0":"2020-11-09T16:04:12.038Z","2.28.1-next-1604938866-bcb4b149.0":"2020-11-09T16:23:05.750Z","2.28.1-next-1604940284-f9f37fe5.0":"2020-11-09T16:46:47.659Z","2.28.1-next-1604946758-ce089a98.0":"2020-11-09T18:34:33.939Z","2.28.1-next-1604949351-c9aae640.0":"2020-11-09T19:18:17.276Z","2.28.1-next-1604953397-b65d053c.0":"2020-11-09T20:25:21.472Z","2.28.1-next-1604962055-7b95cb27.0":"2020-11-09T22:49:21.370Z","2.28.1-next-1604971648-7b95cb27.0":"2020-11-10T01:29:33.327Z","2.28.1-next-1604972587-7b95cb27.0":"2020-11-10T01:45:10.321Z","2.28.1-next-1605000150-48b52a3a.0":"2020-11-10T09:24:22.848Z","2.28.1-next-1605001485-ae20af71.0":"2020-11-10T09:46:49.801Z","2.28.1-next-1605001726-73129584.0":"2020-11-10T09:50:51.927Z","2.28.1-next-1605006749-55a9abbb.0":"2020-11-10T11:14:44.351Z","2.28.1-next-1605006864-9d21c28e.0":"2020-11-10T11:16:06.578Z","2.28.1-next-1605010898-f5f9af84.0":"2020-11-10T12:24:01.637Z","2.28.1-next-1605011253-b79f16e2.0":"2020-11-10T12:29:25.461Z","2.28.1-next-1605011277-86e32daf.0":"2020-11-10T12:29:50.693Z","2.28.1-next-1605013419-f5f9af84.0":"2020-11-10T13:05:48.464Z","2.28.1-next-1605016658-a7263dd1.0":"2020-11-10T13:59:43.342Z","2.28.1-next-1605016878-1d17d256.0":"2020-11-10T14:03:13.643Z","2.28.1-next-1605016886-53055129.0":"2020-11-10T14:03:46.898Z","2.28.1-next-1605017531-33fadf9d.0":"2020-11-10T14:14:14.991Z","2.28.1-next-1605017637-8fb5f06c.0":"2020-11-10T14:16:04.913Z","2.28.1-next-1605017821-a23c5c5a.0":"2020-11-10T14:19:20.954Z","2.28.1-next-1605018224-4da28a64.0":"2020-11-10T14:25:43.688Z","2.28.1-next-1605018398-b629b82b.0":"2020-11-10T14:28:39.823Z","2.29.0":"2020-11-10T14:32:12.129Z","2.29.1-next-1605018774-351cce5d.0":"2020-11-10T14:34:53.263Z","2.29.1-next-1605033137-41b6b15f.0":"2020-11-10T18:34:37.571Z","2.29.1-next-1605033164-9855f233.0":"2020-11-10T18:35:02.490Z","2.29.1-next-1605034874-303cb02c.0":"2020-11-10T19:03:22.785Z","2.29.1-next-1605035022-41b6b15f.0":"2020-11-10T19:05:43.207Z","2.29.1-next-1605036955-33751c2d.0":"2020-11-10T19:37:33.368Z","2.29.1-next-1605045509-ff97b182.0":"2020-11-10T22:00:20.391Z","2.29.1-next-1605048693-3728717e.0":"2020-11-10T22:53:49.349Z","2.29.1-next-1605052397-a809a73e.0":"2020-11-10T23:55:30.467Z","2.29.1-next-1605081972-7000f34f.0":"2020-11-11T08:08:25.379Z","2.29.1-next-1605106241-a080185a.0":"2020-11-11T14:52:51.712Z","2.29.1-next-1605107367-2dd91c42.0":"2020-11-11T15:11:33.883Z","2.29.1-next-1605108291-9f478187.0":"2020-11-11T15:27:07.189Z","2.29.1-next-1605108462-d7290acb.0":"2020-11-11T15:29:49.506Z","2.29.1-next-1605140739-4c9006f5.0":"2020-11-12T00:27:49.116Z","2.29.1-next-1605164537-544c7aba.0":"2020-11-12T07:04:11.359Z","2.29.1-next-1605169328-f71334ce.0":"2020-11-12T08:24:11.212Z","2.29.1-next-1605176928-f71334ce.0":"2020-11-12T10:30:40.059Z","2.29.1-next-1605179025-2b120fa8.0":"2020-11-12T11:06:05.159Z","2.29.1-next-1605182499-ab088f59.0":"2020-11-12T12:03:42.273Z","2.29.1-next-1605187801-a3c601f4.0":"2020-11-12T13:32:25.169Z","2.29.1-next-1605195130-e170cb3e.0":"2020-11-12T15:34:18.898Z","2.29.1-next-1605198090-431dfc79.0":"2020-11-12T16:23:43.275Z","2.29.1-next-1605204536-6aeb6380.0":"2020-11-12T18:10:42.440Z","2.29.1-next-1605207991-0bdb2a36.0":"2020-11-12T19:09:03.382Z","2.29.1-next-1605210842-6aeb6380.0":"2020-11-12T19:56:18.562Z","2.29.1-next-1605211089-c44ee8a2.0":"2020-11-12T20:00:22.043Z","2.29.1-next-1605213064-d0f5ce4a.0":"2020-11-12T20:33:05.721Z","2.29.1-next-1605213089-7182131e.0":"2020-11-12T20:33:31.958Z","2.29.1-next-1605219941-fca701b6.0":"2020-11-12T22:27:44.629Z","2.29.1-next-1605220611-2da01368.0":"2020-11-12T22:39:04.408Z","2.29.1-next-1605231317-ddd37edc.0":"2020-11-13T01:37:21.276Z","2.29.1-next-1605232431-5422a9ba.0":"2020-11-13T01:55:50.911Z","2.29.1-next-1605233226-21cc1f35.0":"2020-11-13T02:09:10.452Z","2.29.1-next-1605267316-97bdd9ec.0":"2020-11-13T11:37:08.503Z","2.29.1-next-1605267337-97bdd9ec.0":"2020-11-13T11:37:28.121Z","2.29.1-next-1605270854-04ff8082.0":"2020-11-13T12:36:20.628Z","2.29.1-next-1605271306-f8207329.0":"2020-11-13T12:43:29.896Z","2.29.1-next-1605271871-51a83a20.0":"2020-11-13T12:53:01.192Z","2.29.1-next-1605271896-d38f9eff.0":"2020-11-13T12:53:33.826Z","2.29.1-next-1605277241-6b12751f.0":"2020-11-13T14:22:29.995Z","2.29.1-next-1605277396-19922c4d.0":"2020-11-13T14:25:23.834Z","2.29.1-next-1605277718-8e877540.0":"2020-11-13T14:30:26.057Z","2.29.1-next-1605279440-c2386709.0":"2020-11-13T14:59:14.745Z","2.29.1-next-1605284689-cba07659.0":"2020-11-13T16:26:41.989Z","2.29.1-next-1605289435-6edce4c9.0":"2020-11-13T17:45:54.069Z","2.29.1-next-1605292246-763c6626.0":"2020-11-13T18:32:51.663Z","2.29.1-next-1605297932-01d5bdb0.0":"2020-11-13T20:07:50.668Z","2.29.1-next-1605394195-ae77ae1b.0":"2020-11-14T22:51:49.718Z","2.29.1-next-1605396541-248ed8ae.0":"2020-11-14T23:30:54.794Z","2.29.1-next-1605413653-9b3e6665.0":"2020-11-15T04:15:50.204Z","2.29.1-next-1605445864-be8f7381.0":"2020-11-15T13:12:53.779Z","2.29.1-next-1605458632-2af203f7.0":"2020-11-15T16:46:04.865Z","2.29.1-next-1605528730-70d379c8.0":"2020-11-16T12:14:02.080Z","2.29.1-next-1605529600-d2c565b6.0":"2020-11-16T12:28:37.662Z","2.29.1-next-1605530576-c1e20fc1.0":"2020-11-16T12:44:45.971Z","2.29.1-next-1605531016-e41c43a3.0":"2020-11-16T12:52:13.176Z","2.30.1-next-1605532940-1308973a.0":"2020-11-16T13:24:21.941Z","2.30.1-next-1605533135-98af3341.0":"2020-11-16T13:27:26.313Z","2.30.0":"2020-11-16T13:28:01.783Z","2.30.1-next-1605533608-246600be.0":"2020-11-16T13:35:24.984Z","2.30.1-next-1605533779-91d25b8e.0":"2020-11-16T13:38:11.798Z","2.30.1-next-1605535186-52c00531.0":"2020-11-16T14:01:45.349Z","2.30.1-next-1605535853-122cbab6.0":"2020-11-16T14:12:39.332Z","2.30.1-next-1605537420-122cbab6.0":"2020-11-16T14:39:20.554Z","2.30.1-next-1605538549-880e0fd6.0":"2020-11-16T14:57:41.263Z","2.30.1-next-1605540555-00386573.0":"2020-11-16T15:32:24.124Z","2.30.2-next-1605540836-75e11a77.0":"2020-11-16T15:36:03.438Z","2.30.2-next-1605541039-67697d90.0":"2020-11-16T15:39:03.567Z","2.30.2-next-1605541258-a8a761be.0":"2020-11-16T15:43:06.201Z","2.30.2-next-1605541801-91ec3a94.0":"2020-11-16T15:51:53.322Z","2.30.2-next-1605541843-67697d90.0":"2020-11-16T15:52:36.811Z","2.30.1":"2020-11-16T16:04:16.536Z","2.30.2-next-1605554612-1894efeb.0":"2020-11-16T19:25:39.422Z","2.30.2-next-1605570951-07f53782.0":"2020-11-16T23:57:46.654Z","2.30.2-next-1605600878-b2e914e6.0":"2020-11-17T08:16:34.495Z","2.30.2-next-1605602353-b2e914e6.0":"2020-11-17T08:41:05.226Z","2.30.2-next-1605604141-67697d90.0":"2020-11-17T09:11:09.140Z","2.30.2-next-1605607058-67697d90.0":"2020-11-17T09:59:32.217Z","2.30.2-next-1605608261-2472e6c9.0":"2020-11-17T10:19:36.337Z","2.30.2-next-1605610237-07f53782.0":"2020-11-17T10:52:35.393Z","2.30.2-next-1605615693-16c71828.0":"2020-11-17T12:23:03.058Z","2.30.2-next-1605621812-3186ddbb.0":"2020-11-17T14:05:42.102Z","2.30.2-next-1605624535-74a081a6.0":"2020-11-17T14:50:57.884Z","2.30.2-next-1605635698-d80c3689.0":"2020-11-17T17:56:48.242Z","2.30.2-next-1605646890-e41d3320.0":"2020-11-17T21:03:24.956Z","2.30.2-next-1605649215-f69850eb.0":"2020-11-17T21:42:20.108Z","2.30.2-next-1605651993-ef19da1e.0":"2020-11-17T22:28:21.640Z","2.30.2-next-1605653534-34a486bb.0":"2020-11-17T22:54:12.185Z","2.30.2-next-1605654781-e5459f72.0":"2020-11-17T23:14:52.680Z","2.30.2-next-1605694712-e712c697.0":"2020-11-18T10:20:29.510Z","2.30.2-next-1605697098-78bb4d3c.0":"2020-11-18T10:59:55.445Z","2.30.2-next-1605699483-b86e2919.0":"2020-11-18T11:39:55.873Z","2.30.2-next-1605709976-2472e6c9.0":"2020-11-18T14:34:48.296Z","2.30.2-next-1605713228-1c5ba599.0":"2020-11-18T15:29:09.184Z","2.30.2-next-1605713859-2ba902fb.0":"2020-11-18T15:39:27.456Z","2.30.2-next-1605717606-9f8763bf.0":"2020-11-18T16:42:20.603Z","2.30.2-next-1605721468-1b3e103a.0":"2020-11-18T17:46:40.662Z","2.30.2-next-1605723797-4fba3662.0":"2020-11-18T18:25:02.821Z","2.30.2-next-1605725386-3e9324ec.0":"2020-11-18T18:51:50.309Z","2.30.2-next-1605727991-3e9324ec.0":"2020-11-18T19:35:20.429Z","2.30.2-next-1605730357-284519e2.0":"2020-11-18T20:14:35.502Z","2.30.2-next-1605780744-0ec75768.0":"2020-11-19T10:14:22.830Z","2.30.2-next-1605785618-5c882bf8.0":"2020-11-19T11:35:56.639Z","2.30.2-next-1605791444-8cbe65e5.0":"2020-11-19T13:12:39.822Z","2.30.2-next-1605791955-8170003f.0":"2020-11-19T13:21:16.726Z","2.30.2-next-1605792036-14bc234d.0":"2020-11-19T13:22:37.408Z","2.30.2-next-1605792189-8bd0e477.0":"2020-11-19T13:25:04.078Z","2.30.2-next-1605794146-4a420e62.0":"2020-11-19T13:57:45.020Z","2.30.2-next-1605795567-3fcddaaa.0":"2020-11-19T14:21:16.463Z","2.30.2-next-1605795657-8bd0e477.0":"2020-11-19T14:22:56.139Z","2.30.2-next-1605795737-050798c9.0":"2020-11-19T14:24:27.462Z","2.30.2-next-1605796230-01562cc7.0":"2020-11-19T14:32:25.545Z","2.30.2-next-1605796576-cf610ece.0":"2020-11-19T14:38:27.326Z","2.30.2-next-1605798346-8bd0e477.0":"2020-11-19T15:07:39.017Z","2.30.2-next-1605801235-c6e7a5a4.0":"2020-11-19T15:55:48.671Z","2.30.2-next-1605802915-603cedd4.0":"2020-11-19T16:23:56.258Z","2.30.2-next-1605804099-6bb1c40e.0":"2020-11-19T16:43:34.591Z","2.30.2-next-1605858578-8bd0e477.0":"2020-11-20T07:51:41.049Z","2.30.2-next-1605861140-8bd0e477.0":"2020-11-20T08:34:12.744Z","2.30.2-next-1605863956-7310574e.0":"2020-11-20T09:21:09.292Z","2.30.2-next-1605865330-2ba2251a.0":"2020-11-20T09:43:48.872Z","2.30.2-next-1605870406-cf610ece.0":"2020-11-20T11:09:08.173Z","2.30.2-next-1605871510-f0e3ae03.0":"2020-11-20T11:26:58.625Z","2.30.2-next-1605872430-e9660af3.0":"2020-11-20T11:42:32.439Z","2.30.2-next-1605874896-0c72f9dc.0":"2020-11-20T12:23:42.529Z","2.30.2-next-1605874991-8b4c9407.0":"2020-11-20T12:24:47.788Z","2.30.2-next-1605875567-67179b44.0":"2020-11-20T12:34:51.131Z","2.30.2-next-1605882380-9c409b6e.0":"2020-11-20T14:27:56.301Z","2.30.2-next-1605884572-9c409b6e.0":"2020-11-20T15:04:45.977Z","2.30.2-next-1605889537-3fcddaaa.0":"2020-11-20T16:27:47.565Z","2.30.2-next-1605902721-7625b8d2.0":"2020-11-20T20:07:18.054Z","2.30.2-next-1606073615-e6a86cda.0":"2020-11-22T19:35:25.413Z","2.30.2-next-1606073657-89aff8dc.0":"2020-11-22T19:36:05.262Z","2.30.2-next-1606074318-6ee4b79e.0":"2020-11-22T19:47:07.574Z","2.30.2-next-1606075571-a5558aa3.0":"2020-11-22T20:08:14.454Z","2.30.2-next-1606134594-e5978488.0":"2020-11-23T12:31:54.664Z","2.30.2-next-1606137054-3325033f.0":"2020-11-23T13:12:54.354Z","2.30.2-next-1606139724-01635fb5.0":"2020-11-23T13:57:07.598Z","2.30.2-next-1606141571-c2c6a30a.0":"2020-11-23T14:28:08.619Z","2.30.2-next-1606145453-8d03fcdf.0":"2020-11-23T15:32:45.377Z","2.30.2-next-1606146957-ddcd4af9.0":"2020-11-23T15:57:44.733Z","2.30.2-next-1606151267-a35c0e8c.0":"2020-11-23T17:09:34.377Z","2.30.2-next-1606157020-d0c4594f.0":"2020-11-23T18:45:35.448Z","2.30.2-next-1606157993-6b474060.0":"2020-11-23T19:01:54.423Z","2.30.2-next-1606161755-878cfe15.0":"2020-11-23T20:04:31.959Z","2.30.2-next-1606162829-0c72f9dc.0":"2020-11-23T20:22:27.636Z","2.30.2-next-1606166242-a6eab454.0":"2020-11-23T21:19:24.693Z","2.30.2-next-1606207176-4b9ac393.0":"2020-11-24T08:41:38.637Z","2.30.2-next-1606214059-d51524bc.0":"2020-11-24T10:36:29.364Z","2.30.2-next-1606215144-2d50feb0.0":"2020-11-24T10:54:12.071Z","2.30.2-next-1606215320-6d188fca.0":"2020-11-24T10:57:12.673Z","2.30.2-next-1606216332-219c5d18.0":"2020-11-24T11:14:13.537Z","2.30.2-next-1606216492-d0a5c1b1.0":"2020-11-24T11:16:42.977Z","2.30.2-next-1606217123-8b4e0328.0":"2020-11-24T11:27:17.952Z","2.30.2-next-1606217678-3d1d5313.0":"2020-11-24T11:36:35.310Z","2.30.2-next-1606218183-73124394.0":"2020-11-24T11:44:50.674Z","2.30.2-next-1606223112-13466560.0":"2020-11-24T13:07:00.530Z","2.30.2-next-1606223136-9b227de3.0":"2020-11-24T13:07:41.183Z","2.30.2-next-1606224031-ef5356d8.0":"2020-11-24T13:22:36.651Z","2.30.2-next-1606224249-d521d4f3.0":"2020-11-24T13:26:09.708Z","2.30.2-next-1606224768-89cfdaa8.0":"2020-11-24T13:34:42.052Z","2.30.2-next-1606225391-5d0a4332.0":"2020-11-24T13:45:21.213Z","2.30.2-next-1606225470-ba9c82f3.0":"2020-11-24T13:46:43.388Z","2.30.2-next-1606226191-19c7a931.0":"2020-11-24T13:58:35.522Z","2.30.2-next-1606226688-2d86a8ee.0":"2020-11-24T14:06:49.629Z","2.30.2-next-1606227314-88cf26c9.0":"2020-11-24T14:17:24.037Z","2.30.2-next-1606227549-f3c639a7.0":"2020-11-24T14:21:24.446Z","2.30.2-next-1606227827-fe745ac1.0":"2020-11-24T14:26:07.796Z","2.30.2-next-1606228974-7212c53c.0":"2020-11-24T14:44:55.283Z","2.30.2-next-1606230404-e15b9d67.0":"2020-11-24T15:08:57.865Z","2.30.2-next-1606231466-7709a008.0":"2020-11-24T15:26:20.601Z","2.30.2-next-1606233309-62661675.0":"2020-11-24T15:57:10.040Z","2.30.2-next-1606233395-45577a83.0":"2020-11-24T15:58:31.890Z","2.30.2-next-1606234396-f30874d0.0":"2020-11-24T16:15:16.615Z","2.30.2-next-1606236477-f3d2d170.0":"2020-11-24T16:50:16.021Z","2.30.2-next-1606236551-0e89d97a.0":"2020-11-24T16:51:13.092Z","2.30.2-next-1606244582-7b1b52ab.0":"2020-11-24T19:04:47.114Z","2.30.2-next-1606246534-cb480be2.0":"2020-11-24T19:37:43.154Z","2.30.2-next-1606247254-b82f0794.0":"2020-11-24T19:49:49.098Z","2.30.2-next-1606248610-046dbf69.0":"2020-11-24T20:12:06.704Z","2.30.2-next-1606249017-eda2bd26.0":"2020-11-24T20:19:02.343Z","2.30.2-next-1606249491-9c81bc09.0":"2020-11-24T20:26:57.641Z","2.30.2-next-1606253356-e4d6e32e.0":"2020-11-24T21:31:13.967Z","2.30.2-next-1606260042-9af95bf1.0":"2020-11-24T23:22:42.788Z","2.30.2-next-1606260406-b025e99a.0":"2020-11-24T23:28:45.171Z","2.30.2-next-1606265886-6d5f2f2c.0":"2020-11-25T01:00:16.820Z","2.30.2-next-1606296469-8907e3a4.0":"2020-11-25T09:29:48.415Z","2.30.2-next-1606301175-8907e3a4.0":"2020-11-25T10:48:32.164Z","2.30.2-next-1606306866-d3fddf39.0":"2020-11-25T12:23:05.420Z","2.30.2-next-1606326547-10f8a5c8.0":"2020-11-25T17:51:10.216Z","2.30.2-next-1606339979-0474781a.0":"2020-11-25T21:34:59.230Z","2.30.2-next-1606340374-0474781a.0":"2020-11-25T21:41:52.038Z","2.30.2-next-1606364487-ea656f0f.0":"2020-11-26T04:23:32.840Z","2.30.2-next-1606387651-39487564.0":"2020-11-26T10:49:34.889Z","2.30.2-next-1606388291-53a438d6.0":"2020-11-26T11:00:21.206Z","2.30.2-next-1606395226-34bed290.0":"2020-11-26T12:55:30.781Z","2.30.2-next-1606396363-8acdc68a.0":"2020-11-26T13:14:36.678Z","2.30.2-next-1606396924-f730bd33.0":"2020-11-26T13:24:11.775Z","2.30.2-next-1606399729-18325b21.0":"2020-11-26T14:10:55.954Z","2.30.2-next-1606399875-f9e02808.0":"2020-11-26T14:13:15.831Z","2.30.2-next-1606424091-9fd744b6.0":"2020-11-26T20:56:58.820Z","2.30.2-next-1606427045-9fd744b6.0":"2020-11-26T21:45:49.939Z","2.30.2-next-1606454535-f70a05df.0":"2020-11-27T05:24:17.235Z","2.30.2-next-1606478305-6ef1f197.0":"2020-11-27T12:00:41.748Z","2.30.2-next-1606478981-809e6a7c.0":"2020-11-27T12:11:54.569Z","2.30.2-next-1606483902-d38a4241.0":"2020-11-27T13:33:45.966Z","2.30.2-next-1606734800-1abe4fd6.0":"2020-11-30T11:15:18.764Z","2.30.2-next-1606742433-9ca77ac3.0":"2020-11-30T13:22:50.764Z","2.30.2-next-1606743633-330fd6bc.0":"2020-11-30T13:42:45.726Z","2.30.2-next-1606743954-0dcc7c52.0":"2020-11-30T13:48:09.320Z","2.30.2-next-1606745667-3f1ead38.0":"2020-11-30T14:16:37.797Z","2.30.2-next-1606745888-33383319.0":"2020-11-30T14:20:12.842Z","2.30.2-next-1606746127-e4bf5cf1.0":"2020-11-30T14:24:37.531Z","2.30.2-next-1606751273-1ecf83e3.0":"2020-11-30T15:49:46.706Z","2.30.2-next-1606753936-e4bf5cf1.0":"2020-11-30T16:34:31.682Z","2.30.2-next-1606765206-e4bf5cf1.0":"2020-11-30T19:42:17.119Z","2.30.2-next-1606766473-74222e95.0":"2020-11-30T20:03:11.907Z","2.30.2-next-1606774038-43304624.0":"2020-11-30T22:09:05.918Z","2.30.2-next-1606784626-8786b7ed.0":"2020-12-01T01:05:43.095Z","2.30.2-next-1606785666-0e59d9b1.0":"2020-12-01T01:23:11.620Z","2.30.2-next-1606808801-21a5b275.0":"2020-12-01T07:49:00.843Z","2.30.2-next-1606809318-2b001a73.0":"2020-12-01T07:57:17.592Z","2.30.2-next-1606829607-e018547a.0":"2020-12-01T13:35:28.476Z","2.30.2-next-1606856307-6fdb1559.0":"2020-12-01T21:00:08.291Z","2.30.2-next-1606856317-6fdb1559.0":"2020-12-01T21:00:39.177Z","2.30.2-next-1606862059-fcc04a63.0":"2020-12-01T22:36:24.654Z","2.30.2-next-1606904248-57018b3a.0":"2020-12-02T10:19:29.820Z","2.30.2-next-1606907426-523b0643.0":"2020-12-02T11:12:34.694Z","2.30.2-next-1606908709-9f09a702.0":"2020-12-02T11:33:49.372Z","2.30.2-next-1606909561-6166d705.0":"2020-12-02T11:48:08.279Z","2.30.2-next-1606910350-bd473414.0":"2020-12-02T12:01:08.188Z","2.30.2-next-1606919948-bd473414.0":"2020-12-02T14:41:14.895Z","2.30.2-next-1606920193-de66504d.0":"2020-12-02T14:45:03.270Z","2.30.2-next-1606920224-de66504d.0":"2020-12-02T14:45:44.365Z","2.30.2-next-1606920279-05eeb452.0":"2020-12-02T14:46:33.347Z","2.30.2-next-1606921099-05eeb452.0":"2020-12-02T15:00:18.589Z","2.30.2-next-1606927527-05eeb452.0":"2020-12-02T16:47:28.350Z","2.30.2-next-1606935782-d79f3129.0":"2020-12-02T19:05:13.616Z","2.30.3-next-1606940707-9bd954b0.0":"2020-12-02T20:27:09.478Z","2.30.2-next-1606940726-b77263b9.0":"2020-12-02T20:27:28.155Z","2.30.3-next-1606941435-580de42f.0":"2020-12-02T20:39:27.997Z","2.30.2":"2020-12-02T20:51:04.194Z","2.30.3-next-1606943566-00430898.0":"2020-12-02T21:14:45.275Z","2.30.3-next-1606995022-98023332.0":"2020-12-03T11:32:18.271Z","2.30.3-next-1606995211-d9560aa5.0":"2020-12-03T11:35:30.459Z","2.30.2-next-1606996603-05eeb452.0":"2020-12-03T11:58:34.724Z","2.30.3-next-1607029718-e2da972c.0":"2020-12-03T21:10:39.279Z","2.30.3-next-1607032074-49dfddd9.0":"2020-12-03T21:49:55.080Z","2.30.3-next-1607036154-d0efc3b0.0":"2020-12-03T22:57:58.636Z","2.30.3-next-1607060525-a61922cb.0":"2020-12-04T05:44:18.635Z","2.30.3-next-1607060891-dff31a88.0":"2020-12-04T05:50:07.451Z","2.30.3-next-1607063086-6a4f7824.0":"2020-12-04T06:26:57.186Z","2.30.3-next-1607065296-d55ec1e5.0":"2020-12-04T07:03:40.344Z","2.30.3-next-1607090686-aba2ab9e.0":"2020-12-04T14:06:46.880Z","2.30.3-next-1607091445-721559f8.0":"2020-12-04T14:19:33.137Z","2.30.3-next-1607091887-579ac520.0":"2020-12-04T14:26:45.706Z","2.30.3-next-1607093069-559cca3e.0":"2020-12-04T14:46:31.635Z","2.30.3-next-1607093345-579ac520.0":"2020-12-04T14:50:52.565Z","2.30.2-next-1607101969-d9826209.0":"2020-12-04T17:14:59.646Z","2.30.3-next-1607111481-cf5d1333.0":"2020-12-04T19:53:19.088Z","2.30.3-next-1607339118-47482c77.0":"2020-12-07T11:07:21.182Z","2.30.3-next-1607341377-db21a60e.0":"2020-12-07T11:44:49.336Z","2.30.3-next-1607349437-49cca36c.0":"2020-12-07T13:59:19.850Z","2.30.3-next-1607357734-579ac520.0":"2020-12-07T16:17:44.113Z","2.30.3-next-1607359484-579ac520.0":"2020-12-07T16:46:43.111Z","2.30.3-next-1607361800-a7da6be3.0":"2020-12-07T17:25:17.210Z","2.30.2-next-1607367706-04a7387e.0":"2020-12-07T19:04:05.918Z","2.30.2-next-1607373864-1d1b8d2c.0":"2020-12-07T20:46:28.108Z","2.30.2-next-1607377641-34dbca27.0":"2020-12-07T21:49:27.003Z","2.30.3-next-1607433508-72cc812c.0":"2020-12-08T13:20:23.186Z","2.30.3-next-1607435329-8dc01657.0":"2020-12-08T13:50:52.830Z","2.30.3-next-1607449081-c24ce069.0":"2020-12-08T17:40:24.251Z","2.30.2-next-1607463092-1162d135.0":"2020-12-08T21:33:35.413Z","2.30.3-next-1607512886-d05bcd38.0":"2020-12-09T11:23:30.828Z","2.30.3-next-1607513272-e9539c34.0":"2020-12-09T11:30:10.203Z","2.30.3-next-1607515523-9ff8e5ee.0":"2020-12-09T12:07:26.172Z","2.30.3-next-1607516970-e40fe00a.0":"2020-12-09T12:31:30.536Z","2.30.4-next-1607517102-836b4d74.0":"2020-12-09T12:33:43.221Z","2.30.3":"2020-12-09T13:08:42.392Z","2.30.4-next-1607523716-7c077106.0":"2020-12-09T14:24:17.081Z","2.30.4-next-1607524587-e12d6f5e.0":"2020-12-09T14:38:28.761Z","2.30.4-next-1607550472-2cf4049f.0":"2020-12-09T21:49:50.993Z","2.30.4-next-1607552312-fba7ba12.0":"2020-12-09T22:20:29.552Z","2.30.4-next-1607553436-bfe76dd6.0":"2020-12-09T22:39:17.185Z","2.30.4-next-1607555016-f51a073a.0":"2020-12-09T23:05:34.376Z","2.30.4-next-1607556592-2f08e9be.0":"2020-12-09T23:32:15.158Z","2.30.4-next-1607600861-4620c21c.0":"2020-12-10T11:49:45.051Z","2.30.4-next-1607608791-86d4d0ed.0":"2020-12-10T14:02:15.785Z","2.30.2-next-1607614386-50f42e25.0":"2020-12-10T15:35:17.850Z","2.30.4-next-1607617432-7d64068c.0":"2020-12-10T16:26:01.962Z","2.30.4-next-1607618169-7493a449.0":"2020-12-10T16:38:11.522Z","2.30.4-next-1607622444-7493a449.0":"2020-12-10T17:49:33.212Z","2.30.4-next-1607625268-8308b630.0":"2020-12-10T18:36:18.534Z","2.30.4-next-1607626288-31a80cc0.0":"2020-12-10T18:53:14.083Z","2.31.1-next-1607628041-0fadc1d3.0":"2020-12-10T19:22:32.001Z","2.30.4-next-1607628828-7e78e7a7.0":"2020-12-10T19:35:37.355Z","2.31.1-next-1607633034-ed60cc16.0":"2020-12-10T20:45:38.869Z","2.31.1-next-1607635372-9730ab60.0":"2020-12-10T21:24:42.457Z","2.30.2-next-1607636416-cd801e00.0":"2020-12-10T21:42:17.967Z","2.31.1-next-1607636756-bacb6c25.0":"2020-12-10T21:48:07.006Z","2.31.0":"2020-12-10T22:11:43.176Z","2.31.1-next-1607687730-e330ff72.0":"2020-12-11T11:57:16.760Z","2.31.1-next-1607688185-c86bc913.0":"2020-12-11T12:04:52.143Z","2.31.1-next-1607689275-e084f4d3.0":"2020-12-11T12:22:57.940Z","2.31.1-next-1607690195-8c68b079.0":"2020-12-11T12:38:54.357Z","2.31.1-next-1607690667-7a391e85.0":"2020-12-11T12:46:30.632Z","2.31.1-next-1607691240-24a96a90.0":"2020-12-11T12:55:45.904Z","2.31.1-next-1607691858-07af2548.0":"2020-12-11T13:06:04.205Z","2.31.1-next-1607696063-9f0ee0e0.0":"2020-12-11T14:16:12.122Z","2.31.1-next-1607696325-8e0e88b4.0":"2020-12-11T14:20:37.792Z","2.31.1-next-1607696470-f71f3b54.0":"2020-12-11T14:22:58.242Z","2.31.1-next-1607697018-fada1fb8.0":"2020-12-11T14:31:59.267Z","2.31.1-next-1607697051-9c6d7e71.0":"2020-12-11T14:32:54.226Z","2.31.1-next-1607698811-41ff6fb3.0":"2020-12-11T15:02:00.153Z","2.32.1-next-1607698887-456c7271.0":"2020-12-11T15:03:13.494Z","2.32.1-next-1607701421-53f9e9a6.0":"2020-12-11T15:45:33.061Z","2.32.0":"2020-12-11T16:20:04.612Z","2.32.1-next-1607704971-f29917df.0":"2020-12-11T16:44:38.390Z","2.32.1-next-1607705333-488a3532.0":"2020-12-11T16:50:54.166Z","2.32.1-next-1607705763-3e196b21.0":"2020-12-11T16:57:58.107Z","2.32.1-next-1607712516-6956b4c1.0":"2020-12-11T18:50:37.837Z","2.32.1-next-1607714702-434290d6.0":"2020-12-11T19:26:52.731Z","2.32.1-next-1607715878-061ec874.0":"2020-12-11T19:46:30.977Z","2.32.1-next-1607717334-4165be9c.0":"2020-12-11T20:10:42.613Z","2.32.1-next-1607719277-4165be9c.0":"2020-12-11T20:43:03.815Z","2.32.1-next-1607720585-71aca485.0":"2020-12-11T21:05:14.569Z","2.32.2-next-1607720658-d946f598.0":"2020-12-11T21:06:05.757Z","2.32.1":"2020-12-11T21:45:17.287Z","2.32.2-next-1607936112-dbf5842f.0":"2020-12-14T08:56:57.516Z","2.32.2-next-1607940357-a1de5a51.0":"2020-12-14T10:07:44.016Z","2.32.2-next-1607941267-c1faf96e.0":"2020-12-14T10:23:00.311Z","2.32.2-next-1607944586-973d7b0f.0":"2020-12-14T11:18:14.333Z","2.32.2-next-1607944802-6397f7a4.0":"2020-12-14T11:21:47.478Z","2.32.2-next-1607951952-15540a8c.0":"2020-12-14T13:21:18.516Z","2.32.2-next-1607952037-358f7e06.0":"2020-12-14T13:22:32.690Z","2.32.2-next-1607952972-6f121a94.0":"2020-12-14T13:37:59.370Z","2.31.1-next-1607957576-e48e52eb.0":"2020-12-14T14:55:12.538Z","2.32.2-next-1607958276-b7f6fcc7.0":"2020-12-14T15:06:39.108Z","2.31.1-next-1607958315-6f557338.0":"2020-12-14T15:07:07.025Z","2.31.1-next-1607959352-6f557338.0":"2020-12-14T15:24:45.764Z","2.32.2-next-1607960134-24b0d71c.0":"2020-12-14T15:37:11.704Z","2.32.2-next-1607961083-852bc561.0":"2020-12-14T15:53:14.185Z","2.31.1-next-1607962569-26d8e4d2.0":"2020-12-14T16:18:18.011Z","2.32.2-next-1607962772-c59ba19b.0":"2020-12-14T16:21:22.075Z","2.31.1-next-1607963703-40c18b89.0":"2020-12-14T16:37:12.352Z","2.31.1-next-1607975140-0c1c69ce.0":"2020-12-14T19:47:47.174Z","2.32.2-next-1607982223-6c0079ef.0":"2020-12-14T21:45:45.703Z","2.32.2-next-1607982888-4957c5ed.0":"2020-12-14T21:56:50.539Z","2.32.2-next-1607985622-4957c5ed.0":"2020-12-14T22:42:25.709Z","2.31.1-next-1607986904-d0d62e43.0":"2020-12-14T23:03:50.495Z","2.32.2-next-1607993767-ad0d322d.0":"2020-12-15T00:57:52.551Z","2.32.3-next-1607996913-308e4320.0":"2020-12-15T01:50:18.876Z","2.32.2-next-1608029931-07fa1aee.0":"2020-12-15T11:00:39.773Z","2.32.2-next-1608035029-2b53c85c.0":"2020-12-15T12:25:41.598Z","2.32.3-next-1608036288-c85ac393.0":"2020-12-15T12:46:52.101Z","2.32.3-next-1608036987-a4571c62.0":"2020-12-15T12:58:33.766Z","2.32.2":"2020-12-15T13:07:38.678Z","2.32.3-next-1608039440-6efd4c02.0":"2020-12-15T13:39:07.070Z","2.32.3-next-1608041026-b2847b01.0":"2020-12-15T14:05:49.244Z","2.32.3-next-1608041346-a7577626.0":"2020-12-15T14:11:23.108Z","2.32.3-next-1608042160-2ec6cb3a.0":"2020-12-15T14:24:56.552Z","2.32.3-next-1608042765-7e7a0b1c.0":"2020-12-15T14:34:44.650Z","2.32.3-next-1608042792-5ad1aad6.0":"2020-12-15T14:35:33.053Z","2.32.3-next-1608043836-1f712470.0":"2020-12-15T14:52:29.502Z","2.32.3-next-1608043916-6ffcd0e0.0":"2020-12-15T14:53:42.883Z","2.32.3-next-1608044120-8a10bb60.0":"2020-12-15T14:57:20.533Z","2.32.3-next-1608047089-c66cb524.0":"2020-12-15T15:46:54.040Z","2.32.3-next-1608047166-921e0330.0":"2020-12-15T15:48:12.717Z","2.32.3-next-1608047341-5347fa9c.0":"2020-12-15T15:51:04.693Z","2.32.3-next-1608048083-7cbe2792.0":"2020-12-15T16:03:18.115Z","2.32.3-next-1608048285-8a10bb60.0":"2020-12-15T16:06:47.906Z","2.32.3-next-1608049415-8a10bb60.0":"2020-12-15T16:25:47.417Z","2.32.3-next-1608050790-8a10bb60.0":"2020-12-15T16:48:53.388Z","2.32.3-next-1608052491-32097b1b.0":"2020-12-15T17:16:43.781Z","2.32.3-next-1608055281-cee788b4.0":"2020-12-15T18:03:25.733Z","2.32.3-next-1608057783-ccce23fa.0":"2020-12-15T18:45:14.110Z","2.33.1-next-1608061455-ddb1f2d8.0":"2020-12-15T19:46:00.114Z","2.33.1-next-1608112092-f8b6fea7.0":"2020-12-16T09:50:03.113Z","2.33.1-next-1608112638-345034cc.0":"2020-12-16T09:59:34.700Z","2.33.1-next-1608115772-3c88132b.0":"2020-12-16T10:51:18.918Z","2.33.0":"2020-12-16T11:57:22.106Z","2.33.1-next-1608120558-3c88132b.0":"2020-12-16T12:11:32.238Z","2.33.1-next-1608121221-6d09bfe4.0":"2020-12-16T12:22:08.517Z","2.33.1-next-1608125131-59df05ff.0":"2020-12-16T13:27:36.502Z","2.33.1-next-1608126216-ea30c7c2.0":"2020-12-16T13:45:24.717Z","2.33.1-next-1608126527-1c76dccb.0":"2020-12-16T13:50:32.505Z","2.33.2-next-1608128839-8f6fd916.0":"2020-12-16T14:29:09.366Z","2.33.2-next-1608130256-8f6fd916.0":"2020-12-16T14:53:11.910Z","2.33.1":"2020-12-16T15:21:58.245Z","2.33.2-next-1608135242-f0696638.0":"2020-12-16T16:16:18.970Z","2.33.2-next-1608138916-d5e9477d.0":"2020-12-16T17:17:24.976Z","2.33.2-next-1608140836-4c6a5a27.0":"2020-12-16T17:49:19.665Z","2.33.2-next-1608175365-501ce721.0":"2020-12-17T03:24:44.380Z","2.33.2-next-1608176934-e9719e27.0":"2020-12-17T03:50:40.144Z","2.33.2-next-1608200469-e61d7e58.0":"2020-12-17T10:22:59.838Z","2.33.2-next-1608201574-e61d7e58.0":"2020-12-17T10:41:41.806Z","2.33.2-next-1608203172-1031d9e1.0":"2020-12-17T11:08:19.073Z","2.33.3-next-1608204470-9f2b3b55.0":"2020-12-17T11:29:41.119Z","2.33.3-next-1608206118-be25a311.0":"2020-12-17T11:57:31.873Z","2.33.3-next-1608210925-6c0dfada.0":"2020-12-17T13:17:20.704Z","2.33.2":"2020-12-17T13:35:06.259Z","2.33.3-next-1608214108-f2be469e.0":"2020-12-17T14:10:34.157Z","2.33.3-next-1608215550-f2be469e.0":"2020-12-17T14:34:45.058Z","2.33.3-next-1608222257-f9260e66.0":"2020-12-17T16:26:25.825Z","2.33.3-next-1608222666-2c1f1b94.0":"2020-12-17T16:32:57.502Z","2.32.3-next-1608223390-4a64ae60.0":"2020-12-17T16:44:58.567Z","2.33.3-next-1608224061-8507e4b0.0":"2020-12-17T16:56:10.140Z","2.33.4-next-1608224200-7531f6ac.0":"2020-12-17T16:58:44.538Z","2.33.3":"2020-12-17T17:19:04.238Z","2.33.4-next-1608252872-8d3b9435.0":"2020-12-18T00:56:18.823Z","2.33.4-next-1608289305-33ace1f2.0":"2020-12-18T11:03:31.407Z","2.33.5-next-1608295665-a0eabebb.0":"2020-12-18T12:49:42.469Z","2.33.5-next-1608296907-a0eabebb.0":"2020-12-18T13:10:30.100Z","2.33.5-next-1608299095-45a1f58e.0":"2020-12-18T13:46:59.019Z","2.33.4":"2020-12-18T13:47:35.403Z","2.33.5-next-1608302141-80c04811.0":"2020-12-18T14:37:50.346Z","2.33.5-next-1608303377-0201f9c0.0":"2020-12-18T14:58:16.319Z","2.33.5-next-1608303515-812f4081.0":"2020-12-18T15:00:31.975Z","2.33.5-next-1608305824-f89e5e37.0":"2020-12-18T15:39:14.751Z","2.33.5-next-1608309114-d5e5c6f2.0":"2020-12-18T16:33:42.020Z","2.33.5-next-1608309537-d6372d54.0":"2020-12-18T16:40:50.881Z","2.33.5-next-1608311618-bb1bc7ae.0":"2020-12-18T17:15:57.683Z","2.33.5-next-1608316295-e478ce95.0":"2020-12-18T18:33:25.104Z","2.33.5-next-1608319923-e478ce95.0":"2020-12-18T19:34:06.110Z","2.33.5-next-1608319948-0431d01c.0":"2020-12-18T19:34:23.747Z","2.33.5-next-1608320425-0431d01c.0":"2020-12-18T19:42:34.946Z","2.33.5-next-1608323882-4c66a640.0":"2020-12-18T20:40:20.117Z","2.33.5-next-1608324861-3156623d.0":"2020-12-18T20:56:08.847Z","2.33.5-next-1608327686-05e2ed67.0":"2020-12-18T21:43:48.702Z","2.33.5-next-1608521678-583ce108.0":"2020-12-21T03:36:49.739Z","2.33.5-next-1608545000-e716a252.0":"2020-12-21T10:05:30.536Z","2.33.5-next-1608549179-a4a9fc0a.0":"2020-12-21T11:14:52.919Z","2.33.5-next-1608551757-488574eb.0":"2020-12-21T11:58:17.858Z","2.33.5-next-1608553542-f0652012.0":"2020-12-21T12:27:36.736Z","2.33.5-next-1608554053-c16a8c82.0":"2020-12-21T12:36:00.742Z","2.33.5-next-1608556530-1e98b508.0":"2020-12-21T13:17:21.005Z","2.33.5-next-1608556692-5426d52e.0":"2020-12-21T13:20:05.431Z","2.33.5-next-1608556727-0ed5e217.0":"2020-12-21T13:20:54.510Z","2.33.5-next-1608556768-3c5ab2c2.0":"2020-12-21T13:21:39.798Z","2.34.1-next-1608557236-7eb01b4b.0":"2020-12-21T13:29:05.803Z","2.34.1-next-1608557252-604a0597.0":"2020-12-21T13:29:40.795Z","2.34.0":"2020-12-21T13:32:26.996Z","2.34.1-next-1608567275-604a0597.0":"2020-12-21T16:16:33.788Z","2.34.1-next-1608567983-da91d7bd.0":"2020-12-21T16:28:42.676Z","2.34.1-next-1608574672-96b6a2d1.0":"2020-12-21T18:19:44.547Z","2.34.1-next-1608574978-80b9a077.0":"2020-12-21T18:25:02.512Z","2.34.2-next-1608577558-7f068e8c.0":"2020-12-21T19:08:06.670Z","2.34.2-next-1608579093-7f068e8c.0":"2020-12-21T19:33:33.935Z","2.34.1":"2020-12-21T20:03:02.827Z","2.34.2-next-1608582524-c27fec12.0":"2020-12-21T20:30:31.716Z","2.34.2-next-1608638583-2e360a24.0":"2020-12-22T12:05:08.618Z","2.34.1-next-1608638845-b33724ec.0":"2020-12-22T12:09:15.625Z","2.34.2-next-1608640758-0adb248b.0":"2020-12-22T12:41:03.587Z","2.34.1-next-1608641834-2d3670a2.0":"2020-12-22T12:59:03.363Z","2.34.2-next-1608646576-df6ca815.0":"2020-12-22T14:18:21.094Z","2.34.1-next-1608646688-e14b894e.0":"2020-12-22T14:20:48.473Z","2.34.2-next-1608647696-c605d79d.0":"2020-12-22T14:37:11.467Z","2.34.3-next-1608655236-63597e3f.0":"2020-12-22T16:42:16.013Z","2.34.2":"2020-12-22T17:03:18.355Z","2.34.3-next-1608657055-e827a337.0":"2020-12-22T17:13:10.522Z","2.34.3-next-1608660816-a74c132b.0":"2020-12-22T18:15:44.460Z","2.34.3-next-1608660895-67834941.0":"2020-12-22T18:16:53.351Z","2.34.3-next-1608661233-7d1655c6.0":"2020-12-22T18:22:48.151Z","2.34.3-next-1608661416-4b69d8a0.0":"2020-12-22T18:25:46.751Z","2.34.3-next-1608661567-22de7542.0":"2020-12-22T18:28:30.144Z","2.34.3-next-1608664432-25bdc688.0":"2020-12-22T19:15:58.990Z","2.34.3-next-1608664547-786beb6a.0":"2020-12-22T19:18:02.993Z","2.35.1-next-1608668211-5516a971.0":"2020-12-22T20:18:46.700Z","2.35.0":"2020-12-22T20:23:35.802Z","2.35.1-next-1608713168-5de4c05c.0":"2020-12-23T08:48:00.636Z","2.35.1-next-1608721052-c42cf456.0":"2020-12-23T10:59:29.887Z","2.35.1-next-1608721086-64201d55.0":"2020-12-23T11:00:26.642Z","2.35.1-next-1608722547-b43f53c6.0":"2020-12-23T11:24:37.485Z","2.35.1-next-1608731993-cd4a9f2d.0":"2020-12-23T14:02:02.258Z","2.35.1-next-1608732307-51481f4e.0":"2020-12-23T14:07:15.816Z","2.35.1-next-1608735581-3412b538.0":"2020-12-23T15:02:11.643Z","2.35.1-next-1608736187-23834867.0":"2020-12-23T15:12:01.255Z","2.35.2-next-1608736652-721b7046.0":"2020-12-23T15:19:17.395Z","2.35.1":"2020-12-23T15:49:56.656Z","2.35.2-next-1608752410-87b4c6b1.0":"2020-12-23T19:42:13.965Z","2.35.2-next-1608753253-a5a49b6c.0":"2020-12-23T19:56:02.954Z","2.35.3-next-1608775333-cbef40b0.0":"2020-12-24T02:04:15.795Z","2.35.3-next-1608777077-cbef40b0.0":"2020-12-24T02:33:18.888Z","2.35.2":"2020-12-24T02:56:30.632Z","2.35.3-next-1609168353-5d1a8c8b.0":"2020-12-28T15:14:53.286Z","2.35.3-next-1609179863-5d1a8c8b.0":"2020-12-28T18:26:33.960Z","2.35.3-next-1609182300-5d1a8c8b.0":"2020-12-28T19:07:21.482Z","2.35.3-next-1609184825-5d1a8c8b.0":"2020-12-28T19:48:50.506Z","2.35.3-next-1609184855-54158853.0":"2020-12-28T19:49:52.209Z","2.35.3-next-1609186613-f8c91d9d.0":"2020-12-28T20:19:04.880Z","2.35.3-next-1609188692-ea33ead2.0":"2020-12-28T20:53:38.753Z","2.35.3-next-1609260701-f8c91d9d.0":"2020-12-29T16:53:52.725Z","2.36.1-next-1609339912-45a9c94d.0":"2020-12-30T14:53:58.561Z","2.36.1-next-1609341706-45a9c94d.0":"2020-12-30T15:23:54.352Z","2.36.1-next-1609341954-12f562d3.0":"2020-12-30T15:28:16.602Z","2.36.1-next-1609343079-45a9c94d.0":"2020-12-30T15:46:33.239Z","2.36.0":"2020-12-30T16:14:18.286Z","2.36.1-next-1609353465-35c2ae73.0":"2020-12-30T18:39:56.988Z","2.36.1-next-1609354696-db6c193e.0":"2020-12-30T19:00:07.935Z","2.36.2-next-1609355383-2f939fa3.0":"2020-12-30T19:11:47.491Z","2.36.2-next-1609356608-2f939fa3.0":"2020-12-30T19:32:14.923Z","2.36.1":"2020-12-30T22:02:09.914Z","2.36.2-next-1609758263-8f588ac8.0":"2021-01-04T11:06:30.966Z","2.36.2-next-1609759946-5a922564.0":"2021-01-04T11:34:50.253Z","2.36.2-next-1609764320-34b1906e.0":"2021-01-04T12:47:35.059Z","2.36.2-next-1609764928-377de9aa.0":"2021-01-04T12:57:42.877Z","2.36.2-next-1609765560-85002dc7.0":"2021-01-04T13:08:06.591Z","2.36.2-next-1609766562-c1bcf807.0":"2021-01-04T13:24:34.115Z","2.36.2-next-1609767036-34b1906e.0":"2021-01-04T13:32:49.524Z","2.36.2-next-1609767142-b07777bb.0":"2021-01-04T13:34:34.903Z","2.36.2-next-1609768294-4e0810db.0":"2021-01-04T13:53:37.938Z","2.36.2-next-1609772224-d27530b1.0":"2021-01-04T14:59:26.934Z","2.36.2-next-1609776562-649ff1a6.0":"2021-01-04T16:11:41.379Z","2.36.2-next-1609778310-35779472.0":"2021-01-04T16:40:48.219Z","2.36.2-next-1609779472-2110381f.0":"2021-01-04T17:00:22.142Z","2.36.2-next-1609780332-173bc48c.0":"2021-01-04T17:14:17.776Z","2.36.2-next-1609782322-d27530b1.0":"2021-01-04T17:48:01.777Z","2.36.2-next-1609785170-be6a6494.0":"2021-01-04T18:34:52.516Z","2.36.2-next-1609786762-f49c471b.0":"2021-01-04T19:01:17.478Z","2.36.2-next-1609786819-e88a7e2b.0":"2021-01-04T19:02:34.436Z","2.36.2-next-1609788058-22ecbc9a.0":"2021-01-04T19:22:51.561Z","2.36.2-next-1609788567-7af451ee.0":"2021-01-04T19:31:40.729Z","2.36.2-next-1609788611-dbbc4217.0":"2021-01-04T19:32:02.390Z","2.36.2-next-1609788700-c3f154de.0":"2021-01-04T19:34:23.281Z","2.36.2-next-1609807904-be1239fa.0":"2021-01-05T00:54:00.986Z","2.36.2-next-1609837080-490e20ee.0":"2021-01-05T09:00:11.537Z","2.36.2-next-1609841654-ff67b460.0":"2021-01-05T10:16:08.870Z","2.36.2-next-1609845820-70f0ee96.0":"2021-01-05T11:25:50.793Z","2.36.2-next-1609846275-490e20ee.0":"2021-01-05T11:33:33.433Z","2.36.2-next-1609847117-5352652a.0":"2021-01-05T11:47:27.713Z","2.36.2-next-1609847217-9d91e49a.0":"2021-01-05T11:49:15.330Z","2.36.2-next-1609847271-c447dd68.0":"2021-01-05T11:49:58.640Z","2.36.2-next-1609848771-e9e63405.0":"2021-01-05T12:14:40.947Z","2.36.2-next-1609851992-8e3ce2a6.0":"2021-01-05T13:08:23.985Z","2.36.2-next-1609852368-d37eaac4.0":"2021-01-05T13:14:53.190Z","2.36.2-next-1609853584-45c51d9b.0":"2021-01-05T13:34:58.467Z","2.36.2-next-1609853649-41782c04.0":"2021-01-05T13:36:18.904Z","2.36.2-next-1609854293-8e3ce2a6.0":"2021-01-05T13:47:04.166Z","2.36.2-next-1609855613-b9796a4c.0":"2021-01-05T14:09:05.472Z","2.36.2-next-1609855697-6dfcc08a.0":"2021-01-05T14:10:08.329Z","2.36.2-next-1609856853-c74ae068.0":"2021-01-05T14:29:36.226Z","2.36.2-next-1609857536-8ed169aa.0":"2021-01-05T14:40:47.778Z","2.36.2-next-1609857826-8e3157b6.0":"2021-01-05T14:46:07.476Z","2.36.2-next-1609858005-106be636.0":"2021-01-05T14:48:40.979Z","2.36.2-next-1609859719-07fa94ab.0":"2021-01-05T15:17:50.754Z","2.36.2-next-1609860132-de7da4a4.0":"2021-01-05T15:24:22.852Z","2.36.2-next-1609860205-729190e5.0":"2021-01-05T15:25:14.348Z","2.36.2-next-1609860209-7570eb1c.0":"2021-01-05T15:25:31.888Z","2.36.2-next-1609860971-acc34b9c.0":"2021-01-05T15:38:21.864Z","2.36.2-next-1609865823-1db5c4f4.0":"2021-01-05T16:59:10.259Z","2.36.2-next-1609871980-48c894c0.0":"2021-01-05T18:41:41.065Z","2.36.2-next-1609872133-13d2cbae.0":"2021-01-05T18:44:27.505Z","2.36.2-next-1609872963-e3b05a7b.0":"2021-01-05T18:58:14.741Z","2.36.2-next-1609872994-a5d5fc32.0":"2021-01-05T18:58:41.866Z","2.36.2-next-1609873075-0d49a037.0":"2021-01-05T18:59:51.707Z","2.36.2-next-1609873233-0915300b.0":"2021-01-05T19:02:28.347Z","2.36.2-next-1609873237-5d6cf7b4.0":"2021-01-05T19:02:56.644Z","2.36.2-next-1609879788-e1f2cfc4.0":"2021-01-05T20:52:14.260Z","2.37.1-next-1609923256-54216903.0":"2021-01-06T08:56:26.349Z","2.37.0":"2021-01-06T08:59:55.202Z","2.37.1-next-1609928096-8b395e64.0":"2021-01-06T10:17:13.806Z","2.37.1-next-1609928261-a5d5aa64.0":"2021-01-06T10:19:49.284Z","2.37.1-next-1609929467-1a33f113.0":"2021-01-06T10:40:12.815Z","2.37.1-next-1609931011-18cb286e.0":"2021-01-06T11:05:49.024Z","2.37.1-next-1609933315-09e01ee7.0":"2021-01-06T11:43:46.009Z","2.37.1-next-1609933978-932ebc06.0":"2021-01-06T11:55:12.858Z","2.37.1-next-1609936179-d65f6b9f.0":"2021-01-06T12:31:42.728Z","2.37.2-next-1609936396-59417961.0":"2021-01-06T12:35:23.467Z","2.37.1":"2021-01-06T13:20:45.267Z","2.37.2-next-1609939303-947b656b.0":"2021-01-06T13:23:26.275Z","2.37.2-next-1609940770-d567574f.0":"2021-01-06T13:48:05.972Z","2.37.2-next-1609943014-03296cee.0":"2021-01-06T14:25:28.251Z","2.37.2-next-1609943714-4f1f2b2a.0":"2021-01-06T14:37:08.767Z","2.37.2-next-1609944019-83616c40.0":"2021-01-06T14:42:13.961Z","2.37.2-next-1609952817-9c95008a.0":"2021-01-06T17:09:04.934Z","2.37.2-next-1609953814-5a75e404.0":"2021-01-06T17:25:22.426Z","2.37.2-next-1609955030-a5844b51.0":"2021-01-06T17:45:51.121Z","2.37.2-next-1609955304-9170f396.0":"2021-01-06T17:50:30.100Z","2.37.2-next-1609956119-5d9480eb.0":"2021-01-06T18:03:55.359Z","2.37.2-next-1609961856-44607629.0":"2021-01-06T19:39:29.127Z","2.37.2-next-1609963301-4f1f2b2a.0":"2021-01-06T20:03:58.422Z","2.37.2-next-1609966044-f3935d08.0":"2021-01-06T20:49:13.961Z","2.37.2-next-1609969301-1f04b787.0":"2021-01-06T21:43:55.103Z","2.37.2-next-1609972133-91236735.0":"2021-01-06T22:30:46.163Z","2.37.2-next-1610016235-e374141c.0":"2021-01-07T10:46:09.827Z","2.37.2-next-1610016633-dd69919f.0":"2021-01-07T10:52:38.191Z","2.37.2-next-1610017546-cb4d18a8.0":"2021-01-07T11:08:18.432Z","2.37.2-next-1610019842-743f4a14.0":"2021-01-07T11:46:14.446Z","2.37.2-next-1610020705-ebd8272c.0":"2021-01-07T12:00:34.752Z","2.37.3-next-1610023337-59e72c19.0":"2021-01-07T12:44:13.173Z","2.37.2":"2021-01-07T12:50:13.629Z","2.37.3-next-1610026220-12874458.0":"2021-01-07T13:32:28.265Z","2.37.3-next-1610028043-5b690215.0":"2021-01-07T14:02:59.328Z","2.37.3-next-1610028210-894a1eba.0":"2021-01-07T14:05:27.887Z","2.37.3-next-1610029354-a9cfb447.0":"2021-01-07T14:24:47.622Z","2.37.3-next-1610038994-8d640126.0":"2021-01-07T17:05:25.633Z","2.37.3-next-1610042634-545f8fa7.0":"2021-01-07T18:05:49.424Z","2.37.3-next-1610042728-22ce179a.0":"2021-01-07T18:07:47.517Z","2.37.3-next-1610043956-ffd00afd.0":"2021-01-07T18:27:45.711Z","2.37.3-next-1610044087-6759e43f.0":"2021-01-07T18:30:00.451Z","2.37.3-next-1610044204-545f8fa7.0":"2021-01-07T18:32:28.440Z","2.37.3-next-1610046738-ffd00afd.0":"2021-01-07T19:14:07.839Z","2.37.3-next-1610047463-ccbfacbd.0":"2021-01-07T19:26:25.751Z","2.37.3-next-1610049298-d6ed1e81.0":"2021-01-07T19:57:14.556Z","2.37.3-next-1610049394-72bf35f9.0":"2021-01-07T19:58:20.741Z","2.37.3-next-1610054495-1a29e48a.0":"2021-01-07T21:23:38.329Z","2.37.3-next-1610054618-72bf35f9.0":"2021-01-07T21:25:50.470Z","2.37.3-next-1610097679-7e177d32.0":"2021-01-08T09:23:44.590Z","2.37.3-next-1610101938-92f5851e.0":"2021-01-08T10:34:03.562Z","2.37.3-next-1610103239-5063b792.0":"2021-01-08T10:56:15.317Z","2.37.3-next-1610106325-345f8c0a.0":"2021-01-08T11:47:25.847Z","2.37.3-next-1610108509-17db7ec5.0":"2021-01-08T12:23:59.189Z","2.37.3-next-1610110107-b8b3c2e6.0":"2021-01-08T12:50:44.412Z","2.37.3-next-1610110295-602dda2d.0":"2021-01-08T12:53:43.717Z","2.37.3-next-1610111677-114dd3b1.0":"2021-01-08T13:17:03.724Z","2.37.3-next-1610111788-7b69e5a7.0":"2021-01-08T13:18:42.734Z","2.38.1-next-1610114597-4a7664a7.0":"2021-01-08T14:05:33.920Z","2.38.1-next-1610115336-83f84839.0":"2021-01-08T14:17:55.997Z","2.38.1-next-1610115776-abbe1397.0":"2021-01-08T14:25:03.063Z","2.38.0":"2021-01-08T14:34:45.278Z","2.38.2-next-1610116516-6aa33fa8.0":"2021-01-08T14:37:35.123Z","2.38.2-next-1610117076-2d98ad2a.0":"2021-01-08T14:46:29.634Z","2.38.1":"2021-01-08T14:57:59.604Z","2.38.2-next-1610118532-8be4ae4b.0":"2021-01-08T15:10:59.775Z","2.38.2-next-1610120295-1bbe5725.0":"2021-01-08T15:40:10.030Z","2.38.2-next-1610121100-0a999978.0":"2021-01-08T15:53:49.795Z","2.38.2-next-1610121307-9e46fe6a.0":"2021-01-08T15:57:17.048Z","2.38.2-next-1610122542-a4a1292a.0":"2021-01-08T16:18:01.502Z","2.38.2-next-1610124430-6b3d570d.0":"2021-01-08T16:49:15.459Z","2.38.2-next-1610127424-a449f5a3.0":"2021-01-08T17:38:58.700Z","2.38.2-next-1610129843-a449f5a3.0":"2021-01-08T18:19:28.902Z","2.38.2-next-1610132867-037bb31c.0":"2021-01-08T19:09:42.298Z","2.39.1-next-1610132984-05f88d31.0":"2021-01-08T19:11:35.646Z","2.39.0":"2021-01-08T19:16:38.457Z","2.39.1-next-1610357692-716cc09b.0":"2021-01-11T09:36:48.564Z","2.39.1-next-1610365307-a8ee896b.0":"2021-01-11T11:43:39.043Z","2.39.2-next-1610366040-85a1a6c6.0":"2021-01-11T11:55:46.764Z","2.39.1":"2021-01-11T12:00:28.136Z","2.39.2-next-1610367601-eb228fd6.0":"2021-01-11T12:21:54.199Z","2.39.2-next-1610368698-f25e1d08.0":"2021-01-11T12:40:21.614Z","2.39.2-next-1610369344-08a510ec.0":"2021-01-11T12:50:58.074Z","2.39.2-next-1610369583-1af7f612.0":"2021-01-11T12:55:17.406Z","2.39.2-next-1610369634-d80c51ab.0":"2021-01-11T12:55:44.309Z","2.39.2-next-1610372310-9d74c31e.0":"2021-01-11T13:40:59.543Z","2.39.3-next-1610372389-f2a20d9f.0":"2021-01-11T13:41:41.676Z","2.39.2":"2021-01-11T13:56:43.090Z","2.39.3-next-1610373773-67de61b5.0":"2021-01-11T14:04:57.303Z","2.39.3-next-1610375533-e2371fe0.0":"2021-01-11T14:34:20.642Z","2.39.3-next-1610376118-702f5aaf.0":"2021-01-11T14:43:47.731Z","2.39.4-next-1610376834-75a39ea7.0":"2021-01-11T14:56:12.186Z","2.39.4-next-1610377425-3d4ed63a.0":"2021-01-11T15:05:50.008Z","2.39.3":"2021-01-11T15:11:00.769Z","2.39.4-next-1610381328-f32db9ad.0":"2021-01-11T16:10:44.333Z","2.39.4-next-1610387919-d96b22fa.0":"2021-01-11T18:00:34.581Z","2.39.4-next-1610398806-cc080287.0":"2021-01-11T21:02:14.168Z","2.39.4-next-1610445230-0bac9898.0":"2021-01-12T09:55:47.000Z","2.39.4-next-1610446358-0bac9898.0":"2021-01-12T10:14:30.488Z","2.39.4-next-1610454348-0bac9898.0":"2021-01-12T12:28:00.733Z","2.39.4-next-1610458048-35730d9f.0":"2021-01-12T13:29:44.484Z","2.39.4-next-1610461943-ceff7603.0":"2021-01-12T14:34:34.387Z","2.39.4-next-1610462423-4268d45c.0":"2021-01-12T14:42:12.741Z","2.39.4-next-1610539074-999d50e0.0":"2021-01-13T11:59:46.060Z","2.39.4-next-1610540266-024b9151.0":"2021-01-13T12:19:38.725Z","2.39.4-next-1610540359-5a18d3bc.0":"2021-01-13T12:21:12.438Z","2.39.4-next-1610540589-72385396.0":"2021-01-13T12:24:59.948Z","2.39.4-next-1610541051-49dd6b9c.0":"2021-01-13T12:33:13.371Z","2.39.4-next-1610541612-1a90c150.0":"2021-01-13T12:42:25.171Z","2.39.4-next-1610542475-49dd6b9c.0":"2021-01-13T12:56:28.972Z","2.40.1-next-1610542522-7fe21e49.0":"2021-01-13T12:57:17.747Z","2.40.0":"2021-01-13T13:01:19.306Z","2.40.1-next-1610543905-304a3166.0":"2021-01-13T13:20:20.610Z","2.40.1-next-1610543937-89887a95.0":"2021-01-13T13:20:51.842Z","2.40.1-next-1610548543-89887a95.0":"2021-01-13T14:38:11.562Z","2.40.1-next-1610552674-304a3166.0":"2021-01-13T15:47:05.592Z","2.40.1-next-1610644713-9618ddfc.0":"2021-01-14T17:20:29.430Z","2.40.1-next-1610715401-7357d98e.0":"2021-01-15T12:58:58.793Z","2.40.1-next-1610716855-7357d98e.0":"2021-01-15T13:23:03.914Z","2.40.1-next-1610718281-7357d98e.0":"2021-01-15T13:46:32.150Z","2.40.1-next-1610718521-6b49f4e5.0":"2021-01-15T13:50:42.114Z","2.40.1-next-1610720143-6b49f4e5.0":"2021-01-15T14:17:40.598Z","2.40.1-next-1610724444-6b49f4e5.0":"2021-01-15T15:29:16.580Z","2.40.1-next-1610725487-f09db761.0":"2021-01-15T15:46:39.123Z","2.40.1-next-1610726420-f09db761.0":"2021-01-15T16:02:13.962Z","2.40.1-next-1610969850-4e588064.0":"2021-01-18T11:39:19.718Z","2.40.1-next-1610974394-4ddf6baa.0":"2021-01-18T12:55:34.039Z","2.40.1-next-1610974608-8234820c.0":"2021-01-18T12:58:50.803Z","2.40.1-next-1610980521-28d48dae.0":"2021-01-18T14:37:24.252Z","2.40.1-next-1610980568-4e588064.0":"2021-01-18T14:37:58.579Z","2.40.1-next-1610981719-d6c11efc.0":"2021-01-18T14:57:35.049Z","2.40.1-next-1610983103-1e81b81b.0":"2021-01-18T15:20:32.002Z","2.40.1-next-1610983877-ecef63e8.0":"2021-01-18T15:33:15.970Z","2.40.1-next-1610984479-7f05b466.0":"2021-01-18T15:43:01.545Z","2.40.2-next-1610985752-243dfbfb.0":"2021-01-18T16:04:26.173Z","2.40.1":"2021-01-18T17:31:59.082Z","2.40.2-next-1611061883-632a8662.0":"2021-01-19T13:13:15.367Z","2.40.2-next-1611064902-632a8662.0":"2021-01-19T14:03:35.794Z","2.40.2-next-1611066255-8dc0e884.0":"2021-01-19T14:26:44.423Z","2.40.1-next-1611144510-f09db761.0":"2021-01-20T12:10:27.688Z","2.40.2-next-1611146337-5f2c3b54.0":"2021-01-20T12:40:54.836Z","2.40.2-next-1611146576-7e313222.0":"2021-01-20T12:44:47.298Z","2.40.2-next-1611146603-34453e00.0":"2021-01-20T12:45:30.734Z","2.40.2-next-1611146947-fdf3916b.0":"2021-01-20T12:51:14.639Z","2.40.1-next-1611147700-f09db761.0":"2021-01-20T13:03:31.412Z","2.40.1-next-1611148807-f09db761.0":"2021-01-20T13:22:04.819Z","2.40.2-next-1611149840-20639dac.0":"2021-01-20T13:39:18.862Z","2.40.2-next-1611150078-7e313222.0":"2021-01-20T13:43:27.902Z","2.40.2-next-1611152142-20639dac.0":"2021-01-20T14:18:01.081Z","2.40.2-next-1611154267-7a34a45c.0":"2021-01-20T14:53:00.371Z","2.40.2-next-1611154703-20639dac.0":"2021-01-20T15:00:16.819Z","2.40.2-next-1611158294-c45d3039.0":"2021-01-20T16:00:07.888Z","2.40.2-next-1611159195-f52a71ce.0":"2021-01-20T16:15:27.267Z","2.40.2-next-1611162369-d4c92ee4.0":"2021-01-20T17:08:01.038Z","2.40.2-next-1611174352-d4c92ee4.0":"2021-01-20T20:27:59.115Z","2.40.2-next-1611175950-5e654544.0":"2021-01-20T20:54:40.516Z","2.40.2-next-1611177481-fa11de7c.0":"2021-01-20T21:20:13.689Z","2.40.2-next-1611227928-fa11de7c.0":"2021-01-21T11:21:04.545Z","2.40.2-next-1611231566-68356b1b.0":"2021-01-21T12:21:16.772Z","2.40.2-next-1611232803-7160b394.0":"2021-01-21T12:41:51.450Z","2.40.2-next-1611240510-9baa9c6c.0":"2021-01-21T14:50:29.948Z","2.40.3-next-1611240591-9f1f9596.0":"2021-01-21T14:51:44.259Z","2.40.2":"2021-01-21T14:56:40.348Z","2.40.3-next-1611320177-b8db6c58.0":"2021-01-22T12:58:10.444Z","2.40.3-next-1611320473-ca01cbc0.0":"2021-01-22T13:03:20.763Z","2.40.3-next-1611323008-819f5cc7.0":"2021-01-22T13:45:28.237Z","2.40.3-next-1611343469-8ae5672b.0":"2021-01-22T19:26:22.351Z","2.40.3-next-1611345209-8ae5672b.0":"2021-01-22T19:55:27.008Z","2.40.3-next-1611576532-2bdc4227.0":"2021-01-25T12:11:05.314Z","2.40.3-next-1611576922-b8b34a3e.0":"2021-01-25T12:17:29.217Z","2.40.3-next-1611581069-38f31a92.0":"2021-01-25T13:26:43.495Z","2.41.1-next-1611583271-16c9273d.0":"2021-01-25T14:02:55.453Z","2.41.0":"2021-01-25T14:42:01.939Z","2.41.1-next-1611657751-e6b92987.0":"2021-01-26T10:44:44.472Z","2.41.1-next-1611750444-e6b92987.0":"2021-01-27T12:29:19.702Z","2.41.1-next-1611755596-87b809b2.0":"2021-01-27T13:55:16.418Z","2.41.1-next-1611757088-9943cab3.0":"2021-01-27T14:20:17.224Z","2.41.1-next-1611783054-0c4f0e03.0":"2021-01-27T21:33:03.108Z","2.41.1-next-1611787262-fb6ec9b9.0":"2021-01-27T22:42:55.484Z","2.41.1-next-1611789678-5b248d7e.0":"2021-01-27T23:23:10.813Z","2.41.1-next-1611790562-a40852b9.0":"2021-01-27T23:37:51.831Z","2.41.1-next-1611794089-34cb79ca.0":"2021-01-28T00:36:42.171Z","2.41.1-next-1611829606-fb6ec9b9.0":"2021-01-28T10:28:35.130Z","2.41.1-next-1611843432-13e74421.0":"2021-01-28T14:19:29.723Z","2.41.1-next-1611845563-d86e5de9.0":"2021-01-28T14:54:38.432Z","2.41.1-next-1611848320-129049b1.0":"2021-01-28T15:41:08.068Z","2.41.1-next-1611848480-2d556237.0":"2021-01-28T15:43:38.832Z","2.41.1-next-1611848860-346d6daf.0":"2021-01-28T15:50:14.183Z","2.41.1-next-1611854398-4aea7e11.0":"2021-01-28T17:21:55.144Z","2.41.1-next-1611862709-29a6519a.0":"2021-01-28T19:40:43.727Z","2.41.1-next-1611911942-39183f2a.0":"2021-01-29T09:21:16.701Z","2.41.1-next-1611919529-5dc24d81.0":"2021-01-29T11:27:36.723Z","2.41.1-next-1611927661-23a8bfd0.0":"2021-01-29T13:43:14.356Z","2.41.1-next-1611928258-a7ec2bed.0":"2021-01-29T13:53:14.176Z","2.41.2-next-1611928539-648c6030.0":"2021-01-29T13:57:48.010Z","2.41.2-next-1611930008-fc8ab03d.0":"2021-01-29T14:22:02.367Z","2.41.1":"2021-01-29T14:45:39.179Z","2.41.2-next-1611932601-ff67f74f.0":"2021-01-29T15:05:14.338Z","2.41.2-next-1611933701-ff67f74f.0":"2021-01-29T15:23:33.727Z","2.41.2-next-1611934904-b01ac067.0":"2021-01-29T15:43:36.353Z","2.41.1-next-1611935169-4a9be922.0":"2021-01-29T15:47:54.535Z","2.41.1-next-1611936603-c826a871.0":"2021-01-29T16:11:55.984Z","2.41.1-next-1611938712-ce2accc7.0":"2021-01-29T16:47:25.348Z","2.41.1-next-1611941496-dfc95ffb.0":"2021-01-29T17:33:58.681Z","2.41.2-next-1612173624-263ecdec.0":"2021-02-01T10:02:17.979Z","2.41.2-next-1612179540-0b25a8b2.0":"2021-02-01T11:40:52.771Z","2.41.2-next-1612179635-85b3932b.0":"2021-02-01T11:42:43.722Z","2.41.2-next-1612231460-025bc5f8.0":"2021-02-02T02:06:36.651Z","2.41.2-next-1612267894-025bc5f8.0":"2021-02-02T12:13:42.806Z","2.41.2-next-1612268805-85b3932b.0":"2021-02-02T12:28:54.692Z","2.41.2-next-1612270071-9d683d24.0":"2021-02-02T12:50:17.518Z","2.41.2-next-1612270317-50f72cbd.0":"2021-02-02T12:54:05.879Z","2.41.2-next-1612273953-0cef40a8.0":"2021-02-02T13:54:42.133Z","2.41.2-next-1612276423-a82ca504.0":"2021-02-02T14:35:52.371Z","2.41.2-next-1612277875-ef40374a.0":"2021-02-02T15:00:14.184Z","2.41.2-next-1612286102-bff19572.0":"2021-02-02T17:17:29.015Z","2.41.2-next-1612289218-28ceaf36.0":"2021-02-02T18:09:02.328Z","2.41.2-next-1612290377-28ceaf36.0":"2021-02-02T18:28:08.278Z","2.41.2-next-1612290457-f327860c.0":"2021-02-02T18:29:30.009Z","2.41.2-next-1612290604-8ef9162d.0":"2021-02-02T18:32:14.025Z","2.41.2-next-1612291569-8776ec30.0":"2021-02-02T18:48:14.548Z","2.41.2-next-1612351532-0ee4dd00.0":"2021-02-03T11:27:48.434Z","2.41.2-next-1612351607-64b27ba5.0":"2021-02-03T11:28:46.259Z","2.41.2-next-1612354766-23faeba8.0":"2021-02-03T12:21:46.079Z","2.41.2-next-1612356339-9a9b1b23.0":"2021-02-03T12:47:47.261Z","2.41.2-next-1612356417-70d102fb.0":"2021-02-03T12:49:16.084Z","2.41.2-next-1612359260-a3c6e28c.0":"2021-02-03T13:36:35.871Z","2.41.2-next-1612359443-27fa1a57.0":"2021-02-03T13:39:21.097Z","2.41.2-next-1612361322-a3c6e28c.0":"2021-02-03T14:10:52.929Z","2.41.2-next-1612363251-80de88fc.0":"2021-02-03T14:43:08.227Z","2.42.1-next-1612364611-e263ef8d.0":"2021-02-03T15:05:45.679Z","2.42.1-next-1612364768-cc897ed9.0":"2021-02-03T15:08:25.047Z","2.42.1-next-1612374953-cc897ed9.0":"2021-02-03T17:58:11.566Z","2.42.1-next-1612375734-9e6f1b0d.0":"2021-02-03T18:11:08.535Z","2.42.1-next-1612375968-5ac963f0.0":"2021-02-03T18:14:47.316Z","2.42.0":"2021-02-03T18:51:05.730Z","2.42.1-next-1612394810-d380b62c.0":"2021-02-03T23:29:24.193Z","2.42.1-next-1612437293-5ac963f0.0":"2021-02-04T11:16:56.277Z","2.42.1-next-1612437819-8fd5f5a3.0":"2021-02-04T11:26:17.657Z","2.42.1-next-1612438697-23541602.0":"2021-02-04T11:40:38.405Z","2.42.1-next-1612441950-e0f0fc1c.0":"2021-02-04T12:34:23.270Z","2.42.1-next-1612444959-92f162f7.0":"2021-02-04T13:24:36.592Z","2.42.1-next-1612445371-e5cbb15e.0":"2021-02-04T13:31:38.358Z","2.42.1-next-1612445648-1fc3b936.0":"2021-02-04T13:36:31.869Z","2.42.1-next-1612446878-5a7562c7.0":"2021-02-04T13:56:44.127Z","2.42.2-next-1612447260-a2ba8aa2.0":"2021-02-04T14:03:12.627Z","2.42.1":"2021-02-04T14:07:03.266Z","2.42.2-next-1612447843-e0354e82.0":"2021-02-04T14:13:03.924Z","2.42.2-next-1612462405-e13b7e97.0":"2021-02-04T18:15:37.916Z","2.42.2-next-1612520980-6d1dd81d.0":"2021-02-05T10:31:40.629Z","2.42.2-next-1612522696-9d0b610f.0":"2021-02-05T11:00:13.336Z","2.42.2-next-1612524895-c9d3d2e2.0":"2021-02-05T11:36:55.645Z","2.42.2-next-1612525547-63b8049f.0":"2021-02-05T11:47:51.659Z","2.42.2-next-1612526159-fad91765.0":"2021-02-05T11:58:02.677Z","2.42.2-next-1612528078-02cc36ae.0":"2021-02-05T12:30:03.794Z","2.42.2-next-1612531092-91442273.0":"2021-02-05T13:20:06.659Z","2.42.2-next-1612542066-c79b6c97.0":"2021-02-05T16:23:14.178Z","2.42.2-next-1612546129-c79b6c97.0":"2021-02-05T17:30:51.813Z","2.43.1-next-1612547925-3537e3b3.0":"2021-02-05T18:00:26.503Z","2.43.0":"2021-02-05T18:28:40.342Z","2.43.1-next-1612792570-6d12ac9a.0":"2021-02-08T14:00:31.829Z","2.43.1-next-1612793310-5c370ae6.0":"2021-02-08T14:12:39.336Z","2.43.1-next-1612809227-e3305425.0":"2021-02-08T18:37:33.586Z","2.43.1-next-1612813218-711acd5c.0":"2021-02-08T19:45:15.586Z","2.43.1-next-1612815592-805d2d41.0":"2021-02-08T20:24:30.127Z","2.44.1-next-1612815628-a277571f.0":"2021-02-08T20:24:58.923Z","2.44.0":"2021-02-08T21:13:56.527Z","2.44.1-next-1612875287-515a915b.0":"2021-02-09T12:59:05.295Z","2.44.1-next-1612881360-87a0c00d.0":"2021-02-09T14:39:59.208Z","2.44.1-next-1612881814-d5dd2e0c.0":"2021-02-09T14:47:26.988Z","2.44.1-next-1612895131-4361e71d.0":"2021-02-09T18:29:38.275Z","2.44.1-next-1612898947-7a0a2a47.0":"2021-02-09T19:32:31.023Z","2.44.1-next-1612901435-07e59e1b.0":"2021-02-09T20:14:27.452Z","2.44.1":"2021-02-09T20:14:57.416Z","2.44.2-next-1612901535-ab64c39d.0":"2021-02-09T20:16:34.439Z","2.44.2-next-1612903048-f77b7138.0":"2021-02-09T20:40:54.276Z","2.44.2-next-1612905654-a921d501.0":"2021-02-09T21:25:18.580Z","2.44.2-next-1612907156-be16a678.0":"2021-02-09T21:50:01.187Z","2.44.3-next-1612907227-4c9be7bd.0":"2021-02-09T21:50:59.854Z","2.44.2":"2021-02-09T21:53:30.899Z","2.44.3-next-1612916720-f7c12971.0":"2021-02-10T00:29:39.144Z","2.44.3-next-1612924869-1b9499db.0":"2021-02-10T02:45:05.842Z","2.44.3-next-1612958717-c9c30dbc.0":"2021-02-10T12:09:37.533Z","2.44.3-next-1612964528-20c04862.0":"2021-02-10T13:46:16.267Z","2.44.3-next-1612967921-9a80b78c.0":"2021-02-10T14:43:12.892Z","2.44.3-next-1612984049-554f2cf5.0":"2021-02-10T19:10:56.812Z","2.44.3-next-1612985799-fb4cef45.0":"2021-02-10T19:41:12.520Z","2.44.3-next-1613052238-fa2d1e58.0":"2021-02-11T14:08:14.037Z","2.44.3-next-1613054110-fa2d1e58.0":"2021-02-11T14:40:24.268Z","2.44.3-next-1613055429-6a8ff165.0":"2021-02-11T15:01:52.453Z","2.44.3-next-1613057150-08014fda.0":"2021-02-11T15:29:40.016Z","2.44.3-next-1613057192-bb30ef56.0":"2021-02-11T15:31:06.268Z","2.44.3-next-1613064038-08014fda.0":"2021-02-11T17:24:41.757Z","2.44.3-next-1613066991-b0df6b52.0":"2021-02-11T18:13:48.185Z","2.44.3-next-1613067087-ff2dc9e5.0":"2021-02-11T18:15:26.645Z","2.44.3-next-1613067142-06cb6d53.0":"2021-02-11T18:16:43.500Z","2.44.3-next-1613078877-3a886cd0.0":"2021-02-11T21:32:21.318Z","2.44.3-next-1613081613-6b553f39.0":"2021-02-11T22:18:01.812Z","2.44.3-next-1613081745-5c8b4e67.0":"2021-02-11T22:19:56.938Z","2.45.1-next-1613085564-b8188f71.0":"2021-02-11T23:23:38.063Z","2.45.0":"2021-02-11T23:47:22.538Z","2.45.1-next-1613129416-327325b1.0":"2021-02-12T11:34:51.100Z","2.45.1-next-1613130108-f576c2dc.0":"2021-02-12T11:45:51.485Z","2.45.1-next-1613131797-23e16f46.0":"2021-02-12T12:13:27.708Z","2.45.1-next-1613131767-2a2f1af7.0":"2021-02-12T12:13:49.796Z","2.45.1-next-1613131853-50ba0438.0":"2021-02-12T12:15:05.548Z","2.45.1-next-1613132676-78ddbd7d.0":"2021-02-12T12:29:08.144Z","2.45.1-next-1613132850-bb59023a.0":"2021-02-12T12:31:02.259Z","2.45.1-next-1613136284-bf45f952.0":"2021-02-12T13:29:10.948Z","2.45.1-next-1613140344-096c11c2.0":"2021-02-12T14:36:55.770Z","2.45.1-next-1613153741-ee225705.0":"2021-02-12T18:19:56.222Z","2.45.1-next-1613159387-57e31741.0":"2021-02-12T19:54:05.038Z","2.45.1-next-1613164441-3bef0dee.0":"2021-02-12T21:18:13.215Z","2.45.1-next-1613164562-c3da7def.0":"2021-02-12T21:20:34.688Z","2.45.2-next-1613385527-02cdbd15.0":"2021-02-15T10:43:15.532Z","2.45.2-next-1613387061-d69a83e4.0":"2021-02-15T11:09:03.869Z","2.45.1-next-1613402185-af936873.0":"2021-02-15T15:20:56.899Z","2.45.2-next-1613467763-b282e2e6.0":"2021-02-16T09:32:47.082Z","2.45.2-next-1613467730-1cd50a04.0":"2021-02-16T09:33:05.095Z","2.45.2-next-1613467867-7700b787.0":"2021-02-16T09:35:21.533Z","2.45.2-next-1613470044-4d9a689d.0":"2021-02-16T10:11:53.056Z","2.45.2-next-1613470717-77c0509d.0":"2021-02-16T10:22:27.638Z","2.45.2-next-1613472288-82892ed3.0":"2021-02-16T10:49:30.833Z","2.46.0":"2021-02-16T10:50:17.770Z","2.46.1-next-1613472397-454a94d2.0":"2021-02-16T10:50:57.392Z","2.46.1-next-1613475842-0623136a.0":"2021-02-16T11:48:15.570Z","2.46.1-next-1613476294-f7be9b0b.0":"2021-02-16T11:55:46.637Z","2.46.1-next-1613476613-81172a7d.0":"2021-02-16T12:01:06.470Z","2.46.1-next-1613477308-a4091daf.0":"2021-02-16T12:13:15.779Z","2.46.1-next-1613478956-dd392162.0":"2021-02-16T12:40:58.045Z","2.46.1-next-1613480292-fc16df83.0":"2021-02-16T13:03:14.352Z","2.46.1-next-1613482488-10d65dfb.0":"2021-02-16T13:38:34.073Z","2.46.1-next-1613484858-66a1b714.0":"2021-02-16T14:18:44.497Z","2.46.1-next-1613502013-3a8591bb.0":"2021-02-16T19:04:44.816Z","2.46.1-next-1613502365-d8742f9f.0":"2021-02-16T19:10:50.937Z","2.46.1-next-1613503630-e51a1984.0":"2021-02-16T19:31:42.145Z","2.46.1-next-1613506597-099e089e.0":"2021-02-16T20:20:59.462Z","2.46.1":"2021-02-16T20:27:50.306Z","2.46.2-next-1613507121-2f83578b.0":"2021-02-16T20:29:46.720Z","2.46.1-next-1613548642-d8742f9f.0":"2021-02-17T08:01:42.897Z","2.46.2-next-1613555470-5000ac99.0":"2021-02-17T09:55:42.771Z","2.46.2-next-1613555722-1d542a18.0":"2021-02-17T09:59:52.205Z","2.46.2-next-1613556851-49b4f1f1.0":"2021-02-17T10:18:06.288Z","2.46.2-next-1613558736-7caf1ada.0":"2021-02-17T10:49:43.165Z","2.46.2-next-1613561160-1071c8d7.0":"2021-02-17T11:30:03.565Z","2.46.2-next-1613563334-a5cc700f.0":"2021-02-17T12:06:44.160Z","2.46.2-next-1613563536-db2e3509.0":"2021-02-17T12:10:24.474Z","2.46.2-next-1613566082-30ea955e.0":"2021-02-17T12:52:56.859Z","2.46.2-next-1613566256-660ccc31.0":"2021-02-17T12:54:49.995Z","2.46.2":"2021-02-17T12:55:20.978Z","2.46.3-next-1613566400-b355a0bc.0":"2021-02-17T12:57:51.886Z","2.46.3-next-1613568896-2b8d9669.0":"2021-02-17T13:39:16.268Z","2.46.3":"2021-02-17T14:40:14.703Z","2.46.3-next-1613572600-e6c71766.0":"2021-02-17T14:41:04.650Z","2.46.4-next-1613572650-e7b6bed0.0":"2021-02-17T14:41:57.922Z","2.46.4-next-1613654729-eccb2566.0":"2021-02-18T13:29:25.817Z","2.46.4-next-1613669643-89b4938a.0":"2021-02-18T17:38:40.452Z","2.46.4-next-1613669820-e5b15ba1.0":"2021-02-18T17:41:25.415Z","2.46.5-next-1613669881-da0c0f17.0":"2021-02-18T17:42:25.028Z","2.46.5-next-1614018774-722e2a45.0":"2021-02-22T18:37:56.380Z","2.46.5-next-1614026590-ba7dba01.0":"2021-02-22T20:47:01.329Z","2.46.5":"2021-02-22T21:20:04.292Z","2.46.5-next-1614028558-f8e16b13.0":"2021-02-22T21:21:06.062Z","2.46.6-next-1614028653-5941cd80.0":"2021-02-22T21:22:32.612Z","2.46.6-next-1614031670-9fd59586.0":"2021-02-22T22:12:39.467Z","2.46.6-next-1614032371-d14b3c69.0":"2021-02-22T22:24:31.065Z","2.46.6-next-1614076076-a9ab6fee.0":"2021-02-23T10:32:49.952Z","2.46.7-next-1614076339-5c6ee841.0":"2021-02-23T10:37:07.269Z","2.46.6":"2021-02-23T10:38:15.262Z","2.46.6-next-1614076455-fdd66fdc.0":"2021-02-23T10:39:18.156Z","2.46.7-next-1614076524-db4cc33f.0":"2021-02-23T10:40:02.390Z","2.46.7":"2021-02-23T13:59:23.408Z","2.46.8-next-1614088593-496f8302.0":"2021-02-23T14:01:10.505Z","2.46.8-next-1614117045-7ae3b848.0":"2021-02-23T21:55:35.452Z","2.46.8-next-1614178072-21b025f4.0":"2021-02-24T14:52:52.799Z","2.46.8":"2021-02-24T14:53:15.585Z","2.46.9-next-1614178754-c864231f.0":"2021-02-24T15:04:16.525Z","2.46.9-next-1614278090-bbadf7bb.0":"2021-02-25T18:39:57.748Z","2.46.9-next-1614341798-e8bc2e64.0":"2021-02-26T12:21:55.138Z","2.46.9":"2021-02-26T14:15:43.882Z","2.46.9-next-1614348692-61056b85.0":"2021-02-26T14:16:49.150Z","2.46.10-next-1614348751-5e207739.0":"2021-02-26T14:17:18.762Z","2.46.10-next-1614636547-5a6a51a5.0":"2021-03-01T22:11:59.826Z","2.46.10-next-1614656181-0845175c.0":"2021-03-02T03:40:15.149Z","2.46.10-next-1614656223-c940d937.0":"2021-03-02T03:41:31.189Z","2.46.10-next-1614656234-e6a0b95e.0":"2021-03-02T03:42:08.804Z","2.46.10-next-1614693156-b489ddff.0":"2021-03-02T13:57:46.249Z","2.46.10-next-1614693598-4a8d44b2.0":"2021-03-02T14:04:46.287Z","2.46.10-next-1614708710-a27b20e5.0":"2021-03-02T18:16:37.449Z","2.46.10-next-1614717241-b863f691.0":"2021-03-02T20:38:45.026Z","2.46.10-next-1614773176-fb27856d.0":"2021-03-03T12:11:23.651Z","2.46.10-next-1614791421-d0f30452.0":"2021-03-03T17:15:48.410Z","2.46.10-next-1614800290-5b3fd33d.0":"2021-03-03T19:43:32.441Z","2.46.10-next-1614806068-4e5bf77c.0":"2021-03-03T21:19:39.594Z","2.46.10":"2021-03-03T21:20:38.114Z","2.46.11-next-1614806292-f0954ba3.0":"2021-03-03T21:23:14.973Z","2.46.11-next-1614973222-ce1e9fcb.0":"2021-03-05T19:44:12.376Z","2.46.11-next-1615185688-abcf8712.0":"2021-03-08T06:46:06.484Z","2.46.11-next-1615200283-dc588c31.0":"2021-03-08T10:49:53.367Z","2.46.11-next-1615202297-2fcaf0e9.0":"2021-03-08T11:23:18.946Z","2.46.11-next-1615213999-5fea2eb3.0":"2021-03-08T14:38:40.258Z","2.46.11-next-1615214503-c6c3790c.0":"2021-03-08T14:46:21.760Z","2.46.11-next-1615215326-e0d18c13.0":"2021-03-08T15:01:20.659Z","2.46.11-next-1615218182-126444c6.0":"2021-03-08T15:47:46.465Z","2.46.11-next-1615238363-1ab42f35.0":"2021-03-08T21:24:17.398Z","2.46.11-next-1615283163-2eeebdb1.0":"2021-03-09T09:51:34.508Z","2.46.11-next-1615289713-c3066788.0":"2021-03-09T11:40:28.040Z","2.46.11-next-1615289956-204785e8.0":"2021-03-09T11:44:29.394Z","2.46.11-next-1615289989-c7ea9f0c.0":"2021-03-09T11:45:14.156Z","2.46.11-next-1615293517-f69327d4.0":"2021-03-09T12:43:49.527Z","2.46.11-next-1615297515-104c2b2e.0":"2021-03-09T13:49:10.480Z","2.46.11-next-1615300148-4b9152fa.0":"2021-03-09T14:34:26.406Z","2.46.12-next-1615300678-59561aa3.0":"2021-03-09T14:43:17.421Z","2.46.11":"2021-03-09T17:59:32.922Z","2.46.12-next-1615364884-288b98d5.0":"2021-03-10T08:33:14.202Z","2.46.12-next-1615376785-cd4a02a4.0":"2021-03-10T11:51:02.635Z","2.46.12-next-1615464801-44ed9090.0":"2021-03-11T12:18:13.517Z","2.46.12-next-1615469960-17dcfbc9.0":"2021-03-11T13:43:27.873Z","2.46.12-next-1615470034-557f5436.0":"2021-03-11T13:45:35.146Z","2.46.12-next-1615471647-557f5436.0":"2021-03-11T14:12:46.981Z","2.46.12-next-1615551720-557f5436.0":"2021-03-12T12:27:16.657Z","2.46.12-next-1615784806-7b51d87e.0":"2021-03-15T05:10:21.882Z","2.46.12-next-1615790460-121a84f3.0":"2021-03-15T06:44:56.369Z","2.46.12-next-1615894322-3b82dea0.0":"2021-03-16T11:36:12.297Z","2.46.12-next-1615894458-9120dc72.0":"2021-03-16T11:38:48.029Z","2.46.12-next-1615894578-203ef237.0":"2021-03-16T11:41:32.075Z","2.46.12-next-1615894721-a4289e0e.0":"2021-03-16T11:44:14.807Z","2.46.12-next-1615940773-a83de87c.0":"2021-03-17T00:30:40.761Z","2.46.12-next-1615940772-a448394d.0":"2021-03-17T00:31:03.830Z","2.46.12-next-1615947584-3e4346c6.0":"2021-03-17T02:24:20.366Z","2.46.12-next-1615948732-62026afd.0":"2021-03-17T02:43:41.255Z","2.46.12-next-1615951852-dbce5a80.0":"2021-03-17T03:35:30.053Z","2.46.12-next-1615952198-60c38060.0":"2021-03-17T03:41:09.008Z","2.46.12-next-1615952220-42e38b49.0":"2021-03-17T03:41:51.360Z","2.46.12-next-1615976369-4310800e.0":"2021-03-17T10:24:01.709Z","2.46.12-next-1615988966-43a6bba8.0":"2021-03-17T13:54:04.372Z","2.46.12-next-1615992140-ed20fe49.0":"2021-03-17T14:47:41.498Z","2.46.12-next-1615992373-4310800e.0":"2021-03-17T14:51:28.607Z","2.46.12-next-1615992489-a4289e0e.0":"2021-03-17T14:53:45.989Z","2.46.12-next-1615998285-a9156483.0":"2021-03-17T16:29:23.505Z","2.46.12-next-1615998301-a4289e0e.0":"2021-03-17T16:30:28.753Z","2.46.12-next-1616000880-62985ef5.0":"2021-03-17T17:13:17.003Z","2.46.12-next-1616003176-6dc36d3d.0":"2021-03-17T17:50:45.504Z","2.46.12-next-1616005425-5feb1d3a.0":"2021-03-17T18:28:35.621Z","2.46.12-next-1616005524-f587b5bb.0":"2021-03-17T18:30:43.399Z","2.46.12-next-1616005510-60c9f43f.0":"2021-03-17T18:31:29.889Z","2.46.12-next-1616008443-60c9f43f.0":"2021-03-17T19:19:10.204Z","2.46.12-next-1616013047-3ffcf665.0":"2021-03-17T20:35:56.111Z","2.47.0":"2021-03-17T21:00:30.127Z","2.47.1-next-1616014595-de8db8d7.0":"2021-03-17T21:02:09.644Z","2.47.1-next-1616039246-0aea3f04.0":"2021-03-18T03:51:46.105Z","2.47.1-next-1616039242-bef311b3.0":"2021-03-18T03:52:19.572Z","2.47.1-next-1616056579-410ddfa6.0":"2021-03-18T08:41:31.433Z","2.47.1-next-1616069517-6e3e0aa5.0":"2021-03-18T12:17:20.263Z","2.47.1-next-1616069757-cffe4207.0":"2021-03-18T12:20:25.507Z","2.47.1-next-1616069789-ab5ea778.0":"2021-03-18T12:21:14.680Z","2.47.1-next-1616075386-898eb30a.0":"2021-03-18T13:53:45.447Z","2.47.1-next-1616075866-19bda89d.0":"2021-03-18T14:02:20.683Z","2.47.1-next-1616094204-720ebdaa.0":"2021-03-18T19:07:33.018Z","2.47.1-next-1616096371-67d963ea.0":"2021-03-18T19:45:01.494Z","2.47.1-next-1616097757-826115f5.0":"2021-03-18T20:07:21.903Z","2.47.1-next-1616097983-be28c9b7.0":"2021-03-18T20:11:50.482Z","2.47.1-next-1616099330-826115f5.0":"2021-03-18T20:34:08.100Z","2.47.1-next-1616101160-2bceadbb.0":"2021-03-18T21:04:03.523Z","2.47.1-next-1616106252-f3442a52.0":"2021-03-18T22:29:22.386Z","2.47.1-next-1616118775-2bceadbb.0":"2021-03-19T01:57:30.209Z","2.47.1-next-1616119482-ef906b13.0":"2021-03-19T02:09:14.968Z","2.47.1":"2021-03-19T03:02:06.516Z","2.47.2-next-1616122740-4c07c985.0":"2021-03-19T03:02:57.555Z","2.47.1-next-1616122745-cbf93019.0":"2021-03-19T03:04:24.040Z","2.47.3-next-1616123429-d4dee75d.0":"2021-03-19T03:15:42.667Z","2.47.3-next-1616125139-98c6cf5c.0":"2021-03-19T03:44:06.427Z","2.47.3-next-1616125747-fda2689f.0":"2021-03-19T03:53:29.415Z","2.47.2":"2021-03-19T04:03:41.334Z","2.47.3-next-1616155958-b913b614.0":"2021-03-19T12:18:46.298Z","2.47.3-next-1616157658-3797314d.0":"2021-03-19T12:45:35.493Z","2.47.3-next-1616158067-f080a7dc.0":"2021-03-19T12:53:23.191Z","2.48.1-next-1616159048-3eedb503.0":"2021-03-19T13:10:02.559Z","2.48.0":"2021-03-19T14:47:43.399Z","2.48.1-next-1616183581-7712eadb.0":"2021-03-19T19:58:52.548Z","2.48.1-next-1616184254-1f5c9227.0":"2021-03-19T20:10:01.003Z","2.48.1":"2021-03-19T20:51:51.237Z","2.48.1-next-1616186777-37a605e8.0":"2021-03-19T20:52:35.335Z","2.48.2-next-1616186902-fe84bb15.0":"2021-03-19T20:53:20.933Z","2.48.2-next-1616417535-15243a45.0":"2021-03-22T12:57:00.523Z","2.48.2-next-1616446742-921da2eb.0":"2021-03-22T21:04:30.438Z","2.48.2-next-1616447270-8042db79.0":"2021-03-22T21:13:34.999Z","2.48.2-next-1616447856-e63a95d7.0":"2021-03-22T21:23:12.535Z","2.48.2-next-1616499348-7a8e8470.0":"2021-03-23T11:41:14.476Z","2.48.2-next-1616499509-6c2abf82.0":"2021-03-23T11:44:23.991Z","2.48.2-next-1616499718-c9dd6c08.0":"2021-03-23T11:47:27.818Z","2.48.2-next-1616499724-e8b6336f.0":"2021-03-23T11:48:10.072Z","2.48.3-next-1616545702-117fc3b5.0":"2021-03-24T00:33:53.896Z","2.48.2":"2021-03-24T00:58:36.364Z","2.48.3-next-1616558303-577c3cb2.0":"2021-03-24T04:02:55.421Z","2.48.3-next-1616558335-7d1766d8.0":"2021-03-24T04:04:15.290Z","2.48.3-next-1616559231-e84cc609.0":"2021-03-24T04:19:07.436Z","2.48.3-next-1616559258-607bda4e.0":"2021-03-24T04:20:12.452Z","2.48.3-next-1616583490-09b87ec4.0":"2021-03-24T11:04:43.811Z","2.48.3-next-1616585208-09b87ec4.0":"2021-03-24T11:32:21.076Z","2.48.3-next-1616589791-1e0b0818.0":"2021-03-24T12:49:48.855Z","2.48.3-next-1616590481-cd8836e0.0":"2021-03-24T12:59:39.304Z","2.48.3-next-1616612286-c528b585.0":"2021-03-24T19:04:26.894Z","2.48.3-next-1616612830-cb2f0a52.0":"2021-03-24T19:12:25.194Z","2.48.3-next-1616674161-97579ce4.0":"2021-03-25T12:14:14.085Z","2.48.3-next-1616676832-d64b4818.0":"2021-03-25T12:59:28.854Z","2.48.3-next-1616682369-6a05080e.0":"2021-03-25T14:32:09.511Z","2.48.3-next-1616684911-faca1f4f.0":"2021-03-25T15:13:27.694Z","2.48.4-next-1616691063-820c9b56.0":"2021-03-25T16:56:11.116Z","2.48.3":"2021-03-25T17:29:40.296Z","2.48.4-next-1616701812-32e6bb55.0":"2021-03-25T19:55:30.735Z","2.48.5-next-1616703664-ab292fc3.0":"2021-03-25T20:25:36.433Z","2.48.4":"2021-03-25T20:27:41.534Z","2.48.5-next-1617068534-d4a6718e.0":"2021-03-30T01:47:44.838Z","2.48.5-next-1617105656-95482989.0":"2021-03-30T12:06:35.334Z","2.48.5-next-1617128819-585cdc01.0":"2021-03-30T18:32:11.408Z","2.48.5-next-1617129668-96c087ca.0":"2021-03-30T18:45:36.565Z","2.48.5-next-1617134589-443d3523.0":"2021-03-30T20:08:25.723Z","2.48.5-next-1617189233-8ff49114.0":"2021-03-31T11:19:28.562Z","2.48.5-next-1617190581-bbc7876a.0":"2021-03-31T11:41:59.384Z","2.48.5-next-1617191032-266592eb.0":"2021-03-31T11:49:02.187Z","2.48.5-next-1617192134-1a33ecd5.0":"2021-03-31T12:07:56.363Z","2.49.0":"2021-03-31T12:21:53.263Z","2.48.5-next-1617193056-40e3051a.0":"2021-03-31T12:23:06.535Z","2.49.1-next-1617193132-0596cd28.0":"2021-03-31T12:24:15.035Z","2.49.1-next-1617195749-017219f6.0":"2021-03-31T13:07:29.733Z","2.49.1-next-1617196474-ac6087eb.0":"2021-03-31T13:20:18.580Z","2.49.1-next-1617197145-0e16bea2.0":"2021-03-31T13:31:57.439Z","2.49.1-next-1617202781-e4cdc40b.0":"2021-03-31T15:04:17.366Z","2.49.2-next-1617203089-913471a0.0":"2021-03-31T15:11:07.654Z","2.49.2-next-1617204453-dac2f6ac.0":"2021-03-31T15:32:57.134Z","2.49.1":"2021-03-31T15:45:23.993Z","2.49.3-next-1617219745-6534da20.0":"2021-03-31T19:47:45.951Z","2.49.2":"2021-03-31T22:50:52.979Z","2.49.3-next-1617234085-699fabe6.0":"2021-03-31T23:47:37.230Z","2.49.3-next-1617236816-f232f058.0":"2021-04-01T00:32:47.705Z","2.49.3-next-1617243586-83fa4dea.0":"2021-04-01T02:25:14.788Z","2.49.3-next-1617247905-c35eb306.0":"2021-04-01T03:37:33.894Z","2.49.3-next-1617278888-99f744d8.0":"2021-04-01T12:12:54.523Z","2.49.3-next-1617283027-821b95af.0":"2021-04-01T13:22:20.408Z","2.49.3-next-1617288986-1639cce9.0":"2021-04-01T15:01:25.565Z","2.49.3-next-1617290912-197ef286.0":"2021-04-01T15:34:06.409Z","2.49.3-next-1617297771-1d444ca1.0":"2021-04-01T17:28:01.078Z","2.49.3-next-1617297959-1a5a5afa.0":"2021-04-01T17:31:54.648Z","2.49.3":"2021-04-01T18:45:04.690Z","2.49.3-next-1617302441-3d0d5e3b.0":"2021-04-01T18:46:04.196Z","2.49.4-next-1617302497-329f2fc1.0":"2021-04-01T18:46:29.394Z","2.49.4-next-1617351652-a7b8b78c.0":"2021-04-02T08:26:23.540Z","2.49.4-next-1617355356-a824b631.0":"2021-04-02T09:28:09.103Z","2.49.4":"2021-04-02T13:21:29.224Z","2.49.4-next-1617369446-7d53e914.0":"2021-04-02T13:22:24.503Z","2.49.5-next-1617369544-b8054af3.0":"2021-04-02T13:24:22.613Z","2.49.5-next-1617617643-6c94e122.0":"2021-04-05T10:18:16.413Z","2.49.5-next-1617620492-657ee70e.0":"2021-04-05T11:06:50.863Z","2.49.5-next-1617623437-b8054af3.0":"2021-04-05T11:56:28.029Z","2.49.5-next-1617705395-690a316f.0":"2021-04-06T10:41:33.162Z","2.49.5-next-1617735686-22d077f9.0":"2021-04-06T19:06:03.881Z","2.49.5-next-1617735676-8e406ba0.0":"2021-04-06T19:06:21.744Z","2.49.5-next-1617735716-3cb7f48a.0":"2021-04-06T19:07:01.975Z","2.49.5-next-1617735699-5ab49a9d.0":"2021-04-06T19:07:31.586Z","2.49.5-next-1617736046-da082c15.0":"2021-04-06T19:12:48.358Z","2.49.5-next-1617736092-da082c15.0":"2021-04-06T19:14:22.274Z","2.49.5-next-1617736156-673ca60e.0":"2021-04-06T19:15:15.946Z","2.49.5-next-1617761949-9676f0af.0":"2021-04-07T02:24:12.530Z","2.49.5-next-1617766588-cb4b75b6.0":"2021-04-07T03:41:35.688Z","2.49.5-next-1617766594-b9f01faf.0":"2021-04-07T03:41:50.775Z","2.49.5-next-1617766642-f8ab3680.0":"2021-04-07T03:43:35.920Z","2.49.5-next-1617776930-df6c0b0a.0":"2021-04-07T06:34:23.986Z","2.49.5-next-1617790600-6e8e03b8.0":"2021-04-07T10:21:38.521Z","2.49.5-next-1617795140-d7abad33.0":"2021-04-07T11:38:28.028Z","2.49.5-next-1617799221-0f914b7a.0":"2021-04-07T12:45:28.353Z","2.49.5-next-1617804986-0fafbe4f.0":"2021-04-07T14:20:56.911Z","2.50.0":"2021-04-07T14:48:57.038Z","2.49.5-next-1617806707-a59f59fb.0":"2021-04-07T14:51:24.751Z","2.50.1-next-1617806801-b9045c18.0":"2021-04-07T14:52:38.375Z","2.50.1-next-1617809320-5d4bc0d9.0":"2021-04-07T15:34:36.362Z","2.50.1-next-1617897231-14863e7a.0":"2021-04-08T15:59:06.258Z","2.50.1-next-1617897486-2d2fc9d2.0":"2021-04-08T16:04:14.112Z","2.50.1-next-1617903480-49805758.0":"2021-04-08T17:45:03.139Z","2.50.1-next-1617906973-2a48f35d.0":"2021-04-08T18:42:26.138Z","2.50.1-next-1617907979-ef368dd2.0":"2021-04-08T18:58:13.435Z","2.50.1-next-1617907995-bc8bea11.0":"2021-04-08T18:59:04.006Z","2.50.1-next-1617907981-ccefa852.0":"2021-04-08T18:59:28.467Z","2.50.1-next-1617908060-faf7f94b.0":"2021-04-08T19:00:30.380Z","2.50.1-next-1617911006-2a48f35d.0":"2021-04-08T19:48:44.427Z","2.50.1-next-1617938034-2a48f35d.0":"2021-04-09T03:19:43.029Z","2.50.1-next-1617939400-ce56b50c.0":"2021-04-09T03:41:35.967Z","2.50.1-next-1617939413-835ad4af.0":"2021-04-09T03:42:17.108Z","2.50.1-next-1617939428-2f7639c5.0":"2021-04-09T03:43:00.702Z","2.50.1-next-1617941549-9cfa5360.0":"2021-04-09T04:17:14.854Z","2.50.1-next-1617964359-8f212976.0":"2021-04-09T10:37:41.127Z","2.50.1-next-1617967120-f0831f07.0":"2021-04-09T11:24:53.691Z","2.50.1-next-1617968402-44ff8e48.0":"2021-04-09T11:45:54.813Z","2.50.1-next-1617970277-0d132c83.0":"2021-04-09T12:16:27.807Z","2.50.1-next-1617970300-b497696b.0":"2021-04-09T12:16:42.853Z","2.50.1-next-1617970409-c6a5e655.0":"2021-04-09T12:19:25.964Z","2.50.1-next-1617970460-93847529.0":"2021-04-09T12:20:37.698Z","2.50.1-next-1617970746-12d66235.0":"2021-04-09T12:24:43.695Z","2.50.1-next-1617972884-145374e6.0":"2021-04-09T12:59:47.613Z","2.50.1-next-1617978913-fecbffeb.0":"2021-04-09T14:41:15.925Z","2.51.1-next-1617981088-6c626f81.0":"2021-04-09T15:17:29.745Z","2.50.1-next-1617982261-954c308c.0":"2021-04-09T15:36:54.517Z","2.51.0":"2021-04-09T16:21:00.871Z","2.50.1-next-1617985606-33a80696.0":"2021-04-09T16:31:23.948Z","2.50.1-next-1617986021-3e6ad425.0":"2021-04-09T16:39:28.984Z","2.51.1-next-1617993256-842b76e1.0":"2021-04-09T18:39:27.174Z","2.51.1-next-1617993723-3597223b.0":"2021-04-09T18:47:34.374Z","2.51.1-next-1617995699-853d78cd.0":"2021-04-09T19:20:53.013Z","2.52.0":"2021-04-09T19:25:01.512Z","2.52.1-next-1618265595-d6fec356.0":"2021-04-12T22:18:44.851Z","2.52.2-next-1618318667-99b4b1e3.0":"2021-04-13T13:03:53.569Z","2.52.2-next-1618321097-c6e888b0.0":"2021-04-13T13:44:00.601Z","2.52.2-next-1618323417-454fc51c.0":"2021-04-13T14:22:36.118Z","2.52.2-next-1618325175-822bdc4b.0":"2021-04-13T14:50:50.754Z","2.52.1":"2021-04-13T18:51:54.739Z","2.52.2-next-1618850702-9d69cb4f.0":"2021-04-19T16:50:43.124Z","2.52.2-next-1619105866-24c93b60.0":"2021-04-22T15:42:54.051Z","2.53.1-next-1619106141-0d6fc28e.0":"2021-04-22T15:48:40.961Z","2.53.0":"2021-04-22T18:39:39.136Z","2.53.1-next-1619464206-faf15ae3.0":"2021-04-26T19:15:57.452Z","2.53.1-next-1619540720-3d071adc.0":"2021-04-27T16:31:14.463Z","2.53.1-next-1619542274-3d071adc.0":"2021-04-27T16:56:31.523Z","2.53.1-next-1619542806-88e8b9e7.0":"2021-04-27T17:05:42.388Z","2.53.1-next-1619542820-88e8b9e7.0":"2021-04-27T17:06:08.824Z","2.53.1-next-1619617676-4c97bfbe.0":"2021-04-28T13:53:34.627Z","2.53.1-next-1619623418-f6d00416.0":"2021-04-28T15:29:24.324Z","2.53.2-next-1619623598-3c4e1679.0":"2021-04-28T15:32:32.669Z","2.53.2-next-1619624498-dae4ff11.0":"2021-04-28T15:47:35.803Z","2.53.1":"2021-04-28T15:48:59.734Z","2.53.2-next-1619705672-24a3a19a.0":"2021-04-29T14:20:15.553Z","2.53.2-next-1620132361-2fba7526.0":"2021-05-04T12:52:01.124Z","2.53.2-next-1620855510-f3286a4f.0":"2021-05-12T21:44:46.637Z","2.53.2-next-1621351277-d5810a41.0":"2021-05-18T15:27:43.479Z","2.53.2-next-1621351811-799dd11c.0":"2021-05-18T15:35:39.847Z","2.53.2-next-1621354332-7167b821.0":"2021-05-18T16:17:53.422Z","2.53.2-next-1621354385-bd6852c3.0":"2021-05-18T16:18:27.308Z","2.53.2-next-1621355238-dbfeccb2.0":"2021-05-18T16:32:14.515Z","2.53.3-next-1621357960-a977e461.0":"2021-05-18T17:18:35.064Z","2.53.2":"2021-05-18T17:21:10.877Z","2.53.3-next-1622643955-ef88dadf.0":"2021-06-02T14:32:11.597Z","2.53.3-next-1622645710-3100daaa.0":"2021-06-02T15:00:23.147Z","2.53.4-next-1622645785-8c316968.0":"2021-06-02T15:01:03.656Z","2.53.3":"2021-06-02T15:13:12.745Z","2.53.5-next-1640891080-513b105dc.0":"2021-12-30T19:10:11.238Z","2.53.4":"2022-01-01T18:13:24.846Z","2.53.5-next-1641060563-3bc9c3b88.0":"2022-01-01T18:14:09.755Z","2.53.5-next-1641201434-873aac607.0":"2022-01-03T09:23:39.192Z","2.53.5-next-1641201537-c1cdb4568.0":"2022-01-03T09:24:24.219Z","2.53.5-next-1641210071-2f979ef07.0":"2022-01-03T11:47:06.050Z","2.53.5-next-1641219106-ff2936ac0.0":"2022-01-03T14:18:22.822Z","2.53.5":"2022-01-05T16:02:09.183Z","2.53.6-next-1641398325-01bf686c4.0":"2022-01-05T16:03:36.625Z","2.53.6-next-1641892929-f436f56da.0":"2022-01-11T09:27:21.186Z","2.53.7-next-1641893132-22be18a83.0":"2022-01-11T09:31:25.275Z","2.53.6":"2022-01-11T10:09:45.362Z","2.53.7-next-1641895574-4891585a6.0":"2022-01-11T10:11:47.364Z","2.53.6-next-1641895591-f1d5f1649.0":"2022-01-11T10:12:23.253Z"},"maintainers":[{"name":"moovweb-admin","email":"ops@moovweb.com"}],"description":"Core library for the [Moovweb XDN](https://developer.moovweb.com), infrastructure to run your big, dynamic website frontend and make it load in less than one second.","license":"UNLICENSED","readme":"","readmeFilename":""}